Не пускать курсор за границы

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

Не пускать курсор за границы

Сообщение Dummiel » 15.03.2006 (Ср) 15:57

Здравствуйте!

На форме SSTab (ActiveX - Microsoft Tabbed Dialog Control 6.0 (SS5)), на одной из вкладок PictureBox как контейнер, на нем - ImageBox, на нем куча маленьких ImageBox-ов (20 шт) и CommandButton.

1. При нажатии на кнопку необходимо не выпускать курсор мыши за пределы PictureBox-а, при повторном нажатии - пусть гуляет, где хочет. Как это сделать?

Бьюсь с GetCursorPos, SetCursorPos, ClipCursor - не получается, блин!!!

2. При нажатии на кнопку мало того, что не выпускать его за пределы PictureBox-а (т.е., курсор м.б. или на PictureBox-е, или на кнопке, или на большом ImageBox-е, или на одном из 20 маленьких ImageBox-ов), а еще и заставить VB6 реагировать в это время на нажатие ПРАВОЙ клавиши мыши (левая нужна для кнопки - отключение ограничения позиции курсора).

Писать обработку Mouse_Down, Mouse_Up с учетом (If Button = vbRightButton) для каждого контрола из набора, или есть изящное решение в одну-две процедуры?

А может, я родился рано?

P.S. Прошу не отвечать типа - "сам дурак"! Или не отвечайте, или не выпендривайтесь, как это любит ОЧЧЧЕНЬ УМНЫЙ GSerg!

Nicky
Постоялец
Постоялец
 
Сообщения: 519
Зарегистрирован: 12.08.2004 (Чт) 12:14

Re: Не пускать курсор за границы

Сообщение Nicky » 15.03.2006 (Ср) 16:41

Dummiel писал(а):2. При нажатии на кнопку мало того, что не выпускать его за пределы PictureBox-а (т.е., курсор м.б. или на PictureBox-е, или на кнопке, или на большом ImageBox-е, или на одном из 20 маленьких ImageBox-ов), а еще и заставить VB6 реагировать в это время на нажатие ПРАВОЙ клавиши мыши (левая нужна для кнопки - отключение ограничения позиции курсора).

Писать обработку Mouse_Down, Mouse_Up с учетом (If Button = vbRightButton) для каждого контрола из набора, или есть изящное решение в одну-две процедуры?


Хоть я и не такой умный, как GSerg, но контролы объединять в массивы умею

Tamplier
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 183
Зарегистрирован: 18.11.2005 (Пт) 13:35
Откуда: Москва

Сообщение Tamplier » 15.03.2006 (Ср) 19:01

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

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

Сообщение tyomitch » 15.03.2006 (Ср) 19:03

Дык, ClipCursor
Изображение

Dummiel
Бывалый
Бывалый
 
Сообщения: 235
Зарегистрирован: 11.06.2004 (Пт) 9:15
Откуда: Алтай

Сообщение Dummiel » 20.03.2006 (Пн) 15:19

Совет классный, да вот как вызывать ClipCursor и как правильно ему передавать нужные координаты? :oops:

Ну накропайте кусочек кода, а?

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 20.03.2006 (Пн) 15:42

А в MSDN сходить трудно?
Lasciate ogni speranza, voi ch'entrate.

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 20.03.2006 (Пн) 15:44

а что сложного то? Нужно передать в ClipCursor прмоугольник (RECT то бишь) в пределах которого может перемещаться курсор
Весь мир матрица, а мы в нем потоки байтов!

Dummiel
Бывалый
Бывалый
 
Сообщения: 235
Зарегистрирован: 11.06.2004 (Пт) 9:15
Откуда: Алтай

Сообщение Dummiel » 22.03.2006 (Ср) 15:16

:( Нет у меня MSDN :cry:

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 22.03.2006 (Ср) 15:22

Lasciate ogni speranza, voi ch'entrate.

Бяка
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 219
Зарегистрирован: 21.09.2005 (Ср) 21:28

Сообщение Бяка » 24.03.2006 (Пт) 1:43

Вот пример ограничивающий область перемещения курсора мыши
Вложения
(5).rar
(1.13 Кб) Скачиваний: 46

Smert
Обычный пользователь
Обычный пользователь
 
Сообщения: 51
Зарегистрирован: 07.04.2006 (Пт) 18:47
Откуда: Молдова,Бельцы

Сообщение Smert » 23.04.2006 (Вс) 20:39

А с SetCursorPos не мучайся :wink:
вот в какой-то библиотеке есть ВlockInput во то вещь!
Тока я в нете торчу, а не дома, поэтому уточнить не могу :cry:
А вот !VIPERA! послушай :!:
Раз речь зашла за области то(Щас польёться критика но дочитайте до конца!)
как сделать форму в виде сложной надписи :roll: :?:
Скачал блин екзешку(Пример называется) а кода с объяснением нет!
И желательно осх-контролы не предлагать


И ЕЩЁ ДЛЯ ВСЕХ, ОБЪЯСНИТЕ, ЗАЧЕМ ТАСКАТЬ БИБЛИОТЕКУ, КОГДА И ТАК ВСЁ ПАШЕТ :twisted: :!: :!: :!: :!: :!:
ПОПРОБУЙ НЕ ТАСКАТЬ ЕЁ И МОЖЕТ УДИВИШСЯ, НО ВСЁ ДОЛЖНО РАБОТАТЬ :!:
Пап, а что такое ВБ?
Cынок, это просто фантастика!

Smert
Обычный пользователь
Обычный пользователь
 
Сообщения: 51
Зарегистрирован: 07.04.2006 (Пт) 18:47
Откуда: Молдова,Бельцы

Сообщение Smert » 23.04.2006 (Вс) 20:40

а КОД ДЛЯ SetWindowRgn отсылайте на X-Hacker_90@mail.ru
Пап, а что такое ВБ?
Cынок, это просто фантастика!

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

Сообщение tyomitch » 23.04.2006 (Вс) 20:42

Smert, языком общения на форуме является русский.
Неужели тяжело формулировать свои мысли так, чтобы их хоть кто-то мог понять?
Изображение

Smert
Обычный пользователь
Обычный пользователь
 
Сообщения: 51
Зарегистрирован: 07.04.2006 (Пт) 18:47
Откуда: Молдова,Бельцы

Сообщение Smert » 23.04.2006 (Вс) 20:42

И насчёт надписи:есть такой фонт "Monotype Corsiva" хорошая вещь, рекомендую :wink:
Пап, а что такое ВБ?
Cынок, это просто фантастика!

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

Сообщение tyomitch » 23.04.2006 (Вс) 20:45

лови свою монотайп-курсиву
http://bbs.vbstreets.ru/viewtopic.php?t=17173
Изображение

Smert
Обычный пользователь
Обычный пользователь
 
Сообщения: 51
Зарегистрирован: 07.04.2006 (Пт) 18:47
Откуда: Молдова,Бельцы

Сообщение Smert » 23.04.2006 (Вс) 20:49

Ну попробую сформулировать:как сделать форму сложной формы(Я ЧЕСТНО ИСКАЛ, НО ПРЕДЛОЖИЛИ ЕКЗЕШНИК БЕЗ ОБЪЯСНЕНИЙ И С НАДПИСЬЮ "С*КИ ВЫ ВСЕ.УБИВАТЬ ВАС НАДО", А ПОТОМ ПРЕДЛОЖИЛИ ПЛОХО РАБОТАЮЩИЙ ОСХ-КОНТРОЛ)
И я знаю :twisted: что надо использовать SetWindowRgn но не знаю, как сделать очень сложной формы(НЕ "RECT" A НАДПИСЬ НАПРИМЕР) :roll: :oops: :wink:
Пап, а что такое ВБ?
Cынок, это просто фантастика!

Smert
Обычный пользователь
Обычный пользователь
 
Сообщения: 51
Зарегистрирован: 07.04.2006 (Пт) 18:47
Откуда: Молдова,Бельцы

Сообщение Smert » 23.04.2006 (Вс) 20:51

О ПАСИБОЧКИ 8) :shock: 8) :shock:
Пап, а что такое ВБ?
Cынок, это просто фантастика!

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 23.04.2006 (Вс) 21:06

Smert
API-Guide писал(а):Private Declare Function BeginPath Lib "gdi32" (ByVal hdc As Long) As Long
Private Declare Function EndPath Lib "gdi32" (ByVal hdc As Long) As Long
Private Declare Function PathToRegion Lib "gdi32" (ByVal hdc As Long) As Long
Private Declare Function TextOut Lib "gdi32" Alias "TextOutA" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal lpString As String, ByVal nCount As Long) As Long
Private Declare Function SetWindowRgn Lib "user32" (ByVal hWnd As Long, ByVal hRgn As Long, ByVal bRedraw As Boolean) As Long
Private Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long
Private Sub Form_Click()
'end..
Unload Me
End Sub
Private Sub Form_Load()
'KPD-Team 2000
'URL: http://www.allapi.net/
'E-Mail: KPDTeam@Allapi.net
Dim hRgn As Long
Const sText = "Click Here!"
'set the font to 'Times New Romen, size 72'
Me.FontName = "Times New Roman"
Me.FontSize = 72
'set the backcolor to Red
Me.BackColor = vbRed
'open a path bracket
BeginPath Me.hdc
'draw the text
TextOut Me.hdc, 0, 0, sText, Len(sText)
'close the path bracket
EndPath Me.hdc
'convert the path to a region
hRgn = PathToRegion(Me.hdc)
'set the Window-region
SetWindowRgn Me.hWnd, hRgn, True
'destroy our region
DeleteObject hRgn
End Sub
Изображение

Smert
Обычный пользователь
Обычный пользователь
 
Сообщения: 51
Зарегистрирован: 07.04.2006 (Пт) 18:47
Откуда: Молдова,Бельцы

Сообщение Smert » 24.04.2006 (Пн) 21:19

О, Keks-n, tyomitch, БОЛЬШОЕ Than :roll: x
Пасиба!
Пап, а что такое ВБ?
Cынок, это просто фантастика!

Роман-вб
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 520
Зарегистрирован: 04.04.2006 (Вт) 9:40
Откуда: Средняя полоса

Сообщение Роман-вб » 24.04.2006 (Пн) 21:24

Smert
Какие мы вежливые. На каждую тему -- спасибо, спасибо. Может лучше выражать благодарность в личном порядке, это я про лич. сообщения.
P.S. Ну да это я так, к слову.
Жить ещё 2 недели, работы на 8 лет, но я докажу на деле, на что способен аскет!


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

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

Сейчас этот форум просматривают: Majestic-12 [Bot] и гости: 18

    TopList  
cron