Puteți edita proprietățile din fereastra Inspector de obiecte în două moduri. Una este să dai utilizatorului posibilitatea de a edita proprietățile ca un șir de text. Altele necesită crearea unei casete de dialog speciale în care proprietatea este editată. În unele cazuri, va trebui să utilizați ambele metode pentru a edita o singură proprietate.
2. Editați proprietatea ca text.
3. Editați proprietatea în caseta de dialog (opțional).
Toți acești pași sunt dezbătuți în detaliu în secțiunile următoare.
(de exemplu, "A" .. "Z")
Toda, și anume evenimente
Int64 și derivații săi
Dacă sunt selectate mai multe componente
Editarea unei proprietăți ca text
De exemplu, luați în considerare definiția clasei TIntegerProperty în modul
funcția GetValue: șir; suprascrie;
procedura SetValue (valoare const: șir); suprascrie;
După cum puteți vedea, metodele GetValue () și SetValue () sunt suprascrise. Următoarele arată implementarea metodei GetValue ():
funcția TIntegerProperty.GetValue: șir;
Dar implementarea metodei SetValue ():
procedura TIntegerProperty.SetValue (valoarea const: String);
cu GetTypeData (GetPropType) ^ face
dacă (L
Tabelul 12.2. Metode pentru citirea și scrierea proprietăților clasei TPropertyEditor
Acest lucru este prea simplu, așa că vom complica sarcina. Să presupunem că trebuie să oferiți utilizatorului posibilitatea de a alege unul din cele două moduri de a seta planeta. El poate scrie numele planetei, de exemplu Venus sau VENUS. sau VeNuS. sau pentru a intra în poziția planetei în sistemul solar. Deci, pentru Venus, această poziție va fi egală cu 2.
Mai jos este codul sursă al componentei TPlanet:
TPlanetName = tip Integer;
proprietate PlanetName: TPlanetName citește FPlanetName
După cum puteți vedea, această componentă este destul de mică. Are o singură proprietate PlanetName de tip TPlanetName. O definiție specială a tipului TPlanetName îi permite să aibă propriile informații despre tipurile de timp de execuție și să rămână la tipul întreg.
interfața utilizeazăWindows, SysUtils, DesignEditors;
funcția GetValue: șir; suprascrie;
procedura SetValue (valoare const: șir); suprascrie;
PlanetNames: matrice [1..9] de String [7] = ('Mercury', 'Venus'
'Pământ', 'Marte', 'Jupiter', 'Saturn',
"Uranus", "Neptun", "Pluto");
funcția TPlanetNameProperty.GetValue: șir;
procedura TPlanetNameProperty.SetValue (valoarea const: String);
i, ValErr: Integer;
PlanetNames. Dacă se găsește o potrivire, atunci variabila i
are o valoare mai mică de 10.>
în timp ce (PName <> UpperCase (PlanetNames [i])) și (i <10) do
Setați valoarea și ieșiți din procedură
dacă i <10 then begin // Название планеты введено правильно.
numele inexistent al planetei. Utilizați funcția Val pentru
verificarea valorii introduse pentru un număr. Dacă ValErr nu este egal
zero, numele planetei este introdus incorect. altfel
Dacă verificați numărul introdus pe accesoriu
interval (0
Val (Valoare, i, ValErr);
dacă ValErr <> 0 atunci
Format ("Ne pare rău, niciodată nu am auzit despre planetă% s.", [Value]));
dacă (i <= 0) or (i>= 10) atunci
ridicați Exception.Create ("Ne pare rău, acea planetă nu este în sistemul nostru solar"); SetOrdValue (i);
Definiți o serie de constante de șir pentru reprezentarea planetelor sistemului solar, în funcție de poziția lor față de Soare. Aceste linii vor fi responsabile de reprezentarea șirului de planete în fereastra inspectorului de obiecte.
După cum sa menționat deja, trebuie să înlocuiți metodele GetValue () și Set-Value (). Metoda GetValue () returnează un șir din matricea PlanetNames. Această matrice este indexată de valorile proprietăților. Desigur, valoarea proprietății trebuie să se situeze în intervalul 1-9. Prin urmare, utilizatorul nu are permisiunea de a introduce un număr în afara intervalului în metoda SetValue ().
Metoda SetValue () primește șirul introdus în fereastra Object Inspector. aceasta
Șirul poate fi fie numele planetei, fie numărul care definește poziția
planeta. Logica codului determină dacă numele plantei sau numărul său este corect introdus și, dacă da, valoarea corespunzătoare este atribuită proprietății prin metoda SeTOrValue (). Dacă utilizatorul a introdus un nume incorect al unei planete sau un număr nevalid, atunci este aruncată o excepție adecvată.
Procedură RegisterPropertyEditor (PropertyType: PTypeInfo; ComponentClass: TClass; const PropertyName: string;
RegisterPropertyEditor (TipInfo (TPlanetName), TPlanet, "PlanetName", TPlanetNameProperty); COD
în modulul component, așa cum se arată în Lista 12.5. Listing 12.5. Planet.pas - componenta TPlanet unit Planet;
TPlanetName = tip Integer;
proprietate PlanetName: TPlanetName citește FPlanetName