Ich habe ein TStringGrid in Lazarus, unter Linux ausgeführt. Ich habe eine Spalte, die Editor-Typ cbsButton hat. Ich möchte, dass die Schaltfläche anstelle einer Ellipse ein bestimmtes Bild anzeigt. Ich habe den folgenden Code, der einen Fehler verursacht:Zeichnen und Bild auf einer Schaltfläche in einer Zelle in einem 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;
Der Fehler ist:
mainform.pas(156,23) Error: Class or Object types "TFPCustomImage" and "TImage" are not related
An diesem Punkt, ich bin sicher, dass ich darüber werde in ganz falsch. Könnte mich bitte jemand auf den richtigen Weg zurückbringen?
Sie sollten eine Zugriffsverletzung statt für den Zugriff auf eine TImage Leinwand bekommen, bevor die Komponente zu konstruieren. –
Zugriffsverletzungen sind Laufzeit. Der obige Fehler ist Kompilierzeit. – lk75