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

Лидеры

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

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

    Модераторы


    • Баллы

      12

    • Постов

      2 517


  2. Andrey Efimov

    Andrey Efimov

    Модераторы


    • Баллы

      4

    • Постов

      842


  3. ENERGY

    ENERGY

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


    • Баллы

      4

    • Постов

      568


  4. dante333

    dante333

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


    • Баллы

      2

    • Постов

      43


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

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

  1. кто-то в чатике просил сделать подобное, вот что получилось FMX.AppMinimized.zip сворачивание/разворачивание делается, только после разворота не делается активация формы (не было времени с этим разбираться у меня)
    3 балла
  2. Добрый день. Для воспроизведения медиа файлов необходимо чтобы они физически находились на устройстве. Нужно их "задеплоить", то есть добавить в проект в project - options - deployment. А затем в программе подгрузить с помощью TMediaPlayer.FileName.
    2 балла
  3. эта старая версия, вот здесь сделал по другому
    2 балла
  4. Это количество запросов к сервису.если 200 пользователей сделают по 5 запросов,все,лимит исчерпан.Например запрос авторизации.
    2 балла
  5. А ну значит в Берлине что-то сломали, работает и отлично.
    2 балла
  6. 2 балла
  7. Есть вот такая темка Как свернуть форму, находящуюся в режиме FullScreen? А вообще, да, была недавно тема, но что-то не найду её... Вот ещё тема Форма не сворачивается при клике на иконке в панели задач. Напишите в личку автору, может он нашёл решение и поделится им с обществом. И вот такая тема Скрытие приложения с панели задач. Там ближе к концу обсуждали сворачивание.
    2 балла
  8. Ссылка: http://blog.rzaripov.kz/2017/02/firebase-android-ios-2.html Автор: Зарипов Равиль @ZuBy Описание: Настройка пуш уведомлении через сервис Firebase для ANDROID и IOS [Часть 2] В предыдущей части , я рассказывал как сделать настройку пуш уведомления в консоли Firebase, в этой я покажу код на Delphi и серверную часть на PHP https://github.com/rzaripov1990/PUSHTestFCM
    1 балл
  9. Вот так напрямую в память: function ShellExecuteMy(CommandLine: string; AWorkDir: string = 'C:\') : String; var SA: TSecurityAttributes; SI: TStartupInfo; PI: TProcessInformation; StdOutPipeRead, StdOutPipeWrite: THandle; WasOK: Boolean; Buffer: array[0..255] of AnsiChar; BytesRead: Cardinal; WorkDir: string; Handle: Boolean; AOutputLine : String; begin with SA do begin nLength := SizeOf(SA); bInheritHandle := True; lpSecurityDescriptor := nil; end; CreatePipe(StdOutPipeRead, StdOutPipeWrite, @SA, 0); try with SI do begin FillChar(SI, SizeOf(SI), 0); cb := SizeOf(SI); dwFlags := STARTF_USESHOWWINDOW or STARTF_USESTDHANDLES; wShowWindow := SW_HIDE; // wShowWindow := SW_MINIMIZE; // wShowWindow := SW_NORMAL; hStdInput := GetStdHandle(STD_INPUT_HANDLE); // don't redirect stdin hStdOutput := StdOutPipeWrite; hStdError := StdOutPipeWrite; end; WorkDir := AWorkDir; // Handle := CreateProcess(nil, PChar('cmd.exe /C ' + CommandLine), Handle := CreateProcess(nil, PChar(CommandLine), nil, nil, True, 0, nil, PChar(WorkDir), SI, PI); // Result:=PI; CloseHandle(StdOutPipeWrite); finally CloseHandle(StdOutPipeRead); end; if Handle then try repeat // WasOK := ReadFile(StdOutPipeRead, Buffer, 255, BytesRead, nil); WasOK := ReadFile(StdOutPipeRead, Buffer, 50, BytesRead, nil); if BytesRead > 0 then begin Buffer[BytesRead] := #0; AOutputLine:=StrOemToAnsi(Buffer); Result :=Result + AOutputLine; end; until not WasOK or (BytesRead = 0); WaitForSingleObject(PI.hProcess, INFINITE); finally CloseHandle(PI.hThread); CloseHandle(PI.hProcess); end; finally CloseHandle(StdOutPipeRead); end; end; Функция читает пайп вывода и помещает в строку. P.S. uses Winapi.Windows;
    1 балл
  10. Фух. Наконец то проспался и понял как сделать. Нужно просто поставить Alarm еще раз, напр. чтобы выполнился через 3 секунды. (неудобный, есть вероятность попасть на ошибку) просто вызвать его в Broadcast после Activity . (не всегда работает) Запустить Activity и в BroadcastReceiver подождать 8 секунд, а затем там же снять WakeLock. Это вариант работает прекрасно. Также с этим кодом Alarm срабатывает если Activity уже запущено либо в фоне. Нужно перехватывать WillBecomeForeground, BecameActive и там включать экран. Процессор включается в WakeLock, но не на долго, вам нужно включить экран при помощи функции ниже, сделать работу затем отключить экран). В моем случае, в отдельном потоке крутиться самописный планировщик, для других задач, который возбуждает события, по нему я и включаю\отключаю экран. Итак выстраданный бесcонными ночами Java код, обратите внимание на TestLauncher.putExtra("StartedFromAM", true), это чтобы знать из Activity что запустились из Broadcast (предложенный Blong'гом EXTRA_ALARM_COUNT с BroadcastReceiver всегда вернет ноль, он работает только если запускать напрямую Activity!) : package com.TestReceiver; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.os.PowerManager; import android.os.Handler; public class AlarmReceiver extends BroadcastReceiver { private static PowerManager.WakeLock mWakeLock; @Override public void onReceive(Context context, Intent intent) { if (mWakeLock == null) { PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE); mWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "Delphi"); mWakeLock.acquire(); } Intent TestLauncher = new Intent(); TestLauncher.setClassName(context, "com.embarcadero.firemonkey.FMXNativeActivity"); TestLauncher.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_NEW_TASK); // I TestLauncher.putExtra("StartedFromAM", true); context.startActivity(TestLauncher); // Handler h = new Handler(); h.postDelayed(new Runnable(){ public void run(){ mWakeLock.release(); mWakeLock = null; } }, 8000); //Toast.makeText(context, "Reelase! ("+mcounter.toString()+")", Toast.LENGTH_SHORT).show(); // For example } } PARTIAL_WAKE_LOCK означает что процессор во время выполнения этого кода, не будет уходить в спящий режим. Теперь в OnCreate нашей формы добавляем флаги чтобы включить экран, но при условии что запустились мы из AlarmManager : function StartedFromAlarmManager: boolean; begin {$IFDEF ANDROID} Result := TAndroidHelper.Activity.getIntent.getBooleanExtra(StringToJString('StartedFromAM'), false); // this will work only if using Activity instead of Broadcast - TJPendingIntent.JavaClass.getActivity: // Result := TAndroidHelper.Activity.getIntent.getIntExtra(TJIntent.JavaClass.EXTRA_ALARM_COUNT, 0); {$ELSE} Result := false; {$ENDIF} end; {$IFDEF ANDROID} procedure TurnOnAndKeepScreenAndroid(aEnable: boolean); var vFlags: integer; begin vFlags := TJWindowManager_LayoutParams.JavaClass.FLAG_TURN_SCREEN_ON or TJWindowManager_LayoutParams.JavaClass.FLAG_DISMISS_KEYGUARD or TJWindowManager_LayoutParams.JavaClass.FLAG_SHOW_WHEN_LOCKED or TJWindowManager_LayoutParams.JavaClass.FLAG_KEEP_SCREEN_ON; if aEnable then begin CallInUIThread ( // uses FMX.Helpers.Android procedure begin TAndroidHelper.Activity.getWindow.setFlags (vFlags, vFlags); end ); end else CallInUIThread ( procedure begin TAndroidHelper.Activity.getWindow.clearFlags (vFlags); end ); end; {$ENDIF} И сразу же отключаем наш WakeLock устанавливая второй раз Alarmmanager на срабатывание через 3 сек (соответственно запуститься BroadcastReceiver и освободит WakeLock). (уже отключается сам в Broadcast сразу после старта Activity)- т.к. во флагах окна, уже указан FLAG_KEEP_SCREEN - это будет держать экран и систему включенной. Не забудьте поставить разрешение WAKE LOCK = true!
    1 балл
  11. Вроде нашел решение проблемы. FMX.Platform.Win.zip
    1 балл
  12. Равиль Зарипов (ZuBy)

    CloudFlare [IPV6]

    я бы даже сказал обязательно использовать T(Net)HTTPClient Если работать с IPv6 в TIdHTTP, нужно хост указывать в квадратных скобках, вы наверное этого не делаете? Скорей всего построить такую сеть. от провайдера нужен IPv6 и роутер перевести в режим работы по IPv6 (если такое имеется). Хотя тот же TestFlight (тестовый сервис AppStore), ничего об этой ошибке не говорит и это печально конечно. Узнать об ошибке можно только при публикации
    1 балл
  13. Бага это. У меня, если приложение развернуто на весь экран и нажать на иконку в панеле задач - меняет состояние из (Разверное) в (Нормальные размеры), вместо того что бы принять состояние (Свернутое)
    1 балл
  14. Где то уже это обсуждали по моему. Это глюк (баг или фича) fmx ;)))
    1 балл
  15. Ну какие под 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=''
    1 балл
  16. Так, ситуация такая. Приложение я отлаживал в Android Studio, не в RAD Studio, поэтому данную ошибку не встречал. Если хочется запускать с отладчиком RAD, то закомментируйте строчку Process._Release; Но, тогда будет происходить утечка памяти, которую можно будет увидеть в Android Studio и про которую я говорил в статье. Ошибка появляется только во время дебага через RAD Studio. Во время обычной работы приложения всё нормально. К сожалению, других решений для устранения утечки я не нашёл, а QC Embarcadero молчит... Более подробно, про утечку расскажу в след. статье. Исходники на гитхабе верные. p.s. Тему почистил. Спасибо, что сообщили об этом поведении. p.s.2. В статью добавил информацию по этому поводу.
    1 балл
  17. ENERGY

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

    Чтобы картинка была на всю кнопку - вообще картинки должны быть фиксированного размера, когда одна больше, другая меньше - это смотрится криво. Но если очень нужно тогда так (это для Firemonkey, не для VCL): Бросайте рядом TGlyph - затем в инспекторе объектов мышкой перемещаете его на кнопку. В результате TGlyph должен быть внутри кнопки (TSpeedButton или TButton). Далее настраиваете TGlyph - указываете там ImageList, ImageIndex (можно картинку и без ImageList указать отдельно, там есть соответствующее поле), далее свойство Stretch и Align = Client.
    1 балл
  18. ENERGY

    Не дать изменить значение Tswitch

    Кривая реализация TSwitch, тоже столкнулся с этим. Тут проблема в том, что компонент после вызова своих событий (OnSwitch напр) продолжает анимацию, и даже если поменять в OnSwitch на Switch1.IsChecked := false; ничего не измениться, т.к. еще не закончилась анимация на предыдущий статус True. Чтобы изменить значение в OnSwitch или в OnClick - на нужное: TThread.CreateAnonymousThread ( procedure begin TThread.Queue( nil , procedure begin Switch1.IsChecked := false; end ); end ).Start; Админ почему то закрыл такую же тему, хотя вопрос не был решен.
    1 балл
  19. Евгений, внимательнее читайте статью, там есть раздел теории, а конкретно такие строчки: это половина ответа на ваш вопрос. Вторую половину можно найти например в этой статье [Android Service+BroadcastReceiver] Автозапуск службы после рестарта ОС. В ней говорится, какое имя будет у сервиса после создания:
    1 балл
  20. 1) Сервер Ваш? если да, то в php указать header('Content-Type: text/html; charset=utf-8'); 2) посмореть в хидерах или снифером что приходит. По умолчанию в Delphi под Windows кодировка по умолчанию ANSI, Остальные UTF-8 Проверьте этим кодом кодировку var Stream: TBytesStream; Size: Integer; Buffer: TBytes; Encoding: TEncoding; begin Stream := TBytesStream.Create; try Stream.LoadFromStream(ТУТ ВАШИ ДАННЫЕ); Buffer := Stream.Bytes; Size := TEncoding.GetBufferEncoding(Buffer, Encoding, TEncoding.Default); finally Freeandnil(Stream); end; ShowMessage(Encoding.EncodingName); end;
    1 балл
Эта таблица лидеров рассчитана в Москва/GMT+03:00
×
×
  • Создать...