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.
364 lines
11 KiB
C#
364 lines
11 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.ComponentModel;
|
|
using System.Drawing;
|
|
using System.Data;
|
|
using System.Text;
|
|
using System.Windows.Forms;
|
|
using System.Threading;
|
|
using System.IO;
|
|
using HuizhongLibrary.Log;
|
|
using HuizhongLibrary;
|
|
|
|
namespace HuizhongLibrary.MyAlphaControl
|
|
{
|
|
public partial class MyPanel : UserControl
|
|
{
|
|
|
|
private Bitmap m_BackgroundImage;
|
|
/// <summary>
|
|
/// 背景图片
|
|
/// </summary>
|
|
public new Bitmap BackgroundImage
|
|
{
|
|
get { return m_BackgroundImage; }
|
|
set{ m_BackgroundImage = value; }
|
|
}
|
|
|
|
private PictureBoxSizeMode m_BackgroundSizeMode = PictureBoxSizeMode.Normal;
|
|
|
|
public PictureBoxSizeMode BackgroundSizeMode
|
|
{
|
|
get { return m_BackgroundSizeMode; }
|
|
set
|
|
{
|
|
m_BackgroundSizeMode = value;
|
|
pictureBox1.SizeMode = value;
|
|
}
|
|
}
|
|
|
|
|
|
private List<MyImageList> m_ImageArray = new List<MyImageList>();
|
|
|
|
public List<MyImageList> ImageArray
|
|
{
|
|
get { return m_ImageArray; }
|
|
set { m_ImageArray = value; }
|
|
}
|
|
|
|
|
|
|
|
private string m_ImageList = "";
|
|
|
|
public string ImageList
|
|
{
|
|
get { return m_ImageList; }
|
|
set { m_ImageList = value; }
|
|
}
|
|
private bool m_Visible = true;
|
|
|
|
public new bool Visible
|
|
{
|
|
get { return m_Visible; }
|
|
set
|
|
{
|
|
m_Visible = value;
|
|
base.Visible = value;
|
|
int index = 0;
|
|
//if (pictureBox1.Image == null && this.BackgroundImage != null) RefshImage();
|
|
pictureBox1.BringToFront();
|
|
foreach (System.Windows.Forms.Control ctrl in this.Controls)
|
|
{
|
|
index++;
|
|
if (index == 1) continue;
|
|
if (ctrl.Visible == true) ctrl.BringToFront();
|
|
}
|
|
//pictureBox1.SendToBack();
|
|
|
|
}
|
|
}
|
|
|
|
public bool IsRun = true;
|
|
public int MainTop = 0;
|
|
public int MainLeft = 0;
|
|
public int MainWidth = 0;
|
|
public int MainHeight = 0;
|
|
public int MaxWidth = 0;
|
|
public int MaxHeight = 0;
|
|
public int FlackMode = 0; //0全屏宣教1首页宣教
|
|
|
|
|
|
public event EventHandler FeelImage;
|
|
public event RemoveImageDelegate RemoveImage;
|
|
public delegate void RemoveImageDelegate(string ImageListName, string ImgName);
|
|
public event Action<string> RemoveScrollString;
|
|
|
|
public MyPanel()
|
|
{
|
|
InitializeComponent();
|
|
pictureBox1.Click += pictureBox1_Click;
|
|
}
|
|
|
|
void pictureBox1_Click(object sender, EventArgs e)
|
|
{
|
|
if (this.FeelImage != null) this.FeelImage(sender, e);
|
|
}
|
|
|
|
public int ImageIndex= 0;
|
|
|
|
|
|
|
|
#region 切换到上一页
|
|
public int PrevImage()
|
|
{
|
|
if (ImageArray.Count == 0)
|
|
{
|
|
this.BackgroundImage = null;
|
|
return 10;
|
|
}
|
|
ImageIndex--;
|
|
if (ImageIndex < 0) ImageIndex = ImageArray.Count - 1;
|
|
MyImageList model = CheckOut(ImageIndex);
|
|
if (model == null)
|
|
{
|
|
ImageIndex++;
|
|
return PrevImage();
|
|
}
|
|
try
|
|
{
|
|
DateTime dt = DateTime.Now;
|
|
if (File.Exists(model.FilePath) == false || (model.EndTime != null && dt > model.EndTime))
|
|
{
|
|
if (this.RemoveImage != null) this.RemoveImage(this.ImageList, model.Name);
|
|
RemoveAt(ImageIndex);
|
|
ImageIndex++;
|
|
return PrevImage();
|
|
}
|
|
this.BackgroundImage = CustomIO.GetBitmap(model.FilePath);
|
|
if (this.BackgroundImage == null)
|
|
{
|
|
if (this.RemoveImage != null) this.RemoveImage(this.ImageList, model.Name);
|
|
RemoveAt(ImageIndex);
|
|
ImageIndex++;
|
|
return PrevImage();
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
ErrorFollow.TraceWrite("NextImage", ex.StackTrace, ex.Message);
|
|
if (this.RemoveImage != null) this.RemoveImage(this.ImageList, model.Name);
|
|
RemoveAt(ImageIndex);
|
|
ImageIndex++;
|
|
return PrevImage();
|
|
}
|
|
return model.Interval;
|
|
}
|
|
#endregion
|
|
#region 切换到下一页
|
|
public int NextImage()
|
|
{
|
|
if (ImageArray.Count == 0)
|
|
{
|
|
this.BackgroundImage = null;
|
|
return 10;
|
|
}
|
|
ImageIndex++;
|
|
if (ImageIndex >= ImageArray.Count) ImageIndex = 0;
|
|
MyImageList model = CheckOut(ImageIndex);
|
|
if (model == null)
|
|
{
|
|
ImageIndex--;
|
|
return NextImage();
|
|
}
|
|
try
|
|
{
|
|
DateTime dt = DateTime.Now;
|
|
if (File.Exists(model.FilePath) == false || (model.EndTime != null && dt > model.EndTime))
|
|
{
|
|
if (this.RemoveImage != null) this.RemoveImage(this.ImageList, model.Name);
|
|
RemoveAt(ImageIndex);
|
|
ImageIndex--;
|
|
return NextImage();
|
|
}
|
|
this.BackgroundImage = CustomIO.GetBitmap(model.FilePath);
|
|
if (this.BackgroundImage == null)
|
|
{
|
|
if (this.RemoveImage != null) this.RemoveImage(this.ImageList, model.Name);
|
|
RemoveAt(ImageIndex);
|
|
ImageIndex--;
|
|
return NextImage();
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
ErrorFollow.TraceWrite("NextImage", ex.StackTrace, ex.Message);
|
|
if (this.RemoveImage != null) this.RemoveImage(this.ImageList, model.Name);
|
|
RemoveAt(ImageIndex);
|
|
ImageIndex--;
|
|
return NextImage();
|
|
}
|
|
return model.Interval;
|
|
}
|
|
#endregion
|
|
#region 刷新背景
|
|
public void RefshImage()
|
|
{
|
|
if (pictureBox1.Image != null) pictureBox1.Image.Dispose();
|
|
pictureBox1.Image = this.BackgroundImage;
|
|
GC.Collect();
|
|
}
|
|
#endregion
|
|
#region 新增图片
|
|
public void CheckIn(MyImageList item)
|
|
{
|
|
lock (ImageArray)
|
|
{
|
|
MyImageList Citem = null;
|
|
foreach (MyImageList item2 in ImageArray)
|
|
{
|
|
if (item2.Name == item.Name) Citem = item2;
|
|
}
|
|
if (Citem == null) { ImageArray.Add(item); }
|
|
else
|
|
{
|
|
Citem.EndTime = item.EndTime;
|
|
Citem.FilePath = item.FilePath;
|
|
Citem.Interval = item.Interval;
|
|
Citem.Name = item.Name;
|
|
}
|
|
}
|
|
if (ImageArray.Count == 1)
|
|
{
|
|
FirstImage();
|
|
RefshImage();
|
|
}
|
|
}
|
|
#endregion
|
|
#region 读取图片
|
|
public MyImageList CheckOut(int Index)
|
|
{
|
|
MyImageList model = null;
|
|
lock (ImageArray)
|
|
{
|
|
if (ImageArray.Count == 0) return null;
|
|
if (Index < 0 || Index > ImageArray.Count - 1)
|
|
{
|
|
Index = 0;
|
|
return null;
|
|
}
|
|
try
|
|
{
|
|
model=ImageArray[Index];
|
|
}
|
|
catch { }
|
|
}
|
|
return model;
|
|
}
|
|
#endregion
|
|
#region 清除全部图片
|
|
public void Clear()
|
|
{
|
|
lock (ImageArray)
|
|
{
|
|
ImageArray.Clear();
|
|
}
|
|
}
|
|
#endregion
|
|
#region 清除图片
|
|
public void RemoveAt(int Index)
|
|
{
|
|
lock (ImageArray)
|
|
{
|
|
if (ImageArray.Count == 0) return;
|
|
if (Index < 0 || Index > ImageArray.Count - 1) return;
|
|
ImageArray.RemoveAt(Index);
|
|
}
|
|
}
|
|
#endregion
|
|
#region 清除图片
|
|
public void Remove(string Name)
|
|
{
|
|
lock (ImageArray)
|
|
{
|
|
for (int i = 0; i < ImageArray.Count; i++)
|
|
{
|
|
if (ImageArray[i].Name != Name) continue;
|
|
ImageArray.RemoveAt(i);
|
|
break;
|
|
}
|
|
}
|
|
NextImage();
|
|
}
|
|
#endregion
|
|
#region 切换到首张图片
|
|
public void FirstImage()
|
|
{
|
|
ImageIndex = 0;
|
|
MyImageList model = CheckOut(ImageIndex);
|
|
if (model == null) { this.BackgroundImage = null; }
|
|
else { this.BackgroundImage = CustomIO.GetBitmap(model.FilePath); }
|
|
}
|
|
#endregion
|
|
#region 切换到最后一张图片
|
|
public void LastImage()
|
|
{
|
|
ImageIndex = ImageArray.Count-1;
|
|
MyImageList model = CheckOut(ImageIndex);
|
|
if (model == null) { this.BackgroundImage = null; }
|
|
else { this.BackgroundImage = CustomIO.GetBitmap(model.FilePath); }
|
|
}
|
|
#endregion
|
|
|
|
|
|
#region 缩放
|
|
public void Zoom()
|
|
{
|
|
if (FlackMode == 0 || ImageArray.Count == 0) return;
|
|
if (this.Width == MaxWidth)
|
|
{
|
|
this.Left = MainLeft;
|
|
this.Top = MainTop;
|
|
this.Width = MainWidth;
|
|
this.Height = MainHeight;
|
|
}
|
|
else
|
|
{
|
|
this.Left = 0;
|
|
this.Top = 0;
|
|
this.Width = MaxWidth;
|
|
this.Height = MaxHeight;
|
|
}
|
|
RefshImage();
|
|
}
|
|
#endregion
|
|
|
|
#region 计算文字大小
|
|
private SizeF MeasureString(string Text, Font font)
|
|
{
|
|
Bitmap bmp = new Bitmap(1, 1, System.Drawing.Imaging.PixelFormat.Format32bppRgb);
|
|
Graphics g = Graphics.FromImage(bmp);
|
|
SizeF s = g.MeasureString(Text, font);
|
|
return s;
|
|
}
|
|
#endregion
|
|
|
|
#region 是否有需要播报的消息
|
|
public bool IsPlay()
|
|
{
|
|
if (this.IsRun == false) return false;
|
|
if (ImageArray.Count > 0) return true;
|
|
return false;
|
|
}
|
|
#endregion
|
|
|
|
#region 引发移除滚动文本事件
|
|
public void OnRemoveScrollString(string Name)
|
|
{
|
|
if (this.RemoveScrollString != null) this.RemoveScrollString(Name);
|
|
}
|
|
#endregion
|
|
|
|
|
|
}
|
|
}
|