Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Приклеивание окон к краям десктопа [D6, D7, Win2k, WinXP]


superedward ©   (2004-07-23 07:10:00) 

Алл! Нужно реализовать приклеивание сабжа, но не только при перемещении окна, но и при изменении его размера (как WinAmp),
можа у кого код есть?
Поможите ради всего святого!


superedward   (2004-07-23 10:38:00) [1]

To [1]:
Обрабатываю сообщение WINDOWPOSCHANGING:

procedure WMWindowPosChanging(var Msg: TWMWINDOWPOSCHANGING);message WM_WINDOWPOSCHANGING;
begin
if WindowState=wsMaximized then begin
 inherited;
 exit;
end;

if(WindowGlue)then begin{вверх}
  if(Abs(Msg.WindowPos^.Y-DesktopRect.Top)<WindowGlueConst)then begin
   Msg.WindowPos^.Y:=DesktopRect.Top;
  end;

  if(Abs(Msg.WindowPos^.Y-(DesktopRect.Bottom-Msg.WindowPos^.CY))<WindowGlueConst)then begin{вниз}
   Msg.WindowPos^.Y:=DesktopRect.Bottom-Height;
  end;

 end;{if(WindowGlue)then begin}

{дабы размер окна не стал меньше установленного:}
if(Msg.WindowPos^.CX<Constraints.MinWidth)then begin
 if Msg.WindowPos^.X<>OldPosition.Left then Msg.WindowPos^.X:=OldPosition.Right-Constraints.MinWidth;
 Msg.WindowPos^.CX:=Constraints.MinWidth;
end;
if(Msg.WindowPos^.CY<Constraints.MinHeight)then begin
 if Msg.WindowPos^.Y<>OldPosition.Top then Msg.WindowPos^.Y:=OldPosition.Bottom-Constraints.MinHeight;
 Msg.WindowPos^.CY:=Constraints.MinHeight;
end;


To [2,3]: no comment, в OnResize не катит однозначно при включенной опции "Отоборажать содержимое окна при перетаскивании"
в Windows

To [4]: Спасибо, не знал. При перемещении работает хорошо, но при изменении размеров окна тот же глюк, что и у меня: меняется размер с другой стороны окна, за которую не тащишь.
Считаю это однозначно нездоровым явлением.

To [5]: Работает хорошо, перетаскивает; от вышеуказанного глюка избавились просто: при изменении размеров окна не примагничиваются (не лепятся, не приклеиваются)

To All: Так где же у него кнопка? (С)Приключения Электроника


Fynjy   (2004-07-23 09:05:00) [2]

Есть компонент, сам не смотрел

http://koroan.by.ru/delphi/components/FormMagnet%202.2.zip


Mental_Ray   (2004-07-23 09:04:00) [3]

А эм сорри!
во второй строчечке ошибочка:
if form1.Left>Screen.Width-50 then form1.Left:=Screen.Width-form1.Width;


Керик   (2004-07-23 09:04:00) [4]

Form1.ScreenSnap := True;
Но только для Delphi7!


Mental_Ray   (2004-07-23 09:01:00) [5]

if form1.Left<50 then form1.Left:=0;
if form1.Left>Screen.Width-50 then form1.Left:=Screen.Width;

Для верха и низа напиши сам.
После этого засунь все это в OnResize формы.


ИдиотЪ   (2004-07-23 08:14:00) [6]

а у тебя идеи есть?
хотя бы проверка координат при перемещении и округление до границ при нужной близости


Наверх

Титульная страница Поиск, карта сайта Написать письмо