Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Узнать, есть ли свойство у контрола? [D7]


mfender ©   (2010-08-23 18:53:00) 

Вот такой интересный вопрос: у меня на фрейме лежат несколько компонентов, к которым я привинтил несколько новых полей и свойств. Как можно определить, есть-ли у компонента свойство, и соответственно передать в него ранее созданный объект.

В целом выглядит это так: фрейм с компонентами у которых есть

FIni: TIniFile;
......
property Ini: TIniFile read FIni write FIni;


Как перебрать их всех - понятно. А как проверить есть-ли Ini у него, ну и назначить если он есть.


Anatoly Podgoretsky   (2010-08-23 21:14:00) [1]

> mfender  (23.08.2010 20:54:09)  [9]

Классический код.


mfender   (2010-08-23 20:54:00) [2]


> Используй 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;


И всех делов-то! ))))


Игорь Шевченко   (2010-08-23 20:05:00) [3]


> property Ini: TIniFile read FIni write FIni;


если перед этой фразой стоит слово published, то можно узнать через IsPublishedProp.

или можно сравнивать по classname, тоже вариант, если не хочешь в uses тянуть все ссылки на свои компоненты.


Anatoly Podgoretsky   (2010-08-23 19:27:00) [4]

> mfender  (23.08.2010 19:14:04)  [4]

Используй RTTI работает для Published свыойства


mfender   (2010-08-23 19:19:00) [5]

Так он есть один. Но создаётся-то динамически, и при создании фрейма с этими настроечными контролами нужно им пояснить, кого танцевать в ходе работы.


0x00FF00   (2010-08-23 19:16:00) [6]


> mfender   (23.08.10 19:14) [4]

Небольшой оффтопик:
А зачем вобще такие компоненты?
Не проще ли завести в программе один глобальный TIniFile, а не ворох раскиданных по компонентам?


mfender   (2010-08-23 19:14:00) [7]


> А можно нескромный вопрос: какое имя класса у твоего компонента
> с новыми полями?

Вот! Это хороший вопрос.
Их несколько: TsIniEdit, TsIniSpinEdit, TsIniCheckBox et cetera в количестве примерно дюжины. Понятно, что можно их всех в условие воткнуть.

Но у меня вопрос-то как раз такого характера (локализую): Есть ли возможность проверить наличие свойства в компоненте, не зная его имени класса?


0x00FF00   (2010-08-23 19:08:00) [8]

А можно нескромный вопрос: какое имя класса у твоего компонента с новыми полями?


mfender   (2010-08-23 19:07:00) [9]


> if ТекущийКомпонент is ТКомпонентСНовымиПолями then ...
>
> И далее по накатанной.


Ну я не совсем дурак, как писать условия слыхал пару раз ))))
Как написать вот это - ТКомпонентСНовымиПолямине совсем русскими буквами? ))))


0x00FF00   (2010-08-23 19:03:00) [10]

if ТекущийКомпонент is ТКомпонентСНовымиПолями then ...

И далее по накатанной.


Наверх

Титульная страница Поиск, карта сайта Написать письмо