Страница 1 из 1
Аналог MessageBox в Android (API)
Добавлено:
28.01.2014 23:27:24
Devil
Ребят, просьба помочь
Пишу преимущественно на Delphi, сейчас разрабатываю библиотеку, которая должна компилироваться и корректно работать под ARM. Более того, архитектура ARM имеет свои особенности, нужно писать такой код, чтобы он раскладывался в эффективную последовательность ассемблерных команд.
Поэтому я установил XE5, стал экспериментировать с андроид-дивайсом
Первое, что взбесило - это конечно же размер бинарника (50Мб) и как следствие время компиляции/линковки
Поэтому для тестов я решил отказаться от FM. Но мне нужно какое-либо средство вывода информации.
Например аналог MessageBox
В интернете я увидел что-то типа DialogAlert, но на Java, а на паскале я этого повторить не смог. Даже самую малость
В связи с этим я решил обратиться на ваш форум. Я конечно понимаю, что к Delphi тут отношение предвзятое. Но тем не менее хочется надеяться, что кто-нибудь из вас справлялся с такой задачей. Ибо как известно FPC поддерживает Android уже давно
Благодарю
Re: Аналог MessageBox в Android (API)
Добавлено:
29.01.2014 10:11:32
haword
ну вообще то релизная версия будет около 20 мегабайт. а насчет вызова это надо копать в сторону вызова через апи явы как в хе и делается.
Re: Аналог MessageBox в Android (API)
Добавлено:
29.01.2014 11:13:56
Devil
Без FM около 1.5Мб получилось
А как там в недрах делается - я пытался протрейсить, но так и не дошёл до какого-то вменяемого места
Вроме того традиционно диалоговые окна (модуль Dialogs) типа ShowMessage делается через создание обычных форм, что мне как раз не нужно
Re: Аналог MessageBox в Android (API)
Добавлено:
29.01.2014 14:54:42
hinst
Делал вызовы к Java из FPC.
Вот какая-то статья для Delphi:
http://www.pclviewer.com/android/androidJNI.html Там объясняется, как что делать
Re: Аналог MessageBox в Android (API)
Добавлено:
29.01.2014 15:11:53
stanilar
Почему никто не умеет искать
компоненты?
P.S. Но сам этот компонент не использовал, просто как-то задался вопросом...
Re: Аналог MessageBox в Android (API)
Добавлено:
29.01.2014 16:42:43
Devil
Нипанятна
Там написано, что нужно чё-то устанавливать
А попроще нельзя? Есть же стандартные API-модули.
Неужели нельзя просто писать код без создания дополнительных xml?
stanilar писал(а):Почему никто не умеет искать компоненты?
P.S. Но сам этот компонент не использовал, просто как-то задался вопросом...
Во-первых, там тоже какая-то мутотень
Во-вторых, XE5 ещё не поддерживается: пишут (XE5 in near future)
Re: Аналог MessageBox в Android (API)
Добавлено:
29.01.2014 17:54:35
stanilar
Есть еще компоненты от товарища, что написал "нативные" (вот как теперь понимать это слово?) компоненты для iOS под Delphi . Но это тебе самому придеться поискать. Если вспомню где я их видел - напишу (если я их действительно видел).
Добавлено спустя 1 минуту 32 секунды:Однако
помню
Re: Аналог MessageBox в Android (API)
Добавлено:
29.01.2014 21:16:53
Devil
stanilar писал(а):Есть еще компоненты от товарища, что написал "нативные" (вот как теперь понимать это слово?) компоненты для iOS под Delphi . Но это тебе самому придеться поискать. Если вспомню где я их видел - напишу (если я их действительно видел).
Добавлено спустя 1 минуту 32 секунды:Однако
помню
Блин, прикольно
Даже с демками
Спасибо, завтра попробую!
Добавлено спустя 13 часов 18 минут 3 секунды:Вообще странная библиотека
Позиционируется как набор нативных компонентов... только нафиг он нужен, если в конечном счёте всёравно используются FM
Ну ладно. Есть там модуль "DPF.Android.JAlertDialog". Попробовал простой код - всё зависло и хрен знает куда ушло
- Код: Выделить всё
procedure TForm1.Button2Click(Sender: TObject);
var
Dialog: TDPFJAlertDialog;
begin
Dialog := TDPFJAlertDialog.Create(Self);
Dialog.ShowMessageDialog('title', 'message', ['бла-бла']);
Dialog := nil;
end;
Стал трейсить - всё крашется в ShowMessageDialog на строке
- Код: Выделить всё
FJAlertDialog_Builder := TJAlertDialog_Builder.JavaClass.init( SharedActivity );
Как вы думаете, что за фигня?
Re: Аналог MessageBox в Android (API)
Добавлено:
30.01.2014 11:12:06
stanilar
Думаю что от FM там JNI Bridge используется, дельфя, скорее всего, потянет ради этого всю библиотеку, но уже само то, что FM не будет запускаться, благоприятно скажется на быстродействии.
Activity на языке Android, это все равно что форма в Delphi. Причем Android требует чтоб для GUI приложений форма была всегда (думаю, это если не влезать глубоко в дебри), типа как MainForm в Delphi. И работа всех визуальных компонент и идет через этот "MainForm". Похоже диалог не пожет себя инициализировать на форме. И тут есть два варианта - Activity(форма) не создана т.е. либо компонент стоит криво, или Вы его неправильно используете. Либо неправильные параметры вызова диалога - используется русский язык, либо еще что.
Главное вопрос - демки работают?
И еще, мне почему-то казалось, что эту либу надо использовать в связке с Eclipse, т.е. true путь работы с андроид - форма через Eclipse + библиотека от lazarus(Delphi). Компонент работает без Eclipse?
Добавлено спустя 3 минуты 39 секунд:
А... Не заметил (слона)... Обработчик кнопки... Т.е. и форма показалась, и кнопка обработалась, повис диалог?
Добавлено спустя 1 минуту 38 секунд:
Кстати, что у Вас за форма - FM или "нативная"?
Добавлено спустя 40 минут 3 секунды:
По поводу формы. Понятно зачем нужен FM - это возможность редактирования под виндой. Если компонент действительно нативный, то этой форма может и не быть в RunTime.
Посмотрел пример использования TDPFJAlertDialog - его не создают в RunTime, его кладут на форму в DesignTime и потом вызывают из кода.
Добавлено спустя 21 минуту 55 секунд:
Похоже что работать с компонентом как с VCL не получится. В android надо всему давать разрешения через файл проекта, делать разные обязательные и не очень настройки, короче та еще система. Т.е. не надо ничего создавать в RunTime.
Добавлено спустя 1 минуту 50 секунд:
З.Ы. у меня нет Delphi XE5 и не планирую его ставить в ближайшем будущем, все разсуждения - IMHO.
Re: Аналог MessageBox в Android (API)
Добавлено:
31.01.2014 10:22:05
Devil
Честно говоря, так и не понял, зачем вообще этот "D.P.F Delphi Android Native Components"
Всё так же юзается FMX, всё такое же время компиляции, всё те же 50Мб *.so
Re: Аналог MessageBox в Android (API)
Добавлено:
31.01.2014 11:42:36
stanilar
FMX используется для DesignTime, а дельфи просто тянет за собой код библиотек, вопрос в том, что используется в RunTime.
Re: Аналог MessageBox в Android (API)
Добавлено:
31.01.2014 12:18:42
Devil
FMX.Forms содержит внутри переменную Application, которая в конечном счёте инициализируется и запускается
В итоге весь FM работает
Re: Аналог MessageBox в Android (API)
Добавлено:
03.02.2014 10:58:04
Devil
В итоге сделал такую вещь:
procedure ShowMessage(const S: string); overload;
begin
if (S <> '') then
begin
Halt;
end;
// raise Exception.Create(#13#13 + S);
end;
procedure ShowMessage(const FmtStr: string; const Args: array of const); overload;
begin
ShowMessage(Format(FmtStr, Args));
end;
На строку if (S <> '') ставлю брейкпоинт и читаю сообщение
В итоге *.so 2Mb
Компиляция соответственно быстрее
Кстати забавно, что в дебагере русские символы не отображаются