Entwickler-Ecke

Datenbanken - TDBTable: Während d. Zeichnens d. Zellen die aktuelle färben


xNighthawkx - Di 09.02.10 16:48
Titel: TDBTable: Während d. Zeichnens d. Zellen die aktuelle färben
Hallo ich habe das Problem, das ich beim Zeichnen der Zellen in der Tabelle die aktuelle Zelle die in Bearbeitung ist farbig markiert wird.

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
procedure TForm2.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
var
  test1: Real;
  RowNo: Integer;
  farbe : integer;
begin
  with (Sender as TDBGrid) do
  begin
    showmessage(inttostr(Clientdataset1.Fields[Column.Field.Index].Tag));                 //<- an dieser Stelle komme ich nich an die Zelle
    if (gdSelected in State) then
    begin
      // Farbe für die Zelle mit dem Focus
      // color of the focused row
      Canvas.Brush.Color := clblue;
      Canvas.Font.Color := clwhite;
    end
    else
    begin
      // Zeile erfahren
      // get the actual row number
      rowno := Clientdataset1.RecNo;
      // gerade und ungerade Zeilen ermitteln
      // odd or even ?
      test1 := (RowNo / 2) - trunc(RowNo / 2);
      // Zeile gerade...
      // If it's an even one...
      if test1 = 0 then
      begin
        farbe := clWhite
      end
      // ...Zeile ungerade
      // ...else it's an odd one
      else
      begin
        farbe := clltgray;
      end;
      Canvas.Brush.Color := farbe;
      // Font-Farbe immer schwarz
      // font color always black
      Canvas.Font.Color := clBlack;
    end;
    Canvas.FillRect(Rect);
    // Denn Text in der Zelle ausgeben
    // manualy output the text
    Canvas.TextOut(Rect.Left + 2, Rect.Top + 1, Column.Field.AsString);
  end
end;


Hoffe es kann mir einer helfen, denn ich weiß wirklich nciht weiter. Hab die Stelle im Code auch markiert.
War nur ein Versuch um mir erstmal den Index der Zelle auszugeben aber klappte nicht.

Mfg


Torsten Richter - Mo 22.02.10 15:44

Hallo xNighthawkx,

hab mal folgenden Code bei mir rauskopiert :

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
procedure TForm2.DBGridKontoDrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
  with (Sender as TDBGrid) do
  begin
    if (gdSelected in State) then
    begin
      Canvas.Font.Style := Canvas.Font.Style + [fsBold];
      Canvas.Brush.Color := clBlue; 
      Canvas.Font.Color := clWhite;
    end
    else
    begin
      Canvas.Font.Style := Canvas.Font.Style - [fsBold];
      if DataSource.DataSet.RecNo mod 2 = 0 then
      begin
        Canvas.Brush.Color := clWhite
      end
      else
      begin
        Canvas.Brush.Color := clHellBlau; // RGB(235,240,254); 
      end;
      Canvas.Font.Color := clBlack;
    end;
    Canvas.FillRect(Rect);
    Canvas.TextOut(Rect.Left + 2, Rect.Top + 1, Column.Field.AsString);
  end;
end;

unschön ist, dass du nicht übergebene Eigenschaften ansprichst (Clientdataset1)
die zwingen dich jedesmal, den Code anzupassen, falls du mehrere DBGrids benutzt
also nicht rowno := Clientdataset1.RecNo sondern
rowno :=(Sender as TDBGrid).DataSource.DataSet.RecNo

hth
Torsten

Moderiert von user profile iconNarses: Delphi-Tags hinzugefügt


xNighthawkx - Do 25.02.10 15:00

super ;)


Danke für deine Hilfe :)