gpt4 book ai didi

winforms - 从与远边缘不同的约束中调整无边界形式的大小?

转载 作者:行者123 更新时间:2023-12-03 18:23:58 37 4
gpt4 key购买 nike

我有一个没有任何类型边框的自定义表单。我正在绘制一些我自己的自定义边框,这些边框不会延伸到表单的远端。相反,通过使用表单的透明属性,此自定义绘制边框之外的任何内容都是透明的。这使表单的一小部分可用且可见。

我知道有很多解决方案可以实现这一点,而且我已经找到了最合适的方法来做到这一点。但是,此方法假定用户将鼠标沿着表单的远边缘指向。我需要限制它在不同的约束(例如较小的矩形)内使用react。

这是我发现的代码,它已经适用于边缘约束:

procedure WMNCHitTest(var Message: TWMNCHitTest); message WM_NCHITTEST;

....

procedure TForm1.WMNCHitTest(var Message: TWMNCHitTest);
const
EDGEDETECT = 7; //adjust to suit yourself
var
deltaRect: TRect; //not really used as a rect, just a convenient structure
begin
inherited;
if BorderStyle = bsNone then begin
with Message, deltaRect do begin
Left := XPos - BoundsRect.Left;
Right := BoundsRect.Right - XPos;
Top := YPos - BoundsRect.Top;
Bottom := BoundsRect.Bottom - YPos;
if (Top<EDGEDETECT)and(Left<EDGEDETECT) then
Result := HTTOPLEFT
else if (Top<EDGEDETECT)and(Right<EDGEDETECT) then
Result := HTTOPRIGHT
else if (Bottom<EDGEDETECT)and(Left<EDGEDETECT) then
Result := HTBOTTOMLEFT
else if (Bottom<EDGEDETECT)and(Right<EDGEDETECT) then
Result := HTBOTTOMRIGHT
else if (Top<EDGEDETECT) then
Result := HTTOP
else if (Left<EDGEDETECT) then
Result := HTLEFT
else if (Bottom<EDGEDETECT) then
Result := HTBOTTOM
else if (Right<EDGEDETECT) then
Result := HTRIGHT
end;
end;
end;

我将如何改变这个 react 的界限?例如,左右边缘应该 react 10 个像素到表单中。标准格式 rect 可能是 (0, 0, 100, 100)但我希望上面的这个方法在 (10, 3, 90, 97) 的范围内工作

最佳答案

实际上,定义两个常量而不是唯一的 EDGEDETECT 是有意义的。自从
您需要水平和垂直偏移量不同并从头开始编写,但这里有一个快速补丁:

procedure TForm1.WMNCHitTest(var Message: TWMNCHitTest);
const
EDGEDETECT = 17; //adjust to suit yourself // <- increased to suit outer offset
var
deltaRect: TRect; //not really used as a rect, just a convenient structure

OuterRect: TRect; // used as a rect
begin
inherited;
if BorderStyle = bsNone then begin
with Message, deltaRect do begin

..
else if (Right<EDGEDETECT) then
Result := HTRIGHT;
..

OuterRect := BoundsRect; // patch
InflateRect(OuterRect, -10, -3);
if not PtInRect(OuterRect, SmallPointToPoint(Message.Pos)) then
Message.Result := HTTRANSPARENT;

end;
end;
end;

关于winforms - 从与远边缘不同的约束中调整无边界形式的大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8391135/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com