سلام
یکی از کاربرا علاقه عجیبی داره که متنهایی که در memo نوشته می شه مثل Word بشه Justify کرد ( از چپ و راست منظم بشه ) :evil:
کسی پیشنهادی راه حلی کدی چیزی داره؟
ممنون :)
امید
سلام
یکی از کاربرا علاقه عجیبی داره که متنهایی که در memo نوشته می شه مثل Word بشه Justify کرد ( از چپ و راست منظم بشه ) :evil:
کسی پیشنهادی راه حلی کدی چیزی داره؟
ممنون :)
امید
اگه نظ منو میخوای و با شناختی از این کاربرای عزیز دارم فردا هم هوس میکنند فونت و اندازه متنو تغییر بدند چون حتما word رو دیدند :D
برای همین بیخیال memo شو و برو سراغ richedit
اگه هم میخوای بیشتر حال کنی برو سراغ twebbrowser و html
سلام
ممنون رضا جان.
من با richedit تا بحال کار نکردم . در خصوصیاتش هم چیزی مشابه justify کردن پیدا نکردم . همچین خاصیتی داره؟
با تشکر
توی مثال های همراه دلفی یک ویرایشگر ساده هست که یک دکمه هم روی toolbar ش برای این کار دارد
بله!
یک مثال خوب در دلفی هست که در مورد اون چیزایی که میخواهی
....\Borland\Delphi7\Demos\RichEdit
سلام
دوستان عزیز
مدتها به دنبال این کار بودم ولی با ابزار موجود این کار شدنی نیست. مثالی را هم که دوستان فرمودند فقط سه حالت دارد : راست چین و وسط چین و چپ چین.
نه memo و نه richedit چنین امکانی را ندارند. یا باید از یونیکد استفاده کنید و اطلاعات موجود را در پنجره کاملا مشخص با استفاده با فاصله و ... بصورت منظم تایپ کنید و به همان صورت نمایش بدهید و یا از twebbrowse استفاده کنید. این فقط در شرایطی متحقق میشود که اطلاعات ثابت باشد و ورودی توسط کاربر وجود نداشته باشد.
البته در نرم افزارهای موسسه تحقیقاتی کامپیوتری نور مانند نورالانوار2 این خاصیت در نمایش متون وجود دارد . که ظاهرا یک ویو درست کرده اند برای خودشان و با یونیکد مخصوص خودشان.
بنده که چیزی عمومی پیدا نکردم. :(
خوب من با RichEdit نتونستم این کار رو انجام بدم. در واقع از کد اون مثال چیزی سر در نیاوردم تا شاید بتونم به justify تغییرش بدم.
فکر کنم بهترین کار این باشه که یه تابع برای این کار بینویسیم.یعنی همون کاری که من الان مشغولش شدم.( فکر کنم تا یه ساعت دیگه تموم شه :wink: )
omid programmer 8-)
آقا امید
اگه موفق شدی ما را هم دریاب :wink:
ممنون آقا مهدی
بیشتر از چیزی که فکر می کردم طول کشید :oops:
الگوریتمش رو نوشتم.
تو اجراش یه سری مشکلات هست . یکی همین که باید کد تک تک کاراکتر ها رو داشته باشم و الی آخر . تو همین بخش نوشتم.
سر فرصت الگوریتم ش رو توی بخش الگوریتم می نویسم .
و برنامه که تمام شد کدش رو واست میل می کنم.
این کد مشکل رو حل نمیکنه ؟
Procedure SetRTL(Ctrl : TWinControl);
const WS_EX_LAYOUTRTL = $400000;
begin
SetWindowLong(Ctrl.Handle , -20, WS_EX_LAYOUTRTL);
end;
مثال :
SetRTL(RichEdit1);
ممنون فرهاد جان
این کد چپ چین می کنه.اگه همین کار از طرف راست هم مرتب کنه عالیه.
در واقع یا باید مثل ورد بین کلمات space گذاشت و یا از ـ استفاده کرد . مثل اینجـــــــــــــــــــــ وری
سلام
خوب این کار تموم شد و تقریبا تمام وقت امروزم رو گرفت. اما یه نکته جالب .( بخاطر همین نکته مسخره کار به نتیجه نرسید :| )
بعد از پیاده سازی الگوریتم متن های من باز هم منظم نمی شد و من دو ساعتی مشغول چک کردن کدها بودم تا نهایتا متوجه این نکته شدم
به این متن اصلاح شده توجه کنید:
این برنامه یک مثــال
ساده برای مرتب کـردن
متنهای نوشته شـده در
memo می باشــــــــد
برنامه به این صورت در نظر گرفته شد که در هر سطر فقط n کاراکتر موجود باشد . ولی همانطور که می بینید برای مثال ما هر سطر با اینکه 20 کاراکتر دارد ولی باز تراز نیست.
چون فاصله ای که (ا) اشغال می کند با فاصله (ب) یکی نیست :roll:
در واقع برای کلمات فارسی یا یونیکد باید طول رشته را بر اساس کاراکتر محاسبه نکرد.
کسی نظری یا طرحی در این مورد نداره؟
سلام
امید جان من یه چیزی به ذهنم رسید که شاید بتونه کمکت کنه. ببین اگر بخوایم طول دوتا جمله رو با هم برابر قرار بدیم بطوری که در ظاهر یکی دیده بشه اندازشون این اندازه به برابر بودن تعداد کاراکتر ها ربطی نداره. در حقیقت باید طول دو جمله از لحاظ تعداد پیکسل تشکیل دهنده یکی باشه.
Canvas.TextWidth('این برنامه یک مثــال')
Canvas.TextWidth('ساده برای مرتب کـردن')
Canvas.TextWidth('متنهای نوشته شـده در')
Canvas.TextWidth('memo می باشــــــــد')
در حقیقت فانکشن TextWith و همچنین TextHeight از کلاس Tcanvas طول و عرض جمله مورد درخواست رو (با توجه به فونت مورد استفاده در کانواس) بر حسب تعداد پیکسل برمیگردونند. برای این کار باید کاری بکنیم ک هر چهار خط نوشته شده بطور مثال یک عدد رو برگردونند.
ُسلام
دقیقا همون کاری که آقای syntaxcheck میگه بکن
از تابع canvas خیلی کارا میتونی بکنی
فقط نکته مهم اینه که حتما باید font جناب canvas رو به اون چیزی که میخواهی نشون بدی تبدیل کنی!! وگرنه canvas دقیق بهت نمیگه!! پس canvas.font := yourfont یادت نره
برای طول رشته هم از یک حلقه استفاده کن و به اندازه مورد نظر مقایسه کن!!(canvas,textwidth)
من این کار رو قبلا برای تراز کردن در متنهای htmlt 2.0 و richerdit و memo کردم و جواب گرفتم
برای کارکترهای english هم برای تراز از space استفاده کن :D
سلام
مطمئنا که همین طوره . در واقع من فکر می کردم دستوری نیست که بتونه تعداد پیکسل رو برگردونه .ممنون علی جان . عالیه :)امید جان من یه چیزی به ذهنم رسید که شاید بتونه کمکت کنه
ممنون رضا جان :)
سلام
امروز بالاخره عزم رو جزم و نشستم الگروریتم این بابا justify رو نوشتم. بر اساس تعداد کاراکتر و تعداد برابر پیکسل در هر سطر ( البته با اختلاف 0 تا 3 پیکسل در هر سطر که اجتناب ناپذیر بود )
اما این بابا مثل اینکه با ما بازیش گرفته
به ضمیمه توجه کنید توجه کنید:
تعداد پیکسل های هر سطر بین 197 تا 199 متغییر است . ولی اختلاف تراز سطرها بیشتر از 3 پیکسل نشون داده می شه . برای مثال سطر 4 و 5 دقیقا 197 پیکسل دارن ولی اصلا تراز نیستن :?:
من چیکار کنم :?: :roll:
من قبلا از فونتهای ipt استفاده میکردم. فکر کنم برای 1256 یه کمی متفاوت باشه . اگه دوست داری برنامتو برام email کن تا مشکلتو از نزدیک ببینم
بالاخره چی شد این کار امکان پذیر هست یا نه :?:
ما که نفهیدیم چی شده ولی اگه ربطی نداره بنویسین که حذفش کنم. برای اینکه طول متن رو بفهمیم. یه لیبل میسازیم که اوتوسایز باشه. بعد از او
Width میگیریم
ویزیبل اش رو هم فالس می کنیم!