Энциклопедия Turbo Pascal. Главы 9-11 - Окна

ОГЛАВЛЕНИЕ

Окна

Графический инструментарий позволяет вам создавать и обрабатывать одно или несколько окон. Каждое окно может быть связано со своей отдельной планетной координатной системой. Кроме того, окно может иметь заголовок и быть заключенным в границы. Две основные процедуры используются для работы с  окнами:  DefincWindow  и SelectWindow. Они декларируются следующим образом:

    procedure DefineWindow(WindomNum, X1, Y1, X2, Y2: integer);
    procedure SelectWindow(WindomNum: integer); 

WindoNum - это номер окна. В процедуре DefineWindow параметры X1, Y1 определяют местоположение верхнего левого угла, а  X2,  Y2 правого  нижнего  угла.  Одним необычным аспектом процедуры DefineWindow является измерение координаты Х единицами, равными 8 пикселам. Следовательно, предложение

    Defin_Window(1, 0, 0, 10, 10); 

задает окно, которое имеет 10 пикселов высоты и 80 пикселов ширины (такой подход используется, так как все окна должны быть выравнены в памяти отображения на границу байта).

Для связи планеты с окном необходимо придерживаться следующей последовательности:
    1. выбрать планету;
    2. выбрать окно.

Для отображения сообщения в заголовке вы должны сначала связать заголовок с окном, а затем заголовок в соответствие "включено". Для реализации этого используйте процедуры DefineHeader  и SetHeaderOn, которые декларируют следующим образом:

    procedure DefineHeader(WindowNum: integer, Msg: WrkString);
    procedure SetHeaderOn; 

Вызов DrawBorder помещает границу вокруг активного окна. Данная процедура не имеет параметров.

Следующая программа иллюстрирует правильный порядок вызова различных процедур работы с окном для того, чтобы активизировать окно с границей и заголовком. Ее вывод показан на рис.10-5.

    program One_Window;

    {Si typedef.sys}
    {Si graphix.sys}
    {Si kernel.sys}

    var
      i:integer;

    begin
      InitGraphic;
      DefineWorld(1, 0, 0, 1000, 1000);
      DefineWindow(1, 20, 20, 40, 100);

      DefineHeader(1, 'Заголовок');
      SetHeaderOn;
      SekectWorld(1);
      SekectWindow(1);
      DrawBorder;
      repeat until KeyPressed;
      LeaveGraphic;
    end.
-------------------------------------------------
             -----------------¬
             L----------------
             -----------------¬
             ¦                ¦
             ¦                ¦
             ¦                ¦
             ¦                ¦
             ¦                ¦
             ¦                ¦
             L----------------
    --------------------------------------------------.

Рис.10-5. Простое окно с границей и заголовком