0

Bitmap.BitmapChanged; 在 FMX.Graphics 中受到保护,因此我无法使用该程序。

使用 TImage 或 TImageControler 我正在画一条线,但该线没有显示。

我正在使用这个片段:

imgc1.Bitmap.Canvas.BeginScene;
imgc1.Bitmap.Canvas.DrawLine(FStartPoint,FEndPoint, 100);
imgc1.Bitmap.Canvas.EndScene;
imgc1.Bitmap.BitmapChanged;  // the original example said that this would redraw the image. In my CE Rio IDE the BitmapChanged is undefind. How can I use it?

划清界线。IDE 找不到 BitmapChanged。

4

2 回答 2

0

BitmapChanged 是受保护的成员。我需要编写一些代码来处理 OnBitmapChanged 事件。我现在知道了。在 Delphi 开发近 30 年,这是我第一次遇到受保护的成员。我使用的示例一定没有编译过,否则作者会遇到与我相同的错误。

于 2019-06-25T11:26:39.183 回答
0

TBitmap.BitmapChanged()是一种virtual简单地触发公共TBitmap.OnChange事件的方法。既然是protected,您可以使用访问器类来访问它:

type
  TBitmapAccess = class(TBitmap)
  end;

TBitmapAccess(imgc1.Bitmap).BitmapChanged;

但是,这并不是真正需要的。TImage将其自己的内部OnChange事件处理程序分配给其Bitmap. 所以它应该对Bitmap自动的变化做出反应。但是,如果由于某种原因它没有,刷新的正确方法TImage是调用它的Repaint()方法:

imgc1.Repaint;

这正是TImage内部OnChange处理程序所做的:

constructor TImage.Create(AOwner: TComponent);
begin
  inherited;
  FBitmap := TBitmap.Create(0, 0);
  FBitmap.OnChange := DoBitmapChanged;
  ...
end;

procedure TImage.DoBitmapChanged(Sender: TObject);
begin
  Repaint;
  UpdateEffects;
end;
于 2019-06-25T18:56:12.300 回答