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

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

?? sgr_scale.pas

?? 一個(gè)delphi的好用的畫二維曲線的控件Simple Graph v2.3
?? PAS
?? 第 1 頁 / 共 2 頁
字號(hào):
unit sgr_scale;
{(c) S.P.Pod'yachev 1998-1999}
{ver. 2.22   22.10.1999}
{***************************************************}
{ 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;
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:Longint read fO.x;
 property OY:Longint read fO.y;
 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.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;
  begin
   if (fFlags and sdfVertical)=0 then
    for j:=0 to rTksCount-1 do fTksPos[j]:=fOPos+round(fLen*fTksDbl[j])
   else

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩欧美的一区| 日韩视频中午一区| 日本欧美肥老太交大片| 国产拍欧美日韩视频二区| 色婷婷av一区二区| 国产福利91精品| 午夜影院久久久| 一区精品在线播放| 精品国产成人系列| 欧美老女人第四色| 色诱亚洲精品久久久久久| 蜜桃av噜噜一区二区三区小说| 综合久久综合久久| 国产午夜精品美女毛片视频| 欧美精品在线一区二区三区| 99re在线视频这里只有精品| 国产精品系列在线观看| 青青草成人在线观看| 一区av在线播放| 亚洲日本一区二区| 国产三级欧美三级| 久久在线观看免费| 日韩视频在线观看一区二区| 欧美日韩一区不卡| 欧美午夜精品电影| 91国在线观看| 色av一区二区| 色域天天综合网| 一本一本大道香蕉久在线精品| 成人动漫精品一区二区| 国产成人欧美日韩在线电影| 麻豆国产一区二区| 另类小说欧美激情| 精品一区二区三区视频在线观看 | 欧美性大战久久| 亚洲bt欧美bt精品777| 欧美一区二区网站| 69p69国产精品| 欧美视频完全免费看| 欧美亚洲一区三区| 欧美亚洲禁片免费| 欧美亚洲日本国产| 欧美精品18+| 91精品欧美久久久久久动漫| 制服.丝袜.亚洲.中文.综合| 91精品国产综合久久久久| 欧美精品v日韩精品v韩国精品v| 欧美日韩视频专区在线播放| 欧美美女bb生活片| 日韩精品一区二区三区中文精品| 日韩三级在线免费观看| 欧美精品一区二区精品网| 久久日韩粉嫩一区二区三区| 国产免费观看久久| 一区二区三区四区激情 | 日韩一级免费一区| 日韩一二三区视频| 国产亚洲精品7777| 亚洲第一福利一区| 国产精品天天摸av网| 精品国产乱码久久久久久闺蜜| 337p日本欧洲亚洲大胆精品| 中文无字幕一区二区三区| 国产精品视频yy9299一区| 亚洲欧洲精品天堂一级| 亚洲综合色自拍一区| 偷拍自拍另类欧美| 经典三级一区二区| 高清beeg欧美| 色婷婷亚洲综合| 91精品国产一区二区三区蜜臀| 欧美大片拔萝卜| 中文字幕制服丝袜成人av| 亚洲影院久久精品| 久久99最新地址| eeuss鲁片一区二区三区在线观看 eeuss鲁片一区二区三区在线看 | 在线不卡欧美精品一区二区三区| 9191久久久久久久久久久| 久久婷婷国产综合国色天香| 国产精品久99| 香蕉av福利精品导航| 韩日av一区二区| 91亚洲国产成人精品一区二区三 | 精品福利在线导航| 中文字幕av一区二区三区免费看| 亚洲精品伦理在线| 91色porny在线视频| 欧美日韩亚洲综合在线 欧美亚洲特黄一级| 91精品婷婷国产综合久久竹菊| 国产午夜精品福利| 午夜影院久久久| av不卡在线播放| 日韩一区二区三区免费看| 国产精品久久久久久亚洲毛片| 亚洲 欧美综合在线网络| 国产成人免费视频网站高清观看视频 | 欧美刺激午夜性久久久久久久 | 免费在线观看精品| jiyouzz国产精品久久| 欧美一级xxx| 伊人性伊人情综合网| 色噜噜狠狠色综合中国| 日韩二区在线观看| av欧美精品.com| 日韩欧美国产一区二区在线播放 | 色悠悠久久综合| 欧美一级在线观看| 日韩美女视频一区二区| 亚洲黄色免费网站| 国产福利一区二区| 91精品中文字幕一区二区三区 | 天堂久久一区二区三区| 成人高清av在线| 久久久亚洲高清| 蜜桃视频在线观看一区二区| 色综合久久综合网97色综合 | 精品久久一区二区三区| 亚洲国产成人91porn| 99国产精品视频免费观看| 久久影音资源网| 日产欧产美韩系列久久99| 欧美最新大片在线看| 国产精品网站导航| 国产成人精品在线看| 亚洲精品一线二线三线| 免费在线观看一区| 91精品国产日韩91久久久久久| 一区二区三区在线视频观看| 99久久777色| 中文字幕亚洲综合久久菠萝蜜| 国产精品12区| 久久久精品蜜桃| 国产精品中文有码| 精品国产3级a| 国产综合久久久久久鬼色| 精品欧美一区二区久久| 久久99深爱久久99精品| 日韩女优毛片在线| 久久99精品视频| 欧美tickle裸体挠脚心vk| 久久成人免费网| 精品裸体舞一区二区三区| 精品一区二区在线看| 久久欧美中文字幕| 国产精品911| 国产精品久久久久一区| av网站一区二区三区| 亚洲精品你懂的| 欧美在线一二三| 日韩福利视频导航| 欧美v国产在线一区二区三区| 麻豆精品国产91久久久久久| 精品日韩av一区二区| 国产成人高清在线| 中文无字幕一区二区三区| 97久久人人超碰| 亚洲综合一区二区| 91精品国产综合久久久久| 蜜桃精品视频在线| 国产亚洲1区2区3区| 成人激情午夜影院| 亚洲三级电影网站| 91精品国产免费久久综合| 国产一区二区三区电影在线观看| 久久精品人人做人人爽人人| 不卡av在线网| 亚洲国产成人91porn| 精品第一国产综合精品aⅴ| 风间由美中文字幕在线看视频国产欧美 | 麻豆一区二区三区| 欧美激情中文字幕一区二区| 91美女片黄在线观看91美女| 天堂久久一区二区三区| 久久女同性恋中文字幕| 色诱视频网站一区| 免费不卡在线视频| 亚洲国产精品成人综合色在线婷婷 | 亚洲激情男女视频| 日韩欧美中文字幕制服| 成人免费精品视频| 亚洲18女电影在线观看| 久久久不卡网国产精品二区 | 99国产一区二区三精品乱码| 亚洲成人av在线电影| 久久久99精品免费观看不卡| 91久久精品一区二区| 久久99精品国产| 伊人夜夜躁av伊人久久| 久久亚洲春色中文字幕久久久| 色综合一区二区三区| 麻豆成人免费电影| 亚洲乱码国产乱码精品精可以看 | 欧美三片在线视频观看| 国产一区二区三区四区五区美女 | 韩国av一区二区| 亚洲1区2区3区4区| 中文字幕一区二区三区精华液| 日韩女优毛片在线| 在线免费视频一区二区| 大胆亚洲人体视频|