Главная страница
    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.033 c
2-1129156132
X-Fi
2005-10-13 02:28
2005.11.06
Как преобразовать число к бОльшему квадрату двойки ?


4-1125559948
Vcoder
2005-09-01 11:32
2005.11.06
Как получить Caption окна?


4-1125491487
Black Krok
2005-08-31 16:31
2005.11.06
Исчерпание ресурсов Windows


4-1125771215
GuAV
2005-09-03 22:13
2005.11.06
Сшная структура из MSDN - как понимать такие поля ?


3-1127668478
highlander
2005-09-25 21:14
2005.11.06
DBGrid.SelectedIndex и как его можно использовать?





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