频道直达 - 专题 - 新闻 - 技巧 - 组网 - 开发 - 安全 - web编程 - 图像 - 操作系统 - 数据库 - 教育 - 旅游 - 健康 - 时尚 - 驱动 - 软件 - 游戏 - 多媒体 - ERP - 讨论组

使用C++Builder制作提取图标程序

来源:yesky 作者:党峰 出处:巧巧读书 2006-01-21 进入讨论组

  您经常写程序吗?是否为没有好看的图标而发愁?现在,我们用C++Builder(以下简称CB)就可以制作一个从其他程序中提取图标的功能,并可了解非常有用的C++ Builder事件委托使用方法。赶快试一试吧,我已经从C++Builder中提取了6个,从VB中提取了24个图标。
下面我们就看一下制作方法:

  首先、打开CB,在已生成的窗体文件中加入以下几个控件:Image,OpenDialog,SaveDialog和两个Button按钮,并将Button1的Caption修改为"提取图标",将Button2的Caption修改为"退出"。

  然后对代码编辑器的当前单元Unti1.cpp单击右键并选择Open Source/Header File;或按Ctrl+F6打开头文件Unti1.h,在其中的Private:中加入(带下划线的字为写入的代码):

  private: // 用户代码

  AnsiString TempFile,FileName; file://用于保存的临时文件名和需要提取图标的文件名

  TIcon *Icon; file://用来保存正在提取的图标

  TImage *img; file://用来显示提取的图标

  void SaveImage(TObject *Sender); file://保存提取图标的方法

  然后在窗口中双击Button2,在代码中写入:

void __fastcall TForm1::Button2Click(TObject *Sender) file://这是Button2的单击事件
{
Application->Terminate(); file://结束程序
}

双击Button1,在代码中写入:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
if(OpenDialog1->Execute()) file://如果打开对话框被执行
{
int Total;
TempFile = "c:\\tmpimg.ico"; file://临时文件名称
Icon = new TIcon(); file://实例化Icon
FileName = OpenDialog1->FileName; file://打开对话框所选择的文件名
HICON hIcon;
Total =(int) ExtractIcon( Form1->Handle, FileName.c_str(), -1);//要提取文件中的图标总数
for (int i=0,x=0,y=0 ;i {
img=new TImage(this);//实例化新的Image控件,用于显求新找到的图标
img->Parent=GroupBox1;//设置父控件
img->OnMouseUp=Image1MouseUp;//当Image控件的OnMouseUp(鼠标按下)事件发生时调用Image!MouseUp方法
if (i%10==0)//如果一行显示了10个图标则重新换行显示,并设置图标显示的位置
{
x=-35;
y= 5*i+10;
}
x=x+40;
img->Top=y;
img->Left=x;

hIcon = ExtractIcon( Form1->Handle, FileName.c_str(), i);//提取图标
Icon->Handle=hIcon;
Icon->SaveToFile(TempFile);//保存
img->Picture->LoadFromFile(TempFile);//装入图标
}
}
}


选中Image1,双击对象浏览器中Events(事件)框中的OnMouseUp事件并写入:
void __fastcall TForm1::Image1MouseUp(TObject *Sender, TMouseButton Button,TShiftState Shift, int X, int Y)
{
if (Button==mbRight) SaveImage(Sender);//调用保存图标的方法(非常有用的C++ Builder事件委托方式)
}


在代码编辑拦中加入以下用于保存图标的代码
void TForm1::SaveImage(TObject *Sender)
{
SaveDialog1->FileName="";
if (SaveDialog1->Execute())
{
((TImage*)Sender)->Picture->SaveToFile(SaveDialog1->FileName); file://保存图标
}

  此方法中的Sender参数是由上面的Image1MouseUp传递过来的,也就是Image1这个对象。对于整个程序而言,Sender就是那个点击右键的Image对象。也就是说,当你对已经提取出来并显示的图标(既img对象)按鼠标右键时,C++Builder就找到了这个对象,并将它传到了SaveImage方法中。这样SaveImage就知道要保存哪一个图标了。使用此方法简化了保存操作。 当然,您也可以用此Sender来做更多的事!

  而((TImage*)Sender)用于将Sender这个TObject转变为TImage对象。此处也可以用C++Builder的强制转变方法进行。

  以上程序在windows2000 Professional、C++Builder5上运行通过。

  如果您懒得写这个程序,请到我的主页下载wn.126.com,欢迎共同学习。URL:http://www.qqread.com/bcb/u622235500.html 更多文章 更多内容请看C/C++技术专题C/C++进阶技术文档专题,或进入讨论组讨论。
收藏此文】【 】【打印】【关闭
相关图文阅读
频道图文推荐
健 康 咨 询
时 尚 咨 询
巧巧读书宗旨
相关专题
讨论组问题推荐
站内各频道最新更新文档
站内最新制作专题
热门关键字导读
Photoshop教 程照片处理 照片制作 PS快捷键 抠图
计 算 机 故 障XP系统修复
艺 术 与 设 计设计 流媒体 设计欣赏 边框
计 算 机 安 全ARP
站内频道文章精选
巧巧电脑频道编辑信箱  告诉我们您想看的专题或文章