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

  • Вопрос

  • как сделать бегущую строку по контуру формы???
    • Изменено I.Vorontsov 1 февраля 2010 г. 10:15 Опечаток в заголовке
    • Изменен тип I.Vorontsov 1 февраля 2010 г. 10:25
    • Перемещено I.Vorontsov 2 февраля 2010 г. 7:24 (От:Visual C#)
    • Перемещено SachinW 1 октября 2010 г. 22:21 MSDN Forums Consolidation (От:Начинающие разработчики)
    1 февраля 2010 г. 10:03

Ответы

  • алгоритм корявый возможн)))
    +слово на стороне должно быть короче самой стороны+размер формы увеличивать нельзя)
    но эт ты уж сам)))

    public partial class Form1 : Form
    {
        private Int32 step;
        private Int32 temp;
    
        public Form1()
        {
            InitializeComponent();
            this.FormBorderStyle = FormBorderStyle.FixedSingle;
            this.MaximizeBox = false;
            this.MinimizeBox = false;
            this.Size = new Size(300, 300);
            label1.Text = "мойтекст";
            label1.Location = new Point(0, 0);
            step = 10;
            temp = label1.Text.Length;
            System.Windows.Forms.Timer tmr = new System.Windows.Forms.Timer();
            tmr.Interval = 50;
            tmr.Tick += new EventHandler(tmr_Tick);
            tmr.Start();
        }
    
        void tmr_Tick(object sender, EventArgs e)
        {
            //по часовой
            if (label1.Location.Y < 1 && label1.Location.X + label1.Size.Width < this.ClientSize.Width)
            {
                //вправо
                if (label1.Location.X + label1.Size.Width + step <= this.ClientSize.Width)
                {
                    label1.Location = new Point(label1.Location.X + step, label1.Location.Y);
                    temp = label1.Text.Length;
                    label1.TextAlign = ContentAlignment.TopRight;
                }
                else
                {
                    //перестраиваем слово
                    if (temp > 1)
                    {
                        temp--;
                        label1.Text = label1.Text.Insert(temp, Environment.NewLine);
                        if(temp>1)
                            label1.Location = new Point(this.ClientSize.Width - label1.Size.Width - 1, label1.Location.Y);
                        else
                            label1.Location = new Point(this.ClientSize.Width - label1.Size.Width, label1.Location.Y);
                    }
                }
            }
            else if (this.ClientSize.Width - label1.Location.X - label1.Size.Width < step && label1.Location.Y + label1.Size.Height < this.ClientSize.Height)
            {
                //вниз
                if (label1.Location.Y + label1.Size.Height + step <= this.ClientSize.Height)
                {
                    label1.Location = new Point(label1.Location.X, label1.Location.Y + step);
                    temp = 0;
                    label1.TextAlign = ContentAlignment.BottomRight;
                }
                else
                {
                    //перестраиваем слово
                    if (temp + 3 < label1.Text.Length)
                    {
                        String strtemp = String.Empty;
                        for (Int32 i = temp; i >= 0; i--)
                        {
                            strtemp += label1.Text[label1.Text.Length - i - 1];
                        }
                        label1.Text = label1.Text.Remove(label1.Text.Length - temp - 3, 3 + temp);
                        label1.Text = label1.Text.Insert(label1.Text.Length - 1, strtemp);
                        temp++;
                        if(temp + 3 < label1.Text.Length)
                            label1.Location = new Point(this.ClientSize.Width - label1.Size.Width, this.ClientSize.Height - label1.Size.Height - 1);
                        else
                            label1.Location = new Point(this.ClientSize.Width - label1.Size.Width, this.ClientSize.Height - label1.Size.Height);
                    }
                }
            }
            else if (this.ClientSize.Height - label1.Location.Y - label1.Size.Height < step && label1.Location.X > 0)
            {
                //влево
                if (label1.Location.X - step >= 0)
                {
                    label1.Location = new Point(label1.Location.X - step, label1.Location.Y);
                    temp = label1.Text.Length;
                    label1.TextAlign = ContentAlignment.BottomLeft;
                }
                else
                {
                    //перестраиваем слово
                    if (temp > 1)
                    {
                        temp--;
                        label1.Text = label1.Text.Insert(label1.Text.Length - temp, Environment.NewLine);
                        if(temp>1)
                            label1.Location = new Point(1, this.ClientSize.Height - label1.Size.Height);
                        else
                            label1.Location = new Point(0, this.ClientSize.Height - label1.Size.Height);
                    }
                }
            }
            else if (label1.Location.X < step && label1.Location.Y > 0)
            {
                //вверх
                if (label1.Location.Y - step >= step)
                {
                    label1.Location = new Point(label1.Location.X, label1.Location.Y - step);
                    temp = 0;
                    label1.TextAlign = ContentAlignment.TopLeft;
                }
                else
                {
                    //перестраиваем слово
                    if (temp + 3 < label1.Text.Length)
                    {
                        String strtemp = String.Empty;
                        for (Int32 i = 0; i < temp + 1; i++)
                        {
                            strtemp += label1.Text[i];
                        }
                        label1.Text = label1.Text.Remove(0, 3 + temp);
                        label1.Text = label1.Text.Insert(1, strtemp);
                        temp++;
                        if (temp + 3 < label1.Text.Length)
                            label1.Location = new Point(label1.Location.X, 1);
                        else
                            label1.Location = new Point(label1.Location.X, 0);
                    }
                }
            }
        }
    }

    • Помечено в качестве ответа I.Vorontsov 2 февраля 2010 г. 7:24
    1 февраля 2010 г. 13:43
  • Посмотри http://www.codeproject.com/KB/miscctrl/MarqueeControl.aspx, там полноценный контрол, with bells and whistles. И с исходниками.
    • Помечено в качестве ответа I.Vorontsov 2 февраля 2010 г. 7:24
    1 февраля 2010 г. 13:57

Все ответы

  • Двигать Label?
    1 февраля 2010 г. 10:14
  • в принципе можно и его!!! хотел по контуру формы по краям вокруг!!! но если можно то помогите и LABEL только по ширине формы снизу!!!!
    1 февраля 2010 г. 10:16
  • Ты только что спрашивал про ПикчеБоксы, может быть сразу выложишь задание своей курсовой?
    1 февраля 2010 г. 11:27
  • да нет это не курсовая я просто пропустил все уроки по программированию в универе, вот теперь решил плотно этим заняться... вот только есть непонятные моменты.... а то что мне надо можно увидеть сверху вопрос!!!
    1 февраля 2010 г. 11:38
  • да нет это не курсовая я просто пропустил все уроки по программированию в универе, вот теперь решил плотно этим заняться... вот только есть непонятные моменты.... а то что мне надо можно увидеть сверху вопрос!!!
    Ну тогда читай конспекты, потому что здесь та же система, что и в рисовании PictureBox. Создаешь таймер и в обработчике события Tick  устанавливаешь для Label новые координаты, у тебя две прямых - две горизонтальные и две вертикальные - вдоль них и меняещ координаты, еще нужно осуществлять проверку на выход за границы прямых.
    1 февраля 2010 г. 11:50
  • алгоритм корявый возможн)))
    +слово на стороне должно быть короче самой стороны+размер формы увеличивать нельзя)
    но эт ты уж сам)))

    public partial class Form1 : Form
    {
        private Int32 step;
        private Int32 temp;
    
        public Form1()
        {
            InitializeComponent();
            this.FormBorderStyle = FormBorderStyle.FixedSingle;
            this.MaximizeBox = false;
            this.MinimizeBox = false;
            this.Size = new Size(300, 300);
            label1.Text = "мойтекст";
            label1.Location = new Point(0, 0);
            step = 10;
            temp = label1.Text.Length;
            System.Windows.Forms.Timer tmr = new System.Windows.Forms.Timer();
            tmr.Interval = 50;
            tmr.Tick += new EventHandler(tmr_Tick);
            tmr.Start();
        }
    
        void tmr_Tick(object sender, EventArgs e)
        {
            //по часовой
            if (label1.Location.Y < 1 && label1.Location.X + label1.Size.Width < this.ClientSize.Width)
            {
                //вправо
                if (label1.Location.X + label1.Size.Width + step <= this.ClientSize.Width)
                {
                    label1.Location = new Point(label1.Location.X + step, label1.Location.Y);
                    temp = label1.Text.Length;
                    label1.TextAlign = ContentAlignment.TopRight;
                }
                else
                {
                    //перестраиваем слово
                    if (temp > 1)
                    {
                        temp--;
                        label1.Text = label1.Text.Insert(temp, Environment.NewLine);
                        if(temp>1)
                            label1.Location = new Point(this.ClientSize.Width - label1.Size.Width - 1, label1.Location.Y);
                        else
                            label1.Location = new Point(this.ClientSize.Width - label1.Size.Width, label1.Location.Y);
                    }
                }
            }
            else if (this.ClientSize.Width - label1.Location.X - label1.Size.Width < step && label1.Location.Y + label1.Size.Height < this.ClientSize.Height)
            {
                //вниз
                if (label1.Location.Y + label1.Size.Height + step <= this.ClientSize.Height)
                {
                    label1.Location = new Point(label1.Location.X, label1.Location.Y + step);
                    temp = 0;
                    label1.TextAlign = ContentAlignment.BottomRight;
                }
                else
                {
                    //перестраиваем слово
                    if (temp + 3 < label1.Text.Length)
                    {
                        String strtemp = String.Empty;
                        for (Int32 i = temp; i >= 0; i--)
                        {
                            strtemp += label1.Text[label1.Text.Length - i - 1];
                        }
                        label1.Text = label1.Text.Remove(label1.Text.Length - temp - 3, 3 + temp);
                        label1.Text = label1.Text.Insert(label1.Text.Length - 1, strtemp);
                        temp++;
                        if(temp + 3 < label1.Text.Length)
                            label1.Location = new Point(this.ClientSize.Width - label1.Size.Width, this.ClientSize.Height - label1.Size.Height - 1);
                        else
                            label1.Location = new Point(this.ClientSize.Width - label1.Size.Width, this.ClientSize.Height - label1.Size.Height);
                    }
                }
            }
            else if (this.ClientSize.Height - label1.Location.Y - label1.Size.Height < step && label1.Location.X > 0)
            {
                //влево
                if (label1.Location.X - step >= 0)
                {
                    label1.Location = new Point(label1.Location.X - step, label1.Location.Y);
                    temp = label1.Text.Length;
                    label1.TextAlign = ContentAlignment.BottomLeft;
                }
                else
                {
                    //перестраиваем слово
                    if (temp > 1)
                    {
                        temp--;
                        label1.Text = label1.Text.Insert(label1.Text.Length - temp, Environment.NewLine);
                        if(temp>1)
                            label1.Location = new Point(1, this.ClientSize.Height - label1.Size.Height);
                        else
                            label1.Location = new Point(0, this.ClientSize.Height - label1.Size.Height);
                    }
                }
            }
            else if (label1.Location.X < step && label1.Location.Y > 0)
            {
                //вверх
                if (label1.Location.Y - step >= step)
                {
                    label1.Location = new Point(label1.Location.X, label1.Location.Y - step);
                    temp = 0;
                    label1.TextAlign = ContentAlignment.TopLeft;
                }
                else
                {
                    //перестраиваем слово
                    if (temp + 3 < label1.Text.Length)
                    {
                        String strtemp = String.Empty;
                        for (Int32 i = 0; i < temp + 1; i++)
                        {
                            strtemp += label1.Text[i];
                        }
                        label1.Text = label1.Text.Remove(0, 3 + temp);
                        label1.Text = label1.Text.Insert(1, strtemp);
                        temp++;
                        if (temp + 3 < label1.Text.Length)
                            label1.Location = new Point(label1.Location.X, 1);
                        else
                            label1.Location = new Point(label1.Location.X, 0);
                    }
                }
            }
        }
    }

    • Помечено в качестве ответа I.Vorontsov 2 февраля 2010 г. 7:24
    1 февраля 2010 г. 13:43
  • Посмотри http://www.codeproject.com/KB/miscctrl/MarqueeControl.aspx, там полноценный контрол, with bells and whistles. И с исходниками.
    • Помечено в качестве ответа I.Vorontsov 2 февраля 2010 г. 7:24
    1 февраля 2010 г. 13:57