-
Постов
135 -
Зарегистрирован
-
Посещение
-
Победитель дней
12
Активность репутации
-
zairkz отреагировална Kitty в Руководства RAD Studio Mobile Tutorials - Free eBook
Ждём книгу от автора этого форума. У неё будет успех и востребованность. Надеямся автор расставит приоритеты в своём расписании и найдёт время на выпуск книги.
-
zairkz отреагировална xenon54 в [iOS] Запуск
Советую почитать про TestFlight. Это поможет вам удаленно установить свое приложение тому, кому вы хотите показать его на этапе разработки.
Да и все ответы на ваши вопросы я без труда нашел на просторах интернета когда сам проходил этот путь джедая
-
zairkz отреагировална Brovin Yaroslav в "Лишние" Items в отладчике?
Чтобы каждый раз при добавлении элемента не запрашивать память на 1 элемент, список растет на несколько элементов вперед. За это отвечает свойство Capacity. Таким образом скорость добавления элементов возрастает.
Да, но не смотря на это, пользователь работает только в границах от [0, Count -1]
-
zairkz отреагировална Kitty в TMapsEngine
Тут есть пару слайдов: http://www.slideshare.net/DenisVasilyev1/tmapview-ios-android
-
zairkz отреагировална zairkz в TMapsEngine
ZuBy красавчик, компонент шикарный, очень помогает его компонент, на счет HereMaps не знал , хотя сидим в одном кабинете
-
zairkz получил реакцию от Равиль Зарипов (ZuBy) в TMapsEngine
ZuBy красавчик, компонент шикарный, очень помогает его компонент, на счет HereMaps не знал , хотя сидим в одном кабинете
-
-
zairkz отреагировална Равиль Зарипов (ZuBy) в TMapsEngine
Компонент TMapsEngine
Возможности
Нативный LocationSensor [ANDROID] Геокодинг/Реверс геокодинг через Google API, Yandex API, Here Maps API Построение маршрута через Google Distance API Расчет дистанции по прямой Совместим со стандартным компонентом TLocationSensor
Видео демонстрация
На видео видно как TMapView косячик с миллионом точек, приложение зависло при отрисовке, но с этим ничего не поделать.
Без синхронизации не возможно отрисовать все точки
Исходник
TMapsEngine_source.zip
TMapsEngine_Seattle_10.zip
Скачать APK (долго он там не пролежит, а форум не позволяет загрузить zip размером 7,4 мб )
-
zairkz отреагировална kami в [Android] программа закрывается при использовании LocationSensor и Memo
{$IFDEF offtop}Мсье знает толк в извращениях {$ENDIF}
-
zairkz отреагировална Равиль Зарипов (ZuBy) в TLocationSensor - GPS трекер
вот оригинальный код, я же себе сделал компонент сразу с геокодингом и реверс геокодингом (через три сервиса here maps, google maps, yandex maps) +расчёт дистанции по дороге через google +расчёт дистанции по прямой
AndroidGPS.zip
-
zairkz отреагировална Равиль Зарипов (ZuBy) в [Android] программа закрывается при использовании LocationSensor и Memo
Это все конечно хорошо, но не всегда работает.
Вот такая зверская конструкция на Windows отрабатывается на ура, а на андроиде бывают лаги
TTask.Run(procedure begin // тут обращение к базе например TThread.Synchronize(nil, procedure begin // тут разбираем данные TTask.Run(procedure begin // тут сохраняем TThread.Queue(nil, procedure begin // тут обновляем данные в визуальных компонентах end); end); end); end); пришлось отказаться от такой конструкции, но иногда она жутко удобна
-
zairkz отреагировална AngryOwl в Заставка приложения до Form1.Show
"- создайте форму (например fmSplash) и на ее событие OnFormCreate делаете все что вам нужно
- и когда, на ваш взгляд, уже пора создать главную форму приложения - обновите информацию в TfgProgressDialog и в блоке
TThread.Synchronize(TThread.CurrentThread, procedure
begin
{....}
Application.CreateForm(TfmMain, fmMain);
end);
создайте все формы вашего приложения..."
чего там только нет... даже боюсь начать перечислять...
-
zairkz отреагировална FeLDMARShaL в Оптимизация
Долго думал над тем в какую ветку форума запихать свой вопрос, возможно по этой причине не смог найти ответа. Меня интересуют вопросы оптимизация приложения. Причем во всех смыслах.
Во-первых, хочется максимально разогнать работу интерфейса, время отклика от нажатия на контролы уменьшить бы, или к примеру, сделать более плавное прокручивание на сролпанели. Единственное что нашел своими силами в этом направлении, это свойство у формы Quality. Это свойство я выставил в HighPerfomance. (кстати, а я правильно понял, что это то что мне надо?). После выставления этого свойства, я визуально заметил, что стало более быстро все работать. Но больше ничего не смог придумать. К примеру, на iOS устройстве, панель (скроллируемая) на которой находятся кнопки (много кнопок) заметно тормозит при сроле – т.е. сразу палится что это не нативное приложение. А также замечаю, что самое первое нажатие на кнопку, тоже подвисает, по отношению ко второму нажатию.
Во-вторых, я заметил, что приложение, которое свернули в фоновом режиме очень сильно кушает аккумулятор. К примеру, на моем андройде, за 12 часов аккумулятор со 100% сел до 60%. На iPhone со 100% до 85%. Это при учете что wi-fi был отключен, и без симкарты телефоны были. Т.е. без приложения максимум просадка за 12 часов это 1-2%. К счастью, пока радует, что стандартная андройдовская фитча не показывает, что это именно наше приложение кушает аккумулятор – но думаю, что опытные пользователи раскурят в чем причина того что девайс, стал сильно проседать по заряду. Само собой, когда приложение в фоне оно не работает, никаких потоков там не запускается и ничего не делается. Я думаю может какой-то датчик включился или еще что-нибудь. В общем нужен совет как можно уменьшить потребление заряда аккумулятора.
В общем нужны любые советы (можно из реальной жизни) или какие-нибудь мануалы как разогнать приложение и сократить ресурсопотребляемость его.
П.С, совсем скоро будем заливать наше приложение в AppStore и GooglePlay, и хочется, чтобы оно вело себя максимально нативно (похоже на приложения, написанные специально под эти плтформы)
Буду благодарен любым ссылкам, мастер-классам, примерам кода, мануалам, документации, может быть какие-нибудь конференции по этому поводу или веб семинарам…
-
zairkz отреагировална Brovin Yaroslav в [Android] программа закрывается при использовании LocationSensor и Memo
Если у вас зависает программа, то замените Synchronize на TThread.Queue. Это точно должно помочь
Этим летом мне выделили время и я плотно занимался проблемой "черного экрана" на андроиде и креша при закрытии приложения на Андроиде. На форуме было очень много обсуждений этой проблемы. Поэтому есть пара советов, как ее избежать в текущих версия среды:
Все операции требуемые выполнять в Delphi UI потоке нужно выполнять в Synchronize или Queue. Второе предпочтительнее. Отличие между Synchronize и Queue - только в том, что первое остановит выполнение потока до тех пор, пока не выполниться код в Synchronize. Queue наборот, поставить в очередь ваш код на выполнение. Поэтому если вы можете выполнять вашу задачу асинхронно, то лучше использовать Queue, если нет, то Synchronize. В вашем случае вы можете выполнить добавление маркера асинхронно, так как результат сенсора вы не используете в будущем для вычислений. То есть у вас только задача отображения данных в Real Time. Поэтому
-
zairkz отреагировална AngryOwl в Заставка приложения до Form1.Show
Все "быстренько" бывает только если приложение простое "как две копейки"...
В реальности - это действительно напрягает.
Извернуться можно примерно так:
- создайте форму (например fmSplash) и на ее событие OnFormCreate делаете все что вам нужно
- создайте TfgProgressDialog (например), который будет отображать процесс загрузки приложения и инициализацию переменных, модулей и т.п.
- подготовьте все что вам нужно для вашего приложения, до создания главной формы (и других)
- все что требует отображения в TfgProgressDialog помещайте в блоки
TThread.Synchronize(TThread.CurrentThread, procedure begin {....} end); - все что не требует отображения в GUI и никак не связано с компонентами других форм, и что может выполняться "постольку-поскольку" помещайте в блоки
TThread.CreateAnonymousThread(procedure begin {...} end).Start; - и когда, на ваш взгляд, уже пора создать главную форму приложения - обновите информацию в TfgProgressDialog и в блоке
TThread.Synchronize(TThread.CurrentThread, procedure begin {....} end); создайте все формы вашего приложения...
З.Ы. как пример можете посмотреть тут. просто иначе объяснить не вижу возможности...
-
zairkz отреагировална rustam_d в Заставка приложения до Form1.Show
Delphi XE8 upd1, FMX.
Перелопатил форумы по заставкам. Я думаю тема все еще не раскрыта.
реализация встроенной заставки с ХЕ7 чепуха годная для студентов.
Кому нужная 0.0001с заставка и потом черный экран на секунды длящиеся вечностью?
Господа, предлагаю поставить точку с этим недоразумением.
Пробовал и двойные формы, типа одна с картинкой и только потом главная и т.п.
Также сама сплешь форма криейтид главную...нормального эффекта не добился...
Может что то не так делаю, а может руки кривые, я незнаю. А может надо было влить
пару тон процессинг мессенджеров или апдейтов с репаинтами?
Видал варианты, где ковыряют манифесты, деплои и т.п. Однако по отзывам и там не все чисто.
А главное все это как то не в одном месте не упорядоченно разбросано...
Коллеги, у кого есть идеальное и простое решение для дроида и иоса...прошу поделиться...
-
zairkz отреагировална Кривяков Виталий в TUITabControl
Добрый день!
В теме про наш продукт http://fire-monkey.ru/topic/1519-1c-papyc-mobilnoe-prilozhenie-dlia-masterov-priemschiko/ меня просили поделиться исходным кодом компонента TabControl с поддержкой слайда табов пальцем. С удовольствием делюсь
В составе архива сам компонент и пример его использования.
FMXUI.zip
-
zairkz получил реакцию от zloid в Медленно перемещаются контролы на Android
Может поможет настройка рендеринга приложения, при использовании у меня скорость анимацию увеличивается, а качество изображения незаметно, где то на форуме было:
procedure RenderingSetupCallback(const Sender, Context: TObject; var ColorBits, DepthBits: Integer; var Stencil: Boolean; var Multisamples: Integer); begin ColorBits := 16; // default is 24 DepthBits := 0; // default is 24 Stencil := false; // default is True Multisamples := 0; // default depends on TForm.Quality or TForm3D.Multisample end; И прописать в событии FormCreate
procedure TForm_main.FormCreate(Sender: TObject); var SetupService: IFMXRenderingSetupService; begin if TPlatformServices.Current.SupportsPlatformService(IFMXRenderingSetupService, IInterface(SetupService)) then SetupService.Subscribe(RenderingSetupCallback); end; -
zairkz получил реакцию от Brovin Yaroslav в Медленно перемещаются контролы на Android
Может поможет настройка рендеринга приложения, при использовании у меня скорость анимацию увеличивается, а качество изображения незаметно, где то на форуме было:
procedure RenderingSetupCallback(const Sender, Context: TObject; var ColorBits, DepthBits: Integer; var Stencil: Boolean; var Multisamples: Integer); begin ColorBits := 16; // default is 24 DepthBits := 0; // default is 24 Stencil := false; // default is True Multisamples := 0; // default depends on TForm.Quality or TForm3D.Multisample end; И прописать в событии FormCreate
procedure TForm_main.FormCreate(Sender: TObject); var SetupService: IFMXRenderingSetupService; begin if TPlatformServices.Current.SupportsPlatformService(IFMXRenderingSetupService, IInterface(SetupService)) then SetupService.Subscribe(RenderingSetupCallback); end; -
zairkz отреагировална Равиль Зарипов (ZuBy) в LocationSensor.Sensor.State используется?
чтобы получить статус GPS (для Android) включен или нет, нужно использовать следующий код
function CheckGPSActive: boolean; // uses // Androidapi.JNIBridge, Androidapi.JNI.Location, Androidapi.JNI.JavaTypes, // Androidapi.JNI.GraphicsContentViewText, Androidapi.Helpers {$IFDEF ANDROID} var LocManagerObj: JObject; LocationManager: JLocationManager; allProviders: JList; I: Integer; begin Result := false; // запрашиваем сервис Location LocManagerObj := SharedActivityContext.getSystemService(TJContext.JavaClass.LOCATION_SERVICE); if Assigned(LocManagerObj) then begin // получаем LocationManager LocationManager := TJLocationManager.Wrap((LocManagerObj as ILocalObject).GetObjectID); if Assigned(LocationManager) then begin // запрашиваем список всех провайдеров allProviders := LocationManager.getProviders(true); // выводим список if Assigned(allProviders) then begin with TStringList.Create do begin for I := 0 to allProviders.size - 1 do Add(JStringToString(allProviders.get(I).toString)); if ((IndexOf('gps') >= 0) or (IndexOf('network') >= 0)) then Result := true; Free; end; end; end; end; {$ELSE} begin Result := false; {$ENDIF} end; -
zairkz получил реакцию от Brovin Yaroslav в [TWebBrowser] [iOS] Открытие прикрепленной html страницы в TWebBrowser
Напишите пожалуйста какой путь вы указываете при вложении файлов RemotePath в Deployment для Android и какой для iOS.
К примеру для Android укажите assets\internal
Для iOS StartUp\Documents
Регистр Важен!
-
zairkz отреагировална Brovin Yaroslav в [TMultiView] Как избежать задержки при первом появлении TMultiView?
Так, я посмотрел. Сохраняем себе такую процедуру:
procedure PreloadContent(const Control: TControl); var I: Integer; begin if Control is TStyledControl then TStyledControl(Control).ApplyStyleLookup; for I := 0 to Control.ControlsCount - 1 do PreloadContent(Control.Controls[I]); end; Она форсирует загрузку стилей. Задержка при появлении TMutliView заключается в том, что стиль загружается не сразу у любого контрола, а только по мере появления контрола. Обычно это происходит при первой отрисовки. Это правило касается всех контролов.
Поэтому, в этом случае, вам нужно форсировать загрузку стилей. Это можно сделать при помощи моей процедуру PreloadContent.
Добавьте в TForm.OnCreate и это решит задержку при первом появлении:
PreloadContent(MultiView1); -
zairkz отреагировална UniSoft в Проблемы со стилями и релиз конфигурацией XE8 &C++
Проблема в инициализации модулей, точнее в последовательности их инициализации. FMX.Types.pas initialization ... // <<< тут проблема, // на момент вызова этого конструктора, инициализация модуля System.Rtti.pas // еще не выполнялась... // т.е. модуль System.Rtti.pas инициализируется после FMX.Types.pas SharedContext := TRttiContext.Create; ... System.Rtti.pas class function TRttiContext.Create: TRttiContext; begin EnsurePoolToken(@Result.FContextToken); end; constructor TPoolToken.Create; begin TMonitor.Enter(PoolLock); // вот тут то и падение, модуль еще не инициализирован и PoolLock = nil try if Pool = nil then begin Pool := TRttiPool.Create; PoolRefCount := 1; end else Inc(PoolRefCount); finally TMonitor.Exit(PoolLock); end; end; procedure EnsurePoolToken(TokenRef: PInterface); var sample: Pointer; procedure DoCreate; var tok: IInterface; begin tok := TRttiContext.FGlobalContextToken; if tok = nil then tok := TPoolToken.Create; if AtomicCmpExchange(PPointer(TokenRef)^, Pointer(tok), sample) = sample then begin // We won the race to initialize the TokenRef location, so // zero-out interface reference without decrementing reference count. PPointer(@tok)^ := nil; end; end; begin sample := PPointer(TokenRef)^; if sample <> nil then Exit; DoCreate; end; initialization ... PoolLock := TObject.Create; Есть еще один нюанс, инициализация System.Rtti.pas зачем-то выполняется два раза, к краху это не приведет, но небольшой (не накопительный) memleak будет. Проблема в библиотеках, и похоже только Win32 ЗЫ. к стилям никакого отношения не имеет... достаточно одной строчки: void __fastcall TForm1::FormCreate(TObject *Sender) { TValue::From<String>("test"); } -
zairkz получил реакцию от Равиль Зарипов (ZuBy) в При изменении размеров или положения компонентов на форме всё проподает
В скриншоте не выключены превью стили в Multi-Device Preview.
0. Перезапустите Дельфи
1. Создайте новый проект MultiDeviceProject
2. Выключите превью стилей в меню Multi-Device Preview как у Вас в скриншоте.
3. Закройте проект не сохраняя
4. Откройте свой проект (не перезапускайте Delphi)
Попробуйте пожалуйста еще раз.
-
zairkz получил реакцию от Равиль Зарипов (ZuBy) в При изменении размеров или положения компонентов на форме всё проподает
Ну так то, я это и писал чтобы отключить превью )