Главная страница
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.04 c
14-1130357222
LordOfRock
2005-10-27 00:07
2005.11.20
Muse


14-1130305048
SergP.
2005-10-26 09:37
2005.11.20
СПАМ. Что делать?


2-1131090450
dreamse
2005-11-04 10:47
2005.11.20
Как определить есть ли у программы доступ в каталог ?


2-1131111375
San1
2005-11-04 16:36
2005.11.20
Как программно открыть файл PDF. txt, doc и т. д.


6-1122990135
Dyakon_Frost
2005-08-02 17:42
2005.11.20
Обработка интернет страницы!