Đây là một số mã tôi tìm thấy với google (Nó không phải là từ tôi, tôi không thể tìm thấy tên của tác giả, có lẽ nó xuất phát từ StackExchange trên một cách nào đó ...). Nó định nghĩa một hậu duệ của TStringGrid và thực hiện một bản vẽ nền mới. (Ví dụ sử dụng bitmap, nhưng bạn có thể dễ dàng thay đổi điều đó ...)
type
TStringGrid = class(Grids.TStringGrid)
private
FGraphic: TGraphic;
FStretched: Boolean;
function BackgroundVisible(var ClipRect: TRect): Boolean;
procedure PaintBackground;
protected
procedure Paint; override;
procedure Resize; override;
procedure TopLeftChanged; override;
public
property BackgroundGraphic: TGraphic read FGraphic write FGraphic;
property BackgroundStretched: Boolean read FStretched write FStretched;
end;
TForm1 = class(TForm)
StringGrid: TStringGrid;
Image: TImage;
procedure FormCreate(Sender: TObject);
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
{ TStringGrid }
function TStringGrid.BackgroundVisible(var ClipRect: TRect): Boolean;
var
Info: TGridDrawInfo;
R: TRect;
begin
CalcDrawInfo(Info);
SetRect(ClipRect, 0, 0, Info.Horz.GridBoundary, Info.Vert.GridBoundary);
R := ClientRect;
Result := (ClipRect.Right < R.Right) or (ClipRect.Bottom < R.Bottom);
end;
procedure TStringGrid.Paint;
begin
inherited Paint;
PaintBackground;
end;
procedure TStringGrid.PaintBackground;
var
R: TRect;
begin
if (FGraphic <> nil) and BackgroundVisible(R) then
begin
with R do
ExcludeClipRect(Canvas.Handle, Left, Top, Right, Bottom);
if FStretched then
Canvas.StretchDraw(ClientRect, FGraphic)
else
Canvas.Draw(0, 0, FGraphic);
end;
end;
procedure TStringGrid.Resize;
begin
inherited Resize;
PaintBackground;
end;
procedure TStringGrid.TopLeftChanged;
begin
inherited TopLeftChanged;
PaintBackground;
end;
{ TForm1 }
procedure TForm1.FormCreate(Sender: TObject);
begin
// Usage:
StringGrid.BackgroundGraphic := Image.Picture.Graphic;
StringGrid.BackgroundStretched := True;
end;
OK Cuối cùng tôi đã tìm thấy nó. Vấn đề là thuộc tính DrawingStyle của TStringGrid mặc định là gdsThemed. Đặt nó thành gdsClassic làm cho lưới Thuộc tính màu bắt đầu - cũng cho nền. Sự cố được giải quyết. Nhờ có một cách để hoàn toàn kiểm soát quá trình vẽ nền, nhưng đó là một vấn đề quá mức cho vấn đề của tôi. rgds TheRoadrunner – TheRoadrunner