OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Вторник, 16 Апрель, 2024 22:57

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




Начать новую тему Ответить на тему  [ Сообщений: 25 ]  На страницу 1, 2  След.
Автор Сообщение
СообщениеДобавлено: Среда, 14 Октябрь, 2009 23:13 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
Проблемка такая:

определяется вьюшка так, чтобы растягиваться по окну (horFitToWin := TRUE ...).
при каждой отрисовке запоминает в своих полях свой текущий размер (берет через v.context.GetSize).
на SizePref отвечает этим размером.
при сохранении на диск сохраняет этот размер, а при считывании -- восстанавливает значения.

Теперь:
создаем такую вьюшку, задавая ей размер некий размер по умолчанию (SIC: этот размер и будет проблемой),
и открываем в отдельном окошке.
растягиваем мышкой окно. вьюшка адаптируется как приказано.
сохраняем вьюшку (File, Save), закрываем.

Открываем снова -- и видим странное дело (отслеживая в Log сообщения):
сначала ББ просит SizePref, вьюшка отвечает правильными -- считанными с диска размерами (это дважды).
Но затем идет вызов Restore, и ББ дает контекст, в котором размеры вьюшки -- те самые изначальные, до всяких растягиваний окна.

Нетрудно понять, что ББ не может заглянуть внутрь модуля и отгадать, где там хранятся эти изначальные размеры -- но можно и доказать, что они считываются с диска:
достаточно после сохранения и закрытия вьюшки изменить эти начальные размеры в определяющем вьюшку модуле, скомпилировать его, перегрузить для надежности весь ББ, и открыть вьюшку.

То есть: система (ББ+виндуса) помнит и хранит для вьюшки самый ее первый размер.
И при записи (обычные системные команды) записывает его.
А при открывании вьюшки -- откуда-то выцарапывает их и пытается навязать их опять.

Как обойти эту хрень я знаю. Даже два способа, причем даже и не сложно.

Но если кто-то может мне объяснить эту, повторю, хрень -- в каких дебрях застревают самые первоначальные размеры и кто их вытаскивает на свет божий, то заранее спасибо.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 15 Октябрь, 2009 01:08 

Зарегистрирован: Пятница, 13 Март, 2009 16:36
Сообщения: 987
Откуда: Казань
Возможно, что View получает размеры по умолчанию при иницализации модуля.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 15 Октябрь, 2009 10:24 

Зарегистрирован: Понедельник, 28 Ноябрь, 2005 10:28
Сообщения: 1428
Вьюшки хранятся и отображаются не сами по себе, а внутри контейнера, в простейшем случае - документа. Вот размеры документа и сохраняются/восстанавливаютя.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 15 Октябрь, 2009 11:48 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
Trurl писал(а):
Вьюшки хранятся и отображаются не сами по себе, а внутри контейнера, в простейшем случае - документа. Вот размеры документа и сохраняются/восстанавливаютя.
То есть Вы хотите сказать, что когда я мышкой поресайзил окно, то документ этого не заметил?
То есть на диск сохранил нересайзенные значения?
Тогда я склонен считать это багом.

Но надо посмотреть, спасибо за направление.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 15 Октябрь, 2009 11:49 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
Rifat писал(а):
Возможно, что View получает размеры по умолчанию при иницализации модуля.
Невозможность этого была доказана.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 15 Октябрь, 2009 15:16 

Зарегистрирован: Понедельник, 28 Ноябрь, 2005 10:28
Сообщения: 1428
Я уже жаловался, что работа с документами абсолютно недокументирована.

Info21 писал(а):
То есть Вы хотите сказать, что когда я мышкой поресайзил окно, то документ этого не заметил?
То есть на диск сохранил нересайзенные значения?

Конечно. Окно же может быть не единственным.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Чтобы стало понятнее.
СообщениеДобавлено: Четверг, 15 Октябрь, 2009 15:39 

Зарегистрирован: Понедельник, 28 Ноябрь, 2005 10:28
Сообщения: 1428
Открываем окно. Выполняем "Tools"/ "Document Size...". Устанавливаем размеры документа "Fixed". Нажимаем ctrl+spase. Ресайзим окно мышкой и наблюдаем, что размеры документа не меняются. Но их можно изменить, подвигав темные квадратики. При сохранении документа именно эти размеры и запишутся.
Теперь установим размеры документа "Window Width"x "Window Heigh". Повторяем эксперимент с мышкой. Видим, как документ подгоняется под окно, а квадратики стали белыми. Но теперь размеры документа не сохраняются.


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

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
Trurl писал(а):
Info21 писал(а):
То есть Вы хотите сказать, что когда я мышкой поресайзил окно, то документ этого не заметил?

Конечно. Окно же может быть не единственным.
Не аргумент: есть главное окно, оно единственное.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 15 Октябрь, 2009 21:40 

Зарегистрирован: Понедельник, 28 Ноябрь, 2005 10:28
Сообщения: 1428
А ещё есть принтеры.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 16 Октябрь, 2009 00:49 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 10:37
Сообщения: 875
Откуда: Россия, Владивосток
Info21 писал(а):
Не аргумент: есть главное окно, оно единственное.

Как это? Главный - документ, а все его окна - просто отображения, вполне между собой равные. Тот факт, что одно из них было открыто раньше - просто случайность. Или у моделей есть "главная" вьюшка и второстепенные?

PS. Это я к тому, что в общем случае документ не может ориентироваться на параметры какого либо конкретного окна, даже если это окно одно. Получится неоправданное усложнение


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 16 Октябрь, 2009 07:53 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
Trurl писал(а):
А ещё есть принтеры.
С принтерами как раз проблемы нет:

Ports.IsPrinterPort (p: Port): BOOLEAN;

Иван Горячев писал(а):
Info21 писал(а):
Не аргумент: есть главное окно, оно единственное.

Как это? Главный - документ, а все его окна - просто отображения, вполне между собой равные. Тот факт, что одно из них было открыто раньше - просто случайность. Или у моделей есть "главная" вьюшка и второстепенные?

PS. Это я к тому, что в общем случае документ не может ориентироваться на параметры какого либо конкретного окна, даже если это окно одно. Получится неоправданное усложнение
Вы (или авторы ББ :)) немножко запутали.

Мне нужна простая как репа вещь: у вьюшки есть одно -- одно! см. документацию ББ -- главное окно, и она хочет определить размер этого окна. Что она с ним будет делать -- ее (моё) дело.
В данном случае я хочу потом открыть ее снова точно в той же позиции (я взял код из Desktop, но там всё сложно и низкоуровнево).

Повторю: понятие главного окна -- концептуальное в ББ. И оно никак не отражено в API.


Последний раз редактировалось Info21 Пятница, 16 Октябрь, 2009 08:42, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 16 Октябрь, 2009 08:42 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
Плюс ко всему: речь о вьюшке без модели.
Тут и вторичные окна не открываются.
Так что вообще проблемы с множественностью окон нет.

Вьюшка без модели -- одно окно, нужно сохранять ее размер.

Это недодумка в ББ.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 16 Октябрь, 2009 08:55 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 10:37
Сообщения: 875
Откуда: Россия, Владивосток
Info21 писал(а):
Мне нужна простая как репа вещь: у вьюшки есть одно -- одно! см. документацию ББ -- главное окно, и она хочет определить размер этого окна. Что она с ним будет делать -- ее (моё) дело.
В данном случае я хочу потом открыть ее снова точно в той же позиции (я взял код из Desktop, но там всё сложно и низкоуровнево).

Повторю: понятие главного окна -- концептуальное в ББ. И оно никак не отражено в API.


Это всё понятно. Но! Понятие "окно" в ББ ниразу не концептуальное. Концептуальное - документ, и, соответственно, документоориентированный интерфейс. Отсюда и отсутствие нормальных "окон" в API.

Цитата:
Плюс ко всему: речь о вьюшке без модели.

Если вьюшка не имеет модели - это не значит что модели нет вообще. Модель есть у документа, и окно суть - отображение документа.

Проблема в том, что ББ вынужден работать в абсолютно неродной для себя среде

PS. Посмотрел в документации. Действительно, там есть понятие "основное окно документа". В одном абзаце упоминается. Но оно введено исключительно как соглашение, для какого-то (сиюминутного) удобства разработчиков. Концепции основного окна нет!


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 16 Октябрь, 2009 13:21 

Зарегистрирован: Понедельник, 28 Ноябрь, 2005 10:28
Сообщения: 1428
Info21 писал(а):
С принтерами как раз проблемы нет:
у вьюшки есть одно -- одно! см. документацию ББ -- главное окно, и она хочет определить размер этого окна.

У вьюшки нет ни одного окна.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 16 Октябрь, 2009 13:29 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
Иван Горячев писал(а):
Концепции основного окна нет!
Есть. Откройте любой текст и нажмите F2.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 16 Октябрь, 2009 13:54 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 10:37
Сообщения: 875
Откуда: Россия, Владивосток
Info21 писал(а):
Есть. Откройте любой текст и нажмите F2.

И что? Это показывает лишь то, что окна имеются в нижележащей ОС. А в ББ концепции окон нет! Равно как и меню, и горячих клавиш. Всё это зарыто в подсистеме Host или во вспомогательных (а потому недокументированных) модулях. Это конечно плохо, но так уж сложилось


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 16 Октябрь, 2009 21:35 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
Иван Горячев писал(а):
Info21 писал(а):
Есть. Откройте любой текст и нажмите F2.

И что? Это показывает лишь то, что окна имеются в нижележащей ОС. А в ББ концепции окон нет! Равно как и меню, и горячих клавиш. Всё это зарыто ...
Уф.

Да мне нужна не философия, а простая вещь!

Вьюшка без модели. Второе окно у нее не открывается хоть тресни. Одно оно! Оно же и размер документа. Я с ним работаю (графики там поудобней растягиваю-сдвигаю то-да-сё), устрою поудобней -- и хочу в таком виде чтобы и назавтра оно было, и на послезавтра.

На кой ляд мне сохранять какой-то случайный дефолтный начальный размер и потом всегда его восстанавливать?

Вот и вся концепция :)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 17 Октябрь, 2009 01:52 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 10:37
Сообщения: 875
Откуда: Россия, Владивосток
Вы же не требуете наличия составных документов от IDE Delphi. Нету - значит нету. Нужно делать самому. Либо частное сиюминутное решение, либо общее. Только и всего.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 17 Октябрь, 2009 06:58 
Администратор

Зарегистрирован: Вторник, 15 Ноябрь, 2005 01:14
Сообщения: 4695
Откуда: Россия, Орёл
Иван Горячев писал(а):
Info21 писал(а):
Есть. Откройте любой текст и нажмите F2.

И что? Это показывает лишь то, что окна имеются в нижележащей ОС. А в ББ концепции окон нет! Равно как и меню, и горячих клавиш. Всё это зарыто в подсистеме Host или во вспомогательных (а потому недокументированных) модулях. Это конечно плохо, но так уж сложилось

А правы оба на самом деле. :)
Цитата:
Only one of the two views is externalized when the document is saved in a file. To avoid schizophreny, one window is clearly distinguished as the main window, while all others are so-called subwindows. If you close a subwindow, only this window is closed. But if you close the main window, it and all its subwindows are closed simultaneously.

Только с точки зрения ББ последняя, верхняя абстракция до ОС - фрейм. Окон действительно нет.
И Трурль прав. У отображения окна нет. Его (отображение) можно показать через фрейм.
И самое смешное, второй фрейм (под второе окно) не сделаешь, т.к. модели нет, к которой можно второе отображение подключить. :)
Забавно.

P.S. Вот она, кстати, трурлевская гуюшка! Вьюшка без модели! :mrgreen:
P.P.S. А ведь технически, ничего не нарушая (не нарушая фреймворка), можно спокойно модернизировать связку ББ - ОС...хм... :roll:


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 17 Октябрь, 2009 07:13 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Уточню: под второе окно делается не просто фрейм, а копия вьюшки. Два фрейма на одну вьюшку - это ситуация с вложенными отображениями, если родительское открыто в двух окнах.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 25 ]  На страницу 1, 2  След.

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


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

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


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

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