使用 Delphi 12.1 Athens:
- 为Windows 32bit创建一个新的VCL MDI应用程序(文件-新建-其他,左侧选择Delphi-Windows,然后选择MDI应用程序,点击确定)。
- 在项目-选项-外观中选择“Windows 11 Polar Light”样式。
- 添加对齐面板
alTop
- 在面板上添加一个按钮并命名
NewBtn
。 - 给每个组件添加
OnClick
事件,并添加下面显示的代码。 - 运行该程序。
- 单击
NewBtn
即可创建一个或多个子表单。 - 移动子表单,以便垂直滚动条可见。
- 单击面板组件。它应该会改变高度,但滚动条不会重绘。
这已被确认为一个缺陷,但我还没有得到任何关于解决方法的建议。我想我可以简单地调整主窗口的大小,除非窗口最大化,否则这样做是可行的,我的很多用户都是这样做的。我尝试简单地调用该Resize()
方法,但没有效果。我尝试跟踪 VCL 代码,但我找不到任何对我有意义的东西。
object MainForm: TMainForm
Left = 194
Top = 111
Caption = 'MDI Application'
ClientHeight = 535
ClientWidth = 610
Color = clAppWorkSpace
Font.Charset = DEFAULT_CHARSET
Font.Color = clBlack
Font.Height = -11
Font.Name = 'Default'
Font.Style = []
FormStyle = fsMDIForm
VisualManager = FormTabsBar1
Position = poDefault
TextHeight = 13
object StatusBar: TStatusBar
Left = 0
Top = 516
Width = 610
Height = 19
Margins.Left = 2
Margins.Top = 2
Margins.Right = 2
Margins.Bottom = 2
AutoHint = True
Panels = <>
SimplePanel = True
end
object FormTabsBar1: TFormTabsBar
Left = 0
Top = 486
Width = 610
Height = 30
Align = alBottom
ParentColor = False
TabOptions.ShowFormIcon = True
TabOptions.ShowFormSystemMenu = True
TabOptions.ShowCloseButton = True
TabOptions.ShowHintForTruncatedCaption = True
TabMinWidth = 100
TabMaxWidth = 250
Visible = False
ShowTabsMenuButton = True
end
object Panel1: TPanel
Left = 0
Top = 0
Width = 610
Height = 97
Align = alTop
Caption = 'Panel1'
TabOrder = 2
OnClick = Panel1Click
object NewBtn: TButton
Left = 20
Top = 28
Width = 75
Height = 25
Caption = 'NewBtn'
TabOrder = 0
OnClick = NewBtnClick
end
end
object OpenDialog: TOpenDialog
Filter = 'All files (*.*)|*.*'
Left = 16
Top = 272
end
... Image data removed...
end
procedure TMainForm.Panel1Click(Sender: TObject);
begin
if Panel1.Height > 100 then
Panel1.Height := Panel1.Height - 20
else
Panel1.Height := Panel1.Height + 20;
end;
procedure TMainForm.NewBtnClick(Sender: TObject);
begin
FileNew1Execute(nil);
end;
您可以在 Panel1Click 事件处理程序中使用此解决方法,并将 Vcl.Themes 包含在使用列表中: