Hier werden 100 Knöpfe zur Laufzeit erzeugt, benannt und platziert. Bei Betätigen eines jeden Knopfes wird eine Prozedur aufgerufen, in welcher rückgemeldet wird, welcher Knopf gedrückt wurde.
Im Nachhinein hätte der Titel vielleicht etwas anders lauten müssen, damit es noch klarer gewesen wäre, was ich genau wollte.
In der Zeile
Code: Alles auswählen
OnClick:= @ButtonClick;
Ich bin dann schließlich in irgendwelchen Foreneinträgen fündig geworden.
Code: Alles auswählen
unit Test_CreateButton_unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls;
type
{ TForm1 }
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
procedure ButtonClick(Sender: TObject);
private
{ private declarations }
public
{ public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.lfm}
{ TForm1 }
procedure TForm1.FormCreate(Sender: TObject);
var x,y: integer;
Coordinates: string;
NewButton: TButton;
begin
for y:= 0 to 9 do
begin
for x:= 0 to 9 do
begin
Coordinates:= Format('%.2d',[y*10+x]);
NewButton:= TButton.Create(Self);
with NewButton do
begin
Name:= 'Button' + Coordinates;
Parent := Self;
Caption := Coordinates;
Top := y*32+50;
Left := x*32 + 50;
Height := 30;
Width := 30;
Visible:= true;
OnClick:= @ButtonClick; // das @ war für mich nicht offensichtlich
end;
end;
end;
end;
procedure TForm1.ButtonClick(Sender: TObject);
begin
ShowMessage('Hallo, ich bin ' + TComponent(Sender).Name);
end;
end.