画线控件的问题,老题重问(200分)

  • 主题发起人 主题发起人 cccccccs
  • 开始时间 开始时间
C

cccccccs

Unregistered / Unconfirmed
GUEST, unregistred user!
去年没有解决的问题,综合一下再发一次。。。。
功能:
给出两坐标,进行画线。
要求:
1:可以变色
2:可以改变线的宽度
3:不要做成那种矩形、只显示对角线的那种,那样会盖住下面的控件的。
4:可以写标签,就是写描述信息了,描述信息放在线上,并且与线平行,就是说,当线为斜线时,描述信息也要是斜的。。。这样就不能只加个label了事。。
其中,第4个比较困难

我现有画线控件和可旋转标签控件,尝试做过,发现效果不是很好。。。因为线和标签的坐标、位置都需要很精确,差一点就看上去很糟糕。。而线一般都是用SetWindowRgn之类的画,坐标稍有偏差,角度也不那么精确。。所以表现出来就很差。。。
再者,label总是在线下面,因为继承TGraphicControl的缘故,看上去很不爽,而继承twincontrol的话又会盖住其他控件,因为尽管它是斜的label,毕竟还是个矩形。。。

迫在眉睫了亚。。各位帮帮我吧。。拜
 
还是有疑问,是不是写个控件,控件表现出来就是一条线段和标签?

你既然已经写了大部分,那继续下去吧,如果有问题,就问,要别人帮你写全部代码要花很多时间。
提示: Windows的逻辑字体是可以旋转的
 
给你一个控件吧,完全能实现你所要的东西
http://www.delphiarea.com/products/simplegraph/simplegraph.zip
 
这个东西要是写成VCL怎么做??设想一下:
从VCL面板上拖下来的时候,默认是水平线段上面写着“I Love U”;
应该具有的属性:Color,LineWidth:TColor;HdPoint,TlPoint:TPoint;Text:string;Font:TFont;
........恩。差不多了。具体想想。。
没有焦点。不用从TCustomControl来。TGraphicControl完全胜任。
倾斜字体。自己Create 一个LogFont.倾斜角度有HdPoint和TLPoint计算斜率得到;
一切搞定。
唯一的重点代码可能就是这个LogFont了。请看下面的东西。其他的自己解决。都是小菜了。
var
LogFont : TLogFont;
theFont : TFont;
begin
with Form1.Canvas do
begin
// 设置窗体画布的字体
Font.Name := 'Arial'; // 字体
Font.Size := 8; // 字号
Font.Color:= clBackground; // 颜色
// 创建新字体
theFont := TFont.Create;
theFont.Assign(Font); // 新字体继承窗体画布字体的属性
// 为新字体设置旋转属性
GetObject(theFont.Handle, sizeof(LogFont), @LogFont);
LogFont.lfEscapement := -900; // 单位为( 1 / 1 0 )°
theFont.Handle := CreateFontIndirect(LogFont);
Font.Assign(theFont); **********

thefont.Free;
//t h e F o n t . F r e e ;
// 使用新字体在鼠标按下的位置显示文字信息
TextOut(X, Y, '12345678' ) ;

 
后退
顶部