![]() |
cxCheckComboBox mit "Alle"
Hallo Zusammen,
Ich habe ein Ribbon mit einer cxCheckComboBox. Die Items werden dynamisch erzeugt, manchmal sind es viele. Der Benutzer soll nun die Möglichkeit haben, Alles auszuwählen bzw. Alles auf unchecked zu setzen, wie das auch zum Beispiel in Excel möglich ist. Meine Idee war, "Alle" als erstes Item hinzuzufügen, und wenn der Benutzer dieses Häkchen setzt, alle Items auf Checked zu setzen (StatesString := '1111111111'). Das OnChange-Event nehme ich dafür nicht, denn das tritt erst dann ein, wenn die Box verlassen wird. OnCurChange oder onPropertiesChange oder onPropertiesClickCheck macht es aber auch nicht bzw liefert mir einen Fehler beim Zuweisen des StatesStrings. Meine Suche bei DevExpress liefert mir zwei mehr schlechte als rechte Lösungen. 1) Ein Extrabutton außerhalb der CheckComboBox 2) Statt CheckComboBox ein cxPopupEdit mit einem Panel als PopupControl, welches dann eine CheckListBox und ein Label "Select All" enthält. Hmm Hat jemand eine Idee? |
AW: cxCheckComboBox mit "Alle"
Moin,
hast Du die Eigenschaft ImmediatePost auf true oder false eingestellt? Wenn man die auf true setzt, sollte OnEditValueChanged anschlagen. Viele Grüße Ingo |
AW: cxCheckComboBox mit "Alle"
Zitat:
Delphi-Quellcode:
Der Quelltext für die Funktion AddMarkItemsButton() sieht dann wie folgt aus:
function AddMarkItemsButton(pmCheckComboBox: TcxCheckComboBox; pmOnButtonClick: TcxEditButtonClickEvent = Nil): TcxEditButton;
function CheckComboBoxCheckedCount(pmCheckComboBox: TcxCheckComboBox): Integer; procedure CheckComboBoxMarkAllItems(pmCheckComboBox: TcxCheckComboBox); procedure CheckComboBoxUnmarkAllItems(pmCheckComboBox: TcxCheckComboBox);
Delphi-Quellcode:
Im FormShow schreibst du dann:
type
TcxCheckComboBoxPropertiesAccess = class(TcxCheckComboBoxProperties); function AddMarkItemsButton(pmCheckComboBox: TcxCheckComboBox; pmOnButtonClick: TcxEditButtonClickEvent): TcxEditButton; begin Result := Nil; if Assigned(pmCheckComboBox) then begin with TcxCheckComboBoxPropertiesAccess(pmCheckComboBox.ActiveProperties) do begin Result := Buttons.Add; Result.Kind := bkGlyph; Result.Glyph.LoadFromResourceName(HInstance, 'IDS_MARK_ITEMS'); Result.Glyph.Width := Result.Glyph.Height; OnButtonClick := pmOnButtonClick; end; end; end;
Delphi-Quellcode:
Für das Ereignis DoButtonClick folgendes:
begin
AddMarkItemsButton(ccb..., DoButtonClick); with TcxCheckComboBoxAccess(ccb...) do (LookupData.ActiveControl as TcxCustomCheckComboBoxListBox).PopupMenu := ...PopupMenu; end
Delphi-Quellcode:
Die Funktionen CheckComboBoxCheckedCount(), CheckComboBoxMarkAllItems() und CheckComboBoxUnmarkAllItems() werden in den Action Funktionen Execute() und Update() verwendet.
procedure ...DoButtonClick(pmSender: TObject; pmButtonIndex: Integer);
var pos: TPoint; begin if Assigned(pmSender) then begin if pmButtonIndex = 1 then begin pos.X := TcxCheckComboBox(pmSender).Left; pos.Y := TcxCheckComboBox(pmSender).Top + TcxCheckComboBox(pmSender).Height; pos := TcxCheckComboBox(pmSender).Parent.ClientToScreen(pos); ...PopupMenu.Popup(pos.X, pos.Y); end; end; end;
Delphi-Quellcode:
Und wenn du diese Funktionalität öfter benötigst, dann baust du dir einen Mediator, der das alles für dich in einem Rutsch erledigt. Anmerkung: Der Quelltext ist für eine ältere DevExpress Version.
procedure ...actMarkAllItemsExecute(Sender: TObject);
begin BeginUpdate; try CheckComboBoxMarkAllItems(ccb...); finally EndUpdate(ccb...); end; end; procedure ...actMarkAllItemsUpdate(Sender: TObject); var count: Integer; begin count := CheckComboBoxCheckedCount(ccb...); if Sender is TCustomAction then TCustomAction(Sender).Enabled := ...; end; Bis bald... Thomas |
AW: cxCheckComboBox mit "Alle"
Oder ein onKeyEvent nutzen:
+ auf dem Numblock checked alles - auf dem Numblock unchecked alles * auf dem Numblock invertiert den aktuellen Zustand Analog zu Windows-Commander u. ä. bei der Dateiauswahl. |
AW: cxCheckComboBox mit "Alle"
Vielen Dank für die schnellen Antworten.
:thumb: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:45 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