آژانس هواپیمایی
pop up

منحصر كردن drivelistbox

شروع موضوع توسط sylvester ‏4 اکتبر 2007 در انجمن Visual Basic 6

  1. sylvester

    sylvester Registered User

    تاریخ عضویت:
    ‏26 مارس 2007
    نوشته ها:
    489
    تشکر شده:
    54
    محل سکونت:
    ترکیه
  2. pirmard

    pirmard Registered User

    تاریخ عضویت:
    ‏21 آگوست 2007
    نوشته ها:
    837
    تشکر شده:
    3
    خود اون کنترل که همچین امکانی فکر نکنم داشته باشه
    شما می تونی دقیقا" مثل همونو شبیه سازی کنی خودت .
     
  3. Shine

    Shine Registered User

    تاریخ عضویت:
    ‏3 ژوئن 2007
    نوشته ها:
    122
    تشکر شده:
    12
    خوبه ؟ :cool:
    موفق باشید :)
     

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

  4. sylvester

    sylvester Registered User

    تاریخ عضویت:
    ‏26 مارس 2007
    نوشته ها:
    489
    تشکر شده:
    54
    محل سکونت:
    ترکیه
    دست شما درد نكنه! زحمت كشيدين كل كد برنامه رو گذاشتين:)
    طبق معمول api كه من بلد نيستم. انگار vb بدون api دو زار نمي ارزه!!!
    فقط يه نگاهي به اين عكس بندازين
    [​IMG]
    من چنين چيزي مد نظرم بود. همون جوري كه ملاحضه ميكنيد نام سي دي رو ميشه در combobox ديد به همراه آيكون كه البته ايكون نشون بده يا نه مهمم نيست. ولي volume label cd !!!!!!رو چه كنم
     
  5. erroring

    erroring Registered User

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

    sylvester Registered User

    تاریخ عضویت:
    ‏26 مارس 2007
    نوشته ها:
    489
    تشکر شده:
    54
    محل سکونت:
    ترکیه
  7. boxilink
  8. Shine

    Shine Registered User

    تاریخ عضویت:
    ‏3 ژوئن 2007
    نوشته ها:
    122
    تشکر شده:
    12
    با تابع GetVolumeInformation
    اگه هم که صبر می دی خودم فردا برات می زارم اینجا !
     
  9. sylvester

    sylvester Registered User

    تاریخ عضویت:
    ‏26 مارس 2007
    نوشته ها:
    489
    تشکر شده:
    54
    محل سکونت:
    ترکیه
    دست شما درد نكنه. الان ميرم تست كنم. شما هم اگر زحمت بكشين ممنوم ميشم. ميخوام كد هاي ساده خودم رو با مال شما مقايسه كنم:)
     
  10. Shine

    Shine Registered User

    تاریخ عضویت:
    ‏3 ژوئن 2007
    نوشته ها:
    122
    تشکر شده:
    12
    بفرمایید :cool:
     

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

  11. sylvester

    sylvester Registered User

    تاریخ عضویت:
    ‏26 مارس 2007
    نوشته ها:
    489
    تشکر شده:
    54
    محل سکونت:
    ترکیه
  12. sylvester

    sylvester Registered User

    تاریخ عضویت:
    ‏26 مارس 2007
    نوشته ها:
    489
    تشکر شده:
    54
    محل سکونت:
    ترکیه
    ......................... اضافه شد:
    من امروز يكم با برنامه كار كردم. روش دوستمون شاين اينجوريه كه اول نوع درايو را مشخص ميكنه با استفاده از api commands اگردرايو از نوع سي دي رام بود اونقت نام و ليبل اون رو به يه combobox اضافه ميكنه.
    براي من جالبه اگر بشه همون طور كه گفتم خود عنصر drivelistbox رو فيلتر كرد كه فقط درايو هاي سي دي رو نشون بده. آخه اين عنصر يه كم اينتر فيس جالبتري نسبت به كمبو باكس داره از جمله نمايش آيكون درايو!:)
    من فكر كنم شدني باشه. ولي چجوريشو نتونستم هنوز بفهمم!!!!
     
  13. m3hrz4d

    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
    
    البته دخالت اینطوری توی کنترل های ویبی همیشه خوب نیست و ممکنه مشکلاتی رو درست کنه.ولی اون رو من یه تست کوچیک کردم ظاهرا مشکلی نداشت.
     
  14. avajang.com .leftavajang.com.right
  15. sylvester

    sylvester Registered User

    تاریخ عضویت:
    ‏26 مارس 2007
    نوشته ها:
    489
    تشکر شده:
    54
    محل سکونت:
    ترکیه