Print Preview com WVW

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

angeiras
Usuário Nível 3
Usuário Nível 3
Mensagens: 134
Registrado em: 21 Nov 2005 20:53
Localização: Olinda/PE

Print Preview com WVW

Mensagem por angeiras »

Olá,

Já faz algum tempo uso um print preview que adaptei de várias idéias que li nos foruns xHarbour. Basicamente usa o HBEdit para criar o preview. Dei uma incrementada para poder imprimir em qualquer impressora instalada, gravar em vários formatos ( TXT, DOC, XLS e PDF ) e movimentação entre as páginas. Ainda falta alguns acertos, mas já dá pra usar sem nenhum problema.

Criei um exemplo completo, que pode ser baixado em :

http://www.4shared.com/file/183564422/a ... eview.html

Espero que seja útil.

M.Angeiras
Clipper 5.2e + sixcdx + catools + nanfor
xHarbour 1.0.0 + gtwvw / xHarbour 1.2.1 + Fivewin
anacatacombs
Membro Master
Membro Master
Mensagens: 472
Registrado em: 12 Jul 2005 16:53
Localização: Cianorte-Paraná
Contato:

Re: Print Preview com WVW

Mensagem por anacatacombs »

Chic demais.
Parabéns..
Com certeza será muito útil.
lugab
Colaborador
Colaborador
Mensagens: 843
Registrado em: 19 Mai 2009 15:58

Re: Print Preview com WVW

Mensagem por lugab »

Angeiras, O visual desse preview ta ótimo mesmo.

Um dia eu chego lá
lugab
angeiras
Usuário Nível 3
Usuário Nível 3
Mensagens: 134
Registrado em: 21 Nov 2005 20:53
Localização: Olinda/PE

Re: Print Preview com WVW

Mensagem por angeiras »

Ola lugab,

O exemplo do menu/tela de cadastro esta em

http://www.4shared.com/file/187036322/6 ... menus.html

[]s
M.Angeiras
Clipper 5.2e + sixcdx + catools + nanfor
xHarbour 1.0.0 + gtwvw / xHarbour 1.2.1 + Fivewin
lugab
Colaborador
Colaborador
Mensagens: 843
Registrado em: 19 Mai 2009 15:58

Re: Print Preview com WVW

Mensagem por lugab »

Obrigado, Angeiras.

Adora, sim, eu chego lá.

Gabriel
lugab
Avatar do usuário
janio
Colaborador
Colaborador
Mensagens: 1846
Registrado em: 06 Jul 2004 07:43
Localização: UBAJARA - CE

Re: Print Preview com WVW

Mensagem por janio »

Angeiras,

Como vc faz para fazer esses box's nos gets??

Janio
fui...
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
angeiras
Usuário Nível 3
Usuário Nível 3
Mensagens: 134
Registrado em: 21 Nov 2005 20:53
Localização: Olinda/PE

Re: Print Preview com WVW

Mensagem por angeiras »

Olá Janio,

Eu fiz uma pequena alteração na função wvw_drawboxget(). Segue abaixo a função com as linhas alteradas ( as linhas comendatas são as originais ).

Código: Selecionar todos

HB_FUNC( WVW_DRAWBOXGET )
{
   USHORT usWinNum = WVW_WHICH_WINDOW;
   POINT xy = { 0 };
   POINT yz = { 0 };
   WIN_DATA * pWindowData;
   int   iTop, iLeft, iBottom, iRight;
   int   iOffTop, iOffLeft, iOffBottom, iOffRight;
   USHORT usRow, usCol, usLen;

   pWindowData = s_pWindows[ usWinNum ];

   usRow = hb_parni( 2 );
   usCol = hb_parni( 3 );
   usLen = hb_parni( 4 );

   iOffTop    = !ISNIL( 5 ) ? hb_parni( 5,1 ) :  0 ;
   iOffLeft   = !ISNIL( 5 ) ? hb_parni( 5,2 ) :  0 ;
   iOffBottom = !ISNIL( 5 ) ? hb_parni( 5,3 ) :  0 ;
   iOffRight  = !ISNIL( 5 ) ? hb_parni( 5,4 ) :  0;

   if (s_bMainCoordMode)
   {
     hb_wvw_HBFUNCPrologue(usWinNum, &usRow, &usCol, NULL, NULL);
   }

   xy = hb_wvw_gtGetXYFromColRow( pWindowData, usCol, usRow );
   iTop  = xy.y - 1 + iOffTop;
   iLeft = xy.x - 1 + iOffLeft;

   yz = hb_wvw_gtGetXYFromColRow( pWindowData, usCol + usLen, usRow + 1 );

   yz.y -= pWindowData->byLineSpacing;

   iBottom = yz.y + iOffBottom;
   iRight  = yz.x + iOffRight;

// SelectObject( pWindowData->hdc, s_sApp.penBlack );
   SelectObject( pWindowData->hdc, s_sApp.penDarkGray );

   MoveToEx( pWindowData->hdc, iLeft, iTop, NULL );

   LineTo( pWindowData->hdc, iRight, iTop );

   MoveToEx( pWindowData->hdc, iLeft, iTop, NULL );

   LineTo( pWindowData->hdc, iLeft, iBottom );

/*   SelectObject( pWindowData->hdc, s_sApp.penDarkGray );

   MoveToEx( pWindowData->hdc, iLeft-1, iTop-1, NULL );

   LineTo( pWindowData->hdc, iRight+1, iTop-1 );

   MoveToEx( pWindowData->hdc, iLeft-1, iTop-1, NULL );

   LineTo( pWindowData->hdc, iLeft-1, iBottom+1 );
*/

   /* GTWVW also draws right and bottom outer with single white line */

// SelectObject( pWindowData->hdc, s_sApp.penWhite );
   SelectObject( pWindowData->hdc, s_sApp.penDarkGray );

/*   MoveToEx( pWindowData->hdc, iRight+1, iTop-1, NULL );
   LineTo( pWindowData->hdc, iRight+1, iBottom+1+1 );

   MoveToEx( pWindowData->hdc, iLeft-1, iBottom+1, NULL );
   LineTo( pWindowData->hdc, iRight+1, iBottom+1 ); 
*/

   MoveToEx( pWindowData->hdc, iLeft, iBottom, NULL );
   LineTo( pWindowData->hdc, iRight, iBottom );

   MoveToEx( pWindowData->hdc, iRight, iTop, NULL );
   LineTo( pWindowData->hdc, iRight, iBottom+1 );

   hb_retl( TRUE );
}
Lembrando que ainda uso o xHarbour 1.0.0.

[]s
M.Angeiras
Clipper 5.2e + sixcdx + catools + nanfor
xHarbour 1.0.0 + gtwvw / xHarbour 1.2.1 + Fivewin
Avatar do usuário
janio
Colaborador
Colaborador
Mensagens: 1846
Registrado em: 06 Jul 2004 07:43
Localização: UBAJARA - CE

Re: Print Preview com WVW

Mensagem por janio »

Tentei incluir esse código no meu PRG acrescentando apenas aquelas linhas para introdução de codigo c em prg, porém, deu uma serie de erros na compilação. Nem compilou.

Janio
fui...
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
angeiras
Usuário Nível 3
Usuário Nível 3
Mensagens: 134
Registrado em: 21 Nov 2005 20:53
Localização: Olinda/PE

Re: Print Preview com WVW

Mensagem por angeiras »

Olá Janio,

Voce tem que alterar diretamente na gtwvw.c e recompilar a lib.

[]s
M.Angeiras
Clipper 5.2e + sixcdx + catools + nanfor
xHarbour 1.0.0 + gtwvw / xHarbour 1.2.1 + Fivewin
Avatar do usuário
janio
Colaborador
Colaborador
Mensagens: 1846
Registrado em: 06 Jul 2004 07:43
Localização: UBAJARA - CE

Re: Print Preview com WVW

Mensagem por janio »

Angeiras,

O exemplo que vc disponibilizou "menu", acompanha uma lib de 15.05.2009. A minha que tenho aqui ainda é de 2007. Mesmo compilando o sistema com essa lib sua (mais recente), que veio no pacote 'menu', não funcionou.

Enfim, qual é o pulo do gato?

Janio
fui...
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
frazato
Usuário Nível 3
Usuário Nível 3
Mensagens: 219
Registrado em: 08 Jul 2004 07:45

Re: Print Preview com WVW

Mensagem por frazato »

Bom dia!
Muito Legal mesmo essa borda em volta do Get, tenho algumas duvidas?

1 - Vcoê utiliza esta função no lugar do comando RED ?
READ_GETS( nCursor, nWin )
Vc poderia disponibilizar o fonte desta funcao?


2 - Onde esta esta função para pegar as cores do Windows?

GetSysColor( 15 )

Obrigado

Frazato
angeiras
Usuário Nível 3
Usuário Nível 3
Mensagens: 134
Registrado em: 21 Nov 2005 20:53
Localização: Olinda/PE

Re: Print Preview com WVW

Mensagem por angeiras »

Olá,

É, tem algumas funções de apoio que uso pra deixar o box do get daquele jeito. Vou separar as funções e postar aqui mais tarde ( agora tô "correndo sem parar" ).

[]s
M.Angeiras
Clipper 5.2e + sixcdx + catools + nanfor
xHarbour 1.0.0 + gtwvw / xHarbour 1.2.1 + Fivewin
prow
Usuário Nível 1
Usuário Nível 1
Mensagens: 7
Registrado em: 30 Abr 2008 11:52
Localização: Belo Horizonte-MG
Contato:

Re: Print Preview com WVW

Mensagem por prow »

A opcao de gerar em Excel esta dando error nao declarado a variavel _acols, declarei ela com _acols:={}, mas nao gera nada no excel.
sera que o arquivo tem que efetuar um append nele primeiro, favor analisar Grato.
Avatar do usuário
janio
Colaborador
Colaborador
Mensagens: 1846
Registrado em: 06 Jul 2004 07:43
Localização: UBAJARA - CE

Re: Print Preview com WVW

Mensagem por janio »

É, tem algumas funções de apoio que uso pra deixar o box do get daquele jeito. Vou separar as funções e postar aqui mais tarde ( agora tô "correndo sem parar" )
still waiting!

Ainda estou aguardando!
Nota de Moderação:
por Toledo: O presente tópico foi editado para traduzir a mensagem enviada.
Atenção: estamos no Brasil, evite postar mensagens em inglês.
fui...
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
angeiras
Usuário Nível 3
Usuário Nível 3
Mensagens: 134
Registrado em: 21 Nov 2005 20:53
Localização: Olinda/PE

Re: Print Preview com WVW

Mensagem por angeiras »

Olá Janio,

Desculpe a demora em responder. Mas vamos ao que interessa :

A GTWVW não tem processo de redesenho automático de alguns elementos gráficos. Sendo assim, para imagens, boxes, labels, etc. precisamos "lembrar" a GTWVW para efetuar o redesenho quando a tela for minimizada/restaurada ou alguma coisa ficar por cima da tela anterior.

Dessa forma, temos que definir algumas funções para informar a GTWVW o quê e quando redesenhar. Eu faço da seguinte maneira :

Defino no início do meu programa uma variável pública que vai guardar todos os elementos gráficos que preciso para redesenhar :

Código: Selecionar todos

public _aobjetos := {}
Defino também a taxa para atualização do redesenho automático :

Código: Selecionar todos

wvw_SetPaintRefresh(0)
e uma função para iniciar e guardar os elementos gráficos :

Código: Selecionar todos

*********************************
FUNCTION LIMPAOBJETOS( nWindow )
*********************************
   while len( _aObjetos ) < nWindow+1
      aadd( _aObjetos, {} )
   enddo
   _aObjetos[ nWindow+1 ] := {}
RETURN .T.

***************************************
FUNCTION ADDOBJETOS( nWindow, bAction )
***************************************
   aadd( _aObjetos[ nWindow+1 ], bAction )
RETURN .T.
Quando preciso de guardar um box, por exemplo, inicializo a posição da janela criada e guardo o box como um code block

Código: Selecionar todos

nWin2 := AbreJanela("Confirmação de Sangria dos Caixas", 06, 01, 30, 96)
LimpaObjetos(nWin2)
AddObjetos( nWin2, {|_win| wvw_drawroundrect( _win, 04,01,21,94, {-6,-2,+4,+2}, 10, 10 ) } )
A função AbreJanela() é só um jeito diferente de chamar a função wvw_nOpenWindow().

Os gets, são apenas boxes contornando o espaço de edição reservado da variável. Precisamos então definir uma forma de, após montar toda a tela de get, desenhar os boxes e informar a GTWVW que eles tem que ser redesenhados. Dessa forma, criei um define chamado READ_GETS, que voce usa assim :

Código: Selecionar todos

@ 10, 01 say "Codigo do cliente :" get mcodcli picture "9999"
@ 12, 01 say "      Razao Social  :" get mrazao picture "@!"
@ 14, 01 say "   Nome Fantasia :" get mfantasia picture "@!"
READ_GETS( nCursor, nWin )

nCursor = Estilo do cursor, geralmente lido por setcursor()
nWin = Numero da janela retornado pela wvw_nOpenWindow()
e o define :

Código: Selecionar todos

#define READ_GETS( c, w )           AddObjetos( w, {|nWindow| x := nWindow, aEval( GetList, {|oGet| WVW_DrawBoxGet( x, oGet:Row, oGet:Col, Len( Transform( oGet:VarGet(), oGet:Picture ) ) ) } ) } ) ;;
                                    setcursor(1); read; setcursor(c)
Lembre-se que dessa forma, a variável getlist deve ser, no mínimo, private.

Espero que tenha ficado claro.

Qualquer dúvida, estou a disposição
Clipper 5.2e + sixcdx + catools + nanfor
xHarbour 1.0.0 + gtwvw / xHarbour 1.2.1 + Fivewin
Responder