![]() |
OnAdvancedCustomDrawSubitem ändert nachfolgende Spalten
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
ich male in meiner (virtuellen) ListView, ViewStyle = vsReport, mit folgendem Code Sterne in eine meiner Spalten:
Delphi-Quellcode:
Das funktioniert auch prima. Nur wird jetzt plötzlich die Schrift in der Spalte rechts davon in einer anderen Schrift dargestellt. Scheint nur eine neue Schriftgröße zu sein.
procedure TfrmMain.lvTasksAdvancedCustomDrawSubItem(Sender: TCustomListView;
Item: TListItem; SubItem: Integer; State: TCustomDrawState; Stage: TCustomDrawStage; var DefaultDraw: Boolean); var Task: TTask; Rect: TRect; i: integer; begin if Stage = cdPostPaint then if SubItem = 2 then begin Task := Item.Data; // Obtain column rectangle for this item: Rect := Item.DisplayRect(drBounds); for i := 0 to SubItem - 1 do Rect.Left := Rect.Left + Sender.Column[i].Width; Rect.Right := Rect.Left + Sender.Column[SubItem].Width; for i := ord(low(TTaskPriority)) to ord(Task.Priority) do begin Sender.Canvas.Draw(Rect.Left,Rect.Top,FStarBitmap); Rect.Left := Rect.Left + FStarBitmap.Width; end; end; end; Das seltsame daran: Beim Auswerten des Sender.Canvas.Font-Objekts werden mir die ganz normalen Werte angezeigt, und sogar eine Neuzuweisung der Schriftgröße bringt mir die vorgesehene Schriftart nicht wieder zurück! :evil: Das Problem tritt auf, sobald irgendeine Zeichenoperation mit dem Canvas durchgeführt wird. Kennt jemand das Problem, und weiß vielleicht sogar eine Lösung? Schaut mir doch sehr nach einem Bug in Delphi aus! |
Re: OnAdvancedCustomDrawSubitem ändert nachfolgende Spalten
hey, also mir ist das problem nur einmal aufgefallen, da ich normaler weiße die images in der letzten spalte zeichne
naja ne lösung wäre ne andere schriftart zu benutzen anstatt die die du im Object Inspector eingestellt hast, zb. du hast MS Sans Serif eingestellt als font im ListView, dann schreibst im code zb "Font.Name := 'Arial'"
Delphi-Quellcode:
ich weiß es ist nicht die beste lösung ist aber ich glaube auch das es ein problem von Delphi ist
// ist nur ein beispiel code ..
procedure TForm1.ListView1CustomDrawSubItem(Sender: TCustomListView; Item: TListItem; SubItem: Integer; State: TCustomDrawState; var DefaultDraw: Boolean); var B: TBitmap; begin if SubItem = 1 then begin DefaultDraw := False; B := TBitmap.Create; ImageList1.GetBitmap(0, B); ListView1.Canvas.Draw(ListView1.Column[0].Width, Item.Top, b); B.Free; end else begin DefaultDraw := True; Sender.Canvas.Font.Name := 'Arial'; end; end; // und hier auch nochmal die Font Ändern da sonst .Caption auch die font ändert .. :O procedure TForm1.ListView1CustomDrawItem(Sender: TCustomListView; Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean); begin Sender.Canvas.Font.Name := 'Arial'; end; cya, ErazerZ |
Re: OnAdvancedCustomDrawSubitem ändert nachfolgende Spalten
Tatsächlich, so funktioniert es. Aber auch nur, wenn ich den String als Konstante angebe. Zuweisungen à la
Delphi-Quellcode:
etc. produzieren nach wie vor den Fehler, genauso wie die Zuweisung (im OI) ParentFont := true :shock:
Sender.Canvas.Font := frmMain.Font;
Sender.Canvas.Font := (Sender as TListView).Font; Sehr, sehr, sehr mysteriös! Aber trotzdem ein großes Dankeschön an ErazerZ! :thumb: |
Re: OnAdvancedCustomDrawSubitem ändert nachfolgende Spalten
Es geht auch wenn man zuvor den Font ausliest ihn ändert und wieder zurückschreibt. man muss dann nur aufpassen das der font den man zwischendurch setzt ein anderer ist (am besten einen der quasi nie gebraucht wird z.B. Symbol)
Delphi-Quellcode:
dann kann man sich auch das wechseln für die captions sparen.
procedure TForm1.ListView1CustomDrawSubItem(Sender: TCustomListView;
Item: TListItem; SubItem: Integer; State: TCustomDrawState; var DefaultDraw: Boolean); var f : string; begin f:=sender.Canvas.Font.Name; sender.Canvas.Font.Name:='Symbol'; sender.Canvas.Font.Name:=f; if .... end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03: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