- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试在 TGraphicControl
组件(例如 TLabel 和 TImage)上使用 FindVCLWindow
,以便我可以在标签或状态栏中返回它们的名称,但我面临一些问题。
问题1
第一个问题是 FindVCLWindow
仅适用于 TWinControl
而不适用于 TGraphicControl
的后代,所以我尝试弄乱以下内容似乎有效:
function FindVCLGraphicWindow(const Pos: TPoint): TGraphicControl;
var
Window: TWinControl;
Ctrl: TControl;
begin
Result := nil;
Window := FindVCLWindow(Pos);
if Window <> nil then
begin
Ctrl := Window.ControlAtPos(Window.ScreenToClient(Pos), True, True, True);
if Ctrl is TGraphicControl then
begin
Result := TGraphicControl(Ctrl);
end;
end;
end;
我猜这是一个问题,因为它似乎有效,但也许有更好的解决方案?
问题2
我遇到的最大问题是,我需要上述函数来处理的标签和图像位于 TPaintBox 下方,因此标签或图像组件似乎无法接收或响应鼠标移动。换句话说,除非标签或图像位于顶部(即 BringToFront),否则该功能不起作用。
我记得不久前从我在这里发布的另一个问题中了解到,通过将 TPaintbox 设置为 Enabled := False
将允许底层控件接收鼠标消息等。
但是,使用上述函数总是返回 nil/false,因为它“看不到”painbox 下方的图形控件。
所以我的主要问题是,如何在 TPaintBox 后面的 TGraphicControl
上使用像 FindVCLWindow
这样的函数?
例如,如果以下控件位于面板内:
Image1.SendToBack;
Image2.SendToBack;
Label1.SendToBack;
Label2.SendToBack;
PaintBox1.BringToFront;
只有当它们不在油漆箱后面时,上述方法才有效。
不能将图像和标签放在颜料盒上方,它们必须位于颜料盒后面,但这样做不会响应上述功能。
那么我该如何让它工作呢?该函数似乎只能看到颜料盒,而看不到底层图像和标签?
最佳答案
TWinControl.ControlAtPos
的第二个参数指定是否允许禁用的控件。您将其设置为True
,因此它将返回禁用的PaintBox。设置它False
,你的函数将返回PaintBox后面的标签和图像:
function FindVCLGraphicWindow(const Pos: TPoint): TGraphicControl;
var
Window: TWinControl;
Ctrl: TControl;
begin
Result := nil;
Window := FindVCLWindow(Pos);
if Window <> nil then
begin
Ctrl := Window.ControlAtPos(Window.ScreenToClient(Pos), False, True, True);
if Ctrl is TGraphicControl then
begin
Result := TGraphicControl(Ctrl);
end;
end;
end;
关于delphi - 如何在 TPaintBox 下方的 TGraphicControl 上使用 FindVCLWindow?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27626505/
我正在尝试在 TGraphicControl 组件(例如 TLabel 和 TImage)上使用 FindVCLWindow ,以便我可以在标签或状态栏中返回它们的名称,但我面临一些问题。 问题1 第
我是一名优秀的程序员,十分优秀!