Perda de foco quando abre outra aplicacao
Bom dia pessoal...
Estou com um probleminha eh o seguinte:
Fiz uma programa para gerar um relatorio e coloquei nele uma ProgressBar ateh ai tudo bem, o problema eh que quando a barra de progresso esta correndo e eu abro algum outro programa quando volto para a minha aplicacao a tela fica toda branca como se nao estivesse processando nem a barra de progresso se mexe mas quando termina o processamento a tela volta ao normal.
Alguem jah passou por isso, como resolver este pequeno problema, conto com a ajuda de vcs, jah pesquisei no forum mas nao achei nada parecido com o meu problema, desde jah agradeco, OBRIGADO...
Estou com um probleminha eh o seguinte:
Fiz uma programa para gerar um relatorio e coloquei nele uma ProgressBar ateh ai tudo bem, o problema eh que quando a barra de progresso esta correndo e eu abro algum outro programa quando volto para a minha aplicacao a tela fica toda branca como se nao estivesse processando nem a barra de progresso se mexe mas quando termina o processamento a tela volta ao normal.
Alguem jah passou por isso, como resolver este pequeno problema, conto com a ajuda de vcs, jah pesquisei no forum mas nao achei nada parecido com o meu problema, desde jah agradeco, OBRIGADO...
Claudio_f
Curtidas 0
Respostas
Rômulo Barros
11/05/2004
Amigo, acredito que o preenchimento da progressbar esta dentro de um loop. então, antes de exibir o forulário por cima, armazene em uma variavel a ultima posicao da sua progessbar e, quando o formulario fechar, vc adicionar o valor guardado de volta a progresse bar, continuando o loop. (Acredito que seja isso)..
mas, se vc postar o código, ficaria melhor... :P
mas, se vc postar o código, ficaria melhor... :P
GOSTEI 0
Nildo
11/05/2004
Não precisa de tudo isso não Undeclared Identifier. Com certeza está dentro de um Loop, coloca um
Application.ProcessMessages
depois de atualizar a progress bar (na linha de baixo), que resolve seu problema.
Application.ProcessMessages
depois de atualizar a progress bar (na linha de baixo), que resolve seu problema.
GOSTEI 0
Claudio_f
11/05/2004
Belezura pessoal!
Valeu Nildo com ´Application.ProcessMessages´ funcionou direitinho,
obrigado a vc tambem Undeclared Identifier.
O codigo do Form que tem a progressBar eh a seguinte:
type
TFrm_BARRA2 = class(TForm)
ProgressBar1: TProgressBar;
procedure FormActivate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
i:integer;
j:integer;
end;
var
Frm_BARRA2: TFrm_BARRA2;
implementation
{$R *.dfm}
procedure TFrm_BARRA2.FormActivate(Sender: TObject);
begin
ProgressBar1.Max := j;
ProgressBar1.Position := 0;
Progressbar1.Position := Progressbar1.Position + i;
end;
E dentro do relatorio este eh o codigo:
if ED_SA.Text = ´A´ then //testa se o relatorio sera impresso da forma Analitica ou Sitetica
begin
Frm_BARRA2 := TFrm_BARRA2.Create(nil);
Frm_BARRA2.Caption := ´Aguarde gerando calculos e o relatorio...´;
Frm_BARRA2.j := nQtdTitini;
Frm_BARRA2.Show;
while SQLQ_TMP.Eof = false do
begin
DM_CAIXA.SQLQ_CLIENTES.CLOSE;
DM_CAIXA.SQLQ_CLIENTES.SQL.TEXT := ´SELECT * FROM CLIENTES WHERE A1_COD = ´´´+SQLQ_TMPE1_CLIENTE.Text+´´´ AND A1_VEND BETWEEN ´´´+ED_VEND1.Text+´´´ AND ´´´+ED_VEND2.Text+´´´ ´;
DM_CAIXA.SQLQ_CLIENTES.OPEN;
xFlag := ´1´;
//barra de progresso
xQtdTit := IntToStr(nQtdTitI + 1);
Frm_BARRA2.i := StrToInt(xQtdTit);
nQtdTitI := Frm_BARRA2.i;
Frm_BARRA2.FormActivate(Sender);
Application.ProcessMessages; //aqui coloquei a dica do NILDO
if (DM_CAIXA.SQLQ_CLIENTESA1_VEND.Text = ED_VEND1.Text) or (DM_CAIXA.SQLQ_CLIENTESA1_VEND.Text = ED_VEND2.Text) then
begin
xTitulo := SQLQ_TMPE1_NUM.Text;
while (SQLQ_TMPE1_NUM.Text = xTitulo) do
begin
.
.
.
.
xTitulo := SQLQ_TMPE1_NUM.Text;
xFilial := copy(SQLQ_TMPE1_PREFIXO.Text,1,2);
SQLQ_TMP.Next;
end;
.
.
.
.
end; //fim analitico
Valeu Nildo com ´Application.ProcessMessages´ funcionou direitinho,
obrigado a vc tambem Undeclared Identifier.
O codigo do Form que tem a progressBar eh a seguinte:
type
TFrm_BARRA2 = class(TForm)
ProgressBar1: TProgressBar;
procedure FormActivate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
i:integer;
j:integer;
end;
var
Frm_BARRA2: TFrm_BARRA2;
implementation
{$R *.dfm}
procedure TFrm_BARRA2.FormActivate(Sender: TObject);
begin
ProgressBar1.Max := j;
ProgressBar1.Position := 0;
Progressbar1.Position := Progressbar1.Position + i;
end;
E dentro do relatorio este eh o codigo:
if ED_SA.Text = ´A´ then //testa se o relatorio sera impresso da forma Analitica ou Sitetica
begin
Frm_BARRA2 := TFrm_BARRA2.Create(nil);
Frm_BARRA2.Caption := ´Aguarde gerando calculos e o relatorio...´;
Frm_BARRA2.j := nQtdTitini;
Frm_BARRA2.Show;
while SQLQ_TMP.Eof = false do
begin
DM_CAIXA.SQLQ_CLIENTES.CLOSE;
DM_CAIXA.SQLQ_CLIENTES.SQL.TEXT := ´SELECT * FROM CLIENTES WHERE A1_COD = ´´´+SQLQ_TMPE1_CLIENTE.Text+´´´ AND A1_VEND BETWEEN ´´´+ED_VEND1.Text+´´´ AND ´´´+ED_VEND2.Text+´´´ ´;
DM_CAIXA.SQLQ_CLIENTES.OPEN;
xFlag := ´1´;
//barra de progresso
xQtdTit := IntToStr(nQtdTitI + 1);
Frm_BARRA2.i := StrToInt(xQtdTit);
nQtdTitI := Frm_BARRA2.i;
Frm_BARRA2.FormActivate(Sender);
Application.ProcessMessages; //aqui coloquei a dica do NILDO
if (DM_CAIXA.SQLQ_CLIENTESA1_VEND.Text = ED_VEND1.Text) or (DM_CAIXA.SQLQ_CLIENTESA1_VEND.Text = ED_VEND2.Text) then
begin
xTitulo := SQLQ_TMPE1_NUM.Text;
while (SQLQ_TMPE1_NUM.Text = xTitulo) do
begin
.
.
.
.
xTitulo := SQLQ_TMPE1_NUM.Text;
xFilial := copy(SQLQ_TMPE1_PREFIXO.Text,1,2);
SQLQ_TMP.Next;
end;
.
.
.
.
end; //fim analitico
GOSTEI 0