У меня есть пользовательская форма, которая не имеет границ. Вместо этого я рисую некоторые свои собственные границы, которые не доходят до дальних краев формы. Вместо этого все, что находится за пределами этой нарисованной границы, является прозрачным благодаря использованию прозрачных свойств формы. Это оставляет меньшую часть формы для использования и видимости.
Я знаю, что есть множество решений для достижения этой цели, и я уже нашел самый подходящий метод для этого. Однако этот метод предполагает, что пользователь будет указывать мышью вдоль дальних краев формы. Мне нужно ограничить его, чтобы он реагировал из-за различных ограничений (например, прямоугольник меньшего размера).
Вот код, который я нашел, который уже работает с ограничением «почти до края»:
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)