Jump to content
Nokioteca Forum

Classe Tasto


masmil1988
 Share

Recommended Posts

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

immagineim.jpg

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 da masmil1988
Link to comment
Condividi su altri siti

Anche se io non posso ne testarlo, bravo è sempre utile per i programmatori avere già qualcosa scritto!

:lol:

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

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

Please sign in to comment

You will be able to leave a comment after signing in



Accedi Ora
 Share

×
×
  • Crea Nuovo...

Informazione Importante

Questo sito utilizza i cookie per analisi, contenuti personalizzati e pubblicità. Continuando la navigazione, accetti l'utilizzo dei cookie da parte nostra | Privacy Policy