Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.04.2007, 19:41   #1
OrdJONY
.NET-чик
Форумчанин
 
Аватар для OrdJONY
 
Регистрация: 24.03.2007
Сообщений: 569
Вопрос Пристыковка Окон

Помогите как сделать чтобы окна пристыковать... и потом при движении одного двигалось и второе...
С движением то понятно, там условие и переменная... Ну вот только как включить Эту переменную при пристыковке окна
"Разработка под веб - как работа с пылесосом: нихрена не прикольно, но засасывает"
Мо маленький городок

Последний раз редактировалось OrdJONY; 09.04.2007 в 13:14.
OrdJONY вне форума Ответить с цитированием
Старый 09.04.2007, 13:48   #2
Сильванович Михаил
Студент
Форумчанин
 
Регистрация: 10.11.2006
Сообщений: 196
По умолчанию

Проверяешь расстояние от одного окна до другого при перетаскивании, если окно отпускается не больше чем за 7 пикселей от стыкуемого окна (учитываются размеры окон, конечно, а расстояние - длина вектора). А когда хватаешь
стыкованные - проверка если касаются, то стыкованы и тащишь оба окна, если
нет, то тащим свое окно.

З.Ы. Надеюсь понятно...
Visita Interiorem Terrae Rectificando Operae Lapidem...
Сильванович Михаил вне форума Ответить с цитированием
Старый 09.04.2007, 19:00   #3
OrdJONY
.NET-чик
Форумчанин
 
Аватар для OrdJONY
 
Регистрация: 24.03.2007
Сообщений: 569
Вопрос

Попробывал я так вот
Код:
  If Form2.Left <= PosLeftDr2 then
        If Form2.Left >= PosLeftDr1 then
    Form2.Left := PosLeftDr1
PosLeftDr1 сюда я присвоил положение 1 формы + размер
PosLeftDr2 а сюда значение PosLeftRd1 + 7.
Когда Окно приближаеш оно то состыковываеться, но вот потом назад не отходит никак.. Срабатывает Это условие... Как тогда сделать чтобы их разъединять можно было
"Разработка под веб - как работа с пылесосом: нихрена не прикольно, но засасывает"
Мо маленький городок
OrdJONY вне форума Ответить с цитированием
Старый 09.04.2007, 21:46   #4
Сильванович Михаил
Студент
Форумчанин
 
Регистрация: 10.11.2006
Сообщений: 196
По умолчанию

Вспомним, как это сделано в Winamp:
Все доп. окна можно пристыковать к главному окну, но по отдельности
отнего можно оторвать каждое.
Так и делаем - если тащат за главное окно,
то расстыковки не происходит, тащат доп. окно - происходит расстыкова.
Visita Interiorem Terrae Rectificando Operae Lapidem...
Сильванович Михаил вне форума Ответить с цитированием
Старый 09.04.2007, 22:03   #5
Romanus
Кодер
Форумчанин
 
Регистрация: 27.01.2007
Сообщений: 271
По умолчанию

2OrdJONY А зачем тебе Win32 API сделали.
В private формы кидай процедуру

procedure FormMoves(var Msg:TWMMOVE);message WM_MOVE;

и в разделе реализации в процедуре

procedure TForm1.FormMoves(var Msg:TWMMOVE);
begin
Form2.Left:=Form1.Left+Form1.Width;
Form2.Top:=Form1.Top;
end;
Romanus вне форума Ответить с цитированием
Старый 13.04.2007, 15:13   #6
OrdJONY
.NET-чик
Форумчанин
 
Аватар для OrdJONY
 
Регистрация: 24.03.2007
Сообщений: 569
По умолчанию

Чето я пробовал, выбивает ошибку. Да вот мне и надо как в винампе
"Разработка под веб - как работа с пылесосом: нихрена не прикольно, но засасывает"
Мо маленький городок
OrdJONY вне форума Ответить с цитированием
Старый 14.04.2007, 11:07   #7
Сильванович Михаил
Студент
Форумчанин
 
Регистрация: 10.11.2006
Сообщений: 196
По умолчанию

выложи исходник - посмотрю - может подправлю...
Visita Interiorem Terrae Rectificando Operae Lapidem...
Сильванович Михаил вне форума Ответить с цитированием
Старый 14.04.2007, 14:30   #8
OrdJONY
.NET-чик
Форумчанин
 
Аватар для OrdJONY
 
Регистрация: 24.03.2007
Сообщений: 569
Вопрос

Код:
procedure TF_PlayList.Fpl_Move_Move(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
Var
  PosLeftDr1, PosTopDr1 : integer;
  PosLeftDr2, PosTopDr2 : integer;
begin
  PosLeftDr1 := PosLeft + F_Main.Width;
  PosTopDr1  := PosTop  + F_Main.Height;
  PosLeftDr2 := PosLeftDr2 + 7;
  PosTopDr2  := PosTopDr2  + 7;
  if flgPlMove then
    With F_PlayList do Begin
      Left := Left + x - PosLfPL;
      Top  := Top  + y - PosTpPL;
      end;
  If (F_PlayList.Left <= PosLeftDr2) or
        (F_PlayList.Left >= PosLeftDr1) or
        (flgDockPL = False) then Begin
    flgDockPL := True;
    F_PlayList.Left := PosLeftDr1
    end;
end;
"Разработка под веб - как работа с пылесосом: нихрена не прикольно, но засасывает"
Мо маленький городок
OrdJONY вне форума Ответить с цитированием
Старый 14.04.2007, 22:22   #9
Сильванович Михаил
Студент
Форумчанин
 
Регистрация: 10.11.2006
Сообщений: 196
По умолчанию

Вот. Вроде стыкуются, механизм оставляет желать лучшего - но доработать можно. (выглядит плохо)
Вложения
Тип файла: rar 3.rar (8.9 Кб, 35 просмотров)
Visita Interiorem Terrae Rectificando Operae Lapidem...
Сильванович Михаил вне форума Ответить с цитированием
Старый 15.04.2007, 10:23   #10
OrdJONY
.NET-чик
Форумчанин
 
Аватар для OrdJONY
 
Регистрация: 24.03.2007
Сообщений: 569
По умолчанию

Спасибо Огромное за Код! Все работает!
"Разработка под веб - как работа с пылесосом: нихрена не прикольно, но засасывает"
Мо маленький городок
OrdJONY вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перетаскивание окон werat Свободное общение 2 18.08.2008 11:58
Поверх окон Лубышев Помощь студентам 1 29.01.2008 13:43
Координаты окон Лубышев Общие вопросы Delphi 6 22.01.2008 19:40
Открытие окон Pekc JavaScript, Ajax 3 25.11.2007 19:56
Сворачивание окон Legat Win Api 2 08.10.2007 16:36