Изменить режим координат

{
Copyright © 1999 by Delphi 5 Developer's Guide - Xavier Pacheco and Steve Teixeira
}
unit MainFrm;
interface
uses
 SysUtils, Windows, Messages, Classes, Graphics, Controls,
 Forms, Dialogs, Menus, DB, DBCGrids, DBTables;
type
 TMainForm = class(TForm)
 mmMain: TMainMenu;
 mmiMappingMode: TMenuItem;
 mmiMM_ISOTROPIC: TMenuItem;
 mmiMM_ANSITROPIC: TMenuItem;
 mmiMM_LOENGLISH: TMenuItem;
 mmiMM_HIINGLISH: TMenuItem;
 mmiMM_LOMETRIC: TMenuItem;
 mmiMM_HIMETRIC: TMenuItem;
 procedure FormCreate(Sender: TObject);
 procedure mmiMM_ISOTROPICClick(Sender: TObject);
 procedure mmiMM_ANSITROPICClick(Sender: TObject);
 procedure mmiMM_LOENGLISHClick(Sender: TObject);
 procedure mmiMM_HIINGLISHClick(Sender: TObject);
 procedure mmiMM_LOMETRICClick(Sender: TObject);
 procedure mmiMM_HIMETRICClick(Sender: TObject);
 public
 MappingMode: Integer;
 procedure ClearCanvas;
 procedure DrawMapMode(Sender: TObject);
 end;
var
 MainForm: TMainForm;
implementation
{$R *.DFM}
procedure TMainForm.ClearCanvas;
begin
 with Canvas do
 begin
 Brush.Style := bsSolid;
 Brush.Color := clWhite;
 FillRect(ClipRect);
 end;
end;
procedure TMainForm.DrawMapMode(Sender: TObject);
var
 PrevMapMode: Integer;
begin
 ClearCanvas;
 Canvas.TextOut(0, 0, (Sender as TMenuItem).Caption);
 // Set mapping mode to MM_LOENGLISH and save the previous mapping mode
 PrevMapMode := SetMapMode(Canvas.Handle, MappingMode);
 try
 // Set the viewport org to left, bottom
 SetViewPortOrgEx(Canvas.Handle, 0, ClientHeight, nil);
 { Draw some shapes to illustrate drawing shapes with different
 mapping modes specified by MappingMode }
 Canvas.Rectangle(0, 0, 200, 200);
 Canvas.Rectangle(200, 200, 400, 400);
 Canvas.Ellipse(200, 200, 400, 400);
 Canvas.MoveTo(0, 0);
 Canvas.LineTo(400, 400);
 Canvas.MoveTo(0, 200);
 Canvas.LineTo(200, 0);
 finally
 // Restore previous mapping mode
 SetMapMode(Canvas.Handle, PrevMapMode);
 end;
end;
procedure TMainForm.FormCreate(Sender: TObject);
begin
 MappingMode := MM_TEXT;
end;
procedure TMainForm.mmiMM_ISOTROPICClick(Sender: TObject);
var
 PrevMapMode: Integer;
begin
 ClearCanvas;
 // Set mapping mode to MM_ISOTROPIC and save the previous mapping mode
 PrevMapMode := SetMapMode(Canvas.Handle, MM_ISOTROPIC);
 try
 // Set the window extent to 500 x 500
 SetWindowExtEx(Canvas.Handle, 500, 500, nil);
 // Set the Viewport extent to the Window's client area
 SetViewportExtEx(Canvas.Handle, ClientWidth, ClientHeight, nil);
 // Set the ViewPortOrg to the center of the client area
 SetViewportOrgEx(Canvas.Handle, ClientWidth div 2, ClientHeight div 2, nil);
 // Draw a rectangle based on current settings
 Canvas.Rectangle(0, 0, 250, 250);
 { Set the viewport extent to a different value, and
 draw another rectangle. continue to do this three
 more times so that a rectangle is draw to represent
 the plane in a four-quadrant square }
 SetViewportExtEx(Canvas.Handle, ClientWidth, -ClientHeight, nil);
 Canvas.Rectangle(0, 0, 250, 250);
 SetViewportExtEx(Canvas.Handle, -ClientWidth, -ClientHeight, nil);
 Canvas.Rectangle(0, 0, 250, 250);
 SetViewportExtEx(Canvas.Handle, -ClientWidth, ClientHeight, nil);
 Canvas.Rectangle(0, 0, 250, 250);
 // Draw an ellipse in the center of the client area
 Canvas.Ellipse(-50, -50, 50, 50);
 finally
 // Restore the previous mapping mode
 SetMapMode(Canvas.Handle, PrevMapMode);
 end;
end;
procedure TMainForm.mmiMM_ANSITROPICClick(Sender: TObject);
var
 PrevMapMode: Integer;
begin
 ClearCanvas;
 // Set the mapping mode to MM_ANISOTROPIC and save the previous mapping mode
 PrevMapMode := SetMapMode(Canvas.Handle, MM_ANISOTROPIC);
 try
 // Set the window extent to 500 x 500
 SetWindowExtEx(Canvas.Handle, 500, 500, nil);
 // Set the Viewport extent to that of the Window's client area
 SetViewportExtEx(Canvas.Handle, ClientWidth, ClientHeight, nil);
 // Set the ViewPortOrg to the center of the client area
 SetViewportOrgEx(Canvas.Handle, ClientWidth div 2, ClientHeight div 2, nil);
 // Draw a rectangle based on current settings
 Canvas.Rectangle(0, 0, 250, 250);
 { Set the viewport extent to a different value, and
 draw another rectangle. continue to do this three
 more times so that a rectangle is draw to represent
 the plane in a four-quadrant square }
 SetViewportExtEx(Canvas.Handle, ClientWidth, -ClientHeight, nil);
 Canvas.Rectangle(0, 0, 250, 250);
 SetViewportExtEx(Canvas.Handle, -ClientWidth, -ClientHeight, nil);
 Canvas.Rectangle(0, 0, 250, 250);
 SetViewportExtEx(Canvas.Handle, -ClientWidth, ClientHeight, nil);
 Canvas.Rectangle(0, 0, 250, 250);
 // Draw an ellipse in the center of the client area
 Canvas.Ellipse(-50, -50, 50, 50);
 finally
 //Restore the previous mapping mode
 SetMapMode(Canvas.Handle, PrevMapMode);
 end;
end;
procedure TMainForm.mmiMM_LOENGLISHClick(Sender: TObject);
begin
 MappingMode := MM_LOENGLISH;
 DrawMapMode(Sender);
end;
procedure TMainForm.mmiMM_HIINGLISHClick(Sender: TObject);
begin
 MappingMode := MM_HIENGLISH;
 DrawMapMode(Sender);
end;
procedure TMainForm.mmiMM_LOMETRICClick(Sender: TObject);
begin
 MappingMode := MM_LOMETRIC;
 DrawMapMode(Sender);
end;
procedure TMainForm.mmiMM_HIMETRICClick(Sender: TObject);
begin
 MappingMode := MM_HIMETRIC;
 DrawMapMode(Sender);
end;
end.
ID: 03760
Category:Графика
Category:Рисование