有什么方法可以解决在Form.Cavnas后的部分内容可以获得选中,输入焦点(296分)

  • 主题发起人 主题发起人 snrmtd
  • 开始时间 开始时间
S

snrmtd

Unregistered / Unconfirmed
GUEST, unregistred user!
1.在Form上将一段文本Canvas.Textout后,让该文本可以有被选中的功能
2.在Form上将一段文本Canvas.Textout后,让该文本可以有被输入的功能
 
只有自己写代码了,处理鼠标和键盘及画CANVAS
 
to 蒋劲刚,
能不能给一点提示
 
很麻烦的,
你要定义你的数据结构,记录你的FORM上画的所有东西的位置,内容,大小等信息
处理MOUSE事件或消息,写拾取程序,写画焦点程序
处理键盘事件或消息,写输入程序及回显程序。
你为什么有这样的需求,有VCL控件不能实现你的需求吗?
 
为什么不用控件
 
9494,
既然不用VCL,干脆连TForm也不用啊,用API写程序很小的。
 
不成,你必须自己定义这内容,并且textout只是根据你定义的的数据结构重画时使用
 
TO thx1180,
连TFORM也不用呀..那也太夸张了吧.
TO 蒋劲刚,
我这样做只是为了满足一个程序将来的要求,
如果用原有的控件的话..我的程序做出来用个半年到一年,就没用了
因为没有升级的可能了..又要重做
 
用VCL一样可以修改升级呀,只要你用的VCL有源码不就行了吗?
如果要自己完全控制程序细节的话,你也可以自己写VCL。
如果你是要让界面以后可以动态变化,你也可以动态创建VCL。
 
用记录类型存放FORM上画的所有东西的位置,内容,巨型的大小等信息。在form的mousedown事件里判断鼠标的位置,再画出虚线线。
 
蒋劲刚的方法也是太复杂化了! 你可以考虑采用网格录入的方法,即当MOUSE落在textout区域时就动态生成tedit框来进行对textout内容的操作,当mouse坐标移开后就重textout,这样可减少大半的工作
 
TO 蒋劲刚,
我现在在重做类!例如 有选中功能的我会做一个类,有焦点的我做一个类
进行不断的继承完成

不过有个问题
例如:
我在类A中用画了一个面板
A.Draw;
在FORM中直接用
mainform=class(TForm)
...
...
procedure mainform.onbuttom(sender:TObject);
var a:A
begin
a:=A.Create(Self);
a.Presant:=Form;
a.Draw;
end;

这样好像不行,难道就一定要做成VCL注册吗?
 
类A:
A=Class(CustomControl)
...
..
...
pubuic
procedure Draw;
...
...
procedure a.Draw;
begin
canvas.Rectangle(0,0,100,100);
...
end;
是不是这什么地方做错了
 
如果错了我要怎么改呢
 
继承于TCustomControl的控件都有自己的Canvas,你的这个Canvas是谁的?是控件外面传入的Canvas还是控件本身的Canvas?你这样关键的一点都不说明白,只怕只有神仙能帮你了。
 
我也碰到同样的问题。我是把东西画到paintbox的canvas上,然后将canvas上的东西打印出来。根据用户要求,点击canvas上的有些文字时,要弹出相关form。我原本想在文字上覆盖一个透明的label的,但发现不行。因为label是动态覆盖上去的,所以painbox不停的刷新。我现在也在苦恼。
我想我也只有通过鼠标在paintbox上的位置,通过paintbox的click事件来弹出我的相关form.
有没有谁有更好的方法?
 
继承自
TCustomControl的类
你光创建是看不到的,要SHOW一下,不然处于HIDE状态怎么可能看的到??
 
to thx1180;
对,我觉得我也没表示清楚
错了.应说我上面的程序的代码写错了
控件外面传入的Canvas,那我就算是FORM1了.这样好做
但我想要的是控件本身的Canvas
 
為何要這樣做﹖
 
to thx1180
我这样写的。。你看看吧
unit1
...
...
A=class(customcontrol)
private
FLeft,FTop:Integer;
protected
constructor create(aowner:tcomponent);override;
procedure paint;override;
published
property Width;
property Height;
end;
constructor A.create(aowner:tcomponent)
begin
FLeft:=100;
FTop:=100;
Width:=10;Height:=100;
end;

procedure A.paint;
begin
with canvas do
begin
brush.color:=clred;
Rectangle(FLeft,FTop,FLeft+Width,FTop+Height)
end;
end;


unit mainForm
mainform=class(TForm)
...
...
procedure mainform.onbuttom(sender:TObject);
var a:A
begin
a:=A.Create(Self);
a.Presant:=Form;
a.show;
end;

就是显示不了画的图

 
后退
顶部