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


 
В этот день много лет назад...
2 декабря. В 1804 году (219 лет назад) - Наполеон провозглашается императором Франции на торжественной церемонии в соборе Нотр-Дам. Для участия в церемонии в Париж доставлен папа Пий VII, от которого Наполеон принимает помазание, но не дает ему короновать себя. Папа нужен только для придания законности коронации.
 
 

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