OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Среда, 24 Апрель, 2024 05:58

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 3 ] 
Автор Сообщение
 Заголовок сообщения: Вопрос...
СообщениеДобавлено: Понедельник, 24 Апрель, 2006 08:45 

Зарегистрирован: Суббота, 22 Апрель, 2006 21:30
Сообщения: 35
Есть четыре модуля. Они примерно так между собой связаны:

Код:
TMessageRouter -----------------------------> TComponent
(WndProc:WinApi.WNDPROC)                         |
                   ^                             |
                   |                             \/
                   |                        TFormComponent
                   |                     /        |        \
                   |                    /         |          \
                   |                  \/         \/          \/
                   |                TForm1       TForm2       TForm3
                   |                  ^            ^             ^
                   |                    \          |            /
                   |                      \        |          /
                   |-------------------------  Главный модуль


* Главный модуль который создает все TForm-ы и через TMessageRouter запускает программу.

* Второй(TComponent) модуль содержит расширяемую запись TComponent.

* Третий(TFormComponent) содержит потомка этой записи TFormComponent и указатель на нее TForm = POINTER TO EXTENSIBLE RECORD(TFormComponent).

* А Четвертый(TMessageRouter), включает в себя пока две процедуры:
1. Обработки сообщений ProcMsg типа WinApi.WMDPROC.
2. Цикл по получению сообщений, такого содержания:
WHILE WinApi.GetMessage(msg, 0, 0, 0) # 0 DO
res := WinApi.TranslateMessage(msg);
res := WinApi.DispatchMessage(msg);
END;

Процедура обработки сообщений ProcMsg, должна получить сообщения типа WM_PAINT, или любую другую. И через TFromComponent, или на худой конец через TComponent, разослать всем TForm полученные сообщения.

Но суть в том, что каждая TForm должна по разному эти сообщения обрабатывать. Например в зависимости от своего ID(идентификационного номера).

-------------------------------------------------------------------
1. Как бы это сделать?
Объявить в TComponent расширяемый метод?
Типа: PROCEDURE (VAR t: TComponent) SetParams (Params: SET), NEW, EXTENSIBLE;
Но как в каждой TForm его расширить?

2. Может саму структуру программы упростить/усложнить/перестроить?
3. И блин, как здесь по человечески можно диаграмы рисовать?

PS: Может вопрос конечно глупый, ибо такими вещами раньше не занимался и мыслил процедурно.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Понедельник, 24 Апрель, 2006 15:09 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Цитата:
PROCEDURE (VAR t: TComponent) SetParams (Params: SET), NEW, EXTENSIBLE;
Но как в каждой TForm его расширить?

В смысле "как"? Синтаксически? Просто определяете его еще раз.
Если у TComponent нет никакой реализации, то делайте не EXTENSIBLE, а ABSTRACT или EMPTY.
Если реализация есть, то вообще говоря, лучше делать не EXTENSIBLE, а вводить дополнительный абстрактный или пустой SetParams2. SetParams отрабатывает и вызывает SetParams2. Таким образом тот, кто расширяет тип, уже не должен писать супервызов SetParam^, действия базового класса выполнятся в любом случае.
Да, лучше не именуйте типы префиксом T, это дельфовский стиль. Посмотрите раздел документации Оформление кода.

А вообще, как я понял, Вы хотите сделать нечто подобное VCL?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Понедельник, 24 Апрель, 2006 20:15 

Зарегистрирован: Суббота, 22 Апрель, 2006 21:30
Сообщения: 35
Цитата:
А вообще, как я понял, Вы хотите сделать нечто подобное VCL?


Ну VCL не VCL, но что то похожее. У меня нет цели делать универсальную библиотеку визуальных компонентов. Просто нужно иметь под рукой необходимые мне компоненты. Что бы легче было потом создать приложение.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 3 ] 

Часовой пояс: UTC + 3 часа


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

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


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2024, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB