Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi ListView - Column-Header einfärben? (https://www.delphipraxis.net/59685-listview-column-header-einfaerben.html)

FriFra 27. Dez 2005 11:24


ListView - Column-Header einfärben?
 
Wie kann ich die Farbe der Spaltentitel in einer ListView ändern? Standard ist ja immer clBtnFace... ich würde das ganze jedoch lieber komplett selber zeichnen (inkl Border)...

Helmi 27. Dez 2005 12:47

Re: ListView - Column-Header einfärben?
 
* Umleitung bau* http://www.dbr-software.de/delphi/colorcol.php

FriFra 1. Jan 2006 15:58

Re: ListView - Column-Header einfärben?
 
Hm... daer Code gefällt mir nicht so gut, da ma dafür zuvier "basteln" muss...

Vielleicht geht das ja auch irgendwie direkter mit Messages?
Delphi-Quellcode:
const
  LVM_GETHEADER = LVM_FIRST + 31;
var
  hHeader: THandle;
begin
  {handle vom header}
  hHeader := SendMessage(ListView1.Handle, LVM_GETHEADER, 0, 0);

  SendMessage(hHeader, ??? , ColorToRGB(clRed), 1); //<- Vielleicht hat noch jemand eine Idee...

100nF 1. Jan 2006 16:52

Re: ListView - Column-Header einfärben?
 
hi,

ich wollte das auch schon machen, und ich habs so geschafft: klick

FriFra 1. Jan 2006 17:35

Re: ListView - Column-Header einfärben?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Naja, das Ergebnis ist auch nicht 100% brauchbar...
Der Bereich des Headers, wo sich keine definierte Column befindet wird nicht eigefärbt (s. Anhang)

100nF 1. Jan 2006 18:15

Re: ListView - Column-Header einfärben?
 
also bei mir wird auch dieser teil eingefärbt.
wahrscheinlich liegt es daran, dass ich den code noch ein bisschen abgeändert habe.
ich habe ihn mal aus dem source meines programmes rauskopiert:
Delphi-Quellcode:
procedure TForm1.HeaderWndProc1(var Message: TMessage);
Var XCanvas: TCanvas;
    XDC: HDC;
    ARect: TRect;
    i:integer;
    Spaltenanfang:integer;
begin
  if Assigned(FOldWndProc1) then
    Message.Result := CallWindowProc(FOldWndProc1, FHeader1, Message.Msg,
                                        Message.WParam, Message.LParam);
  case Message.Msg of
    WM_PAINT:
    begin
      XCanvas := TCanvas.Create;
      XDC := GetWindowDC(FHeader1);
      try
        XCanvas.Handle := XDC;
        Spaltenanfang:=0;
        Windows.GetClientRect(FHeader1, ARect);
        Arect.left:=Spaltenanfang;
        Arect.right:=Spaltenanfang+listview1.width;
        InflateRect(arect,-1,-1);
        //Hintergrund
        XCanvas.Brush.Color:=listviewheaderscolor;
        xcanvas.FillRect(arect);
        Frame3d(XCanvas, ARect, clBtnHighlight,clBtnShadow,1);
        for i:=0 to listview1.Columns.Count-1 do
          begin
            //rect der aktuellen Spalte ermitteln
            Windows.GetClientRect(FHeader1, ARect);
            Arect.left:=Spaltenanfang;
            Arect.right:=Spaltenanfang+listview1.Column[i].Width;
            inc(Spaltenanfang,listview1.Column[i].Width);
            InflateRect(arect,-1,-1);
            //Hintergrund
            XCanvas.Brush.Color:=listviewheaderscolor;
            xcanvas.FillRect(arect);
            Frame3d(XCanvas, ARect, clBtnHighlight,clBtnShadow,1);
            //Text ausgeben
            drawtext(Xcanvas.Handle,pchar(listview1.Column[i].caption), length(listview1.Column[i].caption),arect,dt_left);
          end;
      finally
        ReleaseDC(FHeader1, XDC);
        XCanvas.Free;
      end;
    end;
  end;
end;

FriFra 1. Jan 2006 18:25

Re: ListView - Column-Header einfärben?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ist schon besser ;) ... ABER jetzt wirde der Bevel falsch gezeichnet (s. Anhang)

100nF 1. Jan 2006 18:32

Re: ListView - Column-Header einfärben?
 
ja klar, aber das ist ja nur der letzte bevel...

mir macht das nichts aus.
wenns dir nicht passt, kannst du es ja versuchen zu ändern.

Luckie 1. Jan 2006 18:35

Re: ListView - Column-Header einfärben?
 
@FriFra: würdest du bitte die Screenshots anhängen? In zwei Wochen sind die von deinem Server verschwunden und niemand kan mehr mit deinem Posting was anfangen.

FriFra 1. Jan 2006 18:38

Re: ListView - Column-Header einfärben?
 
Ok, mach ich... ABER bisher hab ich noch nie irgendwelche Bilder aus dem bettr. Ordener auf meinem Server gelöscht. Warum auch?

Luckie 1. Jan 2006 18:43

Re: ListView - Column-Header einfärben?
 
Irgendwann wirst du den bestimmt mal ausmisten. Aber darüber will ich jetzt nicht weiter diskutieren. Es ist nur so, dass andere ihn wohl regelmäßig löschen und damit keiner sagt: "Der macht das aber auch." bitte generell Screenshots anhängen.

FriFra 1. Jan 2006 18:49

Re: ListView - Column-Header einfärben?
 
Ich finde es aber eben schlecht, dass man das Bild SO nicht direkt sieht...

Luckie 1. Jan 2006 18:52

Re: ListView - Column-Header einfärben?
 
Und manch ein Modembenutzer ist froh drum. Aber darüber will ich hier und jetzt nicht diskutieren, da es nicht hier her gehört.

Keldorn 1. Jan 2006 19:37

Re: ListView - Column-Header einfärben?
 
statt
Zitat:

Frame3d(XCanvas, ARect, clBtnHighlight,clBtnShadow,1);
Delphi-Quellcode:
uses graphutil
Frame3d(XCanvas, ARect, gethighlightcolor(listviewheaderscolor),gethighlightcolor(listviewheaderscolor),1);
und die Überschrift erhält im Hintergrund auch das "richtige" 3D-aussehen.

Mfg Frank


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:35 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