textbox и правая кнопка мыши

Программирование на Visual Basic for Applications
corgi
ToyMan
ToyMan
 
Сообщения: 1367
Зарегистрирован: 01.10.2002 (Вт) 9:59
Откуда: Россия, Москва

textbox и правая кнопка мыши

Сообщение corgi » 09.04.2003 (Ср) 12:27

обычно по клику правой кнопкой мыши появляется стандартное меню(типа копировать вставить и тд) в VBA'шном textbox'e ничего такого не появляется а пользователи посто-таки требуют этого дела. Вот и вопрос может как-то можно им это сделать а :?: :?: :?: особо не заморачиваясь :!:

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 09.04.2003 (Ср) 12:33

Ну можно через API сделать свое меню и показывать его в обработчике mouseup я так мыслю.

corgi
ToyMan
ToyMan
 
Сообщения: 1367
Зарегистрирован: 01.10.2002 (Вт) 9:59
Откуда: Россия, Москва

Сообщение corgi » 09.04.2003 (Ср) 12:49

ну а что-нибудь полегче не найдется :?:

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 09.04.2003 (Ср) 12:58

:shock: а куда легче-то?

Чего турдного в том, чтобы поступить как описано? Это гораздо проще, чем к примеру вручную рисовать меню и обрабатывать перемещения по нему ;)

Calvin
Постоялец
Постоялец
 
Сообщения: 409
Зарегистрирован: 21.01.2003 (Вт) 12:13
Откуда: Sebastopol

Сообщение Calvin » 09.04.2003 (Ср) 13:34

Судя из того, что написано в хелпах, то у textbox нет события BeforeRightClick. А можно ли его создать для объетов..... (может есть какие-нибудь мысли)????

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 09.04.2003 (Ср) 13:55

А оно ему надо, это событие? Есть же MouseUp - и в него передается кнопка, которая была отпущена.

Calvin
Постоялец
Постоялец
 
Сообщения: 409
Зарегистрирован: 21.01.2003 (Вт) 12:13
Откуда: Sebastopol

Сообщение Calvin » 09.04.2003 (Ср) 16:35

Почитал в хелпе и там действительно можно задействовать любую из кнопок мыши, присваивая параметру Button значения, а также сочетания клавиш Ctrl, Shift, Alt (параметр Shift ), но чегой-то прога ругается и мне кажется, что ей не нравятся типы fmButton и fmShiftState
Код: Выделить всё
Private Sub object_MouseUp( ByVal Button As fmButton, ByVal Shift As fmShiftState, ByVal X As Single, ByVal Y As Single)


в чем здесь глюк??? у меня 2000-й офис и справка к нему (дополнено)
Последний раз редактировалось Calvin 09.04.2003 (Ср) 16:43, всего редактировалось 1 раз.

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 09.04.2003 (Ср) 16:40

Глюк в том, что ты читал хелпу похоже от 97 офиса.

В нынешнем (ХР) эти значнеия имеют просто тип integer.

corgi
ToyMan
ToyMan
 
Сообщения: 1367
Зарегистрирован: 01.10.2002 (Вт) 9:59
Откуда: Россия, Москва

Сообщение corgi » 09.04.2003 (Ср) 18:23

2Calvin:
Код: Выделить всё
Private Sub TextBox1_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
End Sub

2RayShade:
может скажешь с чего начать, а то я без понятий

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

Сообщение alibek » 10.04.2003 (Чт) 11:21

Имелось ввиду примерно так:
Код: Выделить всё
Private Sub DrawPopupMenu()
Dim hMnu0 as Long
hMnu0 = CreatePopupMenu()
Call AppendMenu(hMnu0, MF_STRING, 0, "Menu 1")
Call AppendMenu(hMnu0, MF_SEPARATOR, 0, Byal 0)
Call AppendMenu(hMnu0, MF_CHECKED, 0, "Menu 2")
...
End Sub

Private Sub TextBox1_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
If Button = 2 Then DrawPopupMenu
End Sub

А затем через сабклассинг окна перехватываешь выбор команды меню. Проблема в том, что в VBA окна не имеют Handle, так что я не знаю, как ты сможешь осуществить сабклассинг.
Так что лучше всего скажи пользователям "ША! Кто тут программер?! Не будет меню, я сказал!" :)
Lasciate ogni speranza, voi ch'entrate.

Fuzzy
Обычный пользователь
Обычный пользователь
 
Сообщения: 60
Зарегистрирован: 03.12.2002 (Вт) 12:33

Пример

Сообщение Fuzzy » 11.04.2003 (Пт) 12:03

Можно сделать, например, так.
Создай форму UserForm1, на неё плюхни текстбокс TextBox1. В модуле формы напиши:

Код: Выделить всё
Sub TextBox1_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
If Button = 2 Then 'если правая кнопка
    'создаём новое поп-ап меню
    Set MyCB = CommandBars.Add("MyPanel", msoBarPopup)
    'и заполняем его кнопками.
    With CommandBars("Edit") 'берём их из меню "Правка"
    'и вешаем на них наши процедуры
        MyCB.Controls.Add(msoControlButton, .Controls("Копировать").ID).OnAction = "MyCopy"
        MyCB.Controls.Add(msoControlButton, .Controls("Вырезать").ID).OnAction = "MyCut"
        MyCB.Controls.Add(msoControlButton, .Controls("Вставить").ID).OnAction = "MyPaste"
    'если офис нелокализованный, то надо вместо Копировать,
    'Вырезать и Вставить вписать Copy, Cut и Paste
    End With
    MyCB.ShowPopup 'показываем наш поп-ап
    MyCB.Delete 'а потом можно и удалить
End If
End Sub

'наши процедуры для копирования, вырезания и вставки
Sub MyCopy()
UserForm1.TextBox1.Copy
End Sub

Sub MyCut()
UserForm1.TextBox1.Cut
End Sub

Sub MyPaste()
UserForm1.TextBox1.Paste
End Sub


У меня вроде работает как надо

Calvin
Постоялец
Постоялец
 
Сообщения: 409
Зарегистрирован: 21.01.2003 (Вт) 12:13
Откуда: Sebastopol

Сообщение Calvin » 11.04.2003 (Пт) 12:19

У меня почему-то при нажатии, допустим, на "копировать" не осуществляется выполнение Sub MyCopy, странно...... А во-вторых
Sub MyCopy()
UserForm1.TextBox1.Copy
End Sub

тут скорей всего не сам объект копировать нужно, а содержимое

Fuzzy
Обычный пользователь
Обычный пользователь
 
Сообщения: 60
Зарегистрирован: 03.12.2002 (Вт) 12:33

Сообщение Fuzzy » 11.04.2003 (Пт) 12:30

Поистине странно, что у тебя не работает чего-то. Проверил и в 97-м, и в 2000-м, и в ХР. Дай мыло, пришлю файл.
Насчёт метода TextBox.Copy - он копирует не объект, а выделенный в нём текст.
О чём написано в хелпе.

corgi
ToyMan
ToyMan
 
Сообщения: 1367
Зарегистрирован: 01.10.2002 (Вт) 9:59
Откуда: Россия, Москва

Сообщение corgi » 11.04.2003 (Пт) 12:32

ну тогда и мне тоже на nikolai@pochta.ws

Fuzzy
Обычный пользователь
Обычный пользователь
 
Сообщения: 60
Зарегистрирован: 03.12.2002 (Вт) 12:33

Сообщение Fuzzy » 11.04.2003 (Пт) 12:34

А, братья, извините, мой дурак, неправильно написал :(
Процедуры MyCopy, MyPaste и MyCut надо не в модуле формы, а в отдельном модуле держать.


Вернуться в VBA

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

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

    TopList