![]() |
Zusammenhang TWMDeviceChange und TMessage
Hallo,
Delphi-Quellcode:
Wie man sieht soll die bei WM_DEVICECHANGE die entsprechene Prozedur aufgerufen werden, diese befindet sich in einer anderen unit, wo sie bleiben muss. Wie übersetze ich die Einzelteile der TMessage in eine TWMDeviceChange ?? Wenn ich die Felder 1:1 kopieren bekomme ich logischerweise eine Integer/Pointer Beschwerde..
function WndProc(wnd: HWND; uMsg: UINT; wp: WPARAM; lp: LPARAM): LRESULT; stdcall;
begin Result := 0; case uMsg of WM_CREATE: begin NID.Wnd := wnd; Shell_NotifyIcon(NIM_ADD,@NID); end; WM_DEVICECHANGE: CheckWMDeviceChange(?????); ... procedure CheckWMDeviceChange(var Msg: TWMDeviceChange); Danke! zur Erinnerung:
Delphi-Quellcode:
type
TWMDeviceChange = record Msg: Cardinal; Event: UINT; dwData: Pointer; Result: LongInt; end; type { Generic window message record } PMessage = ^TMessage; TMessage = packed record Msg: Cardinal; case Integer of 0: ( WParam: Longint; LParam: Longint; Result: Longint); 1: ( WParamLo: Word; WParamHi: Word; LParamLo: Word; LParamHi: Word; ResultLo: Word; ResultHi: Word); end; |
Re: Zusammenhang TWMDeviceChange und TMessage
Warum gehst du bis zur WndProc?
Besorg dir meine HID Komponente von ![]() Dort ist auch DBT.pas dabei. Das ist die Konversion zu WM_DEVICECHANGE. Bei der Zuweisung hier musst du einfach nur umtypen Pointer(lParam). Die Parameter werden zu den unterschiedlichsten Zwecken eingesetzt und Delphi definiert einfach verschiedene angepasste Records, die aber immer die gleiche Groessehaben. |
Re: Zusammenhang TWMDeviceChange und TMessage
Sorry, aber das hilft mir garnicht weiter. Die DBT.pas benutze ich sowieso schon. Jetzt habe ich auch folgendes probiert:
Delphi-Quellcode:
Beim Zuweisen ist der Compiler glücklich, aber beim Prozeduraufruf stimmem, die formalen und tatsächlichen nicht überein. Obwohl die Records eigentlich identisch sind.
PassMessage: TWMDeviceChange;
... PassMessage.Msg := uMsg; PassMessage.Event := wp; PassMessage.dwData := @lp; PassMessage.Result := 0; CheckWMDeviceChange(PassMessage); Wo wird denn das umtypen von Delphi gemacht, wenn ich eine Prozedur habe:
Delphi-Quellcode:
und wo ist WndProc überladen? Ich finde im Netz Beipspiele mit folgenden 2 Varianten:
procedure WMDEVICECHANGE(var Msg: TWMDeviceChange);message WM_DEVICECHANGE;
//anstatt procedure WMDEVICECHANGE(var Msg: TMessage);message WM_DEVICECHANGE;
Delphi-Quellcode:
funktioniet beides. Aber warum? Ich wäre echt glücklich, wenn ich hier mal den Bogen spannen kann.
function WndProc(wnd: HWND; uMsg: UINT; wp: WPARAM; lp: LPARAM): LRESULT; stdcall;
//oder function WndProc(var Msg: TMessage): LRESULT; stdcall; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:29 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