2012-02-08 53 views
0

用Delphi 2010是否可以在運行時更改模態和非模態窗體的標題欄中的窗體圖標?

我尋找可以傳遞一個TForm的&一個圖像(或的TImage TBitmap)(可能的)函數或過程,它可以改變圖標的​​形式,無論是覆蓋當前一個,或在特定位置寫入新文件,必要時調整標題。必須同時使用模態和非模態形式。

例子:

程序ChangeFormIcon(可保存格式:TForm的;艾康:TBitmap;

所有其他建議歡迎

感謝名單

回答

4

像這樣的東西應該做你想要我有什麼。假設您正在使用32bpp位圖,可能使用了alpha混合。如果要使用基於掩碼的透明度,則需要重新編寫代碼以創建適當的掩碼位圖。

procedure CopyBitmapToIcon(Bitmap: TBitmap; Icon: TIcon); 
var 
    MonoBitmap: HBITMAP; 
    IconInfo: TIconInfo; 
    IconHandle: HICON; 
begin 
    MonoBitmap := CreateBitmap(Bitmap.Width, Bitmap.Height, 1, 1, 0); 
    Try 
    FillChar(IconInfo, SizeOf(IconInfo), 0); 
    IconInfo.fIcon := True; 
    IconInfo.hbmMask := MonoBitmap; 
    IconInfo.hbmColor := Bitmap.Handle; 
    IconHandle := CreateIconIndirect(IconInfo); 
    if IconHandle=0 then begin 
     RaiseLastOSError; 
    end; 
    Icon.Handle := IconHandle; 
    Finally 
    DeleteObject(MonoBitmap); 
    End; 
end; 

procedure TMyForm.Button1Click(Sender: TObject); 
var 
    Bitmap: TBitmap; 
    Icon: TIcon; 
begin 
    Icon := Self.Icon; 
    Bitmap := TBitmap.Create; 
    try 
    Bitmap.PixelFormat := pf32bit; 
    Bitmap.SetSize(Icon.Width, Icon.Height); 
    Bitmap.Canvas.Brush.Style := bsSolid; 
    Bitmap.Canvas.Brush.Color := clRed; 
    Bitmap.Canvas.FillRect(Rect(0, 0, Icon.Width, Icon.Height)); 
    CopyBitmapToIcon(Bitmap, Icon); 
    finally 
    Bitmap.Free; 
    end; 
end; 
相關問題