Răspunsul la întrebarea numărul 48987

Sunt pentru a crea icoane în tavă.

Am Windows XP

Întrebare: TolbarWindow32 - o clasă în Delphi TToolbar. Dar, pentru un motiv sau altul, atunci când am
Am trimite un mesaj:
În același timp, știu dinainte de numărul său de cheie (de exemplu, pictograme) și
Numărul procedurii TolbarWindow32.

Vreau să știu coordonatele unui buton (de exemplu pictograme)

var R: TRect;
începe
SendMessage (TolbarWindow32, TB_GETITEMRECT, Număr, LongInt (@R));

dar R.left, R.right - 0. De ce? Există vreun alt mod de a obține coordonatele unui buton (de exemplu, pictograme).

Și modul în care pentru că există - de exemplu: este folosit de programe, cum ar fi Word, Exel, SOUNDMAN.EXE etc.

Urmați orice răspunsurile la această întrebare prin RSS

Nici o cerere de mai jos vezi mai jos, „am găsit coordonatele unui buton - asta e ce fel“
și „Sau poate că puteți găsi mânerul anumit buton“.

// Am uitat despre tipul de mesaj.

O legătură este într-adevăr Systray.

>>> Sunt pentru a crea icoane în tava
Care este legătura între această frază și restul întrebării. Vrei să fie tratate ca systray Bare de instrumente?

Sau poate că puteți găsi un mâner și a obține un anumit buton
coordonatele folosind GetWindowRect. Dar cum să găsească mânerul sigur
buton?


Coordonate butoane am găsit - asta e ce mod:

funcționează ToolBarWindow32: hWnd;
începe
Rezultat: = FindWindow ( 'Shell_TrayWnd', zero);
Rezultat: = FindWindowEx (Rezultat, 0, 'TrayNotifyWnd', zero);
Rezultat: = FindWindowEx (Rezultat, 0, 'SysPager', zero);
Rezultat: = FindWindowEx (Rezultat, 0, 'ToolbarWindow32', zero);
se încheie;

Funcția SysPager: hWnd;
începe
Rezultat: = FindWindow ( 'Shell_TrayWnd', zero);
Rezultat: = FindWindowEx (Rezultat, 0, 'TrayNotifyWnd', zero);
Rezultat: = FindWindowEx (Rezultat, 0, 'SysPager', zero);
se încheie;

Funcția GetRect: TRect;
var
hProcess: THandle;
FAddr: Pointer;
Fcount: Cardinal;
Fpid: dword;
începe
GetWindowThreadProcessId (SysPager, Fpid);
hProcess: = OpenProcess (PROCESS_VM_READ sau PROCESS_VM_OPERATION, false, Fpid);
FAddr: = VirtualAllocEx (hProcess, @ rezultat, sizeof (rezultat), MEM_COMMIT, PAGE_READWRITE);

// Aici am scrie numărul cheie 6 - pentru că nu știu cum să identifice
// butonul meu. Shell_NotifyIcon (NIM_ADD, @ FData). Dacă cineva știe
// informează.

<
puteți face
SendMessage (ToolBarWindow32, TB_GETRECT, 6, lParam (FAddr));
>


ReadProcessMemory (hProcess, FAddr, @result, sizeof (rezultat), Fcount);
VirtualFreeEx (hProcess, FAddr, sizeof (rezultat), MEM_RELEASE);
CloseHandle (hProcess);
se încheie;

când trimiterea mesajelor vvide

SendMessage (ToolBarWindow32, WM_LBUTTONDOWN, MK_LBUTTON, MAKELONG (p.left + 1, p.top + 1));
SendMessage (ToolBarWindow32, WM_LBUTTONUP, MK_LBUTTON, MAKELONG (p.left + 1, p.top + 1));

lucrări - și astfel coordonatele corecte, dar coordonatele
număr imens. Cum se convertesc obținut kordinaty în kordinaty pe
ecran.

Ei bine, nu înțeleg întrebarea.

În primul rând, așa cum am înțeles că este succesorul TolbarWindow32 (.) TToolbar.
În al doilea rând, doriți să obțineți butoanele cu numărul de index rect.

În cadrul clasei:
Efectuați (TB_GETITEMRECT, număr, LongInt (@R));

dacă nu, atunci trebuie să știți o clasă fereastră TolbarWindow32 mâner.
SendMessage (_TolbarWindow32.Handle TB_GETITEMRECT, Număr, LongInt (@R).);
în cazul în care _TolbarWindow32 Grinzi clasa TolbarWindow32.

Deci, care este problema?
acolo Numărul nu poate un buton?