Crearea editorilor de proprietate

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 MaxValue) atunci

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







Articole similare

Trimiteți-le prietenilor: