guarda se ti piace come funziona il form incriminato con questa modifica:
PUBLIC SUB campitemperature_LostFocus()
DIM i AS Integer
DIM addizionatore AS String
IF LAST.text = "" THEN
LAST.text = "-"
ELSE
FOR i = 1 TO Len(LAST.text)
SELECT CASE Mid(LAST.text, i, 1)
CASE "0" TO "9"
addizionatore = addizionatore & Mid(LAST.text, i, 1)
CASE "-"
addizionatore = addizionatore & Mid(LAST.text, i, 1)
CASE "."
addizionatore = addizionatore & ","
CASE ","
addizionatore = addizionatore & ","
END SELECT
NEXT
IF addizionatore = "" THEN
LAST.text = "-"
ELSE IF addizionatore = "," THEN
LAST.Text = "-"
ELSE
LAST.text = addizionatore
ENDIF
ENDIF
END
ps: se non usi un db ma solo settings per salvare i dati puoi solo salvare / visualizzare i dati deò mese corrente, non è + carino avere uno storico anche dei mesi/anni precedenti magari con la possibilità di confrontare i valori tramite grafici? (a me piace un sacco fare grafici!)
secondo me l' utilizzo del db è molto comodo
ho aggiunto nel modolo db due utili funzioni:
una per la ricerca delle temperature in base al giorno mese (in numero) e anno si effettua in questo :
dim temperatura as string[]
temperatura=cercaT(giorno,mese, anno)
minima=temperatura[0]
massima=temperatura[1]
ed una per calcolare la media mensile delle temperature inserendo il mese(in numeri) e l' anno
dim temperatura as float[]
temperatura=media(mese, anno)
mediaminima=temperatura[0]
mediamassima=temperatura[1]
inoltre automaticamente viene disegnato un grafico dei valori di temperatura
volendo si puo richiamare la funzione di disegno della temp mensile con:
picture = grafico.grafico(mese, anno, larghezza, altezza)
la quale ritorna un apicture contenente il grafico mensile.
queste funzioni possono essere utilizzate in qualsiasi parte del programma
e adesso non dirmi che non ti piace!
edit: eliminato allegato
per l' incasinamento non è un problema
i tuo codice è il principale
dei miei sorgenti basta che copi i seguenti file e li metti nella tua cartella
di progetto
fwait.form
fwait.class
grafico.module
datab.module
Ftemperaturefs.class
Ftemperaturefs.form
e poi riavvii gambas
se aggiungo altri file te lo dico
spetta un attimo fsurfing a metterti a scrivere il codice, mi è venuto in mente che forse sarebbe meglio nel DB aggiungere anche un campo non obbligatorio in cui tramite magari una ComboBox l'utente possa aggiungere l'eventuale tipo di precipitazione registrato in un certo giorno. Le scelte possibili potrebbero essere: - (nessuna precipitazione, opzione di default) Pioggia Pioviggine Temporale Temporale/Grandine Temporale/Neve Neve Neve/Pioggia Pioggia che gela Nebbia E' un problema?
non è un problema
modifiche al db apportate
modificato anche grafico pioggia e neve
se vuoi solo copiarti i file modificati ecco la lista di quelli cambiati
fwait.form
fwait.class
grafico.module
datab.module
Ftemperaturefs.class
Ftemperaturefs.form
precipitazioni.class
precipitazioni.form
le modifiche sono state apportade dalla tua versione dei sorgentoi
ps. ho provveduto a ridurre il file immagine
edit: tolto allegato
vi posto questa versione in cui ho implementato l' esportazione dei valori
vi è anche la possibilità di stamparli , ma come ben sapete funziona solo se si utilizzano le librerie QT per cui per ora è disabilitato
@stef
per integrare le nuove funzioni(esclusa stampa) devi copiare questi file che ho modificato nella tua cartella
datab.module
Ftemperaturefs.form
Ftemperaturefs.class
Fdestinazione.form
Fdestinazione.class
precipitazioni.form
precipitazioni.class
Suggerisco una piccola modifica al codice di scaricamento dell'immagine:
SHELL "wget \"" & sDownload & "\"" WAIT
L'aggiunta di WAIT alla fine del comando SHELL istruisce l'interprete ad attendere il termine del comando wget, senza dover aggiungere un WAIT 5.0 nella riga sottostante che:
1) in caso di assenza di problemi di connessione, costringe cmq ad un'attesa di 5 secondi;
2) in caso di connessione lenta o problemi del server, potrebbe essere insufficiente come attesa.
@cespolo
non mi funziona il tuo programma , quando premo carica immagine mi va in errore
'cancella le tracce dei file scaricati nella home per lasciare l'ambiente pulito SHELL "rm -f " & User.home & "/satellite_polare.jpg" SHELL "rm -f " & User.home & "/D2u.jpg"
perche usare la shell quando abbiamo il comodo :
KIll User.home & "/satellite_polare.jpg"
Kill User.home & "/D2u.jpg"
ho aggiunto la comaprazione di neve e pioggia
e piccole migliorie ai grafii
ho cambiato solamente questi file:
Fcerca.class
Fcerca.form
grafico.module
trovato...
per sapere il browser di default esiste il comando:
sudo update-alternatives --display x-www-browser
che restituisce un output del tipo
x-www-browser - lo status è auto.
il link attualmente punta a /usr/bin/epiphany-gecko
/usr/bin/firefox-3.0 - priorità 40
/usr/bin/epiphany-gecko - priorità 85
dove epiphany è il mio browser predefinito.
dopodiché puoi dare nel codice del tasto il comando
SHELL "browser_predefito tuo_sito"
e il gioco è fatto!!!
Ho scoperto un metodo ancora più semplice. Nel codice del button scrivi il seguente codice:
SHELL "x-www-browser http://tuo_sito.ORG"
ti apre la pagina con il browser di default.
attenzione: x-www-browser è da scrivere proprio così!browser non va sostituito con nulla...il comando esatto è proprio quello!
Ho scoperto un metodo ancora più semplice. Nel codice del button scrivi il seguente codice:
SHELL "x-www-browser http://tuo_sito.ORG"
ti apre la pagina con il browser di default.
Su Slackware il comando x-www-browser non esiste. Persistete nell'errore
di scrivere i programmi solo per Ubuntu. Non ci vuole molto a verificare
quali browser ci sono sul sistema dell'utente, o lasciare all'utente la possibilià
di decidere quale browser usare. Vi lascio il pezzo del codice dell'IDE di
Gambas2 sull'argomento browser (se lo usate date i "credits" a Benoit Minisini):
La parte finale della chiamata del link va modificata, poiché qui si riferisce ai link della guida in locale e non a indirizzi web.
Ciao.
PUBLIC FUNCTION CheckProgram(sProg AS String) AS Boolean
DIM iPos AS Integer
iPos = InStr(sProg, " ")
IF iPos THEN sProg = Left(sProg, iPos - 1)
SHELL "which " & sProg & " >/dev/null 2>&1" WAIT
IF Process.LastValue THEN RETURN TRUE
END
PUBLIC SUB OpenWebPage(sLink AS String)
DIM sExec AS String
DIM aTest AS String[]
DIM bCheck AS Boolean
DIM hFirefox AS Process
IF NOT Browser THEN
SELECT CASE Settings["/Browser"]
CASE "konqueror"
aTest = ["konqueror"]
CASE "epiphany"
aTest = ["epiphany"]
CASE "firefox"
aTest = ["firefox", "mozilla-firefox"]
CASE "seamonkey"
aTest = ["seamonkey"]
CASE ELSE
aTest = [Application.Env["BROWSER"]]
IF Application.Env["KDE_FULL_SESSION"] THEN
aTest.Add("konqueror")
ELSE IF Application.Env["GNOME_DESKTOP_SESSION_ID"] THEN
aTest.Add("epiphany")
aTest.Add("firefox")
ENDIF
END SELECT
aTest.Add("konqueror")
aTest.Add("mozilla-firefox")
aTest.Add("firefox")
aTest.Add("mozilla")
aTest.Add("seamonkey")
aTest.Add("opera")
FOR EACH sExec IN aTest
bCheck = NOT CheckProgram(sExec)
IF bCheck THEN BREAK
NEXT
IF NOT bCheck THEN RETURN
Browser = sExec
ENDIF
IF Left(sLink) = "/" THEN
sLink = "file://" & Replace(sLink, "?", "%3F")
ENDIF
IF Browser = "firefox" THEN
hFirefox = SHELL "firefox -remote \"openURL(" & sLink & ",new-window)\"" WAIT
IF hFirefox.Value = 2 THEN
SHELL Browser & " " & Chr$(34) & sLink & Chr$(34)
END IF
ELSE
SHELL Browser & " " & Chr$(34) & sLink & Chr$(34)
END IF
CATCH
Message.Error(Error.Text)
END
@ fsurfing
Per centrare l'immagine devi prendere
moviebox.left = (FMain.Widht /2) - (moviebox.width/2)
e
moviebox.top = (FMain.Height/2) - (moviebox.Height/2) + altezza_menù_vari
PS Provate ad usare lo strumento della scala anemometrica di Beaufort che trovate nel menu "Didattica", ho scoperto che non funziona! Ma in VB mi funzionava...sapete aiutarmi?
non è che non funziona ...sembra non funzionare correttamente a 1km/h indica devastazioni ecc. ecc.
si può risolvere semplicemente sostuendo OR con AND nei vari if condizionali
esempio:
IF velocita.Value >= 29 [u]AND[/u] velocita.Value <= 38 THEN
descrizione.Text = "Vento teso"
descrizionem.Text = "Onde moderate che assumono forma più allungata. si formano molte 'pecorelle'. (Possibilità di qualche spruzzo)."
Descrizionet.Text = "Arbusti e fogliame cominciano ad ondeggiare."
END IF
2) Perchè non fate in modo che a cadenze regolari (impostate dallo stesso utente) il programma "ricorda" all'utente se vuole fare una copia di backup del database? e magari si può fare in modo che spuntando una casella tale operazione sia fatta in automatico?
ci avevo pèensato anche io e prossimamente lo implemento
4) Mi dite che mi volete bene? o bisogno di stima!
neanche in punto di morte potrei dire una cosa simile!!:)
PPS Ho provato a creare il deb per Ubuntu e una volta installato ho scoperto che lo strumento di Ceskho mi dà un errore e non carica le immagini!
figurati se ceshko non ne combinava una delle sue!! :lol: :-P
@stef
ottima la barra degli strumenti , in effetti sarebbe carino il testo sotto l' icona , non si può semplicemente posizionare una label?
la barra di stato quale sarebbe?
PPS Ho provato a creare il deb per Ubuntu e una volta installato ho scoperto che lo strumento di Ceskho mi dà un errore e non carica le immagini!
ho provato anche io e succede la stessa cosa anche a me
la causa è il famigerato indirizzamento di file del tipo:
imgFile = Application.Path &/ "icons per apps/file.png"
imgMondo = Application.Path &/ "icons per apps/world.png"
imgPc = Application.Path &/ "icons per apps/pc.png"
che come ho gia detto un sacco di volte in questo forum
funziona solamente su programmi che non vengono distribuiti sotto forma di binari
se un programma deve essere distribuito si dovrà indicare per le immagini:
imgFile = "icons per apps/file.png"
imgMondo = "icons per apps/world.png"
imgPc = "icons per apps/pc.png"
mentre per i file di testo si deve prima copiarli in una cartella e poi linkarli(questo servirà a te stef quando scriverai la guida)
@ceshko ti meriti una megabacchettata sulle dita! questa cosa te l' avevo già detta tempo fa! :hammer:
Ciao, io per la grafica sono negato, quello che sono riuscito a fare è quello che vedi in allegato...non mi offendo se dici che schifo... :-)
Riguardo l'apertura del browser, il codice postato da Giulio ha una variabile non definita: Browser. Prova a dargli un'occhio...
PUBLIC SUB OpenWebPage(sLink AS String)
DIM sExec AS String
DIM aTest AS String[]
DIM bCheck AS Boolean
DIM hFirefox AS Process
IF NOT Browser THEN
SELECT CASE Settings["/Browser"]
CASE "konqueror"
aTest = ["konqueror"]
CASE "epiphany"
aTest = ["epiphany"]
CASE "firefox"
aTest = ["firefox", "mozilla-firefox"]
CASE "seamonkey"
aTest = ["seamonkey"]
CASE ELSE
aTest = [Application.Env["BROWSER"]]
IF Application.Env["KDE_FULL_SESSION"] THEN
aTest.Add("konqueror")
ELSE IF Application.Env["GNOME_DESKTOP_SESSION_ID"] THEN
aTest.Add("epiphany")
aTest.Add("firefox")
ENDIF
END SELECT
aTest.Add("konqueror")
aTest.Add("mozilla-firefox")
aTest.Add("firefox")
aTest.Add("mozilla")
aTest.Add("seamonkey")
aTest.Add("opera")
FOR EACH sExec IN aTest
bCheck = NOT CheckProgram(sExec)
IF bCheck THEN BREAK
NEXT
IF NOT bCheck THEN RETURN
Browser = sExec
ENDIF
IF Left(sLink) = "/" THEN
sLink = "http://" & Replace(sLink, "?", "%3F")
ENDIF
IF Browser = "firefox" THEN
hFirefox = SHELL "firefox -remote " openURL(" & sLink & ", NEW - window)"" WAIT
IF hFirefox.Value = 2 THEN
SHELL Browser & " " & Chr$(34) & sLink & Chr$(34)
END IF
ELSE
SHELL Browser & " " & Chr$(34) & sLink & Chr$(34)
END IF
CATCH
Message.Error(Error.Text)
END
EDIT: nei sorgenti che allego ho implementato anche delle funzioni della Guida, a puro titolo di prova per ora...ditemi cosa ne pensate e se è tutto ok...bisognerebbe cercare di rendere espandibile la casella di scelta dell'argomento, ma - mi vergogno a dirlo - non so che controllo utilizzare!
è vero funziona bene comunque .. probabilmente perche hai usato l' istruzione file.load che permette di estrarre i testi direttamente dall' eseguibile . buono a sapersi
ho rinunciato al discorso del browser... devo dire che beintot scrive codice peggio di me! non si capisce nulla (tranne forse che quel codice riesce a lanciare solamente firefox e non altri browser)
ps se modifichi qualcosa cambia la routine di autobk al fondo di form_open in fmain con questo codice:
'routine di auto bakup
IF Settings["usr/autobk", 0] = 1 THEN
IF Settings["prg/navvio", 0] >= Settings["usr/nbk", 0] THEN
datab.salvataggio(Settings["usr/bkdirauto", User.Home])
Settings["usr/nbk"] = 0
Settings.Save
ENDIF
Settings["prg/navvio"] = Settings["prg/navvio", 0] + 1
settings.Save
ENDIF
Ciao, per il browser, se usassimo la soluzione inzialmente trovata da Ceskho e mai utilizzata (messaggio #231):
trovato...
per sapere il browser di default esiste il comando:
sudo update-alternatives --display x-www-browser
che restituisce un output del tipo
x-www-browser - lo status è auto.
il link attualmente punta a /usr/bin/epiphany-gecko
/usr/bin/firefox-3.0 - priorità 40
/usr/bin/epiphany-gecko - priorità 85
dove epiphany è il mio browser predefinito.
dopodiché puoi dare nel codice del tasto il comando
SHELL "browser_predefito tuo_sito"
Oppure potremmo lasciare la soluzione già adottata:
SHELL "x-www-browser http://tuo_sito.ORG"
e in caso di errore, intercettarlo con TRY, avvisare l'utente del problema e far apparire la finestra Preferenze così che possa specificare il browser che desidera usare...
Che ne pensate?
1) in automatico probabilmente parte in italiano , si puo modificare costituendo la procedura main del modulo avvio con:
PUBLIC FUNCTION Main() AS Boolean
DIM lang AS String
IF NOT Settings["usr/lingua"] THEN 'controlla se non esiste una preferenza per la lingua
IF System.Language = "it_IT" & "." & System.Charset THEN
lang = system.Language ' nessuna preferenza, sistema in italiano imposto lingua italiana
ELSE
System.Language = "en_US" & "." & System.Charset ' nessuna preferenza, sistema non italiano imposto lingua inglese
ENDIF
ELSE
lang = Settings["usr/lingua"]
ENDIF
System.Language = lang
FMain.Load
FMain.Show
END
2) non saprei faccio ricerche
3)speravo non te ne accorgessi!
non si presenta sempre , non ho ancora capito dove sia il problema :)
Fsurfing ce l'ho fatta con la combobox!!
Dopo ore di smanettamenti, per puro caso, ci sono riuscito. Mi sa che è un bug del controllo... Il codice era così:
' riempe il combobox2 con le lingue utilizzabili
ComboBox2.ReadOnly = FALSE
ComboBox2.Add("it_IT" & "." & System.Charset, 0)
ComboBox2.Add("en_US" & "." & System.Charset, 1)
ComboBox2.ReadOnly = TRUE
Io, per caso, ho aggiunto questa riga che potete vedere (disperato volevo che comparisse almeno qualche cosa nella combobox e che non restasse vuota):
' riempe il combobox2 con le lingue utilizzabili
ComboBox2.ReadOnly = FALSE
ComboBox2.Add("it_IT" & "." & System.Charset, 0)
ComboBox2.Add("en_US" & "." & System.Charset, 1)
ComboBox2.Text = "Scegli" 'The solution ;-)))
ComboBox2.ReadOnly = TRUE
ho avviato MeteoMachine, aperto la finestra e...sorpresa! Ora compare IT se è impostato l'italiano, EN se è impostato l'inglese!!!
Mi sa comunque che è un bug del controllo e, forse, andrebbe segnalato.
Allego i nuovi sorgenti, aggiornatevi per favore!
il file di configurazione si trova in
/home/Stefano/.config/gambas/meteomachinelinux.conf
provo a scaricare il tuo deb e lo installo
ho installato il deb presente nel sito sulla macchina virtuale con ubuntu e mint e funziona benissimo la visualizzazione della lingua nella combobox, chissa poi perchè nel mio pc invece no!
teniamo pure la 3.15
ricordati di correggere così la funzione navvii in fpreferenze:
PUBLIC SUB navvii_Change()
settings["usr/nbk"] = navvii.Value
settings["prg/navvio"] = 0
settings.Save
END
@stef
piccolo bug:al primo avvio della guida il programma va in crash
correggi così:
PUBLIC SUB Form_Open()
DIM linguaguidavar AS Integer
linguaguidavar = settings["impostazioni/linguaguida", 0]
combolingua.Index = linguaguidavar 'settings["impostazioni/linguaguida"] = combolingua.Index
quando inserisci un nuovo "tag" di settings è molto importante provare il programma con un file di config pulito per evitare crash
io ho corretto il bug inserendo come lingua di default nel caso non sia presente il relativo tag nel config italiano.
Ciao, il problema che segnalato ieri al post precedente è dovuto a questa parte di codice del form precipitazioni:
PUBLIC SUB TextBox1_LostFocus()
IF TextBox1.Text = "" THEN
TextBox1.Text = "-"
END IF
'IF TextBox1.Text <> 0 AND TextBox1.Text <> "-" THEN
'TextBox2.text = 0
'ENDIF
END
PUBLIC SUB TextBox2_LostFocus()
IF TextBox2.Text = "" THEN
TextBox2.Text = "-"
END IF
'IF TextBox2.Text <> 0 AND TextBox2.Text <> "-" THEN
'TextBox1.Text = 0
'ENDIF
END
Se commento quei due IF, il problema non si presenta più.
Ma che cosa serviva questo ciclo IF, fsurfing? E cosa comporta toglierlo? Io ho fatto delle prove e sembra tutto ok...boh
IF TextBox2.Text <> 0 AND TextBox2.Text <> "-" THEN
TextBox1.Text = 0
ENDIF
Fammi sapere!
Ciao
questo codice per il pulsante salva in form precipitazioni dovrebbe risolvere tutti i problemi
PUBLIC SUB Button1_Click()
IF TextBox1.Text <> "-" AND TextBox1.Text <> 0 AND ComboBox1.Text = ("Nessuna") THEN
Message.Error(("Selezionare un tipo di precipitazione!"))
ELSE IF TextBox2.Text <> "-" AND TextBox2.Text <> 0 AND ComboBox1.Text = ("Nessuna") THEN
Message.Error(("Selezionare un tipo di precipitazione!"))
ELSE
datab.salvaP(DateChooser1.Day, DateChooser1.Month, DateChooser1.Year, TextBox1.text, TextBox2.Text, ComboBox1.Text)
WAIT
redraw
ENDIF
redraw
END
questo invece per il form temperature fs
PUBLIC SUB Button1_Click()
IF TextBox1.Text <> "-" AND TextBox2.Text <> "-" THEN
IF CFloat(TextBox1.Text) > CFloat(TextBox2.text) THEN
Message.Error(("Temperatura minima maggiore di quella massima"), "ok")
ELSE IF TextBox1.Text = "-" OR TextBox2.Text = "-" THEN
datab.salvaT(DateChooser1.Day, DateChooser1.Month, DateChooser1.Year, TextBox1.text, TextBox2.text, ComboBox1.Text)
WAIT
redraw
ELSE
datab.salvaT(DateChooser1.Day, DateChooser1.Month, DateChooser1.Year, TextBox1.text, TextBox2.text, ComboBox1.Text)
WAIT
redraw
ENDIF
ENDIF
END
in form precipitazioni e temperature il codice per GridView1_Click() deve essere modificato così altrimenti cliccando sul primno record(giorno) va in crash
PUBLIC SUB GridView1_Click()
IF Val(GridView1.Current.Text) <> ""
IF GridView1.Column = 0 THEN
DateChooser1.day = Val(GridView1.Current.Text)
ENDIF
ENDIF
END
altro bug trovato e corretto:
sia in form precipitazioni e temperature il codice per textbox1_gotfocus e textbox2_gotfocus deve essere :
PUBLIC SUB TextBox1_GotFocus()
TextBox1.SelectAll
END
PUBLIC SUB TextBox2_GotFocus()
TextBox2.SelectAll
END
scrivo le correzioni dei codici così se stef sta andando avanti in altre parti puo correggere direttamente la sua versione, in caso contrario lascio anche i nuovi sorgenti
Ciao fsurfing, penso sia meglio lasciare così com'è adesso:
PUBLIC SUB TextBox1_GotFocus()
TextBox1.SelectAll
TextBox1.Text = ""
END
perché così si vuota anche il campo di testo...
Ciao fsurfing, ottimo lavoro con la checkbox!
Ho trovato un buon compromesso per quel problema del trattino, e penso di averlo risolto banalmente così:
PUBLIC SUB TextBox1_GotFocus()
IF TextBox1.Text = "-" THEN
TextBox1.SelectAll
TextBox1.Text = ""
ELSE
TextBox1.SelectAll
END IF
END
Ho poi modificato delle cose qua e là perché man mano che inserisco dati trovo sempre qualcosina da ottimizzare...
Ah, ho anche trovato un bug! Il grafico della neve non mostra la scala né a destra né a sinistra!
Allego i nuovi sorgneti, scaricali per le modifiche!
Ciao!
ho aggiunto questa istruzione sul pulsante salva in fprecipitazioni e ftemperaturefs per evitare di inserire dei valori nulli nel database ,che generano un crash del programma.
IF TextBox1.Text = "" THEN TextBox1.Text = "-" 'controllo che i text box non abbiano valore nullo (manderebbe in crash il programma
IF TextBox2.Text = "" THEN TextBox2.Text = "-"