Перейти к содержанию
Fire Monkey от А до Я

Евгений Корепов

Пользователи
  • Постов

    738
  • Зарегистрирован

  • Посещение

  • Победитель дней

    100

Весь контент Евгений Корепов

  1. С выводом проблем как раз нет - кредитка Тинькова (в рублях), реквизиты на пополнение в долларах есть прямо в Личном кабинете. Деньги приходят за пару суток, без процентов, по курсу ЦБ. На rsdn нашел только https://rsdn.ru/forum/shareware/6489133.flat#6489133 , но и за это уже спасибо!
  2. Как раз полно статей об уклонении от уплаты налогов ;-) Четкой инструкции о работе как физ. лицо, без создания ИП, не нашел. Мой печальный опыт закончился требованием налоговой предоставить ИНН и КПП гугля (для заполнения листа Б декларации - доходы полученные за рубежом), а объяснения что эти реквизиты чисто российская придумка вызвали у них когнитивный диссонанс. В итоге сказали не мешать им работать своими смешными копейками. Может наведете на полезные статьи? Заранее благодарю.
  3. Спасибо за статью! К ней бы еще добавить логическое окончание - настройка платёжных данных, легальный вывод средств и уплата налогов с полученных доходов из за рубежа. Последнее особенно актуально. P.S. Как я понимаю прелести Firebase Analytics для пользователей Delphi не доступны?
  4. Способов множество, вот один из них: function TFormMain.GetCheckedIndex : Integer; Var I : Integer; begin for I := 0 to ListBox.Count-1 do begin if Assigned(ListBox.ItemByIndex(I).Children.Items[0]) then if ListBox.ItemByIndex(I).Children.Items[0] is TRadioButton then if (ListBox.ItemByIndex(I).Children.Items[0] as TRadioButton).IsChecked Then begin Result:=I; Exit; end; end; Result:=-1; end; Или же можно назначить всем один обработчик изменения ARadioButton.OnChange:=RadioButtonChange; procedure TFormMain.RadioButtonChange(Sender: TObject); Var Index : Integer; begin if Sender is TRadioButton then Index:=((Sender as TRadioButton).Parent as TListBoxItem).Index; end;
  5. Вариант с Posix-таймером, показывает еще более худшие результаты :-( Видимо на Persistent можно забить. Нужно писать сервис. Где только взять 80k рублей на апгрейд с XE8 до последней версии.
  6. Приложение с Persistent=True умерло окончательно спустя два часа. Вот как то так.
  7. Интервал из 1 минуты превращается в десять. Правда пока я курил и листал новости на телефоне (с 2016-06-23 14:27:35) запросы опять вернулись на минутный интервал. Приложение на передний план с начала эксперимента не выводил. Как вообще работает TTimer Delphi на андроиде? Может есть возможность задействовать некий аппаратный таймер? Есть что то такое?
  8. Не удержался и написал сам приложение для теста Persistent. Приложение пишет раз в минуту, после этот пишет 5 раз с интервалом в 1 секунду. Приложение запустил, нажал кнопку Home дабы свернуть его. Cледить за процессом можно здесь http://kayfolom.ru/?cmd=read&api_key=Persistent_test01, или в json формате здесь http://kayfolom.ru/?cmd=read&api_key=Persistent_test01&output_format=json Делаем ставки господа и дамы! ;-) P.S. Эксперимент не удался. После нескольких тестов выяснилось что запросы перестают приходить даже если приложение на переднем фоне и телефон блокируется по таймауту. Нажатие Хоме, тоже останавливает приложение. Даже если выбрать приложение из списка запущенных, таймеры не просыпаются до тех пор, пока не ткнеш на какой либо элемент управления (кнопку к примеру).Оставляю приложение в фоне, в надежде понять логику режима Persistent.
  9. Хорошая идея! Добавил не обязательный параметр output_format, если он равен json, то выводится в json: http://kayfolom.ru/?cmd=read&api_key=7imq4rcq7rcqm7q3&output_format=json { "status": "ok", "logs": [ { "datetime": "2016-06-23 11:19:40", "datetime_unix": "1466669980", "ip": "195.22.104.78", "message": "Я еще живой, не дождетесь!" }, { "datetime": "2016-06-23 11:19:26", "datetime_unix": "1466669966", "ip": "195.22.104.78", "message": "Я еще живой, не дождетесь!" }, { "datetime": "2016-06-23 11:19:25", "datetime_unix": "1466669965", "ip": "195.22.104.78", "message": "Я еще живой, не дождетесь!" }, { "datetime": "2016-06-23 11:19:20", "datetime_unix": "1466669960", "ip": "195.22.104.78", "message": "Я еще живой, не дождетесь!" } ] }
  10. Поиграйтесь с опциями компилятора, возможно в релизе оптимизация или еще что влияет. Я как то бился над подобной проблемой несколько дней, выяснилось что включение оптимизации выполняло один из циклов for задом наперед ;-)
  11. unit Unit1; interface uses System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.Controls.Presentation, FMX.StdCtrls; type TForm1 = class(TForm) ProgressBar: TProgressBar; procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } Timer : TTimer; procedure TimerTimer(Sender: TObject); end; var Form1: TForm1; implementation {$R *.fmx} procedure TForm1.FormCreate(Sender: TObject); begin ProgressBar.Min:=0; ProgressBar.Max:=100; Timer:=TTimer.Create(Self); Timer.Interval:=10; // милисекунд, 1000 = 1 секунде Timer.OnTimer:=TimerTimer; Timer.Enabled:=True; end; procedure TForm1.TimerTimer(Sender: TObject); begin ProgressBar.Value:=ProgressBar.Value+0.1; if ProgressBar.Value>=ProgressBar.Max then Timer.Enabled:=False; end; end.
  12. Попробуйте поэкспериментировать с "Project options -- Version info -- persistent=true", как уже сказал уважаемый krapotkin. Сделайте приложение пустышку которое будет раз в N секунд отсылать запрос на сервер. Чем черт не шутит, может этот вариант подойдет. Я вам безвоздмездно предоставляю api на одном из своих хостингов, на одном из не используемом домене: http://kayfolom.ru/?cmd=[write|read]&api_key=[api_key]&message=[message] cmd - write пишем, read читаем api_key - произвольная строка до 40 символов, идентифицирующая проект, к примеру "kasjlqw4q4t784" или "My_test_persistent_project", лучше использовать латинские буквы без спецсимволов и пробелов. message - произвольная строка, на любом языке, в кодировке utf8. Максимальная длина 255 символов. Пример использования: В своем приложении вы делаете так procedure LogToServer(AMessage, AAPIKey : String); Var Query : String; HTTPClient: THTTPClient; begin Query:='http://kayfolom.ru/?cmd=write&api_key='+AAPIKey+'&message='+AMessage; HTTPClient:=THTTPClient.Create; HTTPClient.Get(Query); FreeAndNil(HTTPClient); end; LogToServer('Я еще живой, не дождетесь!', '7imq4rcq7rcqm7q3'); Потом в браузере открываете ссылку http://kayfolom.ru/?cmd=read&api_key=7imq4rcq7rcqm7q3 и видите примерно следующее: 2016-06-23 11:19:40 195.22.104.78 Я еще живой, не дождетесь! 2016-06-23 11:19:26 195.22.104.78 Я еще живой, не дождетесь! 2016-06-23 11:19:25 195.22.104.78 Я еще живой, не дождетесь! 2016-06-23 11:19:20 195.22.104.78 Я еще живой, не дождетесь! { "status" : "ok" } Сможете мониторить время и с какого IP прислано сообщение. Результатами эксперимента поделитесь. У меня вот XE8, сервисы там отсутствуют, а задумки есть интересные. P.S. Если кому нужно, пользуйтесь этой штукой на здоровье. Только не злоупотребляйте. Несколько запросов с секунду это нормально, а тысячи запросов в секунду вынудят меня прикрыть лавочку :-) Если нужно, прикручу команду очистки истории.
  13. Поддержал ваш блог небольшой суммой. В наше время текстовый, русскоязычный блог посвященный Delphi редкость, в основном все перешли на видео блоги. А время смотреть полуторачасовое видео для получения информации умещающейся в паре предложений есть не у каждого ;-)
  14. Нет, вставлять надо именно Идентификатор отправителя. На кой они его обзывают то API ключем, то API FCM. Кнопка в диалоговом окне у них "Связать" или "Ок" или "Подключить", зависит он настроения переводчика. Все вставилось, связалось и подключилось. Просто с точки зрения гугля, открытое бета-тестирование - не повод для тестирования GCM, теперь уже FCM.
  15. Спасибо вам за отличные статьи! Не планируете создать статью о Firebase, в частности о консоли Firebase? Самостоятельно не получается разобраться, по какой то причине консоль уже наполнена проектами, в проектах по несколько приложений, одно и тоже приложение дублируется в трех местах. Что за проект "Google Play Android Developer" и чем он отличается от остального мусора в этой консоли.
  16. Это тот что в файле google-services.json ? "api_key": [ { "current_key": "AIza******7I" } При попытке вставить это получаю Неверный ключ FСМ API (Отправитель не зарегистрирован).
  17. Что то я совсем туплю. Не могу подключить идентификатор отправителя к проекту в Google Developer Console. В console.firebase.google.com создаю проект, в cloudmessaging вижу "Идентификатор отправителя", но при копировании его в консоль разработчика мне говорит Неверный ключ FСМ API (Неверный ключ). Проект правда в открытом бета-тестировании, может из за этого? Раньше была эта процедура через жопу, но зато работала, теперь вроде попытались сделать красиво, но видимо у меня ума не хватает. P.S. Как заставить работать консоль разработчика на английском языке? А то консоль на русском, факи и помощь большей частью на английском, даже в терминологии название пунктов меню консоли полная каша, как будто на русский переводят пол сотни переводчиков, каждый по одному предложению и у каждого свое видение мира...
  18. Тут главное не забыть RadioButton1.GroupName:='SelectDestiny' и так для всех RadioButton одинаковый GroupName, тогда выбираться будет только один. procedure TFormMain.CreateOpenComboEdit; Const GroupName = 'Select destiny'; Var I : Integer; ALisBoxItem : TListBoxItem; ARadioButton : TRadioButton; begin for I := 0 to 5 do begin ALisBoxItem:=TListBoxItem.Create(ListBox); ALisBoxItem.Text:=''; ARadioButton:=TRadioButton.Create(ALisBoxItem); ARadioButton.GroupName:=GroupName; ARadioButton.Text:=GroupName+' '+I.ToString; ARadioButton.Align:=TAlignLayout.Client; ALisBoxItem.AddObject(ARadioButton); ListBox.AddObject(ALisBoxItem); end; end;
  19. Попробуйте проверить отладкой какой размер шрифта попадает в GetTextHeight. Потому что по умолчанию размер 12, а в стиле размер может быть 18. Так же вы не выполняете ListView.ApplyStyleLookup после заполнения ListView. Очень рекомендую перед заполнением ListView выполнять код AListView.BeginUpdate; AListView.OnUpdateObjects:=Nil; После заполнения: AListView.EndUpdate; ListViewUpdateAll(AListView); // В цикле применяет ListViewUpdateObjects ко всем элементам AListView.ApplyStyleLookup; AListView.OnUpdateObjects:= ListViewUpdateObjects;
  20. У кого есть опыт монетизации приложений для Windows? Есть ли какие нибудь сервисы по размещению рекламы в таких приложениях?
  21. В первом сообщении этой темы есть ссылка на обсуждаемый здесь компонент TKRBarCodeSanner.zip, у этого компонента есть событие TKRBarCodeScannerScanResult(Sender: TObject; AResult: string), ну и AResult - это то где находится результат сканирования.
  22. Если не получается сразу определить источник ошибок, я публикую для бетатестеров новую версию приложения, где FAppStage прописана более подробно - начало конец вызова каждой подозрительной функции или кода.
  23. Я использую дополнительный модуль с отдельным потоком отправляющий все что надо на мой сервер. На сервере кусок кода на php все это пишет в лог. В основном коде использую глобальную переменную FAppStage : procedure TFormMain.ServiceConnectionOnChange(Sender: TObject; AChange: TPushService.TChanges); begin FAppStage:='ServiceConnectionOnChange start'; if AChange=[TPushService.TChange.DeviceToken] Then GetHTTP(CommandActions, -1, ''); FAppStage:='ServiceConnectionOnChange stop'; end; В проекте лежит TfgApplicationEvents, в нужных событиях, к примеру fgApplicationEventsException, идет отправка FAppStage и E: Exception. В логе я вижу где и какое исключение произошло. Достаточно удобно мне кажется.
×
×
  • Создать...