Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Frage zu WM_LBUTTONDOWN und WM_LBUTTONUP (https://www.delphipraxis.net/93213-frage-zu-wm_lbuttondown-und-wm_lbuttonup.html)

.chicken 2. Jun 2007 15:04


Frage zu WM_LBUTTONDOWN und WM_LBUTTONUP
 
Also ich habe folgendes zusammengeschustert:

Delphi-Quellcode:
procedure TMenuButton.WMLButtonDown(var Msg: TMessage);
begin
  MouseDown;
end;
procedure TMenuButton.WMLButtonUp(var Msg: TMessage);
begin
  MouseUp;
end;

procedure TMenuButton.MouseDown;
begin
  if (csDesigning in ComponentState) = False then
  begin
    Clicked := True;
    Repaint;
  end;
end;
procedure TMenuButton.MouseUp;
begin
  if (csDesigning in ComponentState) = False then
  begin
    Clicked := False;
    Repaint;
  end;
end;
So, aber nun führt das dazu, das in meinem Programm jeder Klick an meinen MenuButton geht. Dh wenn ich zB auf das X der Form klicke, dann wird der Button geklickt!

Wie verhinder ich das, bzw was hab ich falsch gemacht und was muss ich ändern? :)

Edit: Haeh? Nun is das Problem plötzlich weg...dabei hab ich daran eig nix geändert!
Nagut, Problem gelöst wies aussieht, sry ^^
Edit2: Nun gehts plötzlich wieder nichmehr! ?!?! wasn da los nun bin ich verwirrt!

Also tritt irgendwie nur manchmal auf...

Hawkeye219 2. Jun 2007 15:25

Re: Frage zu WM_LBUTTONDOWN und WM_LBUTTONUP
 
Hallo,

du solltest nur die von TControl geerbten Methoden Delphi-Referenz durchsuchenMouseDown und Delphi-Referenz durchsuchenMouseUp überschreiben. Dabei darfst du allerdings den Aufruf der geerbten Methoden nicht vergessen, da ansonsten ein über OnMouseDown/OnMouseUp verbundener Eventhandler abgeklemmt wird.

Delphi-Quellcode:
type
  TMenuButton = class (TCustomPanel)
  [...]
  protected
    procedure MouseDown (Button: TMouseButton; Shift: TShiftState;
      X, Y: Integer); override;
    procedure MouseUp (Button: TMouseButton; Shift: TShiftState;
      X, Y: Integer); override;
  end;

procedure TMenuButton.MouseDown (Button: TMouseButton; Shift: TShiftState;
  X, Y: Integer);
begin
  inherited;
  Clicked := True;
  Invalidate;
end;

procedure TMenuButton.MouseUp (Button: TMouseButton; Shift: TShiftState; X,
  Y: Integer);
begin
  inherited;
  Clicked := False;
  Invalidate;
end;
Gruß Hawkeye

.chicken 2. Jun 2007 15:34

Re: Frage zu WM_LBUTTONDOWN und WM_LBUTTONUP
 
Hehe gut da hätte ich auch drauf kommen können, aber was ist denn generell an meiner Methode schlechter? Und warum funzt sie nich immer? (meistens tut sie das tritt nur selten auf das Problem)

Hawkeye219 2. Jun 2007 15:44

Re: Frage zu WM_LBUTTONDOWN und WM_LBUTTONUP
 
Zitat:

Zitat von .chicken
Hehe gut da hätte ich auch drauf kommen können, aber was ist denn generell an meiner Methode schlechter? Und warum funzt sie nich immer? (meistens tut sie das tritt nur selten auf das Problem)

Durch das Überschreiben der Behandlungsroutinen für WM_LButtonDown und WM_LButtonUp hast du wichtige Überprüfungen und Initialisierungen in TControl lahmgelegt, was zu dem beschriebenen Verhalten führen könnte. MouseDown und MouseUp sind die von Borland vorgesehenen Routinen für Erweiterungen.

Gruß Hawkeye

.chicken 2. Jun 2007 16:01

Re: Frage zu WM_LBUTTONDOWN und WM_LBUTTONUP
 
Aso ok :)

Edit: Da hätt ich fast das Danke vergessen ^^


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