» » Создание массива Button и Label во время выполнения программы и перемещение по форме

 

Создание массива Button и Label во время выполнения программы и перемещение по форме

Автор: reader hlp от 14-05-2019, 17:05, посмотрело: 64

Пример создания массива Кнопок (Button) и Меток (Label) во время выполнения программы и перемещение их по форме
unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Label1: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Label1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure Label1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure Lab_MyMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure Lab_MyMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
  private
    { Private declarations }
    procedure RunTimeButtonclick(Sender: TObject);
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  RunTimeButtons: array[1..10] of TButton;
  RunTimeLabels: array[1..10] of TLabel;

  temp_x, temp_y : Integer;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
   i: Byte;
begin
for i := 1 to 10 do
   begin
{Создаем кнопки}
   RunTimeButtons[i] := TButton.Create(Self);
   with RunTimeButtons[i] do
   begin
      Parent := Form1;
     Caption := 'Button ' + IntToStr(i);
     Top := i * Height;
     Tag := i;
{Назначить обработчик onclick}
    onclick := RunTimeButtonclick;
    Visible := True;
    end;
  end;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
   i: Byte;
begin
for i := 1 to 10 do
  begin
{Создаем кнопки}
  RunTimeLabels[i] := TLabel.Create(Self);
  with RunTimeLabels[i] do
    begin
    Parent := Form1;
    Caption := 'Label - ' + IntToStr(i);
    Left := 300;
    Top := i * Height;
    Tag := i;
    Font.Size := 10;
    Visible := True;
{Назначить обработчик перемещения Label}
    onmousemove := Lab_MyMouseMove;
    onmousedown := Lab_MyMouseDown;
    end;
  end;
end;

procedure TForm1.Label1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
temp_x := X;
temp_y := Y;
end;

procedure TForm1.Label1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
if Shift = [ssLeft] then
  With Label1 do
  begin
  Left := Left + X - temp_x;
  Top := Top + Y - temp_y;
  end;
end;

procedure TForm1.Lab_MyMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
temp_x := X;
temp_y := Y;
end;

procedure TForm1.Lab_MyMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
if Shift = [ssLeft] then

  With (Sender as TLabel) do
    begin
    Left := Left + X - temp_x;
    Top := Top + Y - temp_y;
    end;
end;

procedure TForm1.RunTimeButtonclick(Sender: TObject);
begin
{Действие при нажатии на кнопку из созданного массива}
ShowMessage('Button' + IntToStr((Sender as TButton).Tag) + ' clicked!');
end;

end.
скачать dle 12.0

Категория: Pascal Delphi