![]() |
Re: TreeView: Item komplett markieren?
Zitat:
Delphi-Quellcode:
Sender.Canvas.Font.Assign(Sender.Font);
|
Re: TreeView: Item komplett markieren?
Moin Flocke,
soweit bin ich (Dank der anderen Leute) schon gewesen, aber die Schriftart aendert sich gleichzeitig mit :( |
Re: TreeView: Item komplett markieren?
*schieb*
|
Re: TreeView: Item komplett markieren?
Das FillRect stört die VCL gar nicht, es werden Veränderungen am Brush und am Font protokolliert.
Probier mal die markierte Zeile einzufügen (ungetestet, wär allerdings ein ziemlich dreckiger Trick...)
Delphi-Quellcode:
Alternativ zeichne den Hintergrund mit dem Windows-API (ebenfalls ungetestet):
procedure TForm1.TreeView1CustomDrawItem(Sender: TCustomTreeView;
Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean); var NodeRect: TRect; begin NodeRect := Node.DisplayRect(False); Sender.Canvas.Brush.OnChange := nil; //<--- HIER if cdsSelected in State then Sender.Canvas.Brush.Color := clLime else Sender.Canvas.Brush.Color := TTreeView(Sender).Color; Sender.Canvas.FillRect(NodeRect); DefaultDraw := True; end;
Delphi-Quellcode:
var
hbr: THandle; begin ... if cdsSelected in State then hbr := Windows.CreateSolidBrush(ColorToRGB(clLime)); else hbr := Windows.CreateSolidBrush(ColorToRGB(TTreeView(Sender).Color)); if hbr = 0 then RaiseLastWin32Error; try Windows.FillRect(Canvas.Handle, NodeRect, hbr); finally Windows.DeleteObject(hbr); end; ... end; |
Re: TreeView: Item komplett markieren?
Ich hatte ein ganz ähnliches (naja eigentlich das gleiche Problem mit einem TListView, das ich in CustomDrawItem zeichnete. Das löste sich ganz urplötzlich in Wohlgefallen auf als ich statt CustomDrawItem AdvancedCustomDrawItem benutzte.
Zitat:
|
Re: TreeView: Item komplett markieren?
Moin Flocke,
ich habe beide Beispiele ausprobiert (Danke dafür übrigens ;)). Ohne die Beispiele hat sich das ganze so verhalten: Die Schrift der Items war falsch(fett usw) bis auf das aktuelle markierte Item - das war richtig dargstellt bis es die Markierung verliert. Nach Beispiel1 war es so, das die Items alle Fett waren - auch das markierte. Nach Beispiel2 waren auch alle Fett und der grüne Hintergrund für das Item war wieder im Standardblau :( Ich werd auch nicht so schlau draus WO genau da der Bug ist :\ @Tigerman: Das Problem beim TreeView ist, das bei "OnAdvanedDrawItem" die Grafiken nicht gezeichnet werden, bzw mein Hintergrund überdeckt die :(. das "[+]" der Bäume fehlt dann z.B |
Re: TreeView: Item komplett markieren?
Zitat:
|
Re: TreeView: Item komplett markieren?
Moin Flocke,
ich habe es so probiert:
Delphi-Quellcode:
Die [+] sowie die Beschriftung der Items sind nicht zu sehen, nur die schwarze Markierung auf weiss ist dort.
procedure TForm1.TreeView1AdvancedCustomDrawItem(Sender: TCustomTreeView;
Node: TTreeNode; State: TCustomDrawState; Stage: TCustomDrawStage; var PaintImages, DefaultDraw: Boolean); begin with TreeView1.Canvas do begin if cdsSelected in State then begin Brush.Color := clBlack; Font.Color := clWhite; end else begin Brush.Color := clWhite; Font.Color := clBlack; end; FillRect(Node.DisplayRect(false)); end; Stage := cdPrePaint; PaintImages := True; DefaultDraw := True; end; Ist hier etwas falsch? |
Re: TreeView: Item komplett markieren?
Du darfst an Stage nichts zuweisen sondern musst es auswerten!
Delphi-Quellcode:
procedure TForm1.TreeView1AdvancedCustomDrawItem(Sender: TCustomTreeView;
Node: TTreeNode; State: TCustomDrawState; Stage: TCustomDrawStage; var PaintImages, DefaultDraw: Boolean); begin if Stage = cdPrePaint then with TreeView1.Canvas do begin if cdsSelected in State then begin Brush.Color := clBlack; Font.Color := clWhite; end else begin Brush.Color := clWhite; Font.Color := clBlack; end; FillRect(Node.DisplayRect(false)); end; // Bei den beiden bin ich mir nicht sicher, ob sie noch in das erste IF gehören PaintImages := True; DefaultDraw := True; end; |
Re: TreeView: Item komplett markieren?
Ahhhhh, es klappt!!! Hab gar nicht gesehen das "Stage" _kein_ var-parameter ist :oops:
Danke @tigerman für die Idee mit diesem Event Danke @Flocke für die intensive Hilfe :) Eine letzt Frage dazu nurnoch und zwar, wieso sieht es ohne XP-Manifest so aus: ![]() und mit so wie es soll: ![]() ? Dann sehen Win2kuser usw es nicht richtig oder? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:24 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