Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно

Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


amel27,
По поводу функции FileSaveDialog...
Diamond её немного переделал (см. далее), чтобы в качестве фильтра можно было указывать обычные круглые скобки, почти как в функции VB(s).

Всё отлично работает, но хотелось бы иметь ещё две возможности:

1) Чтобы можно было указать умолчальное расширение, т.е к примеру у меня в фильтре есть *.au3 и *.gif, и в качестве расширения по умолчанию я указываю *.gif, вот нужно чтобы автоматом в списке функция выбрала это расширение. Сейчас если указать расширение, то оно просто подставляется в случае когда юзер не указал расширение вовсе, но это не подходит (отчасти по причине в хотелке #2 ).

2) Чтобы функция возвращала выбранное расширение, если я (как юзер) не указал расширение, но при этом выбрал его в списке, то именно то самое умолчальное расширение будет использовано, хотя не логично брать "старое" расширение когдя юзер выбрал другое из списка. Если функция ещё и выбранное расширение будет возвращать, то можно будет "знать" чего конкретно хочет юзер, и соответственно делать выводы (действия).

функция _FileSaveDialog() (Мод. от Diamond)
Код: Выделить весь код
;~ В этом варианте можно использовать круглые скобки для "отображаемой части фильтра"...
;~ В самом же фильтре круглые скобки больше не нужны!
;~ Синтаксис:
;~ "Видимый_текст_1|Файловый_фильтр_1|текст_2|фильтр_2|текст_N|фильтр_N"
Func _FileSaveDialog($sTitle, $sInitDir, $sFilter = 'All (*.*)', $iOpt = 0, $sDefaultFile = "", $sDefaultExt = "", $hWnd = 0)
    Local $iFileLen = 65536 ; Max chars in returned string
    ; API flags prepare
    Local $iFlag = BitOR(BitShift(BitAND($iOpt, 2), -10), BitShift(BitAND($iOpt, 16), 3))
    ; Filter string to array convertion
    Local $asFLines = StringSplit($sFilter, '|')
    Local $i, $suFilter = ''
    For $i = 1 To $asFLines[0] Step 2
        If $i < UBound($asFLines) Then _
            $suFilter &= 'byte[' & StringLen($asFLines[$i]) + 1 & '];char[' & StringLen($asFLines[$i+1]) + 1 & '];'
    Next
    ; Create API structures
    Local $uOFN = DllStructCreate('dword;int;int;ptr;ptr;dword;dword;ptr;dword' & _
            ';ptr;int;ptr;ptr;dword;short;short;ptr;ptr;ptr;ptr;ptr;dword;dword')
    Local $usTitle = DllStructCreate('char[' & StringLen($sTitle) + 1 & ']')
    Local $usInitDir = DllStructCreate('char[' & StringLen($sInitDir) + 1 & ']')
    Local $usFilter = DllStructCreate($suFilter & 'byte')
    Local $usFile = DllStructCreate('char[' & $iFileLen & ']')
    Local $usExtn = DllStructCreate('char[' & StringLen($sDefaultExt) + 1 & ']')
    For $i = 1 To $asFLines[0]
        DllStructSetData($usFilter, $i, $asFLines[$i])
    Next
    ; Set Data of API structures
    DllStructSetData($usTitle, 1, $sTitle)
    DllStructSetData($usInitDir, 1, $sInitDir)
    DllStructSetData($usFile, 1, $sDefaultFile)
    DllStructSetData($usExtn, 1, $sDefaultExt)
    DllStructSetData($uOFN, 1, DllStructGetSize($uOFN))
    DllStructSetData($uOFN, 2, $hWnd)
    DllStructSetData($uOFN, 4, DllStructGetPtr($usFilter))
    DllStructSetData($uOFN, 7, 1)
    DllStructSetData($uOFN, 8, DllStructGetPtr($usFile))
    DllStructSetData($uOFN, 9, $iFileLen)
    DllStructSetData($uOFN, 12, DllStructGetPtr($usInitDir))
    DllStructSetData($uOFN, 13, DllStructGetPtr($usTitle))
    DllStructSetData($uOFN, 14, $iFlag)
    DllStructSetData($uOFN, 17, DllStructGetPtr($usExtn))
    DllStructSetData($uOFN, 23, BitShift(BitAND($iOpt, 32), 5))
    ; Call API function
    Local $sRet = DllCall('comdlg32.dll', 'int', 'GetSaveFileName', 'ptr', DllStructGetPtr($uOFN))

    If $sRet[0] Then Return StringStripWS(DllStructGetData($usFile, 1), 3)
    Return SetError(1, 0, "")
EndFunc   ;==>_FileSaveDialog

тег [ht] имеет характерный javascript'у баг - одиночная кавычка в названии текста (сылки) делает тег не рабочим )

P.S
Я пробовал разного рода манипулляции с DllStructGetData(), почти все структуры перепотрошил, но немогу найти нужные мне данные (хотябы чтобы вернуть выбранное расширение).

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community


Последний раз редактировалось Creat0R, 09-02-2008 в 16:01. Причина: В теге [ht] баг :(


Отправлено: 15:57, 09-02-2008 | #108