如何实现更改图标的“对话框”效果?
就象Windows中的更改图标对话框一样:
右击桌面上某一快捷方式-->属性-->”快捷方式“选项卡-->点“更改图标”按钮,这时出现“更改图标”对话框...停,我要的就是这个对话框,
这时点击“浏览”按钮,谢谢了帮我写这个的“浏览”按钮的点击事件吧。拉兄弟一把吧,呜呜呜哇~
问题点数:80、回复次数:7Top
1 楼ccrun(老妖)(www.ccrun.com)回复于 2003-12-02 14:08:15 得分 0
那个Windows中的更改图标对话框中显示图标的框是个ListBox,你是要弹出系统的那个对话框?还是要在自己的程序中实现这样的效果?Top
2 楼szwang1(小骑士)回复于 2003-12-02 14:22:34 得分 0
要弹出系统的那个对话框,我不求甚解,呵呵,只要能达到那个效果就行!
我要我要我要Top
3 楼songhtao(三十年孤独)回复于 2003-12-02 14:35:04 得分 5
做个Form模拟呀ListBox可以用TListView代替
浏览就是一个TButton点击后调用SelectDirectry函数。Top
4 楼szwang1(小骑士)回复于 2003-12-02 14:39:38 得分 0
谢谢你,成功后我会在我的程序包(1.0版已被华军软件园收录)中放上感谢之语的,并放上你的主页链接介绍,www.ccrun.com是吗?
方便的话邮箱给我也行(按你方便来),我的邮箱是szwang@163.com
2小时后我回来等好消息。急切盼望!Top
5 楼ccrun(老妖)(www.ccrun.com)回复于 2003-12-02 14:47:52 得分 0
你等着,我给你写代码去。Top
6 楼ccrun(老妖)(www.ccrun.com)回复于 2003-12-02 15:00:40 得分 75
用ListBox实现更改图标时的对话框效果:
在Form上加一个ListBox,一个Edit,一个Button,一个ImageList
主要代码如下:
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
SetWindowLong(ListBox1->Handle, GWL_EXSTYLE, 0x204);
ListBox1->Columns = ListBox1->Width / 35; //如果觉的太挤,可以将35改成40
ImageList1->Width = 32;
ImageList1->Height = 32;
ListBox1->ItemHeight = 35;
ListBox1->Style = lbOwnerDrawFixed;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ListBox1DrawItem(TWinControl *Control, int Index,
TRect &Rect, TOwnerDrawState State)
{
// 填充背景.
ListBox1->Canvas->FillRect (Rect) ;
// 画出图像.
ImageList1->Draw(ListBox1->Canvas, Rect.Left, Rect.Top, Index) ;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
TOpenDialog *dialog = new TOpenDialog(Form1);
dialog->Filter = "图标文件|*.exe;*.dll;*.ico";
if(dialog->Execute())
{
String strFileName = dialog->FileName;
HANDLE hIcon = ExtractIcon(Handle, strFileName.c_str(), -1);
if(hIcon == NULL)
ShowMessage("该文件不包含图标");
for(int i=0; i<(int)(hIcon); i++)
{
TIcon *icon = new TIcon();
icon->Handle = ExtractIcon(Handle, strFileName.c_str(), i);
ImageList1->AddIcon(icon);
delete icon;
ListBox1->Items->Add("");
}
Edit1->Text = strFileName;
}
delete dialog;
ListBox1->Invalidate();
}
//---------------------------------------------------------------------------
至于显示出来图标,选择图标的自己看着添加代码就可以了。呵呵。
源程序给你发信箱了。Good luck.Top
7 楼szwang1(小骑士)回复于 2003-12-02 20:48:57 得分 0
首先,感谢老妖
其次,对您说抱歉,这时候才结帖,你一定认为我不守信义。原因:下午不能上网,线被人掐了!!!(苦命)。请原谅,我不是故意的,交友在第一印象,但愿没给你留下不好的感觉。
给分!!
我现在就去邮箱看看去。
再次感谢,程序好后我冒昧到your page上给你个一个下载链接。
另:你的工作效率挺高的:13分钟就写好程序了呵,这段码压了我半年了哇。
Top




