如何选中一条直线并删除?(50分)

  • 主题发起人 主题发起人 blueearth
  • 开始时间 开始时间
B

blueearth

Unregistered / Unconfirmed
GUEST, unregistred user!
这条直线是这样创建的CLine := TLine.Create;
我是创建了一个TLine直线类!
我如何选中第I条直线并且删除!
 
TLine类?好象不是从窗口类继承来的,那它没有焦点,只能通过自己编程处理了。
 
有谁有过这样的程序?
或者就不是通过类画的直线如何选中删除呢?
 
或者说如何在直线的两个端点画个标记?或者把直线的颜色改变?
 
BlueEarth 你好,有了答案给我一份。好吗?
 
做一个简单的示例吧,这里只处理了一种情况,就是一左上Image,一右下Image,
把左上Image的(Left+Width,Top)与右下的(Left,Top+Height)连接起来,还需要具体的处理

TLine = class(TGraphicControl)
private
{ Private declarations }
FImage1: TImage;
FImage2: TImage;

procedure CalcPosition;

procedure SetImage1(AValue: TImage);
procedure SetImage2(AValue: TImage);
protected
{ Protected declarations }
procedure WMPaint(var Msg: TWMPaint); message WM_PAINT;
procedure WMLButtonDowm(var Msg: TWMLButtonDown); message WM_LBUTTONDOWN;
public
{ Public declarations }
published
{ Published declarations }
property Image1: TImage read FImage1 write SetImage1;
property Image2: TImage read FImage2 write SetImage2;
end;

procedure Register;

implementation

procedure TLine.WMPaint(var Msg: TWMPaint);
begin
with Canvas do
begin
Lock;
Brush.Style:=bsClear;
FillRect(Canvas.ClipRect); //使其他部分透明

if (not Assigned(Image1)) or (not Assigned(Image2)) then
Exit;

Brush.Style:=bsSolid;
Pen.Color:=clBlack; //画直线,颜色
Pen.Width:=3; //线宽度
MoveTo(0,0);
LineTo(Width,Height);
UnLock;
end;
end;

procedure TLine.CalcPosition;
begin //根据两个Image的位置计算TLine的大小、位置,决定如何画线,在Image移动后重新调用本方法
if (not Assigned(Image1)) or (not Assigned(Image2)) then
Exit;

Left:=Image1.Left+Image1.Width; //这里只处理了一种情况
Top:=Image1.Top; //需要对此处扩充,以处理所有不同的情况
Width:=Image2.Left-Left; //正确的画线
Height:=Image2.Top+Image2.Height-Top;

Repaint;
end;

procedure TLine.SetImage1(AValue: TImage);
begin
FImage1:=AValue;
CalcPoint;
end;

procedure TLine.SetImage2(AValue: TImage);
begin
FImage2:=AValue;
CalcPoint;
end;

procedure TLine.WMLButtonDowm(var Msg: TWMLButtonDown);
begin
//此处根据鼠标位置计算是否在画有直线的范围
//是则为选定状态
end;

end.
 
我也想知道,帮你顶一下
你的这个能在拖动IMAGE的时候,移动线吗?
 
1、与DOS下画图原理一样,画好的直线是不能删除的只能改变着色。
2、你也可以用一个记录集,记录每条画好的直线,删除直线从记录集中删除,然后再重新按记录集中自动绘画。
以上两条见解不知道能否帮你,别忘了给我加分呵。
 
http://www.efg2.com/Lab/Graphics/LineStretch.htm
 
帮你up。
关注。。。有了答案记得总结一下给俺们看阿
 
to pihome:
能给一个具体的例子么?谢了。我会给你分的。
zzgyf@yeah.net
 
多人接受答案了。
 
后退
顶部