Delphi-PRAXiS
Seite 2 von 2     12   

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/)
-   -   TComboBox - MouseMove (https://www.delphipraxis.net/197458-tcombobox-mousemove.html)

Amateurprofi 12. Aug 2018 10:00

AW: TComboBox - MouseMove
 
Zitat:

Zitat von KodeZwerg (Beitrag 1410414)
Alternativ kannst Du natürlich auch Label1.Caption := buf; mit einer Funktion/Procedure ersetzen was Dir den Output vorbereitet und irgendwo hin sendet.

So umgehst Du zumindest die SubClass / CustomCombo etc Problematik.
Über der Zeile GetClassName(wnd, buf, SizeOf(buf)); könntest Du die Abfrage auch noch vertiefen/konkretisieren (wnd := WindowFromPoint(pt); mit einem bestimmten Control Handle einer ComboBox zum Beispiel), in dieser gezeigten Variante greift ApplicationIdle auf alle aufgeklappten ComboBox Listen Einträge zu und gibt Inhalt unter Maus weiter.

Ps: Da ich es über OnIdle Event laufen lasse, kann es passieren das wenn Deine Applikation gerade schwer am schuften ist Du kein Event gefeuert bekommst um das Item unter Maus auszuwerten.

Nee, KodeZwerg.
Anfangs dachte ich auch, dass es Konflikte geben könnte, wenn mehrere Comboboxen vorhanden sind.
Hab ich dann auch getestet.
Es scheint so zu sein, dass immer nur eine einzige Combobox aufgeklappt sein kann, selbst dann, wenn es sich um Comboboxen in verschiedenen Anwendungen handelt. Jedenfalls habe ich es nicht geschafft, so einen Konflikt zu produzieren.

Zum PS:
Bei mir läuft "ApplicationIdle" nur dann, wenn die Liste aufgeklappt ist, und dann läuft ja nichts anderes.

KodeZwerg 12. Aug 2018 11:43

AW: TComboBox - MouseMove
 
Zitat:

Zitat von Amateurprofi (Beitrag 1410424)
vielen Dank.
Nach ein paar Anlaufschwierigkeiten funktioniert das hervorragend.

Gern geschehen und gut das Du es für Deine Zwecke anpassen konntest.
Zitat:

Zitat von Amateurprofi (Beitrag 1410425)
Es scheint so zu sein, dass immer nur eine einzige Combobox aufgeklappt sein kann, selbst dann, wenn es sich um Comboboxen in verschiedenen Anwendungen handelt. Jedenfalls habe ich es nicht geschafft, so einen Konflikt zu produzieren.

Ich meinte mit meiner "gezielten" Abfrage keinen Konflikt sondern nur bestimmte ComboBoxen auszuwerten, vielleicht will man nur eine bestimmte auf diese Weise "abarbeiten" lassen und andere sollen stumm bleiben.

Das Du das OnIdle Event an und ausschaltest ist auch völlig in Ordnung wobei mir EraseHint; nicht bekannt ist.
Den Befehl buf[0] := #0; würde ich Dir raten wieder aufzunehmen.

Wie dem auch sei, Du hast es geschafft Deine Ziele zu erreichen, warum bei Deinem Delphi der DropDownCount anders arbeitet als wie bei mir ist auch ein Rätsel. Letztendlich klappt ja alles :thumb:

Amateurprofi 12. Aug 2018 12:49

AW: TComboBox - MouseMove
 
Zitat:

Den Befehl buf[0] := #0; würde ich Dir raten wieder aufzunehmen.
Wie de:thumb:
Was soll das bringen?
Bei dem von Dir vorgeschlagenen Code macht es (wahrscheinlich) Sinn, denn wenn "GetClassName" nichts in den Puffer schreibt wird StrIComp(Buf,'ComboLBox') nicht = 0 sein.
Ich gehe lieber den Weg, das Resultat von "GetClassName" zu prüfen (dafür ist es da).
Die einzige Argumentation, trotzdem vor dem "GetClassName" Buf[0]=#0 zu setzen, ist die Annahme, das "GetClassName" nicht korrekt arbeitet. Wenn ich aber annehme, dass GetClassName nicht korrekt arbeitet, dann sollte ich auch annehmen, dass zum Beispiel "StrIComp" fehlerhaft arbeitet.


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:40 Uhr.
Seite 2 von 2     12   

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