使用:
在界面上放置一个Panel,设置其HelpKeyword为popup
使用时,直接设置Panel的Visible即可。
Visible 为 True 时显示,为 False 时隐藏
显示时,系统不显示遮罩层,Panel左边距和left相等,顶部与top值相等。
点击空白处自动消失
优点:开发速度快,与原背景窗体的数据交互非常方便;
缺点:需要在Panel中增加标题栏等
效果:
6、Form (用 TForm 模拟的带遮罩消息框)假定拟弹出的窗体为form2
(1)在form2的声明放置到Form1的Public中
(2)如果在Form1中弹出form2窗体,需要执行如下以下代码
procedure TForm1.Button6Click(Sender: TObject);
begin
if Form2 = nil then begin
//创建FORM
Form2 := TForm2.Create(self); //括号内必须将新窗体的Parent设置为self
//设置Parent
Form2.Parent := self; //必须将新窗体的Parent设置为self
//
DockSite := True;
end;
//弹出
dwShowModalPro(self,Form2);
end;
优点:可以根据自己的需要定制;
缺点:使用相对麻烦;与背景窗体的数据交互相对麻烦,需要通过Form1的Public中的变量实现
效果:
7、dwMessageDialog (弹出式确认框)函数:
procedure dwMessageDlg(AMsg,ACaption,confirmButtonCaption,cancelButtonCaption,AMethedName:String;AForm:TForm);
其中:
(1)AMsg:消息内容
(2)ACaption:消息框标题
(3)confirmButtonCaption:确定按钮标题
(4)cancelButtonCaption:取消按钮标题
(5)AMethedName:返回结果后触发Form的OnStartDock中的事件标志
(6)AForm:当前窗体,一般可以使用self
dwMessageDlg没返回值,所以不能在当前函数/过程中处理,需要等结果返回后会自动激活Form的OnStartDock函数,
所以需要在Form的OnStartDock函数中添加事件,在事件中通过以下取得前期拟触发的事件标志,对应函数中的AMethedName
dwGetProp(Self,'interactionmethod');
通过类似以下得到返回的结果,为'1'时表示为"确定",否则为"取消"
dwGetProp(Self,'interactionvalue');
弹出代码:
procedure TForm1.Button7Click(Sender: TObject);
begin
//弹出一个确认框
dwMessageDlg('确定要使用DeWeb吗?','我的标题','我确定','我取消','query_deweb',self);
end;
用户选择后事件代码:
procedure TForm1.FormStartDock(Sender: TObject; var DragObject: TDragDockObject);
var
sMethod : string;
sValue : string;
begin
sMethod := dwGetProp(Self,'interactionmethod');
sValue := dwGetProp(Self,'interactionvalue');
//
if sMethod = 'query_deweb' then begin
if sValue = '1' then begin
Label2.Caption := '选择使用DeWeb';
end else begin
Label2.Caption := '再等等看';
end;
end;
end;
效果:
8、dwInputQuery (弹出式输入框)函数:
procedure dwInputQuery(AMsg,ACaption,ADefault,confirmButtonCaption,cancelButtonCaption,AMethedName:String;AForm:TForm);
其中:
(1)AMsg:消息内容
(2)ACaption:消息框标题
(3)ADefault:输入框的默认值
(4)confirmButtonCaption:确定按钮标题
(5)cancelButtonCaption:取消按钮标题
(6)AMethedName:返回结果后触发Form的OnStartDock中的事件标志
(7)AForm:当前窗体,一般可以使用self
dwInputQuery没返回值,所以不能在当前函数/过程中处理,需要等结果返回后会自动激活Form的OnStartDock函数,
所以需要在Form的OnStartDock函数中添加事件,在事件中通过以下取得前期拟触发的事件标志
dwGetProp(Self,'interactionmethod');
通过类似以下得到返回的结果,为输入的内容。
dwGetProp(Self,'interactionvalue');
弹出代码:
procedure TForm1.Button8Click(Sender: TObject);
begin
dwInputQuery('你使用的Delphi版本?','D Version','10.4.2','OK','cancel','query_version',self);
end;
用户选择后事件代码(包含前面处理dwMessageDlg的代码):
procedure TForm1.FormStartDock(Sender: TObject; var DragObject: TDragDockObject);
var
sMethod : string;
sValue : string;
begin
sMethod := dwGetProp(Self,'interactionmethod');
sValue := dwGetProp(Self,'interactionvalue');
//
if sMethod = 'query_deweb' then begin
if sValue = '1' then begin
Label2.Caption := '选择使用DeWeb';
end else begin
Label2.Caption := '再等等看';
end;
end else if sMethod = 'query_version' then begin
Label3.Caption := sValue;
end;
end;
效果: