Clipper On Line • Ver Tópico - Compilar exemplo do Minigui

Compilar exemplo do Minigui

Projeto MiniGui - Biblioteca visual para Harbour/xHarbour

Moderador: Moderadores

 

Compilar exemplo do Minigui

Mensagempor billy1943 » 31 Out 2013 17:18

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 de usuário

billy1943
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 570
Data de registro: 12 Mai 2009 17:33
Cidade/Estado: Bauru-SP
Curtiu: 1 vez
Mens.Curtidas: 21 vezes

Compilar exemplo do Minigui

Mensagempor Pablo César » 31 Out 2013 19:00

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 de usuário

Pablo César
Usuário Nível 7

Usuário Nível 7
 
Mensagens: 5312
Data de registro: 31 Mai 2006 10:22
Cidade/Estado: Curitiba - Paraná
Curtiu: 142 vezes
Mens.Curtidas: 152 vezes

Compilar exemplo do Minigui

Mensagempor billy1943 » 31 Out 2013 21:15

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 de usuário

billy1943
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 570
Data de registro: 12 Mai 2009 17:33
Cidade/Estado: Bauru-SP
Curtiu: 1 vez
Mens.Curtidas: 21 vezes

Compilar exemplo do Minigui

Mensagempor asimoes » 01 Nov 2013 03:41

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)
# ---------------------------
# 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 de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes

Compilar exemplo do Minigui

Mensagempor billy1943 » 01 Nov 2013 08:37

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:

*-----------------------------------------------------------------------------*
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 de usuário

billy1943
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 570
Data de registro: 12 Mai 2009 17:33
Cidade/Estado: Bauru-SP
Curtiu: 1 vez
Mens.Curtidas: 21 vezes

Compilar exemplo do Minigui

Mensagempor billy1943 » 02 Nov 2013 16:28

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

http://www.pctoledo.com.br/forum/viewtopic.php?f=45&t=14588

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 de usuário

billy1943
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 570
Data de registro: 12 Mai 2009 17:33
Cidade/Estado: Bauru-SP
Curtiu: 1 vez
Mens.Curtidas: 21 vezes

Compilar exemplo do Minigui

Mensagempor asimoes » 02 Nov 2013 21:20

Billy,

Tenta usar este TaxPrg.prg

Um pequeno exemplo de como eu uso:
Veja a função Show() do fonte VWBOLETO.PRG
FUNCTION Show()
*-----------------------------------------------------------------------------*
//oActiveX:Navigate( CurDrive() + ":\" + CurDir() + "\boleto\"+cArqHTML)
   oActiveX:Navigate( 'www.google.com.br')   
RETURN Nil


VWBOLETO.FMG
*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
/*
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
#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 de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes

Compilar exemplo do Minigui

Mensagempor asimoes » 03 Nov 2013 08:08

Billy,

Segue exemplo de uso activex + debug
Anexos
EXEMPLO.zip
(830.64 KiB) Baixado 138 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 de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes

Compilar exemplo do Minigui

Mensagempor billy1943 » 03 Nov 2013 10:20

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:

   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
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 de usuário

billy1943
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 570
Data de registro: 12 Mai 2009 17:33
Cidade/Estado: Bauru-SP
Curtiu: 1 vez
Mens.Curtidas: 21 vezes

Compilar exemplo do Minigui

Mensagempor asimoes » 03 Nov 2013 10:37

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 de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes

Compilar exemplo do Minigui

Mensagempor asimoes » 03 Nov 2013 10:49

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 de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes

Compilar exemplo do Minigui

Mensagempor billy1943 » 04 Nov 2013 10:01

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 de usuário

billy1943
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 570
Data de registro: 12 Mai 2009 17:33
Cidade/Estado: Bauru-SP
Curtiu: 1 vez
Mens.Curtidas: 21 vezes

Compilar exemplo do Minigui

Mensagempor asimoes » 04 Nov 2013 12:21

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)
*-----------------------------------------------------------------------------*
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 de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes

Compilar exemplo do Minigui

Mensagempor billy1943 » 04 Nov 2013 21:11

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:
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
*-----------------------------------------------------------------------------*
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 de usuário

billy1943
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 570
Data de registro: 12 Mai 2009 17:33
Cidade/Estado: Bauru-SP
Curtiu: 1 vez
Mens.Curtidas: 21 vezes

Compilar exemplo do Minigui

Mensagempor asimoes » 05 Nov 2013 05:48

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
FUNCTION MAIN
cParametro1:="BROADWAY 500"
cParametro2:="NEW YORK"
cParametro3:="USA"
cRun:='GOOGLE.EXE '+'"'+cParametro1+'"'+' '+'"'+cParametro2+'"'+' '+'"'+cParametro3+'"'
! &cRun.
RETURN Nil

No GOOGLE.PRG
*-----------------------------------------------------------------------------*
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 de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes

Próximo



Retornar para MiniGui

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 6 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro