等待动画-进度条(转)

delphi等待动画

首先要在网上下载等待的GIF文件。

复制代码
unit wait;
/// <author>cxg 2022-8-12</author>
interface

uses
Vcl.Imaging.GIFImg, System.SysUtils,
Vcl.Graphics, Vcl.Controls, forms,
Vcl.ExtCtrls, Vcl.StdCtrls;

function playWait(own: TForm): TPanel;
procedure stopWait(pnl: TPanel);

implementation

function playWait(own: TForm): TPanel;
begin
var pnl: TPanel := TPanel.Create(own);
pnl.BevelOuter :
= bvNone;
pnl.Parent :
= own;
pnl.AutoSize :
= True;
pnl.Left :
= Screen.Width div 2;
pnl.Top :
= Screen.Height div 2 - 150;
pnl.Show;
var img: TImage := TImage.Create(pnl);
img.Parent :
= pnl;
img.Stretch :
= true;
img.AutoSize :
= True;
img.Picture.LoadFromFile(ExtractFilePath(Application.ExeName)
+ '1.gif');
TGIFImage(img.Picture.Graphic).Animate :
= True;
Result :
= pnl;
end;

procedure stopWait(pnl: TPanel);
begin
FreeAndNil(pnl);
end;

end.

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
procedure Tfgoods.chaxunExecute(Sender: TObject);
begin
  var finished: Boolean := False;
  ADOQuery1.Close;
  ADOQuery1.DisableControls;
  var pnl: TPanel := playwait(self);
  TThread.CreateAnonymousThread(
    procedure
    begin
      CoInitialize(nil);
      ADOQuery1.Close;
      ADOQuery1.SQL.Clear;
      var sql: string;
      var v: string;
      if edtId.Text <> '' then
      begin
        sql := 'select * from t_goods where goodsid = :goodsid';
        ADOQuery1.SQL.Add(sql);
        v := edtId.Text;
        ADOQuery1.Parameters.ParamValues['goodsid'] := v;
      end
      else if edtPy.Text <> '' then
      begin
        sql := 'select * from t_goods where isnull(py,'''') like :py';
        ADOQuery1.SQL.Add(sql);
        v := '%' + edtPy.Text + '%';
        ADOQuery1.Parameters.ParamValues['py'] := v;
      end
      else if edtName.Text <> '' then
      begin
        sql := 'select * from t_goods where isnull(goodsname,'''') like :goodsname';
        ADOQuery1.SQL.Add(sql);
        v := '%' + edtName.Text + '%';
        ADOQuery1.Parameters.ParamValues['goodsname'] := v;
      end
      else if edtBarcode.Text <> '' then
      begin
        sql := 'select * from t_goods where isnull(barcode,'''') = :barcode';
        ADOQuery1.SQL.Add(sql);
        v := edtBarcode.Text;
        ADOQuery1.Parameters.ParamValues['edtBarcode'] := v;
      end
      else
      begin
        sql := 'select * from t_goods';
        ADOQuery1.SQL.Add(sql);
      end;
      ADOQuery1.Open;
      finished := true;      //thread execute finished
      CoUninitialize;
    end).Start;
 
  while True do    //wait for thread execute finished
  begin
    if finished then
    begin
      ADOQuery1.EnableControls;
      stopWait(pnl);
      Break;
    end;
    Application.ProcessMessages;
    TThread.Sleep(1);
  end;
end;

  

 

  

 

posted @ 2022-08-18 16:08  九日之阳  阅读(125)  评论(0编辑  收藏  举报