我使用OnDrawCell事件來自定義繪製Delphi TStringGrid。 單元格覆蓋的區域沒有問題,但是如何繪製最右邊一列和最後一行下面的背景?我如何繪製TStringGrid的背景
(編輯) 繪畫不是真的必要的,我只是想設置用於背景的顏色。 我正在使用XE2並調查VCL樣式。 即使在默認繪圖中,設置字符串網格中的顏色,接縫根本沒有任何效果。
TIA
我使用OnDrawCell事件來自定義繪製Delphi TStringGrid。 單元格覆蓋的區域沒有問題,但是如何繪製最右邊一列和最後一行下面的背景?我如何繪製TStringGrid的背景
(編輯) 繪畫不是真的必要的,我只是想設置用於背景的顏色。 我正在使用XE2並調查VCL樣式。 即使在默認繪圖中,設置字符串網格中的顏色,接縫根本沒有任何效果。
TIA
這是一些代碼,我用谷歌發現(這是不是從我,我找不到作者的名字,也許它來自StackExchange在某種方式......)。它定義了TStringGrid的後代並實現了一個新的背景圖。 (這個例子使用了一個位圖,但是你很容易就可以改變那個...)
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;
它從NGLN在這裏回答SO。 [Delphi的-stringgrid與 - 子母背景](http://stackoverflow.com/questions/5285659/delphi-stringgrid-with-picture-in-background)。它應該與背景中的圖片一起使用。 –
好的,謝謝!使用代碼將其他背景繪製到網格上應該沒有問題。 – Andreas
完全沒問題,但要回答這個問題,您可以詳細闡述如何繪製背景顏色。 –
好的我終於找到了。 問題是TStringGrid的DrawingStyle屬性默認爲gdsThemed。 將其設置爲gdsClassic使網格顏色屬性踢入 - 也用於背景。 問題解決。 感謝Andreas完全控制背景繪畫過程的方法,但這對我的問題是一個矯枉過正。 rgds TheRoadrunner – TheRoadrunner