HOME ПРИМЕРЫ THANKS НОВИЧКАМ ДОКИ LINKS JavaScript Mail


 
В этот день много лет назад...
29 марта. В 1891 году (133 года назад) - Императорский рескрипт, объявляющий о начале строительства Транссибирской магистрали.
 
 

Turbo Pascal Documentation

Процедура SetVievPort

Модуль Graph


           Функция: Устанавливает  для  графического  вывода
текущую область просмотра или окно.
           Описание: SetViewPort(х1, у1, х2, у2 : word;
            Примечания: Точка (x1,y1)  задает  верхний  левый
угол области просмотра, а точка с координатами (x2,y2)
определяет нижний правый угол (0 <= y1 < x2 и 0 <=  y1 < y2).
Левый верхний  угол  экрана  задается  координатами (0,0).
        Булевская переменная Сliр определяет будет ли  изоб-
ражение отсекаться  текущими  границами  области  просмотра.
Процедура SetVievPort(0,0,GetMaxX,GetMaxY,True)  всегда  за-
дает в качестве области просмотра все поле графического  эк-
рана. Определены следующие константы:

           const
           ClipOn := true;
           ClipOff := false;

     Все графические команды (например, GetX, ОutТехt,  Rec-
tangle,  МоvеТо и т. д.) зависят от текущей области просмот-
ра. В качестве примера заметим, что процедура МоvеТо переме-
щает текущий указатель в точку (5,5) внутри области просмот-
ра (абсолютными координатами данной точки были бы координаты
(15,25)).

       (0,0)                           (GetMaxX,0)
         -------------------------------------
         !                                   !
         !                                   !
         !           ---------               !
         !           !       !               !
         !           !   .   !               !
         !           !       !               !
         !           ---------               !
         !                                   !
         !                                   !
         -------------------------------------
       (0,GetMaxY)                   (GetMaxX,GetMaxY)

     Если булевская переменная Сliр установлена  в  значение
Тruе,  то, когда выполняется обращение к процедуре SetViewP-
ort, все рисунки будут обрезаться на границах текущей облас-
ти  просмотра.  Заметим,  что "текущий указатель" никогда не
отсекается. В следующем примере прямая линия не будет  нари-
сована  полностью,  поскольку  она будет обрезана на границе
области просмотра:

           SetWiewPort(10, 10, 20, 20, ClipOn);
           Line(0, 5, 15, 5);

     Если бы не выполнялось отсечение, то прямая должна была
бы  начинаться  в точке с абсолютными координатами (10,15) и
заканчиваться в точке с  абсолютными  координатами  (25,15).
Но,  поскольку  выполнялось отсечение, то в действительности
прямая будет вычерчиваться, начиная с  точки  с  абсолютными
координатами (10,15), и заканчиватся в точке (20,15).
     Процедуры InitGraph, ClearDevice и SetGraphMode сбрасы-
вают определение текущей области просмотра и устанавливают в
качестве области просмотра весь экран.  Текущее  определение
области  просмотра  можно  получить с помощью процедуры Get-
ViewSettings, которая воспринимает параметры следующего гло-
бального типа:

       type
         ViewPortType = record
                          x1, y1, x2, y2 : word;
                          Clip           : boolean;
                        end;

     Процедура SetViewPort перемещает  текущий  указатель  в
точку с координатами (0,0).
     Аналогичная процедура имеется в версии 2.0 Турбо-Си.
     Ограничения: Должен использоваться графический режим.
     Прочее: См. также процедуры ClearViewPort,  GetViewSet-
tings, GraphResult.
     Пример:

         uses Graph;
        var
          Gd, Gm : integer;
        begin
          Gd := Detect;
          InitGraph(Gd, Gm, '');
          if GraphResult <> grOk then
             Halt(1);
          if (gd = HercMono)
              or (gd = EGA or (Gd = EGA64) or (Gd = VGA)
       then
        begin
        SetVisualPage(0);
        SetActivePAge(1);
        Rectangle(10, 20, 30, 40);
        SetVisualPage(1);
        end;
        else
         OutText('Страничный режим не поддерживается');
        Readln;
        CloseGraph;
        end.

           Пример 2:

        const
        vp1 : ViewPortType =
          (x1 : 10; y1 : 80; x2 : 100; y2 : 150; Clip :
       ClipOn);
        vp2 : ViewPortType =
          (x1 : 110; y1 : 0; x2 : 150; x2 : 70; Clip :
       ClipOn);
        var
          GraphDriver, GraphMode : integer;
        begin
          GraphDriver := Detect;
          InitGparh(GraphDrivet,GraphMode,'');
           if GraphRasult <> grOk then
             Halt(1);
          with vp1 do
          begin
            Rectangle(Succ(x1), Succ(y1),  { нарисовать контур области }
                      Pred(x2), Pred(y2)); { просмотра }
            SetViewPort(x1, y1, x2, y2, ClipOn);
            OutText('Область просмотра');
          end;
          { полный экран }
          SetViewPort(0, 0, GetMaxX, GetMaxY, ClipOn);
          with vp2 do
          begin
          { нарисовать контур второй области просмотра }
            Rectangle(Succ(x1), Succ(y1),  { нарисовать контур области }
                      Pred(x2), Pred(y2)); {  просмотра }
            SetViewPort(x1, y1, x2, y2, ClipOn);
            OutText('Область просмотра 2');
          end;
          Readln;
          CloseGraph;
        end.




HOME