Clipper On Line • Ver Tópico - Dicas 1a. Aplicação em xBase
Página 1 de 1

Dicas 1a. Aplicação em xBase

MensagemEnviado: 22 Fev 2010 13:36
por DinhoNetGomes
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

MensagemEnviado: 22 Fev 2010 13:39
por DinhoNetGomes
Toda aplicação xbase iniciar com um prg contendo duas procedures, como segue:
(Neste exemplo o arquivo prg se chama "MyApp1.prg" )

#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


Dica 2: Compilar o Prg

MensagemEnviado: 22 Fev 2010 13:44
por DinhoNetGomes
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)

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

Dica 3: Gerar o Executável

MensagemEnviado: 22 Fev 2010 13:51
por DinhoNetGomes
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")

obj41\MyApp1.obj
..\lib\lib3d\topDown.lib


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

@echo off
@call clp MyApp1
@Alink @MyApp1.LNK /Force:Unresolved /PM:PM

Dica 4: Variáveis ambientais

MensagemEnviado: 22 Fev 2010 13:56
por DinhoNetGomes
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)

@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

MensagemEnviado: 22 Fev 2010 14:00
por DinhoNetGomes
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

MensagemEnviado: 22 Fev 2010 14:48
por DinhoNetGomes
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

MensagemEnviado: 22 Fev 2010 15:23
por lugab
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

MensagemEnviado: 22 Fev 2010 16:24
por DinhoNetGomes
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

MensagemEnviado: 23 Fev 2010 14:47
por sygecom
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

MensagemEnviado: 22 Mai 2020 20:41
por mhackervix
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

MensagemEnviado: 24 Mai 2020 10:41
por JoséQuintas
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

MensagemEnviado: 24 Mai 2020 20:21
por Itamar M. Lins Jr.
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!
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.