AGB  ·  Datenschutz  ·  Impressum  







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

Änderung der Farben bei TListView

Ein Thema von s.h.a.r.k · begonnen am 30. Mai 2005 · letzter Beitrag vom 30. Mai 2005
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#11

Re: Änderung der Farben bei TListView

  Alt 30. Mai 2005, 19:04
hätte gehofft dass es dafür ne einfachere Funktion gibt... Wie Update oder sowas - hab aber bisher nix gefunden. Dann muss ich wohl oder übel komplett neu zeichen. Das einzigste Problem ist dann, dass ich zwei Spalten habe: Eine, bei der der Text links angeordnet wird und eine andere bei der der text rechts angeordnet wird. Könntest du mir daher sagen wie ich einen Text nach links schreiben, d.h. dass der Text auf der rechten Seite bünfig ist?!
mfg shark
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
dadu

Registriert seit: 17. Apr 2003
Ort: Dattenberg
102 Beiträge
 
Delphi 2005 Personal
 
#12

Re: Änderung der Farben bei TListView

  Alt 30. Mai 2005, 21:16
Hi Leute,
da ich demnächst vor dem selben Problem stehe, habe ich hier mal eine allgemein zu gebrauchene Procedure geschrieben.
Wäre gut wenn ihr die mal testen könntet, bei mir läuft sie.

Delphi-Quellcode:
{ TextOutOnListview
  written by David Dung 2005

  Diese Procedure ermöglicht die Manipulation des Hintergrundes einer
  TListview. Z.B. zum Verändern der Markierungsfarben.

  Vorgehen:
  Quellcode im OnCustomDrawItem-Event der Listview
  - "DefaultDraw" auf "False" setzten
  - Beliebig auf die Zeichenfläche malen
  - TextOutOnListview("die Listview", Item.Index); aufrufen
    Hiermit wird der Inhalt der Listview mit transparenter Hintergrund-
    und Schriftfarbe des Listview auf die Zeichenfläche kopiert. }


procedure TextOutOnListview(Listview: tListview; Index: integer);

  { GetTextOutPosX

    Diese Funktion gibt die x Position zurück, an der der Text gezeichnet
    werden muss }


  function GetTextOutPosX(Column: integer; Text: string): integer;
  var
    i: integer;
  begin
    //Linksbündig?
    if Listview.Column[Column].Alignment = taleftJustify then
      begin
        //Standard Rand von links: 4 pixel
        result := 4;
        //Breiten aller Spalten zusammenrechnen
        for i := 0 to Column - 1 do
          result := result + Listview.Column[i].Width + 2;
      end
    else
      //Rechtsbündig?
      if Listview.Column[Column].Alignment = taRightJustify then
        begin
          result := 0;
          //Breiten aller Spalten zusammenrechnen
          for i := 0 to Column - 1 do
            result := result + Listview.Column[i].Width;
          //Von der Position die Textbreite abziehen und den Wert von 6 Pixeln für den Rand rechts
          result := result + Listview.Column[Column].Width - Listview.Canvas.TextWidth(Text) - 6;
        end
      else
        //Mittig?
        if Listview.Column[Column].Alignment = taCenter then
          begin
            result := 0;
          //Breiten aller Spalten zusammenrechnen
            for i := 0 to Column - 1 do
              result := result + Listview.Column[i].Width;
          //Von der Position die halbe Spaltenbreite dazu addieren und die halbe Textbreite wieder abziehen
            result := result + trunc((Listview.Column[Column].Width) / 2 - Listview.Canvas.TextWidth(Text) / 2);
          end;
  end;

var
  cols: integer;
begin
  //Hintergrundfarbe durchsichtig
  listview.canvas.Brush.Style := bsClear;
  //Text der ersten Spalte kopieren
  listview.Canvas.TextOut(GetTextOutPosX(0, listview.Items[index].caption), Listview.Items[index].Top, listview.Items[index].caption);

  for cols := 1 to listview.Columns.Count - 1 do
    //Weitere Columns zeichnen
    listview.Canvas.TextOut(GetTextOutPosX(cols, listview.Items[index].SubItems[cols - 1]), Listview.Items[index].Top, listview.Items[index].SubItems[cols - 1]);

  //Hintergrundfarbe wieder herstellen
  listview.canvas.Brush.Style := bsSolid;

end;
Bsp:
Delphi-Quellcode:
procedure TForm1.ListView1CustomDrawItem(Sender: TCustomListView;
  Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
begin
  DefaultDraw := false;
  
  //Hier könnt ihr jetzt alles auf Sender.Canvas malen, was ihr wollt

  //Am Ende meine Procedure aufrufen um Text widerherzustellen
  TextOutOnListview(Listview1, Item.Index);
end;
[Edit] Jetzt kommt die Procedure auch mit mittigen Spalten zurecht.[/Edit]
DaDu
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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:39 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