Thema: Delphi Was ist TGridDrawState

Einzelnen Beitrag anzeigen

Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.251 Beiträge
 
Delphi 2006 Professional
 
#9

Re: Textfarbe in einem StringGrid ändern (bestimmter Bereich

  Alt 5. Nov 2005, 07:05
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"
  Mit Zitat antworten Zitat