Содержание материала

 

Для получения рабочей области декстопа (минус панель задач, панель 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.

 

Теперь достаточно запустить проект и перетащить форму к любому краю экрана.

 

Комментарии:

 

Добавить комментарий

Не использовать не нормативную лексику.

Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.

ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!


Защитный код
Обновить