…
AndMask:=TBitmap.Create;
with AndMask do begin
Monochrome:=true;
Width:=IconWidth;
Height:=IconHeight;
with Canvas do begin
Brush.Color:=clWhite;
FillRect(Rect(0, 0, IconWidth, IconHeight));
Brush.Style:=bsClear;
with Font do begin
Name:='Times';
Size:=16;
Style:=[fsBold];
end;
TextOut(2, 4, 'AS');
TextOut(4, 6, 'AS');
end;
end;
…
Nézzük most a második képet. Ezt nevezzük XorMask-nak. E kép méretének szintén a készítendő ikon méretével kell egyeznie. Itt a háttér színt feketére kell hogy válasszuk, különben az előző képnél leírt átlátszóság-láthatóság feltétele nem teljesül. Amit pedig más színnel rajzolunk, az lesz maga az ikon képe. Megfigyelhető, hogy mind a két kép esetén ugyanazt a rajzot kell megjelenítenünk, egyedül csak a színek mások.
…
XorMask:=TBitmap.Create;
with XorMask do begin
Width:=IconWidth;
Height:=IconHeight;
with Canvas do begin
Brush.Color:=clBlack;
FillRect(Rect(0, 0, IconWidth, IconHeight));
Brush.Style:=bsClear;
with Font do begin
Name:='Times';
Size:=16;
Style:=[fsBold];
Color:=clBlue;
end;
TextOut(4, 6, 'AS');
Font.Color:=clAqua;
TextOut(2, 4, 'AS');
end;
end;
…
Ha a két kép rendelkezésre áll, akkor a CreateIconIndirect függvény hívásával létrehozhatjuk a kívánt ikont. Paraméterként egy TIconInfo struktúrát vár. Ezen belül kell megadnunk a két képünknek az azonosítóját (Handle).
…
IconInfo.fIcon:=true;
IconInfo.xHotspot:=0;
IconInfo.yHotspot:=0;
IconInfo.hbmMask:=AndMask.Handle;
IconInfo.hbmColor:=XorMask.Handle;
…
Az ikon létrehozása ezek után már egyszerű.
…
Icon:=TIcon.Create;
Icon.Handle:=CreateIconIndirect(IconInfo);
...
Ha már adott az ikonunk egy TIcon típusú osztályban, akkor bármit megtehetünk vele. Akár ki is rajzolhatjuk a képernyőre, akár ICO állományba is menthetjük, vagy a programunkhoz tartozó ikont is lecserélhetjük. Ez utóbbihoz csak annyit kell tenni, hogy az Application változó Icon property-ének értékül adjuk az újonnan létrehozott ikont, majd az InvalidateRect függvénnyel újrarajzoltatjuk annak területét.
…
Application.Icon:=Icon;
InvalidateRect(Application.Handle, nil, true);
…