Du musst den Namen nicht unbedingt setzen - bei zur Laufzeit erstellten Komponenten kannst du sowieso nicht über den Namen darauf zugreifen und du jhast ja auch ein Array dafür.
Wenn du allerdings nur die Caption setzt, solltest du auch die Caption in deinem ShowMessage ausgeben:
Delphi-Quelltext
1: 2: 3: 4: 5:
| procedure TForm5.klick(Sender : TObject); begin ShowMessage((Sender as TButton).Caption); Form5.Close end; |
Edit: Mir ist noch gerade aufgefallen, dass du deine Buttons nicht freigibst - die menuewahl-Funktion leckt daher Speicher. Du solltest am Ende der Funktion entweder dein Array durchlaufen und für jeden Button explizit Free aufrufen oder das Formular als Owner der Buttons übergeben:
Delphi-Quelltext
1:
| knoepfe[i] := TButton.Create(Form5); |
Dann werden die Buttons beim Zerstören des Formulars (durch Release) mit freigegeben.
Stefan