Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Message problem (https://www.delphipraxis.net/115536-message-problem.html)

EWeiss 13. Jun 2008 15:23


Message problem
 
warum komme ich nicht in diese Message ?
LBUTTONDOWN !

Delphi-Quellcode:
function VisualProc(WndHandle : HWND;
                    Msg : DWORD; wParam, lParam : Longint): longInt; stdcall;
var
  ps : PAINTSTRUCT;

begin

    if Msg = WM_ERASEBKGND then
      begin
        Result := 1;
        exit;
      end else
      if Msg = WM_MOUSEMOVE then
      begin
        if (Msg = WM_LBUTTONDOWN) then
          if (GetFocus <> WndHandle) then
            SetFocus(WndHandle);

        BassBoxInfo^.Msg   := BBP_MOUSE;
        BassBoxInfo^.WinMsg := Msg ;
        BassBoxInfo^.wParam := wParam;
        BassBoxInfo^.lParam := lParam;

        BbpPluginFunc(BassBoxInfo^);
      end else

      if Msg = WM_PAINT then
      begin
        BeginPaint(WndHandle, ps);
        EndPaint(WndHandle, ps);
        Result := 0;
        Exit;
      end;
    result := DefWindowProc(WndHandle, Msg, wParam, lParam);

end;
hinter WM_LBUTTONDOWN komme ich bei WM_MOUSEMOVE hinein
Fokus ist auch vorhanden.

gruss Emil

DeddyH 13. Jun 2008 15:25

Re: Message problem
 
Kann eine Message denn gleichzeitig WM_MOUSEMOVE und WM_LBUTTONDOWN sein?

toms 13. Jun 2008 15:25

Re: Message problem
 
Delphi-Quellcode:
      if Msg = WM_MOUSEMOVE then
      begin
        if (Msg = WM_LBUTTONDOWN) then

Msg kann doch nicht beides sein!?!

Dunkel 13. Jun 2008 15:26

Re: Message problem
 
Msg kann nicht gleichzeitig WM_MOUSEMOVE únd WM_LBUTTONDOWN sein, was bei Deiner momentanen Abfrage aber der Fall sein müsste.

1234588 13. Jun 2008 15:31

Re: Message problem
 
warum gestaltest du das ganze nicht einfach mit einem case block anstatt if..then..else if?

EWeiss 13. Jun 2008 15:33

Re: Message problem
 
Zitat:

Zitat von Dunkel
Msg kann nicht gleichzeitig WM_MOUSEMOVE únd WM_LBUTTONDOWN sein, was bei Deiner momentanen Abfrage aber der Fall sein müsste.

hmmm wo hat mich da das Pferd getreten .. richtig
danke ;)

habs geändert
Delphi-Quellcode:
function VisualProc(WndHandle : HWND;
                    Msg : DWORD; wParam, lParam : Longint): longInt; stdcall;
var
  ps : PAINTSTRUCT;

begin

    if Msg = WM_ERASEBKGND then
      begin
        Result := 1;
        exit;
      end else
      if Msg = WM_MOUSEMOVE then
      begin

        BassBoxInfo^.Msg   := BBP_MOUSE;
        BassBoxInfo^.WinMsg := Msg ;
        BassBoxInfo^.wParam := wParam;
        BassBoxInfo^.lParam := lParam;

        BbpPluginFunc(BassBoxInfo^);
      end else
      if (Msg = WM_LBUTTONDOWN) then
      begin
        if (GetFocus <> WndHandle) then
          SetFocus(WndHandle);

        BassBoxInfo^.WinMsg := Msg ;
        BassBoxInfo^.wParam := wParam;
        BassBoxInfo^.lParam := lParam;

        BbpPluginFunc(BassBoxInfo^);
      end;
      if Msg = WM_PAINT then
      begin
        BeginPaint(WndHandle, ps);
        EndPaint(WndHandle, ps);
        Result := 0;
        Exit;
      end;
    result := DefWindowProc(WndHandle, Msg, wParam, lParam);

end;
gruss Emil

EWeiss 13. Jun 2008 15:35

Re: Message problem
 
Zitat:

Zitat von 1234588
warum gestaltest du das ganze nicht einfach mit einem case block anstatt if..then..else if?

Ist Ansichtssache hat keinerlei auswirkung auf die ausgeführte aktion
beides das gleiche.

gruss Emil

DeddyH 13. Jun 2008 15:38

Re: Message problem
 
Nicht ganz, da case nur einmal prüfen muss und somit performanter ist.

1234588 13. Jun 2008 15:39

Re: Message problem
 
und imho sollte man nur verschachteln wenn noetig

EWeiss 13. Jun 2008 15:40

Re: Message problem
 
Zitat:

Zitat von DeddyH
Nicht ganz, da case nur einmal prüfen muss und somit performanter ist.

Kann es ändern aber was macht das aus ? in micro sekunden ?

gruss Emil

DeddyH 13. Jun 2008 15:41

Re: Message problem
 
Niemand will Dir vorschreiben, was Du tun sollst, das waren doch nur gutgemeinte Hinweise.

EWeiss 13. Jun 2008 15:54

Re: Message problem
 
Zitat:

Zitat von DeddyH
Niemand will Dir vorschreiben, was Du tun sollst, das waren doch nur gutgemeinte Hinweise.

Nicht in den falschen Hals bekommen.
Es ist doch berechtig zu fragen welchen unterschied das macht bsp.. in micro sekunden.
Wenn man etwas ändert und es keine große auswirkungen hat
wo liegt dann der sinn, wenn man es dann ändert ?

gruss Emil

turboPASCAL 13. Jun 2008 16:04

Re: Message problem
 
Ich würde es Übersichtlicher nennen, die Schreibfaulheit kommt dann auch mehr nicht zu kurtz mit "case". ;)

EWeiss 13. Jun 2008 16:17

Re: Message problem
 
Zitat:

Zitat von turboPASCAL
Ich würde es Übersichtlicher nennen, die Schreibfaulheit kommt dann auch mehr nicht zu kurtz mit "case". ;)

Das kann ich aktzeptiern ;)
man sieht schneller wo der anfang und das ende ist.

gruss Emil

PS: Danke an alle für die Information

EWeiss 13. Jun 2008 18:25

Re: Message problem
 
Mein anderes problem ist nun folgendes

Delphi-Quellcode:
function VisualProc(WndHandle : HWND;
                    Msg : DWORD; wParam, lParam : Longint): longInt;

begin

    Case Msg of
      WM_MOUSEMOVE:
      begin

        BassBoxInfo^.Msg   := BBP_MOUSE;
        BassBoxInfo^.WinMsg := Msg ;
        BassBoxInfo^.wParam := wParam;
        BassBoxInfo^.lParam := lParam;

        BbpPluginFunc(BassBoxInfo^);
      end;
      WM_LBUTTONDOWN:
      begin
        if (GetFocus <> WndHandle) then
          SetFocus(WndHandle);

        BassBoxInfo^.Msg   := BBP_MOUSE;
        BassBoxInfo^.WinMsg := Msg ;
        BassBoxInfo^.wParam := wParam;
        BassBoxInfo^.lParam := lParam;

        BbpPluginFunc(BassBoxInfo^);
      end;
      WM_LBUTTONUP:
      begin
        BassBoxInfo^.Msg   := BBP_MOUSE;
        BassBoxInfo^.WinMsg := Msg ;
        BassBoxInfo^.wParam := wParam;
        BassBoxInfo^.lParam := lParam;

        BbpPluginFunc(BassBoxInfo^);
      end;
      WM_LBUTTONDBLCLK:
      begin
        //
      end;
    end;
    result := DefWindowProc(WndHandle, Msg, wParam, lParam);

end;
Dadurch das ich nun das Handle des Panels aus der Exe an die Winproc übergeben habe
geht in der EXE das doppelklick event des Panels nicht mehr da dieses nun in die Winproc umgeleitet wird
Wie kann ich nun hier "WM_LBUTTONDBLCLK:" eine Function einbauen so dass mein Panel
in der Exe trotzdem noch erkennt das ein doppelklick ausgeführt wurde?

Ich benötige das um in den FullScreen starten zu können.
das geht nun leider nicht mehr.

gruss Emil


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:21 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