Creați propriul buton în Delfi - delphi - software

Noi trecem la afaceri. Să presupunem că proiectul pentru care vom crea un buton, este deja deschisă. În primul rând, creați un nou modul (File \ New \ unitate). Să păstreze doar unitatea (prin apăsarea Ctrl + Shift + S) sub numele MyButtonUnit. În modulul vom vedea două secțiuni: interfață și implementare. În prima secțiune, vom descrie modulele plug-in, tipurile de date, proceduri, constante și variabile, iar a doua va fi în codul în sine.







După interfața va descrie modulele de care avem nevoie. Se pare ca acest lucru:

interfață
utilizează clasele, controale, Ferestre grafica, mesajele;

După aceea, trebuie să descriem ne-a creat o nouă clasă (TMyButton), care se bazează clasa TCustomControl vor fi stabilite.

tip TMyButton = class (TCustomControl)
privat
protejat
public
se încheie;

Vezi trei secțiuni ale clasei noastre: private, protejate și publice. Prima descrie variabilele și procedurile care vor fi disponibile pentru a fi utilizate numai în cadrul clasei. Secțiunea protejată descrie metodele puse în aplicare în clasa părinte. În cele din urmă, a treia secțiune descrie funcțiile și procedurile care vor fi disponibile în afara clasei.

Începeți cu publicul.
Descriem constructorului: constructor Creare (AOwner: TComponent);
Procedăm în secțiunea de punere în aplicare și să scrie cod care va rula atunci când creați un buton.

constructor TMyButton.Create (AOwner: TComponent);
începe
moștenită Creare (AOwner);
Părinte: = AOwner ca TWinControl;
Lățime: = 100;
Înălțime: = 25;
se încheie;

Am adus o parte obligatorie a codului. Puteți adăuga, de asemenea, să-l dacă este necesar.

Acum este timpul să se gândească la modul de a lucra butonul. cheia noastră este de a schimba imaginea atunci când treceți peste ea. Acesta trebuie să conțină inscripția. Acesta este minimul! Odată ce butonul se va schimba aspectul atunci când treceți peste ea, secțiunea privată va descrie variabila FSelected. boolean; starea de stocare a butonului. Să ne butonul mai târziu. În aceeași secțiune va descrie FCaption variabilă. String, care păstrează eticheta butonul. Pentru a semna ar putea fi schimbată descrie Caption proprietate: String citește FCaption scrie SetCaption; secțiunea publică. După cum puteți vedea, procedura de SetCaption încă nu am creat. Am descrie în secțiunea privată:

Procedura SetCaption (Val: String);

și, desigur, va crea codul în sine:

Procedura TMyButton.SetCaption (Val: string);
începe
FCaption: = Val;






vopsea;
se încheie;

Procedura de vopsea este desen un buton, care ne întoarcem acum. Ei, vom descrie în secțiunea protejată - Procedura de vopsea; suprascrie;.
Imediat scrie codul:

Procedura TMyButton.Paint;
începe
În cazul în care nu FSelected
atunci
începe
Canvas.Pen.Color: = $ FFFFFF;
Canvas.Brush.Color: = $ FFFFFF;
capăt
altfel
începe
Canvas.Pen.Color: = $ EEEEEE;
Canvas.Brush.Color: = $ EEEEEE;
se încheie;

Canvas.Rectangle (0,0, lățime, înălțime);
Canvas.TextOut ((Lățime - Canvas.TextWidth (FCaption)) div 2 (înălțime - Canvas.TextHeight (FCaption)) div 2, FCaption);
se încheie;

Acordați atenție condiției. Noi oferim o varietate de opțiuni de design, atunci când alocate și butonul nealocat. Cum de a lucra cu elementele grafice, cred că, știi, astfel încât se poate personaliza foarte usor aspectul propriu.

Și acum partea distractivă: modul de a face butoane schimba aspectul atunci când vă mutați?

Noi descriem două proceduri în cadrul privat:

Procedura MENTER (Mes var: TMessage); CM_MOUSEENTER mesaj;
Procedura MLeave (Mes var: TMessage); CM_MOUSELEAVE mesaj;

Proceduri de răspuns la mesaje de intrare și de ieșire al mouse-ului în zona de buton. Primul - pentru a introduce un mesaj, iar al doilea - la mesajul de ieșire. Și aici este codul pe care le provoacă.

Procedura TMyButton.MEnter (Mes var: TMessage);
începe
FSelected: = true;
Paint;
se încheie;

Procedura TMyButton.MLeave (Mes var: TMessage);
începe
FSelected: = false;
Paint;
se încheie;

După cum puteți vedea, semnalăm pur și simplu, butonul evidențiat evidențiată sau nu și-l redesena.

Bine, am finalizat sarcina, dar cum să pună în aplicare un buton în aplicație? Foarte simplu! Ai nevoie pentru a descrie modul am creat în locația dorită și faceți clic pentru a crea și descrie-o ca o variabilă (var B. TMyButton;), creați (B: = TMyButton.Create (auto)), și reglați câmpul (B.Caption: = ' butonul „;).
În general:

Procedura TForm3.FormCreate (Expeditor: TObject);
var
B. TMyButton;
începe
B: = TMyButton.Create (auto);
B.Caption: = 'buton';
se încheie;

Acum știi cum să-și creeze propriile controale și pot lucra la proiectarea programului. Mult noroc!

Codul sursă al modulului:

interfață
utilizează clasele, controale, Ferestre grafica, mesajele;

tip TMyButton = class (TCustomControl)
privat
FSelected: Boolean;
FCaption: String;
Procedura SetCaption (Val: String);
Procedura MENTER (Mes var: TMessage); CM_MOUSEENTER mesaj;
Procedura MLeave (Mes var: TMessage); CM_MOUSELEAVE mesaj;
protejat
Procedura de vopsea; suprascrie;
public
constructor Creare (AOwner: TComponent);
Legendă proprietate: String citit FCaption scrie SetCaption;
se încheie;

constructor TMyButton.Create (AOwner: TComponent);
începe
moștenită Creare (AOwner);
Părinte: = AOwner ca TWinControl;
Lățime: = 100;
Înălțime: = 25;
se încheie;

Procedura TMyButton.SetCaption (Val: string);
începe
FCaption: = Val;
vopsea;
se încheie;

Procedura TMyButton.Paint;
începe
În cazul în care nu FSelected
atunci
începe
Canvas.Pen.Color: = $ FFFFFF;
Canvas.Brush.Color: = $ FFFFFF;
capăt
altfel
începe
Canvas.Pen.Color: = $ EEEEEE;
Canvas.Brush.Color: = $ EEEEEE;
se încheie;

Canvas.Rectangle (0,0, lățime, înălțime);
Canvas.Font.Color: = 0;
Canvas.TextOut ((Lățime - Canvas.TextWidth (FCaption)) div 2 (înălțime - Canvas.TextHeight (FCaption)) div 2, FCaption);
se încheie;

Procedura TMyButton.MEnter (Mes var: TMessage);
începe
FSelected: = true;
Paint;
se încheie;

Procedura TMyButton.MLeave (Mes var: TMessage);
începe
FSelected: = false;
Paint;
se încheie;