歪 歪就歪 Unregistered / Unconfirmed GUEST, unregistred user! 2000-02-09 #1 各位,无论你是高手、低手,如果有关于控件制作方面的技巧和KnowHow, 请贴出来。让歪就歪偷学点儿手艺…… 抱歉,我知道这个题目太空泛,但仍希望能有人回应。 我出钱,大家受益,如何?
Z zcg Unregistered / Unconfirmed GUEST, unregistred user! 2000-02-09 #3 几个基本概念问题一定要分清,比如Delphi提供的property不同于其他编程语言,更灵活。可以直接读取变量值,但需要执行特定操作时,又可调用过程/函数。等等。。。时间长了不用,我也快忘了
沈 沈前卫 Unregistered / Unconfirmed GUEST, unregistred user! 2000-02-09 #4 歪就歪: 什么时候公开让网友下载你的CoreAPIHelp?如果你愿公开,我愿给你1000分!
A Another_eYes Unregistered / Unconfirmed GUEST, unregistred user! 2000-02-10 #5 编控件其实是最简单的事啦. 找 个功能相近的标准(或第三方带源码)的控件, 看看你需要的功能是简单 添加还是需要大修改. 如果是简单添加功能, 那么继承自那个控件, 加入你 自己的事件, 方法, 属性等等. 如果是大修改(比如需要修改上层parent的某些功能但又不想重写一个标准 控件, 例如透明edit之类的), 我觉得处理也很简单, 从source中把原来那个 控件的源码整个copy过来, 然后修改一下. 呵呵, 可以省很多工夫, 并且对 原来那个控件的工作流程也清楚了.
编控件其实是最简单的事啦. 找 个功能相近的标准(或第三方带源码)的控件, 看看你需要的功能是简单 添加还是需要大修改. 如果是简单添加功能, 那么继承自那个控件, 加入你 自己的事件, 方法, 属性等等. 如果是大修改(比如需要修改上层parent的某些功能但又不想重写一个标准 控件, 例如透明edit之类的), 我觉得处理也很简单, 从source中把原来那个 控件的源码整个copy过来, 然后修改一下. 呵呵, 可以省很多工夫, 并且对 原来那个控件的工作流程也清楚了.
歪 歪就歪 Unregistered / Unconfirmed GUEST, unregistred user! 2000-02-10 #6 Another_eYes: 别把我这低手给吓着啊,编控件对我来讲,还是有很困难的。比如: 1. 在设计时无法Debug. 2. 不知道如何加一个Event,比如Length(TMyLabel.Caption)>10 触发一个OnCaptionTooLong. 3. 自定义的TPropertyEditor如何能把数据传回给控件的相应Property 似乎应该是用:TPropertyEdit.SetValues和TPropertyEdit.GetValues 但到底该怎么用? 4. 象TTable和TDataSource之间,他们都是独立的Class,在设计时, 这两个Class并没有实例,是怎么把数据传过去的? 5. 编控件有没有一些小诀窍? …………… 所有这些,当然、也许……要去看VCL的源码去能看明白,非把我累趴下不可 To: 沈前卫: 当然没问题,我要分干什么?还不是为了多提问题。公开让大家荡COREAPI 一点问题也没有,只要: 一、出了分买的同志们不觉委屈。 二、嘿嘿,给我………1400分。
Another_eYes: 别把我这低手给吓着啊,编控件对我来讲,还是有很困难的。比如: 1. 在设计时无法Debug. 2. 不知道如何加一个Event,比如Length(TMyLabel.Caption)>10 触发一个OnCaptionTooLong. 3. 自定义的TPropertyEditor如何能把数据传回给控件的相应Property 似乎应该是用:TPropertyEdit.SetValues和TPropertyEdit.GetValues 但到底该怎么用? 4. 象TTable和TDataSource之间,他们都是独立的Class,在设计时, 这两个Class并没有实例,是怎么把数据传过去的? 5. 编控件有没有一些小诀窍? …………… 所有这些,当然、也许……要去看VCL的源码去能看明白,非把我累趴下不可 To: 沈前卫: 当然没问题,我要分干什么?还不是为了多提问题。公开让大家荡COREAPI 一点问题也没有,只要: 一、出了分买的同志们不觉委屈。 二、嘿嘿,给我………1400分。
C cheka Unregistered / Unconfirmed GUEST, unregistred user! 2000-02-10 #7 1. 设计时可以Debug啊,只要把测试用Project跟组件放在在一个目录里。 2。我一般的解决办法是自定义消息及相应的消息处理过程。 3,4,5: 我也好想知道啊。
歪 歪就歪 Unregistered / Unconfirmed GUEST, unregistred user! 2000-02-10 #8 Cheka: 关于问题一: 比如在设计时改变Property的值,您能DEBUG进SetXXXX(Value : xxx)里么?再比如, 在设计时,我要DEBUG你的PropertyEditor.Edit,行么?不行吧? 其他:其实,细说起来,编控件可能有不少问题应该值得一说呢。
Cheka: 关于问题一: 比如在设计时改变Property的值,您能DEBUG进SetXXXX(Value : xxx)里么?再比如, 在设计时,我要DEBUG你的PropertyEditor.Edit,行么?不行吧? 其他:其实,细说起来,编控件可能有不少问题应该值得一说呢。
沈 沈前卫 Unregistered / Unconfirmed GUEST, unregistred user! 2000-02-10 #9 To 歪就歪: 如果我能从 大富翁上下载CoreAPI,1400给你,决不食言!!! {B-)
沈 沈前卫 Unregistered / Unconfirmed GUEST, unregistred user! 2000-02-10 #10 To 歪就歪: 低手???? 你现在可是排名第一呢!!!! {B-) 说实话,我在回答<a href="http://www.gislab.ecnu.edu.cn/delphibbs/DispQ.asp?LID=173537">这个问题时</a>,对其并不熟悉,是我看ToolAPI的原代码才回答的, 所以我认为你应该去看看ToolAPI的代码,里面的注释非常详细,看完后编写控件会觉得比较容易。 {
To 歪就歪: 低手???? 你现在可是排名第一呢!!!! {B-) 说实话,我在回答<a href="http://www.gislab.ecnu.edu.cn/delphibbs/DispQ.asp?LID=173537">这个问题时</a>,对其并不熟悉,是我看ToolAPI的原代码才回答的, 所以我认为你应该去看看ToolAPI的代码,里面的注释非常详细,看完后编写控件会觉得比较容易。 {
A Another_eYes Unregistered / Unconfirmed GUEST, unregistred user! 2000-02-10 #11 2. 就你这个需要, TMyLabel.caption改动后, Delphi触发了一个CM_TEXTCHANGED 消息, inherited这个消息然后: inherited; if length(caption) > 10 then showmessage('xxxxxxxx'); 3. GetOrdValue, SetOrdValue; 4. 什么意思? 5. 抄源码(整个component地抄), 嘿嘿.
2. 就你这个需要, TMyLabel.caption改动后, Delphi触发了一个CM_TEXTCHANGED 消息, inherited这个消息然后: inherited; if length(caption) > 10 then showmessage('xxxxxxxx'); 3. GetOrdValue, SetOrdValue; 4. 什么意思? 5. 抄源码(整个component地抄), 嘿嘿.
Y y9y Unregistered / Unconfirmed GUEST, unregistred user! 2000-02-10 #13 Hi, everyone, any more comment is very welcome...
W wrench Unregistered / Unconfirmed GUEST, unregistred user! 2000-02-10 #14 to y9y: 2: 在SetCaption中判断Length(TMyLabel.Caption)>10时, 调用某一事件, 有什么问题吗?
沈 沈前卫 Unregistered / Unconfirmed GUEST, unregistred user! 2000-02-11 #15 将SetXXXX(Value : xxx)里面的程序功能在单独的Delphi工程文件中实现,在确 认无误后才写进SetXXXX;PropertyEditor.Edit也作同样处理。其实一般并不需要, 因为实现这些在设计时使用的功能一般都不是很复杂,不外乎接收一些输入数据罢了 ,如果确实复杂,先建立一程序实现PropertyEditor.Edit的所有功能,再进行调试 ,PropertyEditor.Edit与控件的耦合度并不是很精密!!! {B-)
将SetXXXX(Value : xxx)里面的程序功能在单独的Delphi工程文件中实现,在确 认无误后才写进SetXXXX;PropertyEditor.Edit也作同样处理。其实一般并不需要, 因为实现这些在设计时使用的功能一般都不是很复杂,不外乎接收一些输入数据罢了 ,如果确实复杂,先建立一程序实现PropertyEditor.Edit的所有功能,再进行调试 ,PropertyEditor.Edit与控件的耦合度并不是很精密!!! {B-)
4 4.13 Unregistered / Unconfirmed GUEST, unregistred user! 2000-02-12 #17 >谁有写控件的经验、诀窍,愿意继续与大家共享? 很象小时候写作文: 照搬-->增删-->模仿-->独立完成 当然必须同时逐渐加强在文字、语感和思维等方面的能力, 才能独立写好一篇作文。 不过写控件则是要加强对构件的组成、结构、API、OS的机理和建模等方面的掌握和理解。
>谁有写控件的经验、诀窍,愿意继续与大家共享? 很象小时候写作文: 照搬-->增删-->模仿-->独立完成 当然必须同时逐渐加强在文字、语感和思维等方面的能力, 才能独立写好一篇作文。 不过写控件则是要加强对构件的组成、结构、API、OS的机理和建模等方面的掌握和理解。
W wjiachun Unregistered / Unconfirmed GUEST, unregistred user! 2000-03-24 #19 <font color=green> __ ._ ___ _, __ ]L_@' d[~]L `@_dr ]@' "~-@[ `@[ ]@ `@z@' @[ </font> 不要怪我,我向上提……
S SuperMMX Unregistered / Unconfirmed GUEST, unregistred user! 2000-03-24 #20 1, 只要在一个工程里uses 这个控件所在的unit 就行了。