![]() |
Delphi 2010 OnDrawColumnCell Problem
Hallo zusammen.
Normalerweise arbeite ich mit Delphi 2007, habe aber jetzt mal Delphi 2010 installiert um dieses kennenzulernen. Erstmal habe ich ein 2007er Projekt mit 2010 compiliert und ein wenig getestet. Dabei ist mir folgendes Verhalten aufgefallen: In einem DBGrid wird in eine Zelle ein Symbol gezeichnet. Das hat unter 2007 mit folgendem Code noch funktioniert:
Delphi-Quellcode:
Unter 2010 macht das ganze jedoch Probleme. Das äußert sich dadurch, dass in jeder Zelle des Grids das StatusIcon gezeichnet wird.
procedure TFormMain.grdOpenAllDrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState); var Status: Integer; begin if Column.ImeName = 'ICONSTATUS' then begin // grafische Symbole in erster Spalte anzeigen: Status := QryOpenAll['StatusIcon']; grdOpenAll.Canvas.FillRect(Rect); FormMain.ImageListStatus.Draw(grdOpenAll.Canvas, Rect.Left+1, Rect.Top, Status); end else if Column.ImeName = 'ICONPRIO' then begin // grafische Symbole in zweiter Spalte anzeigen: Status := QryOpenAll['PrioIcon']; grdOpenAll.Canvas.FillRect(Rect); FormMain.ImageListStatus.Draw(grdOpenAll.Canvas, Rect.Left+1, Rect.Top, Status); end else begin grdOpenAll.DefaultDrawColumnCell(Rect, DataCol, Column, State); end; end; Beim debuggen habe ich festgestellt, dass DataCol nicht korrekt erhöht wird, sondern immer auf der 1. Spalte des Grids "stehen bleibt". Bei Delphi 2007 ist das jedoch anders. Mein Problem hab ich durch folgende Änderung des Codes behoben
Delphi-Quellcode:
Außerdem natürlich für jede Spalte des Grids den ImeName = DEFAULT eingetragen.
if Column.ImeName = 'DEFAULT' then begin
grdOpenAll.DefaultDrawColumnCell(Rect, DataCol, Column, State); end else if Column.ImeName = 'ICONSTATUS' then begin // grafische Symbole in erster Spalte anzeigen: Status := QryOpenAll['StatusIcon']; grdOpenAll.Canvas.FillRect(Rect); FormMain.ImageListStatus.Draw(grdOpenAll.Canvas, Rect.Left+1, Rect.Top, Status); end else if Column.ImeName = 'ICONPRIO' then begin // grafische Symbole in zweiter Spalte anzeigen: Status := QryOpenAll['PrioIcon']; grdOpenAll.Canvas.FillRect(Rect); FormMain.ImageListStatus.Draw(grdOpenAll.Canvas, Rect.Left+1, Rect.Top, Status); end; end; Jedoch verstehe ich nicht ganz wo das Problem bei Delphi 2010 liegt. Wieso wird DataCol nicht korrekt erhöht?? Jemand irgendeine Idee oder Erfahrung? Greetz Maggi EDIT: Es reicht auch, wenn der Code nicht bearbeitet wird, aber trotzdem alle "leeren" Column.ImeName Einträge mit z.B. 'DEFAULT' gefüllt werden. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:05 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