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 Scrollen in einer ComboBox unterbinden (https://www.delphipraxis.net/103195-scrollen-einer-combobox-unterbinden.html)

messie 12. Nov 2007 12:10


Scrollen in einer ComboBox unterbinden
 
Moin,


ein altes Problem, was man auch bei Websites oft sieht: Eine ComboBox hat den Focus, der User will an einer anderen Stelle scrollen und scrollt damit versehentlich die ComboBox.
Kann man das Scrollen unterbinden oder noch besser nur während eines MouseOver zulassen?

Grüße, Messie

Bbommel 12. Nov 2007 12:31

Re: Scrollen in einer ComboBox unterbinden
 
Moin,

ich hab das so gelöst, dass ich im MouseOver-Ereignis der Komponente, von der ich ausgehe, dass der User eigentlich dort scrollen will, ein SetFocus für eben diese Komponente ausühre. Das kannst du natürlich auch schon beim MouseLeave-Ereignis der Kombobox ausführen lassen (von mir jetzt ungetestet).

Unterbindet zwar nicht das Scrollen prinzipiell, sollte aber diesen "Benutzerfehler" abfangen.

Bis denn
Bommel

Lannes 12. Nov 2007 12:50

Re: Scrollen in einer ComboBox unterbinden
 
Hallo,

die Message WM_MOUSEWHEEL abfangen.

Das Beispiel bezieht sich auf ein Memo, funktioniert genauso bei ComboBoxen:
Delphi-Quellcode:
//...
  private
    procedure AppMessage(var Msg: TMsg; var Handled: Boolean);
//...
procedure TForm1.AppMessage(var Msg: TMsg; var Handled: Boolean);
begin
  if Msg.message = WM_MOUSEWHEEL then
    if ActiveControl = Memo1 then
      Msg.message := 0;
  inherited;
end;

 
procedure TForm1.FormCreate(Sender: TObject);
begin
  Application.OnMessage := AppMessage;
end;
noch die Mauskoordinaten berücksichtigen...

Deep-Sea 12. Nov 2007 13:04

Re: Scrollen in einer ComboBox unterbinden
 
Zitat:

Zitat von Lannes
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
  Application.OnMessage := AppMessage;
end;

Wenn schon so, dann bitte eine "TApplicationEvents" Komponente nutzen :wink:

Lannes 12. Nov 2007 21:12

Re: Scrollen in einer ComboBox unterbinden
 
Hallo,

gibt es das in D6 das schon?, dann ist das vermutlich besser, mein Code funktioniert schon in D3.

Namenloser 12. Nov 2007 21:43

Re: Scrollen in einer ComboBox unterbinden
 
Hi,

wieso sollte ein TApplicationEvents besserer Stil sein, als das "manuell" zu machen? man braucht doch nun wirklich nicht für jede Kleinigkeit eine Komponente :?

Deep-Sea 13. Nov 2007 08:31

Re: Scrollen in einer ComboBox unterbinden
 
Nun, ggf. ist dies nicht die einzigste Stelle einem vlt. sehr umfangreichen Programm, an der "jemand" auf ein Event von Application zugreifen möchte.

Aus der OH:
Zitat:

Jedes Formular in einer Anwendung kann ein eigenes TApplicationEvents-Objekt besitzen. Die Anwendungsereignisse treten für alle TApplicationEvents-Objekte im Projekt auf.
Und wenn man frech einfach direkt das Event von Application zuweist, wundert man sich später vlt. warum nichts mehr richtig funktioniert. :wink:

messie 13. Nov 2007 08:59

Re: Scrollen in einer ComboBox unterbinden
 
Also, ich habe es "manuell" umgesetzt, weil TApplicationEvents etwas globales ist und es wesentlich mehr Sorgfalt erfordert.
Mit der Lösung von Lannes kann ich bequem die ComboBoxen in meiner Eingabemaske vom Scrollen befreien.
Delphi-Quellcode:
if ActiveControl is TComboBox
Es gibt andere Forms, da ist das nicht wichtig, weil ein versehentliches Scrollen keine Folgen hat. Insofern ist die lokale Lösung für mich optimal.

Danke, Messie


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:19 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 by Thomas Breitkreuz