| Carlos's profileLIBs Gráfica para (x)Har...BlogListsNetwork | Help |
|
|
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 12/22/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. 8/5/2008 Testar a resolução do clientePara 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. 4/20/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..."
Depois é só clicar com o botão direito do mouse na pasta e escolher CMD, pronto você já esta na pasta.
Carlos Susviela
4/11/2008 Excluindo arquivos de uma pastaApagando 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:
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
1/31/2008 Retornando o Nome do executávelComo conseqüência do post anterior, um leitor me sugeriu que poderia ser interessante, saber o nome do Executável em questão, para deixar a função mais automática, fiz algumas pesquisas nos fóruns (x)Harbour e das Libs gráficas e cheguei a seguinte função. Obrigado a todos, que responderam os meus questionamentos nos foruns e listas, em especial ao Ivanil Marcelino da lista PlanetaHarbour, e a Paola Bruccoleri da lista ooHg, pois unindo a resposta tive êxito na minha pesquisa. #include "oohg.ch" Carlos Alberto Nunes Susviela 1/22/2008 Pegando data e a hora do EXE - DateTimeFile(sFile) Essa semana rolou na lista uma discussão para saber a data e a hora de um executável, isso seria de grande valia para a atualização dos programas. Fiz algumas pesquisar e cheguei a essa função: DateTimeFile(sFile) #include "oohg.ch" Function main() set date fren set cent on msginfo( DateTimeFile("Contabil.exe" ) ) Return * Retorna uma string contendo a data e a hora * do arquivo passado como parametro * Ex. DateTimeFile("contabil.exe") * Formato de retorno: aaaammddhh:mm:ss * Func DateTimeFile(sFile) Return DToS(Directory(sFile)[1,3]) + Directory(sFile)[1,4] Carlos Susviela 1/12/2008 Voltando... Nova versão Pessoal, após uns dias de descanso, estou voltando a publicar no nosso Blog. Tenho centenas de emails, do grupo, para ler, e para minha felicidade, nosso grupo já conta com mais de 300 inscritos, o que demonstra que estamos no caminho certo, fazendo um bom trabalho, e colhendo os frutos. Obrigado a equipe oohg, o trabalho de vocês é brilhante. E como é de tradicional, no mês de janeiro também saiu uma versão da nossa Lib. Você pode fazer download, pelo link: http://sourceforge.net/project/showfiles.php?group_id=144525&package_id=158938&release_id=566976 Uma dica: A menos que, você coloque arquivos pessoais dentro da pasta C:\oohg, você pode fazer o seguinte: 1) Renomeie a pasta c:\oohg para c:\oohg_old 2) Instale a nova versão no local padrão c:\oohg Dessa forma você pode testar a nova versão, e, em caso de algum problema, o que é muito difícil de acontecer, é possível voltar para a versão anterior. Sempre faço assim, e nunca tive problemas. Um abraço, e um bom ano de 2008 a todos os leitores. Carlos Alberto Nunes Susviela 12/6/2007 Nova versão ooHGJá está disponível para downloads a nova versão da ooHG. Versão DEZEMBRO - 2007 https://sourceforge.net/project/showfiles.php?group_id=144525&package_id=158938&release_id=559757 Saudações Team ooHG 11/28/2007 Eventos - começando a programarTransição caracteres, para gráficos, programação visual.
Começando a programar - conhecendo eventos.
Para quem vem da programação Clipper, interface de caracteres, a grande dificuldade encontrada, é o conceito de Eventos. Isso acaba muitas vezes fazendo o programador adiar a utilização da programação visual, interface gráfica.
Sem querer, preencher esse espaço, mas tendo como objetivo, tentar ajudar quem está nesse momento de transição, caracteres para gráficos, vou tentar dar uma pequena pincelada nesse assunto.
Eventos
O que é um evento?
“Um evento é uma ação específica que ocorre sobre ou com um determinado objeto. A ooHG (Lib Gráfica) pode responder a vários eventos: Clique do mouse, saída de algum objeto, abertura e fechamento de formulários e muitos outros. Os eventos geralmente são o resultado da ação do usuário.”
Utilizando um procedimento ou uma função, você pode adicionar sua própria resposta personalizada a um evento que ocorra em um formulário, relatório ou controle. Como podemos concluir pela definição acima, um evento normalmente, é resultante da ação do usuário. Por exemplo, um clique do mouse, em um formulário gera um evento “ON CLICK”, mas existem, eventos que são disparados automaticamente por exemplo o evento “ON INIT” que é disparado quando um formulário é ativado.
A utilização de eventos em associação com funções ou procedimentos, nos oferece infinitas possibilidades.
Bom vamos deixar de papo, que programador gosta é de programar:
Vamos lá crie uma pasta chamada "evento" dentro da nossa pasta padrao de treinamento, veja como fazer, nos posts iniciais:
Dentro da pasta, digite o seguinte PRG:
*----------------------------- Código Fonte--------------------*
* -------------------------------------------------
* (c) By - Carlos Alberto Nunes Susviela * http://www.powerinformatica.com.br * ------------------------------------------------- * você pode usar livremente esse código para fins de estudos, * pode distribuir livremente o mesmo, usar em seu Blog ou * sua página, sobre qualquer assunto envolvento programação * xBase, desde que citada a origem do mesmo. * * ooHG....: http://www.oohg.org/ * Origem..: http://oohg-br.spaces.live.com/blog * Autor...: Carlos Alberto Nunes Susviela * Tema....: Estudando um pouco de eventos * #include "oohg.ch"
Declare window FrmPrincipal // Visivel em todo o sistema
Function Main
Define Window frmPrincipal ;
Title "Estudando Eventos " ; WIDTH 640 HEIGHT 480 ; // Tamanho da Janela Main *** Criando 2 botões para pegar o EVENTO CLICK dos mesmos
@ 040,030 BUTTON btnMensagem ;
ACTION btnMensagemClick() ; // ao clicar no botao chama WIDTH 80 HEIGHT 27 ; // essa função - vai la ... CAPTION "Mensagem" ; TOOLTIP 'Clique para ver a mensagem' @ 080,030 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 btnMensagem *-----------------------------------------------------------------------------* Function btnMensagemClick() *-----------------------------------------------------------------------------* * pegando o titulo do botao pressionado local NomeBotao := frmPrincipal.btnMensagem.caption MsgInfo("Você clicou no botão: " + NomeBotao , "Titulo do aviso")
Return Nil
* 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
*------------------------------ Fim do Código ------------------*
Você pode, e deve, fazer algumas alterações no programa acima, para ir pegando o domínio da sintaxe da nossa Lib - ooHG.
Carlos Alberto Nunes Susviela
11/25/2007 Um "Olá Mundo", ainda melhorIncrementando o programa "Olá Mundo" Bom se você conseguiu compilar e rodar o seu primeiro programa, e se considera um programador, não importa o nível, deve esta com uma "cosquinha", querendo mais... Vamos brincar um pouco com o programa, implementando algumas alterações. Ao implementar essas mudanças, já vai perceber o poder da ooHG. ----------------- Codigo Fonte --------------------- * Primeiro Programa com Lib ooHG * Carlos Alberto Nunes Susviela * Origem: http://oohg-br.spaces.live.com/blog * * Implementando algumas alterações para conhecer * melhor a nossa Lib. * #include "oohg.ch" // Essa linha é obrigatória Declare window FrmPrincipal // Visivel em todo o sistema Function Main Define Window frmPrincipal ; Title "Olá Mundo....! " ; Main ; ON INIT InicializaAmbiente() ; // ao iniciar o form vai na função ON Release FinalizaForm() ; BACKCOLOR {254 , 255 , 221 } // Cor fundo do Form * Vamos colocar uma barra de status no form principal * veja que recurso interessante ooHG nos oferece Define STATUSBAR STATUSITEM "http://oohg-br.spaces.live.com/blog/" WIDTH 80 KEYBOARD DATE WIDTH 80 CLOCK WIDTH 80 End STATUSBAR End Window FrmPrincipal.Maximize // Maximiza o formulário frmPrincipal.Activate() Return * É interessante criar uma função para * inicializar o ambiente de programação Function InicializaAmbiente() HB_LANGSELECT("PT") SET DATE TO FREN SET CENT ON SET LANGUAGE TO PORTUGUESE // oohg SET NAVIGATION EXTENDED // Usa ENTER para troca de campos Return Nil * Ao clicar no botão X (Sair) vem nessa função * Aqui um ótimo local para fechar tabelas DBFs Function FinalizaForm() MsgInfo("Agora vou fechar todas as tabelas DBFs", "Aviso Encerramento") Return Nil ------------------------------------------------------ Se você vem do Clipper / (x)Harbour console, deve sentir alguma dificuldade com EVENTOS. Prometo para breve uma introdução a Eventos com a programação gráfica. Até a próxima; Carlos Alberto Nunes Susviela www.PowerInformatica.com.br Tá gostei, e agora ??? Gostei. Onde encontro mais informações sobre a "Lib ooHG" ? Ai vão alguns links sobre ooHG. Copie/Downloads da Lib e dos fontes em: http://sourceforge.net/projects/oohg http://sourceforge.net/project/showfiles.php?group_id=144525 PORTUGUÊS http://oohg-br.spaces.live.com/blog/ http://www.oohg.org/pt/ ESPANHOL http://www.oohg.org/ INGLÊS http://www.oohg.org/english/ GRUPO no www.yahoo.com http://es.groups.yahoo.com/group/oohg/ Carlos Alberto Nunes Susviela www.PowerInformatica.com.br 11/19/2007 Primeiro programa com a Lib ooHGVamos criar nosso primeiro programa com a Lib ooHG
O já tradicional, "Olá Mundo" Estou considerando aqui que você tem conhecimentos de Clipper (xBase). Para isso vamos precisar apenas, do editor de textos de sua preferência. Eu particularmente gosto muito do Context, Free, e você pode pegar uma cópia em: http://www.context.cx/ 1) crie uma pasta para nosso primeiro programa; C:\oohgbr\ola 2) Vamos criar o seguinte código fonte: ( ola.prg ) ---- Código Fonte ------ * Primeiro Programa com Lib ooHG * Carlos Alberto Nunes Susviela * Origem: http://oohg-br.spaces.live.com/blog * #include "oohg.ch" Function Main Define Window frmPrincipal ; Title "Olá Mundo....! " ; Main End Window frmPrincipal.Activate() Return -------------------------- 3) Copie via Explorer ou via prompt de comando o arquivo COMPILE.BAT que esta na pasta c:\oohg\samples\ c:\oohgbr\ola>Copy \ooHG\samples\compile.bat Se você verificar o conteúdo da sua pasta devem existir 2 arquivos: ola.prg Compile.bat Agora digite: compile ola Obs. Sem a extensão PRG Pronto; Se você digitou tudo certinho no programa acima, vai ser criado/executado o seu primeiro programa com a Lib ooHG. Simples assim. Bem vindo ao mundo dos formulários. Carlos Alberto Nunes Susviela 11/18/2007 Instalando o compilador e a LIBInstalando o compilador e a LIB Coloque na pasta c:\bcc55\lib os seguintes arquivos: bcc32.cfg 1) Arquivo: bcc32.cfg --- com o seguinte conteúdo: -I"c:\bcc55\include" 2) Arquivo: ilink32.cfg --- com o seguinte conteúdo: -L"c:\bcc55\lib"
11/9/2007 Os sem compilador gráfico xBase."Inauguração do Blog ooHG-BR" Os sem compilador gráfico xBase. Já que existem os "Sem Terra", "os sem tetos", estou aqui criando um novo movimento social "OS SEM COMPILADOR". Os programadores Clipper sempre buscam novidades, pois fomos esquecidos/excluídos (essa está na moda agora), pela criadora do compilador Clipper a CA. Bom essa primeira fase, já foi superada e já temos duas boas opções, para compilar nossos programas em Clipper (xBase) os compiladores Harbour, e xHarbour, ambos com interface de caracteres e 32 bits. Por falta de um, temos agora dois compiladores e bem melhor que o compilador 16 bits da CA, que funcionam vários sistemas operacionais, windows e linux por exemplo. Terminada a primeira fase, vamos para a segunda que é, a interface gráfica, os programas em "windows", digamos assim. Nossa busca agora é essa, nos acertarmos com uma interface gráfica, que com o surgimento dos compiladores 32 bits (x)harbour, pipocaram por toda a internet, e não são poucos, Visual xHarbour, FiveWin, Xailer, MiniGui, HWGui, ooHG, isso só para citar algumas das opções, que beleza, que democracia, que variedade de opções, em fim estamos felizes. Sempre fui um incentivador das novas opções, visto que fui um dos primeiros a criar um site com informações sobre MiniGui, do Roberto, isso lá em 2002, veja no endereço: http://www.susviela.hpg.ig.com.br/hb/ Eu já testei várias dessas opções e atualmente estou desenvolvendo aplicativos com ooHG, uma Lib gráfica para (x)Harbour, me pareceu uma boa opção, e pretendo nesse espaço colocar algumas dicas para ajudar, futuros usuários dessa LIB. Este será mais um espaço em português sobre ooHG. Está inaugurado o BLOG ooHG-BR. Site para informações sobre ooHG: http://www.oohg.org/pt/ --------------------------------------------------------------- 07/11/2007 - Sant´Ana do Livamento - RS - Brasil Carlos Alberto Nunes Susviela |
|
|