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

Лидеры

  1. Равиль Зарипов (ZuBy)

    Равиль Зарипов (ZuBy)

    Модераторы


    • Баллы

      14

    • Постов

      2 517


  2. Brovin Yaroslav

    Brovin Yaroslav

    Администраторы


    • Баллы

      2

    • Постов

      2 124


  3. aleksandrguru

    aleksandrguru

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


    • Баллы

      2

    • Постов

      96


  4. neo

    neo

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


    • Баллы

      2

    • Постов

      64


Популярный контент

Показан контент с высокой репутацией 28.11.2016 во всех областях

  1. Ссылка: http://blog.rzaripov.kz/2016/11/2-modernlistview.html Автор: Зарипов Равиль @ZuBy Описание: Как сделать режим мультивыделения в TListView
    5 баллов
  2. только посл строка не определялась заменил //TAndroidHelper.Activity.startActivity(Intent); SharedActivity.startActivity(Intent); тк у меня XE8
    2 балла
  3. надо же познакомить народ с возможностями ModernListView, зря писал что-ли?)
    2 балла
  4. Равиль Зарипов (ZuBy)

    TMapsEngine

    использовать //uses System.NetEncoding TNetEncoding.URL.Encode()
    2 балла
  5. в главной форме объявить void __fastcall OnOptFormReady(TObject *Sender); в вызываемой форме private: // User declarations TNotifyEvent FOnReady; public: // User declarations __property TNotifyEvent OnReady = { read = FOnReady, write = FOnReady }; показать форму if ( !fmLogin ) fmLogin = new TfmLogin(this); fmLogin->OnReady = OnOptFormReady; #ifdef WIN32 fmLogin->ShowModal(); #else fmLogin->ShowFullScreenIcon = true; fmLogin->Show(); #endif по кнопкам в "модальном" окне вызвать событие: Close(); ModalResult = mrOk; // если ок if ( FOnReady ) FOnReady( (TObject*)this ); и обработка callback: void __fastcall TForm1::OnOptFormReady(TObject *Sender) { if ( Sender == fmLogin ) { if ( fmLogin->ModalResult != mrOk ) return; ApplySettings(); } код получается кроссплатформенный
    2 балла
  6. Исправил на NetHTTPClient все работает на Delphi 10 Seattle и на Андроид 6.0.1 Maps.Engine.zip
    2 балла
  7. Доброго времени суток! Навеяно этой темой. Посмотрел реализацию от @Pax Beach (за что ему спасибо большое) и столкнулся с тем что TRESTClient со всеми потрахами это просто дикий ужас. Решил собрать аналогичный пример, только не использовать TREST*** немного опишу, свою реализацию uAppSettings.pas - хранит описание вашего приложения созданного в ВК FMX.RESTLight.pas - модуль "общения" клиента с сервером FMX.RESTLight.Types.pas - тут хранятся типы для работы TRESTLight Приведу код, который постит Вам на стену текст var aFields: TArray<TmyRestParam>; aJSON: string; begin SetLength(aFields, 5); aFields[0] := TmyRestParam.Create('access_token', FAuthToken.token, false); aFields[1] := TmyRestParam.Create('v', FVKApp.APIVersion, false); aFields[2] := TmyRestParam.Create('owner_id', FAuthToken.user_id, false); aFields[3] := TmyRestParam.Create('friends_only', '0', false); aFields[4] := TmyRestParam.Create('message', 'Тестовое сообщение <RESTLight>', false); TTask.Run( procedure begin aJSON := TRESTLight.Execute('wall.post', FVKApp, aFields); TThread.Synchronize(TThread.CurrentThread, procedure begin Memo1.Lines.Add('---- wall.post ----'); Memo1.Lines.Add(aJSON); end); end); а вот так можно заливать файлы var aFields: TArray<TmyRestParam>; aJSON: string; begin SetLength(aFields, 4); aFields[0] := TmyRestParam.Create('access_token', FAuthToken.token, false); aFields[1] := TmyRestParam.Create('v', FVKApp.APIVersion, false); aFields[2] := TmyRestParam.Create('owner_id', FAuthToken.user_id, false); aFields[3] := TmyRestParam.Create('photo', aUploadFile, true); // для файлов указывается !!!true!!! TTask.Run( procedure begin // для загрузки файлов использовать TRESTLight.Execute2, в нем можно указать произвольный URL aJSON := TRESTLight.Execute2(aUploadURL, FVKApp, aFields); TThread.Synchronize(TThread.CurrentThread, procedure begin Memo1.Lines.Add('---- upload file to server ----'); Memo1.Lines.Add(aJSON); end); end); P.S. На правильность и оригинальность не претендую, просто альтернативный вариант. Мне например не понравилась как устроен TRESTClient, много компонентов лишних. В боевых условиях наверное код еще будет модернизироваться, я рассмотрел только пару методов, но думаю общая концепция не сильно поменяется GitHub TRESTLight.zip
    1 балл
  8. Скоро такими темпами сможем увидеть ZuBy в Embarcadero!:)) Все правильно делаете! Пишите больше! Я уже Ваш блог добавил в закладки! Ждем новых статей! и не только для Android, но и для iOS что-нибудь....
    1 балл
  9. ну так и вы не дали код, что у вас там происходит я незнаю. а там представлен шаблон с комментариями
    1 балл
  10. http://docwiki.embarcadero.com/RADStudio/Seattle/en/Mobile_Tutorial:_Using_the_Phone_Dialer_on_Mobile_Devices_(iOS_and_Android)
    1 балл
  11. Andrey Efimov

    Не удаляет компонент

    Как правильно удалять контролы в RunTime?
    1 балл
  12. Нужно поменять в форме авторизации последовательность, сначала закрытие потом выполнение анонимной процедуры. Я не проверял, но попробуйте
    1 балл
  13. Ссылка: http://blog.rzaripov.kz/2016/11/1-modernlistview.html Автор: Зарипов Равиль @ZuBy Описание: Чуть подробней о горизонтальном режиме
    1 балл
  14. Равиль Зарипов (ZuBy)

    Custom Font

    для берлина для сиетла для того чтобы на IOS работать с кастомными шрифтами, это нужно прописать в info.plist.TemplateiOS.xml (для берлина) <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <%VersionInfoPListKeys%> <%ExtraInfoPListKeys%> <key>UIAppFonts</key> <array> <string>FontAwesome.ttf</string> </array> <key>ITSAppUsesNonExemptEncryption</key><false/> </dict> </plist>
    1 балл
  15. krapotkin

    Расскажите про LiveBinding

    Очень трудно найти в сети упоминание о том, что PrototypeBind... это исключительно маркетинговый инстумент для создания "Live" демо. Он просто сам от фонаря генерирует данные нескольких типов, и можно их посмотреть в design-time при работе приложения он никак не должен использоваться
    1 балл
  16. Добрый вечер, Главное, что нужно помнить по теме время жизни объектов - это то, что в мобильных платформах (Android и iOS) процесс удаления объектов отличается от поведения на настольных платформах (Windows и OSX). В мобильных платформах появился механизм ARC (Automatic Reference Counting - автоматический подсчет ссылок). Почитать описание (на английском), как это работает можно тут: Apple Developer. Для нас же, это означает, что все объекты имеют поле - счетчик ссылок (RefCount). Когда счетчик ссылок равен нулю, объект автоматически удаляется. Если кто-то присваивает ссылку на объект, то счетчик автоматически увеличивается на 1. property RefCount: Integer read FRefCount; // Свойство TObject Можно ошибочно подумать, что это связано со сборщиком мусора. Однако, это не так. При компиляции, компилятор автоматически вставляет в код служебные команды по увеличению и уменьшению счетчика ссылок. Поэтому объект физически уничтожится в тот момент, когда счетчик ссылок станет равным 0. В то время как сборщик мусора, удаляет объекты по своему внутреннему расписанию. Теперь о вашем вопросе. Когда вы создаете объект и указываете ему родителя, автоматически ваш объект попадает как минимум в список дочерних объектов TabItem1. А значит, автоматически счетчик ссылок на TCircle будет увеличен. Когда вы сохраняете ваш объект в массиве, это опять же автоматически увеличивает счетчик ссылок. Поэтому, чтобы удалить объект есть два способа: 1. Вызвать метод TObject.DisposeOf. Это форсирует вызов деструктора, но не очищает память выделенную под объект. Это означает, что выполниться код деструктора, TCircle будет удален из списков, все ресурсы, которые окружность захватила будут распущены. Но сама память, которая была выделена из кучи под его хранение будет распущена, только в момент, когда больше не будет ни одной ссылки. Например, так: c[r].DisposeOf; c[r] := nil; 2. Убрать все ссылки, которые указывают на ваш объект. Это приведет к автоматическому удалению объекта. Убрать объект из структуры объектов, путем удаления удаления его из родительcкого контроkа Parent = nil, и затем вызывать Free и занилилить уже ссылку на объект в массиве. c[r].Parent := nil; c[r].Free; c[r] := nil; // Или FreeAndNil(c[r]), в зависимости от типа c. Если больше ссылок на ваш объект нету, то данный код автоматически удалит объект c[r]. Дополнение от RAD Studio XE6. В этой версии компилятор автоматически после вызова метода Free очистит указатель на объект. По этой причине дополнительно присваивание nil указателю на объект не требуется на мобильных платформах var A: TObject; begin A := TObject.Create; A.Free; // В этом месте A = nil на мобильных платформах. // На настольных платформах: A указывает на мусор end; Чтобы осталась совместимость с настольными платформами, лучше использовать второй подход. P.S. Никогда не вызывайте деструктор напрямую, вызовом метода Destroy.
    1 балл
Эта таблица лидеров рассчитана в Москва/GMT+03:00
×
×
  • Создать...