难题!界面编辑器的设计
DELPHI的界面编辑器IDE大家都用的很熟,有没有想过在自己的应用中做类似的一个呢?
我现在正在给客户做这样的一个东西,目的就是能够让客户根据数据表的结构自己编辑输入界面,那程序就不用因为各个客户的需要不同而必须做多个输入界面了。
到目前为止,我的程序已经能够根据需要生成控件了,不过在这里碰到了一个问题。就是如何使生成的控件能使用setdesigning进入编辑状态。请各位给点提示。谢谢!
问题点数:300、回复次数:28Top
1 楼chechy(www.qdocuments.net)回复于 2002-04-11 12:00:54 得分 30
我觉得可以做一个控件(简称X),可以自由得拖动,改变大小。
然后当用户选中任意界面控件,改变这个控件的Parent,让X作为控件的Parent(即控件附着在X上),这样各种拖动,改变大小就可以改变了。当焦点改变后,将控件的Parent恢复成原来。
当然这是一个想法,具体实现时有很多细节值得研究。Top
2 楼inbud(清风侠)回复于 2002-04-11 12:05:22 得分 30
SetDesigning其实只能是你定义的一个虚方法。通过这个方法把真正控件
应该做的事件屏蔽掉,然后重新处理控件的一些动作,比如
DoSize;
DoMove;
DoSetText;
这写方法是提供给用户编辑控件外观的,这些代码与你程序要处理的“运行时”方法并没有两样。举个例子吧。
一个Label,运行时执行OnClick,OnDblClick
用户设计时需要处理OnMouseDown, OnMouseUp, OnMouseMove, Caption
procedure SetDesigning(b:Boolean)
begin
if b then
begin
ThisLabel.OnClick:=niL
ThisLabel.OnDblClick:=niL;
ThisLabel.OnMouseDown:=DesignMouseDown;
ThisLabel.OnMouseUp:=DesignMouseUp;
...
end
else
begin
ThisLabel.OnClick:=CustomClick;
ThisLabel.OnDblClick:=CustomDblClick;
ThisLabel.OnMouseDown:=niL;
...
end;
end;
Top
3 楼newwen(玩一会儿)回复于 2002-04-11 12:13:20 得分 30
曾作过多媒体触摸屏程序中用RTTI为控件属性赋值,用一个panel画出边框,内签一个panel放待编辑的控件,效果还可以,不过控件类需要先注册,新的控件直接加不进去,后来就不做了,其实不是很使用,因为要动态配置事件,最终用户很烦,不够工程人员很喜欢Top
4 楼Borlandor(五角大民)回复于 2002-04-11 12:26:29 得分 10
1.自己定义一些关于控件的映射结构(类),这些类可以充当Delphi控件的容器.
2.通过改变这些类的属性,可以改变其内控件的大小,方位,颜色字体等.
3.用户编辑完后,将这些类信息保存为一个文件.
4.使用时,载入文件,动态生成相应的控件.Top
5 楼qiubolecn(来自差生市)回复于 2002-04-11 12:33:01 得分 100
我写过一个,你看看是否符合你的想法
hellodelphi.8u8.com/dynamic.zipTop
6 楼windindance(风舞轻扬·白首为功名)回复于 2002-04-11 12:40:42 得分 0
我感觉……
真的有必要做这种需求吗?
客户真的需要这种需求吗?Top
7 楼qiubolecn(来自差生市)回复于 2002-04-11 12:44:06 得分 0
很有必要,只是实现上很大的问题,看过瑞星的pos系统没,它就提供一个这样的功能,只是它的事件局限于 sql 语句。
这就和fastreport一样。
Top
8 楼qiubolecn(来自差生市)回复于 2002-04-11 12:48:57 得分 0
通过TStretchHandle这个控件,来实现拖动等是比较简单的,另外,可以通过对新建控件来进行事件的绑定。
属性这方面,标准的属性编辑器是有的,dxInspector是个不错的选择,但在实际当中,用它是没用的,客户不可能去学习delphi,所以,需要我们自已去调用,去实现RTTI.Top
9 楼wjohenw(CSharp)回复于 2002-04-11 13:32:09 得分 0
来学习,多多指教Top
10 楼Liusp(夜深千帐灯)回复于 2002-04-11 13:37:36 得分 0
这么多红星!Top
11 楼ghyghost(爱国人士-许愿池里的希腊老石头)回复于 2002-04-11 14:16:56 得分 0
星星我爱你们!Top
12 楼cobi(我是小新)回复于 2002-04-11 14:30:52 得分 0
谢谢各位,其实我的想法中不需要实现对控件的事件做处理这样复杂的操作,只要求实现几点:
1.可以移动控件
2.可以改变控件的大小、颜色、字体等属性
3.在实现上面操作的时候可以有类似在delphi中设计的效果,例如可以有控件获取焦点时的小方框显示等
请继续讨论Top
13 楼qiubolecn(来自差生市)回复于 2002-04-11 14:50:02 得分 50
移动大小,得到焦点等只要一个 TStretchHandle就搞定,已经发到你的邮箱里,文件名为 handle.pas
改变大小,颜色,字体等属性的,就最好是自已写方法。
在我的 propertyform里没有实现对对象的操作。你可以 拿delphi for delphi来参考一下,不过,是for 4.0的
我把它放在 hellodelphi.8u8.com/source.zip里,大家看看Top
14 楼cobi(我是小新)回复于 2002-04-11 19:00:13 得分 0
提前Top
15 楼wwwwwwww(我我)回复于 2002-04-11 19:04:12 得分 0
学习!!!Top
16 楼blazingfire(烈焰)(对.net极度憎恨中....)回复于 2002-04-11 19:11:39 得分 0
太难,不会,UP!Top
17 楼INeedCa(缺钙)回复于 2002-04-12 01:23:28 得分 30
我们公司自己开发了一个,不过目前还不能公开。绑定数据和事件等与系统的结构和使用目的有很大的关系。
typInfo.pas没有注释,看起来是比较累 呵呵
另外,你可以参考FormDesigner这个产品。Top
18 楼cobi(我是小新)回复于 2002-04-18 11:31:10 得分 0
因为时间有限,所以目前我采用了qiubolecn(来自差生市) 提供的控件进行实现。等有一定成果的时候,再向大家透露一下。
谢谢!Top
19 楼taxi(当时明月在,曾照彩云归)回复于 2002-04-18 11:38:04 得分 0
留个脚印Top
20 楼dreamfan(改行不做程序员,回家种地。)回复于 2002-04-18 11:46:35 得分 0
看看Top
21 楼befree(似有似无)回复于 2002-04-18 11:54:57 得分 0
关注Top
22 楼xxmmmx(踢踏)回复于 2002-04-18 11:58:18 得分 0
/uuuuuu..ppTop
23 楼newwen(玩一会儿)回复于 2002-04-18 12:02:49 得分 20
http://vip.6to23.com/zgj67/Top
24 楼3fly(三飞)回复于 2002-04-22 21:41:43 得分 0
高……手Top
25 楼halfdream(哈欠)回复于 2002-04-23 09:20:55 得分 0
到此一游Top
26 楼DeathCat(从死亡边缘站起来的患了狂猫病的猫)回复于 2002-04-23 09:30:08 得分 0
学习了。Top
27 楼ollea(一定要mf到胡萝卜)回复于 2002-04-23 10:48:38 得分 0
upingTop
28 楼steelhorse(吾尝终日而思矣,不如须臾之所学也)回复于 2002-04-23 11:01:06 得分 0
UPTop




