怎么,或者用什么控件来实现像windows网络邻居中的TCP/IP中的IP地址的输入框那样的格式?   .   .  
请帮忙!

解决方案 »

  1.   

    用MaskEdit控件,自己编写掩码000.000.000.000
      

  2.   

    我用4个edit连接起来做的
    这里有一个问题就是你要判断4个格子的数字在0~255之间
      

  3.   

    可是用MaskEdit怎么去掉底线?那是个很讨厌的东西。
    还有如果用4个Edit 我感觉不太合适。好象Vc++有专门IP地址控件,Delphi 中没有吗,?
    或者怎么实现它的功能呢》?
      

  4.   

    DELPHI中很容易就实现了,自己写一个这样的控件就行了!
    从MASKEDIT中派生出来就行了
      

  5.   

    小弟刚学Delphi 编写控件,还没有达到这样的水平,大哥可否有代码提示?
      

  6.   

    用RainXP控件包,你给个Email,我发给你。
      

  7.   

    用MASKEDIT控件输入实在不方便啊,哪位大师哥,给我一个能够实现该功能的控件,最好有代码!
      

  8.   

    unit IPEdit;
    interface
    uses Windows, Messages, SysUtils, Classes, Forms, Controls, ComCtrls, CommCtrl;type
      TFieldRange = record
        LowRange: Byte;
        HighRange: Byte;
      end;TFieldChangeEvent = procedure(Sender: TObject;OldField, Value: Byte) of Object;TIPEdit = class(TWinControl)
    private
      FIP: LongWord;
      FFields:array[0..3] of Byte;
      FFieldRanges: array [0..3] of TFieldRange;
      FCreating: Boolean;
      FOnChange: TNotifyEvent;
      FOnEnter: TNotifyEvent;
      FOnExit: TNotifyEvent;
      FOnFieldChange: TFieldChangeEvent;
      procedure SetIP(Value: LongWord);
      function GetIP: LongWord;
      function  GetField(Index:Integer):Byte;
      procedure SetField(Index:Integer; B:Byte);
      function GetFieldRange(Field: Integer):
      TFieldRange;
      procedure SetFieldRange(Field:integer; Value:TFieldRange);
      procedure SetIPAddress;
      function GetBlank: Boolean;
      procedure WMNotifyFormat(var Message: TMessage);message WM_NOTIFYFORMAT;
      procedure CNNotify(var Message: TWMNotify);message CN_NOTIFY;
      procedure CNCommand(var Message: TWMCommand);message CN_COMMAND;
    protected
      procedure CreateParams(var Params: TCreateParams); override;
      procedure CreateWnd; override;
      procedure DestroyWnd; override;
    public
      constructor Create(AOwner: TComponent); override;
      destructor Destroy; override;
      procedure Clear;
      procedure SetFieldFocus(Field:Byte);
    published
      property Blank: Boolean read GetBlank;
      property Field0: Byte index 0 read GetField write SetField;
      property Field1: Byte index 1 read GetField write SetField;
      property Field2: Byte index 2 read GetField write SetField;
      property Field3: Byte index 3 read GetField write SetField;
      property Field0Range: TFieldRange index 0 read GetFieldRange write SetFieldRange;
      property Field1Range: TFieldRange index 1 read GetFieldRange write SetFieldRange;
      property Field2Range: TFieldRange index 2 read GetFieldRange write SetFieldRange;
      property Field3Range: TFieldRange index 3 read GetFieldRange write SetFieldRange;
      property IP: LongWord read GetIP write SetIP;
      property OnChange: TNotifyEvent read FOnChange write FOnChange;
      property OnEnter: TNotifyEvent read FOnEnter write FOnEnter;
      property OnExit: TNotifyEvent read FOnExit write FOnExit;
      property OnFieldChange: TFieldChangeEvent read FOnFieldChange write FOnFieldChange;
      property Enabled;
      property TabOrder;
      property TabStop;
      property ParentShowHint;
      property ShowHint;
      property Hint;
      property Visible;
    end;procedure Register;implementationconstructor TIPEdit.Create(AOwner: TComponent);
    var
      i: integer;
    begin
         CheckCommonControl(ICC_INTERNET_CLASSES);
          inherited Create(AOwner);
          for i:= 0 to 3 do
          begin
            FFieldRanges[i].LowRange:= 0;
            FFieldRanges[i].HighRange:= 255;
            FFields[i]:=0;
          end;
          FIP:=0;
          Height:= 25;
          Width:= 152;
          TabSTop:= True;
    end;procedure TIPEdit.DestroyWnd;
    begin
      inherited DestroyWnd
    end;destructor TIPEdit.Destroy;
    begin
      inherited Destroy;
    end;procedure TIPEdit.CreateParams(var Params:TCreateParams);
    begin
      inherited CreateParams(Params);
      CreateSubClass(Params, WC_IPADDRESS);
    end;procedure TIPEdit.CreateWnd;
    begin
      FCreating := True;
          try
            inherited CreateWnd;
            SetIPAddress;
          finally
            FCreating := False;
          end;
    end;function TIPEdit.GetBlank: Boolean;
    begin
      Result:= Boolean(SendMessage(Handle, IPM_ISBLANK, 0, 0));
    end;procedure TIPEdit.Clear;
    begin
      SendMessage(Handle, IPM_CLEARADDRESS, 0, 0);
    end;procedure TIPEdit.SetFieldFocus(Field:Byte);
    begin
      SendMessage(Handle, IPM_SETFOCUS, Field, 0);
    end;function TIPEdit.GetFieldRange(Field: Integer): TFieldRange;
    begin
      Result:= FFieldRanges[Field];
    end;procedure TIPEdit.SetFieldRange(Field: Integer;
       Value: TFieldRange);
        begin
          if Value.LowRange > Value.HighRange then exit;
          if (FFieldRanges[Field].LowRange <> Value.LowRange) or
            (FFieldRanges[Field].HighRange <> Value.HighRange) then
          begin
            FFieldRanges[Field]:= Value;
            SendMessage(Handle, IPM_SETRANGE, Field,
            MakeIPRange(Value.LowRange, Value.HighRange));
          end;
    end;function TIPEdit.GetField(Index: Integer): Byte;
    begin
      if (Index>=0)and(Index<=3) then Result:=FFields[Index]
      else Result:=0;
    end;procedure TIPEdit.SetField(Index:Integer; B:Byte);
    begin
          if (FFields[Index] <> B)then
          begin
            FFields[Index]:=B;
            SetIPAddress;
          end;
    end;procedure TIPEdit.SetIPAddress;
    var
      i:LongWord;
    begin
      i:=MAKEIPADDRESS(FFields[0], FFields[1], FFields[2],FFields[3]);
      SendMessage(Handle, IPM_SETADDRESS, 0, i);
      FIP:=i;
    end;procedure TIPEdit.SetIP(Value: LongWord);
    begin
          if (FIP <> Value) then
          begin
            FFields[0]:= First_IPAddress(Value);
            FFields[1]:= Second_IPAddress(Value);
            FFields[2]:= Third_IPAddress(Value);
            FFields[3]:= Fourth_IPAddress(Value);
            SetIPAddress;
          end;
    end;function TIPEdit.GetIP: LongWord;
    begin
      SendMessage(Handle, IPM_GETADDRESS, 0,Integer(@Result));
    end;procedure TIPEdit.WMNotifyFormat(var Message:TMessage);
    begin
      with Message do
        Result := DefWindowProc(Handle, Msg, WParam, LParam);
    end;procedure TIPEdit.CNNotify(var Message: TWMNotify);
    var
      pNM: PNMIPAddress;
    begin
          with (Message.NMHdr)^ do
          begin
            case Code of
            IPN_FIELDCHANGED:
            begin
            pNM:=PNMIPADDRESS(Message.NMHdr);
            if (pNM^.iField>=0)and(pNM^.iField<=3) then
            FFields[pNM^.iField]:=pNM^.iValue;
            if Assigned(FOnFieldChange) then
           FOnFieldChange(self, pNM^.iField, pNM^.iValue);
            end;
            end;
          end;
    end;procedure TIPEdit.CNCommand(var Message: TWMCommand);
    begin
          case Message.NotifyCode of
            EN_CHANGE:
            begin
             if not FCreating then
             if Assigned(FOnChange) then FOnChange(self);
            end;
            EN_KILLFOCUS: if Assigned(FOnExit) then FOnExit(self);
            EN_SETFOCUS: if Assigned(FOnEnter) then FOnEnter(self);
          end;
    end;procedure Register;
    begin
      RegisterComponents('Samples', [TIPEdit]);
    end;
      

  9.   

    可是怎么让它成为可视化控件啊,
    在delphi的面版上看不到他的图标啊,
      

  10.   

    maskedit
    editmask  属性 000.000.000.000;1;_
      

  11.   

    ehom(?!) 的方法是这里面最好的,其他的人如果没有更好的控件的话,就不要再贴了。组件安装方法:
    1.将ehom(?!) 的源代码考到记事本中,最后一行加一句代码:end.
    看清楚了end后面是点‘.’,否则你无法编译。
    2.将文件存为IPEdit.pas,例如放到c:\IPEdit目录下。
    3.再delphi中,单击菜单component->install component... 出现组件安装窗口。
    4.选择 c:\IPEdit\IPEdit.pas单元文件,包文件名一般是c:\delphi6\Lib\dclusr.dpk,可以不用变,当然也可以建一个新包。单击ok
    5.编译dclusr.dpk
      

  12.   

    佩服ehom(?!),好有耐心,真写了一个组件
      

  13.   

    wks很细心,少了一个end.呵呵!这个控件不是我写的,是用搜索引擎搜来的!安装方法上面讲了,自定义图标也不难,把图标做成资源文件!把后缀由res改为dcr!文件名和pas文件相同,安装后就可看到效果!从TWinControl派生的就是可视控件,和是否安装无关!没安装也可动态使用!