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

Вниз

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

 
Layner ©   (2006-10-13 09:14) [0]

Здравствуйте! Делаю цикл по всем элементам формы. Хотелось бы отобрать те компоненты, у которых есть св-во 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;  
.......

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


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

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


 
Layner ©   (2006-10-13 09:26) [2]

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


 
Layner ©   (2006-10-13 09:31) [3]

GetObjectProp, нашел :)


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


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


uses
 TypInfo;

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


 
Layner ©   (2006-11-09 13:44) [5]

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


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

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

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


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

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


 
evvcom ©   (2006-11-09 14:54) [8]

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

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


 
Layner ©   (2006-11-09 14:58) [9]

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


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

> [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


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

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


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

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

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


 
evvcom ©   (2006-11-10 08:58) [13]

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

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

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

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



Страницы: 1 вся ветка

Текущий архив: 2006.12.24;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.045 c
6-1153916814
KyRo
2006-07-26 16:26
2006.12.24
TIdFtp


2-1165200839
M1sT
2006-12-04 05:53
2006.12.24
Перемещение записи


2-1165500423
AlexeyT
2006-12-07 17:07
2006.12.24
Заставить ScrollBox реагировать на перетаскивание ползунка?


2-1165320973
Галинка
2006-12-05 15:16
2006.12.24
Можно ли найти xml-узел по имени


15-1165325019
Pazitron_Brain
2006-12-05 16:23
2006.12.24
Матрица I