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

نام تاپیک: Justify کردن متن در Memo

  1. #1

    Justify کردن متن در Memo

    سلام

    یکی از کاربرا علاقه عجیبی داره که متنهایی که در memo نوشته می شه مثل Word بشه Justify کرد ( از چپ و راست منظم بشه ) :evil:
    کسی پیشنهادی راه حلی کدی چیزی داره؟

    ممنون :)

    امید

  2. #2
    کاربر دائمی آواتار SReza1
    تاریخ عضویت
    تیر 1382
    محل زندگی
    کنار تعدادی تراریوم و کاکتوس!
    پست
    702
    اگه نظ منو میخوای و با شناختی از این کاربرای عزیز دارم فردا هم هوس میکنند فونت و اندازه متنو تغییر بدند چون حتما word رو دیدند :D
    برای همین بیخیال memo شو و برو سراغ richedit
    اگه هم میخوای بیشتر حال کنی برو سراغ twebbrowser و html

  3. #3
    سلام

    ممنون رضا جان.
    من با richedit تا بحال کار نکردم . در خصوصیاتش هم چیزی مشابه justify کردن پیدا نکردم . همچین خاصیتی داره؟

    با تشکر

  4. #4
    توی مثال های همراه دلفی یک ویرایشگر ساده هست که یک دکمه هم روی toolbar ش برای این کار دارد

  5. #5
    کاربر دائمی آواتار SReza1
    تاریخ عضویت
    تیر 1382
    محل زندگی
    کنار تعدادی تراریوم و کاکتوس!
    پست
    702
    بله!
    یک مثال خوب در دلفی هست که در مورد اون چیزایی که میخواهی
    ....\Borland\Delphi7\Demos\RichEdit

  6. #6

  7. #7
    کاربر دائمی
    تاریخ عضویت
    اسفند 1381
    محل زندگی
    Iran
    پست
    120
    سلام

    دوستان عزیز

    مدتها به دنبال این کار بودم ولی با ابزار موجود این کار شدنی نیست. مثالی را هم که دوستان فرمودند فقط سه حالت دارد : راست چین و وسط چین و چپ چین.
    نه memo و نه richedit چنین امکانی را ندارند. یا باید از یونیکد استفاده کنید و اطلاعات موجود را در پنجره کاملا مشخص با استفاده با فاصله و ... بصورت منظم تایپ کنید و به همان صورت نمایش بدهید و یا از twebbrowse استفاده کنید. این فقط در شرایطی متحقق میشود که اطلاعات ثابت باشد و ورودی توسط کاربر وجود نداشته باشد.
    البته در نرم افزارهای موسسه تحقیقاتی کامپیوتری نور مانند نورالانوار2 این خاصیت در نمایش متون وجود دارد . که ظاهرا یک ویو درست کرده اند برای خودشان و با یونیکد مخصوص خودشان.
    بنده که چیزی عمومی پیدا نکردم. :(

  8. #8
    خوب من با RichEdit نتونستم این کار رو انجام بدم. در واقع از کد اون مثال چیزی سر در نیاوردم تا شاید بتونم به justify تغییرش بدم.
    فکر کنم بهترین کار این باشه که یه تابع برای این کار بینویسیم.یعنی همون کاری که من الان مشغولش شدم.( فکر کنم تا یه ساعت دیگه تموم شه :wink: )
    omid programmer 8-)

  9. #9
    کاربر دائمی
    تاریخ عضویت
    اسفند 1381
    محل زندگی
    Iran
    پست
    120
    آقا امید
    اگه موفق شدی ما را هم دریاب :wink:

  10. #10
    ممنون آقا مهدی

    بیشتر از چیزی که فکر می کردم طول کشید :oops:
    الگوریتمش رو نوشتم.
    تو اجراش یه سری مشکلات هست . یکی همین که باید کد تک تک کاراکتر ها رو داشته باشم و الی آخر . تو همین بخش نوشتم.
    سر فرصت الگوریتم ش رو توی بخش الگوریتم می نویسم .
    و برنامه که تمام شد کدش رو واست میل می کنم.

  11. #11
    کاربر دائمی
    تاریخ عضویت
    بهمن 1381
    محل زندگی
    Iran - Tehran
    پست
    799
    این کد مشکل رو حل نمیکنه ؟


    Procedure SetRTL(Ctrl : TWinControl);
    const WS_EX_LAYOUTRTL = $400000;
    begin
    SetWindowLong(Ctrl.Handle , -20, WS_EX_LAYOUTRTL);
    end;


    مثال :

    SetRTL(RichEdit1);

  12. #12
    ممنون فرهاد جان
    این کد چپ چین می کنه.اگه همین کار از طرف راست هم مرتب کنه عالیه.
    در واقع یا باید مثل ورد بین کلمات space گذاشت و یا از ـ استفاده کرد . مثل اینجـــــــــــــــــــــ وری

  13. #13
    سلام

    خوب این کار تموم شد و تقریبا تمام وقت امروزم رو گرفت. اما یه نکته جالب .( بخاطر همین نکته مسخره کار به نتیجه نرسید :| )
    بعد از پیاده سازی الگوریتم متن های من باز هم منظم نمی شد و من دو ساعتی مشغول چک کردن کدها بودم تا نهایتا متوجه این نکته شدم
    به این متن اصلاح شده توجه کنید:

    این برنامه یک مثــال
    ساده برای مرتب کـردن
    متنهای نوشته شـده در
    memo می باشــــــــد

    برنامه به این صورت در نظر گرفته شد که در هر سطر فقط n کاراکتر موجود باشد . ولی همانطور که می بینید برای مثال ما هر سطر با اینکه 20 کاراکتر دارد ولی باز تراز نیست.
    چون فاصله ای که (ا) اشغال می کند با فاصله (ب) یکی نیست :roll:
    در واقع برای کلمات فارسی یا یونیکد باید طول رشته را بر اساس کاراکتر محاسبه نکرد.
    کسی نظری یا طرحی در این مورد نداره؟

  14. #14
    سلام
    امید جان من یه چیزی به ذهنم رسید که شاید بتونه کمکت کنه. ببین اگر بخوایم طول دوتا جمله رو با هم برابر قرار بدیم بطوری که در ظاهر یکی دیده بشه اندازشون این اندازه به برابر بودن تعداد کاراکتر ها ربطی نداره. در حقیقت باید طول دو جمله از لحاظ تعداد پیکسل تشکیل دهنده یکی باشه.

    Canvas.TextWidth('این برنامه یک مثــال')
    Canvas.TextWidth('ساده برای مرتب کـردن')
    Canvas.TextWidth('متنهای نوشته شـده در')
    Canvas.TextWidth('memo می باشــــــــد')

    در حقیقت فانکشن TextWith و همچنین TextHeight از کلاس Tcanvas طول و عرض جمله مورد درخواست رو (با توجه به فونت مورد استفاده در کانواس) بر حسب تعداد پیکسل برمیگردونند. برای این کار باید کاری بکنیم ک هر چهار خط نوشته شده بطور مثال یک عدد رو برگردونند.

  15. #15
    کاربر دائمی آواتار SReza1
    تاریخ عضویت
    تیر 1382
    محل زندگی
    کنار تعدادی تراریوم و کاکتوس!
    پست
    702

    جواب

    ُسلام
    دقیقا همون کاری که آقای syntaxcheck میگه بکن
    از تابع canvas خیلی کارا میتونی بکنی
    فقط نکته مهم اینه که حتما باید font جناب canvas رو به اون چیزی که میخواهی نشون بدی تبدیل کنی!! وگرنه canvas دقیق بهت نمیگه!! پس canvas.font := yourfont یادت نره
    برای طول رشته هم از یک حلقه استفاده کن و به اندازه مورد نظر مقایسه کن!!(canvas,textwidth)
    من این کار رو قبلا برای تراز کردن در متنهای htmlt 2.0 و richerdit و memo کردم و جواب گرفتم
    برای کارکترهای english هم برای تراز از space استفاده کن :D

  16. #16
    سلام
    امید جان من یه چیزی به ذهنم رسید که شاید بتونه کمکت کنه
    مطمئنا که همین طوره . در واقع من فکر می کردم دستوری نیست که بتونه تعداد پیکسل رو برگردونه .ممنون علی جان . عالیه :)
    ممنون رضا جان :)

  17. #17
    سلام
    امروز بالاخره عزم رو جزم و نشستم الگروریتم این بابا justify رو نوشتم. بر اساس تعداد کاراکتر و تعداد برابر پیکسل در هر سطر ( البته با اختلاف 0 تا 3 پیکسل در هر سطر که اجتناب ناپذیر بود )
    اما این بابا مثل اینکه با ما بازیش گرفته
    به ضمیمه توجه کنید توجه کنید:
    تعداد پیکسل های هر سطر بین 197 تا 199 متغییر است . ولی اختلاف تراز سطرها بیشتر از 3 پیکسل نشون داده می شه . برای مثال سطر 4 و 5 دقیقا 197 پیکسل دارن ولی اصلا تراز نیستن :?:
    من چیکار کنم :?: :roll:

  18. #18
    کاربر دائمی آواتار SReza1
    تاریخ عضویت
    تیر 1382
    محل زندگی
    کنار تعدادی تراریوم و کاکتوس!
    پست
    702
    من قبلا از فونتهای ipt استفاده میکردم. فکر کنم برای 1256 یه کمی متفاوت باشه . اگه دوست داری برنامتو برام email کن تا مشکلتو از نزدیک ببینم

  19. #19
    بالاخره چی شد این کار امکان پذیر هست یا نه :?:

  20. #20
    کاربر دائمی
    تاریخ عضویت
    شهریور 1383
    محل زندگی
    Tehran
    پست
    146
    ما که نفهیدیم چی شده ولی اگه ربطی نداره بنویسین که حذفش کنم. برای اینکه طول متن رو بفهمیم. یه لیبل میسازیم که اوتوسایز باشه. بعد از او
    Width میگیریم
    ویزیبل اش رو هم فالس می کنیم!

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

  1. آیا مشکل Justify در کریستال ریپورت هم هست
    نوشته شده توسط nasr در بخش گزارش سازی با Crystal Report
    پاسخ: 1
    آخرین پست: یک شنبه 04 دی 1390, 18:42 عصر
  2. چگونه یک فیلد حاوی متن را justify کنیم؟
    نوشته شده توسط vahid_3717 در بخش Access
    پاسخ: 0
    آخرین پست: چهارشنبه 27 اردیبهشت 1385, 12:08 عصر
  3. چاپ متن به صورت justify, فوری
    نوشته شده توسط parvin65 در بخش برنامه نویسی با زبان C و ++C
    پاسخ: 2
    آخرین پست: یک شنبه 24 اردیبهشت 1385, 20:16 عصر
  4. justify
    نوشته شده توسط سهراب رسولی در بخش ASP.NET Web Forms
    پاسخ: 2
    آخرین پست: سه شنبه 22 شهریور 1384, 12:22 عصر
  5. مشکل در Justify کردن متن فارسی از چپ و راست در چاپ
    نوشته شده توسط ma_mohsen در بخش برنامه نویسی در Delphi
    پاسخ: 4
    آخرین پست: شنبه 27 فروردین 1384, 23:46 عصر

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

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