Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Компоненты";
Текущий архив: 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
6-1123135546
DmiSb
2005-08-04 10:05
2005.11.20
Сервер приложений


3-1128600013
Ascer
2005-10-06 16:00
2005.11.20
Выбор из справочника


4-1126889831
ArtemESC
2005-09-16 20:57
2005.11.20
свойства другого окна


2-1130908177
samoilov
2005-11-02 08:09
2005.11.20
progressbar


1-1130508623
Dimedrol
2005-10-28 18:10
2005.11.20
TWebBrowser. Не копируется текст.





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