Carlos's profileLIBs Gráfica para (x)Har...BlogListsNetwork Tools Help

Blog


    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 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.



    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..."

     

    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

     

    4/11/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
     
     
    1/31/2008

    Retornando o Nome do executável


    Como 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"

    Function main()

      Msginfo( NomeExecutavel() )

      Msginfo( NomeExecutavel(.T.) )

    Return


    *******************************************************************************
    * Funcao.....:   NomeExecutavel( lPath )
    * Proposito..:   Devolver o nome do executálvel
    * Parametros.:   lPath = .T.  retorna Caminho + Executavel
    *                Sem parametros retorna só o Executável
    * Retorna....:   Nome EXEcutavel com ou sem o caminho
    * Observacao.:
    *------------------------------------------------------------------------------*
    Function NomeExecutavel(lPath)
    *------------------------------------------------------------------------------*
      LOCAL nPos, cRet

      If Empty(lpath)
         nPos:= RAT("\", hb_argv(0))
         cRet:= substr(hb_argv(0), nPos+1)
      else
         cRet:= hb_argv(0)
      endif

    Return cRet


    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 ooHG

    Já 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 programar

     
     
    Transiçã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
     
               Define STATUSBAR
                  STATUSITEM "http://oohg-br.spaces.live.com/blog/" WIDTH   80
               End STATUSBAR
     
               *** 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 ------------------*
     
    eventos
     
     
    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 melhor


    Incrementando 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 ooHG

    Vamos 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.
    Ola_Mundo
    Bem vindo ao mundo dos formulários.

    Carlos Alberto Nunes Susviela

    11/18/2007

    Instalando o compilador e a LIB

    Instalando o compilador e a LIB

    Estou considerando o compilador Borland C++, Harbour e ooHG

    Observação: Procure não alterar os diretórios sugeridos para evitar erros, de compilação:


    1) Faça download do compilador C++ da Borland em: 

        http://www.caclipperwebsite.com/scgi-bin/topdownloads/download.pl?file=bcc55.zip

        opção-2: No site da Borland:
        http://www.borland.com/downloads ou http://www.codegear.com/downloads/free/cppbuilder

    2) Instale o Borland C++ 5.5 no diretório C:\BCC55

    Coloque na pasta c:\bcc55\lib os seguintes arquivos: bcc32.cfg

    1) Arquivo: bcc32.cfg  --- com o seguinte conteúdo:

           -I"c:\bcc55\include"
           -L"c:\bcc55\lib"

    2) Arquivo: ilink32.cfg  --- com o seguinte conteúdo:

           -L"c:\bcc55\lib"



    A partir daqui as opções dependem do Sistema Operacional em uso:

    Windows 98
        Inclua no AUTOEXEC.BAT o caminho para C:\BCC55\BIN na variável PATH.
        Abaixo da linha SET PATH, inclua a seguinte linha:

        SET PATH=%PATH%;C:\BCC55\BIN



        Inclua no AUTOEXEC.BAT, da mesma forma que no passo anterior, as seguintes linhas:

        SET LIB=%LIB%;C:\BCC55\LIB
        SET INCLUDE=%INCLUDE%;C:\BCC55\INCLUDE
        SET HG_BCC=c:\bcc55

    Windows XP
        Iniciar / Painel de controle / Sistema
        Escolher a Aba AVANÇADO
        Clicar VARIAVEIS DE AMBIENTE
        Na caixa VARIAVEIS DO SISTEMA, verificar:
        Se Existem as variáveis abaixo altere se não crie:

        PATH --> C:\BCC55\Bin
        INCLUDE --> C:\BCC55\INCLUDE
        LIB --> C:\BCC55\LIB
        HG_BCC --> c:\bcc55
       

    3) Instale o ooHG (Lib Gráfica para (x)harbour

        Copie a instalação de: http://sourceforge.net/projects/oohg
        Instale na pasta c:\oohg
       

    A partir desse ponto já estamos em condições de criarmos o nosso primeiro programa com a Lib ooHG.


    Carlos Alberto Nunes Susviela
    http://www.PowerInformatica.com.br




    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