Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Eventprocedur bei virtuellen Objekten (https://www.delphipraxis.net/182935-eventprocedur-bei-virtuellen-objekten.html)

Ykcim 27. Nov 2014 14:52

Eventprocedur bei virtuellen Objekten
 
Hallo Zusammen,

wenn ich einen Button auf ein Formular ziehe, dann habe ich in dem Objektinspektor unter Ereignisse einige Procedure, die bei einem Event ausgeführt werden, z.B. onClick.

Ich habe jetzt in einer Unit ohne Formular ein Objekt created und möchte gerne eine der Eventproceduren verwenden. Es handelt sich nicht um einen Button, sondern um eine TAdvGirdExcel Komponente.

Aber vielleicht bleiben wir der Einfachheit halber bei einem Button. Wenn ich den jetzt virtuel erzeuge, wie kann ich ihm die Eventprocedure onClick zuweisen?

Vielen Dank
Patrick

himitsu 27. Nov 2014 14:55

AW: Eventprocedur bei virtuellen Objekten
 
Zitat:

virtuell
Du erstellst die Komponente schon "real".

Das was du meinst nennt sich "dynamisch erstellen", also quasi manuell.


Es gibt das Property
Delphi-Quellcode:
DeineKomponente.OnClick
und dem weist du deine Methode zu (
Delphi-Quellcode:
x.OnEvent := EventMethode;
).

Sir Rufo 27. Nov 2014 14:57

AW: Eventprocedur bei virtuellen Objekten
 
Delphi-Quellcode:
MyNewButton := TButton.Create( ... );
MyNewButton.OnClick := MyVeryFineButtonClickMethod;

Sherlock 27. Nov 2014 14:58

AW: Eventprocedur bei virtuellen Objekten
 
Also, erstens ist der nicht virtuell erzeugt, sondern wirklich und wahrhaftig da, nur eben (jetzt kommt der korrekte Fachausdruck) dynamisch erzeugt.
Nun zur eigentlichen Frage: Du kannst einem Event wie zB
Delphi-Quellcode:
Button.OnClick
ganz einfach jede Methode zuweisen, die die korrekte Signatur hat. In diesem Fall
Delphi-Quellcode:
procedure BeleibigerName(Sender:TObject);
. Was zu
Delphi-Quellcode:
Button.OnClick := BeleibigerName;
wird.

Sherlock

Ykcim 27. Nov 2014 15:11

AW: Eventprocedur bei virtuellen Objekten
 
WOW!!! Vielen Dank für die schnellen und guten Antworten. So wird es klappen, habe noch ein paar Probleme mit den Parametern([DCC Fehler] TExcelExportUnit.pas(233): E2010 Inkompatible Typen: 'tmsUFlxFormats.TFlxFormat' und '_UFlxFormats.TFlxFormat.TFlxFormat'), die ich aber hoffentlich alleine gelöst bekomme.

Vielen Dank
Patrick

DeddyH 27. Nov 2014 15:12

AW: Eventprocedur bei virtuellen Objekten
 
Öhm... nö, es darf keine reguläre Prozedur, sondern muss eine Methode sein. Zur Not muss man sich eben eine Dummy-Klasse erstellen, die diese Methode dann implementiert.

Helmi 27. Nov 2014 15:25

AW: Eventprocedur bei virtuellen Objekten
 
Zitat:

Zitat von DeddyH (Beitrag 1281357)
Öhm... nö, es darf keine reguläre Prozedur, sondern muss eine Methode sein. Zur Not muss man sich eben eine Dummy-Klasse erstellen, die diese Methode dann implementiert.

warum eigentlich?

Über das bin ich auch schon mal geflogen - aber theoretisch könnt das doch egal sein, ob es eine reguläre Prozedur oder eine Methode ist

Sir Rufo 27. Nov 2014 15:29

AW: Eventprocedur bei virtuellen Objekten
 
Zitat:

Zitat von Helmi (Beitrag 1281359)
Zitat:

Zitat von DeddyH (Beitrag 1281357)
Öhm... nö, es darf keine reguläre Prozedur, sondern muss eine Methode sein. Zur Not muss man sich eben eine Dummy-Klasse erstellen, die diese Methode dann implementiert.

warum eigentlich?

Über das bin ich auch schon mal geflogen - aber theoretisch könnt das doch egal sein, ob es eine reguläre Prozedur oder eine Methode ist

Natürlich wäre es egal, aber wenn der Event als
Delphi-Quellcode:
TFooEvent = procedure ... of object;
deklariert ist, dann muss es eine Methode sein.

Bei den neueren Delphis könnte man auch
Delphi-Quellcode:
TFooEvent = reference to procedure ...;
nehmen, dann frisst der alles, bis auf den OI, der wird da wohl nicht mitspielen.

Helmi 27. Nov 2014 15:45

AW: Eventprocedur bei virtuellen Objekten
 
D. h. einzig die Definition ist "schuld" daran?

Ykcim 27. Nov 2014 15:48

AW: Eventprocedur bei virtuellen Objekten
 
Hallo Zusammen,

ich habe es jetzt umgesetzt bekommen. Ich musste tatsächlich eine DummyKlasse erstellen und einbinden, weil zwei TMS-Klassen in ein und derselben Unit nicht vertrugen. Zwei Mal den gleichen Namen für unterschiedliche Typen...

Aber jetzt klappt es.

Danke
Patrick


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:21 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