双击EXE文件运行大概需要10秒(此时跳出空白窗口呈无响应状),如何在这10秒内显示进度条???
我的程序共3个form,Form1是登陆窗口,Form2和3工作窗口(包括6个adoquery)。
我双击EXE文件运行大概需要10秒(此时跳出空白窗口呈无响应状),如何在这10秒内显示进度条???
下面的代码不行,打开程序白色,并无响应状态,10s才打开,如何修改成10s显示进度条:
procedure TForm1.FormCreate(Sender: TObject);
var
i:integer;
begin
ProgressBar1.Visible:= True;
ProgressBar1.min:= 0; progressBar1.Max:= 100; //此处的N为总长
ProgressBar1.Value:= 0; //初始化开始位置
for i:=0 to 100 do
begin
ProgressBar1.Value:=i + 1; Application.ProcessMessages;
end;
ProgressBar1.Visible:= False; with Form1.ADOQuery1 do
begin
close;
sql.clear;
sql.Add('select * from users');
open;
while not Eof do
begin
ComboEdit1.Items.Add(Fieldbyname('name').AsString);
next;
end;
end;
end;
我的程序共3个form,Form1是登陆窗口,Form2和3工作窗口(包括6个adoquery)。
我双击EXE文件运行大概需要10秒(此时跳出空白窗口呈无响应状),如何在这10秒内显示进度条???
下面的代码不行,打开程序白色,并无响应状态,10s才打开,如何修改成10s显示进度条:
procedure TForm1.FormCreate(Sender: TObject);
var
i:integer;
begin
ProgressBar1.Visible:= True;
ProgressBar1.min:= 0; progressBar1.Max:= 100; //此处的N为总长
ProgressBar1.Value:= 0; //初始化开始位置
for i:=0 to 100 do
begin
ProgressBar1.Value:=i + 1; Application.ProcessMessages;
end;
ProgressBar1.Visible:= False; with Form1.ADOQuery1 do
begin
close;
sql.clear;
sql.Add('select * from users');
open;
while not Eof do
begin
ComboEdit1.Items.Add(Fieldbyname('name').AsString);
next;
end;
end;
end;
var
i:integer;
begin
ProgressBar1.Visible:= True;
ProgressBar1.Value:= 0; //初始化开始位置
ProgressBar1.min:= 0;
//progressBar1.Max:= 100; //此处的N为总长
with Form1.ADOQuery1 do
begin
close;
sql.clear;
sql.Add('select * from users');
open;
progressBar1.Max:= RecordCount; //此处的N为总长
while not Eof do
begin
ProgressBar1.Value:=ProgressBar1.Value + 1;
Application.ProcessMessages;
ComboEdit1.Items.Add(Fieldbyname('name').AsString);
next;
end;
end;
ProgressBar1.Visible:= False;
end;
先重载构造函数:constructor TThread1.Create(F: TForm1);
begin
inherited Create(True);
Form := F;
end;
给TThread1加上一个私有过程DoInit():procedure TThread1.DoInit():
begin
with Form.ADOQuery1 do
begin
close;
sql.clear;
sql.Add('select * from users');
open;
while not Eof do
begin
Form.ComboEdit1.Items.Add(Fieldbyname('name').AsString);
next;
end;
end;
end;在TThread1的Execute写上:procedure TThread1.Execute;
begin
Synchronize(DoInit);
end;Unit1的implementation加上uses Unit2;
TForm1.FormCreate修改如下:procedure TForm1.FormCreate(Sender: TObject);
var
i:integer;
thread: TThread1;
begin
ProgressBar1.Visible:= True;
ProgressBar1.min:= 0; progressBar1.Max:= 100; //此处的N为总长
ProgressBar1.Value:= 0; //初始化开始位置
Thread := TThread1.Create(self);
Thread.Resume;
while not Thread.Terminated do
begin
ProgressBar1.Value:=i + 1;
end;
ProgressBar1.Visible:= False;
thread.Free;
end;可根据实情修改ProgressBar1.Max
能否解决?
var
i:integer;
sqlstr:string;
king:string;
Lables : TLabel;
Edits : TEdit;
j:integer;
begin
if CheckBox1.isChecked then
begin
with Form2.ADOQuery7 do
begin
close;
sql.Clear;
sql.Add('select cc from tops where c=:uuu');
Parameters.ParamByName('uuu').Value:=Edit1.Text;
Open;
if recordCount <1 then
begin
Showmessage('not exit!');
Exit;
end;ADOQuery2.Close;
ADOQuery2.SQL.Text := 'Select * from tops where cc = '''+trim(edit1.text)+'''';
ADOQuery2.Open;
Label11.Text:= ADOQuery2.fieldbyname('as').asstring;
...
ADOQuery3.Close;
ADOQuery3.SQL.Clear;
ADOQuery3.SQL.Add('select * from matrix1 where cc = '''+trim(edit1.text)+'''');
adoquery3.open;
king:='';
for j :=0 to ADOQuery3.FieldCount - 1 do
if ADOQuery3.Fields[j].Value='Y' then
king:=king+','+ADOQuery3.Fields[j].FieldName;
king:='select vv'+king+' from rules where vv='''+ADOQuery3.fieldbyname('cc').AsString+'''';
ADOQuery5.Close;
ADOQuery5.SQL.Clear;
adoquery5.sql.add(king);
adoquery5.open;ADOQuery3.Close;
ADOQuery3.SQL.Clear;
ADOQuery3.SQL.Add('select * from matrix where vv = '''+trim(edit1.text)+'''');
adoquery3.open;
sqlstr:='';
for i :=0 to ADOQuery3.FieldCount - 1 do
if ADOQuery3.Fields[i].Value='Y' then sqlstr:=sqlstr+','+ADOQuery3.Fields[i].FieldName;
sqlstr:='select date'+sqlstr+' from checks where vv='''+ADOQuery3.fieldbyname('cc').AsString+'''';
ADOQuery6.Close;
ADOQuery6.SQL.Clear;
adoquery6.sql.add(sqlstr);
adoquery6.open;ADOQuery4.Close;
ADOQuery4.SQL.Clear;
ADOQuery4.SQL.Add('select * from cate');
adoquery4.open;
while not ADOQuery4.Eof do
begin
if ADOQuery4.Fields[1].Value=''+trim(edit1.text)+'' then
begin
ComboBox2.Visible:=true;
ComboBox2.Position.X :=1111;
ComboBox2.Position.Y :=198;
Label30.Visible :=true; Label30.Text :='zyce'; Label30.Position.X :=1038; Label30.Position.Y :=198;
end;
end;
end;
end;