Как использовать Image1.Bitmap.BitmapChanged; - PullRequest
0 голосов
/ 24 июня 2019

Bitmap.BitmapChanged;защищен в FMX. Графика, поэтому я не могу использовать процедуру.

Использование 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.

Ответы [ 2 ]

0 голосов
/ 25 июня 2019

TBitmap.BitmapChanged() - это метод virtual, который просто запускает публичное событие TBitmap.OnChange. Поскольку это protected, вы можете использовать класс доступа, чтобы достичь его:

type
  TBitmapAccess = class(TBitmap)
  end;

TBitmapAccess(imgc1.Bitmap).BitmapChanged;

Однако, это на самом деле не нужно. TImage назначает свой внутренний OnChange обработчик событий своему Bitmap. Поэтому он должен автоматически реагировать на изменения Bitmap. Но, если по какой-то причине это не так, правильный способ обновить TImage - это вызвать метод Repaint():

imgc1.Repaint;

Что именно делает внутренний обработчик OnChange *1018*:

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;
0 голосов
/ 25 июня 2019

BitmapChanged является защищенным членом.Мне нужно написать код для обработки события OnBitmapChanged.Теперь я понимаю.Почти 30 лет развития в Delphi, и я впервые столкнулся с защищенными членами.Примеры, которые я использовал, не должны были быть скомпилированы, иначе у автора была бы та же ошибка, что и у меня.

...