Tulajdon szerkesztők létrehozása
Kétféleképpen módosíthatja a tulajdonságokat az Object Inspector ablakban. Az egyik az, hogy a felhasználó képes legyen szerkeszteni a tulajdonságokat szöveget. Egy másik megköveteli egy speciális párbeszédpanel létrehozását, amelyben az objektum szerkesztésre kerül. Bizonyos esetekben mindkét módszert egy adott tulajdonság szerkesztéséhez kell használni.
2. Szerkessze a tulajdonságot szövegként.
3. Szerkessze a tulajdonságot a párbeszédpanelen (opcionális).
Mindezeket a lépéseket a következő szakaszokban részletesen ismertetjük.
(például "A" .. "Z")
Toda, azaz események
Int64 és származékai
Ha egynél több összetevő van kiválasztva
Tulajdonság szerkesztése szövegként
Például, fontolja meg a TIntegerProperty osztály definícióját a modulban
function GetValue: string; felülbírálhatja;
eljárás SetValue (const Érték: karakterlánc); felülbírálhatja;
Amint látja, a GetValue () és a SetValue () metódusokat felülírják. A GetValue () metódus végrehajtása a következő:
funkció TIntegerProperty.GetValue: string;
De a SetValue () módszer végrehajtása:
eljárás: TIntegerProperty.SetValue (const érték: karakterlánc);
GetTypeData (GetPropType) ^ csinál
ha (L
12.2 táblázat. A TPropertyEditor osztály tulajdonságainak olvasására és írására szolgáló módszerek
Ez túl egyszerű, ezért bonyolítjuk a feladatot. Tegyük fel, hogy a felhasználónak lehetőséget kell adnia arra, hogy kétféle módot válasszon a bolygó beállításához. Írd be a bolygó nevét, például Venus vagy VENUS. vagy VeNuS. vagy bejutni a bolygó helyzetébe a naprendszerben. Tehát a Vénusz esetében ez a pozíció megegyezik a 2-tel.
Az alábbiakban a TPlanet összetevő forráskódja:
TPlanetName = típusa Integer;
tulajdonság PlanetName: TPlanetName olvassa el az FPlanetName nevet
Mint látható, ez az összetevő elég kicsi. A TPlanetName típusnak csak egy PlanetName tulajdonsága van. A TPlanetName típusának speciális definíciója lehetővé teszi, hogy saját információkkal rendelkezzen a végrehajtási idő típusairól, és maradjon az egész számmal.
az interfészWindows, SysUtils, DesignEditors;
function GetValue: string; felülbírálhatja;
eljárás SetValue (const Érték: karakterlánc); felülbírálhatja;
PlanetNames: a [1..9] string [7] = ("Mercury", "Venus", "
"Föld", "Mars", "Jupiter", "Szaturnusz",
"Uranusz", "Neptunusz", "Plútó");
függvény TPlanetNameProperty.GetValue: string;
eljárás TPlanetNameProperty.SetValue (const Érték: karakterlánc);
i, ValErr: Integer;
PlanetNames. Ha egy találatot talál, akkor a i
10-nél kisebb értéket vesz igénybe.>
míg (PName <> UpperCase (PlanetNames [i])) és (i <10) do
Állítsa be az értéket, és lépjen ki az eljárásból.>
ha i <10 then begin // Название планеты введено правильно.
a bolygó nem létező neve. Használja a Val funkciót a
a beírt szám ellenőrzése. Ha a ValErr nem egyenlő
nulla, a bolygó neve helytelenül van megadva. egyébként
Ha a beírt számot ellenőrizte a tartozékon
tartomány (0
Val (Value, i, ValErr);
ha ValErr <> 0 majd
Formátum ("Sajnálom, Soha nem hallottam a bolygóról% s", [Érték]));
ha (pl <= 0) or (i>= 10)
emelje az Exception.Create ("Sajnálom, hogy a bolygó nincs a Naprendszerünkben"); SetOrdValue (i);
Határozzon meg egy sor tömb állandót a Naprendszer bolygóinak képviseletére, attól függően, hogy milyen helyzetben vannak a Naphoz viszonyítva. Ezek a sorok lesznek felelősek a bolygók sztring ábrázolásáért az objektum-ellenőrző ablakban.
Amint már említettük, felül kell hagynunk a GetValue () és a Set-Value () metódusokat. A GetValue () metódus egy stringet visz vissza a PlanetNames tömbből. Ezt a tömböt ingatlanértékek indexelik. Természetesen az ingatlan értékének 1-9 tartományban kell lennie. Ezért a felhasználónak nem szabad megadnia a SetValue () metóduson kívüli számot.
A SetValue () metódus megkapja az objektumellenőrző ablakban megadott karakterláncot. ezt
A sztring lehet a bolygó neve vagy a pozíciót meghatározó szám
bolygón. A kód logikája határozza meg, hogy a bolygó nevét vagy annak számát helyesen adta-e be, és ha igen, a megfelelő érték a tulajdonhoz rendelt a SeTOrValue () módszerével. Ha a felhasználó helytelen bolygó nevét vagy érvénytelen számot adott meg, akkor megfelelő kivételt kap.
eljárás RegisterPropertyEditor (PropertyType: PTypeInfo; ComponentClass: TClass; const Tulajdonságnév: string;
RegisterPropertyEditor (TypeInfo (TPlanetName), TPlanet, 'PlanetName', TPlanetNameProperty); KÓD
az összetevő modulban, amint azt a 12.5. 12.5. Planet.pas - komponens TPlanet egység Planet;
TPlanetName = típusa Integer;
tulajdonság PlanetName: TPlanetName olvassa el az FPlanetName nevet