请选择 进入手机版 | 继续访问电脑版

大富翁Delphi开发技术网站

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 1904|回复: 0

[源码分享] C#实现的一个图像播放控件

[复制链接]

322

主题

404

帖子

1350

积分

金牌会员

Rank: 6Rank: 6

积分
1350
发表于 2014-6-5 21:16:34 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
image-slider-demo.png

介绍

本控件可以实现多个图像的幻灯片播放效果,下面介绍下这个控件的主要的属性
  • CaptionHeight - Sets the height of the caption area.
  • CaptionTextLeft - Sets the left position of the caption text relative to the caption area.
  • CaptionBackgrounColor - Sets the caption background color.
  • CaptionOpacity - Sets the caption background opacity.
  • CaptionAnimationSpeed - Sets the scroll speed of the caption text.
  • Animation - Boolean value to turn animation on or off.
  • LeftButton - Returns the left navigation button, so that properties of the button can be configured.
  • RightButton - Returns the right navigation button, so that properties of the button can be configured.
下面介绍主要的方法

  • AddImage(string path)
  • AddImage(string path, string caption)
  • AddImage(string path, string caption, Color captionBackgroundColor)
  • AddImage(Image img)
  • AddImage(Image img, string caption)
  • AddImage(Image img, string caption, Color captionBackgroundColor)



调用方法:
  1. imageSlider1.CaptionOpacity = 200;  

  2. imageSlider1.AddImage("Chrysanthemum.jpg", "A caption for the image goes here", Color.Maroon);  
  3. imageSlider1.AddImage("Desert.jpg", "What an amazing photo.", Color.Gold);  
  4. imageSlider1.AddImage("Hydrangeas.jpg", "For me?...blush blush", Color.LimeGreen);  
  5. imageSlider1.AddImage("Jellyfish.jpg", "So... what sort of fish are you again?", Color.Orange);  
  6. imageSlider1.AddImage("Koala.jpg", "Will you be my friend?", Color.Gray);  
  7. imageSlider1.AddImage("Lighthouse.jpg", "Must be a greate view from up there");  
  8. imageSlider1.AddImage("Penguins.jpg", "Fish anyone?", Color.Navy);  
  9. imageSlider1.AddImage(Image.FromFile("Tulips.jpg"), "You cant go wrong with tulips", Color.LightSkyBlue);
复制代码

最后附上控件的源代码:ImageSlider.cs
  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Drawing;  
  4. using System.Drawing.Drawing2D;  
  5. using System.Text;  
  6. using System.Windows.Forms;  

  7. class ImageSlider : Panel  
  8. {  
  9.     Timer _timer;  
  10.     int _captionTextLeft = 20;  
  11.     int _captionPosX = 20;  
  12.     int _pageIndex = 0;  

  13.     protected List<Image> _imageList = new List<Image>();  
  14.     protected List<string> _captionList = new List<string>();  
  15.     protected List<Color> _captionBgColor = new List<Color>();  

  16.     xButton leftButton;  
  17.     xButton rightButton;  

  18.     public ImageSlider()  
  19.     {  
  20.         this.Animation = true;  
  21.         this.CaptionAnimationSpeed = 50;  
  22.         this.CaptionTextLeft = 20;  
  23.         this.CaptionHeight = 50;  
  24.         this.CaptionBackgrounColor = Color.Black;  
  25.         this.CaptionOpacity = 100;  

  26.         leftButton = new xButton();  
  27.         leftButton.Text = "<";  
  28.         leftButton.Click += new EventHandler(leftButton_Click);  

  29.         rightButton = new xButton();  
  30.         rightButton.Text = ">";  
  31.         rightButton.Click += new EventHandler(rightButton_Click);  

  32.         this.Resize += ImageSlider_Resize;  

  33.         this.Controls.Add(leftButton);  
  34.         this.Controls.Add(rightButton);  
  35.     }  

  36.     void ImageSlider_Resize(object sender, EventArgs e)  
  37.     {  
  38.         leftButton.Location = new Point(0, (this.Height / 2) - (leftButton.Height / 2));  
  39.         rightButton.Location = new Point(this.Width - rightButton.Width, (this.Height / 2) - (rightButton.Height / 2));  
  40.     }  

  41.     void leftButton_Click(object sender, EventArgs e)  
  42.     {  

  43.         if (_pageIndex > 0)  
  44.         {  
  45.             --_pageIndex;  
  46.         }  
  47.         else  
  48.         {  
  49.             _pageIndex = _imageList.Count - 1;  
  50.         }  

  51.         if (Animation)  
  52.         {  
  53.             _captionPosX = this.Width;  
  54.             this.DoubleBuffered = true;  

  55.             _timer = new Timer();  
  56.             _timer.Interval = 1;  
  57.             _timer.Tick += new EventHandler(_timer_Tick);  
  58.             _timer.Start();  
  59.         }  
  60.         else  
  61.         {  
  62.             _captionPosX = _captionTextLeft;  
  63.             this.Invalidate();  
  64.         }  
  65.     }  

  66.     void rightButton_Click(object sender, EventArgs e)  
  67.     {  

  68.         if (_pageIndex < _imageList.Count - 1)  
  69.         {  
  70.             ++_pageIndex;  
  71.         }  
  72.         else  
  73.         {  
  74.             _pageIndex = 0;  
  75.         }  

  76.         if (Animation)  
  77.         {  
  78.             _captionPosX = this.Width;  
  79.             DoubleBuffered = true;  

  80.             _timer = new Timer();  
  81.             _timer.Interval = 1;  
  82.             _timer.Tick += new EventHandler(_timer_Tick);  
  83.             _timer.Start();  
  84.         }  
  85.         else  
  86.         {  
  87.             _captionPosX = _captionTextLeft;  
  88.             this.Invalidate();  
  89.         }  
  90.     }  

  91.     void _timer_Tick(object sender, EventArgs e)  
  92.     {  
  93.         if (_captionPosX >= _captionTextLeft)  
  94.         {  
  95.             int subtract = CaptionAnimationSpeed;  

  96.             int diff = _captionPosX - subtract;  

  97.             if (diff < subtract)  
  98.             {  
  99.                 _captionPosX -= _captionPosX - _captionTextLeft;  
  100.             }  
  101.             else  
  102.             {  
  103.                 _captionPosX -= subtract;  
  104.             }  

  105.             this.Invalidate();  
  106.         }  
  107.         else  
  108.         {  
  109.             this.DoubleBuffered = false;  
  110.             _timer.Dispose();  
  111.         }  
  112.     }  

  113.     public void AddImage(string path)  
  114.     {  
  115.         Image img = Image.FromFile(path);  
  116.         _AddImage(img, "", this.CaptionBackgrounColor);  
  117.     }  

  118.     public void AddImage(string path, string caption)  
  119.     {  
  120.         Image img = Image.FromFile(path);  
  121.         _AddImage(img, caption, this.CaptionBackgrounColor);  
  122.     }  

  123.     public void AddImage(string path, string caption, Color captionBackgroundColor)  
  124.     {  
  125.         Image img = Image.FromFile(path);  
  126.         _AddImage(img, caption, captionBackgroundColor);  
  127.     }  

  128.     public void AddImage(Image img)  
  129.     {  
  130.         _AddImage(img, "", this.CaptionBackgrounColor);  
  131.     }  

  132.     public void AddImage(Image img, string caption)  
  133.     {  
  134.         _AddImage(img, caption, this.CaptionBackgrounColor);  
  135.     }  

  136.     public void AddImage(Image img, string caption, Color captionBackgroundColor)  
  137.     {  
  138.         _AddImage(img, caption, captionBackgroundColor);  
  139.     }  

  140.     protected void _AddImage(Image img, string caption, Color captionBackgroundColor)  
  141.     {  
  142.         _imageList.Add(img);  
  143.         _captionList.Add(caption);  
  144.         _captionBgColor.Add(captionBackgroundColor);  
  145.     }  

  146.     public int CaptionHeight  
  147.     {  
  148.         set;  
  149.         get;  
  150.     }  

  151.     public int CaptionTextLeft  
  152.     {  
  153.         set  
  154.         {  
  155.             _captionPosX = value;  
  156.             _captionTextLeft = value;  
  157.         }  
  158.         get  
  159.         {  
  160.             return _captionTextLeft;  
  161.         }  
  162.     }  

  163.     public Color CaptionBackgrounColor  
  164.     {  
  165.         set;  
  166.         get;  
  167.     }  

  168.     public int CaptionOpacity  
  169.     {  
  170.         set;  
  171.         get;  
  172.     }  

  173.     public int CaptionAnimationSpeed  
  174.     {  
  175.         set;  
  176.         get;  
  177.     }  

  178.     public bool Animation  
  179.     {  
  180.         set;  
  181.         get;  
  182.     }  

  183.     public xButton LeftButton  
  184.     {  
  185.         get  
  186.         {  
  187.             return leftButton;  
  188.         }  
  189.     }  

  190.     public xButton RightButton  
  191.     {  
  192.         get  
  193.         {  
  194.             return rightButton;  
  195.         }  
  196.     }  

  197.     protected override void OnPaint(PaintEventArgs e)  
  198.     {  
  199.         base.OnPaint(e);  

  200.         Graphics g = e.Graphics;  
  201.         try  
  202.         {  
  203.             Color captionBgColor = Color.FromArgb(CaptionOpacity, _captionBgColor[_pageIndex].R, _captionBgColor[_pageIndex].G, _captionBgColor[_pageIndex].B);  
  204.             g.DrawImage(_imageList[_pageIndex], new Rectangle(0, 0, this.Width, this.Height));  
  205.             g.FillRectangle(new SolidBrush(captionBgColor), new Rectangle(0, this.Height - this.CaptionHeight, this.Width, this.Height));  

  206.             string caption = _captionList[_pageIndex];  

  207.             SizeF fontSize = g.MeasureString(_captionList[_pageIndex], this.Font);  
  208.             g.DrawString(_captionList[_pageIndex], this.Font, new SolidBrush(this.ForeColor), _captionPosX, this.Height - (int)(this.CaptionHeight - (fontSize.Height / 2)));  
  209.         }  
  210.         catch { }  
  211.     }  

  212.     public class xButton : Button  
  213.     {  
  214.         public xButton()  
  215.         {  
  216.             this.BackColor = Color.Black;  
  217.             this.Height = 50;  
  218.             this.Width = 50;  
  219.         }  

  220.         protected override void OnPaint(PaintEventArgs pevent)  
  221.         {  
  222.             Graphics g = pevent.Graphics;  
  223.             Rectangle area = new Rectangle(0, 0, this.Width, this.Height);  

  224.             g.FillRectangle(new SolidBrush(this.BackColor), area);  
  225.             SizeF fontSize = g.MeasureString(this.Text, this.Font);  
  226.             g.DrawString(this.Text, this.Font, new SolidBrush(this.ForeColor), (this.Width - fontSize.Width) / 2, (this.Height - fontSize.Height) / 2);  
  227.         }  
  228.     }  
  229. }
复制代码



转载请保留当前帖子的链接:http://www.dfwlt.com/forum.php?mod=viewthread&tid=774 谢谢!

搜索简单,分享不易,且分享且珍惜,您难道不想分享下您的心得?如果觉得本文章好的话,您可以在我们网站上注册,然后发布您的好的心得,让大家共同进步,谢谢!

最新添加

相关帖子

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

申请友链|Archiver|手机版|小黑屋|大富翁Delphi开发技术网站 ( 苏ICP备12065705号-4

GMT+8, 2019-7-21 07:19 , Processed in 0.114432 second(s), 37 queries .

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表