Dicas 1a. Aplicação em xBase

Fórum sobre outras linguagens de programação.

Moderador: Moderadores

DinhoNetGomes
Usuário Nível 2
Usuário Nível 2
Mensagens: 99
Registrado em: 14 Nov 2005 09:36

Dicas 1a. Aplicação em xBase

Mensagem 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.
Clipper 5.2/Dbfcdx
Alaska xBase 1.9
DinhoNetGomes
Usuário Nível 2
Usuário Nível 2
Mensagens: 99
Registrado em: 14 Nov 2005 09:36

Dica 1: o primeiro PRG

Mensagem por DinhoNetGomes »

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

Código: Selecionar todos

#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, em um total de 1 vez.
Clipper 5.2/Dbfcdx
Alaska xBase 1.9
DinhoNetGomes
Usuário Nível 2
Usuário Nível 2
Mensagens: 99
Registrado em: 14 Nov 2005 09:36

Dica 2: Compilar o Prg

Mensagem 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)

Código: Selecionar todos

@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, em um total de 1 vez.
Clipper 5.2/Dbfcdx
Alaska xBase 1.9
DinhoNetGomes
Usuário Nível 2
Usuário Nível 2
Mensagens: 99
Registrado em: 14 Nov 2005 09:36

Dica 3: Gerar o Executável

Mensagem 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")

Código: Selecionar todos

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: Selecionar todos

@echo off
@call clp MyApp1
@Alink @MyApp1.LNK /Force:Unresolved /PM:PM
Editado pela última vez por DinhoNetGomes em 22 Fev 2010 14:42, em um total de 1 vez.
Clipper 5.2/Dbfcdx
Alaska xBase 1.9
DinhoNetGomes
Usuário Nível 2
Usuário Nível 2
Mensagens: 99
Registrado em: 14 Nov 2005 09:36

Dica 4: Variáveis ambientais

Mensagem 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)

Código: Selecionar todos

@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\
Clipper 5.2/Dbfcdx
Alaska xBase 1.9
DinhoNetGomes
Usuário Nível 2
Usuário Nível 2
Mensagens: 99
Registrado em: 14 Nov 2005 09:36

Dica 5: Use a biblioteca TopDown

Mensagem 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.
Clipper 5.2/Dbfcdx
Alaska xBase 1.9
DinhoNetGomes
Usuário Nível 2
Usuário Nível 2
Mensagens: 99
Registrado em: 14 Nov 2005 09:36

Dica 6: Aplicações Complexas

Mensagem 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
Clipper 5.2/Dbfcdx
Alaska xBase 1.9
lugab
Colaborador
Colaborador
Mensagens: 843
Registrado em: 19 Mai 2009 15:58

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

Mensagem 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
lugab
DinhoNetGomes
Usuário Nível 2
Usuário Nível 2
Mensagens: 99
Registrado em: 14 Nov 2005 09:36

Sobre o Alaska xBase

Mensagem por DinhoNetGomes »

Caro amigo, tem um outro tópico que estamos conversando sobre este assunto, este tópico é apenas para dicas e aprendizado.
https://pctoledo.org/forum/viewto ... =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
Clipper 5.2/Dbfcdx
Alaska xBase 1.9
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

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

Mensagem 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 ?
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Avatar do usuário
mhackervix
Usuário Nível 3
Usuário Nível 3
Mensagens: 105
Registrado em: 11 Fev 2008 02:06
Localização: ES

Dicas 1a. Aplicação em xBase

Mensagem 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
Mhackervix, Msc.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Dicas 1a. Aplicação em xBase

Mensagem 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
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Dicas 1a. Aplicação em xBase

Mensagem 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!

Código: Selecionar todos

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.
Saudações,
Itamar M. Lins Jr.
Responder