Einzelnen Beitrag anzeigen

Mazen

Registriert seit: 6. Okt 2011
66 Beiträge
 
Delphi 7 Professional
 
#1

TStringGrid OnDrawCell - Bestimmte Felder makieren

  Alt 20. Dez 2012, 08:22
Hallo Leute,
ich möchte euch erstmal kurz schildern worum es geht und wozu ich es überhaupt brauche.

Es geht darum eine Übersicht der Ausgaben zu erhalten die in einem auswählbaren Zeitraum von einer auswählbaren Kostenstelle angefallen sind. Diese Daten bekomme ich aus einer Datenbank.

Bisher wurde das mit Excel gelöst. Die Anzeige der Informationen in Excel ist schon ziemlich optimal, allerdings nicht leicht zu pfelgen, bzw. zu aufwendig. Da alle Rechnungen sowieso archiviert werden und in der Datenbank landen wäre es also sinnvoll das auch zu nutzen.

Da die Ansicht wie gesagt in Excel beibehalten werden soll, bzw. auch (noch) kein Ausdruck benötigt wird habe ich gedacht das das TStringGrid recht nah an die Optik von Excel rankommt was Spalten und Zeilen angeht. Nur leider enden da scheinbar auch schon die Gemeinsamkeiten.

An dieser Stelle schonmal der Hinweis: Wenn jemand eine leichtere/bessere Idee hat wie das zu lösen ist bin ich dafür gerne offen
Hab auch überlegt ob es nicht möglich wäre mit Excel auf die Datenbank zuzugreifen, doch das gehört nicht hier ins Delphi Forum

Im Moment häng ich also an dem Problem das bestimmte Zellen entweder Fett, Farbig oder Unterstrichen dargestellt werden müssen um die Lesbarkeit zu erhöhen.
Diese Zellen sind natürlich nicht immer die gleichen da sie dynamisch zur Laufzeit gefüllt werden. Daher kann ich in OnDrawCell Ereignis nicht einfach nach ACol und ARow abfragen.

Ich müsste also beim füllen der Zellen eine Art Kennzeichen setzen die dem Ereignis mitteilt wie diese formatiert werden soll.
Da habe ich nun schon 2 Ansätze verfolgt, leider ohne gewünschtes Ergebnis:

1) Ich erstelle mir 3 Arrays ála "arrBold Array of Array of Integer" in dem ich die Koordinaten der Zellen speicher die fett werden soll und dann beim OnDrawCell Ereignis dieses Array durchlaufe. Leider komme ich damit aber nicht zum Ergebnis.

2) Da ich dachte das das Ereignis nach jedem Eintrag aufgerufen wird hab ich auch versucht mit Booleans zu arbeiten. Heißt also wenn ich eine Zelle fülle die fett werden muss setze ich vorher "makeBold = true" und frage das in der Methode ab. Leider ebenfalls ohne Erfolg.

Leider habe ich die Codeschnippsel nicht mehr da ich in der Zeit weiter rumprobiert habe.
Mit folgendem Code versuch ich die Formatierung zu ändern:

Code:
StringGrid1.Canvas.Brush.Color := StringGrid1.Color;
StringGrid1.Canvas.FillRect(Rect);
StringGrid1.Canvas.Font := StringGrid1.Font;
StringGrid1.Canvas.Font.Style := [fsBold];
StringGrid1.Canvas.TextRect(Rect, Rect.Left + 2, Rect.Top + 2,
StringGrid1.Cells[ACol, ARow]);
Da ich nicht genau weiß wie OnDrawCell arbeitet bzw. wann dieses aufgerufen wird kanns auch sein das meine Ansätze oben totaler Unsinn sind.

Vielleicht könnt ihr mir dabei helfen
  Mit Zitat antworten Zitat