Perda de foco quando abre outra aplicacao

Delphi

11/05/2004

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...


Claudio_f

Claudio_f

Curtidas 0

Respostas

Rômulo Barros

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


GOSTEI 0
Nildo

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.


GOSTEI 0
Claudio_f

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


GOSTEI 0
POSTAR