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