Мануал: Cоздание элементов управления в run-time

Форум для изучающих FPC и их учителей.

Модератор: Модераторы

Мануал: Cоздание элементов управления в run-time

Сообщение nedd » 18.01.2011 15:48:37

Создайте новое приложение и добавьте две кнопки.

Щелчок по первой кнопке должен создавать группу элементов управления - надпись, поле ввода и кнопку (вторая кнопка служит для удаления группы элементов). Желательно установить для размещенных кнопок выравнивание по нижнему краю.

Щелчок по кнопке из группы должен приводить к увеличению значения в соответствующем поле ввода. Элементы в группах должны размещаться слева направо - сначала надпись, затем поле ввода, затем кнопка для увеличения значения. Сами группы должны размещаться сверху вниз по всей ширине формы.

Алгоритм:

Описываем структуру, включающую в себя элементы управления (в моем примере это надпись, поле ввода и кнопка) с заданным выравниванием и панель , на которой они будут сгруппированы.


Описываем массив элементов этой структуры.

Ставим в соответствие щелчку по первой кнопке создание нового элемента, а щелчку по второй удаление элемента интерфейса.

Создание нового элемента проводим в следующем порядке: вызов конструктора, установка выравнивания. Подключаем элемент управления к циклу событий родителя, сначала группу контролов к панели, затем панель стыкуем с формой. Удаление элемента проводим в обратном порядке.

У вас должен получится примерно такой код:

Код: Выделить всё
unit udynelems;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
  StdCtrls, ExtCtrls;

type

  { TForm1 }

  groupElems = record
  gB : TButton;
  gL  : TLabel;
  gI  : TEdit;
  gP  : TPanel;
  end;

  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;

    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure FormClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
    G          : array[1..255] of groupElems;
    cntBtn     : byte;
  end;

var
  Form1: TForm1;

implementation

{ TForm1 }

procedure TForm1.Button1Click(Sender: TObject);
begin
cntBtn:=cntBtn+1;
with G[cntBtn] do
begin

   gP:=TPanel.Create(Self);

   gB:=TButton.Create(Self);

   gI:=TEdit.Create(Self);

   gL:=TLabel.Create(Self);

   gP.Caption:='';
   gI.Text:='0';
   gL.Caption:='Подпись '+IntToStr(cntBtn);
   gB.Caption:='Кнопка '+IntToStr(cntBtn);

   gI.Align:=alLeft;

   gI.Parent:=gP;

   gL.Align:=alLeft;
   gL.Parent:=gP;

   gB.Align:=alClient;
   gB.Parent:=gP;

   gP.Align:=alTop;
   gP.Height:=24;
   gP.Parent:=Form1;

   gB.OnClick:=Form1.OnClick;
end;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
if cntBtn=0 then exit;
with G[cntBtn] do
begin

  gB.Parent:=NIL;
  gI.Parent:=NIL;
  gL.Parent:=NIL;
  gB.Free;
  gI.Free;
  gL.Free;
  gP.Parent:=NIL;
  gP.Free;

end;
  dec(cntBtn);
end;



procedure TForm1.FormClick(Sender: TObject);
var i : byte;
begin
  if Sender = Form1 then exit;
  for i:=1 to cntBtn do
   if g[i].gB = Sender then
       g[i].gI.Text:=IntToStr(1+StrToInt(g[i].gI.Text));
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  cntBtn:=0;
end;

initialization
  {$I udynelems.lrs}

end.


Откомпилированный бинарник: http://narod.ru/disk/3712250001/dynelems.exe.html

P.S. По многочисленным просьбам доброжелателей убрал рекламу. Не нравится, не имеет смысла, не работает - удаляйте thread, mrOk?
Последний раз редактировалось nedd 22.01.2011 19:53:44, всего редактировалось 3 раз(а).
Аватара пользователя
nedd
незнакомец
 
Сообщения: 1
Зарегистрирован: 05.01.2011 11:20:28

Re: Мануал: Cоздание элементов управления в run-time

Сообщение dunin » 22.01.2011 01:09:18

Код: Выделить всё
[CODE]  begin ... end. ага!  [/CODE]
Аватара пользователя
dunin
энтузиаст
 
Сообщения: 634
Зарегистрирован: 02.05.2007 13:18:11
Откуда: Тољя††и

Re: Мануал: Cоздание элементов управления в run-time

Сообщение Verx0Laz » 22.01.2011 04:46:56

nedd, dunin говорит, что ты - реально красава каких мало, и просит тебя нажать кнопку ПРАВКА и заключить в тег CODE весь фрипаскаль в твоём мануале, дабы гуру могли совершить священный обряд принятия тебя в посвященные.

Вижу, исправил. Спасибо. Пост этот оставляю для будущих поколений.

А насчет рекламы - в данном случае, ты указываешь свой авторский сайт как первоисточник статьи. Имхо, имеешь полное право. И укажи ссылку на свой сайт в настройках своего профиля. Здесь многие так делают и опять-же, имеют полное право.
Последний раз редактировалось Verx0Laz 22.01.2011 20:32:34, всего редактировалось 1 раз.
Аватара пользователя
Verx0Laz
постоялец
 
Сообщения: 125
Зарегистрирован: 11.09.2007 11:24:07

Re: Мануал: Cоздание элементов управления в run-time

Сообщение devels » 22.01.2011 10:26:14

Да это скрытая реклама сайта просто.
devels
постоялец
 
Сообщения: 137
Зарегистрирован: 01.09.2010 12:14:38


Вернуться в Обучение Free Pascal

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 10

Рейтинг@Mail.ru