OberonCore https://forum.oberoncore.ru/ |
|
сделать текущий размер вьюшек персистентным https://forum.oberoncore.ru/viewtopic.php?f=24&t=1956 |
Страница 1 из 2 |
Автор: | Info21 [ Среда, 14 Октябрь, 2009 23:13 ] |
Заголовок сообщения: | сделать текущий размер вьюшек персистентным |
Проблемка такая: определяется вьюшка так, чтобы растягиваться по окну (horFitToWin := TRUE ...). при каждой отрисовке запоминает в своих полях свой текущий размер (берет через v.context.GetSize). на SizePref отвечает этим размером. при сохранении на диск сохраняет этот размер, а при считывании -- восстанавливает значения. Теперь: создаем такую вьюшку, задавая ей размер некий размер по умолчанию (SIC: этот размер и будет проблемой), и открываем в отдельном окошке. растягиваем мышкой окно. вьюшка адаптируется как приказано. сохраняем вьюшку (File, Save), закрываем. Открываем снова -- и видим странное дело (отслеживая в Log сообщения): сначала ББ просит SizePref, вьюшка отвечает правильными -- считанными с диска размерами (это дважды). Но затем идет вызов Restore, и ББ дает контекст, в котором размеры вьюшки -- те самые изначальные, до всяких растягиваний окна. Нетрудно понять, что ББ не может заглянуть внутрь модуля и отгадать, где там хранятся эти изначальные размеры -- но можно и доказать, что они считываются с диска: достаточно после сохранения и закрытия вьюшки изменить эти начальные размеры в определяющем вьюшку модуле, скомпилировать его, перегрузить для надежности весь ББ, и открыть вьюшку. То есть: система (ББ+виндуса) помнит и хранит для вьюшки самый ее первый размер. И при записи (обычные системные команды) записывает его. А при открывании вьюшки -- откуда-то выцарапывает их и пытается навязать их опять. Как обойти эту хрень я знаю. Даже два способа, причем даже и не сложно. Но если кто-то может мне объяснить эту, повторю, хрень -- в каких дебрях застревают самые первоначальные размеры и кто их вытаскивает на свет божий, то заранее спасибо. |
Автор: | Rifat [ Четверг, 15 Октябрь, 2009 01:08 ] |
Заголовок сообщения: | Re: сделать текущий размер вьюшек персистентным |
Возможно, что View получает размеры по умолчанию при иницализации модуля. |
Автор: | Trurl [ Четверг, 15 Октябрь, 2009 10:24 ] |
Заголовок сообщения: | Re: сделать текущий размер вьюшек персистентным |
Вьюшки хранятся и отображаются не сами по себе, а внутри контейнера, в простейшем случае - документа. Вот размеры документа и сохраняются/восстанавливаютя. |
Автор: | Info21 [ Четверг, 15 Октябрь, 2009 11:48 ] |
Заголовок сообщения: | Re: сделать текущий размер вьюшек персистентным |
Trurl писал(а): Вьюшки хранятся и отображаются не сами по себе, а внутри контейнера, в простейшем случае - документа. Вот размеры документа и сохраняются/восстанавливаютя. То есть Вы хотите сказать, что когда я мышкой поресайзил окно, то документ этого не заметил? То есть на диск сохранил нересайзенные значения? Тогда я склонен считать это багом. Но надо посмотреть, спасибо за направление. |
Автор: | Info21 [ Четверг, 15 Октябрь, 2009 11:49 ] |
Заголовок сообщения: | Re: сделать текущий размер вьюшек персистентным |
Rifat писал(а): Возможно, что View получает размеры по умолчанию при иницализации модуля. Невозможность этого была доказана.
|
Автор: | Trurl [ Четверг, 15 Октябрь, 2009 15:16 ] |
Заголовок сообщения: | Re: сделать текущий размер вьюшек персистентным |
Я уже жаловался, что работа с документами абсолютно недокументирована. Info21 писал(а): То есть Вы хотите сказать, что когда я мышкой поресайзил окно, то документ этого не заметил? То есть на диск сохранил нересайзенные значения? Конечно. Окно же может быть не единственным. |
Автор: | Trurl [ Четверг, 15 Октябрь, 2009 15:39 ] |
Заголовок сообщения: | Чтобы стало понятнее. |
Открываем окно. Выполняем "Tools"/ "Document Size...". Устанавливаем размеры документа "Fixed". Нажимаем ctrl+spase. Ресайзим окно мышкой и наблюдаем, что размеры документа не меняются. Но их можно изменить, подвигав темные квадратики. При сохранении документа именно эти размеры и запишутся. Теперь установим размеры документа "Window Width"x "Window Heigh". Повторяем эксперимент с мышкой. Видим, как документ подгоняется под окно, а квадратики стали белыми. Но теперь размеры документа не сохраняются. |
Автор: | Info21 [ Четверг, 15 Октябрь, 2009 20:02 ] |
Заголовок сообщения: | Re: сделать текущий размер вьюшек персистентным |
Trurl писал(а): Info21 писал(а): То есть Вы хотите сказать, что когда я мышкой поресайзил окно, то документ этого не заметил? Конечно. Окно же может быть не единственным. |
Автор: | Trurl [ Четверг, 15 Октябрь, 2009 21:40 ] |
Заголовок сообщения: | Re: сделать текущий размер вьюшек персистентным |
А ещё есть принтеры. |
Автор: | Иван Горячев [ Пятница, 16 Октябрь, 2009 00:49 ] |
Заголовок сообщения: | Re: сделать текущий размер вьюшек персистентным |
Info21 писал(а): Не аргумент: есть главное окно, оно единственное. Как это? Главный - документ, а все его окна - просто отображения, вполне между собой равные. Тот факт, что одно из них было открыто раньше - просто случайность. Или у моделей есть "главная" вьюшка и второстепенные? PS. Это я к тому, что в общем случае документ не может ориентироваться на параметры какого либо конкретного окна, даже если это окно одно. Получится неоправданное усложнение |
Автор: | Info21 [ Пятница, 16 Октябрь, 2009 07:53 ] |
Заголовок сообщения: | Re: сделать текущий размер вьюшек персистентным |
Trurl писал(а): А ещё есть принтеры. С принтерами как раз проблемы нет: Ports.IsPrinterPort (p: Port): BOOLEAN; Иван Горячев писал(а): Info21 писал(а): Не аргумент: есть главное окно, оно единственное. Как это? Главный - документ, а все его окна - просто отображения, вполне между собой равные. Тот факт, что одно из них было открыто раньше - просто случайность. Или у моделей есть "главная" вьюшка и второстепенные? PS. Это я к тому, что в общем случае документ не может ориентироваться на параметры какого либо конкретного окна, даже если это окно одно. Получится неоправданное усложнение ![]() Мне нужна простая как репа вещь: у вьюшки есть одно -- одно! см. документацию ББ -- главное окно, и она хочет определить размер этого окна. Что она с ним будет делать -- ее (моё) дело. В данном случае я хочу потом открыть ее снова точно в той же позиции (я взял код из Desktop, но там всё сложно и низкоуровнево). Повторю: понятие главного окна -- концептуальное в ББ. И оно никак не отражено в API. |
Автор: | Info21 [ Пятница, 16 Октябрь, 2009 08:42 ] |
Заголовок сообщения: | Re: сделать текущий размер вьюшек персистентным |
Плюс ко всему: речь о вьюшке без модели. Тут и вторичные окна не открываются. Так что вообще проблемы с множественностью окон нет. Вьюшка без модели -- одно окно, нужно сохранять ее размер. Это недодумка в ББ. |
Автор: | Иван Горячев [ Пятница, 16 Октябрь, 2009 08:55 ] |
Заголовок сообщения: | Re: сделать текущий размер вьюшек персистентным |
Info21 писал(а): Мне нужна простая как репа вещь: у вьюшки есть одно -- одно! см. документацию ББ -- главное окно, и она хочет определить размер этого окна. Что она с ним будет делать -- ее (моё) дело. В данном случае я хочу потом открыть ее снова точно в той же позиции (я взял код из Desktop, но там всё сложно и низкоуровнево). Повторю: понятие главного окна -- концептуальное в ББ. И оно никак не отражено в API. Это всё понятно. Но! Понятие "окно" в ББ ниразу не концептуальное. Концептуальное - документ, и, соответственно, документоориентированный интерфейс. Отсюда и отсутствие нормальных "окон" в API. Цитата: Плюс ко всему: речь о вьюшке без модели. Если вьюшка не имеет модели - это не значит что модели нет вообще. Модель есть у документа, и окно суть - отображение документа. Проблема в том, что ББ вынужден работать в абсолютно неродной для себя среде PS. Посмотрел в документации. Действительно, там есть понятие "основное окно документа". В одном абзаце упоминается. Но оно введено исключительно как соглашение, для какого-то (сиюминутного) удобства разработчиков. Концепции основного окна нет! |
Автор: | Trurl [ Пятница, 16 Октябрь, 2009 13:21 ] |
Заголовок сообщения: | Re: сделать текущий размер вьюшек персистентным |
Info21 писал(а): С принтерами как раз проблемы нет: у вьюшки есть одно -- одно! см. документацию ББ -- главное окно, и она хочет определить размер этого окна. У вьюшки нет ни одного окна. |
Автор: | Info21 [ Пятница, 16 Октябрь, 2009 13:29 ] |
Заголовок сообщения: | Re: сделать текущий размер вьюшек персистентным |
Иван Горячев писал(а): Концепции основного окна нет! Есть. Откройте любой текст и нажмите F2.
|
Автор: | Иван Горячев [ Пятница, 16 Октябрь, 2009 13:54 ] |
Заголовок сообщения: | Re: сделать текущий размер вьюшек персистентным |
Info21 писал(а): Есть. Откройте любой текст и нажмите F2. И что? Это показывает лишь то, что окна имеются в нижележащей ОС. А в ББ концепции окон нет! Равно как и меню, и горячих клавиш. Всё это зарыто в подсистеме Host или во вспомогательных (а потому недокументированных) модулях. Это конечно плохо, но так уж сложилось |
Автор: | Info21 [ Пятница, 16 Октябрь, 2009 21:35 ] |
Заголовок сообщения: | Re: сделать текущий размер вьюшек персистентным |
Иван Горячев писал(а): Info21 писал(а): Есть. Откройте любой текст и нажмите F2. И что? Это показывает лишь то, что окна имеются в нижележащей ОС. А в ББ концепции окон нет! Равно как и меню, и горячих клавиш. Всё это зарыто ... Да мне нужна не философия, а простая вещь! Вьюшка без модели. Второе окно у нее не открывается хоть тресни. Одно оно! Оно же и размер документа. Я с ним работаю (графики там поудобней растягиваю-сдвигаю то-да-сё), устрою поудобней -- и хочу в таком виде чтобы и назавтра оно было, и на послезавтра. На кой ляд мне сохранять какой-то случайный дефолтный начальный размер и потом всегда его восстанавливать? Вот и вся концепция ![]() |
Автор: | Иван Горячев [ Суббота, 17 Октябрь, 2009 01:52 ] |
Заголовок сообщения: | Re: сделать текущий размер вьюшек персистентным |
Вы же не требуете наличия составных документов от IDE Delphi. Нету - значит нету. Нужно делать самому. Либо частное сиюминутное решение, либо общее. Только и всего. |
Автор: | Борис Рюмшин [ Суббота, 17 Октябрь, 2009 06:58 ] |
Заголовок сообщения: | Re: сделать текущий размер вьюшек персистентным |
Иван Горячев писал(а): 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. Вот она, кстати, трурлевская гуюшка! Вьюшка без модели! ![]() P.P.S. А ведь технически, ничего не нарушая (не нарушая фреймворка), можно спокойно модернизировать связку ББ - ОС...хм... ![]() |
Автор: | Илья Ермаков [ Суббота, 17 Октябрь, 2009 07:13 ] |
Заголовок сообщения: | Re: сделать текущий размер вьюшек персистентным |
Уточню: под второе окно делается не просто фрейм, а копия вьюшки. Два фрейма на одну вьюшку - это ситуация с вложенными отображениями, если родительское открыто в двух окнах. |
Страница 1 из 2 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |