我想当Combobox得到焦点的时候才显示下拉按钮
失去焦点的时候就隐藏掉。我想从Combobox继承
下来。写一个自已的组件。

解决方案 »

  1.   

    procedure TForm1.ComboBox1Enter(Sender: TObject);
    var
      vHandle: HRGN;
    begin
      with Combobox1 do
      begin
        vHandle := CreateRectRgn(0, 0, width, height);
        SetWindowRgn(Handle, vHandle, True);
      end;
    end;procedure TForm1.ComboBox1Exit(Sender: TObject);
    var
      vHandle: HRGN;
    begin
      with Combobox1 do
      begin
        vHandle := CreateRectRgn(0, 0, width-20, height);
        SetWindowRgn(Handle, vHandle, True);
      end;
    end;
      

  2.   

    unit Unit1;
    {建一个工程,一个form,放入一个button,一个combobox}
    interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;type
      TCombobox = class(StdCtrls.TCombobox)
      protected
        procedure DoEnter; override;
        procedure DoExit; override;
      end;
      TForm1 = class(TForm)
        ComboBox1: TComboBox;
        Button1: TButton;
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TCombobox.DoEnter;
    var
      vHandle: HRGN;
    begin
      inherited;
      form1.caption:='1';
      vHandle := CreateRectRgn(0, 0, width, height);
      SetWindowRgn(Handle, vHandle, True);
    end;
    procedure TCombobox.DoExit;
    var
      vHandle: HRGN;
    begin
      inherited;
      form1.caption:='2';
      vHandle := CreateRectRgn(0, 0, width-20, height);
      SetWindowRgn(Handle, vHandle, True);
    end;
    end.
      

  3.   

    --  把form1.caption:='1'; 去掉
      

  4.   

    >>在自已继承的组件中应该重写哪个方法呀。请大侠指明。
      protected
        procedure DoEnter; dynamic;
        procedure DoExit; dynamic;
      

  5.   

    谢谢 jinjazz(近身剪(N-P攻略)) 
    谢谢 aiirii(ari-爱的眼睛)
    我是这样解决的
    private 
        FjzlOnEnter: TNotifyEvent;
        FjzlOnExit: TNotifyEvent;
        procedure MyEnter(Sender: TObject);
        procedure MyExit(Sender: TObject);
    public
        constructor Create(AOwner: TComponent);overried;
    end;create...
    begin
      Inherited Create(AOwner);
      FjzlOnEnter := self.OnEnter;
      FjzlOnExit := self.OnExit;
      OnEnter := MyEnter;
      OnExit := MyExit;  
    end;
    MyEnter...
    var
      vHandle: HRGN;
    begin
      vHandle := CreateRectRgn(0, 0, width, height);
      SetWindowRgn(Handle, vHandle, True);
      if Assigned(FjzlOnEnter) then FjzlOnEnter(Sender);
      if Assigned(FjzlOnEnter) then FjzlOnEnter(Sender);
    end;
    MyExit...和MyEnter相同
    给分了。谢谢。