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

Вниз

Components[i] as .....   Найти похожие ветки 

 
-= Demon =-   (2003-03-28 14:37) [0]

Привет всем!
Дело в следующем. На форме масса различных компонентов. У всех есть Caption. Как записать в него значение?

for i:=0 to ComponentCount-1 do
(Components[i] as ???).Caption:="Всякая фигня";


 
MBo ©   (2003-03-28 14:42) [1]

if ...is TControl ... as TControl


 
MBo ©   (2003-03-28 14:43) [2]

и если они все лежат на форме (Parent), то лучше Controls обходить


 
Style   (2003-03-28 14:44) [3]

Наверное придется перечислять классы. Потому что у TControl Caption protected!

т.е.
if(Components[i] is TButton then
(Components[i] as TButton).Caption:="Всякая фигня";
if(Components[i] is TLabel then
(Components[i] as TLabel).Caption:="Всякая фигня";
.....


 
-= Demon =-   (2003-03-28 14:45) [4]

Давал ... as TControl, говорит "не знаю Caption" :(


 
-= Demon =-   (2003-03-28 14:46) [5]

Перечислять слишком много, неужто выхода нет никакого?


 
MBo ©   (2003-03-28 14:50) [6]

>Давал ... as TControl, говорит "не знаю Caption" :(
type TXControl=class(TControl);

...
for i:=0 to ControlCount-1 do
TXControl(Controls[i]).Caption:="Всякая фигня";

Еще вариант - RTTI использовать.




 
Style   (2003-03-28 14:51) [7]

-= Demon =- >>
например у TEdit Caption"a вообще нет! т.е. он так и не наследовал св-во Caption у TControl! его фактически нет!

я дуамаю что по другому и не сделать.
А что у тебя уж такое разнообразие компонентов на форме с Caption??



 
Zz_   (2003-03-28 14:52) [8]

SetWindowText ???


 
Style   (2003-03-28 14:55) [9]

Да TXControl!

гм.. интересно даже Edit меняет property Text? почему надо в исходники залесть


 
Style   (2003-03-28 14:58) [10]

точно SetWindowText

на Смене Caption наверняка стоит SetWindowText

type TXControl=class(TControl);
так мы открываем protected и получается делаем SetWindowText!


 
MBo ©   (2003-03-28 15:01) [11]

>Style
Не совсем так. Есть и TGraphicControls


 
Style   (2003-03-28 15:07) [12]

>> MBo
всмысле TLabel!
ну а он же просто наследует свойство Caption!


 
-= Demon =-   (2003-03-28 15:07) [13]

Всем спасибо :)


 
MBo ©   (2003-03-28 15:17) [14]

>Style
>ну а он же просто наследует свойство Caption!
свойство-то наследует, но вот SetWindowText не использует.
Реализация методов обращения к свойству Caption (или Text) различается для разных контролов.


 
Style   (2003-03-28 15:20) [15]

MBo>>
я знаю ты меня просто не понял.
Да у GraphicsControl нет HWND!


 
vuk ©   (2003-03-28 15:27) [16]

Кстати, если пишется if Obj is TSomeClass, то (Obj as TSomeClass) уже лишнее, т.к. проверка правильности типа уже проведена успешно. Поэтому можно смело писать:

if Obj is TSomeClass then
TSomeClass(Obj).SomeProperty := SomeValue;


 
MBo ©   (2003-03-28 15:27) [17]

>Да у GraphicsControl нет HWND!
потому я и отметил GraphicsControl особо в 15:01, ведь ты написал

>на Смене Caption наверняка стоит SetWindowText

что в общем случае неверно



 
Style   (2003-03-28 16:12) [18]

>>Vuk
Кстати, если пишется if Obj is TSomeClass, то (Obj as TSomeClass) уже лишнее, т.к. проверка правильности типа уже
проведена успешно...

Смотрел в Debug"ере разницы нет по скорости тоже можешь попробывать!
Компилятор все сводит к одному!

var
i: integer;
tc: cardinal;
begin
tc := GetTickCount;
for i := 1 to 100000000 do
begin
// (Button1 As TWinControl).Tag := 0;
TWinControl(Button1).Tag := 0;
end;

Caption := IntToStr(GetTickCount - tc);


 
Style   (2003-03-28 16:14) [19]

MBo© >>
Да в общем случае неверно...


 
vuk ©   (2003-03-28 16:27) [20]

to Style:
>Смотрел в Debug"ере разницы нет по скорости тоже можешь
>попробывать! Компилятор все сводит к одному!

Если бы вы попроб ывыли код посмотреть, то легко бы обнаружили, что компилятор генерирует разный код для этих случаев. Разница - в вызове функции system._AsClass


 
AlexT1000   (2003-03-28 18:49) [21]

uses typinfo;

PropInfo :PPropInfo;

PropInfo := nil;
for i:=0 to ComponentCount -1 do begin
PropInfo := GetPropInfo(Components[i],"Caption") ;
if PropInfo <> nil then begin
SetStrProp(Components[i],PropInfo,"Fuck");
// Dispose(PropInfo);
end;
PropInfo := nil;
end;



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

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

Наверх




Память: 0.51 MB
Время: 0.012 c
1-19540
msoftware
2003-03-24 17:51
2003.04.07
Вопрос по RXLIB


1-19615
zje
2003-03-25 11:54
2003.04.07
Подскажите про TMonthCalendar !!!!


1-19588
ksushishka
2003-03-28 16:29
2003.04.07
Вывод строки


6-19718
Alexei113
2003-02-08 01:23
2003.04.07
Установка TCP/IP соединения


8-19706
kuzia
2002-12-28 14:12
2003.04.07
Создание .avi из содержымого экрана