Italian (RISOLTO) B4J - LIBRARY MIACalendar (in fase di sviluppo) (Ex post TableView)

ivanomonti

Well-Known Member
Licensed User
Longtime User
Ragazzi prendetemi per pazzo ma non volevo andare senza un piccolo visualizzatore degli appuntamenti, quindi il mio ad ora e troppo macchinoso e devo aggiustarlo per rendelo più snello e affidabile, anche se fino ad ora non ha mai sbagliato, ma in termini di scrittura l'è un burdell.

Jagend lo trovo simpatico ma datato e sembra che l'autore abbia preso le mie richieste...

quindi che faccio, mi invento qualcosa,,, e si non posso farne a meno,,, uso una tableview, la strasformo, fatto e perfetto e veloce,,, ma devo ancora dargli forma:

1) togliere il focus he mi terrorizza
2) centrare quel testo che è una label non mi prende una beata fava

Risultato e carino, divertente ma bloccato al momento per 100 appuntamenti al giorno (si può incrementare piacxevolmente), manca l'ordine per ora che faccio via query e poi inserisco i valori nelle caselle a cascata, quando e finito lascio il sorgente a disposizione. sembra una spazialata da giostrai hahahaha

2020-05-03_184115.jpg


2020-05-03_184057.jpg
 

LucaMs

Expert
Licensed User
Longtime User
Se poi volessi creare una libreria, mi spiegate come si procede, grazie per la vostrapazienza.
Per creare una libreria partendo da una classe non devi fare altro che compilarla come libreria.
Ogni parte del tuo progetto che non debba fare parte della libreria (intendo dire altre classi, moduli di codice, moduli di servizio (in B4A) dev'essere contrassegnata dalla direttiva:
B4X:
#ExcludeFromLibrary: True

Fatto questo, compili come libreria:
1588631743771.png

Basta premere Alt+5.

Il problema nasce quando la tua libreria debba usare file di risorse (ad esempio file immagine), ovvero debba contenere già in partenza questi file.
Per B4A conosco il metodo, per B4J no. Dovrei cercare ma ora proprio no (inoltre penso di non averlo mai letto).
 

LucaMs

Expert
Licensed User
Longtime User
Oh, comunque un modo per "risolvere" la faccenda "incorporamento file di risorsa" nella tua libreria ci sarebbe: anziché creare una libreria jar per B4J, crei una b4xlib.

Questa ha il vantaggio, appunto, di poter incorporare facilmente questi file, oltre a poter essere utilizzata su più piattaforme (b4a, b4j, b4i e forse pure b4r), ovviamente se la sviluppi in modo che possa essere fatto. Ha però lo svantaggio che il codice sorgente è accessibile.
 

ivanomonti

Well-Known Member
Licensed User
Longtime User
@LucaMs l'immagine la passi ;)

B4X:
    mclassMIACalendar.SetRow2("Massaggio Ayurveda 1",12,fx.Colors.White,5,Array As String("Ivano Monti","Via del commercio, 2","20020","solaro","MI","+393959824007","info@ivanomonti.com","www.ivanomonti.com"),fx.LoadImage(File.DirAssets,"User-Male.png"))
    mclassMIACalendar.SetRow2("Massaggio Ayurveda 2",12,fx.Colors.White,5,Array As String("Ivano Monti","Via del commercio, 2","20020","solaro","MI","+393959824007","info@ivanomonti.com","www.ivanomonti.com"),fx.LoadImage(File.DirAssets,"User-Male.png"))
    mclassMIACalendar.SetRow2("Massaggio Ayurveda 3",12,fx.Colors.White,5,Array As String("Ivano Monti","Via del commercio, 2","20020","solaro","MI","+393959824007","info@ivanomonti.com","www.ivanomonti.com"),fx.LoadImage(File.DirAssets,"User-Male.png"))

stasera provo a fare la libreria ho usato tutto B4XView
 

LucaMs

Expert
Licensed User
Longtime User

ivanomonti

Well-Known Member
Licensed User
Longtime User
@LucaMs sarai il primo ad avere la mia libreria hahah almeno mi darai la soddisfazione di dire... figa hahahaha, dopo tutto mi hai spinto fino qui... credo che domani possa cominciare a buttare fuori la beta

2020-05-05_220704.jpg


2020-05-05_220637.jpg
 

LucaMs

Expert
Licensed User
Longtime User
1 - non te fa' i tatuaggi, che fanno schifo 😄
2 - guardando le immagini mi è venuto in mente (vagamente) un ennesimo modo per perdere tempo: creare delle View "zoommabili"?
A parte le immagini, col touch-pinch-chunck-frign o come se chiama 😄, non mi pare di aver mai visto View così (ah si, le webview, ma anche in quelle si tratta di immagini ingrandite/rimpicciolite). Una "table view" o una view come la tua (che in fondo sempre una table view è) magari potrebbe avere questa possibilità.
 

ivanomonti

Well-Known Member
Licensed User
Longtime User
1 - non te fa' i tatuaggi, che fanno schifo 😄
2 - guardando le immagini mi è venuto in mente (vagamente) un ennesimo modo per perdere tempo: creare delle View "zoommabili"?
A parte le immagini, col touch-pinch-chunck-frign o come se chiama 😄, non mi pare di aver mai visto View così (ah si, le webview, ma anche in quelle si tratta di immagini ingrandite/rimpicciolite). Una "table view" o una view come la tua (che in fondo sempre una table view è) magari potrebbe avere questa possibilità.
non sto usando una tableview che ho scartato visto ii suoi limiti, ma ho proprio rifatto l'oggetto da intero usando oggetti derivanti da b4j esattamente come si disegna un bottone e ne si crea tutti gli eventi, ovvio che eredito dal object interessato. e già operativa e non sbaglia, mancano alcuni aspetti per essere presentatacome libreria, il fatto che si autodimensiona e per adattarla a tutte le esigenze ma in realtà mi serve per contenere x view nella stessa posizione ridimenionandole in larghezza come fa google calendar, pare ovvio che anche il testo deve ridimensionarsi altrimenti sarebbe un bordello
 

LucaMs

Expert
Licensed User
Longtime User
Non hai (abbiamo) pensato ad una soluzione più semplice:

sett.png


Modelli Excel, cercati con parola chiave: "Settimanale".

Se ne sceglie il più simile a quanto ti serve, si modifica e si utilizza in un form di B4J (potendo aggiungere a questo, ovviamente, menu, tasti e tutto quello che vuoi).

Non so quali librerie consentano di aprire un foglio Excel in B4J ma sicuramente ce ne saranno.
 

udg

Expert
Licensed User
Longtime User
Non so quali librerie consentano di aprire un foglio Excel in B4J ma sicuramente ce ne saranno.
jPOI .. basta il nome per capirlo, no? ehehe
 

ivanomonti

Well-Known Member
Licensed User
Longtime User
Lo so ma non capisco perchè non si possa fare qualcosa di nativo che funzioni, ma grazie per il suggeimento
 

LucaMs

Expert
Licensed User
Longtime User
Lo so ma non capisco perchè non si possa fare qualcosa di nativo che funzioni, ma grazie per il suggeimento
Beh, il motivo principale è avere qualcosa di già pronto e quindi andare avanti più velocemente.
Inoltre, è roba già testata.
 

ivanomonti

Well-Known Member
Licensed User
Longtime User
Sono arrivato al primo e reale beta test della mia app, grafica mi piace e calendario funziona bene, anche portandolo ai limiti nessun blocco,,, ma ho da aggiungere nuove funzioni come quella che sto discutendo con @LucaMs che ringrazio per avermi letto nel post in B4J

Questa come consigliato anche dallo stesso @LucaMs è più un agenda delle varie cerchie (lavoro, famiglia ecc ecc) nella quale invece di essere tabellare è grafica, multi utenza e multi gruppo. Crea archivi per ogni item e crea appuntamenti con gli tessi di ogni cerchia e non altri, suddivisione dei gruppi delle singole cerchie e calendari eventi con tutti quelli della cerchia e gruppi. Drang&Drop dei documenti e grafici vari (in elaborazione) e sempre in lavorazione voglio inserire il modulo chat con
Telegram (visto che sembra esistere una libreria... ma saranno moduli aggiuntivi (additional modules) alla base master (ciò questa)

Metto alcuni screen e mi farebbe piacere sentire le vostre critiche sull'aspetto al momento, ma da tutti e non dai soliti 3/4 utenti di questa lista :)

2020-05-08_161758.png


2020-05-08_161650.png
 

Attachments

  • 2020-05-08_162140.png
    2020-05-08_162140.png
    47 KB · Views: 134
  • 2020-05-08_162116.png
    2020-05-08_162116.png
    44.2 KB · Views: 131
  • 2020-05-08_162051.png
    2020-05-08_162051.png
    42.4 KB · Views: 126
  • 2020-05-08_161933.png
    2020-05-08_161933.png
    36.7 KB · Views: 123
  • 2020-05-08_161849.png
    2020-05-08_161849.png
    44.3 KB · Views: 121
  • 2020-05-08_161912.png
    2020-05-08_161912.png
    42.7 KB · Views: 122
  • 2020-05-08_162032.png
    2020-05-08_162032.png
    40.4 KB · Views: 123
  • 2020-05-08_161826.png
    2020-05-08_161826.png
    44.5 KB · Views: 122
  • 2020-05-08_161737.png
    2020-05-08_161737.png
    24.9 KB · Views: 121
  • 2020-05-08_161717.png
    2020-05-08_161717.png
    34.8 KB · Views: 131

ivanomonti

Well-Known Member
Licensed User
Longtime User
Personalmente non amo lo stile dark ma cmq mi piacciono quelle immagini.
io le adoro ma metterò delle selezione css per dare più vartianti, anche se fino ad ora non ho trovato css validi da poter inserire nel progetto, grazie per il tuo giudizio... ricordati il mio drag&drop :p
 
Last edited:

LucaMs

Expert
Licensed User
Longtime User
ricordati il mio drag&drop
Purtroppo, malgrado i miei 2kb di brain ram, lo ricordo.
In quel caso la documentazione è molto scarsa e fatta male!!! Non si capisce che tipo di parametri siano necessari per un certo metodo.
Come terzo parametro di SetDragModeAndData avevo provato a passare Sender oppure il Button btnMoveMe - che poi "sono" la stessa cosa (essendo oggetti, non sono esattamente la stessa cosa ma sono comunque riferimenti allo stesso oggetto).
Il buon B4J, se ricordo bene, mi ha risposto qualcosa circa il fatto che il parametro debba essere composto da bytes.
L'help contestuale di quel metodo indica:
1588992045704.png

Il che non mi sembra affatto chiarissimo; il parametro di cui ho appena scritto è il terzo, DataObjects() As Object, ma anche degli altri due... il primo non viene nemmeno citato! [NOTA: ho intuito cosa dovessi usare grazie al nome di questo parametro; ecco perché ripeto spesso di dare nomi significativi alle variabili]
Il secondo DataIDs() As String, se capisco bene, riguarda un eventuale dragging tra il sw che stai sviluppando e file esterni a questo - come ad esempio trascinare un file di testo da Windows al tuo sw, ma se devi effettuare un dragging completamente interno al tuo sw, come nel tuo caso, muovere un Pane da un punto ad un altro della tua GUI, puoi usare una "stringa arbitraria" - ovvero un testo qualunque. Piccolo particolare: e perché sarebbe un Array di stringhe, anziché una stringa? (stessa cosa per DataObjects).

Ho cercato esempi e praticamente non ce ne sono, non esattamente per la b4xlib di Erel. Ne ho trovato uno in cui come terzo parametro viene passato un oggetto di tipo Image (?????????????), quindi nel mio tentativo empirico ho passato btnMoveMe.Snapshot e la cosa ha funzionato. Questo però comporta il problema che non è possibile risalire, nelle varie routine-evento, a btnMoveMe come oggetto trascinato!

Ci sarebbe, forse, un modo per aggirare la cosa, ma per niente "pulito", "corretto", ovvero usare una variabile a livello globale (di modulo) che conservi un riferimento al Pane attualmente in fase di movimento, ma preferisco vedere se Erel spiegherà l'arcano, in quel thread.
 
Last edited:

ivanomonti

Well-Known Member
Licensed User
Longtime User
Ciao a tutti, questa mattina mi dedico a stressare la classe e ragazzi sono sbalordito in meno di 2 secondi 500 appuntamenti inseriti nel calendario e sistemati oltre che ridimensionati... devo ammettere che non me lo aspettavo.

io ho un vecchio Core i5 con 4 GB di ram nulla di che con un clock da 2400 mhz della Lenovo e mi sbalordisce

2020-05-09_100628.png


2020-05-09_101518.png

test con 1500 eventi inseriti

B4X:
Sub Button_random_Click
  
    Dim Args1 As List
    Args1.Initialize
    Args1.Add(TextField1.Text)
    Args1.Add(TextField2.Text)
    Dim img As Image = fx.LoadImage(File.DirAssets,"User-Male.png")
    Dim color As String = "#EA4B4D"
  
    For i =0 To 500
    Dim hour As Int = Rnd(5,22)
    Dim day As String = Rnd(4,11)
    If day.Length = 1 Then day = "0"&day
        MIAWeek.Add(TextField1.Text & " " & i,hour ,MIAWeek.getDayWeek(DateTime.date(DateTime.DateParse((day&"/05/2020"))),"dd/MM/yyyy"), 5, Args1, img, color)
    Next
  
End Sub
 
Last edited:
Top