singlepost

Использование VCL класса в Собственном классе(C++ Builder, Delphi) << На главную или назад  

Сосбственно сабж, хочу в свой класс(компоненту) добавить что нить типа Label,Edit или прочих прелестей из VCL. Обьявления типа TLabel* Label; Label = new TLabel(this);
не приводят к данному результату.И такой вопрос как управлять данными компонентами в последующем, координаты скажем привязывать к чему?

26 ответов в теме “Использование VCL класса в Собственном классе(C++ Builder, Delphi)”

  1. 11
    Владимир Зарубин ответил:

    ну как программист я очень весьма начинанющий, даже очень. Ну раньше писал на C++ Builder на делфи перешел когда курсовик по Базам данных писал, как таковое програмирование было 1семестр в универе и все, а хочеться большего узнать, вот и как то делаю

  2. 10
    Владимир Муромский ответил:

    А можно теперь я задам тупой вопрос: на каком языке ты писал раньше и что заставило тебя перейти на дельфи?:)

  3. 9
    Владимир Зарубин ответил:

    Огромное спасибо, и извините за тупые вопросы*Sorry*

  4. 8
    Владимир Муромский ответил:

    lab:= TLabel.Create(self);
    lab.Parent:= self;

    self – это указатель на текущий экземпляр класса

    Свойства Left и Top задаются относительно родительского компонента, то есть если label находится внутри твоего компонента, то и координаты нужно указывать относительно него

  5. 7
    Владимир Зарубин ответил:

    а вот такой вопрос, как в классе, не на форме, задать lab:= TLabel.Create();
    lab.Parent:=TWinControl(); так что бы он создавался прям в моем классе.
    Скажем есть класс TPanelNew и уже в него нада запихнуть тот самый лейбл.
    lab:= TLabel.Create();
    lab.Parent:=TWinControl(); //вставки туда типа TPanelNew,PanelNew.TPanelNew,PanelNew к успеху не приводят.

    Сразу извиняюсь за нубские вопросы

    lab.Left:= 5;
    lab.Top:= 10; //как задать относительно кнопки создаваемой опять же..
    lab.Left:=CountButton.Leftне будет работать

    так вот вопрос сводиться к общему как в своем классе определить создаваемый компонент,то есть получать уже экземпляр или ссылку на будущий экземпляр

  6. 6
    Владимир Зарубин ответил:

    чисто сам по себе думаю косяк в том что у меня формы как таковой то в классе нету, компонента пишеться чисто отдельно, и он не может унаследовать lab.Parent:= TWinControl(TLabel);

  7. 5
    Владимир Зарубин ответил:

    Все огромное спасибо за помощь.Бился пару дней над этим вопросом.

    lab:= TLabel.Create(self);
    lab.Parent:=TWinControl(Aowner);
    lab.Left:= 5;
    lab.Top:= 10;
    lab.Caption:= 'ля-ля';

    вот так будет работать

  8. 4
    Владимир Муромский ответил:

    Вот как у меня реализовано динамическое создание кнопок
    btns[m]:= TButton.Create(paramsbox);
    btns[m].Height:= btnheight;
    btns[m].Width:= btnwidth;
    btns[m].OnClick:= ShowDialog;
    btns[m].Parent:= paramsbox;

    , где paramsbox: TScrollBox; , а btns – динамический массив указателей на кнопки

  9. 3
    Владимир Зарубин ответил:

    Однако ругаеться
    lab:= TLabel.Create(form);
    lab.Parent:= form;

    Вот еще обьявил перед классом

    var lab: TLabel;
    type
    TCountBtn = class(TButton)

    lab.Parent:= form;//требует наследника TWinControl
    пишу
    lab:= TLabel.Create(Aowner);//писал TObject
    lab.Parent:= TWinControl(TLabel);
    вылетает с ошибкой когда добавляешь на форму

  10. 2
    Владимир Муромский ответил:

    lab.Parent:= TWinControl(TLabel);

    Ты пытаешься один Label запихнуть в другой Label, что невозможно, т.к. компонент Label не является контейнером. А форма – является

  11. 1
    Владимир Муромский ответил:

    Во-первых, label – зарезервированное слово, его использовать нельзя.
    А вообще в дельфи это делается так:
    lab:= TLabel.Create(form);
    lab.Parent:= form;
    lab.Left:= 5;
    lab.Top:= 10;
    lab.Caption:= 'Ну что вы смотрите на меня?!';

Клуб программистов работает уже ой-ой-ой сколько, а если поточнее, то с 2007 года.