Форум: "Начинающим";
Текущий архив: 2010.11.14;
Скачать: [xml.tar.bz2];
ВнизУзнать, есть ли свойство у контрола? Найти похожие ветки
← →
mfender (2010-08-23 18:53) [0]Вот такой интересный вопрос: у меня на фрейме лежат несколько компонентов, к которым я привинтил несколько новых полей и свойств. Как можно определить, есть-ли у компонента свойство, и соответственно передать в него ранее созданный объект.
В целом выглядит это так: фрейм с компонентами у которых есть
FIni: TIniFile;
......
property Ini: TIniFile read FIni write FIni;
Как перебрать их всех - понятно. А как проверить есть-ли Ini у него, ну и назначить если он есть.
← →
0x00FF00 © (2010-08-23 19:03) [1]if ТекущийКомпонент is ТКомпонентСНовымиПолями then ...
И далее по накатанной.
← →
mfender (2010-08-23 19:07) [2]
> if ТекущийКомпонент is ТКомпонентСНовымиПолями then ...
>
> И далее по накатанной.
Ну я не совсем дурак, как писать условия слыхал пару раз ))))
Как написать вот это - ТКомпонентСНовымиПолями не совсем русскими буквами? ))))
← →
0x00FF00 © (2010-08-23 19:08) [3]А можно нескромный вопрос: какое имя класса у твоего компонента с новыми полями?
← →
mfender (2010-08-23 19:14) [4]
> А можно нескромный вопрос: какое имя класса у твоего компонента
> с новыми полями?
Вот! Это хороший вопрос.
Их несколько: TsIniEdit, TsIniSpinEdit, TsIniCheckBox et cetera в количестве примерно дюжины. Понятно, что можно их всех в условие воткнуть.
Но у меня вопрос-то как раз такого характера (локализую): Есть ли возможность проверить наличие свойства в компоненте, не зная его имени класса?
← →
0x00FF00 © (2010-08-23 19:16) [5]
> mfender (23.08.10 19:14) [4]
Небольшой оффтопик:
А зачем вобще такие компоненты?
Не проще ли завести в программе один глобальный TIniFile, а не ворох раскиданных по компонентам?
← →
mfender (2010-08-23 19:19) [6]Так он есть один. Но создаётся-то динамически, и при создании фрейма с этими настроечными контролами нужно им пояснить, кого танцевать в ходе работы.
← →
Anatoly Podgoretsky © (2010-08-23 19:27) [7]> mfender (23.08.2010 19:14:04) [4]
Используй RTTI работает для Published свыойства
← →
Игорь Шевченко © (2010-08-23 20:05) [8]
> property Ini: TIniFile read FIni write FIni;
если перед этой фразой стоит слово published, то можно узнать через IsPublishedProp.
или можно сравнивать по classname, тоже вариант, если не хочешь в uses тянуть все ссылки на свои компоненты.
← →
mfender (2010-08-23 20:54) [9]
> Используй RTTI работает для Published свыойства
Спасибо Уважаемый Анатолий! Какая замечательная вещь эта RTTI !!! Cколько раз мне это было нужно, а я и не знал куда копать. А тут вот оно! Почитал, поразбирался - теперь и жить веселее стало!
Спасибо!
Да, вот как я решил этот свой вопрос:
procedure TSettings.Init;
var
PropInfo: PPropInfo;
I: Integer;
begin
for I := 0 to ComponentCount - 1 do
begin
PropInfo := GetPropInfo(Components[i].ClassInfo, "Ini");
if PropInfo <> nil then
SetObjectProp(Components[i], "Ini", frmMain.Ini);
end;
end;
И всех делов-то! ))))
← →
Anatoly Podgoretsky © (2010-08-23 21:14) [10]> mfender (23.08.2010 20:54:09) [9]
Классический код.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2010.11.14;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.003 c