Italian dal frmSchermata.Show di VB6 al (BOH??) di B4A

ZuperMario

Member
Licensed User
Salve di nuovo.
Mi sto incartando sulle basi.
Con VB6 creavo varie form, ad esempio frmMain per il programma principale, frmSetup per la schermata con il setup, e da codice con un semplice frmMain.show o frmSetup.show portavo in primo piano l'una o l'altra schermata.

Ora in B4A, ho un modulo di partenza Main che richiama il layout frmMain(.bal) con Activity.LoadLayout("frmMain"), che finchè rimane nel suo orticello funziona.

Poi ho creato un secondo modulo ScreenTest che dovrebbe lavorare sul layout frmScreenTest(.bal) sul quale volevo provare le funzioni di disegno prendendo a modello un semplice esempio d'uso di Panel e Canvas.

In frmMain c'è un Button premendo sul cui click lancio il comando StartActivity(ScreenTest), e nel modulo ScreenTest sezione Activity_Create c'è il caricamento della "form" con Activity.LoadLayout("frmScreenTest")
Fin qui vedo sul tablet che la seconda schermata appare.

Avendo dichiarato in Globals di questa seconda schermata picCanvas As Canvas e Schermo As Panel, tento di inizializzare il Canvas sul quale voglio disegnare con picCanvas.Initialize(Schermo) ma a quel punto l'applicazione esplode con l'errore "java.lang.RuntimeException: Object should first be initialized (Panel)."

Non capisco cosa voglia 😭



Nell'esempio che avevo scaricato da un thread qui sul forum non vedo nessuna "inizializzazione del panel":

Sub Globals
Dim picCanvas As Canvas
Dim ImageView1 As ImageView
Dim Panel1 As Panel
Dim Button1 As Button
End Sub

Sub Activity_Create(FirstTime As Boolean)
Activity.LoadLayout("Main")
picCanvas.Initialize(Panel1)
End Sub

Sub Panel1_Touch(Action As Int, X As Float, Y As Float)
picCanvas.DrawCircle(X, Y, 10dip, Colors.Red, True, 1dip)
Activity.Invalidate
End Sub
 

Filippo

Expert
Licensed User
Longtime User
ma a quel punto l'applicazione esplode con l'errore "java.lang.RuntimeException: Object should first be initialized (Panel)."
Se il "Panel1" non è stato dichiarato nel Layout "Activity.LoadLayout("Main")", allora bisogna di inizializarlo.
 
  • Like
Reactions: Smb

Sagenut

Expert
Licensed User
Longtime User
Benvenuto!
Visto che sei agli inizi ti consiglio di evitare direttamente i progetti Default (con le Activity) e creare fin da subito progetti B4XPages.
Nella sezione LEARN del sito puoi trovare anche un bel Video Tutorial, oltre a varie discussioni al riguardo sul forum.
Un'altra buona base da cui iniziare per imparare diverse cose sono questi Booklets
Booklets di Klaus
Provenendo da VB6 apprendere B4X sarà molto più rapido.
Comunque VB6 andrebbe paragonato a B4J (per Desktop).
Buon Lavoro!
 
  • Like
Reactions: Smb

Sagenut

Expert
Licensed User
Longtime User
Nell'esempio che avevo scaricato da un thread qui sul forum non vedo nessuna "inizializzazione del panel"
Se una View è presente nel Designer quando crei il Layout allora ti basta generarla da lì (click destro sulla View e poi scegli se dichiarala come Panel nativo o come B4XView) e sarà già anche inizializzata.
Se invece crei/dichiari una nuova View da codice allora è necessario anche usare il suo metodo Initialize.
 
  • Like
Reactions: Smb

LucaMs

Expert
Licensed User
Longtime User
Dato che stai "iniziando" adesso con B4A (ho letto l'altro post), fai subito la cosa giusta
Fanne anche un'altra: una (piccola quanto vuoi) donazione ad Anywhere Software (di cui assolutamente non faccio parte!), in modo da risultare utente "licenziato" ed avere vantaggi vari, tra i quali il poter vedere pubblicati subito i tuoi post e quindi anche le risposte.
 

Smb

New Member
Fanne anche un'altra: una (piccola quanto vuoi) donazione ad Anywhere Software (di cui assolutamente non faccio parte!), in modo da risultare utente "licenziato" ed avere vantaggi vari, tra i quali il poter vedere pubblicati subito i tuoi post e quindi anche le risposte.

Ciao, sono gia' licenziato, solo che ero entrato con un altro account 🤪
Vediamo se con questo esce...
 

ivanomonti

Expert
Licensed User
Longtime User
vedo se ho capito e se posso darti una soluzione


carichi il primo form:
    Root = Root1
    Root.LoadLayout("frame_login")

quando devi richiamare un nuovo form elimini tutti i nodi presenti e inserisci il nuovo form

quando passi al nuovo form da codice:
    Root.RemoveAllViews
    Root.LoadLayout("frame_register_main")
 

ZuperMario

Member
Licensed User
Dal momento che mi state consigliando di iniziare con B4XPages invece di B4A, una domanda al riguardo: ma con B4XPages lo stesso identico codice può girare sia su Android che su Windows? Oppure e' un metodo per incapsulare i differenti linguaggi di programmazione in un unico "eseguibile", ma a livello di programmazione devo comunque inserire praticamente 2 codici, uno per android e uno per windows?
 

LucaMs

Expert
Licensed User
Longtime User
Dal momento che mi state consigliando di iniziare con B4XPages invece di B4A, una domanda al riguardo: ma con B4XPages lo stesso identico codice può girare sia su Android che su Windows? Oppure e' un metodo per incapsulare i differenti linguaggi di programmazione in un unico "eseguibile", ma a livello di programmazione devo comunque inserire praticamente 2 codici, uno per android e uno per windows?
A parte il fatto che creare sempre progetti B4XPages, anche se si voglia sviluppare soltanto un'app Android, è sempre una buona scelta, in quanto ci sono vari vantaggi, elencati qui...

"... lo stesso identico codice..." no, ma buona parte di esso sì.
Diciamo che, oltre ai vantaggi indicati nel paragrafo precedente, che comunque sono importanti, l'utilizzo di questo tipo di progetti è ideale per sviluppare app per Andorid e iOS, essendo più simili tra loro, in quanto hw mobile, rispetto a sw per Desktop.

Comunque, il mio suggerimento è di creare sempre nuovi progetti di tipo B4XPages, anche se si volesse sviluppare un'app solo per Android o solo per iOS.

Spesso, usare la libreria xui aiuta a "unificare" il codice per le 3 piattaforme. Inoltre, si può usare la direttiva di compilazione:

#IF B4A
#ELSE IF B4I
#ELSE IF B4J

Un aiuto, qui, lo troverai sempre!
 
Last edited:

ivanomonti

Expert
Licensed User
Longtime User
Dal momento che mi state consigliando di iniziare con B4XPages invece di B4A, una domanda al riguardo: ma con B4XPages lo stesso identico codice può girare sia su Android che su Windows? Oppure e' un metodo per incapsulare i differenti linguaggi di programmazione in un unico "eseguibile", ma a livello di programmazione devo comunque inserire praticamente 2 codici, uno per android e uno per windows?
generalmente tutto il codice girà ovunque tranne qualche elemento che è diverso, il fatto di usare i componenti B4X da la garanzia che vanno su tutte e tre le piattaforme diverso quelli precedenti.

ESEMPIO

TextField = b4j
EditText =b4a
TextField = b4i

nel caso b4x... è uniforme a tutti e tre le versioni, poi dipende come vuoi lavorare, se sei nuovo inizia già con b4x... e sperimenta
 

giannimaione

Well-Known Member
Licensed User
Longtime User
flutter e dart tosti da digerire, ma unico codice per android, ios & win
 
Top