在好例子网,分享、交流、成长!
您当前所在位置:首页Pascal 开发实例Delphi数据库编程 → delphi 计算器 入门级示例

delphi 计算器 入门级示例

Delphi数据库编程

下载此实例
  • 开发语言:Pascal
  • 实例大小:0.10M
  • 下载次数:9
  • 浏览次数:164
  • 发布时间:2020-06-04
  • 实例类别:Delphi数据库编程
  • 发 布 人:1449290264
  • 文件格式:.rar
  • 所需积分:2
 相关标签: 计算器 计算

实例介绍

【实例简介】
【实例截图】
【核心代码】

unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls, Vcl.Buttons,
  Vcl.ComCtrls;

type
  //TDayofWeek = (Sunday, Monday, Tue);
  TDrawType = (dtLine, dtCircle, dtRect);  // Enum, 枚举
  TForm1 = class(TForm)
    Panel1: TPanel;
    btnLine: TButton;
    btnCircle: TButton;
    btnRect: TButton;
    Panel2: TPanel;
    Panel3: TPanel;
    PaintBox1: TPaintBox;
    Memo1: TMemo;
    btnPenColor: TBitBtn;
    btnBrushColor: TBitBtn;
    dlgColor: TColorDialog;
    TrackBar1: TTrackBar;
    lblPenColor: TLabel;
    clrboxPen: TColorBox;
    lblBrushColor: TLabel;
    Label1: TLabel;
    Label2: TLabel;
    clrboxBrush: TColorBox;
    cmbBrushStyle: TComboBox;
    procedure btnLineClick(Sender: TObject);
    procedure btnCircleClick(Sender: TObject);
    procedure btnRectClick(Sender: TObject);
    procedure PaintBox1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure PaintBox1MouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure FormShow(Sender: TObject);
    procedure PaintBox1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure TrackBar1Change(Sender: TObject);
    procedure clrboxPenChange(Sender: TObject);
    procedure cmbBrushStyleChange(Sender: TObject);
    procedure clrboxBrushChange(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  ptStart, ptLast, ptEnd : TPoint;
  DrawType: TDrawType;
  isDrawing: Boolean;
  PenColor, BrushColor: TColor;
  BrushStyle: TBrushStyle;
implementation

{$R *.dfm}

procedure TForm1.btnCircleClick(Sender: TObject);
begin
  DrawType:= dtCircle;
  Memo1.Lines.Add(TimeToStr(Now) ': 画椭圆');
  Memo1.Lines.Add('按住Shift键画圆');
end;

procedure TForm1.btnLineClick(Sender: TObject);

begin
  DrawType := dtLine;
  Memo1.Lines.Add(TimeToStr(Now) ': 画直线');
end;

procedure TForm1.btnRectClick(Sender: TObject);
begin
  DrawType:=dtRect;
  Memo1.Lines.Add(TimeToStr(Now) ': 画矩形');
  Memo1.Lines.Add('按住Shift键画正方形');
end;

procedure TForm1.clrboxBrushChange(Sender: TObject);
begin
  BrushColor:=clrboxBrush.Selected;
  PaintBox1.Canvas.Brush.Color:=BrushColor;
end;

procedure TForm1.clrboxPenChange(Sender: TObject);
begin
    PenColor:=clrboxPen.Selected;
    PaintBox1.Canvas.Pen.Color:=PenColor;
end;

procedure TForm1.cmbBrushStyleChange(Sender: TObject);
begin
  BrushStyle:= TBrushStyle(cmbBrushStyle.ItemIndex);
  PaintBox1.Canvas.Brush.Style := BrushStyle;

end;

procedure TForm1.FormShow(Sender: TObject);
begin
  isDrawing:=False;
  PenColor:=PaintBox1.Canvas.Pen.Color;
  BrushColor:=PaintBox1.Canvas.Brush.Color;
  BrushStyle:=PaintBox1.Canvas.Brush.Style;
  TrackBar1Change(Sender);
end;

procedure TForm1.PaintBox1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  //开始画图
  isDrawing:=True;
  //记录ptStart, ptLast
  ptStart.X:=X;
  ptStart.Y:=Y;
  Memo1.Lines.Add(Format('起点:(%d,%d)',[x,y]));

  ptLast:=ptStart;

end;

procedure TForm1.PaintBox1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
var deltaX, deltaY : integer;
begin
  if not isDrawing then Exit;

  //计算ptEnd的值 //如果用户按着Shift,则要画正圆和正方形
  if (ssShift in Shift) then
  begin
    deltaX:= X - ptStart.X;
    deltaY:= Y - ptStart.Y;
    if deltaX > deltaY then  // x 方向比较长, 缩短它
    begin
      ptEnd.X:= ptStart.X deltaY;
      ptEnd.Y:= Y;
    end else begin           // y 方向比较长, 缩短它
      ptEnd.Y:= ptStart.Y deltaX;
      ptEnd.X:= X;
    end;

  end else begin            // 没有按住Shift键, 该咋画咋画
    ptEnd.X:=X;
    ptEnd.Y:=Y;
  end;
  //输出信息
  if (ptEnd.X<>X) and (ptEnd.Y<>Y) then
  begin
    Memo1.Lines.Add(Format('实际X,Y=%d,%d',[X,Y]));
    Memo1.Lines.Add(Format('ptEnd  =%d,%d',[ptEnd.X,ptEnd.Y]));
  end;

  //橡皮筋效果
  PaintBox1.Canvas.Pen.Mode:=pmNotXor;
  //橡皮筋之前,保存旧的BrushStyle
  BrushStyle:= PaintBox1.Canvas.Brush.Style;
  //PaintBox1.Canvas.Brush.Style:=bsClear;  有问题
  case DrawType of
  dtLine:
    begin
      // Clear the last graph
      PaintBox1.Canvas.MoveTo(ptStart.X, ptStart.Y);
      PaintBox1.Canvas.LineTo(ptLast.X, ptLast.Y);
      // Draw new graph
      PaintBox1.Canvas.MoveTo(ptStart.X, ptStart.Y);
      PaintBox1.Canvas.LineTo(ptEnd.X, ptEnd.Y);
    end;
  dtCircle:
    begin
      PaintBox1.Canvas.Ellipse(ptStart.X, ptStart.Y, ptLast.X, ptLast.Y);
      PaintBox1.Canvas.Ellipse(ptStart.X, ptStart.Y, ptEnd.X, ptEnd.Y);
    end;
  dtRect:
    begin
      PaintBox1.Canvas.Rectangle(ptStart.X, ptStart.Y, ptLast.X, ptLast.Y);
      PaintBox1.Canvas.Rectangle(ptStart.X, ptStart.Y, ptEnd.X, ptEnd.Y);
    end;

  end;
  //更新ptLast, 重要!!!
  ptLast.X:= ptEnd.X;
  ptLast.Y:= ptEnd.Y;
  //恢复BrushStyle
  PaintBox1.Canvas.Brush.Style:=BrushStyle;
end;

procedure TForm1.PaintBox1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  Memo1.Lines.Add(Format('当前位置:(%d,%d)',[x,y]));
  Memo1.Lines.Add(Format('终点:(%d,%d)',[ptEnd.X, ptEnd.Y]));

  isDrawing:= False;    //结束画图状态
  PaintBox1.Canvas.Pen.Mode:= pmCopy;
  //画最终图形之前,恢复保存的BrushStyle
  PaintBox1.Canvas.Brush.Style:=BrushStyle;

  //画最终的图形
  //输出最终图形的坐标信息
  if (ptEnd.X<>X) and (ptEnd.Y<>Y) then
  begin
    Memo1.Lines.Add(Format('@MouseUp, 实际X,Y=%d,%d',[X,Y]));
    Memo1.Lines.Add(Format('@MouseUp, ptEnd  =%d,%d',[ptEnd.X,ptEnd.Y]));
  end;

  case DrawType of
  dtLine:
    begin
      PaintBox1.Canvas.MoveTo(ptStart.X,ptStart.Y);
      PaintBox1.Canvas.LineTo(ptEnd.X, ptEnd.Y);
    end;
  dtCircle:
    begin
      PaintBox1.Canvas.Ellipse(ptStart.X, ptStart.Y, ptEnd.X, ptEnd.Y);
    end;
  dtRect:
    begin
      PaintBox1.Canvas.Rectangle(ptStart.X, ptStart.Y, ptEnd.X, ptEnd.Y);
    end;
  end;

end;

procedure TForm1.TrackBar1Change(Sender: TObject);
begin
  PaintBox1.Canvas.Pen.Width:=TrackBar1.Position;
  lblPenColor.Caption:='画笔宽度 ' IntToStr(TrackBar1.Position);
end;

end.

标签: 计算器 计算

实例下载地址

delphi 计算器 入门级示例

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警