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

Tumaso

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

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

  • Посещение

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

    39

Активность репутации

  1. Thanks
    Tumaso получил реакцию от Ingalime в [Android]RAD10.4.1   
    @Ingalime
    у меня в 10.4.1 sdk лежит в C:\Users\Public\Documents\Embarcadero\Studio\21.0\CatalogRepository\AndroidSDK-2525-21.0.38860.1461 (так инсталлятор установил), соответственно всё лежит там, включая Android SDK Manager
    в 10.3.3 sdk лежит в C:\Users\Public\Documents\Embarcadero\Studio\20.0\PlatformSDKs\android-sdk-windows
  2. Like
    Tumaso отреагировална krapotkin в После обновления на Андроид 6.01   
    на всех андроид устройствах нет смысла пользоваться прямым указанием папки
    доступные программе папки перечислены в class TPath из System.IOUtils.pas
    пример
    uses System.IOUtils; fname := TPath.combine(TPath.GetDocumentsPath, 'myfile.txt');  
  3. Like
    Tumaso получил реакцию от Ingalime в А не сделать ли уроки по стилям FMX for free?   
    Да, для десктопных приложений курс до сих пор актуален, убеждаюсь по переходящим из VCL и задающим кучу одних и тех же вопросов. А FGX Native увы только для Android и (скоро) для iOS.
  4. Like
    Tumaso отреагировална Yarpda в А не сделать ли уроки по стилям FMX for free?   
    Заметил что ссылка на уроки по стилям FMX уже не доступна. Как я понял Ярослав не планирует больше продавать эти уроки, т.к. ушел в FGX Native, но по сути там довольно интересный материал (я их проходил в свое время и много раз использовал то, что узнал на них), и раз он уже не продается, может быть сделать доступ к этим урокам бесплатным? Я полагаю это могло бы популяризировать FMX. Там действительно без бутылки видео-уроков не разберешься
  5. Like
    Tumaso отреагировална OnePeople в Программное одноразовое применение InnerGlowEffect к изображению   
    Поздно, но может кому пригодится
    function TForm1.Blur(sbit: TBitmap): TBitmap; var   FilterClass: TFilterClass;   FFilter: TFilter;   FFilterParams: TFilterRec;   BitmSource, BitmDest: TBitmap; begin       BitmSource:=TBitmap.Create;       BitmSource.Assign(sbit);       Result:=TBitmap.Create;       FFilter := TFilterManager.FilterByName('GaussianBlur');       FilterClass := TFilterManager.FilterClassByName('GaussianBlur');       FFilterParams := FilterClass.FilterAttr;       FFilter.ValuesAsFloat['BlurAmount']:=5.7;       FFilter.Apply;       FFilter.ValuesAsBitmap['Input'] := BitmSource;       Result.Assign(FFilter.ValuesAsBitmap['output']);       FreeAndNil(FFilter);       FreeAndNil(BitmSource); end; function TForm1.Tint(sbit: TBitmap; tintColor: TAlphaColor): TBitmap; var   FilterClass: TFilterClass;   FFilter: TFilter;   FFilterParams: TFilterRec;   BitmSource, BitmDest: TBitmap; begin       BitmSource:=TBitmap.Create;       BitmSource.Assign(sbit);       Result:=TBitmap.Create;       FFilter := TFilterManager.FilterByName('FillRGB');       FilterClass := TFilterManager.FilterClassByName('FillRGB');       FFilterParams := FilterClass.FilterAttr;       FFilter.ValuesAsColor['Color']:=tintColor;       FFilter.Apply;       FFilter.ValuesAsBitmap['Input'] := BitmSource;       Result.Assign(FFilter.ValuesAsBitmap['output']);       FreeAndNil(FFilter);       FreeAndNil(BitmSource); end;  
  6. Like
    Tumaso получил реакцию от Ingalime в [Android] Воспроизводить аудио   
    А причем тут твой фаервол? Вопрос совсем о другом, о принципиальной возможности  воспроизведения аудиопотока с указаного адреса/порта в FMX
    Стандартный TMediaPlayer из FMX полное убожесто, не работает нормально даже в 10.4.1, поэтому про него можно забыть. Если еще кто то в него верит и надеется на чудо.
    Теоретически это могут делать FFMPEG VCL (поддерживает и FMX) и Alcinoe
  7. Like
    Tumaso отреагировална slav_z в Расположение нажатого элемента управления по отношению к экрану   
    не ClientToScreen а LocalToScreen... оно есть у фрейма...
    Пример:
    LocalToScreen(TPointF.Zero) - левый верхний угол фрейма в координатах экрана,
    LocalToAbsolute(TPointF.Zero) - левый верхний угол фрейма в координатах формы.
     
  8. Thanks
    Tumaso получил реакцию от Ingalime в Посоветуйте компонет   
    @Ingalime
    1. если высота фрейма зависит от данных, то да, вычисляйте высоту
    2. по расположению создаваемых фреймов друго под другом - самый простой вариант использовать свойство Align у фреймов (устанавить в Top), для этого размещайте создаваемые фреймы на общем контейнере для них (например на VertScrollBox)
    условно говоря примерно так:
    procedure TForm1.AddFrame(const AParent: TFmxObject; const AData: TFrameData); var LFrame: TMyFrame; begin LFrame := TMyFrame.Create(Self); // или nil, если в дальнейшем будете сами уничтожать фреймы LFrame.Parent := AParent; LFrame.Align := TAlignLayout.Top; LFrame.Data := AData; // этим кодом предполагается заполнение фрейма данными, при котором фрейм заполнит выводимые компоненты и настроит свою высоту end; procedure TForm1.FillFrames; var I: Integer; begin for I := 0 to Data.Count - 1 do AddFrame(vsbFrames, Data[I]); // vsbFrames - TVertScrollBox для размещения фреймов, Data - список данных для отображения, каждый элемент - данные для отдельного фрейма end;  
  9. Like
    Tumaso отреагировална krapotkin в Гибкие аналоги TListBox и TListView   
    вот мой вариант со свистелками
  10. Like
    Tumaso получил реакцию от Ingalime в Гибкие аналоги TListBox и TListView   
    Почему вы решили, что стандартный TListView не подойдет? Прекрасно подойдет.
    Посмотрите демо, идущее с делфи, в каталоге C:\Users\Public\Documents\Embarcadero\Studio\версия\Samples\Object Pascal\Multi-Device Samples\User Interface\ListView\VariableHeightItems. Для вашей задачи - идеальный старт
  11. Thanks
    Tumaso получил реакцию от Ingalime в Посоветуйте компонет   
    Другой вариант - использование TListView
  12. Thanks
    Tumaso получил реакцию от Ingalime в Посоветуйте компонет   
    Я бы сделал шаблонный фрейм, в котором бы выводил текст с помощью TText (или TLabel или другой), если нужно выводить картинки - TImage и т.д.
    Далее для каждой карточки создаете свой экземпляр фрейма и в качестве параметров передаете значения отображаемых полей.
    Легко в реализации, гибко, работает на всех платформах, включая Linux через FmxLinux
     
  13. Like
    Tumaso получил реакцию от Ingalime в TMapView маркер при старте   
    ImageLocationSample это банально TImage, в котором я храню изображение маркера - заказчик хотел, чтобы маркеры отображались в его корпоративном стиле
    у меня был загружен в TImage как .png
  14. Thanks
    Tumaso получил реакцию от Ingalime в TMapView маркер при старте   
    Я делал так, маркер устанавливался в заданную позицию при создании:
    var LLocation: TMapCoordinate; LMarker: TMapMarkerDescriptor; LLocation := TMapCoordinate.Create(DEFAULT_LATITUDE, DEFAULT_LONGITUDE); LMarker := TMapMarkerDescriptor.Create(LLocation, 'Название метки'); LMarker.Icon := ImageLocationSample.Bitmap; MapView.AddMarker(LMarker); MapView.Zoom := DEFAULT_ZOOM; где DEFAULT_LATITUDE и DEFAULT_LONGITUDE это мои константы с нужной координатой маркера
  15. Like
    Tumaso отреагировална slav_z в Разработка кросплатформенных приложений в одном проекте   
    ну как так то? условная компиляция! посмотрите в исходных кодах дельфи... там куча примеров...  КУЧА!!!

     
  16. Like
    Tumaso отреагировална Евгений Корепов в Создание сервиса (демона) нового стиля для Linux   
    В прошлой теме я показал как делать демонов старой школы - серьезных и самодостаточных. Но это все в прошлом. Теперь существуют системы управления процессами, где все намного, намного проще.
    Исходники тут https://github.com/EvgeniyKorepov/LinuxDaemonNewStyle
    Заметьте, теперь никаких потоков, все элементарно, systemd сделает всю работу за нас.
    Половина кода - разбор параметров командной строки. Вторая половина - бесконечный цикл, ожидающий сигналов от экземпляра класса демона нового стиля . Код самого класса сократился на треть.
    Если запустите приложения в консоли - будет самое обычное приложение, которые умрет при закрытии консоли. Запуск в качестве бессмертного демона - через systemd, причем он сможет автоматически перезапускать вашего демона при крахе. Эти параметры задаются в текстовом файле /etc/systemd/system/DaemonNewStyleTest.service
    program DaemonNewStyleTest; {$APPTYPE CONSOLE} uses System.SysUtils, System.IOUtils, System.SyncObjs, Posix.Stdlib, Posix.SysStat, Posix.SysTypes, Posix.Unistd, Posix.Signal, Posix.Fcntl, Posix.Syslog in 'Posix.Syslog.pas', UnitDaemonNewStyle in 'UnitDaemonNewStyle.pas'; var AEvent : TEventType; begin if ParamCount = 0 then begin syslog(LOG_ERR, 'No parameters'); ExitCode := EXIT_FAILURE; exit; end; if ParamStr(1).ToLower.Equals('stop') then begin if Daemon.Stop(30) then ExitCode := EXIT_SUCCESS else ExitCode := EXIT_FAILURE; exit; end; if ParamStr(1).ToLower.Equals('reload') then begin if Daemon.Reload() then ExitCode := EXIT_SUCCESS else ExitCode := EXIT_FAILURE; exit; end; if not ParamStr(1).ToLower.Equals('start') then begin syslog(LOG_ERR, 'Unknow parameters'); ExitCode := EXIT_FAILURE; exit; end; syslog(LOG_NOTICE, 'main START'); while Daemon.IsRunning do begin syslog(LOG_NOTICE, 'main LOOP'); Daemon.Execute(AEvent); if AEvent <> TEventType.None then syslog(LOG_NOTICE, 'main Daemon receive signal'); case AEvent of TEventType.Start : begin syslog(LOG_NOTICE, 'main Event START'); end; TEventType.Reload : begin // Reload config syslog(LOG_NOTICE, 'main Event RELOAD'); end; TEventType.Stop : begin syslog(LOG_NOTICE, 'main Event STOP'); ExitCode := EXIT_SUCCESS; Sleep(10); // simulate destroy delay break; end; end; Sleep(1000); end; end. systemctl start DaemonNewStyleTest.service systemctl reload DaemonNewStyleTest.service systemctl stop DaemonNewStyleTest.service  
  17. Like
    Tumaso получил реакцию от Ingalime в Требуется приложение на на все смартфоны   
    @Sashar333
    если вы из потока меняете визуальные компоненты в основном потоке приложения, то вам нужно оборачивать изменения визуальных компонентов в синхронизацию.
    А правильнее будет в потоке получить только данные, а созданием компонентов и их заполнением должен заниматься главный поток. Т.е. в потоке считываете данные в TStringList, а код парсинга этого текста переносите в форму
  18. Like
    Tumaso отреагировална Евгений Корепов в Создание сервиса (демона) в Linux   
    Я написал класс для демонизации приложения в linux. Класс форкает процесс, обрабатывает поступающие сигналы и передает их в основной поток через потокобезопасную очередь.
    Исходники https://github.com/EvgeniyKorepov/LinuxDaemon
    Для использования просто подключите модуль UnitDaemon в свое консольное приложение:
    program DaemonTest; {$APPTYPE CONSOLE} uses System.SysUtils, System.IOUtils, System.SyncObjs, Posix.Stdlib, Posix.SysStat, Posix.SysTypes, Posix.Unistd, Posix.Signal, Posix.Fcntl, Posix.Syslog in 'Posix.Syslog.pas', UnitDaemon in 'UnitDaemon.pas'; var AEventType : TEventType; begin syslog(LOG_NOTICE, 'main START'); while True do begin syslog(LOG_NOTICE, 'main LOOP'); if UnitDaemon.QueueEvent.PopItem(AEventType) = System.SyncObjs.TWaitResult.wrSignaled then begin syslog(LOG_NOTICE, 'main UnitDaemon.QueueEvent.PopItem'); case AEventType of TEventType.StopProcess : begin syslog(LOG_NOTICE, 'main Event StopProcess'); ExitCode := EXIT_SUCCESS; exit; end; TEventType.Start : begin syslog(LOG_NOTICE, 'main Event START'); end; TEventType.Reload : begin // Reload config syslog(LOG_NOTICE, 'main Event RELOAD'); end; TEventType.Stop : begin syslog(LOG_NOTICE, 'main Event STOP'); ExitCode := EXIT_SUCCESS; exit; end; end; end; Sleep(50); end; end. Так же поддерживается systemd - для этого положите  DaemonTest.service в /etc/systemd/system/ и используйте :
    systemctl start DaemonTest.service systemctl reload DaemonTest.service systemctl stop DaemonTest.service  
  19. Like
    Tumaso отреагировална krapotkin в Не подключается Huawei   
    Короче, действуем примерно так.
    Я надеюсь, что базовые действия - скачать google latest adb driver - мы уже провели, но наш No- или Brand- name телефон недоступен
    Тогда
    1) идем в диспетчер устройств, находим там наше невстающее устройство, кликаем дважды,  и на закладке Сведения выбираем свойство ИД оборудования. Копируем себе
    что-то типа 

    2)  идем к файлам того самого драйвера, открываем android_winusb.inf 
    находим разделы
    [Google.NTx86] и [Google.NTamd64]
    и вписываем туда, прямо в оба
    ;galaxy tab a 2019
    %SingleAdbInterface%        = USB_Install, USB\VID_04E8&PID_6866
    %CompositeAdbInterface%     = USB_Install, USB\VID_04E8&PID_6866&MI_01
     
    3) делаем обновить драйвер, выбираем вариант Вручную, и указываем тот модифицированный файл
    если не берет автоматом, то "Выбрать из списка уже установленных..." --> "Есть диск" --> "Да, мне пофиг что он не подписан"
    4) The End
     
  20. Like
    Tumaso отреагировална krapotkin в Свой APK updater. Использование Fileprovider   
    У меня в работе два приложения, и оба они не предназначены для Play market, так как имеют ограниченный круг использования, по сути, чисто внутрикорпоративные. Так что нежелательно и выкладывание их и на альтернативные магазины приложений. 
    Автоматически возникает вопрос обновления. Если в  первый раз мы можем установить приложение сами при помощи админов, то обновлять их не так просто. А контингент пользователей не справится с "скачайте APK по ссылке, найдите, куда его скачал браузер, и запустите вручную именно последний скачанный, а не какой попало"...
    Простейший способ - дать приложению скачать свежую копию с сайта и натравить на полученный файл системный инсталлер.
    Вот только свежие Andoird делать это напрямик запрещают. Нужен filepropvider. Целый день шуровал по мануалам и YT,
    Вот то что получилось  в результате.
    Если у вас 10.3.3 как у меня, уже можно не вносить <provider>...</provider> в манифест и свой файл file_paths.xml (или как вам его советуют назвать в интернетах) в деплой.
    Теперь все это делается хоть несколько странно и однобоко, но автоматически, путем установки галочки Secure File Sharing

    после этого в манифесте автоматически пропишется один из вариантов размещения файлов, которые вы можете найти в интернете. Используется алиас external-path
    файл, показанный на рисунке, создается автоматически самой делфи.

    теперь остается отгадать, какой путь реально подставится вместо "."
    Как показала практика, все пути выглядят не так, как кажется, если исходить из простого здравого смысла. Целый день использования GetHomeDir и других полезных методов TPath завел меня совсем в тупик.
    Оказалось все проще (?)
    st:TMemoryStream; OutputDir: JFile; ApkFile: JFile; ApkUri: Jnet_Uri; path, filename: string; ... OutputDir := TAndroidHelper.Context.getExternalCacheDir(); path := JStringToString(OutputDir.getAbsolutePath); filename := path+'/ASDroid2.apk'; ApkFile := TJfile.JavaClass.init( StringToJstring(filename)); FApkUri := TAndroidHelper.JFileToJURI(ApkFile); st.Position := 0; st.SaveToFile(filename); обратите внимание, в provider_paths мы задаем external-paths, а в коде ищем ExternalCacheDir.!!!  (For.Unbelievably.Creative.Knowers!)
    Потом все просто. FApkUri передаем в интент и запускаем 
    итоговый код примерно таков. (скачивание в потоке с использованием небольшого собственного API, но там ничего важного, можно не обращать внимания)
    procedure TasdSettingsFrame.bDownloadClick(Sender: TObject); begin {$IFDEF ANDROID} bDownload.Enabled := False; DownloadAndRun(); {$ENDIF} end; {$IFDEF ANDROID} procedure TasdSettingsFrame.DownloadAndRun(); begin ttask.Run(procedure var aapi:TasdAPI; st:TMemoryStream; OutputDir: JFile; ApkFile: JFile; ApkUri: Jnet_Uri; path, filename: string; begin st := TMemoryStream.Create; aapi := TasdAPI.Clone(_API); try aapi.OnReceiveData := OnReceiveData; aapi.getApk(st); if aapi.Err.Code=0 then begin OutputDir := TAndroidHelper.Context.getExternalCacheDir(); path := JStringToString(OutputDir.getAbsolutePath); filename := path+'/ASDroid2.apk'; ApkFile := TJfile.JavaClass.init( StringToJstring(filename)); FApkUri := TAndroidHelper.JFileToJURI(ApkFile); st.Position := 0; st.SaveToFile(filename); TThread.Synchronize(nil,procedure begin bDownload.Enabled := true; StartActivity(FApkUri); end); end; finally st.Free; aapi.Free; end; end); end; procedure StartActivity(ApkUri: Jnet_Uri); var Intent: JIntent; begin Intent := TJIntent.Create(); Intent.setAction(TJIntent.JavaClass.ACTION_VIEW); Intent.addFlags(TJIntent.JavaClass.FLAG_ACTIVITY_NEW_TASK or TJIntent.JavaClass.FLAG_ACTIVITY_CLEAR_TOP or TJIntent.JavaClass.FLAG_GRANT_WRITE_URI_PERMISSION or TJIntent.JavaClass.FLAG_GRANT_READ_URI_PERMISSION); Intent.setDataAndType(apkuri, StringToJString('application/vnd.android.package-archive')); TAndroidHelper.Activity.startActivity(Intent); end; procedure TasdSettingsFrame.OnReceiveData(const Sender: TObject; AContentLength: Int64; AReadCount: Int64; var Abort: Boolean); begin tthread.Synchronize(nil, procedure begin pb1.Max := AContentLength; pb1.Value := AReadCount; end); end; {$ENDIF} Вопросы остались конечно, почему так странно с каталогами, но выяснять пока нет желания. Работает - не трожь.
    Всем удачи.
    UPD.
    Для того, чтобы системный инсталлер запускался, нужно не забыть отметить еще одну галочку

     
     
     
     
     
  21. Haha
    Tumaso отреагировална vasilius в Что нового в 10.3.3?   
    А может мне создать, собственный, целый мир без таких умников и подлиз, как Вы?  ...но нет, продолжу и дальше заниматься, своим делом... 
  22. Like
    Tumaso отреагировална Евгений Корепов в [DELPHI FMX Android] [6.0] Не удается загрузить SSL библиотеку   
    В примере у вас получение данных по HTTPS. В рабочем проекте тоже самое? Может тогда не мучатся с Indy и его сторонними библиотеками, а использовать родной механизм андроида - THTTPClient?  
  23. Like
    Tumaso получил реакцию от Alialioglu2016 в Mobile Application Development + REST Server Training - Fesih ARSLAN - 2019   
    Видео весьма интересные, поэтому пожалуйста не удаляйте тему. Думаю, что субтитры на английском языке решат проблему озвучки видео, и мы, русскоязычные разработчики сможем в полной мере оценить труд турецкого разработчика.
  24. Like
    Tumaso отреагировална Alialioglu2016 в Mobile Application Development + REST Server Training - Fesih ARSLAN - 2019   
    Hi,
    There is a new, up-to-date and free training series. In the training, Rad Studio and REST server application development and mobile application development are explained.
    The training content is in Turkish. The topic describes how to develop a mobile application with REST architecture.

    These training topics are:
    Eğitim dizisinde sunucu ve istemci tarafı veri iletişimi için genel olarak aşağıdaki işlem adımları gerçekleştirilmiştir.
    PostgreSQL veri tabanı üzerinde StoredProcedure tanımlamak. JSON veri modellemek ve çözümlemek (front-end ve back-end veri iletişimleri). REST sunucu-istemci API yapısını modellemek ve metodları (kayıt eklemek, kayıt silmek, kayıt güncellemek) oluşturmak. REST servisini yeniden yayınlamak. End-Point API testlerini yapmak (REST Debugger). REST API metodlarının front-end tarafına entagrasyonunu sağlamak. 1. Hafta (6 Eylül 2019)
    Eğitim içeriği
    FMX Mimarisi nedir? Rad Studio IDE Yapısı Multi Device Proje Oluşturma Mobil Uygulamalarda Menü Yapısı Eğitim : 1. Bölüm - Multi-Platform Mobil Uygulama Yazmaya Giriş

    2. Hafta (14 Eylül 2019) - Linux Sunucu Uygulaması Yazmak (1. Bölüm)
    Eğitim içeriği
    Cross-platform mimarisi ve avantajlarının neler olduğu Linux sunucu üzerinde PostgreSQL veri tabanı kurulumu PostgreSQL DBA aracının kurulumu ve kullanımı Bir proje analizinin nasıl yapılacağı Veri tabanı analizi ve modellenmesi Veri tabanı modelinin, veri tabanına aktarılması PostgreSQL veri tabanının genel yapası Storedprocedure ve trigger kavramları Storedprocedure oluşturmayı Veri tabanının yedeklenmesi ve geri yüklenmesi
    Eğitim : 2. Bölüm - Linux Sunucu Uygulaması Yazmak - 1

    3. Hafta (21 Eylül 2019) - Linux Sunucu Uygulaması Yazmak (2. Bölüm)
    Eğitim içeriği
    SOA, REST ve RESTfull ne olduğu ve aralarındaki farkları REST Debugger aracı ve kullanımı JSON veri yapısı ve JSON Editörü Bir REST API servisinden JSON veri almak ve front-end tarafında biçimlendirmek Eğitim : 3. Hafta - Linux Sunucu Uygulaması Yazmak - 2. Bölüm

    4. Hafta (28 Eylül 2019) - Linux Sunucu Uygulaması Yazmak (3. Bölüm)
    Eğitim içeriği
    PAServer kurulumu Linux Console uygulaması yazmak WebModule uygulaması nasıl oluşturulur ve proje yapısı nasıldır? Linux geliştirici araçlarının kurulumu Apache kurulumu ve konfigürasyonu nasıl yapılır? Linux sunucu REST uygulamasında istekte bulunan URI’ye bir JSON veri döndürmek WebModule API yapısının oluşturulması Linux sunucu uygulamasını yayınlamak Sunucu metodlarını REST Debugger aracı ile test etmek Eğitim : 4. Hafta - Linux Sunucu Uygulaması Yazmak - 3. Bölüm

    5. Hafta (05 Ekim 2019) - Mobil Uygulama (Android ve iOS) Yazmak (1. Bölüm)
    Eğitim içeriği
    OrangeUI bileşen setini tanımak. OrangeUI bileşen setini kurmak. Mobil uygulama ana ekran tasarımını yapmak Mobil uygulama ana frame tasarımını yapmak Mobil uygulama Giriş ekran tasarımını yapmak Eğitim : 5. Hafta - Mobil Uygulama Yazmak 1. Bölüm

    6. Hafta (12 Ekim 2019) - Mobil Uygulama (Android ve iOS) Yazmak (2. Bölüm)
    Eğitim içeriği
    Mini Bir Sınıf Yapısı REST.Json.TJson.JsonToObject REST.Json.TJson.ObjectToJsonObject DB ForeignKey – Function tanımlamak Yeni bir DB Bileşen Seti – UniDac REST Bileşen Setleri Kullanıcı Giriş Kontrolü Eğitim : 6. Hafta - Mobil Uygulama Yazmak 2. Bölüm

    7. Hafta (19 Ekim 2019) - Mobil Uygulama (Android ve iOS) Yazmak (3. Bölüm)
    Eğitim içeriği
    Mobil uygulama ana menü davranışı Ana menü oluşturmak Toolbar oluşturmak SP Oluşturmak Web Module üzerinde end-point oluşturmak Dataset’i JSON veri yapısına dönüştürmek REST Debugger üzerinde end-point testleri yapmak OrangeUI ile ListView tasarımı yapmak Ürün Grubu ekranını tasarlamak Ürün gruplarını listelemek Ürünler, siparişler, Profilim, konum, ayarlar, hakkında ekranlarının nasıl tasarlanacağını öğrenmek Android hedef platformunun hazırlamak Android cihaz üzerinde uygulama testleri yapmak Mac OS X hedef platformunu hazırlamak XCode iOS geliştirici ortamını kurmak iOS Simulator üzerinde iOS uygulama testleri yapmak Eğitim : 7. Hafta - Mobil Uygulama Yazmak 3. Bölüm

    8. Hafta (26 Ekim 2019) - Mobil Uygulama (Android ve iOS) Yazmak (4. Bölüm)
    Eğitim içeriği
    AlGitsin Online Sipariş Uygulama arayüzüne hızlı bakış ve son kontrolleri yapmak Android Uygulamaları Dağıtma Hazırlamak Uygulamayı Google Play üzerinde yayına hazır hale getirmek Dağıtım öncesi Android uygulama ayarlarına son bakış Android paket dosyasını (.apk) imzalamak KeyStore sertifikasını hazırlamak Google Play uygulama taslağını hazırlamak Android uygulamayı yayınlanmak üzere onay sürecine göndermek iOS Uygulamaları Dağıtma Hazırlamak Uygulamayı Apple Store üzerinde yayına hazır hale getirmek Dağıtım öncesi iOS uygulama ayarlarına son bakış iOS paket dosyasını (.ipa) imzalamak Apple geliştirici ve dağıtıcı sertifikası üretmek Sertifika imza talebi oluşturmak (certificate signing request) Geliştirici sertifikası (development certificate) oluşturmak Dağıtıcı sertifikası (distribution certificate) oluşturmak Sertifikaları OS X bilgisayara (Anahtar Zinciri Erişimi - Keychain Access üzerine) yüklemek Uygulama kaydını yapmak Apple cihaz kaydını yapmak Apple cihaz kimlik numarasını öğrenmek Provizyon profili oluşturmak Geliştirici provizyonu (development provisioning) oluşturmak Dağıtıcı provizyonu (distribution provisioning) oluşturmak Provizyon sertifikalarını OS X bilgisayara yüklemek Rad Studio üzerinden provizyon kontrollerini yapmak Apple Store uygulama taslağını hazırlamak iOS uygulamayı yayınlanmak üzere onay sürecine göndermek FMX Mimarisi Hakkında Genel Soru-Cevap Eğitim : 8. Hafta - Final - Mobil Uygulama Yazmak 4. Bölüm

    Detail Link: http://www.delphican.com/showthread.php?tid=4119
  25. Like
    Tumaso получил реакцию от Ingalime в TBluetoothLE, Android   
    @vovanse вынеси работу с TBluetoothLE  в отдельный поток, и тогда приложение подвисать не будет
×
×
  • Создать...