【发布时间】:2021-05-30 12:20:25
【问题描述】:
我有一个代码可以使用鼠标在Form 中创建一个洞。
var
FormRegion, HoleRegion: HRGN;
begin
FormRegion := CreateRectRgn(0, 0, Form1.Width, Form1.Height);
HoleRegion := CreateRectRgn(X1, Y1, X2, Y2);
CombineRgn(FormRegion, FormRegion, HoleRegion, RGN_DIFF);
SetWindowRgn(Form1.Handle, FormRegion, True);
end;
现在我希望将一个Panel(已经具有固定高度)始终放在孔区域上方(并且具有相同的孔宽度)来模拟标题栏,如下所示:
如何制作?
【问题讨论】:
-
跟踪最小 Y 坐标和最小和最大 X 坐标?
-
无法回答:您没有提供足够的代码。显示一个我们可以理解和玩的minimal reproducible example。
-
@Andreas Rejbrand,尝试过:
SetWindowPos(Form1.Panel1.Handle, HWND_TOPMOST, X1, Y1, X2, Y2, 0);但没用。但我认为SetWindowPos是正确的方法,因为它具有正确的偏移量。 -
但是您还没有指定当组合窗口的非透明部分与面板的高度不同时应该发生什么。面板是否应该调整大小?不透明部分是否应该调整大小?还是应该发生其他事情?或者不应该发生任何具体的事情(无论发生什么,发生,那又怎样?)。
-
您需要适当地设置面板的顶部、左侧和宽度,并且面板对齐必须设置为无。这只是简单的数学运算(左:= X1,上:= Y1-PanelHeight 等)。
标签: delphi delphi-10.3-rio tpanel