![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Возможно ли одной процедурой задать цвет объектам разных типов [D5, WinXP]
apellido © (2005-10-13 09:11:00)Хочу создать общую процедуру для присвоения одного и того
же свойства объектам разных типов. Никак не соображу как
этого добиться.
procedure AttrColor(pAttrValue: string; pType: string; Temp: TComponent);
var
Tmp : TComponent;
begin
if pType='TEdit' then Tmp:=Temp as TEdit;
if pType='Tlabel' then Tmp:=Temp as TLabel;
if pAttrValue='CLBLACK' then Tmp.Color := clBlack;
.............
end;
При компиляции сего кода выдается ошибка, что свойство
Color для объета Tmp неизвестно. Так как же быть?
apellido (2005-10-13 11:02:00) [1]Благодарю всех за участие! Проблема решена очень просто!
uses TypInfo;
procedure AttrColor(pAttrValue: string; Temp: TComponent);
begin
if pAttrValue='CLBLACK' then
SetOrdProp (Temp, 'Color', Ord(clBlack));
.............
end;
Следует заметить, что одним параметром стало меньше и все работает!
Reindeer Moss Eater (2005-10-13 09:58:00) [2]
procedure SetColor(AObject : TObject; AColor : TColor);
var FPropInfo: PPropInfo;
begin
FPropInfo := GetPropInfo(AObject,'Color');
if (FPropInfo <> nil) and (FPropInfo^.PropType^.Kind = tkInteger) then
SetOrdProp(AObject,FPropInfo,AColor);
end;
либо просто использовать процедуру из TypInfo:
procedure SetPropValue(Instance: TObject; const PropName: string;
const Value: Variant);
Reindeer Moss Eater (2005-10-13 09:41:00) [3]С таким подходом проще создать Х процедур на каждую ветку ифа.
Будет не более коряво чем сейчас.
Ega23 (2005-10-13 09:37:00) [4]
procedure AttrColor(pAttrValue: string; pType: string; Temp: TControl);
begin
if pAttrValue='CLBLACK' then Tеmp.Color := clBlack;
.............
end;
apellido (2005-10-13 09:34:00) [5]Цвет задается строкой, так как он считывается с конфигурационного файла.
Попытки дать ответ Temp.Color := clBlackне верны, так как
у TComponent нет свойства Color.
Привильно задавать (Temp as TEdit).Color := clBlack;
(Temp as TLabel).Color := clBlack;
Проблема в том, как этого добиться одним кодом для Temp разных типов.
Reindeer Moss Eater (2005-10-13 09:27:00) [6]Тупой вопрос:
зачем цвет передавать строкой?
Ega23 (2005-10-13 09:21:00) [7]Опяь вру.
procedure AttrColor(pAttrValue: string; pType: string; Temp: TControl);
begin
if pAttrValue='CLBLACK' then Tеmp.Color := clBlack;
.............
end;
Reindeer Moss Eater (2005-10-13 09:19:00) [8]uses TypeInfo;
GetPropInfo
>then Tеmp.Color := clBlack;
У TComponent нет свойства Color
Ega23 (2005-10-13 09:17:00) [9]Вру.
procedure AttrColor(pAttrValue: string; pType: string; Temp: TComponent);
begin
if pAttrValue='CLBLACK' then Tеmp.Color := clBlack;
.............
end;
Ega23 (2005-10-13 09:16:00) [10]
procedure AttrColor(pAttrValue: string; pType: string; Temp: TComponent);
var
Tmp : TComponent;
begin
if pAttrValue='CLBLACK' then Tmp.Color := clBlack;
.............
end;
ZeroDivide (2005-10-13 09:15:00) [11]http://www.delphimaster.ru/cgi-bin/forum.pl?id=1129118842&n=0