Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.48 MB
Время: 0.087 c
2-1165553803
Алексей С.
2006-12-08 07:56
2006.12.24
Удаление Run-Time элементов управления


2-1165425952
Ezorcist
2006-12-06 20:25
2006.12.24
Удалить из списка элементы, удовл. условию.


2-1165223382
gdaujk
2006-12-04 12:09
2006.12.24
Как программно открыть "Мой компьютер"?


15-1164914852
Pazitron_Brain
2006-11-30 22:27
2006.12.24
Керк, с Днем рождения!


15-1165223378
Zero
2006-12-04 12:09
2006.12.24
pocket pc





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский