Модераторы: Akina
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Перемещение формы, Нужно отловить событие Move формы 
V
    Опции темы
mihanik
  Дата 4.7.2006, 22:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


-=Белый Медведь=-
****


Профиль
Группа: Комодератор
Сообщений: 4054
Регистрация: 24.4.2006
Где: г. Тверь

Репутация: 11
Всего: 109



Привет.

Сижу решаю такую задачу:
Есть главная форма, справа вплотную к ней прилеплена ещё одна форма (назовём её вспомогательной).
При изменении размера главной формы я могу передвинуть вспомогательную опять вплотную к главной.
При этом при необходимости изменяю размер самой вспомогательной формы на тот, который мне нужно.
А вот отловить событие перемещения главной формы мне пока слабо.
Кто-нибудь решал подобное?

ЗЫ.
Прикольно иногда получается: 
Двигаю главную форму, вспомогательная форма при этом остаётся болтаться где-то на экране.
Затем чуть-чуть изменяю размер главной формы, и "ОП!" - вспомогательная форма прыгнула на нужное место...
Дурдом!


 


--------------------
Программистами не рождаются, - это родовая травма...
user posted imageuser posted image
PM MAIL WWW ICQ   Вверх
Тутанхамец
Дата 5.7.2006, 21:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 612
Регистрация: 10.10.2005
Где: в пирамидЕ!

Репутация: 4
Всего: 6



Мнится мне, в бейсике это событие поймать нелегко. Если только хук ставить...

Вариант - таймер на вспомогательной форме, через каждые эн миллисекунд проверяющий положение главной и при необходимости подтаскивающий вспомогательную куда надо.  
PM MAIL   Вверх
mihanik
Дата 6.7.2006, 06:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


-=Белый Медведь=-
****


Профиль
Группа: Комодератор
Сообщений: 4054
Регистрация: 24.4.2006
Где: г. Тверь

Репутация: 11
Всего: 109



Вариант с таймером - дело понятное... Уже продумывал.
 smile 
Но, всё равно, спасибо!!! smile 

Только не хочется мне таймер вешать... smile 

Хук ставить...
Как ты это видишь?
(Дело в том, что с хуками я ещё не работал). smile 
 


--------------------
Программистами не рождаются, - это родовая травма...
user posted imageuser posted image
PM MAIL WWW ICQ   Вверх
Akina
Дата 6.7.2006, 12:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 34
Всего: 454



Таймер, отслеживающий перемещение основной формы, должен быть НА ОСНОВНОЙ ФОРМЕ. А фаrn перемещения должен фиксироваться в глобальных переменных, чтобы дочерняя форма могла увидеть изменение координат и размеров и подстроиться под них.
Сохраняйте логику - каждый объект отвечает только за себя.

Кстати, использование таймера есть вполне разумное решение. 


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Тутанхамец
Дата 6.7.2006, 12:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 612
Регистрация: 10.10.2005
Где: в пирамидЕ!

Репутация: 4
Всего: 6



Посмотри справку по функции SetWindowHookEx. И по addressOf. В бейсике я хуки тоже никогда не ставил. Сейчас торкнулся попробовать и чую, что дело это весьма проблемное. Совет: сделай пока через таймер (пусть и некрасиво), и читай про хуки.  
PM MAIL   Вверх
mihanik
Дата 6.7.2006, 12:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


-=Белый Медведь=-
****


Профиль
Группа: Комодератор
Сообщений: 4054
Регистрация: 24.4.2006
Где: г. Тверь

Репутация: 11
Всего: 109



Тут я нашёл ссылку по использованию сабклассинга...
Говорят его можно использовать для отлавливания перемещения формы.

Только у меня ничегошеньки пока не выходит.

Начинаю думать, что копаю не в ту сторону...

Наверное придётся остановиться на варианте с таймером... smile 
 


--------------------
Программистами не рождаются, - это родовая травма...
user posted imageuser posted image
PM MAIL WWW ICQ   Вверх
~FoX~
Дата 7.7.2006, 07:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЕ рыжий!!!
****


Профиль
Группа: Участник Клуба
Сообщений: 2819
Регистрация: 8.10.2003
Где: Зеленоград

Репутация: 10
Всего: 68



Цитата(mihanik @  6.7.2006,  13:50 Найти цитируемый пост)
Тут я нашёл ссылку по использованию сабклассинга...

Ну почему же не в ту....Как раз именно туда ты капаешь, только в конце все равно упрешся в перехват какого нить WM_MOVE при помощи хука. 
Хотя для сабклассинга есть спецовые компоненты, как раз для вб ТУТ
Но ИМХО овчинка выделки не стоит. 


--------------------
user posted image
…множественность никогда не следует полагать без необходимости…
PM MAIL WWW ICQ Jabber   Вверх
mihanik
Дата 7.7.2006, 08:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


-=Белый Медведь=-
****


Профиль
Группа: Комодератор
Сообщений: 4054
Регистрация: 24.4.2006
Где: г. Тверь

Репутация: 11
Всего: 109



Цитата

~FoX~!
Но ИМХО овчинка выделки не стоит.


Ну, уж нет!!! smile 
Теперь стратегия на стратегию попёрла!!! smile 
Теперь или он (VB) победит , или я.

Выходные перестают казаться томными... smile 
 


--------------------
Программистами не рождаются, - это родовая травма...
user posted imageuser posted image
PM MAIL WWW ICQ   Вверх
mihanik
Дата 7.7.2006, 09:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


-=Белый Медведь=-
****


Профиль
Группа: Комодератор
Сообщений: 4054
Регистрация: 24.4.2006
Где: г. Тверь

Репутация: 11
Всего: 109



Ну-с... Ребята!!!

Решил я это дело!!! smile 

Рассказываю алгоритм.  smile 

1. Иду по адресу http://www.softcircuits.com/
2. Там заходим в раздел "Download Free Software"
3. Потом в "Programming Tools and Libraries"
4. Скачиваем архив с именем "subcls32.zip" (43.6KB)
5. Куда-нибудь всё это дело распаковываем.
6. Файл Subclass.ocx я бросил в папку "System32".
7. Запускаем VB.
8. Заходим "Project/Components"
9. Добавляем компонент "SoftCircuits Subclass Control" (Или добавляем его при помощи кнопки "Browse")
10. На форму кидаем новый появившийся контрол
11. Кидаем в форму текст, который я набросал ниже...

Код

Option Explicit

'Определяем новую процедуру...
Private Declare Sub CopyMemory Lib "Kernel32" Alias "RtlMoveMemory" (lpDest As Any, lpSource As Any, ByVal nCount As Long)

'Устанавливаем виндовые переменные
Private Const WM_WINDOWPOSCHANGING = &H46
Private Const SWP_NOSIZE = &H1
Private Const SWP_NOMOVE = &H2

'Определяем типы данных
Private Type WINDOWPOS
    hWnd As Long
    hWndInsertAfter As Long
    x As Long
    y As Long
    cx As Long
    cy As Long
    flags As Long
End Type

Private Sub Form_Load()
    'При загрузке формы передаём дескриптор окна формы нашему контролу
    Subclass1.hWnd = Me.hWnd
    Subclass1.Messages(WM_WINDOWPOSCHANGING) = True
End Sub

' Обрабатываем события, произошедшее с окном...
Private Sub Subclass1_WndProc(Msg As Long, wParam As Long, lParam As Long, Result As Long)

    Dim WinPosition As WINDOWPOS

    ' Если окно двигали (-: Ай-ай-ай!!! :-)  то выводим еко координаты...
    If Msg = WM_WINDOWPOSCHANGING Then
        Debug.Print "Top = "; Form1.Top; " , Left = "; Form1.Left
    End If
End Sub


12. Запускаем проект и если мы не сделали ни одной ошибки, то радуемся жизни!!!


Ну!
Вопросы ещё есть? smile 

ЗЫ.
Архив с контролом содержит в себе и исходный текст, и несколько примеров...
Так что кому не лень, могут и сами поразбираться... smile  smile  

ЗЗЫ.
В архивчике мой исходничек... smile

   

Это сообщение отредактировал(а) mihanik - 7.7.2006, 09:51

Присоединённый файл ( Кол-во скачиваний: 7 )
Присоединённый файл  Form.Move.rar 1,47 Kb


--------------------
Программистами не рождаются, - это родовая травма...
user posted imageuser posted image
PM MAIL WWW ICQ   Вверх
~FoX~
Дата 7.7.2006, 10:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЕ рыжий!!!
****


Профиль
Группа: Участник Клуба
Сообщений: 2819
Регистрация: 8.10.2003
Где: Зеленоград

Репутация: 10
Всего: 68



mihanik, Ну вобщем то молодец, только ИМХО такие вещи нужно реализовывать без превлечения сторонних компанентов. Рекомендую использовать часть исходника объекта. Во первых перенести все функции в отдельный модуль. Во вторых избавиться от лишних наворотов, как например возможность ставить несколько хуков, в твоей задаче это не понадобиться. Но это только мое ИМХО. 


--------------------
user posted image
…множественность никогда не следует полагать без необходимости…
PM MAIL WWW ICQ Jabber   Вверх
mihanik
Дата 7.7.2006, 11:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


-=Белый Медведь=-
****


Профиль
Группа: Комодератор
Сообщений: 4054
Регистрация: 24.4.2006
Где: г. Тверь

Репутация: 11
Всего: 109



Цитата

Ну вобщем то молодец, только ИМХО такие вещи нужно реализовывать без превлечения сторонних компанентов. Рекомендую использовать часть исходника объекта.


Ну, дык, - это естесственно!!!  smile 
Кто ж спорит!

Я с исходником уже вожусь...
Интересно, блин!!!

Определил уже те ошибки, которые допускал вчера...

Короче!
Для изучения подходит, а уж дальше.... smile  smile 
  

Это сообщение отредактировал(а) mihanik - 7.7.2006, 11:58


--------------------
Программистами не рождаются, - это родовая травма...
user posted imageuser posted image
PM MAIL WWW ICQ   Вверх
Тутанхамец
Дата 7.7.2006, 15:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 612
Регистрация: 10.10.2005
Где: в пирамидЕ!

Репутация: 4
Всего: 6



Упертый ты тип smile 

P.S. В хорошем смысле. smile 

P.P.S. Хотел написать кое-чего, но, оказывается, это уже написал FOX. smile  
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "VB6"
Akina

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по VB обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • Используйте теги [code=vb][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Akina.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | VB6 | Следующая тема »


 




[ Время генерации скрипта: 0.0544 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.