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

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

{
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.

Отправить комментарий

Проверка
Антиспам проверка
Image CAPTCHA
...