powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / FMX TForm OnCloseQuery TDialogService.MessageDialog
13 сообщений из 13, страница 1 из 1
FMX TForm OnCloseQuery TDialogService.MessageDialog
    #39945239
S_Gur
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Господа, прошу помощи начинающему программисту мобильных приложений. Дошли у меня руки впервые поиграться с Multi-Device приложениями. Создал самое примитивное приложение, проверил его под виндами и на своем андроидном телефоне. Затем решил обработать OnCloseQuery - стандартный запрос, что-то типа: "Вы уверены, что хотите покинуть программу?" И вот в результате экспериментов выяснилось следующее:

Конструкция

Код: pascal
1.
2.
3.
4.
procedure TFmMain.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
  CanClose := True
end;


работает идеально.

Конструкция

Код: pascal
1.
2.
3.
4.
5.
6.
7.
procedure TFmMain.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
Var
  B : Boolean;
begin
  B := True (или False);
  CanClose := B
end;


тоже никаких проблем не вызывает.

Конструкция

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
procedure TFmMain.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
Var
  B : Boolean;
begin
  TDialogService.MessageDialog('You Want To Leave The Program?', TMsgDlgType.mtConfirmation, mbYesNo, TMsgDlgBtn.mbNo, 0, Procedure(Const AResult : TModalResult)
  Begin
    If AResult = mrYes Then B := True
    Else B := False
  End);
  CanClose := B
end;


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

Подскажите, пожалуйста...

Модератор: Пользуйтесь тегом (кнопкой) SRC для оформления кода, пожалуйста.
...
Рейтинг: 0 / 0
FMX TForm OnCloseQuery TDialogService.MessageDialog
    #39945247
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
S_Gur> Честно говоря, я пока не понимаю, в какую сторону мне копать

Для начала - в сторону отладки.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
FMX TForm OnCloseQuery TDialogService.MessageDialog
    #39945251
S_Gur
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустам, отладка при компиляции под виндовс дает именно то, что и надо. А как отлаживать под андроид, я пока не знаю. Слышал, что можно на эмуляторе в отладке работать, но пока до настройки эмулятора я не дошел
...
Рейтинг: 0 / 0
FMX TForm OnCloseQuery TDialogService.MessageDialog
    #39945254
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если не научились дебажить интерактивно - просто логируйте
куда-нибудь значения всех изменяемых переменных.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
FMX TForm OnCloseQuery TDialogService.MessageDialog
    #39945256
Vizit0r
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
S_Gur
Гаджимурадов Рустам, отладка при компиляции под виндовс дает именно то, что и надо. А как отлаживать под андроид, я пока не знаю. Слышал, что можно на эмуляторе в отладке работать, но пока до настройки эмулятора я не дошел


точно так же как и под виндой. Нажать ран и вперед.
...
Рейтинг: 0 / 0
FMX TForm OnCloseQuery TDialogService.MessageDialog
    #39945262
S_Gur
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vizit0r, нажать Run, конечно, можно. Точку останова поставить нельзя
...
Рейтинг: 0 / 0
FMX TForm OnCloseQuery TDialogService.MessageDialog
    #39945275
S_Gur
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В общем-то, с поставленным вопросом я разобрался. Выяснилось, что внутренняя процедура обработки TDialogService.MessageDialog срабатывает уже после того, как CanClose получает ее результат. Но осталась проблема областей видимости переменных. Эта процедура не видит ни параметра CanClose, ни переменной Result, если поместить вызов диалога в отдельную функцию. Как можно возвратить результат наружу, я пока не нашел. В примерах ее использования только ShowMessage('Вы нажали кнопку "Yes"')
...
Рейтинг: 0 / 0
FMX TForm OnCloseQuery TDialogService.MessageDialog
    #39945277
S_Gur
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все, разобрался. Вопрос закрыт, всем спасибо
...
Рейтинг: 0 / 0
FMX TForm OnCloseQuery TDialogService.MessageDialog
    #39945281
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
S_Gur
Как можно возвратить результат наружу, я пока не нашел.

S_Gur
Все, разобрался.

Теперь колись, чтобы другие с такими же проблемами не искали тебя с фонарем через 10 лет :)
...
Рейтинг: 0 / 0
FMX TForm OnCloseQuery TDialogService.MessageDialog
    #39945300
Vizit0r
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
S_Gur
Vizit0r, нажать Run, конечно, можно. Точку останова поставить нельзя


да ну? )

Странно, а почему у меня ставились и работали?


S_Gur
В общем-то, с поставленным вопросом я разобрался. Выяснилось, что внутренняя процедура обработки TDialogService.MessageDialog срабатывает уже после того, как CanClose получает ее результат. Но осталась проблема областей видимости переменных. Эта процедура не видит ни параметра CanClose, ни переменной Result, если поместить вызов диалога в отдельную функцию. Как можно возвратить результат наружу, я пока не нашел. В примерах ее использования только ShowMessage('Вы нажали кнопку "Yes"')


о, ты открыл для себя мир асинхронных MessageDialog из FMX - это очень грустная, но необходимая для изучения тема, особенно в случае мобильников.
...
Рейтинг: 0 / 0
FMX TForm OnCloseQuery TDialogService.MessageDialog
    #39945302
S_Gur
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не уверен, что именно разобрался, но выкрутился. Получилось что-то типа этого:

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Var
  IsCanClose : Boolean;

procedure TFmMain.FormCloseQuery(Sender: TObject; var CanClose: Boolean);

begin
  If Not IsCanClose Then TDialogService.MessageDialog('You Want To Leave The Program?', TMsgDlgType.mtConfirmation, [TMsgDlgBtn.mbYes, TMsgDlgBtn.mbNo], TMsgDlgBtn.mbNo, 0, Procedure(Const AResult : TModalResult)
  Begin
    IsCanClose := AResult = mrYes;
    If IsCanClose Then Close
  End);
  CanClose := IsCanClose
end;



Во всяком случае, оно работает
...
Рейтинг: 0 / 0
FMX TForm OnCloseQuery TDialogService.MessageDialog
    #39945306
S_Gur
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"Странно, а почему у меня ставились и работали?"

Vizit0r, не знаю, почему. Может, это фича 10.3.3, может редакции Delphi Professional. Когда выбираешь Target Android и телефон, отладка отрубается. На днях собираюсь поиграться с эмулятором андроида - говорили, что в нем отладка работать должна

"ты открыл для себя мир асинхронных MessageDialog из FMX"

Насколько я понял свою проблему, дело не в асинхронности, а именно в областях видимости переменных. Я не могу напрямую обработать CanClose. Пробовал сделать отдельную функцию - и так же не смог обработать ее Result. Это отладчиком не прощупаешь, это надо знать, а я только вчера первый раз в это влез. Буду разбираться
...
Рейтинг: 0 / 0
FMX TForm OnCloseQuery TDialogService.MessageDialog
    #39945373
Vizit0r
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
S_Gur
"Странно, а почему у меня ставились и работали?"

Vizit0r, не знаю, почему. Может, это фича 10.3.3, может редакции Delphi Professional. Когда выбираешь Target Android и телефон, отладка отрубается. На днях собираюсь поиграться с эмулятором андроида - говорили, что в нем отладка работать должна


Хм. Ясно.



S_Gur

"ты открыл для себя мир асинхронных MessageDialog из FMX"

Насколько я понял свою проблему, дело не в асинхронности, а именно в областях видимости переменных. Я не могу напрямую обработать CanClose. Пробовал сделать отдельную функцию - и так же не смог обработать ее Result. Это отладчиком не прощупаешь, это надо знать, а я только вчера первый раз в это влез. Буду разбираться


у меня таких моментов штук пять по коду. Сохранение измененных файлов при закрытии, и подобным им. Для мобильных систем, где все MessageDialog принудительно асинхронные (без возможности поменять), пришлось лепить костыли из дополнительного кода.
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / FMX TForm OnCloseQuery TDialogService.MessageDialog
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]