You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

232 lines
6.8 KiB
C#

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Collections;
namespace HslCommunication.Controls
{
/// <summary>
///
/// </summary>
public partial class UserPipe : UserControl
{
/// <summary>
/// 管道控件信息
/// </summary>
public UserPipe( )
{
InitializeComponent( );
DoubleBuffered = true;
timer.Interval = 50;
timer.Tick += Timer_Tick;
timer.Start( );
}
/// <summary>
/// 获取或设置管道线的宽度。
/// </summary>
[Browsable( true )]
[Description( "获取或设置管道线的宽度" )]
[Category( "外观" )]
[DefaultValue(5f)]
public float LineWidth
{
get { return lineWidth; }
set
{
if (value > 0)
{
lineWidth = value;
Invalidate( );
}
}
}
/// <summary>
/// 获取或设置管道线是否处于活动状态。
/// </summary>
[Browsable( true )]
[Description( "获取或设置管道线是否处于活动状态" )]
[Category( "外观" )]
[DefaultValue( true )]
public bool IsActive
{
get { return isActive; }
set
{
isActive = value;
Invalidate( );
}
}
/// <summary>
/// 获取或设置管道活动状态的颜色。
/// </summary>
[Browsable( true )]
[Description( "获取或设置管道活动状态的颜色" )]
[Category( "外观" )]
[DefaultValue( typeof(Color ), "Blue")]
public Color ActiveColor
{
get { return activeColor; }
set
{
activeColor = value;
Invalidate( );
}
}
/// <summary>
/// 获取或设置管道的背景色
/// </summary>
[Browsable( true )]
[Description( "获取或设置管道的背景色" )]
[Category( "外观" )]
[DefaultValue( typeof( Color ), "(150, 150, 150 )" )]
public Color LineColor
{
get { return lineColor; }
set { lineColor = value; }
}
/// <summary>
/// 获取或设置管道线的移动速度。该速度和管道的宽度有关
/// </summary>
[Browsable( true )]
[Description( "获取或设置管道线的移动速度。该速度和管道的宽度有关" )]
[Category( "外观" )]
[DefaultValue( 1f )]
public float MoveSpeed
{
get { return moveSpeed; }
set
{
moveSpeed = value;
Invalidate( );
}
}
/// <summary>
/// 获取或设置管道线的坐标。
/// </summary>
[Browsable( true )]
[Description( "获取或设置管道线的坐标格式为0,0;1,1;2,2 分号间隔点" )]
[DefaultValue( "" )]
[Category( "外观" )]
public string LinePoints
{
get
{
StringBuilder sb = new StringBuilder( );
for (int i = 0; i < points.Count; i++)
{
sb.Append( ";" );
sb.Append( points[i].X.ToString() );
sb.Append( "," );
sb.Append( points[i].Y.ToString( ) );
}
if (sb.Length > 0)
return sb.ToString( ).Substring( 1 );
else return string.Empty;
}
set
{
try
{
if (!string.IsNullOrEmpty( value ))
{
points.Clear( );
string[] all = value.Split( new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries );
for (int i = 0; i < all.Length; i++)
{
string[] data = all[i].Split( new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries );
Point point = new Point( );
point.X = Convert.ToInt32( data[0] );
point.Y = Convert.ToInt32( data[1] );
points.Add( point );
}
Invalidate( );
}
}
catch
{
}
}
}
private List<Point> points = new List<Point>( );
private Timer timer = new Timer( );
private float startOffect = 0;
private float lineWidth = 5;
private float moveSpeed = 1;
private Color activeColor = Color.Blue;
private bool isActive = true;
private Color lineColor = Color.FromArgb( 150, 150, 150 );
private void UserPipe_Paint( object sender, PaintEventArgs e )
{
if (!Authorization.nzugaydgwadawdibbas( )) return;
Graphics g = e.Graphics;
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.ClearTypeGridFit;
// if (Width < 5 || Height < 5) return;
Pen pen = new Pen( lineColor, lineWidth );
if (points.Count > 1)
{
g.DrawLines( pen, points.ToArray() );
}
if (isActive)
{
pen.DashStyle = System.Drawing.Drawing2D.DashStyle.Dash;
pen.DashPattern = new float[] { 5, 5 };
pen.DashOffset = startOffect;
pen.Color = activeColor;
if (points.Count > 1)
{
g.DrawLines( pen, points.ToArray( ) );
}
}
pen.Dispose( );
}
private void UserPipe_Load( object sender, EventArgs e )
{
}
private void Timer_Tick( object sender, EventArgs e )
{
startOffect = startOffect - moveSpeed;
if (startOffect <= -10 || startOffect >= 10) startOffect = 0;
Invalidate( );
}
/// <summary>
/// 绘制
/// </summary>
/// <param name="g"></param>
public void OnPaintMainWindow( Graphics g )
{
g.TranslateTransform( this.Location.X, this.Location.Y );
UserPipe_Paint( null, new PaintEventArgs( g, new Rectangle( ) ) );
g.TranslateTransform( - this.Location.X, -this.Location.Y );
}
}
}