箭头显示问题"/>
修正TiKnob的指示箭头显示问题
iocom官方只支持到D7,但是可以运用于新版本,只测试过显示运用,没测试过OPC特性(这个在新版本运用中估计有问题)。
但是在新版本运用中还有有一些小BUG,比如:
修正TiAnlogDisplay显示的问题-CSDN博客
TiKnob也发现BUG。
在10.4中拖入一个TiKnob,发现“Indicator”没有显示出来,
修改
procedure TiKnob.DrawIndicator(Canvas: TCanvas; const CenterPoint: TPoint);
varInnerPoint : TPoint;OuterPoint : TPoint;IndicatorCenterPoint : Tpoint;IndicatorRect : TRect;IndicatorDegrees : Double;PointerEndPoint : TPoint;PointerBasePoint : TPoint;Point1 : TPoint;Point2 : Tpoint;
beginIndicatorDegrees := RotationStartDegrees - PositionDegrees;//with Canvas, IndicatorRect dowith Canvas dobeginBrush.Style := bsSolid;IndicatorCenterPoint := GetXYRadPoint(IndicatorDegrees, FKnobRadius - FIndicatorMargin - FIndicatorSize, CenterPoint);IndicatorRect := Rect(IndicatorCenterPoint.x - FIndicatorSize,IndicatorCenterPoint.y - FIndicatorSize,IndicatorCenterPoint.x + FIndicatorSize,IndicatorCenterPoint.y + FIndicatorSize);if FMouseDown or FKeyDown then begin Pen.Color := FIndicatorActiveColor; Brush.Color := FIndicatorActiveColor endelse begin Pen.Color := FIndicatorInactiveColor; Brush.Color := FIndicatorInactiveColor; end;case FIndicatorStyle ofikisDotLowered : beginEllipse(IndicatorRect.Left, IndicatorRect.Top, IndicatorRect.Right, IndicatorRect.Bottom);Pen.Color := clGray; Arc(IndicatorRect.Left, IndicatorRect.Top, IndicatorRect.Right, IndicatorRect.Bottom, IndicatorRect.Right, IndicatorRect.Top, IndicatorRect.Left, IndicatorRect.Bottom);Pen.Color := clWhite; Arc(IndicatorRect.Left, IndicatorRect.Top, IndicatorRect.Right, IndicatorRect.Bottom, IndicatorRect.Left , IndicatorRect.Bottom, IndicatorRect.Right, IndicatorRect.Top);end;ikisDotRaised : beginEllipse(IndicatorRect.Left, IndicatorRect.Top, IndicatorRect.Right, IndicatorRect.Bottom);Pen.Color := clWhite; Arc(IndicatorRect.Left, IndicatorRect.Top, IndicatorRect.Right, IndicatorRect.Bottom, IndicatorRect.Right, IndicatorRect.Top, IndicatorRect.Left, IndicatorRect.Bottom);Pen.Color := clGray; Arc(IndicatorRect.Left, IndicatorRect.Top, IndicatorRect.Right, IndicatorRect.Bottom, IndicatorRect.Left, IndicatorRect.Bottom, IndicatorRect.Right, IndicatorRect.Top);end;ikisDot : beginEllipse(IndicatorRect.Left, IndicatorRect.Top, IndicatorRect.Right, IndicatorRect.Bottom);end;ikisLineCenter : beginOuterPoint:=GetXYRadPoint(IndicatorDegrees,FKnobRadius-FIndicatorMargin,CenterPoint);PolyLine([OuterPoint, CenterPoint]);end;ikisLineCustom : beginOuterPoint:=GetXYRadPoint(IndicatorDegrees,FKnobRadius-FIndicatorMargin, CenterPoint);InnerPoint:=GetXYRadPoint(IndicatorDegrees,FKnobRadius-FIndicatorMargin-FIndicatorSize,CenterPoint);PolyLine([OuterPoint, InnerPoint]);end;ikisTriangle : beginPointerEndPoint :=GetXYRadPoint(IndicatorDegrees,FKnobRadius-FIndicatorMargin, CenterPoint);PointerBasePoint:=GetXYRadPoint(IndicatorDegrees,FKnobRadius-FIndicatorMargin-FIndicatorSize,CenterPoint);Point1 := GetXYRadPoint(IndicatorDegrees + 90, FIndicatorSize/2, PointerBasePoint);Point2 := GetXYRadPoint(IndicatorDegrees - 90, FIndicatorSize/2, PointerBasePoint);Polygon([Point1, Point2, PointerEndPoint]);end;end;end;
end;
是由于Canvas和IndicatorRect都有Left和Top属性引起的。
重新编译(不用重新安装),正常 。
估计其它控件也有类似的问题,一般照此修改就可以。
更多推荐
修正TiKnob的指示箭头显示问题
发布评论