Thema: Delphi TListView.OnDrawItem

Einzelnen Beitrag anzeigen

WojTec

Registriert seit: 17. Mai 2007
482 Beiträge
 
Delphi XE6 Professional
 
#20

Re: TListView.OnDrawItem

  Alt 17. Nov 2010, 10:33
Form:
Delphi-Quellcode:
object Form20: TForm20
  Left = 0
  Top = 0
  Caption = 'Form20'
  ClientHeight = 202
  ClientWidth = 331
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'Tahoma'
  Font.Style = []
  OldCreateOrder = False
  OnCreate = FormCreate
  OnDestroy = FormDestroy
  PixelsPerInch = 96
  TextHeight = 13
  object lvRecentFiles: TListView
    Left = 8
    Top = 8
    Width = 225
    Height = 175
    Columns = <
      item
        Caption = 'Recent files'
        Width = 221
      end>
    ColumnClick = False
    DoubleBuffered = True
    Groups = <
      item
        Header = 'Recent files'
        GroupID = 0
        State = [lgsNormal]
        HeaderAlign = taLeftJustify
        FooterAlign = taLeftJustify
        TitleImage = -1
        ExtendedImage = -1
      end>
    Items.ItemData = {
      03C60000000300000000000000FFFFFFFFFFFFFFFF0000000000000000000000
      001F43003A005C00570069006E0064006F00770073005C007300790073007400
      65006D00330032005C005300680065006C006C00330032002E0064006C006C00
      00000000FFFFFFFFFFFFFFFF0000000000000000000000000B43003A005C0062
      006F006F0074002E0069006E00690000000000FFFFFFFFFFFFFFFF0000000000
      000000000000001258003A005C006E006F006E00650078006900730074006500
      6E0074002E00640061007400}

    OwnerDraw = True
    GroupView = True
    ReadOnly = True
    RowSelect = True
    ParentDoubleBuffered = False
    ShowColumnHeaders = False
    TabOrder = 0
    ViewStyle = vsReport
    OnCustomDraw = lvRecentFilesCustomDraw
    OnCustomDrawItem = lvRecentFilesCustomDrawItem
    OnDrawItem = lvRecentFilesDrawItem
  end
end
Source:
Delphi-Quellcode:
unit Unit20;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ComCtrls, UxTheme;

type
  TForm20 = class(TForm)
    lvRecentFiles: TListView;
    procedure lvRecentFilesDrawItem(Sender: TCustomListView; Item: TListItem;
      Rect: TRect; State: TOwnerDrawState);
    procedure lvRecentFilesCustomDraw(Sender: TCustomListView;
      const ARect: TRect; var DefaultDraw: Boolean);
    procedure lvRecentFilesCustomDrawItem(Sender: TCustomListView;
      Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
    Theme: hTheme;
  public
    { Public declarations }
  end;

var
  Form20: TForm20;

implementation

{$R *.dfm}

procedure TForm20.FormCreate(Sender: TObject);
begin
  SetWindowTheme(lvRecentFiles.Handle, 'Explorer', nil);
  Theme := OpenThemeData(0, 'ListView');
end;

procedure TForm20.FormDestroy(Sender: TObject);
begin
  CloseThemeData(Theme);
end;

procedure TForm20.lvRecentFilesCustomDraw(Sender: TCustomListView;
  const ARect: TRect; var DefaultDraw: Boolean);
//var
// StateId: Integer;
begin
// StateId := LIS_SELECTED; // LIS_SELECTEDNOTFOCUS // LIS_NORMAL
// DrawThemeBackground(
// Theme,
// lvRecentFiles.Canvas.Handle,
// LVP_LISTITEM,
// StateId,
// ARect,
// nil
// );
  DefaultDraw := True;
end;

procedure TForm20.lvRecentFilesCustomDrawItem(Sender: TCustomListView;
  Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
begin
  DefaultDraw := True;
end;

procedure TForm20.lvRecentFilesDrawItem(Sender: TCustomListView;
  Item: TListItem; Rect: TRect; State: TOwnerDrawState);
var
  R: TRect;
  S: string;
begin
  S := Item.Caption;

  with lvRecentFiles, lvRecentFiles.Canvas do
  begin
    if FileExists(S) then
      Font.Color := clWindowText
    else
      Font.Color := clGrayText
    ;

    R := Classes.Rect(Rect.Left + 6, Rect.Top + 3, Rect.Right, Rect.Bottom - 2);
    TextRect(R, S, [tfEndEllipsis]);
  end;
end;

end.
Group header has selection, items not

Screen attached.
Miniaturansicht angehängter Grafiken
listview.jpg  
  Mit Zitat antworten Zitat