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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вызов меню правой кнопкой мыши, ? 
:(
    Опции темы
ArtNeoX
Дата 8.3.2006, 12:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 125
Регистрация: 23.10.2005

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



На форме TextBox. Поместив в него указатель мышки нажимаем правую кнопку мышки открывается меню пользователя, выбираем в нем определенный пункт, щелкаем и в TextBox'е появляется определенный текст.
Как это сделать?
PM MAIL   Вверх
Exception
Дата 8.3.2006, 16:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

Репутация: 7
Всего: 186



А что именно непонятно?
PM   Вверх
ArtNeoX
Дата 8.3.2006, 17:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 125
Регистрация: 23.10.2005

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



как добавить в меню по правой кнопке свои команды
PM MAIL   Вверх
Exception
Дата 8.3.2006, 17:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

Репутация: 7
Всего: 186



Хм. А Вы документацию хоть раз читали? Нужно создать меню с Visible = False и повесить на клик команду PopupMenu имя_твоего_меню.
PM   Вверх
ArtNeoX
Дата 8.3.2006, 19:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 125
Регистрация: 23.10.2005

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



Это понятно. Вопрос то в другом. При щелчке по текст боксу правой кнопкой появляется свое меню там где выделить все, копировать, вырезать, вставить.... как убрать это меню и оставить свое.
PM MAIL   Вверх
Exception
Дата 8.3.2006, 20:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

Репутация: 7
Всего: 186



Ох. Это гораздо сложнее. Тут без API никак.
PM   Вверх
Тутанхамец
Дата 9.3.2006, 08:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Код

Private Declare Function LockWindowUpdate Lib "User32" (ByVal hwndLock As Long) As Long

Private Sub Text1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = vbRightButton Then
LockWindowUpdate Text1.hWnd
Text1.Enabled = False
DoEvents
PopupMenu MyMenu
Text1.Enabled = True
LockWindowUpdate 0&
End If
End Sub



Чтоб по совести соблюсти копирайт, скажу, что взято отсюда: ссылка smile

Это сообщение отредактировал(а) Тутанхамец - 9.3.2006, 08:41
PM MAIL   Вверх
Тутанхамец
Дата 9.3.2006, 09:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Или вот так, хотя первый вариант, наверное, попроще:

Код


'Form1

Option Explicit

' Textmenu sample by Matt Hart - [email protected]
' http://matthart.com
'
' This sample shows how to subclass a text box and replace its
' default right-click edit menu with one of your own.

Private Sub Form_Load()
    Call SetHook(Text1.hwnd, True)
End Sub

Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
    Call SetHook(Text1.hwnd, False)
End Sub

Private Sub mnuPrint_Click()
    MsgBox "Print!"
End Sub








'Module1.bas
' Textmenu sample by Matt Hart - [email protected]
' http://matthart.com

Option Explicit

Public Const GWL_WNDPROC = (-4)
Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" _
    (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" _
    (ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" _
      (hpvDest As Any, hpvSource As Any, ByVal cbCopy As Long)
    
Public Const WM_MOUSEACTIVATE = &H21
Public Const WM_RBUTTONDOWN = &H204

Public origWndProc As Long

Public Sub SetHook(hwnd, bSet As Boolean)
    If bSet Then
        origWndProc = SetWindowLong(hwnd, GWL_WNDPROC, AddressOf AppWndProc)
    ElseIf origWndProc Then
        Dim lRet As Long
        lRet = SetWindowLong(hwnd, GWL_WNDPROC, origWndProc)
    End If
End Sub

Public Function AppWndProc(ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
    Select Case Msg
        Case WM_MOUSEACTIVATE
            Dim C As Integer
            Call CopyMemory(C, ByVal VarPtr(lParam) + 2, 2)
            If C = WM_RBUTTONDOWN Then
                Form1.PopupMenu Form1.mnuBP
                SendKeys "{ESC}"
            End If
    End Select
    AppWndProc = CallWindowProc(origWndProc, hwnd, Msg, wParam, lParam)
End Function





Об копирайте некий Мэтт Харт сам позаботился. smile

P.S. У умных людей этот вариант называется "сабклассинг". smile

Это сообщение отредактировал(а) Тутанхамец - 9.3.2006, 09:11
PM MAIL   Вверх
ArtNeoX
Дата 9.3.2006, 17:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 125
Регистрация: 23.10.2005

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



Первый вариант круче. smile
PM MAIL   Вверх
Exception
Дата 9.3.2006, 18:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

Репутация: 7
Всего: 186



Тутанхамец, +1.
Ждём-с модераторов для добавления в FAQ - полезная инфа.
PM   Вверх
Тутанхамец
Дата 10.3.2006, 07:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата

Тутанхамец, +1.


Пасип smile
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "VB6"
Akina

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

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

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

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


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

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


 




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


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

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