Olá amigos. Meu nome é Yugi. Antes de tudo quero parabenizar a todos. Quando ainda não tinha me registrado pude aprender muito com as mensagens de todos vcs e agora espero aprender cada vez mais.
Bem, eu sou clippeiro a algum tempo e agora estou entusiasmado com o harbour. Contudo, pude observar que para imprimir em harbour é necessário fazer muitos "malabarismos". Não consegui imprimir em um sistema que fiz utilizando a minigui 2.5.2 do roberto lopez em modo console. Os comandos da miniprint não funcionam neste modo e nem os comandos do clipper como SET PRINTER TO... também utilizei somente o harbour com o BCC55 mapar linkar mas os comandos do clipper também não funcionaram, mesmo em uma impressora matricial plugada em LPT1.
Gostaria que alguém me desse alguma dica de como fazer o aplicativo compilado com harbour em modo console imprimir em qualquer impressora, sem alterar muito o código da aplicação.
Outra coisa que estive observando é o seguinte:
_________________________________________
Compilei o seguinte codigo com a minigui 2.5.2 (com o harbour 1.0.ORC2 Intl. que já vem junto com ela). O compilador utilizado é o GCC (também já está no pacote). Ele funcionou perfeitamente. reparem que eu estava tentando fazer uma função de impressão simples utilizando os comandos de impressão da minigui. Segue abaixo o código: (alguns caracteres aparecem bagunçados porque o arquivo foi criado com EDIT, em anexo segue o arquivo a.prg e acao.dbf utilizados)
/*
----------------------------------------------------------------
Biblioteca de fun‡äes para impressÆo com HARBOUR-MINIGUI
----------------------------------------------------------------
Objetivo....: Imprimir relat¢rios de texto sem complica‡Æo.
Muito semelhante … sintaxe do Clipper!!!
Obs.........: Todas as configura‡äes de margens e espa‡amentos
sÆo v lidas para papel A4!
O n£mero m ximo de colunas na p gina ‚ de 80.
A fonte de impressÆo ‚ 'Couriew New', tamanho 11.
Limita‡äes..: preciso concatenar todas as strings que serÆo
impressas em uma mesma linha.
Programador.: Yugi Tumro
Data........: 25/05/2007
*/
#include "minigui.ch"
Function Main()
PARAMETERS lNomeArq // Parametro da linha de comando!!!
if lnomearq == NIL
lnomearq := " "
endif
* Abaixo temos as vari veis de configura‡Æo de impressÆo:
XTIPO := 80
DO CASE
CASE XTIPO == 80
*-------------------------------------------------------------------------------
* ATENۂO: ESTA CONFIGURAۂO PARA 80 COLUNAS!!!
*-------------------------------------------------------------------------------
PUBLIC MARGEM_SUPERIOR := 3 // 3 linhas na margem superior
PUBLIC MARGEM_ESQUERDA := 12 // 1.2 cm
PUBLIC TOTAL_LINHAS := 60 // Total de linhas de texto por p gina
// O n£mero m ximo de linhas ‚ 66
PUBLIC ENTRE_LINHAS := 4.5 // o espa‡o entre as linhas
// 45 mm ‚ o valor padrÆo
PUBLIC SALTO_PAGINA := .T. // Considera o salto de p ginas!
XSIZETAM := 11
*-------------------------------------------------------------------------------
CASE XTIPO == 132
*-------------------------------------------------------------------------------
* ATENۂO: ESTA CONFIGURAۂO PARA 132 COLUNAS!!!
*-------------------------------------------------------------------------------
PUBLIC MARGEM_SUPERIOR := 5 // 5 linhas na margem superior
PUBLIC MARGEM_ESQUERDA := 11 // 11 cm
PUBLIC TOTAL_LINHAS := 83 // Total de linhas de texto por p gina
// O n£mero m ximo de linhas ‚ 93
PUBLIC ENTRE_LINHAS := 3.0 // o espa‡o entre as linhas
// 30 mm ‚ o valor padrÆo
PUBLIC SALTO_PAGINA := .T. // Considera o salto de p ginas!
XSIZETAM := 7.5
*-------------------------------------------------------------------------------
CASE XTIPO == 110
*-------------------------------------------------------------------------------
* ATENۂO: ESTA CONFIGURAۂO PARA 110 COLUNAS!!!
*-------------------------------------------------------------------------------
PUBLIC MARGEM_SUPERIOR := 4 // 4 linhas na margem superior
PUBLIC MARGEM_ESQUERDA := 11.5 // 11.5 cm
PUBLIC TOTAL_LINHAS := 70 // Total de linhas de texto por p gina
// O n£mero m ximo de linhas ‚ 78
PUBLIC ENTRE_LINHAS := 3.8 // o espa‡o entre as linhas
// 30 mm ‚ o valor padrÆo
PUBLIC SALTO_PAGINA := .T. // Considera o salto de p ginas!
XSIZETAM := 8.5
*-------------------------------------------------------------------------------
ENDCASE
SET LANGUAGE TO PORTUGUESE
/* ABAIXO O MAPA DAS CORES SIMPLES:
YELLOW , PINK , RED , FUCHSIA , BROWN , ORANGE , GREEN
PURPLE , BLACK , BLUE
*/
DEFINE WINDOW Win_1 ;
AT 0,0 ;
WIDTH 300 ;
HEIGHT 150 ;
TITLE Winletra('Aguarde, Imprimindo...') ;
NOSYSMENU;
ON INIT IMPRIMIR(lnomearq);
MAIN
/*
DEFINE MAIN MENU
DEFINE POPUP 'Iniciar'
MENUITEM 'Imprimir Testes' ACTION Imprimir()
END POPUP
END MENU
*/
END WINDOW
If !MsgYesNo(Winletra("Imprimir Arquivo " + Upper(lNomeArq) + "?"),"Imprimir")
RELEASE ALL // FECHA PROGRAMA
Return
Endif
CENTER WINDOW Win_1
ACTIVATE WINDOW Win_1
Return
******************************************************************************
Procedure Imprimir(lNomeArq)
Local cPrinter, xlin:=0, clinha:=0, xcol:=0, num:=0, limite:=0
/*
If !MsgYesNo(Winletra("Imprimir Arquivo " + Upper(lNomeArq) + "?"),"Imprimir")
WIN_1.RELEASE // FECHA PROGRAMA
Return
Endif
*/
/*
cPrinter := GetPrinter()
If Empty (cPrinter)
MsgStop(Winletra("NÆo h uma impressora instalada!"),"Erro")
WIN_1.RELEASE // FECHA PROGRAMA
Return
Endif
* Alternativamente:
SELECT PRINTER cPrinter ;
ORIENTATION PRINTER_ORIENT_PORTRAIT ;
PAPERSIZE PRINTER_PAPER_LETTER ;
QUALITY PRINTER_RES_MEDIUM
*/
SELECT PRINTER DEFAULT ;
ORIENTATION PRINTER_ORIENT_PORTRAIT ;
PAPERSIZE PRINTER_PAPER_A4 ;
QUALITY PRINTER_RES_HIGH
*-------------------------------------
* ImpressÆo facilitada com harbour:
*-------------------------------------
LigaPrint() // Ligando a Impressora!
limite := TOTAL_LINHAS+MARGEM_SUPERIOR // Limite da p gina!
xcol := MARGEM_ESQUERDA // Coluna Inicial
* a vari vel clinha indica o limite de linhas da pagina
* e permite efetuar o salto de p ginas conforme est mais abaixo
* Primeira P gina:
IniciaPag(@xlin,@clinha) // Iniciando a P gina!
Print_Linha(@xlin,@clinha,"C")
Print_texto(@xlin,@clinha,"IMPRIMINDO COM HARBOUR","C","N")
Print_Linha(@xlin,@clinha,"T")
Print_texto(@xlin,@clinha,WINLETRA("Alinha … esquerda"),"E","I")
Print_texto(@xlin,@clinha,Winletra("Ao centro"),"C")
Print_texto(@xlin,@clinha,Winletra("Alinha … direita"),"D","NI")
Print_Linha(@xlin,@clinha,"C")
@ Xlin,margem_esquerda PRINT REPLICATE("0123456789",11) FONT "Courier New" SIZE XSIZETAM COLOR RED BOLD
XLIN := XLIN + entre_linhas
use acao
go top
For Num := 1 to 100
* Print_texto(@xlin,@clinha,str(num),,"I",BLUE)
* Print_texto(@xlin,@clinha,REPLICATE("0123456789",13)+("01"),,"N",BLACK)
Print_texto(@xlin,@clinha,ACAO->CODIGO + " " + ACAO->ACAO,,"N",BLACK)
SKIP
* Aqui abaixo temos o controle para salto de p ginas
if clinha > LIMITE
Pulapag()
IniciaPag(@xlin,@clinha) // Iniciando a P gina!
endif
next
close all
PulaPag() // Pula P gina ao final
DesligaPrint() // Desligando a Impressora
msginfo(winletra("ImpressÆo terminada!"),winletra("Conclu¡do"))
WIN_1.RELEASE // FECHA PROGRAMA
Return
************************************************************************************
PROCEDURE Print_texto(lin,varlin,texto,posic,form,xcor)
Local lTam:=0, formato:=" ",lct:=0
* OBS: a vari vel varlin ‚ um parƒmetro passado por referencia
* destina-se a contar as linhas para o salto de p gina!
* o mesmo acontece com a vari vel lin (por referencia!)
IF SALTO_PAGINA // Considera ou nÆo o salto de p ginas!!!
varlin := varlin + 1
ENDIF
ltam:=len(alltrim(texto)) // Lendo tamanho da string
if posic <> NIL
posic := upper(posic)
else
posic := "E"
Endif
* posic indica impressÆo … esquerda "E"
* centralizada "C"
* … direita "D"
If posic <> "C" .and. posic <> "E" .and. posic <> "D"
posic:= "E"
Endif
/*
form indica a formata‡Æo das letras:
Negrito "N"
It lico "I"
Negrito & Italico "NI"
*/
* Controle de formata‡Æo da letra:
If form == NIL .or. len(form) > 2
form := " "
else
form := upper(form)
Endif
* Controle de cores para impressÆo:
If xcor == NIL
xcor := BLACK
Endif
* Verificando posi‡Æo:
Do case
case posic == "C" // Centralizado
texto := Replicate(" ",Int((XTIPO-ltam)/2)) + texto
case posic == "D" // … direita
texto := replicate(" ",XTIPO-ltam) + texto
Endcase
* Imprimindo:
Do case
case form == "N"
@ lin,MARGEM_ESQUERDA PRINT texto FONT "Courier New" SIZE XSIZETAM COLOR xcor BOLD
case form == "I"
@ lin,MARGEM_ESQUERDA PRINT texto FONT "Courier New" SIZE XSIZETAM COLOR xcor ITALIC
case form == "NI"
@ lin,MARGEM_ESQUERDA PRINT texto FONT "Courier New" SIZE XSIZETAM COLOR xcor BOLD ITALIC
otherwise
@ lin,MARGEM_ESQUERDA PRINT texto FONT "Courier New" SIZE XSIZETAM COLOR xcor
Endcase
* Reposicionando o ponteiro de impressÆo:
lin:= lin + ENTRE_LINHAS
Return NIL
******************************************************************************
Procedure Print_linha(lin,varlin,tipo,xcor) // Imprime uma Linha na Impressora
* OBS: a vari vel varlin ‚ um parƒmetro passado por referencia
* destina-se a contar as linhas para o salto de p gina!
* o mesmo acontece com a vari vel lin (por referencia!)
IF SALTO_PAGINA // Considera ou nÆo o salto de p ginas!!!
varlin := varlin + 1
ENDIF
* vari vel tipo indica:
* linha ininterrupta "C"
* linha tracejada "T"
if tipo == NIL
tipo := "C"
elseif len(tipo) = 1
tipo := upper(tipo)
else
tipo := "C"
Endif
If xcor == NIL
xcor := BLACK
Endif
If tipo == "T"
@ Lin,MARGEM_ESQUERDA PRINT replicate("-",XTIPO) FONT "Courier New" COLOR xcor SIZE XSIZETAM
else
@ Lin,MARGEM_ESQUERDA PRINT replicate(" ",XTIPO) FONT "Courier New" COLOR xcor SIZE XSIZETAM STRIKEOUT
Endif
* Reposicionando o ponteiro de impressÆo:
lin:= lin + ENTRE_LINHAS
Return NIL
**********************************************************************************
* ---------------------------------------------------------------------------
* Abaixo temos as quatro fun‡äes b sicas para controle da impressora
* ---------------------------------------------------------------------------
Procedure LigaPrint() // Iniciando a impressora!
START PRINTDOC
Return
Procedure DesligaPrint() // Desligando a impressora!
END PRINTDOC
Return
Procedure IniciaPag(xlin,clinha) // Iniciando uma p gina!
START PRINTPAGE
clinha:= MARGEM_SUPERIOR+1 // Contador de linhas
xlin :=0
xlin := xlin+(MARGEM_SUPERIOR*ENTRE_LINHAS) // Linha inicial da p gina
Return
Procedure PulaPag() // Efetuando o salto de p gina!
END PRINTPAGE
Return
*******************************************************************************
/*
ÛßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÛ
Û 014 = WINLETRA(palavra) Û
Û OBJETIVO......: Converte a tabela de acentos do MS-DOS para o padrÆo do Û
Û WINDOWS. étil quando se vai imprimir acentos ou gerar Û
Û relat¢rios que possam ser lidos por editores de texto Û
Û do WINDOWS. Û
ÛÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÛ
*/
Function WINLETRA(palavra)
Local lnum:=0, lf1:= " Š‹Œä¢•”“£—–¤ì˜‡Çµ·Ž¶ÔÓÒÖÞØ×åàã™âéëšê¥íY€§¦",;
lf2:= "áèïîõóòöôúùüûñýÿçÃÁÀÄÂÉÈËÊÍÌÏÎÕÓÒÖÔÚÙÜÛÑÝYǺª", ltam:=0,;
ltamp:=0,;
lf3:={ CHR(198), CHR(133), CHR(132), CHR(131), CHR(130),;
CHR(137), CHR(136), CHR(161), CHR(141) },;
lf4:={ CHR(227), CHR(224), CHR(228), CHR(226), CHR(233),;
CHR(235), CHR(234), CHR(237), CHR(236) }
ltamp:=len(palavra) // Tamanho da palavra
ltam:= len(lf1)
For lnum:= 1 to ltam
palavra := StrTran(palavra,Substr(lf1,lnum,1),;
Substr(lf2,lnum,1))
Next
* Controle especial para caracteres que conflitam com o MS-DOS.
For lct:= 1 to 9
For lnum:= 1 to len(palavra)
if Substr(Palavra,lnum,1) == lf3[lct]
Palavra:= Stuff(palavra,lnum,1,lf4[lct])
Endif
Next
Next
Return(palavra)
********************************************************************************
Como vi que a maioria de vcs usam a minigui 1.5 extended edition eu resolvi compilar o codigo com ela também.
Mas aí apareceram os seguintes erros:
a.prg(155) Error E0030 Syntax error: "syntax error at 'PRINTER'"
a.prg(182) Error E0030 Syntax error: "syntax error at '@'"
a.prg(269) Error E0030 Syntax error: "syntax error at '@'"
a.prg(271) Error E0030 Syntax error: "syntax error at '@'"
a.prg(273) Error E0030 Syntax error: "syntax error at '@'"
a.prg(275) Error E0030 Syntax error: "syntax error at '@'"
a.prg(312) Error E0030 Syntax error: "syntax error at '@'"
a.prg(314) Error E0030 Syntax error: "syntax error at '@'"
a.prg(327) Error E0030 Syntax error: "syntax error at 'PRINTDOC'"
a.prg(331) Error E0030 Syntax error: "syntax error at 'END'"
a.prg(335) Error E0030 Syntax error: "syntax error at 'PRINTPAGE'"
a.prg(343) Error E0030 Syntax error: "syntax error at 'END'"
Compile error.
Pressione qualquer tecla para continuar. . .
*************************************************************************
Eu não mexi em nada no arquivo e ele simplemente não compilou. Alguém de vcs sabe o motivo?
Grato desde já por tudo.
Yugi.
Impressão com MiniGui - Fatos Curiosos!!!
Moderador: Moderadores
Impressão com MiniGui - Fatos Curiosos!!!
- Anexos
-
acao.txt- favor renomear acao.txt acao.dbf é que o forum não permite o envio de arquivos DBF.
- (24.01 KiB) Baixado 156 vezes
-
A.PRG- fonte postado na mensagem - para edit do ms-dos
- (12.8 KiB) Baixado 186 vezes
Re: IMPRESSÃO COM MINIGUI - FATOS CURIOSOS!!!
Quanto a impressão em modo grafico usando miniprint com minigui extended 1.5 eu descobri acidentalmente a razão:
É necessário declarar:
#include "minigui.ch"
#include "miniprint.ch"
se vc não incluir a última linha não compila em minigui extended 1.5. Se vc usa minigui 2.5.2 de roberto lopez não inclua a segunda linha [ #include "miniprint.ch"] pois o pacote minigui 2.5.2 não contém este arquivo mas compila normalmente.
Quanto a impressão em modo console continua a incógnita: qual é o comando de impressão para se imprimir em qualquer impressora (no windows XP)?
Grato,
Yugi.
É necessário declarar:
#include "minigui.ch"
#include "miniprint.ch"
se vc não incluir a última linha não compila em minigui extended 1.5. Se vc usa minigui 2.5.2 de roberto lopez não inclua a segunda linha [ #include "miniprint.ch"] pois o pacote minigui 2.5.2 não contém este arquivo mas compila normalmente.
Quanto a impressão em modo console continua a incógnita: qual é o comando de impressão para se imprimir em qualquer impressora (no windows XP)?
Grato,
Yugi.
-
Hasse
- Usuário Nível 4

- Mensagens: 820
- Registrado em: 19 Out 2004 10:30
- Localização: Jaraguá do Sul - SC
Re: IMPRESSÃO COM MINIGUI - FATOS CURIOSOS!!!
Voce ja tentou usar a Classe Win32prn(), nativa do xHarbour ?
Eu já a uso faz mais de 3 anos, e funciona muito bem. Tem todos os recursos de que necessito.
Veja um exemplo em:
viewtopic.php?f=4&t=6465&p=32060&hilit=+win32prn+win32prn+para+iniciantes#p32060
Eu não testei a impressão via Classe Win32prn() em ambiente gráfico MiniGui, mas até hoje ninguém ainda reportou algum problema do tipo, portanto parto do princípio que ela deve funcionar.
De qualquer forma localizei no meu HD um exemplo para impressão com MiniGui. Também não testei. Segue no Anexo.
Eu já a uso faz mais de 3 anos, e funciona muito bem. Tem todos os recursos de que necessito.
Veja um exemplo em:
viewtopic.php?f=4&t=6465&p=32060&hilit=+win32prn+win32prn+para+iniciantes#p32060
Eu não testei a impressão via Classe Win32prn() em ambiente gráfico MiniGui, mas até hoje ninguém ainda reportou algum problema do tipo, portanto parto do princípio que ela deve funcionar.
De qualquer forma localizei no meu HD um exemplo para impressão com MiniGui. Também não testei. Segue no Anexo.
- Anexos
-
miniprint_list.zip- (2.93 KiB) Baixado 333 vezes
Hasse
CP200 / CP500 / Basic / dBase III / dBase IV / Clipper Summer / RTlink / Exospace.
Clipper 5.3b / Blinker 7.0 / CDX com TAG
xHarbour 1.2.1-6604 / Borland C++ (5.5.1) 32 bit / HBmake.
Harbour 3.2.0dev (r1412121623) / MINGW / HBM2 / MiniGui HMG 3.1.4 / IDE (Roberto Lopez).
"Conheça todas as teorias, domine todas as técnicas, mas, quando tocares uma alma humana, seja apenas outra alma humana." (C.G.Jung)
CP200 / CP500 / Basic / dBase III / dBase IV / Clipper Summer / RTlink / Exospace.
Clipper 5.3b / Blinker 7.0 / CDX com TAG
xHarbour 1.2.1-6604 / Borland C++ (5.5.1) 32 bit / HBmake.
Harbour 3.2.0dev (r1412121623) / MINGW / HBM2 / MiniGui HMG 3.1.4 / IDE (Roberto Lopez).
"Conheça todas as teorias, domine todas as técnicas, mas, quando tocares uma alma humana, seja apenas outra alma humana." (C.G.Jung)
Re: IMPRESSÃO COM MINIGUI - FATOS CURIOSOS!!!
Obrigado pela dica Hasse.
Eu não conseguia compilar a classe win32prn porque estava utilizando harbour e esta classe só faz parte do xharbour.
Vou tentar fazer algumas adaptações no seu código de exemplo para que a impressão se pareça mais com o sistema do clipper. A idéia é emcapsular os objetos em funções e utilizar parãmetros para usá-los. Sabe, eu detesto programação orientada a objetos; sou um fã incondicional da programação estruturada. Ela é rápida para codificar e não tem todos aqueles detalhes chatos.
Outra coisa que aprendi foi o seguinte:
ao utilizar o arquivo de lote compile.bat do diretório \MINIGUI\BATCH para compilar os arquivos é necessário digitar:
compile [nome arquivo] /X /C para copilar em xharbour console e
compile [nome arquivo] /C para copilar em harbour console.
É necessário instalar o xharbour na pasta \xharbour.
Estas são coisas simples mas para o iniciante como eu na linguaguem é uma dor de cabeça.
Obrigado pelas dicas.
Eu não conseguia compilar a classe win32prn porque estava utilizando harbour e esta classe só faz parte do xharbour.
Vou tentar fazer algumas adaptações no seu código de exemplo para que a impressão se pareça mais com o sistema do clipper. A idéia é emcapsular os objetos em funções e utilizar parãmetros para usá-los. Sabe, eu detesto programação orientada a objetos; sou um fã incondicional da programação estruturada. Ela é rápida para codificar e não tem todos aqueles detalhes chatos.
Outra coisa que aprendi foi o seguinte:
ao utilizar o arquivo de lote compile.bat do diretório \MINIGUI\BATCH para compilar os arquivos é necessário digitar:
compile [nome arquivo] /X /C para copilar em xharbour console e
compile [nome arquivo] /C para copilar em harbour console.
É necessário instalar o xharbour na pasta \xharbour.
Estas são coisas simples mas para o iniciante como eu na linguaguem é uma dor de cabeça.
Obrigado pelas dicas.
- sygecom
- Administrador

- Mensagens: 7131
- Registrado em: 21 Jul 2006 10:12
- Localização: Alvorada-RS
- Contato:
Re: IMPRESSÃO COM MINIGUI - FATOS CURIOSOS!!!
Parte da Win32prn já tem no Harbour, basta linkar a 'xhb.lib' que vai compilar o exemplo do Hasse.
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
xHarbour.org + Hwgui + PostgreSql
-
Hasse
- Usuário Nível 4

- Mensagens: 820
- Registrado em: 19 Out 2004 10:30
- Localização: Jaraguá do Sul - SC
Re: IMPRESSÃO COM MINIGUI - FATOS CURIOSOS!!!
Estamos todos no mesmo barco. E, para que ele siga em frente, todos devemos remar no mesmo ritmo e mesma direção.
Portanto, aqui estamos, para ajudar e sermos ajudados.
Bom trabalho.
Portanto, aqui estamos, para ajudar e sermos ajudados.
Bom trabalho.
Hasse
CP200 / CP500 / Basic / dBase III / dBase IV / Clipper Summer / RTlink / Exospace.
Clipper 5.3b / Blinker 7.0 / CDX com TAG
xHarbour 1.2.1-6604 / Borland C++ (5.5.1) 32 bit / HBmake.
Harbour 3.2.0dev (r1412121623) / MINGW / HBM2 / MiniGui HMG 3.1.4 / IDE (Roberto Lopez).
"Conheça todas as teorias, domine todas as técnicas, mas, quando tocares uma alma humana, seja apenas outra alma humana." (C.G.Jung)
CP200 / CP500 / Basic / dBase III / dBase IV / Clipper Summer / RTlink / Exospace.
Clipper 5.3b / Blinker 7.0 / CDX com TAG
xHarbour 1.2.1-6604 / Borland C++ (5.5.1) 32 bit / HBmake.
Harbour 3.2.0dev (r1412121623) / MINGW / HBM2 / MiniGui HMG 3.1.4 / IDE (Roberto Lopez).
"Conheça todas as teorias, domine todas as técnicas, mas, quando tocares uma alma humana, seja apenas outra alma humana." (C.G.Jung)
