Форум: "Компоненты";
Текущий архив: 2005.11.20;
Скачать: [xml.tar.bz2];
ВнизСоздаю объекты своего класса, и не могу Parent присвоить Найти похожие ветки
← →
Надежда (2005-03-25 11:23) [0]Здравствуйте, уважаемые Мастера! Помогите, пожалуйста.
У меня есть класс от TLabel, в котором добавлены пара своих полей. В базе данных хранится имя требуемого объекта, имя этого класса для него, а несколько пар значений "имя свойства" и "значение свойства", в числе которых "Parent" и <имя родительского компонента>.
Требуется создать объект - экземпляр класса, найти по имени парента, присвоить его объекту, затем установить остальные свойства.
Вот с парентом как раз и проблема. Делаю я это так
type
TMyLabel = class(TLabel)
private
{ Private declarations }
public
{ Public declarations }
DestObjectName: string;
DestObjectId: integer;
end;
--------
procedure ......
var
tmpParent:TWinControl;
tmpL: TControl;
tmpClass : TClass;
// .....прочее
begin
//описание объекта
cdsElem.AppendRecord(["lblTest","TMyLabel"]);
//описание свойств
cdsProps.AppendRecord(["Parent","PanParams"]);
cdsProps.AppendRecord(["DestObjectName","DBChart1"]);
cdsProps.AppendRecord(["DestObjectId","123"]);
//создание объекта
tmpClass := FindClass(cdsElemEClassName.AsString);
//объект
tmpL := TControl(tmpClass.Create());
(tmpL as TComponent).Name := cdsElemEName.AsString;
tmpParent := TWinControl(FindComponent(cdsPropsprpValue.AsString));
if (tmpL is TControl)
then (tmpL as TControl).Parent := tmpParent;
На последнюю строчку в run-timee выдается AccessViolation :-(
Заранее простите, если я действую? как полный ламер, но подскажите, пожалуйста, в чем я накосячила :-)
← →
Юрий Зотов © (2005-03-25 13:33) [1]Похоже, вызывается конструктор не того класса, который нужен.
tmpClass := FindClass(cdsElemEClassName.AsString);
if tmpClass.InheritsFrom(TControl) then
begin
tmpL := TControlClass(tmpClass).Create(владелец);
...
end
else
...
← →
Надежда (2005-03-25 14:39) [2]Спасибо Вам огромное, Юрий, помогло, поправила, теперь объект создается.
Если не трудно, подскажите, пожалуйста, могу ли я получить ссылку на объект, если знаю его имя, но не знаю точно в момент поиска объекта ни класса объекта, ни родителя?
Заранее благодарна за любую помощь
← →
Юрий Зотов © (2005-03-25 15:12) [3]Если под словом "имя" понимается значение свойства Name, то нужно знать Owner"а. У него есть метод FindComponent.
Еще для потомков TControl можно использовать FindChildControl - но тогда нужно знать Parent"а.
Еще для потомков TWinControl можно использовать FindСontrol (но тогда нужно знать не имя, а хэндл окна), или FindVCLWindow (но тогда нужно знать не имя, а координаты любой точки, принадлежащей окну).
← →
Надежда (2005-03-25 16:09) [4]Спасибо еще раз за помощь, я воспользовалась вариантом установки всем объектам одного Owner"а, затем через FindComponent получаю ссылку на объект, независимо от парента
Страницы: 1 вся ветка
Форум: "Компоненты";
Текущий архив: 2005.11.20;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.04 c