ЛИСТИНГ 12.5 SPI14FORM.PAS, ГпавЬая форма для SpiroMania

Spiro Mania SPINFORM.PAS : Главная форма модуля Джефф Дантеманн KG7JF Главная форма генератора для циклоидной кривой функционально схожа со старой игрушкой Спирографом

Написано для * Исследователя программирования Delphi *

Защищено авторским правом (с) 1995 The Coriolis Group,Inc.

Последняя модификация 3/9/95

unit Spinform; niterface uses

SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics Controls, Forms, Dialogs, StdCtrls, Printers, Spinner, Buttons, ColorGrd, Spin, ExtCtrls;

type

TForml = class(TForm) ButtonPanel: TPanel; ClearButton: TButton; SpinButton: TButton; PrintButton: TButton;
QuitButton: TButton;
ColorGridl: TColorGrid;
SpinA: TSpinEdit;
SpinB: TSpinEdit;
SpinD: TSpinEdit;
SpinALabel: TLabel;
SpinBLabel: TLabel;
SpinDLabel: TLabel;
PickPrinterButton: TButton;
PrinterSetupDialogl: TPrinterSetupDialog;
procedure QuitButtonClick(Sender: TObject);
procedure SpinButtonClick(Sender: TObject);
procedure ClearButtonClick(Sender: TObject);
procedure PrintButtonClіck(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormPaint(Sender: TObject);

procedure PickPrinterButtonClick(Sender: TObject); private

{ Приватные объявления }

{ Общедоступные объявления } end;

var Forml: TForml; implementation var CanvasXsClear : Boolean; { Флаг, что рисунок надо )

{ регенерировать методом Paint)

{$R *.DFM)

procedure TForml.QuitButtonClick(Sender: TObject);
begin
Close;
end;
procedure TForml.SpinButtonClick(Sender: TObject);
var CenterX, CenterY : Integer;
begin
CanvasIsClear := False-CenterY := ClientHeight DIV 2;

CenterX := (ClientWidth DIV 2) + (ButtonPanel.Width DIV 2); Canvas.Pixels[CenterX, CenterY] := CLBlack; SpinWheels(Canvas, SpinA.Value, SpinB.Value, SpinD.Value, CenterX, CenterY, ColorGridl ForegroundColor)

end;
procedure TForml.ClearButtonClick(Sender: TObject);
begin
CanvasIsClear := True;

{ Canvas is clear; don't repaint pattern on Paint }

Refresh;
end;

{ Печать может показаться сложной, но в действительности { значение имеет только использование метода масштабирования { с Spinweels и передачу полотна принтера к SpinWeele как { к параметру. SpinWeelа выполняется между BeginDoc/EndDoc { парами... и это он и есть!)

procedure TForml.PrintButtonClick(Sender: TObject);
var CenterX, CenterY : Integer; ScaleFactor : Integer;

SpinAText, SpinBText, SpinDText, LabelText : String; begin WITH Printer DO begin { Вычисление коэффициента масштабирования, который } { является соотношением самого короткого }

(размера напечатанной страницы к самому хороткому размеру} { отображаемого полотна формы: )

ScaleFactor := PageWidth DIV ClientHeight;
CenterX := PageWidth DIV 2;
CenterY := PagaHeight DIV 2;
BeginDoc;

(Мы снова вращаем колеса на полотне принтера, порождая} (тот самый узор, который показан на форме, только } {масштабирований, чтобы годился для полотна принтера:} SpinWheels(Printer.Canvas,

SpinA Value*ScaleFactor,

SpinB.Value*ScaleFactor,

SpinD.Value*ScaleFactor,

CenterX, CenterY, ClBlack);
{ Создатт метку для листа принтера: LabelText := 'А='+IntToStr(SpinA.Value)+ ' B='+IntToStr(SpinB.Value)+ ' D='+IntToStr(SpinD.Value);
{ Мы повторно используем здесь Center X и Center Y } { для позиции метки, которая показывает } { параметры spin на печатуемом листе:} CenterY := Trunc(PageHeight - (PageHeight * 0.07)); CenterX := (PageWidth - Canvas.TextWidth(LabelText)) DIV 2; Canvas.TextOut(CenterX, CenterY, LabelText), EndDoc;
end;

⇐ Предыдущая страница| |Следующая страница ⇒

Программирование в среде Delphi



Новости за месяц

  • Декабрь
    2021
  • Пн
  • Вт
  • Ср
  • Чт
  • Пт
  • Сб
  • Вс
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31