AGB  ·  Datenschutz  ·  Impressum  







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

ListView Header Farbe (Win32)

Ein Thema von EWeiss · begonnen am 17. Jan 2017 · letzter Beitrag vom 8. Okt 2017
Antwort Antwort
EWeiss
(Gast)

n/a Beiträge
 
#1

AW: ListView Header Farbe (Win32)

  Alt 19. Jan 2017, 10:01
Funktioniert jetzt wollte nur das Ergebnis mitteilen.
Subclass Header
Delphi-Quellcode:
    WM_PAINT:
      begin
        GetClientRect(WinHandle, rc);

        Dc := BeginPaint(WinHandle, ps);

        if not SkinEngine.Composited(WinHandle) then
          Dc := SkinEngine.DoubleBuffer(ps.Hdc, rc.Right, rc.Bottom, CreateBuffer);

        hDCBack := CreateCompatibleDC(Dc);

        GetWindowRect(WinHandle, rw);
        p.x := rw.Left;
        p.y := rw.Top;
        ScreenToClient(GetParent(Handle), p);

        SelectObject(hDCBack, SkinEngine.GetBackBitmap(GetParent(Handle)));
        BitBlt(Dc, 0, 0, rcHeader.Right, rcHeader.Bottom, hDCBack, p.x, p.y, SRCCOPY);

        ItemCount := Header_GetItemCount(WinHandle);
        for IntI := 0 to ItemCount - 1 do
        begin
          Header_GetItemRect(WinHandle, IntI, @rcHeader);

          DrawHeaderItem(WinHandle, Dc, IntI, rcHeader, True);
        end;
        DeleteDC(hDCBack);

        if not SkinEngine.Composited(WinHandle) then
          SkinEngine.DoubleBuffer(0, 0, 0, DestroyBuffer)
        else
          ReleaseDC(WinHandle, Dc);

        EndPaint(WinHandle, ps);
        Result := 0;
        exit;
      end;

  end;
  Result := CallWindowProc(FPrevHeaderProc, WinHandle, Msg, wP, lP);
end;
Drawitems
Delphi-Quellcode:
procedure TSkinListView.DrawHeaderItem(WinHandle: hWnd; Dc: Hdc; Index: Integer; Rect: TRect;
  Selected: Bool);
var
  Text: PWideChar;
  buf: array [0 .. 255] of Char;
  Item: THDItem;
  rcHeader: TRect;
  Img: Cardinal;
  Graphics: Cardinal;
  rc: TRect;
  rw: TRect;
  lP: TPoint;
begin
  Item.mask := HDI_TEXT or HDI_FORMAT { or HDI_BITMAP } or HDI_WIDTH;
  Item.pszText := buf;
  Item.fmt := HDF_LEFT or HDF_OWNERDRAW { or HDF_BITMAP } or HDF_STRING;
  Item.cchTextMax := sizeof(buf);

  Header_GetItemRect(WinHandle, Index, @rcHeader);

  ZeroMemory(@buf, sizeof(buf));
  Header_GetItem(WinHandle, Index, Item);
  Text := buf;

  SetBkMode(Dc, TRANSPARENT);

  if GetShadow then
  begin
    if IsWindowEnabled(WinHandle) then
      Color := GetShadowColor
    else
      Color := RGB(255, 255, 255);

    Rect.Top := (((rcHeader.Bottom - FPointSize) div 2) div 2 + 1);
    DrawTextToDC(Dc, Text, Rect, Color, FFontName, FPointSize, FFontStyle, 0, 0);

    if IsWindowEnabled(WinHandle) then
    begin
      if Selected then
        Color := AktForecolor
      else
        Color := InAktForecolor;
    end
    else
      Color := RGB(140, 140, 140);

    DrawTextToDC(Dc, Text, Rect, Color, FFontName, FPointSize, FFontStyle, FShadowOffset, 0);

    if GdipCreateFromHDC(Dc, Graphics) = OK then
    begin
      Img := Cardinal(GetProperty(Handle, PROP_IMAGE_SELECTED));
      GetClientRect(WinHandle, rc);

      GetWindowRect(WinHandle, rw);
      lP.x := rw.Left;
      lP.y := rw.Top;
      ScreenToClient(GetParent(Handle), lP);

      SkinEngine.PaintButton(Graphics, 4, Img, rc.Left, rc.Top, rc.Right, rc.Bottom, BS_PUSHBUTTON);

      SkinEngine.PaintButton(Graphics, 4, Img, rcHeader.Left, rcHeader.Top,
        rcHeader.Right - rcHeader.Left, rcHeader.Bottom, BS_PUSHBUTTON);

      GdipDeleteGraphics(Graphics);
    end;
  end;
end;
Ergebnis siehe Pic.
Kann mich jetzt mit den Header Icons beschäftigen.

gruss

Geändert von EWeiss (11. Jul 2019 um 15:45 Uhr)
  Mit Zitat antworten Zitat
eholzer

Registriert seit: 22. Okt 2009
51 Beiträge
 
#2

AW: ListView Header Farbe (Win32)

  Alt 8. Okt 2017, 20:48
Hallo,

könntet ihr vielleicht zu dem Thema (ListView Header Farbe setzen) ein kleines Demoprogramm anhängen?

Gruß,
Eric
  Mit Zitat antworten Zitat
Antwort Antwort


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 18:08 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