2
我有一個自定義窗體,它沒有任何類型的邊框。我正在繪製自己的一些自定義邊框,而不是擴展到窗體的邊緣。相反,通過使用表單的透明屬性,此自定義繪製邊框之外的任何東西都是透明的。這留下了一小部分表單可用和可見。調整無邊界窗體的大小不同於遠邊的限制嗎?
我知道有大量的解決方案可以實現這一目標,並且我已經找到了實現這一目標的最佳方法。但是,此方法假定用戶將鼠標指向窗體的較遠邊緣。我需要限制它在不同的約束條件下作出反應(例如較小的矩形)。
這是我發現的代碼已經工作在一個下到了邊緣約束:
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;
我怎麼會去改變邊界這個反應?例如,左邊和右邊應該在窗體中反應10個像素。標準形式矩形可能是(0, 0, 100, 100)
但我想上面這個方法的(10, 3, 90, 97)
很不錯:D仍然可以使用一個小的調整,但看起來像會做的伎倆。這裏我從未見過的新事物是使用InflateRect,PtInRect和SmallPointToPoint。我相信我會把他們全部弄清楚,謝謝:D –
@Jerry - 不客氣! > *「調整」*>是的,如果你有時間從頭開始寫,它會更好。 –