![]() |
Objekte während der Programmlaufzeit erzeugen?
Guten Abend meine Herren/Damen ;)
Ich hätte heute wieder einmal eine Frage an euch wenns recht ist. Undzwar möchte ich Objekte von festgelegten Klassen (wie z.B. TButton, TImage, usw.) während der Laufzeit erzeugen und diesen bei der Erzeugung mit durch die Übergabe Parametern Eigenschaften zuteielen. Ich habe schonmal bisschen probiert, doch lieg ich da glaube ich etwas falsch, denn es passiert nichts wenn ich auf Button1 klicke.
Delphi-Quellcode:
grüßchen
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; Button2: TButton; procedure Button1Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin Button2 := TButton.Create(Form1); Button2.Name := 'Button2'; Button2.Enabled := true; Button2.Top := 50; Button2.Left := 50; Button2.Caption := 'Button2'; end; end. |
Re: Objekte während der Programmlaufzeit erzeugen?
Hi,
Delphi-Quellcode:
Der Parent ist das, wo der Button drauf ist (kann z. B. auch ein Panel sein), du must ihn festlegen, sonst ist deine Komponente nirgends drauf.
Button2.Parent := self;
Mfg FAlter |
Re: Objekte während der Programmlaufzeit erzeugen?
Hallo, was soll denn passieren, wenn du auf den Button klickst?
Du musst dem Button noch ein OnClick Ereignis zuweisen. |
Re: Objekte während der Programmlaufzeit erzeugen?
@toms
würde es so gehen?
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
begin showmessage('Button2.Clicked'); end; @FAlter Danke, so funktioniert es. Aber ich hätte noch eine Frage wenns geht: Beim Komplementieren wird folgender Fehler gemeldet: "Feld Form1.Button2 besitzt keine entsprechende Komponente. Soll die Deklaration entfernt werden?" --> Ja/Nein/Abbrechen Wenn ich es entfernen lasse erscheinen ein haufen Fehler, wenn ich Nein klicke so läuft es aber der Fehler besteht weiterhin... Woran liegt das? |
Re: Objekte während der Programmlaufzeit erzeugen?
Delphi-Quellcode:
der meckert immer rum, wenn solche Prozeduren nirgends zugewiesen sind ... sei's im QuellCode, oder im OI.
Button2.OnClick := Button2Click;
und du hast nur die Ereignisprozedur erstellt, aber sie nicht zugewiesen. |
Re: Objekte während der Programmlaufzeit erzeugen?
Zitat:
Zitat:
Delphi-Quellcode:
Button2.OnClick := DeinOnClickEreignis
|
Re: Objekte während der Programmlaufzeit erzeugen?
Sorry, aber habe es irgendwie nicht hingekriegt..
Meldet jetzt: "Erste Zufalls-Exception bei $7C812A5B. Exception-Klasse EAccessViolation mit Meldung 'Zugriffsverletzung bei Adresse 00455846 in Modul 'Project1.exe'. Schreiben von Adresse 00000124'. Prozess Project1.exe (2936)"
Delphi-Quellcode:
type
TForm1 = class(TForm) Button1: TButton; Button2: TButton; procedure FormCreate(Sender: TObject); procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin Button2 := TButton.Create(Form1); Button2.Parent := self; Button2.Name := 'Button2'; Button2.Enabled := true; Button2.Top := 50; Button2.Left := 50; Button2.Caption := 'Button2'; end; procedure TForm1.Button2Click(Sender: TObject); begin showmessage('Button2.Clicked'); end; procedure TForm1.FormCreate(Sender: TObject); begin Button2.OnClick := Button2Click; end; |
Re: Objekte während der Programmlaufzeit erzeugen?
Wenn du das Ereignis im OnCreate zuweist, existiert der Button noch nicht.
Darum gibt es eine AV. |
Re: Objekte während der Programmlaufzeit erzeugen?
Alles klar :) jetzt gehts
danke euch allen !! |
Re: Objekte während der Programmlaufzeit erzeugen?
Könntest du bitte die Überschrift ändern nach:
Controls während der Programmlaufzeit erzeugen denn Controls sind zwar auch Objekte, aber ganz spezielle Objekte: Visuelle Steuerelemente ist die deutsche Bezeichnung dafür. Ich habe deinen Code mal überarbeitet, denn du hast noch 2 Fehler drinne:
Delphi-Quellcode:
type
TForm1 = class(TForm) Button1: TButton; procedure FormCreate(Sender: TObject); procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private { Private-Deklarationen } MyButton: TButton; // dynamisches Control gehört zur priv. Deklaration, da nicht von der IDE verwaltet public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin MyButton := TButton.Create(Form1); MyButton.Parent := self; MyButton.Name := 'MeinErsterButton'; MyButton.Enabled := true; MyButton.Top := 50; MyButton.Left := 50; MyButton.Caption := 'Button2'; MyButton.OnClick := Button2Click; end; procedure TForm1.Button2Click(Sender: TObject); begin showmessage((Sender as TControl).Name+'.Clicked'); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:49 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 by Thomas Breitkreuz