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

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

?? ipedit.pas

?? 一個用于做IP地址編輯功能的控件
?? PAS
字號:
{ Tihs component is distributed as a freeware. You can use it freely, but if you do
some modifications on this code, please let me know. Bug report and upgrade suggestion
are Welcome.
Description:  An enhanced TEdit component for Inputing IP address
Author:       Joe Zhang (huilong@szonline.net)
Date:         13 Dec 2000

Properties
  IPString: An IP string like 'xxx.xxx.xxx.xxx', if current input is invalid, then this
           string is empty;
  Addr: 32bit IP value, if current input is invalid, then this value is 0.
Events
  OnChange: Generate after valid IP changed.
  OnError: Generate when the input is invalid.
}

unit IPEdit;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, ExtCtrls, IPFieldEdit;

type

  TIPErrorEvent = procedure(Sender: TObject; Field: integer) of Object;

  TIPEdit = class(TCustomControl)
  private
    FFields: array [0..3] of TIPFieldEdit;
    /////////
    FBorderStyle: TBorderStyle;
    FFullRepaint: Boolean;
    FOnError: TIPErrorEvent;
    FOnChange: TNotifyEvent;
    procedure CMBorderChanged(var Message: TMessage); message CM_BORDERCHANGED;
    procedure CMCtl3DChanged(var Message: TMessage); message CM_CTL3DCHANGED;
    procedure WMSize(var Message: TWMSize); message WM_SIZE;
    procedure WMWindowPosChanged(var Message: TWMWindowPosChanged); message WM_WINDOWPOSCHANGED;
    procedure CMEnter(var Message: TCMEnter); message CM_ENTER;
    procedure WMLButtonDown(var Message: TWMLButtonDown); message WM_LBUTTONDOWN;
    procedure CMColorChanged(var Message: TMessage); message CM_COLORCHANGED;
    procedure CMFontChanged(var Message: TMessage); message CM_FONTCHANGED;
    //procedure CMSizeChange(var Message:TMessage);message  CM_
  protected
    procedure ArrangeFields();
    procedure CreateParams(var Params: TCreateParams); override;
    procedure AdjustClientRect(var Rect: TRect); override;
    procedure Paint(); override;
    property FullRepaint: Boolean read FFullRepaint write FFullRepaint default True;
    function GetMin(idx: integer): Byte;
    procedure SetMin(idx: integer; value: Byte);
    function GetMax(idx: integer): Byte;
    procedure SetMax(idx: integer; value: Byte);
    function GetIPString: string;
    procedure SetIPString(value: string);
    function GetIPError: boolean;
    function GetAddr: integer;
    procedure SetAddr(value: integer);
    function FocusIndex: integer;
    function GetFields(idx: integer): TIPFieldEdit;
    function GetTabStop: Boolean;
    procedure SetTabStop(value: Boolean);
    procedure SetReadOnly(value: Boolean);
    function GetReadOnly: Boolean;
    procedure SetBorderStyle(Value: TBorderStyle);
    function GetCursor(): TCursor;
    procedure SetCursor(Value: TCursor);

  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
    procedure ActiveNextField(Sel: Boolean = False);
    procedure ActivePrevField(Sel: Boolean = False);
    property Min[index: integer]: Byte read GetMin write SetMin;
    property Max[index: integer]: Byte read GetMax write SetMax;
    property Addr: integer read GetAddr write SetAddr;
    property Fields[index: integer]: TIPFieldEdit read GetFields;
  published
    property Anchors;
    property IPString: string read GetIPString write SetIPString;
    property BorderStyle: TBorderStyle read FBorderStyle write SetBorderStyle default bsSingle;
    property BevelEdges;
    property BevelInner;
    property BevelKind default bkNone;
    property BevelOuter;
    property Color;
    property Cursor: TCursor Read GetCursor write SetCursor;
    property Font;
    property Enabled;
    property Error: Boolean read GetIPError;
    property ParentColor default False;
    property ParentFont default True;
    property ParentShowHint;
    property PopupMenu;
    property ReadOnly: Boolean read GetReadOnly write SetReadOnly default False;
    property ShowHint;
    property TabOrder;
    property TabStop: Boolean read GetTabStop write SetTabStop default True;
    property Visible;
    property OnChange: TNotifyEvent read FOnChange write FOnChange;
    property OnError: TIPErrorEvent read FOnError write FOnError;
    property OnEnter;
    property OnExit;
  end;

procedure Register;

implementation

{ TIPEdit }

constructor TIPEdit.Create(AOwner: TComponent);
var
  i: integer;
begin
  inherited Create(AOwner);
  ControlStyle := [csAcceptsControls, csCaptureMouse, csClickEvents,
    csSetCaption, csOpaque, csDoubleClicks, csReplicatable];
  ParentFont := True;  /////////  false
  FBorderStyle := bsSingle;
  FFullRepaint := True;
  UseDockManager := True;
  for i := 0 to 3 do
  begin
    FFields[i] := TIPFieldEdit.Create(Self);
    FFields[i].Parent := Self;
  end;
  Cursor := crIBeam;
  Width := 125;
  Height := 21;
  Font.Size:=9;
  Font.Style:=[fsBold];
  TabStop := True;
  ParentColor := False;
  ArrangeFields();
end;

destructor TIPEdit.Destroy;
var
  i: integer;
begin
  for i := 0 to 3 do
    FFields[i].Free;
  inherited;
end;

procedure TIPEdit.CreateParams(var Params: TCreateParams);
const
  BorderStyles: array[TBorderStyle] of DWORD = (0, WS_BORDER);
begin
  inherited CreateParams(Params);
  with Params do
  begin
    Style := Style or BorderStyles[FBorderStyle];
    if NewStyleControls and Ctl3D and (FBorderStyle = bsSingle) then
    begin
      Style := Style and not WS_BORDER;
      ExStyle := ExStyle or WS_EX_CLIENTEDGE;
    end;
    WindowClass.style := WindowClass.style and not (CS_HREDRAW or CS_VREDRAW);
  end;
end;

procedure TIPEdit.CMBorderChanged(var Message: TMessage);
begin
  inherited;
  Invalidate;
end;

procedure TIPEdit.CMColorChanged(var Message: TMessage);
begin //
  inherited;
  Invalidate;
end;

procedure TIPEdit.CMFontChanged(var Message: TMessage);
begin //
  inherited;
  Invalidate;
  ArrangeFields();
end;

procedure TIPEdit.CMCtl3DChanged(var Message: TMessage);
begin
  if NewStyleControls and (FBorderStyle = bsSingle) then RecreateWnd;
  inherited;
end;

procedure TIPEdit.WMWindowPosChanged(var Message: TWMWindowPosChanged);
var
  BevelPixels: Integer;
  Rect: TRect;
begin
  if FullRepaint or (Caption <> '') then
    Invalidate()
  else
  begin
    BevelPixels := BorderWidth;
//    if BevelInner <> bvNone then Inc(BevelPixels, BevelWidth);
//    if BevelOuter <> bvNone then Inc(BevelPixels, BevelWidth);
    if BevelPixels > 0 then
    begin
      Rect.Right := Width;
      Rect.Bottom := Height;
      if Message.WindowPos^.cx <> Rect.Right then
      begin
        Rect.Top := 0;
        Rect.Left := Rect.Right - BevelPixels - 1;
        InvalidateRect(Handle, @Rect, True);
      end;
      if Message.WindowPos^.cy <> Rect.Bottom then
      begin
        Rect.Left := 0;
        Rect.Top := Rect.Bottom - BevelPixels - 1;
        InvalidateRect(Handle, @Rect, True);
      end;
    end;
  end;
  inherited;
end;

procedure TIPEdit.Paint();
const
  Alignments: array[TAlignment] of Longint = (DT_LEFT, DT_RIGHT, DT_CENTER);
var
  Rect: TRect;
//  h, t,
  l, w: integer;
  d: integer;
  t,h:Integer; //我的變量
begin
//  h := Abs(Font.Height) + 2;
//  t := (Height - h - 4) div 2;
  w := Abs(Font.Size) * 3; //字體的大小
  d := w div 9+1;
  l := (Width - w * 4 - d * 3 - 4) div 2;
  Rect := GetClientRect;

  h := Abs(Font.Height)+2; // Abs(Font.Height) + 2;
  t := (Height - h - 4) div 2 +1; //(Height - h - 4) div 2 +1;

  Frame3D(Canvas, Rect, clBtnHighlight, clBtnShadow, BorderWidth);
  with Canvas do
  begin
    Brush.Color := Color;//Self.Color;
    FillRect(Rect);
    Brush.Style := bsClear;
    Font.Assign(Self.Font);
    Font.Style := [fsBold];
    Font.Size:=18;
    Rect.Top := t-(18-w div 3);//FFields[0].Top;
    Inc(l, w);
    Inc(Rect.Left, l);
    Canvas.TextOut(Rect.Left, Rect.Top, '.');
    Inc(Rect.Left, w + d);
    Canvas.TextOut(Rect.Left, Rect.Top, '.');
    Inc(Rect.Left, w + d);
    Canvas.TextOut(Rect.Left, Rect.Top, '.');
  end;
end;

procedure TIPEdit.SetBorderStyle(Value: TBorderStyle);
begin
  if FBorderStyle <> Value then
  begin
    FBorderStyle := Value;
    RecreateWnd;
  end;
end;

function TIPEdit.GetCursor(): TCursor;
begin
  Result := inherited Cursor;
end;

procedure TIPEdit.SetCursor(Value: TCursor);
var
  i: integer;
begin
  inherited Cursor := Value;
  for i := 0 to 3 do
    FFields[i].Cursor := Value;
end;

procedure TIPEdit.AdjustClientRect(var Rect: TRect);
//var
//  BevelSize: Integer;
begin
  inherited AdjustClientRect(Rect);
  InflateRect(Rect, -BorderWidth, -BorderWidth);
//  BevelSize := 0;
//  if BevelOuter <> bvNone then Inc(BevelSize, BevelWidth);
//  if BevelInner <> bvNone then Inc(BevelSize, BevelWidth);
//  InflateRect(Rect, -BevelSize, -BevelSize);
end;

procedure TIPEdit.ArrangeFields();
var
  i: integer;
  l, t, h, w: integer;
  d: integer;  // dot width, half of size
  m:integer;
begin
  if not Assigned(Parent) then
    Exit;
  m:=Height-2;//自己加入一個高度
  h := Abs(Font.Height)+2; // Abs(Font.Height) + 2;
  t := (Height - h - 4) div 2 +1; //(Height - h - 4) div 2 +1;
  w := Abs(Font.Size) * 3;
  d := w div 9+1;
  l := (Width - w * 4 - d * 3 - 4) div 2;
  for i := 0 to 3 do
  with FFields[i] do
  begin
    SetBounds(l, t, w, m); //設置邊界 SetBounds(l, t, w, h);
    l := l + w + d;
  end;
end;

procedure TIPEdit.ActivePrevField(Sel: Boolean);
var
  i: integer;
begin
  i := 3;
  while i >= 1 do
  begin
    if FFields[i].Focused then
      Break;
    Dec(i);
  end;
  if i >= 1 then
  begin
    if Sel then
      FFields[i-1].SelectAll
    else
      FFields[i-1].CurrentPosition := 3;
    FFields[i-1].SetFocus;
  end
end;

procedure TIPEdit.ActiveNextField(Sel: Boolean);
var
  i: integer;
begin
  i := 0;
  while i <= 2 do
  begin
    if FFields[i].Focused then
      Break;
    Inc(i);
  end;
  if i <= 2 then
  begin
    if Sel then
      FFields[i+1].SelectAll
    else
      FFields[i+1].CurrentPosition := 0;
    FFields[i+1].SetFocus;
  end
end;

function TIPEdit.GetMin(idx: integer): Byte;
begin
  Result := FFields[idx].Min;
end;

procedure TIPEdit.SetMin(idx: integer; value: Byte);
begin
  FFields[idx].Min := value;
end;

function TIPEdit.GetMax(idx: integer): Byte;
begin
  Result := FFields[idx].Max;
end;

procedure TIPEdit.SetMax(idx: integer; value: Byte);
begin
  FFields[idx].Max := value;
end;

function TIPEdit.GetIPString: string;
var
  i: integer;
begin
  Result := '' ;
  for i := 0 to 3 do
  begin
    if FFields[i].Error then
    begin
      Result := '255';
      Exit;
    end;
    Result := Result + inttostr(FFields[i].Value);
    if i < 3 then
      Result := Result + '.';
  end;
end;

function getnum(var st: string): integer;
var
  s: string;
  i, err: integer;
begin
  i := Pos('.', st);
  if i > 0 then
    s := Copy(st, 1, i-1)
  else
    s := st;
  Delete(st, 1, i-1);
  Val(s, result, err);
  if (err <> 0) or (result > 255) or (result < 0) then
    result := -1;
end;

function getdot(var st: string):integer; // -1 err;
begin
  if (Length(st)>0) and (st[1]='.') then
  begin
    Delete(st, 1, 1);
    Result := 0;
  end
  else
    Result := -1;
end;

procedure TIPEdit.SetIPString(value: string);
var
  v: array [0..3] of byte;
  i, k: integer;
begin
  for i:=0 to 3 do
  begin
    k := getnum(value);
    if (k < 0) or (k > 255) then
     k:=255; //趙明達
      //Exit; //趙明達
    v[i] := k;
    if (i<>3) then
      if getdot(value) < 0 then
        Exit; 
  end;
  for i:=0 to 3 do
    FFields[i].Value := v[i];
end;

function TIPEdit.GetIPError: boolean;
begin
  Result := FFields[0].Error or FFields[1].Error or
            FFields[2].Error or FFields[3].Error;
end;

function TIPEdit.GetAddr: integer;
type
  DWORDSTRUCT = Record
    case integer of
      0: (b: array [0..3] of Byte);
      1: (w: array [0..1] of word);
      2: (d: integer);
  end;
var
  v: DWORDSTRUCT;
  i: integer;
begin
  if Error then
    Result := 0
  else
  begin
    for i := 0 to 3 do
      v.b[i] := FFields[i].Value;
    Result := v.d;
  end;
end;

procedure TIPEdit.SetAddr(value: integer);
type
  DWORDSTRUCT = Record
    case integer of
      0: (b: array [0..3] of Byte);
      1: (w: array [0..1] of word);
      2: (d: integer);
  end;
var
  v: DWORDSTRUCT;
  i: integer;
begin
  v.d := value;
  for i := 0 to 3 do
  begin
    FFields[i].Value := v.b[i];
  end;
end;

function TIPEdit.FocusIndex: integer;
var
  i: integer;
begin
  Result := -1;
  for i := 0 to 3 do
  if FFields[i].Focused then
    Result := i;
end;

procedure TIPEdit.WMSize(var Message: TWMSize);
begin
  inherited;
  Invalidate; 
  ArrangeFields();
end;

procedure TIPEdit.WMLButtonDown(var Message: TWMLButtonDown);
begin
  inherited;
  if FocusIndex < 0 then
    FFields[0].SetFocus;
end;

function TIPEdit.GetFields(idx: integer): TIPFieldEdit;
begin
  Result := FFields[idx];
end;

{procedure TIPEdit.SetColor(Value: TColor);
var
  i: integer;
begin
  if inherited Color <> Value then
  begin
    inherited Color := Value;
//    for i := 0 to 3 do
//      FFields[i].Color := Value;
  end;
end;

function TIPEdit.GetColor: TColor;
begin
  Result := inherited Color;
end;
}

function TIPEdit.GetTabStop: Boolean;
begin
  Result := inherited TabStop;
end;

procedure TIPEdit.SetTabStop(value: Boolean);
var
  i: integer;
begin
  if value <> inherited TabStop then
  begin
    inherited TabStop := value;
    for i := 0 to 3 do
      FFields[i].TabStop := value;
  end;
end;

procedure TIPEdit.SetReadOnly(value: Boolean);
var
  i: integer;
begin
  if ReadOnly <> value then
    for i := 0 to 3 do
      FFields[i].ReadOnly := value;
end;

function TIPEdit.GetReadOnly: Boolean;
begin
  Result := FFields[0].ReadOnly;
end;

procedure TIPEdit.CMEnter(var Message: TCMEnter);
begin
  FFields[0].SetFocus;
  inherited;
end;

procedure Register;
begin
  RegisterComponents('Standard', [TIPEdit]);
end;

end.

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美激情一区三区| 奇米四色…亚洲| 日韩精品色哟哟| 成人网在线免费视频| 777奇米四色成人影色区| 一区免费观看视频| 精品在线观看免费| 欧美区在线观看| 亚洲欧美色一区| 国产成都精品91一区二区三 | 亚洲一区二区三区影院| 国产一区二区在线看| 欧美精选一区二区| 一区二区三区高清| 99精品久久久久久| 国产日产欧美精品一区二区三区| 日韩不卡一二三区| 欧洲精品一区二区| 亚洲麻豆国产自偷在线| 福利电影一区二区三区| 26uuu欧美| 蜜桃视频免费观看一区| 91麻豆精品国产91久久久 | 成人av一区二区三区| 精品美女一区二区| 久久国产三级精品| 69堂精品视频| 日本三级亚洲精品| 欧美一区二区三区四区五区| 日韩高清在线电影| 欧美一区二区福利在线| 美日韩一级片在线观看| 日韩美女在线视频| 久久国产婷婷国产香蕉| 精品乱码亚洲一区二区不卡| 精品一区二区免费| 久久综合色之久久综合| 国产一区二区按摩在线观看| 国产亚洲精品超碰| 成人国产精品免费观看| 中文字幕一区二区三区乱码在线| 91在线观看视频| 亚洲一二三区在线观看| 91精品蜜臀在线一区尤物| 日韩电影在线一区二区三区| 日韩精品最新网址| 国产一区二区美女| 中文乱码免费一区二区| 一本久久a久久精品亚洲| 夜夜精品视频一区二区 | 日韩精品自拍偷拍| 国产精品亚洲一区二区三区在线| 国产精品色婷婷久久58| 色婷婷久久一区二区三区麻豆| 亚洲国产精品久久一线不卡| 日韩欧美国产一区二区三区 | av中文字幕一区| 亚洲精品国产品国语在线app| 欧美在线观看视频在线| 免费欧美日韩国产三级电影| 久久夜色精品一区| 91小视频在线观看| 日韩不卡一区二区| 亚洲国产精品成人综合| 欧美亚洲动漫精品| 国内精品在线播放| 亚洲女爱视频在线| 日韩欧美亚洲一区二区| 成人avav影音| 久久精品99国产精品| 亚洲视频电影在线| 精品国产乱码久久久久久老虎| 成人午夜电影网站| 日本美女一区二区三区视频| 国产精品美女久久久久aⅴ国产馆| 欧美最猛性xxxxx直播| 国产专区综合网| 亚洲国产综合在线| 亚洲国产精品国自产拍av| 欧美日韩国产高清一区二区三区 | 美女网站色91| 亚洲猫色日本管| 久久久三级国产网站| 在线观看91精品国产入口| 久久99国产精品尤物| 一区二区三区在线免费播放| 精品日本一线二线三线不卡| 欧美日韩在线播| 色综合久久久久综合体桃花网| 狠狠色伊人亚洲综合成人| 亚洲成人免费影院| 亚洲日本一区二区| 久久久久久久久久久久久夜| 91精品婷婷国产综合久久竹菊| 97久久精品人人爽人人爽蜜臀| 国内精品视频666| 午夜精品久久久久久久久久| 一区二区三区不卡在线观看| 国产精品私房写真福利视频| 久久欧美中文字幕| 日韩小视频在线观看专区| 欧美色视频在线| 色婷婷av久久久久久久| 成人av中文字幕| 成人午夜在线播放| 国产乱理伦片在线观看夜一区| 丝袜脚交一区二区| 亚洲国产精品人人做人人爽| 国产精品久久久久久久久免费桃花| 精品福利一区二区三区| 日韩欧美电影一二三| 欧美一区二区三区四区高清| 欧美日韩国产首页在线观看| 欧美性大战久久久久久久 | 激情图区综合网| 九九精品一区二区| 精品在线你懂的| 久久99精品久久久久久| 久久精品99国产精品| 激情综合色综合久久| 国产尤物一区二区在线| 国产精品原创巨作av| 成人午夜视频在线观看| 波多野结衣亚洲一区| av动漫一区二区| 91在线你懂得| 在线精品观看国产| 欧美日韩精品一区二区三区 | 精品粉嫩aⅴ一区二区三区四区| 日韩欧美综合一区| 久久久久久久久久美女| 中文字幕免费不卡| 亚洲狠狠丁香婷婷综合久久久| 亚洲自拍偷拍九九九| 日韩国产在线观看| 国产一区二区精品久久| 大胆欧美人体老妇| 色综合久久中文综合久久97| 欧美日本一区二区| 久久久www免费人成精品| 最新高清无码专区| 青娱乐精品视频| 成人美女视频在线看| 欧美综合欧美视频| 精品国产成人系列| 国产精品久久久久久久久久久免费看 | 一本在线高清不卡dvd| 欧美四级电影网| 精品国产不卡一区二区三区| 亚洲欧洲精品成人久久奇米网| 亚洲一区二三区| 国模大尺度一区二区三区| 成a人片国产精品| 欧美一激情一区二区三区| 亚洲国产精品二十页| 日韩在线一二三区| eeuss国产一区二区三区| 欧美精品vⅰdeose4hd| 国产精品盗摄一区二区三区| 日韩国产在线一| 99国内精品久久| 久久久久久久久久久久久女国产乱 | 亚洲电影你懂得| 国产91综合一区在线观看| 欧美日韩精品一区二区| 国产精品久久久久桃色tv| 日韩精品免费视频人成| 91精品国产综合久久蜜臀| 国产欧美精品一区二区三区四区| 亚洲地区一二三色| 91亚洲资源网| 国产日韩欧美制服另类| 奇米影视一区二区三区| 91黄色免费看| 国产精品天干天干在观线| 久久成人麻豆午夜电影| 在线精品视频免费观看| 中文字幕一区三区| 国产精品一区三区| 欧美一区永久视频免费观看| 亚洲另类在线制服丝袜| 国产白丝网站精品污在线入口| 日韩丝袜情趣美女图片| 午夜精品一区在线观看| 91免费观看国产| 欧美激情一二三区| 国产麻豆日韩欧美久久| 欧美成人午夜电影| 轻轻草成人在线| 欧美一区二区网站| 水蜜桃久久夜色精品一区的特点| 色呦呦一区二区三区| 中文一区一区三区高中清不卡| 国产精品中文字幕日韩精品| 亚洲精品一区二区在线观看| 日韩va欧美va亚洲va久久| 91精品中文字幕一区二区三区| 丝袜诱惑制服诱惑色一区在线观看| 欧美亚日韩国产aⅴ精品中极品| 一区二区三区精品视频|