Лидеры
Популярный контент
Показан контент с высокой репутацией 06.03.2017 во всех областях
-
[Статья][Android] Как получить информацию о потреблении ОЗУ?
Major и 3 других отреагировал Andrey Efimov за тема
Ссылка: http://delphifmandroid.blogspot.ru/2017/03/blog-post.html Автор: Ефимов Андрей Описание:4 балла -
CloudFlare [IPV6]
Anatoliy и ещё один отреагировал Равиль Зарипов (ZuBy) за тема
Доброго времени суток! Для тех, кто не может опубликовать приложение в 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.Request2 балла -
Ну какие под 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 балла
-
[Статья][Android] Как получить информацию о потреблении ОЗУ?
Равиль Зарипов (ZuBy) и ещё один отреагировал Andrey Efimov за тема
Я подумаю над этой темой.2 балла -
Это спорный момент. При написании мултиплатформенной программы, в 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 балла
-
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 балла
-
Ссылка: http://yaroslavbrovin.ru/object_life_cycle_in_delphi_part_1_windows_osx-ru/ Автор: Ярослав Бровин С появлением мобильных платформ в мире Delphi, произошли серьезные изменения в жизненном цикле объектов. Послужившие причиной многих проблем и вопросов, а как правильно кроссплатформенно удалять объекты. В этой статье детально рассматриваем жизненный цикл объектов на разных платформах и даём ответы на важные вопросы, которые могут побеспокоить даже опытных Delphi разработчиков.1 балл
-
Где то уже это обсуждали по моему. Это глюк (баг или фича) fmx ;)))1 балл
-
Моё ИМХО, придётся решать алгоритмически. Если изначально у всех Edit.HitTest :=False; то появления клавиатуры не будет и перемещение будет согласно жесту. А вот как как вводить Edit в режим доступа и редактирования, тут надо пробовать. Если в лоб, то двойной клик(или Tap) по Edit, по сути будет клик по scrollbox. Получение координат и определение, какой edit находится на клике. Соответственно Edit.HitTest :=True ; ввод с клавиатуры, уводить фокус с edit, Edit.HitTest := False;1 балл
-
[Статья][Android] Как получить информацию о потреблении ОЗУ?
Rusland отреагировал Andrey Efimov за тема
Так, ситуация такая. Приложение я отлаживал в Android Studio, не в RAD Studio, поэтому данную ошибку не встречал. Если хочется запускать с отладчиком RAD, то закомментируйте строчку Process._Release; Но, тогда будет происходить утечка памяти, которую можно будет увидеть в Android Studio и про которую я говорил в статье. Ошибка появляется только во время дебага через RAD Studio. Во время обычной работы приложения всё нормально. К сожалению, других решений для устранения утечки я не нашёл, а QC Embarcadero молчит... Более подробно, про утечку расскажу в след. статье. Исходники на гитхабе верные. p.s. Тему почистил. Спасибо, что сообщили об этом поведении. p.s.2. В статью добавил информацию по этому поводу.1 балл -
Чтобы картинка была на всю кнопку - вообще картинки должны быть фиксированного размера, когда одна больше, другая меньше - это смотрится криво. Но если очень нужно тогда так (это для Firemonkey, не для VCL): Бросайте рядом TGlyph - затем в инспекторе объектов мышкой перемещаете его на кнопку. В результате TGlyph должен быть внутри кнопки (TSpeedButton или TButton). Далее настраиваете TGlyph - указываете там ImageList, ImageIndex (можно картинку и без ImageList указать отдельно, там есть соответствующее поле), далее свойство Stretch и Align = Client.1 балл
-
[Статья][Android] Как получить информацию о потреблении ОЗУ?
Равиль Зарипов (ZuBy) отреагировал Rusland за тема
Хотелось бы еще статью про физическую память устройства1 балл -
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 балл
-
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 балл
-
Куда сохранять настройки и данные Android-приложения?
Rusland отреагировал Равиль Зарипов (ZuBy) за вопрос
1) сохранять нужно в TPath.GetDocumentsPath 2) Нужно будет снова запросить, явно там есть такая возможность1 балл -
Установите - 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 балл
-
Остановить таймер, когда приложение сворачивается
Евгений Корепов отреагировал Andrey Efimov за вопрос
Вот сделал таблицу с событиями. Добавил в статью Очередь событий Delphi приложения на Android И получилось, что отслеживать сворачивание можно по: OnSaveState aeWillBecomeInactive EnteredBackground Разворачивание: WillBecomeForeground1 балл -
CrossVCL Beta XE3-Berlin
Евгений Корепов отреагировал AliZairov за тема
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 Home1 балл -
1 балл
-
PushEvents без Provider
Ingalime отреагировал alexbirukov за вопрос
Провайдер тебе не нужен, посмотри в статье которую я сегодня выложил, там есть этот момент. Когда приходит Push, вызывается отдельная функция, которая выводит Notification, вне зависимости от состояния программы (в фоне или запущена). На форме никакие провайдеры не нужны. Я там привёл полный рабочий код из проекта для Delphi.1 балл -
[TScrollBox] Как определить конец зоны ScrollBox?
rareMax отреагировал Brovin Yaroslav за вопрос
Добрый вечер, Используйте событие OnViewportPositionChanged. В параметрах передается позиция контента. Сравнивайте ее с размерами контента. if NewViewportPosition.y = ScrollBox1.ContentBounds.Height - ScrollBox1.ClientHeight then ShowMessage('Bottom');1 балл