Avatar billede morten_s Nybegynder
11. april 2002 - 09:45 Der er 1 løsning

Skifte tekstfarve i de enkelte celler i et DBGrid

Jeg har følgende procedure

procedure TfDBDriver.DBGridConnectionsDrawColumnCell(Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumn;
  State: TGridDrawState);
var
  Grid : TDBGrid;
begin
  with Sender as TDBGrid do
  begin
    Grid := (Sender as TDBGrid);
    try
      if (Grid.Columns[DataCol].FieldName = 'State') or (Grid.Columns[DataCol].FieldName = 'SHOnOff') then
      begin
        if (Grid.Columns[DataCol].FieldName = 'State') then
        begin
          Canvas.FillRect(Rect);
          if Grid.Columns[DataCol].Field.Value > -1 then
            ImageList2.Draw(Canvas,((Rect.Right - Rect.Left) div 2)+Rect.Left-8
                        ,Rect.Top, Grid.Columns[DataCol].Field.Value ,True);
        end else
        begin
          if Grid.Columns[DataCol].Field.Value = 'Off' then
          begin
            Grid.Columns[DataCol].Font.Color := clRed;
            Grid.Columns[DataCol].Font.Style := [fsBold];
          end;
          if Grid.Columns[DataCol].Field.Value = 'On' then
          begin
            Grid.Columns[DataCol].Font.Color := clGreen;
            Grid.Columns[DataCol].Font.Style := [];
          end;
        end;
      end else
        DefaultDrawColumnCell(Rect,DataCol,Column,State);
    except
    end;
  // ShowScrollbar(Grid.Handle, SB_HORZ, False);
  end;
Den øverste del sætter et icon ind i DBGridet alt efter hvilket værdi state har, det virker ok

Nederste del skal hvis SHOnOff = Off farve teksten rød og bold, hvis on skal teksten bare være rød.
Denne del fungere imidlertid ikke, den står og opdatere felterne hele tiden ? og det er tilfældigt hvilke der bliver røde og grønne.

Hvem kan se hvad der går galt ?
Avatar billede stoney Nybegynder
11. april 2002 - 10:45 #1
Hej Morten

Jeg kan ikke lige umiddelbart se hvad der skulle være galt, men nedenstående virker for mig

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

  begin
with Sender as TDBGrid do
  begin
  if (Column.FieldName = 'farve')
  then if (Column.Field.AsInteger > 101)    then
  begin
    Canvas.Brush.Color := clGreen;
    canvas.Font.Color := clred;
  DefaultDrawColumnCell(Rect, DataCol, Column, State);
  end;
end;

end;

Stoney
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester