Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft Access Новый топик    Ответить
 Контекстное меню  [new]
AlTis
Member

Откуда: Penza - Moscow
Сообщений: 1099
Можно каким-нибудь образом привязать контекстное меню к форме, открытой в режиме таблицы, а именно к правому клику на заголовок столбца (выделенные столбцы с нажатым Shift).

Дело в том, что я от пользователей скрыл все стандартные панели инструментов и контекстные меню. Подставляю всё только своё.
Пользователи в какой-то момент времени решили закреплять столбцы грида.

Каким-то образом можно привязать контекстное меню?
Может API?

И ещё, есть стандартный пункт меню «формат», который отображается в режиме таблицы.
Как это сделать программно?
Т.е. как только пользователь входит в любую форму, открытую в режиме табл. – отображать соотв. пункт меню?
Думаю можно сделать с помощью модулей класса, но что-то ломает к каждой форме подключать модуль класса. Как-то без этого можно сделать?
11 июн 04, 12:17    [737316]     Ответить | Цитировать Сообщить модератору
 Re: Контекстное меню  [new]
AlTis
Member

Откуда: Penza - Moscow
Сообщений: 1099
товарищи!

подскажите где смотреть, пожалуйста
11 июн 04, 18:06    [738703]     Ответить | Цитировать Сообщить модератору
 Re: Контекстное меню  [new]
Exquisite
Member

Откуда: Россия, КМВ
Сообщений: 84
По поводу первого, ИМХО, только через субклассирование. Да и то, столько головняков будет...
Ленточная форма в данном случае рулит, хотя, конечно, возни с ней больше.
Вообщем, думаю легче разрешить контекстные менюшки и создать для каждого "момента" свое. Если прокатит :)

По поводу второго... А если это самое меню постоянно прописать в панели меню и в необходимые моменты просто делать его доступным или нет (через коллекцию панелей инструментов)?

Всё в этой жизни ИМХО...
11 июн 04, 19:23    [738884]     Ответить | Цитировать Сообщить модератору
 Re: Контекстное меню  [new]
AlTis
Member

Откуда: Penza - Moscow
Сообщений: 1099
А что такое субклассирование?
это когда один класс вызывается из другого?

Можно хоть какой нибудь пример, что бы попробовать эту штуку, или почитать где нибудь об этом
11 июн 04, 20:24    [738986]     Ответить | Цитировать Сообщить модератору
 Re: Контекстное меню  [new]
Exquisite
Member

Откуда: Россия, КМВ
Сообщений: 84
>А что такое субклассирование?
>это когда один класс вызывается из другого?

Э-э-э-э-э-э... Не совсем так. Субклассирование в VB и тем более в VBA - вещь довольно опасная (при неумелом ее использовании) и в этих языках относится к категории сверх-жесткого кодинга. Кратко это... Вообщем, любое действие пользователя (и не только, конечно) с формой (окном) вызывает генерацию так называемого "сообщения" окну. Другими словами, система Вындоуз вызывает определенную процедуру, которая отвечает за поведение некого конкретного окна. Процедура получает параметры - код сообщения и несколько (максимум два) дополнительных параметра, значения в которых трактуются по разному в разных сообщениях. Эта самая процедура по коду полученного сообщения определяет что ей необходимо сделать с окном. Определяет, грубо говоря (языком VB), обычным Select Case. Например, получив сообщение от системы VM_PAINT (не уверен в синтаксисе), данная процедура отрисовывает на экране окно.
Непосредственно субклассирование начинается с момента, когда мы вместо стандартной процедуры обработки оконных сообщений подсовываем окну адрес своей процедуры (через ВинАПИ) и, таким образом, можем следить абсолютно за всем, что происходит с окном. В том числе отслеживать нажатия кнопок мыши. Конечно, наша процедура после всех необходимых действий должна будет вызвать и стандартный обработчик оконных сообщений, без чего наша форма просто промрет :)
Гемора ну очень много!!! Зато можно таки добиться собственного поведения табличной формы на правую кнопку мыши :)

>Можно хоть какой нибудь пример, что бы попробовать эту штуку, или почитать где нибудь об этом
Ээээээээ... Ни одной ссылки не помню... Воспользуйся поиском по слову "субклассирование". Здесь, кажется, обсуждалось. На Русьимпорте у АМа точно обсуждалось. Да и в интернете, думаю, полно инфы.

з.ы. Если решишься на эту авантюру, то мой тебе совет - делай резервные копии перед каждым запуском всего этого дела :)
12 июн 04, 00:56    [739211]     Ответить | Цитировать Сообщить модератору
 Re: Контекстное меню  [new]
Shuhard
Member

Откуда:
Сообщений: 4998
насколько смог понять из чтения Гетца-а Access окон в понимании Windows всего 1 на приложение остальное картинки
следовательно субклассирование не пойдет
12 июн 04, 01:06    [739218]     Ответить | Цитировать Сообщить модератору
 Re: Контекстное меню  [new]
Exquisite
Member

Откуда: Россия, КМВ
Сообщений: 84
>окон в понимании Windows всего 1 на приложение

Не совсем корректно. Для НЕ-аксесовских программ ВСЕ отдельные элементы (текст-боксы, лэйблы, кнопки и т.п.) являются окнами. В Аксесе ситуация, действительно, несколько иная. Элементы управления являются просто "картинками" и то до тех пор, пока не получат фокус (если они умеют его получать). Как только получили - сразу становятся окном со своим hWnd и всеми вытекающими. Более того, Каждая форма в Аксе - это отдельное окно. И внутри формы дочерта дочерних окон - скрол-бары, вложенные окна и т.п. (вот точно иерархию Аксесовских форм не помню). Кстати у самого Аксеса туева хуча собственных окон, не имеющих прямого отношения к результатам деятельности программиста - главное окно, окно-родитель для всех MDI-окошек, куча тулбаров, скролы и т.д. и т.п. (Spy++ подтвердит:)

В данном конкретном случае надо:
1. знать высоту области заголовков;
2. отловить через сабклассинг нажатие правой кнопки мыши и если координаты мышиного курсора в пределах высоты заголовков табличной формы, то "выкинуть" контекстное меню, заглушив при этом дальнейшую обработку сообщения.
3. еще и ширину столбцов надо сопоставить с координатами клика, чтобы понять, на каком заголовке мыша.

Теоретически, это можно сделать, но практически... практически лично я бы не взялся за это...
12 июн 04, 01:50    [739236]     Ответить | Цитировать Сообщить модератору
 Re: Контекстное меню  [new]
Shuhard
Member

Откуда:
Сообщений: 4998
To Exquisite
был не прав - Гетц попутал
Spy++ дает по окну на форму + MDI + ...
12 июн 04, 09:34    [739271]     Ответить | Цитировать Сообщить модератору
 Re: Контекстное меню  [new]
N_A
Member

Откуда: Калининград
Сообщений: 259
Не парте мозги субклассированием.

1.Создай свою панель инструментов.
(Правый клик на панели->Настройка,
2. далее Создать, ввести имя, например "mmm"
3. далее скопировать (перетянуть нужные встроенные пункты меню с нажатым контролом) на созданную панель. Нужные пункты меню можно отобразить в тойже форме поставив нужные галочки.:)
4. По вкусу "превратить" панель в её свойствах в панель инструментов, контекстное меню или строку меню.
5. Допустим в 4 выбрали контекстное меню, тогда в свойстве формы "контекстное меню" выбераем наше детище - "mmm".

Вроде все.
12 июн 04, 12:15    [739320]     Ответить | Цитировать Сообщить модератору
 Re: Контекстное меню  [new]
Exquisite
Member

Откуда: Россия, КМВ
Сообщений: 84
Shuhard, бывает... И со мной... Вот смотри, как я щаз извиняться буду :)

для N_A
>Не парте мозги субклассированием.
Хм... Вообще не парить? Случаи бывают разные ;)


>5. ...тогда в свойстве формы "контекстное меню" выбераем наше детище - "mmm".
Млин... Три раза "КУ" (с присиданиями:) Прав.
Правда, это меню для всех "кликов" кроме "полевых" вылазиет, но это действительно в данной ситуации мелочи. //вот что значит давать советы не владея ситуацией (конкретно: не работая с табличными формами)

AlTis! AlTis!!! Сабклассинг отменяется!

Сорри за дизу...
12 июн 04, 22:53    [739719]     Ответить | Цитировать Сообщить модератору
 Re: Контекстное меню  [new]
Rodion Doroshkevich
Member

Откуда:
Сообщений: 34
А можно ли в контекстное меню прописывать "свои" пункты, и вешать на них свои обработчики?
24 сен 04, 18:37    [986596]     Ответить | Цитировать Сообщить модератору
 Re: Контекстное меню  [new]
Kelme
Member

Откуда: Riga, Latvia
Сообщений: 1488
Можно
24 сен 04, 18:44    [986606]     Ответить | Цитировать Сообщить модератору
 Re: Контекстное меню  [new]
neal
Member

Откуда: Сердце Москвы
Сообщений: 492
Слушайте,
у спокойно прошло такое

1) создал меню, накидал на него пунктов (копировать, вставить, ундо, отсортировать, найти, ...)
2) в свойствах меню сказал, что оно контекстное
3) у формы есть свойство Контекстное меню. На одну форму повесил одно, На другую другое.

-------------------------------------------------------
Заходи в саpай аккуpатно - могут быть сеpьезные гpабли.
24 сен 04, 18:46    [986615]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft Access Ответить