Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.11.20;
Скачать: CL | DM;

Вниз

Создаю объекты своего класса, и не могу 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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.028 c
14-1130687932
Kolan
2005-10-30 18:58
2005.11.20
Как написать плагин для FierFox


11-1112012463
BigMic
2005-03-28 16:21
2005.11.20
Установка в системе шрифта по-умолчанию


9-1120589253
Dgt
2005-07-05 22:47
2005.11.20
Просчет теней в Glscene uses vertex lighting


1-1130312278
sergg
2005-10-26 11:37
2005.11.20
Измение размера двумерного VarArray


5-1111690957
Genry
2005-03-24 22:02
2005.11.20
Выполнение метода в дизайн-тайме