egérkattintással

Találtam WM_LBUTTONUP, WM_LBUTTONDOWN, WM_LBUTTONDBCLK. De mi az a típus WM_LBUTTONCLK (egyetlen kattintással) - nem található.

Hogyan, akkor elkapni egyetlen kattintással?

WM_LBUTTONCLK = WM_LBUTTONDOWN + WM_LBUTTONUP = BM_CLICK (néhány kontroll)

WM_hBUTTONDOWN, ahol X jelentése L, R, M, attól függően, hogy az egér gombját.

Szeretem a könyvet - a tudás forrása

Igor Sevcsenko, nem ért egyet. Üzletember jön, amikor csak kattints az egér gombját (de nem engedjük el). A közlemény semmilyen ellenőrzést nem csak reagál megnyomja nélkül billentyű elengedésekor. Azaz, ha rákattint a bal egérgombbal, majd elviszi a kurzort egy másik helyre, és engedje el a onMouseDown események nem fordul elő. Kívánatos lenne, hogy végre ugyanazt a viselkedést az programe csak WinAPI.

Song, WM_LBUTTONCLK = WM_LBUTTONDOWN + WM_LBUTTONUP - Értem. De mivel a pálya, hogy itt nyomja meg a gombot, majd engedje el?

A feldolgozás során WM_hBUTTONDOWN ellenőrizni kell a mezőbe, hogy be van nyomva az x-edik ásás egér. (Például, csClicked a ControlState at TControl)
A feldolgozás WM_xBUTTONUP ellenőrizni, ha a négyzet be van jelölve, majd nyomja meg és engedje fel az egér gombját (amely tekinthető a kattintásért, én nem egészen helyes 08/22/02 17:49) végeztünk el ugyanabban az ablakban. Ezután a zászló törlődik, és az eljárást végzik Click

Igor Sevcsenko, én is így gondoltam. Csak ez nem teljesen igaz. Valóban, relnosti, ha rákattint egy vezérlő gombbal, majd vegye a kurzort az oldalára, és engedje el a gombot, akkor az állam vissza csClicked. (És ha eladni az áramkör vezérli majd a kupac feltétel lehet csClicked). Azaz, meg kell tenni valamit, mint egy globális horog wm_lbuttonup és ellenőrizze - az esemény történt a szabályozás az állam csClicked, préselés ott. Ha nem a fenti, akkor az állam vissza csClicked. Ez IMHO, és aranyeres.
Szeretném egyszerűbb.

Meg is néztem Controls.pas, mivel az eljárás végrehajtása TControl.Click
és amikor hívott, mielőtt ilyen kijelentéseket.


eljárás TControl.WMLButtonDown (var Message: TWMLButtonDown);
kezdődik
SendCancelMode (Self);
örökölt;
ha csCaptureMouse a ControlStyle majd MouseCapture: = true;
ha csClickEvents a ControlStyle majd bele (FControlState, csClicked);
DoMouseDown (Message, mbLeft, []);
végén;


eljárás TControl.WMLButtonUp (var Message: TWMLButtonUp);
kezdődik
örökölt;
ha csCaptureMouse a ControlStyle majd MouseCapture: = false;
ha csClicked a ControlState majd
kezdődik
Kizárása (FControlState, csClicked);
ha PtInRect (ClientRect, SmallPointToPoint (Message.Pos)), majd kattintson;
végén;
DoMouseUp (Message, mbLeft);
végén;

Igor Sevcsenko ismét, valószínűleg te nem értettél meg. Úgy vélem, hogy relizatsiya onclick eseménye TControl.click nem csak abból áll ezeket az eljárásokat. A legideálisabb - ha megengedik, az eljárás kódot (eljárások), amely megvalósítja csak a kattintás WinAPI. De értékelem az időt, és persze nem ragaszkodnak ehhez. Csak azt szeretném megjegyezni, hogy ha a OnClick fogja feldolgozni csak ezen eljárások, kapsz egy „rossz” gombra.

Valójában. Vigye a kurzort irányítani. Tartsa lenyomva az egér gombját. Húzza át az oldalon. Engedje el az egérgombot. Kattintson az egér gombját, mozgassa az egeret, hogy ellenőrizzék. Engedje el az egérgombot. Kattintson esemény nem fordul elő.

Ha az algoritmus klikk „és le csak két fent említett eljárások. Nem ugyanaz. Ez azt jelenti, vigye a kurzort a kontroll. Tartsa lenyomva az egér gombját. Vigye a kurzort az oldalon. Engedje el az egérgombot. Kattintsunk az egér gombját, mozgassa az egeret, hogy ellenőrizzék. Engedje el az egérgombot. Kattintson esemény történne.
Mivel ez volt a kontroll csClicked tulajdonság, ha megnyomja a gombot. Ha a gombot kicsavart ingatlan csClicked jön ki, mint egy gomb megnyomásával nem a kontrollhoz képest.

Hope világosan elmagyarázta. Ha bármi - kérdezem.

> Roxtady
Nos, természetesen nem a szó szoros értelmében csak az eljárásokat. azt is meg kell nézni, hogyan hajtsák végre a funkciók, amelyek használják ezeket az eljárásokat. pontosabban - MouseCapture.

meg kell, hogy végezzen api végre SetCapture funkciót.

Nikkie, lehet több. Nem egészen értem, hogyan használja SetCapture valósíthatja ezt a viselkedést kattintással „e.

Ui És ismét a kérdés nem egyértelmű. Miért WM_LBUTTONDBCLK esemény, és WM_LBUTTONCLK események nem?

> Igor Sevcsenko
> A feldolgozás során WM_hBUTTONDOWN ellenőrizni kell a mezőbe, hogy be van nyomva az x-edik ásás egér.

Ha sok az alkatrészek, meg kell, hogy ne ellenőrizze, és memorizálni az ablakon, ami csökkenti a kulcsot, és amikor WM_XBUTTONUP ellenőrzi, hogy az ugyanazon ablak emelése.

Kapcsolódó cikkek