OberonCore https://forum.oberoncore.ru/ |
|
Вопрос... https://forum.oberoncore.ru/viewtopic.php?f=23&t=173 |
Страница 1 из 1 |
Автор: | Grabli [ Понедельник, 24 Апрель, 2006 08:45 ] |
Заголовок сообщения: | Вопрос... |
Есть четыре модуля. Они примерно так между собой связаны: Код: 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 ] |
Заголовок сообщения: | |
Цитата: PROCEDURE (VAR t: TComponent) SetParams (Params: SET), NEW, EXTENSIBLE;
Но как в каждой TForm его расширить? В смысле "как"? Синтаксически? Просто определяете его еще раз. Если у TComponent нет никакой реализации, то делайте не EXTENSIBLE, а ABSTRACT или EMPTY. Если реализация есть, то вообще говоря, лучше делать не EXTENSIBLE, а вводить дополнительный абстрактный или пустой SetParams2. SetParams отрабатывает и вызывает SetParams2. Таким образом тот, кто расширяет тип, уже не должен писать супервызов SetParam^, действия базового класса выполнятся в любом случае. Да, лучше не именуйте типы префиксом T, это дельфовский стиль. Посмотрите раздел документации Оформление кода. А вообще, как я понял, Вы хотите сделать нечто подобное VCL? |
Автор: | Grabli [ Понедельник, 24 Апрель, 2006 20:15 ] |
Заголовок сообщения: | |
Цитата: А вообще, как я понял, Вы хотите сделать нечто подобное VCL?
Ну VCL не VCL, но что то похожее. У меня нет цели делать универсальную библиотеку визуальных компонентов. Просто нужно иметь под рукой необходимые мне компоненты. Что бы легче было потом создать приложение. |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |