Gambas-it

Archivi (sola lettura) => Programmazione (Gambas 2) => Topic aperto da: koko - 02 Giugno 2008, 13:41:25

Titolo: SpinBox -> FloatSpinbox ?
Inserito da: koko - 02 Giugno 2008, 13:41:25
E' possibile fare in modo che gli spinbox visualizzino valori float?
Da quel che ho capito possono gestire solo interi, ma mi chiedevo se esistesse un modo per scavalcare questa limitazione, infondo potrebbe essere un problema abbastanza comune!
Titolo: Re: SpinBox -> FloatSpinbox ?
Inserito da: fsurfing - 02 Giugno 2008, 14:31:04
purtroppo non è possibile.
Titolo: Re: SpinBox -> FloatSpinbox ?
Inserito da: giulio - 02 Giugno 2008, 18:28:10
quasi impossibile :-)
basta un po' di fantasia :-)

allego un esempio di float-spin-box che va da 0.01
a 10. nell'esempio i valori dello spinbox si possono modificare
solo con freccia su/giù, ma con qualche modifica potrai fare
un float spinbox completo. ciao.
Titolo: Re: SpinBox -> FloatSpinbox ?
Inserito da: koko - 02 Giugno 2008, 23:59:25
Eheheh, carino, grazie!
Una piccola modifica sull' evento click della textbox per dare il focus al reale spinbox ed è quasi indistinguibile dall' originale (mi riferisco principalmente alla rotellina del mouse) ... si può fare :)

Non sono una cima nella gestione delle classi, come si potrebbe creare una classe che accorpasse i due elementi in un unico oggetto chiamato (uno a caso) floatspinbox?

PS:
Il progetto al quale sto lavorando e che trarrebbe vantaggio dalla floatspinbox è  un' interfaccia completa per mplayer (http://img220.imageshack.us/img220/4725/kokoplayerxt1.png)
Titolo: Re: SpinBox -> FloatSpinbox ?
Inserito da: giulio - 03 Giugno 2008, 09:48:05
Bella l'interfaccia per mplayer. Quando la rilasci al pubblico faccelo sapere. Per quanto riguarda accorpare i due oggetti la cosa più semplice che mi viene in mente è creare un modulo, per esempio FloatSpinBox, all'interno del quale dichiarare le variabili e le funzioni che t'interessano nella gestione del FloatSpinBox. In questo modo avresti, per esempio, la variabile FlatSpinbox.Value o FloatSpinBox.MinValue o la funzione FloatSpinbox.Focus. Tutte queste cose naturalmente gestirebbero i reali textbox e spinbox, però una volta creato il modulo la gestione del floatspinBox virtuale sarebbe più comodo. Insomma dipende dai tuoi gusti :-)
Titolo: Re: SpinBox -> FloatSpinbox ?
Inserito da: koko - 03 Giugno 2008, 12:53:35
E modulo sia, mi metto al lavoro,
la cosa che devo studiare per bene è la gestione/generazione degli eventi, speriamo bene ;)
Titolo: Re: SpinBox -> FloatSpinbox ?
Inserito da: koko - 03 Giugno 2008, 18:37:59
La semplicità e l'intuitività di gambas sono quasi disarmanti.

Credo di aver finito con le funzioni delle quali avevo bisogno, ho implementato un Container che contiene un ValueBox ed un Button.
L'unico evento esportato (è corretto dire esportato?) è il Change(),
mentre le proprietà sono:

FStep AS Variant (passo decimale di incremento/decremento)
FMin AS Variant  (valore minimo permesso)
FMax AS Variant  (valore massimo permesso)
DecimalSeparator (separatore decimale a scelta)
RepeatDelayms (lentezza con la quale scorrono i numeri a mouse premuto)
X,Y,W,H (posizioni e dimensioni)
Text (Valore stringa del floatspinbox con separatore = DecimalSeparator)

I metodi:
Move (analogo della funzione di gambas)

I Problemi:

1)
Per semplicità, ho incorporato i due controlli in un pannello ad arrangment orizzontale, questo fa sì che FloatSpinBox appartenga alla famiglia dei containers.
A me (momentaneamente) non crea problemi.
-
2)
Ho scelto di adottare un pulsante generico per simulare lo spin button, dato che con lo spinbox "segato", non mi era possibile risalire alle dimensioni della parte "bottone" vera e propria (dimensioni che possono variare al variare del toolkit o del tema in uso).
Questo ha comportato la necessità di creare una piccola immagine raffigurante le freccette sù/giù dello spinbutton da associare al bottoncino, nella classe ciò viene realizzato con un:
MySpinButton.picture = Picture["UpDown.png"]
Dove UpDown.png è un'immagine caricata appositamente nell' ide dall' utente.

E' possibile in qualche modo incorporare l'immagine nella classe?
-
3)
Ho usato una classe, e non un metodo, dato che con il metodo non mi era possibile generare degli eventi tramite RAISE ("Methods cannot RAISE events" è il messaggio d'errore o qualcosa di simile)

Vi allego la classe ed un esempio del suo funzionamento, il controllo reagisce agli eventi di mousedown.mouseup,mousewheel.
Magari qualcuno vuol perderci sù del tempo per renderla migliore,più completa, integrata etc.

Saluti!
Titolo: Re: SpinBox -> FloatSpinbox ?
Inserito da: giulio - 03 Giugno 2008, 20:02:55
Citazione

Questo ha comportato la necessità di creare una piccola immagine raffigurante le freccette sù/giù dello spinbutton da associare al bottoncino, nella classe ciò viene realizzato con un:
MySpinButton.picture = Picture["UpDown.png"]
Dove UpDown.png è un'immagine caricata appositamente nell' ide dall' utente.

E' possibile in qualche modo incorporare l'immagine nella classe?


Non capisco "incorporare nella classe" (io sono un puro hobbista e manco tanto bravo). se hai creato l'immagine "UpDown.png", puoi usarla direttamente nel progetto. per esempio crei una sottocartella "immagini" nella cartella del tuo progetto. nella sottocartella "immagini" copi "UpDown.png". dopodiché il codice diventa:

MySpinButton.picture = Picture["immagini/UpDown.png"]

Quando creerai l'eseguibile la cartella "immagini" verrà inglobata.
Titolo: Re: SpinBox -> FloatSpinbox ?
Inserito da: koko - 03 Giugno 2008, 20:13:39
Infatti io la creo nel progetto, ma volevo rendere la classe esportabile per completezza, ed allo stato attuale delle cose, per utilizzare questa classe è necessario appunto includere manualmente l'immagine updown.png nel progetto, altrimenti oviamente da errore.
Probabilmente occorre proprio creare un componente.
Titolo: Re: SpinBox -> FloatSpinbox ?
Inserito da: fsurfing - 03 Giugno 2008, 20:50:45
puoi sempre fare in modo da disegnare l' immagine delle freccette tramite il codice e utilizzre la picture risultante nel spin box.

faccio una prova e ti posto il codice
Titolo: Re: SpinBox -> FloatSpinbox ?
Inserito da: fsurfing - 03 Giugno 2008, 21:17:24
eccolo qui a me funziona bene

Codice: [Seleziona]


DIM hpic_up AS Picture
DIM coordinate AS Integer[]

hpic_up = NEW Picture(11, 13, TRUE)

  Draw.Begin(hpic_up)

    Draw.FillStyle = 1
    draw.ForeColor = Color.Black
    coordinate = [6, 1, 1, 5, 11, 5]
    Draw.Polygon(coordinate)
    coordinate = [1, 7, 11, 7, 6, 12]
    Draw.Polygon(coordinate)
   
   
  Draw.End
  myspinbutton.picture = hpic_up
 
 
Titolo: Re: SpinBox -> FloatSpinbox ?
Inserito da: fsurfing - 03 Giugno 2008, 21:45:36
con queste coordinate è più simmetrica

Codice: [Seleziona]
 
coordinate = [5, 0, 0, 5, 10, 5]
    Draw.Polygon(coordinate)
    coordinate = [0, 7, 10, 7, 5, 12]
     Draw.Polygon(coordinate)
Titolo: Re: SpinBox -> FloatSpinbox ?
Inserito da: koko - 03 Giugno 2008, 22:07:14
Grazie!
A me il triangolo superiore appariva "schiacciato", forse dipende dal tema qt.
L'ho rifatto così e sembrano più uniformi:

Codice: [Seleziona]

  Draw.Begin(hpic_up)
    Draw.FillStyle = 1
    draw.ForeColor = Color.Medium(Color.black, Color.ButtonBackground)
    coordinate = [1, 4, 9, 4, 5, 0]
    Draw.Polygon(coordinate)
    coordinate = [1, 8, 9, 8, 5, 12]
    Draw.Polygon(coordinate)
  Draw.End


Il color.medium serve a simulare un minimo di antialias in modo molto bonario :)

--Edit--
Ci siamo sovrapposti con i post, ovviamente mi riferivo alle prime coordinate.
Le mie le ho ricavate ricopiandole dall' immagine png (l'editor di immagini di gambas è una comodità...)
Inoltre ho aumentato la larghezza del bottoncino di un pixel per far sì che fosse centrata, direi che può passare ^^
Titolo: Re: SpinBox -> FloatSpinbox ?
Inserito da: fsurfing - 03 Giugno 2008, 22:16:47
spero che quando finirai la pubblicherai la gui per mplayer,
mi ci sono cimentato  anche io tempo fa per testare l' embledder.
sono curioso di vedere il risultato finale
Titolo: Re: SpinBox -> FloatSpinbox ?
Inserito da: fsurfing - 03 Giugno 2008, 22:19:13
Citazione
Le mie le ho ricavate ricopiandole dall' immagine png (l'editor di immagini di gambas è una comodità...) Inoltre ho aumentato la larghezza del bottoncino di un pixel per far sì che fosse centrata, direi che può passare ^^



direi proprio che può andare... a me piace.
Titolo: Re: SpinBox -> FloatSpinbox ?
Inserito da: koko - 03 Giugno 2008, 22:35:28
(Lungo Offtopic)

Sono reduce da una (bruttissima) esperienza con lazarus, brutta perchè ho voluto fare tutto e subito, e perchè ho perso moltissimo tempo dietro a bug dell' ide che non immaginavo nemmeno e che credevo dipendessero dal mio codice.
Alla fine il programma finale funzionava ed era discretamente stabile, ma il codice era davvero uno schifo.

Stavolta mi son messo con il pensiero di pianificare prima il tutto e sto spingendo molto sull' astrazione, il risultato che ho in mente è una gui che sia completa, e credo saprai che le funzioni che offre mplayer non sono poche.
Per adesso ho implementato la configurazione completa dei driver audio e video (ho tralasciato quelli davvero vetusti e quelli che lavorano su framebuffer grezzo o in console, inutili dato che gambas richiede X)
Ho sviluppato una classe per il drag'n drop degli oggetti perchè  i filtri rappresentano anelli mobili di una catena, la mia speranza è di rendere il tutto intuitivo, ma al contempo non limitante.
Altro problema abbastanza serio è quello di salvare la marea di impostazioni configurabili dall' utente in modo automatico; sono arrivato a qualcosa che sembra funzionare, ma che probabilmente nasconde qualche bug.

Al momento sono in cerca di un modello comune alla sintassi che i filtri  audio/video hanno da linea di comando che mi permetta di passare una stringa di parametri ad una funzione che ne faccia il parse e disegni un' interfaccia che permetta all' utente di configurarli.
Pensa che ho contato ad occhio più di 60 filtri (video, poi ci sono quelli audio e le opzioni a contorno), disegnarli nell' ide uno per uno è improponibile.

Vorrei aprire il codice al più presto, ma dal momento che la struttura iniziale non è ancora definita al 100%, è necessario aspettare, comunque se ti interessa dargli uno sguardo posso mandartelo per email, non è un problema.

Una nota a margine, gambas è qualcosa di spettacolare, da quando l'ho usato l'ho sentito subito mio, parecchie cose che non conoscevo (la mia esperienza con il basic risale al C64) le scovavo praticamente a intuito!
Titolo: Re: SpinBox -> FloatSpinbox ?
Inserito da: fsurfing - 03 Giugno 2008, 22:44:26
anche a me gambas è piaciuto subito!  :-D

altroche se mi interessa dare un occhiata al tuo codice, anche se da quello che hai scritto la tue esperienze di programmazione e capacita sono di molto superiori alle mie.

io per provare l' embledder mi ero limitato alla visualizzazione del dvb-t tramite mplayer.
in effetti i le opzioni e possibilità di mplayer sono vastissime
ti invio mia email tramite M P
ciao ciao
Titolo: Re: SpinBox -> FloatSpinbox ?
Inserito da: fsurfing - 04 Giugno 2008, 18:57:34
devo dire che hai fatto veramente un ottimo lavoro!

ma soprattutto ne hai già fatto molto!

una cosa mi devi spiegare quando hai tempo...

come fai a visualizzare il video su una drawingarea? non sono proprio riuscito a capirlo! :-o  :muro:
Titolo: Re: SpinBox -> FloatSpinbox ?
Inserito da: koko - 05 Giugno 2008, 18:53:20
E' semplice,
Codice: [Seleziona]
mplayer.wid = VideoBox.Handle


Per rimanere In topic, qui c'è un'altra versione della floatspinbox, questa volta ho useto un inherit della superclasse panel, altrimenti nelle enumerazioni la classe floatspinbox appariva come un panel e mi incominciava a creare problemi nel parsing della gui:
http://pastebin.com/f4c07c677