DevProg: Блог для программистов

Секреты программирования. Примеры разработки. Обзоры программёрского софта, блогов и форумов и просто полезные советы!

Archive for Январь 2010

Узелок впрок! Динамическое создание визульных элементов

Posted by tevton на Январь 13, 2010

Это моя первая публикация, в данном блоге и блоге вообще. Поэтому прощу не закидывать помидорами не первой свежести)

Данная тема, уже поднималась в данном блоге, о создании кнопки ToolBar. Я же хочу раскрыть ее с несколько другой стороны.

Разберем, как происходит создание динамического элемента формы, на примере TButton.
В нашем примере, кнопка будет существовать столько же, сколько существует форма. По большому счету мы сделаем тоже самое, что делает Delphi за нас, когда мы располагаем кнопку на форме в Design-time.
В первую очередь нам нужно объявить модуль, в котором объявлен класс TButton в данном случае это StdCtrls

uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;

Теперь объявим переменную класса TButton и процедуру обработки события OnClick, в секции private нашей формы:

TfrmExample = class(TForm)
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
btnExample: TButton;
procedure DobtnExampleClick(Sender: TObject);
end;

Все подготовительные действия выполнены. Теперь приступаем непосредственно к созданию кнопки на форме.
Для этого в обработчике события создания формы пишем следующий код:

procedure TfrmExample.FormCreate(Sender: TObject);
begin
btnExample := TButton.Create(Self); // создали непосредственно кнопку
// теперь начинаем проставляет ее свойства
with btnExample do
begin
Caption := ‘Динамическая кнопка’;
Width := 150;
// Распологаем кнопку в середине формы
Left := Round((Self.Width / 2) — (Width / 2));
Top := Round((Self.Height / 2) — (Height / 2));
OnClick := DobtnExampleClick;
{Теперь очень важный момент. Чтобы элемент отображался, на другом элементе управления, будь то форма, панель, и т.д. нужно указать одно свойство}
Parent := Self;
end;
end;

Осталось 2 дописать детали.
Первая из которых это реализация процедуры обработки события OnClick

procedure TfrmExample.DobtnExampleClick(Sender: TObject);
begin
ShowMessage(‘http://www.devprog.wordpress.com‘);
end;

И последняя, это очистка памяти(очень не рекомендую забывать, чистить память):

procedure TfrmExample.FormDestroy(Sender: TObject);
begin
btnExample.Free;
end;

Подводя итог, можно сказать, что таким образом можно создать любой визуальный компонент, и «положить» его на элементы формы, или саму форму.

Posted in Узелок впрок | Отмечено: , , , | 3 комментария »