Delphi-PRAXiS
Seite 2 von 4     12 34      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Procedure als Event definieren? Wenn ja, wie? (https://www.delphipraxis.net/150151-procedure-als-event-definieren-wenn-ja-wie.html)

himitsu 8. Apr 2010 19:05

Re: Procedure als Event definieren? Wenn ja, wie?
 
Zitat:

Zitat von stho
Ich möchte diese Procedure mit dem "Command.BeforeInsert" - event verbinden...

Wie ist denn der Typ für das BeforeInsert-Event?

Genauso muß nun deine Procedur oder Methode aufgerbaut sein.

Steht hinter dessen Typendeklaration ein "of object", dann muß es eine Methode werden, also innerhalb "irgendeiner" Klasse, bzw. eines instanziierten Objektes liegen.

Hierfür kannst du notfalls auch eine eigene Klasse anlegen, davon ein Objekt erstellen und die Methode dieses Objektes nun dem Event zuweisen.

stho 8. Apr 2010 19:09

Re: Procedure als Event definieren? Wenn ja, wie?
 
wenn ich das event auf einer form anspreche schauts so aus:
Delphi-Quellcode:
TMain = class(TForm)
  procedure ASQLite3Query1BeforeInsert(DataSet: TDataSet);
end;

implementation

procedure TMain.ASQLite3Query1BeforeInsert(DataSet: TDataSet);
begin
[...]
end;
das ist natürlich nur ein auszug...
Aber da das objekt dynamisch in einer Unit erzeugt wird ists net so einfach für mich -.-

Was macht eigentlich das "stdcall"?

himitsu 8. Apr 2010 19:16

Re: Procedure als Event definieren? Wenn ja, wie?
 
Zitat:

Zitat von stho
Aber da das objekt dynamisch in einer Unit erzeugt wird ists net so einfach für mich -.-

Zitat:

Zitat von himitsu
Hierfür kannst du notfalls auch eine eigene Klasse anlegen, davon ein Objekt erstellen und die Methode dieses Objektes nun dem Event zuweisen.


Zitat:

Zitat von stho
Was macht eigentlich das "stdcall"?

Das ist einfach nur eine Aufrufkonfention, welche festlegt, wie intern die Parameter übergeben werden und wer aufräumen muß.
Im Pascal werden Parameter vorzugsweise in die Register gelegt, wärend beim StdCall die Parameter im Stack landen. (wie es oftmal in C++ und der WinAPI der Fall ist)
Was genau passiert ist aber für dich nicht wichtig, sondern nur daß dieses übereinstimmt.


PS: Wenn die Signatur nicht stimmt, dann meckert Delphi, bzw. der Compiler schon rum.

stho 8. Apr 2010 20:09

Re: Procedure als Event definieren? Wenn ja, wie?
 
ich komm echt net weiter!!!
Ach so eine SCHEI*E... -.-

ich habe diese funktion:
Delphi-Quellcode:
procedure BeforeInsert(DataSet: TDataSet);
begin
  Showmessage(Command.SQL.Text);
end;
egal was ich mache, ich kriegs net hin :cry: :cry: :cry: :cry: :cry:

ich will doch nur
Delphi-Quellcode:
command.BeforeInsert := BeforeInsert(nil);
(Command vom Typ TASQLite3Query)

-> Inkompatible Typen: TDataSetNotifyEvent und procedure...

ich könnte heulen weil ich nicht ein Wort hier verstehe und mich, selbst nach eurem einsatz der sehr lobenswert ist, immer noch net schlauer fühle...

jfheins 8. Apr 2010 20:25

Re: Procedure als Event definieren? Wenn ja, wie?
 
Delphi-Quellcode:
type TDataSetNotifyEvent = procedure(
  DataSet: TDataSet
) of object;
Du musst also eine Methode zuweisen (of object)

=> Dummy Klassse erstellen, mit einer Methode und zuweisen (bei der Zuweisung keine Parameter!)

Alternativ gibt es auch einen kleinen Hack, der es ermöglicht eine Prozedur als Event zu verpacken und dann zuzuweisen, da muss ich nochmal kurz gucken ... ich glaub das war von himi

Doch nicht himi sondern Mirage: http://www.delphipraxis.net/internal...=302598#302598 ;)

stho 8. Apr 2010 20:32

Re: Procedure als Event definieren? Wenn ja, wie?
 
komm ich mir nur dumm vor oder bin ich es?

Delphi-Quellcode:
type
  TDummeKlasse = Class(TObject)
    Procedure BeforeInsert(DataSet: TDataSet);
  End;

[...]
command.BeforeInsert := TDummeklasse.BeforeInsert;
// oder
command.BeforeInsert := BeforeInsert;
ergeben noch immer den selben fehler -.-
ich versteh glaube echt nicht was ihr mir hier erklären wollt...

jfheins 8. Apr 2010 20:36

Re: Procedure als Event definieren? Wenn ja, wie?
 
Delphi-Quellcode:
type
  TDummyKlasse = Class(TObject)
    Procedure BeforeInsert(DataSet: TDataSet);
  End;

[...]
var temp = TDummyKlasse.Create();
command.BeforeInsert := temp.BeforeInsert;
// ggf. absichtliches Speicherleck

omata 8. Apr 2010 20:38

Re: Procedure als Event definieren? Wenn ja, wie?
 
Oder so...
Delphi-Quellcode:
type
  TDummy = class
    class procedure BeforeInsert(DataSet:TDataSet);
  end;

{ TDummy }

class procedure TDummy.BeforeInsert(DataSet: TDataSet);
begin

end;
:
:
begin
  command.BeforeInsert:=TDummy.BeforeInsert;
end;

stho 8. Apr 2010 20:42

Re: Procedure als Event definieren? Wenn ja, wie?
 
Zitat:

Zitat von jfheins
Delphi-Quellcode:
type
  TDummyKlasse = Class(TObject)
    Procedure BeforeInsert(DataSet: TDataSet);
  End;

[...]
var temp = TDummyKlasse.Create();
command.BeforeInsert := temp.BeforeInsert;
// ggf. absichtliches Speicherleck

ich habs jetzt so gemacht:

Delphi-Quellcode:
type
  TDummeKlasse = Class(TObject)
    Procedure BeforeInsert(DataSet: TDataSet);
  End;

---

procedure TDummeKlasse.BeforeInsert(DataSet: TDataSet);
begin
  Showmessage(Command.SQL.Text);
end;

---

function GlobalInit : Boolean;
var
  X : TDummeKlasse;
begin
  result := false;
  X     := TDummeKlasse.create;
[...]
command.BeforeInsert := X.BeforeInsert;
[...]
end;
irgendwie springt er trotzdem nicht in das sch**ß event rein :-(
Was mach ich noch alles falsch?!

himitsu 8. Apr 2010 20:44

Re: Procedure als Event definieren? Wenn ja, wie?
 
Zitat:

Zitat von jfheins
ich glaub das war von himi

Sowas geistert mehrfach in der DP rum
und ja, ein paar Mal hatte ich es auch erwähnt.

Aber es hatt seinen Grund, warum ich (und auch Andere) hier mehrmals den offiziellen Weg und nicht den Hack erwähnte.

Zitat:

Zitat von omata
Oder so...

Eine Methode (function of object) und keine Class Procedure (function of class)

Und den anderen Trick, der mit dem NIL-Objekt, erwähn ich besser auch nicht.



So, das was jfheins schieb, hatten wir jetzt mehrmals beschrieben ... was ist daran also bitte so schwer, daß man es nicht versteht?


Zitat:

Zitat von stho
Was mach ich noch alles falsch?!

Das, was von dem gekürzten Code zu sehen ist, sieht OK aus.

Du gibst X aber nicht zu früh frei?


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:30 Uhr.
Seite 2 von 4     12 34      

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