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

Вниз

Возможно ли одной процедурой задать цвет объектам разных типов   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.04 c
14-1128965939
опрос
2005-10-10 21:38
2005.11.06
какая средняя зарплата у программистов в Киеве?


14-1129232858
ArtemESC
2005-10-13 23:47
2005.11.06
Delphi 2005 architect


6-1117384270
Flame
2005-05-29 20:31
2005.11.06
проблемка с twebbrowser


14-1129711273
vecna
2005-10-19 12:41
2005.11.06
Тааак.... список непонятных моментов в Дельфи начинает расти


14-1129544022
Андрей Жук
2005-10-17 14:13
2005.11.06
Веселин Топалов - новый шахматный чемпион