OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Пятница, 19 Апрель, 2024 12:11

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




Начать новую тему Ответить на тему  [ Сообщений: 17 ] 
Автор Сообщение
 Заголовок сообщения: Стандартные контролы
СообщениеДобавлено: Воскресенье, 18 Октябрь, 2009 12:44 

Зарегистрирован: Вторник, 30 Июнь, 2009 14:58
Сообщения: 1549
Всем привет.
Объясните кто-нибудь как перерисовываются стандартные контролы.
Что происходит когда среда вызывает следующее:
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 вызывается то?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Стандартные контролы
СообщениеДобавлено: Воскресенье, 18 Октябрь, 2009 13:58 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 10:37
Сообщения: 875
Откуда: Россия, Владивосток
У Вас же сказано:
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)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Стандартные контролы
СообщениеДобавлено: Воскресенье, 18 Октябрь, 2009 14:57 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
ilovb писал(а):
Всем привет.
... Views.Frame.Restore вообще абстракт.
Как это работает? ... где-ж этот API вызывается то?
Как знакомо :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Стандартные контролы
СообщениеДобавлено: Понедельник, 19 Октябрь, 2009 14:09 
Аватара пользователя

Зарегистрирован: Среда, 29 Март, 2006 12:09
Сообщения: 495
Info21 писал(а):
ilovb писал(а):
Всем привет.
... Views.Frame.Restore вообще абстракт.
Как это работает? ... где-ж этот API вызывается то?
Как знакомо :)

Вам знакомо, а я башку сломал, пока до меня дошло, где же, собственно, работающий код-то располагается. И почему он называется Restore, а не Paint. И еще много других почему. Я только вот вопросы на форум не задавал, а сам разбирался...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Стандартные контролы
СообщениеДобавлено: Понедельник, 19 Октябрь, 2009 14:24 

Зарегистрирован: Четверг, 17 Ноябрь, 2005 11:51
Сообщения: 2935
Откуда: г. Ярославль
Димыч писал(а):
Вам знакомо, а я башку сломал, пока до меня дошло, где же, собственно, работающий код-то располагается.

Вот, кстати, для меня в последнее время загадка - почему подобные вещи вызывают затруднения у пришёдших "со стороны"? Ведь абстрактный интерфейс - не тайна за семью печатями, а вполне известный в "майнстриме" паттерн. По идее, ключевое слово ABSTRACT должно сразу наводить на верную мысль, однако же такого не происходит. Почему, вот интересно.

Сразу оговорюсь, что не испытываю ни малейшей капли иронического чувства, тем более - что сам башку ломал тоже :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Стандартные контролы
СообщениеДобавлено: Понедельник, 19 Октябрь, 2009 14:39 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2449
Откуда: Россия, Томск
Иван Кузьмицкий писал(а):
Вот, кстати, для меня в последнее время загадка - почему подобные вещи вызывают затруднения у пришёдших "со стороны"? Ведь абстрактный интерфейс - не тайна за семью печатями, а вполне известный в "майнстриме" паттерн.
Проблема в том, что реализацию найти - труднее, чем могло бы быть. Это ведь вопрос конвенции, а где её прочитать? На виду должна бы быть.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Стандартные контролы
СообщениеДобавлено: Понедельник, 19 Октябрь, 2009 15:07 

Зарегистрирован: Четверг, 17 Ноябрь, 2005 11:51
Сообщения: 2935
Откуда: г. Ярославль
В общем случае - реализация может быть где угодно. Информацию про особенности реализации можно достать только из пакета самой реализации. И, да, конвенция, но опять же - в самой реализации.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Стандартные контролы
СообщениеДобавлено: Понедельник, 19 Октябрь, 2009 15:20 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 10:37
Сообщения: 875
Откуда: Россия, Владивосток
Иван Кузьмицкий писал(а):
В общем случае - реализация может быть где угодно.

Угу. Вот где лежит умолчальная реализация Views.ViewHook сможете сразу сказать? И почему именно там? Или откуда берётся конвертер на файлы .odc ...


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

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
Димыч писал(а):
Info21 писал(а):
ilovb писал(а):
Всем привет.
... Views.Frame.Restore вообще абстракт.
Как это работает? ... где-ж этот API вызывается то?
Как знакомо :)

Вам знакомо, а я башку сломал, пока до меня дошло, где же, собственно, работающий код-то располагается. И почему он называется Restore, а не Paint. И еще много других почему. Я только вот вопросы на форум не задавал, а сам разбирался...
Так и я ровно про это :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Стандартные контролы
СообщениеДобавлено: Понедельник, 19 Октябрь, 2009 16:05 

Зарегистрирован: Четверг, 17 Ноябрь, 2005 11:51
Сообщения: 2935
Откуда: г. Ярославль
Иван Горячев писал(а):
Иван Кузьмицкий писал(а):
В общем случае - реализация может быть где угодно.

Угу. Вот где лежит умолчальная реализация Views.ViewHook сможете сразу сказать? И почему именно там? Или откуда берётся конвертер на файлы .odc ...


Только с помощью поиска строчки "Views.SetViewHook" по содержимому файлов :) А документация к StdDialog выглядит удручающе: "This is a private module of BlackBox. Its existence is necessary for BlackBox to work correctly.".

Но, по-моему, вопрос ведь не про то, что StdDialog не документирован, и не про то, почему Host и почему Std, а про сам паттерн.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Стандартные контролы
СообщениеДобавлено: Понедельник, 19 Октябрь, 2009 16:12 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Александр Ильин писал(а):
Проблема в том, что реализацию найти - труднее, чем могло бы быть. Это ведь вопрос конвенции, а где её прочитать? На виду должна бы быть.


Новичкам - простой способ найти реализацию: открыть Info->Global Variables на абстрактный модуль и посмотреть, чьи разъёмы в него воткнуты.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Стандартные контролы
СообщениеДобавлено: Понедельник, 19 Октябрь, 2009 16:20 

Зарегистрирован: Четверг, 17 Ноябрь, 2005 11:51
Сообщения: 2935
Откуда: г. Ярославль
О-о-о, так вот для чего эти Global Variables! :)))


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Стандартные контролы
СообщениеДобавлено: Понедельник, 19 Октябрь, 2009 18:32 

Зарегистрирован: Понедельник, 30 Июль, 2007 10:53
Сообщения: 1538
Откуда: Беларусь, Минск
Думаю, такой ответ можно поместить в ЧаВо.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Стандартные контролы
СообщениеДобавлено: Вторник, 20 Октябрь, 2009 01:19 

Зарегистрирован: Среда, 04 Июль, 2007 16:43
Сообщения: 247
Оказывается все просто!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Стандартные контролы
СообщениеДобавлено: Вторник, 20 Октябрь, 2009 15:34 

Зарегистрирован: Вторник, 30 Июнь, 2009 14:58
Сообщения: 1549
Мдя... Никак не привыкну что в жизни все проще чем кажется.
Посмотрел внимательно на 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;


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Стандартные контролы
СообщениеДобавлено: Вторник, 20 Октябрь, 2009 15:42 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
IMPORT отпадает, во-первых, потому, что циклический импорт недопустим (неясно, в каком порядке загружать модули), во-вторых теряется смысл - не буду же я при подключении вместо HostCFrames, например, GtkCFrames, переписывать строку импорта, перекопилировать... Негоже.

Часто делается так - модуль-интерфейс затягивает реализацию по-умолчанию динамически, через Dialog.Call("Impl.Init") или Kernel.LoadMod.

Но что правда, то правда, в ББ нет места, где внятно был бы задан порядок загрузки и соединения модулей. Всё это втягивается по цепи импорта от HostMenus.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Стандартные контролы
СообщениеДобавлено: Вторник, 20 Октябрь, 2009 16:06 

Зарегистрирован: Четверг, 17 Ноябрь, 2005 11:51
Сообщения: 2935
Откуда: г. Ярославль
Илья Ермаков писал(а):
Но что правда, то правда, в ББ нет места, где внятно был бы задан порядок загрузки и соединения модулей.


Мне кажется, такое место отсутствует по причине неопределённости. Неизвестно, какая реализация потребуется в данный момент времени. Такая особенность компонентных систем.


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

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


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

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


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

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