Compilar exemplo do Minigui

Projeto MiniGui - Biblioteca visual para Harbour/xHarbour

Moderador: Moderadores

Avatar do usuário
billy1943
Usuário Nível 4
Usuário Nível 4
Mensagens: 570
Registrado em: 12 Mai 2009 17:33
Localização: Bauru-SP

Compilar exemplo do Minigui

Mensagem por billy1943 »

Para adaptar um dos exemplos do Minigui, mais precisamente, o \samples\adavanced\GoogleMaps, tentei compilá-lo, mas está dando erro em que não consegue encontrar o caminho especificado.

Por favor, se alguém conseguiu fazê-lo, informe-me como e o que precisou alterar.

Tentei a compilação no DOS, usando o COMPILE.BAT que existe na pasta do exemplo, apesar do executável já vir no pacote.

Tentei também a compilação através da IDE do Minigui, do Walter Formigoni, mas encontrei mais dificuldades ainda e nada foi gerado.

As compilações usando a IDE do HMG para os exemplos do mesmo (HMG) foram todas executadas perfeitamente.

Outra "coisinha", eu pretendia mudar sua forma de funcionamento, onde, ao invés de digitar a rua, cidade e país, pudesse passar essas informações por parâmetros.

Tem como ?
O bom do computador é que ele resolve os problemas, sem nunca levantar nenhum.
Hoje atuo mais com Clipper 52E, e um pouquinho com XHarbour.
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Compilar exemplo do Minigui

Mensagem por Pablo César »

Oi Billy, qual é a versão que você estaria utilizando ?

Eu instalei hoje a versão MiniGUI Extended Edition 2.2.8 e não tive problemas para compilar o exemplo C:\MiniGUI\SAMPLES\Advanced\GoogleMaps
billy1943 escreveu:Por favor, se alguém conseguiu fazê-lo, informe-me como e o que precisou alterar.
Apenas utilizei o Compile.bat que vem na pasta do exemplo.
billy1943 escreveu:Outra "coisinha", eu pretendia mudar sua forma de funcionamento, onde, ao invés de digitar a rua, cidade e país, pudesse passar essas informações por parâmetros.

Tem como ?
No seu Main, bastaria colocar Main os parâmetros cStreet, cCity e cCountry que a sua vez chamará a função fOpenActivex() no INIT.

Ficando:

(no Main) Procedure Main(cStreet, cCity, cCountry)
aqui você precisará tratar caso o usuário esqueça de passar os 3 parâmetros. Deixe como default:
cStreet := PadR( "BROADWAY 500", 80 )
cCity := PadR( "NEW YORK", 80 )
cCountry := PadR( "USA", 80 )


(no google.fmg) ... ON INIT FOPENACTIVEX(cStreet, cCity, cCountry)


(na função fOpenActivex)
Na linha do nome da função, adicione as variáveis onde irão receber como argumentos vinda do fmg do main.
Ficando assim:
Static Procedure fOpenActivex(cStreet, cCity, cCountry)

Remova:
Local cStreet := PadR( "BROADWAY 500", 80 )
Local cCity := PadR( "NEW YORK", 80 )
Local cCountry := PadR( "USA", 80 )

Obs.: Se você não conseguir alterar o fmg (pode editar com o Notepad++ mesmo) coloque então o conteúdo do fmg dentro do prg. Senão souber dá um toque.
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Avatar do usuário
billy1943
Usuário Nível 4
Usuário Nível 4
Mensagens: 570
Registrado em: 12 Mai 2009 17:33
Localização: Bauru-SP

Compilar exemplo do Minigui

Mensagem por billy1943 »

Baixei a versão 2.2.8 do Minigui , mas continua dando erro no final da compilação, pelo DOS, com a mensagem:
"O sistema não pode encontrar o caminho especificado."

C Compile error"
Usando a IDE do Minigui e pelo Compile.Bat, apesar de informar OK no final não gera o executável.

Pelo Hbmk2, o que aparece é:
****
hbmk2: Processing environment options: -comp=bcc
hbmk2: Compiling...
hbmk2[google]: Error: Running C/C++ compiler. -1
bcc32.exe -c -q -CP437 -d -O2 -OS -Ov -Oc -Oi -6 -tW -tWM -w -Q -w-sig- -n.hbmk\win\bcc -Ic:\minigui\harbour\include -Ic:\minigui\include -IC:\MINIGUI\SAMPLES\ADVANCED\GOOGLE~1 -IC:\MiniGUI\SAMPLES\Advanced\GoogleMaps .hbmk\win\bcc\google.c

****
Failure!
A minha versão da BCC55 é de 27/06/2000. Tem alguma versão mais recente ?
O bom do computador é que ele resolve os problemas, sem nunca levantar nenhum.
Hoje atuo mais com Clipper 52E, e um pouquinho com XHarbour.
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Compilar exemplo do Minigui

Mensagem por asimoes »

Billy,

Verifica em variáveis de ambiente se você tem setado:

MG_CMP=HARBOUR
MG_BCC-D:\BORLAND\BCC55 ou o caminho onde está instalado.
MG_ROOT=D:\MINIGUI ou o caminho onde está instalado a minigui.

Isto é importante para compilar os samples

Se for usar o HBMK2

Eu utilizo esta bat para compilar meus programas em minigui (exemplo)
@echo off
SET PATH=%PATH%;D:\BORLAND\BCC58\BIN
SET HB_COMPILER=bcc
D:\MINIGUI\HARBOUR\BIN\HBMK2 MEUPROGRAMA.HBP -jobs=%NUMBER_OF_PROCESSORS%

No hbp (exemplo)

Código: Selecionar todos

# ---------------------------
# Nome do Executável
# ---------------------------
-omeuprograma
# ---------------------------
# Bibliotecas
# xhb deve ser depois de hbole
# ---------------------------
-lminigui
-ltsbrowse
-lpropgrid
-lminiprint
-lhbprinter 
-lgtgui
# Libs opcionais:
-lhbct
-lhbnf
-lhbwin
-lhbole
-lxhb
-lharupdf
-llibhpdf
-lhbzebra
-lhbnetio
-llibpng
# ---------------------------
# Caminho dos Includes
# ---------------------------

-incpath=d:\minigui\harbour\include;
-incpath=d:\minigui\include;

# ---------------------------
# Caminho das Libs da MiniGui
# ---------------------------

-Ld:\minigui\lib

# ---------------------------
# Outros Parâmetros
# ---------------------------
-workdir=.\OBJ\
-gtgui
-head=full
-n
-dVERSAO_DE_TESTE1
-dVERSAO_DE_TESTE2
-warn=no
-inc
#-rebuild
#-icon=.\IMG\PRINT.ICO
#-icon=clock.ico
# ---------------------------
# Prg(s) e Rc(s)
# ---------------------------
meuprograma.prg
minhasrotinas.c
d:\minigui\resources\miniprint.rc
d:\minigui\resources\minigui.rc
d:\minigui\resources\hbprinter.rc
meuprograma.rc
# ---------------------------
# Fim
# ---------------------------
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
billy1943
Usuário Nível 4
Usuário Nível 4
Mensagens: 570
Registrado em: 12 Mai 2009 17:33
Localização: Bauru-SP

Compilar exemplo do Minigui

Mensagem por billy1943 »

OK. Simôes !

Compilei através do HBMK2 fazendo um misto do .BAT mais o .HBP.

Deu certo, somente tive de retirar das LIBs opcionais a HARUPDF e LIBPNG, pois não as disponho.

Ao Pablo César:

Mexi um pouquinho no exemplo adequando-o ao meu propósito.
Mas para isso gostaria da ajuda do Pablo César, pois apesar de fazer as alterações colocando os parâmetros na Procedure Main e na fOpenActivex, deu erro em tempo de execução.

Alterei também o .FMG trocando as propriedades nas mensagens em inglês mas não sei se isso causaria erro em execução

Veja o trecho em que fiz as alterações no Google.PRG:

Código: Selecionar todos

*-----------------------------------------------------------------------------*
PROCEDURE Main(cStreet,cCity,cCountry)
*-----------------------------------------------------------------------------*

if pcount() == 0  
   cStreet  := PadR( "BROADWAY 500", 80 )
   cCity    := PadR( "NEW YORK", 80 )
   cCountry := PadR( "USA", 80 )
endif

   LOAD WINDOW GOOGLE

   GOOGLE.Center()
   GOOGLE.Activate()

RETURN


*-----------------------------------------------------------------------------*
Static Procedure fOpenActivex(cStreet,cCity,cCountry)
*-----------------------------------------------------------------------------*
 //  Local cStreet := PadR( "BROADWAY 500", 80 )
 //  Local cCity := PadR( "NEW YORK", 80 )
 //  Local cCountry := PadR( "USA", 80 )

   GOOGLE.TEXT_1.VALUE := cStreet
   GOOGLE.TEXT_2.VALUE := cCity
   GOOGLE.TEXT_3.VALUE := cCountry

   oWActiveX := TActiveX():New( "GOOGLE", "Shell.Explorer.2" , 0 , 0 ,;
                GetProperty( "GOOGLE" , "width" ) - 8 , GetProperty( "GOOGLE" , "height" ) - 150 )
   oActiveX := oWActiveX:Load()

   SHOW( cStreet, cCity, cCountry )

Return
O bom do computador é que ele resolve os problemas, sem nunca levantar nenhum.
Hoje atuo mais com Clipper 52E, e um pouquinho com XHarbour.
Avatar do usuário
billy1943
Usuário Nível 4
Usuário Nível 4
Mensagens: 570
Registrado em: 12 Mai 2009 17:33
Localização: Bauru-SP

Compilar exemplo do Minigui

Mensagem por billy1943 »

Coloco novamente o Google.Prg do exemplo \minigui\samples\advanced\googlemaps, onde fiz as seguintes alterações:

1. Coloquei como parâmetros as variáveis xStreet, xCity e xCountry
2. Defini como private as variáveis cStreet, cCity e cCountry
3. Fiz o teste em que se os parâmetros não forem informados o sistema assume valores fixos

O sistema compilou normalmente e está dando erro de execução na linha 68 na primeira linha dentro da função
Show ( cStreet, cCity, cCountry):


cHtml = StrTran( cHtml, "<<STREET>>", AllTrim( cStreet ) )

Tentei debugar pelas instruções do Simões do tópico abaixo, mas não tive sucesso, deu muitos erros por falta de funções usadas na rotina TaxPrg.Prg

https://pctoledo.org/forum/viewto ... 45&t=14588

Código: Selecionar todos

SET PROCEDURE TO "TAxPrg.prg"

#include "minigui.ch"

#define OLECMDID_PRINT 6
#define OLECMDID_PRINTPREVIEW 7
#define OLECMDEXECOPT_DODEFAULT 0

STATIC  oActiveX
STATIC  oWActiveX

*-----------------------------------------------------------------------------*
PROCEDURE Main(xStreet,xCity,xCountry)
*-----------------------------------------------------------------------------*
private cStreet, cCity, cCountry

if xStreet == NIL .or. xCity == NIL .or. xCountry <> NIL
   cStreet  := PadR( "BROADWAY 500", 80 )
   cCity    := PadR( "NEW YORK", 80 )
   cCountry := PadR( "USA", 80 )
else
   cStreet  := padr(xStreet,80)
   cCity    := padr(xCity,80)
   cCountry := padr(xCountry,80)   
endif
   
   LOAD WINDOW GOOGLE
   GOOGLE.Center()
   GOOGLE.Activate()

RETURN


*-----------------------------------------------------------------------------*
Static Procedure fOpenActivex(cStreet,cCity,cCountry)
*-----------------------------------------------------------------------------*
   
   GOOGLE.TEXT_1.VALUE := cStreet
   GOOGLE.TEXT_2.VALUE := cCity
   GOOGLE.TEXT_3.VALUE := cCountry

   oWActiveX := TActiveX():New( "GOOGLE", "Shell.Explorer.2" , 0 , 0 ,;
                GetProperty( "GOOGLE" , "width" ) - 8 , GetProperty( "GOOGLE" , "height" ) - 150 )
   oActiveX := oWActiveX:Load()

   SHOW( cStreet, cCity, cCountry )    

Return


*-----------------------------------------------------------------------------*
PROCEDURE SEARCH()
*-----------------------------------------------------------------------------*
   Local cStreet  := GOOGLE.TEXT_1.VALUE
   Local cCity    := GOOGLE.TEXT_2.VALUE
   Local cCountry := GOOGLE.TEXT_3.VALUE

   SHOW(cStreet, cCity, cCountry )    

RETURN


*-----------------------------------------------------------------------------*
Function Show( cStreet, cCity, cCountry )
*-----------------------------------------------------------------------------*
   Local cHtml := MemoRead( "gmap.html" )

   cHtml = StrTran( cHtml, "<<STREET>>", AllTrim( cStreet ) )
   cHtml = StrTran( cHtml, "<<CITY>>", AllTrim( cCity ) )
   cHtml = StrTran( cHtml, "<<COUNTRY>>", AllTrim( cCountry ) )

   MemoWrit( "temp.html", cHtml )

   oActiveX:Navigate( CurDrive() + ":\" + CurDir() + "\temp.html" )

RETURN NIL


*-----------------------------------------------------------------------------*
Static Function fCloseActivex()
*-----------------------------------------------------------------------------*

   IF VALTYPE(oWActivex) <> "U" .AND. VALTYPE(oActivex) <> "U"
      oWActiveX:Release()
   ENDIF

RETURN NIL


*-----------------------------------------------------------------------------*
Static Procedure fPrint(lPreview)
*-----------------------------------------------------------------------------*

   If Valtype(oWActiveX) <> "U"
      If lPreview
         oActiveX:ExecWB( OLECMDID_PRINTPREVIEW, OLECMDEXECOPT_DODEFAULT )
      Else
         oActiveX:ExecWB( OLECMDID_PRINT, OLECMDEXECOPT_DODEFAULT )
      EndIf
   EndIf

Return
O bom do computador é que ele resolve os problemas, sem nunca levantar nenhum.
Hoje atuo mais com Clipper 52E, e um pouquinho com XHarbour.
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Compilar exemplo do Minigui

Mensagem por asimoes »

Billy,

Tenta usar este TaxPrg.prg

Um pequeno exemplo de como eu uso:
Veja a função Show() do fonte VWBOLETO.PRG

Código: Selecionar todos

FUNCTION Show()
*-----------------------------------------------------------------------------*
//oActiveX:Navigate( CurDrive() + ":\" + CurDir() + "\boleto\"+cArqHTML)
   oActiveX:Navigate( 'www.google.com.br')   
RETURN Nil
VWBOLETO.FMG

Código: Selecionar todos

*HMGS-MINIGUI-IDE Two-Way Form Designer Generated Code
*OPEN SOURCE PROJECT 2005-2008 Walter Formigoni http://sourceforge.net/projects/hmgs-minigui/

DEFINE WINDOW TEMPLATE AT 0 , 0 WIDTH 1100 HEIGHT 640 TITLE "Visualização do Boleto" MODAL NOSIZE ON INIT FOPENACTIVEX() ON RELEASE FCLOSEACTIVEX()

   DEFINE BUTTON Button_1
           ROW    560
           COL    450
           WIDTH  100
           HEIGHT 28
           ACTION fPrint(.t.)
           CAPTION "I&mprimir"
     END BUTTON  
     
    DEFINE BUTTON Button_2
           ROW    560
           COL    600
           WIDTH  100
           HEIGHT 28
           ACTION VWBOLETO.RELEASE
           CAPTION "S&air"
     END BUTTON  

END WINDOW
VWBOLETO.PRG

Código: Selecionar todos

/*
Configuração Internet Explorer:

Margens:

Superior: 18
Inferior: 4
Esquerda: 4
Direita : 8

Superior          : 21,59
Inferior          : 4,83
Esquerda          : 6,01
Direita           : 6,18
Papel             : A4
Reduzir para caber: Sim
Retrato           : Sim 

*/
#include "minigui.ch"

#define OLECMDID_PRINT 6
#define OLECMDID_PRINTPREVIEW 7
#define OLECMDEXECOPT_DODEFAULT 0

STATIC  oActiveX
STATIC  oWActiveX

*-----------------------------------------------------------------------------*
FUNCTION ExibirBoleto()
*-----------------------------------------------------------------------------*
PUBLIC oWActiveX
   LOAD WINDOW VWBOLETO
   
   VWBOLETO.Center()

   VWBOLETO.Activate()

RETURN Nil

*-----------------------------------------------------------------------------*
STATIC Procedure fOpenActivex()
*-----------------------------------------------------------------------------*

   oWActiveX := TActiveX():New( "VWBOLETO", "Shell.Explorer.2" , 0 , 0 ,;
                GetProperty( "VWBOLETO" , "width" ) - 8 , GetProperty( "VWBOLETO" , "height" ) - 150 )
   
   oActiveX := oWActiveX:Load()

   SHOW()

RETURN Nil

*-----------------------------------------------------------------------------*
FUNCTION Show()
*-----------------------------------------------------------------------------*
   //oActiveX:Navigate( CurDrive() + ":\" + CurDir() + "\boleto\"+cArqHTML)
   oActiveX:Navigate( 'www.google.com.br')   
RETURN Nil


*-----------------------------------------------------------------------------*
STATIC FUNCTION fCloseActivex()
*-----------------------------------------------------------------------------*

   IF VALTYPE(oWActivex) <> "U" .AND. VALTYPE(oActivex) <> "U"
      //oWActiveX:Release()
   ENDIF

RETURN Nil

*-----------------------------------------------------------------------------*
STATIC PROCEDURE fPrint(lPreview)
*-----------------------------------------------------------------------------*

   If Valtype(oWActiveX) <> "U"
      If lPreview
         oActiveX:ExecWB( OLECMDID_PRINTPREVIEW, OLECMDEXECOPT_DODEFAULT )
      Else
         oActiveX:ExecWB( OLECMDID_PRINT, OLECMDEXECOPT_DODEFAULT )
      EndIf
   EndIf

RETURN Nil
TaxPrg.prg

Código: Selecionar todos

#include "hbclass.ch"
#include "hbcompat.ch"


#ifndef __XHARBOUR__
   #xcommand TRY                => bError := errorBlock( {|oError| break( oError ) } ) ;;
                                   BEGIN SEQUENCE
   #xcommand CATCH [<!oError!>] => errorBlock( bError ) ;;
                                   RECOVER [USING <oError>] <-oError-> ;;
                                   errorBlock( bError )
#endif

CLASS TActiveX
   DATA oOle
   DATA hWnd
   DATA cWindowName
   DATA cProgId
   DATA nRow
   DATA nCol
   DATA nWidth
   DATA nHeight
   DATA nOldWinWidth
   DATA nOldWinHeight
   DATA bHide INIT .F.
   METHOD New( cWindowName, cProgId , nRow , nCol , nWidth , nHeight )
   METHOD Load()
   METHOD ReSize( nRow , nCol , nWidth , nHeight )
   METHOD Hide()
   METHOD Show()
   METHOD Release()
   METHOD Refresh()
   METHOD Adjust()
   METHOD GetRow()
   METHOD GetCol()
   METHOD GetWidth()
   METHOD GetHeight()
ENDCLASS

METHOD New( cWindowName , cProgId , nRow , nCol , nWidth , nHeight ) CLASS TActiveX
   if( empty( nRow )    , nRow    := 0 , )
   if( empty( nCol )    , nCol    := 0 , )
   if( empty( nWidth )  , nWidth  := GetProperty( cWindowName , "width" ) , )
   if( empty( nHeight ) , nHeight := GetProperty( cWindowName , "Height" ) , )
   ::nRow := nRow
   ::nCol := nCol
   ::nWidth := nWidth
   ::nHeight := nHeight
   ::cWindowName := cWindowName
   ::cProgId := cProgId
   ::nOldWinWidth := GetProperty( cWindowName , "width" )
   ::nOldWinHeight := GetProperty( cWindowName , "Height" )
Return Self

METHOD Load() CLASS TActiveX
   local oError, bError
   local nHandle := GetFormHandle(::cWindowName)
   local xObjeto
   local OCX_Error := 0
   AtlAxWinInit()
   ::hWnd := CreateWindowEx( nHandle, ::cProgId )
   MoveWindow( ::hWnd , ::nCol , ::nRow , ::nWidth , ::nHeight , .t. )
   xObjeto := AtlAxGetDisp( ::hWnd )

   TRY
      ::oOle := CreateObject( xObjeto )
   CATCH
      MsgInfo( oError:description )
   END
RETURN ::oOle

METHOD ReSize( nRow , nCol , nWidth , nHeight ) CLASS TActiveX
   if !::bHide
      MoveWindow( ::hWnd , nCol , nRow , nWidth , nHeight , .t. )
   endif
   ::nRow := nRow
   ::nCol := nCol
   ::nWidth := nWidth
   ::nHeight := nHeight
   ::nOldWinWidth := GetProperty( ::cWindowName , "width" )
   ::nOldWinHeight := GetProperty( ::cWindowName , "Height" )
RETURN .T.

METHOD Adjust() CLASS TActiveX
   Local nAuxRight , nAuxBottom
   nAuxRight := ( ::nOldWinWidth - ( ::nWidth + ::nCol ) )
   nAuxBottom := ( ::nOldWinHeight - ( ::nHeight + ::nRow ) )
   MoveWindow( ::hWnd , ::nCol , ::nRow , GetProperty( ::cWindowName , "width" ) - ::nCol - nAuxRight , GetProperty( ::cWindowName , "height" ) - ::nRow - nAuxBottom , .t. )
   ::nWidth := GetProperty( ::cWindowName , "width" ) - ::nCol - nAuxRight
   ::nHeight := GetProperty( ::cWindowName , "height" ) - ::nRow - nAuxBottom
   ::nOldWinWidth := GetProperty( ::cWindowName , "width" )
   ::nOldWinHeight := GetProperty( ::cWindowName , "Height" )
RETURN .T.

METHOD GetRow() CLASS TActiveX
RETURN ::nRow

METHOD GetCol() CLASS TActiveX
RETURN ::nCol

METHOD GetWidth() CLASS TActiveX
RETURN ::nWidth

METHOD GetHeight() CLASS TActiveX
RETURN ::nHeight

METHOD Hide() CLASS TActiveX
   MoveWindow( ::hWnd , 0 , 0 , 0 , 0 , .t. )
   ::bHide := .T.
RETURN .T.

METHOD Show() CLASS TActiveX
   MoveWindow( ::hWnd , ::nCol , ::nRow , ::nWidth , ::nHeight , .t. )
   ::bHide := .F.
RETURN .T.

METHOD Release() CLASS TActiveX
   DestroyWindow( ::hWnd )
   AtlAxWinEnd()
RETURN .T.

METHOD Refresh() CLASS TActiveX
   ::Hide()
   ::Show()
RETURN .T.


#pragma BEGINDUMP

#include <windows.h>
#include <commctrl.h>
#include <hbapi.h>
#include <hbvm.h>
#include <hbstack.h>

typedef HRESULT ( WINAPI *LPAtlAxWinInit )    ( void );
typedef HRESULT ( WINAPI *LPAtlAxGetControl ) ( HWND hwnd, IUnknown** unk );

HMODULE hAtl = NULL;
LPAtlAxWinInit    AtlAxWinInit;
LPAtlAxGetControl AtlAxGetControl;

static void _Ax_Init( void )
{
   if( ! hAtl )
   {
      hAtl = LoadLibrary( "Atl.Dll" );
      AtlAxWinInit    = ( LPAtlAxWinInit )    GetProcAddress( hAtl, "AtlAxWinInit" );
      AtlAxGetControl = ( LPAtlAxGetControl ) GetProcAddress( hAtl, "AtlAxGetControl" );
      ( AtlAxWinInit )();
   }
}

HB_FUNC( ATLAXWININIT )
{
   _Ax_Init();
}

HB_FUNC( ATLAXWINEND )
{
   if( hAtl )
      FreeLibrary( hAtl );
}

HB_FUNC( ATLAXGETDISP ) // hWnd -> pDisp
{
   IUnknown *pUnk;
   IDispatch *pDisp;
   _Ax_Init();
   AtlAxGetControl( (HWND)hb_parnl( 1 ), &pUnk );
   pUnk->lpVtbl->QueryInterface( pUnk, &IID_IDispatch, ( void ** ) &pDisp );
   hb_retnl( (LONG)pDisp );
}

HB_FUNC_STATIC( CREATEWINDOWEX ) // hWnd, cProgId -> hActiveXWnd
{
   HWND hControl;
   hControl = CreateWindowEx( 0, "AtlAxWin", hb_parc( 2 ),
              WS_VISIBLE|WS_CHILD, 0, 0, 0, 0, (HWND)hb_parnl( 1 ), 0, 0, NULL );
   hb_retnl( (LONG) hControl );
}

#pragma ENDDUMP
Veja o exemplo:
Imagem
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Compilar exemplo do Minigui

Mensagem por asimoes »

Billy,

Segue exemplo de uso activex + debug
Anexos
EXEMPLO.zip
(830.64 KiB) Baixado 314 vezes
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
billy1943
Usuário Nível 4
Usuário Nível 4
Mensagens: 570
Registrado em: 12 Mai 2009 17:33
Localização: Bauru-SP

Compilar exemplo do Minigui

Mensagem por billy1943 »

Olá Simôes

Agradeço ao amigo todo o empenho em solucionar as dúvidas para começar a utilizar um exemplo do Minigui, que aparentemente simples, está no grupo ADVANCED:

- peguei tudo que você encaminhou no zipado, mudei o TaxPrg.PRG, etc.
- compilei OK e o executável funciona perfeitamente
- ao executar o meu sistema em Clipper o foco é passado para o sistema Windows, entra normalmente mas os dados enviados
como parâmetros não entram e são colocados os padrões default do sistema em Minigui (BroadWay 500, New York e USA)
- aparentemente os parâmetros enviados estão sendo ignorados

Eu uso a seguinte forma no Clipper:

Código: Selecionar todos

   if f_resp == "L"  // opção para localizar o enderêço pelos dados (end_cli, cid_cli e uf_cli)
        xtelin  := savescreen() 
        xparam1 := upper(alltrim(end_cli))
        xparam2 := upper(alltrim(cid_cli)) + "-" + upper(uf_cli)
        xparam3 := "BRASIL"
        cfile   := ("google.exe(&xparam1.,&xparam2.,&xparam3")
        msg("Cfile:" + cfile)
        inkey(0)
        msg("") 
        run0(cfile)   // a função RUN0 está abaixo descrita
        restscreen(,,,,xtelin)
        loop
     endif
A função RUN0 está aqui

Código: Selecionar todos

FUNCTION run0( cfile )
local crun := ""
local cscr := ""

if ! empty( cfile )

   cscr := savescreen()
   crun := cfile

   if upper( getenv("OS") ) == "WINDOWS_NT"
      crun := " C:\Windows\System32\cmd /c " + crun
      @ 24,0 say crun
      ! (crun) 
   else
      @ 24,0 say crun 
      run start /max &saida.
   endif

   restscreen( cscr )

endif

return nil
O bom do computador é que ele resolve os problemas, sem nunca levantar nenhum.
Hoje atuo mais com Clipper 52E, e um pouquinho com XHarbour.
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Compilar exemplo do Minigui

Mensagem por asimoes »

Billy o nome do seu programa em minigui é google.exe?
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Compilar exemplo do Minigui

Mensagem por asimoes »

Os parâmetros para consulta de endereço no googlemaps são:

cFrom1:="NEW YORK"
cFrom2:="NEW YORK"
cTo1 :="NEW YORK"
cTo2 :="NEW YORK"
cFrom3:="BROADWAY, 500"
cTo3:="BROADWAY, 500"

cWeb:="http://maps.google.com.br/maps?q=de address " + ;
AllTrim( cFrom3 ) + " " + AllTrim( cFrom2 ) + " " + AllTrim( cFrom1 ) + " para address " + ;
AllTrim( cTo3 ) + " " + AllTrim( cTo2 ) + " " + AllTrim( cTo1 )
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
billy1943
Usuário Nível 4
Usuário Nível 4
Mensagens: 570
Registrado em: 12 Mai 2009 17:33
Localização: Bauru-SP

Compilar exemplo do Minigui

Mensagem por billy1943 »

O exemplo do MInigui gera um aplicativo do Google diferente do Maps.Google, onde são solicitados dois endereços, o de origem e o chegada. É o excelente "Como Chegar" que eu já incorporei aos meus sistemas há bastante tempo.

Já no exemplo que estou tentando incluir nas minhas rotinas é solicitado apenas um endereço, tanto que o título da janela é Map Location, e possibilita três formas de localização/apresentação.

Os dados iniciais são os mesmos que você informa (BroadWay 500, New York, USA) mas a finalidade que quero contar é outra.

Quanto ao título do programa utilizo o nome do programa principal (Google.PRG).

Simões, você acha que pode ser que na internet, ao entrar no Map Location, ele não aceite nada como parâmetros ?
Inclusive se você pesquisar "Map Location" o link oferecido é o Maps.Google e por conseguinte o "Como chegar".

Neste mesmo tópico, dias atrás, o Pablo César acenou com a possibilidade de se fazer isso usando esta rotina, que é o que estou tentando, entrar na rotina com dados de meus sistemas.

Reconheço que programas que usam a internet, nem sempre abrem todas as portas para os usuários, basta ver os sistemas da Receita que antes facilitavam a coleta de informações de forma automática e agora as restringem bastante, obrigando a digitação dos dados
às vezes extensos, além do "capcha" para prevenir sistemas automatizados de pesquisa.
O bom do computador é que ele resolve os problemas, sem nunca levantar nenhum.
Hoje atuo mais com Clipper 52E, e um pouquinho com XHarbour.
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Compilar exemplo do Minigui

Mensagem por asimoes »

O Problema dos parâmetros é o espaço entre eles.

Neste exemplo: BROADWAY 500 NEW YORK USA

BROADWAY é um parâmetro 500 outro NEW outro YORK outro e USA outro .

Então o fonte google.prg na função Main() fiz esta modificação:

Fiz uma bat para testar, veja que inclui um "" nos parâmetros para considerar como um valor de parâmetro onde tenha espaços e na função Main.

bat web.bat para testar:

google "BROADWAY 500" "NEW_YORK" "USA"

Remover ou comentar em fOpenActivex:
//Local cStreet := PadR( "BROADWAY 500", 80 )
//Local cCity := PadR( "NEW YORK", 80 )
//Local cCountry := PadR( "USA", 80 )

Google.prg (pasta advanced)

Código: Selecionar todos

*-----------------------------------------------------------------------------*
PROCEDURE Main( ... )
*-----------------------------------------------------------------------------*
PUBLIC cStreet, cCity, cCountry, aParams, cParam

   aParams:=hb_AParams()

   cStreet  :=PadR(aParams[1],80)
   cCity     :=PadR(aParams[2],80)
   cCountry:=PadR(aParams[3],80)
   
   LOAD WINDOW GOOGLE

   GOOGLE.Center()
   GOOGLE.Activate()

RETURN
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
billy1943
Usuário Nível 4
Usuário Nível 4
Mensagens: 570
Registrado em: 12 Mai 2009 17:33
Localização: Bauru-SP

Compilar exemplo do Minigui

Mensagem por billy1943 »

Oi, Simões:

Realmente os espaços podiam estar causando problemas, mas não ficou somente neles não.
Coloquei em uso a função StrTran na rotina que cria e manda os dados e parece que os dados seriam aceitos.

Fiz tudo como você indicou mas tô ficando pirado !

Esse tal do Minigui não funciona igual ao Clipper quanto às matrizes ?

O parâmetro APARAMS que entra na procedure Main é uma matriz unidimensional de 3 elementos, obtida da seguinte forma.
em uma pequena rotina em Clipper, exposta abaixo:

Rotina Teste, onde são informados os 3 parametros necessários:

Código: Selecionar todos

PROCEDURE teste
private aparam := {}
xparam1 := "Rua Visconde do Rio Branco 602              "
xparam2 := "Dracena-SP                                            "
xparam3 := "Brasil                                    "
xparam1 := strtran(alltrim(xparam1)," ","_")
xparam2 := strtran(alltrim(xparam2)," ","_")
xparam3 := strtran(alltrim(xparam3)," ","_")
clear screen
@ 10,5 say xparam1
@ 11,5 say xparam2
@ 12,5 say xparam3
aadd(aparam,(xparam1))
aadd(aparam,(xparam2))
aadd(aparam,(xparam3))
cfile   := "d:\afaban\google.exe(&aparam.)"
@ 13,5 say "P1: " + aparam[1]
@ 14,5 say "P2: " + aparam[2]
@ 15,5 say "P3: " + aparam[3]
inkey(0)
run0(cfile)
return
Abaixo coloco um trecho do Google.PRG, onde está ocorrendo o erro.

Google.PRG

Código: Selecionar todos

*-----------------------------------------------------------------------------*
PROCEDURE Main(aparams)
*-----------------------------------------------------------------------------*
   PUBLIC cStreet, cCity, cCountry 

   nlen     := len(aparams) 
   msginfo("Tamanho de Aparams: " + str(nlen,2)) 
   cStreet  := aparams[1]
   cCity    := aparams[2]
   cCountry := aparams[3]

.....
A função MsgInfo está está informando 1 para o tamanho da matriz unidimensional !!!
Como é possível 1 se foram adicionados à matriz 3 elementos, vide função AADD na primeira rotina.
Logo em seguida o erro ocorre na linha seguinte:

Cstreet = aparams[1], dando o seguinte erro:

ERRO BASE/1068 array access,

que, segundo o NG quer dizer que não está sendo informado um array !

Tentei também a fórmula que você indicou usando a função HB_aparams mas também não passou. dá erro de array.

Será que não é devido ao fato de algo estar modificando o conteúdo da matriz Aparams ?

Percebi também que quando eu mandava os 3 elementos em separados o MInigui estava juntando os mesmos e formando uma só variável, como se eu informasse para o endereço a junção da rua, cidade e o país !

Amanhã vou testar um outro jeito de passar os 3 elementos ...
O bom do computador é que ele resolve os problemas, sem nunca levantar nenhum.
Hoje atuo mais com Clipper 52E, e um pouquinho com XHarbour.
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Compilar exemplo do Minigui

Mensagem por asimoes »

Billy,

O google não entende o valor que você está passando do clipper para ele como matriz, somente caracter.
Isso só iria funcionar em uma função dentro do google.prg os parâmetros chamados de fora da aplicação são todos do tipo caracter.

prog.exe 1 teste

ex. Main(xParametro1,xParametro2)

a:=Val(xParametro1)
b:=xParametro2

No Google.prg daquela forma que eu indiquei irá funcionar.

No seu programa clipper

Código: Selecionar todos

FUNCTION MAIN
cParametro1:="BROADWAY 500"
cParametro2:="NEW YORK"
cParametro3:="USA"
cRun:='GOOGLE.EXE '+'"'+cParametro1+'"'+' '+'"'+cParametro2+'"'+' '+'"'+cParametro3+'"'
! &cRun.
RETURN Nil
No GOOGLE.PRG

Código: Selecionar todos

*-----------------------------------------------------------------------------*
PROCEDURE Main( ... )
*-----------------------------------------------------------------------------*
PUBLIC cStreet, cCity, cCountry, aParams, cParam

   aParams:=hb_AParams()

   cStreet :=PadR(aParams[1],80)
   cCity   :=PadR(aParams[2],80)
   cCountry:=PadR(aParams[3],80)
   
   LOAD WINDOW GOOGLE

   GOOGLE.Center()
   GOOGLE.Activate()

RETURN
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Responder