PDA

View Full Version : سوال: در خواست کامپوننت تکست باکس پیشرفته



alireza661
چهارشنبه 30 فروردین 1391, 19:54 عصر
سلام دوستان !
کامپوننت تکست باکسی وجود دارد که بشه با کد نویسی فونت و رنگ هر تیکه از متن درونش رو تعیین کرد؟
مثلا میخوام بگم که دو کلمه ی "ایران" و "سرزمین" در تکس باکس به گونه ای نمایش داده بشه که کلمه ایران رنگ آبی و فونت بولد داشته باشه اما کلمه ی سرزمین فونت ریگولار و رنگ قرمز داشته باشه
لطفا rich textbox رو پیشنهاد ندید چون از right to left پشتیبانی نمیکنه
ممنون

ASedJavad
چهارشنبه 30 فروردین 1391, 22:45 عصر
سلامبهترین گزینه richTextBox هست
اتفاقا از right to Left هم تا حدود زیادی پشتیبانی میکنه.
یه جستجو بکنید درباره رایت تو لفت در ریچ تکست باکس زیاد بحث شده

alireza661
چهارشنبه 30 فروردین 1391, 23:13 عصر
با چه کدی میتونم تعیین کنم که یک تیکه از متن رنگ و یا قلمش چی باشه؟

ASedJavad
چهارشنبه 30 فروردین 1391, 23:41 عصر
اول باید متنتو انتخاب کنی(با تعیین خصوصیات selstart و sellength)
بعد خصوصیاتی مثل selcolor، selbold، selfontsizeو ... رو ست کن:
این هم یه مثال:
Private Sub Command1_Click()
With RichTextBox1
.SelStart = 0
.SelLength = 6
.SelColor = vbGreen
.SelBold = True
.SelStart = 7
.SelLength = 6
.SelFontSize = 17
.SelStart = 14
.SelLength = 5
.SelColor = vbRed
.SelLength = 0
End With
End Sub


Private Sub Form_Load()
With RichTextBox1
.Text = "ÌãåæÑí ÇÓáÇãí ÇíÑÇä"
.TextRTF = Replace(.TextRTF, "\fcharset0", "\fcharset178")
.TextRTF = Replace(.TextRTF, "\ltrch", "\rtlch")
.TextRTF = Replace(.TextRTF, "ltrpar", "rtlpar")
.Refresh
.SelStart = 0
.SelLength = Len(.Text)
.SelAlignment = vbRightJustify
End With
End Sub

alireza661
پنج شنبه 31 فروردین 1391, 13:43 عصر
مرسی
همه مشکلات حل شد به جز یکی
اونم اینکه میخوام آیتم هایی که در ریچ تکست باکس نمایش داده میشن یکی در میون رنگشون فرق کنه
مثلا اولی سبز - دومی قرمز - سومی سبز - چهارمی قرمز - پنجمی سبز - ششمی قرمز و...
الان من برناممو ضمیمه کردم هدفم توش این بود که رنگ آیتم ها یکی در میون متفاوت باشه
به نظرم کدی که نوشتم هیچ ایرادی نداره و خیلی بررسیش کردم اما نمیدونم چرا درست جواب نمیده

دریافت (http://www.uploadkon.ir/uploads/49e4da4cbbac2b06a754f50c084db700.zip)

میشه لطف کنید دانلودش کنید و ببینید مشکلش از چیه؟
تشکر

ASedJavad
پنج شنبه 31 فروردین 1391, 14:10 عصر
سلام
مشکل شما اینه که هر بار میای مقدار t1.text رو ست میکنی
هر بار که شما به t1.text مقدار میدی، فرمت متن درونش پاک میشه.
یعنی این کار دقیقا مثل اینه که کل متنش رو پاک کنی و دوباره یه متن جدید بدون فرمت بریزی توش.
برای حل این مشکل چند تا راه داری
اولین راه که از همه بهتره ولی از همه هم سخت تره و نیازمند آشنایی با ساختار فایل های rtf هست اینه که هر سری بیای مقدار richTextBox.TextRTF رو تغییر بدی.
راه دیگش که چندان راه جالبی نیست اینه که بیای تو یه ریچ تکست باکس دیگه متن جدیدت رو (که قراره اضافه بشه به متن قبلی) بنویسی و بهش فرمت بدی و بعد به ریچ باکس دومی یه کنترل سی بفرستی و بعد به ریچ تکست اولی یه کنترل وی.
اما راه سوم که هم آسونه و هم راه قابل قبولیه (البته بسته به نیازتون ممکنه کارکرد خیلی خوبی نداشته باشه) اینه که کل متن رو اول بنویسید بعد شروع کنید به فرمت دهیش.

alireza661
پنج شنبه 31 فروردین 1391, 15:11 عصر
خب راه سوم که رده چون قرار نیست چیزی دستی تایپ بشه
راه دومی رو میشه بیشتر توضیح بدید (مثلا با همون پروژه ای که من دادم این کارو بکنید و برام بذارید ببینم چجوریه)
راه اولم که بلد نیستم
هیچ راهی وجود نداره که هر دفعه مقدار t1.text رو ست نکنم؟

ASedJavad
پنج شنبه 31 فروردین 1391, 15:17 عصر
به نظرم از راه سوم استفاده کنید خیلی بهتره ربطی به اینکه دستی تایپ کنید یا نه هم نداره.شما اول متنتون رو کامل وارد تکست باکس کنید و در آخر فرمت دهی کنید بهش.
مثل همون مثالی که من گذاشتم براتون تو پست سوم

ASedJavad
پنج شنبه 31 فروردین 1391, 15:36 عصر
مثلا میتونید کدی رو که گذاشتید این جوری تغییرش بدید(هر چند راه جالبی نیست ولی هم آسونه هم کار راه اندازه)
Private Sub Command1_Click()
tex = "salam"
bad = "khoub"
Dim a(1 To 6, 1 To 4) As Long
With t1
For i = 1 To 6
.Text = .Text & vbNewLine
.Text = .Text & tex
a(i, 1) = Len(.Text) - Len(tex)
a(i, 2) = Len(tex)
.Text = .Text & vbNewLine
.Text = .Text & bad
a(i, 3) = Len(.Text) - Len(bad)
a(i, 4) = Len(bad)
Next
For i = 1 To 6
.SelStart = a(i, 1)
.SelLength = a(i, 2)
.SelColor = vbGreen
.SelBold = True
.SelStart = a(i, 3)
.SelLength = a(i, 4)
.SelColor = vbRed
.SelBold = False
Next
End With
End Sub

alireza661
پنج شنبه 31 فروردین 1391, 16:42 عصر
مرسی ولی با کد بالا هم همون مشکل ایجاد میشه
داستان از این قراره که آیتم ها در برنامه ی من در حلقه اضافه نمیشن بلکه کد بالای شما در یک پروسیجر قرار میگیره و از پروسیجر دیگری که حلقه داره صدا زده میشه و متغیرهای tex و bad به شکل سراسری تعریف شده اند
در پروسیجر اولی ابتدا متغیرهای tex و bad مقدار میگیرند و سپس پروسیجر دومی (که کد بالا باشه) صدا زده میشه تا مقدارها در ریچ تکست باکس قرار بگیرند
با این توضیح و تستی که من کردم کدتون رو بازم جواب نداد متاسفانه

alireza661
پنج شنبه 31 فروردین 1391, 19:45 عصر
الان بنده با یک مثال بهتون نشون میدم
پروژه زیر رو دریافت کنید

دریافت (http://uplod.ir/zr61qayfjair/text2.zip.htm)

مشاهده میکنید که کدتون در این حالت جوابگو نیست
ممنون میشم اگر راهنمایی بفرمایید
تشکر

ASedJavad
پنج شنبه 31 فروردین 1391, 22:57 عصر
من تو پست 8 براتون توضیح دادم که شما اول کامل متنتون رو (بدون فرمت) بریزید تو ریچ تکست بعد وقتی کار تموم شد، شروع کنید به فرمت دادن به متنتون.سعی کنید همین یه جمله رو کامل متوجه بشید. بقیش حله.


حالا باز هم اگه متوجه نشدید بگید تا توضیح بدم براتون


در ضمن فایلایی رو که میذارید، سعی کنید تو سرور خود سایت برنامه نویس بذارید. برای دیدن ابزار ضمیمه کردن فایل لازمه برید تو قسمت "حالت پیشرفته" (دکمه ای که پایین باکس نوشتن پاسخ فوری هست.)

alireza661
پنج شنبه 31 فروردین 1391, 23:37 عصر
آیا راهی وجود دارد که نوار پیمایش (اسکرول) را از سمت راست ریچ تکست باکس به سمت چپ منتقل کنم؟

ASedJavad
پنج شنبه 31 فروردین 1391, 23:46 عصر
نه

اگه در مورد ریچ تکست باکس سوالی داری، اول تو تاپیکهایی که من در مورد ریچ تکست باکس ایجاد کردم، یه سرچی بکن. تقریبا اکثر سوالای ممکنه رو پرسیدم و تقریبا 90 درصد جوابا منفی بودن:لبخند:

alireza661
جمعه 01 اردیبهشت 1391, 23:00 عصر
آقا یه مشکل عجیب به وجود آمده
اونم اینکه
برنامه بعد از کامپایل مثل موقع سورس کار نمیکنه
یعنی در ریچ تکست باکس مشکل به وجود میاد
اینطور که متن از سمت راست ریچ تکست باکس فاصله میگیره و کل متن داخلش به حالت انتخاب در میاد ( بیخودی درگ میشه )
و بعضی از پرانتزها که موقع سورس ( اجرای پروژه از داخل خود وی بی ) سمت راست ریچ تکست باکس هستند میرن به آخر خط بعد از کامپایل
اصلا نمیدونم مشکل از کجاست
میشه راهنمایی بفرمایید
تشکر

ASedJavad
شنبه 02 اردیبهشت 1391, 00:49 صبح
میتونی سورسشو بذاری؟

alireza661
دوشنبه 04 اردیبهشت 1391, 17:17 عصر
اون مشکل که هیچ برطرف شد
ولی الان مشکل جدیدی دارم
من دوتا فرم دارم که ریچ تکست باکس در فرم 1 قرار داره
و وقتی که درون ریچ تکست باکس یک متن وجود داره ( با رنگبندی) اگر روی کلیدی که فرم 2 رو از نوع مدال نمایش میده کلیک کنم و موقعی که فرم 2 unload میشه دیگه ریچ تکست باکس فرم1 رنگبندی خودشو از دست میده و همش سیاه میشه
نمیشه این مشکل رو برطرف کرد؟

سید حمید حق پرست
دوشنبه 04 اردیبهشت 1391, 18:34 عصر
سلام
خب دوست عزیز در unload فرم 2 متن ریچ تکس باکس رو دوباره رنگبندی کن

موفق باشید


یا علی (ع)

ASedJavad
دوشنبه 04 اردیبهشت 1391, 20:52 عصر
مشکل از جای دیگه است.احتمالا شما انتساب متن به ریچ تکست باکستون رو تو سابروتین Form_Activate نوشتین
و از اونجایی که بعد از بستن فرم2 دوباره این روال فراخونی میشه، متنتون فرمتشو از دست میده!
شاید هم مشکل چیز دیگه ای باشه.
در هر صورت شما کدتون رو با f8 خط به خط اجرا کنید ببینید بعد از بسته شدن (یا حتی باز شدن) فرم 2، کجا به ریچ تکستون متن میدین