|
::Главная страница ::Delphi/Паскаль :: Статьи |
Здравствуйте. Сегодня поговорим о том, как создавать компоненты во время работы программы.
Иногда заранее не известно количество компонентов. Поэтому в Delphi есть возможность создать их из программы. Для этого достаточно вызвать конструктор Create, установить нужные свойства и события. А для появления компонента на экран нужно установить свойство Parent.
При нажатии на левую кнопку мыши эта программа создает Button, а при нажатии на правую - Panel. Причем компоненты создаются там, где находится мышь. Если Вы нажали на Panel1, то компонент появится на Panel1.
... public procedure OnButtonClick(Sender: TObject); end; var Form1: TForm1; implementation {$R *.DFM} uses stdctrls, extctrls; procedure TForm1.OnButtonClick(Sender: TObject); begin if Sender is TButton then with (Sender as TButton) do Caption := Caption + '1'; end; procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var b: TButton; p: TPanel; begin if Button = mbRight then begin p := TPanel.Create(nil); p.Caption := 'Panel' + IntToStr(random(100)); p.Left := X; p.Top := Y; p.Width := random(200) + 100; p.Height := random(200) + 100; p.OnMouseDown := Form1.OnMouseDown; p.Parent := Sender as TWinControl; end else begin b := TButton.Create(nil); b.Caption := 'Button' + IntToStr(random(100)); b.ShowHint := true; b.Hint := 'Hint for ' + b.Caption; b.Left := X; b.Top := Y; b.OnClick := OnButtonClick; b.Parent := Sender as TWinControl; end; end;Но может понадобиться что-то делать с компонентами после их создания. В этом случае нужно создать массив, в котором будут лежать эти компоненты. Эта программа хранит в массиве 100 кнопок. При изменении размера окна кнопки перегруппируются.
var b: array [0..99] of TButton; procedure TForm1.FormCreate(Sender: TObject); var i: integer; c: integer; begin c := Form1.ClientWidth div 52; for i := low(b) to high(b) do begin b[i] := TButton.Create(nil); b[i].Caption := IntToStr(i + 1); b[i].Width := 50; b[i].Height := 20; b[i].Left := 52 * (i mod c); b[i].Top := 22 * (i div c); b[i].Parent := Form1; end; end; procedure TForm1.FormResize(Sender: TObject); var i: integer; c: integer; begin c := Form1.ClientWidth div 52; for i := low(b) to high(b) do begin b[i].Left := 52 * (i mod c); b[i].Top := 22 * (i div c); end; end;
На сайте http://delphi4all.narod.ru
Вы найдете еще более 100 советов по Delphi.
Email: delphi4all@narod.ru
Тематические
ссылки
|
Ваша ссылка | Ваша ссылка |
Обмен кнопками, ведение статистики, реклама. |
|||