(*Nome unit: pulsanti*)
(*Versione: 0.7-beta*)
(*Licenza: GNU GPL*)
(*Rilascio: 08/07/2010*)
(*Autore: Francesco Marrone (alias Giarados)*)
(*Descrizione: in questo modulo si definisce la classe pulsante*)
unit pulsanti;
interface
{definizione della classe pulsante}
type
pulsante=object
private
{posizione dell'angolo in alto a sinistra}
ascissa:smallint;
ordinata:smallint;
{altezza e larghezza del pulsante}
altezza:byte;
larghezza:byte;
{testo contenuto nel pulsante}
testo:string;
{colore del pulsante}
colore:byte;
{colore che assume se il mouse gli passa sopra}
vicecolore:byte;
public
{costruttore della classe pulsante}
constructor crea(x,y,h,l,colour,vicecolour:byte; const stringa:string);
{distruttore della classe pulsante}
destructor distruggi;
{la funzione pressato restituisce true se si clicca nell'area occupata dal tasto}
function pressato():boolean;
{il metodo disegna si occupa di disegnare il tasto}
procedure disegna;
end;
implementation
uses wingraph,winmouse;
const cella_tasti=15;
{costruttore della classe pulsante}
constructor pulsante.crea(x,y,h,l,colour,vicecolour:byte; const stringa:string);
begin
{vengono inizializzati tutti i campi}
ascissa:=x*cella_tasti;
ordinata:=y*cella_tasti;
altezza:=h*cella_tasti;
larghezza:=l*cella_tasti;
colore:=colour;
vicecolore:=vicecolour;
testo:=stringa;
end;
{se distrutto il pulsante viene cancellato dallo schermo
e i suoi campi vengono resettati}
destructor pulsante.distruggi;
begin
setviewport(ascissa,ordinata,ascissa+larghezza,ordinata+altezza,true);
clearviewport;
setviewport(0,0,getmaxx,getmaxy,false);
ascissa:=0;
ordinata:=0;
altezza:=0;
larghezza:=0;
colore:=0;
vicecolore:=0;
testo:='';
end;
{la funzione pressato restituisce true se si clicca nell'area occupata dal tasto}
function pulsante.pressato():boolean;
var evento:MouseEventType;
{MouseEventType = record
action: word;
buttons: word;
x,y: word;
wheel: smallint;
end;}
begin
pressato:=false;
{se il cursore si trova nell'area del tasto}
if ((getmousex>=ascissa) and (getmousex<=ascissa+larghezza)) and ((getmousey>=ordinata) and (getmousey<=ordinata+altezza)) then
begin
GetMouseEvent(evento);
if (evento.action=MouseActiondown) then {se il tasto viene pressato}
begin
GetMouseEvent(evento);
if evento.action=MouseActionup then pressato:=true; {e viene anche rilasciato allora pressato sarà true}
end;
end;
end;
{il metodo disegna si occupa di disegnare il tasto}
procedure pulsante.disegna;
begin
{se il cursore è interno al pulsante allora si utilizza il vicecolore per disegnarlo}
if ((getmousex>=ascissa) and (getmousex<=ascissa+larghezza)) and ((getmousey>=ordinata) and (getmousey<=ordinata+altezza)) then
begin
case vicecolore of
0: setcolor(black);
1: setcolor(white);
2: setcolor(yellow);
3: setcolor(orange);
4: setcolor(purple);
5: setcolor(red);
else setcolor(GetBkColor);
end;
rectangle(ascissa,ordinata,ascissa+larghezza,ordinata+altezza);
outtextxy(ascissa+cella_tasti,ordinata+altezza-(cella_tasti*2),testo);
end;
{se il cursore è esterno al pulsante allora si utilizza il colore standard per disegnarlo}
if not (((getmousex>=ascissa) and (getmousex<=ascissa+larghezza)) and ((getmousey>=ordinata) and (getmousey<=ordinata+altezza))) then
begin
case colore of
0: setcolor(black);
1: setcolor(white);
2: setcolor(yellow);
3: setcolor(orange);
4: setcolor(purple);
5: setcolor(red);
else setcolor(GetBkColor);
end;
rectangle(ascissa,ordinata,ascissa+larghezza,ordinata+altezza);
outtextxy(ascissa+cella_tasti,ordinata+altezza-(cella_tasti*2),testo);
end;
end;
end.