Мой Kbyte.Ru
Рассылка Kbyte.Ru
Группы на Kbyte.Ru
Партнеры Kbyte.Ru
Реклама
Сделано руками
Сделано руками
> Исходные коды - Юлиан Сербан -

C# - Графика

Все примеры / Мультимедиа / Графика

Бегущая строка

Автор: Юлиан Сербан | добавлено: 12.01.2011, 20:00 | просмотров: 8447 (1+) | комментариев: 0 | рейтинг: *x6
Пример рисует на форме бегущую строку. Можно менять скорость и интервал движения текста. В примере используются функции FillRectangle, DrawString и DrawImageUnscaled, а также двойная буферизация для исключения эффекта мерцания изображения.

Код

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

public partial class Form1 : Form
{
  public Form1()
  {
    InitializeComponent();
  }

  private void tbInterval_Scroll(object sender, EventArgs e)
  {
    scrollingText.ScrollTimeInterval = tbInterval.Value;
  }

  private void tbAmount_Scroll(object sender, EventArgs e)
  {
    scrollingText.ScrollPixelAmount = tbAmount.Value;
  }

  /// <summary>
  /// Required designer variable.
  /// </summary>
  private System.ComponentModel.IContainer components = null;

  /// <summary>
  /// Clean up any resources being used.
  /// </summary>
  /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
  protected override void Dispose(bool disposing)
  {
    if (disposing && (components != null))
    {
      components.Dispose();
    }
    base.Dispose(disposing);
  }

  #region Windows Form Designer generated code

  /// <summary>
  /// Required method for Designer support - do not modify
  /// the contents of this method with the code editor.
  /// </summary>
  private void InitializeComponent()
  {
    this.scrollingText = new ScrollingText();
    this.grpTrackerBars = new System.Windows.Forms.GroupBox();
    this.label1 = new System.Windows.Forms.Label();
    this.label2 = new System.Windows.Forms.Label();
    this.tbAmount = new System.Windows.Forms.TrackBar();
    this.tbInterval = new System.Windows.Forms.TrackBar();
    this.grpTrackerBars.SuspendLayout();
    ((System.ComponentModel.ISupportInitialize)(this.tbAmount)).BeginInit();
    ((System.ComponentModel.ISupportInitialize)(this.tbInterval)).BeginInit();
    this.SuspendLayout();
    // 
    // scrollingText
    // 
    this.scrollingText.BackColor = System.Drawing.Color.LightGray;
    this.scrollingText.Font = new System.Drawing.Font("Verdana", 26.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
    this.scrollingText.ForeColor = System.Drawing.Color.Navy;
    this.scrollingText.Location = new System.Drawing.Point(38, 29);
    this.scrollingText.Margin = new System.Windows.Forms.Padding(12, 10, 12, 10);
    this.scrollingText.Name = "scrollingText";
    this.scrollingText.ScrollPixelAmount = 10;
    this.scrollingText.ScrollTimeInterval = 100;
    this.scrollingText.Size = new System.Drawing.Size(300, 80);
    this.scrollingText.TabIndex = 0;
    this.scrollingText.Text = "Kbyte.Ru - портал для программистов";
    // 
    // grpTrackerBars
    // 
    this.grpTrackerBars.Controls.Add(this.tbInterval);
    this.grpTrackerBars.Controls.Add(this.tbAmount);
    this.grpTrackerBars.Controls.Add(this.label2);
    this.grpTrackerBars.Controls.Add(this.label1);
    this.grpTrackerBars.Location = new System.Drawing.Point(38, 132);
    this.grpTrackerBars.Name = "grpTrackerBars";
    this.grpTrackerBars.Size = new System.Drawing.Size(322, 183);
    this.grpTrackerBars.TabIndex = 1;
    this.grpTrackerBars.TabStop = false;
    // 
    // label1
    // 
    this.label1.AutoSize = true;
    this.label1.Location = new System.Drawing.Point(7, 37);
    this.label1.Name = "label1";
    this.label1.Size = new System.Drawing.Size(72, 13);
    this.label1.TabIndex = 0;
    this.label1.Text = "Scroll Amount";
    // 
    // label2
    // 
    this.label2.AutoSize = true;
    this.label2.Location = new System.Drawing.Point(10, 134);
    this.label2.Name = "label2";
    this.label2.Size = new System.Drawing.Size(71, 13);
    this.label2.TabIndex = 1;
    this.label2.Text = "Scroll Interval";
    // 
    // tbAmount
    // 
    this.tbAmount.Location = new System.Drawing.Point(101, 19);
    this.tbAmount.Maximum = 20;
    this.tbAmount.Name = "tbAmount";
    this.tbAmount.Size = new System.Drawing.Size(200, 45);
    this.tbAmount.TabIndex = 2;
    this.tbAmount.Value = 1;
    this.tbAmount.Scroll += new System.EventHandler(this.tbAmount_Scroll);
    // 
    // tbInterval
    // 
    this.tbInterval.Location = new System.Drawing.Point(101, 123);
    this.tbInterval.Maximum = 500;
    this.tbInterval.Minimum = 10;
    this.tbInterval.Name = "tbInterval";
    this.tbInterval.Size = new System.Drawing.Size(200, 45);
    this.tbInterval.TabIndex = 3;
    this.tbInterval.TickFrequency = 10;
    this.tbInterval.Value = 100;
    this.tbInterval.Scroll += new System.EventHandler(this.tbInterval_Scroll);
    // 
    // Form1
    // 
    this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
    this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
    this.ClientSize = new System.Drawing.Size(456, 332);
    this.Controls.Add(this.grpTrackerBars);
    this.Controls.Add(this.scrollingText);
    this.Name = "Form1";
    this.Text = "Form1";
    this.grpTrackerBars.ResumeLayout(false);
    this.grpTrackerBars.PerformLayout();
    ((System.ComponentModel.ISupportInitialize)(this.tbAmount)).EndInit();
    ((System.ComponentModel.ISupportInitialize)(this.tbInterval)).EndInit();
    this.ResumeLayout(false);

  }

  #endregion

  private ScrollingText scrollingText;
  private System.Windows.Forms.GroupBox grpTrackerBars;
  private System.Windows.Forms.TrackBar tbInterval;
  private System.Windows.Forms.TrackBar tbAmount;
  private System.Windows.Forms.Label label2;
  private System.Windows.Forms.Label label1;

  [STAThread]
  static void Main()
  {
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);
    Application.Run(new Form1());
  }
}
public partial class ScrollingText : UserControl
{
  private string text;
  private int scrollAmount = 10;
  private int position = 10;

  public ScrollingText()
  {
    InitializeComponent();
  }

  private void ScrollingText_Load(object sender, EventArgs e)
  {
    this.ResizeRedraw = true;
    if (!this.DesignMode)
    {
      scrollTimer.Enabled = true;
    }

  }

  private void scrollTimer_Tick(object sender, EventArgs e)
  {
    position += scrollAmount;
    this.Invalidate();

  }
  [Browsable(true), DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
  public override string Text
  {
    get
    {
      return text;
    }
    set
    {
      text = value;
      this.Invalidate();
    }
  }

  public int ScrollTimeInterval
  {
    get
    {
      return scrollTimer.Interval;
    }
    set
    {
      scrollTimer.Interval = value;
    }
  }

  public int ScrollPixelAmount
  {
    get
    {
      return scrollAmount;
    }
    set
    {
      scrollAmount = value;
    }
  }

  private void ScrollingText_Paint(object sender, PaintEventArgs e)
  {

  }
  protected override void OnPaint(System.Windows.Forms.PaintEventArgs e)
  {
    // to avoid a design-time error we need to add the following line
    if (e.ClipRectangle.Width == 0)
    {
      return;
    }

    base.OnPaint(e);
    if (position > this.Width)
    {
      // Reset the text to scroll back onto the control.
      position = -(int)e.Graphics.MeasureString(text, this.Font).Width;
    }

    // Create the drawing area in memory.
    // Double buffering is used to prevent flicker.
    Bitmap bufl = new Bitmap(e.ClipRectangle.Width, e.ClipRectangle.Height);
    Graphics g = Graphics.FromImage(bufl);
    g.FillRectangle(new SolidBrush(this.BackColor), e.ClipRectangle);
    g.DrawString(text, this.Font, new SolidBrush(this.ForeColor), position, 0);
    // Render the finished image on the form.  
    e.Graphics.DrawImageUnscaled(bufl, 0, 0);
    g.Dispose();
  }

  /// <summary> 
  /// Required designer variable.
  /// </summary>
  private System.ComponentModel.IContainer components = null;

  /// <summary> 
  /// Clean up any resources being used.
  /// </summary>
  /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
  protected override void Dispose(bool disposing)
  {
    if (disposing && (components != null))
    {
      components.Dispose();
    }
    base.Dispose(disposing);
  }

  #region Component Designer generated code

  /// <summary> 
  /// Required method for Designer support - do not modify 
  /// the contents of this method with the code editor.
  /// </summary>
  private void InitializeComponent()
  {
    this.components = new System.ComponentModel.Container();
    this.scrollTimer = new System.Windows.Forms.Timer(this.components);
    this.SuspendLayout();
    // 
    // scrollTimer
    // 
    this.scrollTimer.Tick += new System.EventHandler(this.scrollTimer_Tick);
    // 
    // ScrollingText
    // 
    this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
    this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
    this.Name = "ScrollingText";
    this.Size = new System.Drawing.Size(400, 100);
    this.Load += new System.EventHandler(this.ScrollingText_Load);
    this.Paint += new System.Windows.Forms.PaintEventHandler(this.ScrollingText_Paint);
    this.ResumeLayout(false);

  }

  #endregion

  internal System.Windows.Forms.Timer scrollTimer;
}
Файлы Бегущая строка.zip (36,11 Кб)
Об авторе

Юлиан Сербан

Нет информации об авторе...
Юлиан Сербан
Последние комментарии (всего: 0)

Добавлять комментарии могут только зарегистрированные пользователи сайта.
Если у Вас уже есть учетная запись на Kbyte.Ru, пройдите процедуру авторизации OpenID.
Если Вы еще не зарегистрированы на Kbyte.Ru - зарегистрируйтесь.


Нет комментариев...

Авторизация
 
OpenID
Зарегистрируйся и получи 10% скидку на добавление своего сайта в каталоги! Подробнее »
Поиск по сайту
Люди на Kbyte.Ru
Реклама
Счетчики