Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
14-19757
petr_v_a
2003-03-22 17:33
2003.04.07
MSSQL 7 Все ли я правильно понял?


4-19925
Dmitry_Koteroff
2003-02-07 23:30
2003.04.07
Написание аналога ps в Win32


3-19476
melavcorp
2003-03-19 15:02
2003.04.07
DBImage и format JPEG


4-19935
Sliski Slimak
2003-01-24 18:15
2003.04.07
Подсказки в стиле WinXP


1-19617
Tolyan
2003-03-25 11:20
2003.04.07
Алгоритм контраста.





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