你如果多研究一段时间VCL,就会发现这并不奇怪,把控件通过一系列的安装、注册的过程后,控件面板上会出现该控件的图标,这样你就可以通过Object Inspector在设计时使用该控件了,而如果你不做上面这些事件,控件同样可用,只不过不能在设计时使用,只能自己写了代码来控制其属性,Object Inspect的作用就是把所有的属性写到窗体文件中而不是单元文件中,从而省去了自己写代码的麻烦。
解决方案 »
- 急问哪位高手能解决此优选算法问题! 马上结贴! 绝不食言!
- 当按下qq输入框的发送按钮时,系统给窗口发什么类型消息?
- [求教]TREEVIEW之间如何赋值,高手请进
- 宝宝7月就要出生了,给宝宝取个名字
- 我是个新手,有很多不懂,谁可以帮我!
- 求树型控件用法,请高手赐教。级别太低,只能放100分,分不够再加。谢谢
- 注冊RegisterHotkey 後,這個hotkey鍵能不能同時使用.
- AMD的CPU能不能用来写程序
- 在delphi7的quickrep中为什么qrimage中显示的图片在打印的时候打不出来?
- 你认为可能很简单的数据表问题?
- 谁有类似于pb中下拉数据窗口的DbLookUpCombox
- Interbase中奇怪的Trigger的问题。
MyShape := TShape.Create(AOwner);
应为:MyShape := TShape.Create(self);
这是因为你没有正确理解控件的Owner和Parent属性的原因;
你可以比较以下代码:
TForm1 = class(TForm)
Shape1: TShape;
Panel1: TPanel;
end;
TMyPanel = class(TPanel)
Shape: TShape;
end;
var
Form1: TForm1;
myPanel: TMyPanel;
你会发现其中:
Form1.Shaep1.Owner := Form1;//即self
Form1.Shape1.Parent := Form1;//即self
Form1.Panel1.Owner := Form1;//
Form1.Panel1.Parent := Form1;
myPanel.Shape.Owner := myPanel;
myPanel.Shape.Parent := myPanel;即:
Panel1可以看作控件TForm1的一个子控件,其owner为form1;
而Shape是MyPanel控件的子控件,其owner为MyPanel;TMyPael.Create(AOwner: TComponent);中的AOwner代表MyPanel的拥有者是Form1;
而TShape.Create(AOwner);中的AOwner代表Shape的拥有者为MyPanel,所以要用self//即MyPanel
没有搞明白你究竟要说些什么????
我的TMyPanel是安装了的,可运行时出错,不安装则没有错!!!!to TommyTong(童童):
非常感谢!
我也知道错在哪里,也并不是我不正确理解控件的Owner和Parent属性,我真是要使Shape的拥有者(Owner)为Form1,因为只有这样,我可以在设计时随便调整Shape的位置。我怎么做为什么不行,能说出点道理来吗??????
或着你能告诉我,怎样才能使Shape在设计时用鼠标随便移动吗???
^^^^^^
但我在我自己编的元件中这么用C(我代码中的Shape)设计的话,虽然Form1所在的单元正确包含了元件C所在的单元,可还是不行,似乎delphi在编译时认为没有元件C,所以把元件C所在的单元给去掉了!!!
但是,把这个Form关掉,再打开,一个Shape变成了两个如果你这这些Shape
统统删掉,再关闭这个Form,那么Access Violation,read address 00000000而且如果按Alt-F12切换的话,每做一次,就多出一个Shape出来,我这里做到了一共有3个
Shape在Panel上,没有继续下去。要做这种动作,需要你去认真研究一下Delphi的流机制,即如何把一个Form存入到一个*.dfm文件中,
建议你去看看TToolBar是怎么写的。
我想TToolBar和Tpanel是一样的,他是设计时往上加控件的,和我的要求还是不一样。
另外要象我那样建控件,并将两个都设成self在设计时shape是不响应鼠标事件的。
我也遇到你说的问题了。另外,象TStatuBar,之类(用TCollection)的控件我知道怎么做。不知TGrid控件的随便改变列的宽,和我这个问题有没有关系。有谁知道点这方面的思路吗?
建议参考以下:
1。DefineProperties(忘了在哪个类里面了,好象是TComponent)
2。RTTI
3。Delphi的Designer(TFormDesigner,IFormDesigner)
4。这个Designer有个方法,叫做IsDesignMsg,找找看吧