نمایش نتایج 1 تا 5 از 5

نام تاپیک: رسم نقاشی در چند فرم به صورت همزمان در سی شارپ

  1. #1
    کاربر جدید آواتار mohamaddarbandi
    تاریخ عضویت
    اسفند 1386
    محل زندگی
    Iran/Shiraz
    پست
    27

    Tick رسم نقاشی در چند فرم به صورت همزمان در سی شارپ

    سلام دوستان.
    یه سوال در حین انجام یه پروژه دانشگاهی برام پیش اومده. لطفا راهنماییم کنید:
    من یه فرم دارم که توی اون با ابزار paint و pen میشه نقشی کشید. اما این نقاشی قراره در حین کشیدن توسط نقاش، به صورت realtime برای کابران دیگر شبکه هم قابل مشاهده باشه. خودم فکر کردم در حین کشیدن این نقاشی x , y ماوس رو برای بقیه بفرستم و اونها هم نقاشی رو بدون pen و با x , y روی فرم خودشون رسم کنند. اما در مرحله اول برای چک کردن اینکه آیا این کار عملی هست یا نه دو تا فرم درست کردم و سعی کردم روی یکی نقاشی کنم و روی هردو فرم نقاشی رو در حین کشیدن ببینم. اما هیچ راهی پیدا نکردم! مشکل اینه که هیچ حلقه ای نتونستم درست کنم که جای Form1_MouseMove در کد زیر جایگزین بشه!
    حالا سوالم اینه:
    1. آیا روش فرستادن x , y روش خوبیه؟ و اگه خوب نیست چه روشی برای رسم لحظه به لحظه ی نقاشی روی فرم تمام client های دیگر شبکه پیشنهاد میکنید؟
    2. چطور با استفاده از x , y نقاشی که روی یه فرم رسم میشه را روی یه فرم دیگه به صورت لحظه به لحظه نمایش بدم؟ به عبارت دیگه چطور بدون استفاده از pen و با استفاده ازx , yهای متوالی که به کلاس فرم داده میشه یه نقاشی رسم کنم.


    این GUI اولیه کشیدن نقاشی روی فرم هست. اولین پاسخ هم کد برنامه هست.


  2. #2
    کاربر جدید آواتار mohamaddarbandi
    تاریخ عضویت
    اسفند 1386
    محل زندگی
    Iran/Shiraz
    پست
    27

    نقل قول: رسم نقاشی در چند فرم به صورت همزمان در سی شارپ

    برای این که بریسها در بین # وارونه نمایش داده می شدند مجبور شدم توی پاسخها کد رو بذارم. به هر حال ممنون razavi universityجان

    in code barnameye balast:


    namespace pen
    {
    public partial class Form1 : Form
    {
    public Form1()
    {
    InitializeComponent();
    }
    Graphics g;
    Pen p = new Pen(Color.Black);
    public int last_point_x=0;
    public int last_point_y=0;
    public Boolean status = false;
    public Boolean draw_line_cheker = false;
    private void Form1_Load(object sender, EventArgs e)
    {
    g = this.CreateGraphics();

    }

    private void Form1_MouseMove(object sender, MouseEventArgs e)
    {
    if (draw_line_cheker == true)
    {
    if (status == false)
    {
    last_point_x = e.X;
    last_point_y = e.Y;
    status = true;
    }
    //draw line
    g.DrawLine(p, last_point_x, last_point_y, e.X, e.Y);
    last_point_x = e.X;
    last_point_y = e.Y;
    }
    }

    private void Form1_MouseDown(object sender, MouseEventArgs e)
    {
    if (checkBox1.Checked == true)
    draw_line_cheker = true;

    }

    public void Form1_MouseUp(object sender, MouseEventArgs e)
    {
    draw_line_cheker = false;
    status = false;
    }



    private void eraseButton_Click(object sender, EventArgs e)
    {
    g.Clear(Color.White);
    }

    private void checkBox1_CheckedChanged(object sender, EventArgs e)
    {
    switch (checkBox1.Text)
    {
    case(" ON "):
    {
    checkBox1.Text = "OFF";
    checkBox1.ForeColor = Color.Red;
    break;
    }
    case("OFF"):
    {
    checkBox1.Text=" ON ";
    checkBox1.ForeColor = Color.Green;
    break;
    }


    }
    }


    }
    }


    آخرین ویرایش به وسیله mohamaddarbandi : جمعه 07 تیر 1387 در 11:00 صبح

  3. #3
    کاربر جدید آواتار mohamaddarbandi
    تاریخ عضویت
    اسفند 1386
    محل زندگی
    Iran/Shiraz
    پست
    27

    نقل قول: رسم نقاشی در چند فرم به صورت همزمان در سی شارپ

    یعنی کسی نمیتونه منو راهنمایی کنه؟
    بابا این که برا برنامه نویس های حرفه ای سایت نباید سوال سختی باشه!!!

  4. #4
    کاربر دائمی
    تاریخ عضویت
    اسفند 1384
    محل زندگی
    تهران
    پست
    1,629

    نقل قول: رسم نقاشی در چند فرم به صورت همزمان در سی شارپ

    با سلام
    من چند تا نكته رو مى‌گم شايد به دردت بخوره.
    1. اول اين كه تو هيچ Event Handlerى كد واقعى ننويس، كدهات رو توى رويه‌هاى ديگه بنويس و توى Event Hander اون رويه رو فراخوانى كن.
    2. از يك صف (Queue) استفاده كن. به اين صورت كه هر كارى كه خواستى انجام بدى شامل رسم يك نقطه، يك خط، يك منحنى يا غيره فرمان رو در يك صف قرار بده، اما فرمان رو انجام نده.
    3. بخشى ديگه از برنامه كه با يك Timer فعال مى‌شه بايد از صف فرمان رو برداره و رسم كنه. اين قسمت هم تو برنامه‌ى اصلى وجود داره و هم تو برنامه‌هاى ديگه.

    اين صف بايد شامل يك ساختارى باشه كه حتماً يك سريال داشته باشه به اين دليل كه هر كدام از Clientها بدونن از كدوم سريال به بعد رو بايد دريافت كرده و رسم كنن.

    حالا تنها كار باقى مونده اينه كه اين صف رو در شبكه Share كنى، راه‌هاى مختلفى وجود داره كه به‌ترينش اينه كه هر Client از طريق شبكه اطلاعات درخواست و دريافت كنه، راه راحت‌ترش هم استفاده از يك Database هست كه همگى بهش دسترسى دارن.

    صبا صبوحى

  5. #5
    کاربر جدید آواتار mohamaddarbandi
    تاریخ عضویت
    اسفند 1386
    محل زندگی
    Iran/Shiraz
    پست
    27

    Thumbs up نقل قول: رسم نقاشی در چند فرم به صورت همزمان در سی شارپ

    ممنون صبا جان.
    ولی قضیه خیلی ساده تر از این حرفها حل شد.

    این جواب سوال خودمه. می ذارم اینجا بقیه اگه نیاز پیدا کردند استفاده کنند:
    اول اینکه این نقاشی با x و y ماوس و تبدیل اونها به خطهای خیلی کوچک کشیده میشه.(همونطور که در کد بالا پیداست) بنابر این برای فرستادن اون کافیه x و y رو برای بقیه کلاینتها برادکست کنیم. و اونها با استفاده از thread و ابزار pen این x و y ها رو به نقاشی تبدیل کنند.
    اگر در این مورد نیاز به اطلاعات بیشتری داشتید پیام بذارید.

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •