Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Zusammenhang TWMDeviceChange und TMessage (https://www.delphipraxis.net/28289-zusammenhang-twmdevicechange-und-tmessage.html)

sieppl 22. Aug 2004 20:47


Zusammenhang TWMDeviceChange und TMessage
 
Hallo,

Delphi-Quellcode:
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);
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..
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;

Robert Marquardt 23. Aug 2004 05:24

Re: Zusammenhang TWMDeviceChange und TMessage
 
Warum gehst du bis zur WndProc?
Besorg dir meine HID Komponente von http://www.soft-gems.net/Controls.php
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.

sieppl 23. Aug 2004 07:36

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:
PassMessage: TWMDeviceChange;
...
PassMessage.Msg := uMsg;
PassMessage.Event := wp;
PassMessage.dwData := @lp;
PassMessage.Result := 0;
CheckWMDeviceChange(PassMessage);
Beim Zuweisen ist der Compiler glücklich, aber beim Prozeduraufruf stimmem, die formalen und tatsächlichen nicht überein. Obwohl die Records eigentlich identisch sind.
Wo wird denn das umtypen von Delphi gemacht, wenn ich eine Prozedur habe:

Delphi-Quellcode:
procedure WMDEVICECHANGE(var Msg: TWMDeviceChange);message WM_DEVICECHANGE;
//anstatt
procedure WMDEVICECHANGE(var Msg: TMessage);message WM_DEVICECHANGE;
und wo ist WndProc überladen? Ich finde im Netz Beipspiele mit folgenden 2 Varianten:
Delphi-Quellcode:
function WndProc(wnd: HWND; uMsg: UINT; wp: WPARAM; lp: LPARAM): LRESULT; stdcall;
//oder
function WndProc(var Msg: TMessage): LRESULT; stdcall;
funktioniet beides. Aber warum? Ich wäre echt glücklich, wenn ich hier mal den Bogen spannen kann.


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:42 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz