Clipper On Line • Ver Tópico - Dicas 1a. Aplicação em xBase
Mudar para estilo Clássico
Discussão sobre outras linguagens de programação.
Postar uma resposta

Dicas 1a. Aplicação em xBase

22 Fev 2010 13:36

Olá,

Estou criando este tópico para fornecer as 1ªs dicas de como fazer uma aplicação simples em xBase

Esta aplicação é uma janela simples com o botão "cancel" para finalizar. Só isso.

Este exemplo servirá de "modelo master" para qualquer outra aplicação em xbase.

As dicas serão postadas em forma de resposta deste tópico.

Abraços.

Dica 1: o primeiro PRG

22 Fev 2010 13:39

Toda aplicação xbase iniciar com um prg contendo duas procedures, como segue:
(Neste exemplo o arquivo prg se chama "MyApp1.prg" )

Código:
#include "INCDEFS.CH"
#include "Common.ch"
#include "Box.ch"
#include "gra.ch"
#include "xbp.ch"
#include "Appevent.ch"

Procedure Main
   LOCAL nEvent, mp1, mp2, oXbp
   // Create pushbutton
   oXbp:= XbpPushButton():new( SetAppWindow():drawingArea )
   oXbp:caption := "Cancel"
   oXbp:create( , , {10,20}, {100,40} )
   oXbp:activate := {|| PostAppEvent( xbeP_Close) }

   // Event loop
   nEvent := 0
   DO WHILE nEvent <> xbeP_Close
      nEvent := AppEvent( @mp1, @mp2, @oXbp )
      oXbp:HandleEvent( nEvent, mp1, mp2 )

   ENDDO
RETURN

PROCEDURE AppSys
   LOCAL nEvent, mp1, mp2
   LOCAL oDlg, oXbp, aPos[2], aSize, nHeight:=100, nWidth := 250
   Local cTitle

   cTitle := "My App1"

   tdOneInst(cTitle)

   aSize    := SetAppWindow():currentSize()
   aPos[1]  := Int( (aSize[1]-nWidth ) / 2 )
   aPos[2]  := Int( (aSize[2]-nHeight) / 2 )

   // Create application window
   oDlg := XbpDialog():new()
   oDlg:title := cTitle
   oDlg:border:= XBPDLG_THINBORDER
   oDlg:create( ,, aPos, {nWidth, nHeight},, .F. )

   // Set background color for drawing area
   oDlg:drawingArea:SetColorBG( GRA_CLR_PALEGRAY )

   // Select font
   oDlg:drawingArea:SetFontCompoundName( "8.Arial" )

   // Display application window and set focus to it
   oDlg:show()
   SetAppWindow( oDlg )
   SetAppFocus ( oDlg )

RETURN

Editado pela última vez por DinhoNetGomes em 22 Fev 2010 14:40, num total de 1 vezes

Dica 2: Compilar o Prg

22 Fev 2010 13:44

Para compilar, use o console do MS-DOS para invocar o XPP.EXE que compila o PRG e gera um OBJ, semelhante ao clipper.

Abaixo segue um exemplo bat (clp.bat) que invoca o compilador com todos os seus parâmetros
(atenção que os paths estão configurados para meu computador)

Código:
@u:\Alaska\xppw32\bin\XPP %1 /M %2 %3 /OOBJ41\  /n /m /q /iu:\alaska\xppw32\include /rxppui2.lib
Editado pela última vez por DinhoNetGomes em 22 Fev 2010 14:40, num total de 1 vezes

Dica 3: Gerar o Executável

22 Fev 2010 13:51

Para gerar o executável deve-se usar o Alink.exe para fazer isso.

Quando se tem muitos Objs e muitas Libs pode-se fazer uma lista dos mesmo em um arquivo LNK (semelhante ao clipper)

Segue o exemplo do LNK ("myapp1.lnk")

Código:
obj41\MyApp1.obj
..\lib\lib3d\topDown.lib


E o exemplo de um BAT ("mkApp.bat") que faz a compilação e a linkedição

Código:
@echo off
@call clp MyApp1
@Alink @MyApp1.LNK /Force:Unresolved /PM:PM
Editado pela última vez por DinhoNetGomes em 22 Fev 2010 14:42, num total de 1 vezes

Dica 4: Variáveis ambientais

22 Fev 2010 13:56

Como no clipper, o xBase usa variáveis ambientais para o ambiente de compilação.

Segue um BAT que coloca todas as principais variáveis na memória:
(atenção que estão configuradas para meu computador)

Código:
@echo off
rem R:\ALASKA\XPPW32\AUTOXPP.BAT - environment for Alaska Xbase++
rem created by Alaska Xbase++ installation
SET LIB=C:\ALASKA\XPPW32\LIB;C:\ALASKA\XBTW32\LIB;C:\ALASKA\DBEW32\LIB
SET INCLUDE=C:\ALASKA\DBEW32\INCLUDE;C:\ALASKA\XPAPW32\INCLUDE;C:\ALASKA\XBTW32\INCLUDE
SET OBJ=\MYAPP1\OBJ
SET XPPRESOURCE=C:\ALASKA\XPPW32\RESOURCE\BITMAP;
SET XPPRESOURCE=C:\ALASKA\XPPW32\RESOURCE\ICON;%XPPRESOURCE%
SET XPPRESOURCE=C:\ALASKA\XPPW32\RESOURCE\FONT;%XPPRESOURCE%
SET XPPRESOURCE=C:\ALASKA\XPPW32\RESOURCE\POINTER;%XPPRESOURCE%
SET XPPROOT=C:\ALASKA\XPPW32\

Dica 5: Use a biblioteca TopDown

22 Fev 2010 14:00

A dica final fica a recomendação para conhecer e usar a TopDown.

é como a Ca-tools... é uma biblioteca com funções visuais que incrementa o xBase e facilita a programação.

No site da Alaska xBase tem como baixa o programa demonstração.

Baixem e veja como o xbase fica muito profissional e com recursos excelentes.

Abraços.

Dica 6: Aplicações Complexas

22 Fev 2010 14:48

Para Aplicações complexas e que envolvam muitos arquivos *.prg e *.ch deve-se criar um arquivo denominado "xbase project" e que terá extensão "xpj"

Assim, ao invés de usar clp.bat para cada prg, usa-se o programa PBUILD e passa-se o xpj como parametro.

todos os programas (*.prg) e arquivos include (*.ch) serão compilados de uma vez só.

Exemplos de arquivos xpj tem vários no xbase 1.90 após a instalação na pasta SOURCE

Até mais

Re: Dicas 1a. Aplicação em xBase

22 Fev 2010 15:23

Legal, Dinho.

Desconheço completamento , por isso, desculpe se for uma pergunta idiota, mas eu queria saber se ele é 32 bits e se é tão gráfico quanto o xharbour + as libs q ele usa e, naturalemnte, se é 100% free...

Gabriel

Sobre o Alaska xBase

22 Fev 2010 16:24

Caro amigo, tem um outro tópico que estamos conversando sobre este assunto, este tópico é apenas para dicas e aprendizado.
http://www.pctoledo.com.br/forum/viewtopic.php?f=28&t=8028

Mas respondendo a vc.

1. Sim é totalmente gráfico e orientado a objeto
2. eu não conheço o xHarbour, só posso falar pelo xbase.
3. Não é free, nada nele é free...

O conceito dele vem da Europa onde lá se paga por software sim, principalmente quando se visualiza e obtem os ganhos que o mesmo pode dar. Claro que a pirataria de plantão vai te fornecer versões crackeadas, é óbvio.

ok?

Abraço

Re: Dicas 1a. Aplicação em xBase

23 Fev 2010 14:47

Olá Dinho,
Talvez eu tenha entendido errado, mas pelo que entendi o xBase usa os comando clipper para gera uma tela Grafica é isso ?
Tipo:

FUNC MAIN()
Local vDIG:=''
@ 10,10 SAY ' OLA MUNDO'
@ 10,11 GET vDIG
READ
RETURN

Uma tela assim não roda no xBase e já gera em tela gráfica ?

Dicas 1a. Aplicação em xBase

22 Mai 2020 20:41

sygecom escreveu:Olá Dinho,
Talvez eu tenha entendido errado, mas pelo que entendi o xBase usa os comando clipper para gera uma tela Grafica é isso ?
Tipo:

FUNC MAIN()
Local vDIG:=''
@ 10,10 SAY ' OLA MUNDO'
@ 10,11 GET vDIG
READ
RETURN

Uma tela assim não roda no xBase e já gera em tela gráfica ?


O Xbase tem 3 modos: Visual (GUI) , Texto e Hibrido(GUI+TEXT). Um código como acima gera uma saida tipo TEXTO idêntica a qual seria gerada pelo CLIPPER. O modo Hibrido permitiria que elementos gráficos possam ser inseridos sobre esta "tela de texto" (na realidade uma tela Gráfica simulando Texto).

Att.

Marcelo

Dicas 1a. Aplicação em xBase

24 Mai 2020 10:41

Por um momento pensei que era Harbour com GTWVG, porque a sintaxe é a mesma.

Mas isto mostra que é o Alaska xbase

@u:\Alaska\xppw32\bin\XPP %1 /M %2 %3 /OOBJ41\ /n /m /q /iu:\alaska\xppw32\include /rxppui2.lib

Dicas 1a. Aplicação em xBase

24 Mai 2020 20:21

Ola!
O Harbour tem uma lib de compatibilidade.
\contrib\hbxpp
description=Xbase++ compatibility
Na QtContribs do Pritpal tem alguns exemplos, ele portou algumas coisas do xBase++
Tava olhando o xBase++ 2.0
Diz que faz para: Xbase++ beyond Clipper | Web, Desktop and Mobile‎
Quando vamos para ver a parte Mobile, achamos lá o que tenho dito aqui faz tempo!
Create views with HTML and CSS using the CXP View-Engine

Eles chamam de WebUI! Que é um browse para visualizar as telas no padrão mobile (HTML+CSS) e deve ter provavelmente muitos bons recursos.

Agora com esta versão 2.0 ele está compatível com campos do foxpro, e outras coisas que já tem no harbour há mais de 5 anos.

Pedaço do código exemplo... QtCOntribs, de 2016!
Código:
PROCEDURE BuildADialog()
   LOCAL oDlg, mp1, mp2, oXbp, nEvent, aSize, oDa

   /* Create Application Window */
   oDlg := GuiStdDialog( "Harbour - hbQT - hbXBP + GtQtc ( Xbase++ )" )

   oDlg:close := {|| MsgBox( "You can also close me by pressing [ESC]" ) }
   SetAppWindow( oDlg )
   oDlg:Show()

   oDa := oDlg:drawingArea

   /* Obtain desktop dimensions */
   aSize := AppDesktop():currentSize()
   /* Place on the center of desktop */
   oDlg:setPos( { ( aSize[ 1 ] - oDlg:currentSize()[ 1 ] ) / 2, ;
                  ( aSize[ 2 ] - oDlg:currentSize()[ 2 ] ) / 2 } )

   /* Make background color of :drawingArea different */
   oDa:setFontCompoundName( "10.Tohama italics" )
   //oDa:setColorFG( GraMakeRGBColor( { 255,255,255 } ) )

   /* Install menu system */
   Build_MenuBar( oDlg )
   /* Install Statusbar */
   Build_StatusBar( oDa )
   /* Install Toolbar */
   Build_ToolBar( oDlg )

   s_oDlg := oDlg
   /* Present the dialog on the screen */
   oDlg:Show()

   /* Enter Xbase++ Event Loop - working */
   DO WHILE .t.
      nEvent := AppEvent( @mp1, @mp2, @oXbp )
      IF ( nEvent == xbeP_Close ) .OR. ( nEvent == xbeP_Keyboard .and. mp1 == xbeK_ESC )
         EXIT
      ENDIF
      HB_TRACE( HB_TR_DEBUG, nEvent, valtype( oXbp ), iif( HB_ISOBJECT( oXbp ), oXbp:title, "Nothing" ) )
      oXbp:handleEvent( nEvent, mp1, mp2 )
   ENDDO

   oDlg:destroy()

   RETURN


Saudações,
Itamar M. Lins Jr.
Postar uma resposta