想用API函数在ScrollBox上画直线,简单的代码如下:var mPoint:PPoint;tmp:TPoint;tmp.X :=0;tmp.Y:=0;
mPoint:=@tmp;
scrollbox.Color :=clwhite;
movetoex(scrollbox.Handle,0,0,mPoint);
lineto(scrollbox.Handle ,200,300);
lineto(scrollbox.Handle ,300,400);但是就是不见有直线出现,不知是何原因,哪位用过这种方法作图的朋友可否给点建议?立即给分!
期待中......

解决方案 »

  1.   

    procedure TForm1.BitBtn1Click(Sender: TObject);
    var
      mPoint:PPoint;
      tmp:TPoint;
      DC: HDC;
    begin
      tmp.X := 0;
      tmp.Y := 0;
      mPoint := @tmp;
      scrollbox.Color := clwhite;
      ScrollBox.Repaint;
      DC := GetDC(scrollbox.Handle);
      try
        movetoex(DC, 0, 0, mPoint);
        lineto(DC, 200, 300);
        lineto(DC, 300, 400);
      finally
        DeleteDC(DC);
      end;
    end;
      

  2.   

    DeleteDC(DC);应该改为
    ReleaseDC(DC);
      

  3.   

    blazingfire(烈焰)(对.net极度憎恨中....) 所言极是!!我已经试过,这样是可以在ScrollBox上作图的。不知可不可以在两个不同的控件上用这样的方法画直线?比如,在ScollBox中有一个Panel,可否从Panel上任意一点画到ScrollBox上的任意一点?我用了下面的代码(好像不行,结果都是在Panel上作图了,ScrollBox上没有直线):var mPoint:PPoint;
        tmp:TPoint;
        DC1,DC2: HDC;begin
    tmp.X :=0;tmp.Y:=0;
    mPoint:=@tmp;
    scrollbox.Repaint ;
    MyPanel.Repaint ;
    DC1 := GetDC(scrollbox.Handle);
    DC2:=GetDC(MyPanel.Handle);
    try
    movetoex(DC1,0,0,mPoint);
    lineto(DC1,20,30);
    lineto(DC2,30,40);
    finally
    ReleaseDC(scrollbox.Handle,DC1);
    ReleaseDC(MyPanel.Handle,DC2);
    end;
    end;
      

  4.   

    是这样的,你在ScrollBox上放的Panel把ScrollBox上的线给挡住了:)
    另外还有一点呀
    scrollbox.Repaint ;
    要去掉,因为这个是ScrollBox重画这里没有必要的
    我那里用是因为之前有
    scrollbox.Color := clwhite;这一句要重画一下子
    不能误人子弟。^_^
      

  5.   

    ScrollBox是比Panel大很多的。
    从ScrollBox的左上角(0,0)画到Panel的(10,10),结果是在Panel的(0,0)到(10,10)有一条直线,ScrollBox上什么也没有,也不存在Panel把ScrollBox上的线挡住了的问题呀,因为至少从ScrollBox的左上角到Panel的边缘应该有条直线的吧??
      

  6.   

    还有:用API函数在ScrollBox上画的直线,在窗体最小化后,然后再最大化窗口就没有了?这是怎么回事呢?不知哪位有相关经验的朋友给个建议..........
      

  7.   

    movetoex(scrollbox.Handle,0,0,mPoint);
    楼主真是粗心的可以
    scrollbox.Handle是HWND啊,不是HDC啊。怎么可能画的出图来,