AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi TNotifyEvent - Eigenschaft, Aktion, oder was?

TNotifyEvent - Eigenschaft, Aktion, oder was?

Ein Thema von Tyler · begonnen am 24. Jan 2005 · letzter Beitrag vom 27. Dez 2011
Antwort Antwort
Seite 1 von 2  1 2   
Benutzerbild von Tyler
Tyler

Registriert seit: 19. Jun 2003
Ort: Berlin
241 Beiträge
 
#1

TNotifyEvent - Eigenschaft, Aktion, oder was?

  Alt 24. Jan 2005, 08:22
Hallo!

Ich bin grad dabei einem PopUp-Menü dynamische Einträge zuzufügen, was ja bisher auch ganz gut klappt.
Nun hab ich versucht dem OnClick Ereignis eine Prozedure zuzufügen. Bei anderen dynamischen Komponenten hat das auch immer wunderbar geklappt - ich hab einfach eine Prozedur zugewiesen.

Nun verlangt TMenuItem bei OnClick aber ein TNotifyEvent. Nun hab ich im Forum mal danach gesucht, und bin jetzt noch mehr verwirrt, also vorher.

Da find ich dann diesen Beitrag:
http://www.delphipraxis.net/internal...t=tnotifyevent

bei dem unteren Quellcode von Steve seh ich gar keine Sonne mehr. Er weisst dort zwar ein NotifyEvent zu, aber das entspricht keiner "Aktion" sondern nur einer Eigenschaft

Und auch was die Delphi Hilfe mir hier liefert, trägt nicht gerade zum Verständnis bei:
>> In einer Ereignisbehandlungsroutine für OnClick können Sie die Aktionen implementieren, die
>> ausgeführt werden, wenn der Benutzer den Menüeintrag auswählt.

Ja wie, also ist das DOCH ein Ereigniss?

Wär lieb wenn jemand mir da ein wenig auf die Sprüng helfen könnte. Und vor allem wie ich am Ende meinem dynamischen PopUp-Menü eine Aktion zuweisen kann

danke
tyler
  Mit Zitat antworten Zitat
Benutzerbild von Binärbaum
Binärbaum

Registriert seit: 19. Jan 2005
Ort: Elstra
764 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: TNotifyEvent - Eigenschaft, Aktion, oder was?

  Alt 24. Jan 2005, 08:26
Zitat von Tyler:
Ja wie, also ist das DOCH ein Ereigniss?
Ja, ist es. Alles, was TNotifyEvent oder allgemeiner T....Event heißt, ist auch von Delphi als Ereignis ausgelegt.

MfG
Binärbaum
There are exactly 10 kinds of people: those who understand binary, and those who don't.
---
"Software reift beim Kunden. Bei Hardware ist es anders: Hardware fault beim Kunden." - Rainer G. Spallek
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie
(Moderator)

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#3

Re: TNotifyEvent - Eigenschaft, Aktion, oder was?

  Alt 24. Jan 2005, 08:26
In der Kürze liegt die Würze:
Delphi-Quellcode:
type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
    procedure MyBtnClick(Sender: TObject);
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.MyBtnClick(Sender: TObject);
begin
  ShowMessage('foobar');
end;

procedure TForm1.FormCreate(Sender: TObject);
var
  MyButton: TButton;
begin
  MyButton := TButton.Create(Form1);
  MyButton.Parent := Form1;
  MyButton.OnClick := MyBtnClick;
end;
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Steve
Steve

Registriert seit: 2. Mär 2004
Ort: Würzburg
730 Beiträge
 
Delphi 2006 Personal
 
#4

Re: TNotifyEvent - Eigenschaft, Aktion, oder was?

  Alt 24. Jan 2005, 08:40
Hi,

man könnte sagen, dass Folgendes hinter einem Event steckt:
In Delphi ist ein Event ist eigentlich eine Methode, die beim Eintreten des eigentlichen Ereignisses aufgerufen wird. (z.B. Windows-Botschaften). Dies ist aber bereits in der VCL gekapselt.
FMyEvent : TNotifyEvent; Der "Delphi-Event" wird ausgelöst, indem beim Eintreten eines Ereignisses folgender Code ausgeführt wird:
Delphi-Quellcode:
// z.B. Bei Empfang einer Message:
IF Assigned(FMyEvent) THEN FMyEvent(Parameter);
Das heißt, wenn der Ereignisbehandlung eine Routine zugewiesen ist, wird diese ausgeführt.

Somit stellt TNotifyEvent eine Ereignisbehandlung dar. Dahinter steckt eine Methode, die als Eigenschaft deklariert wird. Es geht also um die Behandlung eines Ereignisses mit einer Methode. Man teilt dem Objekt mit, welche Methode aufgerufen werden soll, wenn z.B. OnClick ausgelöst wird / eintritt...


Bin im Erklären nicht so der Meister, sorry

Gruß
Stephan
Stephan B.
Wer andern eine Grube gräbt ist Bauarbeiter!
Wer im Glashaus sitzt, sollte sich lieber im Dunkeln ausziehen!
Außerdem dieser Satz kein Verb...
  Mit Zitat antworten Zitat
Benutzerbild von Tyler
Tyler

Registriert seit: 19. Jun 2003
Ort: Berlin
241 Beiträge
 
#5

Re: TNotifyEvent - Eigenschaft, Aktion, oder was?

  Alt 24. Jan 2005, 09:58
Danke euch für die schnellen Antworten!

Schlussendlich hat es bei Lucky'S Beitrag "Klick" gemacht.

Der Unterschied (so hab ich mir das jetzt erklärt) liegt einfach nur darin, dass ich normalerweise eine Procedure so aufrufe "myProc(Self);" - bei der Zuweisung eines Ereignisses geschieht das aber ohne das Anhängsel, nämlich so "OnClick := myProc".

Und die fachliche Begründung kam ja dann von Sven. Thx


tyler
  Mit Zitat antworten Zitat
Benutzerbild von freak4fun
freak4fun

Registriert seit: 22. Sep 2004
Ort: Hannover
1.807 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#6

Re: TNotifyEvent - Eigenschaft, Aktion, oder was?

  Alt 24. Jan 2005, 11:04
Die Prozedur muss aber einen Sender haben, oder?

MfG
freak
Christian
IT: Schließen Sie bitte das Fenster. User: Die Tür auch?
i++; // zaehler i um 1 erhoehen
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie
(Moderator)

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#7

Re: TNotifyEvent - Eigenschaft, Aktion, oder was?

  Alt 24. Jan 2005, 11:08
Siehe mein Beipiel.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
TStringlist

Registriert seit: 1. Dez 2003
360 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: TNotifyEvent - Eigenschaft, Aktion, oder was?

  Alt 24. Jan 2005, 16:56
Grundsätzlich kann man auch sagen, dass diese ganzen On...-Properties (ala OnClick, OnCreate, OnShow, OnClose usw.) alles nur procedurale Variablen sind. Es sind also alles Pointer-Variablen, die auf jeweils einen ganz bestimmten Typ von Procedure zeigen oder Nil sind. Und logischerweise gibt man diesen proceduralen Variablen dann natürlich auch den gleichen Typ, den die dadurch gepointeten & aufrufbaren Procedures selbst haben. (...Wobei der "Typ einer Procedure" sich in erster Linie nur in der Machart seiner Parameterliste ausdrückt.)


Wenn OnClick nun von diesem Typ TNotifyEvent ist, dann muss man also wissen, wie der Procedure-Kopf für diese Sorte von Procedure aussieht. Nämlich so:

type TNotifyEvent = procedure (Sender: TObject) of object;

Was also speziell heißt, dass deine Procedure, die du jetzt mittels OnClick aufrufen möchtest, auch eine exakt ebenso geartete Parameterliste haben muss ('of object' gehört da natürlich nicht mehr dazu).


Solltest du also irgendwann mal eine On...-Property von einem anderen Typ als TNotifyEvent laden wollen, z.B. die OnMouseDown-Property vom Typ TMouseEvent, dann heißt das eben jetzt auch wieder nur: Die Parameterliste der fraglichen Procedure muss nun genauso auszusehen, wie das jetzt eben durchs TMouseEvent definiert wird. ...Und sowas steht ja immer in der OH.
MfG (& Thx ggf.)
  Mit Zitat antworten Zitat
jensw_2000
(Gast)

n/a Beiträge
 
#9

Re: TNotifyEvent - Eigenschaft, Aktion, oder was?

  Alt 24. Jul 2006, 08:43
Die parameterlosen NotifyEvents (z.B. OnStatus) funktionieren alle gut.

Jetzt möchte ich meiner Klasse ein NotifyEvent mit zusätzlichen Parametern hinzufügen (OnLogMessage).
Wenn ich versuche Parameter zu dem NotiifyEvent hinzuzufügen, kann ich das Projekt nicht mehr compilieren.
Fehler:
Code:
Eigenschaft 'OnLogMessage' existiert nicht in der Basisklasse.
Natürlich gibt es kein Event "OnLogMessage" in der Basisklasse TThread. Es gibt aber auch kein Event namens "OnStatus". Warum wird "OnStatus" nicht angemeckert und was muss ich machen, um "OnLogMessage(<Params>)" richtig zu deklarieren ?

Delphi-Quellcode:
Type
  TWorkerThread = class(TThread)
    private
      ...
      ...
      //-- Notify Events
      ...
      FOnStatus : TNotifyEvent;
      FOnLogMessage : TNotifyEvent;

      public
      // -- Notify Events
      ...
      property OnStatus : TNotifyEvent READ FOnStatus WRITE FOnStatus;
      property OnLogMessage(
                             Sender:TObject;
                             LogMessageType: TLogMessageType;
                             LogMessageLevel: TLogMessageLevel;
                             LogMessageText: String
                           ) : TNotifyEvent READ FOnLogMessage WRITE FOnLogMessage;
      protected
      ...
end;

Schöne Grüße,
Jens
  Mit Zitat antworten Zitat
xaromz

Registriert seit: 18. Mär 2005
1.682 Beiträge
 
Delphi 2006 Enterprise
 
#10

Re: TNotifyEvent - Eigenschaft, Aktion, oder was?

  Alt 24. Jul 2006, 10:07
Hallo,
Zitat von jensw_2000:
Die parameterlosen NotifyEvents (z.B. OnStatus) funktionieren alle gut.

Jetzt möchte ich meiner Klasse ein NotifyEvent mit zusätzlichen Parametern hinzufügen (OnLogMessage).
So, wie Du das machst, wird es nicht funktionieren.
Du musst einen neuen Typ deklarieren:
Delphi-Quellcode:
type
  TLogEvent = procedure(Sender: TObject; LogMessageType: TLogMessageType;
    LogMessageLevel: TLogMessageLevel; LogMessageText: String) of object;

  TWorkerThread = class(TThread)
    private
      ...
      ...
      //-- Notify Events
      ...
      FOnStatus : TNotifyEvent;
      FOnLogMessage : TLogEvent;

      public
      // -- Notify Events
      ...
      property OnStatus : TNotifyEvent READ FOnStatus WRITE FOnStatus;
      property OnLogMessage: TLogEvent READ FOnLogMessage WRITE FOnLogMessage;
      protected
      ...
end;
Gruß
xaromz
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 07:10 Uhr.
Powered by vBulletin® Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf