![]() |
ListView Columns und OwnerDraw
Hi,
kann man die Columns einer ListView mit ViewStyle vsReport anders färben ? Wenn ja, wie ? Habe gegooglet und das gefunden:
Delphi-Quellcode:
Was ist HD_ITEM ? Das kennt mein Delphi nicht.
var HeaderHandle : HWND;
hdi : HD_ITEM; i : Integer; begin HeaderHandle := GetDlgItem(lv.Handle, 0); for i := 0 to lv.Columns.Count - 1 do begin hdi.mask := HDI_TEXT and HDI_FORMAT and HDI_WIDTH; hdi.fmt := HDF_LEFT and HDF_OWNERDRAW and HDF_STRING; hdi.cxy := Columns.Items[i].Width; hdi.cchTextMax := Columns.Items[i].Caption.Length(); hdi.pszText := Columns.Items[i].Caption; Header_SetItem(HeaderHandle, index, hdi^); end; |
Re: ListView Columns und OwnerDraw
Delphi-Quellcode:
uses CommCtrl;
|
Re: ListView Columns und OwnerDraw
Thx.
Ein Fehler ist noch übrig geblieben:
Delphi-Quellcode:
Header_SetItem(HeaderHandle, i, hdi^);
[Fehler] code.pas(215): Zeigertyp erwartet |
Re: ListView Columns und OwnerDraw
Vielleicht
Delphi-Quellcode:
?
Header_SetItem(HeaderHandle, i, ^hdi);
|
Re: ListView Columns und OwnerDraw
Delphi-Quellcode:
Header_SetItem(HeaderHandle, i, ^hdi);
[Fehler] Unit1.pas(216): Inkompatible Typen: '_HD_ITEMA' und 'Char' |
Re: ListView Columns und OwnerDraw
Hallo Nils,
das Dach (^) ist einfach überflüssig. Grüße vom marabu |
Re: ListView Columns und OwnerDraw
Danke, jetzt wird der Code schonmal kompiliert. Was muss ich noch machen, dass ich die Farben verändern kann ?
Delphi-Quellcode:
var HeaderHandle : HWND;
hdi : HD_ITEM; i : Integer; begin HeaderHandle := GetDlgItem(lv.Handle, 0); for i := 0 to lv.Columns.Count - 1 do begin hdi.mask := HDI_TEXT and HDI_FORMAT and HDI_WIDTH; hdi.fmt := HDF_LEFT and HDF_OWNERDRAW and HDF_STRING; hdi.cxy := lv.Columns.Items[i].Width; hdi.cchTextMax := Length(lv.Columns.Items[i].Caption); hdi.pszText := PChar(lv.Columns.Items[i].Caption); Header_SetItem(HeaderHandle, i, hdi); end; |
Re: ListView Columns und OwnerDraw
*push*
|
Re: ListView Columns und OwnerDraw
Hallo Nils,
dein Code setzt das Format HDF_OWNERDRAW, das Einfärben geschieht woanders. Ich vermute, dass da noch eine window procedure ist. Dort musst du bei der message WM_PAINT nachschauen. Grüße vom marabu |
Re: ListView Columns und OwnerDraw
Zitat:
|
Re: ListView Columns und OwnerDraw
Liste der Anhänge anzeigen (Anzahl: 1)
[quote="Nils_13"]
Zitat:
Code:
Allerdings in VB mußt du nur übersetzen habe jetzt leider nicht die zeit dazu das für dich zu machen.
Dim i As Integer
picBg.Width = lv.Width picBg.Height = lv.ListItems(1).Height * (lv.ListItems.Count) picBg.ScaleHeight = lv.ListItems.Count picBg.ScaleWidth = 1 picBg.DrawWidth = 1 picBg.Cls For i = 1 To lv.ListItems.Count If lv.ListItems(i).Checked = True Then picBg.Line (0, i - 1)-(1, i), &HC0FFFF, BF Else picBg.Line (0, i - 1)-(1, i), &HFF8080, BF End If Next lv.Picture = picBg.Image picBg ist ne PicBox mußt du eine alternative in Delphi finden. lv = Listview mit lvwReport das gleiche wie vsReport in Delphi gruß |
Re: ListView Columns und OwnerDraw
Das ist leider nicht das, was ich suche. Ich bin auf der Suche nach einer Möglichkeit, die Columns oder auch Header genannt anders zu färben.
|
Re: ListView Columns und OwnerDraw
Hallo Nils,
in deinem Eröffnungsbeitrag hast du mitgeteilt, dass du eine Lösung aus dem Internet gefischt hast. Nachdem dir geholfen wurde diese Quelle zu übersetzen, schreibst du, dass sich dieser Lösungsansatz deinem Verständnis entzieht. Wenn du auf Erklärungen zu diesem Code wartest, dann musst du den Link mitteilen. Wenn du aber nach einer plug-and-play Lösung suchst, dann musst du dir mal alternative ListViews anschauen. ![]() ![]() Grüße vom marabu |
Re: ListView Columns und OwnerDraw
Auf Fremdkomponenten möchte ich verzichten. Ich habe den Code von
![]() |
Re: ListView Columns und OwnerDraw
Hallo Nils,
nach den Hinweisen auf der verlinkten Seite hast du die Wahl: Entweder du leitest eine neue Komponente von T(Custom)ListView ab, welche einen message handler für WM_DRAWITEM bereit stellt (vielleicht aufbauend auf der ![]() Freundliche Grüße |
Re: ListView Columns und OwnerDraw
Hi,
müsste ich DrawItem hier einbauen ?
Delphi-Quellcode:
procedure TPBExListview.WMNotify(var Msg: TWMNotify);
begin inherited; case Msg.NMHdr^.code of HDN_ENDTRACK: DoEndColumnResize(FindColumnIndex(Msg.NMHdr), FindColumnWidth(Msg.NMHdr)); HDN_BEGINTRACK: DoBeginColumnResize(FindColumnIndex(Msg.NMHdr), FindColumnWidth(Msg.NMHdr)); HDN_TRACK: DoColumnResize(FindColumnIndex(Msg.NMHdr), FindColumnWidth(Msg.NMHdr)); end; end; |
Re: ListView Columns und OwnerDraw
Hallo Nils,
WM_NOTIFY ist nicht WM_DRAWITEM - du wirst schon einen eigenen message handler spendieren müssen. Freundliche Grüße |
Re: ListView Columns und OwnerDraw
Hallo,
Delphi-Quellcode:
Was könnte dort denn dann rein ? Wie schon gesagt: Das ist Neuland für mich.
procedure TPBExListview.WMDrawItem(var Msg: TWMDrawItem);
begin inherited; ... end; |
Re: ListView Columns und OwnerDraw
Keiner eine Idee ? :(
|
Re: ListView Columns und OwnerDraw
evtl. hilft dir
![]() ![]() oder ![]() weiter... sag bescheid, wie dus gemacht hast, gibt scheinbar nicht viel zu dem Thema... Gruß Frank |
Re: ListView Columns und OwnerDraw
Ich habe PBExListview weiterentwickelt:
Delphi-Quellcode:
Setzt man allerdings die Komponente auf die Form, tut sich nichts. Warum ?
private
FColumnBrushColor : TColor; [...] protected procedure WMDrawItem(var Message : TWMDrawItem); message WM_DRAWITEM; [...] published property ColumnBrushColor : TColor read FColumnBrushColor write FColumnBrushColor; [...] [...] procedure TColumnListView.WMDrawItem(var Message : TWMDrawItem); var State : TOwnerDrawState; SaveIndex : Integer; begin with Message.DrawItemStruct^ do begin State := TOwnerDrawState(WordRec(LongRec(itemState).Lo)); SaveIndex := SaveDC(hDC); FCanvas.Handle := hDC; FCanvas.Font := Font; FCanvas.Brush.Color := FColumnBrushColor; if itemID = DWORD(-1) then FCanvas.FillRect(rcItem) else DrawItem(Items[itemID], rcItem, State); FCanvas.Handle := 0; RestoreDC(hDC, SaveIndex); end; Message.Result := 1; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:42 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