Перемещение элемента

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Тимофей
Обычный пользователь
Обычный пользователь
 
Сообщения: 83
Зарегистрирован: 01.03.2004 (Пн) 10:01
Откуда: Киров

Перемещение элемента

Сообщение Тимофей » 30.09.2004 (Чт) 8:21

Имеется элемент на форме. Его требуется перемещать. Это реализовано в примере. Но необходимо чтобы:
1.Перемещение активизировалось не по MouseUp, а по MouseDown.
2.Когда элемент перемещается (выделен пунктирный прямоугольник) при нажатии правой клавиши мыши элемент появился в первоначальном месте. Т.е. нужно как-то отменить посылаемое окну сообщение.
Вложения
1234.zip
(1.56 Кб) Скачиваний: 27

Тимофей
Обычный пользователь
Обычный пользователь
 
Сообщения: 83
Зарегистрирован: 01.03.2004 (Пн) 10:01
Откуда: Киров

Сообщение Тимофей » 01.10.2004 (Пт) 7:20

Посмотрите сначала пример ...........

Тимофей
Обычный пользователь
Обычный пользователь
 
Сообщения: 83
Зарегистрирован: 01.03.2004 (Пн) 10:01
Откуда: Киров

Сообщение Тимофей » 01.10.2004 (Пт) 12:55

Ну где вы спецы по API ? Отзовитесь.....

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 01.10.2004 (Пт) 15:53

Тимофей писал(а):Ну где вы спецы по API ? Отзовитесь.....

Вот тебе пример безо всякого API.
Вложения
tst.rar
(2.1 Кб) Скачиваний: 24
Изображение

Тимофей
Обычный пользователь
Обычный пользователь
 
Сообщения: 83
Зарегистрирован: 01.03.2004 (Пн) 10:01
Откуда: Киров

Сообщение Тимофей » 06.10.2004 (Ср) 9:42

То что без API можно это я тоже знаю. Только посмотри сколько это занимает кода (в 4 раза больше места). Да и задача которая поставлена в начале не решена. Кнопку мыши в предлагаемом примере приходится постоянно держать нажатой......

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 06.10.2004 (Ср) 13:23

А так?

Тимофей
Обычный пользователь
Обычный пользователь
 
Сообщения: 83
Зарегистрирован: 01.03.2004 (Пн) 10:01
Откуда: Киров

Сообщение Тимофей » 18.10.2004 (Пн) 11:42

Все же хотелось, чтобы это было как в начальном примере. И как отменить сообщение посылаемое SendMessage?

Тимофей
Обычный пользователь
Обычный пользователь
 
Сообщения: 83
Зарегистрирован: 01.03.2004 (Пн) 10:01
Откуда: Киров

Сообщение Тимофей » 20.10.2004 (Ср) 7:58

Ну где вы спецы по API ?

Mleha
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 146
Зарегистрирован: 06.10.2004 (Ср) 7:49
Откуда: Ангарск

Сообщение Mleha » 20.10.2004 (Ср) 8:50

в модуле:

Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
(ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Declare Function ReleaseCapture Lib "user32" () As Long
Const WM_NCLBUTTONDOWN = &HA1
Const HTCAPTION = 2
Public Function Move(hwnd As Long)
On Error Resume Next
Call ReleaseCapture
Call SendMessage(hwnd, WM_NCLBUTTONDOWN, HTCAPTION, 0&)
End Function

На форме:

Private Sub Command1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
Move hwnd
End Sub

Тимофей
Обычный пользователь
Обычный пользователь
 
Сообщения: 83
Зарегистрирован: 01.03.2004 (Пн) 10:01
Откуда: Киров

Сообщение Тимофей » 20.10.2004 (Ср) 15:01

Еще вопрос по SendMessage.
Она вроде работает только под 98.
Под 2000 NT выдает ошибку, или я не прав ?

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 20.10.2004 (Ср) 15:57

Тимофей, ты не прав.
Изображение

Max!
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 502
Зарегистрирован: 03.04.2003 (Чт) 22:08
Откуда: Литва

Сообщение Max! » 20.10.2004 (Ср) 22:34

А если делать SendMessage , так чтоб непоказывало Ip adr. :?:
Max!

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 20.10.2004 (Ср) 22:53

Max! писал(а):А если делать SendMessage , так чтоб непоказывало Ip adr. :?:
:shock: :shock: :shock: :shock: :shock:
Изображение

Тимофей
Обычный пользователь
Обычный пользователь
 
Сообщения: 83
Зарегистрирован: 01.03.2004 (Пн) 10:01
Откуда: Киров

Сообщение Тимофей » 21.10.2004 (Чт) 7:42

Почему не прав. На работе установил Win 2000. Там в моем проекта SendMessage не работает (возвращает ноль), я уже начал задумываться не отказаться ли от API, а то в других системах может и не работать. Вот тебе и преславутые функции... Не знаешь будут ли работать в следующих системах.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 21.10.2004 (Чт) 9:48

SendMessage работает всюду, начиная с Win1x
Ты что-то очень жестоко путаешь.
Изображение

KiloGraf
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 142
Зарегистрирован: 21.10.2004 (Чт) 7:37
Откуда: берутся такие глупые вопросы?

Сообщение KiloGraf » 21.10.2004 (Чт) 11:45

tyomitch писал(а):SendMessage работает всюду, начиная с Win1x
Ты что-то очень жестоко путаешь.


Во как раз на NT платформах, через SendMessage – то и не все работает!...

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 21.10.2004 (Чт) 11:58

Так!
Чё за фигня? :)

Всё работает везде. И всегда.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Тимофей
Обычный пользователь
Обычный пользователь
 
Сообщения: 83
Зарегистрирован: 01.03.2004 (Пн) 10:01
Откуда: Киров

Сообщение Тимофей » 22.10.2004 (Пт) 8:15

GSerg писал:

--------------------------------------------------------------------------------

Так!
Чё за фигня?

Всё работает везде. И всегда.


Вот и не фигня. Файл который я выложил в самом начале работает у меня дома на 98, а вот на работе я на днях меня комп и установил Win 2000 NT + тот же самый Basic 6 результат ноль. Тут похоже играет роль где ты объявляешь функцию, в исполняемом модуле или в программном и где ее используешь. Буду эксперементировать.

Ruslan Demidow
Мужчина!
Мужчина!
Аватара пользователя
 
Сообщения: 987
Зарегистрирован: 25.03.2004 (Чт) 13:39
Откуда: N.Novgorod

Сообщение Ruslan Demidow » 22.10.2004 (Пт) 8:22

Тимофей писал(а):GSerg писал:

--------------------------------------------------------------------------------

Так!
Чё за фигня?

Всё работает везде. И всегда.


Вот и не фигня. Файл который я выложил в самом начале работает у меня дома на 98, а вот на работе я на днях меня комп и установил Win 2000 NT + тот же самый Basic 6 результат ноль. Тут похоже играет роль где ты объявляешь функцию, в исполняемом модуле или в программном и где ее используешь. Буду эксперементировать.
Кстати, у меня тоже была такая фигня (Тёмыч наверное помнит по RU.VISUAL.BASIC).
Объявляю SendMessage в глобальном модуле - не работает (VB вылетает).
Объявляю в модуле формы - работает.
С чем связано так и не выяснил. Системы: W2K & XP.
Это Ж-ж-ж-ж неспроста (с) Винни-Пух

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 22.10.2004 (Пт) 9:20

XP: не вылетает и не работает.
Не вылетает потому, что всё правильно.
Не работает потому, что нефиг посылать WM_NCLBUTTONDOWN на HTCAPTION контролу, у которого нет HTCAPTION.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Тимофей
Обычный пользователь
Обычный пользователь
 
Сообщения: 83
Зарегистрирован: 01.03.2004 (Пн) 10:01
Откуда: Киров

Сообщение Тимофей » 22.10.2004 (Пт) 9:28

А что же посылать элементу чтобы работало нормально ? Элемент PictureBox.

Mleha
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 146
Зарегистрирован: 06.10.2004 (Ср) 7:49
Откуда: Ангарск

Сообщение Mleha » 22.10.2004 (Пт) 10:34

У Picture есть HTCAPTION!

Код модуля:
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Declare Function ReleaseCapture Lib "user32" () As Long

Const WM_NCLBUTTONDOWN = &HA1
Const HTCAPTION = 2

Public Function Moveobj(HWN As Long)
On Error Resume Next
Call ReleaseCapture
Call SendMessage(obj, WM_NCLBUTTONDOWN, HTCAPTION, 0&)
End Function

Для PictureBox на форме:
Private Sub picture1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
Moveobj picture1.hwnd
End Sub

Тимофей
Обычный пользователь
Обычный пользователь
 
Сообщения: 83
Зарегистрирован: 01.03.2004 (Пн) 10:01
Откуда: Киров

Сообщение Тимофей » 22.10.2004 (Пт) 11:03

Да, согласен это работает.(кстати замени obj на HWN) Но есть некоторые но:
1. В исходном примере, обрати внимание все это сделано, но процедра захвата изображения и посылки сообщения вставлена в Mouse_Up с константой WM_NCLBUTTONDOWN. При этом при нажатии и отпускании кнопки мыши элемент выделяется пунктирным прямоугольником и далее его можно перемещать. В Win 98 это все нормально, в 2000 как говорится балалайка....

Тимофей
Обычный пользователь
Обычный пользователь
 
Сообщения: 83
Зарегистрирован: 01.03.2004 (Пн) 10:01
Откуда: Киров

Сообщение Тимофей » 25.10.2004 (Пн) 7:19

Есть еще варианты.

Тимофей
Обычный пользователь
Обычный пользователь
 
Сообщения: 83
Зарегистрирован: 01.03.2004 (Пн) 10:01
Откуда: Киров

Сообщение Тимофей » 01.11.2004 (Пн) 8:36

Неужели ни у кого нет больше мыслей по поводу.....

KiloGraf
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 142
Зарегистрирован: 21.10.2004 (Чт) 7:37
Откуда: берутся такие глупые вопросы?

Сообщение KiloGraf » 01.11.2004 (Пн) 10:00

...вот у меня, точно мыслей нет, но я видел пимер, в котором, что-то похожее реализовывалось...

http://www.vbthunder.com/source/ui/formdesn.zip

...ну, млин, кое-как отыскал. Может тута, полезное можно извлечь.

.
Nonsense in BASIC. © 1982 ...


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

    TopList  
cron