Delphi note poleznyashki

În TLabel există o astfel de caracteristică utilă. Dacă Caption pentru a adăuga un ampersand ( ), Următoarea literă pentru acest simbol devine un accelerator. În acest caz, atunci când antetul de desen simbolul în sine este ascuns, iar scrisoarea-accelerator - este accentuat. Acest lucru înseamnă că, dacă apăsați Alt + <буква>, acțiunea este de a instala focalizarea de intrare pentru controlul pe care se face referire TLabel.FocusControl de proprietate. Se întâmplă în mod automat - acest lucru este un comportament normal pentru GUI pe Windows.

Cu toate acestea, în cazul în care utilizatorul face clic pe mouse-ul pe cele mai TLabel. nu se va întâmpla nimic. Eu cred că nu este bun: utilizator intuitivă se așteaptă de la un clic pe eticheta de același comportament, precum și dintr-o combinație de taste.

Punerea în aplicare propriile lor mâini comportamentul dorit - simplu. Este suficient TLabel.OnClick handler de a scrie o linie de genul:

Acum, imaginați-vă că avem astfel de etichete vor avea o mulțime ... Apoi, puteți crea o componentă care moștenește de la standardul TLabel. Dar nu este convenabil:

  • componenta va fi foarte simplu (aproape toate cu o singură linie de cod util), dar trebuie să fie într-un modul separat, și chiar a instala componentele din paleta;
  • atunci când proiectarea formularelor să-și amintească să utilizeze noua componentă;
  • și, dacă aveți deja un formular, este necesar ca el să meargă și să înlocuiască toate TLabel standard de la nou;
  • și dacă ați folosit deja alte componente care se extind standardul un TLabel, va trebui să facă, și pentru ei moștenitori.

Așa că mergem altă cale. Aici este doar codul pentru:

Utilizați codul de genul:

Mai pot fi adăugate la cea de a doua versiune a formei de bază și să uitați despre această problemă pentru totdeauna :)

Delphi note poleznyashki

rahat fără sens și inutil.

Și ce este acolo, la toate CustomLabel variabile? Nu înțeleg acest punct.

pgolub, Roman Yankovsky
„Vanity“ cu CustomLabel și AccessLabel este după cum urmează.

a) Proprietatea FocusControl TCustomLabel a anunțat la nivel de clasă. de aceea este important să Sender a fost doar de tip TCustomLabel. Pentru a face acest lucru, utilizați ca operator. Puteți utiliza este. Sau poate duce chiar și în liniște și sacru să creadă că nimeni nu place atribuie handler DoSelectFocusControl pe buton. de exemplu.

b) proprietatea FocusControl TCustomLabel la nivelul clasei declarate în secțiunea protejată. Prin urmare, în acest fel: TCustomLabel (Sender) .FocusControl nu funcționează, nu este disponibil. Un TLabel această proprietate publică, de publicat și putem scrie în siguranță acest lucru: TLabel (Sender) .FocusControl.

Torbins
Ca o opțiune - da. Dar există un lucru: un nou modul, care pune în aplicare o nouă funcționalitate, nu uitați să adăugați la utilizările fiecărui formular. Mâna este de a face mai degrabă melancolic.

În acest caz, noul comportament este pus în aplicare printr-o simpla inlocuire a unui procesor convențional. Acest lucru se poate face în RunTime după crearea tuturor componentelor în nivelul sub formă de bază. Ie pentru un proiect existent, cu multe forme suficiente schimbări într-un singur modul de sursă.

În general, în ultimii ani, am încetat să iubesc aducerea tipurile de tipuri:
dacă SomeObject este TSomeClass atunci
începe
TSomeClass (SomeObject) .A;
TSomeClass (SomeObject) .B;
se încheie;
modalitate mai bună:
cu SomeObject ca TSomeClass fac
începe
A;
B;
se încheie;
Dar există un pericol, cu un „nu ajunge acolo.“ Prin urmare, mai clară anunța variabilă suplimentară de tipul dorit și a cuvântului cheie absolut scăpa de șir de inițializare suplimentare pentru această variabilă.

Asta e modul în care aceasta nu mai ușor?

Procedura de clasă TTCustomLabelClick.DoSelectFocusControl (Expeditor: TObject);
var
AccessLabel: TLabel;
începe
dacă expeditorul este TCustomLabel atunci
începe
AccessLabel: = TLabel (Sender);
dacă este atribuit (AccessLabel.FocusControl) și apoi AccessLabel.FocusControl.CanFocus
AccessLabel.FocusControl.SetFocus;
se încheie;
se încheie;

> Deci, nu este mai ușor?
Ei bine, ca oricine. Am folosit pentru a fi „speriat“ de cuvinte cheie :) absolut. Dar nu este nimic neobișnuit. Neobișnuit de top ..

De fapt, această bucată de cod este poziția mea principială într-o singură - folosiți ca în schimb este. Pentru aleatoare (sau specifică) procesor de scop, nu pentru a controla - aceasta este o greșeală. ca eroarea va spune, dar este vă permite să-l ascundă.

absolut dreptul de a nu speria, sperie abordare destul de neobișnuit pentru tipurile de inspecție. Cu toate acestea, codul trebuie să fie mai întâi citit, în opinia mea. Deci, astfel de lucruri ar trebui să fie la un nivel minim. Proprietarul, un domn, în principiu. Dar eu, n-aș fi scris nici în cazul în care.

>> ca eroarea va spune, dar este vă permite să-l ascundă.

Aici, din nou, eu nu înțeleg. Este codul „dacă expeditorul este TLabel atunci“ permit transferul procedurii TButton?

Nu în cazul în care de fapt Expeditor va face clic și scrie „dacă expeditorul este TLabel atunci“, nu vor exista erori, deoarece condiția nu va funcționa. Iar metoda nu face nimic.
Ie Cred că o greșeală faptul că handler este atribuit obiectului greșit.
Neîndeplinirea unei erori sau proiectare, iar greșeala pe care a permis programator care a numit handler. Și pentru a face acest lucru, el ar dori acest lucru:
SetLabelClickEvent (TLabel (MyNotLabelObject))

În condiții extreme, trebuie să lucreze :)
Dar abordarea „ca“ interesant, da, deși utilizarea absolută eu încă nu prea place.

"Crap". modul în care programatorii ca aceste cuvinte. probabil cei pe care el „nu a avut loc.“

De fapt - sunt de acord cu Jankowski. Despre absolută - ar trebui să încercați să uite. Există o mulțime tehnici mai corecte. Chiar și același lucru „dat în paranteze.“