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

Andrey Efimov

Модераторы
  • Постов

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

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

    123

Ответы сообщества

  1. Пост Andrey Efimov - сообщение в TEdit не понятное удаление последнего символа был отмечен как ответ   
    Здравствуйте.
    Это баг, я сообщил о нём ещё в мае (RSP-14928 и RSP-14929), в тех. поддержке предложили временное решение (ответ ниже). (Тема В TEdit стирается предыдущий текст аналогичная).
    find FMX.Platform.Android.pas find procedure TTextServiceAndroid.SetCaretPosition(const Value: TPoint); change code to: procedure TTextServiceAndroid.SetCaretPosition(const Value: TPoint); var SelStart, SelEnd: Integer; begin if FCaretPosition <> Value then begin FCaretPosition := Value; CalculateSelectionBounds(SelStart, SelEnd); if (FTextView <> nil) and not FInternalUpdate then PlatformAndroid.SynchronizeOnUIThread( procedure begin //Fix By [龟山]Aone(1467948783) //https://quality.embarcadero.com/browse/RSP-14928 // if (SelEnd - SelStart) > 0 then // FTextView.setSelection(SelStart, SelEnd) // else FTextView.setCursorPosition(CaretPosition.X); end); end; end;  
     
  2. Пост Andrey Efimov - сообщение в Гиперссылка на форме был отмечен как ответ   
    Тема будет перенесена в раздел TLabel
    Вы вроде не первый день на форуме...
    Давайте помогу:
    На форуме есть раздел TLabel, заходим и видим несколько похожих вопросов:
    [Android] TLabel и открытие URL Как сделать из Label гиперссылку? [TLabel]OnClick в Android Читаем, думаем. Хочется быстрого результата, но не устанавливая компоненты - заходим во 2 тему, видим ссылку на компоненты от Ярослава [RX] [FGX] Описание версии 0.7.1.74, скачиваем, открываем исходники TfgLinkedLabel и смотрим как всё устроено. Или просто устанавливаем и пользуемся компонентом.
     
    Ап. тема перенесена
  3. Пост Andrey Efimov - сообщение в Как указать заголовок Android сервиса (android:label для тега <service>) в AndroidManifest.xml? был отмечен как ответ   
    Попробуйте прописать сервисы в лоб.
    Открываем файл AndroidManifest.template.xml в проекте (не в сервисе)
    находим
    <%services%> заменяем на
    <service android:exported="false" android:name="com.embarcadero.services.MyService" android:label="MyService" /> Полностью пересобираем проект.
     
    p.s. У меня получилось так, лейбел прописался во всех манифестах.
  4. Пост Andrey Efimov - сообщение в Проблема с выводом большого количества данных SQLite был отмечен как ответ   
    В общем, потестил малость, набросал приложение, сканирующее System32.
    Дано:
    3181 файл (+1 новый для проверки) база с двумя одинаковыми таблицами (по два столбца(id, FileName) в каждой) Результаты:
    Проверка в цикле, каждый раз по запросу "SELECT * FROM tblFileName WHERE FileName = Имя файла", очень накладно получается примерно 4.8 сек. (4758мс) Проверка с созданием и заполнением временной таблицы и запросом типа такого "select * from `temp` where FileName not in (select FileName from `tblFileName`)", достаточно быстро - 0.4 сек (437мс) Ваш способ - примерно 2.2 сек. (2168мс) Важно заметить, что во втором случае, время замерялось на две задачи, заполнение временной таблицы и сравнение, посредством одного запроса в бд. В первом же случае, данные сразу сравнивались, т.е. замерялся цикл запросов(3181 шт.) на выборку.
    Выбор очевиден Не знаю, что мне взбрело в голову в предыдущем сообщении...)))
    По поводу Limit, это ключевое слово позволяет не только ограничивать количество выбираемых данных, но и делать выборку блоками, например по 500 записей за раз (select FileName from `tblFileName` LIMIT 1,500), подошло бы, если бы нужно было извлекать блоками по 500 записей.
    вот такой запрос:
    FDQuery2.SQL.Clear; FDQuery2.SQL.Add('SELECT * FROM tblFileName'); FDQuery2.Active := True; FDQuery2.Open; if not FDQuery2.IsEmpty then begin FDQuery2.Last; mLogs.Lines.Add('Всего записей: ' + FDQuery2.RecordCount.ToString); mLogs.Lines.Add('ID последней записи: ' + FDQuery2.FieldByName('ID').AsString); end; FDQuery2.Close; Работает без проблем, извлекает сразу все записи.
     
    p.s. Тесты проходили на Windows 7 Pro.
  5. Пост Andrey Efimov - сообщение в Мини чат на ListView был отмечен как ответ   
    У нас, есть такие темы:
    Чат - элементы форм
    Сообщения чата в виде сообщений в iphone
    Чат со смайлами
  6. Пост Andrey Efimov - сообщение в Ошибка буилда был отмечен как ответ   
    Вы проверили папку, в ней точно нет этого файла? И есть ли похожая папка? У вас случайно, установлено не две студии(например Сиэтл и Берлин)?
    Далее, если похожих папок нет и файла такого нет, то запускаете СДК Менеджер и выкачиваете все пункты (на версии не обращайте внимания, скрин уже устарел, но пункты не изменились) как на скрине из этой темы: Delphi не видит мой телефон
    Далее, в студии проверяете путь, если необходимо, исправляете на нужный.
     
    p.s. А вообще, об этом всём, написано в теме по ссылке, которую дал первый раз....
  7. Пост Andrey Efimov - сообщение в Название приложения в Андроиде был отмечен как ответ   
    Полное решение вопроса: Автоматическая смена названия приложения в зависимости от языка системы
  8. Пост Andrey Efimov - сообщение в RemoveDir был отмечен как ответ   
    Вот так
    TDirectory.Delete(Path, True) не удаляет?
    На Андроиде работало вроде раньше... Вот тут http://delphifmandroid.blogspot.ru/2014/02/android-2.html, я даже на видео заснял этот момент.
  9. Пост Andrey Efimov - сообщение в Как показать форму в Android при заблокированном устройстве был отмечен как ответ   
    Ну, фейсбуком, я не пользуюсь. В любом случае, я не встречал ни одной программы, которая могла бы разблокировать экран. Фейсбук снимает блокировку устройства? Более того, считаю, что такое можно реализовать только с рут-правами, да и то... есть сомнения. Надо читать Андроид АПИ и стековерфлоу
     
    Ап. Покопался малость в апи, для отвода блокировки на задний план, можно попробовать использовать флаг "FLAG_SHOW_WHEN_LOCKED", как только форму закроют, экран блокировки вернётся на своё место. Но разблокировать залоченное устройство не получится.
     
    Ап.2. Для блокировки "провести пальцем" можно использовать флаг "FLAG_DISMISS_KEYGUARD"
  10. Пост Andrey Efimov - сообщение в Приложение закрывается после автозапуска был отмечен как ответ   
    Java класс:
    Вы же хотите запустить сервис, а запускаете Активити приложения...
    Правильная строка:
    launchintent.setClassName(context, "com.embarcadero.services.MyService"); Также некоторые модули совсем необязательны там.
     
    И вообще, вы хотите запустить службу, но весь код, запускает у вас активити...
     
    т.е. для службы надо так:
    public class BootCompletedReceiver extends BroadcastReceiver {     public void onReceive(Context context, Intent intent) {         if (intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)) {             Intent TestLauncher = new Intent();             TestLauncher.setClassName(context, "com.embarcadero.services.TestService");             context.startService(TestLauncher);         }     }   } Манифест:
    Строка:
    <receiver android:name="com.mycompany.myproject" имя указано неверно, у вас же Ресейвер имеет имя "com.mycompany.BootReceiver", откуда взялось "com.mycompany.myproject"?!
     
    Правильно писать:
    <receiver android:name="com.mycompany.BootReceiver" и т.д.
     
     
    Это батник из статьи? у меня другой , в своей статье выложу
     
    Ну вот, всё работает как часы
     
    Держите исправленный проект:
    ASARservRepair.zip
     
    p.s. Забыл вычистить проект от classes.dex, поэтому весит 900 кб.
     
    p.s.2 Постараюсь, поскорее написать статью, чтобы все подобные ошибки не возникали у людей
  11. Пост Andrey Efimov - сообщение в Перевод строки в нижний регистр был отмечен как ответ   
    AnsiLowerCase(Question);
  12. Пост Andrey Efimov - сообщение в Определение положение ползунка громкости был отмечен как ответ   
    Где-то был материал...
    У меня в блоге есть вот такие статьи: 
    Как создавать обёртки для JAVA-кода Как подключить и использовать свой JAVA-класс Страничка с готовым кодом: JNI Code Snippet и ещё куча примеров использования Android API в самих статьях  
    Кстати, это не вы случаем задали вопрос "Здравствуйте. А есть ли возможность определить текущее положение ползунка громкости?" в блоге?
     
    Примерный код:
    uses   Androidapi.JNI.JavaTypes,   Androidapi.JNI.Media,   Androidapi.Helpers,   Androidapi.JNI.App,   Androidapi.JNIBridge; procedure TForm1.Button1Click(Sender: TObject); var   AudioObj: JObject;   Audio: JAudioManager;   CurrentVolume: Integer; begin   AudioObj = SharedActivity.getSystemService(TJActivity.JavaClass.AUDIO_SERVICE);   Audio := TJAudioManager.Wrap((AudioObj as ILocalObject).GetObjectID);   CurrentVolume = Audio.getStreamVolume(TJAudioManager.JavaClass.STREAM_MUSIC); end;
  13. Пост Andrey Efimov - сообщение в Как задать название приложения на любом языке? был отмечен как ответ   
    http://delphifmandroid.blogspot.ru/2014/02/delphi-xe5-project-options-version.html, параметр "label"
  14. Пост Andrey Efimov - сообщение в [Android] Возможно ли воспроизводить MIDI файлы средствами FireMonkey без установки дополнительных кодеков? был отмечен как ответ   
    Пользуйтесь поиском перед тем как задать вопрос. Тема: MIDI и FireMonkey
  15. Пост Andrey Efimov - сообщение в хранение картинок загруженых с сервера в кеше андроид устройства был отмечен как ответ   
    В чём проблема? Напишите функцию, которая будет сохранять загруженные картинки в память устройства, а также следить за актуальностью и необходимостью хранения той или иной картинки в памяти устройства.
  16. Пост Andrey Efimov - сообщение в Как узнать версию приложения под Android? был отмечен как ответ   
    Например, вот так:
    {for Delphi XE6/XE7: Add to "uses" module "Androidapi.Helpers"} uses   Androidapi.JNI.JavaTypes, FMX.Helpers.Android,   Androidapi.JNI.GraphicsContentViewText; var   PackageManager: JPackageManager;   VersionPackage,PackageName: JString; begin   PackageManager := SharedActivity.getPackageManager;   PackageName := SharedActivityContext.getPackageName;       VersionPackage := PackageManager.getPackageInfo(PackageName, 0).versionName;   Label1.Text := JStringToString(VersionPackage); p.s. Для подобных вопросов, у меня в блоге есть страничка "JNI Code Snippet"
  17. Пост Andrey Efimov - сообщение в Delphi XE7: Программно проверить root права. [Android] был отмечен как ответ   
    Где-то, я уже отвечал на подобный вопрос, но найти что-то не могу...
    Варианты, которые известны мне:
    В лоб: Попробовать создать или изменить файл в защищённой директории (уже предложил Alexey Lovchikov) Тут тоже есть свои "камни", я лично не проверял, что будет если права есть, насколько я понимаю, приложение ещё должно запросить эти права Работает на большинстве устройств с рут-правами: Проверить установлено ли приложение SuperSU, если да, то права есть Не точная информация: Была вроде как команда (лучше в гугле посмотреть) для работы с рут-правами, что-то типо этого Runtime.getRuntime().exec("su");
  18. Пост Andrey Efimov - сообщение в Компилятор игнорирует программное изменение свойств компонентов был отмечен как ответ   
    Слипом вы подвешиваете главный поток, поэтому кнопка остаётся нажатой. Почему не происходит прорисовка, я точно сказать не могу, но скорее всего связано с подвешенным главным потоком.
     
    Чтобы ваш код заработал, можно, например, использовать "Application.ProcessMessages" (кнопка будет нажата):
    procedure TForm1.Button1Click(Sender: TObject); begin   Panel1.Visible := True;   Application.ProcessMessages;   Sleep(3000);   Panel1.Visible := False;   Application.ProcessMessages; end; Или воспользоваться потоками (кнопка будет в обычном состоянии):
    procedure TForm1.Button1Click(Sender: TObject); begin   TThread.CreateAnonymousThread(   procedure   begin     TThread.Synchronize(nil,     procedure     begin       Panel1.Visible := True;     end);     TThread.Sleep(3000);     TThread.Synchronize(nil,     procedure     begin       Panel1.Visible := False;     end);   end   ).Start; end; Можно написать вот так (без синхронизации тоже работает, это у меня уже в привычку вошло, работу с визуальными компонентами в синхронизацию запихивать): Используйте вариант описанный выше.
     
    Возможно, есть более лучшее решение...
  19. Пост Andrey Efimov - сообщение в [Android] Преобразование HEX строки в String был отмечен как ответ   
    Как я и сказал: под Андроидом - string[0], в цикле - "-1"
    Вот так:
    function TForm1.HexToStr2(const source: string): string; var   i, idx: Cardinal;   StrAsBytes: TBytes; begin   SetLength(StrAsBytes, length(source) div 2);   i := 0;   idx := 0;   while i <= length(source) - 1 do   begin     StrAsBytes[idx] := StrToInt('$' + source[i] + source[i + 1]);     i := i + 2;     idx := idx + 1;   end;   result := tencoding.ansi.GetString(StrAsBytes); end; Если нужен один код на две ОС, то используйте директиву {$IFDEF}
  20. Пост Andrey Efimov - сообщение в zip архив у которого Compressed size и Uncompressed size 0xFFFF был отмечен как ответ   
    Rad Studio из коробки умеет работать с zip архивами, единственный (вроде) минус – не работает с запароленными архивами. Модуль System.Zip(Справка), попробуйте воспользоваться им.
  21. Пост Andrey Efimov - сообщение в Как узнать, что в TTimeEdit поменялось время? был отмечен как ответ   
    Не знаю, что вам необходимо, но схема "Нажал на кнопку, открылся выбор даты и времени, выбрал. После этого выбранная дата и время отобразились на кнопке" работает отлично.
    Вот простой пример:
    procedure TForm1.Button1Click(Sender: TObject); begin   TimeEdit1.OpenPicker; end; procedure TForm1.TimeEdit1Change(Sender: TObject); begin   Button1.Text := DateToStr(TimeEdit1.Date); end; Есть ещё события: OnOpenPicker, OnClosePicker ...
  22. Пост Andrey Efimov - сообщение в [Android] Возможно ли наложить маску на видео? был отмечен как ответ   
    Что мне известно из моих экспериментов под Андроид.
    Стандартный плеер, при открытии/запуске видео, создаёт новый "слой", разместить что-то над этим слоем не получится, сдвинуть его на  задний план тоже не получится.
    Запустить что-то над MX плеером тоже не получится, т.к. Андроид может выгрузить мх плеер, т.к. наше приложение не прозрачное.
  23. Пост Andrey Efimov - сообщение в Есть ли аналог TImageList? был отмечен как ответ   
    Пожалуйста, перед тем как создать тему, воспользуйтесь поиском по форуму или просто перейдите в нужный раздел.
    Есть целый раздел: TImageList, а в нём тема: Есть ли в fmx класс TImageList?
  24. Пост Andrey Efimov - сообщение в Как узнать, что экран устройства повернулся? был отмечен как ответ   
    Первое, что пришло в голову:
    Когда происходит смена ориентации, срабатывает событие OnResize, вот в нём и сравнивать ширину и высоту формы.
     
    Upd.
    Глянул пример, вот этот "C:\Users\Public\Documents\Embarcadero\Studio\15.0\Samples\Object Pascal\Mobile Samples\User Interface\Forms". Там сделано так же.
  25. Пост Andrey Efimov - сообщение в [Android] [XE7] Как задать цвет фона для заставки SplashScreen? был отмечен как ответ   
    Вот "Как добавить "резиновый" SplashScreen в XE7", написал заметку по добавлению сплешскрина, вдруг кому-то пригодится. Хотя по сути перевод справки и некоторые замечания от меня.
     
    Да простит меня админ за кросспостинг 
×
×
  • Создать...