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:
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;
Unter 2010 macht das ganze jedoch Probleme. Das äußert sich dadurch, dass in jeder Zelle des Grids das StatusIcon gezeichnet wird.
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:
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;
Außerdem natürlich für jede Spalte des Grids den ImeName = DEFAULT eingetragen.
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.