OberonCore
https://forum.oberoncore.ru/

Как правильно изменить размеры вьюшки-окна после ее создания
https://forum.oberoncore.ru/viewtopic.php?f=24&t=2152
Страница 1 из 1

Автор:  Виталий [ Четверг, 03 Декабрь, 2009 16:00 ]
Заголовок сообщения:  Как правильно изменить размеры вьюшки-окна после ее создания

Господа, доброго всем.
Встал вопрос, как после открытия вьюшки менять ее размеры, допустим создаю так:
Код:
PROCEDURE prepare;
BEGIN
 m:=TextModels.dir.New();
 txt.ConnectTo(m);
 v:=TextViews.dir.New(m);
 Views.OpenAux(v,"Результат");
END prepare;

И вот окошко которое открывается слишком большое.
В Делфи Width и Heigth а как в ББ?

Автор:  Илья Ермаков [ Четверг, 03 Декабрь, 2009 16:04 ]
Заголовок сообщения:  Re: Как правильно изменить размеры вьюшки-окна после ее создания

Обычно v.context.SetSize(w, h)

Для корневой вьюшки с ходу не уверен (хотя она не корневая, а вложенная в невидимый Documents.View).

Автор:  Виталий [ Четверг, 03 Декабрь, 2009 16:36 ]
Заголовок сообщения:  Re: Как правильно изменить размеры вьюшки-окна после ее создания

SetSize пробовал. И используя костанты миллиметров из Рorts пробовал...
Ничего не происходит, окно открывается попрежнему с таким же размером.

Автор:  Илья Ермаков [ Четверг, 03 Декабрь, 2009 16:45 ]
Заголовок сообщения:  Re: Как правильно изменить размеры вьюшки-окна после ее создания

Тогда надо на вьюшку вручную наворачивать Documents.View и открывать уже его, настраивая у него размер (как через меню Toolds-Document Size).

А то среда сама оборачивает Вашу вьюшку с размерами документа по-умолчанию.

Автор:  Виталий [ Четверг, 03 Декабрь, 2009 16:55 ]
Заголовок сообщения:  Re: Как правильно изменить размеры вьюшки-окна после ее создания

Ок. Понял. Спасибо.

Автор:  Евгений Темиргалеев [ Четверг, 03 Декабрь, 2009 17:06 ]
Заголовок сообщения:  Re: Как правильно изменить размеры вьюшки-окна после ее создания

Размер окна зависит от размера документа, который контейнер для корневого отображения. Т.что context.SetSize по смыслу не подходит.
Models docu писал(а):
PROCEDURE (c: Context) SetSize (w, h: INTEGER)
NEW, EMPTY
Просит контейнер адаптировать размер отображения c к заданным ширине и высоте. Контейнер может выполнять или не выполнять этот запрос.

Автор:  Евгений Темиргалеев [ Четверг, 03 Декабрь, 2009 17:29 ]
Заголовок сообщения:  Re: Как правильно изменить размеры вьюшки-окна после ее создания

Помню что подобное вроде делал... Нашел - может пригодится
Код:
   PROCEDURE InitPage*;
      CONST
         mm = Ports.mm;
      VAR
         v: V.View; c: Models.Context; d: Documents.Document; dm: Models.Model;
         w, h, l, t, r, b: INTEGER; decorate: BOOLEAN;
   BEGIN
      v := V.Focus();
      IF v # NIL THEN
         c := v.context; ASSERT(c IS Documents.Context, 20);
         d := c(Documents.Context).ThisDoc(); dm := d.ThisView().ThisModel();
         d.PollPage(w, h, l, t, r, b, decorate);
         Models.BeginModification(Models.invisible, dm);
         d.SetPage(w, h, 10 * mm, 15 * mm, w - 10 * mm, h - 10 * mm, Documents.decorate);
         Models.EndModification(Models.invisible, dm)
      END
   END InitPage;

Автор:  Иван Горячев [ Пятница, 04 Декабрь, 2009 02:18 ]
Заголовок сообщения:  Re: Как правильно изменить размеры вьюшки-окна после ее создания

Ну тут два варианта.

Если требуется изменить именно размер корневой вьюшки (читай документа) через некоторое время после её создания, то либо как указал Евгений, либо смотрите StdCmds.SetLayout/InitLayoutDialog

Если требуется изменить только размер окна - есть Windows.Window.SetSize:
Код:
MODULE MyWinsize;

IMPORT
   Windows;

PROCEDURE Do*;
VAR w : Windows.Window;
BEGIN
   w := Windows.dir.First();
   IF w # NIL THEN
      w.SetSize(200, 200)
   END
END Do;

END MyWinsize.


А вообще держите:

Вложения:
Bbt-windows part.zip [4.21 КБ]
Скачиваний: 558

Автор:  Виталий [ Пятница, 04 Декабрь, 2009 08:07 ]
Заголовок сообщения:  Re: Как правильно изменить размеры вьюшки-окна после ее создания

О-о-о спасибо. Модуль Windows подходит.
А имея переменную View или Model можно получить Window, в которой вьюшка отображается. т.е. обратно идти от вьюхи к родительскому окну?

Автор:  Иван Горячев [ Пятница, 04 Декабрь, 2009 08:27 ]
Заголовок сообщения:  Re: Как правильно изменить размеры вьюшки-окна после ее создания

В общем случае нельзя, поскольку одна модель может показываться в разных окнах.

Если модель/отображение корневые, то проще пройти по всем окнам и проверить их, как у меня сделано в BbtWindows.StdLogWindow.

Автор:  Виталий [ Пятница, 04 Декабрь, 2009 10:34 ]
Заголовок сообщения:  Re: Как правильно изменить размеры вьюшки-окна после ее создания

Ыгы...
Ладно возьму на заметку.
Спасибо.

Автор:  Info21 [ Пятница, 04 Декабрь, 2009 12:44 ]
Заголовок сообщения:  Re: Как правильно изменить размеры вьюшки-окна после ее создания

Виталий писал(а):
О-о-о спасибо. Модуль Windows подходит.
ЕНе надо без нужды лезть в Windows!!!!

Почему-то никто не сказал про свойства, а там есть про размеры (SetProp или как-то так, см. документацию к View).

Автор:  Иван Горячев [ Пятница, 04 Декабрь, 2009 13:23 ]
Заголовок сообщения:  Re: Как правильно изменить размеры вьюшки-окна после ее создания

Свойства влияют на документы (модели, вьюшки). А если человеку нужно изменить именно размер окна - ему прямая дорога в Windows. Это же не HostWindows, в который действительно лучше не соваться. Да, окна - чужеродный элемент в ББ, но что поделать если они есть и приходится с ними работать :|

Автор:  Виталий [ Пятница, 04 Декабрь, 2009 16:43 ]
Заголовок сообщения:  Re: Как правильно изменить размеры вьюшки-окна после ее создания

Спасибо, хлопцы, что помогаете, инфа полезная.
Может я неверно делаю что в этой теме спрашиваю, но вопрос всетки к вьюшкам относится, потому не стал отдельную тему создавать.

вот если предположим я заранее не знаю сколько строк текста у меня будет во вьюшке, а хочется чтоб размеры ее как раз ограничивались текстом, и не более (такой себе а-ля AutoSuze)
Как правильнее поступать в таких случаях, умножать высоту шрифта на количество строк, а потом в .context.SetSize вьюшки указывать высоту или есть другой способ сказать вьюшке чтоб она сама согласно наполненному в нее расширилась?

И еще нескромный вопрос:
Цитата:
PROCEDURE Era (v: View): INTEGER
Для отображений с моделью возвращает эру, в которой отображение было последний раз синхронизировано с моделью.

Что такое Эра?

Автор:  Александр Ильин [ Пятница, 04 Декабрь, 2009 17:36 ]
Заголовок сообщения:  Re: Как правильно изменить размеры вьюшки-окна после ее создания

Виталий писал(а):
Что такое Эра?
Хороший вопрос! Мне тоже интересно : ) Этот концепт не в одном месте встречается во фреймворке, а вот чтобы описание где-то видел - не припомню.

Автор:  Info21 [ Пятница, 04 Декабрь, 2009 19:23 ]
Заголовок сообщения:  Re: Как правильно изменить размеры вьюшки-окна после ее создания

Иван Горячев писал(а):
А если человеку нужно изменить именно размер окна -
Он, вроде, открывать хотел с нужным размером. Или я забыл. Ладно, пусть будет Windows.

Автор:  Илья Ермаков [ Пятница, 18 Декабрь, 2009 23:06 ]
Заголовок сообщения:  Re: Как правильно изменить размеры вьюшки-окна после ее создания

Код:
   PROCEDURE ResizeDoc;
   BEGIN
      StdCmds.InitLayoutDialog;
      StdCmds.layout.wType := 0;
      StdCmds.layout.width := 40;
      StdCmds.SetLayout
   END ResizeDoc;


Смелее, товарищи, юзаем команды из кода и наоборот :)

Глобальные переменные как параметры в таких случаях рулят. Входные параметры могут приходить как от диалогов, так и программно. Выставляемый глобально результат может использоваться как программно, так и "человечески" через Global Variables - не нужно писать разные варианты...

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/