在线等:关于在Canvas上面处理文字的高级问题,有建议就有分!(200分)

  • 主题发起人 主题发起人 zx126
  • 开始时间 开始时间
Z

zx126

Unregistered / Unconfirmed
GUEST, unregistred user!
问题描述:
1,在Image的Canvas上面,画出文字,这个文字需要有边框,并且透明。。
2,文字可以改变其属性(字体,颜色,字号等)。
3,文字可以任意移动,并且在文字移动过程中Image不能抖动。
4,边框大小可以调整,随着边框大小的调整,文字自动重新排列。
5,可以输入多组文字。

需要解答的要点,也就是我遇到的难点:
1,文字不知怎么移动。
2,边框大小不知如何调整。

可以更贴帮助我,也可以mail我: zx126@sina.com
当然也可以QQ:26369066 (请在加入时候注明:delphi)。
 
自己编写透明文字控件(可自动折行)
将透明文字控件Canvas上的文字
 
对不起,我不能对您的问题有什么好的想法,因为我是delphi新手,但现在有个问题急需解决,
手上又没有书,所以不得不麻烦您一下。
我想请问,在delphi中怎么在command2中搞用command1的click事件,谢谢。下次送分给您。
 
灵光一闪,编写组件是个不错的想法!
 
55555,您对我问题呢?
 
ike:
方法1,在 Button2 的单击事件里面写入 Self.Button1.Click; 即可。
方法2,Button2 共享 Button1 的 OnClick 。

分数不要了,不用客气,欢迎来坐。
 
高手都到那里玩去了? @_~
 
自己写控检,继承鼠标点击的消息,判断是否在文字的范围内,如果在,则选中文本,
再在mousemove中移动文字,在mouseup中给文字更新位置
我最近正在写一个类似的控件,如果你需要的话,可以给你发一个单元过去,
具体的实现方法得自己写了
 
编写组件吧
 
还有控件的边框调整大小,也是在mousedown中判断在文字控件中的具体位置
有8个方向判断,等明天到单位了给你发过去,在家里没有类似的代码
 
jlutt-sadan 非常感谢!明天油箱敬候佳音

还有大家不要局限在组件上面,集思广益,需要的是思想。
你若有什么好的想法敬请赐教,只要能实现上文的部分功能即可。
 
首先一定要建立一个TEXT类,要保存文本的字体颜色、字体大小、选用字体等。保存文本的
起始坐标点(x, y),及文本的矩形的右下角坐标。类的简单定义如下:
class CText
{
protected:
int m_left;
int m_top;
int m_right;
int m_bottom;
string m_strText; //文本的内容
Font m_textFont;
COLORREF m_textColor;
public:
void Draw();//画文本
void DrawTracker()//画选中标志
void MoveOffSet(CSize offset)//移动
ResizeObject(float resizeX, float resizeY, int resizePoint);//调整大小
void SetBoundRgn();//设置最小边界矩形,以备文字重画用。
}
有了这样的类,就什么也不怕了,
在函数Draw()中用API函数DrawText就可以了。
移动时,只要得到鼠标点的偏移量,分别修改四个坐标(加上偏移量),然后重画,这时矩形已经
变化了,用SetBoundRgn()得到矩形,然后调用draw()就可以了。这个在MOUSEMOVE事件中
可以看到矩形随着鼠标点移动。
这是已经画好的文本移动的方法。
对于一开始画图则需要输入文本,则需要一个EDIT控件,当用户鼠标点下时,按着鼠标拖动
出现一个矩形,当鼠标UP后,得到这个矩形的大小 ,用Create的方法生成EDIT控件。大小
与矩形一样。这样用户就可以输入文本了,输入完毕后,用一个变量保存用户输入的文本,
然后生成一个CTEXT类,保存用户输入的数据,删除EDIT控件,用CTEXT类的实例调用Draw
Text方法在屏幕上按照矩形大小画出这个文本。这样一个画文本的过程就结束了。当用户选
中文本时,怎样判断是否选中呢,很简单,只要判断鼠标点的坐标点是否在刚才画的矩形内
就可,如果在就是选中,画上选中标志就可以,如果用户是双击选中,就再次生成一个跟刚才
矩形大小、位置一样的EDIT控件,让用户修改文本就可以,这样用户还可修改文本的字体结构
。这是真正的画图中画文本的方法。如果是写一个控件也可以但最终还是要把TEXT的内容
画的CANVAS上,而且跟用户输入的文本结构、行数、位置都必须一样。最终还是殊途同归。
 
我已经发过去了,请注意查收
 
对了,忘记一个问题了,在编译时候,请将TArpLabel中的create事件中的
FTextStyle设置为tsnormal。我是在测试在格中画斜线的功能将之设置为tstwo1的
 
jlutt-sadan:邮件没有收到!请注意核实我的油箱地址:zx126@sina.com 谢谢!
 
邮件传送 成功啦!
163上不去了,唉,用的是单位的邮箱
 
我以前下过类似的控件,好像是在资源社区下载的,我就是在这里查到线索后找到这个控件,
这个控件应该说比较好用,但也有一些不足,反正有源代码,你可以改。

你试试搜索关键字:IDE 控件
祝你好运。
 
本来我想帮你写个类,议会有事,献给你思路:
a
1:在image上放一个memo,no 边框;在image上画一个,记录边框参数;
2:在memo中编辑文字,编辑好后用winapi textout 根据边框写文字,有多种格式选择,自然
memo 变成不可见。
3:在image上选择文本时memo 变成可见。根据边框参数的变化使memo变化,完成移动,调整。
重写同2步。
b:
如果想连光标都控制的用到ShowCaret,CreateCaret,textout等函数;
涉及到中英文判断,总之黑复杂,可以探讨。
 
多人接受答案了。
 
后退
顶部