Для языка есть немало диалоговых окон, но есть один недостаток. Например, в диалоговом окне сохранения файла нет встроенного флага "перезапись существующего". Также, в окне открытия файла нет флага "файл должен существовать". Хотелки давно озвучены на форумах, но автор так и не почесался, но умудрился наплодить массу глюков.
Обходной путь - использовать существующие функции API. Лет 20 назад, я порядочно помаялся, но смог запустить эти окна. Сейчас взял готовый пример, ввел нужные данные для структуры OPENFILENAME, но получил ошибку. Нашел на буржуйском форуме заумный пример использования и переписал код в версии ANSI
If OpenWindow(0, 0, 0, 322, 205, "open file", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
file_save.OPENFILENAME
file_save\lStructSize=SizeOf(OPENFILENAME)
file_save\hwndOwner=WindowID(0); window owner
hinst.l=GetModuleHandle_(0)
file_save\hInstance=hinst
file_save\lpstrFilter=?flt_save_name
*tmpbuf1=AllocateMemory($4000)
file_save\lpstrFile=*tmpbuf1;must be 0
file_save\nFilterIndex=2 ; 1-hhc,2-txt
file_save\nMaxFile=$03FF
file_save\lpstrDefExt=0
file_save\Flags=#OFN_HIDEREADONLY|#OFN_EXPLORER|#OFN_OVERWRITEPROMPT;|#OFN_FILEMUSTEXIST
file_save\lpstrCustomFilter=0
file_save\nMaxCustFilter=1023-12
file_save\lpstrDefExt=0;?lst_ext
file_save\lpstrTitle=?title
id.s=GetCurrentDirectory()
file_save\lpstrInitialDir=@id
If GetSaveFileName_(@file_save)
Debug PeekS(*tmpbuf1)
Else
; CDERR_GENERALCODES equ 0000h
; CDERR_STRUCTSIZE equ 0001h
; CDERR_INITIALIZATION equ 0002h
; CDERR_NOTEMPLATE equ 0003h
; CDERR_NOHINSTANCE equ 0004h
; CDERR_LOADSTRFAILURE equ 0005h
; CDERR_FINDRESFAILURE equ 0006h
; CDERR_LOADRESFAILURE equ 0007h
; CDERR_LOCKRESFAILURE equ 0008h
; CDERR_MEMALLOCFAILURE equ 0009h
; CDERR_MEMLOCKFAILURE equ 000Ah
; CDERR_NOHOOK equ 000Bh
; CDERR_REGISTERMSGFAIL equ 000Ch
Debug CommDlgExtendedError_()
EndIf
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
FreeMemory(*tmpbuf1)
DataSection
flt_save_name:
Data.s"Table of Contents","*.HHC"
Data.s"Text","*.TXT"
Data.a 0
title:
Data.s "Dzhigurda"
; lst_ext:
; Data.s "htm"
; Data.a 0
file_save.OPENFILENAME
file_save\lStructSize=SizeOf(OPENFILENAME)
file_save\hwndOwner=WindowID(0); window owner
hinst.l=GetModuleHandle_(0)
file_save\hInstance=hinst
file_save\lpstrFilter=?flt_save_name
*tmpbuf1=AllocateMemory($4000)
file_save\lpstrFile=*tmpbuf1;must be 0
file_save\nFilterIndex=2 ; 1-hhc,2-txt
file_save\nMaxFile=$03FF
file_save\lpstrDefExt=0
file_save\Flags=#OFN_HIDEREADONLY|#OFN_EXPLORER|#OFN_OVERWRITEPROMPT;|#OFN_FILEMUSTEXIST
file_save\lpstrCustomFilter=0
file_save\nMaxCustFilter=1023-12
file_save\lpstrDefExt=0;?lst_ext
file_save\lpstrTitle=?title
id.s=GetCurrentDirectory()
file_save\lpstrInitialDir=@id
If GetSaveFileName_(@file_save)
Debug PeekS(*tmpbuf1)
Else
; CDERR_GENERALCODES equ 0000h
; CDERR_STRUCTSIZE equ 0001h
; CDERR_INITIALIZATION equ 0002h
; CDERR_NOTEMPLATE equ 0003h
; CDERR_NOHINSTANCE equ 0004h
; CDERR_LOADSTRFAILURE equ 0005h
; CDERR_FINDRESFAILURE equ 0006h
; CDERR_LOADRESFAILURE equ 0007h
; CDERR_LOCKRESFAILURE equ 0008h
; CDERR_MEMALLOCFAILURE equ 0009h
; CDERR_MEMLOCKFAILURE equ 000Ah
; CDERR_NOHOOK equ 000Bh
; CDERR_REGISTERMSGFAIL equ 000Ch
Debug CommDlgExtendedError_()
EndIf
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
FreeMemory(*tmpbuf1)
DataSection
flt_save_name:
Data.s"Table of Contents","*.HHC"
Data.s"Text","*.TXT"
Data.a 0
title:
Data.s "Dzhigurda"
; lst_ext:
; Data.s "htm"
; Data.a 0
Расписывать нет смысла, лучше почитать справку, которая объясняет назначения структуры.
Комментарии
Отправить комментарий