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/)
-   -   TComboBox: Mauszeiger verschwindet (https://www.delphipraxis.net/171421-tcombobox-mauszeiger-verschwindet.html)

ensaron 6. Nov 2012 11:12

TComboBox: Mauszeiger verschwindet
 
Hallo zusammen :)

Ich habe hier ein kleines Problem mit einer TComboBox:
Die Combobox ist mit Einträgen gefüllt, von denen der Anwender einen auswählen kann. Wird ein Text eingegeben, wird der Inhalt der Combobox nach dieser Eingabe gefiltert.

Nach Abschluss des Filterns setzt ich
Delphi-Quellcode:
TComboBox.DroppedDown := True
, um die Einträge passend zu der Eingabe anzuzeigen. Dabei verschwindet der Mauszeiger und erscheint erst wieder, wenn die Auswahlliste geschlossen wird.

Weiß jemand, wie ich dies verhindere oder den Mauszeiger nach dem Setzen von DroppedDown wieder einblenden kann?

Ein bisschen Code:
Delphi-Quellcode:
TForm.ComboBoxKeyPress(Sender: TObject; var Key: Char);
begin
  if (...) then
    //Behandlung Enter, Tab, Pfeiltasten
  else
    PostMessage(Handle, WM_MYMESSAGE, 0, 0);
end;

procedure TForm.MyMessageProcedure(var Msg: Message);
begin
  if EnteredText = '' then
    //Liste neu füllen
  else
  begin
    //Liste filtern
    ComboBox.DroppedDown := True;
  end;
end;

nuclearping 6. Nov 2012 16:31

AW: TComboBox: Mauszeiger verschwindet
 
Statt dem
Code:
ComboBox.DroppedDown := TRUE
kannst du mal
Code:
SendMessage(ComboBox.Handle, CB_SHOWDROPDOWN, 1, 0)
bzw.
Code:
PostMessage
probieren.

Bin mir nicht sicher, aber IMHO solltest du keine direkten VCL-Operationen in einem MessageHook verarbeiten.

ensaron 7. Nov 2012 13:41

AW: TComboBox: Mauszeiger verschwindet
 
Hallo und danke für den Tipp :)

Funktioniert aber leider auch nicht.
Habe noch ein bisschen herumprobiert: Das Verschwinden des Mauszeigers tritt nur auf, wenn
Delphi-Quellcode:
AutoComplete
der Combobox auf False gesetzt ist und die Combobox dann über
Delphi-Quellcode:
DroppedDown := True
aufgeklappt wird, unabhängig davon, ob ich dieses direkt aufrufe oder mir (oder direkt der Combobox) eine Message schicke.
Wenn ich die Liste nicht aufklappe (und AutoComplete False ist) verschwindet der Mauszeiger übrigens ebenfalls und erscheint wieder, sobald ich die Maus bewege. Das Verschwinden passiert aber nicht jedesmal, sondern teils erst beim zweiten oder dritten eingegebenen Zeichen und teils taucht der Mauszeiger auch bei Eingabe eines weiteren Zeichens wieder auf :?

Werde mir wohl was mit einem Edit-Feld und einer Listbox zusammenbasteln.

Edit: Beim Senden einer Message an die Combobox wird
Delphi-Quellcode:
DroppedDown := True
natürlich nicht verwendet.

nuclearping 7. Nov 2012 17:37

AW: TComboBox: Mauszeiger verschwindet
 
Taucht der Mauszeiger denn wieder auf, wenn du die Mausposition per Code änderst / aktualisierst?

borncrush 7. Nov 2012 18:15

AW: TComboBox: Mauszeiger verschwindet
 
Ob das nun was damit zu tun hat, bleibt offen :D, aber
es gibt doch in Windows irgendwo (glaube Mauseinstellungen) eine Einstellung, dass er beim Tippen den Cursor ausblendet. Vll. greift diese Funktion teilweise in dieser Situation ?!?!?!
:?:

ensaron 8. Nov 2012 09:05

AW: TComboBox: Mauszeiger verschwindet
 
Ich hab die Lösung gefunden :)

@nuclearping:
In deinem ersten Post war der Lösungsansatz bereits enthalten ;)

Schicke ich die Message zum Aufklappen an die Combobox mit
Delphi-Quellcode:
PostMessage
verschwindet der Mauszeiger. Schick ich die Message dagegen mit
Delphi-Quellcode:
SendMessage
, bleibt der Mauszeiger erhalten.

Im KeyPress der Combobox schicke ich mir eine Message mit PostMessage um die Filterung durchzuführen und da drin habe ich dann mit
Delphi-Quellcode:
PostMessage(ComboBox.Handle, CB_SHOWDROPDOWN, 1, 0)
und
Delphi-Quellcode:
SendMessage(ComboBox.Handle, CB_SHOWDROPDOWN, 1, 0)
probiert, das Aufklappen zu steuern.
Vom KeyPress aus brauche ich ein PostMessage zur Filterung, damit die Eingabe bereits verarbeitet wurde und mir der aktuelle Text der Combobox zur Verfügung steht.

Wenn ich das Aufklappen der Combobox nun aber bereits im KeyPress mit SendMessage durchführe und anschließend die weitere Bearbeitung wie bisher mit PostMessage anstoße, funktionierts wie gewünscht :-D


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