const
{$IFDEF PAIDVERS}
SDLVersionInfo = 'scale_r1210_full';
IsLightEd = false;
{$ELSE}
SDLVersionInfo = 'scale_r1210_lighted';
IsLightEd = true;
{$ENDIF}
Release = 1210;
type
TScaleTickDrawnEvent = procedure (Sender: TObject; Canvas: TCanvas;
ScaleType: TScaleType; CurrentTickPos: double;
ChartX, ChartY: integer) of object;
TBeforeTickLabelEvent = procedure (Sender: TObject; ScaleType: TScaleType;
CurrentTickPos: double; var TickLabel: string) of object;
TScaleRenderedEvent = procedure (Sender: TObject; Canvas: TCanvas) of object;
TScaleUnitAnchor = (uaSclTopLft, uaSclCenter, uaSclBotRgt);
{$IFDEF GE_LEV29}
[ComponentPlatformsAttribute(pidWin32 or pidWin64 or pidWin64x)]
{$ENDIF}
TScale = class (TCustomControl) //(TGraphicControl)
private
FFrameStyle : TFrameStyle; { style of frame }
FColorFG : TColor;
FColorBG : TColor; { color of label background }
FColBlackLine : TColor; { colors to draw the frame }
FColGrayLine : TColor; { -"- }
FColWhiteLine : TColor; { -"- }
FColorScheme : TColorScheme; { color scheme of frames }
FOnScaleTickDrawn : TScaleTickDrawnEvent;
FOnBeforeTickLabel: TBeforeTickLabelEvent;
FOnZoomPan : TZoomPanEvent;
FAxLog : boolean; { TRUE if axis is logarithmic }
FTransf_k : double;
FTransf_d : double;
FRangeHigh : double;
FRangeLow : double;
FShortTicks : boolean;
FTickCount : integer;
FNumTicks : integer;
FDecPlaces : integer;
FNotYetLoaded : boolean; // flag to prevent problems with
// log. scales during component loading
FDrawBaseLine : boolean;
FTransparent : boolean;
FLabelType : TFigType;
FDTFormat : TDTLabel;
FMarginTop : integer;
FMarginBottom : integer;
FMarginRight : integer;
FMarginLeft : integer;
FIsHelper : boolean;
FLblPosX : integer;
FLblPosY : integer;
FLblAlign : TAlignment;
FLblAnchor : TScaleUnitAnchor;
FMouseAction : TMouseActMode;
FMAnchorX : integer;
FMAnchorY : integer;
FMAnchorWorldLow : double;
FMAnchorWorldHigh : double;
FLButtonWasDown : boolean;
FUserTicktext : string;
FScaleInscript : string;
FScaleTickPos : array of double;
FUnitLabel : string;
FForeignCv : TCanvas;
FForCvPosX : integer;
FForCvPosY : integer;
FScaleType : TScaleType;
FOnBeforeSclRend : TScaleRenderedEvent;
FOnAfterSclRend : TScaleRenderedEvent;
FSuppressPaint : boolean; { TRUE: suppress all paint calls }
procedure AdjustScalePars;
function GetScaleCenter: double;
function GetTickPos (ix: integer): double;
procedure SetColorBG (Value: TColor);
procedure SetColorFG (Value: TColor);
procedure SetColorScheme (Value: TColorScheme);
procedure SetFrameStyle (value: TFrameStyle);
procedure SetScaleType (Value: TScaleType);
procedure SetUnitLabel (Value: string);
procedure SetCaptAlign (al: TAlignment);
procedure SetCaptAnchor (ca: TScaleUnitAnchor);
procedure SetIsHelper (value: boolean);
procedure SetMarginTop (Value: integer);
procedure SetMarginBottom (Value: integer);
procedure SetMarginLeft (Value: integer);
procedure SetMarginRight (Value: integer);
procedure SetRangeHigh (Value: double);
procedure SetRangeLow (Value: double);
procedure SetDecPlaces (Value: integer);
procedure SetShowBaseLine (Value: boolean);
procedure SetTransparent (Value: boolean);
procedure SetUserTickText (txt: String);
procedure SetAxLinLog (Value: boolean);
procedure SetLabelType (Value: TFigType);
procedure SetShortTicks (st: boolean);
procedure SetScaleInscript (x: string);
procedure SetDTFormat (value: TDTLabel);
procedure SetNumTicks (d: integer);
procedure SetUnitLabelPosX (value: integer);
procedure SetUnitLabelPosY (value: integer);
procedure SetSuppressPaint (supp: boolean);
procedure SetForCvPosX (value: integer);
procedure SetForCvPosY (value: integer);
protected
function AddScaleInscription (Instring: string;
Inscr: string): string;
procedure AssignTo (Dest: TPersistent); override;
procedure CreateWnd; override;
procedure DblClick; override;
procedure DrawYScale (cv: TCanvas; XPos: integer);
procedure DrawXScale (cv: TCanvas; YPos: integer);
function ExtractUserText (TickText: string; ix: integer): string;
procedure Loaded; override;
function M2R (xin: longint): double;
procedure MouseUp (Button: TMouseButton; Shift: TShiftState;
X, Y: Integer); override;
procedure MouseMove (Shift: TShiftState; X,Y: integer); override;
procedure Paint; override;
function R2M (xin: double): longint;
procedure TriggerPaint;
public
procedure Assign(Source: TPersistent); override;
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
procedure Changed (Sender: TObject);
property Center: double read GetScaleCenter;
property Enabled;
property IsHelperComponent: boolean
read FIsHelper write SetIsHelper;
property TickPos [ix: integer]: double read GetTickPos;
procedure UseForeignCanvas (ForeignCv: TCanvas; x, y: integer);
procedure ForcePaint;
property ForeignCanvasPosX: integer
read FForCvPosX write SetForCVPosX;
property ForeignCanvasPosY: integer
read FForCvPosY write SetForCVPosY;
function ConvertToPixelCoords (Value: double): integer;
function ConvertPixelToScale (PixelCoord: integer): double;
procedure ResetComp;
procedure SetBounds (ALeft, ATop, AWidth, AHeight: Integer); override;
procedure SetRange (LowVal, HighVal: double);
property SuppressPaint: boolean
read FSuppressPaint write SetSuppressPaint;
published
property Align;
property Anchors;
property Caption: string read FUnitLabel write SetUnitLabel;
property CaptionPosX: integer read FLblPosX write SetUnitLabelPosX;
property CaptionPosY: integer read FLblPosY write SetUnitLabelPosY;
property CaptionAlignment: TAlignment
read FLblAlign write SetCaptAlign;
property CaptionAnchor: TScaleUnitAnchor
read FLblAnchor write SetCaptAnchor;
property ColorBackGnd: TColor read FColorBG write SetColorBG;
property ColorScale: TColor read FColorFG write SetColorFG;
property ColorScheme: TColorScheme
read FColorScheme write SetColorScheme;
property DateFormat: TDTLabel read FDTFormat write SetDTFormat;
property DecPlaces: integer read FDecPlaces write SetDecPlaces;
property Font;
property FrameStyle: TFrameStyle read FFrameStyle write SetFrameStyle;
property LabelType: TFigType read FLabelType write SetLabelType;
property Logarithmic: boolean read FAxLog write SetAxLinLog;
property MarginTop: integer read FMarginTop write SetMarginTop;
property MarginBottom: integer
read FMarginBottom write SetMarginBottom;
property MarginLeft: integer read FMarginLeft write SetMarginLeft;
property MarginRight: integer read FMarginRight write SetMarginRight;
property MinTicks: integer read FNumTicks write SetNumTicks;
property MouseAction: TMouseActMode
read FMouseAction write FMouseAction;
property NumTicks: integer read FTickCount;
property ParentFont;
property ParentShowHint;
property PopupMenu;
property RangeLow: double read FRangeLow write SetRangeLow;
property RangeHigh: double read FRangeHigh write SetRangeHigh;
property ShortTicks: boolean read FShortTicks write SetShortTicks;
property ShowBaseLine: boolean
read FDrawBaseLine write SetShowBaseLine;
property ShowHint;
property ScaleInscript: string
read FScaleInscript write SetScaleInscript;
property ScaleType: TScaleType read FScaleType write SetScaleType;
{$IFDEF GE_LEV17}
(**) property StyleElements;
{$ENDIF}
property Transparent: boolean read FTransparent write SetTransparent;
property UserTickText: string
read FUserTickText write SetUserTickText;
property Visible;
property OnClick;
property OnDblClick;
property OnMouseMove;
property OnMouseDown;
property OnMouseUp;
{$IFDEF GE_LEV5} // CBuilder/Delphi 3/4 do not know about
property OnContextPopup;
{$ENDIF}
property OnZoomPan: TZoomPanEvent read FOnZoomPan write FOnZoomPan;
property OnScaleTickDrawn: TScaleTickDrawnEvent
read FOnScaleTickDrawn write FOnScaleTickDrawn;
property OnBeforeTickLabel: TBeforeTickLabelEvent
read FOnBeforeTickLabel write FOnBeforeTickLabel;
property OnAfterScaleRendered: TScaleRenderedEvent
read FOnAfterSclRend write FOnAfterSclRend;
property OnBeforeScaleRendered: TScaleRenderedEvent
read FOnBeforeSclRend write FOnBeforeSclRend;
end;
function Rescale (MX, MY, MAnchorX, MAnchorY, Width, Height, MarginLeft,
MarginRight, MarginTop, MarginBottom: integer;
MAnchorWorldLow, MAnchorWorldHigh: double;
MAction: TMouseActMode; SclType: TScaleType; LogAxis: boolean;
RngLow, RngHigh: double;
var NewLow, NewHigh: double): boolean;
|