Jump to content


  • Content Count

  • Joined

  • Last visited

Everything posted by mausmb

  1. mausmb

    How to Code SQL IN Statement correctly

    Hi, This code "qQuery.Open( 'SELECT * FROM tTableName WHERE Status IN ( :pS, :pR ) ORDER BY EventDate', [ 'S', 'R' ] );" can't work for a single or more than 2 parameters (just in case) Param1:='( 'S','R' )' Param2:='['S','R']' qQuery.Open( 'SELECT * FROM tTableName WHERE Status IN :Param1 ORDER BY EventDate, :Param2 ); I'm using that approach without Param2 (that part you should test it) regards, M
  2. Hi, Fmx.VirtualKeyboard works fine with Android, but with Windows is unstable and slow .... Did Anybody made custom FMX keyboard for Windows ? Regards, marjan
  3. Closed : bug in 10.3.2 (SugarLoaf is working ) Hi, I have a problem with intercepting SOAP packages. I'm using WSDL importer and THTTPRIO OnBeforeExecute and OnAfterExecute event. OnAfterExecute I get Soap response package without problem, but OnBeforeExecute Tstream (as String) is always empty. What I'm doing wrong ? procedure TDummyBeforeEx.Beforexecute(const MethodName: string; SOAPRequest: TStream); var sl : TStringList; // If I'm ussing Array of byte is the same empty result when encoding to string begin sl := TStringList.Create; SOAPRequest.Position := 0; try sl.LoadFromStream(SOAPRequest); if sl.Text='' then // Always empty ! exit; sl.Text := StringReplace(sl.Text, '<soap:Body>', '<soap:Body>XXX', [rfReplaceAll]); sl.SaveToStream(SOAPRequest); finally sl.Free; end; end; function GetKasaSoap(UseWSDL: Boolean; Addr: string; HTTPRIO: THTTPRIO): KasaSoap; const defSvc = 'Kasa'; defPrt = 'KasaSoap'; var RIO: THTTPRIO; begin Result := nil; if (Addr = '') then begin if UseWSDL then Addr := defWSDL else Addr := defURL; end; if HTTPRIO = nil then RIO := THTTPRIO.Create(nil) else RIO := HTTPRIO; try rio.OnAfterExecute:=TDummyAfterEx.AfterExecute; // working as aspected rio.OnBeforeExecute:=TDummyBeforeEx.Beforexecute; RIO.Converter.Options:=RIO.Converter.Options+[TSOAPConvertOption.soSendMultiRefObj,TSOAPConvertOption.soSendMultiRefArray]; // RIO.HTTPWebNode.ConnectTimeout:=10; // RIO.HTTPWebNode.SendTimeout :=10; // RIO.HTTPWebNode.ReceiveTimeout:=10; Result := (RIO as KasaSoap); if UseWSDL then begin RIO.WSDLLocation := Addr; RIO.Service := defSvc; RIO.Port := defPrt; end else RIO.URL := Addr; finally if (Result = nil) and (HTTPRIO = nil) then RIO.Free; end; end; Regards, M
  4. mausmb

    Android in VMWare

    Hi, VMware, delphi standard instalation with Android SDK/NDK... debugging working just fine (since Delphi Berlin). Regards, M
  5. Hi, from July 23 - to August 1. br,
  6. mausmb

    Install Android SDK manually?

    Hi, https://docs.unity3d.com/560/Documentation/Manual/android-sdksetup.html or install Android studio ... then edit path's regards, mm
  7. From Google Play today : Thank you for your patience while we reviewing your request. I'm happy to inform you that your app "*********" has been approved for 64-bit extension. Please note that the extension will only be given until August 1st, 2020. In addition, once your app is compliant with 64-bit, please let me know by replying this email. Thank you for supporting Google Play. Have a nice day!
  8. mausmb

    DBNavigator Losing Colours

    Hi, property StyleElements: TStyleElements read FStyleElements write SetStyleElements default 7; Specifies the style elements that are used by the control. Use StyleElements to customize the style of the control. If a custom style is enabled, you can enable or disable style elements in the control. StyleElements is a set of values that specify which elements of the current style are to be applied to this control. By default, all the elements of the style are enabled. But for TdbNavigator is not possibile to set styleelements .. partial success with grids... br, M
  9. Hi, Some Android 5.1 (not all!!) and Delphi Rio have some (other/different) issues... I was forced to compile app with Tokyo for Android 5.1. The best solution is upgrade device 5.1. to Android 6.0 or more. However some "no-name" devices don't provide upgrade. br, Marjan
  10. mausmb

    Generating one-to-many on the fly with Live Bindings

    Not going into "demo VS production" app area...Let's say (for the sake of the argument) that statement "but trying to do too much on a single mobile screen at the same time" is true . With Livebindings performance is poor. Without Livebindigs performance is good. So what's your argument again ? 🙂 br, m
  11. mausmb

    RIO - FDMemTable fielddefs design time bug ?

    Yes .and on many other properties (FMX)
  12. mausmb

    Problems with Listview fmx 10.3 ,close application

    I'm affraid you won't get best UX&performance with livebindigs br, m p.s. If you have more complex ListView you can do it manually 🙂 with TAppearanceListViewItems... LItem.Objects.FindDrawable('name').Width:=LColWidth; // LItem.Objects.FindDrawable('name').Data:=yourdata
  13. mausmb

    Problems with Listview fmx 10.3 ,close application

    Hi, I have all ListViews dynamicly created and "connected" to FDmemTable. Key word is "connected" - what do you mean with that ? With Live Bindings ? var LItem: TListViewItem; begin MyLV1.BeginUpdate; MyLV1.Items.Clear; myFDmemTable.First; While not myFDmemTable.eof Do Begin LItem := MyLV1.Items.Add; LItem.Text := myFDmemTableName.AsString; LItem.Tag := myFDmemTableKey.AsInteger; myFDmemTable.next; end; MyLV1.EndUpdate; Working fine (and fast) on Android 5.x to 9.1 br, m
  14. mausmb

    MessageDialog in Delphi 10.3

    This code working just fine in 10.3 Android & Windows ... dont' know with Tmodalresult TDialogService.MessageDialog((mymessage), system.UITypes.TMsgDlgType.mtConfirmation, [system.UITypes.TMsgDlgBtn.mbYes, system.UITypes.TMsgDlgBtn.mbNo], system.UITypes.TMsgDlgBtn.mbYes,0, procedure (const AResult: System.UITypes.TModalResult) begin case AResult of mrYES: Begin ..... br,
  15. mausmb

    Generating one-to-many on the fly with Live Bindings

    Hi, Not to impose on your excercise 🙂 But Livebindigs are not usefull in "real" application on Android/iOs. I was forced, due to bad performance, to drop all bindigs and manually code everything. br, Marjan
  16. Yes and No - depending on functionality. Almost all APP request permission when installed/started. It's tricky in Delphi to do that with new approach. If you're for example reading i.e. setup. login, token,... from storage ... you don't have other option. if you just want access when app is up&running then is better to request permission when needed. br, Marjan
  17. Quick Example : private {$IFDEF ANDROID} fReadStorage:=JStringToString(TJManifest_permission.JavaClass.READ_EXTERNAL_STORAGE); fWriteStorage:=JStringToString(TJManifest_permission.JavaClass.WRITE_EXTERNAL_STORAGE); fBlueTooth:=JStringToString(TJManifest_permission.JavaClass.BLUETOOTH); {$ENDIF} procedure Tfrm????.FormShow(Sender: TObject); begin {$IF DEFINED(IOS) or DEFINED(ANDROID)} PermissionsService.RequestPermissions([fReadStorage,fWriteStorage,fBlueTooth], RequestPermissionsResult, DisplayRationale); {$ENDIF} end; procedure Tfrm????.RequestPermissionsResult(Sender: TObject; const APermissions: TArray<string>; const AGrantResults: TArray<TPermissionStatus>); begin if (Length(AGrantResults) = 3) and (AGrantResults[0] = TPermissionStatus.Granted) and (AGrantResults[1] = TPermissionStatus.Granted) and (AGrantResults[2] = TPermissionStatus.Granted) then // execute procedure ... as before on form show ... else Begin TDialogService.ShowMessage('No ....'); Application.Terminate; End; // če ne bi dovolili permission bi moral showerror end; {$ENDIF} {$IF DEFINED(IOS) or DEFINED(ANDROID)} procedure Tfrm????..DisplayRationale(Sender: TObject; const APermissions: TArray<string>; const APostRationaleProc: TProc); var I: Integer; RationaleMsg: string; begin for I := 0 to High(APermissions) do begin if APermissions = fReadStorage then RationaleMsg := RationaleMsg + 'Aplikacija zahteva branje pomnilnika' + SLineBreak + SLineBreak else if APermissions = fWriteStorage then RationaleMsg := RationaleMsg + 'Aplikacija zahteva pisanje pomnilnika'+ SLineBreak + SLineBreak else if APermissions = fBlueTooth then RationaleMsg := RationaleMsg + 'Aplikacija zahteva BlueTooth'; end; TDialogService.ShowMessage(RationaleMsg, procedure(const AResult: TModalResult) begin APostRationaleProc; end) end; {$ENDIF}
  18. Hi, Any ideas how to enable EU decimal behaviour in Rio ? In both versions FloatToStr returns number with ',' NumberPad Delphi 10.2.3 behaviour : you can enter ',' or '.' (comma is for EU right choice) Delphi 10.3 behaviour : Android keyboard displays ',' and '.'., but Enter ',' or '.' is not possibile DecimalNumberPad Delphi 10.2.3 behaviour : you can enter ',' or '.' (comma is for EU right choice) Delphi 10.3 behaviour : Android keyboard displays ',' and '.'. Enter is possibile. Entaer is ONLY for '.' , regardless that dispaly is with ',' Regards, Marjan
  19. That's not true at all 🙂 Maybe "EU decimal behaviour is wrong expression...maybe "locale settings not working (properly) with TNumberBox and Tedit. TnumberBox not working at all (enter 2.5 and Tnumberbox converts to 25 !). On Android : 1. Tnumberbox display decimal numbers with comma (","). 2. when you enter decimal number you have to press DOT (".") - that's contra intuitive for user when COMMA is displayed 3. When you enter 2.5 Tnumberbox converts to 25 There is such a thing :-) (The 22nd General Conference on Weights and Measures declared in 2003 that "the symbol for the decimal marker shall be either the point on the line or the comma on the line") examples (all EU countries and Canada w/o UK - if UK is EU country 🙂 using COMMA as decimal separator): https://docs.oracle.com/cd/E19455-01/806-0169/overview-9/index.html https://en.wikipedia.org/wiki/Decimal_separator TestNumbers.zip
  20. mausmb

    Delphi Bugs reported to QualityPortal

    Not yet 🙂 I will ! I was searching/hoping for alternative solution and hoping that ... I don't understand it well enough (or know ) how to solve problem. https://quality.embarcadero.com/browse/RSP-21850 https://quality.embarcadero.com/browse/RSP-21849 https://quality.embarcadero.com/browse/RSP-21848 br, Marjan
  21. mausmb

    Delphi Bugs reported to QualityPortal

    I found 3 bugs (but didn't report them to Quality portal) 1. WSDL import Rio 10.3 converts : FCertBytes: TArray<System.Byte>; procedure SetCertBytes(Index: Integer; const ATArray<System.Byte>: TArray<System.Byte>); Everyt ByteArray converter names "Array" and <System.Byte> is Added 🙂 Tokyo 10.2.3 converts : FCertBytes: TByteDynArray; procedure SetCertBytes(Index: Integer; const ATByteDynArray: TByteDynArray); 2. problems with time 3. DecimalSeparator and TnumberBox br, Marjan
  22. Hi, Working with time in DB datetime format (example : '30.12.1899 09:18:54') on Android Delphi 10.3 throws exception- sTimespanTooLong. On Windows (and previous Delphi version) is OK. class function TTimeSpan.GetScaledInterval(Value: Double; Scale: Integer): TTimeSpan; var NewVal: Double; begin if IsNan(Value) then raise EArgumentException.Create(sTimespanValueCannotBeNan); NewVal := Value * Scale; if Value >= 0.0 then NewVal := NewVal + 0.5 else NewVal := NewVal - 0.5; if (NewVal > MaxMilliseconds) or (NewVal < MinMilliseconds) then raise EArgumentOutOfRangeException.Create(sTimespanTooLong); Result := TTimeSpan.Create(Trunc(NewVal) * TicksPerMillisecond); end; How to set initial datetime for Android ? WorkAround is simple, but ugly if (NewVal > MaxMilliseconds) then NewVal:=MaxMilliseconds; if (NewVal < MinMilliseconds) then NewVal:=MinMilliseconds; Regards, Marjan
  23. It's not just easier override And recurring problem with TXSDateTime "The given "30.12.1899 13:09:05" local time is invalid (situated within the missing period prior to DST" br, Marjan
  24. Another/same issue with TNumberBox. With local EU settings you can enter decimal number, but on exit is without decimal ... exmaple enter 2,5 on exit is 25 ! 😞 br, Marjan
  25. Solved with Frac ! wsInvoice.TimeTransaction.AsUTCDateTime:=Frac(tblInovicesTimeTransaction.AsDateTime); br, Marjan