То, чего я пытаюсь достичь в упрощенной форме, состоит в том, чтобы создать список динамически созданных кнопок. Нажав на одну из кнопок, она должна быть удалена из списка, и его объект должен быть освобожден. Мой подход:
[*] Создать tlist
[*] Создать пару tbutton объектов и добавить их в T -код
Есть ли лучший /правильный способ сделать это, или другой подход, который я должен следить за тем, чтобы он работал так, как я хочу? < /P>
Вот какой -то пример кода. Это для формы с одной кнопкой времени дизайна (Button1) на нем. Нажав эту кнопку многократно динамически создает новые кнопки и добавляет их в список. < /P>
unit Unit2;
interface
uses
System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs,
FMX.Controls.Presentation, FMX.StdCtrls, System.Generics.Collections;
type
TForm2 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
ButtonList : TList;
procedure ButtonClick(Sender: TObject);
{ Private declarations }
public
{ Public declarations }
end;
var
Form2: TForm2;
implementation
{$R *.fmx}
procedure TForm2.ButtonClick(Sender: TObject);
var
pos : Integer;
begin
pos := ButtonList.IndexOf(TButton(Sender));
TButton(Sender).Parent := nil;
ButtonList.Delete(pos);
end;
procedure TForm2.FormCreate(Sender: TObject);
begin
ButtonList := TList.Create;
end;
procedure TForm2.Button1Click(Sender: TObject);
var
pos : Integer;
begin
pos := ButtonList.Add(TButton.Create(nil));
ButtonList.Items[pos].Parent := Form2;
ButtonList.Items[pos].Position.Y := 50 * ButtonList.Count;
ButtonList.Items[pos].OnClick := ButtonClick;
end;
end.
Подробнее здесь: https://stackoverflow.com/questions/398 ... in-onclick