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
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. :)