PDA

View Full Version : سوال: ساخت پنجره اي مانند پنجره Save



MohammadGh2011
سه شنبه 10 آبان 1390, 21:30 عصر
سلام عليکم
دوستان شما حتما با Commondialog.ShowSave کار کرديد.
من ميخوام يه همچين پنجره اي البته خيلي ساده نه به اون صورت، بسازم.
سوال:
چگونه درايوها و پوشه ها و فايل ها ي سيستم رو نشون بدم مثلا تو يک ليست باکس.که وقتي کامند رو کليک کردم يه فورمي باز بشه (که خودم طراحي کردم)و اول تعداد درايوهام و خود درايوهام رو و دسکتاپ رو نشون بده و وقتي يک درايو رو باز کردم پوشه ها و فايل هاي داخل اون درايو رو نشون بده، خلاصه مثل خود پنجره ي Save.
و تو يک کمبوباکس ميخوام فورمت Save رو نشون بدم مثلا(txt.*) و يه کمبو باکس ديگه برايEncoding.
و اون رو(متن داخل تکست باکس يک رو) با TXT اون مسيري که براش تعيين کردم ذخيره کنه.

اميدوارم که منظورم رو متوجه شده باشيد.و بتونين راهنماييم کنيد.
اگه ميشه لطفا سورس ضميمه نکنيد. و همين جا توضيح بديد.


ممنونم

mr-adler
سه شنبه 10 آبان 1390, 23:19 عصر
بشه (که خودم طراحي کردم)و اول تعداد درايوهام و خود درايوهام رو و دسکتاپ رو نشون بده و وقتي يک درايو رو باز کردم پوشه ها و فايل هاي داخل اون درايو رو نشون بده
یه قسمتش اینه که میتونید از drive1 & dir1 & file1 از این اشیا استفاده کنید جهت نشون دادن فایل ها و غیره...
تا همین جا رو میدونم . اما سعی میکنم اگه دوباره چیزی به ذهنم رسید بگم.

موفق باشید

MohammadGh2011
سه شنبه 10 آبان 1390, 23:32 عصر
ممنونم از شما دوست عزيز
اون جوري که ميخواستم بشه با اين کنترل ها نشد.اگه کامل توضيح بديد بهتره.

دوستان عزيز وقتي خود Commondialog.ShowSave رو که ميزنم ، Encoding نداره در حالي که پنجره Save برنامه نودپد داره.
اين Encoding خيلي مهمه که Unicode و UTF-8بايد تو برنامم ازش استفاده کنم که وقتي محتويات داخل RichTextBox1 رو ذخيره ميکنم به صورت Unicode برام ذخيره کنه.

اول اين سوال رو جواب بديد:
چگونه متن داخل RichTextBox1 رو به صورت Unicode ذخيره کنم؟

kitcat_m18
سه شنبه 10 آبان 1390, 23:33 عصر
يه ماژول هست که ديالوگ Open ويندوز رو باهاش مي توني نشون بدي.
ماژول خوب و بسيار کاربردي اي هست الان دم دستم نيست برات بفرستم يه سرچ بزن پيداش کن يه کم روش کار کن حتما به دردت مي خوره :لبخندساده:
موفق باشي.

mr-adler
چهارشنبه 11 آبان 1390, 01:58 صبح
يه ماژول هست که ديالوگ Open ويندوز رو باهاش مي توني نشون بدي.
ماژول خوب و بسيار کاربردي اي هست الان دم دستم نيست برات بفرستم يه سرچ بزن پيداش کن يه کم روش کار کن حتما به دردت مي خوره :لبخندساده:
موفق باشي.
اگه این روش رو پیگیری کنید بهتره
اما...

چگونه متن داخل RichTextBox1 رو به صورت Unicode ذخيره کنم؟
البته من از مباحث یونیکد اطلاع چندانی ندارم ولی اونطور که جناب kitcat_m18 (http://barnamenevis.org/member.php?139522-kitcat_m18) میگفت وی بی 6 مباحث یونیکد رو ساپورت درست و حسابی نمیکنه.
اما اینطور میشه متن داخل تکست باکس رو به صورت یونیکد(تبدیل شده به یونیکد) ذخیره کرد...

Private Sub Command1_Click()
a = StrConv(Text1.Text, vbUnicode)
Open "d:\war.txt" For Output As #1
Print #1, a
Close #1
End Sub

kitcat_m18
چهارشنبه 11 آبان 1390, 12:37 عصر
اما اینطور میشه متن داخل تکست باکس رو به صورت یونیکد(تبدیل شده به یونیکد) ذخیره کرد...

Private Sub Command1_Click()
a = StrConv(Text1.Text, vbUnicode)
Open "d:\war.txt" For Output As #1
Print #1, a
Close #1
End Sub





بله اما به چه يوني کدي؟؟؟ :چشمک:

kitcat_m18
چهارشنبه 11 آبان 1390, 12:56 عصر
اينارم بخوني بد نيست:

http://www.iranled.com/forum/thread-20154.html
http://forum.persiantools.com/t119657.html
http://barnamenevis.org/showthread.php?292824-%D9%85%D8%B4%DA%A9%D9%84-%D8%A8%D8%A7-%DA%A9%D8%A7%D8%B1%D8%A7%DA%A9%D8%AA%D8%B1-%D9%87%D8%A7%DB%8C-%D9%81%D8%A7%D8%B1%D8%B3%DB%8C-%D8%AF%D8%B1-%D8%AE%D9%88%D9%86%D8%AF%D9%86-%D8%A8%D8%A7-winsock/page2
http://www.iranled.com/forum/thread-5452.html

لينک ها متنوع هستن که بدوني يونيکد داريم تا يونيک :لبخند: من درباره برنامه هاي None-Unicode صحبت کرده بودم که VB يکي از اوناست :چشمک: لينک ها رو حتما سر بزن تا متوجه منظورم بشي.
موفق باشي :لبخندساده:

mr-adler
چهارشنبه 11 آبان 1390, 15:09 عصر
اينارم بخوني بد نيست:

http://www.iranled.com/forum/thread-20154.html
http://forum.persiantools.com/t119657.html
http://barnamenevis.org/showthread.php?292824-%D9%85%D8%B4%DA%A9%D9%84-%D8%A8%D8%A7-%DA%A9%D8%A7%D8%B1%D8%A7%DA%A9%D8%AA%D8%B1-%D9%87%D8%A7%DB%8C-%D9%81%D8%A7%D8%B1%D8%B3%DB%8C-%D8%AF%D8%B1-%D8%AE%D9%88%D9%86%D8%AF%D9%86-%D8%A8%D8%A7-winsock/page2
http://www.iranled.com/forum/thread-5452.html

لينک ها متنوع هستن که بدوني يونيکد داريم تا يونيک :لبخند: من درباره برنامه هاي None-Unicode صحبت کرده بودم که VB يکي از اوناست :چشمک: لينک ها رو حتما سر بزن تا متوجه منظورم بشي.
موفق باشي :لبخندساده:

تمامشون رو خوندم اما چیز زیادی متوجه نشدم...
فقط گفتن که زمانی که وی بی داشت ساخته میشد تازه اوایل مطرح کردن مبحث یونیکد بود به همین دلیل ساپورت نمیکنه.
فعلا با کاراکتر های فارسی و ... کاری ندارم ولی وقتی یه برنامه رو تو ریسورس ذخیره میکنم و بعد دوباره از ریسورس تو هارد ذخیره میکنم قبلش باید به یونیکد تبدیل کرد دیگه(؟) . اینجا مشکلی نداره و کار میکنه
اگه ممکنه یه توضیح کلی و بسیار مختصر بدید ممنون میشم. چون تو این سایت هم نمونه دقیقش نیست .

ممنون

MohammadGh2011
چهارشنبه 11 آبان 1390, 15:53 عصر
سلام عليکم
دوستان خوب چه طور فايل متنيم رو با UTF-8 ذخيره کنم؟

_behnam_
چهارشنبه 11 آبان 1390, 19:36 عصر
اینجوری :بامزه:
Data = UTF8_Decode(Data)
و
Data = UTF8_Encode(Data)



Public Function UTF8_Encode(ByVal sStr As String)
Dim L As Long, lChar As Long, sUTF8 As String
For L& = 1 To Len(sStr)
lChar& = AscW(Mid(sStr, L&, 1))
If lChar& < 128 Then
sUTF8$ = sUTF8$ + Mid(sStr, L&, 1)
ElseIf ((lChar& > 127) And (lChar& < 2048)) Then
sUTF8$ = sUTF8$ + Chr(((lChar& \ 64) Or 192))
sUTF8$ = sUTF8$ + Chr(((lChar& And 63) Or 128))
Else
sUTF8$ = sUTF8$ + Chr(((lChar& \ 144) Or 234))
sUTF8$ = sUTF8$ + Chr((((lChar& \ 64) And 63) Or 128))
sUTF8$ = sUTF8$ + Chr(((lChar& And 63) Or 128))
End If
Next L&
UTF8_Encode = sUTF8$
End Function
'===============================Farsi nevisi
Public Function UTF8_Decode(ByVal sStr As String)
Dim L As Long, sUTF8 As String, iChar As Integer, iChar2 As Integer
sStr = Replace(sStr, "ÛŒ", UTF8_Encode("í"))
sStr = Replace(sStr, "Ù‰", UTF8_Encode("í"))
For L = 1 To Len(sStr)
iChar = Asc(Mid(sStr, L, 1))
If iChar > 127 Then
If Not iChar And 32 Then
iChar2 = Asc(Mid(sStr, L + 1, 1))
sUTF8 = sUTF8 & ChrW$(((31 And iChar) * 64 + (63 And iChar2)))
L = L + 1
Else
Dim iChar3 As Integer
iChar2 = Asc(Mid(sStr, L + 1, 1))
iChar3 = Asc(Mid(sStr, L + 2, 1))
'sUTF8 = sUTF8 & ChrW$(((iChar And 15) * 16 * 256) + ((iChar2 And 63) * 64) + (iChar3 And 63))
L = L + 2
End If
Else
sUTF8 = sUTF8 & Chr$(iChar)
End If
Next L
UTF8_Decode = sUTF8
End Function

Public Function EncodeString(StrText As String) As String
On Error Resume Next
Dim I As Integer, bEnc As String
For I = 1 To Len(StrText)
bEnc = bEnc & "%" & Hex(Asc(Mid(StrText, I, 1)))
Next
EncodeString = bEnc
End Function

محسن واژدی
چهارشنبه 11 آبان 1390, 21:27 عصر
سلام علیکم
با شی ADODB Stream هم میتوانید متن را بصورت utf-8 ذخیره کنید

Public Sub SaveToUTF8(ByVal sSavePath$, ByVal sText$)
Dim StrObj As Object
Set StrObj = CreateObject("ADODB.Stream")
With StrObj
.Open
.Position = 0
.Charset = "UTF-8"
.WriteText sText$
.SaveToFile sSavePath$
.Close
End With
Set StrObj = Nothing
End Sub

charset پیش فرض unicode است

به عنوان مثال

Private Sub Command1_Click()
SaveToUTF8 "c:\utf8.txt", "سلام"
End Sub


موفق باشید

MohammadGh2011
چهارشنبه 11 آبان 1390, 21:51 عصر
کد آقاي واژدي به درستي عمل ميکند.به نتيجه اي رسيديم
من از تمامي دوستان ممنونم که تو اين تاپيک شرکت کردن مخصوصا از آقاي واژدي عزيز.


موفق و پيروز باشيد

MohammadGh2011
چهارشنبه 11 آبان 1390, 22:01 عصر
راستي قرار بود که پنجره ي ساده Save درست کنيم!!!:متفکر:


چگونه درايوها و پوشه ها و فايل ها ي سيستم رو نشون بدم مثلا تو يک ليست باکس.که وقتي کامند رو کليک کردم يه فورمي باز بشه (که خودم طراحي کردم)و اول تعداد درايوهام و خود درايوهام رو و دسکتاپ رو نشون بده و وقتي يک درايو رو باز کردم پوشه ها و فايل هاي داخل اون درايو رو نشون بده، خلاصه مثل خود پنجره ي Save.
:متفکر::متفکر::متفکر:

ASedJavad
چهارشنبه 11 آبان 1390, 22:44 عصر
سلام
ببین اینجوری کارت راه نمیفته:

Private Sub Form_Load()
CommonDialog1.Filter = "Ansii Text|*.txt|Unicode Text|*txt|UTF-8 Text|*.txt"
CommonDialog1.FilterIndex = 1
CommonDialog1.ShowSave
Select Case CommonDialog1.FilterIndex
Case 1
'Select Ansii
Case 2
'Select Unicode
Case 3
'Select Utf-8
End Select
End Sub

MohammadGh2011
چهارشنبه 11 آبان 1390, 22:57 عصر
سلام عليکم
من اصلا نميخوام از کنترل Commondialog استفاد کنم.
ميخوام تويک فورم طراحيش کنم
فقط پست 1 يا پست 13 رو شما بخونيد ببينيد ميتونيد راهنماييم کنيد.



ممنون

ASedJavad
چهارشنبه 11 آبان 1390, 23:08 عصر
اونا رو خوندم
ولی اگه بخوای چیز تمیزی دربیاری (اونطور که نوشتی) یا باید اینترنت رو زیرورو کنی دنبال یک کامپوننت بدرد بخور یا با یه چیزی مثل کامنددیالوگ یه جورایی مشکلتو حل کنی (مثل اون کدی که برات گذاشتم) یا بشینی از صفر خورت کامپوننت مورد نظرتو طراحی کنی .
مثلا برا اینکه یه کمبو باشه که توش درایوها و مای کامپیوترو دسکتاپ رو نشون بده باید بشینی آدرس دسکتاپ و ... و ... دربیاری بعد تو یه کمبو desktop , ... , لیست درایوهاتو add کنی بعد یه آیکون هم بهشون اضافه کنی. تا تقریبا بشه مثل اون چیزی که میخوای و همین طور برا بقیه قسمتاش.
در مورد ریز قسمتاش مثلا پیدا کردن آدرس دسکتاپ و افزودن آیکون به کمبو باکس و ... تو همین سایت جستجو کنی یه چیزایی دستت میاد.
در ضمن تا اونجایی که من بررسی کردم کنترل dir خود ویبی قابلیت نمایش فولدرهای hidden رو نداره.
البته تو کامپوننتای نوشته شده جستجو کنی احتمالا چیز بدرد بخوری پیدا کنی.
حالا یه سوال
براچی نمیخوای از کامنددیالوگ استفاده کنی؟ شاید بشه با این کنترل کارت رو تتاحدودی راه انداخت

MohammadGh2011
چهارشنبه 11 آبان 1390, 23:30 عصر
ممنونم از توضيحاتي که فرموديد

براچی نمیخوای از کامنددیالوگ استفاده کنی؟ شاید بشه با این کنترل کارت رو تتاحدودی راه انداخت
چون نميخوام از کامپوننت استفاده کنم و چون پنجره ي Commondialog يه کم بزرگه و يه کم چيزهاي زيادي داره و من ميخوام خيلي ساده يه همچين چيزي بسازم.
اگه اساتيد عزيز رهنمايي کنند خيلي خوبه.چون من ميخوام شروع کنم.

محسن واژدی
پنج شنبه 12 آبان 1390, 06:26 صبح
سلام
بخش DriveList را هم میتوانیم از drive-list وی بی و هم آنرا درایوهای موجود را در یک tree-view قرار بدهید، در مورد نمایش محتویات درایو هم میتوانید از list-view استفاده کنید، که طبیعتا در اینصورت همیشه بایستی کامپوننت mscomctl.dll را هم بهمراه برنامه عرضه کنید، راه دیگر هم میتوانید یک list-view خیلی ساده فقط جهت نمایش آیکون های فولدر انتخاب شده در لیست بنویسید
البته در هریک از موارد بالا کمی تا قسمتی کدنویسی پیچیده میشود، که میتوانید سورس های متعددی را از سایت هایی مانند planet-source-code.com که برای common-dialog سفارشی نوشته شده است را دانلود و مطالعه کنید

موفق باشید

ASedJavad
پنج شنبه 12 آبان 1390, 14:53 عصر
اگه مشکلت فقط اینه که نمیخوای از کامپوننت استفاده کنی میتونی از ای پی آی GetSaveFileName استفاده کنی
که دقیقا کار همون کامند دیالوگ رو انجام میده بدون نیاز به کامپوننت

MohammadGh2011
پنج شنبه 12 آبان 1390, 15:08 عصر
سلام عليکم
مشکل حل شد و با راهنمايي اساتيد به نتيجه اي رسيدم.
مشکل UTF-8 رو از کد دوست عزيزم آقاي واژدي دارم استفاده ميکنم.
و مشکل درايوها و پوشه ها رو از کنترل هايDriveListBox و DirListBox استفاده کردم.خلاصه يه پنجره ي save زيبا،ساده و کوچک شده.

از تمامي دوستان که سعي داشتند راهنمايي کنند سپاس گذارم.

SlowCode
دوشنبه 14 آذر 1390, 11:21 صبح
در ضمن تا اونجایی که من بررسی کردم کنترل dir خود ویبی قابلیت نمایش فولدرهای hidden رو نداره.
نخیر اینطور نیست، لطفا به تصویر زیر دقت کنین.


خلاصه يه پنجره ي save زيبا،ساده و کوچک شده.
آقا محمد میشه برای ما هم آپ کنی؟ شاید به دردمون خورد.

MohammadGh2011
دوشنبه 14 آذر 1390, 17:18 عصر
سلام عليکم

آقا محمد میشه برای ما هم آپ کنی؟ شاید به دردمون خورد.
براتون ضميمه کردم ميتونيد دانلود کنيد.اگه از نظر شما زيبا نبود؛ديگه ببخشيد.

SlowCode
چهارشنبه 16 آذر 1390, 03:13 صبح
خواهش می کنم، فقط:
1- فایل رو فقط توی درایو C ذخیره می کنه ولی وقتی فرمت رو عوض می کنم توی مکان دلخواه ذخیره می کنه!:متعجب:
2- بهتره به جای Image از PictureBox استفاده کنید.:خجالت:

MohammadGh2011
چهارشنبه 16 آذر 1390, 10:36 صبح
سلام عليکم

- فایل رو فقط توی درایو C ذخیره می کنه ولی وقتی فرمت رو عوض می کنم توی مکان دلخواه ذخیره می کنه!
من الان دوباره امتحان کردم و هر جايي که بخواهيد از توي هارد سيستمتون براتون ذخيره ميکنه.
اون درايوي که ميخواهيد فايل داخلش ذخيره بشه از اولين کمبوباکس ميتونيد نام درايوهاتون رو انتخاب کنيد.


موفق باشيد.

one hacker alone
دوشنبه 17 مهر 1391, 16:18 عصر
سلام علیکم
با شی ADODB Stream هم میتوانید متن را بصورت utf-8 ذخیره کنید

Public Sub SaveToUTF8(ByVal sSavePath$, ByVal sText$)
Dim StrObj As Object
Set StrObj = CreateObject("ADODB.Stream")
With StrObj
.Open
.Position = 0
.Charset = "UTF-8"
.WriteText sText$
.SaveToFile sSavePath$
.Close
End With
Set StrObj = Nothing
End Sub

charset پیش فرض unicode است

به عنوان مثال

Private Sub Command1_Click()
SaveToUTF8 "c:\utf8.txt", "سلام"
End Sub


موفق باشید

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

danialafshari
شنبه 28 اردیبهشت 1392, 15:49 عصر
سلام
کد Command رو به این شکل تغییر بدید :
myfile = Dir$("c:\utf8.txt", vbNormal)
If (myfile = "utf8.txt") Then
Kill "c:\utf8.txt"
End If
SaveToUTF8 "c:\utf8.txt", "ÓáÇã"
MsgBox "ÇäÌÇã ÔÏ"