AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi OnAdvancedCustomDrawSubitem ändert nachfolgende Spalten
Thema durchsuchen
Ansicht
Themen-Optionen

OnAdvancedCustomDrawSubitem ändert nachfolgende Spalten

Ein Thema von tigerman33 · begonnen am 30. Apr 2006 · letzter Beitrag vom 18. Mai 2006
Antwort Antwort
tigerman33

Registriert seit: 30. Jul 2005
Ort: München
423 Beiträge
 
Delphi 2005 Professional
 
#1

OnAdvancedCustomDrawSubitem ändert nachfolgende Spalten

  Alt 30. Apr 2006, 14:32
Hallo,

ich male in meiner (virtuellen) ListView, ViewStyle = vsReport, mit folgendem Code Sterne in eine meiner Spalten:
Delphi-Quellcode:
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 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.

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!
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!
Miniaturansicht angehängter Grafiken
screenshotdp_216.jpg  
Christian
Der Computer hilft mir, Probleme zu lösen, die ich ohne Computer nicht hätte.
  Mit Zitat antworten Zitat
Benutzerbild von ErazerZ
ErazerZ

Registriert seit: 27. Mai 2005
Ort: Baden
315 Beiträge
 
Delphi 2007 Enterprise
 
#2

Re: OnAdvancedCustomDrawSubitem ändert nachfolgende Spalten

  Alt 30. Apr 2006, 15:04
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:
// 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;
ich weiß es ist nicht die beste lösung ist aber ich glaube auch das es ein problem von Delphi ist

cya, ErazerZ
  Mit Zitat antworten Zitat
tigerman33

Registriert seit: 30. Jul 2005
Ort: München
423 Beiträge
 
Delphi 2005 Professional
 
#3

Re: OnAdvancedCustomDrawSubitem ändert nachfolgende Spalten

  Alt 30. Apr 2006, 15:50
Tatsächlich, so funktioniert es. Aber auch nur, wenn ich den String als Konstante angebe. Zuweisungen à la
Delphi-Quellcode:
Sender.Canvas.Font := frmMain.Font;
Sender.Canvas.Font := (Sender as TListView).Font;
etc. produzieren nach wie vor den Fehler, genauso wie die Zuweisung (im OI) ParentFont := true

Sehr, sehr, sehr mysteriös!
Aber trotzdem ein großes Dankeschön an ErazerZ!
Christian
Der Computer hilft mir, Probleme zu lösen, die ich ohne Computer nicht hätte.
  Mit Zitat antworten Zitat
kaiser1401

Registriert seit: 6. Mär 2006
Ort: Gescher
157 Beiträge
 
Delphi 7 Professional
 
#4

Re: OnAdvancedCustomDrawSubitem ändert nachfolgende Spalten

  Alt 18. Mai 2006, 14:02
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:
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;
dann kann man sich auch das wechseln für die captions sparen.
inc(i);
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:01 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz