AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein WM_COPYDATA zwischen Delphi- und Freepascalprogramm
Thema durchsuchen
Ansicht
Themen-Optionen

WM_COPYDATA zwischen Delphi- und Freepascalprogramm

Ein Thema von delphifan2004 · begonnen am 12. Feb 2010 · letzter Beitrag vom 13. Feb 2010
Antwort Antwort
delphifan2004

Registriert seit: 26. Nov 2004
Ort: Dresden
279 Beiträge
 
Delphi 10.3 Rio
 
#1

Re: WM_COPYDATA zwischen Delphi- und Freepascalprogramm

  Alt 13. Feb 2010, 09:46
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?
  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 13:35 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