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

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

Как определить, есть ли в компоненте свойство Caption ?


Layner ©   (2006-10-13 09:14:00) 

Здравствуйте! Делаю цикл по всем элементам формы. Хотелось бы отобрать те компоненты, у которых есть св-во Caption, Hint, Text... Подскажите, как это сделать легко и красиво? У меня есть вариант

var
s: string;
for j:=0 to ComponentCount-1 do
begin
 if Components[j] is TMenuItem then s := s+ TMenuItem(Components[j]).Caption+#10#13;
 if Components[j] is TLabel then s := s+ TLabel(Components[j]).Caption+#10#13;  
.......

Но компонентов много, всех перебирать не есть хорошо :(


evvcom   (2006-11-10 08:58:00) [1]

> [12] Орион ©   (10.11.06 00:17)

Что касаемо Align, то приводить можно к TControl, там он уже в паблик. А в общем случае (для других свойств) ты скорее всего и не найдешь родителя, удовлетворяющего [12]: во всех предках в protected, и только в твоем и других ему подобных уже в published.

> [11] Ketmar ©   (09.11.06 15:25)

В чем гадость ты видишь? Мы не в начинающих, потому можно и более глубокие вещи объяснять.
Единственно, что еще все-таки кроме IsPublishedProp все-таки есть смысл добавить проверку
if Components[I] is TControl // или другой нужный
частично согласен


Орион   (2006-11-10 00:17:00) [2]

> [8] evvcom ©   (09.11.06 14:54)

я имел в виду первого родителя у которого это свойтсво в секции published.
:-P :)


Ketmar   (2006-11-09 15:25:00) [3]

>[10] evvcom(c) 9-Nov-2006, 15:10
ты зачем гадости советуешь?!


evvcom   (2006-11-09 15:10:00) [4]

> [9] Layner ©   (09.11.06 14:58)

А много и не надо. Кстати в
> [6] @!!!ex   (09.11.06 13:56)
> if (Components[I] as <Какой нить контрол имеющий свойство
> Align>).Align = [alBottom, alTop, alLeft, alRight] then

2 ошибки. Про синтаксическую = [...] я сначала не хотел говорить, компилятор бы сам указал. А вот про логическую
(Components[I] as <Какой нить контрол имеющий свойство Align>) промолчать не могу. Только в случае "контрол is этот какой-нибудь" ты не получишь ошибку в рантайм, потому надо:
if <Какой нить контрол имеющий свойство Align>(Components[I]).Align in [alBottom, alTop, alLeft, alRight] then


Layner   (2006-11-09 14:58:00) [5]

@!!!ex   (09.11.06 13:56)
Оно понятно, <Какой нить контрол имеющий свойство Align>- их может быть много, и TMemo, TGrid, TPanel... всех перечислять тоже не хочется..


evvcom   (2006-11-09 14:54:00) [6]

> [7] Орион ©   (09.11.06 14:08)
> лучше не какой-нить, а первый родитель имеющий это свойтсво :)

у этого родителя оно наверняка в protected :)


Орион   (2006-11-09 14:08:00) [7]

> <Какой нить контрол имеющий свойство Align>
лучше не какой-нить, а первый родитель имеющий это свойтсво :)


@!!!ex   (2006-11-09 13:56:00) [8]

Ну теоретически по аналогии.
Хотя за слова не отвечаю. Компоненты - зло.

if (IsPublishedProp(Components[I], 'Align') then
 if (Components[I] as <Какой нить контрол имеющий свойство Align>).Align = [alBottom, alTop, alLeft, alRight] then
  ...


Layner   (2006-11-09 13:44:00) [9]

Игорь, спасибо,
ещё вопрос возник, по похожей тематике, как найти все элементы у которые есть свойство Align, и где это свойство = [alBottom, alTop, alLeft, alRight]?


Игорь Шевченко   (2006-10-13 10:33:00) [10]


> Хотелось бы отобрать те компоненты, у которых есть св-во
> Caption, Hint, Text... Подскажите, как это сделать легко
> и красиво?


uses
 TypInfo;

if (IsPublishedProp(Components[I], 'Caption') then
 s := s + GetStrProp(Components[I], 'Caption')+#13#10;


Layner   (2006-10-13 09:31:00) [11]

GetObjectProp, нашел :)


Layner   (2006-10-13 09:26:00) [12]

Нет, смотрятся только стандартные компоненты со свойствами Caption, Hint, Text... Никакие VisibleText не требуется..


Zeqfreed   (2006-10-13 09:22:00) [13]

А если я назову св-во VisibleText, то мой компонент уже не будет обработан твоим алгоритмом? Смотри в сторону RTTI.


Наверх

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