HOME ПРИМЕРЫ THANKS НОВИЧКАМ ДОКИ LINKS JavaScript Mail | |||
| |||
|
Turbo Pascal Documentation | ||
Функция: Устанавливает для графического вывода текущую область просмотра или окно. Описание: 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 |