Перейти к содержанию
  • 0

Вопросы

Данный код работает в windows-32 , но не хочет работать в Android.

  Form1.Canvas.BeginScene;
  Form1.Canvas.Fill.Kind := TBrushKind.bkSolid;
  Form1.Canvas.Fill.Color :=  TAlphaColorRec.Red;
  form1.Canvas.FillRect(fs,0,0,AllCorners,1);
  Form1.Canvas.EndScene;

Просто ничего не отрисовывается. В чём может быть причина? 

Прикрепляют также тестовый проект, вдруг на какой-то версии он нормально работает. 

Test.rar

Отредактировал Андрей Рулин

Поделиться сообщением


Ссылка на сообщение

Рекомендуемые сообщения

  • 1

потому что нельзя рисовать где попало когда захочется

есть событие OnPaint - его и используйте

Поделиться сообщением


Ссылка на сообщение
  • 0

Да , так работает лучше, но всё же всё-рано что-то не так. 

Вот я отрабатываю клик мышкой.

 

 TestRect.Left := XToEtalon(X)-50;
 TestRect.Top :=  XToEtalon(Y)-50;
 FormPaint(Sender,Canvas,TestRect);
 WriteToLog(report,FloatToStr(X)+' , '+ FloatToStr(Y));

И соотвественно,

redraw(0,0,1,false);
redraw(Round(ARect.Left),Round(ARect.Top),1,true);

В итоге в Win32 всё работает отлично - куда я щёлкаю мышкой, появляются прямоугольники.

В Android - нулевая реакция. 

При этом в логе записывается , что клик произошёл. 

 

Test2.rar

Поделиться сообщением


Ссылка на сообщение
  • 1

ну так еще раз - нельзя рисовать где попало когда захочется

FormPaint это обработчик события когда у системы есть настроение порисовать. Просто кликать мышью для этого недостаточно

Нужно заявить, что эта часть окна невалидна.

По мне, так то, что в Windows это работает - это скорее упущение, баг, а не фича ))

Вот после инвалидации система вызовет Paint. На Windows точно так же

Поделиться сообщением


Ссылка на сообщение
  • 0

Увы,  и это не работает.

 


 

 InvalidateRect(WinRect);
 //FormPaint(Sender,Canvas,TestRect);

WinRect - посылается размер окна.

Естественно на win32 работает и этот вариант.

Цитата

По мне, так то, что в Windows это работает - это скорее упущение, баг, а не фича ))

Ну на VCL - это был скорее фича , можно было всё без танцев с бубном делать.  Но на FMX на разных платформах должно работать единообразно - или везде или нигде.   ПОтому , что любую программу надо будет тестировать на win32/64 , потом так же тщательно на Android , а потом ещё и на IoS. Вот у меня устойств с IOS нет , я уже понял, то доступ раз в недёлю "отца русской демократии" не спасёт. 

Поделиться сообщением


Ссылка на сообщение
  • 1

Если вы хотите на чем-то рисовать, не надо портить стены, возьмите бумагу, холст там..
Специально придуман PaintBox именно для ваших целей.
Но для демо ровно то же самое вместо PaintBox.OnPaint сделал на Form.OnPaint

Работает одинаково, на windows и android. Уверен, что ровно так же все будет на всех остальных ОС.

type
  TForm1 = class(TForm)
    procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Single);
    procedure FormPaint(Sender: TObject; Canvas: TCanvas; const ARect: TRectF);
    procedure FormMouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Single);
  private
    FCrd: TPointF;
  public
  end;

var
  Form1: TForm1;

implementation

{$R *.fmx}



procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Single);
begin
  FCrd := PointF(X,Y);
end;

procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Single);
begin
  Invalidate;
end;

procedure TForm1.FormPaint(Sender: TObject; Canvas: TCanvas;
  const ARect: TRectF);
begin
  Canvas.Fill.Color := TAlphaColorRec.Wheat;
  Canvas.FillRect(rectf(FCrd.X, FCrd.Y, FCrd.X+100, FCrd.Y+100), 0,0,[], 1);
end;

там в проекте еще дофига разных странных решений и ошибок. Но это уже оффтоп...

Поделиться сообщением


Ссылка на сообщение

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.


  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...