Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: Drag'n'Drop VB6 Добавлено: 21.01.07 18:02  

Автор вопроса:  Arseny | ICQ: 298826769 
Надобно мне сделати глобальный Drag'n'Drop, т.е. чтобы перетаскивать можно было из любой другой проги все, что перетаскивается, в мою. Например файл из проводника или Total Commander'a(чтобы получить полное имя файла), кусок выделенного текста из IE или Ворда, картинку там какую-нибудь...
Я раньше с этим не работал вообще, а все примеры, которые нашел, показывают работу с Drag'n'Drop только внутри своего приложения.
Кто-нибудь может помочь примером или ссылкой?

Ответить

  Ответы Всего ответов: 12  

Номер ответа: 1
Автор ответа:
 HACKER


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #1 Добавлено: 21.01.07 21:16
Для перетягивания файлов есть готовый...

модуль
Rem Автор примера Беляев Данила

Option Explicit
Public Declare Sub DragAcceptFiles Lib "shell32.dll" (ByVal hwnd As Long, ByVal fAccept As Long)
Public 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
Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Public Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Public Const GWL_WNDPROC = (-4)
Private Const WM_DROPFILES = &H233
Global p&
Public Function Handler&;(ByVal h&, ByVal m&, ByVal w&, ByVal l&;)
    If m = WM_DROPFILES Then
        Dim Str_Name As String * &HFF, Lng_File&
        Lng_File = DragQueryFile(w, True, Str_Name, 0)
        frmMain.lstFiles.Clear
        'Form1.Print "Всего: " & Lng_File
        For Lng_File = 0 To Lng_File - 1
            ;DragQueryFile ByVal w, Lng_File, Str_Name, Len(Str_Name)
            frmMain.lstFiles.AddItem Replace$(Str_Name, vbNullChar, vbNullString)
        Next
    End If
    Handler = CallWindowProc(p, h, m, w, l)
End Function


форма
Private Sub Form_Load()
    p = SetWindowLong(lstFiles.hwnd, GWL_WNDPROC, AddressOf Handler)
    Call DragAcceptFiles(lstFiles.hwnd, True)
End Sub


Для остального надо изучать АПИ функции Drag***... а их немало :)

Ответить

Номер ответа: 2
Автор ответа:
 Arseny



ICQ: 298826769 

Вопросов: 53
Ответов: 1732
 Профиль | | #2 Добавлено: 21.01.07 23:25
2HACKER: Благодарю, в общем-то пока хватит, буду пробовать.

Ответить

Номер ответа: 3
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #3 Добавлено: 22.01.07 10:33
Ну и че сложного? Ставишь OLEDropMode в Manual и обрабатываешь _OLEDragDrop.

Ответить

Номер ответа: 4
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #4 Добавлено: 22.01.07 10:37
Пример для перетаскивания файлов из проводника (Total Commander и т.п.) в листбокс

Option Explicit

Private Sub Form_Load()
List1.OLEDropMode = 1
End Sub

Private Sub List1_OLEDragDrop(Data As DataObject, Effect As Long, Button As Integer, Shift As Integer, X As Single, Y As Single)
Dim i As Long
If Data.Files.Count < 1 Then
Else
    For i = 1 To Data.Files.Count
        List1.AddItem Data.Files(i)
    Next i
End If
End Sub

Ответить

Номер ответа: 5
Автор ответа:
 Arseny



ICQ: 298826769 

Вопросов: 53
Ответов: 1732
 Профиль | | #5 Добавлено: 22.01.07 11:12
2LamerOnLine: Спасибо.
2HACKER: Издеваешься? :)

Ответить

Номер ответа: 6
Автор ответа:
 Djon



Вопросов: 61
Ответов: 471
 Web-сайт: www.vk-book.ru
 Профиль | | #6
Добавлено: 23.01.07 08:48
А как сделать чтобы отслеживать какое расшерение у перетаскиваемых файлов?
Например перетаскивать только ехе?

Ответить

Номер ответа: 7
Автор ответа:
 Arseny



ICQ: 298826769 

Вопросов: 53
Ответов: 1732
 Профиль | | #7 Добавлено: 23.01.07 08:58
Главное - отследить полное имя файла. А дальше - фуфло вопрос. три символа с конца, все ясно! :)

Ответить

Номер ответа: 8
Автор ответа:
 Djon



Вопросов: 61
Ответов: 471
 Web-сайт: www.vk-book.ru
 Профиль | | #8
Добавлено: 23.01.07 09:01
Option Explicit

Private Sub Form_Load()
List1.OLEDropMode = 1
End Sub

Private Sub List1_OLEDragDrop(Data As DataObject, Effect As Long, Button As Integer, Shift As Integer, X As Single, Y As Single)
Dim i As Long
If Data.Files.Count < 1 Then
Else
    For i = 1 To Data.Files.Count
    Text1 = Data.Files(i)
    If Mid(Text1.Text, Len(Text1.Text) - 2, 3) = "exe" Then
        List1.AddItem Data.Files(i)
    End If
    Print "Формат: " & Mid(Text1.Text, Len(Text1.Text) - 2, 3)
    Next i
End If
End Sub


Толь вот если формал 2 символа или 1, что делать?

Ответить

Номер ответа: 9
Автор ответа:
 Djon



Вопросов: 61
Ответов: 471
 Web-сайт: www.vk-book.ru
 Профиль | | #9
Добавлено: 23.01.07 09:02
поправка:
формал
=формат

Ответить

Номер ответа: 10
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #10 Добавлено: 23.01.07 11:01
Что значит формат? Если про расширение - то Split(FileName, ".";). Последний элемент в массиве - расширение. Это средствами VB. Есть API и FSO, там для этого функции есть.

Ответить

Номер ответа: 11
Автор ответа:
 Djon



Вопросов: 61
Ответов: 471
 Web-сайт: www.vk-book.ru
 Профиль | | #11
Добавлено: 23.01.07 11:21
Всё сообразил.

А про формат заговорился. -расширение-

ЗЫ интересно а какие Апи?

Ответить

Номер ответа: 12
Автор ответа:
 Bombardier



ICQ: 42305746 

Вопросов: 2
Ответов: 67
 Web-сайт: alexander.tsioka.ru
 Профиль | | #12
Добавлено: 23.01.07 17:59
в общем случае проверки вот так выглядят:
If Data.GetFormat(vbCFFiles) Then
        ;Dim tFileName as String
        For Each tFileName In Data.Files
        
        Next
    ElseIf Data.GetFormat(vbCFBitmap) Then
        
    ElseIf Data.GetFormat(vbCFRTF) Then
        
    Else

End If

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам