如何在ScrollBox控件中加入标尺,可以设定标尺的度量单位(英寸、毫米、像素等),可以放大缩小,不要第三方控件。

解决方案 »

  1.   

    难道是要量距,量角?是不是医学图像DICOM3?
      

  2.   

    to bdmh
    能否说的详细点,或给个思路。
      

  3.   

    使用canvas中的方法,自己画了。
      

  4.   

    ScrollBar+Panel;
    自己画了,给你帖个应用中的代码
    (1)
      FOldBottomProc := pnlBottom.WindowProc;
      pnlBottom.WindowProc := NewDrawBottomPanelProc;(2)
    procedure TFrmSendTaskGraphView.NewDrawBottomPanelProc(var Message: TMessage);
    var
     i,j,UnitWidth,UnitSecond,TmpSecond,TmpWidth:Integer;
     TmpDC:HDC;
     XOffSet,YOffSet:Integer;
     MyCvs:TCanvas;
     ClientRect:TRect;
    begin
      FOldBottomProc(Message);
      GetUnitWidthAndSecond(UnitWidth,UnitSecond);  XOffSet:=2;
      YOffSet:=2;
      if (Message.Msg = WM_PAINT) then
      begin
        ClientRect := pnlBottom.ClientRect;
        MyCvs:=TCanvas.Create;
        MyCvs.Handle:=GetDC(pnlBottom.Handle);//这句主要
        MyCvs.Brush.Color:=TColor($3C3C3C);
        MyCvs.FillRect(ClientRect);
        MyCvs.Pen.Color := clWhite;
        MyCvs.Pen.Style := psSolid;
        MyCvs.Pen.Width := 1;    MyCvs.Font.Color := clWhite;
        MyCvs.Font.Size  := 7;    myCvs.LineTo(0,0);
        myCvs.LineTo(ClientRect.Right,0);    i:=0;
        j:=3600*6+
          Round((HScrollBar.Position*100/TaskBar_WidthOneSecond)/ FSimpleGraph.ZoomX);
        if (j mod 60) <> 0 then
        begin
          TmpSecond:= 60- (j mod 60);
          TmpWidth:= MulDiv(Round(TmpSecond*TaskBar_WidthOneSecond),FSimpleGraph.ZoomX,100);
          j:= j+ TmpSecond;
          i:= i+TmpWidth;
        end;    while i<ClientRect.Right do
        begin
          MyCvs.MoveTo(i,0);
          if (j mod 60)=0 then
          begin
            MyCvs.LineTo(i,6);
            MyCvs.TextOut(i,6,
              format('%2.2d',[j div 3600])+':'+
              format('%2.2d',[(j mod 3600)div 60])+':'+
              format('%2.2d',[j mod 60]));
          end
          else
            MyCvs.LineTo(i,4);
          Inc(i,UnitWidth);
          Inc(j,UnitSecond);
        end;    ReleaseDC(pnlBottom.Handle,MyCvs.Handle);
        MyCvs.Free;
      end;
    end;