Консультация № 65475
04.12.2006, 11:06
0.00 руб.
0 5 2
Что надо написать чтоб функция GetOpenFileName заработала
уже все варианты перепробовал а окно не открывается, что подправить?



Приложение:
include ‘c:\fasmw\INCLUDE\WIN32AX.INC‘.dataofn OPENFILENAMEFilterString db "Фильтр",0,"*.*",0.codeMain: ; mov [ofn.Flags],OFN_EXPLORER+OFN_ALLOWMULTISELECT+OFN_FILEMUSTEXIST+OFN_HIDEREADONLY mov [ofn.Flags], OFN_FILEMUSTEXIST+OFN_PATHMUSTEXIST+OFN_LONGNAMES+OFN_EXPLORER+OFN_HIDEREADONLY invoke GetOpenFileName,ofn invoke ExitProcess, NULL.end Main

Обсуждение

давно
Советник
419
1011
04.12.2006, 11:17
общий
это ответ
Здравствуйте, Сергей Скобин!
ofn0 OPENFILENAME <size OPENFILENAME,NULL,NULL \
ofs strFilter0,0,0,1,ofs BufNameFile,MAX_PATH \
0,0,NULL,0 \
OFN_PATHMUSTEXIST or OFN_HIDEREADONLY or \
OFN_OVERWRITEPROMPT or OFN_FILEMUSTEXIST \
0,0,ofs strDefExt \
NULL,NULL,NULL>


Приложение:
ofn0 OPENFILENAME <size OPENFILENAME,NULL,NULL \ ofs strFilter0,0,0,1,ofs BufNameFile,MAX_PATH \ 0,0,NULL,0 \ OFN_PATHMUSTEXIST or OFN_HIDEREADONLY or \ OFN_OVERWRITEPROMPT or OFN_FILEMUSTEXIST \ 0,0,ofs strDefExt \ NULL,NULL,NULL>Cmd_OpenFile: ;=8a push esi edi ebx mov eax, [ini] mov ebx, [(t Object eax).IniData] mov esi, ofs ofn0 mov eax, [(t inid ebx).LastComeFile] cmp [b eax], 0 jnz m108a_00 mov [BufNameFile], 0 jmp m108a_11m108a_00: Call lstrcpy, ofs BufNameFile, [(t inid ebx).LastComeFile]m108a_11: mov [(t OPENFILENAME esi).lpstrInitialDir], ofs BufDir mov [(t OPENFILENAME esi).lpstrFile], ofs BufNameFile Call GetOpenFileName, esi or eax,eax jz m908a;-- Сохраняю путь в INI-данных sub eax, eax mov ax, [(t OPENFILENAME esi).nFileOffset] inc eax push eax Call GlobalAlloc, GPTR, eax pop ecx or eax, eax jz m108a_0 xchg edi, eax push ecx Call lstrcpyn, edi, [(t OPENFILENAME esi).lpstrFile], ecx pop eax mov [b edi+eax-1], 0 mov eax, [(t inid ebx).LastComeDir] or eax, eax jz m108a_1 Call GlobalFree, eaxm108a_1: mov [(t inid ebx).LastComeDir], edi Call lstrcpy, ofs BufDir, edim108a_0:;-- Сохраняю файл в INI-данных sub eax, eax mov ax, [(t OPENFILENAME esi).nFileOffset] mov edi, [(t OPENFILENAME esi).lpstrFile] add edi, eax Call lstrlen, edi or eax, eax jz m108a_2 inc eax Call GlobalAlloc, GPTR, eax or eax, eax jz m108a_2 Call lstrcpy, eax, edi or eax, eax jz m108a_2 xchg edi, eax mov eax, [(t inid ebx).LastComeFile] or eax, eax jz m108a_3 Call GlobalFree, eaxm108a_3: mov [(t inid ebx).LastComeFile], edim108a_2:m908a: pop ebx edi esi jmp ExitMsgOk
Неизвестный
04.12.2006, 13:24
общий
это ответ
Здравствуйте, Сергей Скобин!
;---------------->cut here<
format PE GUI
entry _start
include ‘win32a.inc‘

section ‘‘ code readable executable writeable
_start:
mov [ofn.lStructSize],sizeof.OPENFILENAME
mov [ofn.lpstrFilter],ofn_filter
mov [ofn.lpstrFile],buff
mov [ofn.nMaxFile],512
mov [ofn.lpstrTitle],ofn_title
mov [ofn.Flags],OFN_EXPLORER+OFN_FILEMUSTEXIST\
+OFN_PATHMUSTEXIST+OFN_HIDEREADONLY
openfile_:

invoke GetOpenFileName,ofn
invoke ExitProcess,0

;----------data
ofn OPENFILENAME
buff db 256 dup (0)
ofn_filter db ‘TXT‘,0,‘*.txt‘,0,0
ofn_title db ‘File select dialog‘,0

;-----------import
data import
library kernel32,‘KERNEL32.DLL‘\
,comdlg32,‘COMDLG32.DLL‘
include ‘api\kernel32.inc‘
include ‘api\comdlg32.inc‘
end data
;---------------->cut here<

Подскажите, какие пояснения нужны?
Неизвестный
04.12.2006, 13:50
общий
Спасибо то что нужно.только не понятно что за переменная sizeof.OPENFILENAME.
Неизвестный
04.12.2006, 13:55
общий
Еще знать бы что здесь присваевается mov [ofn.Flags],OFN_EXPLORER+OFN_FILEMUSTEXIST\+OFN_PATHMUSTEXIST+OFN_HIDEREADONLYА в остальном все полностью понятно.
Неизвестный
04.12.2006, 19:49
общий
OFN_EXPLORER, OFN_FILEMUSTEXIST, OFN_PATHMUSTEXIST, OFN_HIDEREADONLY - это вроде бы константы, их комбинация заносится в нужное место в структуре. (значения самих констант должны быть где-то в inc-файлах)первый флаг - не помню, второй флаг значит что файл (который будет выбираться) должен существовать, третий флаг - что путь должен существовать (не помню точно что это такое), четвёртый - что при выборе следует скрывать файлы, доступные только для чтения.Обычно такие флаги представляют собой значения с одним установленным битом, для каждого флага установлен разный бит. Таким образом в одной переменной передаётся несколько значений.насчёт комбинации, ещё пример:db alfa...mov [alfa], 1+4+8sizeof - это не переменная, это макрос определения размера. Он вычисляет и подставляет на своё место размер структуры в байтах.(насколько я помню, sizeof.word должно давать 2, ну и т.п.)
Форма ответа