AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Procedure als Event definieren? Wenn ja, wie?
Thema durchsuchen
Ansicht
Themen-Optionen

Procedure als Event definieren? Wenn ja, wie?

Ein Thema von stho · begonnen am 8. Apr 2010 · letzter Beitrag vom 21. Apr 2010
Antwort Antwort
Seite 2 von 4     12 34      
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.157 Beiträge
 
Delphi 12 Athens
 
#11

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

  Alt 8. Apr 2010, 19:05
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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
stho

Registriert seit: 16. Sep 2009
Ort: 127.0.0.1
288 Beiträge
 
Delphi 2007 Professional
 
#12

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

  Alt 8. Apr 2010, 19:09
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"?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.157 Beiträge
 
Delphi 12 Athens
 
#13

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

  Alt 8. Apr 2010, 19:16
Zitat von stho:
Aber da das objekt dynamisch in einer Unit erzeugt wird ists net so einfach für mich -.-
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 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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
stho

Registriert seit: 16. Sep 2009
Ort: 127.0.0.1
288 Beiträge
 
Delphi 2007 Professional
 
#14

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

  Alt 8. Apr 2010, 20:09
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

ich will doch nur
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...
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#15

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

  Alt 8. Apr 2010, 20:25
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
  Mit Zitat antworten Zitat
stho

Registriert seit: 16. Sep 2009
Ort: 127.0.0.1
288 Beiträge
 
Delphi 2007 Professional
 
#16

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

  Alt 8. Apr 2010, 20:32
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...
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#17

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

  Alt 8. Apr 2010, 20:36
Delphi-Quellcode:
type
  TDummyKlasse = Class(TObject)
    Procedure BeforeInsert(DataSet: TDataSet);
  End;

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

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#18

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

  Alt 8. Apr 2010, 20:38
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;
  Mit Zitat antworten Zitat
stho

Registriert seit: 16. Sep 2009
Ort: 127.0.0.1
288 Beiträge
 
Delphi 2007 Professional
 
#19

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

  Alt 8. Apr 2010, 20:42
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?!
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.157 Beiträge
 
Delphi 12 Athens
 
#20

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

  Alt 8. Apr 2010, 20:44
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 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 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?
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 4     12 34      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:12 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