-
Постов
2 517 -
Зарегистрирован
-
Посещение
-
Победитель дней
264
Активность репутации
-
Равиль Зарипов (ZuBy) отреагировална Евгений Корепов в Кнопка "Добавить в избранное"
Кнопка "Добавить в избранное" и соответственно раздел Избранное в профиле очень помогли бы в работе с форумом. Добавлять в избранное хочется отдельные посты. Потому как поиск работает плохо и искать когда то попавшееся на глаза нужное решение найти проблематично.А так бы ткнул на Добавить в избранное, по мере надобности зашел в свое Избранное, увидел разбитое по разделам форума списки избранного и нашел что нужно.
Заранее благодарю!
-
Равиль Зарипов (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% от продаж.
-
Равиль Зарипов (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 мб )
-
Равиль Зарипов (ZuBy) получил реакцию от Alisson R Oliveira в TListView Custom checkboxes (иконка чекбокс "избранное")
как-то так, но это наверное сложно для понимания)
LVStars.rar
-
Равиль Зарипов (ZuBy) получил реакцию от Alisson R Oliveira в Как сделать аналог Autosize в TImage
как то так наверное
AutoSizeImage.rar
-
Равиль Зарипов (ZuBy) получил реакцию от brunnengi в [Delphi Berlin FMX Win32] Как реализовать двойной клик на ячейке в StringGrid?
оставлю это здесь
-
Равиль Зарипов (ZuBy) получил реакцию от sezavasasilov в Почему нет родных Android-эффектов у FMX приложения?
это называется Bounce эффект доступен в TAniCalc, но просто так до него не добраться.
Можно использовать ModernListView, там легко это делается.
P.S. поиск по форуме ModernLV, ModernListView
-
Равиль Зарипов (ZuBy) получил реакцию от Ingalime в Почему нет родных Android-эффектов у FMX приложения?
это называется Bounce эффект доступен в TAniCalc, но просто так до него не добраться.
Можно использовать ModernListView, там легко это делается.
P.S. поиск по форуме ModernLV, ModernListView
-
Равиль Зарипов (ZuBy) отреагировална kami в Непонятки с TWebBrowser
Попробуйте использовать Navigate (без параметров) вместо Reload.
Ну и - делать невидимую работу по правке файла, используя визуальный компонент (Memo) - это, мягко говоря, не комильфо.
-
Равиль Зарипов (ZuBy) отреагировална Andrey Efimov в Как сделать приложение системным?
Попробуйте извлечь файл .so из вашего apk и добавить его в папку /system/lib/. Ну и закинуть apk файл в папку /system/priv-app/.
А вообще вам не сюда, вам на 4pda или xda-developers (англ.)
На этом форуме разработчики софта, а не спецы по модификации прошивок.
-
Равиль Зарипов (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.
-
-
Равиль Зарипов (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.
-
Равиль Зарипов (ZuBy) получил реакцию от Ingalime в TTextSettings неразвёртвовается
посмотри тут
https://github.com/rzaripov1990/ZMaterialComponents/blob/master/Library/FMX.ZMaterialEdit.pas
-
-
Равиль Зарипов (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;
-
Равиль Зарипов (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
-
Равиль Зарипов (ZuBy) получил реакцию от Anatoliy в TMapsEngine
без привязки к платформе, т.к. он работает с апи yandex и google
а выводить можно куда захотите, я выводил на TMapView для мобильных, на Windows можно использовать какой-нить другой компонент
-
Равиль Зарипов (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 мб )
-
Равиль Зарипов (ZuBy) получил реакцию от Anatoliy в StatusBar Color
Текущая реализация не позволяет нам менять цвет статус бара, потому что в FMX используется старая тема Holo.
Поэтому устанавливается полупрозрачный цвет для нативного окна, и регулируется цвет статус бара с помощью установки цвета формы.
Так достигается эффект покраски статус бара
-
Равиль Зарипов (ZuBy) получил реакцию от Anatoliy в [Delphi Berlin FMX Win32] Как реализовать двойной клик на ячейке в StringGrid?
оставлю это здесь
-
Равиль Зарипов (ZuBy) отреагировална Andrey Efimov в TBitmapListAnimation проблемы с отрисовкой в Android
Подобное поведение наблюдалось на Delphi 10.2. Вроде этот баг исправили в 10.2.1, хотя могу ошибаться... Если нет, то возвращайтесь пока на 10.1.2 (Berlin upd 2).
О том как и когда ловить события я писал здесь: Очередь событий Delphi приложения на Android
Обратите внимание на события: BecameActive, WillBecomeForeground, WillBecomeInactive, OnSaveState
-
Равиль Зарипов (ZuBy) получил реакцию от om.pranayama в TBitmapListAnimation проблемы с отрисовкой в Android
рекомендуется заменить TAniIndicator на TBitmapListAnimation
-
Равиль Зарипов (ZuBy) отреагировална kami в Уничтожение TFrame
Я бы поменял их местами.
Несколько странно сперва уничтожать объект, а потом обращаться к его полям и методам...
-
Равиль Зарипов (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, и в дальнейшем ничего не мешает его спокойному уничтожению.