在Linux上運行的Lazarus中有一個TStringGrid。我有一個編輯器類型爲cbsButton的列。我希望按鈕顯示某個圖像,而不是省略號。我有以下的代碼,這將導致一個錯誤:在TStringGrid中單元格中的按鈕上繪製圖像
procedure TForm1.streams_gridDrawCell(Sender: TObject; aCol, aRow: Integer; aRect: TRect; aState: TGridDrawState);
var
aCanvas: TCanvas;
aGrid: TStringGrid;
Editor: TWinControl;
image: TImage;
begin
if (aCol <> 1) or (aRow = 0) then begin
Exit;
end;
aGrid := (Sender as TStringGrid);
aCanvas := image.Canvas;
aCanvas.FillRect(aRect);
imagelist1.Draw(aCanvas, aRect.Left+2, aRect.Top+2, 8);
Editor := (aGrid.EditorByStyle(cbsButton) as TButtonCellEditor);
Editor.Brush.Style := TBrushStyle.bsImage;
(Editor.Brush.Image as TImage) := image; // causes the error below
end;
的錯誤是:
mainform.pas(156,23) Error: Class or Object types "TFPCustomImage" and "TImage" are not related
在這一點上,我相信我在完全錯誤的方式去了解這一點。有人能讓我回到正確的道路上嗎?
你應該得到一個訪問衝突,而不是構建組件之前訪問的TImage畫布。 –
訪問衝突是運行時。上述錯誤是編譯時間。 – lk75