如何将程序中的ICO图标显示到Tbitbtn 的按钮上的!
可以通过Applicationl.ICON 返回本程序的ICO图标,但是TBitbtn的按钮上的图标必须是*.BMP格式的,是否有一个涵数转换!还是过什么办法呢?
进一步扩展时:是否可以把指定的一个程序*.exe 文件中的图标放到自己做的程序中的一个Tbitbtn按钮上呢?

解决方案 »

  1.   

    可以放在资源文件中 .res文件里。
      

  2.   

    把一个ICO转换为BMP(1)方法1
    var
        Icon   : TIcon;
        Bitmap : TBitmap;
    begin
         Icon   := TIcon.Create;
         Bitmap := TBitmap.Create;
         Icon.LoadFromFile('c:\picture.ico');  //Load an ICO 
    from File
         Bitmap.Width := Icon.Width;
         Bitmap.Height := Icon.Height;
         Bitmap.Canvas.Draw(0, 0, Icon );
         Bitmap.SaveToFile('c:\picture.bmp'); //Convert ICO to 
    BMP!
         Icon.Free;
         Bitmap.Free;
    end;(2)方法2
    procedure TForm1.ConvertClick(Sender: TObject); 
    var 
       winDC, srcdc, destdc : HDC;
       oldBitmap : HBitmap;
       iinfo : TICONINFO;
    begin
      GetIconInfo(Image1.Picture.Icon.Handle, iinfo);
      WinDC := getDC(handle);
      srcDC := CreateCompatibleDC(WinDC);
      destDC := CreateCompatibleDC(WinDC);
      oldBitmap := SelectObject(destDC, iinfo.hbmColor);
      oldBitmap := SelectObject(srcDC, iinfo.hbmMask);
      BitBlt(destdc, 0, 0, 
    Image1.picture.icon.width,Image1.picture.icon.height,srcdc, 
    0, 0, SRCPAINT);
      Image2.picture.bitmap.handle := SelectObject(destDC, 
    oldBitmap);
      DeleteDC(destDC);
      DeleteDC(srcDC);
      DeleteDC(WinDC);
      image2.Picture.Bitmap.savetofile(ExtractFilePath(Applicat
    ion.ExeName)+ 'myfile.bmp');
    end;procedure TForm1.FormCreate(Sender: TObject); 
    begin 
      image1.picture.icon.loadfromfile('c:\myicon.ico'); 
    end;
      

  3.   

    unit Uico2bmp;interfaceuses
      SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
      Forms, Dialogs, StdCtrls, ExtCtrls, Buttons;type
      Ticon2bmo = class(TForm)
        Image1: TImage;
        Button1: TButton;
        Edit1: TEdit;
        SpeedButton1: TSpeedButton;
        OpenDialog1: TOpenDialog;
        CheckBox1: TCheckBox;
        procedure Button1Click(Sender: TObject);
        procedure SpeedButton1Click(Sender: TObject);
        procedure CheckBox1Click(Sender: TObject);  private
        { Private declarations }
      public
        { Public declarations }
        procedure drawimage;
      end;var
      icon2bmo: Ticon2bmo;implementation{$R *.DFM}procedure Ticon2bmo.Button1Click(Sender: TObject);
    var  s : string;
    begin
    IF LENGTH(edit1.text) = 0 THEN EXIT;
     s:= copy(edit1.text,1,pos('.ICO',edit1.text)) + 'BMP';
     IF FILEEXISTS(S) THEN
      BEGIN
      IF MESSAGEBOX(HANDLE,'FILE EXIST, OVERWRITE?','SAVE TO BITMAP', MB_OKCANCEL +MB_ICONQUESTION) = IDOK tHEN
        image1.picture.savetofile(s);
      END
     ELSE
       image1.picture.savetofile(s);
     showmessage(Edit1.text + ' Saved to ' + s);
    end;procedure Ticon2bmo.drawimage;
    var t: Ticon;
    re : trect;
    begin
     image1.canvas.brush.style := bsSolid;
     image1.canvas.fillrect(image1.canvas.cliprect);
      edit1.text := opendialog1.filename;
      T := ticon.create;
      T. loadfromfile(edit1.text);
      image1.width := t.width;
      Image1.height := t.height;
      Image1.canvas.draw(0,0,t);
    if CheckBox1.checked then
     begin
       re :=rect(0,0,image1.width,image1.height);
       frame3d(image1.Canvas,re,clBtnHighlight,clBtnShadow,2);
     end;
      T.free;
    end;procedure Ticon2bmo.SpeedButton1Click(Sender: TObject);
    begin
    if opendialog1.execute then
     drawimage;
    end;procedure Ticon2bmo.CheckBox1Click(Sender: TObject);
    begin
    if length(edit1.text) > 0 then
      drawimage;
    end;end.
      

  4.   

    My_first(小@_@小) 的方法也可以吧
      

  5.   

    非常感谢以上的朋友回答我的问题!
    昨天我在DELPHI 的帮助中也找到了 bewill(海咪咪) 的方法一,通过此方法已能解决我的问题,就是第二个问题:
    就是如何把一个.EXE 文件的程序的图标(ICON) 显示到我的程序中!打开的.exe 文件可以通过Opendialog 来打开,但是我如何返回它的ICON 呢?!谢谢!