A kérdésre adott válasz szám 66940

Ablakok, üzenetek | Hozza létre saját alkatrészek | A reakció a billentyűzet, az egér | egér |

jó napot
Írok alkatrész jogutódaként TWinControl
probléma MouseUp, állítólag nyomon lenyomásával és felengedésével az egér
ha elhagyja az egér kívül az alkatrész, és megjelent MouseUp nem hívott

Hasonló dolog, amit észrevettem a TreeView, mondd, kérlek, hogyan lehet legyőzni, előnyösen somogo alkatrész

azaz
MouseDown - ha a bal gomb megnyomásakor a pályán MouseUp

Ui - A királyság hasonló kérdések, de már jár több belehúzhatók komponenst, akkor csak be kell követni események

Követ akármi válasz erre a kérdésre via RSS

hmm.
Valóban, ha az egér száműzik fordul át egy ablak (ha az aktív Alt + Tab), akkor már nem jön WM_LBUTTONUP

Hozzátette ellenőrzi átviteli kísérlet a fő alkalmazás, hogy ha már egy modális állapotban, akkor el kell hagynia, és befejezni utolsó kísérletet, hogy át
Tehát, valószínűleg könnyebb lesz, mint az azt végrehajtó a komponens szinten.

de még mindig az üzenet feldolgozására
WM_CAPTURECHANGED Például, ha elhagyjuk az egeret, majd nyomja meg az ALT + TAB vagy ablak másik oka, hogy elveszíti a fókuszt, WM_LBUTTONUP nem kap, de kap WM_CAPTURECHANGED.

Ez ijesztő.
és mit kell tenni, a döntés közvetlen eredménye egy halom kódot, és úgy tűnt, mint minden egyszerű és átlátható

1.MouseDown
Mi ellenőrizni fogja, hogy a fül a kör, egyébként hagyja
beállítás események száműzik
váltás a módozat, ha megnyomja az Esc, majd ellensúlyozni otenyaem
a visszatérés a régi gépek

hogy működött egy idegen helyen, ha a felhasználó nem elég okos ahhoz, hogy húzza a korlátokat a komponens
de most világosan elképzelni, milyen Capture és mi az,

>>> Kérdés lezárva köszönöm szépen :-).
Lesz, persze, tudom jobban. De ugyanaz a probléma, egy link, amelyre vezette, van neki rövid Szergej Perovsky üzenet
A legszörnyűbb az opciót „program majdnem működik” :)

Ennek megfelelően itt, ebben a sorban a „tervező MouseCapture: = true; teljesen megoldja a kérdést:” I okoz enyhe meglepetés. Én valószínűleg még az első megérteni, hogy egy igen, és csak ezután megvizsgálta az ügyet lezártnak.

Köszönöm mindenkinek a válaszokat, volt egy voodoo :-)

Tervező MouseCapture: = true; teljesen megoldja a problémát

Hívtam a könnyű átmenet ablak modális állapotban van, ami tulajdonképpen eltévedt CapturedWin

A kérdés zárva van, minden köszönet :-).

Tettem formájában panel és írt


eljárás TForm1.Panel1MouseDown (Sender: TObject; gomb: TMouseButton;
Shift: TShiftState; X, Y: Egész szám);
kezdődik
Caption: = 'lefelé';
végén;

eljárás TForm1.Panel1MouseUp (Sender: TObject; gomb: TMouseButton;
Shift: TShiftState; X, Y: Egész szám);
kezdődik
Caption: = 'up';
végén;


És a nagy munkát. Azaz meg kell adnunk a funkció alapértelmezés szerint elérhető.

Ellenőrizze, hogy felülbírálja az eljárás


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;


ami valójában van beállítva MouseCapture, és ha még mindig újra check hogy hívod örökölt WMLButtonDown

Kapcsolódó cikkek