masmil1988 Pubblicato: 18 Giugno 2010 Segnalazione Share Pubblicato: 18 Giugno 2010 (modificato) Gente, per le mie applicazioni ho avuto la necessità di crearmi questa classe che penso possa essere utile a tutti quanti! La classe Tasto vi permette con pochi passi di creare dei pulsanti da inserire in qualsiasi applicazione per schermi touch screen. Il funzionamento è semplice e qui vi riporto il codice della classe e un esempio del suo funzionamento: class Tasto x y text h w img imgpressed function init(x, y, text, img, imgpressed=null, transparent=null) this.text=text; this.x=x; this.y=y; this.img=graph.icon(img, transparent); this.w=graph.size(this.img)[0]; this.h=graph.size(this.img)[1]; if imgpressed=null then this.imgpressed=this.img; else this.imgpressed=graph.icon(imgpressed, transparent); end; end; function show(clicked=false) if clicked=false then graph.put(this.x, this.y, this.img); else graph.put(this.x, this.y, this.imgpressed); end; oldpen=graph.pen(); graph.pen(graph.white); graph.text(this.x+(this.w-graph.size(this.text)[0])/2, this.y+this.h-9, this.text); graph.pen(oldpen); graph.show(); end; function clicked(cmd) if isarray(cmd)=false then return false; end; if cmd[0]>=this.x and cmd[0]<=this.x+this.w and cmd[1]>=this.y and cmd[1]<=this.y+this.h then if cmd[2]=0 then return true; else show(true); do cmd=ui.cmd(); until cmd[2]=0 or (cmd[0]<this.x or cmd[0]>this.x+this.w or cmd[1]<this.y or cmd[1]>this.y+this.h); if cmd[0]>=this.x and cmd[0]<=this.x+this.w and cmd[1]>=this.y and cmd[1]<=this.y+this.h then return true else return false; end; end; else return false; end; end; end Esempio: immagine_tasto=cd()+"tasto.png"; immagine_tasto_premuto=cd()+"tasto_premuto.png"; esci: Tasto=Tasto(20, 30, "Exit", immagine_tasto, immagine_tasto_premuto, graph.red); while true do esci.show(); graph.show(); coo=ui.cmd(); if esci.clicked(coo) then app.close(); end; end; Alla creazione del tasto dobbiamo passare come parametri (in ordine): - la coordinata orizzontale (x) del tasto - la coordinata verticale (y) del tasto - il testo del tasto (scusando il gioco di parole ) - l'immagine del tasto quando non è premuto - l'immagine del tasto quando è premuto (opzionale) - il colore dell'immagine che deve essere sostituito con la trasparenza (opzionale) Se non passiamo l'immagine del tasto quando è premuto verrà presa la stessa usata quando il tasto non è premuto. Se non passiamo alcun colore per la trasparenza nessun colore dell'immagine diventerà trasparente. Questo è un'immagine di esempio del funzionamento quando il tasto è premuto e quando è rilasciato in questo esempio le immagini originali hanno lo sfondo di colore rosso, che viene reso trasparente passando il valore graph.red come ultimo parametro alla creazione del tasto. Se vi va provatela e fatemi sapere se ci sono problemi o se ci sono migliorìe da fare! NB. il colore che deve essere reso trasparente deve essere perfettamente uniforme! Anche la più piccola variazione di colore di questo fa si che il colore di sfondo non possa essere reso perfettamente trasparente, per questo vi sconsiglio di utilizzare il formato JPEG per le immagini che dovete usare come tasto, in quanto il jpeg (in base alla qualità con cui è salvata l'immagine ed essendo una codifica percettiva) introduce delle variazioni sulla tonalità del colore che formati quali il png e il bmp non introducono. aggiornamento 1: la prima miglioria da fare sarebbe quella di poter scegliere la dimensione del testo e il colore Modificato 22 Giugno 2010 da masmil1988 Link to comment Condividi su altri siti More sharing options...
memoryn70 Pubblicato: 18 Giugno 2010 Segnalazione Share Pubblicato: 18 Giugno 2010 Anche se io non posso ne testarlo, bravo è sempre utile per i programmatori avere già qualcosa scritto! ps: anche se io non uso mshell, potresti fare una libreria! ps2: non avrei mai pensato che si potessero fare le classi in mshell, o meglio, non cosi. Sono molto simili a quelle di python e c++ (con il this, invece python prende "this" come primo argomento di ogni funzione) ps3: ma in mshell c'è direttamente un modo per creare la mask dell'immagine al volo? O meglio direttamente con il colore di sfondo? --- Bella possibilità! Link to comment Condividi su altri siti More sharing options...
andreadm0104 Pubblicato: 21 Giugno 2010 Segnalazione Share Pubblicato: 21 Giugno 2010 ciao per provare la tua classe ho creato un unico file .m contente: l'inclusione dei moduli ui, graph, app; la classe tasto il codice che istanzia l'oggetto (quello che hai inserito tu) ottengo questo errore No such local variable or field è relativo alla riga 18 della classe if imgpresssed=null then nella funzione init Non capisco cosa sia perchè imgpressed ha comunque un valore di default=null ma comunque nell' istanziare l'oggetto gli viene passato immagine_tasto_premuto... dove sta il problema?? ciao A Link to comment Condividi su altri siti More sharing options...
masmil1988 Pubblicato: 22 Giugno 2010 Autore Segnalazione Share Pubblicato: 22 Giugno 2010 Semplicemente alla riga dell'errore c'è una s ditroppo nella parola imgpresssed Corretto Link to comment Condividi su altri siti More sharing options...
Recommended Posts
Please sign in to comment
You will be able to leave a comment after signing in
Accedi Ora