haword Опубликовано 22 апреля, 2015 Поделиться Опубликовано 22 апреля, 2015 (изменено) например raise EArgumentOutOfRangeException.CreateRes(@SArgumentOutOfRange) полностью закрывает приложение на Android. Можно как ни будь отловить вообще любой вызов raise и не дать программе закрыться? До Application.OnException не доходит. Изменено 22 апреля, 2015 пользователем haword Цитата Ссылка на комментарий
0 haword Опубликовано 6 мая, 2015 Автор Поделиться Опубликовано 6 мая, 2015 разработчики? кто ни будь что ни будь скажет по этому поводу? Можно же как то переписать FM что бы при ошибке не просто закрывалась программа а хотя бы в лог Android писала причину своего закрытия? Ибо под Win програма не закрывается а сообщает об ошибке. А под Android просто схлопывается и все. В отладке ошибки уперся в процедуру SignalConverter в System.Internal.ExcUtils после нее идет циклическая ошибка, я так понял сама процедура вызывает ошибку, вызывает саму себя и так по кругу в отладчике а потом схлопывается. На все остальные глюки FM можно было бы закрыть глаза если бы программы от ошибок не закрывались молча. Цитата Ссылка на комментарий
0 xenon54 Опубликовано 6 мая, 2015 Поделиться Опубликовано 6 мая, 2015 (изменено) На сколько я заметил, программа "схлопывается" молча тогда, когда ошибка возникает в момент когда ее нельзя отобразить на экране. Что мешает поместить блок в try finally/except? Изменено 6 мая, 2015 пользователем xenon54 Цитата Ссылка на комментарий
0 haword Опубликовано 6 мая, 2015 Автор Поделиться Опубликовано 6 мая, 2015 в том то и дело что возникла ошибка внутри компонента ListView, в XE7 происходит ошибка если крутнуть список в ListView и пока он едет что то ввести в поле фильтра SearchBox. То есть эту ситуацию не обработать try except, я пытался даже перехватить через Application.OnException но ошибка валит программу до того как туда что то перейдет. В этом то вся проблема. Да и почему ее нельзя отобразить на экране было? В контексте Application можно запросто вызвать ShowMessage. Говорю что ошибка происходит внутри самих процедур которые должны показать ошибку, идет рекурсивный вызов а потом схлопывается программа. Цитата Ссылка на комментарий
0 xenon54 Опубликовано 6 мая, 2015 Поделиться Опубликовано 6 мая, 2015 Не знаю связано ли это с версией, я использую 8, у меня такого бага не наблюдается, который вы описали. Цитата Ссылка на комментарий
0 VladimirS Опубликовано 6 мая, 2015 Поделиться Опубликовано 6 мая, 2015 У кого убивается, а у кого висит черный экран ))) (XE7) Цитата Ссылка на комментарий
0 haword Опубликовано 6 мая, 2015 Автор Поделиться Опубликовано 6 мая, 2015 В ХЕ8 это исправили. Я это исправление перенес в XE7. Но в XE8 я уперся в другой баг, не с того не с сего подвисала форма. вешалась мертво ничего не сделать и процессор на планшете в 100% уходил. в XE7 тот же код работал НО иногда вываливал Access Violation причем ошибка то есть то нет. Но не подвисала форма со 100% загрузкой процессора. Под Вин все нормально было. Так что ждем-с XE8 SP1 и попробую заново. Цитата Ссылка на комментарий
0 haword Опубликовано 6 мая, 2015 Автор Поделиться Опубликовано 6 мая, 2015 У кого убивается, а у кого висит черный экран ))) (XE7) черный экран при запуске только если что то пошло не так. а так во время работы черного экрана ни разу не было. Цитата Ссылка на комментарий
0 marsden Опубликовано 6 июня, 2017 Поделиться Опубликовано 6 июня, 2017 ничего в XE8 не исправили, или не для всех try raise exception.create('bla-bla-bla'); exception end; вышибает программу. Но, опять же, не на всех устройствах. Xiaomi Redmi 3S валит, LG L50 - отрабатывает и едет дальше Цитата Ссылка на комментарий
0 Dyatloff Опубликовано 5 октября, 2018 Поделиться Опубликовано 5 октября, 2018 На настоящий момент в XE10.1 ситуация сохранилась. Samsung GT-N7100 , 4.4.2 программа молча вылетает. Цитата Ссылка на комментарий
1 Tumaso Опубликовано 5 октября, 2018 Поделиться Опубликовано 5 октября, 2018 У Эмбы есть описание подобной проблемы: http://docwiki.embarcadero.com/RADStudio/Tokyo/en/Migrating_Delphi_Code_to_Mobile_from_Desktop, раздел Use a Function Call in a try-except Block to Prevent Uncaught Hardware Exceptions условно говоря, код, который может вызвать аппаратное исключение, нужно вызывать из другой процедуры, и исключение ловить уже там. Это справедливо не только для iOS, но для андроида тоже. пример: procedure InternalG1; begin try // что то, приводящее к исключению except // здесь обработчик по факту игнорируется end; end; procedure G1; begin try InternalG1; except // здесь обработчик корректно обработает исключение end; end; А вообще у Grijjy team есть хорошая библиотека обработки необработанных исключений для андроида и иоса. Barbanel 1 Цитата Ссылка на комментарий
0 Евгений Корепов Опубликовано 16 октября, 2018 Поделиться Опубликовано 16 октября, 2018 (изменено) Просто возьмите это под свой контроль - не используйте встроенный SearchBox, а создайте отдельное поле TEdit, а фильтрацию обрабатывайте руками. TListViewFilterEx = record Category : String; Name : String; Cart : String; end; procedure TFormMain.SearchBoxChangeTracking(Sender: TObject); begin Setting.Filter.Name:=SearchBox.Text; ListViewFilterEx(ListViewAction, Setting.Filter); LoadVisibleListViewItem(ListViewAction); end; procedure TFormMain.ListViewFilterEx(AListView : TListView; AFilter : TListViewFilterEx); begin AListView.Items.FilterEx:= function(X: TListItem): Boolean begin Result:= (AFilter.Category.IsEmpty or TListViewItem(X).Data['Category'].AsString.ToLower.Contains(AFilter.Category.ToLower)) And ((AFilter.Name.IsEmpty or TListViewItem(X).Data['Name'].AsString.ToLower.Contains(AFilter.Name.ToLower)) or (AFilter.Name.IsEmpty or TListViewItem(X).Data['Detail'].AsString.ToLower.Contains(AFilter.Name.ToLower))); end; end; procedure TFormMain.LoadVisibleListViewItem(const AListView : TListView; ATopItemIndex : Integer = -1); Var LTopItemIndex, I : Integer; begin if Setting.Flags.ListViewActionLoaded then begin if ATopItemIndex=-1 then LTopItemIndex:=GetListViewTopItemIndex(AListView) else LTopItemIndex:=ATopItemIndex; for I := LTopItemIndex to LTopItemIndex + LoadVisibleListViewItemCount do if I<=AListView.ItemCount-1 then begin AListView.Adapter.ResetView(AListView.Items.Item[I]); end; end; end; Суффикс Ex в AListView.Items.FilterEx игнорируйте, используйте AListView.Items.Filter. Это я для нормального поиска (по всем полям и Data, а не только по Text) переписывал исходники ListView... С таким кодом возможно у вас будет больше возможностей для перехвата исключения. Ну или игнорирования поиска пока работает скролл ListView. Изменено 16 октября, 2018 пользователем Евгений Корепов Anatoliy 1 Цитата Ссылка на комментарий
Вопрос
haword
например raise EArgumentOutOfRangeException.CreateRes(@SArgumentOutOfRange) полностью закрывает приложение на Android. Можно как ни будь отловить вообще любой вызов raise и не дать программе закрыться?
До Application.OnException не доходит.
Изменено пользователем hawordСсылка на комментарий
11 ответов на этот вопрос
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.