Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.11.14;
Скачать: CL | DM;

Вниз

Узнать, есть ли свойство у контрола?   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.008 c
2-1282134061
Сергей
2010-08-18 16:21
2010.11.14
Ошибка отключаю связь таблиц


15-1280731176
nod32
2010-08-02 10:39
2010.11.14
создание самопального сервера обновлений nod32


6-1220980433
dmitry_12_08_73
2008-09-09 21:13
2010.11.14
Шаринг изображений с использованием сервисов SCP/SFTP, HTTP...


15-1280438963
Германн
2010-07-30 01:29
2010.11.14
W7 90-days trial version


2-1282022380
12
2010-08-17 09:19
2010.11.14
Как писать запросы к таблицам dbf