![]() |
ComboBox am Aufklappen hindern
Hallo zusammen
Wie kann ich verhindern, dass eine Combobox ihre Standardliste aufklappt? Stattdessen möchte ich nämlich eine eigene Komponente anzeigen lassen. Gruss Shaman |
Re: ComboBox am Aufklappen hindern
Bei der TCOmbobox gibts eine Eigenschaft DroppedDown
Code:
Im onDropDown Ereignis solltest du das auf false setzen können und die Liste wird nicht angezeigt.
property DroppedDown: Boolean;
Habs aber nicht getestet :) |
Re: ComboBox am Aufklappen hindern
Hab ich auch schon probiert, funktioniert leider nicht... :(
Aber Danke trotzdem |
Re: ComboBox am Aufklappen hindern
:hi: Mahlzeit !
Hallo Shaman, So wie ich das verstehe wirst du nicht drumherum kommen, eine neue ComboBox zu entwickeln. Ich hab' das schon mal gemacht. Wenn du einen Moment Zeit hast, suche ich mal den nötigen Code zusammen, um dir auf die Sprünge zu helfen. |
Re: ComboBox am Aufklappen hindern
Hallo AlphaBug
Das wäre sehr nett :) |
Re: ComboBox am Aufklappen hindern
Außer dem Ableiten einer eigenen ComboBox fällt mir nicht mehr viel ein.
(Vieleicht im DropDown-Event etwas basteln...) Ich hoffe, diese Code-Schnipsel helfen dabei:
Delphi-Quellcode:
TCustomCombo = class(TCustomListControl)
private ... procedure CNCommand(var Message: TWMCommand); message CN_COMMAND; ... protected ... procedure AdjustDropDown; virtual; ... end; TCustomComboBox = class(TCustomCombo) ... TMyComboBox = class(TCustomComboBox) private ... procedure CNCommand(var Message: TWMCommand); message CN_COMMAND; ... protected ... procedure AdjustDropDown; override; ... end; ... procedure TCustomCombo.CNCommand(var Message: TWMCommand); begin case Message.NotifyCode of CBN_DBLCLK: DblClick; CBN_EDITCHANGE: Change; CBN_DROPDOWN: begin FFocusChanged := False; // DropDown-Event ausführen DropDown; // DropDown-Liste konfigurieren AdjustDropDown; if FFocusChanged then begin PostMessage(Handle, WM_CANCELMODE, 0, 0); if not FIsFocused then // DropDown-Liste anzeigen PostMessage(Handle, CB_SHOWDROPDOWN, 0, 0); end; end; CBN_SELCHANGE: begin Text := Items[ItemIndex]; Click; Select; end; CBN_CLOSEUP: CloseUp; CBN_SETFOCUS: begin FIsFocused := True; FFocusChanged := True; SetIme; end; CBN_KILLFOCUS: begin FIsFocused := False; FFocusChanged := True; ResetIme; end; end; end; procedure TCustomCombo.AdjustDropDown; var Count: Integer; begin Count := ItemCount; if Count > DropDownCount then Count := DropDownCount; if Count < 1 then Count := 1; FDroppingDown := True; try SetWindowPos(FDropHandle, 0, 0, 0, Width, ItemHeight * Count + Height + 2, SWP_NOMOVE or SWP_NOZORDER or SWP_NOACTIVATE or SWP_NOREDRAW or SWP_HIDEWINDOW); finally FDroppingDown := False; end; SetWindowPos(FDropHandle, 0, 0, 0, 0, 0, SWP_NOMOVE or SWP_NOSIZE or SWP_NOZORDER or SWP_NOACTIVATE or SWP_NOREDRAW or SWP_SHOWWINDOW); end; |
Re: ComboBox am Aufklappen hindern
Danke, soweit bin ich auch schon gekommen. Aber egal welche Message ich blockiere, die Liste wird trotzdem gezeichnet. Ich habs jetzt wenigstens soweit, dass sie nur noch ein schwarzer Strich ist. Aber das ist ein ziemlicher Murks... :?
|
Re: ComboBox am Aufklappen hindern
Hm, dann würd ich da keine Combobox hinsetzen. Ein Editfeld und ein Button mit Pfeil nach unten.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:34 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-2025 by Thomas Breitkreuz