项目里用到了TMS的工控控件TMS Instrumentation Workshop ,其中TVrScope简单波形显示控件的波形显示老是不理想,程序里怎么设置也不对,只好看控件源码了,创建显示点的函数procedureTVrScope.CreateGraph;调用了取显示值函数functionTVrScope.GetPlotValue(var S: string): Integer;
functionTVrScope.GetPlotValue(var S: string): Integer; var P: Integer; begin Result := 0; P := StrToInt(Copy(S, 1, Fixed)); Delete(S, 1, Fixed); //Result := SolveForY(P - FMinValue, FMaxValue - FMinValue); //Result := Height - SolveForX(Result, Height); if FMaxValue <> FMinValue then Result := Height -Round(Height*P/(FMaxValue-FMinValue)) - 1; if Result < 0 then Result := 0; end;
原来的取点方法只适用于固定的Min和Max的情况,程序里因为显示波形的控件高度只有50,而要显示的数据范围比较大,只能动态设置Min和Max。
functionTVrScope.GetPlotValue(var S: string): Integer; var P: Integer; begin Result := 0; P := StrToInt(Copy(S, 1, Fixed)); Delete(S, 1, Fixed); //Result := SolveForY(P - FMinValue, FMaxValue - FMinValue); //Result := Height - SolveForX(Result, Height); //这里修改 //if FMaxValue <> FMinValue then // Result := Height -Round(Height*P/(FMaxValue-FMinValue)) - 1; if FMaxValue <> FMinValue then Result:=Round(Height /(FMaxValue-FMinValue) *(FMaxValue - P))+1; if Result < 0 then Result := 0; end;
这样显示才对。
这个控件要显示的一系列值是用一个字符串缓存的,每个值默认存为10个长度字符。取出后删除10个字符,新值增加10个字符,还有StrToInt()和IntToStr(),
这样的效率?