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

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

?? newtabset.pas

?? 源代碼
?? PAS
字號:
unit NewTabSet;

{
  Inno Setup
  Copyright (C) 1997-2004 Jordan Russell
  Portions by Martijn Laan
  For conditions of distribution and use, see LICENSE.TXT.

  TNewTabSet - modern VS.NET-style tabs

  $jrsoftware: issrc/Components/NewTabSet.pas,v 1.2 2004/12/17 03:43:54 jr Exp $
}

interface

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

type
  TNewTabSet = class(TCustomControl)
  private
    FTabs: TStrings;
    FTabIndex: Integer;
    function GetTabRect(Index: Integer): TRect;
    procedure InvalidateTab(Index: Integer);
    procedure ListChanged(Sender: TObject);
    procedure SetTabs(Value: TStrings);
    procedure SetTabIndex(Value: Integer);
  protected
    procedure CreateParams(var Params: TCreateParams); override;
    procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override;
    procedure Paint; override;
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
  published
    property Align;
    property Font;
    property ParentFont;
    property TabIndex: Integer read FTabIndex write SetTabIndex;
    property Tabs: TStrings read FTabs write SetTabs;
    property OnClick;
  end;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('JR', [TNewTabSet]);
end;

{
  The RGBToHSV and HSVToRGB functions below are based on code from
  http://www.efg2.com/Lab/Graphics/Colors/HSV.htm
  which, in turn, was:
  Based on C Code in "Computer Graphics -- Principles and Practice,"
  Foley et al, 1996, p. 592.
}

procedure RGBToHSV(const R, G, B: Integer; var H, S: Double; var V: Integer);
var
  Min, Delta: Integer;
begin
  Min := R;
  if G < Min then Min := G;
  if B < Min then Min := B;
  V := R;
  if G > V then V := G;
  if B > V then V := B;

  Delta := V - Min;

  // Calculate saturation: saturation is 0 if r, g and b are all 0
  if V = 0 then
    S := 0
  else
    S := Delta / V;

  if S = 0.0 then
    H := 0     // Achromatic: When s = 0, h is undefined
  else begin   // Chromatic
    if R = V then  // between yellow and magenta [degrees]
      H := 60.0 * (G - B) / Delta
    else if G = V then  // between cyan and yellow
      H := 120.0 + 60.0 * (B - R) / Delta
    else if B = V then  // between magenta and cyan
      H := 240.0 + 60.0 * (R - G) / Delta;
    if H < 0.0 then
      H := H + 360.0;
  end;
end;

procedure HSVtoRGB(const H, S: Double; const V: Integer; var R, G, B: Integer);
var
  f: Double;
  i: Integer;
  hTemp: Double;
  p, q, t: Integer;
begin
  if S = 0.0 then begin  // color is on black-and-white center line
    R := V;  // achromatic: shades of gray
    G := V;
    B := V;
  end
  else begin  // chromatic color
    if H = 360.0 then  // 360 degrees same as 0 degrees
      hTemp := 0.0
    else
      hTemp := H;

    hTemp := hTemp / 60;  // h is now IN [0,6)
    i := Trunc(hTemp);    // largest integer <= h
    f := hTemp - i;       // fractional part of h

    p := Trunc(V * (1.0 - S));
    q := Trunc(V * (1.0 - (S * f)));
    t := Trunc(V * (1.0 - (S * (1.0 - f))));

    case i of
      0: begin R := V; G := t; B := p; end;
      1: begin R := q; G := V; B := p; end;
      2: begin R := p; G := V; B := t; end;
      3: begin R := p; G := q; B := V; end;
      4: begin R := t; G := p; B := V; end;
      5: begin R := V; G := p; B := q; end;
    else
      { Should never get here }
      R := 0;
      G := 0;
      B := 0;
    end;
  end;
end;

function LightenColor(const Color: TColorRef; const Amount: Integer): TColorRef;
var
  H, S: Double;
  V, R, G, B: Integer;
begin
  RGBtoHSV(Byte(Color), Byte(Color shr 8), Byte(Color shr 16), H, S, V);
  Inc(V, Amount);
  if V > 255 then
    V := 255;
  if V < 0 then
    V := 0;
  HSVtoRGB(H, S, V, R, G, B);
  Result := R or (G shl 8) or (B shl 16);
end;

{ TNewTabSet }

const
  TabPaddingX = 5;
  TabPaddingY = 3;
  TabSpacing = 1;

constructor TNewTabSet.Create(AOwner: TComponent);
begin
  inherited;
  FTabs := TStringList.Create;
  TStringList(FTabs).OnChange := ListChanged;
  ControlStyle := ControlStyle + [csOpaque];
  Width := 129;
  Height := 20;
end;

procedure TNewTabSet.CreateParams(var Params: TCreateParams);
begin
  inherited;
  with Params.WindowClass do
    style := style and not (CS_HREDRAW or CS_VREDRAW);
end;

destructor TNewTabSet.Destroy;
begin
  FTabs.Free;
  inherited;
end;

function TNewTabSet.GetTabRect(Index: Integer): TRect;
var
  I: Integer;
  Size: TSize;
begin
  Canvas.Font.Assign(Font);
  Result.Right := 4;
  for I := 0 to FTabs.Count-1 do begin
    Size := Canvas.TextExtent(FTabs[I]);
    Result := Bounds(Result.Right, 0, Size.cx + (TabPaddingX * 2) + TabSpacing,
      Size.cy + (TabPaddingY * 2));
    if Index = I then
      Exit;
  end;
  SetRectEmpty(Result);
end;

procedure TNewTabSet.InvalidateTab(Index: Integer);
var
  R: TRect;
begin
  if HandleAllocated and (Index >= 0) and (Index < FTabs.Count) then begin
    R := GetTabRect(Index);
    { Inc R.Right since the trailing separator of a tab overwrites the first
      pixel of the next tab }
    Inc(R.Right);
    InvalidateRect(Handle, @R, False);
  end;
end;

procedure TNewTabSet.ListChanged(Sender: TObject);
begin
  Invalidate;
end;

procedure TNewTabSet.MouseDown(Button: TMouseButton; Shift: TShiftState; X,
  Y: Integer);
var
  I: Integer;
  R: TRect;
begin
  if Button = mbLeft then begin
    for I := 0 to FTabs.Count-1 do begin
      R := GetTabRect(I);
      if (X >= R.Left) and (X < R.Right) then begin
        TabIndex := I;
        Break;
      end;
    end;
  end;
end;

procedure TNewTabSet.Paint;
var
  HighColorMode: Boolean;

  procedure DrawTabs(const SelectedTab: Boolean);
  var
    I: Integer;
    R: TRect;
  begin
    for I := 0 to FTabs.Count-1 do begin
      R := GetTabRect(I);
      if SelectedTab and (FTabIndex = I) then begin
        Dec(R.Right, TabSpacing);
        Canvas.Brush.Color := clBtnFace;
        Canvas.FillRect(R);
        Canvas.Pen.Color := clBtnHighlight;
        Canvas.MoveTo(R.Left, R.Top);
        Canvas.LineTo(R.Left, R.Bottom-1);
        Canvas.Pen.Color := clBtnText;
        Canvas.LineTo(R.Right-1, R.Bottom-1);
        Canvas.LineTo(R.Right-1, R.Top-1);
        Canvas.Font.Color := clBtnText;
        Canvas.TextOut(R.Left + TabPaddingX, R.Top + TabPaddingY, FTabs[I]);
        ExcludeClipRect(Canvas.Handle, R.Left, R.Top, R.Right, R.Bottom);
        Break;
      end;
      if not SelectedTab and (FTabIndex <> I) then begin
        if HighColorMode and (ColorToRGB(clBtnFace) <> clBlack) then
          Canvas.Font.Color := LightenColor(ColorToRGB(clBtnShadow), -43)
        else begin
          { Like VS.NET, if the button face color is black, or if running in
            low color mode, use plain clBtnHighlight as the text color }
          Canvas.Font.Color := clBtnHighlight;
        end;
        Canvas.TextOut(R.Left + TabPaddingX, R.Top + TabPaddingY, FTabs[I]);
        if HighColorMode then
          Canvas.Pen.Color := clBtnShadow
        else
          Canvas.Pen.Color := clBtnFace;
        Canvas.MoveTo(R.Right, R.Top+3);
        Canvas.LineTo(R.Right, R.Bottom-2);
      end;
    end;
  end;

var
  CR: TRect;
begin
  Canvas.Font.Assign(Font);

  HighColorMode := (GetDeviceCaps(Canvas.Handle, BITSPIXEL) *
    GetDeviceCaps(Canvas.Handle, PLANES)) >= 15;

  CR := ClientRect;

  { Work around an apparent NT 4.0/2000/??? bug. If the width of the DC is
    greater than the width of the screen, then any call to ExcludeClipRect
    inexplicably shrinks the DC's clipping rectangle to the screen width.
    Calling IntersectClipRect first with the entire client area as the
    rectangle solves this (don't ask me why). }
  IntersectClipRect(Canvas.Handle, CR.Left, CR.Top, CR.Right, CR.Bottom);

  { Selected tab }
  DrawTabs(True);

  { Top line }
  Canvas.Pen.Color := clBtnText;
  Canvas.MoveTo(0, 0);
  Canvas.LineTo(CR.Right, 0);

  { Background fill }
  if HighColorMode then
    Canvas.Brush.Color := LightenColor(ColorToRGB(clBtnFace), 35)
  else
    Canvas.Brush.Color := clBtnShadow;
  Inc(CR.Top);
  Canvas.FillRect(CR);

  { Non-selected tabs }
  DrawTabs(False);
end;

procedure TNewTabSet.SetTabIndex(Value: Integer);
begin
  if FTabIndex <> Value then begin
    InvalidateTab(FTabIndex);
    FTabIndex := Value;
    InvalidateTab(Value);
    Click;
  end;
end;

procedure TNewTabSet.SetTabs(Value: TStrings);
begin
  FTabs.Assign(Value);
end;

end.

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品对白一区国产伦| 91丨porny丨首页| 三级影片在线观看欧美日韩一区二区| 国产精品久久久久久亚洲毛片 | 蜜臀av性久久久久蜜臀aⅴ流畅 | 99在线视频精品| 国产精品一区二区三区四区| 国产精品一区免费在线观看| 激情五月婷婷综合网| 国产91精品在线观看| 成人精品电影在线观看| 99精品视频在线观看免费| 色香蕉久久蜜桃| 欧美日韩三级一区二区| 欧美高清一级片在线观看| 久久亚洲精华国产精华液 | 美女视频一区在线观看| 狠狠网亚洲精品| 9i在线看片成人免费| 91官网在线免费观看| 欧美一区二区日韩| 国产精品天天看| 国产一区二区女| 成人国产精品免费网站| 91久久精品网| 久久久天堂av| 亚洲精品va在线观看| 免费av成人在线| 不卡免费追剧大全电视剧网站| 色八戒一区二区三区| 日韩欧美在线网站| 亚洲欧洲日本在线| 麻豆精品一区二区综合av| 欧美性猛片aaaaaaa做受| 欧美精品视频www在线观看| 精品福利av导航| 亚洲成人免费看| 国产成人丝袜美腿| 91精品国产综合久久久久久漫画 | 中文幕一区二区三区久久蜜桃| 一级女性全黄久久生活片免费| 九色porny丨国产精品| 91看片淫黄大片一级在线观看| 日本一区二区三区四区| 香蕉久久夜色精品国产使用方法 | 麻豆久久久久久久| 一本久久综合亚洲鲁鲁五月天 | 欧美a级理论片| 欧美日韩电影在线播放| 日欧美一区二区| 精品欧美一区二区三区精品久久| 极品美女销魂一区二区三区| 欧美性生交片4| 中文字幕在线一区免费| 国产精品一区二区视频| 欧美日韩国产综合久久| 亚洲欧美在线视频观看| 粉嫩久久99精品久久久久久夜| 久久久夜色精品亚洲| 天天av天天翘天天综合网色鬼国产| 成人网在线免费视频| 久久久午夜精品理论片中文字幕| 日韩电影在线观看电影| 欧美性受极品xxxx喷水| 亚洲男人天堂一区| 94色蜜桃网一区二区三区| 国产精品情趣视频| 成人午夜激情片| 国产精品你懂的在线欣赏| 国产精品一二三区| 亚洲制服丝袜在线| 99re66热这里只有精品3直播| 久久久久久99久久久精品网站| 精品在线一区二区三区| 日韩三级在线观看| 蜜臀av性久久久久蜜臀aⅴ四虎| 欧美一级片免费看| 国内一区二区在线| 欧美国产禁国产网站cc| 99久久99久久精品免费看蜜桃| 亚洲欧洲精品一区二区精品久久久| 成人白浆超碰人人人人| 免费观看日韩电影| 精品国产乱码久久久久久蜜臀| 国产乱码字幕精品高清av | 国产精品美女久久久久久久| 成人做爰69片免费看网站| 亚洲私人影院在线观看| 日本道免费精品一区二区三区| 亚洲国产精品一区二区久久| 欧美精品电影在线播放| 狠狠色伊人亚洲综合成人| 国产欧美日韩精品a在线观看| 欧美xfplay| 国产黄色精品网站| 夜夜爽夜夜爽精品视频| 日韩一区二区在线播放| 国产aⅴ精品一区二区三区色成熟| 欧美韩日一区二区三区| 在线一区二区三区四区五区| 人人爽香蕉精品| 国产精品久久久99| 欧美一级一级性生活免费录像| 国产精品亚洲视频| 亚洲高清三级视频| 精品欧美一区二区在线观看| 91成人在线精品| 精品一区二区综合| 亚洲自拍偷拍av| 久久精品亚洲麻豆av一区二区| 91麻豆视频网站| 美女脱光内衣内裤视频久久网站 | 欧美日韩在线播| 国产乱妇无码大片在线观看| 亚洲美女视频一区| 久久众筹精品私拍模特| 色综合久久久久综合体| 色94色欧美sute亚洲线路二| 午夜不卡av在线| 一区二区三区在线免费播放| 久久一日本道色综合| 在线成人免费视频| 色综合天天做天天爱| 黄色小说综合网站| 青草av.久久免费一区| 亚洲欧美偷拍另类a∨色屁股| 日韩美一区二区三区| 欧美三级在线看| 色婷婷综合久久久久中文| 捆绑变态av一区二区三区| 国产九色sp调教91| 日本成人中文字幕| 亚洲午夜激情av| 国产精品免费观看视频| 亚洲精品一区在线观看| 91精品福利在线一区二区三区| 一本大道久久a久久综合| 成a人片国产精品| 国产传媒久久文化传媒| 精品一区二区免费在线观看| 亚洲成人一二三| 亚洲男女毛片无遮挡| 亚洲人妖av一区二区| 中文字幕久久午夜不卡| 中文一区在线播放| 国产丝袜美腿一区二区三区| www国产精品av| 精品国产一区二区精华| 日韩欧美资源站| 欧美变态tickle挠乳网站| 日韩亚洲欧美综合| 日韩美女视频在线| 日韩欧美高清在线| 日韩精品自拍偷拍| 久久久www免费人成精品| 久久一留热品黄| 国产欧美日韩亚州综合| 国产精品美女久久久久高潮| 香蕉加勒比综合久久| 肉丝袜脚交视频一区二区| 日韩国产高清影视| 国内精品久久久久影院薰衣草| 国产精品影视网| 成人高清视频在线观看| 日本道色综合久久| 欧美精品乱人伦久久久久久| 日韩视频免费观看高清完整版 | 国产成人精品亚洲午夜麻豆| 国产999精品久久久久久| 成人精品视频网站| 91香蕉视频污在线| 久久久久久日产精品| 国产精品无人区| 亚洲一区二区在线免费看| 人人狠狠综合久久亚洲| 国产麻豆成人精品| 色婷婷综合久久久中文字幕| 3d成人h动漫网站入口| 久久亚洲精品国产精品紫薇| 中文字幕一区二区5566日韩| 亚洲一区二区三区影院| 狠狠色狠狠色综合系列| 91麻豆精东视频| 日韩欧美成人一区| 国产精品理伦片| 美女www一区二区| 欧美区一区二区三区| 国产亚洲短视频| 亚洲成人黄色影院| 成人激情开心网| 日韩欧美在线影院| 亚洲综合一二区| 高清成人免费视频| 欧美精品精品一区| 亚洲色图都市小说| 国产成人日日夜夜| 日韩一区二区精品| 亚洲亚洲人成综合网络| 成人午夜激情片| 精品国产乱码久久久久久闺蜜|