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.
227 lines
7.2 KiB
C#
227 lines
7.2 KiB
C#
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.Drawing.Drawing2D;
|
|
|
|
namespace HslCommunication.Controls
|
|
{
|
|
/// <summary>
|
|
/// 瓶子控件
|
|
/// </summary>
|
|
public partial class UserBottle : UserControl
|
|
{
|
|
/// <summary>
|
|
/// 实例化一个新的控件对象
|
|
/// </summary>
|
|
public UserBottle( )
|
|
{
|
|
InitializeComponent( );
|
|
DoubleBuffered = true;
|
|
stringFormat.Alignment = StringAlignment.Center;
|
|
stringFormat.LineAlignment = StringAlignment.Center;
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// 获取或设置瓶子的液位值。
|
|
/// </summary>
|
|
[Browsable( true )]
|
|
[DefaultValue( typeof( double ), "60" )]
|
|
[Category( "外观" )]
|
|
public double Value
|
|
{
|
|
get
|
|
{
|
|
return this.value;
|
|
}
|
|
set
|
|
{
|
|
if (value >= 0 && value <= 100)
|
|
{
|
|
this.value = value;
|
|
Invalidate( );
|
|
}
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 获取或设置瓶子是否处于打开的状态。
|
|
/// </summary>
|
|
[Browsable( true )]
|
|
[DefaultValue( typeof( bool ), "false" )]
|
|
[Category( "外观" )]
|
|
public bool IsOpen
|
|
{
|
|
get
|
|
{
|
|
return isOpen;
|
|
}
|
|
set
|
|
{
|
|
isOpen = value;
|
|
Invalidate( );
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 获取或设置瓶子的标签信息,用于绘制在瓶子上的信息。
|
|
/// </summary>
|
|
[Browsable( true )]
|
|
[DefaultValue( typeof( string ), "" )]
|
|
[Category( "外观" )]
|
|
public string BottleTag
|
|
{
|
|
get
|
|
{
|
|
return bottleTag;
|
|
}
|
|
set
|
|
{
|
|
bottleTag = value;
|
|
Invalidate( );
|
|
}
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// 获取或设置瓶子的备注信息,用于绘制在瓶子顶部的信息。
|
|
/// </summary>
|
|
[Browsable( true )]
|
|
[DefaultValue( typeof( string ), "原料1" )]
|
|
[Category( "外观" )]
|
|
public string HeadTag
|
|
{
|
|
get
|
|
{
|
|
return headTag;
|
|
}
|
|
set
|
|
{
|
|
headTag = value;
|
|
Invalidate( );
|
|
}
|
|
}
|
|
|
|
|
|
private double value = 50;
|
|
private bool isOpen = false;
|
|
private string bottleTag = "";
|
|
private StringFormat stringFormat = new StringFormat( );
|
|
private string headTag = "原料1";
|
|
|
|
/// <summary>
|
|
/// 重写消息处理机制
|
|
/// </summary>
|
|
/// <param name="m">系统消息</param>
|
|
protected override void WndProc( ref Message m )
|
|
{
|
|
if (m.Msg == 0x14) return;
|
|
base.WndProc( ref m );
|
|
}
|
|
|
|
/// <summary>
|
|
/// 重新绘制界面图形
|
|
/// </summary>
|
|
/// <param name="e">绘制消息</param>
|
|
protected override void OnPaint( 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 < 15 || Height < 15) return;
|
|
|
|
int middle = Width / 2;
|
|
int value_Y = Height - Width - (Height - Width - 20) * Convert.ToInt32( value ) / 100;
|
|
|
|
// 计算一些相关的参数信息
|
|
GraphicsPath graphicsPath = new GraphicsPath( );
|
|
graphicsPath.AddPolygon( new Point[] {
|
|
new Point(0,20),
|
|
new Point(0,Height - Width),
|
|
new Point(middle + 1, Height-8),
|
|
new Point(middle + 1,20),
|
|
new Point(0,20),
|
|
} );
|
|
Brush b = new LinearGradientBrush( new Point( 0, 20 ), new Point( middle + 1, 20 ), Color.FromArgb( 142, 196, 216 ), Color.FromArgb( 240, 240, 240 ) );
|
|
|
|
g.FillPath( b, graphicsPath );
|
|
graphicsPath.Reset( );
|
|
graphicsPath.AddPolygon( new Point[] {
|
|
new Point(middle,20),
|
|
new Point(middle,Height - 8),
|
|
new Point(Width-1, Height-Width),
|
|
new Point(Width-1,20),
|
|
new Point(middle,20),
|
|
} );
|
|
b.Dispose( );
|
|
b = new LinearGradientBrush( new Point( middle - 1, 20 ), new Point( Width - 1, 20 ), Color.FromArgb( 240, 240, 240 ), Color.FromArgb( 142, 196, 216 ) );
|
|
g.FillPath( b, graphicsPath );
|
|
b.Dispose( );
|
|
|
|
b = new SolidBrush( Color.FromArgb( 151, 232, 244 ) );
|
|
g.FillEllipse( b, 1, 17, Width - 3, 6 );
|
|
b.Dispose( );
|
|
|
|
graphicsPath.Reset( );
|
|
graphicsPath.AddPolygon( new Point[] {
|
|
new Point(0, value_Y),
|
|
new Point(0,Height - Width),
|
|
new Point(middle+1, Height-8),
|
|
new Point(middle+1, value_Y),
|
|
new Point(0,value_Y),
|
|
} );
|
|
b = new LinearGradientBrush( new Point( 0, 20 ), new Point( middle + 1, 20 ), Color.FromArgb( 194, 190, 77 ), Color.FromArgb( 226, 221, 98 ) );
|
|
g.FillPath( b, graphicsPath );
|
|
b.Dispose( );
|
|
|
|
|
|
graphicsPath.Reset( );
|
|
graphicsPath.AddPolygon( new Point[] {
|
|
new Point(middle,value_Y),
|
|
new Point(middle,Height - 8),
|
|
new Point(Width-1, Height-Width),
|
|
new Point(Width-1,value_Y),
|
|
new Point(middle,value_Y),
|
|
} );
|
|
b = new LinearGradientBrush( new Point( middle - 1, 20 ), new Point( Width - 1, 20 ), Color.FromArgb( 226, 221, 98 ), Color.FromArgb( 194, 190, 77 ) );
|
|
g.FillPath( b, graphicsPath );
|
|
b.Dispose( );
|
|
graphicsPath.Dispose( );
|
|
|
|
b = new SolidBrush( Color.FromArgb( 243, 245, 139 ) );
|
|
g.FillEllipse( b, 1, value_Y - 3, Width - 3, 6 );
|
|
b.Dispose( );
|
|
|
|
g.FillEllipse( Brushes.White, 4, Height - Width, Width - 9, Width - 9 );
|
|
Pen pen = new Pen( Color.Gray, 3 );
|
|
if (isOpen) pen.Color = Color.LimeGreen;
|
|
g.DrawEllipse( pen, 4, Height - Width, Width - 9, Width - 9 );
|
|
g.FillEllipse( isOpen ? Brushes.LimeGreen : Brushes.Gray, 8, Height - Width + 4, Width - 17, Width - 17 );
|
|
pen.Dispose( );
|
|
|
|
if (!string.IsNullOrEmpty( bottleTag ))
|
|
{
|
|
g.DrawString( bottleTag, Font, Brushes.Gray, new Rectangle( -10, 26, Width + 20, 20 ), stringFormat );
|
|
}
|
|
|
|
if (!string.IsNullOrEmpty( headTag ))
|
|
{
|
|
g.DrawString( headTag, Font, Brushes.DimGray, new Rectangle( -10, 0, Width + 20, 20 ), stringFormat );
|
|
}
|
|
}
|
|
|
|
private void UserBottle_Paint( object sender, PaintEventArgs e )
|
|
{
|
|
|
|
}
|
|
}
|
|
}
|