Zitat von
Martin K:
Hab's jetzt selber rausgefunden, ...
Hai Martin,
ich habe noch zwei Tips für deinen Code.
Zum einen ist der Code leichter zu lesen wenn Du für den Text der aktuelle Zelle eine Hilfsvariable verwendest. Dann musst Du nicht immer mit
Cells[ACol,ARow] arbeiten. Aber das ist nur "kosmetik".
Wichtiger ist es die Verwendung von Objektnamen im Quellcode wenn immer möglich zu vermeiden und dafür den
Sender der Methode zu verwenden. Wenn Du dein StringGrid einmal umbenennst musst Du auch den Namen in deinem Code ändern. Ausserdem könntest Du bei verwendung des Senders die selbe Methode für verschiedene StringGrids verwenden.
Hier mal ein Beispiel für das was ich meine:
Delphi-Quellcode:
procedure TDemoForm.StringGrid1DrawCell(Sender: TObject; ACol, ARow: integer;
Rect: TRect; State: TGridDrawState);
var
celltext: string;
begin
with (Sender as TStringGrid) do // Sender ist ein TStringGrid
begin
celltext := Cells[ACol, ARow]; // Inhalt der aktuelle Zelle
// Hier beginnt die Farb/Font Zuweisung
if (ACol = 1) and (ARow = 1) then // Nur für Celle 1:1
begin
canvas.Brush.Color := clred; // Hintergrundfarbe
canvas.Font.Color := clblue; // Schriftfarbe
end;
if (ARow = 3) then // Für die dritte Zeile
begin
canvas.Font.Style := canvas.Font.Style + [fsBold];
end;
if (ACol = 2) and (ARow > 0) then // Die zweite Spalte
begin
canvas.Brush.Color := clGreen;
end;
// Hier beginnt nun das Zeichnen:
Canvas.FillRect(Rect); // Hintergrund zeichnen
DrawText(Canvas.Handle, PChar(celltext), Length(celltext),
Rect, DT_SINGLELINE); // Textausgeben
// Optional kann der Text auch Zentriert werden.
// dann mit diesem Parameter;
// DT_SINGLELINE or DT_CENTER or DT_VCENTER
// Für Rechtsbündige Ausgabe
// DT_SINGLELINE or DT_RIGHT
end;
end;
Wie Du siehst wird innerhalb der Methode der Name des StringGrids nicht mehr verwendet.
Stephan B.
"Lasst den Gänsen ihre Füßchen"