> Como não parar a aplicação durante um processo longo? |
{ Muitas vezes durante um processo longo nossa aplicação fica paralisada, aguardando o termino de um loop e isso pode causar alguns inconvenientes, como permitir que se tenha acesso a outras partes do programa, bem como, até o término do próprio loop. Então, o que fazer se o usuário deseja cancelar a execução do loop? Apenas crie uma thread e faça com que o termino do loop dependa do valor de uma variável (Fcanceled nesta dica), a qual pode ser modificada pelo usuário (com o Button2 nesta dica). Quando o usuário clicar no Button2, fcanceled será False e a thread irá parar o loop. Durante o loop, você pode clicar na barra de titulo para mostra o menu do sistema, você pode arrastar o form, etc. } unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Buttons; type TForm1 = class(TForm) Button1: TBitBtn; Button2: TBitBtn; Edit1: TEdit; procedure FormCreate(Sender: TObject); procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private { Private declarations } FCanceled: Boolean; public { Public declarations } end; TThread1 = class(TThread) protected constructor Create; procedure Execute; override; procedure IncreaseNumber; end; var Form1: TForm1; implementation {$R *.dfm} constructor TThread1.Create; begin inherited Create(false); end; procedure TThread1.Execute; var success: Boolean; begin Self.Priority := tpLowest; with Form1 do begin while not FCanceled do begin // call Synchronize so that you can create more threads by clicking // the Start button and all created threads can run synchronously :) Synchronize(IncreaseNumber); end; end; end; procedure TThread1.IncreaseNumber; begin with Form1 do Edit1.Text := IntToStr(Succ(StrToInt(Edit1.Text))); end; procedure TForm1.FormCreate(Sender: TObject); begin Self.Caption := ''Você pode cancelar o Loop''; Edit1.Text := ''1''; Edit1.ReadOnly := True; Button1.Caption := ''Iniciar''; Button2.Caption := ''Parar''; end; procedure TForm1.Button1Click(Sender: TObject); begin FCanceled := False; TThread1.Create; end; procedure TForm1.Button2Click(Sender: TObject); begin FCanceled := True; end; end |
Como não parar uma aplicação Delphi durante um processo longo?
Como não parar a aplicação Delphi durante um processo longo?
Dê um upgrade no início da sua jornada.
Crie sua conta grátis e baixe o e-book
Artigos relacionados
-
Artigo
-
Artigo
-
Artigo
-
Artigo
-
Artigo