PDA

View Full Version : بزرگ نوشتن حروف اول کلمات



Veteran
سه شنبه 17 آبان 1390, 16:57 عصر
سلام دوستان مخواستم بدونم کسی میتونه در این زمینه ( بزرگ نوشتن حروف اول کلمات) کمک کنه
من پیش خودم اینجوری فکر میکنم
مثلا برای نوشتن
Salam Khobi Che Khabar
میگم caps locl روشن هست اولین حرفی که میزنم بزرگ هست بعد خاموش میشه بقیه حرف ها کوچیک نوشته میشن
حالا حرف اخر m رو مینوسم میخوام برم برای کلمه بعدی باید یک space بزنم
دوباره caps lock روشن میشه اولین حرفی که زدم بعد خاموش میشه تا space بعدی
به همین صورت
حالا راه بهتری سراغ دارین ؟
سورسی یا تابعی چیزی

_behnam_
سه شنبه 17 آبان 1390, 17:34 عصر
اینجوری میشه
Dim Str As String
Str = "salam khoobi chekhabar?"
Str = StrConv(Str, 3)
MsgBox Str

Veteran
سه شنبه 17 آبان 1390, 17:39 عصر
چجوری میتونماینو کاری کنم هرچیزی تایپ کردم بزرگ بشه ؟ مثلا برنامه بزارم توی استارت اپ هر موقعه بالا اومد خودش کا کنه
دیگه من نیام نشوته رو بزنم توی vb بزرگ کنه

MohammadGh2011
سه شنبه 17 آبان 1390, 19:22 عصر
براي بزرگ نوشتن حرف اول در تکست باکس ميتونيد از روش زير هم استفاده کنيد.
Private Sub Text1_Change()
Text1.Text = StrConv(Text1.Text, 3)
Text1.SelStart = Len(Text1.Text)
End Sub




چجوری میتونماینو کاری کنم هرچیزی تایپ کردم بزرگ بشه ؟
اگه منظورتون رو درست متوجه شده باشم:
Private Sub Text1_Change()
Text1 = UCase(Text1.Text)
End Sub



موفق باشيد

M.T.P
سه شنبه 17 آبان 1390, 19:32 عصر
از این کد هم میشه استفاده کرد.



Private Sub Text1_Change()
Dim IntPosition As Long
IntPosition = Text1.SelStart
Text1.Text = StrConv(Text1.Text, 3)
Text1.SelStart = IntPosition
End Sub

mr-adler
سه شنبه 17 آبان 1390, 21:35 عصر
سلام
یکی از دوستان که در مورد پرش نا مربوط فوکوس در تکست سوال داشت با این خط مشکل حله:

Text1.SelStart = Len(Text1.Text)
کارش اینه که فوکوس رو انتقال میده به بعد از اخرین حرف به خاطر همین حرف بعدی که نوشته میشه میاد و بعد از حرف اخر قرار میگیره .(البته باید در رویداد change نوشت)
امیدوارم این پست رو بخونی . اون موقع برای خودم هم سوال بود اما خدا رو شکر بر طرف شد....

quiet_programmer
چهارشنبه 18 آبان 1390, 12:02 عصر
با سلام.


چجوری میتونماینو کاری کنم هرچیزی تایپ کردم بزرگ بشه ؟ مثلا برنامه بزارم توی استارت اپ هر موقعه بالا اومد خودش کا کنه
دیگه من نیام نشوته رو بزنم توی vb بزرگ کنه

احتمالا منظورت اینه که اگه حتی خواستی تو نود پت یا هر ویرایشگر متنی، چیزی تایپ کردی حرف اول کلمه ها بزرگ تایپ بشه. اگه آره باید بگم باید از توابع api استفاده کنی. والان چیزی که به ذهنم میرسه روش خودت بهتر جواب میده. یعنی اینکه caps lock رو روشن و خاموش کنی.

حالا مراحل کار:
Dim sOld As String
Dim Ret As String
دوتا متغیر رو به صورت سراسری تعریف کن.
یه تایمر بزار رو فرم با Interval مثلا 10 و داخل رویداد timer کد زیر رو قرار بده:

Private Sub Timer1_Timer()
Ret = GetPressedKey
If Ret <> sOld Then
sOld = Ret
Text1.Text = Text1.Text + sOld
End If
End Sub

تابع GetPressedKey رو تعریف کن که قراره کلیدهای فشار داده شده رو تشخیص بده. مثلا تو کد زیر من فقط برای تشخیص کلید space کد قرار دادم. برای این کار باید از تابع api زیر استفاده کرد.
Public Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
کد تابع:
Function GetPressedKey() As String
Dim Key As Boolean
Dim State As Boolean
Dim k As Long

Key = GetAsyncKeyState(vbKeySpace) And &H8000
State = GetAsyncKeyState(vbKeyShift) And &H8000
If Key Then
If State Then 'shift Pressed
GetPressedKey = " SPACE "
Else
GetPressedKey = " Space "
End If
Exit Function
End If
End Function

برای تشخیص روشن یا خاموش بودن کلید caps lock هم میشه از تابع api زیر استفاده کرد:
Public Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As Integer
برای مثال:
Private Sub Form_Load()
Dim CapitalState As Byte

CapitalState = GetKeyState(vbKeyCapital)
If CapitalState = 1 Then
Me.Text1.Text = "Capital Key On" + vbCrLf
Else
Me.Text1.Text = "Capital Key Off" + vbCrLf
End If
End Sub

برای روشن کردن caps lock هم میتونین از تابع api زیر استفاده کنین.

Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Integer, ByVal dwExtraInfo As Integer)

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

یاعلی
موفق باشید.

Veteran
چهارشنبه 18 آبان 1390, 13:35 عصر
احتمالا منظورت اینه که اگه حتی خواستی تو نود پت یا هر ویرایشگر متنی، چیزی تایپ کردی حرف اول کلمه ها بزرگ تایپ بشه.

بله دقیقا منظورم همینه فقط
این

Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Integer, ByVal dwExtraInfo As Integer)
میزنم ارور میده
بعد چجوری میتونم خاموشش کنم ؟

joker_pok
چهارشنبه 18 آبان 1390, 16:04 عصر
public Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Integer, ByVal dwExtraInfo As Integer)

Veteran
چهارشنبه 18 آبان 1390, 16:57 عصر
به این کلمه lib گیر میره
espected : end of statement

quiet_programmer
چهارشنبه 18 آبان 1390, 18:27 عصر
با سلام.


به این کلمه lib گیر میرهpublic Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Integer, ByVal dwExtraInfo As Integer)

این تابع کد اسکی کلید رو میگیره و اون کلید رو فشار میده یا ول میکنه. فشردن یا رها کردن با پارامتر dwFlags مشخص میشه. شما باید یکبار caps lock رو فشار بدین و بلافاصله رهاش کنید. برای درک بهتر دو تا فراخوانی تابع پشت سر هم نیازه یکی برای فشردن و یکی برای رها کردن.

بعد چجوری میتونم خاموشش کنم ؟ با فشاردادن دوباره کلید casps lock.

یاعلی
موفق باشید

Veteran
جمعه 20 آبان 1390, 21:45 عصر
Private Sub Text1_Change() Dim IntPosition As Long IntPosition = Text1.SelStart Text1.Text = StrConv(Text1.Text, 3) Text1.SelStart = IntPosition End Sub

همین کد خوبه
توی textbox تایپ میکنیم کار میده
حروف اول رو بزرگ میزنه
نمیشه کارش کنیم که توی هرجایی که امکان نوشتن داره برامون کار کنه ؟
مثلا توی notpad داریم تایپ مینیم با استفاده از همین کد حروف اول رو بزرگ بزنه
این api ها و این چیزا زیاد سر در نمیارم
یکی از دوستان اگه وقت کنه با توجه با اطلاعات پست 7 یک سورسی رو اماده کنه خوبه
سر در نمیارم :متفکر::اشتباه:

quiet_programmer
شنبه 21 آبان 1390, 12:19 عصر
با سلام.

با توضیحاتی که بنده در پست 7 دادم خودت باید میتونستی بنویسی و ربطی به دونستن یا ندونستن توابع api نداشت. بلاخره لقمه رو کاملا جویده بودم. حالا کد رو میزام فقط بخاطر اینکه ببینی چقد شبیه به کدهای موجود تو پست 7 هست. شماهم یکم تلاش کنید دیگه نمیشه که همه چیرو حاظر و آماده بدست بیارین.

یه تایمر بزار رو فرم با اینترول 10.

Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Integer, ByVal dwExtraInfo As Integer)
Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
Private Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As Integer

Private Sub Timer1_Timer()
ret = GetPressedKey
If ret = " SPACE " Or ret = " Space " Then
CapitalOn
ElseIf ret = "Pressed Key" Then
CapitalOff
End If
End Sub

Function GetPressedKey() As String
Dim Key As Boolean
Dim State As Boolean
Dim k As Long

Key = GetAsyncKeyState(vbKeySpace) And &H8000
State = GetAsyncKeyState(vbKeyShift) And &H8000
If Key Then
If State Then 'shift Pressed
GetPressedKey = " SPACE "
Else
GetPressedKey = " Space "
End If
Exit Function
End If
For iKey = 32 To 255
If (GetAsyncKeyState(iKey) And &H8000) Then
GetPressedKey = "Pressed Key"
Exit Function
End If
Next
GetPressedKey = "Non Key Pressed"
End Function

Private Sub CapitalOn()
Dim CapitalState As Byte

CapitalState = GetKeyState(vbKeyCapital)
If CapitalState <> 1 Then
keybd_event vbKeyCapital, 0, 0, 0
keybd_event vbKeyCapital, 0, &H2, 0
End If
End Sub

Private Sub CapitalOff()
Dim CapitalState As Byte

CapitalState = GetKeyState(vbKeyCapital)
If CapitalState = 1 Then
keybd_event vbKeyCapital, 0, 0, 0
keybd_event vbKeyCapital, 0, &H2, 0
End If
End Sub