每次点击image都是白的,没有图案

解决方案 »

  1.   

    额,因为你是在image的Canvas上直接画了,然后实际Image的Picture是空的!所以一刷新就没了,你应该创建一个TBitmap,然后Bmp.SetSize(Image.width,Image.Height),然后再bmp.Canvas上绘制处理,处理完成之后,Image.Picture.assig(bmp),然后就可以显示了!
      

  2.   

    procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    var
      Image:TImage;
      BMP:TBitmap;
    begin
      Image:=TImage.Create(nil);
      Image.parent :=Self;  BMP.Height:=10;
      BMP.Width:=10;
      BMP.Canvas.Pen.Color:=clRed;
      BMP.Canvas.Pen.Width:=2;
      BMP.Canvas.MoveTo(X,Y);
      BMP.Canvas.LineTo(X+10,Y-80);  Image.Picture.Assign(BMP);
      Image.Show;
      Image.Left := x;
      Image.Top := y;
    end;
    { tedit1 }
    procedure TForm1.FormDestroy(Sender: TObject);
    var
      i:integer;
    begin
      try
        for i:=0 to self.ComponentCount-1 do
        begin
          if self.Components[i] is TImage then
           TImage(self.Components[i]).Free;
        end;
      except
        exit;
      end;
    end;end.
      

  3.   

    procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    var
      Image:TImage;
      BMP:TBitmap;
    begin
      Image:=TImage.Create(nil);
      Image.parent :=Self;
      BMP:=TBitmap.Create;
      BMP.Height:=Image.Height;
      BMP.Width:=Image.Width;  BMP.Canvas.Pen.Color:=clRed;
      BMP.Canvas.Pen.Width:=2;
      BMP.Canvas.Pen.Mode:=pmNot;
      BMP.Canvas.MoveTo(X,Y);
      BMP.Canvas.LineTo(X,Y+80);
      
      Image.Picture.Assign(BMP);
      Image.Show;
      Image.Left := x;
      Image.Top := y;
    end;
    { tedit1 }
    procedure TForm1.FormDestroy(Sender: TObject);
    var
      i:integer;
    begin
      try
        for i:=0 to self.ComponentCount-1 do
        begin
          if self.Components[i] is TImage then
           TImage(self.Components[i]).Free;
        end;
      except
        exit;
      end;
    end;end.
      

  4.   

    你直接拖一个TImage到窗体上 在FormCreate中写
    procedure TForm1.FormCreate(Sender: TObject);
    begin
        Image1.Canvas.LineTo(10,10);
        Image1.Canvas.MoveTo(50,50);
    end;看看这样行不行吧  你之前的代码没什么问题 XP系统上可以绘出直线
      

  5.   

    var
      img: TImage;
    begin
     img := TImage.Create(Form1);
     img.Parent := Form1;
     img.Transparent := true;
     img.Left := X;
     img.Top := Y;
     img.Canvas.Pen.Color := clred;
     img.Canvas.Pen.Mode := pmnot;
     img.Canvas.MoveTo(2,2);
     img.Canvas.LineTo(2,10);
     img.Show;end;
      

  6.   

     img.Canvas.MoveTo(2,2);
     img.Canvas.LineTo(2,10); 这里的坐标是相对坐标了不能再使用X,Y要做转换
      

  7.   

    procedure TForm3.FormMouseDown(Sender: TObject; Button: TMouseButton; Shift:
        TShiftState; X, Y: Integer);
    var
      Image:TImage;
      BMP:TBitmap;
    begin
      Image:=TImage.Create(Self);
      Image.parent :=Self;
      Image.Show;
      BMP:=TBitmap.Create;
      BMP.Height:=50;
      BMP.Width:=50;  BMP.Canvas.Pen.Color:=clRed;
      BMP.Canvas.Pen.Width:=2;
      BMP.Canvas.MoveTo(10,10);
      BMP.Canvas.LineTo(20,40);
      Image.Picture.Assign(BMP);
      Image.Left := x;
      Image.Top := y;
      BMP.Free;
      Image.Refresh;
    end;
      

  8.   

    为啥不在Form上直接画,在form上直接画很难么?
      

  9.   

    谢谢你的回答,请问加载这些相同的image,怎么对不同的image操作,比如我想让第一个是这个过程,另外一个是那个过程
      

  10.   

    谢谢你的回答,请问加载这些相同的image,怎么对不同的image操作,比如我想让第一个是这个过程,另外一个是那个过程“是这个过程” 是什么意思? 说仔细点啊
      

  11.   

    谢谢你的回答,请问加载这些相同的image,怎么对不同的image操作,比如我想让第一个是这个过程,另外一个是那个过程“是这个过程” 是什么意思? 说仔细点啊
    就是说我随机加载几个image,我怎么区别这些image,这些image又没有序号。
      

  12.   

    你不会把生成的Image保存到ObjectList里面么?
      

  13.   


    就比如上图我加载两个image, 我想让它们之间连线 第一个image的中点连到第二个image的中点,这不就要区分这两个image不一样了
      

  14.   


    怎么保存,谢谢,我是刚学习delphi的,麻烦你了
      

  15.   

    实现代码:
    1、新建工程,在Formk,加一个TButton,一个TEDit。
    2、FormMouseUp事件
    procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    var
      MyImage : TImage;
      Path:string;
      iWidth:integer;
    begin
      iWidth:=strtoint(Edit1.text);   //大小自己定
      MyImage := TImage.Create(nil);
      with MyImage do
      begin
        Parent := Form1; // 如果没有这句,新创建的myShape将不会显示在窗体上
        Left := X;
        Top := Y;
        Width := iWidth;
        Height := iWidth;
        Canvas.Pen.Width:=3;              // 边框宽度 3
        Canvas.Pen.Color:=clRed;          // 画笔颜色:红
        canvas.Brush.color:=clYellow;     // 填充色:黄
        Canvas.Pen.Mode:=pmCopy;          // 系统默认的模式,可写可不写
        Canvas.Rectangle(0,0,iWidth,iWidth);// 画方框
        Visible:=True;
      end;
    end;3、FormDestroy事件
    procedure TForm1.FormDestroy(Sender: TObject);
    var i:integer;
    begin
      try
        for i:=self.ComponentCount-1 downto 0 do
        begin
          if self.Components[i] is TButton then
            self.Components[i].Free;
        end;
      except
        exit;
      end;
    end;4、Button1Click事件
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      close;
    end;5、编译执行,见下图。在Edit1中分别输入不同的值,可以创建Image,并在Image中画出方框。