Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Ereignisse von dynamisch erzeugten Objekten? (https://www.delphipraxis.net/122825-ereignisse-von-dynamisch-erzeugten-objekten.html)

trymeout 22. Okt 2008 17:01


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.

Sherlock 22. Okt 2008 17:04

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:
MeinDynObjekt.OnCreate := MeinCreate(EinSender);
Sherlock

SimStar001 22. Okt 2008 17:37

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:
Procedure TForm1.MeinOnMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
... Quelltext
end;
Jetzt kannste diese Funktion für z.B. dein Panel benutzen:

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;

trymeout 22. Okt 2008 19:52

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?

DeddyH 22. Okt 2008 19:56

Re: Ereignisse von dynamisch erzeugten Objekten?
 
Hm? Ob zur Designtime oder zur Runtime, die Ereignisse stehen Dir doch immer zur Verfügung.

trymeout 23. Okt 2008 23:15

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!

DeddyH 24. Okt 2008 07:12

Re: Ereignisse von dynamisch erzeugten Objekten?
 
Du musst den Sender-Parameter auswerten, dann weißt Du, um welches Control es sich handelt.

Antonov 16. Apr 2014 19:52

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:
public
   procedure TForm1.CustomImageMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
  end;
wobei der Commpiler sagt: "E2065 Ungenügende Forward- oder External-Deklaration: 'TForm1.CustomImageMouseDown'"

Info: Ich bin ziemlich neu und unerfahren in Delphi (2 Wochen etwa). Wenn es möglich ist, überspringt bitte nicht alle "offensichtlichen" Schritte. :D

Sir Rufo 16. Apr 2014 20:00

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.

http://www.delphi-treff.de/tutorials...lphi-crashkurs
und speziell
http://www.delphi-treff.de/tutorials...rogrammierung/

Dalai 16. Apr 2014 20:03

AW: Ereignisse von dynamisch erzeugten Objekten?
 
Zitat:

Zitat von Antonov (Beitrag 1255890)
wobei der Commpiler sagt: "E2065 Ungenügende Forward- oder External-Deklaration: 'TForm1.CustomImageMouseDown'"

Dann ist deine Methode nur deklariert, aber nicht implementiert. D.h. du brauchst im Abschnitt
Delphi-Quellcode:
implementation
deiner Unit noch eine Implementation dieser Methode (mit derselben Deklaration). Übrigens ist die Angabe
Delphi-Quellcode:
TForm1.
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).

Und ich stimme Sir Rufo zu: ein Tutorial (für Einsteiger) kann helfen.

MfG Dalai


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:29 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz