PDA

View Full Version : سوال: مشكل با حرف ى



ali44970315
سه شنبه 01 اردیبهشت 1394, 22:01 عصر
سلام
اگر فايلي رو فراخوان كنيد كه ئ ( فارسي) درش باشه ارور ميده
البته با ى عربي مشكل نداره
تشكر

میلاد علوی
چهارشنبه 02 اردیبهشت 1394, 19:21 عصر
text1=replace(text1, یای عربی رو بنویسید , یای فارسی رو بنویسید )

ali44970315
چهارشنبه 02 اردیبهشت 1394, 20:59 عصر
باتشكر منظور من فراخوان يك فايل است يعني مثلا يك عكسي كه در يك آدرس مشخص در سيستم است و در اسم اون ياي فارسي وجود دارد را وقتي مي خواهيم توسط commondialog در يك picturebox لود كنيم با ارور file not found مواجه مي شويم

vbhamed
پنج شنبه 03 اردیبهشت 1394, 13:10 عصر
سلام
یا باید کد پیج ویندوز رو اصلاح کنید که البته انجام این کار روی کامپیوتر کاربران با دردسر همراهه
یا فایل رو به صورت باینری باز کنید و ی های مورد نظر رو تغییر بدین سپس از اون استفاده کنید

ali44970315
پنج شنبه 03 اردیبهشت 1394, 15:26 عصر
سلام از توجهتون ممنونم خودم به روش ديگه اي مشكل رو حل كردم به اين صورت كه يك برنامه كه در فرم لودش commondialog باز ميشه رو با وي بي دات نت نوشتم و در برنامه ويبي6 ام با دستور shell اون رو اجرا كردم در واقع فقط يك تكه برنامه با وي بي دات نت به برنامه ام اضافه كردم كه براي كاربر اصل ا ملموس نيست
اگر كسي به اين روش نياز داشت و متوجه منطورم نشد پيام بذاره تا بيشتر توضيح بدم

meys34
جمعه 04 اردیبهشت 1394, 12:41 عصر
فکر میکنم راحت ترین راه استفاده از ابزار های Unicode هست...

قبلا Codejock رو آپلود کرده بودم میتونید از اینجا دانلود و امتحان کنید...

Codejock.Controls.Unicode.v15.0.1.ocx (http://barnamenevis.org/showthread.php?463997-%D8%AA%D8%A8%D8%AF%DB%8C%D9%84-%D8%AD%D8%B1%D9%81-quot-%D9%8A-quot-%D8%A8%D9%87-quot-%DB%8C-quot-!&p=2078657&viewfull=1#post2078657)

Private Sub Command1_Click()

CommonDialog1.DialogStyle = 1
CommonDialog1.ShowOpen

Shell "notepad """ & CommonDialog1.FileName & """"
End Sub

ali44970315
جمعه 04 اردیبهشت 1394, 22:05 عصر
متاسفانه نتونستم فايل رو دانلود كنم
لطفا راهنمايي بيشتر

vbhamed
یک شنبه 06 اردیبهشت 1394, 08:20 صبح
سلام از توجهتون ممنونم خودم به روش ديگه اي مشكل رو حل كردم به اين صورت كه يك برنامه كه در فرم لودش commondialog باز ميشه رو با وي بي دات نت نوشتم و در برنامه ويبي6 ام با دستور shell اون رو اجرا كردم در واقع فقط يك تكه برنامه با وي بي دات نت به برنامه ام اضافه كردم كه براي كاربر اصل ا ملموس نيست
اگر كسي به اين روش نياز داشت و متوجه منطورم نشد پيام بذاره تا بيشتر توضيح بدم

سلام
خب با این کار برنامتون رو وابسته به NET Framework. کردید که اصلا کار درستی نیست

meys34
دوشنبه 07 اردیبهشت 1394, 20:11 عصر
متاسفانه نتونستم فايل رو دانلود كنم
لطفا راهنمايي بيشتر


سلام

آدرس تاپیک رو دادم اون بالا باید برید به تاپیک مربوطه و از اونجا دانلودش کنید...

اگر نتونستید بگید براتون دوباره آپلود کنم

ali44970315
سه شنبه 08 اردیبهشت 1394, 20:42 عصر
اگه آپلود كنيد خيلي ممنون ميشم فقط يادتون باشه با توضيح كامل چون يه خورده گيجم

meys34
سه شنبه 08 اردیبهشت 1394, 22:39 عصر
خدمت شما

ما هم با همین مثال ها یاد گرفتیما....

ali44970315
چهارشنبه 09 اردیبهشت 1394, 17:05 عصر
ازت ممنونم سورس خوبي بود
اگر ممكنه دو مورد رو برام بهش اضافه كن
يكي اينكه عكس انتخاب شده با commondialog رو داخل يك picturebox نشون بده
دوم اينكه فايل notepad هنگام اجراي دستور ديده نشه
از توجهت پيشتر ممنونم

meys34
چهارشنبه 09 اردیبهشت 1394, 19:14 عصر
سلام

یک عدد Picture1 اضافه کن به فرم:

Private Sub Command1_Click()

CommonDialog1.DialogStyle = 1

CommonDialog1.ShowOpen


Picture1.Picture = LoadPicture(CommonDialog1.FileName)

End Sub

ali44970315
چهارشنبه 09 اردیبهشت 1394, 21:17 عصر
دوست عزيز اگر تايپك رو از اول بخوني سوال من اين بود كه دقيقا همين كد وقتي در اسم فايل ى فارسي باشه ارور ميده در واقع وي بي6 حرف ى فارسي رو نمي شناسه شما خودت امتحان كن ببين ارور ميده

meys34
چهارشنبه 09 اردیبهشت 1394, 21:24 عصر
خیلی خیلی شرمنده...

این جواب میده (قبلا برای یه برنامه ای استفاده کرده بودم...)
'http://support.microsoft.com/kb/175512 'How To Get a Short Filename from a Long Filename

Option Explicit

Private Declare Function GetShortPathName Lib "kernel32" _
Alias "GetShortPathNameW" (ByVal lpszLongPath As Long, _
ByVal lpszShortPath As Long, ByVal cchBuffer As Long) As Long

Private Function GetShortName(ByVal sLongFileName As String) As String
Dim lRetVal As Long, sShortPathName As String, iLen As Integer
'Set up buffer area for API function call return
sShortPathName = Space(32767)
iLen = Len(sShortPathName)

'Call the function
lRetVal = GetShortPathName(StrPtr(sLongFileName), StrPtr(sShortPathName), iLen)
'Strip away unwanted characters.
If lRetVal = 0 Then MsgBox "ERROR Code " & Err.LastDllError & vbCrLf & vbCrLf & vbCrLf & vbCrLf & Command$
GetShortName = Left(sShortPathName, lRetVal)
End Function

Private Sub Command1_Click()

CommonDialog1.DialogStyle = 1

CommonDialog1.ShowOpen


Picture1.Picture = LoadPicture(GetShortName(CommonDialog1.FileName))

End Sub

ali44970315
چهارشنبه 09 اردیبهشت 1394, 23:02 عصر
اين پيغام رو ميده
Cannot find dll entry point getshortpathnamew in kernel32

ali44970315
چهارشنبه 09 اردیبهشت 1394, 23:05 عصر
به آدرسي كه گذاشتي هم سر زدم جوابگو نيست

meys34
پنج شنبه 10 اردیبهشت 1394, 13:33 عصر
سلام


اين پيغام رو ميده
Cannot find dll entry point getshortpathnamew in kernel32

getshortpathnamew باید این شکلی باشه GetShortPathNamW

به هر حال...

این دفعه دیگه OCX رو ضمیمه نکردم اگر اخطار داد باید اونو کپی کنید کنار برنامه...

meys34
یک شنبه 11 مرداد 1394, 15:55 عصر
سلام

با توجه به اینکه به نظر میرسه مشکل هنوز پا برجاست دوباره یه تغییر دیگه دادم:

اینبار به جای استفاده از LoadPicture که با حرف ی مشکل داره از تابع OleLoadPicturePath استفاده کردم:

Private Declare Function OleLoadPicturePath Lib "oleaut32.dll" (ByVal szURLorPath As Long, ByVal punkCaller As Long, ByVal dwReserved As Long, ByVal clrReserved As OLE_COLOR, ByRef riid As GUID, ByRef ppvRet As IPicture) As Long

Private Type GUID
Data1 As Long
Data2 As Integer
Data3 As Integer
Data4(0 To 7) As Byte
End Type

Private Function GetImage(hURLorPath As String, Optional TransparentColor As OLE_COLOR = vbWhite) As StdPicture

Dim uID As GUID

With uID ' // StdPicture GUID {7BF80980-BF32-101A-8BBB-00AA00300CAB}
.Data1 = &H7BF80980
.Data2 = &HBF32
.Data3 = &H101A
.Data4(0) = &H8B
.Data4(1) = &HBB
.Data4(3) = &HAA
.Data4(5) = &H30
.Data4(6) = &HC
.Data4(7) = &HAB
End With

Call OleLoadPicturePath(StrPtr(hURLorPath), 0&, 0&, TransparentColor, uID, GetImage)

End Function

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

علیرضا5
یک شنبه 11 مرداد 1394, 22:36 عصر
با تشکر این کد فقط برای لود عکس در پیکچر باکس کاربرد داره
من می خوام که یک فایل (مثلا doc) رو از یه آدرس به یه آدرس دیگه کپی کنم که با این کد جواب نگرفتم

Love_Program
دوشنبه 12 مرداد 1394, 08:30 صبح
سلام
ببین با این کدی که توی فرم هست مشکلت حل میشه؟؟؟

meys34
سه شنبه 13 مرداد 1394, 17:17 عصر
با تشکر این کد فقط برای لود عکس در پیکچر باکس کاربرد داره
من می خوام که یک فایل (مثلا doc) رو از یه آدرس به یه آدرس دیگه کپی کنم که با این کد جواب نگرفتم

سلام

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

برای کپی فایل:


Private Declare Function CopyFile Lib "kernel32" _
Alias "CopyFileA" (ByVal lpExistingFileName As String, _
ByVal lpNewFileName As String, ByVal bFailIfExists As Long) _
As Long

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

علیرضا5
پنج شنبه 15 مرداد 1394, 16:41 عصر
با تشکر از همه دوستانی که کمک کردن
کد زیر با حرف ی هیچ مشکلی نداره و خیلی هم سادست
فقط یادتون باشه از commondialog کام‍‍‍‍‍‍‍‍‍‍پوننت codjoke استفاده کنید

commondialog اولی فایلی که قراره کپی بشه و commondialog دومی محل ذخیره هست

Dim filesys, demofile
Set filesys = CreateObject("Scripting.FileSystemObject")
CommonDialog.ShowOpen
Set demofile = filesys.GetFile(CommonDialog.FileName)
CommonDialog.ShowSave
demofile.Copy (CommonDialog.FileName)