AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Eigene Komponente - WM_DEVICECHANGE wird nicht mitbekommen
Thema durchsuchen
Ansicht
Themen-Optionen

Eigene Komponente - WM_DEVICECHANGE wird nicht mitbekommen

Ein Thema von Tormentor32 · begonnen am 30. Jun 2008 · letzter Beitrag vom 30. Jun 2008
 
Benutzerbild von Tormentor32
Tormentor32

Registriert seit: 27. Okt 2005
Ort: Düsseldorf
369 Beiträge
 
Delphi XE5 Professional
 
#1

Eigene Komponente - WM_DEVICECHANGE wird nicht mitbekommen

  Alt 30. Jun 2008, 15:03
Hallo erstmal

Ich bin dabei eine Komponente zu schreiben, die zwei Events beinhaltet, nämlichOnUSBStickPluggedIn undOnUSBStickPluggedOut Zuerst habe ich ein Testprogramm geschrieben welches sich der Methode bedient, die auch hier im Forum zu finden ist. Das klappt auch wunderbar! Nur wenn ich das auf eine Komponente übertrage, dann wird nicht in die Prozedur reingesprungen. Woran kann das liegen? Gibts es da noch etwas das man beachten muss wenn man Windows Messages mit eigenen Kompos benutzt?

Hier mal der (abgespeckte) Code meiner Komponente:
Delphi-Quellcode:
//...
type
  TUSBStickEvent = procedure(const ADrive: Char) of object;

  TUSBHandler = class(TComponent)
  private
//...
    FOnPluggedIn: TUSBStickEvent;
    FOnPluggedOut: TUSBStickEvent;
    procedure WMDeviceChange(var Msg: TMessage); message WM_DEVICECHANGE;
  published
    property OnPluggedIn: TUSBStickEvent read FOnPluggedIn write FOnPluggedIn;
    property OnPluggedOut: TUSBStickEvent read FOnPluggedOut write FOnPluggedOut;
//...
  end;

  

procedure Register;

implementation

{ TUSBHandler }
//...
constructor TUSBHandler.Create(AOwner: TComponent);
begin
  inherited;
//...
end;
//...
procedure TUSBHandler.WMDeviceChange(var Msg: TMessage);
type
  PDevBroadcastHdr = ^TDevBroadcastHdr;

  TDevBroadcastHdr = packed record
    dbcd_size,
    dbcd_devicetype,
    dbcd_reserved: DWORD;
  end;

  PDevBroadcastVolume = ^TDevBroadcastVolume;

  TDevBroadcastVolume = packed record
    dbcv_size,
    dbcv_devicetype,
    dbcv_reserved,
    dbcv_unitmask: DWORD;
    dbcv_flags: Word;
  end;

var ChangedDrive: Char;
begin
//hier kommt er nie an!
  case Msg.wParam of
  $8000:
    if PDevBroadcastHdr(Msg.lParam)^.dbcd_devicetype = $0002 then
      begin
        //Vorher Laufwerkbuchstaben ermitteln...
        if Assigned(FOnPluggedIn)
          then
            OnPluggedIn(ChangedDrive);
      end;
  $8004:
    if PDevBroadcastHdr(Msg.lParam)^.dbcd_devicetype = $0002 then
      begin
        //Vorher Laufwerkbuchstaben ermitteln...
        if Assigned(FOnPluggedIn)
          then
            OnPluggedIn(ChangedDrive);
      end;
  end;
end;

procedure Register;
begin
  RegisterComponents('USB Tools', [TUSBHandler]);
end;

end.
Vielleicht ist es ja nur ein blöder Denkfehler aber ich sitz jetzt seit Stunden da dran

Wenn jemand eine Idee hat, nur zu!

Vielen Dank,

Gruß Ritsch!
Richard Mahr
  Mit Zitat antworten Zitat
 


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 10:18 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