AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Frage zu einer Type-Deklaration in TThread-Unit
Thema durchsuchen
Ansicht
Themen-Optionen

Frage zu einer Type-Deklaration in TThread-Unit

Ein Thema von Mackhack · begonnen am 6. Sep 2006 · letzter Beitrag vom 6. Sep 2006
 
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#2

Re: Frage zu einer Type-Deklaration in TThread-Unit

  Alt 6. Sep 2006, 06:45
Hi,

es handelt sich um einen Methodenzeiger. Das heißt du kannst TDirChangeEvent als Variable deklarieren, der du eine Methode gleicher Signatur zu weisen kannst.
Ein typisches Beispiel wie man damit arbeitet kennst du sicherlich, denn die Ereignisse in Delphi basieren auf genau diesen Methodenzeigern. Allerdings legt hier der OI (wenn du es nicht per Hand machst) automatisch die entsprechende Methode an und weißt die zu.
Es gibt auch noch Funktionszeiger (ohne of Object). Einem Methodenzeiger musst du halt eine Methode (Prozedur oder Funktion eines Objekts) einem Funktionszeiger eine Funktion (die direkt in einer Unit liegt, ohne Klasse) zuweisen.

Soviel zur Theorie, es folgt die Praxis:

Delphi-Quellcode:
Type
  TDirChangeEvent = Procedure(Sender: TObject; Const aChangedFile : String) Of Object;

  TDeineThreadKlasse = class(TObject)
    public
      dirChangeEvent = TDirChangeEvent; // natürlich schöner mit Properties!
  end;

  TDeineEreignisbehandlungsKlasse = class(TObject)
    public
      procedure OnDirChange(Sender : TObject; const aChangedFile : String);
  end;
So, jetzt siehst du hier, dass TDeineThreadKlasse eine Variable von diesem Typ hat. Das heißt, dirChageEvent kann auf eine solche Methode zeigen. TDeineEreignisbehandlungsklasse besitzt eine Mehtode mit passender Signatur, du kannst diese jetzt direkt zuweisen:
Delphi-Quellcode:
var thread : TDeineThreadKlasse;
    event : TDeineEreignisbehandlungsKlasse;
begin
  // anlegen der instanzen
  ...
  thread.dirChangeEvent := event.OnDirChange;
end;
Tritt jetzt ein Ereignis in TDeineThreadKlasse auf, so schaut diese Klasse ob dirChangeEvent zugewiesen wurde (Adresse <> nil). Ist dies der Fall, wird die Methode (auf die diese Variable zeigt) aufgerufen
Delphi-Quellcode:
procedure TDeineThreadKlasse.DirChanged;
begin
  if assigned(self.DirChangeEvent) then
  begin
     self.DirChangeEvent(self, <Geändertes File>);
  end;
end;
Das selbe geschieht zum Beispiel auch, wenn du auf andere Events in Delphi reagieren möchtest (OnMouseMove, OnMouseDown, OnKeyUp, ...)

Gruß Der Unwissende
  Mit Zitat antworten Zitat
 


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 12:16 Uhr.
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