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

OnePeople

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

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

  • Посещение

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

    64

Весь контент OnePeople

  1. Alcinoe TALText
  2. Все верно, но есть ещё доступ к устройствам, блютуз, вай фай, доступ к уведомлениям и т.д., вот были бы методы управления не зависимые от платформы, а то на одной платформе нужно так с ними взаимодействовать, на другой по другому.( Имею ввиду почему это не обернуть, сделать например WifiUtils, BTUtils, NotificationUtils). Вы пишете один код, а в нутри в зависимости от платформы код меняется, хоть самому пиши)
  3. Да можно под Андроид нормально писать, callback'ов не хватает единственное, а дальше все хорошо работает. Если как правильно тут написали не трогают кроссплатформенность, этим и не пахнет, для каждой платформы все равно приходиться много кода разного писать( Моё мнение!
  4. DialogService: IFMXDialogService; FMargin, FMinMargin: TRect; FPaperSize: TPointf; FUnits: TPageMeasureUnits; FOptions : TPageSetupDialogOptions; begin if TPlatformServices.Current.SupportsPlatformService(IFMXDialogService, DialogService) then DialogService.PageSetupGetDefaults(FMargin, FMinMargin, FPaperSize, FUnits, FOptions); Text8.Text := FMinMargin.Left.ToString + ' ' + FMinMargin.Top.ToString; А так сколько показывает?
  5. ну так у вас 10 раз inc(pc) for i := 0 to 9 do begin for j := 0 to 5000 do for k := 0 to 10000 do begin a:=a+k/1000+k/500; end; inc(pc);
  6. uses PrinterAPI; var FkPrinter: TMyPrinter; begin FkPrinter:=TMyPrinter.Create(Printer.Printers[cbPrinters.ItemIndex].Device,true); OffsetX := FkPrinter.GetOffsetX; OffsetY := FkPrinter.GetOffsetY; Printer.Canvas.Offset := TPoint.Create(OffsetX , OffsetY ); PrinterAPI.rar
  7. PHYSICALOFFSETX For printing devices: the distance from the left edge of the physical page to the left edge of the printable area, in device units. For example, a printer set to print at 600 dpi on 8.5-by-11-inch paper, that cannot print on the leftmost 0.25-inch of paper, has a horizontal physical offset of 150 device units. PHYSICALOFFSETY For printing devices: the distance from the top edge of the physical page to the top edge of the printable area, in device units. For example, a printer set to print at 600 dpi on 8.5-by-11-inch paper, that cannot print on the topmost 0.5-inch of paper, has a vertical physical offset of 300 device units.
  8. Вы печатаете с начала листа, но существуют так называемые "аппаратные поля" или "физические поля", в зависимости от возможностей принтера: это область, недоступная для печати, вокруг бумаги; то есть, если вы нарисуете что-то в этой области, оно не будет напечатано - эти поля зависят от принтера, и в некоторых случаях можно получить значения этих полей с помощью вызова LeftSpace := GetDeviceCaps(Printer.Handle, PHYSICALOFFSETX); TopSpace := GetDeviceCaps(Printer.Handle, PHYSICALOFFSETY);
  9. Можно не писать в startupcopy.pas есть методы обновления ассетов. Самому лень писать)))) I feel that files that need to be deployed are files that should not and need not be changed by the application. They are resources like images. If an application changes a file, it does so with intent. The user via the developer wanted it that way. Changing it back through an update causes data loss. As a consequence all files that could be subject to change should not be deployed but generated when used.
  10. Библиотеки которые вы задеплоите можно использовать, а загруженные в процессе работы приложения нельзя!
  11. procedure TForm1.UpdateAsset(AssetName, FilePath: String); var inputStream: JInputStream; FileOutputStream: JFileOutputStream; WData: TJavaArray<Byte>; LData: Integer; begin try InputStream := TAndroidHelper.Context.getAssets.open(StringToJString(AssetName)); except exit; end; try FileOutputStream := TJFileOutputStream.JavaClass.init(StringToJString(FilePath)); except exit; end; WData := TJavaArray<Byte>.Create(4096); repeat try LData := InputStream.read(WData); except LData := -1; end; if LData <> -1 then begin FileOutputStream.write(WData, 0, LData); end; until (LData = -1) or (LData = 0); FileOutputStream.flush; FileOutputStream.close; inputStream.close; end; Обновление файла из assets в папку с программой Пользоваться так проверяете при Form.Create что версия новая и вызываете UpdateAsset('internal/base.db', ApplicationPath + 'base.db');
  12. Это можно
  13. Если будете загружать файл в deployment тогда ваша база будет здесь Для remote path: assets\internal TPath.Combine(TPath.GetDocumentsPath, 'filename') { Internal } Для remote path: assets TPath.Combine(TPath.GetPublicPath, 'filename') { External } Есть же в конце то концов https://docwiki.embarcadero.com/RADStudio/Sydney/en/Creating_an_Android_App#Loading_and_Deploying_Files
  14. Ну согласно перевода вы не можете запускать исполняемые файлы из папки своего приложения, и вы не можете изменять код библиотек .so из своего приложения. Оно вам зачем?
  15. if TJBuild_VERSION.JavaClass.SDK_INT >= 26 then begin playbackAttributes := TJAudioAttributes_Builder.Create .setUsage(TJAudioAttributes.JavaClass.USAGE_MEDIA) .setContentType(TJAudioAttributes.JavaClass.CONTENT_TYPE_MUSIC) .build(); AudioFocusRequest:=TJAudioFocusRequest_Builder(TJAudioManager.JavaClass.AUDIOFOCUS_GAIN).Create .setAudioAttributes(playbackAttributes) .setAcceptsDelayedFocusGain(true) .setOnAudioFocusChangeListener(afChangeListener, afHandler) .build(); res := FAudioManager.requestAudioFocus(AudioFocusRequest); end else begin res := FAudioManager.requestAudioFocus(afChangeListener, TJAudioManager.JavaClass.STREAM_MUSIC, TJAudioManager.JavaClass.AUDIOFOCUS_GAIN); end;
  16. Да зависит, вам скинуть код?
  17. Вам нужно создать контрол на основе нативного вида как реализовано например здесь https://github.com/Zeus64/alcinoe/blob/master/source/ALFmxEdit.pas ,тогда вы сможете назначить ему идентификатор ресурса.
  18. Вариантов масса, BASS, стандартный android MediaPlayer, сторонние библиотеки все зависит от того какая платформа, какой файл короткий, длинный, что вы хотите кроме воспроизведения и т.д.
  19. TAnimator.AnimateFloat(Image1, 'Position.X', P.X, Time); TAnimator.AnimateFloatWait(Image1, 'Position.Y', P.Y, Time, Timewait); Не проверял уже давно, но в андроид не работало, в Windows точно работает, я делаю так, в особых случаях Внимание костыль! TTask.Run(procedure() begin TThread.Synchronize(nil, procedure() begin TAnimator.AnimateFloat(Image1, 'Position.X', P.X, Time); TAnimator.AnimateFloat(Image1, 'Position.Y', P.Y, Time); end); sleep(Time); TThread.Synchronize(nil, procedure() begin после анимации идет важная процедура) end); end);
  20. Нашел времени немного, у себя сделал так, нахожу все сети, заполняю ими ListView, при нажатии на item вызываю ConnectToWifi(ssid, bsid, password: String) а вы какой хотите велосипед такой и изобретайте 1.JWifiNetworkSpecifier = interface(JObject) оставляем! 2. procedure ConnectToWifi(ssid, bsid, password: String); var ConnectivityManagerNative: JObject; ConnectivityManager: JConnectivityManager; NetworkRequest_Builder: JNetworkRequest_Builder; NetworkRequest: JNetworkRequest; WifiNetworkSpecifier: JWifiNetworkSpecifier; WifiNetworkSpecifier_Builder: JWifiNetworkSpecifier_Builder; WiFicallback: JConnectivityManager_NetworkCallback; begin WifiNetworkSpecifier := TJWifiNetworkSpecifier_Builder.Create .setSsidPattern(TJPatternMatcher.JavaClass.init(StringToJString(ssid), TJPatternMatcher.JavaClass.PATTERN_PREFIX)) .setBssid(TJMacAddress.JavaClass.fromString(StringToJString(bsid))) .setWpa2Passphrase(StringToJString(password)) .build(); NetworkRequest := TJNetworkRequest_Builder.Create .addTransportType(TJNetworkCapabilities.JavaClass.TRANSPORT_WIFI) .removeCapability(TJNetworkCapabilities.JavaClass.NET_CAPABILITY_INTERNET) .setNetworkSpecifier( TJNetworkSpecifier.Wrap((WifiNetworkSpecifier as ILocalObject).GetObjectID)) .build(); WiFicallback := TJConnectivityManager_NetworkCallback.JavaClass.init; ConnectivityManagerNative := TAndroidHelper.Context.getSystemService(TJContext.JavaClass.CONNECTIVITY_SERVICE); connectivityManager := TJConnectivityManager.Wrap((ConnectivityManagerNative as ILocalObject).GetObjectID); connectivityManager.requestNetwork(NetworkRequest, WiFicallback); end; 3. WiFiCallBack это обратный вызов - это класс Java, поэтому вам нужно создать потомка и реализовать необходимые методы. В настоящее время это невозможно сделать в Delphi (хотя listner'ы отлично реализуются), поэтому вам нужно будет сделать это на Java. В коде Java вы можете объявить интерфейс, который может быть передан классу, как в этом примере: https://github.com/DelphiWorlds/Kastri/blob/master/Features/Connectivity/DW.Connectivity.Android.pas https://github.com/DelphiWorlds/Kastri/tree/master/Java/Base/Connectivity
  21. Так правильно, какая перегрузка метода, который берется с указанием директивы вызова процедур, его нет, а вы сами придумали. Короче я вас не понимаю, на днях я в своем приложении буду делать схожий функционал, выложу вам код, сейчас ремонт, очень редко за пк(
  22. по-библейски я знаю историю языка, но по мне он достаточно ушел по возможностям чтобы его называть Pascal'ем. Допустим memo1.lines.add('connect'); Я ни каких велосипедов не изобретаю, поменяйте местами Callback:= TJConnectivityManager_NetWorkCallback.JavaClass.init;//.Create; Callback.onAvailable(ConnectivityManager.getActiveNetwork ; ConnectivityManager.requestNetwork(NetworkRequest, Callback); Разве onAvailable функция??? Мне кажется что нет. procedure TForm1.NetworkonAvailable(network: JNetwork) Вот этим можно просто зарегистрировать callback и его метод onAvailable будет каждый раз вызываться при подключении к сети. ConnectivityManager.registerDefaultNetworkCallback(Callback) А эта конструкция подключается к сети которая наиболее подходит к параметрам NetworkRequest и callback.onAvailable будет вызываться при подключении именно к этой сети. ConnectivityManager.requestNetwork(NetworkRequest, Callback); P.s читайте android developer, ищите ошибки у себя в коде, тестите, выводить в memo логи какие нибудь и смотрите что не работает
  23. onMouseDown := (Название формы в main).Frame11.imgMouseDown;
  24. Да для простых приложений это самое быстрое решение, я вам так скажу сейчас уже мало осталось того что не написать на делфи для андроид, дело в том что люди не хотят искать и писать, им нужно чтобы раз и все получилось...
×
×
  • Создать...