Hogyan juthat el az összes felirata az űrlap vezérlők
Hogyan juthat el minden Caption „s ellenőrzések formájában?
Meg kell menteni őket egy fájlba
<имя контрола>=<его caption>
Ezután töltse az egészet újra.
Írja többnyelvű munkát.
a nIndex: = 0 myForm.ControlCount - 1 do
SaveToFile (myForm.Controls [nIndex] .Caption);
> Asmith (10.12.02 21:06)
1. Az ingatlan TControl.Caption - védett. Ezért, a kód nem is fordul.
2. Ellenőrzési eshet nem a formában, és, például, a panelen. Ezután sorold myForm.Controls elvéti.
Van egy kicsit másképp.
típus
TFriendControl = osztály (TControl);
.
i: = 0 ComponentCount - 1 do
ha komponensek [i] TControl majd
a TFriendControl (komponensek [i]) do
ha Képaláírás <> „” Akkor.
> kibic
Nem szükséges. védett osztály tagjai bejelentett ugyanabban a modulban, a rendelkezésre álló, és így.
Köszönöm, persze, de a Caption jelenléte a szabályozás nem szükséges, és használja a próbát - elég szerencsétlen döntés.
Azt találtuk, hogy a kód ellenőrzi a jelenléte olyan tulajdonságok (csak ellenőrizni Caption) a IniLang könyvtárban.
Ha valaki kell, akkor itt is van
funkció HasProperty (comp: TComponent; prop: String): logikai;
kezdődik
Eredmény: = (getPropInfo (comp.classInfo, prop)<>nulla) és comp.name<>"");
végén;
felhasznált
ha HasProperty (Button1 "Caption"), akkor kezdődik
//.
végén;
Igaz, hogy a TNT-komponenseket kell perverz, és meghatározza az osztály a komponens pontosabban.
var
ws: WideString;
WSL: TWideStringList;
kezdődik
WSL: = TWideStringList.Create (nulla);
//.
ha HasProperty (Self.Controls [i], "Caption"), akkor kezdődik
ha Self.FindComponent (Self.Controls [i] .name) van TTntButton majd
kezdődik
a TTntButton (Self.FindComponent (Self.Controls [i] .name)) do
kezdődik
wsl.Add (Self.Controls [i] .name + "=" + felirat);
végén;
végén;
végén;
//.
wsl.SaveUnicode: = true;
wsl.SaveToFile ( "Captions.txt")
wsl.Free;
„Van TComponent” nem lehet használni, mert majd Caption szól, mint egy húr, és nem egy WideString, és minden unicode legyek nafig.
Talán akkor optimális? És azt kell leírni minden osztály az ellenőrzés az egyéni és osztály típusú TTntControl Szeretek nem található.
> Self.FindComponent (Self.Controls [i] .name)
Nos, és hajlott. Én nem lett volna képes.
Tény:
Felhasználási RTTI
var CompCaption: string;
IF.
CompCaption: = GetPropValue (Controls [i], "Caption") // - előállítására a cím szerinti vegyületet AnsiString függetlenül típusától.
Ez a munka, akkor is, ha néhány gomb St. felirata Integer :)))
Az a tény, hogy a hajlított - teljesen be a :-)
Nos, hogyan lehet / beállítani felirat a menüpontok az összetevő neve?
Tehát miután TMenuItem - leszármazottja TComponent, de nem TControl,
és ez természetes, hogy a kezelőszervek [] nem.
De ez a Components [].
De én nem értem.
Ha szüksége van TMenuItemy - meg kell szervezni
kiterjedő összes komponens (nincs ellenőrzés):
i: = 0 ComponentCount - 1 do
ha GetPropInfo (komponensek [i], "Caption") <> nulla, akkor
ChegoToTam.Add (GetPropValue (komponensek [i], "Caption"));
PS Miért mindig elhúzódik Self?
Ennek akkor van értelme, ha van a kód benne van az
(És nem csak az, de valami hasonló tulajdonságú)
> Caption jelenléte a kontroll nem szükséges
> Jól és hogyan lehet / beállítani felirat a menüpontok a
> Name az alkatrész?
felhasználások
# 032; TypInfo;
.
S: = GetStrProp (komponensek [i], "Caption");
.
SetStrProp (komponensek [i], "Caption", "Close");
-)))
Elég tormozhu már. Itt az ideje a pihenésre, kikapcsolódásra, pihenésre.
Csak próbáltam megtalálni TMenuItem a Controls [], hanem az összetevők [].
És használ ComponentCount ásni Controls [].
2Yury Zotov:
GetStrProp következtében bizonyos típusú cserébe? String (PChar, ShortString)?
Ha igen, akkor ez nem fog segíteni nekem, talán alkatrészek TNT Képaláírás van típus WideString, és minden adat elvész, és ez az egész trükk.
ZY Személyes köszönhetően a fejlesztők AAAAAAAAAAAfigennoe TNT-alkatrészeket.
Itt látható a végrehajtását GetStrProp
funkció GetStrProp (Bíróság: TObject; PropInfo: PPropInfo): string;
kezdődik
esetben PropInfo ^ .PropType ^ .Kind a
tkString: GetShortStrPropAsLongStr (instance PropInfo, Eredmény);
tkLString: GetLongStrProp (instance PropInfo, Eredmény);
tkWString: GetWideStrPropAsLongStr (instance PropInfo, Eredmény);
// Automatikus átalakítás a WideString hogy AnsiString
más
Eredmény: = "";
végén;
végén;
Ha kell kap ez WideString, a standard
Hozzáférés WideString Saint-RTTI akkor nem látom,
legalábbis D5.
Csak fordítva: $ FE - Wirth. F-I, $ FF - területen.
És ez igaz a D5, D6, hogy ellenőrizze magát.
(És nézd typinfo - Akárhogy is, a D6 már több,
kényelmes hozzáférést WideString St.-te).
És ha csak az egyik komponens a Caption „th
és nem több, mint az várható volt -
akkor talán könnyebb kifejezetten öntött vagy felforgatta.
F-I hozzáférést WideString St.-, hogy D5:
típus
PVMTAsArray = ^ VMTAsArray;
VMTAsArray = array [0 .. $ FFFF] A Pointer;
funkció GetWStrProp (Bíróság: TObject; const propName: string): WideString;
var PGetCode: Pointer;
Getter: TWStrGet;
Field: Pointer;
Hibyte: Byte;
kezdődik
PGetCode: = GetPropInfo (például a "W") ^ GetProc ;.
Hibyte: = bíboros (PGetCode) SHR 24;
TMethod (getter) .data: = Bíróság;
ha hibyte = $ FF majd
kezdődik
Cardinal (Field): = bíboros (PGetCode) és $ FFFFFF + Cardinal (bíróság);
Eredmény: = WideString (Field ^);
véget mást
ha hibyte = $ FE majd
kezdődik
TMethod (getter) .Code: =
PVMTAsArray (Instance.ClassType) [(bíboros (PGetCode) és $ FFFFFF) div 4];
// nincs index, és az elmozdulás - Hibáztam
Eredmény: = getterkészítmények ();
vég
más
kezdődik
TMethod (getter) .Code: = PGetCode;
Eredmény: = getterkészítmények ();
végén;
végén;
Memória: 0,76 MB
Idő: 0,04 c