我想画一个100*100的网格,是要在指定的行和列中加入颜色。简单的说就像写一个五子棋的棋盘吧!我要知道某一个方格中是否有棋子一样!
解决方案 »
- delphi中导入excel语法
- Timer与多线程
- 请问怎样在EXCEL绘图
- 关于菜单的一个小问题(困惑了我好久呀……)
- 如何用语言来实现DBNavigator中的“+”、“-”和“ⅴ”的功能?
- 一个pascal的问题。不要笑
- 别人的源程序要怎么看才能快速掌握它的编程思路!
- 点击web上的连接打开delphi窗口(我将我的可用分全部奉上)
- 为什么总是返回cursor not returned from query
- 请问delphi中有没有实现文件copy 的命令 ,
- 如何禁用shelllistview中选中一文件后的鼠标右键弹出菜单????谢谢。高分!!!!
- 请问:如何在QUICKREP报表中加入网格,谢谢!
画线:
self.Canvas.MoveTo(x1,y1);
self.Canvas.LineTo(x2,y2);
矩形填充颜色:
self.Canvas.FillRect(aRect);
完整过程:
procedure TForm1.FormPaint(Sender: TObject);
var aRect:TRect;
IFW,IFH:integer;
IGridCntX,IGridCntY:Integer;
IDeltaX,IDeltaY:integer;
Ix1,Ix2,Iy1,Iy2,i,j:Integer;
IPX,IPY:integer;
aColor:TColor;
begin
IFW:=700;//棋盘宽
IFH:=500;//棋盘高
IGridCntX:=100;//水平格数
IGridCntY:=100;//垂直格数
IDeltaX:=IFW div IGridCntX;//水平格宽
IDeltaY:=IFH div IGridCntY;//垂直格高 IFW:=IDeltaX * IGridCntX;//重整棋盘宽
IFH:=IDeltaY * IGridCntY;//重整棋盘高
self.Canvas.Pen.Color:=clBlue;//线条颜色
Iy1:=0;
Iy2:=IFH;
for i:=0 to IGridCntX do
begin
Ix1:=i*IDeltaX;
Ix2:=Ix1;
self.Canvas.MoveTo(Ix1,Iy1);
self.Canvas.LineTo(Ix2,Iy2);
end;
Ix1:=0;
Ix2:=IFW;
for j:=0 to IGridCntY do
begin
Iy1:=j*IDeltaY;
Iy2:=Iy1;
self.Canvas.MoveTo(Ix1,Iy1);
self.Canvas.LineTo(Ix2,Iy2);
end; self.Canvas.Brush.Color:=clRed;//格子颜色
i:=20;//第i列;
j:=30;//第j行;
IPX:=(i-1)*IDeltaX;
IPY:=(j-1)*IDeltaY;
aRect.Left:=IPX;
aRect.Top :=IPY;
aRect.Right:=aRect.Left+IDeltaX;
aRect.Bottom:=aRect.Top+IDeltaY;
self.Canvas.FillRect(aRect);
end;
我的做法是设置一个二维矩阵,整形,
每次落子时给矩阵赋值就行了。1=黑棋,2=白棋,0=没棋子。
访问矩阵不就方便多了?
至于矩阵的维数根据你棋盘的大小决定,很简单的我当时是用JAVA做的,我想在delphi里应该更简单吧?
Shift: TShiftState; X, Y: Integer);
var
col,row:integer;
begin
drawGrid1.MouseToCell(x,y,col,row);
form1.Caption:=intToStr(col)+' '+intToStr(row);
drawGrid1.Canvas.Brush.Style:=bsSolid;
drawGrid1.Canvas.Brush.Color:=clBlack;
drawGrid1.Canvas.Ellipse(drawGrid1.CellRect(col,row));
end;