AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Wie kann ein Zeiger auf eine Funktion als Paramater übergeben werden?
Thema durchsuchen
Ansicht
Themen-Optionen

Wie kann ein Zeiger auf eine Funktion als Paramater übergeben werden?

Offene Frage von "FriendOfDelphi"
Ein Thema von FriendOfDelphi · begonnen am 26. Nov 2010 · letzter Beitrag vom 9. Dez 2010
Antwort Antwort
Benutzerbild von himitsu
himitsu

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

AW: Wie kann ein Zeiger auf eine Funktion als Paramater übergeben werden?

  Alt 2. Dez 2010, 18:08
Delphi-Quellcode:
protected
  procedure WndProc(var Message: TMessage); override;

if Message.Msg = WM_APP + x then
Notfalls kann man auch über MSDN-Library durchsuchenRegisterWindowMessage gehn.

Siehe das Bild in "Understanding the message-handling system"
WndProc ist die erste Anlaufstelle, wo alles durchkommt und (vermutlich) danach werden die entsprechenden Dispatch-Methoden ala procedure NAME(var Message: TWM_TYPE); message WM_MESSAGE; abgearbeitet.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu ( 2. Dez 2010 um 18:15 Uhr)
  Mit Zitat antworten Zitat
FriendOfDelphi

Registriert seit: 21. Mai 2010
163 Beiträge
 
Delphi 5 Professional
 
#2

AW: Wie kann ein Zeiger auf eine Funktion als Paramater übergeben werden?

  Alt 2. Dez 2010, 19:02
Delphi-Quellcode:
protected
  procedure WndProc(var Message: TMessage); override;

if Message.Msg = WM_APP + x then
Notfalls kann man auch über MSDN-Library durchsuchenRegisterWindowMessage gehn.

Siehe das Bild in "Understanding the message-handling system"
WndProc ist die erste Anlaufstelle, wo alles durchkommt und (vermutlich) danach werden die entsprechenden Dispatch-Methoden ala procedure NAME(var Message: TWM_TYPE); message WM_MESSAGE; abgearbeitet.
Besteht nicht die Möglichkeit an der Stelle procedure NAME(var Message: TWM_TYPE); message WM_MESSAGE; den Wert von "WM_MESSAGE" von außerhalb der Klasse als Parameter zu übergeben?
Herzlichen Gruß
FriendOfDelphi
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Wie kann ein Zeiger auf eine Funktion als Paramater übergeben werden?

  Alt 2. Dez 2010, 20:19
Nein.

Dieses ist nunmal eine unveränderliche Konstante, welcher an dieser Stelle wärend des Compilierens genutzt wird.
Zur Laufzeit läßt sich dieses dann eben nicht mehr ändern.

Aber genau dafür kann man eben das WndProc (WindowProcedur) nutzen, wo alles vorbeikommt.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
FriendOfDelphi

Registriert seit: 21. Mai 2010
163 Beiträge
 
Delphi 5 Professional
 
#4

AW: Wie kann ein Zeiger auf eine Funktion als Paramater übergeben werden?

  Alt 3. Dez 2010, 12:43
Nein.

Dieses ist nunmal eine unveränderliche Konstante, welcher an dieser Stelle wärend des Compilierens genutzt wird.
Zur Laufzeit läßt sich dieses dann eben nicht mehr ändern.

Aber genau dafür kann man eben das WndProc (WindowProcedur) nutzen, wo alles vorbeikommt.
Ich kann Dir noch nicht so ganz folgen:
Ist das nicht eher ein Reagieren auf eine schon vorhandene Windows-Message-Nr.?
Ich möchte doch vielmehr jedem Objekt bei der Erzeugung/Instanziierung eine eigene Windows-Message-Nr. mitgeben, auf die es dann reagiert.
Herzlichen Gruß
FriendOfDelphi
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Wie kann ein Zeiger auf eine Funktion als Paramater übergeben werden?

  Alt 3. Dez 2010, 13:08
Du gibst z.B. deinem Constructor die Message-ID mit, speicherst sie im Objekt und vergleichst dann damit via IF in WndProc und schon hat jedes Objekt seine eigene Nummer.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
FriendOfDelphi

Registriert seit: 21. Mai 2010
163 Beiträge
 
Delphi 5 Professional
 
#6

AW: Wie kann ein Zeiger auf eine Funktion als Paramater übergeben werden?

  Alt 3. Dez 2010, 14:46
Du gibst z.B. deinem Constructor die Message-ID mit, speicherst sie im Objekt und vergleichst dann damit via IF in WndProc und schon hat jedes Objekt seine eigene Nummer.
Da ich das Senden der Message auch innerhalb des Objektes abhandle
Delphi-Quellcode:
procedure AdsRouterCallback( nEvent:Longint ); stdcall;
begin
  PostMessage(wndHandle, WM_ADSROUTERNOTIFICATION, nEvent, 0);
end;
müßte ich eine feste Liste für die verschiedenen Windows-Messages fest im Objekt integrieren und wäre dann darauf festgelegt.
Das wollte ich vermeiden.
Herzlichen Gruß
FriendOfDelphi
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Wie kann ein Zeiger auf eine Funktion als Paramater übergeben werden?

  Alt 3. Dez 2010, 15:08
Delphi-Quellcode:
TMyObject = class(TComponent)
private
  FMessageID: LongWord;
protected
  procedure WndProc(Message: TMessage); override;
public
  constructor Create(Owner: TComponent; MessageID: LongWord);
  property MessageID: LongWord read FMessageID;
end;

procedure TMyObject.WndProc(Message: TMessage);
begin
  if Message.msg = MessageID then
  begin
    // mach was
  end;
end;

constructor TMyObject.Create(Owner: TComponent; MessageID: LongWord);
begin
  inherited Create(Owner);
  FMessageID := MessageID;
end;


id := WM_APP + 123;
obj := TMyObject.Create(nil, id);

PostMessage(obj.Handle, id, nEvent, 0);
obj.Perform(id, nEvent, 0);
oder irgendwie so
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Antwort Antwort


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 04:24 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