如何在form上画斜线(200分)

  • 主题发起人 主题发起人 xueminliu
  • 开始时间 开始时间
X

xueminliu

Unregistered / Unconfirmed
GUEST, unregistred user!
斜线用来连接两个Image,Image可能随着鼠标拖动而移动,
同时斜线还需要响应右键菜单(对应不同的图标弹出不同的菜单)
非常着急,要分还可以再加
 
不明白什么意思,能否说清楚?
 
lineto
moveto
试试看。
 
在鼠标移动事件中写程序
判断是image移动时(比如说此时是鼠标左键按下等),可以计算出image移动的位置,然后相应的将画线也重新画,然后将Form InValid就可以了
 

moveto

lineto
 
各位:moveto lineto画出的线能实现右键菜单不?呵呵
 
老兄,换换思路吧,别老指望斜线弹出菜单,完全可以截获被画斜线的那个form或wincontrol的鼠标右键消息,在那里面判断鼠标坐标是否在斜线上,如在则弹出你的菜单,如不在则交给原来的消息处理程序。
 
是啊,斜线上本来是没有菜单的,
你自己把斜线做为个对象,处理她的鼠标右键事件吧,其他的图标也都是这样处理啊,
这就是面向对象:)
 
多谢各位了,上午熬了一个上午,自己从tpanel派生了一个类来画线,呵呵
 
To 楼主:
能否共享一下你的代码给我研究一下,谢谢 [:D]
 
很简单,从Tpanel派生了一个类TLine
处理Resize

procedure TLine.Resize;
var
rgn: HRGN;
X, Y, W, H: Integer;
begin
inherited;

Color := clBlue;
if BeginPath(Canvas.Handle) = false then
begin
ShowMessage(inttostr(GetLastError));
end;
if SetBKMode(Canvas.Handle, TRANSPARENT) = 0 then
begin
ShowMessage(inttostr(GetLastError));
end;
Canvas.Font.Name := 'ËÎÌå';
Canvas.Font.Size := 200;

Canvas.MoveTo(width,2);
Canvas.LineTo(2,Height);
Canvas.LineTo(0, height-2);
Canvas.LineTo(width-2, 0);
Canvas.LineTo(width,2);

if EndPath(Canvas.Handle) = false then
begin
ShowMessage(inttostr(GetLastError));
end;
rgn := PathToRegion(Canvas.Handle);
if rgn = 0 then
begin
ShowMessage(inttostr(GetLastError));
end
else
SetWindowRgn(Handle, rgn, true);

end;

然后设置大小后线条也会变化,其实偶上个星期就实现了,只是赋值赋错了,
搞得线条一直没有画出来,今天静下心来检查了一遍而已
 
后退
顶部