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

Slym

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

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

  • Посещение

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

    39

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

  1. атак? if TOpenCustomScrollBox(Sender).ContainsObject(ICtrl.GetObject) then
  2. procedure SyncProc(Proc:TProc<TLightweightEvent>); var Event:TLightweightEvent; begin Event:=TLightweightEvent.Create; try Proc(Event); Event.WaitFor(); finally Event.Free; end; end; function MessageDialogSync(const AMessage: string; const ADialogType: TMsgDlgType; const AButtons: TMsgDlgButtons; const ADefaultButton: TMsgDlgBtn; const AHelpCtx: THelpContext): TModalResult; var LocalResult: TModalResult; begin SyncProc( procedure(Event:TLightweightEvent) begin TThread.Synchronize(nil, procedure begin TDialogServiceAsync.MessageDialog(AMessage, ADialogType, AButtons, ADefaultButton, AHelpCtx, procedure(const AResult: TModalResult) begin LocalResult:=AResult; Event.SetEvent; end); end); end); result:=LocalResult; end; procedure TForm3.Button1Click(Sender: TObject); begin TThread.CreateAnonymousThread( procedure begin while not TThread.CheckTerminated do begin TThread.Sleep(1000); if MessageDialogSync('Продолжать?', TMsgDlgType.mtInformation,[TMsgDlgBtn.mbYes, TMsgDlgBtn.mbNo],TMsgDlgBtn.mbYes,0)<>idYes then TThread.CurrentThread.Terminate; end; end).Start; end; поток тормозится до исполнения диалога... диалог показывается в главном потоке
  3. type TOpenCustomScrollBox=class(TCustomScrollBox); procedure TScrollBoxService.OnViewportPositionChange(Sender: TObject; const OldViewportPosition, NewViewportPosition: TPointF; const ContentSizeChanged: Boolean); var ICtrl:IControl; begin ICtrl:=TControl(Sender).Root.Captured; if not assigned(ICtrl) then begin ICtrl:=TControl(Sender).Root.Focused; if not assigned(ICtrl) then exit; end; if TOpenCustomScrollBox(Sender).Content.ContainsObject(ICtrl.GetObject) then begin ICtrl.MouseUp(TMouseButton.mbLeft,[],0,0); ICtrl.DoMouseLeave; end; end;
  4. Собственно - это только IOS Все там есть. см iOSapi.CoreLocation.pas
  5. тогда везде тыкай {$ZEROBASEDSTRINGS OFF} глобально никак
  6. var i:integer; begin s:='hello world'; for i:=low(s) to high(s) do print(s[i]); end; s.Chars[0] и все остальное из TStringHelper всегда с нуля... но даже так огреб при расчете суммы ean13
  7. ImageToStream.Free; убери может оно гасится раньше отправки var ImageToStream : TMemoryStream; begin ImageToStream := TMemoryStream.Create; ImageToStream.LoadFromFile('Здесь находится путь к файлу'); ImageToStream.Position := 0; TetheringAppProfile1.Resources.FindByName('ImageTransfer').Value := ImageToStream; end; А вот который принимает: procedure TForm1.TetheringAppProfile1Resources3ResourceReceived(const Sender: TObject; const AResource: TRemoteResource); begin ImageViewer1.Bitmap.LoadFromStream(AResource.Value.AsStream); end;
  8. 1 рабочий поток. но диалоги через Synchronize посылаются в главный поток при этом рабочий засыпает на Event.WaitFor; диалог закрывается и дергает Event.SetEvent; у меня это тоже не как скелет, все кишки с евентами и синхронизами спрятаны, 1-3 скроки показать диалог... остальное бизнес логика
  9. Так себе, отключать кеш... можно разово при запуске {$IFDEF ANDROID} var NativeBrowser:JWebBrowser; if Supports(WebBrowser,JWebBrowser,NativeBrowser) then NativeBrowser.clearCache(true); {$ENDIF ANDROID}
  10. Я пробовал полезную нагрузку сунуть в поток а гуй через sync и с ожиданием Event как то так (псевдокод) : TThread.CreateAnonThread( begin Event:=TEvent.Create; try DoStep1; Event.Reset; TThread.Sync( begin ShowMessageAsync('Ахтунг!' begin Event.SetEvent; end) end); Event.WaitFor; DoStep2;.... fin Event.Free; end; end)
  11. Да весь FMX на интерфейсах и QueryInterface... FireDAC так вообще страшный сон все на QueryInterface, на фабриках фабрик. а Модель COM - построена на одном интерфейсе - IDispatch, все!
  12. VCLComObject все таки завязан только названием! Остальное завязано только на QueryInterface, а оно нативно и мультиплатформенно
  13. Пример в атаче, там же патченый FMX.Controls.Presentation VCLComObject.zip
  14. наследовать ради интерфейса? не проще композицией интерфейс внести? property OptionsIntfImpl: IFDStanOptions read FOptionsIntf implements IFDStanOptions; можно было бы без наследования вообще через TComponent.VCLComObject, но какая то редиска в TPresentedControl не спустила QueryInterface до TComponent.QueryInterface но можно пропатчить FMX.Controls.Presentation.pas function TPresentedControl.QueryInterface(const IID: TGUID; out Obj): HRESULT; else Result := inherited; и делать так var Test:ITest; begin if Supports(Label1, ITest, Test) then Test.Test; end; Если надо пример - пиши, скину
  15. https://stackoverflow.com/questions/46457733/how-to-get-notification-authorization-status-in-swift-3 т.е. както так- писал в блокноте procedure TForm1.FormCreate(Sender: TObject); begin TUNUserNotificationCenter.OCClass.currentNotificationCenter.getNotificationSettingsWithCompletionHandler(OnNotificationSettings); end; procedure TForm1.OnNotificationSettings(NotificationSettings: UNNotificationSettings); begin NotificationSettings.authorizationStatus; end;
  16. if not TCLLocationManager.OCClass.locationServicesEnabled then abort; AuthorizationStatus:=TCLLocationManager.OCClass.authorizationStatus; if AuthorizationStatus in [kCLAuthorizationStatusDenied, kCLAuthorizationStatusRestricted] then abort; if AuthorizationStatus in [kCLAuthorizationStatusAuthorizedWhenInUse, kCLAuthorizationStatusAuthorized] then abort; FLocater := TCLLocationManager.Create; try FLocater.retain; FLocater.requestWhenInUseAuthorization; finally FLocater.release; FLocater:=nil; end;
  17. 1. Патчить 2. Не хочется генофонд трогать Можно скопипастить к себе TAVAudioSession и патчить у себя... а потом AudioSession := TAVAudioSession.Wrap(TAVAudioSession.OCClass.sharedInstance); if AudioSession.recordPermission=AVAudioSessionRecordPermissionDenied then AudioSession.requestRecordPermission(TPermissionBlock.Proc); type TPermissionBlock=class public class procedure Proc(Granted: Boolean); end; class procedure TPermissionBlock.Proc(Granted: Boolean); begin if Granted then end;
  18. Slym

    Serial port

    я обычно с гуя:
  19. там еще дефайны стоят #if defined(WINDOWS) && !defined(WINDOWLESS) т.к. нельзя пропускать функции в структуре - надо точно знать с какими дефайнами длл сбилдена. если лень описывать ненужную функцию делай заглушкой SciterGetPPI: pointer; - повторюсь пропускать нельзя
  20. а где тут stdcall? type PSciterAPI = ^ISciterAPI; ISciterAPI = packed record version: UINT; SciterClassName: function(): LPCWSTR;stdcall; SciterVersion: function(major: BOOL): UINT;stdcall; end;
  21. макросы разворачиваем в уме: sciter-x-api.h UINT SCFN( SciterVersion )(BOOL major); sciter-x-types.h #define SCFN(name) (__stdcall *name) итог: SciterVersion: function(major: bool) UINT; stdcall; и всетаки попробуй bool оставить
×
×
  • Создать...