AGB  ·  Datenschutz  ·  Impressum  







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

Mehrspaltige ComboBox?

Ein Thema von Borschti · begonnen am 2. Jun 2008 · letzter Beitrag vom 3. Jun 2008
Antwort Antwort
Seite 1 von 2  1 2      
Borschti

Registriert seit: 1. Nov 2007
Ort: Marburg Lahn
235 Beiträge
 
Delphi 2007 Professional
 
#1

Mehrspaltige ComboBox?

  Alt 2. Jun 2008, 14:37
Hallo,

Ich bin auch der suche nach einer Möglichkeit, einer ComboBox mehrere Spalten zu geben.

Ich habe mich einmal ein wenig im Forum umgeschaut aber das einzig halbwegs brauchbare was Ich gefunden hab, waren Vorschläge mit AddObject(), das benutze Ich aber zZ. selber.

Also Ich möchte eine ComboBox mit 2 oder, noch besser, mehr Spalten darstellen.
Ich hoffe Ihr habt micht verstanden Ich kann Probleme manchmal nicht so gut Schildern

Also dann schonmal danke für eure Antworten.

mfg
Bossi

[edit=SirThornberry]Buchstabendreher im Titel korrigiert - Mfg, SirThornberry[/edit]
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.197 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: Mehrsapltige ComboBox?

  Alt 2. Jun 2008, 14:38
Das ElPack hat eine ComboBox an der ein ganzer Tree angehängt werden kann. Dieser Tree kann so konfiguriert werden das er wie ein ListView aussieht.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
andyvdeu

Registriert seit: 8. Dez 2004
Ort: Bad Grönenbach
18 Beiträge
 
Delphi 10.4 Sydney
 
#3

Re: Mehrsapltige ComboBox?

  Alt 2. Jun 2008, 14:45
Hallo,
vielleicht hilft die hier : http://www.o2a.com/cbplus.htm
Andreas V.
  Mit Zitat antworten Zitat
alex517

Registriert seit: 23. Nov 2004
Ort: Bernau b. Berlin
273 Beiträge
 
Delphi XE5 Enterprise
 
#4

Re: Mehrsapltige ComboBox?

  Alt 2. Jun 2008, 14:51
Mehrere Spalten in einer Combobox

alex
Alexander
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: Mehrsapltige ComboBox?

  Alt 2. Jun 2008, 15:01
Eine ComboBox besteht ja aus einem Edit und einer ListBox.

wenn man sich den Zugriff auf die enthaltene ListBox (nicht das Windows Control "ListBox", sondern "ComboLBox" ) besorgt, dann sollten sich da, wie auch bei der normalen ListBox, mehrere Spalten erstellen lassen.
(gilt für Windows Control "ComboBox", ob es bei "ComboBoxEx" auch so ist, weiß ich grad nicht ... kann sein, daß dort eine "normale" ListBox enthalten ist)



aber der Trick mit dem selber Zeichnen (siehe alex517s Link) ist wohl erstmal Einfacher, da es beim "Edit" eh keine Spalten gibt und man da so oder so selber zeichnen müßte.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Benutzerbild von FAlter
FAlter

Registriert seit: 21. Jul 2004
Ort: Ostfildern
1.096 Beiträge
 
FreePascal / Lazarus
 
#6

Re: Mehrsapltige ComboBox?

  Alt 2. Jun 2008, 15:05
Hi,

ich hätte es auch mit Owner Draw erledigt, allerdings scheint mir der Code von Torry ein wenig lang. Zum auseinanderpfriemeln könnte man TStringList.DelimitedText verwenden oder - was sogar bei älteren Delphis geht - CommaText. Dadurch wird der Code gleich übersichtlicher (wenn auch evtl. langsamer, aber das stört in diesem Fall kaum, da es nicht bemerkt wird).

Hier ein kurzes Beispiel:

im OI ComboBox1.Style = csOwnerDrawFixed einstellen.

Delphi-Quellcode:
procedure TForm1.ComboBox1DrawItem(Control: TWinControl; Index: Integer;
  Rect: TRect; State: TOwnerDrawState);
var
  Item: TStringList;
  W, I, L: Integer;
  R: TRect;
begin
  Item := TStringList.Create;
  try
    Item.CommaText := ComboBox1.Items[Index];
    W := (Rect.Right - Rect.Left) div Item.Count; //hier alle gleiche Breite

    for I := 0 to Item.Count - 1 do
    begin
      L := Rect.Left + I * W;
      ComboBox1.Canvas.TextRect(
        Classes.Rect(L, Rect.Top, Rect.Right, Rect.Bottom),
        L,
        Rect.Top,
        Item[I]
      );
    end;
  finally
    Item.Free;
  end;
end;
Der Inhalt im ComboBox1.Items ist dann im CSV-Format (mit , und "):

Code:
"Spalte 1","Spalte 2","Spalte 3"
"Hallo Welt",NurEinWort,42
Leer,,"<-- war leer"
Mfg
FAlter

[edit] Torry hat nicht einmal eine Schleife genommen? Und was, wenn man schnell mal die Anzahl der Spalten ändern will? [/edit]
Felix Alter
  Mit Zitat antworten Zitat
Borschti

Registriert seit: 1. Nov 2007
Ort: Marburg Lahn
235 Beiträge
 
Delphi 2007 Professional
 
#7

Re: Mehrspaltige ComboBox?

  Alt 2. Jun 2008, 16:04
Danke sehr für die vielen Antworten. Ich guck mir das alles mal an und entscheide mich dann für eine der möglichkeiten.

mfg
Bossi
  Mit Zitat antworten Zitat
Borschti

Registriert seit: 1. Nov 2007
Ort: Marburg Lahn
235 Beiträge
 
Delphi 2007 Professional
 
#8

Re: Mehrspaltige ComboBox?

  Alt 2. Jun 2008, 16:42
Hi,

also Ich habe ein kleines Problem mit FAlters Code. Und zwar versuche Ich gerade in die ComboBox Zeilen hinzuzufügen, das versuche ich durch ein ButtonClick Ereignis, also wie in dem Code von Torry.

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
with VisiCombobox2.Items do
  begin
    Add('"Spalte 1","Spalte 2","Spalte 3"');
    Add('"Hallo Welt",NurEinWort,42');
    Add('Leer,,"<-- war leer"');
  end;
end;
Wenn Ich dann allerdings die ComboBox aufklappe wird mir eine Fehlermeldung angezeigt "Division by Zero".

Diese Zeile wird mir rot markiert und der Zeiger steht am anfang:

W := (Rect.Right - Rect.Left) div Item.Count; Liegt das an der Art wie Ich die Strings der ComboBox hinzufüge oder liegt das am Code?

mfg
Bossi
  Mit Zitat antworten Zitat
Benutzerbild von FAlter
FAlter

Registriert seit: 21. Jul 2004
Ort: Ostfildern
1.096 Beiträge
 
FreePascal / Lazarus
 
#9

Re: Mehrspaltige ComboBox?

  Alt 2. Jun 2008, 16:56
Hi,

auf "leere" Inhalte war mein Code nicht vorbereitet. Aber was spricht dagegen, einfach ein if Item.Count > 0 then begin ... end hinzusetzen?

Jedenfalls hast du ein leeres Item in deiner ComboBox drin, also ''.

Ansonsten kannst du den Inhalt auch schon per Objektinspektor setzen.

Mfg
FAlter

[edit] Am besten sieht es aus, wenn du im Falle not (Count > 0) wenigstens ein Rechteck zeichnest:

Delphi-Quellcode:
procedure TForm1.ComboBox1DrawItem(Control: TWinControl; Index: Integer;
  Rect: TRect; State: TOwnerDrawState);
var
  Item: TStringList;
  W, I, L: Integer;
  Cb: TCustomComboBox;
begin
  Cb := (Control as TCustomComboBox);

  Item := TStringList.Create;
  try
    Item.CommaText := Cb.Items[Index];
    if Item.Count > 0 then
    begin
      W := (Rect.Right - Rect.Left) div Item.Count; //hier alle gleiche Breite

      for I := 0 to Item.Count - 1 do
      begin
        L := Rect.Left + I * W;
        Cb.Canvas.TextRect(
          Classes.Rect(L, Rect.Top, Rect.Right, Rect.Bottom),
          L,
          Rect.Top,
          Item[I]
        );
      end;
    end
    else
      Cb.Canvas.FillRect(Rect);
  finally
    Item.Free;
  end;
end;
[/edit]

[edit] Code verbessert - kann jetzt für mehrere ComboBoxen verwendet werden und muss nicht mehr angepasst werden (an tatsächlich verwendeten Namen der ComboBox). [/edit]
[edit] Jetzt aber letztes vergessenes ComboBox1 eliminiert. [/edit]
Felix Alter
  Mit Zitat antworten Zitat
Borschti

Registriert seit: 1. Nov 2007
Ort: Marburg Lahn
235 Beiträge
 
Delphi 2007 Professional
 
#10

Re: Mehrspaltige ComboBox?

  Alt 2. Jun 2008, 17:09
Die Sache ist ja die, dass überhaupt kein Inhalt in die ComboBox gepackt wird.
Also Ich füge per ButtonClick die Zeilen hinzu, die du in deinem ersten Post als Beispiel gegeben hast, wenn Ich dann die ComboBox aufploppen lasse hat diese keine Einträge in Form von Buchstaben oder Zahlen, nur 3 leere Zeilen

Also liegt das doch daran wie Ich die Zeilen hinzufüge oder?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 02:42 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