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

Автор: Nashev

 

а так короче... И, ИМХО, лучше:

Code:

procedure TCustomGlueForm.WMWindowPosChanging1(var Msg: TWMWindowPosChanging);

var

WorkArea: TRect;

StickAt : Word;

begin

StickAt := 10;

SystemParametersInfo(SPI_GETWORKAREA, 0, @WorkArea, 0);

with WorkArea, Msg.WindowPos^ do

begin

// Сдвигаем границы для сравнения с левой и верхней сторонами

Right:=Right-cx;

Bottom:=Bottom-cy;

if abs(Left - x) <= StickAt then x := Left;

if abs(Right - x) <= StickAt then x := Right;

if abs(Top - y) <= StickAt then y := Top;

if abs(Bottom - y) <= StickAt then y := Bottom;

end;

inherited;

end;

 

В проекте осталось 2 глюка:

 

1) Если у формы, к которой прицепили другую форму за правую/нижнюю границы попробовать переместить эти границы, прицепленная форма останется на месте но все равно будет прикрепленной.

 

2) Иногда 3 формы прикрепляются друг к другу, и иначе, как воспользовавшись 1-ым глюком, их не расцепить.

 

Состав проекта:

сам проект, uCustomGlueForm - форма с добавленной липкостью 3 формы - пустышки, наследники TCustomGlueForm

 

Для использования сделанного в своих проектах надо добавить в проект, и свои формы создавать, наследуя от него, например, через мастер "File/New..."

В принципе, если липкость нужна без прилипания (а это уже работает без глюков) можно выкинуть все методы, кроме

procedure WMWindowPosChanging(var Msg: TWMWindowPosChanging);message WM_WINDOWPOSCHANGING;

и все переменные, а в самом WMWindowPosChanging удалить все упоминания этих переменных.

 

 

 

 

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

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

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

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


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