Аналог MessageBox в Android (API)

Общие вопросы программирования, алгоритмы и т.п.

Модератор: Модераторы

Аналог MessageBox в Android (API)

Сообщение Devil » 28.01.2014 23:27:24

Ребят, просьба помочь

Пишу преимущественно на Delphi, сейчас разрабатываю библиотеку, которая должна компилироваться и корректно работать под ARM. Более того, архитектура ARM имеет свои особенности, нужно писать такой код, чтобы он раскладывался в эффективную последовательность ассемблерных команд.

Поэтому я установил XE5, стал экспериментировать с андроид-дивайсом
Первое, что взбесило - это конечно же размер бинарника (50Мб) и как следствие время компиляции/линковки

Поэтому для тестов я решил отказаться от FM. Но мне нужно какое-либо средство вывода информации.
Например аналог MessageBox

В интернете я увидел что-то типа DialogAlert, но на Java, а на паскале я этого повторить не смог. Даже самую малость
В связи с этим я решил обратиться на ваш форум. Я конечно понимаю, что к Delphi тут отношение предвзятое. Но тем не менее хочется надеяться, что кто-нибудь из вас справлялся с такой задачей. Ибо как известно FPC поддерживает Android уже давно

Благодарю
Devil
новенький
 
Сообщения: 40
Зарегистрирован: 10.12.2008 09:56:33

Re: Аналог MessageBox в Android (API)

Сообщение haword » 29.01.2014 10:11:32

ну вообще то релизная версия будет около 20 мегабайт. а насчет вызова это надо копать в сторону вызова через апи явы как в хе и делается.
haword
постоялец
 
Сообщения: 301
Зарегистрирован: 02.03.2006 11:34:40

Re: Аналог MessageBox в Android (API)

Сообщение Devil » 29.01.2014 11:13:56

Без FM около 1.5Мб получилось
А как там в недрах делается - я пытался протрейсить, но так и не дошёл до какого-то вменяемого места

Вроме того традиционно диалоговые окна (модуль Dialogs) типа ShowMessage делается через создание обычных форм, что мне как раз не нужно
Devil
новенький
 
Сообщения: 40
Зарегистрирован: 10.12.2008 09:56:33

Re: Аналог MessageBox в Android (API)

Сообщение hinst » 29.01.2014 14:54:42

Делал вызовы к Java из FPC.
Вот какая-то статья для Delphi: http://www.pclviewer.com/android/androidJNI.html Там объясняется, как что делать
Аватара пользователя
hinst
энтузиаст
 
Сообщения: 781
Зарегистрирован: 12.04.2008 18:32:38

Re: Аналог MessageBox в Android (API)

Сообщение stanilar » 29.01.2014 15:11:53

Почему никто не умеет искать компоненты?

P.S. Но сам этот компонент не использовал, просто как-то задался вопросом...
stanilar
постоялец
 
Сообщения: 289
Зарегистрирован: 09.03.2010 19:09:02

Re: Аналог MessageBox в Android (API)

Сообщение Devil » 29.01.2014 16:42:43

Нипанятна

hinst писал(а):Делал вызовы к Java из FPC.
Вот какая-то статья для Delphi: http://www.pclviewer.com/android/androidJNI.html Там объясняется, как что делать

Там написано, что нужно чё-то устанавливать
А попроще нельзя? Есть же стандартные API-модули.
Неужели нельзя просто писать код без создания дополнительных xml?

stanilar писал(а):Почему никто не умеет искать компоненты?
P.S. Но сам этот компонент не использовал, просто как-то задался вопросом...

Во-первых, там тоже какая-то мутотень :)
Во-вторых, XE5 ещё не поддерживается: пишут (XE5 in near future)
Devil
новенький
 
Сообщения: 40
Зарегистрирован: 10.12.2008 09:56:33

Re: Аналог MessageBox в Android (API)

Сообщение stanilar » 29.01.2014 17:54:35

Есть еще компоненты от товарища, что написал "нативные" (вот как теперь понимать это слово?) компоненты для iOS под Delphi . Но это тебе самому придеться поискать. Если вспомню где я их видел - напишу (если я их действительно видел).

Добавлено спустя 1 минуту 32 секунды:
Однако помню
stanilar
постоялец
 
Сообщения: 289
Зарегистрирован: 09.03.2010 19:09:02

Re: Аналог MessageBox в Android (API)

Сообщение Devil » 29.01.2014 21:16:53

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 );


Как вы думаете, что за фигня?
Devil
новенький
 
Сообщения: 40
Зарегистрирован: 10.12.2008 09:56:33

Re: Аналог MessageBox в Android (API)

Сообщение stanilar » 30.01.2014 11:12:06

Думаю что от 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.
stanilar
постоялец
 
Сообщения: 289
Зарегистрирован: 09.03.2010 19:09:02

Re: Аналог MessageBox в Android (API)

Сообщение Devil » 31.01.2014 10:22:05

Честно говоря, так и не понял, зачем вообще этот "D.P.F Delphi Android Native Components"
Всё так же юзается FMX, всё такое же время компиляции, всё те же 50Мб *.so
Devil
новенький
 
Сообщения: 40
Зарегистрирован: 10.12.2008 09:56:33

Re: Аналог MessageBox в Android (API)

Сообщение stanilar » 31.01.2014 11:42:36

FMX используется для DesignTime, а дельфи просто тянет за собой код библиотек, вопрос в том, что используется в RunTime.
stanilar
постоялец
 
Сообщения: 289
Зарегистрирован: 09.03.2010 19:09:02

Re: Аналог MessageBox в Android (API)

Сообщение Devil » 31.01.2014 12:18:42

FMX.Forms содержит внутри переменную Application, которая в конечном счёте инициализируется и запускается
В итоге весь FM работает
Devil
новенький
 
Сообщения: 40
Зарегистрирован: 10.12.2008 09:56:33

Re: Аналог MessageBox в Android (API)

Сообщение Devil » 03.02.2014 10:58:04

В итоге сделал такую вещь:

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
Компиляция соответственно быстрее

Кстати забавно, что в дебагере русские символы не отображаются :)
Devil
новенький
 
Сообщения: 40
Зарегистрирован: 10.12.2008 09:56:33


Вернуться в Общее

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 17

Рейтинг@Mail.ru