|
|
|
FMX TForm OnCloseQuery TDialogService.MessageDialog
|
|||
|---|---|---|---|
|
#18+
Господа, прошу помощи начинающему программисту мобильных приложений. Дошли у меня руки впервые поиграться с Multi-Device приложениями. Создал самое примитивное приложение, проверил его под виндами и на своем андроидном телефоне. Затем решил обработать OnCloseQuery - стандартный запрос, что-то типа: "Вы уверены, что хотите покинуть программу?" И вот в результате экспериментов выяснилось следующее: Конструкция Код: pascal 1. 2. 3. 4. работает идеально. Конструкция Код: pascal 1. 2. 3. 4. 5. 6. 7. тоже никаких проблем не вызывает. Конструкция Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. прекрасно работает под виндами, но на мобиле никакой реакции на то, какую я кнопку нажимаю в диалоговом окне - программа не закрывается. Честно говоря, я пока не понимаю, в какую сторону мне копать - в сторону областей видимости переменных? Подскажите, пожалуйста... Модератор: Пользуйтесь тегом (кнопкой) SRC для оформления кода, пожалуйста. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2020, 12:29 |
|
||
|
FMX TForm OnCloseQuery TDialogService.MessageDialog
|
|||
|---|---|---|---|
|
#18+
S_Gur> Честно говоря, я пока не понимаю, в какую сторону мне копать Для начала - в сторону отладки. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2020, 12:45 |
|
||
|
FMX TForm OnCloseQuery TDialogService.MessageDialog
|
|||
|---|---|---|---|
|
#18+
Гаджимурадов Рустам, отладка при компиляции под виндовс дает именно то, что и надо. А как отлаживать под андроид, я пока не знаю. Слышал, что можно на эмуляторе в отладке работать, но пока до настройки эмулятора я не дошел ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2020, 12:48 |
|
||
|
FMX TForm OnCloseQuery TDialogService.MessageDialog
|
|||
|---|---|---|---|
|
#18+
Если не научились дебажить интерактивно - просто логируйте куда-нибудь значения всех изменяемых переменных. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2020, 12:56 |
|
||
|
FMX TForm OnCloseQuery TDialogService.MessageDialog
|
|||
|---|---|---|---|
|
#18+
S_Gur Гаджимурадов Рустам, отладка при компиляции под виндовс дает именно то, что и надо. А как отлаживать под андроид, я пока не знаю. Слышал, что можно на эмуляторе в отладке работать, но пока до настройки эмулятора я не дошел точно так же как и под виндой. Нажать ран и вперед. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2020, 13:01 |
|
||
|
FMX TForm OnCloseQuery TDialogService.MessageDialog
|
|||
|---|---|---|---|
|
#18+
Vizit0r, нажать Run, конечно, можно. Точку останова поставить нельзя ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2020, 13:08 |
|
||
|
FMX TForm OnCloseQuery TDialogService.MessageDialog
|
|||
|---|---|---|---|
|
#18+
В общем-то, с поставленным вопросом я разобрался. Выяснилось, что внутренняя процедура обработки TDialogService.MessageDialog срабатывает уже после того, как CanClose получает ее результат. Но осталась проблема областей видимости переменных. Эта процедура не видит ни параметра CanClose, ни переменной Result, если поместить вызов диалога в отдельную функцию. Как можно возвратить результат наружу, я пока не нашел. В примерах ее использования только ShowMessage('Вы нажали кнопку "Yes"') ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2020, 13:30 |
|
||
|
FMX TForm OnCloseQuery TDialogService.MessageDialog
|
|||
|---|---|---|---|
|
#18+
Все, разобрался. Вопрос закрыт, всем спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2020, 13:32 |
|
||
|
FMX TForm OnCloseQuery TDialogService.MessageDialog
|
|||
|---|---|---|---|
|
#18+
S_Gur Как можно возвратить результат наружу, я пока не нашел. S_Gur Все, разобрался. Теперь колись, чтобы другие с такими же проблемами не искали тебя с фонарем через 10 лет :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2020, 13:37 |
|
||
|
FMX TForm OnCloseQuery TDialogService.MessageDialog
|
|||
|---|---|---|---|
|
#18+
S_Gur Vizit0r, нажать Run, конечно, можно. Точку останова поставить нельзя да ну? ) Странно, а почему у меня ставились и работали? S_Gur В общем-то, с поставленным вопросом я разобрался. Выяснилось, что внутренняя процедура обработки TDialogService.MessageDialog срабатывает уже после того, как CanClose получает ее результат. Но осталась проблема областей видимости переменных. Эта процедура не видит ни параметра CanClose, ни переменной Result, если поместить вызов диалога в отдельную функцию. Как можно возвратить результат наружу, я пока не нашел. В примерах ее использования только ShowMessage('Вы нажали кнопку "Yes"') о, ты открыл для себя мир асинхронных MessageDialog из FMX - это очень грустная, но необходимая для изучения тема, особенно в случае мобильников. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2020, 13:53 |
|
||
|
FMX TForm OnCloseQuery TDialogService.MessageDialog
|
|||
|---|---|---|---|
|
#18+
Не уверен, что именно разобрался, но выкрутился. Получилось что-то типа этого: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Во всяком случае, оно работает ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2020, 13:55 |
|
||
|
FMX TForm OnCloseQuery TDialogService.MessageDialog
|
|||
|---|---|---|---|
|
#18+
"Странно, а почему у меня ставились и работали?" Vizit0r, не знаю, почему. Может, это фича 10.3.3, может редакции Delphi Professional. Когда выбираешь Target Android и телефон, отладка отрубается. На днях собираюсь поиграться с эмулятором андроида - говорили, что в нем отладка работать должна "ты открыл для себя мир асинхронных MessageDialog из FMX" Насколько я понял свою проблему, дело не в асинхронности, а именно в областях видимости переменных. Я не могу напрямую обработать CanClose. Пробовал сделать отдельную функцию - и так же не смог обработать ее Result. Это отладчиком не прощупаешь, это надо знать, а я только вчера первый раз в это влез. Буду разбираться ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2020, 14:06 |
|
||
|
FMX TForm OnCloseQuery TDialogService.MessageDialog
|
|||
|---|---|---|---|
|
#18+
S_Gur "Странно, а почему у меня ставились и работали?" Vizit0r, не знаю, почему. Может, это фича 10.3.3, может редакции Delphi Professional. Когда выбираешь Target Android и телефон, отладка отрубается. На днях собираюсь поиграться с эмулятором андроида - говорили, что в нем отладка работать должна Хм. Ясно. S_Gur "ты открыл для себя мир асинхронных MessageDialog из FMX" Насколько я понял свою проблему, дело не в асинхронности, а именно в областях видимости переменных. Я не могу напрямую обработать CanClose. Пробовал сделать отдельную функцию - и так же не смог обработать ее Result. Это отладчиком не прощупаешь, это надо знать, а я только вчера первый раз в это влез. Буду разбираться у меня таких моментов штук пять по коду. Сохранение измененных файлов при закрытии, и подобным им. Для мобильных систем, где все MessageDialog принудительно асинхронные (без возможности поменять), пришлось лепить костыли из дополнительного кода. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2020, 15:04 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=39945277&tid=2038416]: |
0ms |
get settings: |
7ms |
get forum list: |
14ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
43ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
42ms |
get tp. blocked users: |
1ms |
| others: | 221ms |
| total: | 344ms |

| 0 / 0 |
