Einzelnen Beitrag anzeigen

fanavity

Registriert seit: 2. Sep 2011
65 Beiträge
 
#12

AW: dbGrid Zeile farbig markieren und fokusieren

  Alt 26. Okt 2011, 11:37
ACol und ARow werden doch übergeben. Da zieht man also von ARow 1 ab, schaut, ob es die Zelle wirklich gibt und ermittelt, was in Cells[<betreffende Spalte>, ARow - 1] steht. Das vergleicht man mit dem eigenen Wert... fertig.
Ich würde in der Zeichen-Routine mich auf das Zeichnen beschränken.
Das Ermitteln, wie die Zeile eingefärbt wird, würde ich in so einem Fall über einen separaten Aufruf machen, der mir dieses ermittelt.
Dann kann man den Code sogar weiterverwenden

Delphi-Quellcode:
procedure TForm2.GetSpecialState( Sender : TObject; ACol, ARow : integer; var SpecialState : Boolean );
begin
  // Jetzt in den Daten suchen und schauen, ob es sich hier um einen SpecialState handelt
end;

procedure TForm2.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
var
  SpecialState : Boolean;
begin
  // Hier den SpecialState abfragen lassen
  SpecialState := False;
  GetSpecialState( Sender, ACol, ARow, SpecialState );
  // Jetzt kann man den weiter behandeln
   With (Sender as TStringGrid) do
  begin
    if (gdSelected in State) then
      Canvas.Brush.Color:= clYellow
    else if (gdFixed in State) then
      Canvas.Brush.Color:= clBtnHighlight
    else
      if (ARow Mod 2 = 0) then // Hier muss ich ja meine Abfrage einbinden, damit er schaut ob 2 aufeinanderfolgenden Zeilen den gleichen inhalt haben.. Oder habe ich das ganze falsch verstanden?
      Begin
        canvas.Brush.Color:= clWhite;
        Canvas.Font.Color:= clBlack;
      end
      else
        Canvas.Brush.Color:= clBtnFace;
        Canvas.Font.Color:= clBlack;
        Canvas.FillRect(Rect);
    Canvas.TextOut(Rect.Left + 2, Rect.Top + 2, StringGrid1.Cells[ACol, ARow]);
  end;
end;

Sorry aber das verstehe ich nicht so ganz, kannst du mir das ganze vielleicht nochmal erklären?
  Mit Zitat antworten Zitat