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

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

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

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

  • Посещение

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

    264

Активность репутации

  1. Like
    Равиль Зарипов (ZuBy) отреагировална Евгений Корепов в Кнопка "Добавить в избранное"   
    Кнопка "Добавить в избранное" и соответственно раздел Избранное в профиле очень помогли бы в работе с форумом. Добавлять в избранное хочется отдельные посты. Потому как поиск работает плохо и искать когда то попавшееся на глаза нужное решение найти проблематично.А так бы ткнул на Добавить в избранное, по мере надобности зашел в свое Избранное, увидел разбитое по разделам форума списки избранного и нашел что нужно.
    Заранее благодарю!
  2. Like
    Равиль Зарипов (ZuBy) отреагировална Евгений Корепов в Item has been already purchased   
    Вот https://play.google.com/intl/ru/about/monetization-ads/payments/ 
    Платежи
    Приложения, через которые можно делать покупки, должны соответствовать следующим требованиям:
    Покупки в магазине. Плата за приобретение и скачивание приложений в Google Play должна взиматься через систему оплаты Google Play.
    Покупки через приложение.
    Для продажи цифровых продуктов через игру, представленную в Google Play, необходимо использовать систему оплаты контента Google Play. При продаже цифровых продуктов через другие виды приложений, представленные в Google Play, необходимо также использовать систему оплаты контента Google Play. Исключения составляют следующие случаи: продажа нецифровых товаров; продажа цифрового контента, который может использоваться вне приложения (например, треков, которые можно воспроизводить в других проигрывателях). Виртуальную валюту можно использовать только в приложении, через которое она была приобретена. Запрещается вводить пользователей в заблуждение относительно приложений, а также услуг, товаров, контента и функций, которые можно через них приобрести. Если за доступ к функциям, указанным в описании приложения в Google Play, взимается плата, вы обязаны предупредить об этом пользователей. Удивительно если бы было по другому. Не думаю что Гугль откажется от своих 30% от продаж.
  3. Like
    Равиль Зарипов (ZuBy) получил реакцию от Alisson R Oliveira в TMapsEngine   
    Компонент TMapsEngine
     
    Возможности
    Нативный LocationSensor [ANDROID] Геокодинг/Реверс геокодинг через Google API, Yandex API, Here Maps API Построение маршрута через Google Distance API Расчет дистанции по прямой Совместим со стандартным компонентом TLocationSensor  
    Видео демонстрация
     
    На видео видно как TMapView косячик с миллионом точек, приложение зависло при отрисовке, но с этим ничего не поделать.
    Без синхронизации не возможно отрисовать все точки
     
    Исходник
    TMapsEngine_source.zip
    TMapsEngine_Seattle_10.zip
     
    Скачать APK  (долго он там не пролежит, а форум не позволяет загрузить zip размером 7,4 мб )
     
  4. Like
    Равиль Зарипов (ZuBy) получил реакцию от Alisson R Oliveira в TListView Custom checkboxes (иконка чекбокс "избранное")   
    как-то так, но это наверное сложно для понимания)
    LVStars.rar
  5. Like
    Равиль Зарипов (ZuBy) получил реакцию от Alisson R Oliveira в Как сделать аналог Autosize в TImage   
    как то так наверное
    AutoSizeImage.rar
  6. Like
    Равиль Зарипов (ZuBy) получил реакцию от brunnengi в [Delphi Berlin FMX Win32] Как реализовать двойной клик на ячейке в StringGrid?   
    оставлю это здесь
     
  7. Like
    Равиль Зарипов (ZuBy) получил реакцию от sezavasasilov в Почему нет родных Android-эффектов у FMX приложения?   
    это называется Bounce эффект доступен в TAniCalc, но просто так до него не добраться.
    Можно использовать ModernListView, там легко это делается.
    P.S. поиск по форуме ModernLV, ModernListView
  8. Like
    Равиль Зарипов (ZuBy) получил реакцию от Ingalime в Почему нет родных Android-эффектов у FMX приложения?   
    это называется Bounce эффект доступен в TAniCalc, но просто так до него не добраться.
    Можно использовать ModernListView, там легко это делается.
    P.S. поиск по форуме ModernLV, ModernListView
  9. Thanks
    Равиль Зарипов (ZuBy) отреагировална kami в Непонятки с TWebBrowser   
    Попробуйте использовать Navigate (без параметров) вместо Reload.
    Ну и - делать невидимую работу по правке файла, используя визуальный компонент (Memo) - это, мягко говоря, не комильфо.
  10. Like
    Равиль Зарипов (ZuBy) отреагировална Andrey Efimov в Как сделать приложение системным?   
    Попробуйте извлечь файл .so из вашего apk и добавить его в папку /system/lib/. Ну и закинуть apk файл в папку /system/priv-app/.
     
    А вообще вам не сюда, вам на 4pda или xda-developers (англ.)
    На этом форуме разработчики софта, а не спецы по модификации прошивок.
  11. Like
    Равиль Зарипов (ZuBy) отреагировална kami в Открытие ссылки в проекте Firemonkey   
    Вы не там ифдефы пишете. Не нужно здесь много модулей.
    Для примера. (емнип - автор @Равиль Зарипов (ZuBy) ). Единая точка входа в функцию и отличаются только внутренности.
    function OpenURL(const URL: string; const DisplayError: Boolean = False): Boolean; var {$IFDEF ANDROID} Intent: JIntent; {$ENDIF} {$IFDEF IOS} NSU: NSUrl; {$ENDIF} {$IFDEF MSWINDOWS} Res: HINST; {$ENDIF} begin {$IFDEF ANDROID} // There may be an issue with the geo: prefix and URLEncode. // will need to research Intent := TJIntent.JavaClass.init(TJIntent.JavaClass.ACTION_VIEW, TJnet_Uri.JavaClass.parse(StringToJString(TIdURI.URLEncode(URL)))); try TAndroidHelper.Activity.startActivity(Intent); exit(true); except on e: Exception do begin if DisplayError then TDialog.ShowMessage('Error: ' + e.Message); exit(False); end; end; {$ENDIF} {$IFDEF IOS} // iOS doesn't like spaces, so URL encode is important. NSU := StrToNSUrl(URL); if SharedApplication.canOpenURL(NSU) then exit(SharedApplication.OpenURL(NSU)) else begin if DisplayError then TDialog.ShowMessage('Error: Opening "' + URL + '" not supported.'); exit(False); end; {$ENDIF} {$IFDEF MSWINDOWS} Res := ShellExecute(0, 'open', PChar(URL), nil, nil, SW_SHOW); Result := Res > 32; {$ENDIF} end; И теперь "снаружи" этой функции вам без разницы, под какую платформу идет сборка. В любом случае вы пишете "OpenURL('http://blablabla.net');". Безо всяких IFDEF.
  12. Like
    Равиль Зарипов (ZuBy) получил реакцию от Anatoliy в TTextSettings неразвёртвовается   
  13. Like
    Равиль Зарипов (ZuBy) отреагировална mmover в TTextSettings неразвёртвовается   
    Примерно так:
    interface uses System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics; type TMyLabel = class(TControl) private FFontTextSettingInfo: TTextSettingsInfo; function GetTextSettings: TTextSettings; procedure SetTextSettings(const Value: TTextSettings); public constructor Create(AOwner: TComponent); override; destructor Destroy; override; published property LabelFont: TTextSettings read GetTextSettings write SetTextSettings; end; implementation type TMyTextSettings = class (TTextSettingsInfo.TCustomTextSettings) public constructor Create(const AOwner: TPersistent); override; published property Font; property FontColor; property HorzAlign; property VertAlign; // можно убрать ненужные свойства // property WordWrap default True; // property Trimming default TTextTrimming.Character; end; constructor TMyTextSettings.Create(const AOwner: TPersistent); begin inherited; WordWrap := False; Trimming := TTextTrimming.Character; end; constructor TMyLabel.Create(AOwner: TComponent); begin inherited Create(AOwner); FFontTextSettingInfo := TTextSettingsInfo.Create(Self,TMyTextSettings); // FFontTextSettingInfo.TextSettings.FontColor := TAlphaColors.Black; // FFontTextSettingInfo.TextSettings.OnChanged := FontChanged; end; destructor TMyLabel.Destroy; begin FFontTextSettingInfo.Free; inherited Destroy; end; function TMyLabel.GetTextSettings: TTextSettings; begin Result := FFontTextSettingInfo.TextSettings; end; procedure TMyLabel.SetTextSettings(const Value: TTextSettings); begin FFontTextSettingInfo.TextSettings.Assign(Value); end; end.  
  14. Like
    Равиль Зарипов (ZuBy) получил реакцию от Ingalime в TTextSettings неразвёртвовается   
    посмотри тут
    https://github.com/rzaripov1990/ZMaterialComponents/blob/master/Library/FMX.ZMaterialEdit.pas
  15. Thanks
    Равиль Зарипов (ZuBy) получил реакцию от Dev в Плавающая кнопка   
    вот тут есть
  16. Like
    Равиль Зарипов (ZuBy) отреагировална krapotkin в Запуск приложения из текущего   
    procedure RunProgram(cmdStr:string; Wait:Boolean; ShowWindow:Word); var si:TStartupInfo; pi:TProcessInformation; s:string; begin FillChar(si, SizeOf(si), 0); si.cb := SizeOf(si); si.dwFlags:=STARTF_USESHOWWINDOW; si.wShowWindow := ShowWindow; s:=cmdStr; UniqueString(s); getlasterror; if not CreateProcess(nil, PChar(S), NIL, NIL, False, 0, NIL, NIL, si, pi) then showMessageFmt('Ошибка %d. %s',[getlasterror,SysErrorMessage(getlasterror)]); if wait then WaitForSingleObject(pi.hProcess, INFINITE); CloseHandle(pi.hProcess); CloseHandle(pi.hThread); end;  
  17. Like
    Равиль Зарипов (ZuBy) отреагировална Alex7wrt в Локальная рация, Android, пример   
    Сделал простой пример приложения рации в локальной сети под Android. Реализация через UDP. 
    Буду рад, если кому окажется полезным.
    Для начала/окончания сеанса связи нужно нажать на окружность

    Для проверки нужно 2 телефона
    unit Unit5; interface uses System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.Controls.Presentation, FMX.StdCtrls, IdUDPServer, IdBaseComponent, IdComponent, IdUDPBase, IdUDPClient, IdGlobal, IdSocketHandle, Androidapi.JNI.Media, Androidapi.JNI.JavaTypes, Androidapi.JNIBridge, AndroidApi.JNI, AndroidApi.Helpers, FMX.Objects, System.Math; type TForm1 = class(TForm) Circle: TCircle; procedure ServerUDPRead(AThread: TIdUDPListenerThread; const AData: TIdBytes; ABinding: TIdSocketHandle); procedure FormCreate(Sender: TObject); procedure CircleTap(Sender: TObject; const Point: TPointF); end; TSendThread = class(TThread) protected procedure Execute; override; end; var Form1: TForm1; SendThread: TSendThread; Server: TIdUDPServer; audioRecord: JaudioRecord; audiotrack: JAudioTrack; recording: boolean; buffer_Size, port,ch_in, ch_out, format, freq, source: integer; implementation {$R *.fmx} procedure TSendThread.Execute; var buffer: TJavaArray<Byte>; begin buffer := TJavaArray<Byte>.create(buffer_size); while recording do begin audioRecord.read(buffer,0,buffer_size); Server.Broadcast(TIDBytes(TJavaArrayToTBytes(buffer)),port); end; buffer.Free; end; procedure TForm1.CircleTap(Sender: TObject; const Point: TPointF); begin recording:= not recording; if recording then begin Circle.Fill.Color:=TAlphaColors.Red; Server.OnUDPRead:=nil; audiorecord.startRecording; SendThread:=TSendThread.Create; end else begin Circle.Fill.Color:=TAlphaColors.Gray; audiorecord.stop; Server.OnUDPRead:=ServerUDPRead; end; end; procedure TForm1.FormCreate(Sender: TObject); begin buffer_size:=2048; freq:=8000; port:=5555; Server:=TIdUdpServer.Create(Form1); with Server do begin BufferSize:=buffer_size; DefaultPort:=port; BroadCastEnabled:=true; Active:=true; OnUDPRead:=ServerUDPRead; end; Circle.Width:=min(Screen.Width,Screen.Height)*0.7; Circle.Height:=Circle.Width; ch_in:=TJAudioFormat.JavaClass.CHANNEL_IN_MONO; ch_out:=TJAudioFormat.JavaClass.CHANNEL_OUT_MONO; format:=TJAudioFormat.JavaClass.ENCODING_PCM_16BIT; source:=TJMediaRecorder_AudioSource.JavaClass.MIC; audioRecord := TJAudioRecord.JavaClass.init(source, freq, ch_in, format, buffer_size); audiotrack:=TJAudioTrack.JavaClass.init(3, freq, ch_out, format, buffer_size,1); end; procedure TForm1.ServerUDPRead(AThread: TIdUDPListenerThread; const AData: TIdBytes; ABinding: TIdSocketHandle); begin audiotrack.write(TBytesToTJavaArray(TBytes(AData)),0,Length(AData)); audiotrack.play; end; end.  
    radio.zip
  18. Like
    Равиль Зарипов (ZuBy) получил реакцию от Anatoliy в TMapsEngine   
    без привязки к платформе, т.к. он работает с апи yandex и google
    а выводить можно куда захотите, я выводил на TMapView для мобильных, на Windows можно использовать какой-нить другой компонент
  19. Like
    Равиль Зарипов (ZuBy) получил реакцию от Anatoliy в TMapsEngine   
    Компонент TMapsEngine
     
    Возможности
    Нативный LocationSensor [ANDROID] Геокодинг/Реверс геокодинг через Google API, Yandex API, Here Maps API Построение маршрута через Google Distance API Расчет дистанции по прямой Совместим со стандартным компонентом TLocationSensor  
    Видео демонстрация
     
    На видео видно как TMapView косячик с миллионом точек, приложение зависло при отрисовке, но с этим ничего не поделать.
    Без синхронизации не возможно отрисовать все точки
     
    Исходник
    TMapsEngine_source.zip
    TMapsEngine_Seattle_10.zip
     
    Скачать APK  (долго он там не пролежит, а форум не позволяет загрузить zip размером 7,4 мб )
     
  20. Like
    Равиль Зарипов (ZuBy) получил реакцию от Anatoliy в StatusBar Color   
    Текущая реализация не позволяет нам менять цвет статус бара, потому что в FMX используется старая тема Holo.
    Поэтому устанавливается полупрозрачный цвет для нативного окна, и регулируется цвет статус бара с помощью установки цвета формы. 
    Так достигается эффект покраски статус бара
  21. Like
    Равиль Зарипов (ZuBy) получил реакцию от Anatoliy в [Delphi Berlin FMX Win32] Как реализовать двойной клик на ячейке в StringGrid?   
    оставлю это здесь
     
  22. Like
    Равиль Зарипов (ZuBy) отреагировална Andrey Efimov в TBitmapListAnimation проблемы с отрисовкой в Android   
    Подобное поведение наблюдалось на Delphi 10.2. Вроде этот баг исправили в 10.2.1, хотя могу ошибаться... Если нет, то возвращайтесь пока на 10.1.2 (Berlin upd 2).
     
    О том как и когда ловить события я писал здесь: Очередь событий Delphi приложения на Android
    Обратите внимание на события: BecameActive, WillBecomeForeground, WillBecomeInactive, OnSaveState
  23. Like
    Равиль Зарипов (ZuBy) получил реакцию от om.pranayama в TBitmapListAnimation проблемы с отрисовкой в Android   
    рекомендуется заменить TAniIndicator на TBitmapListAnimation 
  24. Like
    Равиль Зарипов (ZuBy) отреагировална kami в Уничтожение TFrame   
    Я бы поменял их местами.
    Несколько странно сперва уничтожать объект, а потом обращаться к его полям и методам...
  25. Like
    Равиль Зарипов (ZuBy) отреагировална kami в Вызов TPopup ломает поведение TWebBrowser   
    Апну тему.
    На этот раз - Tokio upd1, с патчем под iOS11.
    Что требуется: скопировать в папку с проектом (рядом с dpr) файл FMX.WebBrowser.pas. В нем внести изменения в метод TCustomWebBrowser.FormHandleCreated, чтобы он выглядел следующим образом:
     
    procedure TCustomWebBrowser.FormHandleCreated(const Sender: TObject; const Msg: TMessage); function GetParentForm(Control: TFmxObject): TCommonCustomForm; begin if (Control.Root <> nil) and (Control.Root.GetObject is TCommonCustomForm) then Result := TCommonCustomForm(Control.Root.GetObject) else Result := nil; end; var WBService : IFMXWBService; begin if not (csDesigning in ComponentState) and ((FWeb = nil) or (Sender = GetParentForm(self as TFmxObject))) and TPlatformServices.Current.SupportsPlatformService(IFMXWBService, WBService) then begin WBService.DestroyWebBrowser(FWeb); // добавлена эта строка. FWeb := WBService.CreateWebBrowser; FWeb.SetWebBrowserControl(Self); FWeb.UpdateContentFromControl; FWeb.URL := FURL; FWeb.Navigate; end; end; Что дает правка:
    допустим, у вас есть WB на главной форме и на дочерней форме (или фрейме - без разницы), которая создается / уничтожается динамически. При создании вторичной формы метод FormHandleCreated вызывается дважды, при этом FWeb, созданный в первом вызове просто забывается, но не уничтожается (сильная ссылка в списке веббраузеров в WBService). Дальше вторичная форма уничтожается (захватывая с собой FWeb, созданный при втором вызове FormHandleCreated ), а в "забытом" FWeb остаются невалидные ссылки на родителя. Что при вызове метода TWBFactoryService.RealignBrowsers (активация / изменение размеров формы) приведет к AV.
    Внесенное изменение удаляет FWeb из списка WBService, и в дальнейшем ничего не мешает его спокойному уничтожению.
×
×
  • Создать...