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

Previous  Top  Next

    
 

 

Code:

{

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.

 

©Drkb::03760