Страница 1 из 1

Динамическое создание элементов управления

СообщениеДобавлено: 30.03.2021 02:07:13
Mirror
Подскажите, пожалуйста, как динамически создавать компоненты на форме.

Я не могу понять, что присвоить свойству frame (а если его не установить, то элементы управления выглядят неправильно).

Вот моя попытка:
Код: Выделить всё
procedure tmainfo.mainformcreated(const sender: TObject);
begin
  dynedit := tedit.Create(self);
  dynedit.bounds_cx := 100;
  dynedit.bounds_cy := 21;
  { Если скопировать frame из созданного в IDE teditʼа, то всё работает,
    но хотелось бы понять, как его создавать без IDE. }
  dynedit.frame := tedit1.frame; //Чем это заменить???
  insertwidget(dynedit, makepoint(300, 10));
  dynedit.show;
end;

Re: Динамическое создание элементов управления

СообщениеДобавлено: 30.03.2021 08:30:11
Alex2013
Что за frame ? В стандартном tedit такого поля нет.
Может не frame а BorderStyle ? Тогда например так dynedit.BorderStyle:=bsNone;
Зы
Возможно это у вас Дельфи, а не Лазарус ?

Re: Динамическое создание элементов управления

СообщениеДобавлено: 30.03.2021 09:52:03
Roland
Until fredvs has finished registering, here is his answer:

Код: Выделить всё
  //dynedit.frame := tedit1.frame; //Чем это заменить???
  dynedit.frame := tcaptionframe.create(iscrollframe(self));
  dynedit.frame.caption := 'Hello';

I tested it (with a tintegeredit). It works, but the component doesn't look exactly like the one created in designer. :?

Re: Динамическое создание элементов управления

СообщениеДобавлено: 30.03.2021 10:14:29
SSerge

Re: Динамическое создание элементов управления

СообщениеДобавлено: 30.03.2021 16:43:37
Alex2013

Ясно ! Извиняюсь за невнимательность ( не обратил внимание на то что это подфорум MSEide + MSEgui) :idea:

Re: Динамическое создание элементов управления

СообщениеДобавлено: 30.03.2021 23:38:08
Mirror
Roland писал(а):Until fredvs has finished registering, here is his answer:

Код: Выделить всё
  //dynedit.frame := tedit1.frame; //Чем это заменить???
  dynedit.frame := tcaptionframe.create(iscrollframe(self));
  dynedit.frame.caption := 'Hello';


Спасибо большое! Сработало.
Merci beaucoup! It worked.

Я также перешёл по ссылке и увидел ответ fred'а'vs про создание объекта face, dynedit.face := tface.create(iface(self)); — он мне тоже пригодится в будущем. Спасибо!
I've also followed the link and saw fredvs' answer about creating the face object, dynedit.face := tface.create(iface(self)); — it will be useful for me too. Thanks!

Roland писал(а):I tested it (with a tintegeredit). It works, but the component doesn't look exactly like the one created in designer. :?

Как ответил fredvs на английском форуме, нужно ещё установить значение свойства levelo.
As fredvs answered, one also needs to set the value for the levelo property.

Вот что у меня получилось в итоге:
Here's what I've ended up with:
Код: Выделить всё
procedure tmainfo.mainformcreated(const sender: TObject);
begin
  dynedit := tedit.Create(self);
  dynedit.bounds_cx := 100;
  dynedit.bounds_cy := 21;
  dynedit.frame := tcaptionframe.create(iscrollframe(self));
  dynedit.frame.levelo := -2;
  insertwidget(dynedit, makepoint(300, 10));
  dynedit.show;
end;


Я добавил эту информацию в вики, потому что мне кажется, что она может быть полезна не только мне.
I have added this information to the wiki, because I think it can be useful to other people, too.

Re: Динамическое создание элементов управления

СообщениеДобавлено: 31.03.2021 00:31:03
Roland
Mirror писал(а):Merci beaucoup!

De rien. :wink:

Thank you for the example about initializing the levelo property.

Mirror писал(а):I have added this information to the wiki, because I think it can be useful to other people, too.

Good!

Re: Динамическое создание элементов управления

СообщениеДобавлено: 10.02.2024 10:51:09
Roland
Full project source code uploaded here.