我要把Label和Edit合并起来成一个VCL组件,不知道怎么写,请大虾帮我指点一下,最后有例子拿一个给虾米学习一下

解决方案 »

  1.   

    Delphi自带的LabeledEdit就是你想要的
      

  2.   

    嘿!!能不能再卖一送一,如果要再Edit上再个按钮,大虾们怎么做呀
      

  3.   

    我要用Edit加Button做一个弹出窗体,不知道能不能用Edit,Button,Form加再一起做一个弹出框,选择完后,值可以在Edit上显示
      

  4.   

    LabelEdit不是有源码么?照着葫芦画瓢吧
      

  5.   

    从tpanel继承,包含tlabeledit以及一个tbutton
    ,给你写成了类,没有注册组件。如果想写组件,跟这个类大致思路基本上一样,找本书看看吧unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, ExtCtrls;type
      tmypanel = class(TPanel) //自定义的panel,包含两个按钮,当按钮点击的时候,显示按钮的名称和位置
        public
          bt : TButton;
          le : TLabeledEdit;
          procedure MybtnClick(sender : TObject);
          constructor Create(AOwner: TComponent); override;  end;
      TForm1 = class(TForm)
        Panel1: TPanel;
        Button1: TButton;
        Button2: TButton;
        Button3: TButton;
        LabeledEdit1: TLabeledEdit;
        procedure FormCreate(Sender: TObject);
        procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
      private
        { Private declarations }
      public  end;var
      Form1: TForm1;
      a : tmypanel;implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
    beginend;{ tmypanel }constructor tmypanel.Create(AOwner: TComponent);
    begin
      inherited;
      Self.Width := 500;
      Self.Height := 300;
        le := TLabeledEdit.Create(nil);
        le.Parent := Self;
        le.Left := 0;
        le.Top := 100;
        le.Width := 100;
        le.EditLabel.Caption := '帐号';
        le.Text := '1234';    bt := TButton.Create(nil);
        bt.Parent := Self;
        bt.Top := 100;
        bt.Left := 130;
        bt.Caption := '按钮';
        bt.OnClick := MybtnClick;
    end;procedure tmypanel.MybtnClick(sender: TObject);
    begin  ShowMessage(Format('帐号:%s',[Self.le.Text]) );
    end;procedure TForm1.Button1Click(Sender: TObject);
    begin
       a := tmypanel.Create(nil);
       a.Parent := Form1;
       a.Left := 20;
       a.Top := 20;
    end;procedure TForm1.Button2Click(Sender: TObject);
    begin
    a.Free;
    end;end.
      

  6.   

    那就是LabeledButtonEdit,哈哈,买了送一。
      

  7.   

    全部源码,LZ慢慢研究吧:
    一: unit U_zwLabeledEdit;
    interface
    uses
      SysUtils, Classes, Controls, StdCtrls, ExtCtrls, Windows, Messages, Graphics;
    type
      TzwInputType = (itNormal, itNumberic, itMoney);
      TzwLabeledEdit = class(TLabeledEdit)
      private
        { Private declarations }
        FInputType: TzwInputType;
        FOnChangeEVT: TNotifyEvent;
        FOnExitEVT: TNotifyEvent;
        FOnEnterEVT: TNotifyEvent;
        FEnterColor,
        FExitColor: TColor;
        function getTrimEmpty: Boolean;
        function getTrimText: string;
        function getInputEmpty: Boolean;
      protected
        { Protected declarations }
      public
        constructor Create(Aowner: TComponent); override;
        procedure EVT_Onchange(sender: TObject);
        procedure EVT_OnExit(sender: TObject);
        procedure EVT_OnEnter(sender: TObject);
        { Public declarations }
      published
        property IsTrimEmpty: Boolean read getTrimEmpty;
        property InputIsEmpty: Boolean read getInputEmpty;
        property InputType: TzwInputType read FInputType write FInputType;
        property TrimText: string read getTrimText;
        property OnChangeEVT: TNotifyEvent read FOnChangeEVT write FOnChangeEVT;
        property OnExitEVT: TNotifyEvent read FOnExitEVT write FOnExitEVT;
        property OnEnterEVT: TNotifyEvent read FOnEnterEVT write FOnEnterEVT;
        property Color_Enter: TColor read FEnterColor write FEnterColor;
        property Color_Exit: TColor read FExitColor write FExitColor;
        { Published declarations }
      end;
    procedure Register;
    implementation
    procedure Register;
    begin
      RegisterComponents('zwPubComps', [TzwLabeledEdit]);
    end;
    { TzwLabeledEdit }
    function StrIsNumberic(str: string): Boolean;
    var
          tmp: Extended;
    begin
          Result := TryStrToFloat(str, tmp);
    end;
    function StrIsFenNumber(str: string; ACanBeNegative: Boolean): Boolean;
    begin
          Result := True;
          if StrIsNumberic(str) = False then
                Result := False
          else begin
                if not ACanBeNegative then begin
                      if StrToFloat(str) < 0 then begin
                            Result := False;
                            Exit;
                      end;
                end;
                try
                      StrToInt64(FloatToStr(StrToFloat(str) * 100));
                except
                      on e: Exception do
                            Result := False;
                end;
          end;
    end;constructor TzwLabeledEdit.Create(Aowner: TComponent);
    begin
      inherited;
      LabelPosition := lpLeft;
      Color_Enter := Color;
      Color_Exit := Color;  
      OnChange := EVT_Onchange;
      if Tag >= 0 then begin
        OnExit := EVT_OnExit;
        OnEnter := EVT_OnEnter;
      end;                     
    end;
    procedure TzwLabeledEdit.EVT_Onchange(sender: TObject);
    var
      position: Integer;
    begin
      case FInputType of
        itNormal: ;
        itNumberic: begin
          with TLabeledEdit(sender) do begin
            if TrimText <> '' then begin
              position := Pos('.', Text);
              if position > 0 then begin
                Text := Copy(Text, 1, position + 2);
                SendMessage(Handle, EM_SETSEL, 10000, 10000);
              end;
              position := Pos('e', Text);
              if position > 0 then begin
                Text := Copy(Text, 1, Length(Text) - 1);
                SendMessage(Handle, EM_SETSEL, 10000, 10000);
              end;
              if not StrIsNumberic(Text) then begin
                Text := Copy(Text, 1, Length(Text) - 1);
                SendMessage(Handle, EM_SETSEL, 10000, 10000);
              end;
            end;
          end
        end;
        itMoney: begin
          with TLabeledEdit(sender) do begin
            if TrimText <> '' then begin
              position := Pos('.', Text);
              if position > 0 then begin
                Text := Copy(Text, 1, position + 2);
                SendMessage(Handle, EM_SETSEL, 10000, 10000);
              end;
              position := Pos('e', Text);
              if position > 0 then begin
                Text := Copy(Text, 1, Length(Text) - 1);
                SendMessage(Handle, EM_SETSEL, 10000, 10000);
              end;          if not StrIsFenNumber(Text, False) then begin
                Text := Copy(Text, 1, Length(Text) - 1);
                SendMessage(Handle, EM_SETSEL, 10000, 10000);
              end;
            end;
          end;
        end;
        
      end;
      if Assigned(FOnChangeEVT) then
        FOnChangeEVT(sender);
    end;
    procedure TzwLabeledEdit.EVT_OnEnter(sender: TObject);
    begin
          Color := FEnterColor;
          if Assigned(FOnEnterEVT) then
                FOnEnterEVT(sender);
    end;
    procedure TzwLabeledEdit.EVT_OnExit(sender: TObject);
    begin
          Color := FExitColor;
          if Assigned(FOnExitEVT) then
                FOnExitEVT(sender);
    end;
    function TzwLabeledEdit.getInputEmpty: Boolean;
    begin
          if TrimText = '' then begin
                Result := True;
                MessageBox(GetActiveWindow, PChar('请输入' + EditLabel.Caption), '提示', MB_ICONWARNING or MB_OK);
                try
                      Self.SetFocus
                except
                      Exit;
                end;
          end
          else
                Result := False;
    end;
    function TzwLabeledEdit.getTrimEmpty: Boolean;
    begin
      if TrimText = '' then
        Result := True
      else
        Result := False;
    end;
    function TzwLabeledEdit.getTrimText: string;
    begin
      Result := Trim(TLabeledEdit(Self).Text);
    end;
    end.
      

  8.   

    二:  TLabeledEdit = class(TCustomLabeledEdit)从Delphi自己的Extctrls单元中过来。