发信人: lihai155(天琴)
整理人: kingron(2000-12-27 18:20:13), 站内信件
|
unit Line;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls;
type
TLine = class(TPanel)
private
FEndY: Integer;
FStartY: Integer;
FEndX: Integer;
FStartX: Integer;
HdlRgn:THandle;
FLineWidth: Integer;
procedure SetEndX(const Value: Integer);
procedure SetEndY(const Value: Integer);
procedure SetStartX(const Value: Integer);
procedure SetStartY(const Value: Integer);
procedure DrawLine;
procedure SetLineWidth(const Value: Integer);
{ Private declarations }
protected
{ Protected declarations }
public
{ Public declarations }
Constructor Create(AOwner:TComponent);override;
Destructor Destroy;override;
published
{ Published declarations }
property StartX:Integer Read FStartX write SetStartX;
property StartY:Integer Read FStartY write SetStartY;
property EndX:Integer Read FEndX write SetEndX;
property EndY:Integer Read FEndY write SetEndY;
property LineWidth:Integer Read FLineWidth write SetLineWidth;
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents('Samples', [TLine]);
end;
{ TLine }
constructor TLine.Create(AOwner: TComponent);
begin
inherited;
Self.Caption:='';
Color:=clRed;
if Parent=nil then
Parent:=TWinControl(AOwner);
Left:=0; Top:=0;
FStartX:=0; FStartY:=0;
FEndX:=100; FEndY:=100;
FLineWidth:=3;
DrawLine;
end;
destructor TLine.Destroy;
begin
inherited;
DeleteObject(HdlRgn);
end;
procedure TLine.DrawLine;
Var
Pnts:Array[1..4]of TPoint;
begin
if Parent=nil then exit;
Pnts[1].x:=FStartX; Pnts[1].y:=FStartY;
Pnts[2].x:=FEndX; Pnts[2].y:=FEndY;
Pnts[3].x:=FEndX+FLineWidth; Pnts[3].y:=FEndY - FLineWidth;
Pnts[4].x:=FStartX+FLineWidth; Pnts[4].y:=FStartY - FLineWidth;
if HdlRgn>0 then
DeleteObject(HdlRgn);
HdlRgn:=CreatePolyGonRgn(Pnts,4,Winding);
SetWindowRgn(Handle,HdlRgn,True);
DeleteObject(Handle);
end;
procedure TLine.SetEndX(const Value: Integer);
begin
FEndX := Value;
DrawLine;
end;
procedure TLine.SetEndY(const Value: Integer);
begin
FEndY := Value;
DrawLine;
end;
procedure TLine.SetLineWidth(const Value: Integer);
begin
FLineWidth := Value;
DrawLine;
end;
procedure TLine.SetStartX(const Value: Integer);
begin
FStartX := Value;
DrawLine;
end;
procedure TLine.SetStartY(const Value: Integer);
begin
FStartY := Value;
DrawLine;
end;
end.
//这个控件在编辑环境下有一个虚框,在运行时就是一个线形了。
//有什么改进意见欢迎回复,谢谢。
---- 头上起包包,鲜血直见飚。
脚杆不松活,据说要开刀。
还考啥子初中,差点儿进高烟囱。 |
|