Announcement

Collapse
No announcement yet.

Zelle in DBGrid farbig? (Mal wieder...)

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Zelle in DBGrid farbig? (Mal wieder...)

    Hallo beisammen,

    ich weiß, ich weiß: Dieses Thema wurde bereits mehrfach angesprochen und ich habe auch so ziemlich alle Beiträge des Forums bereits gelesen. Aber: Ich schaffe es einfach nicht!
    <p>
    Problem: Eine Spalte, die ich zu diesem Zweck manuell als TColumn zu den bereits vorhandenen Query-Datenfeldern im DBGrid hinzugefügt habe, soll farbig dargestellt werden. In der Spalte soll kein Wert angezeigt werden, lediglich die Farbe der nur 5 Pixel breiten Zelle ist relevant.
    <p>
    Die Farbe ist dabei abhängig vom Inhalt des Integer-Datenbankfeldes 'Status': Also z.B. 2=Gelb, 3=Rot, usw.
    <p>
    Folgender Code wird verwendet:
    <P>
    <PRE><CODE>
    procedure TfmKunden.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState);
    var CellColor: TColor;
    begin
    case qyKundenStatus.Value of
    2: CellColor := clYellow;
    3: CellColor := clRed;
    end;
    DBGrid1.Columns[1].Color := CellColor;
    DBGrid1.DefaultDrawColumnCell(Rect, Datacol, Column, State);
    end;
    </PRE></CODE>

    (Columns[1] ist die von mir eingefügte Grid Spalte).
    <p>
    Das funktioniert im Prinzip auch - es wird nur leider nicht die gewünschte Zelle gefärbt, sondern jeweils die Zelle in der Zeile darunter... Hat also der Kunde Aheimer den Status 3, wird blöderweise beim Kunden Baltmann die Infozelle rot - bei alphabetischer Sortierung des Querys nach Kundennamen, versteht sich.

    Und: Ich hätte angenommen, dass der Wert von DefaultDrawing des Grids einen Einfluss auf die oben erwähnte Darstellung haben sollte - hat er aber nicht.

    Umgebung: Delphi4 C/S, PostgreSQL unter Linux

    Danke für jede Hilfe!

    Ralph

  • #2
    Hallo Ralph,

    so müßte es gehen.

    procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
    DataCol: Integer; Column: TColumn; State: TGridDrawState);

    var CellColor: TColor;
    begin
    case qyKundenStatus.Value of
    2: CellColor := clYellow;
    3: CellColor := clRed;
    end;
    DBGrid1.Canvas.brush.Color := CellColor;
    if column.FieldName = '??' then //hier irgendwie die gewünschte Spalte rausfischen
    DBGrid1.DefaultDrawColumnCell(Rect, Datacol, Column, State);
    end;

    Gruß

    Torste

    Comment


    • #3
      Hallo Torsten,

      danke für Deine Antwort!

      Es funktioniert. Anstatt
      <PRE><CODE>
      if column.FieldName = '??' then
      </PRE></CODE>

      habe ich allerdings
      <PRE><CODE>
      if column.ID = 1 then
      </PRE></CODE>

      verwendet - die Position des Farbfeldes ist mir ja bekannt und ändert sich auch nicht.

      Grüße
      Ralp

      Comment

      Working...
      X