PDA

View Full Version : مبتدی: تغییر دادن رنگ کاراکتر ها



mr-adler
دوشنبه 18 مهر 1390, 22:14 عصر
عرض ادب و سلام
این سوال یکی از سوالات مسابقه بیان هست . گفتیم خودمونو امتحان کنیم دوتا از نمونه سوالاتشو حل کنیم:لبخند::لبخند:

حرف نقره‌ای در یک کلمه، حرفی است که فاصله آن از دو طرف رشته مساوی باشد. مثلا در کلمه ALI ‎، حرف ‎L‎ حرف نقره ای است، چون فاصله آن از دو طرف http://barnamenevis.org/image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAhBAMAAAD NOV1kAAAAKlBMVEX///9AQECwsLCgoKBQUFBwcHAQEBCAgIDAwMAwMDDg4ODw8PCQkJAA AAARL+bwAAAAAXRSTlMAQObYZgAAAEVJREFUGBljYAACng0gEg i45jaAaQausrtg1orSuXchrNprzrpQMQaGXggLqHaksc7ePQAK oeXlgXfvXgwvXwAMAAhoAAAKVkpBc3lYdQAAAABJRU5ErkJggg == ‎ است. ولی کلمه ‎SARA ‎ حرف نقره ای ندارد، چون حرفی را نمی توان پیدا کرد که فاصله آن از دو طرف برابر باشد‎
به شما یک رشته داده شده ، شما باید ابتدا تعداد حرف های آن رشته را به دست بیاورید و چاپ کنید. در صورتی که این رشته دارای حرف نقره ای است باید آن را چاپ کنید و در غیر این صورت باید به ترتیب دو حرف کنار همی را چاپ کنید که اگر هر کدام از آن ها را از رشته حذف کنیم حرف دیگر حرف نقره ای شود.
یکی از سوالاتش اینطور گفته بود . من برنامه زیر رو نوشتم اما نمیدونم چطوری باید رنگ هر کاراکتر داخل تکست باکس رو عوض کرد. ممنون میشم راهنماییم کنید:لبخندساده:

76457

محسن واژدی
دوشنبه 18 مهر 1390, 23:01 عصر
سلام علیکم
داخل textbox نمیتوانیم اما در richtext-box امکان قرار دادن رنگ جداگانه برای هرکاراکتر وجود دارد

موفق باشید

mr-adler
دوشنبه 18 مهر 1390, 23:15 عصر
بسیار ممنونم. :قلب:
ریچ تکست باکس رو چطوری لود کنم و چطوری رنگ هر کاراکتر رو عوض کنم؟
(مگه ریچ تکست باکس برای دات نت نیست؟:متفکر:)

راستی یه سوال دیگه هم داشتم میشه رنگ کل کاراکتر های تکست باکس رو عوض کرد؟

محسن واژدی
دوشنبه 18 مهر 1390, 23:47 عصر
ریچ تکست باکس رو چطوری لود کنم

داخل فرم components کنترل "Microsoft Rich Textbox Control" انتخاب کنید



چطوری رنگ هر کاراکتر رو عوض کنم؟

نمونه کد زیر را بررسی کنین، قبلش یک RichTextBox با نام RichTextBox1 و یک CommandButton با نام Command1 رو فرم قرار بدین:

Private Sub Command1_Click()
Dim r&, g&, b&
RichTextBox1.Text = "Red Green Blue"
r& = RichTextBox1.Find("Red", , , rtfNoHighlight)
g& = RichTextBox1.Find("Green", , , rtfNoHighlight)
b& = RichTextBox1.Find("Blue", , , rtfNoHighlight)


RichTextBox1.SelStart = r&
RichTextBox1.SelLength = 3
RichTextBox1.SelBold = True
RichTextBox1.SelColor = RGB(255, 0, 0)


RichTextBox1.SelStart = g&
RichTextBox1.SelLength = 5
RichTextBox1.SelColor = RGB(0, 255, 0)

RichTextBox1.SelStart = b&
RichTextBox1.SelLength = 4
RichTextBox1.SelBold = True
RichTextBox1.SelColor = RGB(0, 0, 255)

End Sub





(مگه ریچ تکست باکس برای دات نت نیست؟:متفکر:)

نه، در وی بی 6 هم استفاده دارد



میشه رنگ کل کاراکتر های تکست باکس رو عوض کرد؟

بله، توسط متد ForeColor

Private Sub Text1_Change()
Text1.ForeColor = RGB(255, 0, 0)
End Sub


موفق باشید

mr-adler
چهارشنبه 20 مهر 1390, 22:29 عصر
کد ها رو تقریبا متوجه شدم یک سوال دارم:

r& = RichTextBox1.Find("Red", , , rtfNoHighlight)
rtfNoHighlight چیکار میکنه ؟(میگه که این رشته پیدا شده رو "های لایت" نکن)؟یعنی چی؟

یه مورد دیگه هم هست:
ایا فقط برای عضو کردن رنگ هر کاراکتر همین راه وجود داره؟یعنی اول باید اون کاراکتر رو "های لایت" کنیم و سپس به وسیله متد selcolor رنگ اونو عوض کنیم. ایا راه دیگری هم هست؟

محسن واژدی
پنج شنبه 21 مهر 1390, 17:49 عصر
rtfNoHighlight چیکار میکنه ؟(میگه که این رشته پیدا شده رو "های لایت" نکن)؟یعنی چی؟

سلام علیکم
این ثابت مانع از انتخاب شدن مورد یافت شده خواهد شد (بصورت پیش فرض rtextbox مورد یافت شده را انتخاب میکند)، در این مورد که تنها خواستار تغییر رنگ متن مورد نظر هستیم، نیازی به انتخاب شدن متن یافت شده نیستیم



ایا فقط برای عضو کردن رنگ هر کاراکتر همین راه وجود داره؟یعنی اول باید اون کاراکتر رو "های لایت" کنیم و سپس به وسیله متد selcolor رنگ اونو عوض کنیم. ایا راه دیگری هم هست؟

طبیعتا" برای تغییر رنگ و سایر خصوصیات یک متن ابتدا باید آنرا انتخاب کنیم، البته اجباری نیست که حتما متن انتخاب شده معلوم باشد، برای نمونه در دستور زیر بدون آنکه نیازی به فوکوس کردن rtextbox باشد، خاصیت bold یک متن فعال/غیرفعال میشود

Private Sub Command1_Click()
RichTextBox1.SelStart = 2
RichTextBox1.SelLength = 3
RichTextBox1.SelBold = Not RichTextBox1.SelBold
End Sub


موفق باشید

MohammadGh2011
پنج شنبه 12 آبان 1390, 21:35 عصر
سلام عليکم
دوستان من چيکار کنم وقتي که داخل RichTextBox1 مثلا نوشتم 1 فقط اون رنگش قرمز بشه؟
من از کد زير استفاده ميکنم اما وقتي من داخل RichTextBox1 عدد 1 رو مينوسم و روي 1 با موس ميکشم اون موقع قرمز ميکنه.
If RichTextBox1.SelText = "1" Then
RichTextBox1.SelColor = vbRed
End If

چه کدي بايد بنويسم که وقتي مثلا نوشتم"123651665656554111184" اعداد 1 قرمز بشن بدون هيچ کاري؟

MohammadGh2011
پنج شنبه 12 آبان 1390, 23:30 عصر
يه سوال ديگه:
چرا RichTextBox1
forecolor ندارد؟

چگونه ميتونم رنگ تمام متن RichTextBox1 رو تغيير بدم؟
:متفکر:

M.T.P
پنج شنبه 12 آبان 1390, 23:38 عصر
چگونه ميتونم رنگ تمام متن RichTextBox1 رو تغيير بدم؟

RichTextBox1.SelLength = Len(RichTextBox1.Text)
RichTextBox1.SelColor = vbGreen

محسن واژدی
پنج شنبه 12 آبان 1390, 23:47 عصر
سلام علیکم کد زیر را بررسی کنید:

Private Sub Command1_Click()
With RichTextBox1
.Tag = .SelStart
.SelStart = 0
.SelLength = Len(.Text)
.SelColor = vbRed
.SelStart = .Tag
End With
End Sub


موفق باشید

----

ببخشید کد جناب MTP را ندیده بودم

MohammadGh2011
پنج شنبه 12 آبان 1390, 23:47 عصر
سلام جناب آقاي M.T.P
ممنونم
لطفا پست 7 رو هم جواب بديد.

mr-adler
پنج شنبه 12 آبان 1390, 23:57 عصر
سلام
با کسب اجازه از اساتید محترم اقای واژدی و اقای M.T.P
من کد زیر رو از تعلیمات اقای واژدی نوشتم....
یک کامند و یک ریچ تکست باکس ایجاد کنید...

Dim a, x
Private Sub Command1_Click()
If Left(rtb1.Text, 1) = "a" Then
rtb1.SelStart = 0
rtb1.SelLength = 1
rtb1.SelColor = vbRed
End If
For x = 2 To Len(rtb1.Text)
a = Mid(rtb1.Text, x, 1)
If a = "a" Then
rtb1.SelStart = x - 1
rtb1.SelLength = 1
rtb1.SelColor = vbRed
End If
Next x

End Sub

موفق باشید

MohammadGh2011
جمعه 13 آبان 1390, 00:09 صبح
سام جناب آقايmr-adler
کدتون اون طوري که عرض کردم نيست.يه اشتباه هايي داره.

محسن واژدی
جمعه 13 آبان 1390, 00:25 صبح
سلام علیکم
کد زیر را بررسی کنید البته مثل ویرایشگر وی بی یا سایر زبان های برنامه نویسی آنی کد را فرمت بندی نمیکند، اما شاید بتواند مفید باشد:

Private Sub Form_Load()
RichTextBox1.Text = "MsgBox ""txt""" & vbNewLine & "txt=Chr(6)" & vbNewLine & "txt=Chr(6)"
SetCodeFormating "MsgBox"
SetCodeFormating "Chr"
End Sub

Sub SetCodeFormating(ByVal Keyword$, Optional kw_clr& = vbRed)
Dim cp&

cp = -1

With RichTextBox1

Do

cp = .Find(Keyword$, cp + 1, , rtfWholeWord)

If cp >= 0 Then
.SelColor = kw_clr&
End If

DoEvents

Loop While cp > 0

.SelLength = 0

End With

End Sub




موفق باشید

mr-adler
جمعه 13 آبان 1390, 00:34 صبح
سلام

سام جناب آقايmr-adler
کدتون اون طوري که عرض کردم نيست.يه اشتباه هايي داره. لطفا بگید چه اشتباهاتی داره . من که چیزی متوجه نشدم...
77395
http://barnamenevis.org/images/misc/pencil.png

MohammadGh2011
جمعه 13 آبان 1390, 00:53 صبح
داخل کامند باتن مشکلي نداره ولي من ميخوام موقع نوشتن رنگي بشه
براي اينکه بهتر منظورم رو متوجه شويد کد خودتون رو در رويداد Change
Richtextbox قرار بديد و برنامه رو اجرا کنيد و داخل Richtextbox حروفي رو بعلاوه ي "a" بنويسيد.


ممنون

MohammadGh2011
جمعه 13 آبان 1390, 01:05 صبح
من کدهاي آقاي واژدي را زياد بررسي نکردم.
اگه کد آقايmr-adler درست شد(البته درست هست من ميخوام موقع نوشتن رنگش رو عوض کنه).همين جا لطف کنيد بزاريد.



از همگيتون ممنونم

mr-adler
جمعه 13 آبان 1390, 02:26 صبح
سلام

سام جناب آقايmr-adler
کدتون اون طوري که عرض کردم نيست.يه اشتباه هايي داره.
خوشبختانه اشتباهی نداره :لبخند: برای کامند (رویداد کلیک) طراحی شده بود ...:خجالت: متاسفانه منظورتونو اشتباه متوجه شده بودم:اشتباه:
با اجازه از دوستان....
و این هم کد مخصوص رویداد change

Private Sub rtb1_Change()
b = Len(rtb1.Text)
If Right(rtb1.Text, 1) = "a" Then
rtb1.SelStart = b - 1
rtb1.SelLength = 1
rtb1.SelColor = vbRed
rtb1.SelStart = b
rtb1.SelLength = 1
rtb1.SelColor = vbBlack
Else
rtb1.SelLength = 1
rtb1.SelColor = vbBlack

End If
End Sub

دیگه فکر کنم همون چیزی باشه که گفتید...
البته روی یه روش دیگه هم دارم کار میکنم اگه جواب داد ایجا بیان خواهم کرد...

MohammadGh2011
جمعه 13 آبان 1390, 10:27 صبح
سلام عليکم
ممنونم که راهنماييم کرديد.
کدي که قرار داديد فقط يک حرف "a" رو قرمز ميکرد چون من ميخواست که مثلا نوشتم mohammad کل محمد قرمز باشه.من خط اول کدتون رو به صورت زير ويرايش کردم و اين مشکل هم حل شد.
If Right(RichTextBox1.Text, 1) = "m" Or Right(RichTextBox1.Text, 1) = "o" Or Right(RichTextBox1.Text, 1) = "h" Or Right(RichTextBox1.Text, 1) = "a" Or Right(RichTextBox1.Text, 1) = "m" Or Right(RichTextBox1.Text, 1) = "a" Or Right(RichTextBox1.Text, 1) = "d" Then

باز از جناب mr-adler ممنونم.

MohammadGh2011
جمعه 13 آبان 1390, 10:47 صبح
سلام دوستان
چه طور به اين کد بگم که اگه mohammad کنار هم بود رنگش عوض بشه؟مثلا اگه تنها نوشتم m و چند خط بعد نوشتم d و اون ورتر نوشتم a قرمز نشه اگه اين mohammad کنار همبود و بدون هيچ فاصله اي رنگ اون قرمز بشه؟

محسن واژدی
جمعه 13 آبان 1390, 17:28 عصر
سلام علیکم
RichTextBox متدی دارد باعنوان Find که در کد پست 14 هم از آن استفاده شده، این متد پارامتری دارد با عنوان option که میتوانیم توسط آن خاصیت whole-word را با قرار دادن ثابت rtfWholeWord در آن فعال کنیم، دراینصورت، کلمه مورد نظر را که جدا از سایر متون باشد را یافته و انتخاب میکند، میتوانید دستور این پست را بگونه ای ویرایش کنید که بتواند تاحدودی جوابگوی مشکلتان باشد

میبخشید الآن نمیتوانم کد را بنویسم، انشاء الله با یاری دوستان مشکل برطرف شود

موفق باشید

mr-adler
جمعه 13 آبان 1390, 19:12 عصر
سلام
همون طور که اقای واژدی تو صفحه اول به خصوص پست 6 توضیح دادند میتونیم از کد زیر برای تغییر رنگ رشته مورد نظر استفاده کنیم:

Private Sub Command1_Click()
a = rtb1.Find("red")
rtb1.SelColor = vbRed
End Sub




RichTextBox متدی دارد باعنوان Find که در کد پست 14 هم از آن استفاده شده، این متد پارامتری دارد با عنوان option که میتوانیم توسط آن خاصیت whole-word را با قرار دادن ثابت rtfWholeWord در آن فعال کنیم، دراینصورت، کلمه مورد نظر را که جدا از سایر متون باشد را یافته و انتخاب میکند، میتوانید دستور این پست را بگونه ای ویرایش کنید که بتواند تاحدودی جوابگوی مشکلتان باشد
متاسفانه متوجه نشدم:ناراحت:یعنی منظور کد زیر هست؟

a = rtb1.Find("red", , , rtfWholeWord)
راستی خیلی از کدها هستند که به این صورت مقادیری دارند که قابل جایگزینی است(مثل همون flags of commondialog ) که توضیح دادید به وسیله object browser میشه عملکرد هر کدوم رو تشخیص داد. برای حفظ کردن اینگونه کلمات در کد ها چیکار باید کرد؟
مثلا کاش جوری طراحی میشد که مثل msgbox با زدن علامت (, ) لیست تمام کلماتش ظاهر میشد اما متاسفانه اینطور نیست.

ممنونم:لبخندساده:

محسن واژدی
جمعه 13 آبان 1390, 22:37 عصر
متاسفانه متوجه نشدم :ناراحت:یعنی منظور کد زیر هست؟
بله همینطور است



راستی خیلی از کدها هستند که به این صورت مقادیری دارند که قابل جایگزینی است(مثل همون flags of commondialog ) که توضیح دادید به وسیله object browser میشه عملکرد هر کدوم رو تشخیص داد. برای حفظ کردن اینگونه کلمات در کد ها چیکار باید کرد؟
همانطور که فرمودید میتوانیم با مراجعه به فرم object-browser به ثابت های هر دستور دسترسی پیدا کنیم و لازم نیست همه ثابت ها را حفظ کنیم، البته برای یافتن آسانتر ثابت ها میتوانیم لیست کلاس ها را با انتخاب کامپوننت دستور مورد نظر، از لیست کامبوباکس کامپوننت ها (در فرم object-browser در بالای فرم و سمت چپ) فیلتر کنیم

موفق باشید

kitcat_m18
شنبه 14 آبان 1390, 11:42 صبح
با تابع INSTR محمد رو پيدا کن اگه وجود داشت با تابع Len طول Mohammad رو به دست بيار و رنگش رو با کد دوستان عوض کن.
البته احتمالش هست خود RechTextBox متد جستجو داشته باشه (من کار نکردم)
موفق باشي :لبخندساده:

MohammadGh2011
شنبه 14 آبان 1390, 17:05 عصر
سلام عليکم
به کمک دستوري که جناب mr-adler قرار داده بودند توانستم آنچه که ميخواستم بنويسم.
Dim x As String
x = Len(RichTextBox1.Text)
If Right(RichTextBox1.Text, 8) = "mohammad" Then
RichTextBox1.SelStart = x - 8
RichTextBox1.SelLength = 8
RichTextBox1.SelColor = vbRed
RichTextBox1.SelStart = x
RichTextBox1.SelLength = 8
End If

اگر کد فوق به درستي عمل نکرد و نياز به تصحيح دارد لطفا تصحيح کنيد و در اينجا قرار دهيد.
از همگي دوستان ممنونم.
موفق باشيد

محسن واژدی
یک شنبه 15 آبان 1390, 01:02 صبح
سلام علیکم
کنترلی هم مخصوص ویرایشگر کد بنام CodeSense وجود دارد که البته تا آماده سازی جهت استفاده نیازمند به برنامه نویسی و تعاریف مختلفی دارد،
در صورت نیاز در گوگل جستجو کنید میابید

موفق باشید