Italian OT - ide e designer

ivanomonti

Expert
Licensed User
Longtime User
da qualche versione esistono i moduli B4X che sono multipiattaforma IOS+ANDROID+DESKTOP e fino qui ok, mi chiedevo solo una cosa visto che sto cercando di usare designer (@LucaMs) per le finestre semplici...

2020-05-10_141640.jpg

2020-05-10_141558.jpg


  1. quando poi devo generare l'evento la spunta B4XView serve o no?
  2. qunado devi o vuoi usare questo strumento B4X?
2020-05-10_141813.jpg


perchè in molti casi si fa confusione, oddio, io la facio 🤐 ma vorrei capire come sfruttare al meglio questo strumento..., inoltrequando fai una vista da designer non devi initializzare nulla, ma gli object (textfield, button label,... se generi i membri ide ti segnala che sono già presenti e initializzati, ho due scenari, anzi 3
  1. non li generi ma poi devi fare un for per cercare ogni singolo oggetto con getNode o GetView
  2. se generi i membri tutti in main diventa un bordello di oggetti e quindi devono essere nominati in maniera di ricordare di che vista sono
  3. la terza scrivi tutto a codice ma se poi devo delegare qualcuno, mi ammazza come hai tempi remoti
quale consiglio da più esperti. dimenticavo le viste sono dentro le viste (pane su pane o su form e non altre form)
 
Last edited:

LucaMs

Expert
Licensed User
Longtime User
Ho cercato su Google Translate ma non ho trovato da IvanoMonti a italiano 😄

Provo a rileggere (con mooolta pazienza) ciò che hai scritto. Intanto, per quanto riguarda la prima domanda:
quando poi devo generare l'evento la spunta B4XView serve o no?
No, per gli eventi non serve che la casella B4XView sia spuntata; la spunta serve per far sì che la dichiarazione delle variabili creata dall'IDE nel sorgente sia di tipo B4XView anziché dei tipi nativi. Cioè con quella spunta scegli se la generazione creerà un:

Dim Label1 As Label ' <--- senza spunta
oppure
Dim Label1 As B4XView ' <--- con spunta
 

ivanomonti

Expert
Licensed User
Longtime User
Dim Label1 As Label ' <--- senza spunta
oppure
Dim Label1 As B4XView ' <--- con spunta

Grazie per la prima risposta

vediamo se riesco con il codice

inserisco una view all'interno di una pannello centrale in MainForm:
        Dim mBaseTemp As B4XView
        mBaseTemp = Global.xui.CreatePanel("")
        mBaseTemp.LoadLayout("mFind")
        MainForm.RootPane.AddNode(mBaseTemp,(MainForm.WindowWidth-500)/2,32,500,50)
        mBaseTemp.Tag="pane_find"

chiudo il pannello distrugendolo con RemoveNodeFromParent:
Sub mFind_Button_close_MouseClicked (EventData As MouseEvent)
    Dim mButton As Button= Sender
    mButton.Parent.Parent.RemoveNodeFromParent
End Sub

Usandolo in questo modo quando devo leggere il testo di una textfiled o un valore chissa da dove devo leggere ogni view presente nel nuovo LoadLayout("mFind"), prendere il suo contenuto e poi farne ciò che voglio e fino qui tutto ok...

Se invece faccio una form nuova istanzio ogni oggetto e li si procede come sempre, ma se dovessi istanziare tutti gli oggetti di ogni LoadLayout("") per x Pannelli avrei tonnellate di private b4xView in Main
 

ivanomonti

Expert
Licensed User
Longtime User
al momento e così

pannello generale con testa, body e piede
testa = menu
body = gli scenari
piede = (footer) intestazioni ecc ecc
additional view = scenari diversi in mezzo alla mainform

calendar e organizer vengono inseriti in body
tutte le finestre accessorie (find,login,new account, new group ecc ecc ) vanno in additional view

quindi al click carico un pane con il layout preimpostato e faccio ciò che mi propone, il tasto close fa sempre la stessa cosa il resto a secondo di cosa serve quella view.

Pare ovvio che ogni layout ha un nome personale e tutti gli object idem e pertanto avrò tanti eventi da gestire separatamente, ma questi sono tutti in main

2020-05-10_151048.jpg
 

ivanomonti

Expert
Licensed User
Longtime User
guarda questo esempio che per me e più semplice

2020-05-10_161532.jpg
 

Attachments

  • LayOut-Test.zip
    3.9 KB · Views: 176

LucaMs

Expert
Licensed User
Longtime User
Non so come tu debba usarlo ma:

1 - evita di creare View da codice (mBase, nel tuo caso: perché non metterlo nel mMain?)
2 - usando mBase.RemoveAllViews fai prima. Suppongo che tu non voglia eliminare tutte le View ma solo alcune; in questo caso, raggruppa quelle da eliminare in un altro Pane (ti ricordo che i Pane sono gratuiti 😄)
3 - infine, io userei la parola "Search", anziché "Find", ma non è importante.
 

ivanomonti

Expert
Licensed User
Longtime User
mBase, nel tuo caso: perché non metterlo nel mMain? guarda che è così

B4X:
    Dim mBase As B4XView
    mBase = xui.createpanel("")
    mBase.LoadLayout("mFind")
    MainForm.RootPane.AddNode(mBase,50,31,500,50)

nel pane centrale ho due scenari distinti che carico in quel pannello usando lo scrollpane, tutte le altre viste sono accessorie e quindi uso esempio sopra, cio che cambia sono le altezze del moduli (da designer) richiamati e pubblicati e con close vengono distrutti
 

Sagenut

Expert
Licensed User
Longtime User
Rispondo al volo, senza aver guardato gli esempi (scusate), per vedere se non ho capito una mazza.......
Hai 2 Layout che devono, a seconda della necessità, caricarsi sullo stesso Pane?
Perchè invece non li carichi su 2 Pane separati e poi rendi Visible quello che serve secondo necessità?
 

ivanomonti

Expert
Licensed User
Longtime User
@LucaMs Si può fare tutto da Designer ed eliminare tutte le view che stanno in un certo pane(l) in ogni momento. tutto dentro in un solo layout lo trovo un delirio, fai finta che ho 30 scenari diversi con più o meno view... sarebbe un bordello dovrei avere spazio di almeno 4000x4000px e lo trovo deleterio, ogni piccola view separata e la carico al momento che serve, via una dentro altra, lo trovo molto più veloce anche sul punto di modifiche grafiche

@Sagenut Hai 2 Layout, se così fosse ok, ma fai un esempio di:

1) scena master
2) scena lavagna grafica (moduli solo per lei) cerca, crea gruppi, nuovo elemento, modifica elemento, raggruppa per, ect ect
3) scena calendario (moduli solo per lui) crea, cerca, modifica, ecc
4) panello avvisi footer qui ne basta uno al momento

ora in base gestisco 20 elementi textfield, 20 bottoni, 10 datapicker, 10 colorpicker e via discorrendo con label e altro...

avrei un botto di elementi da raggruppare per pannello e poi questo visibile e questi non visibili... la cosa mi spaventa assai, torno sull'idea un progetto grafico per scena e lo carico al volo
 

Sagenut

Expert
Licensed User
Longtime User
Non capisco quale sia il risultato finale da ottenere.
Credo di capire che hai necessità di avere Layout dinamici che abbiano più o meno cose.
Ma quanto sono diversi questi Layout?
O contengono liste ripetitive degli stessi oggetti?
 

ivanomonti

Expert
Licensed User
Longtime User
@Sagenut O contengono liste ripetitive degli stessi oggetti? no, ogni vista e a se e interagisce con la scena pricipale, quindi una sola scena e molte azioni diverse, ognii azione è fatta di più valori

Organizer
Cerca = campo di ricerca + bottone cerca e chiudi
Nuovo gruppo = campo nome gruppo + colorpicker e bottone salva e chiudi
Nuovo item = campi item (nome, cognome, via ecc ecc) + bottone annulla e salva
Raggruppa = combobox di selezione + camo ok e annulla
bla bla bla ...

Calendario eventi

Nuovo evento = campi eventi (insert into...)
Modifica evento = campi modifica evento (Update to...)

Login
Login = campo username + campo password + bottone login e bottone chiudi
Nuovo utente = (campi utente + login + bottone salva e chiudi

Poi ci sono altri scenari che hanno viste diverse come grafici, rating e altro da finirsi guarda immagini di alcuni scenari nello scenario proncipale
 

Attachments

  • 2020-05-10_184914.jpg
    2020-05-10_184914.jpg
    58.5 KB · Views: 167
  • 2020-05-10_184849.jpg
    2020-05-10_184849.jpg
    59 KB · Views: 156
  • 2020-05-10_184822.jpg
    2020-05-10_184822.jpg
    134.8 KB · Views: 168
  • 2020-05-10_184731.jpg
    2020-05-10_184731.jpg
    63.6 KB · Views: 158

Sagenut

Expert
Licensed User
Longtime User
Mi pare che siano Layout definiti quindi non vedo il motivo per non crearli con il Designer.
Quindi probabilmente non ho ancora ben definito cosa stai chiedendo.
Una volta creato, ad esempio, il layout per Aggiungere un Nuovo Utente poi sarà richiamato sempre lo stesso layout su un Pane.
I dati introdotti in questo Layout poi li gestirai come devi per creare effettivamente un nuovo utente.
Un motivo per creare oggetti da codice lo vedo invece per creare il riquadrino del nuovo utente che deve essere aggiunto alla ragnatela della lavagna.
Poi questo riquadrino lo salverai in qualche lista per poter riaccedere ai suoi dati quando selezionato.
 
Top