PDA

View Full Version : سوال: متن متحرک



alicam
چهارشنبه 28 بهمن 1388, 01:04 صبح
سلام
من چند وقت پیش یه کد جاوا رو دیدم که یک متن رو رنگ میکرد. خواستم این رو بنویسم.
نوشتم اما برنامه چند تا مشکل داره. اولیش اینکه خیلی کنده. دومیش اینکه وقتی برنامه اجرا میشه کل برنامه منتظر میشه تا کد تموم بشه.سومیش این که دائم متن پر رنگ تر میشه.
من میخوام بدونم که چه جوری میشه در این کد (که من خیلی به مشکل اینجوری هم بر میخورم) وقتی یک شیئی گرافیکی با فرم ایجاد شد رو پاک کرد؟
دوم اینکه چه جوری میشه کد رو طوری نوشت که فقط همون قسمتی که داره تغییر میکنه refresh بشه نه کل فرم؟
این هم کد
ممنون میشم اگه جواب بدین.


//welcome to mehran program...
using System;
using System.Collections.Generic;
using System.Windows.Forms;
using System.Drawing;
using System.Threading;
namespace CSEmptyProjecct
{
class MainPro
{
//define my data
public static char [] cha;
public static Brush firstbu;
public static Brush lastbu;
public static bool bo = true;
public static int n = 0;
public static void Main()
{

//string that you want to show
string str = "------ you can if you want ------";

cha = str.ToCharArray();
Form form1 = new Form();
firstbu = Brushes.Gray;
lastbu = Brushes.Blue;

form1.Text = "MY form";
form1.MinimizeBox = false;
form1.MaximizeBox = false;
form1.Width = 500;
form1.Height = 80;
form1.Font = new Font("Arial", 12);
form1.FormBorderStyle = FormBorderStyle.Fixed3D;
form1.Paint += new PaintEventHandler(MyPaint);
Application.Run(form1);

}//end Main fun
static void MyPaint(object sender, PaintEventArgs e)
{
Graphics graph = e.Graphics;
//validate form for event
Form form1 = (Form)sender;

//draw string whit gray color
for (int m = 0; m < cha.Length; m++)
{
Thread.Sleep(100);
e.Graphics.DrawString(cha[m].ToString(), form1.Font, firstbu, (m * 13) + 10, 10);
}
//draw string whit blue color
for (int m = 0; m < cha.Length; m++)
{
e.Graphics.DrawString(cha[m].ToString(), form1.Font, lastbu, (m * 13) + 10, 10);
Thread.Sleep(100);
}
//dispose and close form
graph.Dispose();
form1.Close();
}//End mypaint Event

}//end class
}//end namespace

moharrami
چهارشنبه 28 بهمن 1388, 09:06 صبح
1- کندیش بخاطر دوتا دستور thread.sleep(1000) هست که تو for ها گذاشتی
2-بخاطر اینکه برنامه منتظر تموم شدن چاپ نشه می تونی از یه background worker استفاده کنی
3- برا پاک کردن این نوشته باید فرم رو از اول رسم کنی
4-برا refresh کرد یه قسمت از فرم متد form1.Invalidate(); و جود داره که قسمتی رو که میخوای refresh کنی به عنوان یه مستطیل بهش میدی.