اطلاعیه

کاربر گرامی

به انجمن برنامه نویسی AnswerCenter.ir خوش آمدید

 برای استفاده از تمامی امکانات سایت لطفا در انجمن عضو شوید


مجید آرتا

آموزش کار با CsBuilder ( رنگ، فونت و استایل دادن به متون )

11 ارسال در این موضوع قرار دارد

با سلام به کاربرای عزیز.

دیر وقته آموزش های متنی و ویدیویی برای کاربرای عزیز قرار ندادم

یه آموزش ساده میدم، از سایت مرجع بیسیک 4 اندروید B4X.

با این کلاس که توی  core خود بیسیک هستش، میتونید متنتون رو زیبا تر و شکیل تر کنید.به یه قسمت از متنتون، فونت و استایل و سایز حاص می تونید بدید.

این کلاس بر گرفته از کتابخونه RichString  قدیم هستش که سازندش agraham یکی از توسعه دهندگان خوب b4a  که کتابخونه های خوبی رو برای b4a  ایجاد کرده.

یادمه خیلی از دوستان مشکلات زیادی در این مورد داشتن، هایلایت کردن قسمتی از متن، لینک دادن به قسمتی از متن و . .  . به وسیله ی این کلاس که توی خود بیسیک تعبیه شده امکان پذیر هستش.

میریم سراغ مثال ها و نحوه ی استفاده این کلاس »

مثال 1:

lbl.Text = cs.Initialize.Color(Colors.Green).Append("Answer").Color(Colors.Red).Append("Center").PopAll

خروجی مثال 1:

1.PNG

 

مثال 2:

	Dim cs As CSBuilder
	cs.Initialize.Color(Colors.Red).Append("Hello ")
	cs.Bold.Color(Colors.Green).Append("Colorful ").Pop.Pop 'two pops: the first removes the green color and the second removes the bold style
	cs.Append("World!").PopAll
	lbl.Text = cs

 

خروجی مثال2:

2.PNG

 

مثال 3:( در این مثال نحوه استفاده از فونت ایکون هم موجود هستش)

	lbl.Text = cs.Initialize.Append("Text with FontAwesome: ").Typeface(Typeface.FONTAWESOME).Append(Chr(0xF209)).PopAll

3.PNG

مثال 4:( در این مثال قسمتی از متن رو قابلیت کلیک میدیم)

Sub Activity_Create(FirstTime As Boolean)
	Activity.LoadLayout("main")

	Dim cs As CSBuilder
	cs.Initialize.Size(30).Append("Some ").Append(CreateClickableWord("words"))
	cs.Append(" are ").Append(CreateClickableWord("clickable")).Append(".").PopAll
	lbl.Text = cs
	cs.EnableClickEvents(lbl)
End Sub

Sub CreateClickableWord(Text As String) As CSBuilder
	Dim cs As CSBuilder
	Return cs.Initialize.Underline.Color(0xFF00D0FF).Clickable("word", Text).Append(Text).PopAll
End Sub

Sub Word_Click (Tag As Object)
	Log($"You have clicked on word: ${Tag}"$)
End Sub

خروجی 4:

4.PNG

 

این کلاس از بیسیک نسخه 6.80 به بعد موجود هستش.

خب امیدوارم مورد توجهتون قرار گرفته بشه.

منبع: B4X forum

Www.AnswerCenter.IR

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

سلام به همه منم یه چند تا نکته دیگه به گفته های مجید عزیز اضافه میکنم تا همه دوستان استفاده کنند
 

Images

Code:
Dim cs As CSBuilder
cs.Initialize.Size(30).Typeface(Typeface.MONOSPACE)
cs.Append("B4A: ").Image(LoadBitmap(File.DirAssets, "b4a.png"), 40dip40dipFalse).Append(CRLF)
cs.Append("B4i: ").Image(LoadBitmap(File.DirAssets, "b4i.png"), 40dip40dipFalse).Append(CRLF)
cs.Append("B4J: ").Image(LoadBitmap(File.DirAssets, "b4j.png"), 40dip40dipFalse).Append(CRLF)
cs.Append("B4R: ").Image(LoadBitmap(File.DirAssets, "b4r.png"), 40dip40dipFalse).Append(CRLF)
cs.PopAll
Label1.Text = cs

Activity.Title = cs

[IMG]

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر


Clickable text

برای ایجاد متن هایی که قابل کلیک باشن مثلا لینک بدید به سایت یا گروه یا ...

Code:
Sub Activity_Create(FirstTime As Boolean)
   Activity.LoadLayout("1")
   Dim cs As CSBuilder
   cs.Initialize.Size(30).Append("Some ").Append(CreateClickableWord("words"))
   cs.Append(" are ").Append(CreateClickableWord("clickable")).Append(".").PopAll
   Label1.Text = cs
   cs.EnableClickEvents(Label1)
End Sub

Sub CreateClickableWord(Text As StringAs CSBuilder
   Dim cs As CSBuilder
   Return cs.Initialize.Underline.Color(0xFF00D0FF).Clickable("word", Text).Append(Text).PopAll
End Sub

Sub Word_Click (Tag As Object)
   Log($"You have clicked on word: ${Tag}"$)
End Sub

[IMG]

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

اگه متنی داشته باشیم که بخواهیم کل متن رنگش سیاه باشه و فقط کلمات خاصی رنگی بشن چکار باید بکنیم ؟

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر
در در 1396/12/14, 07:36:20، mahfelsoft گفته است :

میشه لطفا جواب بدید ؟؟؟؟؟؟؟؟

سلام علیکم 

این کدها رو براتون آماده کردم 

هرمتنی که میخواین دربین متن اصلی تان یافت بشه و رنگش متفاوت از سایر قسمتهای متن شود را در edittext وارد میکنید بعدش بلافاصله بصورت خودکار رنگ متن موردنظرتان متفاوت میشه 

Sub Globals
	'These global variables will be redeclared each time the activity is created.
	'These variables can only be accessed from this module.
	Dim color_kalame As String
	Private Label1 As Label
	Private EditText1 As EditText
	Dim cs As CSBuilder
	Dim matn As String
	Dim kalame_search As String
	
End Sub

Sub Activity_Create(FirstTime As Boolean)
	'Do not forget to load the layout file created with the visual designer. For example:
	Activity.LoadLayout("Layout1")
	kalame_search= "10" 
	EditText1.Text=kalame_search
	search
End Sub

Sub search
	
	cs.Initialize.Color(Colors.Blue)
	matn = "In The Name of GOD                                                              بار صلوات بفرستید 10  اللهم صل علی محمد وآل محمد "
		Dim MatchEmail2 As Matcher = Regex.Matcher(kalame_search, matn)
		cs.Initialize
    	cs.Color(Colors.Red)
	
		Dim regex_matn() As String

		If MatchEmail2.Find = True Then
			Log("کلمه"&kalame_search&"  یافت شد")
		
			regex_matn = Regex.split(kalame_search,matn)
			color_kalame=Colors.red
			For searchh = 0 To (regex_matn.Length-1)
				cs.Append(regex_matn(searchh)).Color(Colors.Blue).PopAll
					color_kalame= Colors.RGB(Rnd(0,255),Rnd(0,255),Rnd(0,255))
						
			If searchh<>(regex_matn.Length-1) Then
				cs.Color(Colors.Red)
					cs.Bold.Color(color_kalame).Append(kalame_search).Pop.Pop 
				Else
				End If
			Next
			Label1.Text = cs
		Else
		Log("کلمه"&kalame_search&"  یافت نشد")
		end  If
	
End Sub
Sub EditText1_TextChanged (Old As String, New As String)  'وقتی متن تغییر کرد 
	kalame_search=EditText1.Text
	If kalame_search="" Then kalame_search=" "
	search
End Sub

 

اینم لینک سورس کامل وآماده اون : 

 

سورس رنگی کردن متن مورد نظر در جستجو

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر
در در 1396/12/15, 08:58:07، نورنما گفته است :

سلام علیکم 

این کدها رو براتون آماده کردم 

هرمتنی که میخواین دربین متن اصلی تان یافت بشه و رنگش متفاوت از سایر قسمتهای متن شود را در edittext وارد میکنید بعدش بلافاصله بصورت خودکار رنگ متن موردنظرتان متفاوت میشه 


Sub Globals
	'These global variables will be redeclared each time the activity is created.
	'These variables can only be accessed from this module.
	Dim color_kalame As String
	Private Label1 As Label
	Private EditText1 As EditText
	Dim cs As CSBuilder
	Dim matn As String
	Dim kalame_search As String
	
End Sub

Sub Activity_Create(FirstTime As Boolean)
	'Do not forget to load the layout file created with the visual designer. For example:
	Activity.LoadLayout("Layout1")
	kalame_search= "10" 
	EditText1.Text=kalame_search
	search
End Sub

Sub search
	
	cs.Initialize.Color(Colors.Blue)
	matn = "In The Name of GOD                                                              بار صلوات بفرستید 10  اللهم صل علی محمد وآل محمد "
		Dim MatchEmail2 As Matcher = Regex.Matcher(kalame_search, matn)
		cs.Initialize
    	cs.Color(Colors.Red)
	
		Dim regex_matn() As String

		If MatchEmail2.Find = True Then
			Log("کلمه"&kalame_search&"  یافت شد")
		
			regex_matn = Regex.split(kalame_search,matn)
			color_kalame=Colors.red
			For searchh = 0 To (regex_matn.Length-1)
				cs.Append(regex_matn(searchh)).Color(Colors.Blue).PopAll
					color_kalame= Colors.RGB(Rnd(0,255),Rnd(0,255),Rnd(0,255))
						
			If searchh<>(regex_matn.Length-1) Then
				cs.Color(Colors.Red)
					cs.Bold.Color(color_kalame).Append(kalame_search).Pop.Pop 
				Else
				End If
			Next
			Label1.Text = cs
		Else
		Log("کلمه"&kalame_search&"  یافت نشد")
		end  If
	
End Sub
Sub EditText1_TextChanged (Old As String, New As String)  'وقتی متن تغییر کرد 
	kalame_search=EditText1.Text
	If kalame_search="" Then kalame_search=" "
	search
End Sub

 

اینم لینک سورس کامل وآماده اون : 

 

سورس رنگی کردن متن مورد نظر در جستجو

ممنونم دوست عزیز . لطف کردی خیلی بدرد بخوره . ولی من سرچ نمیخواستم . من یه متن دارم فقط میخوام برخی کلمات خاص توی این متن رنگی باشن . ادیت تکست و ... نمیخوام.  ممثال میخوام هر چی کلمه "صلوات" هست سبز باشن .

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

 

در 20 ساعت قبل، mahfelsoft گفته است :

ممنونم دوست عزیز . لطف کردی خیلی بدرد بخوره . ولی من سرچ نمیخواستم . من یه متن دارم فقط میخوام برخی کلمات خاص توی این متن رنگی باشن . ادیت تکست و ... نمیخوام.  ممثال میخوام هر چی کلمه "صلوات" هست سبز باشن .

 

سلامت باشید

 

این سورس صرفا جهت پاسخ به شما نیست ، بلکه علاوه بر حل مشکل شما ، سعی شده تا سایر مشکلاتی معمولا سایر دوستان انجمن  به آن دچار می شوند نیز پاسخ داده شود، وبایک تیر چند نشان زده ایم!

 

ضمنا دقت بفرمایید:  اگر ادیت تکست ها رو کلاپاک کنید و به عدد (10) نظر کنید می بینید

که همه ی این (10)  ها را داخل متن پیدا و رنگی میکند! لذا مشکل شما هم جواب داده شده بود،

 

ولی باز بخاطر اینکه حرف شما زمین نیافتد باز نمونه کدی بدون ادیت تکست و سرچ رو در پایین خدمتتان ارسال میکنم .

 

 مثلا دراین خط هر کلمه (محمد) که در متن اصلی هست را پیدا ورنگی میکند . امیدوارم دیگه سوالی دراین مورد وجودنداشته باشد!

 

روش استفاده ازش هم اینطوره : 

search("kalame","کل متن ")

search("محمد","In The Name of GOD    بار صلوات بفرستید 10  اللهم صل علی محمد وآل محمد ")

 

کدهاتونو بصورت زیر  تغییرش بدهید

#Region  Project Attributes 
	#ApplicationLabel: B4A Example
	#VersionCode: 1
	#VersionName: 
	'SupportedOrientations possible values: unspecified, landscape or portrait.
	#SupportedOrientations: unspecified
	#CanInstallToExternalStorage: False
#End Region
#Region  Activity Attributes 
	#FullScreen: False
	#IncludeTitle: True
#End Region
Sub process_Globals
	
End Sub

Sub Globals
	'These global variables will be redeclared each time the activity is created.
	'These variables can only be accessed from this module.
	Dim color_kalame As String
	Private Label1 As Label
    Dim cs As CSBuilder
	Dim text_me As String
	
End Sub

Sub Activity_Create(FirstTime As Boolean)
	'Do not forget to load the layout file created with the visual designer. For example:
	Activity.LoadLayout("Layout1")
	search("محمد","In The Name of GOD                                                              بار صلوات بفرستید 10  اللهم صل علی محمد وآل محمد ")
	Label1.Text = cs

End Sub

Sub search(kalame_search As String,matn As String )
	
	If kalame_search="" Then kalame_search=" "
	cs.Initialize.Color(Colors.Blue)
	
	Dim MatchEmail2 As Matcher = Regex.Matcher(kalame_search, matn)
	cs.Initialize
	cs.Color(Colors.Red)
	
	Dim regex_matn() As String

	If MatchEmail2.Find = True Then
		Log("کلمه"&kalame_search&"  یافت شد")
		
		regex_matn = Regex.split(kalame_search,matn)
		color_kalame=Colors.red
		For searchh = 0 To (regex_matn.Length-1)
			cs.Append(regex_matn(searchh)).Color(Colors.Blue).PopAll
			color_kalame= Colors.RGB(Rnd(0,255),Rnd(0,255),Rnd(0,255))
						
			If searchh<>(regex_matn.Length-1) Then
				cs.Color(Colors.Red)
				cs.Bold.Color(color_kalame).Append(kalame_search).Pop.Pop
			Else
			End If
		Next
	
	Else
		ToastMessageShow("کلمه"&kalame_search&"  یافت نشد",False)
	end  If
	
End Sub
 

 

 

 

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر
در 4 ساعت قبل، نورنما گفته است :

 

 

سلامت باشید

 

این سورس صرفا جهت پاسخ به شما نیست ، بلکه علاوه بر حل مشکل شما ، سعی شده تا سایر مشکلاتی معمولا سایر دوستان انجمن  به آن دچار می شوند نیز پاسخ داده شود، وبایک تیر چند نشان زده ایم!

 

ضمنا دقت بفرمایید:  اگر ادیت تکست ها رو کلاپاک کنید و به عدد (10) نظر کنید می بینید

که همه ی این (10)  ها را داخل متن پیدا و رنگی میکند! لذا مشکل شما هم جواب داده شده بود،

 

ولی باز بخاطر اینکه حرف شما زمین نیافتد باز نمونه کدی بدون ادیت تکست و سرچ رو در پایین خدمتتان ارسال میکنم .

 

 مثلا دراین خط هر کلمه (محمد) که در متن اصلی هست را پیدا ورنگی میکند . امیدوارم دیگه سوالی دراین مورد وجودنداشته باشد!

 

روش استفاده ازش هم اینطوره : 


search("kalame","کل متن ")

search("محمد","In The Name of GOD    بار صلوات بفرستید 10  اللهم صل علی محمد وآل محمد ")

 

کدهاتونو بصورت زیر  تغییرش بدهید


#Region  Project Attributes 
	#ApplicationLabel: B4A Example
	#VersionCode: 1
	#VersionName: 
	'SupportedOrientations possible values: unspecified, landscape or portrait.
	#SupportedOrientations: unspecified
	#CanInstallToExternalStorage: False
#End Region
#Region  Activity Attributes 
	#FullScreen: False
	#IncludeTitle: True
#End Region
Sub process_Globals
	
End Sub

Sub Globals
	'These global variables will be redeclared each time the activity is created.
	'These variables can only be accessed from this module.
	Dim color_kalame As String
	Private Label1 As Label
    Dim cs As CSBuilder
	Dim text_me As String
	
End Sub

Sub Activity_Create(FirstTime As Boolean)
	'Do not forget to load the layout file created with the visual designer. For example:
	Activity.LoadLayout("Layout1")
	search("محمد","In The Name of GOD                                                              بار صلوات بفرستید 10  اللهم صل علی محمد وآل محمد ")
	Label1.Text = cs

End Sub

Sub search(kalame_search As String,matn As String )
	
	If kalame_search="" Then kalame_search=" "
	cs.Initialize.Color(Colors.Blue)
	
	Dim MatchEmail2 As Matcher = Regex.Matcher(kalame_search, matn)
	cs.Initialize
	cs.Color(Colors.Red)
	
	Dim regex_matn() As String

	If MatchEmail2.Find = True Then
		Log("کلمه"&kalame_search&"  یافت شد")
		
		regex_matn = Regex.split(kalame_search,matn)
		color_kalame=Colors.red
		For searchh = 0 To (regex_matn.Length-1)
			cs.Append(regex_matn(searchh)).Color(Colors.Blue).PopAll
			color_kalame= Colors.RGB(Rnd(0,255),Rnd(0,255),Rnd(0,255))
						
			If searchh<>(regex_matn.Length-1) Then
				cs.Color(Colors.Red)
				cs.Bold.Color(color_kalame).Append(kalame_search).Pop.Pop
			Else
			End If
		Next
	
	Else
		ToastMessageShow("کلمه"&kalame_search&"  یافت نشد",False)
	end  If
	
End Sub
 

 

 

 

بله . مممنونم .نمیخواستم این نظر رو بنویسم . ولی چون نوشته بودم مجبور شدم ویرایش کنم

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

خب مشخصه ، چندتا دستور color بیشتر نیست که حتما باید با دستور تغییر رنگ دربیسیک آشنا بوده باشید!

این سطر رو به رنگ دلخواه تغییرش بدین ، چون رنگ متن رو قرمز red داده ام ،کد  رنگ کلمات رو من سبز معرفی کردم

بجای رنگ رندوم در سطر زیر :

color_kalame= Colors.RGB(Rnd(0,255),Rnd(0,255),Rnd(0,255))

این سطر رو که برای رنگ سبز هست جایگزین کنید :
Green=سبز

color_kalame= Colors.Green

 

 

یا کلا کدهاتون رو به این تغییر بدین که مثل اولین پستی که زده بودید و رنگ متن رو مشکی کردم و رنگ کلمه مورد نظر رو قرمز کردم !

#Region  Project Attributes 
	#ApplicationLabel: B4A Example
	#VersionCode: 1
	#VersionName: 
	'SupportedOrientations possible values: unspecified, landscape or portrait.
	#SupportedOrientations: unspecified
	#CanInstallToExternalStorage: False
#End Region
#Region  Activity Attributes 
	#FullScreen: False
	#IncludeTitle: True
#End Region
Sub process_Globals
	
End Sub

Sub Globals
	'These global variables will be redeclared each time the activity is created.
	'These variables can only be accessed from this module.
	Dim color_kalame As String
	Private Label1 As Label
    Dim cs As CSBuilder
	Dim text_me As String
	
End Sub

Sub Activity_Create(FirstTime As Boolean)
	'Do not forget to load the layout file created with the visual designer. For example:
	Activity.LoadLayout("Layout1")
	search("محمد","In The Name of GOD                                                              بار صلوات بفرستید 10  اللهم صل علی محمد وآل محمد ")
	Label1.Text = cs
Label1.Color=Colors.White
End Sub

Sub search(kalame_search As String,matn As String )
	
	If kalame_search="" Then kalame_search=" "
	cs.Initialize.Color(Colors.Blue)
	
	Dim MatchEmail2 As Matcher = Regex.Matcher(kalame_search, matn)
	cs.Initialize
	cs.Color(Colors.Black)
	
	Dim regex_matn() As String

	If MatchEmail2.Find = True Then
		Log("کلمه"&kalame_search&"  یافت شد")
		
		regex_matn = Regex.split(kalame_search,matn)
		color_kalame=Colors.Black
		For searchh = 0 To (regex_matn.Length-1)
			cs.Append(regex_matn(searchh)).Color(Colors.Blue).PopAll
			color_kalame= Colors.Red'RGB(Rnd(0,255),Rnd(0,255),Rnd(0,255))
						
			If searchh<>(regex_matn.Length-1) Then
				cs.Color(Colors.Black)
				cs.Bold.Color(color_kalame).Append(kalame_search).Pop.Pop
			Else
			End If
		Next
	
	Else
		ToastMessageShow("کلمه"&kalame_search&"  یافت نشد",False)
	end  If
	
End Sub
 

 

اینم تصویر نتیجه کار که کلمه محمد رو از متن پیدا وقرمز کرده:

Untitled.png.8ba4b9ad73cb869a8c992c25d05ab43d.png 

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

سلام دوستان من میخوام تو لیبلم هم از fontawesome استفاده کنم هم جلوش متن بنویسم اما میخوام نماد یا همون فونتم بیاد  اول متنم اما چون فارسیه قاطی میکنه و میره بعد متنم.
انگلیسی امتحان کردم درسته اما فارسی هر کار میکنم ایکونم بعد متنم قرار میگیره .
راهنمایی لطفا

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

برای ارسال دیدگاه یک حساب کاربری ایجاد کنید یا وارد حساب خود شوید

برای اینکه بتوانید دیدگاهی ارسال کنید نیاز دارید که کاربر سایت شوید

ایجاد یک حساب کاربری

برای حساب کاربری جدید در سایت ما ثبت نام کنید. عضویت خیلی ساده است !

ثبت نام یک حساب کاربری جدید

ورود به حساب کاربری

دارای حساب کاربری هستید؟ از اینجا وارد شوید

ورود به حساب کاربری