<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://nfex.ru/index.php?action=history&amp;feed=atom&amp;title=Csharp%2FC_Sharp%2FComponents%2FClock</id>
		<title>Csharp/C Sharp/Components/Clock - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://nfex.ru/index.php?action=history&amp;feed=atom&amp;title=Csharp%2FC_Sharp%2FComponents%2FClock"/>
		<link rel="alternate" type="text/html" href="http://nfex.ru/index.php?title=Csharp/C_Sharp/Components/Clock&amp;action=history"/>
		<updated>2026-04-29T17:15:43Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://nfex.ru/index.php?title=Csharp/C_Sharp/Components/Clock&amp;diff=344&amp;oldid=prev</id>
		<title> в 15:31, 26 мая 2010</title>
		<link rel="alternate" type="text/html" href="http://nfex.ru/index.php?title=Csharp/C_Sharp/Components/Clock&amp;diff=344&amp;oldid=prev"/>
				<updated>2010-05-26T15:31:18Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr style=&quot;vertical-align: top;&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Предыдущая&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Версия 15:31, 26 мая 2010&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; style=&quot;text-align: center;&quot; lang=&quot;ru&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(нет различий)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
			</entry>

	<entry>
		<id>http://nfex.ru/index.php?title=Csharp/C_Sharp/Components/Clock&amp;diff=345&amp;oldid=prev</id>
		<title>Admin: 1 версия</title>
		<link rel="alternate" type="text/html" href="http://nfex.ru/index.php?title=Csharp/C_Sharp/Components/Clock&amp;diff=345&amp;oldid=prev"/>
				<updated>2010-05-26T11:38:08Z</updated>
		
		<summary type="html">&lt;p&gt;1 версия&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==A Clock==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
Code revised from chapter 4&lt;br /&gt;
&lt;br /&gt;
GDI+ Custom Controls with Visual C# 2005&lt;br /&gt;
By Iulian Serban, Dragos Brezoi, Tiberiu Radu, Adam Ward &lt;br /&gt;
Language English&lt;br /&gt;
Paperback 272 pages [191mm x 235mm]&lt;br /&gt;
Release date July 2006&lt;br /&gt;
ISBN 1904811604&lt;br /&gt;
Sample chapter&lt;br /&gt;
http://www.packtpub.ru/files/1604_CustomControls_SampleChapter.pdf&lt;br /&gt;
&lt;br /&gt;
For More info on GDI+ Custom Control with Microsoft Visual C# book &lt;br /&gt;
visit website www.packtpub.ru &lt;br /&gt;
&lt;br /&gt;
*/ &lt;br /&gt;
using System;&lt;br /&gt;
using System.Collections.Generic;&lt;br /&gt;
using System.ruponentModel;&lt;br /&gt;
using System.Data;&lt;br /&gt;
using System.Drawing;&lt;br /&gt;
using System.Text;&lt;br /&gt;
using System.Windows.Forms;&lt;br /&gt;
using System.Drawing.Drawing2D;&lt;br /&gt;
namespace ClockTest00&lt;br /&gt;
{&lt;br /&gt;
    public partial class Form1 : Form&lt;br /&gt;
    {&lt;br /&gt;
        public Form1()&lt;br /&gt;
        {&lt;br /&gt;
            InitializeComponent();&lt;br /&gt;
        }&lt;br /&gt;
        private System.ruponentModel.IContainer components = null;&lt;br /&gt;
        /// &amp;lt;summary&amp;gt;&lt;br /&gt;
        /// Clean up any resources being used.&lt;br /&gt;
        /// &amp;lt;/summary&amp;gt;&lt;br /&gt;
        /// &amp;lt;param name=&amp;quot;disposing&amp;quot;&amp;gt;true if managed resources should be disposed; otherwise, false.&amp;lt;/param&amp;gt;&lt;br /&gt;
        protected override void Dispose(bool disposing)&lt;br /&gt;
        {&lt;br /&gt;
            if (disposing &amp;amp;&amp;amp; (components != null))&lt;br /&gt;
            {&lt;br /&gt;
                components.Dispose();&lt;br /&gt;
            }&lt;br /&gt;
            base.Dispose(disposing);&lt;br /&gt;
        }&lt;br /&gt;
        #region Windows Form Designer generated code&lt;br /&gt;
        /// &amp;lt;summary&amp;gt;&lt;br /&gt;
        /// Required method for Designer support - do not modify&lt;br /&gt;
        /// the contents of this method with the code editor.&lt;br /&gt;
        /// &amp;lt;/summary&amp;gt;&lt;br /&gt;
        private void InitializeComponent()&lt;br /&gt;
        {&lt;br /&gt;
            this.clock1 = new ClockTest00.Clock();&lt;br /&gt;
            this.SuspendLayout();&lt;br /&gt;
            // &lt;br /&gt;
            // clock1&lt;br /&gt;
            // &lt;br /&gt;
            this.clock1.BackColor = System.Drawing.SystemColors.ControlLightLight;&lt;br /&gt;
            this.clock1.HourColor = System.Drawing.Color.Black;&lt;br /&gt;
            this.clock1.Location = new System.Drawing.Point(67, 49);&lt;br /&gt;
            this.clock1.MinuteColor = System.Drawing.Color.Black;&lt;br /&gt;
            this.clock1.Name = &amp;quot;clock1&amp;quot;;&lt;br /&gt;
            this.clock1.SecondColor = System.Drawing.Color.Black;&lt;br /&gt;
            this.clock1.Size = new System.Drawing.Size(150, 150);&lt;br /&gt;
            this.clock1.TabIndex = 0;&lt;br /&gt;
            // &lt;br /&gt;
            // Form1&lt;br /&gt;
            // &lt;br /&gt;
            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);&lt;br /&gt;
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;&lt;br /&gt;
            this.ClientSize = new System.Drawing.Size(292, 266);&lt;br /&gt;
            this.Controls.Add(this.clock1);&lt;br /&gt;
            this.Name = &amp;quot;Form1&amp;quot;;&lt;br /&gt;
            this.Text = &amp;quot;Form1&amp;quot;;&lt;br /&gt;
            this.ResumeLayout(false);&lt;br /&gt;
        }&lt;br /&gt;
        #endregion&lt;br /&gt;
        private Clock clock1;&lt;br /&gt;
&lt;br /&gt;
        [STAThread]&lt;br /&gt;
        static void Main()&lt;br /&gt;
        {&lt;br /&gt;
            Application.EnableVisualStyles();&lt;br /&gt;
            Application.SetCompatibleTextRenderingDefault(false);&lt;br /&gt;
            Application.Run(new Form1());&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
    }&lt;br /&gt;
    public partial class Clock : UserControl&lt;br /&gt;
    {&lt;br /&gt;
        public Clock()&lt;br /&gt;
        {&lt;br /&gt;
            //Sets the rendering mode of the control to double buffer to stop flickering&lt;br /&gt;
            this.SetStyle(ControlStyles.OptimizedDoubleBuffer, true);&lt;br /&gt;
            InitializeComponent();&lt;br /&gt;
            //Enables the timer so the clock refreshes every second&lt;br /&gt;
            timer.Enabled = true;&lt;br /&gt;
            MakeRound();&lt;br /&gt;
        }&lt;br /&gt;
        private Color hourColor = Color.Black;&lt;br /&gt;
        private Color minuteColor = Color.Black;&lt;br /&gt;
        private Color secondColor = Color.Black;&lt;br /&gt;
        public Color HourColor&lt;br /&gt;
        {&lt;br /&gt;
            get&lt;br /&gt;
            {&lt;br /&gt;
                return hourColor;&lt;br /&gt;
            }&lt;br /&gt;
            set&lt;br /&gt;
            {&lt;br /&gt;
                if (hourColor != value)&lt;br /&gt;
                {&lt;br /&gt;
                    hourColor = value;&lt;br /&gt;
                    Invalidate();&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        public Color MinuteColor&lt;br /&gt;
        {&lt;br /&gt;
            get&lt;br /&gt;
            {&lt;br /&gt;
                return minuteColor;&lt;br /&gt;
            }&lt;br /&gt;
            set&lt;br /&gt;
            {&lt;br /&gt;
                if (minuteColor != value)&lt;br /&gt;
                {&lt;br /&gt;
                    minuteColor = value;&lt;br /&gt;
                    Invalidate();&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        public Color SecondColor&lt;br /&gt;
        {&lt;br /&gt;
            get&lt;br /&gt;
            {&lt;br /&gt;
                return secondColor;&lt;br /&gt;
            }&lt;br /&gt;
            set&lt;br /&gt;
            {&lt;br /&gt;
                if (secondColor != value)&lt;br /&gt;
                {&lt;br /&gt;
                    secondColor = value;&lt;br /&gt;
                    Invalidate();&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        protected override void OnPaint(PaintEventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
            base.OnPaint(e);&lt;br /&gt;
            //Smooths out the appearance of the control&lt;br /&gt;
            e.Graphics.SmoothingMode = SmoothingMode.AntiAlias;&lt;br /&gt;
            //The center of the control, that is used as center for the clock&lt;br /&gt;
            PointF center = new PointF(this.Width / 2, this.Height / 2);&lt;br /&gt;
            //The distace of the text from the center&lt;br /&gt;
            float textRadius = (Math.Min(Width, Height) - Font.Height) / 2;&lt;br /&gt;
            //The distance of the margin points from the center&lt;br /&gt;
            float outerRadius = Math.Min(Width, Height) / 2 - Font.Height;&lt;br /&gt;
            //The length of the hour line&lt;br /&gt;
            float hourRadius = outerRadius * 6 / 9;&lt;br /&gt;
            //The length of the minute line&lt;br /&gt;
            float minuteRadius = outerRadius * 7 / 9;&lt;br /&gt;
            //The length of the second line&lt;br /&gt;
            float secondRadius = outerRadius * 8 / 9;&lt;br /&gt;
            for (int i = 1; i &amp;lt;= 60; i++)&lt;br /&gt;
            {&lt;br /&gt;
                //Gets the angle of the outer dot&lt;br /&gt;
                float angle = GetAngle(i / 5f, 12);&lt;br /&gt;
                //Gets the location of the outer dot&lt;br /&gt;
                PointF dotPoint = GetPoint(center, outerRadius, angle);&lt;br /&gt;
                //Indicates the size of the point&lt;br /&gt;
                int pointSize = 2;&lt;br /&gt;
                //Is true when a large dot needs to be rendered&lt;br /&gt;
                if (i % 5 == 0)&lt;br /&gt;
                {&lt;br /&gt;
                    //Sets the size of the point to make it bigger&lt;br /&gt;
                    pointSize = 4;&lt;br /&gt;
                    //The hour number&lt;br /&gt;
                    string text = (i / 5).ToString();&lt;br /&gt;
                    SizeF sz = e.Graphics.MeasureString(text, Font);&lt;br /&gt;
                    //The point where the text should be rendered&lt;br /&gt;
                    PointF textPoint = GetPoint(center, textRadius, angle);&lt;br /&gt;
                    //Offsets the text location so it is centered in that point.&lt;br /&gt;
                    textPoint.X -= sz.Width / 2;&lt;br /&gt;
                    textPoint.Y -= sz.Height / 2;&lt;br /&gt;
                    //Draws the hour number&lt;br /&gt;
                    e.Graphics.DrawString(text, Font, new SolidBrush(this.ForeColor), textPoint);&lt;br /&gt;
                }&lt;br /&gt;
                Pen pen = new Pen(new SolidBrush(this.ForeColor), 1);&lt;br /&gt;
                //Draws the outer dot of the clock&lt;br /&gt;
                e.Graphics.DrawEllipse(pen, dotPoint.X - pointSize / 2, dotPoint.Y - pointSize / 2, pointSize, pointSize);&lt;br /&gt;
                pen.Dispose();&lt;br /&gt;
            }&lt;br /&gt;
            //Gets the system time&lt;br /&gt;
            DateTime dt = DateTime.Now;&lt;br /&gt;
            //Calculates the hour offset from the large outer dot&lt;br /&gt;
            float min = ((float)dt.Minute) / 60;&lt;br /&gt;
            //Calculates the angle of the hour line&lt;br /&gt;
            float hourAngle = GetAngle(dt.Hour + min, 12);&lt;br /&gt;
            //Calculates the angle of the minute line&lt;br /&gt;
            float minuteAngle = GetAngle(dt.Minute, 60);&lt;br /&gt;
            //Calculates the angle of the second line&lt;br /&gt;
            float secondAngle = GetAngle(dt.Second, 60);&lt;br /&gt;
            //Draws the clock lines&lt;br /&gt;
            DrawLine(e.Graphics, this.secondColor, 1, center, secondRadius, secondAngle);&lt;br /&gt;
            DrawLine(e.Graphics, this.minuteColor, 2, center, minuteRadius, minuteAngle);&lt;br /&gt;
            DrawLine(e.Graphics, this.hourColor, 3, center, hourRadius, hourAngle);&lt;br /&gt;
            e.Graphics.ResetTransform();&lt;br /&gt;
        }&lt;br /&gt;
        private PointF GetPoint(PointF center, float radius, float angle)&lt;br /&gt;
        {&lt;br /&gt;
            //Calculates the X coordinate of the point&lt;br /&gt;
            float x = (float)Math.Cos(2 * Math.PI * angle / 360) * radius + center.X;&lt;br /&gt;
            //Calculates the Y coordinate of the point&lt;br /&gt;
            float y = -(float)Math.Sin(2 * Math.PI * angle / 360) * radius + center.Y;&lt;br /&gt;
            return new PointF(x, y);&lt;br /&gt;
        }&lt;br /&gt;
        private void DrawLine(Graphics g, Color color, int penWidth, PointF center, float radius, float angle)&lt;br /&gt;
        {&lt;br /&gt;
            //Calculates the end point of the line&lt;br /&gt;
            PointF endPoint = GetPoint(center, radius, angle);&lt;br /&gt;
            //Creates the pen used to render the line&lt;br /&gt;
            Pen pen = new Pen(new SolidBrush(color), penWidth);&lt;br /&gt;
            //Renders the line&lt;br /&gt;
            g.DrawLine(pen, center, endPoint);&lt;br /&gt;
            pen.Dispose();&lt;br /&gt;
        }&lt;br /&gt;
        private void MakeRound()&lt;br /&gt;
        {&lt;br /&gt;
            GraphicsPath gp = new GraphicsPath();&lt;br /&gt;
            float min = Math.Min(Width, Height);&lt;br /&gt;
            //Creates the ellipse shape&lt;br /&gt;
            gp.AddEllipse((Width - min) / 2, (Height - min) / 2, min, min);&lt;br /&gt;
            //Creates the ellipse region&lt;br /&gt;
            Region rgn = new Region(gp);&lt;br /&gt;
            //Sets the ellipse region to the control&lt;br /&gt;
            this.Region = rgn;&lt;br /&gt;
        }&lt;br /&gt;
        private float GetAngle(float clockValue, float divisions)&lt;br /&gt;
        {&lt;br /&gt;
            //Calculates the angle&lt;br /&gt;
            return 360 - (360 * (clockValue) / divisions) + 90;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        private void timer_Tick(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
            Invalidate();&lt;br /&gt;
        }&lt;br /&gt;
        private void Clock_SizeChanged(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
            MakeRound();&lt;br /&gt;
            Invalidate();&lt;br /&gt;
        }&lt;br /&gt;
        private void Clock_Paint(object sender, PaintEventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
        }&lt;br /&gt;
        private System.ruponentModel.IContainer components = null;&lt;br /&gt;
        /// &amp;lt;summary&amp;gt; &lt;br /&gt;
        /// Clean up any resources being used.&lt;br /&gt;
        /// &amp;lt;/summary&amp;gt;&lt;br /&gt;
        /// &amp;lt;param name=&amp;quot;disposing&amp;quot;&amp;gt;true if managed resources should be disposed; otherwise, false.&amp;lt;/param&amp;gt;&lt;br /&gt;
        protected override void Dispose(bool disposing)&lt;br /&gt;
        {&lt;br /&gt;
            if (disposing &amp;amp;&amp;amp; (components != null))&lt;br /&gt;
            {&lt;br /&gt;
                components.Dispose();&lt;br /&gt;
            }&lt;br /&gt;
            base.Dispose(disposing);&lt;br /&gt;
        }&lt;br /&gt;
        #region Component Designer generated code&lt;br /&gt;
        /// &amp;lt;summary&amp;gt; &lt;br /&gt;
        /// Required method for Designer support - do not modify &lt;br /&gt;
        /// the contents of this method with the code editor.&lt;br /&gt;
        /// &amp;lt;/summary&amp;gt;&lt;br /&gt;
        private void InitializeComponent()&lt;br /&gt;
        {&lt;br /&gt;
            this.ruponents = new System.ruponentModel.Container();&lt;br /&gt;
            this.timer = new System.Windows.Forms.Timer(this.ruponents);&lt;br /&gt;
            this.SuspendLayout();&lt;br /&gt;
            // &lt;br /&gt;
            // timer&lt;br /&gt;
            // &lt;br /&gt;
            this.timer.Interval = 1000;&lt;br /&gt;
            this.timer.Tick += new System.EventHandler(this.timer_Tick);&lt;br /&gt;
            // &lt;br /&gt;
            // Clock&lt;br /&gt;
            // &lt;br /&gt;
            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);&lt;br /&gt;
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;&lt;br /&gt;
            this.Name = &amp;quot;Clock&amp;quot;;&lt;br /&gt;
            this.Paint += new System.Windows.Forms.PaintEventHandler(this.Clock_Paint);&lt;br /&gt;
            this.SizeChanged += new System.EventHandler(this.Clock_SizeChanged);&lt;br /&gt;
            this.ResumeLayout(false);&lt;br /&gt;
        }&lt;br /&gt;
        #endregion&lt;br /&gt;
        private System.Windows.Forms.Timer timer;&lt;br /&gt;
        &lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
}&lt;br /&gt;
           &lt;br /&gt;
       &amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>	</entry>

	</feed>