我想在FORM下作图,以模拟动态的排序过程,要能看到数字是怎样移动的.请问怎样在FORM下作图? (100分)

  • 主题发起人 主题发起人 id wood
  • 开始时间 开始时间
I

id wood

Unregistered / Unconfirmed
GUEST, unregistred user!
怎样在FORM下作图,以模拟动态的排序过程,要能看到数字是怎样移动的.
希望能是一个类,然后在这个新定义的类的基础上再作图(比如只要确定坐标就可以了).
不是DELPHI自带的那个多线程程序.
 
说起来也容易,只要把FORM的Canvas属性作为一个参数传入你的类中,
然后想怎样就怎样了。
要移动的话最好先将背景保存为一幅位图在一个Bitmap中,
在类中再创建一个临时的Bitmap并先在上面画背景,再画数字,
之后再复制到传入的Canvas上。

思路就是如此,自己实现吧。
 
能讲的再详细些么?正在学习CANVAS作图.谢谢!
 
canvas has a lot of method to use, you also can use windows api.
 
在做毕业设计.同学用VC++,作出的程序动态的,用CDC作图.我用DELPHI已经完成了大体
的程序.现在才刚接触作图.指导老师希望我的程序也能"动起来".
 
一个例子,给你参考:
unit Unit1;

interface

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

type
TForm1 = class(TForm)
btnRestart: TButton;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure btnRestartClick(Sender: TObject);
private
FBackBmp: TBitmap; //保存棋盘;
FBlackBmp: TBitmap; //保存黑子;
FWhiteBmp: TBitmap; //保存白子;
FIsWhite: Boolean; //当前是否是白子;
FCheckerWidth: Integer; //棋子所占方格的宽度;
function PointToRect(x, y: Integer): TRect;
procedure DoDrawBackImage;
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
begin
FBackBmp := TBitmap.Create; //保存棋盘;
FBlackBmp := TBitmap.Create; //保存黑子;
FWhiteBmp := TBitmap.Create; //保存白子;
//加载图片;
FBackBmp.LoadFromFile('棋盘.bmp');
FBlackBmp.LoadFromFile('黑子.bmp');
FWhiteBmp.LoadFromFile('白子.bmp');
FIsWhite := False; //黑子先走;
DoDrawBackImage;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
FBackBmp.Free;
FBlackBmp.Free;
FWhiteBmp.Free;
end;

function TForm1.PointToRect(x, y: Integer): TRect;
begin
//这里假设x和y为左上顶点坐标;
//实用你要先将x、y换算为左上顶点坐标;
Result := Rect(x, y, x + FCheckerWidth, y + FCheckerWidth);
end;

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin //画棋子;
with Canvas do
if FIsWhite then
CopyRect(PointToRect(x, y), FWhiteBmp.Canvas,
Rect(0, 0, FWhiteBmp.Width, FWhiteBmp.Height))
else
CopyRect(PointToRect(x, y), FBlackBmp.Canvas,
Rect(0, 0, FBlackBmp.Width, FBlackBmp.Height));
end;

procedure TForm1.DoDrawBackImage;
begin
Canvas.Draw(0, 0, FBackBmp);
end;

procedure TForm1.btnRestartClick(Sender: TObject);
begin //重新开始;
DoDrawBackImage;
FIsWhite := False;
end;

end.
 
后退
顶部