OberonCore https://forum.oberoncore.ru/ |
|
Ввести два значения из отдельного окна. https://forum.oberoncore.ru/viewtopic.php?f=35&t=1950 |
Страница 1 из 1 |
Автор: | Валерий Лаптев [ Среда, 14 Октябрь, 2009 12:51 ] |
Заголовок сообщения: | Ввести два значения из отдельного окна. |
Вот какой возник вопрос. По мере "продвижения" по ВВ сформулировал задачку для студиозов: создать в ВВ новое окно, записать туда два числа и написать отдельный модуль, который будет открывать текст с числами, вытаскивает их отттуда и суммирует. Почитали студиозы справку - чет сложновато. 1. Если окно не открыто, то как его открыть из проги? Считаем, что оно лежит в том же месте, что и основной модуль и имеет имя name. В примерах ввода текста написано только об открытом окне, которое самое верхнее (или я просто не там смотрел - пункт 5.3 в главе 5). И имеет фокус. 2. Обязательно ли в открытом окне выделять кусок текста? А если не выделять, и читать весь текст? 3. Читаю я либо ридером из модели, либо сканером из маппера. Тип элемента я могу определить, а где сам прочитанный элемент? Если все это написано, то ткните просто в место справки, где написано. |
Автор: | Евгений Темиргалеев [ Среда, 14 Октябрь, 2009 13:27 ] |
Заголовок сообщения: | Re: Ввести два значения из отдельного окна. |
Вопросы не совсем понятны... Валерий Лаптев писал(а): По мере "продвижения" по ВВ сформулировал задачку для студиозов: создать в ВВ новое окно, записать туда два числа и написать отдельный модуль, который будет открывать текст с числами, вытаскивает их отттуда и суммирует. Создаются тексты. Код: text := TextModels.dir.New() В них записываются числа, например, форматтером.Текст можно показать в окне документа (в котором будет текстовое отображение). Код: Views.Open(TextViews.dir.New(text)) Отдельному модулю можно передать непосредственно сформированный text. Или он может получить text, который показан в сфокусированном окне: Код: text := TextViews.FocusText()
|
Автор: | Info21 [ Среда, 14 Октябрь, 2009 13:28 ] |
Заголовок сообщения: | Re: Ввести два значения из отдельного окна. |
Валерий Лаптев писал(а): создать в ВВ новое окно, записать туда два числа t := TextModels.dir.New v := TextViews....(t) Views.OpenView(v). еще: formatter .ConnectTo( t ). Цитата: и написать отдельный модуль, который будет открывать текст с числами, вытаскивает их отттуда и суммирует. Views.Old, OldViewПочитали студиозы справку - чет сложновато. 1. Если окно не открыто, то как его открыть из проги? Считаем, что оно лежит в том же месте, что и основной модуль и имеет имя name. Цитата: 2. Обязательно ли в открытом окне выделять кусок текста? А если не выделять, и читать весь текст? Зачем выделять? Не понял.scanner.ConnetTo и понеслась. Цитата: 3. Читаю я либо ридером из модели, либо сканером из маппера. Тип элемента я могу определить, а где сам прочитанный элемент? Там же, в соотв. полях. Написано в документации, TextMappers: Scanner = RECORD opts-: SET; rider-: TextModels.Reader; type, start, lines, paras: INTEGER; char: CHAR; int, base: INTEGER; lint: LONGINT; real: REAL; bool: BOOLEAN; set: SET; len: INTEGER; string: String; view: Views.View; w, h: INTEGER; (VAR s: Scanner) ConnectTo (text: TextModels.Model), NEW; (VAR s: Scanner) Pos (): INTEGER, NEW; (VAR s: Scanner) Scan, NEW; (VAR s: Scanner) SetOpts (opts: SET), NEW; (VAR s: Scanner) SetPos (pos: INTEGER), NEW; (VAR s: Scanner) Skip (OUT ch: CHAR), NEW END; |
Автор: | Иван Кузьмицкий [ Среда, 14 Октябрь, 2009 13:30 ] |
Заголовок сообщения: | Re: Ввести два значения из отдельного окна. |
Только что набросал пример (на основе ObxOpen0), который читает строчки из документа и выводит прочитанное в журнал. Код: MODULE TestRead;
IMPORT Log := StdLog, Files, Converters, Views, TextModels, TextMappers, TextViews; PROCEDURE Do*; VAR loc: Files.Locator; name: Files.Name; v: Views.View; t: TextModels.Model; r: TextMappers.Scanner; BEGIN loc := Files.dir.This('Test\Rsrc'); name := "Name"; v := Views.OldView(loc, name); IF (v # NIL) & (v IS TextViews.View) THEN (* надо убедиться, что это текстовая картинка *) t := v(TextViews.View).ThisModel(); (* получение модели представления текста *) r.ConnectTo(t); r.SetPos(0); WHILE ~r.rider.eot DO r.Scan; Log.String(r.string); Log.Ln; END END END Do; END TestRead. |
Автор: | Валерий Лаптев [ Среда, 14 Октябрь, 2009 14:11 ] |
Заголовок сообщения: | Re: Ввести два значения из отдельного окна. |
Ага! Иван почти все мне сообщил. Остальные не совсем поняли. Текст создается с помощью меню File|new и сохраняется с помощью меню. А уж мой модуль его открывает и понеслась. Получается, что открываем мы файлы стандартным способом. Только потом в зависимости от вида файла либо некий конвертер запускается, либо (убедившись, что это текст ВВ, начинаем непосредственно разбор. Ага! И в сканере поля обнаружил. Чего-то не видал раньше - видимо с недосыпу. Большой катта рахмат всем! |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |