CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
IBM Rational 系统开发最佳实践工具包 WebSphere MQ 最佳实践 TOP 15
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Delphi >  VCL组件开发及应用

简单delphi控件,设计时可见,运行时不见

楼主nanningxiaoxu(船長)2006-03-18 10:29:04 在 Delphi / VCL组件开发及应用 提问

我的想法是做一个控件,在里面放上一个编辑筐和一个按钮,但是设计时可见,运行时不见  
  unit   MyPanel;  
   
  interface  
   
  uses  
      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;  
   
  implementation  
   
  procedure   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. 问题点数:20、回复次数:18Top

1 楼netfly(支点)回复于 2006-03-18 17:12:23 得分 5

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

2 楼nanningxiaoxu(船長)回复于 2006-03-18 22:47:44 得分 0

老兄,还是不行呀,再帮看看我已经改成下面样子  
   
  unit   MyPanel;  
   
  interface  
   
  uses  
      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;  
   
  implementation  
   
  procedure   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.Top

3 楼myworkstation(netmaker)回复于 2006-03-19 05:31:59 得分 5

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

4 楼netfly(支点)回复于 2006-03-20 23:08:48 得分 5

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

5 楼nanningxiaoxu(船長)回复于 2006-03-21 09:00:02 得分 0

兄弟们,还是涛声依旧,我改成下面的样子了!  
   
  unit   MyPanel;  
   
  interface  
   
  uses  
      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;  
   
  implementation  
   
  procedure   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.  
  Top

6 楼nanningxiaoxu(船長)回复于 2006-03-21 09:07:10 得分 0

还是不行呀,再来帮帮!Top

7 楼Blakhawk(黑鹰)回复于 2006-03-21 11:22:59 得分 0

呵呵哈。Top

8 楼Blakhawk(黑鹰)回复于 2006-03-21 11:28:50 得分 0

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

9 楼belllab(菜鸟)回复于 2006-03-21 17:31:16 得分 5

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

10 楼lovejlj(孔乙己)回复于 2006-03-21 23:00:12 得分 0

markTop

11 楼nanningxiaoxu(船長)回复于 2006-03-23 15:23:52 得分 0

我使用这个控件的程序代码,也很简单,就是在一个form上放一个控件而已,我用的是  
  xp+dephi7,就是设计时可见,运行时不可见,气死我了,你的配置是?  
  unit   Unit1;  
   
  interface  
   
  uses  
      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.  
   
  Top

12 楼ffwin()回复于 2006-03-23 15:49:45 得分 0

我测试了一下,你的代码没有问题呀,都可以可见呀Top

13 楼ffwin()回复于 2006-03-23 15:56:53 得分 0

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

14 楼Blakhawk(黑鹰)回复于 2006-03-23 17:55:27 得分 0

哦,我开始理解错了,以为你要在设计阶段可见,运行阶段不可见啦。  
  你重新创建一个工程试试。Top

15 楼Delphi1985(Darkhorse)回复于 2006-03-23 18:25:23 得分 0

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

16 楼Delphi1985(Darkhorse)回复于 2006-03-23 18:28:53 得分 0

晕,我也看错了Top

17 楼belllab(菜鸟)回复于 2006-03-24 16:44:25 得分 0

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

18 楼nanningxiaoxu(船長)回复于 2006-03-24 19:26:38 得分 0

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

相关问题

  • 自制控件,怎样象Timer控件那样,设计时可见,运行时不可见
  • ATL3.0下如何手工添加控件“运行时不可见”支持?
  • 如何在运行时动态生成一个可见的控件?
  • 在delphi运行中,是否可以移动窗口中的控件。
  • 急急...Delphi中如何实现在运行时动态增加控件呢?
  • 求DELPHI控件
  • 让控件不可见。
  • delphi控件问题:
  • Delphi的 TShockwaveFlash 控件
  • Delphi界面控件!!

关键词

  • 控件
  • 组件
  • 代码
  • delphi
  • tmypanel
  • 可见
  • 运行
  • tcomponent
  • interfaceuses
  • mypanel

得分解答快速导航

  • 帖主:nanningxiaoxu
  • netfly
  • myworkstation
  • netfly
  • belllab

相关链接

  • Delphi类图书
  • Delphi类源码下载
  • Delphi控件下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo