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