Página 1 de 1

Tela em modo console com PushButton estilo FoxPro 2.6

Enviado: 20 Set 2012 21:09
por ale.big
Boa Noite a todos.
Estou criando uma tela em modo console com botoes onde eu possa exibir a tela com o ultimo registro e ao clicar em determinado botão efetuar a acao conforme definido , montei o seguinte exemplo abaixo:

Código: Selecionar todos

#include "common.ch"
#include "inkey.ch"
#include "box.ch"

FUNCTION Main
	LOCAL GetList := {}
	LOCAL cBotaoNovo := .t.
	LOCAL cBotaoGravar := .t.
	LOCAL cBotaoSair := .t.
	LOCAL cLetraBotao := ""
	LOCAL cNome := Space(25)
	LOCAL cEndereco := Space(25)
	LOCAL nTelefone := Space(15)
        LOCAL lNovo := .f.
  
  Private cCordoBotao:="GR+/B*,GR+/G,R+/N,GR+/R*"
  Private cCordoGet:=(","+"W+/R"+",,,"+"N/B")
  ConfiguraAmbiente()
	CLS
  set key 103 to SetaBotao('G')
  set key 115 to SetaBotao('S')
  set key 110 to SetaBotao('N')

  Do While .T.

    @ 2, 8, 12, 47 BOX B_DOUBLE + Space(1) Color "N/BG"
    HB_Shadow(2, 8, 12, 47)
    SetColor(cCordoGet)
    @ 4, 10 SAY "Nome" + Space(10 - Len("Nome")) Color "W+/BG" GET cNome PICTURE "@A" When lNovo
    @ 6, 10 SAY "Endereco" + Space(10 - Len("Endereco")) Color "W+/BG" GET cEndereco PICTURE "@A" When lNovo
    @ 8, 10 SAY "Telefone" + Space(10 - Len("Telefone")) Color "W+/BG" GET nTelefone PICTURE "###-###-###" when lNovo

    @ 10, 11 GET cBotaoNovo PushButton CAPTION " &Novo " Color cCordoBotao STYLE "[]" STATE {|| SetaBotao('N') }
    @ 10, 23 GET cBotaoGravar PushButton CAPTION " &Gravar " Color cCordoBotao STYLE "[]" STATE {|| SetaBotao('G')}
    @ 10, 35 GET cBotaoSair PushButton CAPTION " &Sair " Color cCordoBotao STYLE "[]" STATE {|| SetaBotao('S')}
    
    SET CURSOR ON
    READ
    SET CURSOR OFF
    IF LASTKEY() = K_ESC; RETURN .F.; ENDIF
  Enddo
RETURN NIL

Procedure SetaBotao(cLetraBotao)
  Private cTecla
  cTecla:=Upper(cLetraBotao)
  @ 24,10 say cTecla
  DO CASE
	CASE cTecla == 'G'
	   @ 14, 12 SAY cNome + " " + cEndereco + ", " + cTelefone Color "W/N"
	   WAIT
	   Return	
      CASE cTecla == 'S'
           CLS
	   Keyboard(chr(K_ESC))	
      Case cTecla == 'N'
           lNovo:=.T.
          //Ler os Gets
 ENDCASE
Return

Procedure ConfiguraAmbiente()
  REQUEST SQLRDD
  REQUEST SR_PGS
  REQUEST HB_LANG_PT
  REQUEST HB_CODEPAGE_UTF8
  REQUEST HB_CODEPAGE_UTF8EX
  REQUEST HB_GT_WVT_DEFAULT

  HB_CDPSELECT( "UTF8EX")
  HB_LANGSELECT("PT")

  mSetCursor(.T.)

  SETMODE(25,80)

  SET CONFIRM ON
  SET CURSOR OFF
  SET TYPEAHEAD TO 0
  SET INTENSITY ON
  SET SCOREBOARD OFF
  SET DELETED ON
  SET SAFETY OFF
  SET DATE ANSI
  SET ESCAPE ON
  SET CENTURY ON
  SET DELIMITERS TO
  SET EXCLUSIVE OFF
  SET WRAP ON
  SET EPOCH TO 1920
  SET OPTIMIZE ON
  SET MESSAGE TO 24 CENTER
  SET(_SET_DATEFORMAT,"dd/mm/yyyy")
  SET SOFTSEEK ON
  SET AUTOPEN OFF
 
  SetColor("B/N")
  SET EventMask to INKEY_ALL
                                                       
Return
Minhas dúvidas são:
1- No xharbour como atribuir a tecla ao botão, tentei com o set key mas nao obtive sucesso:
2- Ao clicar no botao Novo ou acionar a tecla "N", por exemplo, direcionar o cursor para o primeiro get ( como no foxpro usa-se _curobj=1).
Desde já agradeco as colaboracoes.

Tela em modo console com PushButton estilo FoxPro 2.6

Enviado: 20 Set 2012 22:59
por Pablo César
Primeiramente foi atribuído diferentes teclas do que as normais que o usuário deveria utilizar no preenchimento dos campos. Então foi mudado de G para Alt-G, N para Alt-N e S para Alt-S.

As variáveis cNome, cEndereco, cTelefone e lNovo foram declaradas como Private, o que permite ser enxergado fora da função de edição, pois Local só pode ser enxergado na função principal e você precisa acessar a função SetaBotao que irá ter efeito nas edições e gravação das variáveis no seu banco de dados.

Bem creio que seria isso o que você estaria precisando ? O resto você poderá adaptar para a gravação dos dados no BD e remover o Alert que apenas serve para exemplificar.

Em anexo o código fonte alterado com o seu executável para a sua apreciação e dos outros. Ahhh a compilação foi em Harbour/HMG em modo console.

Tela em modo console com PushButton estilo FoxPro 2.6

Enviado: 21 Set 2012 01:35
por lugab
Pablo César, aceite os nossos parabéns.

Isso sim, foi ajudar alguém..

Tela em modo console com PushButton estilo FoxPro 2.6

Enviado: 21 Set 2012 09:42
por ale.big
Muito Obrigado pela resposta Pablo Cesar.
Ja estou implementando a tela.
Pois o ambiente onde vai rodar a aplicacao e um servidor linux (xharbour/postgres) com estacoes com boot remoto via console.
Agora ficou a seguinte duvida, e possivel habilitar e desabilitar o botao em tempo de execucao, como no foxpro com o comando show get cBotaoNovo disable/enable ?
Voce comentou que fez o exemplo em Harbour/HMG, e possivel desenhar as telas, inserir botoes e gerar para o modo console como no foxpro 2.6 ?
Reitero meus agradecimentos.
[]'s

Tela em modo console com PushButton estilo FoxPro 2.6

Enviado: 21 Set 2012 12:56
por Pablo César
Agora que vi você é novo aqui no fórum. Seja bem vindo então !
ale.big escreveu:Agora ficou a seguinte duvida, e possivel habilitar e desabilitar o botao em tempo de execucao, como no foxpro com o comando show get cBotaoNovo disable/enable ?
Olha eu não tenho experiência alguma com FoxPro. Este exemplo que você postou, descobri por acaso, sabendo que a função PushButton() tem no Harbour pela rtl. Bom que funcionou como você queria. O resto eu apliquei apenas a lógica sobre condições e variáveis do tipo Private que possibilita o acesso e atribuição. Então o que posso te dizer que usei mais uma vez a condição WHEN e a variável lBotoes que é atribuida através da chamada de teclas Alt-M. Veja se isso já resolve. Você pode até mudar a cor dos botões quando estiverem desabilitados (quando lBotoes=.f.).
Voce comentou que fez o exemplo em Harbour/HMG, e possivel desenhar as telas, inserir botoes e gerar para o modo console como no foxpro 2.6 ?
Você pode utilizar a IDE tanto no modo console como gráfico. Desenhar telas em modo console a IDE não faz, sim em modo gráfico.

Tela em modo console com PushButton estilo FoxPro 2.6

Enviado: 22 Set 2012 09:10
por ale.big
Bom dia Pablo.
Obrigado pelos esclarecimentos.
Sim sou novo aqui no forum e tambem com o xharbour. Apesar de conhecer outras linguagens.
O que tenho implementado foi seguindo o Reference Guide da linguagem.
Como falei antes devido a particularidade do projeto (console/linux) sinto falta de uma IDE desenvolvimento a do FoxPro 2.6.
Voce conhece alguma lib (opensource ou comercial) para linux que permita agilizar o desenvolvimento?
[]'s

Tela em modo console com PushButton estilo FoxPro 2.6

Enviado: 22 Set 2012 09:58
por Pablo César
Desculpe não desenvolvi nada ainda em Linux e não conheço IDE para esse ambiente.

Tela em modo console com PushButton estilo FoxPro 2.6

Enviado: 22 Set 2012 18:55
por JoséQuintas
Até havia esquecido que no 5.3 a getsys incluia botões.
Anos atrás fiz uma gambiarra pra funcionar TABs e botões com Clipper 5.2.
Mas foi só de teste, nunca cheguei a colocar em prática.
De lá pra cá só ajustei pra harbour, mas ainda sem uso.
Ia postar compilado, mas o tamanho não permite.