Я уверен, что это просто, но я потратил часы и упускаю решение.
Работа в 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 и подтвердил, что оно не запускается.
Как я уже сказал, это должно быть легко, но, видимо, не для меня , Цени любую помощь.
Спасибо.
Скотт