Для получения рабочей области декстопа (минус панель задач, панель Microsoft и т.д.), используем SystemParametersInfo, первый параметр которой SPI_GETWORKAREA.
Code: |
...
private procedure WMWINDOWPOSCHANGING (Var Msg: TWMWINDOWPOSCHANGING); message WM_WINDOWPOSCHANGING;
...
procedure TfrMain.WMWINDOWPOSCHANGING (var Msg: TWMWINDOWPOSCHANGING); const Docked: Boolean = FALSE; var rWorkArea: TRect; StickAt : Word; begin StickAt := StrToInt(edStickAt.Text);
SystemParametersInfo (SPI_GETWORKAREA, 0, @rWorkArea, 0);
with Msg.WindowPos^ do begin if chkLeft.Checked then if x <= rWorkArea.Left + StickAt then begin x := rWorkArea.Left; Docked := TRUE; end;
if chkRight.Checked then if x + cx >= rWorkArea.Right - StickAt then begin x := rWorkArea.Right - cx; Docked := TRUE; end;
if chkTop.Checked then if y <= rWorkArea.Top + StickAt then begin y := rWorkArea.Top; Docked := TRUE; end;
if chkBottom.Checked then if y + cy >= rWorkArea.Bottom - StickAt then begin y := rWorkArea.Bottom - cy; Docked := TRUE; end;
if Docked then begin with rWorkArea do begin // не должна вылезать за пределы экрана if x < Left then x := Left; if x + cx > Right then x := Right - cx; if y < Top then y := Top; if y + cy > Bottom then y := Bottom - cy; end; {ширина rWorkArea} end; {} end; {с Msg.WindowPos^}
inherited; end; end. |
Теперь достаточно запустить проект и перетащить форму к любому краю экрана.
Комментарии:
Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.
ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!