Форум: "Основная";
Текущий архив: 2005.11.06;
Скачать: [xml.tar.bz2];
ВнизВозможно ли одной процедурой задать цвет объектам разных типов Найти похожие ветки
← →
apellido (2005-10-13 09:11) [0]Хочу создать общую процедуру для присвоения одного и того
же свойства объектам разных типов. Никак не соображу как
этого добиться.
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 неизвестно. Так как же быть?
← →
ZeroDivide © (2005-10-13 09:15) [1]http://delphimaster.net/view/1-1129118842/
← →
Ega23 © (2005-10-13 09:16) [2]
procedure AttrColor(pAttrValue: string; pType: string; Temp: TComponent);
var
Tmp : TComponent;
begin
if pAttrValue="CLBLACK" then Tmp.Color := clBlack;
.............
end;
← →
Ega23 © (2005-10-13 09:17) [3]Вру.
procedure AttrColor(pAttrValue: string; pType: string; Temp: TComponent);
begin
if pAttrValue="CLBLACK" then Tеmp.Color := clBlack;
.............
end;
← →
Reindeer Moss Eater © (2005-10-13 09:19) [4]uses TypeInfo;
GetPropInfo
>then Tеmp.Color := clBlack;
У TComponent нет свойства Color
← →
Ega23 © (2005-10-13 09:21) [5]Опяь вру.
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:27) [6]Тупой вопрос:
зачем цвет передавать строкой?
← →
apellido (2005-10-13 09:34) [7]Цвет задается строкой, так как он считывается с конфигурационного файла.
Попытки дать ответ Temp.Color := clBlack не верны, так как
у TComponent нет свойства Color.
Привильно задавать (Temp as TEdit).Color := clBlack;
(Temp as TLabel).Color := clBlack;
Проблема в том, как этого добиться одним кодом для Temp разных типов.
← →
Ega23 © (2005-10-13 09:37) [8]
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:41) [9]С таким подходом проще создать Х процедур на каждую ветку ифа.
Будет не более коряво чем сейчас.
← →
Reindeer Moss Eater © (2005-10-13 09:58) [10]
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);
← →
apellido (2005-10-13 11:02) [11]Благодарю всех за участие! Проблема решена очень просто!
uses TypInfo;
procedure AttrColor(pAttrValue: string; Temp: TComponent);
begin
if pAttrValue="CLBLACK" then
SetOrdProp (Temp, "Color", Ord(clBlack));
.............
end;
Следует заметить, что одним параметром стало меньше и все работает!
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2005.11.06;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.048 c