Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.043 c
2-1129024587
Dude
2005-10-11 13:56
2005.11.06
Excel и Delphi


5-1108374336
AndyBond
2005-02-14 12:45
2005.11.06
TCollection + Компонент + Инспектор объектов Delphi


1-1129635122
Max Zyuzin
2005-10-18 15:32
2005.11.06
проблемма с созданием форм в MDI-child формах


4-1125410367
artdeveloper
2005-08-30 17:59
2005.11.06
Открыть системное диалоговое окно списка пользователей


5-1108317980
Profi
2005-02-13 21:06
2005.11.06
Логарифмическая шкала





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