我想画一个100*100的网格,是要在指定的行和列中加入颜色。简单的说就像写一个五子棋的棋盘吧!我要知道某一个方格中是否有棋子一样!

解决方案 »

  1.   

    凡是有Canvas属性的都可以画各种图形。
    画线:
      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;
      

  2.   

    很简单的,就是画棋格,然后画棋子,要分开画,canvas就可以要判断是否有棋子最好不要根据你画的棋盘,
    我的做法是设置一个二维矩阵,整形,
    每次落子时给矩阵赋值就行了。1=黑棋,2=白棋,0=没棋子。
    访问矩阵不就方便多了?
    至于矩阵的维数根据你棋盘的大小决定,很简单的我当时是用JAVA做的,我想在delphi里应该更简单吧?
      

  3.   

    使用Additional里的DrawGrid控件,正是做这个的。
      

  4.   

    TImage不行吗?我觉的很不错阿
      

  5.   

    procedure TForm1.DrawGrid1MouseUp(Sender: TObject; Button: TMouseButton;
      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;
      

  6.   

    呵呵,这东西俺做过,直接在TCanvas对象上画就可以了