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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? rsruler.pas

?? Usefull Ruler VCL Delphi Component with full source code
?? PAS
?? 第 1 頁 / 共 2 頁
字號:
unit RsRuler;

//----------------------------------------------------------------------------
//  Delphi 2-7, C++Builder 5 Ruler component, version 4.0, 8 nov 2003
//----------------------------------------------------------------------------
//  (c) 2003 Hans Roos, Roos Software, The Netherlands
//  Website: www.RoosSoftware.nl
//  Email: mail@roossoftware.nl
//----------------------------------------------------------------------------
//  Features:
//  4 layouts rdTop, rdLeft, rdRight and rdBottom with
//    automatic scale adjustments for each layout
//  Scale: from 1-1000 %
//  Scale numbers can be reversed
//  Units: Inches, Centimetres, Millimetres, Pixels, Meters, Kilometers
//  Automatic calculation of scalenumbers (no overlapping)
//  Sideways text for vertical layouts
//  Flat or 3D appearance
//  TRsRulerCorner: extra component for joining up to 4
//    rulers, can show the unit ('km', 'm', 'cm', 'mm', 'in' or 'px')
//  Font can be changed; sideways fonts only possible if True Type font!
//----------------------------------------------------------------------------
//  See demo project for usage
//  Licence: Freeware! Use in non-commercial or commercial apps
//  Feel free to modify the source for your own needs, but don't remove
//  my name from this file, please.
//  If you find this component useful, please let me know.
//  Don't send money, just be grateful ;)
//----------------------------------------------------------------------------
//  Known issues: None
//  Not yet implemented:
//  Better scale divisions when Inches are used
//  (is it customary to divide inches in 4ths, 8ths, 16ths etc?)
//  Anything YOU can think of; please let me know!! (mail@roossoftware.nl)
//----------------------------------------------------------------------------
//  Revision History
//  v 4.0, 07/11/2003
//    Added property:
//    property ScaleDir: to specify reversed scale numbering. e.g. right-to-left
//    or bottom-to-top
//    property VersionInfo: quick reference to the version of these components
//    Added property values: ruKilo, ruMeter (property Units)
//    Bug-fix: Compiling gave Duplicate Resource errors. Fixed.
//  v.3.0, 07/11/2001
//    Added properties:
//    property Font, ParentFont: user can select any font for scale-drawing.
//    (vertical fonts can only be drawn if True Type font is chosen)
//    property Color, TickColor, Font.Color, ScaleColor
//    property Offset: if you want RsRuler to begin with another number than 0
//    Offset is recalculated when you choose another measuring unit.
//    property ShowMinus: if negative offset, toggle minus sign visibility
//  v.2.0, 31/10/2001
//    Added property value: ruPixel, for measuring pixel units.
//    Added public function Pos2Unit: to calculate unit from mouse position.
//    (see LogoImageMouseMove procedure in demo project for usage)
//  v.1.1, 30/06/2001
//    Added properties :
//    property HairLine, HairLinePos: line on scale, moving with CursorPos.
//    property HairLineStyle: hlsLine (just a hairline)
//      or hlsRect (inverted rectangle).
//  v.1.0, 22/11/2000
//    First release.
//----------------------------------------------------------------------------




interface

uses
  Windows, SysUtils, Messages, Classes, Graphics, Controls, Forms, ExtCtrls;

const
  Kilo: String = 'km';
  Meter: String = 'm';
  Centi: String = 'cm';
  Milli: String = 'mm';
  Inch: String = 'in';
  Pixel: String = 'px';
  None: String = '';
  cVer: String = 'Version 4.0 (c) Roos Software 2003';

type
  TRulerDir = (rdTop, rdLeft, rdRight, rdBottom);
  TRulerScaleDir = (rsdNormal, rsdReverse);
  TRulerUnit = (ruKilo, ruMeter, ruCenti, ruMilli, ruInch, ruPixel, ruNone);
  TCornerPos = (cpLeftTop, cpRightTop, cpLeftBottom, cpRightBottom);
  THairLineStyle = (hlsLine, hlsRect);

  // base class, defines common properties and behaviour of its
  // descendants TRsRuler and TRsRulerCorner
  TRsBaseRuler = class(TGraphicControl)
  private
    fFlat: Boolean;
    fScaleColor: TColor;
    fTickColor: TColor;
    fUnits: TRulerUnit;
    fVersionInfo: String;
    procedure SetFlat(const Value: Boolean);
    procedure SetScaleColor(const Value: TColor);
    procedure SetTickColor(const Value: TColor);
  protected
    LeftSideLF, RightSideLF, NormLF: TLogFont;
    OldFont, NormFont, LeftSideFont, RightSideFont: HFont;
    FirstTime: Boolean;
    procedure Paint; override;
    procedure SetUnit(const Value: TRulerUnit); virtual;
    procedure FontChange(Sender: TObject);
    procedure ChangeFonts;
    procedure DeleteFonts;
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
  published
    property Units: TRulerUnit read fUnits write SetUnit;
    property Flat: Boolean read fFlat write SetFlat;
    property ScaleColor: TColor read fScaleColor write SetScaleColor;
    property TickColor: TColor read fTickColor write SetTickColor;
    property VersionInfo: String read fVersionInfo write fVersionInfo;
  end;


  TRsRuler = class(TRsBaseRuler)
  private
    fDirection: TRulerDir;
    fScale: Integer;
    fScaleFactor: Double;
    fAdvance: Double;
    fHairLine: Boolean;
    fHairLinePos: Integer;
    fHairLineStyle: THairLineStyle;
    fOffset: Double;
    fShowMinus: Boolean;
    fScaleDir: TRulerScaleDir;
    procedure SetDirection(const Value: TRulerDir);
    procedure SetScaleDir(const Value: TRulerScaleDir);
    procedure SetScale(const Value: Integer);
    procedure SetHairLine(const Value: Boolean);
    procedure SetHairLinePos(const Value: Integer);
    procedure SetHairLineStyle(const Value: THairLineStyle);
    procedure SetOffset(const Value: Double);
    procedure SetShowMinus(const Value: Boolean);
  protected
    procedure SetUnit(const Value: TRulerUnit); override;
    procedure DrawHairLine;
    procedure CalcAdvance;
    procedure PaintScaleTics;
    procedure PaintScaleLabels;
    procedure Paint; override;
    function ConvertOffset(ToUnit: TRulerUnit): Double;
  public
    constructor Create(AOwner: TComponent); override;
    function Pos2Unit(APos: Integer): Double;
  published
    property VersionInfo;
    property Direction: TRulerDir read fDirection write SetDirection;
    property ScaleDir: TRulerScaleDir read fScaleDir write SetScaleDir;
    property Units;
    property Scale: Integer read fScale write SetScale;
    property HairLine: Boolean read fHairLine write SetHairLine;
    property HairLinePos: Integer read fHairLinePos write SetHairLinePos;
    property HairLineStyle: THairLineStyle read fHairLineStyle write SetHairLineStyle;
    property ScaleColor;
    property TickColor;
    property Offset: Double read fOffset write SetOffset;
    property ShowMinus: Boolean read fShowMinus write SetShowMinus;
    property Align;
    property Font;
    property Color;
    property Height;
    property Width;
    property Visible;
    property Hint;
    property ShowHint;
    property Tag;
    property ParentFont;
    property OnMouseDown;
    property OnMouseMove;
    property OnMouseUp;
    property OnClick;
    property OnDblClick;
    property OnResize;
  end;

  TRsRulerCorner = class(TRsBaseRuler)
  private
    fPosition: TCornerPos;
    procedure SetPosition(const Value: TCornerPos);
  protected
    fUStr: String;
    procedure Paint; override;
    procedure SetUnit(const Value: TRulerUnit); override;
  public
    constructor Create(AOwner: TComponent); override;
  published
    property VersionInfo;
    property Align;
    property Position: TCornerPos read fPosition write SetPosition;
    property Flat;
    property ScaleColor;
    property TickColor;
    property Font;
    property Color;
    property Units;
    property Visible;
    property Hint;
    property ShowHint;
    property Tag;
    property OnMouseDown;
    property OnMouseMove;
    property OnMouseUp;
    property OnClick;
    property OnDblClick;
    property OnResize;
  end;

procedure Register;

implementation


procedure Register;
begin
  RegisterComponents('Xtra', [TRsRuler, TRsRulerCorner]);
end;

{ TRsBaseRuler }

constructor TRsBaseRuler.Create(AOwner: TComponent);
begin
  inherited;
  // Initialize vars:
  fFlat := False;
  fUnits := ruCenti;
  fScaleColor := clWindow;
  fTickColor := clWindowText;
  fVersionInfo := cVer;
  FirstTime := True;
  OldFont := 0;
  NormFont := 0;
  LeftSideFont := 0;
  RightSideFont := 0;
  Font.OnChange := FontChange;
end;

procedure TRsBaseRuler.ChangeFonts;
begin
  DeleteFonts;
  // Fill LogFont structures:
  with LeftSideLF do
  begin
    FillChar(LeftSideLF, SizeOf(LeftSideLF), 0);
    lfEscapement := 900;
    lfOrientation := 900;
    StrPCopy(lfFaceName, Font.Name);
    lfHeight := -Font.Height;
    lfWeight := FW_BOLD * Integer(fsBold in Font.Style);
    lfItalic := Integer(fsItalic in Font.Style);
  end;
  with RightSideLF do
  begin
    FillChar(RightSideLF, SizeOf(RightSideLF), 0);
    lfEscapement := 2700;
    lfOrientation := 2700;
    StrPCopy(lfFaceName, Font.Name);
    lfHeight := -Font.Height;
    lfWeight := FW_BOLD * Integer(fsBold in Font.Style);
    lfItalic := Integer(fsItalic in Font.Style);
  end;
  with NormLF do
  begin
    FillChar(NormLF, SizeOf(NormLF), 0);
    StrPCopy(lfFaceName, Font.Name);
    lfHeight := -Font.Height;
    lfWeight := FW_BOLD * Integer(fsBold in Font.Style);
    lfItalic := Integer(fsItalic in Font.Style);
  end;
  Canvas.Font.Color := Font.Color;
  LeftSideFont := CreateFontIndirect(LeftSideLF);
  RightSideFont := CreateFontIndirect(RightSideLF);
  NormFont := CreateFontIndirect(NormLF);
end;

procedure TRsBaseRuler.DeleteFonts;
begin
  if NormFont <> 0 then DeleteObject(NormFont);
  if LeftSideFont <> 0 then DeleteObject(LeftSideFont);
  if RightSideFont <> 0 then DeleteObject(RightSideFont);
end;

destructor TRsBaseRuler.Destroy;
begin
  DeleteFonts;
  inherited;
end;

procedure TRsBaseRuler.FontChange(Sender: TObject);
begin
  ChangeFonts;
  Invalidate;
end;

procedure TRsBaseRuler.Paint;
begin
  Canvas.Brush.Color := Color;
  Canvas.FillRect(Rect(0, 0, Width, Height));
  if FirstTime then
  // setup fonts, cannot be done in Create method,
  // so do it when Ruler gets painted...
  begin
    FirstTime := False;
    ChangeFonts;
    OldFont := Canvas.Font.Handle;
  end;
end;

procedure TRsBaseRuler.SetFlat(const Value: Boolean);
begin
  if Value <> fFlat then
  begin
    fFlat := Value;
    Invalidate;
  end;
end;

procedure TRsBaseRuler.SetScaleColor(const Value: TColor);
begin
  if Value <> fScaleColor then
  begin
    fScaleColor := Value;
    Invalidate;
  end;
end;

procedure TRsBaseRuler.SetTickColor(const Value: TColor);
begin
  if Value <> fTickColor then
  begin
    fTickColor := Value;
    Invalidate;
  end;
end;

procedure TRsBaseRuler.SetUnit(const Value: TRulerUnit);
begin
  // method is empty, see descendants
end;


{ TRsRuler }
constructor TRsRuler.Create(AOwner: TComponent);
begin
  inherited;
  fDirection := rdTop;
  fScaleDir := rsdNormal;
  fScale := 100;
  Height := 33;
  Width := 200;
  fScaleFactor := 1;
  fAdvance := 1;
  fOffset := 0.0;
  fHairLinePos := -1;
  fHairLine := False;
  fHairLineStyle := hlsLine;
  fShowMinus := True;
end;

procedure TRsRuler.CalcAdvance;
begin
  fAdvance := Screen.PixelsPerInch / 10 * fScale / 100;
  if fUnits <> ruInch then fAdvance := fAdvance / 2.54;
  if fUnits = ruPixel then fAdvance := 5 * fScale / 100;
  case fScale of
    1: fScaleFactor := 100;
    2: fScaleFactor := 50;
    3..5: fScaleFactor := 25;
    6..8: fScaleFactor := 20;
    9..12: fScaleFactor := 10;
    13..25: fScaleFactor := 5;
    26..35: fScaleFactor := 4;
    36..50: fScaleFactor := 2;
    51..125: fScaleFactor := 1;
    126..300: fScaleFactor :=  0.5;
    301..400: fScaleFactor := 0.25;
    401..500: fScaleFactor := 0.2;
    501..1000: fScaleFactor := 0.1;
  end;
  fAdvance := fAdvance * fScaleFactor;
end;

procedure TRsRuler.PaintScaleTics;
var
  Pos: Double;
  Start, N, Last, LongTick, Adv: Integer;
begin
  if (fDirection = rdTop) or (fDirection = rdBottom) then Last := Width else Last := Height;
  Start := 0;
  Adv := 1;
  if fScaleDir = rsdReverse then
  begin
    Start := Last;
    Adv := -1;
  end;
  Pos := 0;
  N := 0;
  Canvas.Pen.Color := fTickColor;
  while Pos < Last do with Canvas do
  begin
    LongTick := 2 * (3 + Integer(N mod 5 = 0));
    if (fDirection = rdTop) or (fDirection = rdBottom) then
    begin
      if fDirection = rdTop then
      begin
        MoveTo(Start + Adv * Trunc(Pos), Height - 1);
        LineTo(Start + Adv * Trunc(Pos), Height - LongTick);
      end;
      if fDirection = rdBottom then
      begin

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
7777精品伊人久久久大香线蕉 | 久久久91精品国产一区二区精品| 91美女片黄在线观看| 国产精品18久久久久久久久| 精油按摩中文字幕久久| 天堂久久久久va久久久久| 一区二区三区四区中文字幕| 亚洲女爱视频在线| 一区二区三区在线高清| 一区二区三区在线视频播放| 综合婷婷亚洲小说| 一区二区三区av电影| 一区二区三区日韩精品视频| 亚洲视频资源在线| 亚洲伦在线观看| 亚洲伦理在线免费看| 亚洲福利视频三区| 日韩一区精品视频| 美女性感视频久久| 国产91高潮流白浆在线麻豆| 国产91精品欧美| 日本电影欧美片| 4438亚洲最大| 久久九九国产精品| 亚洲乱码国产乱码精品精可以看| 亚洲电影在线免费观看| 日本女人一区二区三区| 国产麻豆日韩欧美久久| 99视频有精品| 欧美美女黄视频| 久久这里都是精品| 亚洲三级免费电影| 日韩电影免费在线| www.在线欧美| 欧美一级精品在线| 国产精品美女久久久久久2018| 一区二区三区日韩| 国产一区啦啦啦在线观看| 99久久久免费精品国产一区二区| 欧美亚洲综合色| 久久婷婷色综合| 亚洲综合色成人| 国产又黄又大久久| 欧美人与性动xxxx| 亚洲婷婷国产精品电影人久久| 三级成人在线视频| 91亚洲国产成人精品一区二区三| 欧美一区二区三区不卡| 国产精品久久久久一区 | 亚洲男帅同性gay1069| 视频一区二区国产| 成人福利电影精品一区二区在线观看 | 中文字幕在线播放不卡一区| 亚洲成人激情自拍| aaa欧美色吧激情视频| 欧美一区二区三区电影| 一区二区三区四区不卡在线 | 亚洲欧美在线视频观看| 久久99精品久久久| 欧美日韩情趣电影| 亚洲一区免费观看| 99久久婷婷国产综合精品| 日韩欧美亚洲一区二区| 亚洲国产精品影院| 在线看一区二区| 国产精品久久久久三级| 精品一区二区三区免费| 欧美午夜精品久久久| 综合久久给合久久狠狠狠97色| 国产一区二区三区av电影| 欧美一级在线免费| 天堂成人国产精品一区| 欧美日韩一区在线| 一区二区在线观看视频在线观看| 粉嫩av亚洲一区二区图片| 日韩一区二区三区电影在线观看 | 日本欧美一区二区三区乱码| 欧美日韩精品电影| 亚洲午夜三级在线| 欧美在线综合视频| 亚洲综合一区二区三区| 在线精品视频免费观看| 亚洲黄色小说网站| 欧美私模裸体表演在线观看| 亚洲一区二区中文在线| 欧美午夜影院一区| 日韩成人一区二区三区在线观看| 欧美一区二区三区在线电影| 视频一区二区国产| 日韩欧美国产三级| 国产一区啦啦啦在线观看| 国产农村妇女精品| 不卡一区二区三区四区| 一区二区三区欧美视频| 欧美日韩电影一区| 毛片一区二区三区| 国产午夜精品福利| 色综合色狠狠综合色| 亚洲一区二区三区爽爽爽爽爽| 欧美精品乱码久久久久久| 老司机精品视频在线| 久久久国产午夜精品| 不卡高清视频专区| 亚洲国产精品人人做人人爽| 制服丝袜一区二区三区| 国产精品亚洲专一区二区三区 | 91年精品国产| 日韩综合一区二区| 国产午夜精品一区二区三区嫩草| 99视频精品全部免费在线| 丝袜美腿成人在线| 国产偷国产偷亚洲高清人白洁| 99视频有精品| 久久福利视频一区二区| 中文字幕一区二区三区乱码在线| 欧美日韩精品三区| 国产传媒一区在线| 亚洲成av人片www| 国产精品日韩成人| 欧美高清性hdvideosex| 粗大黑人巨茎大战欧美成人| 午夜视频一区在线观看| 国产精品每日更新| 日韩精品在线一区| 97久久精品人人做人人爽| 日韩制服丝袜av| 亚洲女人的天堂| 久久精品亚洲乱码伦伦中文| 在线观看91视频| 国产成人精品一区二| 麻豆精品国产91久久久久久| 亚洲欧美日本在线| 久久蜜桃一区二区| 欧美一区二区黄| 在线观看视频一区二区| 成人动漫一区二区在线| 国产精品夜夜爽| 日本不卡一区二区三区| 亚洲黄色av一区| 中文字幕视频一区| 中文子幕无线码一区tr| 精品三级在线观看| 欧美一卡二卡在线| 欧美日韩亚洲高清一区二区| 色哟哟欧美精品| aaa亚洲精品| 成年人网站91| 成人av电影在线网| 国产成人综合网| 国产成人av一区二区三区在线| 久久不见久久见免费视频7| 日日摸夜夜添夜夜添国产精品| 一二三区精品视频| 亚洲一区二区三区国产| 亚洲精品国产精品乱码不99| 亚洲三级在线免费观看| 最好看的中文字幕久久| 国产精品乱码人人做人人爱| 欧美国产日韩一二三区| 国产欧美视频在线观看| 国产精品色呦呦| 国产精品视频你懂的| 专区另类欧美日韩| 一区二区三区中文字幕电影 | 91麻豆精品国产91久久久更新时间| 日本久久一区二区三区| 在线精品观看国产| 欧美色综合网站| 欧美一级高清片在线观看| 欧美va天堂va视频va在线| 国产午夜三级一区二区三| 国产精品初高中害羞小美女文| 亚洲精品免费看| 日韩高清在线不卡| 韩国毛片一区二区三区| 成人av免费观看| 欧美人体做爰大胆视频| 精品精品国产高清a毛片牛牛 | av一本久道久久综合久久鬼色| av亚洲精华国产精华精华| 欧美撒尿777hd撒尿| 日韩精品一区二| 中文字幕va一区二区三区| 亚洲国产精品天堂| 国产精品乡下勾搭老头1| 色综合视频一区二区三区高清| 欧美老人xxxx18| 国产亚洲成aⅴ人片在线观看 | 青青草国产精品97视觉盛宴| 国产一区二区三区四区五区入口| 成人激情小说网站| 欧美精品久久99| 国产丝袜在线精品| 亚洲成人在线免费| 国产.精品.日韩.另类.中文.在线.播放| 色综合色狠狠综合色| 精品毛片乱码1区2区3区| 一区二区三区高清不卡| 国模大尺度一区二区三区| 91国模大尺度私拍在线视频|