亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? sgr_scale.pas

?? 圖形控件,畫實時曲線,等操作方便
?? PAS
?? 第 1 頁 / 共 2 頁
字號:
unit sgr_scale;
{(c) S.P.Pod'yachev 1998-2001}
{ver. 2.4   8.02.2001}
{***************************************************}
{ Auxiliary persistent objects for using            }
{ in components with scale and axis                 }
{***************************************************}
interface
uses
  Windows, Messages, SysUtils, Classes, Graphics;
Type
Tsp_CustomLineAttr=class(TPersistent)
private
 fColor:TColor;
 fStyle:TPenStyle;
 fWidth:word;
 fMode:TPenMode;
 fVisible:boolean;
 fOnChange:TNotifyEvent;
 procedure SetColor(const V:TColor);
 procedure SetStyle(const V:TPenStyle);
 procedure SetWidth(const V:word);
 procedure SetMode(const V:TPenMode);
 procedure SetVisible(const V:boolean);
protected
 procedure Changed; virtual;
public
 constructor Create;
 procedure Assign(Source: TPersistent); override;
 procedure AssignTo(Dest: TPersistent); override;
 procedure SetPenAttr(const APen:TPen);
 property Color:TColor read fColor write SetColor;
 property Style:TPenStyle read fStyle write SetStyle;
 property Width:word read fWidth write SetWidth;
 property Mode:TPenMode read fMode write SetMode;
 property Visible:boolean read fVisible write SetVisible;
 property OnChange: TNotifyEvent read FOnChange write FOnChange;
end;
Const
dblDfltAxisMin=0.0; dblDfltAxisMax=10.0;
Type
Tsp_LineAttr=class(Tsp_CustomLineAttr)
public
function IsSame(const LA:Tsp_CustomLineAttr):boolean;
published
 property Color;
 property Style default psSolid;
 property Width default 1;
 property Visible;
end;
Const
 MaxTicksCount=21;
 fbposVertical=0;
 fbposInversed=1;
 fbposNegMetr=2; 
 fbposNoTicks=3; 
 fbposNoTicksLabel=4;
 fbposRevertTicks=5; 
 fbposAutoMin=6;     
 fbposAutoMax=7;
 fbposLabelAsDate=8; 
 fbposNotAjustedTicks=9;
 sdfVertical=1 shl fbposVertical;
 sdfInversed=1 shl fbposInversed;
 sdfNegMetr=1 shl fbposNegMetr;
 sdfNoTicks=1 shl fbposNoTicks;  
 sdfNoTicksLabel=1 shl fbposNoTicksLabel;
 sdfRevertTicks=1 shl fbposRevertTicks;  
 sdfLabelAtTop=sdfRevertTicks; 
 sdfLabelOnRight=sdfRevertTicks;
 sdfAutoMin=1 shl fbposAutoMin; 
 sdfAutoMax=1 shl fbposAutoMax;
 sdfLabelAsDate=1 shl fbposLabelAsDate;
 sdfNotAjustedTicks=1 shl fbposNotAjustedTicks;
Type
Tsp_Scale = class(TPersistent)
private
 IMin, IMax : double;
 IntFactor : double; 
 IStep:integer;      
 rTksCount: Byte;    
 fOPos:integer;      
 fOVal   : double;   
 fM: Double;         
 procedure ReadFlags(Reader: TReader);
 procedure WriteFlags(Writer: TWriter);
 procedure ReadLinePos(Reader: TReader);
 procedure WriteLinePos(Writer: TWriter);
 procedure ReadMin(Reader: TReader);
 procedure WriteMin(Writer: TWriter);
 procedure ReadMax(Reader: TReader);
 procedure WriteMax(Writer: TWriter);
 function  GetVisible:boolean;
 function  GetOX: integer;  //2.4 add for C++
 function  GetOY: integer;  
protected
 fFlags:integer;  
 fO:TPoint;       
 fLen:integer;    
 fTicksCount:Byte;
 fLabelFormat: string;  
 fLineAttr:Tsp_LineAttr;
 fMin, fMax: double;    
 fInterval: double;     
 fTksPos: array [0..MaxTicksCount-1] of smallInt; 
 fTksDbl: array [0..MaxTicksCount-1] of double;   
 function TksDbl(i:integer):double;               
 procedure DefineProperties(Filer: TFiler); override;
 procedure FixMinMax(Mi,Ma:double);
 procedure CalcMetr;
 procedure CalcTicksVal;
 procedure CalcTicksPos;
 procedure ShiftScaleBy(pixel:boolean; idelta:double; fdelta:double);
 function  TickLabel(tickNum:integer): string; virtual;
 function  GetTicksCount:byte;
 procedure SetFlagBit(const BN:integer; const On:boolean);
 procedure ReSetFlagBit(const BN:integer; const Off:boolean);
 function  GetFlagBit(const BN:integer):boolean;
 function  NotFlagBit(const BN:integer):boolean;
 procedure FlagsChanged(const BN:integer; const On:boolean); virtual;
public
 constructor Create(Flags:integer);
 destructor Destroy; override;
 function BandWidth(FntWidth, FntHeight:integer):integer;
 function OrgIndent(FntWidth, FntHeight:integer):integer;
 function EndIndent(FntWidth, FntHeight:integer):integer;
 function CalcDrawBounds(fCanvas:TCanvas):TRect;
 procedure DrawLine(fCanvas:TCanvas; odec, einc:word);
 procedure DrawTicks(fCanvas:TCanvas);
 procedure SetLine(oX, oY, lLen:integer);
 procedure ChangeMinMax(aMin,aMax:double);
 procedure ScrollBy(delta:integer);
 function V2P(const V:double):integer;
 function P2V(const V:integer):double;
 property OPos:integer read fOPos;
 property OVal:double  read fOVal;
 property SM:double read fM;
 property Visible: boolean read GetVisible;
 property OX:integer read GetOX;
 property OY:integer read GetOY;
 property Len:integer read fLen;
 property NoTicks:boolean index fbposNoTicks read GetFlagBit
                                               write SetFlagBit stored False;
published
 property Inversed:boolean index fbposInversed read GetFlagBit
                                                write SetFlagBit stored False;
 property NoTicksLabel:boolean index fbposNoTicksLabel read GetFlagBit
                                               write SetFlagBit stored False;
 property TicksAdjusted:boolean index fbposNotAjustedTicks read NotFlagBit
                                               write ReSetFlagBit stored False;
 property TicksLines:boolean index fbposNoTicks read NotFlagBit
                                               write ReSetFlagBit stored False;
end;
IMPLEMENTATION
procedure Tsp_CustomLineAttr.Changed;
begin
 if Assigned(fOnChange) then fOnChange(Self);
end;
procedure Tsp_CustomLineAttr.SetColor(const V:TColor);
begin
 if V<>fColor then fColor:=V;
 Changed;
end;
procedure Tsp_CustomLineAttr.SetStyle(const V:TPenStyle);
begin
 if V<>fStyle then fStyle:=V;
 Changed;
end;
procedure Tsp_CustomLineAttr.SetWidth(const V:word);
begin
 if V<>fWidth then fWidth:=V;
 Changed;
end;
procedure Tsp_CustomLineAttr.SetVisible(const V:boolean);
begin
 if V<>fVisible then fVisible:=V;
 Changed;
end;
procedure Tsp_CustomLineAttr.SetMode(const V:TPenMode);
begin
 if V<>fMode then fMode:=V;
 Changed;
end;
constructor Tsp_CustomLineAttr.Create;
begin
 inherited Create;
 fOnChange:=nil;
 fColor:=clBlack;
 fStyle:=psSolid;
 fWidth:=1;
 fVisible:=True;
end;
procedure Tsp_CustomLineAttr.Assign(Source: TPersistent);
var ss:Tsp_CustomLineAttr;
begin
 if Source is Tsp_CustomLineAttr then
 begin
   ss:=Tsp_CustomLineAttr(Source);
   fColor:=ss.fColor;
   fStyle:=ss.fStyle;
   fWidth:=ss.fWidth;
   fVisible:=ss.fVisible;
 end else inherited Assign(Source);
end;
procedure Tsp_CustomLineAttr.AssignTo(Dest: TPersistent);
begin
 if Dest is Tsp_CustomLineAttr then Dest.Assign(Self)
 else inherited AssignTo(Dest);
end;
procedure Tsp_CustomLineAttr.SetPenAttr(const APen:TPen);
begin
 with APen do begin
  Color:=fColor;
  Style:=fStyle;
  Width:=fWidth;
  Mode:=pmCopy;
 end;
end;
function Tsp_LineAttr.IsSame(const LA:Tsp_CustomLineAttr):boolean;
begin
 with LA do
 Result:=(fColor= Color) and (fStyle= Style) and
         (fWidth= Width) and (fVisible= Visible);
end;
Const
 Ln10=2.30258509299405;
 sdfLineOnly=sdfNoTicks or sdfNoTicksLabel;
function Floor(x:double):double;
begin
 if Frac(x)<0 then Result:=Int(x)-1 else Result:=Int(x);
end;
function Ceil(x:double):double;
begin
 if Frac(x)>0 then Result:=Int(x)+1 else Result:=Int(x);
end;
procedure Tsp_Scale.ReadFlags(Reader: TReader);
begin
 fFlags:=Reader.ReadInteger;
end;
procedure Tsp_Scale.ReadLinePos(Reader: TReader);
begin
 with Reader do begin
   ReadListBegin;
   fO.x:=ReadInteger; fO.y:=ReadInteger; fLen:=ReadInteger;
   ReadListEnd;
 end
end;
procedure Tsp_Scale.ReadMin(Reader: TReader);
begin
 fMin:=Reader.ReadFloat;
end;
procedure Tsp_Scale.ReadMax(Reader: TReader);
begin
 ChangeMinMax(fMin,Reader.ReadFloat);                   
end;
procedure Tsp_Scale.WriteFlags(Writer: TWriter);
begin
 Writer.WriteInteger(fFlags)
end;
procedure Tsp_Scale.WriteLinePos(writer: TWriter);
begin
 with Writer do begin
  WriteListBegin;
  WriteInteger(fO.x);
  WriteInteger(fO.y);
  WriteInteger(fLen);
  WriteListEnd;
 end;
end;
procedure Tsp_Scale.WriteMin(Writer: TWriter);
begin
 Writer.WriteFloat(fMin)
end;
procedure Tsp_Scale.WriteMax(Writer: TWriter);
begin
 Writer.WriteFloat(fMax)
end;
function Tsp_Scale.GetVisible:boolean;
begin
 Result:=((fFlags and sdfLineOnly)<>sdfLineOnly) or fLineAttr.Visible;
end;
function Tsp_Scale.GetOX: integer; 
 begin Result := fO.x;
end;
function Tsp_Scale.GetOY: integer;
 begin Result := fO.y;
end;
function Tsp_Scale.TksDbl(i:integer):double;                        
begin
 if (fFlags and sdfNotAjustedTicks)=0 then Result:=fTksDbl[i]
 else if (fFlags and sdfInversed)=0 then Result:=fOVal+fInterval*fTksDbl[i]
      else Result:=fOVal-fInterval*fTksDbl[i];
end;
procedure Tsp_Scale.DefineProperties(Filer: TFiler);
begin
  inherited DefineProperties(filer);
  Filer.DefineProperty('SFlags', ReadFlags, WriteFlags, True);
  Filer.DefineProperty('SLinePos', ReadLinePos, WriteLinePos, True);
  Filer.DefineProperty('fMin', ReadMin, WriteMin, fMin<>dblDfltAxisMin);
  Filer.DefineProperty('fMax', ReadMax, WriteMax, True);
end;
procedure Tsp_Scale.FixMinMax(Mi,Ma:double);
var  DecmlPos:integer;
begin
 if Mi>Ma then begin fMin:=Ma; fMax:=Mi end
 else begin fMin:=Mi; fMax:=Ma end;
 if fMin=fMax then begin
   if abs(fMax)<10 then begin
     fMax:=fMax+1; fMin:=fMax-1
   end else begin
     fMax:=fMax+abs(fMax)/10; fMin:=fMax-abs(fMax)/10;
   end;
 end;
 fInterval:=fMax-fMin;
 DecmlPos:=Trunc(Floor(Ln(fInterval)/Ln10));
 if DecmlPos>0 then IntFactor:=1/Int(exp((DecmlPos-1)*Ln10))
 else IntFactor:=Int(exp(-(DecmlPos-1)*Ln10));
 IMin:=Ceil(fMin*IntFactor);                                          
 IMax:=Floor(fMax*IntFactor);                                          
end;
procedure Tsp_Scale.CalcMetr;
begin
 if (fFlags and sdfInversed)=0 then begin
   fM:=fLen/fInterval;  fOVal:=fMin;
 end else begin
   fM:=-fLen/fInterval; fOVal:=fMax;
 end;
 if (fFlags and sdfVertical)=0 then fOPos:=fO.x
 else begin fOPos:=fO.y; fM:=-fM; end;
end;
procedure Tsp_Scale.CalcTicksVal;
  procedure LbldTicksVal;
  var j, sstep:integer; oid:double;
  begin
   if fTicksCount>1 then begin
      j:=Round(IMax-IMin);                         
      IStep:=j div (fTicksCount-1);
      if IStep=0 then inc(IStep);
      rTksCount:=(j div IStep)+1;
      if rTksCount>MaxTicksCount then rTksCount:=MaxTicksCount;
    end else IStep:=Round(IMax-IMin);
    if (fFlags and sdfInversed)=0 then begin oid:=IMin; sstep:=IStep; end
    else begin oid:=IMax; sstep:=-IStep; end;
    for j:=0 to rTksCount-1 do fTksDbl[j]:=Int(oid+sstep*j)/IntFactor;
  end;
  procedure TicksVal;
  var j:integer; step:double;
  begin
    if fTicksCount>1 then step:=1/(fTicksCount-1)
    else step:=1;
    for j:=0 to fTicksCount-1 do fTksDbl[j]:=step*j;
  end;
begin               
 rTksCount:=fTicksCount;
 if fTicksCount>0 then
  if (fFlags and (sdfNoTicksLabel or sdfNotAjustedTicks))=0 then LbldTicksVal
  else TicksVal;
end;                
procedure Tsp_Scale.CalcTicksPos;
  procedure LbldTicks;
  var j:integer;
  begin
   for j:=0 to rTksCount-1 do fTksPos[j]:=V2P(fTksDbl[j]);
  end;
  procedure NoLbldTicks;
  var j:integer;

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲国产一区二区三区| 奇米色一区二区三区四区| 欧美在线视频日韩| 丁香婷婷综合五月| 国产乱色国产精品免费视频| 开心九九激情九九欧美日韩精美视频电影| 亚洲天堂2014| 国产欧美1区2区3区| 国产亚洲一区二区在线观看| 精品国产污网站| 久久亚洲私人国产精品va媚药| 337p粉嫩大胆噜噜噜噜噜91av| 亚洲五码中文字幕| 成人短视频下载| 色综合天天综合色综合av| 91丨porny丨国产入口| 色94色欧美sute亚洲13| 在线播放亚洲一区| 日韩一卡二卡三卡四卡| 91免费观看国产| 欧美一级理论片| 亚洲卡通欧美制服中文| 亚洲伊人伊色伊影伊综合网| 日本不卡高清视频| 欧美视频在线一区| 久久亚洲影视婷婷| 久久er99热精品一区二区| 欧美一区在线视频| 国产欧美日韩在线| 国产精品69毛片高清亚洲| 欧美一区二区在线免费观看| 亚洲a一区二区| 国产一区二区成人久久免费影院| 不卡一区中文字幕| 国产精品色呦呦| 亚洲国产一区二区在线播放| 欧美曰成人黄网| 亚洲三级在线看| 91久久一区二区| 亚洲成av人片一区二区三区| 欧美性大战久久| 日本欧美加勒比视频| 成人av中文字幕| 亚洲色图欧美在线| 欧美丝袜丝交足nylons图片| 日韩主播视频在线| 99热在这里有精品免费| 日韩精品自拍偷拍| 亚洲一区二区成人在线观看| 在线欧美日韩国产| 日日摸夜夜添夜夜添国产精品| 日韩欧美一二三| 成人av资源下载| 亚洲美女屁股眼交3| 国产伦精品一区二区三区在线观看| 26uuu色噜噜精品一区| 不卡av在线网| 午夜在线成人av| 久久蜜臀中文字幕| 久久爱www久久做| 国产精品系列在线| 欧美精品九九99久久| 国产在线国偷精品免费看| 亚洲人精品午夜| 欧美一区二区视频观看视频| 国产成人在线电影| 久久精品一区二区三区av| 99久久夜色精品国产网站| 国产日韩欧美综合一区| 色婷婷综合在线| 亚洲狠狠丁香婷婷综合久久久| 日韩一区二区三区视频在线| 91丨porny丨首页| 成人精品小蝌蚪| 成人99免费视频| 亚洲成人黄色小说| 国产午夜精品久久| 久久久久久一二三区| 日本高清无吗v一区| 国产一区二区按摩在线观看| 一区二区三区小说| 色88888久久久久久影院野外| 蜜臀久久99精品久久久久宅男 | 亚洲一区二区三区四区在线免费观看| 欧美一级xxx| 在线观看免费一区| 国产高清精品在线| 男女男精品网站| 亚洲综合无码一区二区| 久久精品一区二区三区不卡| 日韩欧美在线1卡| 欧美亚洲一区二区三区四区| 国产aⅴ综合色| 久久99久久精品欧美| 精品国产在天天线2019| 欧美性大战久久久久久久| 成人app网站| 国产成人亚洲综合a∨猫咪| 麻豆成人91精品二区三区| 亚洲午夜免费电影| 亚洲欧美激情视频在线观看一区二区三区 | 欧美日韩国产一级片| 日韩综合小视频| 亚洲一区二区五区| 一区二区三区不卡视频在线观看 | 亚洲综合在线免费观看| 国产精品福利影院| 精品视频资源站| 欧美自拍偷拍一区| 成人福利视频网站| 国产成人精品www牛牛影视| 国内精品视频一区二区三区八戒| 国产欧美视频一区二区三区| 精品久久久久一区| 91麻豆国产精品久久| 不卡影院免费观看| eeuss鲁片一区二区三区| 成人美女视频在线观看| 懂色av中文字幕一区二区三区| 国产v日产∨综合v精品视频| 国产精品自拍三区| 成人午夜私人影院| 91免费国产视频网站| 在线观看日韩av先锋影音电影院| 欧美综合亚洲图片综合区| 欧美中文字幕一区| 777久久久精品| 92国产精品观看| 欧美综合色免费| 91精品国产综合久久香蕉的特点| 欧美一区二区视频在线观看2022| 日韩欧美亚洲国产另类| 国产校园另类小说区| 136国产福利精品导航| 精品福利在线导航| 久久久99免费| 最新热久久免费视频| 亚洲一二三区视频在线观看| 亚洲国产日韩一区二区| 免费国产亚洲视频| 成人在线视频一区二区| 欧美综合一区二区三区| 精品久久五月天| 自拍偷拍国产精品| 青青国产91久久久久久| 国产东北露脸精品视频| 一本色道久久综合亚洲aⅴ蜜桃 | 91女神在线视频| 777色狠狠一区二区三区| 久久蜜桃av一区精品变态类天堂| 亚洲人吸女人奶水| 蜜臀久久久久久久| 97久久超碰国产精品电影| 欧美日韩成人综合| 欧美高清在线一区二区| 久久久久免费观看| 一区二区三区国产| 国产伦精品一区二区三区视频青涩 | 久久99精品国产.久久久久| 成人av电影免费观看| 日韩一区二区三区四区| 中文字幕在线一区| 久久国产麻豆精品| 欧美熟乱第一页| 国产精品毛片高清在线完整版 | 国产精品白丝jk白祙喷水网站| 色天天综合久久久久综合片| 精品国产露脸精彩对白 | 综合精品久久久| 久久成人免费网站| 欧美在线|欧美| 中文字幕欧美一| 狠狠网亚洲精品| 欧美日韩国产123区| 中文字幕综合网| 丰满亚洲少妇av| 欧美精品一区二区精品网| 天堂va蜜桃一区二区三区漫画版| 成人小视频免费观看| 亚洲精品在线观看视频| 日韩av一区二区在线影视| 在线观看亚洲专区| 亚洲欧美色图小说| 成人福利电影精品一区二区在线观看| 精品国产1区2区3区| 青青草97国产精品免费观看| 欧美日韩国产小视频| 亚洲精品五月天| 91麻豆蜜桃一区二区三区| 国产精品久久久久桃色tv| 国产黑丝在线一区二区三区| 欧美精品一区二区久久久| 毛片一区二区三区| 日韩午夜在线影院| 喷水一区二区三区| 欧美一区二区黄| 青青草视频一区| 欧美一级片在线看| 日韩精品高清不卡| 日韩欧美精品在线|