procedure TForm1.Button1Click(Sender: TObject); var IconSizeX : integer; IconSizeY : integer; AndMask : TBitmap; XOrMask : TBitmap; IconInfo : TIconInfo; Icon : TIcon; OldBkMode : integer; OverRect : TBitmap; begin {Get the icon size} IconSizeX := GetSystemMetrics(SM_CXICON); IconSizeY := GetSystemMetrics(SM_CYICON); {Create the "And" mask} AndMask := TBitmap.Create; AndMask.Monochrome := true; AndMask.Width := IconSizeX; AndMask.Height := IconSizeY; {Draw on the "And" mask} AndMask.Canvas.Brush.Color:=clBlack; AndMask.Canvas.FillRect(Rect(0, 0, IconSizeX, IconSizeY)); { OverRect.Canvas.Brush.Color:=clBlack; OverRect.Canvas.FillRect(Rect(0, 0, IconSizeX, IconSizeY)); OverRect.Canvas.Brush.Color :=clBlack; OverRect.Canvas.FillRect(Rect(3, 3, 3+((IconSizeX-6)*Percent div 100), IconSizeY-4)); // AndMask.Canvas.Brush.Color := clBlack; AndMask.Canvas.Font.Size:=13; AndMask.Canvas.Font.Style:=[fsBold]; AndMask.Canvas.Font.Color:=clWhite; OldBkMode := SetBkMode(AndMask.Canvas.Handle,TRANSPARENT); AndMask.Canvas.TextOut(3, 8, Format('%3d',[Percent])); SetBkMode(AndMask.Canvas.Handle, OldBkMode); AndMask.Canvas.CopyMode:=cmSrcInvert; AndMask.Canvas.Draw(0,0,OverRect);} {Draw as a test} Form1.Canvas.Draw(IconSizeX * 2, IconSizeY, AndMask); // Form1.Canvas.Draw(IconSizeX * 2, IconSizeY, OverRect); {Create the "XOr" mask} OverRect:=TBitmap.Create; XOrMask := TBitmap.Create; XOrMask.Width := IconSizeX; XOrMask.Height := IconSizeY; OverRect.Monochrome :=False; OverRect.Width := IconSizeX; OverRect.Height := IconSizeY; {Draw on the "XOr" mask} XorMask.Canvas.Brush.Color := clBlack; XorMask.Canvas.FillRect(Rect(0, 0, IconSizeX, IconSizeY)); OverRect.Canvas.Brush.Color:=clWhite; OverRect.Canvas.FillRect(Rect(2, 2, IconSizeX, IconSizeY)); OverRect.Canvas.Brush.Color :=clNavy; OverRect.Canvas.FillRect(Rect(2, 2, 2+((IconSizeX)*Percent div 100), IconSizeY)); XorMask.Canvas.Font.Size:=20; XorMask.Canvas.Font.Style:=XorMask.Canvas.Font.Style+[fsBold,fsItalic]; OldBkMode := SetBkMode(XorMask.Canvas.Handle,TRANSPARENT); XorMask.Canvas.Font.Color:=clNavy xor clWhite; XOrMask.Canvas.TextRect(Rect(0, 0, IconSizeX, IconSizeY),1,0, Format('%2d',[Percent])); SetBkMode(XorMask.Canvas.Handle, OldBkMode); XorMask.Canvas.CopyMode:=cmSrcInvert; XorMask.Canvas.Draw(0,0,OverRect); XorMask.Canvas.MoveTo(0,IconSizeY); XorMask.Canvas.Pen.Color:= clBlack; XorMask.Canvas.Pen.Width:=4; XorMask.Canvas.LineTo(0,0); XorMask.Canvas.LineTo(IconSizeX,0); OverRect.Free; {Draw as a test} Form1.Canvas.Draw(IconSizeX * 4, IconSizeY, XOrMask); {Create a icon} Icon := TIcon.Create; IconInfo.fIcon := true; IconInfo.xHotspot := 0; IconInfo.yHotspot := 0; IconInfo.hbmMask := AndMask.Handle; IconInfo.hbmColor := XOrMask.Handle; Icon.Handle := CreateIconIndirect(IconInfo); {Destroy the temporary bitmaps} AndMask.Free; XOrMask.Free; {Draw as a test} DrawIcon(Form1.Canvas.Handle,300,300,Icon.Handle); {Assign the application icon} Tray.Icon := Icon; // Tray.Enabled:=True; {Force a repaint} InvalidateRect(Application.Handle, nil, true); if Percent=100 then Timer1.Enabled:=False; {Free the icon} Icon.Free; Inc(Percent); end; procedure TForm1.FormCreate(Sender: TObject); begin Percent:=1; end; |