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 Win10 -> TListBox -> MouseWheel -> ausserhalb des Controls scrollen (https://www.delphipraxis.net/208668-win10-tlistbox-mousewheel-ausserhalb-des-controls-scrollen.html)

MyRealName 3. Sep 2021 09:13

Win10 -> TListBox -> MouseWheel -> ausserhalb des Controls scrollen
 
Ich wollte kurz nachfragen, ob Euch das aufgefallen ist und was eine mögliche Lösung ist, before ich gross rumprogrammiere.

Bei uns wird jetzt doch mal endlich von Win8 auf Win10 umgestellt. Einige Abteilungen kriegen jetzt schon Win10 Rechner, wir Entwickler sind noch auf Win8.
Jetzt habe ich in einem Programm eine TListBox und einen Button. In der ListBox werden oft so viele Daten angezeigt, dass man scrollen muss, um bis zum Ende zu kommen. Dann den Knopf drücken, da werden dann die neuen Daten geladen und der Focus vom Button wieder auf die TListBox gelegt.
Unter Win8 kann ich mit der Mouse über dem Knopf bleiben und die Listbox scrollen, weil sie ja den Focus hat.
Unter Win10 scrollt es nicht mehr, sowie man ausserhalb der TListBox ist, auch wenn diese den Focus hat.

Gibt es eine einfach Möglichkeit, das Verhalten von Win8 an der Stelle wieder herzustellen ?

Meine Idee ist dem unterliegendem Form das Scrollen abzufangen und an die TListBox weiterzugeben.


Danke schonmal...

Aviator 3. Sep 2021 09:16

AW: Win10 -> TListBox -> MouseWheel -> ausserhalb des Controls scrollen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hi, das hängt von den Benutzereinstellungen (inaktive Fenster beim Draufzeigen scrollen) ab. Das Verhalten immer zwingend für den Benutzer so einzustellen ist meines Erachtens aber der falsche Weg.

MyRealName 3. Sep 2021 09:30

AW: Win10 -> TListBox -> MouseWheel -> ausserhalb des Controls scrollen
 
Wir machen interne Software und die Fachabteilung wünscht sich das halt so.
Der Name "inaktive Fenster beim Draufzeigen scrollen" ist aber irreführend in dem Fall, weil ich es
1.) abschalten muss, damit es geht
und
2.) das Fenster ja nicht inaktiv ist

Uwe Raabe 3. Sep 2021 10:06

AW: Win10 -> TListBox -> MouseWheel -> ausserhalb des Controls scrollen
 
Zitat:

Zitat von MyRealName (Beitrag 1494114)
Der Name "inaktive Fenster beim Draufzeigen scrollen" ist aber irreführend in dem Fall, weil ich es
1.) abschalten muss, damit es geht
und
2.) das Fenster ja nicht inaktiv ist

Nein, das ist anders gemeint: Wenn die Option eingeschaltet ist, bekommt das Fenster die Scroll-Messages über dem die Maus gerade steht. Das inaktive Fenster wäre dann in deinem Fall der Button.

Der schöne Günther 3. Sep 2021 10:08

AW: Win10 -> TListBox -> MouseWheel -> ausserhalb des Controls scrollen
 
Für Otto Normal ist ein Fenster halt das Ding mit den drei _ □ × Buttons, wir Delphi-Entwickler wissen halt dass aus Windows-Sicht selbst ein Button ein Fenster ist 😎

Windows hätte das eher als "Elemente" statt "Fenster" bezeichnen sollen.

MyRealName 3. Sep 2021 10:12

AW: Win10 -> TListBox -> MouseWheel -> ausserhalb des Controls scrollen
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1494116)
Zitat:

Zitat von MyRealName (Beitrag 1494114)
Der Name "inaktive Fenster beim Draufzeigen scrollen" ist aber irreführend in dem Fall, weil ich es
1.) abschalten muss, damit es geht
und
2.) das Fenster ja nicht inaktiv ist

Nein, das ist anders gemeint: Wenn die Option eingeschaltet ist, bekommt das Fenster die Scroll-Messages über dem die Maus gerade steht. Das inaktive Fenster wäre dann in deinem Fall der Button.

ahhhhh... muss man erstmal durchblicken :) Danke!

MyRealName 3. Sep 2021 13:17

AW: Win10 -> TListBox -> MouseWheel -> ausserhalb des Controls scrollen
 
Gibt es da sowas wie eine API Funktion, wo man das für seine eigene Anwendung an- oder abstellen kann ?

TiGü 3. Sep 2021 15:08

AW: Win10 -> TListBox -> MouseWheel -> ausserhalb des Controls scrollen
 
Zitat:

Zitat von MyRealName (Beitrag 1494127)
Gibt es da sowas wie eine API Funktion, wo man das für seine eigene Anwendung an- oder abstellen kann ?

Workaround: Beim Programmstart bzw. dann beim Beenden in der Registry aus-/anschalten?

dummzeuch 3. Sep 2021 16:44

AW: Win10 -> TListBox -> MouseWheel -> ausserhalb des Controls scrollen
 
Zitat:

Zitat von TiGü (Beitrag 1494130)
Zitat:

Zitat von MyRealName (Beitrag 1494127)
Gibt es da sowas wie eine API Funktion, wo man das für seine eigene Anwendung an- oder abstellen kann ?

Workaround: Beim Programmstart bzw. dann beim Beenden in der Registry aus-/anschalten?

Bloß nicht! Solche globalen Einstellungen sollte ein Programm niemals ändern, sonst sucht man sich hinterher einen Wolf, wenn irgendein anderes Programm sich anders verhält als erwartet.

Das Problem sollte sich aber beheben lassen, in dem man im Formular die Wheel-Messages abfängt und an die Listbox weiterleitet. Man muss nur aufpassen, dass sie dann nicht doppelt verarbeitet werden, wenn die Listbox den Focus hat.

Redeemer 3. Sep 2021 17:03

AW: Win10 -> TListBox -> MouseWheel -> ausserhalb des Controls scrollen
 
Zitat:

Zitat von TiGü (Beitrag 1494130)
Zitat:

Zitat von MyRealName (Beitrag 1494127)
Gibt es da sowas wie eine API Funktion, wo man das für seine eigene Anwendung an- oder abstellen kann ?

Workaround: Beim Programmstart bzw. dann beim Beenden in der Registry aus-/anschalten?

Dürfte auch nicht gehen, denn Windows wird sicher nicht bei jedem Scrollen in der Registry nachgucken, ob das jetzt an oder aus ist.

Uwe Raabe 3. Sep 2021 17:23

AW: Win10 -> TListBox -> MouseWheel -> ausserhalb des Controls scrollen
 
Zitat:

Zitat von Redeemer (Beitrag 1494136)
Dürfte auch nicht gehen, denn Windows wird sicher nicht bei jedem Scrollen in der Registry nachgucken, ob das jetzt an oder aus ist.

Ich meine auch, man muss sich mindestens einmal ab- und anmelden damit das wirkt.

Der schöne Günther 3. Sep 2021 17:48

AW: Win10 -> TListBox -> MouseWheel -> ausserhalb des Controls scrollen
 
Was kommt als nächstes? Dem Benutzer die Bildschirmauflösung oder DPI-Skalierung ändern weil das dem Programm besser passt?

Wenn, dann ist der richtige Weg die entsprechenden Messages abzufangen.

MyRealName 5. Sep 2021 10:36

AW: Win10 -> TListBox -> MouseWheel -> ausserhalb des Controls scrollen
 
Ok, danke, das hatte ich befürchtet.
Ich hatte nur gehgofft, dass es da was gibt, weil die Winforms von DevExpress sowas können. Die haben so eine Property SmartMouseWheelProcessing, da geht es genau um diese Einstellung

Uwe Raabe 5. Sep 2021 11:46

AW: Win10 -> TListBox -> MouseWheel -> ausserhalb des Controls scrollen
 
Ich vermute mal, die fangen die Scroll-Messages im Form ab und verteilen die dann entsprechend. Das funktioniert ja auch nur mit ganz bestimmten DevExpress-Form-Typen.

dummzeuch 5. Sep 2021 15:45

AW: Win10 -> TListBox -> MouseWheel -> ausserhalb des Controls scrollen
 
Zitat:

Zitat von dummzeuch (Beitrag 1494135)
Das Problem sollte sich aber beheben lassen, in dem man im Formular die Wheel-Messages abfängt und an die Listbox weiterleitet. Man muss nur aufpassen, dass sie dann nicht doppelt verarbeitet werden, wenn die Listbox den Focus hat.

Manchmal habe ich das Gefühl, ich bin hier im Spam-Filter gelandet, weil gefühlt die meisten meiner Beiträge ignoriert werden.

Oder ist diese Lösung zu kompliziert?

Papaschlumpf73 5. Sep 2021 16:54

AW: Win10 -> TListBox -> MouseWheel -> ausserhalb des Controls scrollen
 
Zitat:

Zitat von dummzeuch (Beitrag 1494170)
Zitat:

Zitat von dummzeuch (Beitrag 1494135)
Das Problem sollte sich aber beheben lassen, in dem man im Formular die Wheel-Messages abfängt und an die Listbox weiterleitet. Man muss nur aufpassen, dass sie dann nicht doppelt verarbeitet werden, wenn die Listbox den Focus hat.

Manchmal habe ich das Gefühl, ich bin hier im Spam-Filter gelandet, weil gefühlt die meisten meiner Beiträge ignoriert werden.

Oder ist diese Lösung zu kompliziert?

Vielleicht liegt’s ja an deinem Namen. Obwohl, ich finde den super 😂

tomkupitz 5. Sep 2021 17:31

AW: Win10 -> TListBox -> MouseWheel -> ausserhalb des Controls scrollen
 
Etwas Quelltext:

Code:
procedure TMainForm.ApplicationEvents1Message(var Msg: tagMSG; var Handled: Boolean);
begin
  if Msg.message=WM_MOUSEWHEEL then
  begin
    SendMessage(ListBox1.Handle, WM_MOUSEWHEEL, Msg.wParam, Msg.lParam);
    Handled:=True;
  end;
end;
Du kannst ggf. mit PtInRect noch prüfen in welchem Breich das so laufen soll.

Beste Grüße

Uwe Raabe 5. Sep 2021 17:54

AW: Win10 -> TListBox -> MouseWheel -> ausserhalb des Controls scrollen
 
Wäre da GetFocus anstatt ListBox1.Handle nicht etwas generischer? Sonst wirkt das Scrollen ja immer nur in der ListBox.

TiGü 6. Sep 2021 08:56

AW: Win10 -> TListBox -> MouseWheel -> ausserhalb des Controls scrollen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von dummzeuch (Beitrag 1494170)
Zitat:

Zitat von dummzeuch (Beitrag 1494135)
Das Problem sollte sich aber beheben lassen, in dem man im Formular die Wheel-Messages abfängt und an die Listbox weiterleitet. Man muss nur aufpassen, dass sie dann nicht doppelt verarbeitet werden, wenn die Listbox den Focus hat.

Manchmal habe ich das Gefühl, ich bin hier im Spam-Filter gelandet, weil gefühlt die meisten meiner Beiträge ignoriert werden.

Oder ist diese Lösung zu kompliziert?

Das kenn ich auch gut!

Man postet die Lösung und trotzdem werden weiterhin Beiträge mit nicht passenden Lösungen oder sogar der fast gleichen Lösung geschrieben.

(Also jetzt mal unabhängig zu meiner Registry-Idee, die wirklich nur als dreckiger Workaround verstanden werden sollte)

Anhang 54284

Delphi.Narium 6. Sep 2021 09:14

AW: Win10 -> TListBox -> MouseWheel -> ausserhalb des Controls scrollen
 
Sagen wir mal so:

Um den ersten korrekten Lösungsvorschlag als solchen zu erkennen, muss das Problem soweit verstanden sein, dass dieser Lösungsvorschlag als korrekt erkannt werden kann.

Ist dem nicht so, werden alternative Lösungsvorschläge gesucht. Dabei wird sich langsam aber sicher soweit in die Materie eingearbeitet, dass zu einem späteren Zeitpunkt dann ein identischer Vorschlag als korrekter Lösungvorschlag erkannt werden kann.

Pflapsig formuliert:

Ihr seid mit Euren korrekten Lösungsvorschlägen manchmal einfach nur zu schnell,
oder Ihr seid mit Euren Lösungsvorschlägen der Zeit weit voraus ;-)

Es ist halt ein allgemeines menschliches Problem:

Lieber lernt man aus eigener Erfahrung und eigenem "Aufdiefressefallen", als (blind) auf die Erfahrungen anderer zu vertrauen.
Nennt man auch: Lebenserfahrung sammeln.

Wie z. B. die heiße Herdplatte. Das sie heiß ist, erfährt man als Kind nicht, weil andere es sagen, sondern weil man sich die Finger verbrannt hat.

Ist einfach so, kein Grund zur Aufregung, kein Grund sich ignoriert zu fühlen, ist nur der normale tägliche Wahnsinn ;-)

MyRealName 7. Sep 2021 09:37

AW: Win10 -> TListBox -> MouseWheel -> ausserhalb des Controls scrollen
 
Ich habe Lösungen nicht ignoriert.
IM Endeffekt habe ich eingebaut, was auch Dummzeuch vorgeschlagen hat. Das war auch meine Notlösung, aber ich hatte halt gehofft, dass das Betriebssystem selbst was zur Verfügung stellt. Da nicht alle alles wissen, muss ich natürlich auch ein paar Antworten abwarten.

Vielen Dank an alle, die Ideen und Wissen geliefert haben.


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