Página 2 de 2

Fechar aplicações Windows chamadas pelo Clipper

Enviado: 04 Out 2014 16:17
por rochinha
Amiguinhos,

Complementando nosso amigo Jairo Maia, ele está correto no que tange o fechamento do objeto originalizador.

Geralmente os objetos possuem um terminador para finalizá-los, sendo objeto:Close(), objeto:Exit(), objeto:Quit() e objeto:End() sendo que para finalizar um objeto InternetExplorer.Application usa-se o objeto:End().

Meu exemplo de uso desta API:

Código: Selecionar todos

*
* ----------------------------------------------------------------
*
FUNCTION OLEIExplorer(oIEWnd,cEndereco,lMDI,lPrint)
   LOCAL oIE
   Default lMDI := .t., lPrint := .f.
   Default cEndereco := "http://www.guiamais.com.br/ruas/"
   oIE:=TOleAuto():New( "InternetExplorer.Application" )
   oIE:Visible   := .T.
   oIE:ToolBar   := iif( lMDI = NIL, .f., .t. )
   oIE:StatusBar := .F.
   oIE:Top       := 055
   oIE:Left      := 001
   oIE:Height    := 600
   oIE:Width     := 800
   oIE:MenuBar   := .F.
   oIE:Navigate( cEndereco )
   // Se lPrint = .t. é forçada a impressão do conteúdo
   if lPrint
      oIE:ExecWB(6,0,0,0) // Imprimir
   endif
   // Exemplo de salvamento do conteúdo 
   //oIE:Document.execCommand("saveas")
   oIE:End()
   if lMDI
      DEFINE WINDOW oIEWnd MDI
      ACTIVATE WINDOW oIEWnd ON INIT FindIE(oIEWnd) MAXIMIZED
   else
      DEFINE WINDOW oIEWnd TITLE cEndereco MDICHILD STYLE nOr(WS_CHILD,DS_SYSMODAL,DS_MODALFRAME) 
      ACTIVATE WINDOW oIEWnd ON INIT FindIE(oIEWnd) MAXIMIZED
   endif
   SysRefresh()
   RETURN

Function FindIE(oWIn)
   local lCaptured, hIE
   hIE := FindWindow("IEFrame")
   lCaptured := ( hIE > 0 )
   IF lCaptured
      SetParent(hIE, oWin:hWnd)
      SysRefresh()
   ELSE
      MsgStop('IE nao capturado. ative-o')
   ENDIF 
   return nil
A função FindIE() captura e embute na Window de sua aplicação. As funções SysRefresh() e MsgStop() são específicas do Fivewin.

Fechar aplicações Windows chamadas pelo Clipper

Enviado: 05 Out 2014 06:14
por Jairo Maia
Olá Billy,

Bom que resolveu, e vou dar outra opinião sobre você perder a acentuação:

Na minha opinião, está faltando no programa xHarbour você setar o ambiente em português. Algo como:

Código: Selecionar todos

#include "inkey.ch"

REQUEST HB_LANG_PT
REQUEST HB_CODEPAGE_PT850
	 
***************
FUNCTION main(rua, cidade, uf)
***************

HB_LANGSELECT('PT')
HB_SETCODEPAGE('PT850')

// restante da função
Tente assim e veja se vai funcionar. Pode ser que seja isso...

E caso ainda não funcione, tente depois da chamada ao programa em xHarbour reconfigurar o ambiente no Clipper colocando apenas:

Código: Selecionar todos

HB_LANGSELECT('PT')
HB_SETCODEPAGE('PT850')

Fechar aplicações Windows chamadas pelo Clipper

Enviado: 05 Out 2014 16:19
por billy1943
Olá Jairo Maia,

Realmente, as aplicações em Windows estão mudando a página de 850(Brasil-PT), que é a inicial, para a página 437, que é dos USA.

Apesar de eu ter incluído as linhas no fonte da aplicação em XHarbour, em algum lugar quando fecho não só essas aplicações geradas pelo XHarbour, como se eu usar
qualquer aplicação do Windows (Word, NodosImp, etc.), no retorno ao DOS, a página já está mudada.


Assim vou ter de incluir no meu sistema em Clipper o seguinte comando, que espero, acabe com o problema de "bagunçar" toda a acentuação de tela:
"mode con codepage select=850"

Ao menos, achamos a causa.

Novamente, obrigado.