Autore Topic: SpinBox -> FloatSpinbox ?  (Letto 2411 volte)

Offline koko

  • Gambero
  • **
  • Post: 52
    • Mostra profilo
SpinBox -> FloatSpinbox ?
« il: 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!

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.484
    • Mostra profilo
Re: SpinBox -> FloatSpinbox ?
« Risposta #1 il: 02 Giugno 2008, 14:31:04 »
purtroppo non è possibile.

Offline giulio

  • Maestro Gambero
  • ****
  • Post: 280
    • Mostra profilo
Re: SpinBox -> FloatSpinbox ?
« Risposta #2 il: 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.

Offline koko

  • Gambero
  • **
  • Post: 52
    • Mostra profilo
Re: SpinBox -> FloatSpinbox ?
« Risposta #3 il: 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

Offline giulio

  • Maestro Gambero
  • ****
  • Post: 280
    • Mostra profilo
Re: SpinBox -> FloatSpinbox ?
« Risposta #4 il: 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 :-)

Offline koko

  • Gambero
  • **
  • Post: 52
    • Mostra profilo
Re: SpinBox -> FloatSpinbox ?
« Risposta #5 il: 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 ;)

Offline koko

  • Gambero
  • **
  • Post: 52
    • Mostra profilo
Re: SpinBox -> FloatSpinbox ?
« Risposta #6 il: 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!

Offline giulio

  • Maestro Gambero
  • ****
  • Post: 280
    • Mostra profilo
Re: SpinBox -> FloatSpinbox ?
« Risposta #7 il: 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.

Offline koko

  • Gambero
  • **
  • Post: 52
    • Mostra profilo
Re: SpinBox -> FloatSpinbox ?
« Risposta #8 il: 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.

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.484
    • Mostra profilo
Re: SpinBox -> FloatSpinbox ?
« Risposta #9 il: 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

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.484
    • Mostra profilo
Re: SpinBox -> FloatSpinbox ?
« Risposta #10 il: 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
 
 

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.484
    • Mostra profilo
Re: SpinBox -> FloatSpinbox ?
« Risposta #11 il: 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)

Offline koko

  • Gambero
  • **
  • Post: 52
    • Mostra profilo
Re: SpinBox -> FloatSpinbox ?
« Risposta #12 il: 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 ^^

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.484
    • Mostra profilo
Re: SpinBox -> FloatSpinbox ?
« Risposta #13 il: 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

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.484
    • Mostra profilo
Re: SpinBox -> FloatSpinbox ?
« Risposta #14 il: 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.