برگزیده های پرشین تولز

منحصر كردن drivelistbox

sylvester

Registered User
تاریخ عضویت
26 مارس 2007
نوشته‌ها
526
لایک‌ها
89
محل سکونت
ترکیه
سلام
من ميخواستم بدونم چطوري ميتونم كاري كنم كه در يك drivelistbox فقط درايو هاي سي دي نمايش داده بشه و پارتيشن هاي هارد رو ناديده بگيره!:happy:
 

pirmard

Registered User
تاریخ عضویت
21 آگوست 2007
نوشته‌ها
841
لایک‌ها
5
سلام
من ميخواستم بدونم چطوري ميتونم كاري كنم كه در يك drivelistbox فقط درايو هاي سي دي نمايش داده بشه و پارتيشن هاي هارد رو ناديده بگيره!:happy:

خود اون کنترل که همچین امکانی فکر نکنم داشته باشه
شما می تونی دقیقا" مثل همونو شبیه سازی کنی خودت .
 

Shine

Registered User
تاریخ عضویت
3 ژوئن 2007
نوشته‌ها
150
لایک‌ها
12
خوبه ؟ :cool:
موفق باشید :)
 

فایل های ضمیمه

  • GetCDROMDrive.zip
    1.8 KB · نمایش ها: 4

sylvester

Registered User
تاریخ عضویت
26 مارس 2007
نوشته‌ها
526
لایک‌ها
89
محل سکونت
ترکیه
خوبه ؟ :cool:
موفق باشید :)
دست شما درد نكنه! زحمت كشيدين كل كد برنامه رو گذاشتين:)
طبق معمول api كه من بلد نيستم. انگار vb بدون api دو زار نمي ارزه!!!
فقط يه نگاهي به اين عكس بندازين
2dt39ep.jpg

من چنين چيزي مد نظرم بود. همون جوري كه ملاحضه ميكنيد نام سي دي رو ميشه در combobox ديد به همراه آيكون كه البته ايكون نشون بده يا نه مهمم نيست. ولي volume label cd !!!!!!رو چه كنم
 

erroring

Registered User
تاریخ عضویت
4 دسامبر 2006
نوشته‌ها
297
لایک‌ها
2
محل سکونت
PDC (Parvazeh Developing Center)
خوب اون قسمت از برنامه که بعد از چک کردن اینکه درایو سی دی هست یا خیر که در صورت مثبت بودن شرط اون داریو رو تو کمبو اد میکنه موقع اد کردن باید label اونو هم بگیری. و مقابل نامش اد کنی. من متوجه نشدم می خوای Label باشه یا نباشه؟
 

sylvester

Registered User
تاریخ عضویت
26 مارس 2007
نوشته‌ها
526
لایک‌ها
89
محل سکونت
ترکیه
salam!
من چجوري ميتونم label cd سي دي رو بگيرم! بايد از چه تابعي استفاده كنم!
 

Shine

Registered User
تاریخ عضویت
3 ژوئن 2007
نوشته‌ها
150
لایک‌ها
12
با تابع GetVolumeInformation
اگه هم که صبر می دی خودم فردا برات می زارم اینجا !
 

sylvester

Registered User
تاریخ عضویت
26 مارس 2007
نوشته‌ها
526
لایک‌ها
89
محل سکونت
ترکیه
با تابع GetVolumeInformation
اگه هم که صبر می دی خودم فردا برات می زارم اینجا !
دست شما درد نكنه. الان ميرم تست كنم. شما هم اگر زحمت بكشين ممنوم ميشم. ميخوام كد هاي ساده خودم رو با مال شما مقايسه كنم:)
 

Shine

Registered User
تاریخ عضویت
3 ژوئن 2007
نوشته‌ها
150
لایک‌ها
12
بفرمایید :cool:
 

فایل های ضمیمه

  • GetCDROMDrive !.zip
    2 KB · نمایش ها: 4

sylvester

Registered User
تاریخ عضویت
26 مارس 2007
نوشته‌ها
526
لایک‌ها
89
محل سکونت
ترکیه
......................... اضافه شد:
من امروز يكم با برنامه كار كردم. روش دوستمون شاين اينجوريه كه اول نوع درايو را مشخص ميكنه با استفاده از api commands اگردرايو از نوع سي دي رام بود اونقت نام و ليبل اون رو به يه combobox اضافه ميكنه.
براي من جالبه اگر بشه همون طور كه گفتم خود عنصر drivelistbox رو فيلتر كرد كه فقط درايو هاي سي دي رو نشون بده. آخه اين عنصر يه كم اينتر فيس جالبتري نسبت به كمبو باكس داره از جمله نمايش آيكون درايو!:)
من فكر كنم شدني باشه. ولي چجوريشو نتونستم هنوز بفهمم!!!!
 

m3hrz4d

Registered User
تاریخ عضویت
21 سپتامبر 2005
نوشته‌ها
620
لایک‌ها
1
محل سکونت
اصفهان
سلام.بهترین نوشتن دوباره ی کد و ساختن یک List به صورت دستی هست اما اگه اصرار داری میتونی با استفاده از Windows API , اون عناصری از لیست که سی دی رام نیستن رو حذف کنی.توی این کد با تابع GetDriveType چک میکنیم که درایو سی دی رام هست یا نه اگه نبود با استفاده از تابع SendMessage و ثابت CB_DELETESTRING عضو مربوطه رو حذف میکنیم.بعد هم ایندکس جدید لیست رو تعیین میکنیم:
کد:
Private Declare Function GetDriveType Lib "kernel32" Alias "GetDriveTypeA" (ByVal nDrive As String) 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
Private Const CB_DELETESTRING = &H144
Private Const DRIVE_CDROM = 5

Private Sub FilterDriveListBox(DriveLB As DriveListBox, Optional NewSelIndex As Long = -1)
    
    Dim i As Integer
    Dim nDrive As String
    
     For i = 1 To DriveLB.ListCount Step 1
         nDrive = Chr(i + 64) & ":\"
        If (GetDriveType(nDrive) <> DRIVE_CDROM) Then
            SendMessage DriveLB.hwnd, CB_DELETESTRING, 0, i - 1
       End If
     Next
     
    If (DriveLB.ListCount > NewSelIndex And NewSelIndex >= 0) Then DriveLB.ListIndex = NewSelIndex
     
End Sub

Private Sub Form_Load()
    Call FilterDriveListBox(Drive1, 0)
End Sub

البته دخالت اینطوری توی کنترل های ویبی همیشه خوب نیست و ممکنه مشکلاتی رو درست کنه.ولی اون رو من یه تست کوچیک کردم ظاهرا مشکلی نداشت.
 

sylvester

Registered User
تاریخ عضویت
26 مارس 2007
نوشته‌ها
526
لایک‌ها
89
محل سکونت
ترکیه
اقا ممنون! چه كد خوشكليه:D برم تستش كنم ببينم چجورياست
 
بالا