Tela de aviso

Projeto MiniGui - Biblioteca visual para Harbour/xHarbour

Moderador: Moderadores

Leandro2C
Usuário Nível 1
Usuário Nível 1
Mensagens: 45
Registrado em: 04 Jan 2006 11:06

Tela de aviso

Mensagem 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
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Mensagem 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.
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Leandro2C
Usuário Nível 1
Usuário Nível 1
Mensagens: 45
Registrado em: 04 Jan 2006 11:06

Mensagem 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
Avatar do usuário
Poka
Usuário Nível 4
Usuário Nível 4
Mensagens: 563
Registrado em: 25 Out 2004 21:26
Localização: Leme/SP

Mensagem 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
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Mensagem 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.
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Mensagem 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.
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Mensagem 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
►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)
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Mensagem 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
►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)
Avatar do usuário
Poka
Usuário Nível 4
Usuário Nível 4
Mensagens: 563
Registrado em: 25 Out 2004 21:26
Localização: Leme/SP

Mensagem 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
MARCELOG
Usuário Nível 4
Usuário Nível 4
Mensagens: 546
Registrado em: 15 Mar 2005 16:54
Localização: Divinópolis/MG

Mensagem 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
Água mole em pedra dura tanto bate que até espirra!
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Mensagem 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
►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)
MARCELOG
Usuário Nível 4
Usuário Nível 4
Mensagens: 546
Registrado em: 15 Mar 2005 16:54
Localização: Divinópolis/MG

Mensagem 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.
Editado pela última vez por MARCELOG em 25 Jan 2008 09:46, em um total de 1 vez.
Água mole em pedra dura tanto bate que até espirra!
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Mensagem 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
Editado pela última vez por asimoes em 25 Jan 2008 12:56, em um total de 1 vez.
►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)
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Mensagem 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
►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)
Responder