AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Combobox in Gruppen unterteilt

Ein Thema von Jack and the Juice · begonnen am 24. Feb 2011 · letzter Beitrag vom 25. Feb 2011
Antwort Antwort
gb0

Registriert seit: 27. Aug 2005
20 Beiträge
 
#1

AW: Combobox in Gruppen unterteilt

  Alt 24. Feb 2011, 13:03
Danke für die erste Klärung.
Mich wundert außerdem
Zitat:
eine Art Gliederung [...], wobei die Überschriften nicht anwählbar sind.
Es ist doch das Wesen einer ComboBox, dass ich etwas aus einer bestimmten Anzahl von Möglichkeiten aus- bzw anwählen kann. Sonst täte es eine ListBox (sogar Label) auch, bzw die Kombination von ComboBox für die Grobauswahl + Listbox für die darunter liegende Ebene...

Günther
  Mit Zitat antworten Zitat
Jack and the Juice

Registriert seit: 15. Jan 2011
Ort: Lübeck
52 Beiträge
 
#2

AW: Combobox in Gruppen unterteilt

  Alt 24. Feb 2011, 13:10
OK, vielleicht habe ich mich nicht ganz deutlich ausgedrückt, also noch einmal zur Erklärung.

Ich habe eine Combobox, die wie folgt aufgebaut sein soll

Gruppe A
Eintrag 1
Eintrag 2
Eintrag 3
Gruppe B
Eintrag 1
Eintrag 2
Eintrag 3

Dabei sollen die Einträge selbstverständlich anwählbar sein, sonst wäre die Combobox ja tatsächlich überflüssig. Die Gruppen allerdings sollen nur zur besseren Übersicht dienen.

Vielen Dank schonmal für die Hilfe!
  Mit Zitat antworten Zitat
Benutzerbild von Nersgatt
Nersgatt

Registriert seit: 12. Sep 2008
Ort: Emlichheim
693 Beiträge
 
Delphi 10.1 Berlin Professional
 
#3

AW: Combobox in Gruppen unterteilt

  Alt 24. Feb 2011, 13:25
Sieht für mich aus wie ein TEdit + TButton + TTreeView
Beim Buttonclick blendest Du das Treeview ein. Und bei Klick auf ein Item in Treeview wieder aus und aktualisierst das TEdit entsprechend.

Wenn Du das an mehreren Stellen benötigst, macht Dir auf der Basis eine eigene Komponente.
Jens
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.656 Beiträge
 
Delphi 12 Athens
 
#4

AW: Combobox in Gruppen unterteilt

  Alt 24. Feb 2011, 13:34
Ich bin mir ziemlich sicher, dass ich etwas in der Art vor kurzem noch gesehen habe, leider finde ich es nicht wieder.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.340 Beiträge
 
Delphi 12 Athens
 
#5

AW: Combobox in Gruppen unterteilt

  Alt 24. Feb 2011, 13:36
In der "StandardComboBox" befindet sich im Dropdown eine Art ListBox.
Die "StandardListBox" kann man ja gruppieren ... eventuell klappt das auch mit dieser internen "ListBox" ?

Ich weiß allerdings nicht in wie weit Microsoft da unterschiede macht und ob sich in der ComboBox/ComboBoxEx eine andere ListBox befindet und ob diese dieses Feature auch unterstützt, aber wenn, dann müßte man diese ListBox manuell direkt ansprechen und deren Anzeige entsprechend umstellen.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.656 Beiträge
 
Delphi 12 Athens
 
#6

AW: Combobox in Gruppen unterteilt

  Alt 24. Feb 2011, 13:40
Das hier ist es zwar noch nicht, könnte aber als Grundlage dienen: http://delphi.about.com/od/vclusing/...incombobox.htm
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
gb0

Registriert seit: 27. Aug 2005
20 Beiträge
 
#7

AW: Combobox in Gruppen unterteilt

  Alt 24. Feb 2011, 14:33
Oder, wenn's nicht besonders anspruchsvoll sein muss, einfach (aber wirkungsvoll) indem man in der Liste wie in #8 aber mit Einzug bei 'Eintrag ...' die 'Gruppe ...' nicht anwählen lässt.
Etwa in der Art
Delphi-Quellcode:
procedure TForm1.ComboBox1Click(Sender: TObject);
var
  choice: integer;
begin
  choice := ComboBox1.ItemIndex;
  if choice = 0 then choice := choice + 1;
  if choice = 4 then choice := choice + 1;
  ComboBox1.ItemIndex := choice;
end;
Bei Anwahl einer 'Gruppe ..' springt die Auswahl auf den ersten Eintrag in der betreffenden Gruppe - eventuell mit Hinweis, dass eben nur ein Eintrag - aber nicht die Gruppe - ausgewählt werden kann.

Günther
  Mit Zitat antworten Zitat
Jack and the Juice

Registriert seit: 15. Jan 2011
Ort: Lübeck
52 Beiträge
 
#8

AW: Combobox in Gruppen unterteilt

  Alt 25. Feb 2011, 10:28
Hallo nochmal,

vielen Dank schon mal für Eure Tipps. Mir geht es halt eher um die Visualisierung. Etwas in Richtung TreeView wäre schon ganz nett. Das ganze ist allerdings nur ein kleiner Schritt in Richtung bessere Darstellung, also nicht unbedingt notwendig, geht notfalls auch mit einer konventionellen Combobox.

Beste Grüße,
Jackandthejuice
  Mit Zitat antworten Zitat
Benutzerbild von freak4fun
freak4fun

Registriert seit: 22. Sep 2004
Ort: Hannover
1.807 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#9

AW: Combobox in Gruppen unterteilt

  Alt 25. Feb 2011, 13:18
Du meinst sowas, richtig?
Christian
IT: Schließen Sie bitte das Fenster. User: Die Tür auch?
i++; // zaehler i um 1 erhoehen
  Mit Zitat antworten Zitat
Benutzerbild von Guido R.
Guido R.

Registriert seit: 5. Jul 2007
141 Beiträge
 
Delphi 12 Athens
 
#10

AW: Combobox in Gruppen unterteilt

  Alt 25. Feb 2011, 13:22
Hi !

Soll es ungefähr so aussehen :

GrpCombo.JPG

Dann versuche doch mal folgendes :

Verwende eine ComboBox und setze den Style auf "csOwnerDrawFixed". In Items der Combobox schreibst Du nun Deine Gruppen und Einträge. Gruppen werden hier mit "_" als ersten Char definiert.

_Gruppe A
Eintrag 1
Eintrag 2
Eintrag 3
_Gruppe B
Eintrag 1
Eintrag 2
Eintrag 3

Dann bearbeitest Du den OnDrawItem-Event :

Delphi-Quellcode:
procedure TForm1.ComboBox1DrawItem(Control: TWinControl; Index: Integer;
  Rect: TRect; State: TOwnerDrawState);
Var S:String;
begin
 with (Control as TCombobox) do
   begin
     if (Length(Items[index])>0) AND (Items[index][1]='_')
      then begin
            Canvas.Brush.color := clInfoBk;
            Canvas.Font.Style := Canvas.Font.Style+[fsBold];
            S:=Copy(Items[Index],2,Length(Items[Index]));
           end
      else begin
            Canvas.Brush.color := clWhite;
            Canvas.Font.Style := Canvas.Font.Style-[fsBold];
            S:=' '+Items[Index];
           end;
     Canvas.FillRect(Rect);
     Canvas.Font.Color := clBlack;
     Canvas.TextOut(Rect.Left,Rect.Top,S);
   end;
end;
Du kannst hier auch noch Linien malen, Grafiken einbinden etc.

Jetzt musst Du noch verhindern, dass die Gruppen selbst gewählt werden können.
Eine Möglichkeit wäre auf OnSelect zu reagieren :

Delphi-Quellcode:
procedure TForm1.ComboBox1Select(Sender: TObject);
begin
 while (ComboBox1.Items[ComboBox1.ItemIndex][1]='_') AND (ComboBox1.Items.Count>(ComboBox1.ItemIndex-1))
  do ComboBox1.ItemIndex:=ComboBox1.ItemIndex+1;
end;
Diese Vorgehensweise hat jedoch den Nachteil, dass Du bei Steuerung mittels Cursortasten die letzte Gruppe nicht mehr verlassen kannst. - Da müsstest Du Dir evtl. eine bessere Methode ausdenken, z.B. indem Du Dir die Scrollrichtung anhand des Index merkst und dann entscheidest, ob Du auf den ItemIndex ein draufzählst, oder abziehst, wenn Du auf eine Gruppe triffst.

Hoffe das hilft !

Gruß
Guido R.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:53 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