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

نام تاپیک: رسم پیوسته خط

  1. #1
    منتظر تایید آدرس ایمیل
    تاریخ عضویت
    آذر 1390
    پست
    560

    رسم پیوسته خط

    سلام،


    procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
    Y: Integer);
    begin
    if not MouseIsDown then
    exit;
    Form1.Canvas.Pixels[x,y]:=clRed;
    end;


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

  2. #2

    نقل قول: رسم پیوسته خط

    یاد 6 سال پیش که تازه کار با دلفی رو شروع کرده بودم افتادم ، یادمه 1 ساعت با کدها کلنجار رفتم تا بتونم این مورد رو برای برنامه Paint خودم پیاده کنم ( اون موقع میونه خوبی با گوگل نداشتم ) :

      Canvas.LineTo(X, Y);
    Canvas.MoveTo(X, Y);

  3. #3
    منتظر تایید آدرس ایمیل
    تاریخ عضویت
    آذر 1390
    پست
    560

    نقل قول: رسم پیوسته خط

    نقل قول نوشته شده توسط Mahan-1363 مشاهده تاپیک
    یاد 6 سال پیش که تازه کار با دلفی رو شروع کرده بودم افتادم ، یادمه 1 ساعت با کدها کلنجار رفتم تا بتونم این مورد رو برای برنامه Paint خودم پیاده کنم ( اون موقع میونه خوبی با گوگل نداشتم ) :

      Canvas.LineTo(X, Y);
    Canvas.MoveTo(X, Y);
    اینی که شما دادید مشکل مذکور رو نداره ولی با اولین کلیک یک خط از ابتدای صفحه تا جایی که کلیک شده رسم میکنه،و وقتیم که جاهای این دو تا متدی رو که دادید عوض میکنم این مشکل نیست ولی خط هام باز حالت ناپیوسته پیدا می کنن.لطفا راهنمایی کنید
    با تشکر
    آخرین ویرایش به وسیله بهروز عباسی : سه شنبه 29 مرداد 1392 در 14:25 عصر

  4. #4

    نقل قول: رسم پیوسته خط

    خوب وقتی کلیک موس فشار داده شد ( رویداد OnMouseDown ) مکان Cursor رو به محل فعلی که کلیک کردید منتقل کن تا رسم از اونجا شروع بشه ، مکان Cursor به صورت پیش فرض 0,0 هست :

    procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
    Shift: TShiftState; X, Y: Integer);
    begin
    if Button = mbLeft then
    begin
    IsMouseDown:= True;
    Canvas.MoveTo(X, Y);
    end;
    end;

    procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
    Y: Integer);
    begin
    if IsMouseDown then
    begin
    Canvas.LineTo(X, Y);
    Canvas.MoveTo(X, Y);
    end;
    end;

    procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
    Shift: TShiftState; X, Y: Integer);
    begin
    if Button = mbLeft then
    IsMouseDown:= False;
    end;

  5. #5
    کاربر دائمی آواتار Ananas
    تاریخ عضویت
    آبان 1390
    محل زندگی
    طول 50 و عرض 34 درجه
    سن
    36
    پست
    894

    نقل قول: رسم پیوسته خط


    procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
    Y: Integer);
    begin
    if IsMouseDown then
    begin
    Canvas.LineTo(X, Y);
    Canvas.MoveTo(X, Y);
    end;
    end;

    ممنون مجتبی جون. البته دستور MoveTo بعد از دستور LineTo لزومی نداره یعنی LineTo خودش این کارو میکنه و بعد از رسم خط مکان رو به نقطه جدید انتقال میده.
    البته می تونید بدون استفاده از OnMouseDown و OnMouseUp و همچنین پارامتر MouseIsDown فقط تو رویداد OnMouseMove کد زیر رو بنویسید :

    procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
    begin
    if ssLeft in Shift then
    Canvas.LineTo(X, Y)
    else
    Canvas.MoveTo(X, Y);
    end;

  6. #6
    کاربر دائمی آواتار mbshareat
    تاریخ عضویت
    آبان 1387
    محل زندگی
    شهر مقدس قم-چهارمردان-کوچه 37
    پست
    963

    نقل قول: رسم پیوسته خط

    سلام و درود
    اگه این کد رو هم اضافه کنین دیگه چیزی لازم نیست:

    procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
    Shift: TShiftState; X, Y: Integer);
    begin
    if Button = mbLeft then
    Canvas.MoveTo(X, Y);
    end;
    من خیلی با این کارها وقتمو تلف کردم(ترسیم خط و غیره با ماوس).به نظرم جز یادگیری برنامه نویسی دلیلی نداره آدم ترسیم برداری رو خودش انجام بده.
    وقتی فلش هست چرا چیز ساده طراحی کنیم؟ چنین کدی (استفاده از متغیر بولی) توی طراحی کامپوننت کاربرد داره.

  7. #7
    کاربر دائمی آواتار Ananas
    تاریخ عضویت
    آبان 1390
    محل زندگی
    طول 50 و عرض 34 درجه
    سن
    36
    پست
    894

    نقل قول: رسم پیوسته خط

    من خیلی با این کارها وقتمو تلف کردم(ترسیم خط و غیره با ماوس).به نظرم جز یادگیری برنامه نویسی دلیلی نداره آدم ترسیم برداری رو خودش انجام بده.
    وقتی فلش هست چرا چیز ساده طراحی کنیم؟ چنین کدی (استفاده از متغیر بولی) توی طراحی کامپوننت کاربرد داره.
    وقت تلف نکردی، تجربه کسب کردی. اینا یجور تمرینه برای تسلط به ابزارهایی که در اختیار داریم. من با Direct3D هم که کار میکنم نیاز دارم که کاربر با حرکت دادن موس و فشردن دکمه هاش بتونه با برنامه و از دید دوربین سه بعدی ارتباط برقرار کنه. مثلا برای ترسیم یک باکس در صحنه ی سه بعدی و یا Move کردن اشیا و یا شلیک در بازی میشه از همین توابع موس استفاده کرد. و مثلا نوشتن نرم افزارهایی که Paint3D دارند و از دید دوربین سه بعدی روی اشیای سه بعدی نقاشی میکشن نیازمند داشتن درک خوب از روش کار با موس هست که با همین تمرین میشه فهمید هنگام کلیک و درگ کردن روی فرم چه اتفاقی داره از دید برنامه نویسی می افته.

  8. #8
    کاربر دائمی آواتار mbshareat
    تاریخ عضویت
    آبان 1387
    محل زندگی
    شهر مقدس قم-چهارمردان-کوچه 37
    پست
    963

    نقل قول: رسم پیوسته خط

    ممنونم. البته هر کاری تو محیط برنامه نویسی بکنیم حد اقلش باعث میشه ترسمون بریزه اما بعضی کارها استفاده محدودی داره و امکانات آماده ای وجود داره و نیاز به کد نیست.
    من هم خوندم که با 3D Studio Max میشه بازی ساخت ولی به نظرم برنامه نویسها معمولا سراغ گرافیک نمیرن. فوقش یه اسکین گیر میارن و ... .
    در هر صورت حرفهاتون که از سطح درکم بالاتر بود من فوقش بتونم چندتا کره و کپسول و غیره تو محیط سه بعدی طراحی کنم!!!

  9. #9
    کاربر دائمی آواتار MohsenB
    تاریخ عضویت
    اردیبهشت 1387
    محل زندگی
    ایرانم
    پست
    601

    نقل قول: رسم پیوسته خط

    سلام

    ساده ترین کدی که می تونید قرار بدید شاید این باشه :

    procedure TForm1.img1MouseMove(Sender: TObject; Shift: TShiftState; X,
    Y: Integer);
    begin
    with (Sender as TImage) do begin
    if Shift = [ssLeft] then
    Canvas.LineTo(X, Y);
    Canvas.MoveTo(X, Y);
    end;
    end;


    و اگه یکم هم بخواین بهش آب و تاب بدید اینم میشه :

    procedure TForm1.img1MouseDown(Sender: TObject; Button: TMouseButton;
    Shift: TShiftState; X, Y: Integer);
    begin
    (Sender as TImage).Canvas.MoveTo(X, Y);
    end;


    procedure TForm1.img1MouseUp(Sender: TObject; Button: TMouseButton;
    Shift: TShiftState; X, Y: Integer);
    begin
    (Sender as TImage).Canvas.LineTo(X, Y);
    end;



    موفق باشید

  10. #10
    کاربر دائمی آواتار mbshareat
    تاریخ عضویت
    آبان 1387
    محل زندگی
    شهر مقدس قم-چهارمردان-کوچه 37
    پست
    963

    نقل قول: رسم پیوسته خط

    سلام جناب MohsenB
    کد دوم کار کد اول رو نمی کنه. یعنی با حرکت ماوس ترسیمی انچام نمیشه. ظاهرا اونچیزی که خواسته شده شبیه سازی ابزار مداده نه خط!

  11. #11
    کاربر دائمی آواتار MohsenB
    تاریخ عضویت
    اردیبهشت 1387
    محل زندگی
    ایرانم
    پست
    601

    نقل قول: رسم پیوسته خط

    نقل قول نوشته شده توسط mbshareat مشاهده تاپیک
    سلام جناب MohsenB
    کد دوم کار کد اول رو نمی کنه. یعنی با حرکت ماوس ترسیمی انچام نمیشه. ظاهرا اونچیزی که خواسته شده شبیه سازی ابزار مداده نه خط!
    سلام

    آره راست میگین تو یه فروم خارجی که همچین کارایی میخواستن چند وقت پیش اینا رو جواب داده بودم ، مستقیم کپیشون کردم اینجا . حالا بالاخره تغریبا دوتاش تو یه مبحثن .

    همون طور که گفتن کد اول برای ترسیم با مداد آزاد و کد دوم برای ترسیم خط مستقیم میتونه استفاده بشه .


    موفق و پیروز باشید

  12. #12
    کاربر دائمی آواتار Ananas
    تاریخ عضویت
    آبان 1390
    محل زندگی
    طول 50 و عرض 34 درجه
    سن
    36
    پست
    894

    نقل قول: رسم پیوسته خط

    محسن جون داداش خوب کد منم که همین بود االبته ساده تر.
    من هم خوندم که با 3D Studio Max میشه بازی ساخت ولی به نظرم برنامه نویسها معمولا سراغ گرافیک نمیرن. فوقش یه اسکین گیر میارن و ... .
    در هر صورت حرفهاتون که از سطح درکم بالاتر بود من فوقش بتونم چندتا کره و کپسول و غیره تو محیط سه بعدی طراحی کنم!!!
    خواهش میکنم... البته منظورم برنامه نویس هایی بود که برنامه ای مثل Z-Brush و یا خود مکس میسازن بود که برای برنامشون نیاز به استفاده از حرکت موس و رویدادهاش دارن. ساده ترین مثال میتونه چرخش دوربین توسط موس تو بازی های جنگی باشه.

  13. #13

    نقل قول: رسم پیوسته خط

    با سلام به دوستان
    چرا وقتی با این کد کار میکنید اگر فرم یک بار پایین ببریم تا دیده نشه(پایین تر از تسکبار) و بالا بیارم همش پاک میشه؟
    آقای Mahan-1363 برای برنامه paint تتون كه گفتيد اين مشكل رو چطوری حل كرديد؟
    ميشه راهنمایی كنيد
    ممنون
    آخرین ویرایش به وسیله بهروز عباسی : سه شنبه 29 مرداد 1392 در 14:25 عصر

  14. #14

    نقل قول: رسم پیوسته خط

    باید عملیات ترسیم رو روی یک شیئ TImage انجام بدید :

      Image1.Canvas.LineTo(X, Y);

تاپیک های مشابه

  1. رسم نمودار توابع درجه 3
    نوشته شده توسط armita در بخش برنامه نویسی با زبان C و ++C
    پاسخ: 2
    آخرین پست: دوشنبه 04 خرداد 1388, 10:32 صبح
  2. رسم نمودار
    نوشته شده توسط mehrzad007 در بخش برنامه نویسی در 6 VB
    پاسخ: 10
    آخرین پست: دوشنبه 21 اسفند 1385, 16:08 عصر
  3. رسم Box بر روی ریپورت
    نوشته شده توسط sh در بخش گزارش سازی با Crystal Report
    پاسخ: 3
    آخرین پست: پنج شنبه 04 دی 1382, 03:02 صبح
  4. رسم نمودن جدول بروی فرم
    نوشته شده توسط Gladiator در بخش مباحث عمومی دلفی و پاسکال
    پاسخ: 1
    آخرین پست: پنج شنبه 28 فروردین 1382, 21:27 عصر

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

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