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 3 von 4     123 4      
stho

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

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

  Alt 8. Apr 2010, 20:51
Zitat von himitsu:
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 hatten wir jetzt mehrmals beschrieben ... was ist daran also bitte so schwer, daß man es nicht versteht?

ich kann verstehen das du langsam die geduld verlierst... -.-
mir würde es sicher net anderst gehen.
dann betrachte mich gerne als etwas zurückgeblieben wenn nötig. aber nein, ich versteh nicht WAS ICH AN DEM EBEN GENANNTEN CODE falsch mache...
ich verlange ja nicht das ich das "of object" oder "Procedure-zeiger" oder sonst was verstehen.
(Hey, immerhin habe ich dank dir den aufruf "stdcall" verstanden. auch wenn ich net weiß wann und wo man ihn einsetzt!)
Ich lese das was ihr schreibt und versucht es zu verstehen!

den meisten code den ihr hier postet ist entweder unkommentiert oder mit so viel fachgesimpel voll das ich ihn net verstehe -.-
ich will auch keinen "sogenannten" "hack" anwenden. ich will nur das das programm macht was es soll. das ist alles...
ich verlange ja nicht die welt sondern nur das das was ich bisher gemacht habe funktioniert oder, was toll währe, wenn ihr mir sagt das ich schei*e verzapfe, am besten WO ich mist mache und WAS daran falsch ist!

Ich bin bereit zu lesen, kopf ein zu setzen und aus zu probieren...
was soll ich denn noch machen?????????
Sag es mir und ich versuche es!!!!!!
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

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

  Alt 8. Apr 2010, 21:02
Also dein Code aus der #19 sollte so eigentlich funktionieren.
An deinem gezeigten Beispielcode dürfte es noch nichtmal ein Problem geben, selbst wenn du "ausversehn" der Dummy-Objekt in deiner Initprozedur wieder freigibst.

Zitat:
Hierfür kannst du notfalls auch eine eigene Klasse anlegen, davon ein Objekt erstellen und die Methode dieses Objektes nun dem Event zuweisen.
Delphi-Quellcode:
// Hierfür kannst du notfalls auch eine eigene Klasse anlegen,
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;
  // davon ein Objekt erstellen
  X := TDummeKlasse.create;
  [...]
  // und die Methode dieses Objektes nun dem Event zuweisen.
  command.BeforeInsert := X.BeforeInsert;
  [...]
end;

// X besser globaler deklarieren
// und erst freigeben, wenn "command" gelöscht wurde
// oder wenn TDummeKlasse.BeforeInsert nicht mehr benötigt wird.
Wie gesagt, so ist es eigentlich richtig,

also muß der Fehler, warum es immernoch nicht geht, irgendwo anders sein.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von uligerhardt
uligerhardt

Registriert seit: 19. Aug 2004
Ort: Hof/Saale
1.735 Beiträge
 
Delphi 2007 Professional
 
#23

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

  Alt 8. Apr 2010, 21:05
Zitat von himitsu:
Wie gesagt, so ist es eigentlich richtig,
Omatas Weg ist besser, weil man kein überflüssiges Objekt X anlegen muss.
Uli Gerhardt
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.679 Beiträge
 
Delphi 2007 Enterprise
 
#24

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

  Alt 8. Apr 2010, 22:17
Zitat von stho:
Ich bin bereit zu lesen, kopf ein zu setzen und aus zu probieren...
was soll ich denn noch machen?????????
Sag es mir und ich versuche es!!!!!!
Grundlagen der Objekt orientierten Programmierung lernen.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
blauweiss

Registriert seit: 19. Jun 2007
142 Beiträge
 
#25

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

  Alt 8. Apr 2010, 22:29
Zitat von himitsu:
Also dein Code aus der #19 sollte so eigentlich funktionieren.
An deinem gezeigten Beispielcode dürfte es noch nichtmal ein Problem geben, selbst wenn du "ausversehn" der Dummy-Objekt in deiner Initprozedur wieder freigibst.

Zitat:
Hierfür kannst du notfalls auch eine eigene Klasse anlegen, davon ein Objekt erstellen und die Methode dieses Objektes nun dem Event zuweisen.
Delphi-Quellcode:
// Hierfür kannst du notfalls auch eine eigene Klasse anlegen,
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;
  // davon ein Objekt erstellen
  X := TDummeKlasse.create;
  [...]
  // und die Methode dieses Objektes nun dem Event zuweisen.
  command.BeforeInsert := X.BeforeInsert;
  [...]
end;

// X besser globaler deklarieren
// und erst freigeben, wenn "command" gelöscht wurde
// oder wenn TDummeKlasse.BeforeInsert nicht mehr benötigt wird.
Wie gesagt, so ist es eigentlich richtig,

also muß der Fehler, warum es immernoch nicht geht, irgendwo anders sein.

Die Instanz x der Dummyklasse muß nicht unbedingt erstellt sein, da auf keine members zugegriffen wird.
Also die Zeile
  X := TDummeKlasse.create; braucht es nicht. Dann muß man sich auch nicht um die Freigabe kümmern.

blauweiss
  Mit Zitat antworten Zitat
stho

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

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

  Alt 9. Apr 2010, 05:23
@Medium:
So, fertig mit lernen -.-
Aber so eine Aussage ist nen bissel unpassend wie ich finde.
Zu den Grundlagen zählt dieses Problem sicherlich nicht: Eine bestehende Procedure einem Objekt-Event zu zu weisen. Oder?
Wenn doch, bitte zeige mir einen Link wo ich dieses gehobene Wissen erlangen kann damit ich der Gemeinschaft nicht mehr auf den sack gehe...

---

@uligerhardt:
So, mit Hilfe von omatas Code (den ich absichtlich nicht benutzt habe) geht es jetzt.
Aber mal eine Rückfrage dazu:
Was sagt eigentlich das "class" vor der procedure?
"class procedure XYZ(I : Integer);"

Sowas hab ich bisher noch nicht gesehen...
Und wieso muss man dort kein Objekt erzeugen? Wie kann ich also auf den inhalt eines objektes zugreifen wenn ich es ja nirgends erzeugt habe? das ist mir nicht ganz schlüssig...
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.352 Beiträge
 
Delphi 11 Alexandria
 
#27

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

  Alt 9. Apr 2010, 07:09
Zitat von stho:
Und wieso muss man dort kein Objekt erzeugen? Wie kann ich also auf den inhalt eines objektes zugreifen wenn ich es ja nirgends erzeugt habe? das ist mir nicht ganz schlüssig...
Es handelt sich dabei nicht um eine Methode einer Instanz der Klasse (also das was du mit Create erzeugst), sondern eine Methode der Klasse selbst.
Deshalb gehört die Methode nicht zu einem speziellen erzeugten Objekt sondern zur Klasse. Heißt im Umkehrschluss natürlich, dass du nicht auf andere Elemente ohne das "class" zugreifen kannst, da die zu einer Instanz gehören.

Um es mal anders zu erklären:
Stell dir ein Auto vor. Eine Methode "Tür schließen" bezieht sich auf ein spezielles Auto. Diese werden erzeugt / gebaut und die Methode kann man nicht ohne ein spezielles Auto-Objekt benutzen.

Jetzt nimm aber die Funktion "Bremsweg berechnen". Der übergibst du einfach die Geschwindigkeit und du bekommst den Bremsweg zurück. Dabei brauchst du kein spezielles Auto, sondern es reicht, dass du sagst, dass du das bei einem Auto, also der Klasse TAuto z.B. berechnen willst. (Oder eben bei TKreuzfahrtschiff. )
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Benutzerbild von uligerhardt
uligerhardt

Registriert seit: 19. Aug 2004
Ort: Hof/Saale
1.735 Beiträge
 
Delphi 2007 Professional
 
#28

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

  Alt 9. Apr 2010, 07:15
Zitat von stho:
@uligerhardt:
So, mit Hilfe von omatas Code (den ich absichtlich nicht benutzt habe) geht es jetzt.
Aber mal eine Rückfrage dazu:
Was sagt eigentlich das "class" vor der procedure?
"class procedure XYZ(I : Integer);"

Sowas hab ich bisher noch nicht gesehen...
Und wieso muss man dort kein Objekt erzeugen? Wie kann ich also auf den inhalt eines objektes zugreifen wenn ich es ja nirgends erzeugt habe? das ist mir nicht ganz schlüssig...
Das "class" in "class procedure" macht die Prozedur zur Klassenmethode. Das ist ähnlich wie eine statische Methode in C++. Um sie aufzurufen, brauchst du keine Instanz der Klasse, dafür kannst du auch auf keine Felder dieser nichtvorhandenen Instanz zugreifen. Also eine globale Routine in OO-Verkleidung - genau was du als Eventhandler brauchst.
Uli Gerhardt
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#29

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

  Alt 9. Apr 2010, 07:28
Zitat von stho:
@Medium:
So, fertig mit lernen -.-
Aber so eine Aussage ist nen bissel unpassend wie ich finde.
Zu den Grundlagen zählt dieses Problem sicherlich nicht: Eine bestehende Procedure einem Objekt-Event zu zu weisen. Oder?
Wenn doch, bitte zeige mir einen Link wo ich dieses gehobene Wissen erlangen kann damit ich der Gemeinschaft nicht mehr auf den sack gehe...
Ich bin zwar nicht Medium, antworte aber trotzdem mal: Das mit den 'Grundlagen' stimmt schon, denn Du stellst Fragen, die mit deinem Problem nichts zu tun haben ('Prozedur zuweisen'): Du hast das Problem, das Du nicht weisst, wie man mit Delegaten (OO-Grundkurs) unter Delphi umgeht. Du kennst den Unterschied zwischen Klassenmethode und Objektmethode nicht.

Einen Link muss ich Dir nicht geben, denn ich glaube, mit 'OOP', 'OOP Delphi', 'Grundlagen OOP Delphi', 'Delegat OOP', 'Delegat Delphi' usw. kommst Du schon recht weit.

Du willst objektorientiert programmieren, aber ohne die Grundlagen zu kennen und regst Dich auf, wenn man dir das so sagt.

Nun ja.

Du hast also ein TDataset-Derivat und willst sein BeforeInsert-Ereignis/Delegat belegen?
1. Im Designer klickst Du auf dein TDataset (TASQLListe-Dingsda)
2. Dann wechsest Du im Objektinspektor auf die Ereignisseite
3. Nun doppelklickst Du in den Eintrag rechts vom 'BeforeInsert'
4. Wupps, hat Delphi ein Delegat erstellt und du kannst das nun mit Leben füllen.

Nun weisst Du, wie das Delegat aussehen muss. Manuell zuweisen geht so:
Delphi-Quellcode:
...
  MyDataset.BeforeInsert := MyBeforeInsertDelegate; // Ohne Parameter, ohne Klammern, nix.
// Und wenn das Delegat zu einem anderen Objekt gehört:
  MyDataset.BeforeInsert := TheOtherObjet.MyBeforeInsertDelegate;
Wir helfen hier im Forum jedem gerne, aber Grundlage hierfür ist der Wille zum Lernen. Und schnippische kleine Zicken können wir hier gar nicht leiden.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
stho

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

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

  Alt 9. Apr 2010, 07:40
Zicke?
das ist ja bööööööse....

nun, grundlagen habe ich gelesen.
und was OOP bedeutet ist mir auch klar...

ich bin bereit zu lesen und zu lernen. sonst würde ich ja keine Fragen hier im Forum stellen...
Meine "Hausaufgaben" soll ja auch keiner von euch machen

und ja, ich rege mich auf wenn man mir das so sagt. -.-
Ich habe Grundlagen gelernt und mitlerweile 2 Delphi-bücher durch geackert... das ich dabei nicht auf das angesprochene gestoßen bin kann an mehreren punkten liegen:
- Ich habs einfach überlesen oder vergessen (überlesen ist aber warscheinlicher)
- das buch war schwer verständlich
- da es sich um ein anfänger-buch gehandelt hat war das vielleicht nicht mit drinne?

nun auch egal, es hat geklappt und das ich noch einiges lernen muss weiß ich auch so...
Dafür macht man ja eine ausbildung...
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 4     123 4      


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 01:11 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