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/)
-   -   Combo ausblenden? (https://www.delphipraxis.net/161186-combo-ausblenden.html)

Mattze 21. Jun 2011 14:10

Combo ausblenden?
 
Hi,

wenn man in einer Combobox das Dropdown-Feld aufgemacht hat, bleibt es offen bis man irgendwoanders im Formular klickt.
Das funktioniert auch, wenn man irgendwohin klickt, was nicht den Focus bekommen kann.
Welches Ereignis ist dafür zuständig?
CM_Exit scheint es nicht zu machen.
(Ich möchte das bei einer anderen Sache nachmachen.)

Was ist dieses Feld eigentlich für eine Struktur? Eine Listbox?

Gruß
Mattze

jaenicke 21. Jun 2011 17:07

AW: Combo ausblenden?
 
Zum Schließen dient der NotifyCode CBN_CLOSEUP oder auch die Methode CloseUp, die protected ist, also von einer abgeleiteten klasse (oder mit Tricks) erreichbar ist. Das kannst du aber auch im Quelltext der TComboBox direkt sehen. ;-)

Und als Ereignis, denn das war ja was du gefragt hattest (auch wenn ich nicht sicher bin, dass du das meintest) gibt es OnCloseUp.

// EDIT:
Ach ja, und dann gibts noch CB_SHOWDROPDOWN:
http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx

Mattze 21. Jun 2011 17:32

AW: Combo ausblenden?
 
Hi,

danke, aber nee, das meine ich doch gar nicht.
Offenbar muss ich mal wieder an meiner Formulierungsweise schrauben!

Ich möchte diese "Schließverhalten" der Listbox(?) in der Combobox nachmachen!

Genauer: Dropdown --> Listbox (oder was ist das?) geht auf und bleibt offen.
Ich klicke IRGENDWO im Formular hin, z. Bsp. auch nur auf ein Panel. (Ob das den Fokus übernehmen kann oder sonst was, ist da völlig egal!)
Listbox von der Combobox geht wieder zu.
Wie geht das?
CMExit macht es nicht. Nur manchmal - wenn der andere den Fokus nehmen kann.

Nebenbei: Genau das gleiche ist beim PopUp oder Menü. Das muss also irgendwas allgemeines sein, evtl. eben eine Botschaft.

Gruß
Mattze

jaenicke 21. Jun 2011 22:17

AW: Combo ausblenden?
 
Ja, das passiert genau über CBN_CLOSEUP. Das ist für Windows ein solches DropDown-Control, eben eine Combobox. Deshalb wird da via WM_COMMAND der NotifyCode CBN_CLOSEUP geschickt um es zu schließen. Ich bezweifle, dass du das adaptieren kannst ohne auch eine ComboBox zu implementieren. (Sicher bin ich da nicht, ich habe es nie versucht.)

Das siehst du in TCustomComboBox.CreateParams. Dort wird eine Klasse COMBOBOX erstellt.

Luckie 21. Jun 2011 22:39

AW: Combo ausblenden?
 
Eine Combobox ist eine Kombination der Windows Edit Fensterklass eun der Listbox Fensterklasse.

jaenicke 21. Jun 2011 23:12

AW: Combo ausblenden?
 
Edit Fensterklasse und ListBox Fensterklasse? Bist du sicher?

Schließlich gibt es die ComboBox Fensterklasse direkt, siehe hier in der Liste:
http://msdn.microsoft.com/en-us/libr...74.aspx#system
Und ich hätte jetzt den Quelltext in Delphi so interpretiert, dass die auch verwendet wird. :gruebel:
Delphi-Quellcode:
procedure TCustomComboBox.CreateParams(var Params: TCreateParams);
[...]
begin
  inherited CreateParams(Params);
  CreateSubClass(Params, 'COMBOBOX');

Luckie 21. Jun 2011 23:20

AW: Combo ausblenden?
 
Ziemlich. Jedenfalls das Eingabefeld ist ein normales Edit. Und zusammen bilden sie die Combobox Fensterklasse.

jaenicke 21. Jun 2011 23:43

AW: Combo ausblenden?
 
Ach so meinst du das, ja klar, das wird so sein.

Aber egal wie das intern in der API dann aussieht, es ist eine spezielle ComboBox Fensterklasse, die das entsprechende Verhalten von Windows bekommt.

Mattze 22. Jun 2011 10:51

AW: Combo ausblenden?
 
Hi,

na so ein Ärger. Und damit bin ich raus... :(
Wenn das eine Message wäre, wäre es ja einfach. (Jedenfalls, wenn man dann noch rauskriegt, welche... )

Bis zum Subclassing usw. wollte ich es eigentlich nicht trieben.

Gruß
Mattze


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