Mutarea TImage în formă în timp ce aplicația rulează
Mulți, probabil, s-au confruntat cu problema deplasării imaginii în formă. Rezolvați-l în trei moduri (poate că există mai multe).
Acum, scrieți instructorul OnMouseDown pentru imaginea noastră:
procedura TForm1.Image1MouseDown (expeditor: TObject; buton: TMouseButton;
Schimbare: TShiftState; X, Y: Integer);
începe
dacă butonul<>mbLeft apoi mutați: = false // dacă nu ați apăsat butonul din stânga, atunci nu vom muta!
elsebegin
mișcare: = adevărat;
x0: = x; / / rețineți coordonatele inițiale
y0: = y; / / rețineți coordonatele inițiale
se încheie;
se încheie;
În această secțiune a codului, verificați ce buton ați făcut clic pe imagine. Dacă este lăsat, amintiți-vă coordonatele și, dacă este altceva, atunci nu vă puteți mișca.
Acum, scrieți manualul OnMouseMove pentru imaginea noastră:
procedura TForm1.Image1MouseMove (expeditor: TObject; Shift: TShiftState; X,
Y: Integer);
începe
dacă mișcați atunci
image1.Left: = image1.Left + x-x0; // Schimbați poziția marginii din stânga
image1.Top: = imagine1.Top + y-y0; // Schimbați poziția marginii de sus
se încheie;
se încheie;
Ei bine și în cele din urmă pe handler OnMouseUp pentru imaginea noastră va fi astfel:
procedura TForm1.Image1MouseUp (expeditor: TObject; buton: TMouseButton;
Schimbare: TShiftState; X, Y: Integer);
începe
mutați: = false;
se încheie;
Aici totul este foarte simplu. Când butonul este eliberat, variabila de mutare este setată la falsă, astfel încât să nu poată fi mutată până la următorul clic pe imagine.
Această metodă este destul de simplă, atât pentru înțelegere, cât și pentru implementare. Dar același algoritm de deplasare poate fi realizat puțin mai frumos. Unele componente, inclusiv Image, au o procedură răcoritoare SetBounds (Stânga, Top, Lățime, Înălțime), care pot schimba toți cei patru parametri simultan. Prin urmare, evenimentul OnMouseMove poate fi modificat după cum urmează:
Dar există și un alt mod foarte interesant: puteți să mutați ecranul nu pe imaginea însăși, ci doar pe cadrul său, atunci când utilizatorul selectează un loc pentru imagine și eliberează butonul - se va deplasa acolo. Pentru a face acest lucru, avem nevoie de o altă variabilă globală: rec: TRect, care va stoca parametrii imaginii. Acum, schimbați usor manipulatorii de evenimente pentru imagine. Astfel, totul ca un întreg va arăta astfel:
procedura TForm1.Image1MouseUp (expeditor: TObject; buton: TMouseButton;
Schimbare: TShiftState; X, Y: Integer);
începe
Form1.Canvas.DrawFocusRect (rec);
cu imagine1 dobegin
setbounds (rec.left + x-x0, rec.top + y-y0, lățime, înălțime); // mutați imaginea
mutați: = false;
se încheie;
se încheie;
Deoarece DrawFocusRect desenează cadrul folosind metoda Xor, atunci când funcția este chemată din nou cu aceiași parametri, cadrul este șters.
Această metodă foarte frumoasă va adăuga o mulțime de interesante pentru programele dvs. Foloseste-o.
Pentru a insera un link catre acest articol pe un alt site, folositi urmatorul cod HTML: