Форум: "Основная";
Текущий архив: 2006.12.24;
Скачать: [xml.tar.bz2];
ВнизКак определить, есть ли в компоненте свойство 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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.042 c