Hallo Astat!
Danke für den Tipp. So kann natürlich meine erstere Version nicht funktionieren.
Aber ich muss dennoch wieder nachfragen. Ich erhalte nämlich die folgende Fehlermeldung vom FPC Compiler:
server.pas(54,35) Error: Incompatible type for arg no. 1: Got "<procedure variable type of function(LongWord, LongWord, LongInt, LongInt):LongInt;Register>", expected "<procedure variable type of function(LongWord, LongWord, LongInt, LongInt):LongInt;S
Ich habe deshalb den Typ von WProc in den unten stehenden geändert:
Delphi-Quellcode:
var WProc:
function (H: hWnd; msg: LongWord; w, l: LongInt): Longint;
stdcall;
function NewWndProc(
Handle: hWnd; Msg: LongWord; wParam, lParam: Longint): Longint;
stdcall;
begin
if Msg = WM_COPYDATA
then begin
showmessage('
Treffer');
end else
Result := CallWindowProc(WProc,
Handle, Msg, wParam, lParam);
end;
Leider kenne ich mich mit dem Windows
API nicht so gut aus.
Wie baue ich die NewWndProc nun in meine Formular ein?
Wenn ich das hier in FormCreate() schreibe:
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
WProc := Pointer(SetWindowLong(
handle, gwl_WndProc, Integer(@NewWndProc)));
end;
//Deshalb habe ich diese Zeile so hier geändert:
procedure TForm1.FormCreate(Sender: TObject);
begin
WProc := SetWindowLong(
handle, gwl_WndProc, Integer(@NewWndProc));
end;
//da ich ja die Variable WProc in den richtigen Funktionstypen geändert habe
erhalte ich diese Fehlermeldung vom FPC Compiler:
server.pas(60,12) Error: Incompatible types: got "LongInt" expected "<procedure variable type of function(LongWord, LongWord, LongInt, LongInt):LongInt;StdCall>"
WProc ist außerdem eine Nutzerdefinierte Variable.
Nun muss ja aber irgendwo in den Tiefen des Windows
API eine Zuweisung der neuen WindowProc stehen.
Welchen Zeiger muss ich da an Stelle von WProc verwenden?
Oder muss ich in der schon definierten WMCopyData() Methode WProc aufrufen?