Что нового

Подскажите название функции

MRGYV

Новичок
Сообщения
29
Репутация
0
Добрый день!
Не могу вспомнить название функции. Суть в том, что хочу написать программу, которая при переносе файла на окно будет его переименовывать в зависимости от указанного в комбобоксе значения. Но, никак не могу вспомнить как вообще заставить что-то делать autoit при переносе чего либо на окно. Подскажите, пожалуйста.
 

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
246
Drag-and-drop ? Только это не функция , а способ оперирования элементами.
 
Автор
M

MRGYV

Новичок
Сообщения
29
Репутация
0
Спасибо огромное, сейчас попробую
Сообщение автоматически объединено:

Сделал следующее:
Код:
#include <GUIConstants.au3>
#include <WindowsConstants.au3>
#include <File.au3>

$Form1 = GUICreate("Переименование", 420, 60, -1, -1, -1, $WS_EX_ACCEPTFILES)

; устанавливаем параметры области - скрытая и drag-and-drop 
GUICtrlSetState(-1, $GUI_DISABLE + $GUI_DROPACCEPTED)

GUICtrlCreateLabel("Перенесите файл для переименования", 20, 10, 200, 18)
$Combo1 = GUICtrlCreateCombo("", 24, 29, 305, 81)
GUICtrlSetState($Combo1, $GUI_DROPACCEPTED) ; $Combo1 наделённый свойством drag-and-drop 
GUICtrlSetData($Combo1, "Пример 1|Пример 2|Пример 3")
$folder1 = GUICtrlCreateButton("Обзор...", 344, 29, 57, 23)
GUISetState()

While 1
    Switch GUIGetMsg()
        Case $GUI_EVENT_DROPPED ;событие приходящееся на drag-and-drop 
            $n= @GUI_DragFile
            $aPathSplit = _PathSplit($n, 1, 2, 3, 4)
            $Text = GUICtrlRead($Combo1)
            FileMove($n, @ScriptDir & "\"& $Text & $aPathSplit[4], 9)
            ; кнопки обзор
        Case $folder1
            $folder01 = FileOpenDialog("Указать файл", @WorkingDir & "", "Любой (*.*)", 1 + 4)
            If @error Then ContinueLoop
            GUICtrlSetData($Combo1, $folder01)
        
        Case $GUI_EVENT_CLOSE ; закрыть 
            Exit
    EndSwitch
WEnd


Не могу сообразить как сделать, чтобы срабатывал просто при переносе в окно. Не хочется создать огромный Label и привязывать к нему.
 
Последнее редактирование:

Tempo

AutoIT Гуру
Сообщения
616
Репутация
205
Не могу сообразить как сделать, чтобы срабатывал просто при переносе в окно. Не хочется создать огромный Label и привязывать к нему.
Пример
Код:
;~ AutoIt Version: 3.3.14.5
#include <GUIConstants.au3>
#include <ColorConstants.au3>
#include <WinAPISys.au3>

Global $g_idLabel
Example()

Func Example()
    GUICreate(@ScriptName, 400, 400, -1, -1, -1, BitOR($WS_EX_TOPMOST, $WS_EX_ACCEPTFILES))

    $g_idLabel = GUICtrlCreateLabel("Drag&&Drop", 0, 180, 400, 40, BitOR($SS_CENTER, $SS_CENTERIMAGE))
    GUICtrlSetColor(-1, $COLOR_WHITE)
    GUICtrlSetBkColor(-1, $COLOR_BLACK)

    GUIRegisterMsg($WM_DROPFILES, WM_DROPFILES)
    GUISetState()

    Do
    Until GUIGetMsg() = $GUI_EVENT_CLOSE
EndFunc   ;==>Example

Func WM_DROPFILES($hWnd, $iMsg, $wParam, $lParam)
    #forceref $hWnd, $iMsg, $wParam, $lParam
    Local $aFiles = _WinAPI_DragQueryFileEx($wParam)
    If Not @error Then GUICtrlSetData($g_idLabel, $aFiles[1])
    _WinAPI_DragFinish($wParam)
EndFunc   ;==>WM_DROPFILES
 
Автор
M

MRGYV

Новичок
Сообщения
29
Репутация
0
Спасибо большое за пример. Немного туго соображаю. А что в моём коде поменять, чтобы реализовать это? Я могу перерисовать форму полностью под Ваш пример, но мне хотелось бы понять сам принцип.

Переделал под Ваш пример. Вроде всё работает:
Код:
#include <GUIConstants.au3>
#include <WinAPISys.au3>
#include <WindowsConstants.au3>
#include <File.au3>

$Form1 = GUICreate("Переименование", 1020, 60, -1, -1, -1, $WS_EX_ACCEPTFILES)
   GUICtrlCreateLabel("Перенесите файл для переименования", 20, 10, 200, 18)
   $Combo1  = GUICtrlCreateCombo("", 24, 29, 870, 81)
   GUICtrlSetData($Combo1, "Тест1|Тест2")
   $folder1 = GUICtrlCreateButton("Обзор...", 900, 28, 57, 23)
   GUIRegisterMsg($WM_DROPFILES, WM_DROPFILES)
GUISetState()

While 1
    Switch GUIGetMsg()

        Case $folder1
            $folder01 = FileOpenDialog("Указать файл", @ScriptDir & "", "Любой (*.*)", 1 + 4)
            If @error Then ContinueLoop
            $n= $folder01
            $aPathSplit = _PathSplit($n, 1, 2, 3, 4)
            $Text = GUICtrlRead($Combo1)
            FileMove($n, @ScriptDir & "\"& $Text & $aPathSplit[4], 9)
        Case $GUI_EVENT_CLOSE ; закрыть
            Exit
    EndSwitch
WEnd


Func WM_DROPFILES($hWnd, $iMsg, $wParam, $lParam)
Local $aFiles = _WinAPI_DragQueryFileEx($wParam)
$n=$aFiles[1]
$aPathSplit = _PathSplit($n, 1, 2, 3, 4)
$Text = GUICtrlRead($Combo1)
FileMove($n, @ScriptDir & "\"& $Text & $aPathSplit[4], 9)
_WinAPI_DragFinish($wParam)
EndFunc


Можете подсказать, что явно по "ламерски" в моем коде? Мне кажется, что "$n=$aFiles[1]" и "$aPathSplit = _PathSplit($n, 1, 2, 3, 4)" можно как-то более профессионально делать.
 
Последнее редактирование:
Верх