A kezelőszervek mozgatása és átméretezése futási időben

Így engedélyezheti a vezérlők húzását és átméretezését (Delphi űrlapon) egérrel, amíg az alkalmazás fut.

Űrlapszerkesztő futási időben

Miután elhelyezett egy vezérlőelemet (vizuális elem) az űrlapra, módosíthatja annak helyzetét, méretét és más tervezési idő tulajdonságait. Vannak olyan helyzetek, amikor engedélyeznie kell az alkalmazás egyik felhasználójának, hogy az űrlapvezérlőket áthelyezzék, és futás közben megváltoztassák azok méretét.

Három, az űrlapon futó felhasználói mozgás és a vezérlők átméretezésének lehetővé tétele érdekében egérrel kapcsolatos események speciális kezelésre van szükség: OnMouseDown, OnMouseMove és OnMouseUp.

Elméletileg mondjuk azt, hogy engedélyezni szeretné a felhasználót, hogy futtatás közben (egérrel) mozgatja (és átméretezze) egy gombvezérlőt. Először kezeli az OnMouseDown eseményt, hogy a felhasználó "megragadja" a gombot. Ezután az OnMouseMove eseménynek át kell helyeznie (mozgatni, húzza) a gombot. Végül az OnMouseUp-nak be kell fejeznie az áthelyezési műveletet.

instagram viewer

Az űrlapvezérlők húzása és átméretezése a gyakorlatban

Először dobjon el néhány vezérlőt egy űrlapra. Ha van egy jelölőnégyzete, akkor engedélyezheti vagy letilthatja a vezérlők mozgatását és átméretezését futás közben.

Ezután definiáljon három eljárást (a felület az űrlapnyilatkozat szakaszát), amely az előzőekben ismertetett egér eseményekkel foglalkozik:

típus
TForm1 = osztály(TForm)... eljárás ControlMouseDown (Feladó: TObject; Gomb: TMouseButton; Shift: TShiftState; X, Y: egész szám); eljárás ControlMouseMove (Feladó: TObject; Shift: TShiftState; X, Y: egész szám); eljárás ControlMouseUp (Feladó: TObject; Gomb: TMouseButton; Shift: TShiftState; X, Y: egész szám); magán
inReposition: logikai; oldPos: TPoint; 

Megjegyzés: A vezérlőmozgás megjelöléséhez két alakszintű változó szükséges (inReposition) és a vezérlő régi helyzetének tárolására (oldPos).

Az űrlap OnLoad eseményében rendelje hozzá az egér eseménykezelési eljárásait a megfelelő eseményekhez (azokhoz a vezérlőkhöz, amelyeket húzni / átméretezni szeretne):

eljárás TForm1.FormCreate (küldő: TObject); kezdődik
Button1.OnMouseDown: = ControlMouseDown; Button1.OnMouseMove: = ControlMouseMove; Button1.OnMouseUp: = ControlMouseUp; Edit1.OnMouseDown: = ControlMouseDown; Edit1.OnMouseMove: = ControlMouseMove; Edit1.OnMouseUp: = ControlMouseUp; Panel1.OnMouseDown: = ControlMouseDown; Panel1.OnMouseMove: = ControlMouseMove; Panel1.OnMouseUp: = ControlMouseUp; Button2.OnMouseDown: = ControlMouseDown; Button2.OnMouseMove: = ControlMouseMove; Button2.OnMouseUp: = ControlMouseUp; vég; (* FormCreate *)

Megjegyzés: A fenti kód lehetővé teszi a Button1, Edit1, Panel1 és Button2 futásidejű áthelyezését.

Végül itt van a varázskód:

eljárásTForm1.ControlMouseDown ( Feladó: TObject; Gomb: TMouseButton; Shift: TShiftState; X, Y: egész szám);kezdődikha (ChkPositionRunTime. Kockás) ÉS
(Feladó jelentése TWinControl) azutánkezdődik
inReposition: = True; SetCapture (TWinControl (feladó) .kezelés); GetCursorPos (oldPos); vég; vég; (* ControlMouseDown *)

ControlMouseDown Röviden: ha a felhasználó egy egérgombot nyom meg egy vezérlő felett, ha a futási idő áthelyezése engedélyezve van (jelölőnégyzet) chkPositionRunTime ellenőrizve van), és az az egér lefelé vett vezérlő a TWinControl-ból származik, jelölje meg, hogy a vezérlés áthelyezése zajlik (inReposition: = True) és ellenőrizze, hogy az egér minden feldolgozása be van-e állítva a vezérlés érdekében - az alapértelmezett kattintási események megakadályozása érdekében feldolgozott.

eljárásTForm1.ControlMouseMove ( Feladó: TObject; Shift: TShiftState; X, Y: egész szám);const
minSzélesség = 20; minHeight = 20; var
newPos: TPoint; frmPoint: TPoint; kezdődikha inReposition azutánkezdődikval vel TWinControl (feladó) csinálkezdődik
GetCursorPos (newPos); ha ssShift ban ben Váltás azutánkezdődik//resize
Képernyő. Kurzor: = crSizeNWSE; frmPoint: = ScreenToClient (egér. CursorPos); ha frmPoint. X> minSzélesség azután
Szélesség: = frmPoint. X; ha frmPoint. Y> minHeight azután
Magasság: = frmPoint. Y; végmás//movekezdődik
Képernyő. Kurzor: = crSize; Balra: = Balra - oldPos. X + newPos. X; Top: = Top - oldPos. Y + newPos. Y; oldPos: = newPos; vég; vég; vég; vég; (* ControlMouseMove *)

ControlMouseMove Röviden: változtassa meg a képernyőkurzort, hogy az tükrözze a műveletet: ha a Shift gombot megnyomja, engedje meg a vezérlés átméretezését, vagy egyszerűen mozgassa a kezelőszervet egy új helyzetbe (ahol az egér megy). Jegyzet: minWidth és minHeight az állandók egyfajta méretkorlátozást biztosítanak (minimális vezérlési szélesség és magasság).

Az egérgomb elengedése után a húzás vagy az átméretezés vége:

eljárásTForm1.ControlMouseUp ( Feladó: TObject; Gomb: TMouseButton; Shift: TShiftState; X, Y: egész szám);kezdődikha inReposition azutánkezdődik
Képernyő. Kurzor: = crDefault; ReleaseCapture; inReposition: = hamis; vég; vég; (* ControlMouseUp *)

ControlMouseUp röviden: amikor a felhasználó befejezte a mozgatást (vagy átméretezi a vezérlőegységet) engedje el az egérfogót (az alapértelmezett kattintások feldolgozásának lehetővé tétele érdekében), és jelölje meg, hogy az áthelyezés befejeződött.

És megcsinálja! Töltse le a mintaalkalmazást, és próbálja ki magát.

Megjegyzés: A vezérlők futásidejű áthelyezésének másik módja a Delphi húzza és vidd kapcsolódó tulajdonságok és módszerek (DragMode, OnDragDrop, DragOver, BeginDrag stb.). A drag and drop segítségével a felhasználók húzhatnak elemeket az egyik vezérlőből - például egy listából vagy a fa nézetből - a másikba.

Hogyan emlékszem a vezérlő helyzetére és méretére?

Ha engedélyezi a felhasználónak az űrlapvezérlők áthelyezését és átméretezését, akkor gondoskodnia kell arról, hogy a vezérlőelem elhelyezés valamilyen módon történjen mentve, amikor az űrlap bezáródik, és hogy minden vezérlő pozíciója helyreáll az űrlap létrehozásakor / betöltésekor. Így tárolhatja a Bal, Felső, Szélesség és Magasság tulajdonságokat az űrlap minden egyes vezérlésére egy INI fájlt.

Mi a helyzet 8 méretű fogantyúval?

Ha megengedi a felhasználónak, hogy áthelyezze és átméretezze a vezérlőelemeket a Delphi képernyőn, futás közben, az egér segítségével, a következőre teljesen utánozva a tervezési idő környezetét, nyolc méretű fogantyút kell hozzáadnia a vezérlőhöz átméretezni.

instagram story viewer