Funcao para criar um botao em modo grafico??

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

rangelssilva
Usuário Nível 1
Usuário Nível 1
Mensagens: 48
Registrado em: 27 Jul 2007 15:24
Localização: São Paulo - SP

Funcao para criar um botao em modo grafico??

Mensagem por rangelssilva »

Bom Dia, Caros colaboradores.


Andei procurando no iste, mas nao achei nada a respeito. Fiz uma funcao com a LIB Fern's Graphic para criar um botao. Ate ai tudo facil. So que preciso receber o status do mouse, para quando o botao for clicado eu colocar as linhas de codigos correspondentes. SO que se eu fizer um DO while e receber o status do mouse dentro da funcao, caso eu utilize mais de um botao e eu clicar na ordem diferente da chamada da funcao o mesmo nao vai funcionar ate que eu clique no primeiro que foi chamado.

Programa principal.

Abrir:=Text_Button()
Fechar:=Text_Button()

se eu clicar em fechar primeiro do que abrir o codigo da funcao nao e executado. O Fechar so sera executado apos clicar em abrir. Devo programar isso de forma que nunca vou sabe em qual botao o usuario ira clicar primeiro.. correto??? Alguem que e experiente sabe como contornar a situacao, pois nunca fiz nada a respeito.????

Por exemplo utiliz minha funcao

Function text_button()

codigo para desenho e manipulacoa grafica.

do while blablabla...

MouseState:=FGLMState() // Recebe o status do mouse.


return

enddo

return

:'(
rangelssilva
Usuário Nível 1
Usuário Nível 1
Mensagens: 48
Registrado em: 27 Jul 2007 15:24
Localização: São Paulo - SP

Re: Funcao para criar um botao em modo grafico??

Mensagem por rangelssilva »

Desculpem o transtorno.......

COnsegui resolver... Ainda do jeito mais facil... E que queira fazer um monte de funcoes e acabei deixando o modulo confuso.....Dahhhhh... As vezes a solucao a mais simples do que se imagina....


VAleu abc...
:))
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Re: Funcao para criar um botao em modo grafico??

Mensagem por Maligno »

Mesmo sendo coisa simples, se puder compartilhar, poderá vir a ajudar alguém que passe pela mesma dificuldade.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
rangelssilva
Usuário Nível 1
Usuário Nível 1
Mensagens: 48
Registrado em: 27 Jul 2007 15:24
Localização: São Paulo - SP

Funcao para criar um botao em modo grafico??

Mensagem por rangelssilva »

Ok.. Aqui esta.....Vou colocar um exemplo.... A funcao principal e a Ran_txt_Button((X1,Y1,Width,Height,BackGColor,TxtColor,Atal_Color,string)
e Btn_Click(VetMousePos,VetBtnPos)

onde: x1 e y1 sao as coordenadas do botao
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.
Exemplo.

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)
Responder