|
|
|
контекстное меню - серверный фильтр для проектов ADP
|
|||
|---|---|---|---|
|
#18+
хочу сделать вместо стандартного универсальное меню - Серверный фильтр по выделенному - удалить серверный фильтр - Серверная сортировка сделал процедурку для контролов текстбокс, уже работает надо бы сделать для комбобоксов и чекбоксов (пока обдумываю) разумеется за сключением форм основанных на хранимых процедурах Процедура для контекстного меню серверный фильтр по выделенному Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. Хотелось бы узнать у знатоков работы с контекстными меню какими бы способами воспользоваться (событие показ контекстного меню ) чтобы задать свойство enabled для контролов в том случае если по полю нельзя делать фильтр (контролы форм основанные на вычисляемых значениях =Функция()) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2004, 17:58 |
|
||
|
контекстное меню - серверный фильтр для проектов ADP
|
|||
|---|---|---|---|
|
#18+
может и не в кассу , Я пользуюсь вот этим Application.CommandBars("MenuMotionScore").Controls _ ("Тама").Enabled = True Правда ситуацию генерирую самостоятельно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2004, 18:08 |
|
||
|
контекстное меню - серверный фильтр для проектов ADP
|
|||
|---|---|---|---|
|
#18+
это то понятно, а вот на какое событие контекстного меню такой код вставить (наверное это можно сделать модулем класса но я пока недопираю как именно) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2004, 18:12 |
|
||
|
контекстное меню - серверный фильтр для проектов ADP
|
|||
|---|---|---|---|
|
#18+
гадство у командбара только onupdate а у контрола только клик нету события показ .... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2004, 18:16 |
|
||
|
контекстное меню - серверный фильтр для проектов ADP
|
|||
|---|---|---|---|
|
#18+
Помнится мне (читал где-то относительно недавно), что у стандартного механизма вывода контекстных меню масса ограничений, не позволяющих использовать их по-настоящему гибко, но там предлагалось взамен самостоятельно по событию right-click выводить свою pop-up форму, это самое меню имитирующее... Боюсь, это слишком трудоёмкий способ. Но если вдруг окажется, что другого варианта и нет... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2004, 19:04 |
|
||
|
контекстное меню - серверный фильтр для проектов ADP
|
|||
|---|---|---|---|
|
#18+
авторпо событию right-click выводить свою pop-up форму, это самое меню имитирующее... Зато сколько возможностей! А это меню встроенное - неспортивно как-то ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2004, 19:34 |
|
||
|
контекстное меню - серверный фильтр для проектов ADP
|
|||
|---|---|---|---|
|
#18+
А, может, проще сделать? Не настраивать свойство ShortcutMenuBar контрола, а обрабатывать событие MouseDown для правой кнопки мыши, и при этом самому выводить подготовленное должным образом обычное контекстное меню? С помощью метода ShowPopup, а? А то я попробовал поискать примеры и того, о чём говорил, не нашёл... лишь вот это: http://support.microsoft.com/default.aspx?scid=kb;en-us;210093&Product=acc][Q210093]ACC2000: How to Create Floating Pop-Up Menus Но это как-то, кажется, примитивно... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2004, 23:54 |
|
||
|
контекстное меню - серверный фильтр для проектов ADP
|
|||
|---|---|---|---|
|
#18+
2 АлексейК Как уже сказали, событий именно у контролов меню с гулькин фиг, а именно одно - клик. Поэтому делаем универсальное меню с нужными пунктами, потом пишем функцию, которая будет вызываться по событию MouseDown контрола, в функцию можно передавать форму и контрол - в этой функции анализировать что угодно на этой форме и контроле, также смотреть, какая кнопка мыши была нажата - и делать своё черное дело с меню... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2004, 09:21 |
|
||
|
контекстное меню - серверный фильтр для проектов ADP
|
|||
|---|---|---|---|
|
#18+
1. в .mdb проблемы серверного фильтра по форме нет - делаешь запрос к серверу и поключаешь его к форме. все фильтры работают как и в файл-сервере 2. конт. меню строю так есть одно большое меню для ленточно-табличных форм со всеми возможными пунктами. при загрузке формы запускается функция: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. на выходе - массив элементов меню, которые следует показать для данной формы, который хранится в переменной модуля формы на событие контрола формы MouseDown вешаем функцию Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. End Function которая открывает нужные пункты меню, читая массив можно добавить в функцию аргументы, которые будут управлять поведением элементов меню в зав-сти от конкретного контрола вся система очень легко настраивается, легко добавляются и убираются пункты меню и т.д. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2004, 10:06 |
|
||
|
контекстное меню - серверный фильтр для проектов ADP
|
|||
|---|---|---|---|
|
#18+
у меня используется аксесс 2002 поэтому все эти навороты не нужны сейчас оформил меню с событиями в виде класса, а открытие по правой кнопке мыши на контроле. есть две неприятности - прописывать надо для каждого контрола почему -то события происходят дважды при нажатии на одну из кнопок класс-модуль CMD_BARS Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. вызов из формы: Код: plaintext 1. 2. 3. почему и как сделать лучше? - прописывать надо для каждого контрола - события происходят дважды при нажатии на одну из кнопок ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2004, 10:07 |
|
||
|
контекстное меню - серверный фильтр для проектов ADP
|
|||
|---|---|---|---|
|
#18+
опс, пока писал появилось еще несколько топиков неувязочка вышла: у меня используется аксесс 2002 поэтому все эти навороты не нужны по поводу ссылки тимура относительно вызова showpopup через апи ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2004, 10:12 |
|
||
|
контекстное меню - серверный фильтр для проектов ADP
|
|||
|---|---|---|---|
|
#18+
авторпо событию right-click выводить свою pop-up форму, это самое меню имитирующее новая идея, видимо которая не будет давать мне спать долгое время. точно, нужно сделать всплывающее меню так как сделали в всплывающем датепикере. возможности будут любые ... 2 e_basil это уже 3 решение относительно организации контекстных меню в проекте . 2 Hummer да вроде так и делаю (твоя школа )) ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2004, 10:23 |
|
||
|
контекстное меню - серверный фильтр для проектов ADP
|
|||
|---|---|---|---|
|
#18+
от двойной сработки событий спас такой вызов: Private Sub id_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) If Button <> 2 Then Exit Sub Set Cbar = New CMD_BARS Set Cbar = Nothing End Sub почему так и не понял ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2004, 10:43 |
|
||
|
контекстное меню - серверный фильтр для проектов ADP
|
|||
|---|---|---|---|
|
#18+
2 e_basil Крайне не универсальное решение - требует правки функции ArPopUp каждый раз, когда мне нужно добавить новый пункт меню или организовать новый журнал. От контекстных меню проект не пухнет, а вот иметь одно ОГРОМНОЕ контекстное меню для всех форм крайне не разумно, особенно если их много. У нас меню описываются в табличках и устанавливается привязка к форме - для каждой формы своё меню (или одинаковое для форм одного типа, если формы одинаковы по сути - например, результат поиска предполагает только открытие формы с объектом поиска, добавление, удаление объекта- меню одно) - при загрузке формы оно может быть построено заново... Примерынй способ реализации изложен на странице Алексея Козина. 2 АлексейК Для универсальности класса я бы не обращался к методам Screen, а передавал бы в класс форму и контрол. А так вроде всё пучком:) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2004, 10:45 |
|
||
|
контекстное меню - серверный фильтр для проектов ADP
|
|||
|---|---|---|---|
|
#18+
2 Hummer в таблице я прописываю построение toolbar-ов для форм. Настройка меню через таблицу или путем правки функции занимает примерно одинаково времени, в функции - меньше. Одно меню для всех табличных форм удобно еще тем, что новая форма создается по шаблону, в котором уже записано конменю в сойстве, и все что надо изменить в форме - ID журнала. Команды унифицированы и вызывают функции нужного класса (активной формы), поэтому количество пунктов меню не большое (у меня 29) для всего проекта (в проекте только табличных форм около 40) получается одно меню (даже большое) vs 40 меню ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2004, 11:08 |
|
||
|
контекстное меню - серверный фильтр для проектов ADP
|
|||
|---|---|---|---|
|
#18+
Объясняю ещё раз. У меня аде на всех клиентах - поправил функцию, пересобрал проект и не один (система состоит из 18 библиотек - аде файлов). Одинаковое время будет - ну-ну:) Мне абсолютно всё равно, сколько у меня будет контекстных меню - они декларативно описаны и добавление в них контролов осуществляется через интерфейс - потом меню строится динамически для каждой формы при её загрузке. Отлично себе представил меню с более чем 1000 контролов:) И массивчик с циклом:) Этот подход не подходит для крупных систем, вот и всё, что я хочу сказать на самом деле. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2004, 11:15 |
|
||
|
контекстное меню - серверный фильтр для проектов ADP
|
|||
|---|---|---|---|
|
#18+
АлексейК: Алексей, поясни, пожалуйста, что вот под этим АлексейК- прописывать надо для каждого контрола в точности подразумевалось? Что хочется избавиться от необходимости прицеплять к каждому полю в форме обработчик события MouseDown? Или иное? А то у меня есть решение, но не уверен, к той ли оно задаче. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2004, 11:30 |
|
||
|
контекстное меню - серверный фильтр для проектов ADP
|
|||
|---|---|---|---|
|
#18+
хорошему предела нет, главное правильно выбрать то, что целесообразно для конкретного проекта ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2004, 11:32 |
|
||
|
контекстное меню - серверный фильтр для проектов ADP
|
|||
|---|---|---|---|
|
#18+
2 Тимур Рахимов да, приходится прописывать на событие каждого контрола : Private Sub id_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) If Button <> 2 Then Exit Sub Set Cbar = New CMD_BARS Set Cbar = Nothing End Sub так как нужно отслеживать что нажата именно 2 кнопка мыши то имя макроса / функции вместо процедуры обработки событий не прицепить (по крайней мере я не знаю как) если есть решение - то неплохо бы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2004, 11:49 |
|
||
|
контекстное меню - серверный фильтр для проектов ADP
|
|||
|---|---|---|---|
|
#18+
Это решение продумывалось и тестировалось мной в различных вариантах, одним из которых будет, например, такой: Создаём класс, объект которого будет создаваться как "тень" каждого контрола (точнее, поскольку объект типа Access.Control не поддерживает события, нужно будет для каждого вида контролов создавать свою разновидность такого класса, но это незначительное неудобство). Важнейшей особенностью этого класса является наличие внутри него переменной типа Access.CommandButton, Access.TextBox, Access.Combobox и т. п., объявленной WithEvents. Также внутри этого класса создаётся обработчик нужного события для соответствующего контрола - тот код, ради которого, собственно говоря, мы городим этот "огород". При старте формы (я использую для этого событие Open), специальная процедура пробегает по всем контролам формы и, определяя по префиксу имени либо содержимому свойства Tag (или каким-либо другим признакам), что к конкретному контролу нужно присоединить определённый обработчик нужного события, создаёт объект вышеописанного класса и присваивает соответствующему его свойству ссылку на текущий контрол. Затем объект этого класса добавляется в коллекцию, объявленную на уровне формы. Вчерне это все. Задача в целом решена. Реально же я сделал ещё более сложную вещь - я создал аналогичный "теневой" класс для формы, чтобы не писать для каждой формы вышеописанный обработчик события Load и вручную не объявлять необходимые переменные в форме. Реально я объявляю в форме только одну переменную типа "теневого" класса формы и присваиваю его свойству ссылку на форму в событии Open. Весь остальной код сидит в моих классах и написан единожды (его нет необходимости копировать из формы в форму). Должен, правда предупредить, что отладка всего этого в Access 2000 была неэлементарна - если не предпринять определённых ухищрений, при применении такой схемы обработки событий в форме Access рушится при закрытии формы (эта ошибка документирована в MS KB, но удовлетворительного способа обхода там не предложено; пришлось изощряться самому). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2004, 12:42 |
|
||
|
контекстное меню - серверный фильтр для проектов ADP
|
|||
|---|---|---|---|
|
#18+
изврат конечно , но мысль хорошая. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2004, 12:48 |
|
||
|
контекстное меню - серверный фильтр для проектов ADP
|
|||
|---|---|---|---|
|
#18+
2 АлексейК Для всех контролов на мой взгляд проще программно вставить кусок кода в модуль формы один раз и всё... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2004, 12:53 |
|
||
|
контекстное меню - серверный фильтр для проектов ADP
|
|||
|---|---|---|---|
|
#18+
2 Hummer можно, конечно но некрасиво и неуниверсально. вот что надумал: выделить несколько контролов написать в событии моусдовн =MDOWN() в форме или паблик - модуле Public Function MDOWN() .... End Function тока пока не знаю как определить какая нажата кнопка мыши в этом случае, наверное нужно будет апи ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2004, 13:10 |
|
||
|
контекстное меню - серверный фильтр для проектов ADP
|
|||
|---|---|---|---|
|
#18+
в моем случае так исделано в конструкторе в событии моусдаун стоит =W_conMenu() в контекстное меню стоит mnJournSales аксесс выполнит W_conMenu а потом сам знает какя кнопка нажата, выводить меню или нет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2004, 13:31 |
|
||
|
контекстное меню - серверный фильтр для проектов ADP
|
|||
|---|---|---|---|
|
#18+
А что, мне кажется, что e_basilв конструкторе в событии моусдаун стоит =W_conMenu() в контекстное меню стоит mnJournSales аксесс выполнит W_conMenu а потом сам знает какя кнопка нажата, выводить меню или нет для конкретного случая является самым изящным решением. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2004, 14:35 |
|
||
|
|

start [/forum/topic.php?fid=45&msg=32447359&tid=1675971]: |
0ms |
get settings: |
9ms |
get forum list: |
20ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
168ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
79ms |
get tp. blocked users: |
1ms |
| others: | 202ms |
| total: | 502ms |

| 0 / 0 |
