Текущий архив: 2004.04.18;
Скачать: CL | DM;
ВнизИзменить свойство "чужого" компонента. Найти похожие ветки
← →
V-Isa © (2004-04-02 10:06) [0]Здравствуйте!
Пишу компонент. Одним из его свойств является следующее:property OtherComp: TComponent Read GetOtherComp Write SetOtherComp;
. Необходимо в SetOtherComp узнать есть ли у передаваемого компонента свойство типа TIcon и изменить его. Как это сделать???
← →
Sun bittern © (2004-04-02 10:36) [1]// Свойтсво от того класса от которого нам нужно или нет
Function HasSource(Instance: TObject; APropertyName: String; AClass: TClass): Boolean;
var
PropInfo: PPropInfo;
begin
PropInfo := GetPropInfo(Instance, APropertyName, tkProperties);
Result := PropInfo<>nil;
if Result then
if not ((PropInfo^.PropType^.Kind = tkClass) and
(GetTypeData(PropInfo^.PropType^).ClassType.InheritsFrom(AClass)))
then Result := False;
end;
if HasSource(PopupMenu1, "Images", TCustomImageList) then Caption := "ddd";
// Смена TIcon
SetObjectProp()
Как проверить есть свойство или нет ссылки уже давали
http://podgoretsky.com/ddp.html
На сайте Анатолия Подгоредского есть электроный вариант книги Стива Тейксейра и Ксавье Пачеко. Там про RTTI и создание компонент
← →
TUser © (2004-04-02 10:38) [2]Популярная тема в послднее время, однако
http://delphimaster.net/view/1-1080711559/
← →
V-Isa © (2004-04-02 11:05) [3]Где находится SetObjectProp()????
В TypInfo ее нет, у мя Delphi 3.
← →
Sun bittern © (2004-04-02 11:23) [4]>> у мя Delphi 3.
Упс, насчет третей не скажу (у меня 7). Не разу ей не пользовался. Начинал с четверки и то мало на ней седел. Наверно придется делать UpGrade Delphi.
Я по заголовку ([D1, D2, D3, D4, D5, D6, D7, Win95/98, WinME, NT4, Win2k, WinXP]) вижу что у тебя есть наверно 7 дельфя, посмотри как там рализовано может выйдет чего (хотя RTTI у Borland может изменятся от версии к версии и гарантий ни каких нет)
← →
Defunct © (2004-04-02 11:34) [5]
Procedure TBLalala.SetOtherComp(OtherComp:TComponent);
Begin
If OtherComp is (Класс который содержит TIcon) Then
With OtherComp as (Класс который содержит TIcon) Do
Icon := <Bla bla bla>
End;
← →
Sun bittern © (2004-04-02 11:43) [6]Defunct © (02.04.04 11:34) [5]
Это если объект произощел от некого класса, а тут речь о пропертях :)
← →
Sun bittern © (2004-04-02 11:45) [7]Defunct © (02.04.04 11:34) [5]
Это если объект произощел от некого класса, а тут речь о пропертях :) (или я чего не догоняю)
← →
Defunct © (2004-04-02 11:59) [8]Sun bittern © (02.04.04 11:45) [7]
Дык с пропертями и работаем.
Автор ведь знает с чем работает. Зачем усложнять жизнь?
← →
Sun bittern © (2004-04-02 12:47) [9]Defunct © (02.04.04 11:59) [8]
>> Автор ведь знает с чем работает
Откуда? Неизвестно точно какой компонент передается и неизвестно точно наименование свойства в котором содержится TIcon. По вопросу:
>> узнать есть ли у передаваемого компонента свойство типа TIcon и изменить его
Тогда наверно так:
procedure A(AClass: TComponent; List: TStrings; FindClass: TClass);
var
PropList: PPropList;
ClassTypeInfo: PTypeInfo;
ClassTypeData: PTypeData;
OrdTypeData: PTypeData;
I: Integer;
begin
ClassTypeInfo := AClass.ClassInfo;
ClassTypeData := GetTypeData(ClassTypeInfo);
if ClassTypeData.PropCount <> 0 then
begin
GetMem(PropList, SizeOf(PPropInfo) * ClassTypeData.PropCount);
try
GetPropInfos(AClass.ClassInfo, PropList);
for I := 0 to ClassTypeData.PropCount - 1 do
// Перебор свойств объекта (не свойства-события)
if not (PropList[i]^.PropType^.Kind = tkMethod) then
begin
// Свойсво-объект
if PropList[i]^.PropType^.Kind = tkClass then
begin
OrdTypeData := GetTypeData(PropList[i]^.PropType^);
if OrdTypeData.ClassType = TCustomImageList then
begin
List.Add(AClass.Name + " > " + PropList[i]^.Name + ": " + PropList[i]^.PropType^.Name);
SetObjectProp(AClass, PropList[i]^.Name, FImageList);
end;
end;
end;
// Чистка
finally
FreeMem(PropList, SizeOf(PPropInfo) * ClassTypeData.PropCount);
end;
end;
end;
...
A(PopupMenu1, Memo1.Lines, TCustomImageList);
...
Только у автора вопроса какието проблемы
V-Isa © (02.04.04 11:05) [3]
← →
Sun bittern © (2004-04-02 13:09) [10]опять гнустная ошибочка вышла :(
if OrdTypeData.ClassType = TCustomImageList then
на
if OrdTypeData.ClassType = FindClass then
← →
Defunct © (2004-04-02 13:18) [11]>> Автор ведь знает с чем работает
> Откуда?
;) Анекдот получился.
> Неизвестно точно какой компонент передается и неизвестно точно наименование свойства в котором содержится TIcon.
Ну это нам не известно, а автору известно ;) Иначе бы такой задачи не было.
← →
malkolinge © (2004-04-02 16:32) [12]http://bhv.ru/books/book.php?id=2735
Страницы: 1 вся ветка
Текущий архив: 2004.04.18;
Скачать: CL | DM;
Память: 0.48 MB
Время: 0.034 c