winform 熱詞從背景圖中間向四周發散效果


經理提了個小功能 , 從數據庫讀取出關鍵詞  然后窗體放個背景圖片  關鍵詞從圖片中間一個一個出來  然后慢慢向四周發散的效果 。文字大小和顏色 可以控制 

 

首先設置 Form的 BackgroundImage 屬性    設置窗體的背景圖   

 

然后添加2個timer 控件 timer1和timer2,設置Interval =300 , 其中 timer1 用來隔0.3s通過GDI+   DrawString, timer2 用來隔0.3s 添加關鍵詞

上代碼:

  private void timer1_Tick(object sender, EventArgs e)
        {
            if (SC != null)
            {
                img = Image.FromFile(".\\logo.png");
                SC.Reflash();
                Graphics g = Graphics.FromImage(img);
                SC.Print(g);
                g.Dispose();
                this.BackgroundImage = img;
            }

        }

 private void timer2_Tick(object sender, EventArgs e)
        {
            List<string> names = str;
            List<int> list = new List<int>();

            if (!list.Contains(chunum))
            {
                if (chunum < names.Count)
                {
                    list.Add(chunum);
                    lock (SC)
                    {
                        SC.AddKey(names[chunum], chunum);
                    }
                    chunum++;
                }
            }
        }

        List<string> str = new List<string> { "小胖人", "我的信", "hello", "加油", "你是誰", "張三是", "理順了", "萬城" };

 

 

SC是個自定義類 ShowClass  里面有字體大小  顏色   

public class ShowClass
    {
        public int firstVal = 0;
        public int secondVal = 0;

        public Size winsize;
        public int keylens;
        public int keylene;
        public int fontsizes;
        public int fontsizee;
        public Color fontcolor;
        public List<View> lv = new List<View>();
        public ShowClass(Size size, int keylens, int keylene, int fontsizes, int fontsizee, Color fontcolor)
        {
            this.winsize = size;
            this.keylens = keylens;
            this.keylene = keylene;
            this.fontsizes = fontsizes;
            this.fontsizee = fontsizee;
            this.fontcolor = fontcolor;
        }
        public void AddKey(string key, int chunum)
        {
            if (lv.Count() < keylene)
            {
                lv.Add(new View(key, chunum, fontsizes, fontsizee, fontcolor, winsize));
            }
        }

        internal View IsInView(int x, int y)
        {
            foreach (View v in lv)
            {
                if (v.isInRec(new Point(x, y)))
                {
                    return v;
                }
            }
            return null;

        }

        internal void Print(Graphics g)
        {
            foreach (View x in lv)
            {
                x.Print(g);
            }
        }
        internal void Reflash()
        {
           
            for (int i = 0; i < lv.Count; i++)
            {
                if (i == 0 && firstVal < 3)
                {
                    firstVal++;
                    lv[i].Reflash(0);
                }

                else if (i > 0 && secondVal < 150)
                {
                    secondVal++;
                    lv[i].Reflash(i);
                }

            }
        }

  Print 里面就是通過GDI+ 來實現在背景圖上畫字    g.DrawString(text, new Font(font, fsize), new SolidBrush(cl), new Point(x, y));

       第二個參數可以控制字體大小   最后一個參數Point就是坐標  可以通過隨機數來確定文字發散方向及x, y 的距離 

 

來個最終效果圖  關鍵詞發散方向和 距離都是隨機的   

 

 

原文地址:https://www.cnblogs.com/alonglonga/p/12288781.html    小赫赫首發

有問題聯系Q: 591811930


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM