Автор: 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 удалить все упоминания этих переменных.
- << Назад
- Вперёд
Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.
ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!