Tray and [16 X 32]

0

<font size="12">Witam,</span>
mam pytanie wzgledem traya. Czy jest mozliwosc wrzucenia tam obrazka o rozmiarach 16x32 ?? Szukalem, szukalem ale niestey nie znalazlem nigdzie madrej odpowiedzi :-D
P.S. Oczywiscie w gre nie wchodza zadne "komponenty do sciagniecia" :-P

Z gory dzieki za wszelka pomoc.... a i prosze nie kasowac tak szybko tego posta [niewinnosc]

0
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;
0

Chociaz sa tu komentarze, zbyt duzo mi to nie mowi: ;-)

 
...   
// dalej pixele obrabiasz tworzac maski bitowe <-- ale jak??
...

...
ho:=CreateIcon(...); 
...     

Znam skladnie tej funkcji ale nie wiem o co chodz z tymi maskami :-/

// ha, nakombinowałem :] , a mozna jeszcze szybciej :]
// CreateIconIndirect(), ale dałem do pieca [mf]

1 użytkowników online, w tym zalogowanych: 0, gości: 1