Italian B4J - risolto il problema del b4xCanvas

ivanomonti

Expert
Licensed User
Longtime User
ieri fina a tarda notte ho fatto debug sul mio Mirosoft Surface che mi dava errori, ho risolto trovando una limitazione del b4xCanvas, vale a dire che non può essere più lungo di tot px, io lo avevo impostato in modo dinamico moltiplicando la lunghezza del form (fisso) * 5, in questo modo avevo 5 pagine da scrollare in horizzontale, il codice non dava problemi da nessuna parte e così ho smontato pezzo per pezzo del mio codice arrivando poi a fare tentativi fino a che lo trovato (3 del mattino)

In sostanza la lunghezza in px massima sul mio Surface è di 4096 px e non superiore, lo pubblico perchè magari può capitare anche a voi.

B4XCanvas:
#Region Project Attributes
    #MainFormWidth: 600
    #MainFormHeight: 600
#End Region

Sub Process_Globals
    Private fx As JFX
    Private MainForm As Form
    Private cv As B4XCanvas
    Private pn As B4XView
    Private sv As ScrollPane
    Private xui As XUI
End Sub

Sub AppStart (Form1 As Form, Args() As String)
    MainForm = Form1
    MainForm.Show
    MainForm.Stylesheets.Add(File.GetUri(File.DirAssets, "dark.css"))
    pn=xui.CreatePanel("")
    sv.Initialize("")
    sv.InnerNode = pn
    MainForm.RootPane.AddNode(sv,0,0,600,600)
    pn.Width=4096
    pn.Height=600*2
    cv.Initialize(pn)
    iniGriglia
End Sub

'Return true to allow the default exceptions handler to handle the uncaught exception.
Sub Application_Error (Error As Exception, StackTrace As String) As Boolean
    Return True
End Sub

Sub iniGriglia As Boolean
    Dim x0,y0,x1,y1
    x0=0
    y0=0
    x1=0
    y1=pn.Height
    For i=0 To pn.Width
        cv.DrawLine(x0,y0,x1,y1,xui.Color_DarkGray,0.5)
        x0 = x0+10
        x1=x0
    Next
    x0=0
    y0=0
    x1=pn.Width
    y1=0
    For i=0 To pn.Height
        cv.DrawLine(x0,y0,x1,y1,xui.Color_DarkGray,0.5)
        y0 = y0+10
        y1=y0
    Next
    Return True
End Sub

Cattura.JPG
 

giannimaione

Well-Known Member
Licensed User
Longtime User
Forse è un bug? Sarebbe il caso di esporre il problema ad Erel !?
 

ivanomonti

Expert
Licensed User
Longtime User
Questo codice funziona regolarmente:
B4X:
pn = xui.CreatePanel("")
MainForm.RootPane.AddNode(pn, 0, 0, 8192, 2400)

ripeto questo succede su Microsoft Surface e non sul pc desktop, potrebbe essere legato solo al Microsoft Surface ma conviene cmq segnalarlo, cosa che ho già fatto, anche perché non sai mai dove va a finire la tua app ;-)
 

Sagenut

Expert
Licensed User
Longtime User
È quasi sicuramente dovuto al diverso hardware o driver di gestione.
In ogni caso direi che è una ottima informazione sapere che è bene limitarsi a 4096.
 

ivanomonti

Expert
Licensed User
Longtime User
Dipende dalla scheda grafica; è cmq un bug di java jdk canvas, non di b4x.

certo che è di java, ma diventa del tuo software se poi questa limitazione non l'hai gestita ;-)
 
Top