Compilar exemplo do Minigui
Moderador: Moderadores
Compilar exemplo do Minigui
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 ?
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.
Hoje atuo mais com Clipper 52E, e um pouquinho com XHarbour.
- Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná
Compilar exemplo do Minigui
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
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.
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
Apenas utilizei o Compile.bat que vem na pasta do exemplo.billy1943 escreveu:Por favor, se alguém conseguiu fazê-lo, informe-me como e o que precisou alterar.
No seu Main, bastaria colocar Main os parâmetros cStreet, cCity e cCountry que a sua vez chamará a função fOpenActivex() no INIT.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 ?
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.
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.
Compilar exemplo do Minigui
Baixei a versão 2.2.8 do Minigui , mas continua dando erro no final da compilação, pelo DOS, com a mensagem:
Pelo Hbmk2, o que aparece é:
Usando a IDE do Minigui e pelo Compile.Bat, apesar de informar OK no final não gera o executável."O sistema não pode encontrar o caminho especificado."
C Compile error"
Pelo Hbmk2, o que aparece é:
A minha versão da BCC55 é de 27/06/2000. Tem alguma versão mais recente ?****
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!
O bom do computador é que ele resolve os problemas, sem nunca levantar nenhum.
Hoje atuo mais com Clipper 52E, e um pouquinho com XHarbour.
Hoje atuo mais com Clipper 52E, e um pouquinho com XHarbour.
Compilar exemplo do Minigui
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)
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)
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)
Compilar exemplo do Minigui
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:
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.
Hoje atuo mais com Clipper 52E, e um pouquinho com XHarbour.
Compilar exemplo do Minigui
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
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.
Hoje atuo mais com Clipper 52E, e um pouquinho com XHarbour.
Compilar exemplo do Minigui
Billy,
Tenta usar este TaxPrg.prg
Um pequeno exemplo de como eu uso:
Veja a função Show() do fonte VWBOLETO.PRG
VWBOLETO.FMG
VWBOLETO.PRG
TaxPrg.prg
Veja o exemplo:

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

►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)
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)
Compilar exemplo do Minigui
Billy,
Segue exemplo de uso activex + debug
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)
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)
Compilar exemplo do Minigui
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:
A função RUN0 está aqui
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
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.
Hoje atuo mais com Clipper 52E, e um pouquinho com XHarbour.
Compilar exemplo do Minigui
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)
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)
Compilar exemplo do Minigui
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 )
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)
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)
Compilar exemplo do Minigui
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.
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.
Hoje atuo mais com Clipper 52E, e um pouquinho com XHarbour.
Compilar exemplo do Minigui
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)
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)
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)
Compilar exemplo do Minigui
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:
Abaixo coloco um trecho do Google.PRG, onde está ocorrendo o erro.
Google.PRG
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 ...
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
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]
.....
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.
Hoje atuo mais com Clipper 52E, e um pouquinho com XHarbour.
Compilar exemplo do Minigui
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
No GOOGLE.PRG
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
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)
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)

