Ovládacie prvky pre pohyb a zmenu veľkosti v čase vykonávania

Tu je postup, ako povoliť potiahnutie a zmenu veľkosti ovládacích prvkov (vo formulári Delphi) pomocou myši, keď je aplikácia spustená.

Editor formulárov za behu

Po umiestnení ovládacieho prvku (vizuálnej súčasti) do formulára môžete upraviť jeho polohu, veľkosť a ďalšie vlastnosti v čase návrhu. Existujú však situácie, keď musíte používateľovi vašej aplikácie povoliť premiestnenie ovládacích prvkov formulára a zmenu ich veľkosti v čase vykonávania.

Ak chcete povoliť pohyb bežiaceho používateľa a zmenu veľkosti ovládacích prvkov vo formulári pomocou myši, tri udalosti súvisiace s myšou vyžadujú špeciálne zaobchádzanie: OnMouseDown, OnMouseMove a OnMouseUp.

Teoreticky povedzme, že chcete umožniť užívateľovi pohybovať (a meniť veľkosť) ovládača pomocou tlačidla myši za behu. Najprv spracujete udalosť OnMouseDown, aby ste používateľovi umožnili „uchopiť“ tlačidlo. Ďalej by udalosť OnMouseMove mala premiestniť (presunúť, presunúť) tlačidlo. Nakoniec program OnMouseUp dokončí operáciu presunu.

instagram viewer

Presúvanie a zmena veľkosti ovládacích prvkov formulára v praxi

Najprv zrušte niekoľko formulárov vo formulári. Majte CheckBox na povolenie alebo zakázanie ovládacích prvkov pre pohyb a zmenu veľkosti za behu.

Ďalej definujte tri postupy (v rozhranie časť formulára vyhlásenia), ktorá bude spracovávať udalosti myši, ako je opísané vyššie:

typ
TForm1 = trieda(TForm)... procedúra ControlMouseDown (odosielateľ: TObject; Tlačidlo: TMouseButton; Shift: TShiftState; X, Y: celé číslo); procedúra ControlMouseMove (odosielateľ: TObject; Shift: TShiftState; X, Y: celé číslo); procedúra ControlMouseUp (odosielateľ: TObject; Tlačidlo: TMouseButton; Shift: TShiftState; X, Y: celé číslo); súkromné
inReposition: boolean; oldPos: TPoint; 

Poznámka: Ak sa vykonáva riadiaci pohyb, sú potrebné dve premenné na úrovni formulára.inReposition) a uložiť starú pozíciu kontroly (oldPos).

Vo udalosti OnLoad vo formulári priraďte procedúry spracovania udalostí myši k zodpovedajúcim udalostiam (pre tie ovládacie prvky, ktoré chcete zmeniť a zmeniť ich veľkosť):

procedúra TForm1.FormCreate (Sender: TObject); začať
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; koniec; (* FormCreate *)

Poznámka: Vyššie uvedený kód umožňuje premiestnenie tlačidiel Button1, Edit1, Panel1 a Button2 za chodu.

Nakoniec tu je kúzelný kód:

procedúraTForm1.ControlMouseDown ( Odosielateľ: TObject; Tlačidlo: TMouseButton; Shift: TShiftState; X, Y: celé číslo);začaťak (ChkPositionRunTime. začiarknuté) A
(Sender je TwinControl) potomzačať
inReposition: = TRUE; SetCapture (TWinControl (Sender) .Handle); GetCursorPos (oldPos); koniec; koniec; (* ControlMouseDown *)

ControlMouseDown skrátka: raz používateľ stlačí tlačidlo myši nad ovládacím prvkom, ak je povolená zmena času chodu (začiarkavacie políčko) chkPositionRunTime je zaškrtnuté) a ovládací prvok, ktorý prijal myš dole, je odvodený od TWinControl, značka, ktorá prechádza k zmene polohy (inReposition: = True) a uistite sa, že všetky kontroly myši sú zachytené pre daný ovládací prvok - aby ste zabránili tomu, aby sa zobrazovali predvolené udalosti „kliknutia“ spracované.

procedúraTForm1.ControlMouseMove ( Odosielateľ: TObject; Shift: TShiftState; X, Y: celé číslo);const
min. šírka = 20; min.výška = 20; var
newPos: TPoint; frmPoint: TPoint; začaťak inReposition potomzačaťs TWinControl (Sender) robiťzačať
GetCursorPos (newPos); ak ssShift v smena potomzačať//resize
Obrazovka. Kurzor: = crSizeNWSE; frmPoint: = ScreenToClient (Myš. CursorPos); ak frmPoint. X> min. Šírka potom
Šírka: = frmPoint. X; ak frmPoint. Y> minHeight potom
Výška: = frmPoint. Y; koniecinak//movezačať
Obrazovka. Kurzor: = crSize; Vľavo: = Vľavo - starýPos. X + newPos. X; Top: = Top - oldPos. Y + newPos. Y; oldPos: = newPos; koniec; koniec; koniec; koniec; (* ControlMouseMove *)

ControlMouseMove v skratke: zmeňte kurzor obrazovky tak, aby odrážal operáciu: ak stlačíte kláves Shift, umožníte zmenu ovládacieho prvku alebo jednoducho presuňte ovládací prvok do novej polohy (kam smeruje myš). Poznámka: minWidth a minHeight konštanty poskytujú určitý druh obmedzenia veľkosti (minimálna šírka a výška kontroly).

Po uvoľnení tlačidla myši je pretiahnutie alebo zmena veľkosti ukončená:

procedúraTForm1.ControlMouseUp ( Odosielateľ: TObject; Tlačidlo: TMouseButton; Shift: TShiftState; X, Y: celé číslo);začaťak inReposition potomzačať
Obrazovka. Kurzor: = crDefault; ReleaseCapture; inReposition: = False; koniec; koniec; (* ControlMouseUp *)

ControlMouseUp skrátka: keď používateľ dokončí pohyb (alebo zmenu veľkosti ovládacieho prvku), uvoľnite zachytenie myši (aby ste umožnili predvolené spracovanie kliknutí) a označte, že je premiestnenie dokončené.

A to je všetko! Stiahnite si ukážkovú aplikáciu a vyskúšajte sami.

Poznámka: Ďalším spôsobom, ako presunúť ovládacie prvky v čase spustenia, je použitie Delphi drag and drop súvisiace vlastnosti a metódy (DragMode, OnDragDrop, DragOver, BeginDrag, atď.). Presúvanie myšou sa dá použiť na to, aby používatelia mohli pretiahnuť položky z jedného ovládacieho prvku - napríklad zo zoznamu alebo stromového prehľadu - do iného.

Ako pamätať na kontrolnú pozíciu a veľkosť?

Ak povolíte používateľovi presunúť a zmeniť veľkosť ovládacích prvkov formulára, musíte sa ubezpečiť, že umiestnenie ovládacieho prvku je nejakým spôsobom uloží sa po zatvorení formulára a poloha každého ovládacieho prvku sa obnoví pri vytvorení / načítaní formulára. Tu je návod, ako uložiť vlastnosti vľavo, hore, šírka a výška pre každú kontrolu vo formulári INI file.

Ako asi 8 úchytiek?

Keď povolíte používateľovi presunúť a zmeniť veľkosť ovládacích prvkov vo formulári Delphi, pomocou myši za behu plne napodobňujú prostredie v čase návrhu, mali by ste pridať ovládaciu súpravu osem úchytiek zmenená.