问题标签 [tframe]

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 回答
3762 浏览

delphi - Delphi 7 - 为表单中的嵌入式框架处理 MouseWheel 事件?

嗨,我有一个里面有几个框架的表格。

对于某些帧,我希望滚动内容(或至少处理鼠标滚轮事件)。

我尝试了以下方法:

只需为每个帧分配一个 OnMouseWheel 事件处理程序

覆盖父窗体的 MouseWheel 事件:

不幸的是,两者似乎都不起作用。

  • 在情况 1 中,该事件永远不会触发,但是会触发父窗体鼠标滚轮处理程序。
  • 在案例 2 中,接收焦点的控件是包含我希望将鼠标滚轮事件发送到的框架的面板。

所以,简而言之,我如何将鼠标滚轮事件引导到鼠标光标所在的最顶层控件(不管光标在哪个框架/父/窗体等)?

0 投票
1 回答
1171 浏览

delphi - 为什么表单不接收 TFrame 子级的 WM_NOTIFY 消息?

WM_NOTIFY 消息通常用于就地“工具提示”(消息气球)和其他控件通知,但如果我将控件放在 TFrame 上,则这些控件永远不会出现 WM_NOTIFY 消息。为什么这些消息不再发送到我的表单,我该怎么办?

0 投票
4 回答
18343 浏览

delphi - 为什么我的 TScrollBox 不显示滚动条?

这似乎是一个非常简单的问题,但我无法让滚动框显示滚动条,这让我发疯。

这是情况。我需要在表单的一部分中显示可变数量的帧。可以通过 TSplitter 或通过调整窗体大小来调整显示这些帧的区域的大小。

创建表单时,我正在根据数据库中的记录动态生成框架。此框架是 FlowPanel 的父级,FlowPanel 负责放置框架。FlowPanel 位于 ScrollBox 中。

由于 FlowPanel,当用户使用 TSplitter 或调整表单大小时,框架可能会重新对齐。如果任何框架重新定位到表单视图之外,我希望 ScrollBox 显示滚动条,以便用户可以向下滚动到那些无法访问的框架。这不会发生。无法访问位于滚动框尺寸之外的流程面板区域中的那些框架。

我用滚动框中的简单对象构建了一些测试,如果滚动框包含的任何对象出现在滚动框的尺寸之外,滚动框就会正确放置滚动条。

流面板是否与 clClient(滚动框)对齐或锚定到滚动框的侧面,或者这些都没有,都没有关系。

我意识到我可以改用 TPanel,并在面板的 OnResize 事件处理程序的代码中执行框架的放置和重新定位,但这就是 FlowPanel 的用途。

这里发生了什么?我摆弄了许多不同的滚动框属性,但仍然无法让它工作。有什么问题,有解决办法吗?


好的。我选择 Ewe 的答案是正确的,但完成这项工作的诀窍在于他的评论之一,我仍然对结果不完全满意。

这是独家新闻。我确实按照 Ewe 建议的方式配置了 ScrollBox 和 FlowPanel,但由于该配置不起作用,我尝试了许多其他设置。我很确定这是由于表单的用户界面的复杂性,它在面板中有许多面板,许多拆分器,并且表单本身是 PageControl 的 TabSheet 的父级(我省略了这个事实,因为测试表单作为一个支架单独的形式产生相同的结果)。

是什么使它工作,尽管以一种笨重的方式,是 Ewe 建议关闭并再次打开 FlowPanel 的 AutoWrap。我在 ScrollBox 的 OnResize 事件处理程序中添加了以下代码:

调整大小时会出现明显的闪烁,但我可以忍受,因为它会产生所需的结果。一旦用户调整表单大小,它总是会使用这些尺寸重新创建,因此调整大小是用户很少会做的事情。

0 投票
1 回答
2390 浏览

c++ - 在运行时从窗体中删除 TFrame

我正在使用 C++ Builder 创建一个 VCL 表单应用程序。现在我有一个包含一堆组件的 TFrame,它看起来像这样......

在此处输入图像描述

我还有一个名为“添加”的按钮。基本上每次我按下表单上的 Add 按钮时,都会在其中添加一个新的 TFrame,并在前一个 TFrame 的下方创建一个看起来像表格的东西。为了添加重复项,我必须在每次创建 TFrame 之前重命名它。

那么 TFrame 的命名将是 TFrame1、TFrame2、TFrame3 等。

现在的问题是我想这样做,所以每次我按下 TFrame 的“X”按钮时,它都会删除该 TFrame,我不太确定该怎么做。我在想,也许每次我创建一个 TFrame 时,我也可以重命名“X”按钮,所以它就像 Button1、Button2、Button3 等。然后删除程序只需将 ButtonX 与 TFrameX 匹配以确定要删除的 TFrame。例如,如果我按下按钮 4,它应该与 TFrame4 匹配并删除 TFrame4。

我不知道如何实现这个想法。或者会有更简单的方法吗?

0 投票
0 回答
258 浏览

c++ - 带有 TFrame 的树结构

在此处输入图像描述

对不起,我不能用油漆画得更好。我在这里尝试做的是使用 TFrames 创建一个树结构(如图片中的那个)。基本上,当我按下 + 按钮时,树中会添加一个新的 TFrame。我正在使用 C++ Builder,我知道如何添加 TFrame,我的问题是我不知道如何绘制树的绿线。

先谢谢了。

0 投票
1 回答
373 浏览

c++ - 在运行时更改 tframe 的大小

在此处输入图像描述

首先,关于我,我对 GUI 编程非常陌生,尤其是使用 C++ Builder。我有一个包含一行单元格的 tframe,就像上面的图片一样。有一个 + 按钮,当按下时,一个单元格只会添加到最后一列,如图所示。我想知道是否可以在运行时更改 tframe 的大小,因为最后一列变得越来越大。tframe 必须从一行单元格的大小开始。此 tframe 不能有滚动条。随着单元格添加到最后一列,它只需要扩展高度。

提前致谢。


更多信息。

这是添加红细胞的 tframe 本身的编码(这也是另一个 tframe jsut fyi)。此 tframe 也被添加到滚动框中。为了更好地理解,请参阅Tree Structure with TFrames中的图片。最终目标是创建 tframe 的树形结构。

这个特定任务中的 tframe 是另一个问题图片中最右边的 tframe。

解释这个有点棘手,所以如果你需要澄清,请告诉我,谢谢。

0 投票
1 回答
798 浏览

runtime - 在运行时将 Tframe 添加到另一个 Tframe

我有 2 个 tframe 和一个添加按钮。我试图在按下按钮时将一个 tframe 添加到另一个上。但由于我们的原因,我的代码似乎无法正常工作。它没有像想象的那样添加框架。没有错误或正在运行,它编译并运行,但是当我按下按钮时它什么也不做。当我将 tframe 添加到滚动框时,我让它工作了,我所做的只是更改要添加的 tframe 的位置。

TFrame2 的代码

这是我用于 TFrame1 本身的代码

一个 lil bg 信息:我必须将 tframe 添加到另一个 tframe 的原因是我可以将一组组件添加到另一组组件中,我不知道任何其他方法可以做到这一点。稍后我将 tframe2 添加到主窗体中。

0 投票
3 回答
2293 浏览

delphi - 如何强制 TFrame 上的组件拥有自己的事件处理程序?

我很难让 Delphi 2006 将事件处理程序分配给 TFrame 上独立的组件。

假设我有一个TComboFrame包含 TCombo 的框架,Combo1我在主窗体的几个地方使用它。

当我将 TComboFrame 的实例放置MyFrame1到我的主窗体上,并且我想为组合分配一个事件处理程序时,我通过单击MyFrame1放置在窗体上的框架内的 TCombo 并双击空白 OnChange字段来实现在对象检查器事件选项卡中。

通常会创建一个新的处理程序,其名称如下:

并且事件处理程序名称源自祖先 TComboFrame ( Combo1) 上的组件名称和我放置在表单 ( MyFrame1) 上的实例名称 - 即对于 TComboFrame 的该实例是唯一的。然后,我可以对放在主窗体上的框架的其他实例执行此操作,并且它们每个都有自己的事件处理程序。

如果我想要一个为框架的所有实例触发的事件处理程序,我会打开祖先框架本身并在那里执行。

这是我对它应该如何工作的理解,但是某处出了点问题。在我的主窗体上的几个框架实例中,有些有自己的事件处理程序,有些有一个通用的事件处理程序,

我尝试过的任何事情都没有破坏这个幻像链接 Delphi 似乎与这个由多个框架共享的公共事件处理程序具有。

我该如何修复这种状态,首先是什么原因造成的?

** 更新 1 **

在阅读了回复和一些实验后,我发现我可以通过以下过程修复有问题的组件:

1)删除框架的所有事件处理程序。
2)删除框架,记住它的名字。
3)复制另一个已知可以的(即有自己的“个人”事件名称)。
4)粘贴那个代替你删除的那个。
5)恢复原名。
6) 创建您的事件处理程序。

...至少,它至少对我有用一次...

** 更新 2 **

另一种解决方法似乎是改写它在对象检查器中双击空事件字段时创建的事件处理程序名称,并使用一个新的唯一名称,然后再次双击该名称。Delphi 然后创建一个具有唯一名称的空处理程序。

0 投票
1 回答
875 浏览

delphi - Delphi 2010 我可以有一个具有通用属性和方法的 TFrame 来传递事件吗?

我有一个 TFrame,用于在 Delphi 2010 VCL 项目中搜索实体,在 TFrame 中我有一个按钮编辑,允许用户打开特定表单以浏览该实体。(所有浏览表单都继承自一个通用的基本浏览表单)目前我通过从基本框架继承来实现这一点,然后实现触发特定表单的 Browse 事件。每次唯一的区别是单击事件上显示的形式(类型),有没有一种方法可以用泛型实现这一点。这样我就可以重用相同的基本框架,而不必为每个实体重写相同的代码(有超过 100 个),并且在主机表单的表单创建中传递类型约束以在浏览时打开适当的表单。我尝试向框架添加泛型类型:

然后在选择器框架中,我公开了可以从主机表单的创建事件中调用的 Start :

事实是,我在 Delphi 中并没有真正获得泛型,而且这些都不起作用。以下是框架的摘录:

有没有人有类似要求的经验?任何帮助,将不胜感激。谢谢

以下是机架主浏览器的示例:

基类

0 投票
1 回答
734 浏览

delphi - 在 TTabSheet 中将 Tframe 居中;

我有一个使用PageControl带有多个TabSheets. 我还在TabSheets运行时创建新的并用预定义帧的实例填充它们。这些框架效果很好,除了不集中在TabSheet. 我曾尝试使用Frame.Align := alClient,但没有这样做。相关代码如下:

CreateNewPage创建 a 的新实例TabSheet并使其成为PageControl它的所有者和父级。结果被分配给全局变量NewInputPage