Página 1 de 1

Tela de aviso

Enviado: 25 Jan 2007 16:20
por Leandro2C
Caros colegas, quem puder me ajudar: em clipper, por exemplo, quando chamo um relatório grande, o sistema apresenta uma tela de "Aguarde, processando..." p/ o cliente não ficar perdido. Agora no xharbour+minigui, como faria esse mesmo esquema? Botão Imprimir -> essa tela -> relatório. Já tentei ( e olhei no fórum) mas não dá certo.
Obrigado à todos.

Leandro
São Lourenço - MG

Enviado: 25 Jan 2007 22:53
por rochinha
Amiguinho

No Fivewin eu uso MsgRun( "Mensagem", "Titulo", {|| Funcao() } ) fazendo com que a mensagem continue na tela enquanto a funcao() é executada.

MsgRun() é um dialogo padrão do Windows e a MiniGUI talvez de suporte para ele.

Enviado: 26 Jan 2007 07:42
por Leandro2C
Amigo Rochinha,
obrigado pela sua dica, mas infelizmente a função MsgRun é incompatível.
Valeu a intenção! Vou tentando...

Leandro
São Lourenço - MG

Enviado: 22 Jan 2008 17:16
por Poka
Olá a todos

Ja perdi "trocentas horas" tentando colocar uma tela de aviso antes de algum processamento. Em clipper era facil mas na Minigui!.

Todas as funcoes de MSG Minigui param esperando uma tecla.

Se alguem puder me ajudar agradeço.


Poka

Enviado: 22 Jan 2008 19:31
por sygecom
Em Hwgui eu crio um DIALOG e conforme a rotina vai realizando vou atualizando essa Dialog, e no final do relatorio eu finalizo a DIALOG.

Enviado: 22 Jan 2008 21:05
por rochinha
Amiguinhos

A dialog que voce necessitam fazer não é nada complicada pois toda sua estrutura vem diretamente da API do Windows e não depende de MiniGUI ou qualquer outra coisa.

Toda Dialog por padrão tem o intuito de apresentar controles e esperar uma ação para sair, se não me engano são chamadas de Modal(me corrijam!).

As dialogs que podem ficar na tela enquanto outra ação é executada e algo é apresentado nelas como uma barra de progresso ou informações como as telas de splash(este seria o caso) do Acrobat, Photoshop, etc, podemos sacar de um parametro ou dados chamado de NO WAIT, ou seja, a dialog é formada, fica na tela, mas não trava o processamento.

Verifiquem nos exemplos MiniGUI se voces podem colocar STYLEs na formação destas dialogs, pois com eles é possivel inclusive desabilitar os botões MinimizeBox, MaximizeBox, tirar bordas, torna-las invisiveis(NO Brush), etc.

São instrumentos avançados da API, ou seja, usar MiniGUI já é um passo avançado em programação pois a forma de trabalho dela é deixar bem as mão do programador a massa para modelagem.

Como a MiniGUI não trabalha com RCs, acho que hoje sim, pois quando a conheci e tenho até hoje o .PRG da versão 1.0, então o trabalho de manusear STYLEs nas dialogs deverá ser na mão mesmo.

Boa sorte.

Enviado: 23 Jan 2008 00:43
por asimoes
Pessoal,

VocÊS podem usar este recurso:

An image static control can display bitmaps, icons (including animated icons), JPEG, GIF, CUR or enhanced metafiles.


SYNTAX


Standard Window:


@ <nRow> ,<nCol> IMAGE <ControlName>
[ ID <nId> ]
[ OF | PARENT | DIALOG <ParentWindowName> ]
PICTURE <cPictureName>
[ ACTION | ONCLICK | ON CLICK <ActionProcedureName> | <bBlock> ]
[ WIDTH <nWidth> HEIGHT <nHeight> ]
[STRETCH ]
[ WHITEBACKGROUND ]
[ HELPID <nHelpId> ]
[ INVISIBLE ]

No momento da impressão.

O primeiro passo é criar a imagem mensagem.

Espero ter ajudado.

[]´s

Enviado: 23 Jan 2008 01:10
por asimoes
Pessoal,

Vai ai uma dica:

Cria uma mensagem no powerpoint (Aguarde, processando...),
Salva ela como jpg

Na rotina onde você vai fazer a impressão:

depois do define window

ex.:

Código: Selecionar todos

  DEFINE WINDOW fImpressao ;
     AT 0,0 ;
     WIDTH  640;
     HEIGHT 480 ;
     TITLE OA("Impressão do Indice Cronológico") ;
     ICON "SC.ICO";
     MODAL ;
     NOSIZE;
     ON RELEASE Fechar()

     ON KEY ESCAPE ACTION ( fImpressao.Release )

     @095,020 IMAGE Aviso ;
              PICTURE "aguarde.jpg" ;
              WIDTH  700 ;
              HEIGHT 400 ;
              WHITEBACKGROUND

  END WINDOW

  fImpressao.Aviso.Visible:=.F.

  CENTER WINDOW fImpressao

  ACTIVATE WINDOW fImpressao

Na função que é chamada pelo seu botão imprimir

DEFINE FONT "F0" NAME "COURIER NEW" SIZE 12
DEFINE FONT "F1" NAME "COURIER NEW" SIZE 9
DEFINE FONT "F2" NAME "BITSTREAM VERA SANS MONO"  SIZE 12
DEFINE FONT "F3" NAME "BITSTREAM VERA SANS MONO"  SIZE 9

SELECT FONT "F2"

   nMaxLine:=54

   DO CASE
   CASE fImpressao.cbCombo_3.Value = 1
      SET PAGE ORIENTATION DMORIENT_PORTRAIT PAPERSIZE DMPAPER_A4 FONT "F2"
      nMaxLine:=54
   CASE fImpressao.cbCombo_3.Value = 2
      SET PAGE ORIENTATION DMORIENT_PORTRAIT PAPERSIZE DMPAPER_FOLIO FONT "F2"
      nMaxLine:=64
   ENDCASE
   fImpressao.Aviso.Visible:=.T. //Aqui você exibe a sua mensagem personalizada. No final é só colocar o visible:=.f.
Blz.

[]´s

Enviado: 23 Jan 2008 11:52
por Poka
Sygecom e Rochinha, obrigado por responder. Sygecom dei uma olhada no Dialog, parece interessante, mas preciso estudar mais para entender melhor esse comando. Asimoes, fiz uns testes como voce disse, e resolve o problema , vou fazer assim mesmo.

Obrigado a todos.

Um abraço

Poka

Enviado: 24 Jan 2008 16:05
por MARCELOG
Apenas um palpite...
Crie uma window ou dialog do tamanho do alerta que você quer.
coloque as propriedades nosysmenu e center para não aprecer as opções de minimizar, etc. e centralizar a mesma no vídeo.
Coloque um label com os dizeres 'Processando...'
Quando o processamento acabar, coloque um botão neste janela com ok.
Esse botão fecha a janela (release).
Acho que vai funcionar.

MarceloG

Enviado: 24 Jan 2008 22:29
por asimoes
Pessoal,

Acho que um exemplo como eu fiz será bastante apreciado.
Eu gostaria de ver um exemplo usando a window ou dialog.
Vamos lá!

:)Pos

Enviado: 25 Jan 2008 09:19
por MARCELOG
Cria a janela que, após desenhada na tela, efetua o processamento.

DEFINE WINDOW ALERTA ;
AT 000,000 ;
WIDTH 200 HEIGHT 100 ;
TITLE 'ALERTA' ;
NOSYSMENU ;
FONT 'ARIAL' SIZE 09 ;
ON INIT PROCESSANDO()

@ 040,080 LABEL LBL ;
VALUE 'Processando...' ;
WIDTH 120 ;
HEIGHT 30 ;
BOLD ;
FONTCOLOR RED

END WINDOW

CENTER WINDOW USUARIO

ACTIVATE WINDOW USUARIO


FUNCTION/PROCEDURE PROCESSANDO()

Rotina a ser processada...

@ 410,485 BUTTON BTT OF ALERTA ;
CAPTION HB_OEMTOANSI('&Concluído' ) ;
ACTION ALERTA.RELEASE

RETURN (?)

MarceloG

Ps: Não testei.
Dá pra colocar um progressbar na janela e indicar o andamento do processamento ou qualquer outra coisa.

Enviado: 25 Jan 2008 09:46
por asimoes
Pessoal,

Me baseando no exemplo de splashscreen, segue uma adaptação para tela de aviso de processamento.

Código: Selecionar todos

#include "inkey.ch"
#include "common.ch"
#include "FileIO.ch"
#include "minigui.ch"
#include "winprint.ch"

DECLARE WINDOW fPrincipal

FUNCTION SC0301
   PRIVATE aPrinters, aPorts, PRYS:="PIASEK.GIF"

   AbreTabela("C0001",1,"C0001CDX","CN01")
   AbreTabela("C0002",2,"C0002CDX","CI01")
   aStruTemp:=DBSTRUCT()
   TempDBF  := SYS(".DBF")
   AADD(aStruTemp,{"PI","C",1,0})
   DBCREATE((TempDBF),aStruTemp)

   SELECT 3
   NameCDX  := SYS('')
   USE (TempDBF) EXCLUSIVE ALIAS INDICE
   INDEX ON DTOS(DATA) TAG CDXD TO (NameCdx)
   INDEX ON OU01       TAG CDXA TO (NameCdx)
   SET INDEX TO (NameCdx)

   INIT PRINTSYS
        GET PRINTERS TO aPrinters
        GET PORTS TO aPorts
   RELEASE PRINTSYS

   DEFINE WINDOW fImpressao ;
      AT 0,0 ;
      WIDTH  640;
      HEIGHT 480 ;
      TITLE OA("ImpressÆo do Indice Cronol¢gico") ;
      ICON "SC.ICO";
      MODAL ;
      NOSIZE;
      ON RELEASE Fechar()

      ON KEY ESCAPE ACTION ( fImpressao.Release )
      .
      .
      .
      .
      c¢digo

   END WINDOW

   // Sua tela de aviso de processamento //
   DEFINE WINDOW fTelaAviso ;
           AT 0,0 ;
           WIDTH 400 HEIGHT 100 ;
           TITLE '';
           TOPMOST NOCAPTION;
           ON INIT ThisWindow.Hide // Inibe a sua tela aqui e exibe na rotina necess ria com .show

           @ 30,10 LABEL Label_1 ;
           WIDTH 400 HEIGHT 40 ;
           VALUE 'Imprimindo, Aguarde...' ;
           FONT 'Arial' SIZE 24;
           CENTERALIGN

   END WINDOW

   CENTER WINDOW fImpressao
   CENTER WINDOW fTelaAviso

   ACTIVATE WINDOW fTelaAviso, fImpressao


RETURN NIL

STATIC FUNCTION FECHAR
fPrincipal.StatusBar.Item(1):=""
DBCLOSEALL()
RETURN NIL

*--------------------------------------------------------*
PROCEDURE PRINT()
*--------------------------------------------------------*
LOCAL cprn,lprev,lr,lck,i,j,apoly,apoly2

 lr   :=fImpressao.R1.value
 lPrev:=fImpressao.cK1.value

 fPrincipal.StatusBar.Item(1):="Inciando a ImpressÆo..."

 INIT PRINTSYS

 DO CASE
 CASE lR==1
 IF lPrev
     SELECT DEFAULT PREVIEW
 ELSE
     SELECT DEFAULT
 ENDIF
 CASE lR==2
    IF lPrev
       SELECT BY DIALOG PREVIEW
    ELSE
       SELECT BY DIALOG
    ENDIF
 CASE lR==3
    lCk:=fImpressao.L1.VALUE
    IF lCk>0
       cPrn:=aPrinters[lCk]
       IF lPrev
          SELECT PRINTER cPrn PREVIEW
       ELSE
          SELECT PRINTER cPrn
       ENDIF
    ELSE
       MSGEXCLAMATION("NENHUMA IMPRESSORA FOI SELECIONADA","ATENۂO")
       fPrincipal.StatusBar.Item(1):=""
    RETURN
 ENDIF
ENDCASE

IF HBPRNERROR>0
   MSGEXCLAMATION(OA("ERRO NA IMPRESSÇO"),OA("ATEN€ÇO"))
   fPrincipal.StatusBar.Item(1):=""
   RETURN
ENDIF

IF fImpressao.cK2.VALUE
   ENABLE THUMBNAILS
ENDIF

IF fImpressao.cK3.Value
   SET PREVIEW RECT 20,20,GETDESKTOPHEIGHT()-20,GETDESKTOPWIDTH()-20
ENDIF

DEFINE FONT "F0" NAME "COURIER NEW" SIZE 12
DEFINE FONT "F1" NAME "COURIER NEW" SIZE 9
DEFINE FONT "F2" NAME "BITSTREAM VERA SANS MONO"  SIZE 12
DEFINE FONT "F3" NAME "BITSTREAM VERA SANS MONO"  SIZE 9

SELECT FONT "F2"

nMaxLine:=54

DO CASE
CASE fImpressao.cbCombo_3.Value = 1
   SET PAGE ORIENTATION DMORIENT_PORTRAIT PAPERSIZE DMPAPER_A4 FONT "F2"
   nMaxLine:=54
CASE fImpressao.cbCombo_3.Value = 2
   SET PAGE ORIENTATION DMORIENT_PORTRAIT PAPERSIZE DMPAPER_FOLIO FONT "F2"
   nMaxLine:=64
ENDCASE


fTelaAviso.Show // Exibe a sua mensagem de processamento

START DOC NAME "SC"
   START PAGE
   //Aqui o seu código de impressão
   END PAGE
END DOC
RELEASE PRINTSYS
fPrincipal.StatusBar.Item(1):=""
fTelaAviso.Hide // Inibe a sua mensagem de processamento

RETURN 
Espero ter ajudado.

[]´s

Enviado: 25 Jan 2008 09:53
por asimoes
Pessoal,

No exemplo acima, pode-se colocar até um botão de cancelamento de impressão, processamento, etc.

E até mesmo criar uma função de uso genérico para mensagens de processamento.

[]´s