Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / теоритический вопрос по классам / 25 сообщений из 28, страница 1 из 2
05.12.2003, 10:09
    #32344386
АлексейК
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
теоритический вопрос по классам
Возможно я не до конца понимаю теорию классов. Подскажите кто знает.

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

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

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



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

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

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

Или я совсем не о том?
...
Рейтинг: 0 / 0
05.12.2003, 10:43
    #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
05.12.2003, 10:51
    #32344463
Senin Viktor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
теоритический вопрос по классам
2Hummer
>Можно и события форматирования добалять - но только в мдб,

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

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

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

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

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

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

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

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

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


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


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

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

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

Public Function test()
    RaiseEvent MyFormat
End Function


Правда я не понимаю что ты понимаешь под форматом формы.
...
Рейтинг: 0 / 0
05.12.2003, 11:42
    #32344563
Лох Позорный
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
теоритический вопрос по классам
Правда, чтоб ловить такое событие надо описывать переменную явно указывая тип, т.е.
Private frm As Form_ Форма1
Что не есть гуд.
...
Рейтинг: 0 / 0
05.12.2003, 12:23
    #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
05.12.2003, 12:42
    #32344668
Senin Viktor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
теоритический вопрос по классам
2SergeySV

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

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

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

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


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

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


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