Отключение мыши над textbox в VB6

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
shest
Начинающий
Начинающий
 
Сообщения: 20
Зарегистрирован: 10.03.2003 (Пн) 14:12
Откуда: Москва

Отключение мыши над textbox в VB6

Сообщение shest » 03.08.2004 (Вт) 2:07

Подскажите пожалуйста, как запретить TextBox реагировать на события мыши.
RichTextBox не подходит.
Заранее спасибо

baha76
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 168
Зарегистрирован: 07.01.2004 (Ср) 10:59
Откуда: Ташкент

Сообщение baha76 » 03.08.2004 (Вт) 7:19

Не пиши код на события мыши, вот и не будет он реагировать. А чтобы отключить указатель мыши над объектом, нужно событие MouseOver и там указатель нужно сделать невидимым. :)

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

Сообщение tyomitch » 03.08.2004 (Вт) 8:37

Может быть, установить свойство Enabled в False достаточно?

baha76
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 168
Зарегистрирован: 07.01.2004 (Ср) 10:59
Откуда: Ташкент

Сообщение baha76 » 03.08.2004 (Вт) 9:12

tyomitch писал(а):Может быть, установить свойство Enabled в False достаточно?

Ну тогда Locked = True объязательно!

shest
Начинающий
Начинающий
 
Сообщения: 20
Зарегистрирован: 10.03.2003 (Пн) 14:12
Откуда: Москва

Сообщение shest » 03.08.2004 (Вт) 9:59

Мне нужно, чтобы textbox был бы полностью функционален, но на мышь не реагировал. Курсор я погасил API функцией, но если щёлкать по полю, то контекстное меню выскакивает и пр. Тогда я написал Enabled в False на щелчок и отключал его через таймер, но это тоже не то.
На другом форуме посоветовали -BOOL ShowCaret(HWND hWnd) указываете hWnd текст бокса и все-.
Попытаюсь разобраться, но пока не понял, что это такое и как работает

baha76
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 168
Зарегистрирован: 07.01.2004 (Ср) 10:59
Откуда: Ташкент

Сообщение baha76 » 03.08.2004 (Вт) 10:48

Если при щелчке по полю выскакивает меню, значит работает событие MouseDown (или MouseUp, Click) TextBox-а Вот этот участок кода надо убрать.

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

Сообщение tyomitch » 03.08.2004 (Вт) 10:59

Отключение всплывающего меню: http://www.vb-helper.com/howto_disable_text_popup.html
Изображение

shest
Начинающий
Начинающий
 
Сообщения: 20
Зарегистрирован: 10.03.2003 (Пн) 14:12
Откуда: Москва

Сообщение shest » 03.08.2004 (Вт) 11:50

Проверил ссылку на отключение меню-выкидывает ошибку выполнения. MouseDown , MouseUp, Click пробовал блокировать, но это не помогает
Код: Выделить всё
if button =2 then button= Empty

и пр.
В общем пока не нашёл решения кроме возни с таймером. ИМХО в VB это сделать нельзя, значит API -функция нужна. А кто-нибудь знает функцию не только курсор погасить, но отключить вообще мышь на время выполнения программы? Или просто отключить реакцию textBox на мышиные события?

baha76
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 168
Зарегистрирован: 07.01.2004 (Ср) 10:59
Откуда: Ташкент

Сообщение baha76 » 03.08.2004 (Вт) 12:05

Может выложишь код здесь? Загадка интересная становится...

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

Сообщение tyomitch » 03.08.2004 (Вт) 12:11

shest писал(а):Проверил ссылку на отключение меню-выкидывает ошибку выполнения.

NoPopupWindowProc должна быть в модуле (т.е. не в форме), с объявлениями:
Код: Выделить всё
Public Const GWL_WNDPROC As Long = -4
Public Declare Function SetWindowLong Lib "user32.dll" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Public Declare Function CallWindowProc Lib "user32.dll" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Public OldWindowProc As Long

Предполагалось, что ты догадаешься ;-)

shest писал(а):MouseDown , MouseUp, Click пробовал блокировать, но это не помогает

В смысле - не помогает блокировать меню? Так и не должно.

shest писал(а):В общем пока не нашёл решения кроме возни с таймером. ИМХО в VB это сделать нельзя, значит API -функция нужна.

Тот код, на который я дал ссылку, вполне рабочий - только что проверил.

shest писал(а):А кто-нибудь знает функцию не только курсор погасить, но отключить вообще мышь на время выполнения программы? Или просто отключить реакцию textBox на мышиные события?

В общем, ты тот код всё-таки посмотри. Его можно модифицировать в том смысле, что игнорировать не только WM_CONTEXTMENU, но и WM_LBUTTON* и т.п.

shest
Начинающий
Начинающий
 
Сообщения: 20
Зарегистрирован: 10.03.2003 (Пн) 14:12
Откуда: Москва

Сообщение shest » 03.08.2004 (Вт) 12:59

Разместил функцию с объявлениями в модуле, разместил процедуры- не идёт. Может что опять не так?
Может пришлёшь на мыло проект (если не сложно :? )
shest@online.ru

Шурик
Самогонщик
Самогонщик
Аватара пользователя
 
Сообщения: 1657
Зарегистрирован: 30.06.2003 (Пн) 13:27
Откуда: из запоя :))))) Матных сообщений: 972

Сообщение Шурик » 03.08.2004 (Вт) 14:24

А ты скачай пример, там все понятно :)

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

Сообщение tyomitch » 03.08.2004 (Вт) 15:35

shest писал(а):Разместил функцию с объявлениями в модуле, разместил процедуры- не идёт. Может что опять не так?

Новый проект -> кидаю текстбокс на форму -> добавляю в форму код с http://www.vb-helper.com/howto_disable_text_popup.html -> добавляю модуль в проект -> добавляю в модуль объявления и код оттуда же. Готово!

[edit]2Шурик: а я и не заметил, что там кнопка Download была... :oops: [/edit]
Последний раз редактировалось tyomitch 11.08.2004 (Ср) 17:56, всего редактировалось 1 раз.

shest
Начинающий
Начинающий
 
Сообщения: 20
Зарегистрирован: 10.03.2003 (Пн) 14:12
Откуда: Москва

Сообщение shest » 03.08.2004 (Вт) 16:14

Ну получилось вроде.
Теперь бы найти функцию, которая полностью мышь отключит :D

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

Сообщение tyomitch » 03.08.2004 (Вт) 16:43

shest писал(а):Ну получилось вроде.
Теперь бы найти функцию, которая полностью мышь отключит :D

Без проблем, замени код модуля таким:
Код: Выделить всё
Option Explicit
Public Const GWL_WNDPROC = -4&
Public Declare Function SetWindowLong Lib "user32.dll" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Public Declare Function CallWindowProc Lib "user32.dll" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Public OldWindowProc As Long

Private Const WM_MOUSEFIRST = &H200&
Private Const WM_MOUSELAST = &H209&

Public Function NoPopupWindowProc(ByVal hWnd As Long, ByVal _
    Msg As Long, ByVal wParam As Long, ByVal lParam As _
    Long) As Long

    Select Case Msg
    Case WM_MOUSEFIRST To WM_MOUSELAST:
        NoPopupWindowProc = 0
    Case Else:
        NoPopupWindowProc = CallWindowProc( _
            OldWindowProc, hWnd, Msg, wParam, _
            lParam)
    End Select
End Function

shest
Начинающий
Начинающий
 
Сообщения: 20
Зарегистрирован: 10.03.2003 (Пн) 14:12
Откуда: Москва

Сообщение shest » 03.08.2004 (Вт) 18:12

Огромное спасибо tyomitch!
Вот это то, что нужно :D


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

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

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

    TopList  
cron