Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Возможно ли одной процедурой задать цвет объектам разных типов [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


Наверх

Титульная страница Поиск, карта сайта Написать письмо