Kolorowanie wiersza StringGrida podczas wypełniania danymi

0

No i kolejny problem.
Mam StringGrida. Po załadowaniu pliku, automatem ustawia się ilość wierszy. Następnie wypełniam go danymi. Jeśli w jednym z pól długość przekroczy 80 znaków, chciałbym, aby tło w całym wierszu zarumieniło się. Jest to do zrobienia?

0

Jasne, że jest. Nadpisujesz DrawCell i przed wywołaniem inherited DrawCell ustawiasz kolorki.

0

Ok. A może jakiś przykładzik? Wiem, wychodzę na lamę.

0

Typowym sposobem na własnoręczne malowanie tego komponentu jest wyklikanie zdarzenia OnDrawCell i zdefiniowanie w nim algorytmu malującego każdą komórkę kontrolki. Po to właśnie istnieje to zdarzenie, aby z niego korzystać.

Mimo wszystko z chęcią poznam sposób proponowany przez @Dziadu.

0

Zdarzenie OnDrawCell jest wołane, przynajmniej w moim Delphi po wymalowaniu celi. Czyli malowalibyśmy dwa razy. Proponuję coś takiego:

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ShadowWnd, Grids;

type
  TMyStringGrid = class(TStringGrid)
  protected
    procedure DrawCell(ACol, ARow: Longint; ARect: TRect;
      AState: TGridDrawState); override;
  end;

  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    StringGrid1: TMyStringGrid;
  end;

var
  Form1: TForm1;

implementation

const MyCol = 3;

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var i: Integer;
begin
  StringGrid1 := TMyStringGrid.Create(Self);

  with StringGrid1 do
  begin
    Name := 'StringGrid1';
    Parent := Self;
    Left := 144;
    Top := 64;
    Width := 320;
    Height := 120;
    TabOrder := 0;
    Cells[MyCol, 0] := StringOfChar('a', 81);
    Cells[MyCol, 1] := StringOfChar('a', 80);
    Cells[MyCol, 2] := StringOfChar('a', 81);
    Cells[MyCol, 3] := StringOfChar('a', 80);
    Cells[MyCol, 4] := StringOfChar('a', 81);
  end;

    
end;

{ TMyStringGrid }

procedure TMyStringGrid.DrawCell(ACol, ARow: Integer; ARect: TRect;
  AState: TGridDrawState);
begin
  if (Length(Cells[MyCol, ARow]) > 80) then Canvas.Brush.Color := RGB(255, 210, 210)
                                       else Canvas.Brush.Color := clWhite;
  inherited DrawCell(ACol, ARow, ARect, AState);
end;

end.
0

@Dziadu dzięki. Działa i o to mi chodziło. :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1