• DİKKAT

    DOSYA İndirmek/Yüklemek için ÜCRETLİ ALTIN ÜYELİK Gereklidir!
    Altın Üyelik Hakkında Bilgi

Listboxa sürükle bırak?

Katılım
13 Haziran 2006
Mesajlar
374
Excel Vers. ve Dili
Excel 2003 Türkçe
Matematik Öğretmeni VB,Excel-VBA,...
Selam...
Arkadaşlar aşağıdaki kodlarla Browsefolder komutu ile bir klasör içindekileri (yolu KlasorListesine,içindeki dosya isimlerini CalmaListesine)listeletiyorum.
Kod:
Private Sub DosyaAc_Click()
On Error Resume Next
    Dim FileNames, Direccion As String
    Direccion = BrowseForFolder(Me.hwnd, "Klasör Seçiniz...")
    FileNames = Dir$(Direccion & "*.*")
    While Len(FileNames) > 0
        Select Case UCase(Right(FileNames, 3))
        Case "MP3", "MPG", "PEG", "DAT", "AVI"
            KlasorListesi.AddItem Direccion & FileNames
            CalmaListesi.AddItem FileNames
        End Select
        FileNames = Dir$
    Wend

End Sub

Sorum şu:
BrowseFolder komutu dışında (media Player mantığı ile) seçtiğimiz bir klasörü sürükleyip listbox a bıraktığımızda aynı işlemi nasıl yaptırabiliriz?
 
Biraz problem çıkardı ama,API yardımıyla sorunu çözdüm.
Teşekkür ederim.
 
Bu çözümü bizimle paylaşırmısınız.
 
Sayın Levent Bey;
Sorumu zaten dikkat ederseniz VB6 için sormuştum.Çünkü henüz excel VBA da henüz listbox ın DragMode olayını keşfedemedim.Fakat Excel-VBA üzerindeki çalışmalarım sürüyor.Çünkü Excel-VBA daki listbox ın böyle bir kullanımı yok(normalde),fakat sanırım bu sorunda api ile çözülebilir.Uğraşıyorum.
Ancak VB6 daki çözümü sunayım.Belki bu konuda sizin bir fikriniz olabilir:
Module kodları
Kod:
Option Explicit

Type POINTAPI
  x As Long
  y As Long
End Type
Type MSG
  hWnd As Long
  message As Long
  wParam As Long
  lParam As Long
  time As Long
  pt As POINTAPI
End Type
Declare Sub DragAcceptFiles Lib "shell32.dll" (ByVal hWnd As Long, ByVal fAccept As Long)
Declare Sub DragFinish Lib "shell32.dll" (ByVal hDrop As Long)
Declare Function DragQueryFile Lib "shell32.dll" Alias "DragQueryFileA" (ByVal hDrop As Long, ByVal UINT As Long, ByVal lpStr As String, ByVal ch As Long) As Long
Declare Function PeekMessage Lib "user32" Alias "PeekMessageA" (lpMsg As MSG, ByVal hWnd As Long, ByVal wMsgFilterMin As Long, ByVal wMsgFilterMax As Long, ByVal wRemoveMsg As Long) As Long
Public Const PM_NOREMOVE = &H0
Public Const PM_NOYIELD = &H2
Public Const PM_REMOVE = &H1
Public Const WM_DROPFILES = &H233

Form Kodları:
Kod:
Option Explicit
Private Sub cmdclear_Click()
KlasorListesi.Clear
End Sub

Private Sub cmdexit_Click()
End
End Sub
Private Sub Form_activate()
DragAcceptFiles frmmain.hWnd, True
Visible = True
WatchForFiles
End Sub
Public Sub WatchForFiles()
Dim FileDropMessage As MSG
Dim fileDropped     As Boolean
Dim hDrop           As Long
Dim filename        As String * 128
Dim numOfDroppedFiles As Long
Dim curFile         As Long
Dim ret As Long
Do
  If fileDropped Then
    hDrop = FileDropMessage.wParam
    numOfDroppedFiles = DragQueryFile(hDrop, True, filename, 127)
    For curFile = 1 To numOfDroppedFiles
      ret = DragQueryFile(hDrop, curFile - 1, filename, 127)
      KlasorListesi.AddItem filename
          Next curFile
Dim AnyString, MyStr
    Dim FileNames, Direccion As String
            If KlasorListesi.ListIndex <> KlasorListesi.ListCount - 1 Then
                    KlasorListesi.ListIndex = KlasorListesi.ListIndex + 1
                End If
    Direccion = KlasorListesi.Text
    FileNames = Dir$(Direccion & "\*.*")

    While Len(FileNames) > 0
        Select Case UCase(Right(FileNames, 3))
        Case "MP3", "MPG", "PEG", "DAT", "AVI"
            CalmaListesi.AddItem FileNames
        End Select
        FileNames = Dir$
    Wend

    DragFinish hDrop
  End If
  DoEvents
   Loop
End Sub
Private Sub Form_Unload(Cancel As Integer)
End
End Sub
 
Son düzenleme:
Galiba bi&#351;eler oldu.Alpi arkada&#351;&#305;m&#305;nda yard&#305;m&#305;yla sorun tamamen &#231;&#246;z&#252;lm&#252;&#351;t&#252;r.Yukar&#305;da da belirtti&#287;im gibi Excel-VBA da ListBox'&#305;n Drag&Drop(s&#252;r&#252;kle-b&#305;rak) &#246;zelli&#287;i mevcut de&#287;il.Fakat say&#305;n Alpi nin &#246;nerisi &#252;zerine Listview kullanmaya karar verdik(buda bize &#351;unu g&#246;steriyor ki nesneleri ve &#246;zelliklerini iyi tan&#305;mam&#305;z gerekir).
A&#351;a&#287;&#305;daki &#231;al&#305;&#351;mada iki &#246;rnek g&#246;receksiniz.



__________________
D&#304;&#286;ER &#199;ALI&#350;MALAR

Masa&#220;st&#252; Sinema v1.0(VB6-Program)
MP3Player v2.0(VB6-Program)
ACCESS G&#214;RSEL E&#286;&#304;T&#304;M
&#214;&#286;RENC&#304; TAK&#304;P PROGRAMI(Excel ile Access VeriTaban&#305; Uygulamas&#305;)
CPU Noya G&#246;re &#350;ifreleme
USERFORM G&#214;R&#220;N&#220;MLER&#304;
POPUP TAKV&#304;M UYGULAMASI
LCD SAAT UYGULAMASI
XCelMedia v1.0
JakcPot v1.0(oyun)
&#350;ansl&#305; 7 Oyunu
K&#304;ML&#304;K SORGULAMA(web &#252;zerinden)
L&#304;STV&#304;EW UYGULAMASI
DRAG&DROP(S&#220;R&#220;KLE-BIRAK) UYGULAMASI
B&#304;LD&#304;R&#304;M ALANINA M&#304;N&#304;M&#304;ZE(VB6)
 
Son düzenleme:
Say&#305;n Tankut SAZLI ve Say&#305;n Alpi, b&#246;yle g&#252;zel ve de&#287;i&#351;ik &#231;al&#305;&#351;malar i&#231;in te&#351;ekk&#252;rler.
 
Yukarıda da belirttiğim gibi Excel-VBA da ListBox'ın Drag&Drop(sürükle-bırak) özelliği mevcut değil.

Burada bir yanlışlığı düzeltelim. Listboxun bununla ilgili eventleri mevcuttur. (BeforeDragOver ve BeforeDropOrPaste) Konuyla ilgili bir örnek dosya eklerim.
 
Teşekkür ederim(-iz).
Levent beyin düzeltmesi üzerine şunu söylemek isterim.Listbox'ın dra&drop özelliği derken properties ayarlarından kasdetmiştim.Ayrıca yanlışsam galiba yine düzeltmelisiniz,bahsettiğiniz BeforeDragOver ve BeforeDropOrPaste kombinasyonunun listboxta listelenen verilerinin yerlerini kaydırmak için ya da bir listboxtan diğerine satır aktarmak için olduğunu hatırladığımdan üzerinde fazlaca uğraşamadım.
 
Son düzenleme:
Ekli dosyay&#305; inceleyin. Listbox1den fare ile tutaca&#287;&#305;n&#305;z bir veriyi listbox2 ye ta&#351;&#305;yabilirsiniz.

Bu &#246;zellik properties olarak yok hakl&#305;s&#305;n&#305;z (textbox ve comboboxlarda mevcut)

Listboxta ancak eventleri kullanarak sonu&#231; elde etmek m&#252;mk&#252;n.

Not: Bu arada ekledi&#287;iniz dosyada benmi bir &#351;eyi atl&#305;yorum listview bo&#351; olarak &#231;&#305;k&#305;yor. Yada kullan&#305;m &#351;ekli nas&#305;l?
 
Levent Bey;
&#214;rne&#287;i inceledim.Zaten benimde yukar&#305;da bahsetti&#287;im &#351;eyde buydu,yani listbox&#305;n mevcut drag&drop eventleri sadece ya kendi i&#231;inde sat&#305;rlar&#305;n yerini kayd&#305;rmak i&#231;in yada bir listten di&#287;erine veri ta&#351;&#305;mak i&#231;in.Yaln&#305;z san&#305;r&#305;m(yanl&#305;&#351; anlamad&#305;msa) sizin atlad&#305;&#287;&#305;n&#305;z(ve listviewin bo&#351; &#231;&#305;kmas&#305; normal) &#351;ey ben bunu excel i&#231;indeki yada d&#305;&#351;&#305;ndaki herhangibir veriyi listeletmek i&#231;in kullanm&#305;yorum.
Buradaki kullan&#305;m &#351;&#246;yle ayn&#305; Windows Media Playerde oldu&#287;u gibi bir klas&#246;r&#252; fare ile tutarak listview &#252;zerine s&#252;r&#252;kleyi,Buradaki listeleme klas&#246;r i&#231;indeki dosyalar&#305;n listenmesidir.Ha e&#287;er yanl&#305;&#351; anlad&#305;m da zaten siz bunu yapman&#305;za ra&#287;men listeleme olmuyorsa bazen ilk seferinde klas&#246;r bilgisini alamayabiliyor(ne yaz&#305;kki excel bu konuda bazen vb6 kadar tutarl&#305; davranamayabiliyor),bir iki kez deneyin,ayr&#305;ca &#252;st&#252;ste defalarca klas&#246;r ekleyebilirsiniz.
 
Son düzenleme:
Tamam şimdi anladım açıklama için teşekkürler.
 
Ne demek Levent bey, vazifemiz.
 
Geri
Üst