我的想法是做一个控件,在里面放上一个编辑筐和一个按钮,但是设计时可见,运行时不见
unit MyPanel;interfaceuses
  SysUtils, Classes, Controls, ExtCtrls,Buttons,StdCtrls;type
  TMyPanel = class(TPanel)
  private
  Begin_No: TEdit;
  B_Ok: TBitBtn;
    { Private declarations }
  protected
    { Protected declarations }
  public
  constructor Create(Owner: TComponent); override;
  destructor Destroy; override;
    { Public declarations }
  published
    { Published declarations }
  end;procedure Register;implementationprocedure Register;
begin
  RegisterComponents('xiaoxu', [TMyPanel]);
end;
constructor TMyPanel.Create(Owner: TComponent);
begin
  inherited Create(Owner);
  Begin_No:=TEdit.Create(self);
  B_Ok:=TBitBtn.Create(self);
  Begin_No.Parent:=self;
  B_Ok.Parent:=self;
  Begin_No.Left:=73;
  Begin_No.Top:=1;
  Begin_No.Width:=121;
  Begin_No.Height:=21;
  Begin_No.Visible:=true;
  B_Ok.Left:=1;
  B_Ok.Top:=1;
  B_Ok.Width:=75;
  B_Ok.Height:=25;
  B_Ok.Visible:=true;
  B_Ok.Kind:=bkOK;
  Caption:='';
  Height:=25;
  AutoSize:=true;
end;
destructor TMyPanel.Destroy;
begin
Begin_No.Free;
B_Ok.Free;
inherited;
end;end.

解决方案 »

  1.   

    在CREATE最后加上SELF.UPDATE然后在将EDIT的ONCHANGE事件登记到自己的一个PROCEDURE里先处理以下,其中要UPDATE
      

  2.   

    老兄,还是不行呀,再帮看看我已经改成下面样子unit MyPanel;interfaceuses
      SysUtils, Classes, Controls, ExtCtrls,Buttons,StdCtrls;type
      TMyPanel = class(TPanel)
      private
      Begin_No: TEdit;
      B_Ok: TBitBtn;
      procedure myeditchange(Sender: TObject);
        { Private declarations }
      protected
        { Protected declarations }
      public
      constructor Create(Owner: TComponent); override;
      destructor Destroy; override;
        { Public declarations }
      published
        { Published declarations }
      end;procedure Register;implementationprocedure Register;
    begin
      RegisterComponents('xiaoxu', [TMyPanel]);
    end;
    procedure TMyPanel.myeditchange(Sender: TObject);
    begin
      self.Update;end;
    constructor TMyPanel.Create(Owner: TComponent);
    begin
      inherited Create(Owner);
      Begin_No:=TEdit.Create(self);
      B_Ok:=TBitBtn.Create(self);
      Begin_No.Parent:=self;
      B_Ok.Parent:=self;
      Begin_No.Left:=73;
      Begin_No.Top:=1;
      Begin_No.Width:=121;
      Begin_No.Height:=21;
      Begin_No.Visible:=true;
      Begin_No.OnChange:=myeditchange;
      B_Ok.Left:=1;
      B_Ok.Top:=1;
      B_Ok.Width:=75;
      B_Ok.Height:=25;
      B_Ok.Visible:=true;
      B_Ok.Kind:=bkOK;
      Caption:='';
      Height:=25;
      AutoSize:=true;
      self.Update;
    end;
    destructor TMyPanel.Destroy;
    begin
    Begin_No.Free;
    B_Ok.Free;
    inherited;
    end;end.
      

  3.   

    你可以判断ComponentState 属性,当组件是在设计时的时候这个属性的值应该是csDesiging.(由于很长时间没用delphi,具体的值写的可能不对,但是差不多是这样),这样你在override的Create方法中不让组件显示就可以了。当然这其实并不是什么好的处理方法。如果你的组件需要负责子控件的显示的话组件应该从TWinControl继承比较合适,如果没有必要,那么从TComponent组件继承比较合适,当然在显示的时候你需要处理负责子控件显示的Parent.
      

  4.   

    你还要在constructor TMyPanel.Create(Owner: TComponent);
    begin
      inherited Create(Owner);
       ........... 
      Begin_No.Height:=21;
      Begin_No.Visible:=true;
      Begin_no.update
       ......
      b_ok.update
    ....
    end
      

  5.   

    兄弟们,还是涛声依旧,我改成下面的样子了!unit MyPanel;interfaceuses
      SysUtils, Classes, Controls, ExtCtrls,Buttons,StdCtrls;type
      TMyPanel = class(TPanel)
      private
      Begin_No: TEdit;
      B_Ok: TBitBtn;
      procedure myeditchange(Sender: TObject);
        { Private declarations }
      protected
        { Protected declarations }
      public
      constructor Create(Owner: TComponent); override;
      destructor Destroy; override;
      procedure Update;override;
        { Public declarations }
      published
        { Published declarations }
      end;procedure Register;implementationprocedure Register;
    begin
      RegisterComponents('xiaoxu', [TMyPanel]);
    end;
    procedure TMyPanel.myeditchange(Sender: TObject);
    begin
      self.Update;end;
    procedure TMyPanel.Update;
    begin
      inherited ;
      Begin_No.Update;
      B_Ok.Update;
    end;
    constructor TMyPanel.Create(Owner: TComponent);
    begin
      inherited Create(Owner);
      Begin_No:=TEdit.Create(self);
      B_Ok:=TBitBtn.Create(self);
      Begin_No.Parent:=self;
      B_Ok.Parent:=self;
      Begin_No.Left:=73;
      Begin_No.Top:=1;
      Begin_No.Width:=121;
      Begin_No.Height:=21;
      Begin_No.Visible:=true;
      Begin_no.update;
      Begin_No.OnChange:=myeditchange;
      B_Ok.Left:=1;
      B_Ok.Top:=1;
      B_Ok.Width:=75;
      B_Ok.Height:=25;
      B_Ok.Visible:=true;
      B_Ok.Update;
      B_Ok.Kind:=bkOK;
      Caption:='';
      Height:=25;
      AutoSize:=true;
      self.Update;
    end;
    destructor TMyPanel.Destroy;
    begin
    Begin_No.Free;
    B_Ok.Free;
    inherited;
    end;end.
      

  6.   

    你在Create事件里头把Visible设置为FALSE,或者把WIDTH:=0,HEIGHT:=0这样也看不见啊。
      

  7.   

    兄弟,你的是DELPHI有问题还是Windows有问题,我按你2006-03-21 09:00:00 发的那段代码做的,运行时完全看得到啊!
    你这个是控件代码,那你的使用这个控件的程序的代码是怎么样的?
      

  8.   

    我使用这个控件的程序代码,也很简单,就是在一个form上放一个控件而已,我用的是
    xp+dephi7,就是设计时可见,运行时不可见,气死我了,你的配置是?
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs;type
      TForm1 = class(TForm)
        MyPanel1: TMyPanel;
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}end.
      

  9.   

    我在2000和XP上进行了测试,没有发现问题,我怀疑你的delphi7系统有了问题,建议在delphi7\bin\目录下运行 D7RegClean.exe,然后注册,然后安装组件,测试,如果不行的话,建议重新安装delphi
      

  10.   

    把控件的Visible属性设为False不行吗?
      

  11.   

    我的是XP SP2 Delphi7
    建议你重装Delhpi吧
      

  12.   

    谢谢兄弟们,我试试重装delphi看看