![]() |
Delphi-Version: 7
Button von Nutzer erstellen
Hallo,
gibt es eine Möglichkeit, vom User einen Button zu erstellen? Also, wenn er auf einen Button klick das ein neuer erstellt wird. Gruß Sebastian |
AW: Button von Nutzer erstellen
Delphi-Quellcode:
Bitte korrigiert mich, wenn ich falsch liege.
var
Button: TButton; begin Button := TButton.Create; Button.Parent := Form; Button.Text := "Muh!"; end; |
AW: Button von Nutzer erstellen
Es wird jetzt der Fehler ausgegeben:
Nicht genügend Parameter bei
Delphi-Quellcode:
Button := TButton.Create
|
AW: Button von Nutzer erstellen
Dann übergibst du noch einen Owner, am besten die Form.
Grüß |
AW: Button von Nutzer erstellen
Danke, hat geklappt. :-D
|
AW: Button von Nutzer erstellen
Wie kann ich es jetzt hinbekommen, das dieser ersellte Button das beim klicken ausführt:
Delphi-Quellcode:
Application.MessageBox('Test', 'Test', MB_ICONQUESTION or MB_OK);
|
AW: Button von Nutzer erstellen
Delphi-Quellcode:
unit Form1;
interface ... type TForm1 = class(TForm) ... private procedure CreateButton; procedure MyButtonClick(Sender: TObject); public ... end; implementation procedure TForm1.CreateButton; var Button: TButton; begin Button := TButton.Create; Button.Parent := Form; Button.Caption := 'Muh!'; Button.Name := 'MeinButton1'; Button.OnClick := MyButtonClick; end; procedure TForm1.MyButtonClick(Sender: TObject); var Button: TButton; begin if not (Sender is TButton) then Exit; Button := Sender as TButton; ShowMessage(Button.Name + ' wurde angeklickt: ' + Button.Caption); end; ... end. |
AW: Button von Nutzer erstellen
Der Button wird ja aber vom Nutzer erstellt, nicht von mir, und der kann den Button ja beliebig benennen.
|
AW: Button von Nutzer erstellen
Lass die Namenszuweisung weg, das klappt eh nur 1 mal. Und benennen kann der User den Button wohl kaum, höchstens beschriften.
|
AW: Button von Nutzer erstellen
Zitat:
Delphi-Quellcode:
geprüft hat, ob ein Cast zulässig ist, kann man beherzt hart casten:
is
Delphi-Quellcode:
Gibt's eigentlich irgendwo eine Seite, die das gut erklärt, damit man was zum Verlinken hat?
Button := TButton(Sender);
|
AW: Button von Nutzer erstellen
Zumindest hier in der DP wurde das schon mehrfach erwähnt.
|
AW: Button von Nutzer erstellen
Zitat:
Delphi-Quellcode:
procedure TForm1.CreateButton(ACaption: String);
begin ... Button.Caption := ACaption; ... end; |
AW: Button von Nutzer erstellen
Hallo,
Um deine Buttons intern besser zu unterscheiden, gäbe es dann noch das Property Tag. Das ist ein Integer zu Deiner freien Verwendung. Heiko |
AW: Button von Nutzer erstellen
Oder man packt sie in eine TObjectlist/TComponentlist, dann kann man sie über ihren Listenindex ansprechen. Man muss sich nur überlegen, wer für die Speicherverwaltung zuständig sein soll, Owner oder Liste.
|
AW: Button von Nutzer erstellen
Zitat:
Delphi-Quellcode:
type
TForm1 = class( TForm ) .. private ButtonOwner : TComponent; .. end; // Bei der Form Erstellung ButtonOwner := TComponent.Create( Self ); |
AW: Button von Nutzer erstellen
Den Ansatz verstehe ich ehrlich gesagt nicht. :gruebel:
|
AW: Button von Nutzer erstellen
Delphi-Quellcode:
TButton.Create( ButtonOwner );
|
AW: Button von Nutzer erstellen
Um dann über die Komponente bzw. ihr Components-Array auf die Buttons zuzugreifen? Da erscheint mir eine Liste aber logischer.
|
AW: Button von Nutzer erstellen
Zitat:
|
AW: Button von Nutzer erstellen
Die eine Zeile in der CreateButton-Methode macht den Kohl doch auch nicht fett. Für mich sieht es nur komisch aus, wenn man ein VCL-Element wie TComponent dazu benutzt, um Listenelemente zu verwalten. Wobei ich damit nicht sagen will, dass man das nicht machen darf, es funktioniert ja auch. Allerdings würde ich mich vermutlich wundern, wenn in einem Code plötzlich eine Komponente auftaucht, die scheinbar nirgends genutzt wird, außer wenn man ihre Components anspricht.
|
AW: Button von Nutzer erstellen
Zitat:
Ich dachte immer, dass ist ein Basistyp ( ![]() |
AW: Button von Nutzer erstellen
Zitat:
Zuerst erstellst du dir ein Event, welches deinen Code ausführt.
Delphi-Quellcode:
Jetzt muss der Button noch wissen, das er dieses Event auch aufrufen soll:
unit Form1;
interface ... type TForm1 = class(TForm) private procedure MyButtonClick(Sender: TObject); end; implementation procedure TForm1.MyButtonClick(Sender: TObject); begin Application.MessageBox('Test', 'Test', MB_ICONQUESTION or MB_OK); end; end. (Die Zuweisung kannst du z.b. dort machen, wo du den Button auch erstellst) Zitat:
(procedure of object) ![]() |
AW: Button von Nutzer erstellen
Zitat:
|
AW: Button von Nutzer erstellen
Nja, bis vor FMX wurde es von Delphi selber ja praktisch fast ausschließlich nur für die VCL genutzt ... da könnte man schon auf den Gedanken kommen, daß der Typ auch zu VCL gehört.
Ab TWinControl isses definitiv für die "visuelle" VCL, davor sind es einfach nur Komponenten, welche über eine gemeinsame Owner-Beziehung verfügen. |
AW: Button von Nutzer erstellen
Der Neuling hat doch noch nichtmal nach der Referenzverwaltung gefragt oder überhaupt das Problem entdeckt. Vielleicht ist sein Button ja auch nach dem ersten "KLICK" disabled oder sowas.
Das sind Kommentare die (projeziert) gegen CleanCode verstoßen und ich hoffe, dass sich dasGeschwätz nicht von hier bis zu euren Sourcen erstreckt. :-D (hui, ich hab eine unpolitische Aussage getroffen) Trefft euch auf einen Kaffe, ich sehe da viel Gesprächsstoff-Potential :D |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:51 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz