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?

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 DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.662 Beiträge
 
Delphi 12 Athens
 
#1

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

  Alt 1. Dez 2010, 16:31
Wann die Methode aufgerufen wird, bestimmst Du doch selbst in Deiner Klasse. Nach Deiner eigenen Aussage wäre das dann die Behandlung einer bestimmten Windows-Message, so dass "MachWas" dann ein Message-Handler sein müsste.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  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, 17:46
Wann die Methode aufgerufen wird, bestimmst Du doch selbst in Deiner Klasse. Nach Deiner eigenen Aussage wäre das dann die Behandlung einer bestimmten Windows-Message, so dass "MachWas" dann ein Message-Handler sein müsste.
Ja, stimmt.
Ich mache das mit einer eigenen Message-Handling-Methode.
Das ist hier ganz gut erklärt:http://www.podgoretsky.pri.ee/ftp/Do.../messages.html.

Das Ganze funktioniert für ein Objekt auch tadellos.
Wenn ich ein zweites, oder weitere Objekte erstelle (instanziiere), wird nur die Windows-Message für das zuletzt erstellte Objekt richtig verarbeitet.
Ich habe auch schon eine Vermutung worin das Problem besteht, aber nicht, wie ich es beseitigen kann.
Das Problem liegt wahrscheinlich in der Deklaration des Windows-Message-Nummer:
Delphi-Quellcode:
[...schnipp...]
const
  WM = WM_APP + 400;
[...schnipp...]
Jedes Objekt erhält in der Klasse dieselbe Windows-Message-Nummer.
Ich müßte die als Parameter mit übergeben.
In etwa so:
Delphi-Quellcode:
[...schnipp...]
const
  WM_variabel = WM_APP + iWMNr; //iWMNr soll der übergebene Parameter sein.
[...schnipp...]
Da dies aber eine Konstante sein muss und diese ganz am Anfang definiert wird, meckert der Compiler natürlich, dass er die Variable nicht kennt.
Gibt es dafür eine andere Lösungsmöglichkeit?
Herzlichen Gruß
FriendOfDelphi
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

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

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
 
#4

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
Online

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

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
 
#6

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
Online

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

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
Antwort Antwort

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 16:23 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