![]() |
Delphi-Version: 7
Listbox mit verschiedenfarbigen Spalten
Hallo,
ist es möglich, in einer Listbox verschiedene Spalten unterschiedlich einzufärben? Bisher kann ich nur komplette Zeilen einfärben. |
AW: Listbox mit verschiedenfarbigen Spalten
Eine TListBox mit mehreren Spalten?
Sicher daß du nicht den TListView meinst? Und ich bin mir recht sicher, daß Letzteres mehrere Zeichenevents besitzt und Einige auch für einzelne Felder/Spalten gelten. (vorallem bei den "OnCustom..."-Events, auch schon bei älteren Delphis) |
AW: Listbox mit verschiedenfarbigen Spalten
Zitat:
![]() Ich will lediglich in einer Box tabellenorientierte Meldungen ausgeben, wobei einige Wörter farbig hervorgehoben werden sollen. Was wäre denn da die einfachste Lösung? |
AW: Listbox mit verschiedenfarbigen Spalten
OK, dann ist jede Zeile dennoch nur ein Feld.
Jenachdem, wie du nun die Farben änderst.... Wenn du nur die Hintergrundfarbe änderst, aber der VCL das weitere Zeichnen übernehmen läßt, dann geht natürlich nur eine Farbe. Wenn du den Hintergrund komplett selber zeichnest, dann mußt du halt den Zeichenbereich aufteilen (TabWidth) und jeweils die Teile einzeln ausmalen. Oder du verwendest eben den ListView, welcher von Haus aus schon mehrere Spalten kann. [edit] Zitat:
Ich würde es dann doch eher so empfehlen:
Delphi-Quellcode:
ListBox1.Items.Add('First'#9'Second'#9'Third');
|
AW: Listbox mit verschiedenfarbigen Spalten
@iphi
Hat jetzt nicht direkt mit deiner Frage zu tun, aber ich hab mal ein Beispiel geschrieben wie man mehrere Spalten in einer ListBox darstellen kann. Mein Ansatz war anders als bei deinem Beispiel, aber etwas angewandelt kann man damit auch dein Problem lösen . Guck dir mal den Block unter
Delphi-Quellcode:
for k := 0 to...
![]() |
AW: Listbox mit verschiedenfarbigen Spalten
Das sind keine mehreren Spalten im Sinne eines Listviews. Die "spalten" entshene, weil der Text in einer Zeile mit Tabstops getrennt wurde.
|
AW: Listbox mit verschiedenfarbigen Spalten
Liste der Anhänge anzeigen (Anzahl: 2)
Relativ einfach wäre es, in der Listbox die besondere "Spalte" durch farblich veränderten Text hervorzuheben, anstatt den Hintergrund einzelner "Spalten" verändern zu wollen (was "spaltenweise" nicht so ohne weiteres geht).
Für eine Multispalten-Listbox bietet sich übrigens dazu besonders die Komponente MultiColListbox von Mike Heydon an (war 2002 unter dem Titel "Multi Column ListBox with Column Sorting and Resizing" im Quellcode veröffentlicht auf delphi3000.com/articles/article_3360.asp; leider ist delphi3000 inzwischen aus dem Netz verschwunden. Bei Interesse/Bedarf kann ich diese Komponente aber gerne zur Verfügung stellen). Die Komponente lässt sich mühelos mittels ergänzender Properties und entsprechender Set-Funktionen so erweitern, dass ausschließlich in den gewünschte(n) "Spalte(n)" der Text farblich hervorgehoben wird: siehe Anhangsbild und beigefügtes Beispiel (kompiliert; beachte die Möglichkeit zur Sortierung der Spalten nach Klick auf den jeweiligen "Spaltenkopf"). |
AW: Listbox mit verschiedenfarbigen Spalten
@Popov,
danke für den Link. Mit Deinem Code kann ich mein Problem in der Tat lösen. @ASM, die MultiColListbox von Mike Heydon klingt sehr interessant, danke. Kann ich die bitte bekommen? Geht das über die Mailfunktion im Forum? |
AW: Listbox mit verschiedenfarbigen Spalten
Moin...
wenn du mit dieser Listbox spekulierst kannst du auch gleich die Standard Listview verwenden. Da bekommst du noch Extras wie z.B. Icons in den Spalten. :thumb: Desweiteren lassen sich an jedes Item beliebige Objekte dranhängen (z.B. Referenzen auf ein TOtto in einer TOttoList) |
AW: Listbox mit verschiedenfarbigen Spalten
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Beigefügt der originale Code der Unit zur Komponente MultiColListbox. Zur Erweiterung zwecks evt. gewünschter Farbeffekte in der Anzeige einer bestimmten Spalte muss der Code im Minimum nun wie folgt ergänzt werden:
Delphi-Quellcode:
Noch flexibler wird es, wenn man anstelle der reinen Color-Property 'ExposedColor' gleich eine komplette TFont-Property mit den entsprechenden Set- sowie auch Get-Methoden einsetzt; dann lassen sich in der hervorzuhebenden Spalte zusätzlich spezielle Style-Eigenschaften etc. ansprechen (d.h. sowohl setzen als auch abfragen).
TMultiColListbox = class(TCustomPanel)
FExposedColumn: Smallint; FExposedColor: TColor; private {..} procedure SetExposedColumn (AColumn: smallint); procedure SetExposedColor (AColor:TColor); published {..} property ExposedColor: TColor write SetExposedColor; property ExposedColumn: smallint write SetExposedColumn; end; constructor TMultiColListBox.Create(AOwner: TComponent); begin {...} FSetExposedColor:=clRed; // Voreinstellung: keine "Spalte" selektiert FExposedColumn:=-1; end; procedure TMultiColListBox.SetExposedColumn (AColumn: smallint); begin FExposedColumn:=AColumn; end; procedure TMultiColListBox.SetExposedColor (AColor:TColor); begin FExposedColor:=AColor; end; procedure TMultiColListBox.ListBoxDrawItem(Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState); Begin {...} for i := 0 to FHeader.Sections.Count - 1 do begin with LB.Canvas do begin Font:=FFont; if i = FExposedColumn then begin Font.color := FExposedColor; Font.style := [fsbold]; end; end; LB.Canvas.TextOut(Rect.Left + FHeader.Sections.Items[i].Left + 2, Rect.Top, XTractField(Line)); end; {...} End; In der Anwendung sieht die Verwendung der Komponente beispielsweise wie folgt aus:
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin // 2.Spalte rot gefärbt // alle anderen Spalten wie im Objectinspector unter property Font gesetzt with MultiColListbox1 do begin ExposedColor:=clRed; ExposedColumn:=1; // hier: 4 Zeilen à 3 sections = "Spalten" Items.Add('Richard;Wagner;Komponist'); Items.Add('Johann;Strauß;Komponist'); Items.Add('Konrad;Adenauer;Politiker'); Items.Add('Clint;Eastwood;Schauspieler'); end; end; // sehr wichtig! procedure TForm1.FormResize(Sender: TObject); var nSections: integer; ownerHeight, ownerWidth: integer; i: Integer; begin // hier: auf die Form bezeigen // oder ggf. auf ein Panel als Owner der MultiColListbox1 (Align: alClient) anpassen ownerWidth:=self.Width; ownerHeight:=self.Height; with MultiColListbox1 do begin nSections:=Sections.Count; Width:=ownerWidth; Height:=ownerHeight; for i:=0 to nSections-1 do sections[i].Width:=width div nSections; end; end; procedure TForm1.Button1Click(Sender: TObject); begin // jetzt nur 3.Spalte grün färben with MultiColListbox1 do begin ExposedColor:=clGreen; ExposedColumn:=2; invalidate; end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:11 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 by Thomas Breitkreuz