Главная страница
    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.044 c
1-1129631371
BorlandC
2005-10-18 14:29
2005.11.06
Как проверить что файл уже открыт?


2-1129295255
MAcK
2005-10-14 17:07
2005.11.06
Звук


2-1128628571
leonw
2005-10-06 23:56
2005.11.06
Directory


4-1125562307
Ландграф Павел
2005-09-01 12:11
2005.11.06
включить auto-hide taskbar на Делфи


3-1127551148
Виталька2005
2005-09-24 12:39
2005.11.06
Paradox и сетевой доступ





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