iocom官方只支持到D7,但是可以运用于新版本,只测试过显示运用,没测试过OPC特性(这个在新版本运用中估计有问题)。
但是在新版本运用中还有有一些小BUG,比如:
TiKnob也发现BUG。
在10.4中拖入一个TiKnob,发现"Indicator"没有显示出来,
修改
Delphi
procedure TiKnob.DrawIndicator(Canvas: TCanvas; const CenterPoint: TPoint);
var
InnerPoint : TPoint;
OuterPoint : TPoint;
IndicatorCenterPoint : Tpoint;
IndicatorRect : TRect;
IndicatorDegrees : Double;
PointerEndPoint : TPoint;
PointerBasePoint : TPoint;
Point1 : TPoint;
Point2 : Tpoint;
begin
IndicatorDegrees := RotationStartDegrees - PositionDegrees;
//with Canvas, IndicatorRect do
with Canvas do
begin
Brush.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 end
else begin Pen.Color := FIndicatorInactiveColor; Brush.Color := FIndicatorInactiveColor; end;
case FIndicatorStyle of
ikisDotLowered : begin
Ellipse(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 : begin
Ellipse(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 : begin
Ellipse(IndicatorRect.Left, IndicatorRect.Top, IndicatorRect.Right, IndicatorRect.Bottom);
end;
ikisLineCenter : begin
OuterPoint:=GetXYRadPoint(IndicatorDegrees,FKnobRadius-FIndicatorMargin,CenterPoint);
PolyLine([OuterPoint, CenterPoint]);
end;
ikisLineCustom : begin
OuterPoint:=GetXYRadPoint(IndicatorDegrees,FKnobRadius-FIndicatorMargin, CenterPoint);
InnerPoint:=GetXYRadPoint(IndicatorDegrees,FKnobRadius-FIndicatorMargin-FIndicatorSize,CenterPoint);
PolyLine([OuterPoint, InnerPoint]);
end;
ikisTriangle : begin
PointerEndPoint :=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属性引起的。
重新编译(不用重新安装),正常 。
估计其它控件也有类似的问题,一般照此修改就可以。