问题标签 [tpanel]
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.
delphi - 如何在 TPanel 上绘图
我需要在 TPanel 上绘制,理想情况下是直接绘制,这样我就没有其他组件在它上面妨碍 mousevent 事件捕获(我想在它上面画一点“大小抓地力”)。我该怎么做呢?
delphi - Delphi 组件未绘制
我有组件(TPanel 的后代),我在其中实现了 Transparency 和 BrushStyle(使用 TImage)属性。
当我在表单上有一个这种类型的组件时,一切都好。当我在表单上添加更多这种类型的组件时,只会绘制第一个可见组件。当表单被移动并且第一个组件位于其他窗口或桌面外部时,下一个组件被绘制。
怎么了?
delphi - 如何打印 TPanel 内容?
我有 TPanel。在这个面板上有一个 TImage 后代,很少有其他面板带有控件等。实际上,图片包含一些图表,而在运行时创建了带有标签的其他面板,以向用户提供额外的信息。
最近有人告诉我,如果可以打印此面板,并以它的形式出现在纸上,那就太好了。任何线索,如何做到这一点?
delphi - 在 Delphi5 上创建 TPanel 的精确副本
我有一个 TPanel pnlMain,其中根据用户操作、数据验证等创建了几个动态 TPanel(并且 pnlMain 是它们的父级)。每个面板都包含一个充满字符串的彩色网格。除了面板,还有一些开源箭头组件和一张图片。一大堆东西。
现在我希望用户能够打印这个面板(我在这个问题上问过如何做到这一点),但在打印之前,必须向用户呈现一个新表单,其中包含 pnlMain 的副本。在此表单上,用户必须进行一些更改,添加一些组件,然后打印他自定义的 pnlMain 副本。打印后用户将关闭此表单并使用原始 pnlMain 返回原始表单。而且——你可以猜到——原来的 pnlMain 必须保持原样。
那么有没有什么聪明的方法可以复制整个 TPanel 及其内容呢?我知道我可以通过 pnlMain.Controls 列表手动迭代。
delphi - Delphi:如何使用 align = alTop 以编程方式调整组件的视觉顺序
我有一个带有多个面板的表单,每个面板都有Align=alTop
,因此它们从表单顶部很好地堆叠起来。
但是,我想动态更改这些面板的外观顺序 - 即上下移动它们。这样做的最佳方法是什么?
delphi - 制作 Delphi TPanel 字幕包装
有没有办法将文本包装TPanel.Caption
在 Delphi 中(在我的情况下为 Delphi 6)?
delphi - Delphi - 在第二种形式上重复 tpanel 和 tbuttons
在我的主窗体上,我有一个 TPanel,其中包含用作工具栏的按钮。我想将此工具栏和按钮及其功能克隆/复制到第二种形式。
使用 newmenu.merge(mainmenu) 克隆菜单很简单。这是复制 Tmainmenu 的绝佳捷径。
但是我不知道如何轻松复制我的工具栏,而无需手动分配事件并保留一个计时器来比较和跟踪与主窗体上的真实主菜单相比哪些按钮被启用和禁用。根据应用程序正在执行的操作,主工具栏按钮将在不同时间启用和禁用。
这里有什么想法吗?感谢您提供任何建议或提示以使这更容易。
delphi - 如何创建一个行为类似于 Tpanel 的 TCustomControl?
如何创建一个行为类似于 Tpanel 的 TCustomControl?例如 MyCustomComponent,我可以将组件放入标签、图像等中。
delphi - 如何使用 Delphi 的 TSplitter 和面板避免这种不需要的行为?
包括一个展示我的问题的小项目。我TPageControl
与主表格对齐。在两个标签页中的每一个上,我都有面板客户端对齐。在每个面板上,我都有 2 个子面板和一个分离器。左侧面板和分离器左对齐,右侧面板客户端对齐。
基本上问题是两个选项卡之间的交互。展示:
- 运行程序
- 水平拉伸主窗体。面板 3 将增长
- 将分离器尽可能向右移动。面板 2 将增长,面板 3 将缩小到其 10 像素的最小宽度约束。
- 选择标签页 2。面板 5 与设计相同,面板 6 在主窗体被拉伸时增长
- 将主窗体宽度减小到其原始宽度。面板 6 收缩太多(不受欢迎)
- 单击标签页 1. 主窗体的宽度再次增加(不受欢迎)
好的,根据对齐面板的规则,这种行为可能是可以解释的,但是任何人都可以建议改进操作吗?
delphi - 如何消除TPaintBox右边缘的闪烁(例如调整大小时)
总结:
假设我有一个 TForm 和两个面板。面板对齐 alTop 和 alClient。alClient 面板包含一个 TPaintBox,其 OnPaint 涉及绘图代码。
组件上 DoubleBuffered 的默认值为 false。
在绘图过程中,闪烁很明显,因为表格,面板都绘制了它们的背景。
因为表单被面板覆盖,所以截取它的 WM_ERASEBKGND 消息可能没问题。如果不是这样,当窗体调整大小时,可能会在面板上看到闪烁,并在面板的右边缘闪烁,因为窗体绘制了它的背景。
其次,因为 alTop 面板旨在成为某些按钮的容器,所以最好将其 DoubleBuffered 设置为 true 以让 Delphi 确保其上没有闪烁。它可能不会带来太多的性能负担。
第三,由于 alClient 面板仅作为另一个绘图组件的容器,因此该面板很可能不参与最终绘图的组成。在这方面,使用 TPanel 后代而不是标准 TPanel 可能会更好。在这个 TPanel 后代中,覆盖受保护的过程 Paint 并且在过程内部不做任何事情,尤其是不要继承调用以避免基类 TCustomPanel.Paint 中的 FillRect 调用。此外,拦截 WM_ERASEBKGND 消息并且在里面什么也不做。这是因为当TPanel.ParentBackground为False时,Delphi负责重绘背景,为True时,ThemeService负责。
最后,要在 TPaintBox 中进行无闪烁绘制:
(1) 使用 VCL 内置的绘图例程,最好...
(2) 使用 OpenGL,启用 OpenGL 的双缓冲区。
(3) ...
===Q:如何消除TPaintBox右边缘的闪烁?===
假设对于一个 TForm,我有两个面板。顶部相对于表单对齐 alTop 并被视为按钮的容器。另一个是 alClient 相对于窗体对齐,并被视为绘制组件的容器(例如 VCL 中的 TPaintBox,或 Graphics32 中的 TPaintBox32)。对于后一个面板,它的 WM_ERASEBKGND 消息被截获。
现在,我在下面的示例代码中使用了一个 TPaintBox 实例。在它的 OnPaint 处理程序中,我有两种选择来绘制我希望没有闪烁的绘图。选项 1 是在填充矩形后绘制。因为它的父面板不应该擦除背景,所以绘图应该是无闪烁的。选择 2 是在 TBitmap 上绘图,然后将其 Canvas 复制回油漆盒。
但是,两个选项都在闪烁,第二个选项尤其闪烁。我主要关心的是选项 1。如果您调整表单的大小,您会看到闪烁的主要部分发生在右边缘。为什么会这样?有人可以帮助评论原因和可能的解决方案吗?(注意,如果我在这里使用 TPaintBox32 而不是 TPaintBox,右边缘根本不会闪烁。)
我的第二个担心是,当使用选项 1 时,闪烁的小部分随机发生在颜料盒上。如果您快速调整表单大小,这不是很明显但仍然可以观察到。此外,当使用选项 2 时,这种闪烁变得更加严重。我没有找到这个的原因。有人可以帮助评论可能的原因和解决方案吗?
任何建议表示赞赏!
===问:如何正确拦截面板重绘背景?===
(如果我应该在一个单独的问题中问这个问题,请直接说出来,我将删除它。)
新建一个VCL应用,粘贴示例代码,附上FormCreate,运行debug。现在将鼠标悬停在表单上,您可以看到面板正在重新绘制其背景。但是,如示例代码所示,我应该已经通过拦截 WM_ERASEBKGND 消息来拦截此行为。
注意,如果我注释掉这三行,
然后可以捕获 WM_ERASEBKGND 消息。我不知道这种差异。
有人可以帮助评论这种行为的原因,以及如何正确拦截 WM_ERASEBKGND 消息(当 ParentBackground := False 时)?