我愿意使用以下代码在Delphi XE2中无边界和无标题地设计一个应用程序:
BorderIcons = []
BorderStyle = bsNone
Run Code Online (Sandbox Code Playgroud)
但问题是右键单击任务栏上的应用程序没有菜单,就像上图中一样.然后我在FormShow事件上尝试了以下代码,但还有另一个问题.在左侧和左侧B侧创建一个边框.代码是:
procedure TForm1.FormShow(Sender: TObject);
var
r: TRect;
begin
r := ClientRect;
OffsetRect(r, 0, GetSystemMetrics(SM_CYCAPTION));
OffsetRect(r, GetSystemMetrics(SM_CXFRAME), GetSystemMetrics(SM_CYFRAME));
SetWindowRgn(Handle,
CreateRectRgn(
r.Left, r.Top,
ClientWidth + r.Left, ClientHeight + r.Top), True);
end;
Run Code Online (Sandbox Code Playgroud)
请帮我.
简单的解决方案是不首先删除系统菜单.请注意,系统菜单是应用程序中缺少的菜单的官方名称.
使您的.dfm文件看起来像这样:
BorderIcons = [biSystemMenu]
BorderStyle = bsNone
Run Code Online (Sandbox Code Playgroud)
摆脱那些FormShow代码 - 它不是必需的.
好吧,看起来我的实验中的一些代码混乱让我感到困惑.这是有效的.
完全按照.dfm形式执行的操作:
BorderIcons = []
BorderStyle = bsNone
Run Code Online (Sandbox Code Playgroud)
然后使用CreateParams以下命令添加系统菜单:
TForm1 = class(TForm)
protected
procedure CreateParams(var Params: TCreateParams); override;
end;
...
procedure TForm1.CreateParams(var Params: TCreateParams);
begin
inherited;
Params.Style := Params.Style or WS_SYSMENU;
end;
Run Code Online (Sandbox Code Playgroud)
procedure TForm1.FormCreate(Sender: TObject);
begin
BorderStyle := bsNone;
SetWindowLong(Handle, GWL_STYLE,
WS_POPUP or WS_CLIPSIBLINGS or WS_CLIPCHILDREN or WS_SYSMENU);
SetWindowLong(Handle, GWL_EXSTYLE, WS_EX_CONTROLPARENT or WS_EX_APPWINDOW);
end;
Run Code Online (Sandbox Code Playgroud)
使用此解决方案,您不需要OnShow处理程序中的代码.
上面的代码可以随时调用OnCreate(不仅仅是在内),它可以用来改变运行表单的行为(例如WS_VISIBLE,如果表单已经可见,则只包括窗口样式).
如果希望行为在表单的生命周期中有效,最好在覆盖中设置标志CreateParams(其中表单样式由VCL应用).这也将考虑到形式的重新创建.不要为此解决方案从OI设置任何表单属性,所有标志都在代码中显式设置:
type
TForm1 = class(TForm)
..
protected
procedure CreateParams(var Params: TCreateParams); override;
..
procedure TForm1.CreateParams(var Params: TCreateParams);
begin
inherited;
Params.Style := WS_POPUP or WS_CLIPSIBLINGS or WS_CLIPCHILDREN or WS_SYSMENU;
Params.ExStyle := WS_EX_CONTROLPARENT or WS_EX_APPWINDOW;
end;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4813 次 |
| 最近记录: |