powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / теоритический вопрос по классам
25 сообщений из 28, страница 1 из 2
теоритический вопрос по классам
    #32344386
Фотография АлексейК
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Возможно я не до конца понимаю теорию классов. Подскажите кто знает.

По идее формы, отчеты это встроенные классы аксесса

можно ли написать свой, пользовательский класс функционально аналогичный аксессовской форме?

дополнить его возможностью назначать событие секции onformat ? ))



идея в том чтобы разрабатывать формы в удобном аксессовском конструкторе а открывать их своим более функциональным классом.
...
Рейтинг: 0 / 0
теоритический вопрос по классам
    #32344408
Фотография Senin Viktor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не понятно что именно ты с формой делать хочешь, но у меня на всех формах есть ссылка на класс, управляющий поведением формы (ресайзинг, перевод на др. язык, форматирование элементов, вызовы меню, удаление/добавление и т.п.). Для форм-журналов: заполнение данными, поиск, сортировка, удаление/добавление, печать, форматирование ЛистВью, перехват нажатия клавиш, обработка событий как формы так и отдельных ее элементов)

Но это не то?
...
Рейтинг: 0 / 0
теоритический вопрос по классам
    #32344422
Фотография АлексейК
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Насколько я понимаю...
в твоем варианте модуль класса наверняка использует в качестве исходного объекта стандартную форму к которой нельзя добавить свои события такие как событие форматирование секции ленточной формы
или можно?
...
Рейтинг: 0 / 0
теоритический вопрос по классам
    #32344441
Фотография АлексейК
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не по основной теме, но все равно а можно где - нить посмотреть примерчик
класса формы для работы с менюшками и ресайзингом ?
интересно посмотреть как организовано... обработчики то к менюшкам должны быть у каждой формы свои...
...
Рейтинг: 0 / 0
теоритический вопрос по классам
    #32344448
Hummer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 АлексейК
Ну как я понимаю, просто классу на вход будет подаваться форма (Me), а уж в классе, в зависимости от типа формы, можно сделать что угодно....
Так Виктор и написал уже...

Можно и события форматирования добалять - но только в мдб, иначе без перевода формы в режим конструктора ты ничего не добавишь, можно только дизаблить сущ. код - просто убирая [Event Procedure] в указанном событии, но добавлять код на форму не получится...

Или я совсем не о том?
...
Рейтинг: 0 / 0
теоритический вопрос по классам
    #32344449
Фотография Senin Viktor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>которой нельзя добавить свои события такие как событие форматирование секции ленточной формы

Добавить событие достаточно просто

Private WithEvents mSearch As TextBox ' Объявили
...
при инициализации:
Set mSearch = mForm(cSearchTextBoxName) ' присвоили
mSearch.AfterUpdate = "[Event Procedure]" ' пределили событие

И пишем
Private Sub mSearch_AfterUpdate()
Msgbox "Труля-ля"
End sub

для формы
mForm.OnKeyUp = "[Event Procedure]"

>в твоем варианте модуль класса наверняка использует в качестве исходного объекта стандартную форму

Форма стандартная (но и их много, даже верней сказать - они однотипные). Созданнны простым копирование (я не стал заморачиваться с 1 формой, которая все умеет)
Просто в событие Form_Load я задаю необходимые свойства класса. Если, например, не хочу иметь возможность поиска, то не инициализирую переменную cSearchTextBoxName.
...
Рейтинг: 0 / 0
теоритический вопрос по классам
    #32344463
Фотография Senin Viktor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Hummer
>Можно и события форматирования добалять - но только в мдб,

Под форматированием я имелл виду: один шрифт,цвет, размер шрифта, цвет фона формы, цвет формы контролов и т.п. для определнного типа контрола (тектбокс, кнопка, ListView) (достали юзера, которые хотят формочку по вводу данных ХХХ красненькую, а YYY - cbytymre. - пусть сами теперь раскрашивают, художники, млин)это можно делать и mde/ade. Контролов-то новых я не создаю

2АлексейК
>а можно где - нить посмотреть примерчик
класса формы для работы с менюшками и ресайзингом ,интересно посмотреть как организовано... обработчики то к менюшкам должны быть у каждой формы свои...
Ты будешь смеяться - но ресайзинг из Гетца (с доработками по деинициализации его класса и обработкой List/TreeView).
Правда меню (контекстыне) я создаю ручками, и просто их вызываю (но, есно, это делать можно и программно) - фо-первых удобно проектировать, во-вторых: все-равно меняю все в одном месте - но только не в коде класса, в конструкторе меню
...
Рейтинг: 0 / 0
теоритический вопрос по классам
    #32344466
Hummer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Senin Viktor
Это всё пишется в модуле класса, а не формы?

2 АлексейК
Обработчик у менюшек может быть один для всех. Есть свойство ActionControl, но вот дальше должны быть описаны функции в проекте, которые будут вызывать из этого обработчика....
...
Рейтинг: 0 / 0
теоритический вопрос по классам
    #32344473
Фотография АлексейК
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Senin Viktor , Hummer

что касается добавления ВСТРОЕННЫХ событий для объектов которые withevents - тут все ясно.

как активизировать событие объекта access.section onformat ?
оно недоступно в формах но доступно в отчетах.
...
Рейтинг: 0 / 0
теоритический вопрос по классам
    #32344479
Фотография Senin Viktor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Hummer
>Это всё пишется в модуле класса, а не формы?

Да. В модуле класса. В моделе формы только объявлянная переменная, ее инициализация (задания всяких разных свойств) на событие Form_load и ее деинициализация на Form_Close
...
Рейтинг: 0 / 0
теоритический вопрос по классам
    #32344484
Фотография Senin Viktor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>как активизировать событие объекта access.section onformat ?
>оно недоступно в формах но доступно в отчетах

Так же как и для формы. Или я чего-то не допонял?
...
Рейтинг: 0 / 0
теоритический вопрос по классам
    #32344496
Hummer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Senin Viktor
Уже понял, просто невнимательно прочитал сообщение:)

2 АлексейК
Ну можно же вот так попробовать:
Public WithEvents rpt As Report
With rpt
.Section(1).OnFormat
End With

Но это только в теории...
...
Рейтинг: 0 / 0
теоритический вопрос по классам
    #32344500
Фотография АлексейК
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
так? а не будет ругаться что такого события у секции нет?


Private WithEvents SEC As section
...
при инициализации:
Set SEC = mForm.section(0)
SEC.onFormat = "[Event Procedure]"


Private Sub SEC_onFormat()
Msgbox "Труля-ля"
End sub
...
Рейтинг: 0 / 0
теоритический вопрос по классам
    #32344508
Фотография АлексейК
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
то есть хочу OnFormat для ФОРМЫ не для отчета
...
Рейтинг: 0 / 0
теоритический вопрос по классам
    #32344532
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну нету у формы события OnFormat. Не-ту.
Если хочешь - делай свое событие. Выбрасывай его где хочешь, лови его где хочешь. Правда я не уверен что так получится, но попробовать можно.
...
Рейтинг: 0 / 0
теоритический вопрос по классам
    #32344538
Фотография АлексейК
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЛП

есть версия как можно поймать такое событие?
что - нибудь из winapi ?
...
Рейтинг: 0 / 0
теоритический вопрос по классам
    #32344558
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В форме пишешь

Код: plaintext
1.
2.
3.
4.
Public Event MyFormat()

Public Function test()
    RaiseEvent MyFormat
End Function


Правда я не понимаю что ты понимаешь под форматом формы.
...
Рейтинг: 0 / 0
теоритический вопрос по классам
    #32344563
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Правда, чтоб ловить такое событие надо описывать переменную явно указывая тип, т.е.
Private frm As Form_ Форма1
Что не есть гуд.
...
Рейтинг: 0 / 0
теоритический вопрос по классам
    #32344633
Фотография SergeySV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я так понял что АлексейК хочет получить доступ к функции окна, обрабатывающей все приходящие сообщения.

Если это так...

В современных "средствах" визуального программирования класс формы как раз ис крывает от нас все эти WinAPI фичи, как создание окна с заданием кучи свойств в функ. CreateWindow и т.д., а главное функцию обработчик сообщений. Нам как программистам показывают только некоторые из приходящих окну/форме сообщений, тогда как остальные обрабатываются по умолчанию.

Однако, у нас есть возможность заменить функ. окна по умолч. на свою - это называется subClassing. Мы просто заменяем на свою функцию, получаем все сообщения, обрабатываем их как хотим, а потом передаем их функции окна по умолч. - мы же не хотим обрабатывать все сообщения (например такая геморойная как перерисовка и т.д.), пусть и теперь и он поработает. А если мы какое-нибудь сообщение не передадим, то о нем окно ничего и не узнает - такой вот способо перехвата/блокировки сообщений

Пример:
Код: 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.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
       Устанавливает наш обработчик событий для формы
       lpPrevWndProc = SetWindowLong(hndForm, GWL_WNDPROC, AddressOf WindowProc)


    ' Возвращает обратно станд. обработчик
    SetWindowLong hndForm, GWL_WNDPROC, lpPrevWndProc
  

это пример для ловли сообщения о прокрутке колесика мыши в ListBox формы VBA Excel. Он ловит
это событие и посылает его ListBox  в виде нажатия клавиш PgDn или "Стрелок", потому
как станд. сообщение о прокрутке скрола ListBox  в Excel не обрабатывает (в отл. от Access)


Public Function WindowProc(ByVal hWnd As Long, ByVal uMsg As Long, _
ByVal wParam As Long, ByVal lParam As Long) As Long
   ' Наш обработчик событий
   Dim hWndFocus As Long
   Dim hWndParent As Long
   Dim lpClassName As String
   Dim WHEEL_DELTA As Long
   Dim i As Integer, k As Integer

   ' обрабатываем событие - поворот колесика
   If uMsg = WM_MouseWheel Then
     ' проверям стоит ли фокус на каком-нибудь ListBox
     '------------------------------------------------
     hWndFocus = apiGetFocus
     ' буфер для имени класса окна
     lpClassName = Space( 256 )
     ' получаем имя класса активного элемента
     i = GetClassName(hWndFocus, lpClassName, 256)
     ' от пробелов освобождаемся
     lpClassName = Left(lpClassName, i)
     If lpClassName =  "F3 Server 60000000 " Then
       ' у родителя ListBox'a должен быть такой же класс,
       ' а если родителя нет, то это не ListBox, а клиент. часть формы
       ' ----------------------------------------------
 
       hWndParent = GetParent(hWndFocus)
       If hWndParent >  0  Then
         lpClassName = Space( 256 )
         i = GetClassName(hWndFocus, lpClassName,  256 )
         lpClassName = Left(lpClassName, i)
         If lpClassName =  "F3 Server 60000000 " Then
           ' все OK, это ListBox работаем с ним дальше
           ' ------------------------------------------
 
           ' параметр WHEEL_DELTA хранится в High-word wParam
           WHEEL_DELTA = wParam And cHighWord
           k = intScroll
           Do
            If WHEEL_DELTA > 0 Then
              If boolRowPage Then
                i = PostMessage(hWndFocus, WM_KEYDOWN, VK_UP, vbNull)
              Else
                i = PostMessage(hWndFocus, WM_KEYDOWN, VK_PRIOR, cExtKeyFlag)
              End If
            Else
              If boolRowPage Then
                i = PostMessage(hWndFocus, WM_KEYDOWN, VK_DOWN, vbNull)
              Else
                i = PostMessage(hWndFocus, WM_KEYDOWN, VK_NEXT, cExtKeyFlag)
              End If
            End If
            k = k - 1
          Loop While k > 0
         End If
       End If
     End If
   End If
 
 
   ' вызываем станд. функцию (которая была раньше)
   WindowProc = CallWindowProc(lpPrevWndProc, hWnd, uMsg, wParam, lParam)
End Function


...
Рейтинг: 0 / 0
теоритический вопрос по классам
    #32344668
Фотография Senin Viktor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2SergeySV

subClassing форм Акеса у меня лично получался только через создания отдельно подключаемых dll. Иначе Акес глючило, колбасило, постоянно прибегал доктор Ватсон. И что более всего бесит - это случается не постоянно

2АлексейК
ЛП писалПравда я не понимаю что ты понимаешь под форматом формы.
Все-таки ответь на вопрос ЛП.
...
Рейтинг: 0 / 0
теоритический вопрос по классам
    #32344687
Фотография АлексейК
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Виктору и ЛП

под форматом формы я понимаю то же самое что и в формате раздела отчета - вывод контрола в конкрентой записи
...
Рейтинг: 0 / 0
теоритический вопрос по классам
    #32344718
Фотография Senin Viktor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>под форматом формы я понимаю то же самое что и в формате раздела отчета - вывод контрола в конкрентой записи

А записи находятся в ленточной форме? Если Да, то твой вопрос сводиться к форматированию ленточных форм
...
Рейтинг: 0 / 0
теоритический вопрос по классам
    #32344721
Фотография АлексейК
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
именно так.
альтернатива условному форматированию
...
Рейтинг: 0 / 0
теоритический вопрос по классам
    #32344731
Фотография Senin Viktor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тогда я пас - я от ленточных форм отказался (а сложность условного форматирования оных была одним из поводов)
Использую сторонние компоненты (ListView)
...
Рейтинг: 0 / 0
теоритический вопрос по классам
    #32344891
Фотография АлексейК
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 sergeySV


а можно поподробнее о перехвате обработчика.
с апи функциями понятно - можно найти в Api textview

а что за переменная GWL_WNDPROC ? ее там в константах нет ..
...
Рейтинг: 0 / 0
25 сообщений из 28, страница 1 из 2
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / теоритический вопрос по классам
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]