OberonCore https://forum.oberoncore.ru/ |
|
Стандартные контролы https://forum.oberoncore.ru/viewtopic.php?f=24&t=1962 |
Страница 1 из 1 |
Автор: | ilovb [ Воскресенье, 18 Октябрь, 2009 12:44 ] |
Заголовок сообщения: | Стандартные контролы |
Всем привет. Объясните кто-нибудь как перерисовываются стандартные контролы. Что происходит когда среда вызывает следующее: PROCEDURE (c: VectorField) Restore (f: Views.Frame; l, t, r, b: INTEGER); BEGIN WITH f: StdCFrames.Frame DO f.Restore(l, t, r, b) END END Restore; Views.Frame.Restore вообще абстракт. Как это работает? Я так понимаю что это WinAPI. Так где-ж этот API вызывается то? |
Автор: | Иван Горячев [ Воскресенье, 18 Октябрь, 2009 13:58 ] |
Заголовок сообщения: | Re: Стандартные контролы |
У Вас же сказано: ilovb писал(а): WITH f: StdCFrames.Frame DO f.Restore(l, t, r, b) END Соответственно f здесь уже имеет тип StdCFrames.Frame (смотрите определение оператора WITH), и вызывается StdCFrames.Frame.Restore. Собственно говоря StdCFrames.Frame тоже абстрактный тип, но если посмотреть внимательно, можно увидеть в модуле StdCFrames вот такие строчки: Код: VAR dir-, stdDir-: Directory; ... PROCEDURE SetDir* (d: Directory); Значит где-то должен быть модуль, предоставляющий фабрику и реализующий все контролы. Такой модуль есть - это HostCFrames (из подсистемы Host, что логично). Вот там всё WinApi и спрятано. То есть в указанном примере вызывается на самом деле HostCFrames.VectorField.Restore (правда нет такого стандартного контрола - VectorField) |
Автор: | Info21 [ Воскресенье, 18 Октябрь, 2009 14:57 ] |
Заголовок сообщения: | Re: Стандартные контролы |
ilovb писал(а): Всем привет. Как знакомо ... Views.Frame.Restore вообще абстракт. Как это работает? ... где-ж этот API вызывается то? ![]() |
Автор: | Димыч [ Понедельник, 19 Октябрь, 2009 14:09 ] |
Заголовок сообщения: | Re: Стандартные контролы |
Info21 писал(а): ilovb писал(а): Всем привет. Как знакомо ... Views.Frame.Restore вообще абстракт. Как это работает? ... где-ж этот API вызывается то? ![]() Вам знакомо, а я башку сломал, пока до меня дошло, где же, собственно, работающий код-то располагается. И почему он называется Restore, а не Paint. И еще много других почему. Я только вот вопросы на форум не задавал, а сам разбирался... |
Автор: | Иван Кузьмицкий [ Понедельник, 19 Октябрь, 2009 14:24 ] |
Заголовок сообщения: | Re: Стандартные контролы |
Димыч писал(а): Вам знакомо, а я башку сломал, пока до меня дошло, где же, собственно, работающий код-то располагается. Вот, кстати, для меня в последнее время загадка - почему подобные вещи вызывают затруднения у пришёдших "со стороны"? Ведь абстрактный интерфейс - не тайна за семью печатями, а вполне известный в "майнстриме" паттерн. По идее, ключевое слово ABSTRACT должно сразу наводить на верную мысль, однако же такого не происходит. Почему, вот интересно. Сразу оговорюсь, что не испытываю ни малейшей капли иронического чувства, тем более - что сам башку ломал тоже ![]() |
Автор: | Александр Ильин [ Понедельник, 19 Октябрь, 2009 14:39 ] |
Заголовок сообщения: | Re: Стандартные контролы |
Иван Кузьмицкий писал(а): Вот, кстати, для меня в последнее время загадка - почему подобные вещи вызывают затруднения у пришёдших "со стороны"? Ведь абстрактный интерфейс - не тайна за семью печатями, а вполне известный в "майнстриме" паттерн. Проблема в том, что реализацию найти - труднее, чем могло бы быть. Это ведь вопрос конвенции, а где её прочитать? На виду должна бы быть.
|
Автор: | Иван Кузьмицкий [ Понедельник, 19 Октябрь, 2009 15:07 ] |
Заголовок сообщения: | Re: Стандартные контролы |
В общем случае - реализация может быть где угодно. Информацию про особенности реализации можно достать только из пакета самой реализации. И, да, конвенция, но опять же - в самой реализации. |
Автор: | Иван Горячев [ Понедельник, 19 Октябрь, 2009 15:20 ] |
Заголовок сообщения: | Re: Стандартные контролы |
Иван Кузьмицкий писал(а): В общем случае - реализация может быть где угодно. Угу. Вот где лежит умолчальная реализация Views.ViewHook сможете сразу сказать? И почему именно там? Или откуда берётся конвертер на файлы .odc ... |
Автор: | Info21 [ Понедельник, 19 Октябрь, 2009 15:24 ] |
Заголовок сообщения: | Re: Стандартные контролы |
Димыч писал(а): Info21 писал(а): ilovb писал(а): Всем привет. Как знакомо ... Views.Frame.Restore вообще абстракт. Как это работает? ... где-ж этот API вызывается то? ![]() Вам знакомо, а я башку сломал, пока до меня дошло, где же, собственно, работающий код-то располагается. И почему он называется Restore, а не Paint. И еще много других почему. Я только вот вопросы на форум не задавал, а сам разбирался... ![]() |
Автор: | Иван Кузьмицкий [ Понедельник, 19 Октябрь, 2009 16:05 ] |
Заголовок сообщения: | Re: Стандартные контролы |
Иван Горячев писал(а): Иван Кузьмицкий писал(а): В общем случае - реализация может быть где угодно. Угу. Вот где лежит умолчальная реализация Views.ViewHook сможете сразу сказать? И почему именно там? Или откуда берётся конвертер на файлы .odc ... Только с помощью поиска строчки "Views.SetViewHook" по содержимому файлов ![]() Но, по-моему, вопрос ведь не про то, что StdDialog не документирован, и не про то, почему Host и почему Std, а про сам паттерн. |
Автор: | Илья Ермаков [ Понедельник, 19 Октябрь, 2009 16:12 ] |
Заголовок сообщения: | Re: Стандартные контролы |
Александр Ильин писал(а): Проблема в том, что реализацию найти - труднее, чем могло бы быть. Это ведь вопрос конвенции, а где её прочитать? На виду должна бы быть. Новичкам - простой способ найти реализацию: открыть Info->Global Variables на абстрактный модуль и посмотреть, чьи разъёмы в него воткнуты. |
Автор: | Иван Кузьмицкий [ Понедельник, 19 Октябрь, 2009 16:20 ] |
Заголовок сообщения: | Re: Стандартные контролы |
О-о-о, так вот для чего эти Global Variables! ![]() |
Автор: | Valery Solovey [ Понедельник, 19 Октябрь, 2009 18:32 ] |
Заголовок сообщения: | Re: Стандартные контролы |
Думаю, такой ответ можно поместить в ЧаВо. |
Автор: | QWERTYProgrammer [ Вторник, 20 Октябрь, 2009 01:19 ] |
Заголовок сообщения: | Re: Стандартные контролы |
Оказывается все просто! |
Автор: | ilovb [ Вторник, 20 Октябрь, 2009 15:34 ] |
Заголовок сообщения: | Re: Стандартные контролы |
Мдя... Никак не привыкну что в жизни все проще чем кажется. Посмотрел внимательно на HostCFrames и ... MODULE HostCFrames; ... PROCEDURE Install; VAR dir: Directory; BEGIN NEW(dir); StdCFrames.SetDir(dir) END Install; ... PROCEDURE Init; VAR v: INTEGER; BEGIN StdCFrames.setFocus := TRUE; SetDefFonts; scW := USER32.GetSystemMetrics(0); (* screen width *) scH := USER32.GetSystemMetrics(1); (* screen height *) instance := KERNEL32.GetModuleHandleA(NIL); v := KERNEL32.GetVersion(); osVersion := v MOD 256 * 100 + v DIV 256 MOD 256; InitClass; InitNationalInfo; InitColors; Install END Init; BEGIN Init END HostCFrames. Это каким третьим глазом, я должен был догадаться что реализация существует уже после загрузки BlackBox. Я ведь сначала искал реализацию и фабрики в том модуле, потом в импортированных. Не нашел, и решил что мистика... Вообще по хорошему это должно явно делаться по моему. Прямой: HostCFrames.Init Или раз уж там инициализация при загрузке: IMPORT HostCFrames; |
Автор: | Илья Ермаков [ Вторник, 20 Октябрь, 2009 15:42 ] |
Заголовок сообщения: | Re: Стандартные контролы |
IMPORT отпадает, во-первых, потому, что циклический импорт недопустим (неясно, в каком порядке загружать модули), во-вторых теряется смысл - не буду же я при подключении вместо HostCFrames, например, GtkCFrames, переписывать строку импорта, перекопилировать... Негоже. Часто делается так - модуль-интерфейс затягивает реализацию по-умолчанию динамически, через Dialog.Call("Impl.Init") или Kernel.LoadMod. Но что правда, то правда, в ББ нет места, где внятно был бы задан порядок загрузки и соединения модулей. Всё это втягивается по цепи импорта от HostMenus. |
Автор: | Иван Кузьмицкий [ Вторник, 20 Октябрь, 2009 16:06 ] |
Заголовок сообщения: | Re: Стандартные контролы |
Илья Ермаков писал(а): Но что правда, то правда, в ББ нет места, где внятно был бы задан порядок загрузки и соединения модулей. Мне кажется, такое место отсутствует по причине неопределённости. Неизвестно, какая реализация потребуется в данный момент времени. Такая особенность компонентных систем. |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |