简单delphi控件,设计时可见,运行时不见
我的想法是做一个控件,在里面放上一个编辑筐和一个按钮,但是设计时可见,运行时不见
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




