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

Лидеры

  1. Andrey Efimov

    Andrey Efimov

    Модераторы


    • Баллы

      10

    • Постов

      842


  2. ENERGY

    ENERGY

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


    • Баллы

      8

    • Постов

      568


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

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

    Модераторы


    • Баллы

      3

    • Постов

      2 517


  4. Rusland

    Rusland

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


    • Баллы

      3

    • Постов

      1 204


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

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

  1. Ссылка: http://delphifmandroid.blogspot.ru/2017/03/blog-post.html Автор: Ефимов Андрей Описание:
    4 балла
  2. Доброго времени суток! Для тех, кто не может опубликовать приложение в AppStore Если приложение посылает запросы на сервер и у Вас на сервере нет поддержки IPV6, Apple не опубликует приложение! Что нужно для успешной публикации: Получить у Вашего хостера IPV6 адрес (примерно такой вид имеет ipv6 адрес) 2001:0db8:11a3:09d7:1f34:8a2e:07a0:765d Если нет root-доступа к серверу, то можно воспользоваться сервисом https://cloudflare.com Если есть root-доступ, то ознакомьтесь с инструкцией Мы рассмотрим самый частый вариант, без root-доступа, через сервис CloudFlare Не буду расписывать регистрацию, там все просто Нажимаем +Add Site, вписываем адрес Вашего сайта (домен), как только система проверит конфигурацию Вашего текущего DNS, она предложит изменить NS-сервера В кабинете хостера Вам нужно будет сменить NS-сервара, на те которые выдал CloudFlare В CloudFlare -> раздел DNS Нужно будет дописать запись типа AAAA с Вашим ipv6 адресом Все поддомены которые есть также прописать через запись типа CNAME Чтобы работало FTP нужно отключить HTTP Proxy (CDN) Теперь FTP протокол будет доступен по IPv4, не по домену Ждём обновления DNS и проверяем правильность конфигурации Результат примерно такой должен быть Что нужно сделать в Delphi / C++: Выкидываем TidHTTP (Indy) и переписываем на TNetHTTPClient Приложу пример запроса и обработки ответов, учтен баг с получением контента на IOS TmyAPI.zip или https://github.com/rzaripov1990/FMX.HTTP.Request
    2 балла
  3. Ну какие под Windows могут быть стандартные средства для чтения файла из другой ОС? Конечно их нету. Делается элементарно. 1. apk - это обычный zip файл. Распаковываете его (в Delphi встроенная поддержка zip - uses System.Zip > TZipFile ), и читаете все что надо. В Total Commander в такие архивы проще заходить без переименования расширения - нажав Ctrl + PgDown 2. Еще проще aapt dump badging myapp.apk Выведет детальную информацию об apk. aapt лежит где то в c:\Users\<user>\Documents\Embarcadero\Studio\18.0\PlatformSDKs\android-sdk-windows\build-tools\25.0.0\aapt.exe Например чтобы сохранил результат в файл: aapt dump badging myapp.apk > mytextfile.txt В первой строчке и будет искомое: package: name='com.embarcadero.MyApp' versionCode='1' versionName='1.0.0' platformBuildVersionName=''
    2 балла
  4. Например, вот так: Создаём фрейм FFrmSettings := TfrmSettings.Create(Self); FFrmSettings.Parent := Parent; Уничтожаем фрейм if FFrmSettings <> nil then begin FFrmSettings.Parent := nil; FFrmSettings.DisposeOf; FFrmSettings := nil; end;
    2 балла
  5. Это спорный момент. При написании мултиплатформенной программы, в Windows - GetDocumentsPath вернет c:\Users\<username>\Documents\ . Пользователь может удалить оттуда данные случайно - т.к. это папка "Мои документы". Лучше TPath.GetHomePath\имя программы - напр. для Adobe в Windows это c:\Users\<username>\AppData\Roaming\Adobe\ Для андроида GetHomePath и GetDocumentsPath вернут одинаковый путь. В MacOS, iOS и Windows - это разные пути. Здесь описание всех путей. + Для андроида GetDocumentsPath; - /data/data/com.myapp.app1/files GetDownloadsPath; - /storage/emulated/0/Android/data/com.myapp.app1/files/Download GetHomePath; - /data/data/com.myapp.app1/files GetSharedDocumentsPath; - /storage/emulated/0/Android/data/com.myapp.app1/files GetLibraryPath; - /data/data/com.myapp.app1/files GetPublicPath; - /storage/emulated/0/Android/data/com.myapp.app1/files GetPicturesPath; - /storage/emulated/0/Android/data/com.myapp.app1/files/Pictures Ну и кто еще не в курсе - сохранять удобней всего в TMemIniFile из юнита IniFiles. Реестра в Unix системах нет (а это MacOS, iOS и Android), там все на файлах.
    2 балла
  6. uses AndroidApi.JNI.Media; procedure MakeSound(ADuration: Integer); var Volume: Integer; StreamType: Integer; ToneType: Integer; ToneGenerator: JToneGenerator; begin Volume := TJToneGenerator.JavaClass.MAX_VOLUME; // задаем громкость StreamType := TJAudioManager.JavaClass.STREAM_ALARM; ToneType := TJToneGenerator.JavaClass.TONE_DTMF_0; // тип звука ToneGenerator := TJToneGenerator.JavaClass.init(StreamType, Volume); ToneGenerator.startTone(ToneType, ADuration); end; Типы звука можно посмотреть здесь
    2 балла
  7. Ссылка: http://yaroslavbrovin.ru/object_life_cycle_in_delphi_part_1_windows_osx-ru/ Автор: Ярослав Бровин С появлением мобильных платформ в мире Delphi, произошли серьезные изменения в жизненном цикле объектов. Послужившие причиной многих проблем и вопросов, а как правильно кроссплатформенно удалять объекты. В этой статье детально рассматриваем жизненный цикл объектов на разных платформах и даём ответы на важные вопросы, которые могут побеспокоить даже опытных Delphi разработчиков.
    1 балл
  8. Где то уже это обсуждали по моему. Это глюк (баг или фича) fmx ;)))
    1 балл
  9. Моё ИМХО, придётся решать алгоритмически. Если изначально у всех Edit.HitTest :=False; то появления клавиатуры не будет и перемещение будет согласно жесту. А вот как как вводить Edit в режим доступа и редактирования, тут надо пробовать. Если в лоб, то двойной клик(или Tap) по Edit, по сути будет клик по scrollbox. Получение координат и определение, какой edit находится на клике. Соответственно Edit.HitTest :=True ; ввод с клавиатуры, уводить фокус с edit, Edit.HitTest := False;
    1 балл
  10. Так, ситуация такая. Приложение я отлаживал в Android Studio, не в RAD Studio, поэтому данную ошибку не встречал. Если хочется запускать с отладчиком RAD, то закомментируйте строчку Process._Release; Но, тогда будет происходить утечка памяти, которую можно будет увидеть в Android Studio и про которую я говорил в статье. Ошибка появляется только во время дебага через RAD Studio. Во время обычной работы приложения всё нормально. К сожалению, других решений для устранения утечки я не нашёл, а QC Embarcadero молчит... Более подробно, про утечку расскажу в след. статье. Исходники на гитхабе верные. p.s. Тему почистил. Спасибо, что сообщили об этом поведении. p.s.2. В статью добавил информацию по этому поводу.
    1 балл
  11. ENERGY

    Кнопка с картинкой

    Чтобы картинка была на всю кнопку - вообще картинки должны быть фиксированного размера, когда одна больше, другая меньше - это смотрится криво. Но если очень нужно тогда так (это для Firemonkey, не для VCL): Бросайте рядом TGlyph - затем в инспекторе объектов мышкой перемещаете его на кнопку. В результате TGlyph должен быть внутри кнопки (TSpeedButton или TButton). Далее настраиваете TGlyph - указываете там ImageList, ImageIndex (можно картинку и без ImageList указать отдельно, там есть соответствующее поле), далее свойство Stretch и Align = Client.
    1 балл
  12. Хотелось бы еще статью про физическую память устройства
    1 балл
  13. Major Под Android, iOS, MacOS - TIniFile это все тот же TMemIniFile: {$IFDEF MSWINDOWS} { TIniFile - Encapsulates the Windows INI file interface (Get/SetPrivateProfileXXX functions) } TIniFile = class(TCustomIniFile) public [...] end; {$ELSE} TIniFile = class(TMemIniFile) public [...] end; {$ENDIF}
    1 балл
  14. Hi. SharedPreferences uses Androidapi.Helpers, Androidapi.JNI.App, Androidapi.JNI.JavaTypes, Androidapi.JNI.GraphicsContentViewText; var SP: JSharedPreferences; SPE: JSharedPreferences_Editor; procedure TMain.FormShow(Sender: TObject); begin SP := TAndroidHelper.Activity.getSharedPreferences(StringToJString('ZTApp'), 0); IP.Text := JStringToString(SP.getString(StringToJString('IP'), StringToJString('127.0.0.1'))); end; procedure TMain.SaveClick(Sender: TObject); begin SPE := SP.edit; SPE.putString(StringToJString('IP'), StringToJString(IP.Text)); SPE.commit; end;
    1 балл
  15. Спасибо Ярослав! Есть еще одна статья от GunSmoker на эту тему. Там есть ряд интересных ньюансов, которые не описаны у Ярослава и о которых многие не знают. К примеру то, что DisposeOf хотя и вызывает деструктор, но не освобождает память выделенную под объект..
    1 балл
  16. 1) сохранять нужно в TPath.GetDocumentsPath 2) Нужно будет снова запросить, явно там есть такая возможность
    1 балл
  17. ENERGY

    Обрезание текста в TListBox

    Установите - Stylelookup у каждого Item'a - listboxitemnodetail или listboxitembottomdetail Detail - обозначает что появляется еще одна дополнителная текстовая строка, bottom detail переводится как "детали внизу". Добавить текст в нее можно через инспектор - кликните на нужный listitem > ItemData > Detail listboxitemleftdetail - содержит еще одну текстовую панельку справа, которая перекрывает основной текст. Вы можете сделать эти пункты в своем стиле - добавить туда визуальные компоненты, такие как Tswitch, кнопки итд. Для этого, - Нажмите правой кнопкой мыши (ПКМ) по листбоксу - Add ListBoxitem, выберите для этого Item'a нужный стиль, в Stylelookup, на основе которого хотите сделать свой. Далее, ПКМ по Item - Edit Custom Style. Выделите в инспекторе ListBoxItem1Style1 - это ваш новый стиль, можете переименовать его в StyleName на нужное вам имя. Это имя потом указывайте в StyleLookup каждого item'a. Теперь можно переносить мышкой компоненты на этот шаблон. Имена меняйте в StyleName. По этим именам потом можно обращаться к ним таким образом: vItem.StylesData['descript'] := 'text'; vItem.StylesData['details'] := 'Text'; vItem.ImageIndex := 5; Чтобы отображался картинка при помощи ImageIndex в таком собственном Item е - нужно кинуть TGlyph и назвать Stylename как 'glyphstyle'. TListBox довольно медленный компонент, и нужен в основном для небольших списков (напр. настройки) или там, где используются Items с контролами. Для динамических списков используйте TListView.
    1 балл
  18. Вот сделал таблицу с событиями. Добавил в статью Очередь событий Delphi приложения на Android И получилось, что отслеживать сворачивание можно по: OnSaveState aeWillBecomeInactive EnteredBackground Разворачивание: WillBecomeForeground
    1 балл
  19. AliZairov

    CrossVCL Beta XE3-Berlin

    Hi. New tools for Delphi IDE. Using CrossVcl you focus only on your VCL application and CrossVcl makes it cross-platform. This is beta software only for testing purpose. CrossVcl on early stage of development, what are to test in this release: * Installation process (CrossVcl creates copy and patches existing on your machine Vcl and Rtl sources, all original sources stay unmodified) * Upgrading simple or new Vcl project to macOS (Right Click on Project in Project Inspector) * Compilation and deploying of simple project Please do not create bug-report if you can't compile or launch big Vcl projects or any third-party controls at this stage. Bug reports and suggestions welcome at: https://bitbucket.org/crossvcl/crossvcl/issues We help you on: http://stackoverflow.com/questions/tagged/crossvcl Google+: https://plus.google.com/109334532832375082802 Facebook: https://www.facebook.com/crossvcl Twitter: https://twitter.com/VclCross Home
    1 балл
  20. enatechno

    Анимированные элементы

    buttonstyle.zip
    1 балл
  21. alexbirukov

    PushEvents без Provider

    Провайдер тебе не нужен, посмотри в статье которую я сегодня выложил, там есть этот момент. Когда приходит Push, вызывается отдельная функция, которая выводит Notification, вне зависимости от состояния программы (в фоне или запущена). На форме никакие провайдеры не нужны. Я там привёл полный рабочий код из проекта для Delphi.
    1 балл
  22. Добрый вечер, Используйте событие OnViewportPositionChanged. В параметрах передается позиция контента. Сравнивайте ее с размерами контента. if NewViewportPosition.y = ScrollBox1.ContentBounds.Height - ScrollBox1.ClientHeight then ShowMessage('Bottom');
    1 балл
Эта таблица лидеров рассчитана в Москва/GMT+03:00
×
×
  • Создать...