![]() |
Ereignisse von dynamisch erzeugten Objekten?
Ich erzeuge ein Reihe von Panels dynamisch und würde jetzt gerne deren Ereignisse auch dynamisch belegen.
Wie mache ich sowas? Habe mich bereits daran probiert, jedoch ohne großen Erfolg. z.B. MouseDown Ereignis - MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); Irgendwie kann ich die ganzen Parameter nicht verwenden. Und wie verhält es sich wenn ich Panels dynamisch erstelle und auf diesen Panels sind Label, Edit oder sonstige Dinge. Muss ich jetzt wenn ich z.B. ein Drag realisieren will das für alle erstellen wenn ich z.B. das Panel verschieben will? Habe dazu viele Posts gelesen jedoch nicht das richtige gefunden. |
Re: Ereignisse von dynamisch erzeugten Objekten?
Du musst eine Ereignisbehandlungsroutine in der passenden Form (Art und Weise, nicht Formular) haben und dann kannst Du sie einfach dem OnIrgendwas Deines dynamischen Objekts zuweisen
Delphi-Quellcode:
Sherlock
MeinDynObjekt.OnCreate := MeinCreate(EinSender);
|
Re: Ereignisse von dynamisch erzeugten Objekten?
Ich gehe mal von aus, dass du dein Panel schon dynamisch erstellt hast.
Dann gehe wie Folgt vor:
Delphi-Quellcode:
MeinDynamischesPanel := TPanel.create(Form1); MeinDynamischesEdit := TEdit.create(MeinDynamischesPanel); MeinDynamischesEdit.Parent := MeinDynamischesPanel; //kann man glaube ich auch weglassen ... und so für alle anderen Objekte. Was dein OnMouseDown Ereignis betrifft: Du musst eine Procedure mit folgenden Parametern in dein Formular einbinden:
Delphi-Quellcode:
...
public Procedure MeinOnMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); ... dann die eigentliche Funktion
Delphi-Quellcode:
Jetzt kannste diese Funktion für z.B. dein Panel benutzen:
Procedure TForm1.MeinOnMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin ... Quelltext end;
Delphi-Quellcode:
...
MeinDynamischesPanel.OnMouseDown := MeinOnMouseDown; Da du diese Procedure ja nun auch für alle anderen Panels nutzen kannst musst du in der Funktion selber noch zwischen deinen ganzen Panels unterscheiden:
Delphi-Quellcode:
Procedure TForm1.MeinOnMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin if Sender.Classname = 'TPanel' then with TPanel(Sender) do .... end; |
Re: Ereignisse von dynamisch erzeugten Objekten?
5 Sterne gehen an...
Danke, das hilft mir weiter. Ich stelle mir nur gerade die Frage, wenn ich das Panel manuell erstelle, habe ich ja alle Ereignisse. Wenn ich das Panel dynamisch erstelle, wieso habe ich dann die Ereignisse nicht? |
Re: Ereignisse von dynamisch erzeugten Objekten?
Hm? Ob zur Designtime oder zur Runtime, die Ereignisse stehen Dir doch immer zur Verfügung.
|
Re: Ereignisse von dynamisch erzeugten Objekten?
Liste der Anhänge anzeigen (Anzahl: 1)
Ich habe mich mal dran probiert, aber so ganz klappt es noch nicht.
Ich habe eine Datei angehängt und habe ein paar Kommentare eingefügt mit entsprechenden Fragen! |
Re: Ereignisse von dynamisch erzeugten Objekten?
Du musst den Sender-Parameter auswerten, dann weißt Du, um welches Control es sich handelt.
|
AW: Ereignisse von dynamisch erzeugten Objekten?
So ein ähnliches Problem habe ich auch:
Ich erzeuge Bilder dynamisch (also in Runtime) und möchte auf diese erzeugten Bilder ein OnMouseDown event haben (das sie dann bei gedrückter Maustaste verschiebt, aber den Teil der Prozedur habe ich schon). Ich brauche das Event, das mir diese beliebig vielen Bilder steuern lässt. Die Vorschläge und Beispiele von Sherlock und SimStar001 sehen vielversprechend aus, jedoch komme ich dennoch nicht zum Ziel. In Public habe ich meine eigene Procedure implementiert:
Delphi-Quellcode:
wobei der Commpiler sagt: "E2065 Ungenügende Forward- oder External-Deklaration: 'TForm1.CustomImageMouseDown'"
public
procedure TForm1.CustomImageMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); end; Info: Ich bin ziemlich neu und unerfahren in Delphi (2 Wochen etwa). Wenn es möglich ist, überspringt bitte nicht alle "offensichtlichen" Schritte. :D |
AW: Ereignisse von dynamisch erzeugten Objekten?
Auch wenn ich das jetzt hier erklären könnte würde das für dich zu knapp ausfallen oder ich hätte einen Schreibkrampf ;)
Darum lege ich dir mal ein Tutorial ans Herz, was dich auf den richtigen Weg bringt. ![]() und speziell ![]() |
AW: Ereignisse von dynamisch erzeugten Objekten?
Zitat:
Delphi-Quellcode:
deiner Unit noch eine Implementation dieser Methode (mit derselben Deklaration). Übrigens ist die Angabe
implementation
Delphi-Quellcode:
vor dem Methodennamen im Deklarationsteil falsch, das gehört da nicht hin. Warum? Nun, die Methode steht bereits im Deklarationsteil einer Klasse (welche das ist, ist aus dem gegebenen Code nicht ersichtlich, vermutlich aber TForm1).
TForm1.
Und ich stimme Sir Rufo zu: ein Tutorial (für Einsteiger) kann helfen. MfG Dalai |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:29 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