Нажатие кнопки FMX MacOS64 не срабатывает в цикле печати - PullRequest
0 голосов
/ 04 апреля 2020

Я уверен, что это просто, но я потратил часы и упускаю решение.

Работа в Delphi FMX MacOS64. (Эта же структура прекрасно работает в Delphi VCL).

У меня есть простой while l oop, который печатает многостраничный отчет. Когда начинается отчет, я показываю небольшую форму «отменить печать», которая показывает номер страницы, на которой печатается печать, и имеет кнопку «Отмена».

Я меняю номер страницы, отображаемый в форме, каждый раз через l oop (и это прекрасно работает). Но кнопка не будет реагировать, пока я не нажму ее несколько раз, чтобы получить фокус, а затем еще раз несколько раз, чтобы произошло реальное событие щелчка.

Я предполагаю, что ОС взяла управление и не дает никаких циклов проверить кнопку. Как мне обойти это?

Я пытался установить «повторный щелчок» на true, и это, кажется, дает эффект, но он настроен так, чтобы не повторяться в первый раз, пока не пройдет 1/2 секунды , что слишком долго, чтобы остановить печать, даже если он работает при первом повторении.

Вот код:

Printer.BeginDoc;
[do some stuff]
iI:=1;
labelcountI:=1;
pageI:=1;
while (iI<readfileSS.count) and (pageI<=ToPageI) do
begin
     if readfileSS[iI]<>'' then
     begin
          [do some stuff]                    
          if isZebraB=false then
          begin
               if (labelcountI = 1) and (iI <> 1) and (pageI >= FromPageI + 1) then
               begin
                    if cancelPrintB=true then endPrintB:=true;  //cancelprintB is set to true in the click event
                    if endprintB=false then
                    begin
                         printer.NewPage;
                         cancelprint.page.text:=IntToStr(pageI);  //cancelprint is the form; this line works
                         if cancelprint.visible then
                         begin
                              cancelprint.Invalidate;
                              cancelprint.CancelBtn.repaint;   //have tried with and without this
                         end
                         else
                         begin
                              cancelprint.show;
                         end;
                         application.processmessages;
                   end
                   else
                   begin
                         cancelprint.close;
                   end;
                   if (pageI >= FromPageI) and (endprintB=false) then
                   begin
                         [print a lot of stuff]
                   end;
            end;
       end;
       inc (iI);
end;

Вот код кнопки. Довольно просто.

procedure TCancelPrint.OKButtonClick(Sender: TObject);
begin
cancelPrintB:=true;
hide;
end;

Я поместил сообщение в код OnClick и подтвердил, что оно не запускается.

Как я уже сказал, это должно быть легко, но, видимо, не для меня , Цени любую помощь.

Спасибо.

Скотт

...