Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
2-1282109949
03111978
2010-08-18 09:39
2010.11.14
Вертикальное расположение заголовков


15-1280471380
tesseract
2010-07-30 10:29
2010.11.14
Всех причастных с днём сисамдмина.


15-1280924062
oxffff
2010-08-04 16:14
2010.11.14
Yar.net для Rouse


3-1247562063
ziArt
2009-07-14 13:01
2010.11.14
Сортировка и SQL


2-1281828999
Гость
2010-08-15 03:36
2010.11.14
В каком параметре записана ширина стрелочки у TComboBox?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский