PDA

View Full Version : حرفه ای: Right To Left كردن متن توي RichTextBox



Golsha
پنج شنبه 23 مهر 1388, 23:15 عصر
سلام دوستان ببخشيد ميخواستم بپرسم كه توي richtextbox چه طوري ميشه به صورت Righ to Left نوشت . منظورم Alignment Right نيست منظورم Right to Left هست كه توي TextBox وجود داره ولي توي richtextbox وجود نداره .

vbhamed
جمعه 24 مهر 1388, 00:06 صبح
سلام

RightToLeft در RichTextBox به صورتي گسترده تر از Text معمولي وجود داره، يعني هر تكه از متن كه خواستيد مي تونيد راست به چپ باشه يا چپ به راست

راهش هم تو برنامه ضميمه هست

Golsha
جمعه 24 مهر 1388, 00:26 صبح
دوست عزيز اين كه نوشتيد مشكل داره يعني وقتي Command1 رو ميزني يه Msgbox نمايش داده ميشه اگه اشتباه نكنم مشكل من توي right to left كردن متن توي RichTextBox بود .

ASedJavad
جمعه 24 مهر 1388, 05:36 صبح
سلام
يه جستجو تو همين سايت بکني، جوابت پيدا ميشه

Golsha
جمعه 24 مهر 1388, 13:00 عصر
باور كن جستجو كردم ولي هيچ چي پيدا نكردم !

ASedJavad
شنبه 25 مهر 1388, 11:02 صبح
سلام
با کنترل + شيفت سمت راست کيبورد، متن انتخابي رايت تو لفت ميشه (منظورت از رايت تو لفت ، راست چين شدن که نيست؟؟؟!!!)
همچنين مي توني از دستور زير استفاده کني که تو نمونه کد آقاي vbhamed‌بود و چند جاي ديگه همين سايت هم هست:

Private Sub RichTextBox1_Change()
RichTextBox1.textRTF = Replace(RichTextBox1.textRTF, "\ltrch", "\rtlch")
RichTextBox1.textRTF = Replace(RichTextBox1.textRTF, "ltrpar", "rtlpar")
End Sub

موفق باشي

ali190
دوشنبه 18 بهمن 1389, 20:20 عصر
سلام
متاسفانه كد بالا به من جواب نداد
من ميخوام هنگام بالا اومدن فرمم Rich text ام بصورت Right To Left در بياد
يعني كرسر ماوسم از بياد سمت راست rich text (منظورم alighnment نيست)
ممنون ميشم كمكم كنيد
خيلي خيلي ممنونم

vbhamed
سه شنبه 19 بهمن 1389, 12:07 عصر
سلام

براي اين كار بايد كنترل شيفت سمت راست رو با SendKeys يا توابع ديگه بفرستيد به RichText
اون دو تا دستور بالا رو هم قبل از اين كار اجرا كنيد

ali190
سه شنبه 19 بهمن 1389, 21:14 عصر
سلام دوستان
اين هم كد Right To Left كردن rich text:

Private Declare Sub keybd_event Lib "user32.dll" _
(ByVal bVk As Byte, ByVal bScan As Byte, _
ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
Private Const KEYEVENTF_KEYUP = &H2
Private Const VK_LCONTROL As Long = &HA2 'Left Ctrl
Private Const VK_LSHIFT As Long = &HA0 'Left Shift
Private Const VK_RCONTROL As Long = &HA3 'Right Ctrl
Private Const VK_RSHIFT As Long = &HA1 'Right Shift
Dim X As Boolean

كد زير رو هم در رويداد form_load بنويسيد

Text1.SetFocus
keybd_event VK_RCONTROL, &H1D, 0, 0
keybd_event VK_RSHIFT, &H36, 0, 0
keybd_event VK_RSHIFT, &H36, KEYEVENTF_KEYUP, 0
keybd_event VK_RCONTROL, &H1D, KEYEVENTF_KEYUP, 0

ياعلي

ali190
پنج شنبه 21 بهمن 1389, 16:55 عصر
سلام
دوستان ميشه لطف بفرمائيد و من رو راهنمايي كندي كه چطور ميشه در Rich text كنترل zoom رو با استفاده از كدنويسي به دست گرفت؟
الان اين كار با دكمه ctrl و چرخ موس امكان پذير است
اما چطور ميشه اين كار رو با استفاده از كدنويسي انجامش داد؟
ممنون يمشم راهنماييم كنيد
ياعلي

parselearn
پنج شنبه 21 بهمن 1389, 18:09 عصر
سلام
دوستان ميشه لطف بفرمائيد و من رو راهنمايي كندي كه چطور ميشه در Rich text كنترل zoom رو با استفاده از كدنويسي به دست گرفت؟
الان اين كار با دكمه ctrl و چرخ موس امكان پذير است
اما چطور ميشه اين كار رو با استفاده از كدنويسي انجامش داد؟
ممنون يمشم راهنماييم كنيد
ياعلي



'Add a form, place a RTB and 2 command buttons in the form.
'then paste this code
Option Explicit

'------------------------------------------------------------------------------
Private Const WM_USER As Long = &H400 'Used for application defined private msg
Private Const EM_SETZOOM As Long = (WM_USER + 225) 'Sets the zoom ratio
' between 1/64 and 64
'------------------------------------------------------------------------------

'Private Declare Function MulDiv Lib "kernel32" _
' (ByVal Mul As Long, _
' ByVal Nom As Long, _
' ByVal Den As Long) As Long

Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
(ByVal hwnd As Long, _
ByVal wMsg As Long, _
ByVal wParam As Long, _
lParam As Any) As Long

Dim CurrentZoom As Integer 'For testing only

'--------------------------------------------------------------------------------
Public Function SetZoom(ByVal ZoomRatio As Long) 'Sets the zoom ratio

If ZoomRatio < 5 Or ZoomRatio > 500 Then Exit Function
Dim Numerator As Long
Dim Denominator As Long

If ZoomRatio = 100 Then
Numerator = 0
Denominator = 0
Else

If ZoomRatio < 100 Then
Numerator = ZoomRatio
Denominator = 100
Else
Numerator = ZoomRatio / 1.960784
Denominator = 51
End If

End If

Call SendMessage(RichTextBox1.hwnd, EM_SETZOOM, ByVal Numerator, ByVal Denominator)

End Function

'----------------------------------------------------------------------------

Private Sub Command1_Click() 'Tests Zoom In

CurrentZoom = CurrentZoom + 10
SetZoom (CurrentZoom)
Me.Caption = CurrentZoom

End Sub

'----------------------------------------------------------------------------
Private Sub Command2_Click() 'Tests Zoom Out

CurrentZoom = CurrentZoom - 10
SetZoom (CurrentZoom)
Me.Caption = CurrentZoom

End Sub

'----------------------------------------------------------------------------
Private Sub Form_Load()

RichTextBox1.Font.Name = "Times New Roman"
CurrentZoom = 100

End Sub

Restlesa
دوشنبه 12 اردیبهشت 1390, 01:27 صبح
سلام دوستان
اين هم كد Right To Left كردن rich text:

Private Declare Sub keybd_event Lib "user32.dll" _
(ByVal bVk As Byte, ByVal bScan As Byte, _
ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
Private Const KEYEVENTF_KEYUP = &H2
Private Const VK_LCONTROL As Long = &HA2 'Left Ctrl
Private Const VK_LSHIFT As Long = &HA0 'Left Shift
Private Const VK_RCONTROL As Long = &HA3 'Right Ctrl
Private Const VK_RSHIFT As Long = &HA1 'Right Shift
Dim X As Boolean

كد زير رو هم در رويداد form_load بنويسيد

Text1.SetFocus
keybd_event VK_RCONTROL, &H1D, 0, 0
keybd_event VK_RSHIFT, &H36, 0, 0
keybd_event VK_RSHIFT, &H36, KEYEVENTF_KEYUP, 0
keybd_event VK_RCONTROL, &H1D, KEYEVENTF_KEYUP, 0

ياعلي

حالا چه طوری میشه Left To Rigth کرد؟؟؟

محسن واژدی
دوشنبه 12 اردیبهشت 1390, 09:08 صبح
سلام علیکم
نمونه زیر را ببینید که بر اساس این کد ایجاد شده است

موفق باشید

Restlesa
دوشنبه 12 اردیبهشت 1390, 11:35 صبح
ممنونم دوست عزیز
وولی گویا متوجه منظور بنده نشدی
منظورم من اینه که وقتی ما از کدی که برام ضمیمه کردی استفاده کردیم و عملیات Right To Left رو انجام دادیم،حالا چهطوری می تونیم به حالات اولیه درش بیاریم ؟؟؟
یعنی Right To Left برابر با False بشه ؟؟؟

محسن واژدی
دوشنبه 12 اردیبهشت 1390, 12:15 عصر
درسته ببخشید متوجه نشدم
از کد زیر برای LTR استفاده کنید:
Private Sub Command2_Click()
RichTextBox1.SetFocus
SendKeys "^+"
End Sub

موفق باشید

سپهر-111
پنج شنبه 09 شهریور 1391, 14:51 عصر
سلام علیکم
نمونه زیر را ببینید که بر اساس این کد ایجاد شده است

موفق باشید


درسته ببخشید متوجه نشدم
از کد زیر برای LTR استفاده کنید:
Private Sub Command2_Click()
RichTextBox1.SetFocus
SendKeys "^+"
End Sub

موفق باشید



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

ولی کد LTR اون ارورر میده : permission denied

البته فقط تو ویندوز سون کار نمیکنه توی xp کار میکنه

ممنون میشم اگه راهنمایی فرمایید



باتشکر

محسن واژدی
پنج شنبه 09 شهریور 1391, 21:10 عصر
ولی کد LTR اون ارورر میده : permission denied

البته فقط تو ویندوز سون کار نمیکنه توی xp کار میکنه


سلام علیکم بله SendKey داخل ویندوز سون مشکلاتی دارد، برای LTR کد زیر را بررسی کنید: Private Declare Sub keybd_event Lib "user32.dll" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
Public Sub SetLTR(oRichTextBox As RichTextBox)
oRichTextBox.SetFocus
keybd_event vbKeyControl, 0, 0, 0 'key down
keybd_event vbKeyShift, 0, 0, 0 'key down
keybd_event vbKeyControl, 0, &H2, 0 'key up
keybd_event vbKeyShift, 0, &H2, 0 'key up
End Sub


برای مثال: Private Sub Command1_Click()
SetLTR RichTextBox1
End Sub


موفق باشید

سپهر-111
جمعه 10 شهریور 1391, 12:22 عصر
سلام علیکم بله SendKey داخل ویندوز سون مشکلاتی دارد، برای LTR کد زیر را بررسی کنید: Private Declare Sub keybd_event Lib "user32.dll" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
Public Sub SetLTR(oRichTextBox As RichTextBox)
oRichTextBox.SetFocus
keybd_event vbKeyControl, 0, 0, 0 'key down
keybd_event vbKeyShift, 0, 0, 0 'key down
keybd_event vbKeyControl, 0, &H2, 0 'key up
keybd_event vbKeyShift, 0, &H2, 0 'key up
End Sub


برای مثال: Private Sub Command1_Click()
SetLTR RichTextBox1
End Sub


موفق باشید



با تشکر از لطف و محبت شما:قلب:
من کد های که شما گذاشتید برای RTL و LTR استفاده میکنم
فقط یک مشکل داره اونم اینکه جمله رو HI LGHIT میکنه ،
ممنون میشم اگه کدی برای HI LGHIT نشدنش برام بنویسید

محسن واژدی
جمعه 10 شهریور 1391, 14:39 عصر
با تشکر از لطف و محبت شما:قلب:
من کد های که شما گذاشتید برای RTL و LTR استفاده میکنم
فقط یک مشکل داره اونم اینکه جمله رو HI LGHIT میکنه ،
ممنون میشم اگه کدی برای HI LGHIT نشدنش برام بنویسید
خواهش میکنم،
تست کردم مشکلی نداشت، یعنی متن بدون high-light شدن LTR شد

mehrankalateh
دوشنبه 16 اردیبهشت 1392, 19:10 عصر
آسد جواد دمت گرم خیلی بدردم خورد . مرسی:تشویق: