Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Prüfen ob ein Event zugewiesen wurde (https://www.delphipraxis.net/47071-pruefen-ob-ein-event-zugewiesen-wurde.html)

vt670 6. Jun 2005 10:38


Prüfen ob ein Event zugewiesen wurde
 
Hi,
in einem Projekt habe ich >30 Tables denen ich von Hand das gleiche "BeforeDelete/AfterPost"-Event zugewiesen habe. Damit in Zukunft, wenn Tables hinzukommen, nicht vergessen wird diesen neuen Tables ebenfalls die Event zuzuweisen, möchte ich bei DataModul.Oncreate prüfen ob alle relevanten Tables
auch das richtige Event zugewiesen wurde.
Wie lautet jetzt die genaue Syntax?
In meiner naivität hab ich es mir so gedacht:

IF Table1.AfterDelete <> myAfterDeleteEvent
THEN
BEGIN
END;

Geht aber leider nicht :-(
blöde Frage, ich weiss

jim_raynor 6. Jun 2005 10:42

Re: Prüfen ob ein Event zugewiesen wurde
 
Am besten ist vermutlich mit Assigned

Delphi-Quellcode:
if not assigned(Table1.AfterDelete)

vt670 6. Jun 2005 10:51

Re: Prüfen ob ein Event zugewiesen wurde
 
Zitat:

Zitat von jim_raynor
Am besten ist vermutlich mit Assigned

Delphi-Quellcode:
if not assigned(Table1.AfterDelete)


Danke Jim_Raynor

das ist ja schon mal ein erster Schritt.
Hab wohl heute ein Brett vorm Kopf (Hätte ich auch drauf kommen können/müssen).
Wenn ich jetzt noch wüsste wie ich prüfen kann ob es das richtige event ist
kann ich das Brett vorm Kopf abmontieren ;-)

Sharky 6. Jun 2005 10:55

Re: Prüfen ob ein Event zugewiesen wurde
 
Zitat:

Zitat von vt670
.... möchte ich bei DataModul.Oncreate prüfen ob alle relevanten Tables
auch das richtige Event zugewiesen wurde....

Hai vt670,

mache es doch genau anders herum. Weise im .OnCreate den Tabellen dein Event zu.
Delphi-Quellcode:
begin
  Table1.AfterDelete := myAfterDelete;
end;
Dann weisst Du das es immer das richtige ist ;-)

vt670 6. Jun 2005 11:32

Re: Prüfen ob ein Event zugewiesen wurde
 
Zitat:

Zitat von Sharky
Hai vt670,

mache es doch genau anders herum. Weise im .OnCreate den Tabellen dein Event zu.
Delphi-Quellcode:
begin
  Table1.AfterDelete := myAfterDelete;
end;
Dann weisst Du das es immer das richtige ist ;-)

Hi Sharky,

aber das wäre dann doch viel zu einfach ;-)

Nein im ernst hast recht, dokter jetzt schon seit einer stunde rum.
Ist kein event zugewiesen, weise ich enfach zu. Schluss!
Danke für eure Hinweise.

Robert_G 6. Jun 2005 11:37

Re: Prüfen ob ein Event zugewiesen wurde
 
Warum leitest du nicht direkt von deiner Table/DataSet/whatsoever -Komponente ab und sorgst dafür, dass dieser Code in der Situation ausgeführt wird? :gruebel:
Aber wenn du es um 10 Umwege und möglichst Quick'nDirty willst... :zwinker:

vt670 6. Jun 2005 11:46

Re: Prüfen ob ein Event zugewiesen wurde
 
Zitat:

Zitat von Robert_G
Warum leitest du nicht direkt von deiner Table/DataSet/whatsoever -Komponente ab und sorgst dafür, dass dieser Code in der Situation ausgeführt wird? :gruebel:
Aber wenn du es um 10 Umwege und möglichst Quick'nDirty willst... :zwinker:

Hi Robert,

um ehrlich zusein verstehe ich das nicht.
Kannst du das mal für einen Dummen wie mich an einem Beispiel zeigen ;-)
Dank dir

Robert_G 6. Jun 2005 13:11

Re: Prüfen ob ein Event zugewiesen wurde
 
Zitat:

Zitat von vt670
um ehrlich zusein verstehe ich das nicht.

Aber von Objektorientierter Programmierung hast du schon mal etwas gehört, oder? :zwinker:
Zitat:

Zitat von vt670
Kannst du das mal für einen Dummen wie mich an einem Beispiel zeigen ;-)

Hmm... Das würde mehr Zeit kosten als ich in meinen kleinen "DP-Pausen" habe. Ergo muss ich dich auf heute Abend vertrösten...
Zitat:

Zitat von vt670
Dank dir

Nur nicht so voreilig. :mrgreen:

Robert_G 6. Jun 2005 21:20

Re: Prüfen ob ein Event zugewiesen wurde
 
Zitat:

Zitat von Robert_G
Hmm... Das würde mehr Zeit kosten als ich in meinen kleinen "DP-Pausen" habe. Ergo muss ich dich auf heute Abend vertrösten...

Ist zwar erst später Nachmittag, aber ich werde mal mein Versprechen einhalten. ;)
Oki, fangen wir an.
Wir brauchen:
  • Delphi
  • 500ml Kaffee
  • ein neues Projekt (Package)
Das Package speichern wir als SampleTableDescendant ab.
Wir wollen eine Komponente ableiten, right?
Also: im Menü File\New\Other anklicken
Dort finden wir ein Component template (das gelbe Zahnrad).
Als Ancestor Type gibst du den Namen der Table-Klasse an, die du verwendest.
Als Class name nehmen wir "TSampleTableDescendant", die Palette nennen wir "DP Samples".
Beim Dateinamen würde ich uSampleTableDescendant empfehlen, da der Unit name sonst gleichnamige Instanzen verhindern würde.
Ein Klick auf den Button rechts daneben (der mit den 3 Pünktchen :mrgreen: ) und du kannst die Unit in den Ordner packen, in dem du auch das Package gespeichert hast.
Jetzt ein Klick auf OK.

Wir sehen nun einen leeren Rumpf einer Klasse, die von TXXXTable ableitet.
Einfach in der Klassendefinition alles außer protected rauslöschen.
In der Zeile unterhalb von protected [Ctrl + Space] drücken und DoAfterDelete auswählen.
*Fump* schon haben wir den Interface teil fertig. Ein [Ctrl+Shift+C] und die Klasse ist fast fertig.
Es sollte jetzt so aussehen:
Delphi-Quellcode:
type
   TSampleTableDescendant = class(TADOTable)
   protected
      procedure DoAfterDelete; override;
   end;

procedure Register;

implementation

procedure Register;
begin
   RegisterComponents('DP Samples', [TSampleTableDescendant]);
end;

{ TSampleTableDescendant }

procedure TSampleTableDescendant.DoAfterDelete;
begin
   // code, der vor dem Event ausgeführt werden soll
   inherited;
   // code, der nach dem Event ausgeführt werden soll
end;
Die Kommentare habe ich als Hilfestellung reingeschrieben. ;)
Jetzt alles speichern, im Menu unter View auf ProjectManager klicken und einen Rechtsklick auf unser Package machen.
Rate mal was "Install" macht. :zwinker:
Du kannst jetzt die neue Komponeten genauso verwenden, wie die alte.
Anhand der Kommentare oben kannst du eigene Logik einfügen, die vor bzw. nach dem AfterDelete event ausgeführt werden soll.
Beim Kompilieren des Packages wird die Komponente in der IDE aktualisiert.
Happy :coder2: ...

vt670 7. Jun 2005 10:36

Re: Prüfen ob ein Event zugewiesen wurde
 
Zitat:

Zitat von Robert_G
Wir brauchen:
  • Delphi
  • 500ml Kaffee
  • ein neues Projekt (Package)

Hallo Robert,

zuerst einmal recht herzlichen dank für die große Mühe die du dir gemacht hast.
Also das mit den 500ml Kaffee hat einwandfrei geklappt :zwinker:
Nein im ernst, im Grunde habe ich schon Verstanden was du meinst und du hast natürlich vollkommen Recht: das ist der elgante und richtige Weg das Problem anzugehen.
Leider gibt es jedoch zwei Probleme:
1.) Problem
Ich arbeit noch mit Delphi 2 :pale: (aus kompatibilitäts gründen und weil ich die meisten Bugs kenne). Also frühes Barock. Da gab es noch keine Packages und die Komponentenbiliothek neu zu compilieren kommt einem Abenteuerurlaub gleich. Ich weiss ich weiss, wirst jetzt sicher die Nase rümpfen (wie so oft hier in dem Forum) wenn ich mich als Delphi 2'er oute. Allerdings werde ich demnächst upgraden um ".net" nicht zu verpassen und weil es für ein Projekt sinnvoll ist.
2.) Problem
Vorausgesetzt ich starte das Adventure und compliere die Bibliothek neu hätte ich immer noch das Urspungsproblem das ich uU. bei einer Erweiterung in ferner Zukunft vergesse die abgeleitet Komponente zu verwenden und in meinem Tran einfach die standard Table einsetzte. Wer erinnert sich schon in einem Jahr daran das es damals eine Sonderregelung gab (leider einer meiner häufigsten Fehler). Natürlich bliebe noch die >30 Table's gegen die neue Table auszutauschen aber dieser Aufwand wäre sicher grösser als eine kleine routine die (heute und in Zukunft) beim "onCreate" prüft ob alle Parameter schlüssig sind.
Bitte nicht falsch vertehen. Dein vorgeschlagene Lösungsansatz wäre der Richtigere gewesen!!!
Beim nächsten Projekt werde ich dies auch berücksichtigen.
Nochmls vielen dank für deine Bemühungen
Liebe Grüße
VT


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:53 Uhr.

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