意思是这样的:点击上图中工具栏第二个按钮(toolbutton按钮,意思是将要画的是一条直线),然后在image上通过鼠标拖动画一条直线,使其填充方格(如图所示)。各位高手帮帮忙,望您不吝赐一段完整的代码,需要多少分您说一下。如果能将图中工具栏其他的填充的代码说明一下就再给加分,工具栏中其他按钮的意思是要在image中画出正方形、椭圆等,并使其填充方格。
             殷切期待,望您不吝赐教!
               致
礼!

解决方案 »

  1.   

    看不到图
    是不是你另外一个贴中的问题呀,FillRect的问题,参数应该是Trect,不是坐标
      

  2.   

    明白了,就是那個貼裏RECT的問題啊。呵呵
      

  3.   

    哎,无奈了,记得我尿裤子了,呵呵。那位大哥大姐给我个邮箱我给您发张图,您帮我看看好吗?please~
      

  4.   

    难道还不行?bmp格式的可以吗?
      

  5.   

    你那個處理不少,你的RECT確定了沒有?
      

  6.   

    楼主你贴的是硬盘图。必须将图片放到网络上,例如CSDN的相册中,才能让大家都看到你的图片。
      

  7.   

    unit UnitMain;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, ComCtrls, ToolWin, ExtCtrls, Math;type
      TDrawMode=(dmNone,dmLine);
      TForm5 = class(TForm)
        Image1: TImage;
        ToolBar1: TToolBar;
        ToolButton1: TToolButton;
        ToolButton2: TToolButton;
        procedure Image1MouseDown(Sender: TObject; Button: TMouseButton;
          Shift: TShiftState; X, Y: Integer);
        procedure ToolButton2Click(Sender: TObject);
        procedure Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
          Y: Integer);
        procedure FormCreate(Sender: TObject);
        procedure Image1MouseUp(Sender: TObject; Button: TMouseButton;
          Shift: TShiftState; X, Y: Integer);
      private
        { Private declarations }
      public
        { Public declarations }
        DrawMode:TDrawMode;
        MouseDown:Boolean;
        DownX,DownY:Integer;
        procedure DrawGrid;
        procedure DrawGridLine(X1,Y1,X2,Y2:Integer);
      end;var
      Form5: TForm5;
      ForceColor:TColor=clBlack;
      BackColor:TColor=clWhite;
      GridSize:Integer=20;implementation{$R *.dfm}
    procedure TForm5.DrawGrid;
    var
      X,Y:Integer;
    begin
      with Image1, Canvas do
      begin
        Brush.Color:=BackColor;
        FillRect(ClientRect);
        Pen.Color:=ForceColor;
        X:=0;
        while X<Width do
        begin
          MoveTo(X,0);
          LineTo(X,Height);
          Inc(X, GridSize);
        end;
        Y:=0;
        while Y<Height do
        begin
          MoveTo(0,Y);
          LineTo(Width,Y);
          Inc(Y, GridSize);
        end;
      end;   
    end;
    procedure TForm5.DrawGridLine(X1, Y1, X2, Y2: Integer);
    var
      StepX,StepY:Double;
      DX,DY:Double;
      Step:Integer;
    begin
      DrawGrid;
      X1:=X1 div GridSize;
      Y1:=Y1 div GridSize;
      X2:=X2 div GridSize;
      Y2:=Y2 div GridSize;  Step:=Max(Abs(X2-X1),Abs(Y2-Y1));
      with Image1,Canvas do
      begin
        DX:=X1;
        DY:=Y1;
        if Step<1 then
        begin
          Rectangle(Round(DX)*GridSize,Round(DY)*GridSize,Round(DX)*GridSize+GridSize,Round(DY)*GridSize+GridSize);
          Exit;
        end;
        StepX:=(X2-X1)/Step;
        StepY:=(Y2-Y1)/Step;
        Brush.Color:=ForceColor;
        Rectangle(Round(DX)*GridSize,Round(DY)*GridSize,Round(DX)*GridSize+GridSize,Round(DY)*GridSize+GridSize);
        DX:=DX+StepX;
        DY:=DY+StepY;
        while (Abs(X2-DX)>0.4) or (Abs(Y2-DY)>0.4) do
        begin
          Rectangle(Round(DX)*GridSize,Round(DY)*GridSize,Round(DX)*GridSize+GridSize,Round(DY)*GridSize+GridSize);
          DX:=DX+StepX;
          DY:=DY+StepY;
        end;
      end;
    end;procedure TForm5.FormCreate(Sender: TObject);
    begin
      DrawGrid;
    end;procedure TForm5.Image1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
      if not MouseDown then
      begin
        case DrawMode of
          dmNone: ;
          dmLine:
          begin
            MouseDown:=True;
            DownX:=X;
            DownY:=Y;
          end;
        end;
      end
      else
      begin
        case DrawMode of
          dmNone:;
          dmLine:
          begin
            MouseDown:=False;
            DrawMode:=dmNone;
          end;
        end;
      end;end;procedure TForm5.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    begin
      if MouseDown then
      begin
        case DrawMode of
          dmNone: ;
          dmLine:
          begin
            DrawGridLine(DownX,DownY,X,Y);
          end;
        end;
      end;
    end;procedure TForm5.Image1MouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
      MouseDown:=False;
    end;procedure TForm5.ToolButton2Click(Sender: TObject);
    begin
      DrawMode:=dmLine;
    end;end.