![]() |
Control neu zeichnen?
Hallo allerseits,
nachdem ich es endlich geschafft habe, die kleinen Pfeilchen in die ListView zu bekommen, stehe ich vor einem kleineren Problem: Nachdem die Groesse einer Column veraendert wurde, verschwindet das Bildchen, und ich stehe vor dem Problem, dass ich es neu zeichnen muss (wer haette das gedacht :zwinker:). Ich habe versucht es im OnCustomDraw, bei WMPaint oder auch bei PaintWindow neu zu zeichnen, aber nein, jedesmal nachdem ich die Groesse der Column veraendert habe, war das Icon wieder weg :roll: Kann mir jemand sagen, welche Message ich abfangen muss, um das Bitmap wieder auf die Column zeichnen zu koennen? Thanx and Greetz alcaeus |
Re: Control neu zeichnen?
Zitat:
|
Re: Control neu zeichnen?
Im Moment zeichne ich die Pfeilchen im ColumnClick mit diesem Code:
Delphi-Quellcode:
Die Pfeile bleiben waehrend des Resizen der Columns schoen brav da wo sie hingehoeren, und werden auch mitgeschoben, aber sobald ich mit dem Resizen aufhoere, wird anscheinend der Header neu gezeichnet und das Pfeilchen ist weg.
procedure TSortListView.DrawSortImage;
var Buf: array[0..MAX_PATH-1] of Char; HDItem: THDItem; begin if not FShowSortImages then exit; if FHeader = 0 then FHeader := ListView_GetHeader(Self.Handle); HDItem.Mask := HDI_FORMAT or HDI_IMAGE or HDI_ORDER or HDI_TEXT or HDI_WIDTH; HDItem.pszText := Buf; HDItem.cchTextMax := SizeOf(Buf); Header_GetItem(FHeader, FLastSorted, HDItem); HDItem.Mask := HDItem.Mask or HDI_BITMAP; HDItem.fmt := HDItem.fmt or HDF_BITMAP or HDF_BITMAP_ON_RIGHT; if FSortDir = sdAscending then HDItem.hbm := FAscImage.Handle else HDItem.hbm := FDescImage.Handle; Header_SetItem(FHeader, FLastSorted, HDItem); end; Greetz alcaeus |
Re: Control neu zeichnen?
Jetzt müsste ich nur noch wissen, wo du die Procedure "DrawSortImage" aufrufst. ;-)
Edit: Ich gehe davon aus, das du TSortListView von TListView abgeleitet hast. Oder? |
Re: Control neu zeichnen?
Zitat:
Delphi-Quellcode:
Aber wie gesagt...im ColumnClick (also beim Klick auf eine Spalte).
inherited Create(AOwner);
inherited OnColumnClick := ColumnClick; inherited OnCompare := Compare; Und wenn du den Code auch noch willst, dann bitte:
Delphi-Quellcode:
Der ClearSortImage-Aufruf sorgt nur dafuer, dass das alte Bildchen geloescht wird.
procedure TSortListView.ColumnClick(Sender: TObject;
Column: TListColumn); begin ClearSortImage; if Assigned(OnColumnClick) then OnColumnClick(Sender, Column); FColumnToSort := Column.Index; if FColumnToSort = FLastSorted then begin FSortDir := TSortDir(1-Ord(FSortDir)); end else begin FSortDir := sdAscending; end; FLastSorted := FColumnToSort; (Sender as TCustomListView).AlphaSort; DrawSortImage; end; Greetz alcaeus [edit] Zitat:
[/edit] |
Re: Control neu zeichnen?
Hallo,
den Indikator für die Spaltensortierung setze ich stets über listColumn.ImageIndex - jetzt schäme ich mich fast ein wenig. Grüße vom marabu Schreibfehler: ImageIndex, nicht ItemIndex - war schon klar denke ich. |
Re: Control neu zeichnen?
Evtl hilft es, wenn die Procedure UpdateColumns überschreibst und dort DrawSortImage aufrufst.
Delphi-Quellcode:
Procedure UpdateColumns;override;
Procedure TSortListview.UpdateColumns; begin inherited; DrawSortImage; end; (nicht getestet) |
Re: Control neu zeichnen?
Nope. override ging nicht, da die Methode in der Vorgaengerklasse als static deklariert ist, also habe ich reintroduce genommen. Doch da, kein Ergebnis. Danke trotzdem
Greetz alcaeus |
Re: Control neu zeichnen?
Zitat:
Normalerweise sollte Paint überschrieben werden. Geht aber nur bei Objecten, die von TCustomControl abgeleitet sind. Evtl. Repaint überscheiben. Oder nachschauen, wie Paint in TCustomControl implementiert ist. |
Re: Control neu zeichnen?
Schonmal versucht den Header (also nur das Headercontrol, das gehört ja eigentlich nicht zum ListView) zu subclassen?
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:46 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