PDA

View Full Version : سوال: استفاده از کیبرد مجازی برای حروف "ی" و "ک"



wolfstander
سه شنبه 20 اردیبهشت 1390, 07:57 صبح
سوالی که من از دوستان دارم اینه که با توجه به اینکه خیلی از سیستمها در حروف "ی" و "ک" ایراد دارن، چطور میتونم با استفاده از یک کیبرد مجازی، موقعی که کاربر روی دکمه کلیک میکنه، مقدار موجود در تکست باکس بعلاوه حرف کلیک شده بشه و توی تکست باکس قرار بگیره؟
البته ممکنه خیلی از دوستان ، من رو به تاپیکی ارجاع بدن که توش این مشکل با نصب یک نرم افزار حل شده یا استفاده از kbdfa.dll استاندارد ویندوز رو توصیه کنند
متاسفانه، شرکت همکاران سیستم چون نتونسته مشکل رو حل کنه، میاد و از kbdfa.dll اختصاصی خودش استفاده میکنه
حالا تو شرکت ما، حسابداری از سیستم همکاران میره جلو، بقیه استاندارد مایکروسافت هستند
برای همین ، نمیشه همه رو استاندارد کرد
و استفاده از راه حل به نظر من ابلهانه همکاران سیستم که صورت مساله رو حل کرده، به هیچ عنوان درست نیست
حالا راه حل رو در این دیدم، که بدون توجه به بقیه، از استاندارد استفاده کنم
حالا میخوام در موقع جستجوی کاربران، بتونند از هردو استفاده کنند برای جستجوی موارد
برای همین این تاپیک رو باز کردم و سوال کردم
البته از یکی از دوستان هم که راه حلی در این زمینه داشتند، خواستم کمک کنند که سر ایشون شلوغ بود متاسفانه و نشد که از تجربه این دوست خوبمون استفاده کنم
برای همین خواستم از تجربه بقیه دوستان استفاده کنم


با تشکر از شما دوستان خوب

wolfstander
چهارشنبه 21 اردیبهشت 1390, 13:43 عصر
ای داد بیداد
میبینم کسی جواب نمیده
من فایلش رو ضمیمه نکردم
:خجالت:
اینم از فایل که ضمیمه شده
اینها همه اش از مضرات پیریه

hasanr
جمعه 23 اردیبهشت 1390, 12:29 عصر
سلام
منم چندی پیش برای سنجش اعتبار کاربر و تعیین سطح دسترسی همین مشکلو داشتم که از راه دیگه ای و بدون بررسی <ي> و <ك> حل شد

درباره این مشکل هم ایده ای که به نظرم اومد این بود : در رویداد keypress فرمتون ، کد اسکی کلید فشرده شده رو بررسی کنید و اگه برابر کد اسکی <ي> عربی یا <ی> عربی بی نقطه بود بجای آن <ی> فارسی را قرار دهید

با توجه به اطلاعاتی که از شما سراغ دارم به نظرم خودتون می تونین کدهاش رو بنویسین با اینحال برای یادآوری عرض می کنم که از توابع زیر استفاده کنین :



ASC ("A") تبدیل کاراکتر به کد اسکی
CHR(codeAscii) تبدیل کد اسکی به کاراکتر

pmoshir
سه شنبه 19 مهر 1390, 13:19 عصر
سلام
ببخشيد ميشه يه نمونه از اين كد رو برام بزاريد
ممنون

mah3150
شنبه 12 آذر 1390, 11:21 صبح
یه نمونه نبود؟ بخدا ما تازه کاریم گناه چیه؟

wolfstander
شنبه 12 آذر 1390, 13:22 عصر
Private Sub Form_KeyPress(KeyAscii As Integer)
If KeyAscii = 1610 Or KeyAscii = 1609 Then
KeyAscii = 1740

ElseIf KeyAscii = 1603 Then
KeyAscii = 1705
' MsgBox " تبديل ك انجام شد "

End If
End Sub
این بهترین راهه
کاربر حتی اگه کیبردش استاندارد نباشه، حروف رو استاندارد وارد میکنه
این رو توی کل فرمهات بزن
در نتیجه تو دیتابیس هم استاندارد ذخیره میشه

mah3150
شنبه 12 آذر 1390, 17:16 عصر
تبدیل "ی" کو؟ یه مثال میزنی نمیدونم چرا همیشه مثال از خود مسئله ساده تره

wolfstander
یک شنبه 13 آذر 1390, 07:08 صبح
دوست عزیز، چرا شما همیشه دنبال لقمه آماده هستی؟
KeyAscii = 1740
یعنی تبدیل "ی"
شما یک بار کد رو اجرا کن
اگه جواب نگرفتی ، بیا و پست جدید بزن
یه ذره، خیلی کم، به اندازه یک اپسیلون زحمت بده به خودت
خیلی کم
خیلی خیلی کم
لقمه آماده که نمیشه همیشه برات گرفت
اینجوری میشه که دیگه جواب نمیگیری
و هی پست های مختلف میزنی در تاپیک های مختلف
در حالی که جوابت همیشه بوده
برات وجود داشته
برات سمپل گذاشتن
برات کد گذاشتن
ولی خیلی طلبکارانه میای و میگی، پس ی کو؟
حتی اینقدر برای کسایی که بهت پاسخ دادن احترام قائل نمیشی که لحن طلبکارانه نداشته باشی
تشکرف پیشکش
خوش باشی

Masterhame
یک شنبه 13 آذر 1390, 08:03 صبح
سلام دوستان
راه حلهایی که گذاشتین جالب هستن اما یه راه حل مشابه و ساده دیگه هم هست که این زیر براتون می نویسم. اون هم استفاده از تابع Replace مربوط به Stringها میشه:

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

public static string ConvertIt(string str)
{
return str.Replace('ﻱ', 'ی').Replace('ﻚ', 'ک');
}

این تابع هم ی و هم ک رو براتون تبدیل میکنه، ممکنه بعضی از دوستان بگن که خوب الان یک مشکل جدید پیش میاد که هی باید این تابع رو اجرا بکنیم.
در جواب باید بگم که فرض کنید بخشی از اطلاعات ورودی از طریق Copy و Paste وارد فرمها بشه، به این ترتیب شما کنترلی روی متن کپی شده با روشهای قبلی نخواهیم داشت.
دوستانی که حرفه ای تر هستند می تونن از Extentionها هم برای افزودن این تابع به خود کلاس String استفاده بکنن و کارشون بسیار ساده تر بشه.
اما تا همین جاش هم میتونه بسیار مفید و عالی باشه

یک توضیح کوچیک دیگه هم بدم که باید این نکته رو تو ذهن داشته باشید که تعداد (ی)ها و (ک)ها بیشتر اینهاست که ما فکر میکنیم. برای اینکه بدونید چندین (ی) و (ک) وجود داره برید توی Microsoft Word و از بخش Insert قسمت Symbol رو انتخاب کنید. حالا توی لیست کاراکترها که براتون نشون داده میشه ببینید که تعداد زیادی (ی) و (ک) داریم که من سه، چهار موردش رو توی متنهای مختلف دیدم که وجود داشته و برای Parse کردن و جستجو توشون به چنین مشکلاتی بر خورده بودیم.

mah3150
یک شنبه 13 آذر 1390, 09:08 صبح
یه نمونه بذار من نمیدونم public static string تو کجای Event هست؟
آیا باید مثل قبلی تو هر فرم کپی شه؟

Masterhame
دوشنبه 21 آذر 1390, 15:17 عصر
نمونه ای که براتون گذاشتم خودش یک تابع کامل هست
شما این تابع رو می تونید بین Eventهاتون استفاده کنید. یعنی بعد از علامتهای {} که Eventها دارند، شما باید اون تابعی که نوشتم رو بنویسید.

روش استفاده از اون هم به این شکل هست که هر جای اون فرم یا کلاس که خواستید از این تابع استفاده کنید چیزی شبیه به همین کد رو باید بنویسید:

string X = ConvertIt(TextBox1.Text);

Abbas Amiri
سه شنبه 22 آذر 1390, 23:29 عصر
با تابع زیر می توان حروف مورد بحث را در تمام رکوردهای یک جدول تغییر داد



Sub ChangeUnicode(tableName As String)
Dim rs As Recordset
Dim fld As Field
Set rs = CurrentDb.OpenRecordset(tableName)
Do While Not rs.EOF
rs.Edit
For Each fld In rs.Fields
If Not IsNull(fld) Then
fld = Replace(fld, ChrW(1603), ChrW(1705))
fld = Replace(fld, ChrW(1610), ChrW(1740))
End If
Next
rs.Update
rs.MoveNext
Loop
rs.Close
End Sub

عباس عباس
دوشنبه 09 بهمن 1391, 17:05 عصر
سلام ببخشید تا جایی که من متوجه شدم این کدها یااطلاعات دیتابیس را تغییر میدن یا زمان تایپ حروف رااصلاح می کنند من کدی میخوام که چیزی را تغییر نده وفقط زمان سرچ وقتی (ی یا ي) نوشتیم همه را پیدا کنه فارغ عربی یا فارسی بودنش همینطور برای (ک)
بازهم اگر کج فهمیدم به مبتدی بودنم ببخشید

abdoreza57
یک شنبه 25 فروردین 1392, 12:05 عصر
سلام

كد مورد اشاره استاد اميري به نظر ميرسه تو خيلي از موارد به درد بخوره

مشكلم اين هست كه نتونستم با اين كد به خواسته ام برسم
متاسفانه تاپيك طولاني شد ولي مثلا تو انن نمونه (http://barnamenevis.org/attachment.php?attachmentid=66275&d=1297524898) هر كاري كردم نشد تمام حروف ي و ك را يكسان سازي كرد
تيبل پرسنال داراي هر دو نوع" ي" هست كه با اين كد تغييري نميكنه !
لطفا راهنمايي براي مبندي ها بكنيد مثل خودم
ممنون از توجهتون

Abbas Amiri
یک شنبه 25 فروردین 1392, 18:10 عصر
برای تست این که تغییر میدهد یا نه کافیه یک خط کد به روال فوق اضافه کنید تا فیلدهایی که تغییر کرده اند را ببینید



If Not IsNull(fld) Then
If InStr(fld, ChrW(1610)) Or InStr(fld, ChrW(1603)) Then Debug.Print fld
fld = Replace(fld, ChrW(1603), ChrW(1705))
fld = Replace(fld, ChrW(1610), ChrW(1740))
End If

abas1388
یک شنبه 25 فروردین 1392, 19:19 عصر
با تابع زیر می توان حروف مورد بحث را در تمام رکوردهای یک جدول تغییر داد



Sub ChangeUnicode(tableName As String)
Dim rs As Recordset
Dim fld As Field
Set rs = CurrentDb.OpenRecordset(tableName)
Do While Not rs.EOF
rs.Edit
For Each fld In rs.Fields
If Not IsNull(fld) Then
fld = Replace(fld, ChrW(1603), ChrW(1705))
fld = Replace(fld, ChrW(1610), ChrW(1740))
End If
Next
rs.Update
rs.MoveNext
Loop
rs.Close
End Sub


سلام
من این کد را بر روی نمونه ای که آقای abdoreza57 آپلود نموده بودند امتحان کردم و در زمان اجرا خطای «فیلد نمی تواند آپدیت گردد» صادر میشود.
باتشکر

abdoreza57
یک شنبه 25 فروردین 1392, 22:34 عصر
سلام جناب اميري

نميدونم چرا تو اين مورد اينقدر دوزايم كجه !!! اصلا نميگيرم ...
خيليم كلنجار رفتم نتونستم ! هر كاري ميكنم نميتونم عطاي كدتون را به لقاش ببخشم لطفا يه نمونه بذاريد اگه امكانش هست

خدا نگهدار

Abbas Amiri
یک شنبه 25 فروردین 1392, 22:52 عصر
سلام فرم شما را گذاشتم فقط در جدول پرسنل بعضی از حروف ی و ک را به فرمت XP تغییر دادم ویک کپی از آن گرفتم . در فرم یک با فشردن باتن ، حروف جدول پرسنل 2 تصحیح میشود .
با جدول پرسنل مقایسه اش کنید .

chiristian
دوشنبه 27 خرداد 1392, 20:28 عصر
سلام به همه دوستان من در sql با ي و ك مشكل داشتم با اين dll مشكلم حل شد . متاسفانه dll هاي زيادي هست ولي هيچ كدوم كار نكرد جز اين ، فقط بايد تو سيستم كپي كني ، اميدوارم كمكت كنه در help فايل ضميمه توضيحات هست
win 7 64bit & 32bit
win xp

SANBOR
پنج شنبه 11 شهریور 1400, 20:12 عصر
سلام دوستان
راه حلهایی که گذاشتین جالب هستن اما یه راه حل مشابه و ساده دیگه هم هست که این زیر براتون می نویسم. اون هم استفاده از تابع Replace مربوط به Stringها میشه:

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

public static string ConvertIt(string str)
{
return str.Replace('ﻱ', 'ی').Replace('ﻚ', 'ک');
}

این تابع هم ی و هم ک رو براتون تبدیل میکنه، ممکنه بعضی از دوستان بگن که خوب الان یک مشکل جدید پیش میاد که هی باید این تابع رو اجرا بکنیم.
در جواب باید بگم که فرض کنید بخشی از اطلاعات ورودی از طریق Copy و Paste وارد فرمها بشه، به این ترتیب شما کنترلی روی متن کپی شده با روشهای قبلی نخواهیم داشت.
دوستانی که حرفه ای تر هستند می تونن از Extentionها هم برای افزودن این تابع به خود کلاس String استفاده بکنن و کارشون بسیار ساده تر بشه.
اما تا همین جاش هم میتونه بسیار مفید و عالی باشه

یک توضیح کوچیک دیگه هم بدم که باید این نکته رو تو ذهن داشته باشید که تعداد (ی)ها و (ک)ها بیشتر اینهاست که ما فکر میکنیم. برای اینکه بدونید چندین (ی) و (ک) وجود داره برید توی Microsoft Word و از بخش Insert قسمت Symbol رو انتخاب کنید. حالا توی لیست کاراکترها که براتون نشون داده میشه ببینید که تعداد زیادی (ی) و (ک) داریم که من سه، چهار موردش رو توی متنهای مختلف دیدم که وجود داشته و برای Parse کردن و جستجو توشون به چنین مشکلاتی بر خورده بودیم.


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



namespace FastReport
{
public class ReportScript
{
//For Title
public static string ConvertIt(string ProductNameLabel)
{
return ProductNameLabel.Replace('ﻱ', 'ی').Replace('ﻚ', 'ک');
}

}

SANBOR
شنبه 13 شهریور 1400, 11:41 صبح
کسی نیست کمک کنه ؟

SANBOR
دوشنبه 15 شهریور 1400, 09:23 صبح
یک یاری به بنده کنید. این مشکل رو بتوانم برطرف کنم
ممنون

mazoolagh
دوشنبه 15 شهریور 1400, 12:17 عصر
یک یاری به بنده کنید. این مشکل رو بتوانم برطرف کنم
ممنون

1- کدهای شما (و همینجور کاربری که از کدش استفاده کردین) #C هست و باید در بخش خودش مطرح کنین.
2- پاسخ مربوط به اکسس در پست های آقای امیری آمده.

SANBOR
شنبه 20 شهریور 1400, 08:38 صبح
میشه لینکش رو بهم بدید
پیداش نمیکنم

mazoolagh
چهارشنبه 24 شهریور 1400, 11:37 صبح
میشه لینکش رو بهم بدید
پیداش نمیکنم

در صفحه اصلی تالار بخش #C رو میبینین.