问题标签 [tform]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1154 浏览

delphi - Delphi - 是否可以禁用 Delphi 的表单延迟加载?

我听说 Delphi 应用程序使用“延迟加载”,延迟加载表单组件,直到它们被实际引用。在另一篇文章中提到了- “这就是我们将 TPageControl 更改为延迟加载的原因 - Delphi IDE 的选项对话框加载时间过长!”

我认为这也适用于使用 Delphi 创建的应用程序,但我在 VCL 源代码中找不到任何提及延迟加载的内容,这表明如果它确实存在,它可能被称为其他东西。

在正常使用中,应用程序不经常启动并运行很长时间的情况下,可能需要放弃更快的启动时间并在第一次实际使用 VCL 组件时更快地绘制 VCL 组件。

Delphi 程序员对此有任何控制权吗?(LazyLoad := false ;没用;-)

0 投票
1 回答
392 浏览

delphi - 为什么 TForm.Handle 是一个吸气剂而不是一个字段?

我最近在调试一个复杂的错误。它是由访问不存在的Form.Handle(垃圾指针)引起的。对我来说,这个错误以一种相当出乎意料的方式暴露出来——访问表单会Handle导致调整大小和重绘。

我希望Form.Handle通过垃圾指针访问只会返回一些垃圾 Thandle。期望Handle在表单创建时创建一次并保持不变,直到表单被销毁。

问题

为什么会这样,那TForm.Handle不是在创建表单时初始化并通过以下方式访问的字段

, 但是是吸气剂

CreateWnd在首次访问时创建句柄甚至窗口( )?

0 投票
1 回答
1004 浏览

delphi - 从 Delphi 获取表单标题栏颜色

我的问题很简单,但我找不到任何有关它的信息。我需要从 Delphi 中检测有关 TitleBar 的一些信息;例如哪个是高度,特别是它的颜色是什么?我认为有一些 Windows API,但我在网上找不到任何东西。有人可以建议我如何完成这些任务。

0 投票
0 回答
66 浏览

delphi - -8的TForm最大化左偏移从何而来

Form.WindowState := wsMaximized;在主屏幕上最大化普通 TForm时,属性 Left 为 -8 , Width 为 eg Screen.Monitors[0].BoundsRect.Width+8

当我想通过 'Form.Top、.Left、.Width、.Height' 将 Forms 的绝对位置设置为活动的 Monitors WorkingArea 时,由于缺少 8 个像素,总会出现间隙。

每个方向上 8 的额外偏移量是从哪里来的,为什么有必要?

我的测试表格(带有一个按钮来切换一些定位状态)

将状态设置为 3 或 4 时,会有间隙。为什么?

0 投票
1 回答
1566 浏览

delphi - 为什么 TForm.SetBounds 只有在设计时将 TForm.Position 设置为 poDefault 时才能正常工作

我注意到一些非常奇怪的事情。我在关闭窗体时保留窗体的顶部、左侧、宽度和高度属性,并使用此信息在窗体再次打开时恢复窗体的最后位置,方法是使用先前存储的信息调用 SetBounds。这很好用,但前提是表单的 Position 属性在设计时设置为 poDefault。如果设置为其他值,例如 poDesigned、poScreenCenter 或 poMainFormCenter,SetBounds 不会恢复表单的先前位置和大小。

这是奇怪的部分。重要的是在设计时将 Position 属性设置为什么。我可以在运行时将此属性的值更改为 poDefault,并且对 SetBounds 的调用仍然无法正常工作。我尝试过类似以下的方法

在表单的 OnCreate 事件处理程序以及重写的构造函数中(并在构造函数中将 Position 设置为 poDefault,并在 OnCreate 事件处理程序中调用 SetBounds)。在所有情况下,在运行时将表单的 Position 属性更改为 poDefault 并不能解决我在使用 SetBounds 时观察到的问题。我发现的唯一一致的模式是,只有当表单的 Position 属性在设计时是 poDefault 时,SetBounds 才能正常工作。

当表单的 Position 属性在设计时未设置为 poDefault 时,关于 SetBounds 如何工作,我还注意到了其他一些事情。例如,如果您调用 SetBounds,则在设计时将 Position 属性设置为 poScreenCenter 的窗体不一定会在屏幕上居中显示。但是,它不会出现在由 SetBounds 定义的左上角位置,也不会遵守对 SetBounds 的调用中指定的宽度和高度。然而,让我再说一遍,我在调用 SetBounds 之前将表单的 Position 属性设置为 poDefault。我什至在两个操作之间调用了 Application.ProcessMessages ,但这并不能解决问题。

我已经使用在 Windows 10 上运行的 Delphi 10.1 Berlin 对此进行了广泛测试。我还在 Windows 7 上使用 Delphi XE6 对其进行了测试。结果相同。

如果您有疑问,请创建一个具有四种形式的 VCL 应用程序。在第一个表单上放置三个按钮,并为每个按钮添加类似于以下 OnClick 的内容:

其中构造函数创建 TForm2,然后创建 TForm3 和 TForm4。

在表单 2 到 4 的 OnCreate 上,添加以下代码:

在 form2 上,将 Position 设置为 poDefault,在 form3 上将 Position 设置为 poScreenCenter,在 form4 上将 Position 设置为默认值 poDefaultPosOnly。只有form2会出现在500、500,宽500,高500。

有人对这个结果有合理的解释吗?

0 投票
0 回答
391 浏览

delphi - 为什么 TForm 后代的类名很重要?

在下面的 VCL Forms 应用程序中,Application.MainForm 被隐藏,而是显示另一个 TForm 后代。奇怪的是,只有这个TForm后代的名字以“TForm”开头,按Alt+Tab时才能看到。如果其名称不以“TForm”开头,则在 Alt+Tab 时看不到。以上是在 Windows 10 Ann Edition x64 上使用 Delphi XE-Berlin 测试的。

你能帮忙评论一下类名在这里很重要的原因吗?O_O

此外,TForm 后代的类名在其他地方是否重要?

程序

主窗体的单元(即 Application.MainForm)

实际“主”表格的单位

问题If its name does not start with "TForm", it can not be seen when Alt+Tab.通过以下代码显示出来。唯一的区别是类名从 TFormActualMainForm 更改为 TXFormActualMainForm。

程序

实际“主”表格的单位

0 投票
1 回答
60 浏览

delphi-xe - Delphi屏幕尺寸在同一台机器上的两个应用程序上不同......如何解决?

我有两个使用相同表单的应用程序。我注意到,当我运行应用程序时,这些表单的显示方式有所不同。我把这段代码放在项目源代码的顶部:

aDAM2-screen.txt 显示:aDAM2.Desktop TLHW:0、0、720、1280

aDAM3-screen.txt 显示:aDAM3.Desktop TLHW:0、0、1080、1920

我不明白这是如何发生的,并且无法解决这个问题,特别是考虑到 TScreen 属性是只读的。

0 投票
2 回答
2499 浏览

delphi - 在 TForm 的 OnClose 事件中释放一个对象

我是 Delphi 的新手,我的问题可能非常基本。

我在 Delphi 程序中创建了一个表单。到目前为止,我一直在使用ShowModal()然后释放所有我想在关闭表单后避免泄漏的对象。

现在,我想展示无模式的表单,但我不知道如何释放OnClose事件中的对象。

有人知道它的解决方案吗?

0 投票
1 回答
55 浏览

pascal - "OK" Button (TButton) not showing on Tform (Pascal)

I have a form (Tform) which works fine.

I have added another form which shows the TEdit and TLabel objects, but not the TButton object will not show on the form. The code is below.

The following variables have been declared globally:

Can anyone tell me why the button is not showing up?

This is part of a script written in a program called Ostendo which uses Pascal.

When the button is clicked it will run this procedure, which is only for testing. I will create further code when I can get the OK button to show on the form.

Thanks.

0 投票
1 回答
162 浏览

delphi - 如何在 TForm 的边界之外显示控件(例如 TListbox)

如何在运行时显示超出父窗体边界的列表框:

在此处输入图像描述

图像是在设计时单击列表框时从 IDE 获取的。我想在运行时达到这个效果。