怎样在单独的对话框中显示进度条,而禁止用户操作这个对话框以外的东西?(100分)

  • 主题发起人 主题发起人 brightangel
  • 开始时间 开始时间
B

brightangel

Unregistered / Unconfirmed
GUEST, unregistred user!
我一直都只会用非模式对话框显示进度条,这样用户在显示进度条的同时可能
会进行其它操作,而这是我不希望。如果用模式对话框来显示进度条,必须等
模式对话框关闭程序的主体才能运行,也就无法动态的显示进度,该怎么办?
请各位高手指教?
 
用非模式对话框显示进度条,对话框设为StayOnTop,将主窗体的Enable设为False,
进度完成之后关闭对话框,主窗口的Enable设为True即可。
 
把操作放在对话框中不就行了吗?
 
新建一窗体,在要显示的地方加上
form2.showmodal;
 
一样可以动态显示进度的。
设置一个窗体间的全局变量来存放进度
 
用消息 ------------------ Windows 的消息,
Delphi 的自定义消息,在程序体和对话框之间传递,
保你爽!
在这类处理中,消息是最可靠了。不过注意不要吝啬
Application.ProcessMessages()。否则...
 
{***************************************************************
*
* Unit Name: CPromptInfo
* Purpose : 提供一个置于顶端的提示信息窗体
* Author : hubdog
* BeginDate: 2001-9-4
* EndDate :
* History : 1.0a(特点是:置于顶端(设置 Formstyle=ontopmost,
× 同时非模态允许后台程序继续运行,并且用户无法关闭,
* 并切换到本程序的其他窗体上)
*
****************************************************************}

unit CPromptInfo;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ComCtrls, StdCtrls;

type
TPromptInfoForm = class(TForm)
lblInfo: TLabel;
Animate1: TAnimate;
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
WillClose:Boolean;//将要Close
procedure WMKillFocus(var Msg:TWMKillFocus);message wm_KillFocus;
public
{ Public declarations }
end;

var
PromptInfoForm: TPromptInfoForm;

implementation

{$R *.DFM}

{ TForm2 }

procedure TPromptInfoForm.WMKillFocus(var Msg: TWMKillFocus);
begin
//如果不是关闭的话,禁止切换到其他窗体
if not WillClose then
Self.SetFocus;
Msg.Result:=0;
end;

procedure TPromptInfoForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
WillClose:=True;
end;

end.
 
我以前是showmodal的状态窗口,里面有个单独的线程工作,通过给状态窗口发消息让他更新。
 
用线程就可以了
 
是呀,用消息好
在model dialog中用重载(xxx是model dialog form)
procedure xxx.WndProc(Msg:TMessage)
begin
if Msg.Msg=yourdefinedmessge then
//更新gauge
end;
 
谢谢各位!
 
后退
顶部