ColorButton.cs
上传用户:szltgg
上传日期:2019-05-16
资源大小:604k
文件大小:3k
源码类别:

Telnet服务器

开发平台:

C#

  1. /*
  2.  * Copyright (c) 2005 Poderosa Project, All Rights Reserved.
  3.  * $Id: ColorButton.cs,v 1.2 2005/04/20 08:45:45 okajima Exp $
  4.  */
  5. using System;
  6. using System.Diagnostics;
  7. using System.Windows.Forms;
  8. using System.Drawing;
  9. namespace Poderosa.UI
  10. {
  11. public class ColorButton : Button {
  12. private Color _selectedColor;
  13. public delegate void NewColorEventHandler(object sender, Color newcolor);
  14. public event NewColorEventHandler ColorChanged;
  15. public ColorButton() {
  16. this.BackColor = SystemColors.Control;
  17. this.FlatStyle = FlatStyle.Standard;
  18. this.SetStyle(ControlStyles.UserPaint, true);
  19. }
  20. public Color SelectedColor {
  21. get {
  22. return _selectedColor;
  23. }
  24. set {
  25. _selectedColor = value;
  26. }
  27. }
  28. protected override void OnPaint(PaintEventArgs e) {
  29. base.OnPaint(e);
  30. Graphics g = e.Graphics;
  31. Rectangle r = this.ClientRectangle;
  32. const int border = 3;
  33. const int right_border = 15;
  34. Rectangle rc = new Rectangle(border, border,
  35. r.Width - border - right_border - 1, r.Height - border * 2 - 1);
  36. SolidBrush centerColorBrush = new SolidBrush( this.Enabled? _selectedColor : this.BackColor);
  37. g.FillRectangle(centerColorBrush, rc);
  38. g.DrawRectangle( SystemPens.ControlDarkDark, rc );
  39. Pen pen = new Pen( this.Enabled? Color.Black : SystemColors.ControlDark ); 
  40. //draw the arrow
  41. Point p1 = new Point( r.Width - 9, r.Height / 2 - 1 );
  42. Point p2 = new Point(r.Width - 5, r.Height / 2 - 1 );
  43. g.DrawLine(pen, p1, p2);
  44. p1 = new Point( r.Width - 8, r.Height / 2 );
  45. p2 = new Point(r.Width - 6, r.Height / 2 );
  46. g.DrawLine(pen, p1, p2);
  47. p1 = new Point( r.Width - 7, r.Height / 2 );
  48. p2 = new Point(r.Width - 7, r.Height / 2 + 1 );
  49. g.DrawLine(pen, p1, p2);
  50. pen.Dispose();
  51. //draw the divider line
  52. pen = SystemPens.ControlDark; 
  53. p1 = new Point( r.Width - 12, 4 );
  54. p2 = new Point(r.Width - 12, r.Height - 5 );
  55. g.DrawLine(pen, p1, p2);
  56. pen = SystemPens.ControlLightLight;
  57. p1 = new Point( r.Width - 11, 4 );
  58. p2 = new Point(r.Width - 11, r.Height - 5 );
  59. g.DrawLine(pen, p1, p2);
  60. centerColorBrush.Dispose();
  61. }
  62.     
  63. protected override void OnClick(EventArgs e) {
  64. Point p = PointToScreen(new Point(0, this.Height));
  65. ColorPaletteDialog clDlg = new ColorPaletteDialog(p.X, p.Y);
  66. clDlg.ShowDialog(FindForm());
  67. if(clDlg.DialogResult == DialogResult.OK) {
  68. _selectedColor = clDlg.Color;
  69. if(this.ColorChanged != null) this.ColorChanged(this, clDlg.Color);
  70. }
  71. Invalidate();
  72. clDlg.Dispose();
  73. }
  74. }
  75. }