Juhtnuppude liigutamine ja suuruse muutmine töö ajal

Siit saate teada, kuidas lubada juhtelementide lohistamist ja suuruse muutmist (Delphi vormil) hiirega rakenduse töötamise ajal.

Vormiredaktor jooksuajal

Kui olete vormile juhtelemendi (visuaalse komponendi) asetanud, saate selle asukohta, suurust ja muid kujundamise aja atribuute kohandada. Siiski on olukordi, kui peate oma rakenduse kasutajal lubama vormi juhtelemente ümber paigutada ja nende suurust jooksval ajal muuta.

Kolme nupuga vormi kasutajal liikumise võimaldamiseks ja juhtelementide suuruse muutmiseks hiirega hiirega seotud sündmused vajavad spetsiaalset käsitsemist: OnMouseDown, OnMouseMove ja OnMouseUp.

Teoreetiliselt oletame, et soovite lubada kasutajal hiirega nupu juhtelementi käitamisajal liigutada (ja selle suurust muuta). Esiteks käsitlete sündmust OnMouseDown, et võimaldada kasutajal nuppu haarata. Järgmisena peaks OnMouseMove sündmus nuppu ümber paigutama (teisaldama, lohistama). Lõpuks peaks OnMouseUp kolimistoimingu lõpule viima.

Vormikontrolli lohistamine ja suuruse muutmine praktikas

instagram viewer

Esiteks tilgutage vormile mitu nuppu. Juhtseadmete teisaldamise ja suuruse muutmise lubamiseks või keelamiseks töö ajal saate linnukese.

Järgmisena määratlege kolm protseduuri (jaotises liides vormideklaratsiooni osa), mis käsitleb ülalkirjeldatud hiire sündmusi:

tüüp
TForm1 = klass(TForm)... protseduur ControlMouseDown (saatja: TObject; Nupp: TMouseButton; Shift: TShiftState; X, Y: täisarv); protseduur ControlMouseMove (saatja: TObject; Shift: TShiftState; X, Y: täisarv); protseduur ControlMouseUp (saatja: TObject; Nupp: TMouseButton; Shift: TShiftState; X, Y: täisarv); privaatne
inReposition: tõeväärtus; oldPos: TPoint; 

Märkus. Juhtimisliikumise tähistamiseks on vaja kahte vormi taseme muutujat (inReposit) ja hoidke kontrolli vana positsiooni (vanaPos).

Vormi saidil OnLoad määrake hiire sündmuste käitlemise protseduurid vastavatele sündmustele (nende juhtelementide jaoks, mida soovite lohistatavaks / muudetavaks muuta):

protseduur TForm1.FormCreate (saatja: TObject); alustada
Button1.OnMouseDown: = ControlMouseDown; Button1.OnMouseMove: = ControlMouseMove; Button1.OnMouseUp: = ControlMouseUp; Redigeerimine1.OnMouseDown: = ControlMouseDown; Redigeerimine1.OnMouseMove: = ControlMouseMove; Redigeerimine1.OnMouseUp: = ControlMouseUp; Paneel1.OnMouseDown: = ControlMouseDown; Paneel1.OnMouseMove: = ControlMouseMove; Paneel1.OnMouseUp: = ControlMouseUp; Nupp2.OnMouseDown: = ControlMouseDown; Button2.OnMouseMove: = ControlMouseMove; Button2.OnMouseUp: = ControlMouseUp; lõpp; (* FormCreate *)

Märkus: ülaltoodud kood võimaldab Button1, Edit1, Panel1 ja Button2 ümberpaigutamist tööaja järgi.

Lõpuks, siin on võlukood:

protseduurTForm1.ControlMouseDown ( Saatja: TObject; Nupp: TMouseButton; Shift: TShiftState; X, Y: täisarv);alustadakui (chkPositionRunTime. Kontrollitud) JA
(Saatja on TWinControl) siisalustada
inReposition: = tõsi; SetCapture (TWinControl (saatja) .Käepide); GetCursorPos (oldPos); lõpp; lõpp; (* ControlMouseDown *)

ControlMouseDown Lühidalt: kui kasutaja vajutab hiirenuppu juhtnupu kohal, kui käivitusaja ümberpaigutamine on lubatud (märkeruut chkPositionRunTime on kontrollitud) ja hiire alla võtnud juhtseade pärineb TWinControlist, märkige, et juhtimise ümberpaigutamine toimub (inReposition: = True) ja veenduge, et kogu hiire töötlemine oleks kontrolli jaoks haaratud - klõpsamise vaikesündmuste vältimiseks töödeldud.

protseduurTForm1.ControlMouseMove ( Saatja: TObject; Shift: TShiftState; X, Y: täisarv);const
minlaius = 20; minHeight = 20; var
newPos: TPoint; frmPoint: TPoint; alustadakui inReposit siisalustadakoos TWinControl (saatja) tehaalustada
GetCursorPos (newPos); kui ssShift sisse Vahetus siisalustada//resize
Ekraan. Kursor: = crSizeNWSE; frmPoint: = ScreenToClient (hiir. CursorPos); kui frmPoint. X> minWidth siis
Laius: = frmPoint. X; kui frmPoint. Y> minHeight siis
Kõrgus: = frmPoint. Y; lõppmuud//movealustada
Ekraan. Kursor: = crSize; Vasak: = Vasak - oldPos. X + newPos. X; Ülaosa: = Üles - oldPos. Y + newPos. Y; oldPos: = newPos; lõpp; lõpp; lõpp; lõpp; (* ControlMouseMove *)

ControlMouseMove lühidalt: muutke ekraani kursorit toimingu kajastamiseks: klahvi Shift vajutamisel laske juhtnupu suurust muuta või liigutage juhtnupp lihtsalt uude kohta (kuhu hiir läheb). Märge: minWidth ja minHeight konstandid pakuvad teatud tüüpi suurusepiiranguid (minimaalne juhtimislaius ja -kõrgus).

Kui hiirenupp vabastatakse, on lohistamine või suuruse muutmine lõppenud:

protseduurTForm1.ControlMouseUp ( Saatja: TObject; Nupp: TMouseButton; Shift: TShiftState; X, Y: täisarv);alustadakui inReposit siisalustada
Ekraan. Kursor: = crDefault; ReleaseCapture; inReposit: = vale; lõpp; lõpp; (* ControlMouseUp *)

ControlMouseUp lühidalt: kui kasutaja on liikumise lõpetanud (või juhtelemendi suuruse muutnud), vabastage hiirelõik (klõpsamise vaiketöötluse võimaldamiseks) ja märkige, et ümberpaigutamine on lõppenud.

Ja see teeb seda! Laadige alla näidisrakendus ja proovige ise järele proovida.

Märkus. Teine viis juhtnuppude teisaldamiseks töö ajal on Delphi-de kasutamine tõmba ja lase lahti seotud omadused ja meetodid (DragMode, OnDragDrop, DragOver, BeginDrag jne). Lohistamise ja langusega saab kasutajatel lasta üksustel ühest juhtelementist (näiteks loendikast või puuvaade) teise tõmmata.

Kuidas meeles pidada juhtimispositsiooni ja -suurust?

Kui lubate kasutajal vormikontrolle teisaldada ja selle suurust muuta, peate tagama, et juhtelementide paigutamine oleks mingil moel salvestatakse, kui vorm suletakse, ja iga juhtelemendi asukoht vormi loomisel / laadimisel taastatakse. Siit saate teada saada, kuidas vormi iga juhtelemendi jaoks vasakut, ülaosa, laiust ja kõrgust salvestada INI faili.

Kuidas on umbes 8 suurusega käepidemega?

Kui lubate kasutajal Delphi-vormingus juhtelemente teisaldada ja nende suurust muuta, siis töö ajal hiire abil jäljendades täielikult disainiaja keskkonda, peaksite juhtimisolekusse lisama kaheksa suurust käepidet muudetud suurusega.

instagram story viewer