求助~已知2点坐标 画矩形

kazi21com 2010-01-14 10:07:05
我在PaintBox上画了很多圆
后来由于项目需要又要增加一个画线条的功能
线条需要很粗
但是发现调整了pen的width属性后
以前画的圆的边框宽度也跟着增加了
所以决定用矩形框代替线条
已知2点坐标 画一个矩形 宽度为6 长度为2点之间距离
2点恰好位于矩形的2个短边中间
如何得到画矩形的2个坐标的参数?也就是左上和右下点的坐标
...全文
255 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
kazi21com 2010-01-14
  • 打赏
  • 举报
回复
解決了 謝謝
yct0605 2010-01-14
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 bdmh 的回复:]
你为什么不用画线呢,画线之前保存之前的pen的属性,画完后再回复pen的属性,这样后面画的圆就不会跟着变了
[/Quote]
基本就是这样的.
pen.width:=默认
pen.width:=12;
//画矩形
pen.width:=默认
kazi21com 2010-01-14
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 bdmh 的回复:]
你为什么不用画线呢,画线之前保存之前的pen的属性,画完后再回复pen的属性,这样后面画的圆就不会跟着变了
[/Quote]

我试看
kazi21com 2010-01-14
  • 打赏
  • 举报
回复
这个画矩形的代码跟API的没什么区别啊
bdmh 2010-01-14
  • 打赏
  • 举报
回复
你为什么不用画线呢,画线之前保存之前的pen的属性,画完后再回复pen的属性,这样后面画的圆就不会跟着变了
hjkto 2010-01-14
  • 打赏
  • 举报
回复

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;

type
TForm1 = class(TForm)
procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
private
{ Private declarations }
FOpt,
FCpt: TPoint;
procedure DrawRectangle(AOpt, ACpt: TPoint);
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.DrawRectangle(AOpt, ACpt: TPoint);
begin
With Canvas do
begin
//左垂
MoveTo(AOpt.X, AOpt.Y);
LineTo(AOpt.X, ACpt.Y);

//右垂
MoveTo(ACpt.X, AOpt.Y);
LineTo(ACpt.X, ACpt.Y);

//上水
MoveTo(AOpt.X, AOpt.Y);
LineTo(ACpt.X, AOpt.Y);

MoveTo(AOpt.X, ACpt.Y);
LineTo(ACpt.X, ACpt.Y);
end;
end;

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
With Canvas do
begin
if Shift = [ssleft] then
begin
Canvas.Pen.Mode := pmNot;
Canvas.Pen.Color := clRed;
FOpt := Point(X, Y);
FCpt := Point(X, Y);
MoveTo(X, Y);
LineTo(X, Y)
end;
end;
end;

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
With Canvas do
begin
if Shift = [ssleft] then
begin
DrawRectangle(FOpt, FCpt);
FCpt := Point(X, Y);
DrawRectangle(FOpt, FCpt);
exit;

MoveTo(FOpt.X, FOpt.Y);
LineTo(FCpt.X, FCpt.Y);
FCpt := Point(X, Y);
MoveTo(FOpt.X, FOpt.Y);
LineTo(FCpt.X, FCpt.Y)
end;
end;
end;

end.



参考一下

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi GAME,图形处理/多媒体
社区管理员
  • GAME,图形处理/多媒体社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧