image.canvas.moveto(x1,y1)
image.canvas.lineto(x2,y2)
x1,x2,y1,y2都是integer,canvas有没有使用real类型参数的函数?
还有,我想在canvas上画一条6.25厘米的线,应该如何实现?

解决方案 »

  1.   

    我的情况是:想要在image上模拟画出以6.25厘米为模的对数坐标,并在上边描点连线,高人有好方法吗?请指教,急用,分不够可以再加
      

  2.   

    我不太清楚你的意思什么是以6.25厘米为模的对数坐标,并在上边描点连线
    6厘米好粗啊,你画那么粗的线做什么啊?因为各人的情况比较特殊,
    所以描述一定要清楚,让人明白啊.不过我还是做了个例字,你可参考一下,
    但不一定刚好是6.25厘米,function TForm1.CMToPixel(CM: Double): Integer;
    var
      p: TPoint;
    begin
      SetMapMode(Canvas.Handle, MM_HIMETRIC);
      p := Point(Round(CM * 1000), 0);
      LPToDP(Canvas.Handle, p, 1);
      Result := p.X;
      SetMapMode(Canvas.Handle, MM_TEXT);
    end;procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
      Drawing := true;
      Temx:= x;
      Temy:= y;
      Image1.Canvas.MoveTo(temx,temy);
    end;procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
      var i : integer;
    begin
      if Drawing then
      begin    i:= Round(CMToPixel(6.25));    Image1.Canvas.Brush.Style  :=bsCross ;    Image1.Canvas.Pen.Style  := psDot;
        Image1.Canvas.Pen.Mode := pmNotXor;
            Image1.Canvas.FillRect(Rect(x,y,x+i,y+i));
        Image1.Canvas.LineTo(x,y);  end;
    end;procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
      Drawing := false;
    end;
      

  3.   


      |
      |
      |
      -------------------------------------------->log10
      1       10       100       1000
      

  4.   

    你可以看看“Delphi5开发人员指南”的屏幕坐标和窗口坐标之间的象素转换的例子,它对你会有帮助!