= <надписа> След това всичко обратно зареди. Въведете многоезичието" /> = <надписа> След това всичко обратно зареди. Въведете многоезичието" />

ПредишенСледващото

Как да получите всичко, с надписи "и контрол на формата?

Трябва да ги запишете във файл
<имя контрола>=<его caption>

След всичко това обратно се зареди.

Въведете многоезичен работа.

за nIndex: = 0 до myForm.ControlCount - 1 направи
SaveToFile (myForm.Controls [nIndex] .Caption);

> Asmith (10.12.02 21:06)

1. Имот TControl.Caption - защитени. Ето защо, кодът дори не събира.
2. контрол може да не лежат на формата, а, например, на панела. След това се изброят myForm.Controls му липсва.

Имаш малко по различен начин.

тип
TFriendControl = клас (TControl);
.
защото: = 0 до ComponentCount - 1 направи
ако компоненти [Ь] е TControl тогава
с TFriendControl (компоненти [Ь]) направи
ако Надпис <> "" Тогава.

> кибик
Не е необходимо. защитени членове на класа са декларирани в същия модул, достъпен и така.

Благодаря, разбира се, но присъствието на Надпис в контролата не е необходимо, както и да използвате опит - доста нещастен решение.
Намерих кода, който проверява за наличието на каквито и да било свойства (проверява само за надпис) в IniLang библиотека.
Ако някой трябва да бъде, а след това тук е

функция HasProperty (съединение: TComponent проп: String): булева;
започвам
Резултати: = (getPropInfo (comp.classInfo, проп)<>нула) и comp.name<>"");
приключи;

използван като

ако HasProperty (Button1 "Надпис"), след което да започне
//.
приключи;

Верен на TNT-компоненти трябва да бъдат извратен и определяне на класа на компонента, по-точно.

Var
WS: WideString;
WSL: TWideStringList;
започвам
WSL: = TWideStringList.Create (нула);
//.
ако HasProperty (Self.Controls [Ь] "надпис"), след това започва
ако Self.FindComponent (Self.Controls [Ь] .name) е TTntButton тогава
започвам
с TTntButton (Self.FindComponent (Self.Controls [Ь] .name)) правят
започвам
wsl.Add (Self.Controls [I] .name + "=" + надпис);
приключи;
приключи;
приключи;
//.
wsl.SaveUnicode: = вярно;
wsl.SaveToFile ( "Captions.txt")
wsl.Free;

"Има TComponent" не може да се използва, тъй като След това Надпис чете като низ, а не като WideString, както и всички уникод лети nafig.

Може би можете в оптимално? И това е необходимо, за да се опише всеки клас контрол на индивидуални и клас тип TTntControl аз не обичам да намери.

> Self.FindComponent (Self.Controls [Ь] .name)
Е, и се наведе. Аз не биха били в състояние.

В действителност:
Използвайте RTTI

Var CompCaption: низ;

ако има.
CompCaption: = GetPropValue (контроли [Ь] "надпис") // - получаване на съединението от заглавието като AnsiString независимо от типа.

Това ще работи, дори и ако някои от бутоните Св Надпис от тип Integer :)))

Фактът, че се наведе - напълно обявим :-)

Е, как да получите / настроен надпис на елементите от менюто за име на компонент?

Така че, след като TMenuItem - потомък на TComponent, но не TControl,
и е естествено, че неговите контроли [] не.
Но това е в Компонентите [].

Но аз не го получи.

Ако имате нужда от TMenuItemy - необходимо е да се организират
разширяване във всички компоненти (не контролира):

защото: = 0 до ComponentCount - 1 направи
ако GetPropInfo (компоненти [Ь] "надпис") <> нула след това
ChegoToTam.Add (GetPropValue (компоненти [Ь] "надпис"));

PS Защо винаги Self влека?
Това има смисъл, само ако имате кода вътре е с
(И не само с, но с нещо, със същите характеристики)

> Надпис присъствие в контрола не е необходимо


> Е и как да получите / настроен надпис на елементите от менюто на
> Име на компонента?

употреби
# 032; TypInfo;
.
S: = GetStrProp (компоненти [Ь] "надпис");
.
SetStrProp (компоненти [Ь] "надпис", "Close");

-)))
Доста вече tormozhu. Това е време да си почине, да се отпуснете, да се отпуснете.
Просто се опитваме да намерим TMenuItem в контролите [], а не в Компонентите [].
И с помощта на ComponentCount рови в Controls [].

2Yury Zotov:
GetStrProp резултат на някакъв вид замяна? String (PChar, ShortString)?
Ако отговорът е да, тогава това няма да ми помогне, може би компоненти TNT Надпис имат тип WideString и всички данни ще бъдат загубени, и това е цялата работа.

ZY Моите лични благодарности на разработчиците AAAAAAAAAAAfigennoe TNT-компоненти.

Тук е изпълнението на GetStrProp

функция GetStrProp (съд: TObject; PropInfo: PPropInfo): низ;
започвам
При PropInfo ^ .PropType ^ .Kind на
tkString: GetShortStrPropAsLongStr (съд, PropInfo, Резултат);
tkLString: GetLongStrProp (съд, PropInfo, Резултат);
tkWString: GetWideStrPropAsLongStr (съд, PropInfo, Резултат);
// автоматично преобразуване от WideString да AnsiString
още
Резултат: = "";
приключи;
приключи;

Ако имате нужда, за да го WideString, стандартът
достъп WideString Saint-RTTI вас аз не виждам,
поне в D5.

Само в обратната: $ FE - Вирт. F-I, $ FF - област.
И това е вярно за D5, D6, за да се провери.
(И погледнете typinfo - тя може, в D6 е вече по-
удобен достъп до WideString Св-ти).

И ако имате само един компонент с надписа "-ти
и не повече от очакваното -
тогава може би по-лесно да хвърли изрично или извратил.

F-I достъп до WideString Св-ти за D5:

тип
PVMTAsArray = ^ VMTAsArray;
VMTAsArray = масив [0 .. $ FFFF] на показалеца;

функция GetWStrProp (съд: TObject; конст PropName: низ): WideString;
Var PGetCode: Стрелката;
Методът за получаване на: TWStrGet;
Поле: Pointer;
HiByte: Byte;
започвам
PGetCode: = GetPropInfo (съд, "W") ^ GetProc ;.
HiByte: = кардинал (PGetCode) SHR 24;

TMethod (Методът за получаване) .Data: = съд;
ако HiByte = $ FF тогава
започвам
Кардинал (поле): = кардинал (PGetCode) и $ FFFFFF + кардинал (съд);
Резултат: = WideString (поле ^);
сложи край на друг
ако HiByte = $ FE тогава
започвам
TMethod (Методът за получаване) .Code: =
PVMTAsArray (Instance.ClassType) [(Cardinal (PGetCode) и $ FFFFFF) DIV 4];
// не индексира и изместване - Направих грешка
Резултати: = Методът за получаване на ();
край
още
започвам
TMethod (Методът за получаване) .Code: = PGetCode;
Резултати: = Методът за получаване на ();
приключи;
приключи;

Памет: 0.76 MB
Време: 0.04 в

Свързани статии

Подкрепете проекта - споделете линка, благодаря!