線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:908
推到 Plurk!
推到 Facebook!

关于读写数据时的message问题

尚未結案
liangzai
初階會員


發表:77
回覆:91
積分:33
註冊:2004-08-13

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-10-07 15:30:01 IP:219.137.xxx.xxx 未訂閱
请教各位, 我在将TXT文档中的数据写入到table中时,由于数据较多,通常需要一段时间,那我想在这段时间里界面上出现一个message,内容为'upload may take a while...',当数据写入完成之后,这个message自动消失,恢复到正常状态,请问该怎么做?谢谢!
sos_admin
版主


發表:121
回覆:697
積分:768
註冊:2003-07-23

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-10-07 16:58:56 IP:218.94.xxx.xxx 未訂閱
var
  UpdateFrm: TForm; //您的提示窗口
begin
  UpdateFrm: = TForm.Create(self);
  UpdateFrm.Show;
{
//载处理中
while ...
begin
........
UpdateFrm.Update;
end;
}
  UpdateFrm.Free;
end;
你可以参考这样做法即可! 风花雪月 e梦情缘 网络代号:wnhoo or sos_admin 网名:e梦缘 Mail:wnhoo@163.com
liangzai
初階會員


發表:77
回覆:91
積分:33
註冊:2004-08-13

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-10-10 16:26:22 IP:218.19.xxx.xxx 未訂閱
hi,sos_admin 我现在是在form1中使用form3,当form3消失之后,程序会返回到最开始的状态,也就是form1最开始的状态,为什么?我就想恢复正常状态就好了。 ST3:=TStringList.Create; ST4:=TStringList.Create; if(opendialog2.Execute) and (copy(opendialog2.FileName,2,2)=':\') then begin fname:=opendialog2.FileName; ST3.LoadFromFile(fname); end; for M:= 0 to ST3.Count-1 do begin form3.Show; ST4.Delimiter := #9; // TAB 鍵 ST4.DelimitedText := ST3[M]; for N:=0 to ST4.Count-1 do self.SQLStoredProc4.Params[N].AsString:=ST4[N]; self.SQLStoredProc4.ExecProc; form3.Update; end; ST4.Free; ST3.Free; end; form3.Free;
sos_admin
版主


發表:121
回覆:697
積分:768
註冊:2003-07-23

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-10-11 10:10:55 IP:218.94.xxx.xxx 未訂閱
不太理解您是什么意思?我实做一下如下:
procedure TForm1.Button1Click(Sender: TObject);
var
  UpdateFrm: TForm; //您的提示窗口
  i: Integer;
  str: string;
begin
  str := '正在处理数据... ';
  UpdateFrm := TForm.Create(self);
  UpdateFrm.Caption := '提示';
  UpdateFrm.FormStyle := fsStayOnTop;
  UpdateFrm.BorderStyle := bsSingle;
  UpdateFrm.Height := 60;
  UpdateFrm.Width := 260;
  UpdateFrm.Position := poScreenCenter;
  UpdateFrm.BorderIcons:=[];
  UpdateFrm.Show;
  for i := 0 to 800 do
  begin
    UpdateFrm.Caption := '提示';
    UpdateFrm.Canvas.TextOut(60,10,str Inttostr(i));
    UpdateFrm.Update;
    Sleep(5);
    Application.ProcessMessages;
  end;
  UpdateFrm.Free;
  Application.MessageBox('处理完毕!', '系统提示', MB_OK  
    MB_ICONINFORMATION);
end;
风花雪月 e梦情缘 网络代号:wnhoo or sos_admin 网名:e梦缘 Mail:wnhoo@163.com
liangzai
初階會員


發表:77
回覆:91
積分:33
註冊:2004-08-13

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-10-11 10:35:36 IP:218.19.xxx.xxx 未訂閱
hi,sos_admin 首先谢谢你! 我知道怎么样去用,但是比如说我现在处于这个button所在的界面,点击button做完这个buttonclick之后,updatefrm不见了,可是接下来的当前界面不是button所在的这个界面,而是跳到了程序最初的登陆界面,不知道为什么?
sos_admin
版主


發表:121
回覆:697
積分:768
註冊:2003-07-23

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-10-11 13:01:49 IP:218.94.xxx.xxx 未訂閱
你button所在Form是否是FormStyle := fsStayOnTop; 如果button所在可见性高于提示Form,那么提示的Form是显示在其后面.    至于您说的[跳到了程序最初的登陆界面]不知是什么意思,这个只有看您的程式码那儿问题。    至于通过提示Form显示进度,通过我给你的方法我想是可行的.你在仔细看您程式码是否存在逻辑错误! 风花雪月
liangzai
初階會員


發表:77
回覆:91
積分:33
註冊:2004-08-13

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-10-11 15:56:50 IP:218.19.xxx.xxx 未訂閱
我现在是这种情况: form1:程序最开始的form; form3:当点击form1之后弹出来的登陆form(输入正确用户和密码,进入到form1); button1位于form1中的组件Tabsheet2里面,当我在button1里面做完upload工作(按照你所说的方法)之后,程序应该回到点击button1之前的状态,可是程序马上跳到form1,最最开始的状态,奇怪!
sos_admin
版主


發表:121
回覆:697
積分:768
註冊:2003-07-23

發送簡訊給我
#8 引用回覆 回覆 發表時間:2005-10-11 16:20:57 IP:218.94.xxx.xxx 未訂閱
var   UpdateFrm: TForm; //您的提示窗口   i: Integer;   str: string; begin   str := '正在处理数据... '; UpdateFrm := TForm.Create(self); ............. 我是采用动态方式创建提示窗口的,你的好像不是,那么也就无需自己Free了 如果你通过Login form 调出 form1 然后 show 提示窗口form3 那么form1的button1事件后是不会跳到loginform 上的,除非你这个button1 的onclick事件中有close等退出语句! 风花雪月 e梦情缘 网络代号:wnhoo or sos_admin 网名:e梦缘 Mail:wnhoo@163.com
liangzai
初階會員


發表:77
回覆:91
積分:33
註冊:2004-08-13

發送簡訊給我
#9 引用回覆 回覆 發表時間:2005-10-11 16:48:34 IP:218.19.xxx.xxx 未訂閱
可是我在这个button旁边新加一个button,将你给我的代码原原本本的拷过去,动态生成form,作一个测试,但是提示窗口关闭之后,又回到了程序最原始状态?
sos_admin
版主


發表:121
回覆:697
積分:768
註冊:2003-07-23

發送簡訊給我
#10 引用回覆 回覆 發表時間:2005-10-11 17:20:38 IP:218.94.xxx.xxx 未訂閱
你可以新建一个工程,用我提供代码
procedure TForm1.Button1Click(Sender: TObject);
var
  UpdateFrm: TForm; //您的提示窗口
  i: Integer;
  str: string;
begin
  str := '正在处理数据... ';
  UpdateFrm := TForm.Create(self);
  UpdateFrm.Caption := '提示';
  UpdateFrm.FormStyle := fsStayOnTop;
  UpdateFrm.BorderStyle := bsSingle;
  UpdateFrm.Height := 60;
  UpdateFrm.Width := 260;
  UpdateFrm.Position := poScreenCenter;
  UpdateFrm.BorderIcons:=[];
  UpdateFrm.Show;
  for i := 0 to 800 do
  begin
    UpdateFrm.Caption := '提示';
    UpdateFrm.Canvas.TextOut(60,10,str Inttostr(i));
    UpdateFrm.Update;
    Sleep(5);
    Application.ProcessMessages;
  end;
  UpdateFrm.Free;
  Application.MessageBox('处理完毕!', '系统提示', MB_OK  
    MB_ICONINFORMATION);
end;
试验一下,肯定没问题! 你的问题可能不是动态提示框问题,而是你程序其他问题。 你可以将你程序传过来,或者贴上相关完整代码。然后才能知道你问题所在 风花雪月
liangzai
初階會員


發表:77
回覆:91
積分:33
註冊:2004-08-13

發送簡訊給我
#11 引用回覆 回覆 發表時間:2005-10-12 09:27:11 IP:218.19.xxx.xxx 未訂閱
hi,sos_admin 我发现一个问题,就是如果button所在的form设定了form.Activate事件,当点击button完成动态提示框,将updatefrm.free之后,马上就会执行form.activate这个事件,因此跳到了其他界面,而不是回到点击button之前的界面?我用一个新的工程,仅仅使用一个button,一个label,使用你的代码做过试验,设定了form.activate事件,也会出现类似情况
liangzai
初階會員


發表:77
回覆:91
積分:33
註冊:2004-08-13

發送簡訊給我
#12 引用回覆 回覆 發表時間:2005-10-12 10:04:06 IP:218.19.xxx.xxx 未訂閱
简单来说就是updatefrm被free之后,就会回到form1,由于form1设定了form.activate事件,就会执行这个事件,接下来的界面就不是预期希望的了
sos_admin
版主


發表:121
回覆:697
積分:768
註冊:2003-07-23

發送簡訊給我
#13 引用回覆 回覆 發表時間:2005-10-12 10:15:12 IP:218.94.xxx.xxx 未訂閱
简单来说就是updatefrm被free之后,就会回到form1,由于form1设定了form.activate事件,就会执行这个事件,接下来的界面就不是预期希望的了 =======================================================    button form ,具有OnActivate事件产生效果,是在这个窗体变成活动时候发生,比如窗体show时候,还有就是提示窗体show -> free ,那么button窗体从不活动变成活动时候也会发生这个事件.    你可以这样避免面:    procedure TForm1.Button1Click(Sender: TObject); var   UpdateFrm: TForm; //您的提示窗口   i: Integer;   str: string; begin   Self.OnActivate:=nil; str := '正在处理数据... '; UpdateFrm := TForm.Create(self); UpdateFrm.Caption := '提示'; UpdateFrm.FormStyle := fsStayOnTop; UpdateFrm.BorderStyle := bsSingle; UpdateFrm.Height := 60; UpdateFrm.Width := 260; UpdateFrm.Position := poScreenCenter; UpdateFrm.BorderIcons:=[]; UpdateFrm.Show; for i := 0 to 800 do begin UpdateFrm.Caption := '提示'; UpdateFrm.Canvas.TextOut(60,10,str Inttostr(i)); UpdateFrm.Update; Sleep(5); Application.ProcessMessages; end; UpdateFrm.Free; Application.MessageBox('处理完毕!', '系统提示', MB_OK MB_ICONINFORMATION); Self.OnActivate:= FormActivate; end; 风花雪月 e梦情缘 网络代号:wnhoo or sos_admin 网名:e梦缘 Mail:wnhoo@163.com
系統時間:2024-07-02 14:08:50
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!