问题标签 [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 投票
2 回答
1753 浏览

delphi - 表格自动显示而我没有告诉他们?

现在,我在过去 5 年中创建了至少 300 多种手动创建的表单,我从未见过这个问题。我当然有一个主窗体,然后是一堆较小的子窗体。这些子表单不是自动创建的,它们是在我的代码中手动声明和创建的。这个项目还为时过早,这意味着这个项目中没有太多我可能遗漏的代码。但问题是,我所做的只是创建表单,将父表单分配给主表单,并且没有任何代码来显示表单,它无论如何都会显示它自己。

这就是我必须创建它的所有代码。绝对没有代码是实际的子形式。至少应该FControlPanel.Show让它可见,但由于某种原因,它无论如何都是可见的。

我确实有一种预感,可能是什么导致了这种行为的开始。但我不能把两个和两个放在一起。我尝试使用 MDI 表单功能,将表单保留在主表单中。但经过多次试验/错误场景后,我放弃并重新设置了我的属性。我更改的唯一属性是 FormStyle - 我在 fsMDIForm、fsNormal 和 fsStayOnTop 之间切换(用于试验)的主要表单。子窗体我将它们切换到 fsMDIChild。放弃后,我将它们全部切换回默认值 fsNormal。当这个“车展”开始发生时,就是在这个游戏之后。

另外,可能需要注意的是,这些子表单是从主表单继承的。这个主表单实际上也没有代码,至少没有可能显示它的代码。在我的任何代码中,我都没有告诉它显示这些子表单,但无论如何它都会这样做。而且我知道它们不是自动创建的。

我做错了什么?

PS - 通常实现 MDI 的问题是另一个问题,我不是在问 MDI,但它可能是导致这种情况发生的原因,因为已知更改组件的属性会永久切换组件的内部属性,例如,在 TPanel 上,将“ParentBackground”切换为 true 然后再次切换回 false 会导致它在使用 XPMan 时正确显示指定的颜色。

0 投票
3 回答
848 浏览

delphi - 如何实现某种形式的表单管理器?

我正在进行一个包含许多子表单的项目。许多表格可能会同时打开。我想知道是否已经有一些东西可以用来管理和跟踪这些表单,就像 Windows 任务栏和/或任务管理器一样。如果不是,那么最好的方法是什么?如果这已经完成,我不想重新发明轮子。

描述

如上所述,这个项目有许多表格,可以一次打开。我还将实现一些可视化列表控件(很像任务栏或任务管理器)以供用户控制这些表单(或者在用户的情况下,这些表单称为窗口)。管理这些最理想的方法是首先在创建这些表单时捕获它们中的每一个,并将它们记录在某个地方。有些表单需要这种行为,有些表单不需要。例如,模态表单永远不需要这种处理。

我将授予用户显示、最小化或关闭这些表单的权限,以及其他一些未来未曾考虑过的处理,例如可能与这些表单之一关联的自定义弹出菜单(但这是另一个主题)。关键是,我需要构建一些东西来捕获这些表单并保持它们井然有序。

这还将包括一次与所有表单的其他一些用户交互,以及对每个表单的简单访问,类似于 Screen.Forms 已经工作的方式。例如,最小化所有表单 ( FormManager.MinimizeAll)、最大化当前活动表单 ( FormManager.ActiveForm.Maximize) 或使用特定表单 ( FormManager[3].Maximize) 的命令。

可能的选项

我知道有几种截然不同的方法可以实现相似的结果,并且还没有开始编码,因为每种方法都有不同的起点。选项是...

  • 从 Screen 中包装 Screen.Forms 和其他相关功能(这不会提供我想要的太多灵活性)
  • 每次我创建一个表单时,用这个表单管理器注册它(这很灵活,但我必须确保我总是注册每个创建的表单)
  • 构建一个主表单以向表单管理器注册其自身并从中继承所有内容(这也非常灵活,但方式不同,而且更复杂)

第二种选择听起来是迄今为止最有希望的。但同样,如果已经有解决方案,我不想开始构建它。我很自信我不是第一个这样做的人。我不知道如何搜索这样的东西,我在谷歌上没有得到任何与我想要的东西相关的东西。

0 投票
2 回答
2168 浏览

delphi - Delphi - 子表单具有父框架

我有一个具有多种形式的德尔福应用程序。最初我尝试了一个设置,其中每个新打开的表单都是一个框架,并且这个表单的“父级”(无论调用哪个打开表单)都被隐藏,因为孩子被显示,孩子正在调整大小和重新定位以提供无缝效果有一个窗口,当孩子关闭时,父母被重新定位并再次可见。所有窗体的 Windows 标题栏都具有 bsSingle 边框样式。这种方法非常适合定位,但是我遇到的问题是当父窗体关闭而子窗体打开时出现明显的闪烁,并且由于有一小段时间没有打开窗体,所以开始栏上的图标/托盘会左右移动它本身变得隐藏和可见。

有人对解决这个问题有什么建议吗?我想也许如果我在应用程序中只有一个带有边框的表单并在这个边框内打开每个新表单,它会更好地工作 - 尽管我不确定如何准确地做到这一点。

任何帮助深表感谢。

0 投票
3 回答
6595 浏览

delphi - 使用 ScaleBy() 后如何将 delphi TForm 重置为原始外观

我想允许用户调整表单的大小,并按比例调整其控件的大小。ScaleBy( N,M ) 对我来说效果很好,但如果重复的话,当然会有累积的舍入误差。为了解决这个问题,我只想在 ScaleBy() 之前调用以默认外观和大小重新创建表单,然后使用各种值调用 ScaleBy。我知道我可以通过在面板中托管我的表单(并处理/重新创建它)来做到这一点,但是是否有一个调用会在使用 ScaleBy() 后重置表单?

编辑 - 我正在使用 Delphi XE2,并且对任何人成功使用组件或其他代码(付费或免费)来整齐地缩放表单感兴趣 - 我自己的下载没有产生有效的解决方案。

0 投票
5 回答
6262 浏览

delphi - 如何从表单外部捕获表单的某些事件?

我正在做一些需要监控许多表格的事情。从表单外部,并且不将任何代码放入表单内,我需要以某种方式从这些表单中捕获事件,最有可能以 Windows 消息的形式。但是,您将如何从与其相关的类之外捕获 Windows 消息?

我的项目有一个对象,它包装了它正在监视的每个表单,我认为这个处理将进入这个对象。本质上,当我创建要监视的表单时,我会创建一个相应的对象,该对象又会添加到所有已创建表单的列表中。最重要的是,当该表单关闭时,我必须知道这样才能从列表中删除该表单的包装对象。

这些事件包括:

  • 最小化
  • 最大化
  • 恢复
  • 聚焦/聚焦

我不想要的:

  • 用于此处理的任何表单或表单单元内的任何代码
  • 从任何自定义基本表单继承表单
  • 使用表单的事件,例如OnClose因为它们将用于其他目的

我想要什么:

  • 处理这些事件的 Windows 消息
  • 关于如何从课堂外获取 Windows 消息的任何提示
  • 我需要收听哪些 Windows 消息

用相同的信息但不同的方法重写了问题

0 投票
2 回答
1434 浏览

delphi - 如何在不关闭整个程序的情况下关闭窗口?

在我的应用程序中,我有两种形式,比如说 LoginForm 和 AccountForm

LoginForm 被设置为主表单,它是用户能够登录到他的帐户时的表单(两个 TEdits 和登录按钮)。当用户键入他的登录详细信息并连接时,将打开一个新表单,即 AccountForm。

如何在不关闭整个应用程序的情况下在登录成功时关闭 LoginForm?或者在这种语言中如何使用下面的代码只关闭登录表单而不关闭应用程序。

谢谢

0 投票
1 回答
345 浏览

delphi - 应用程序关闭时是否在表单中触发事件

我的应用程序产生了几个独立的表单。一旦创建应用程序就会忘记它们。所有操作都以该表单本身处理。当应用程序关闭时,表格也会关闭,我想是 RTS。这很好,除了 OnClose 和 OnDestroy 事件都没有被触发,因此会发生内存泄漏。我可以管理存在哪些表格(就像我现在所做的那样),但实际上应用程序必须完全忘记这些表格。

有没有办法在不是应用程序主表单的表单内部检测应用程序正在关闭的过程中?

0 投票
1 回答
1067 浏览

delphi - 防止在透明表单上点击

我想在表单背景不可见的情况下绘制表单中的函数。创建了一个 TForm,TransparentColor 设置为 True,TransParentColorValue 设置为 clWhite。只需在上面放一个 TImage,在位图上绘制一个函数,将其分配给图像,效果很好。有一个问题。我不能再点击表格了。对表单标题和客户区的任何点击都会导致对底层应用程序的点击。这是由将 TransparentColor 设置为 True 引起的。我怎样才能防止这种“点击通过”?

更新 我尝试了 Sertac 的建议,我得到了一些显着的结果。我准备位图如下:

当 Color 设置为 clWhite 和 Forms TransparentColorValue 时,表单完全启用了点击。

都设置为 clBlack,窗体可以移动,但边框不能调整大小,系统按钮不起作用

两者都设置为 clFuchsia,它的行为与普通表单一样。好吧,它现在有效,但也许有人得到了解释?

0 投票
1 回答
236 浏览

windows - 尺寸大于屏幕尺寸的表单截图

我有一个 TForm 对象,其高度大于屏幕所需的垂直分辨率。

出于某种原因,Windows 不允许表单的可见(客户端?)区域超过屏幕分辨率,因此垂直滚动条出现在我的表单上。

如何获得整个表单的 TBitmap 图像或屏幕截图(没有滚动条,所有表单组件可见),以便表单的所有内容都可见?

0 投票
2 回答
266 浏览

delphi - ParentBackground 如何在 IDE 生成的表单上工作?

此代码适用于 VCL 表单应用程序中的 IDE 生成表单:


但为什么?TForm上级( , TCustomForm, )均未TScrollingWinControl公布受保护ParentBackgroundTWinControl. 单元顶部的表单(fi 'TForm1')的类型声明也没有。事实上,正如预期的那样,这

不编译(“无法访问受保护的符号 TWinControl.ParentBackground”)。与在运行时创建的任何表单相同。


注意:问题在于如何设置属性(顺便说一句,还有其他属性,例如“Bevel [xxx]”),我想知道它是如何工作的。