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 ).

Цитата:
и написать отдельный модуль, который будет открывать текст с числами, вытаскивает их отттуда и суммирует.
Почитали студиозы справку - чет сложновато.
1. Если окно не открыто, то как его открыть из проги? Считаем, что оно лежит в том же месте, что и основной модуль и имеет имя name.
Views.Old, OldView

Цитата:
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/