Ok.. Aqui esta.....Vou colocar um exemplo.... A funcao principal e a Ran_txt_Button((X1,Y1,Width,Height,BackGColor,TxtColor,Atal_Color,string)
Width e Height e o tamanho.
BackGColor e a cor de fundo do botato que aceita RGB() da propria lib.
txtcolor: e a cor do que vai ser escrito no botao.
Atal_Color. E a cor do traco que aparecera embaixo da primeira letra
do que sera escrito no botao. O mesmo serviria para tecla d eatalho, mas nao esta programado.
string: o que sera escrito no centro do botao.
A funcao retorna um vetor com a posicao do botao.
a funcao Btn_Click recebe dois vetores. um com a posicao do botao e outro com as coordenadas do mouse.
Código: Selecionar todos
Btn_CAncelar:=Ran_txt_Button(20,30,70,35,RGB(128,128,128),RGB(0,0,0),
RGB(0,0,0),"Cancelar")
Do while Lastkey()<> 27
// Var. que recebe status do mouse
MouseState=FGLMState()
if Btn_Click(MouseState,Btn_cancelar)=1
alert("cancelar")
endif
enddo
#include "clip53\include\fgl.ch"
// Desenha um Botao vazio na cor desejada
Static Procedure Empty_Button(X1,Y1,Width,Height,BackGColor)
local X2,Y2
X2 := X1 + Width
Y2 := Y1 + Height
FGLFillRectangle(X1+2,Y1+2,X2-2,Y2-2,BackGColor)
FGLLine(X1+1,Y1,X2-1,Y1,clBlack)
FGLLine(X1+1,Y2,X2-1,Y2,clBlack)
FGLLine(X1,Y1+1,X1,Y2-1,clBlack)
FGLLine(X2,Y1+1,X2,Y2-1,clBlack)
FGLRectangle(X1+1,Y1+1,X2-1,Y2-1,clGray)
FGLRectangle(X1+2,Y1+2,X2-2,Y2-2,clGray)
FGLLine(X1+1,Y1+1,X2-1,Y1+1,clWhite)
FGLLine(X1+1,Y1+1,X1+1,Y2-1,clWhite)
FGLLine(X1+2,Y1+2,X2-2,Y1+2,clWhite)
FGLLine(X1+2,Y1+2,X1+2,Y2-2,clWhite)
RETURN
// Desenha um Botao com Texto centralizado na cor desejada
// Retorna as coordenadas do Botao
Function Ran_Text_Button(X1,Y1,Width,Height,BackGColor,TxtColor,Atal_Color,string)
Local mid1, mid2,aOldView,X2,Y2,Mid1Str,Mid2Str
Local Vet_Pos:={}
X2 := X1 + Width
Y2 := Y1 + Height
Empty_Button(X1,Y1,Width,Height,BackGColor)
Mid1Str:= X1 + (((X2-X1)/2)-((len(string)*FGLSetMode()[FGL_MODE_FONT_WIDTH])/2))
Mid2Str:= Y1 + ((Y2-Y1)/2)-(FGLSetMode()[FGL_MODE_FONT_HEIGHT]/2)+1
// desenho da Linha Sublinhada
If Mid1Str>=19 .and. Mid2Str>=100
FGLLine(Mid1Str,Mid2Str+14,Mid1Str+7,Mid2Str+14,Atal_Color)
FGLLine(Mid1Str,Mid2Str+15,Mid1Str+7,Mid2Str+15,Atal_Color)
endif
aOldView := FGLSetViewport(X1+2,Y1+2,X2-2,Y2-2)
mid1 := X1 + (((X2-X1)/2)-((len(string)*FGLSetMode()[FGL_MODE_FONT_WIDTH])/2))
mid2 := Y1 + ((Y2-Y1)/2)-(FGLSetMode()[FGL_MODE_FONT_HEIGHT]/2)+1
// Escrevendo o texto
FGLText(mid1,mid2,TxtColor,-1,string)
FGLSetViewport(aOldView[1],aOldView[2],aOldView[3],aOldView[4])
// Coordenadas
aadd(Vet_Pos,X1)
aadd(Vet_Pos,Y1)
aadd(Vet_Pos,X2)
aadd(Vet_Pos,Y2)
RETURN
// Desenha o botao voltado, somente as linhas laterais sao alteradas
// alto relevo
Static procedure Btn_Down(X1,Y1,Width,Height,BackGColor,String)
local X2,Y2
X2 := X1 + Width
Y2 := Y1 + Height
// Horizontal
FGLLine(X1+1,Y1,X2-1,Y1,clBlack)
FGLLine(X1+1,Y2,X2-1,Y2,clBlack) //alterar a 2 e 4 linha para branco
// Vertical
FGLLine(X1,Y1+1,X1,Y2-1,clBlack)
FGLLine(X2,Y1+1,X2,Y2-1,clBlack)
FGLRectangle(X1+1,Y1+1,X2-1,Y2-1,clWhite)
FGLRectangle(X1+2,Y1+2,X2-2,Y2-2,clWhite)
FGLLine(X1+1,Y1+1,X2-1,Y1+1,clBlack)
FGLLine(X1+1,Y1+1,X1+1,Y2-1,clBlack)
FGLLine(X1+2,Y1+2,X2-2,Y1+2,clBlack)
FGLLine(X1+2,Y1+2,X1+2,Y2-2,clBlack)
Return
// Desenha o botao voltando
// altera somente as linhas de contorno
Static procedure Btn_Up(X1,Y1,Width,Height,BackGColor)
local X2,Y2
X2 := X1 + Width
Y2 := Y1 + Height
// Horizontal
FGLLine(X1+1,Y1,X2-1,Y1,clBlack)
FGLLine(X1+1,Y2,X2-1,Y2,clBlack) //alterar a 2 e 4 linha para branco
// Vertical
FGLLine(X1,Y1+1,X1,Y2-1,clBlack)
FGLLine(X2,Y1+1,X2,Y2-1,clBlack)
FGLRectangle(X1+1,Y1+1,X2-1,Y2-1,clGray)
FGLRectangle(X1+2,Y1+2,X2-2,Y2-2,clGray)
FGLLine(X1+1,Y1+1,X2-1,Y1+1,clWhite)
FGLLine(X1+1,Y1+1,X1+1,Y2-1,clWhite)
FGLLine(X1+2,Y1+2,X2-2,Y1+2,clWhite)
FGLLine(X1+2,Y1+2,X1+2,Y2-2,clWhite)
Return
// Verifica a posicao do MOuse e o click com
// o botao esquerdo em determinada area.
Function Btn_Click(VetMousePos,VetBtnPos)
Local PosBtnclick:=0
Width=VetBtnPos[4]-VetBtnPos[2]
Height=VetBtnPos[3]-VetBtnPos[1]
// Caso mouse esteja na posicao
if (VetMousePos[2]>=VetBtnPos[2] .and. VetMousePos[2]<=VetBtnPos[4]);
.and. (VetMousePos[1]>=VetBtnPos[1] .and. VetMousePos[1]<=VetBtnPos[3])
// Click com o bota esq
if VetMousePos[5]==FGLM_BUTTON_DOWN
Btn_Down(VetBtnPos[1],VetBtnPos[2],Height,Width)
PosBtnClick=1
Inkey(0.15)
Btn_Up(VetBtnPos[1],VetBtnPos[2],Height,Width)
endif
endif
Return(PosBtnClick)