HICON CreateIcon(
HINSTANCE hInstance, // handle to application instance
int nWidth, // icon width
int nHeight, // icon height
BYTE cPlanes, // number of planes in XOR bitmask
BYTE cBitsPixel, // number of bits per pixel in XOR bitmask
CONST BYTE *lpbANDbits, // pointer to AND bitmask array
CONST BYTE *lpbXORbits // pointer to XOR bitmask array
);
Aby stworzyc maski będziesz musiał sobie swoją bitmape jakoś skonwertować. Najprosciej chyba...
var
dc:HDC;
ho:HANDLE;
i,j:integer;
px:COLORREF; // DWORD lub integer, longint - obojetne.
begin
dc:=CreateCompatibleDC(0); // Otwarcie kontekstu
ho:=SelectObject(dc,UCHWYT-TWOJEJ-BITMAPY); // UCHWYT... jest typu HABITMAP lub HANDLE , ho to poprzednio przypisany kontekstowi obiekt
for i:=0 to 15 do
for j:=0 to 31 do
begin
// tu pobierasz pixele prawdopodbie w petli
px:=GetPixel(dc,i,j);
// dalej pixele obrabiasz tworzac maski bitowe
end;
ho:=SelectObject(dc,ho); // tu z powrotem dostajesz uchwyt swojej bitmapy (co do wartosci UCHWYT-TWOJEJ-BITMAPY=ho) i przywracasz pierwotne przypisanie obiektu.
//DeleteObject(ho); // jesli wiecej jej (bitmapy) nie potrzebujesz, mozesz zwolnic
DeleteDC(dc); // Zamknięcie kontekstu
ho:=CreateIcon(...); // HANDLE/HICON - obojetne. Tu masz swoja ikone;
if(longword(ho)<>0)then Shell_NotifyIcon(...,ho,...) // jesli 0 to nie ma ikony
// if(longbool(ho))then Shell_NotifyIcon(...,ho,...) // the same
// DeleteObject(ho); // Nie wiem, sam sprawdz, czy po Shell_NotifyIcon() możesz zwolnic ikone.
end;
// Nie jestem pewien jakiego rodzaju jest Handle...
// Czy to pointer, czy jakiś int (w bcb/vc to ptr :])
// W każdym razie ma 4 bajty :] stąd konwersje do lonworda/longboola.
COLORREF GetPixel(
HDC hdc, // handle of device context
int XPos, // x-coordinate of pixel
int nYPos // y-coordinate of pixel
);
var
i:COLORREF // to longint w delphi.
R,G,B:byte;
B:=(i shr 16)and $ff; // w ej linijce mozesz sobie darować 'and $ff'
G:=(i shr 8)and $ff;
R:=i and $ff;