Jump to content
Fórum Script Brasil
  • 0

Form criado no execute da thread


Vitor Eduardo da Silva

Question

Olá meu colegas.

Criei uma tela de aguarde dentro de uma thread. Nesta janela há um botão cancelar. Achei que por ser dentro da thread o form rodaria dentro de uma outra linha de execução e por isso ele funcionaria separadamente de meu loop que colhe informações através de um webservice. Quando o processo fica lento, queria ter a oportunidade de cancelar. Criei uma variável (true/false) global para interromper o loop. Mas a tela de cancelar continua congelada. segue fonte.

procedure TfProcess.Execute;
var
  MSG: Tlabel;
  P: TPanel;
  B: TButton;
begin
  F:=  TForm.Create(Application);
  F.BorderStyle:= bsNone;
  F.Position:= poDesktopCenter;
  F.Width:= 495;
  F.Height:= 146; //até aqui criamos o form

  P := TPanel.Create(Application);
  P.Parent := F;
  P.BevelOuter := bvNone;
  P.Align := alClient;
  P.BorderWidth := 16;

  MSG:=  TLabel.Create(Application);
  MSG.Parent:=P;
  MSG.Transparent:= true;
  MSG.AutoSize:= false;
  MSG.Width:= 98;
  MSG.Caption:= sStatus;
  MSG.Align := alTop;
  MSG.Alignment:= taCenter;//label com a mensagem "Aguarde"

  B := TButton.Create(Application);
  B.Parent := P;
  B.Caption := 'Cancelar';
  B.Width := 100;
  B.Left := 197;
  B.Top := 105;
  B.OnClick := BClick;

  F.Show;
  F.BringToFront;
  F.Update;
  cancelProcess := false;
  FreeOnTerminate := true;
end;

Que deve estar acontecendo?

Link to comment
Share on other sites

1 answer to this question

Recommended Posts

  • 0

Achei que por ser dentro da thread o form rodaria dentro de uma outra linha de execução e por isso ele funcionaria separadamente de meu loop que colhe informações através de um webservice

um processo em loop ou que exija 100 % do processamento vai impedir outro processo de executar

Mas a tela de cancelar continua congelada

veja prioridade de processamento

http://scriptbrasil.com.br/forum/index.php...st&p=570616

uma solução seria voce fazer com que durante o loop possa ser detectado o botão cancelar da thread

coloque no código do loop

application.processmessages; // para considerar algo que aconteça durante o loop

abraço

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.2k
    • Total Posts
      652k
×
×
  • Create New...