Carlos: profilLIBs Gráfica para (x)Har...BlogSeznamySíť Nástroje Nápověda

LIBs Gráfica para (x)Harbour ooHG/MinGui/MiniGuiEx

Para programar em Visual Clipper.

Carlos Susviela

Povolání
Místo
Zájmy
Técnico manutenção de hardware, programador por prazer.
3.3.2009

Eventos, um pouco mais

O objetivo deste “post” é aprofundar um pouco mais o estudo de eventos, com um exemplo simples.

 

A idéia é simples, quero colocar zeros (000) antes do numeral digitado, isso é interessante para chaves (índices).

 

Para isso devo interagir com o evento ON LOSTFOCUS do objeto TEXTBOX, ou seja, “ao perder o foco” da “caixa de textos”.

 

Vamos criar um formulário novo e colocar 2 Label e 2 TextBox

 

 

* ---------------------- Inicio do código ---------------*

* http://www.powerinformatica.com.br
* Carlos Alberto Nunes Susviela
* Origem: http://oohg-br.spaces.live.com/blog
*
* Estudando um pouco de eventos ( 2 )
*
#include "oohg.ch"

Declare window FrmPrincipal    // Visivel em todo o sistema

Function Main
    SET NAVIGATION EXTENDED     // Usa ENTER para troca de campos
                                // quem vem do clipper vai gostar disso

    Define Window frmPrincipal ;
           Title "Estudando Eventos - 2 " ;
        WIDTH 640 HEIGHT 480       ;            // Tamanho da Janela
        Main               

           Define STATUSBAR
              STATUSITEM "http://oohg-br.spaces.live.com/blog/" WIDTH   80
           End STATUSBAR

           *-------------------------------------------Label
            @ 46,31 LABEL lblCodigo ;
            WIDTH 120 ;
            HEIGHT 24 ;
            VALUE 'Código....:' ;
            FONT 'MS Sans Serif' ;
            SIZE         10

            @ 90,30 LABEL lblNome ;
            WIDTH 120 ;
            HEIGHT 24 ;
            VALUE 'Nome Cliente.:' ;
            FONT 'MS Sans Serif' ;
            SIZE 10

            *------------------------------------------- TextBox
            @ 41,163 TEXTBOX txtCodigo ;
            HEIGHT 24 ;
            WIDTH 120 ;
            Font 'MS Sans Serif' ;
            size 10 ;
            MAXLENGTH 6 ;
            ON LOSTFOCUS  ZerosToCodigo(6)       // Ao perder o foco executa
                                                 // a funcao que coloca zeros
                                                 // a esquerda do codigo

            @ 78,163 TEXTBOX txtNome ;
            HEIGHT 24 ;
            WIDTH 279 ;
            Font 'MS Sans Serif' ;
            size 10 ;
            MAXLENGTH 50

            *------------------------------------------- Button
           @ 380,500 BUTTON btnSair  ;
           ACTION  btnSairClick() ;
           WIDTH 80 HEIGHT 27 ;
           CAPTION "&Sair"    ;
           TOOLTIP 'Clique aqui para sair do Programa'

    End Window

 

    frmPrincipal.center()
    frmPrincipal.Activate()       // Aqui é onde, Realmente inicia o programa

Return


* Função a ser disparada quando for clicado o botão btnSair
*-----------------------------------------------------------------------------*
Function btnSairClick()
*-----------------------------------------------------------------------------*

  if MsgYesNo("Deseja Sair do Sistema ?" , "Aviso...!" )
     FrmPrincipal.release                    // termina o formulario(libera)
  EndIf

Return Nil


* Função a ser disparada cada vez que o objeto TextoBox perde o foco (saiu)
*-----------------------------------------------------------------------------*
Function ZerosToCodigo(sTamanho)
*-----------------------------------------------------------------------------*
    Local sCodigo := Alltrim(FrmPrincipal.txtCodigo.value)
    Local szeros := Replicate("0", sTamanho - Len(sCodigo))

    FrmPrincipal.txtCodigo.value := sZeros + sCodigo

Return Nil
* ---------------------- Fim do código -----------------*

 

Conclusão: Como se pode perceber basta saber qual evento usar que podemos fazer muita coisa com essa lib.

 

Exercícios:


Ao perder o foco do TextBox onde se digita o nome do cliente, valide o mesmo para que não seja permitido deixar o campo vazio, ou seja force a digitação do nome do cliente.

Dica: você vai precisar da propriedade “SetFocus” para colocar o cursor novamente no campo Nome do Cliente.

Assim:  FrmPrincipal.txtCodigo.Setfocus

 

 

Carlos Alberto Nunes Susviela

www.PowerInformatica.com.br


22.12.2008

Um formulário com tempo de duração

Para não perder o costume de publicar alguma coisa.

Essa função mostra uma mensagem por um determinado tempo, muito util quando queremos mostrar mensagens do tipo, "Registro excluído com sucesso..!"


***************************************************
* Funcao.....:   Mensagem(cMsg, [nTempo])
* Proposito..:   Mostrar uma mensagem por nTempo
* Parametros.:   cMsg mensagem a ser exibida
*                nTempo tempo de exibição
* Retorna....:
* Observacao.:
*
Function Mensagem(cMsg, nTempo)

   DEFINE WINDOW frmMensagem AT 0,0 WIDTH 400 HEIGHT 100 TITLE 'Mensagem do Sistema...' MODAL NOSYSMENU
          @ 20,10 LABEL lblMensagem VALUE AllTrim(cMsg) WIDTH 300 CENTERALIGN BOLD
   END WINDOW

   frmMensagem.Center
   ACTIVATE WINDOW frmMensagem NOWAIT

   IF Empty(nTempo)
      nTempo:=3
   ENDIF
   DO WHILE nTempo>=0
      DO EVENTS
      Inkey(.5)
      nTempo:=nTempo-.5
   ENDDO
   frmMensagem.RELEASE

Return Nil




Carlos Alberto Nunes Susviela
POWER Informática.

5.8.2008

Testar a resolução do cliente


Para saber a resolução usada no computador do cliente use a seguinte função:

***************************************************
* Funcao.....:   ValidaResolucao()
* Proposito..:   Validar a resolução minima do sistema
* Parametros.:  
* Retorna....:   .T. se a resolução é maior que 800x600
* Observacao.:  
*
Function  ValidaResolucao()
    if getdesktopwidth()<800 .or. getdesktopheight()<600
       msginfo('800 x 600 ou maior requerida','Erro: Resolução de Vídeo')
       Return .F.
    endif
Return .T.


Carlos Alberto Nunes Susviela
Santana do Livramento - RS
Power Informática.



20.4.2008

Prompt de Comando Aqui...

 

Quem trabalha com programação sempre precisa desse atalho.

Ai vai uma dica para criar um atalho para o Prompt de Comandos "Aqui..."

 

Configurar o CMD para abrir em menu local.

         Windows Explorer, Ferramentas, Opções de Pasta, Tipos de Arquivo, Pasta, Avançado, Novo

                 Em Ação, escreva: Abrir CMD

Em "Aplicativo usado para executar a ação" digitar apenas o comando, de acordo com seu sistema operacional:


[WinXP]
            C:\windows\System32\cmd.exe /k cd %1


[Win2000]
            C:\winnt\System32\cmd.exe /k cd %1

 

Depois é só clicar com o botão direito do mouse na pasta e escolher CMD, pronto você já esta na pasta.

 

Carlos Susviela

 

11.4.2008

Excluindo arquivos de uma pasta

 
Apagando todos os aquivos de índices de uma subpasta do seu sistema
 
Essa semana tentei excluir todos os arquivos de uma pasta de um dos meus sistemas e por incrivel que possa parecer a coisa não é tão simples assim.  Tudo porque o comando Delete File não aceita coringas (*).
 
Para minha sorte estou escrito em vários grupos sobre xBase e nossa comunidade é bastante ativa e e menos de uma hora várias soluções para o "problema" estavam disponíveis basntando avaliar qual delas servia melhor ao meu caso em específico.
 
Dentre elas destaquei essa:
 
Apagando todos os aquivos de índices de uma subpasta do seu sistema:
 
aEval(Directory("indices\*.NTX"), {|z| Ferase("Indices\" + z[1])})  
 
Estou publicando para que sirva de apôio para a nossa comunidade, e como documentação para futuras pesquisas;
 
Obs. Esse post não é exclusivo para ooHG, pode ser aplicado para xBase & Cia Ltda.
 
 
Carlos Susviela