AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Delphi 2010 OnDrawColumnCell Problem

Ein Thema von MaggiAdv · begonnen am 5. Aug 2010
Antwort Antwort
MaggiAdv

Registriert seit: 5. Aug 2010
1 Beiträge
 
Delphi 2007 Professional
 
#1

Delphi 2010 OnDrawColumnCell Problem

  Alt 5. Aug 2010, 11:40
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 = 'ICONSTATUSthen 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 = 'ICONPRIOthen 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 = 'DEFAULTthen begin
    grdOpenAll.DefaultDrawColumnCell(Rect, DataCol, Column, State);
  end else if Column.ImeName = 'ICONSTATUSthen 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 = 'ICONPRIOthen 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.

Geändert von MaggiAdv ( 5. Aug 2010 um 13:39 Uhr) Grund: Code-Tags durch Delphi-Tags ersetzt
  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 10:54 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