AGB  ·  Datenschutz  ·  Impressum  







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

Listbox mit verschiedenfarbigen Spalten

Ein Thema von iphi · begonnen am 24. Nov 2013 · letzter Beitrag vom 4. Dez 2013
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#1

AW: Listbox mit verschiedenfarbigen Spalten

  Alt 25. Nov 2013, 01:30
Das sind keine mehreren Spalten im Sinne eines Listviews. Die "spalten" entshene, weil der Text in einer Zeile mit Tabstops getrennt wurde.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
ASM

Registriert seit: 15. Aug 2004
165 Beiträge
 
Delphi 7 Enterprise
 
#2

AW: Listbox mit verschiedenfarbigen Spalten

  Alt 25. Nov 2013, 15:14
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").
Angehängte Grafiken
Dateityp: jpg MultiColumnListbox.jpg (24,0 KB, 41x aufgerufen)
Angehängte Dateien
Dateityp: zip MultiColumnListbox.zip (177,6 KB, 28x aufgerufen)
  Mit Zitat antworten Zitat
iphi

Registriert seit: 13. Feb 2009
266 Beiträge
 
Delphi 7 Personal
 
#3

AW: Listbox mit verschiedenfarbigen Spalten

  Alt 26. Nov 2013, 15:39
@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?
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.458 Beiträge
 
Delphi 12 Athens
 
#4

AW: Listbox mit verschiedenfarbigen Spalten

  Alt 26. Nov 2013, 15:47
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. Desweiteren lassen sich an jedes Item beliebige Objekte dranhängen (z.B. Referenzen auf ein TOtto in einer TOttoList)
  Mit Zitat antworten Zitat
ASM

Registriert seit: 15. Aug 2004
165 Beiträge
 
Delphi 7 Enterprise
 
#5

AW: Listbox mit verschiedenfarbigen Spalten

  Alt 26. Nov 2013, 23:13
die MultiColListbox von Mike Heydon klingt sehr interessant, danke. Kann ich die bitte bekommen?

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:
 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;
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).

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;
Angehängte Dateien
Dateityp: zip MultiColListbox_Src.zip (4,7 KB, 19x aufgerufen)
  Mit Zitat antworten Zitat
iphi

Registriert seit: 13. Feb 2009
266 Beiträge
 
Delphi 7 Personal
 
#6

AW: Listbox mit verschiedenfarbigen Spalten

  Alt 27. Nov 2013, 15:08
Vielen Dank für den Code!
Funktioniert prima
  Mit Zitat antworten Zitat
iphi

Registriert seit: 13. Feb 2009
266 Beiträge
 
Delphi 7 Personal
 
#7

AW: Listbox mit verschiedenfarbigen Spalten

  Alt 29. Nov 2013, 15:59
Die MultiColListBox verhält sich merkwürdig beim Verändern von Width oder Height.
Veränderung der einen Property verändert die andere und umgekehrt. Warum?

Auch Align verhält sich nicht richtig. Die beiden Subkomponenten bleiben nicht übereinander.
Wie programmiert man Align bei so einer zusammengesetzten Komponente denn richtig?
  Mit Zitat antworten Zitat
ASM

Registriert seit: 15. Aug 2004
165 Beiträge
 
Delphi 7 Enterprise
 
#8

AW: Listbox mit verschiedenfarbigen Spalten

  Alt 29. Nov 2013, 22:59
Die von Dir bemängelte Wechselwirkung zwischen Weite und Höhe der MultiListbox kann ich hier nicht reproduzieren. Bei mir gibt es keine solche.

Was das von Dir beschriebene Fehlverhalten beim Align Deiner Multilistbox angeht, so kann ich das Problem aus Deiner kurzen Anmerkung heraus leider nicht verstehen. Was soll heißen [Zitat]"Die beiden Subkomponenten bleiben nicht übereinander." ? Welche Subkomponenten meinst Du ? Ich habe bei mir bisher nie ein Problem beim Alignment der Multilistbox gehabt.

Ich denke, hier hilft als Voraussetzung zu einer Analyse der Ursachen Deiner Probleme nur ein konkreter Code dessen weiter, was Du machst bzw. machen willst.
  Mit Zitat antworten Zitat
iphi

Registriert seit: 13. Feb 2009
266 Beiträge
 
Delphi 7 Personal
 
#9

AW: Listbox mit verschiedenfarbigen Spalten

  Alt 30. Nov 2013, 14:06
Zitat:
Die von Dir bemängelte Wechselwirkung zwischen Weite und Höhe der MultiListbox kann ich hier nicht reproduzieren.
Wollte gerade einen knappen Beispielcode präparieren. Ich bekomme das jetzt auch nicht mehr hin. Da ist irgendetwas seltsames passiert.

Zitat:
"Die beiden Subkomponenten bleiben nicht übereinander."
Das bezieht sich auf das Verhalten während Design-Time, wenn ich das Align im Object-Inspector ändere. Das Resultat auf der Form sieht dann merkwürdig aus.
Zur Runtime ist aber alles in Ordnung. Die Form sieht dann so aus wie sie soll. Woran kann das liegen?
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#10

AW: Listbox mit verschiedenfarbigen Spalten

  Alt 3. Dez 2013, 18:33
Mal eine blöde Frage. warum nimmst du keinen Listview oder ein Stringgrid? Damit könntest du dir wahrscheinlich über die Hälfte der Arbeit sparen.
Michael
Ein Teil meines Codes würde euch verunsichern.
  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 08:32 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