Форум: "WinAPI";
Текущий архив: 2005.09.04;
Скачать: [xml.tar.bz2];
Внизничего не происходит при вызове GetOpenFileName(ofn) Найти похожие ветки
← →
Buggy (2005-07-10 18:08) [0]uses CommDlg;
var
ofn: OPENFILENAME;
if GetOpenFileName(ofn) ...
диалог не появляется вообще
по каким причинам это может быть?
← →
begin...end © (2005-07-10 18:24) [1]Структура ofn инициализирована?
← →
Гаврила © (2005-07-10 19:46) [2]If the user cancels or closes the Open dialog box or an error occurs, the return value is zero. To get extended error information, call the CommDlgExtendedError function, which can return one of the following values:
CDERR_FINDRESFAILURE CDERR_NOHINSTANCE
CDERR_INITIALIZATION CDERR_NOHOOK
CDERR_LOCKRESFAILURE CDERR_NOTEMPLATE
CDERR_LOADRESFAILURE CDERR_STRUCTSIZE
CDERR_LOADSTRFAILURE FNERR_BUFFERTOOSMALL
CDERR_MEMALLOCFAILURE FNERR_INVALIDFILENAME
CDERR_MEMLOCKFAILURE FNERR_SUBCLASSFAILURE
← →
Kerk © (2005-07-11 09:35) [3]Надо делать:
OpenFileName.lStructSize := SizeOf(TOpenFileName)-12;
← →
Buggy (2005-07-11 11:25) [4]а существование формы обязательно?
← →
Alex Konshin © (2005-07-11 11:31) [5]Сейчас выяснится, что это консольное приложение или сервис.
:)
Вопросы когда научимся задавать?
← →
Kerk © (2005-07-11 13:17) [6]Alex Konshin © (11.07.05 11:31) [5]
Ну я уже попытался угадать проблему :))
Видимо мимо :))
← →
alpet © (2005-07-11 13:54) [7]Известный компонент TFileOpenDialog поставляется вместе с Delphi, в исходных кодах. Помоему это лучший пример для изучения сабжевой функции.
← →
Buggy (2005-07-11 22:50) [8]2 KERK
OpenFileName.lStructSize := SizeOf(TOpenFileName)-12;
ошибка 6
формы в нет, делаю dll
видимо придётся всё-таки форму создать (невидимую), хоть и не хочется
по крайней мере отсутствие формы - первое, почему перестало работать, а если есть форма все ОК, даже если ofn.hWndOwner и ofn.hInstance равны 0
так без формы ТОЧНО никак?
← →
alpet © (2005-07-13 10:54) [9]Buggy (11.07.05 22:50) [8]
Окно (форма) не нужны. Вот кусочек действующей программы:
procedure ZMem (var obj; sz: dword);
begin
fillchar (obj, sz, 0);
end; // ZMem
var s: string;
fn: array [0..256] of char;
ofn: tagOFN;
begin
s := ParamStr (1);
InitComCtrls;
if s = "" then
begin
ZMem (ofn, sizeof (ofn)); // fill zerro
ofn.lStructSize := sizeof (ofn);
ofn.hInstance := hInstance;
ofn.lpstrFilter := "Текстовое описание трейнера"#0"*.ttd"#0#0;
ofn.lpstrInitialDir := PChar (GetCurrentDir);
ofn.lpstrTitle := "Открыть трейнер";
ofn.Flags := OFN_FILEMUSTEXIST or OFN_PATHMUSTEXIST;
ofn.lpstrFile := fn;
ofn.nMaxFile := 256;
GetOpenFileName (ofn);
s := fn;
end;
if s <> "" then StartEngine (s);
end.
← →
Buggy (2005-07-13 22:07) [10]2alpet
Спасибо!
Буду пробовать!!!
← →
Buggy (2005-07-15 20:54) [11]И снова проблема :(
почему не работает функция?
program mp;
uses
CommDlg,
Windows;
var
ofn: tagOFN;
begin
FillChar(ofn,SizeOf(ofn),0);
ofn.lStructSize := sizeof(ofn);
if GetOpenFileName(ofn) then
begin
// ...
end;
end.
← →
alpet © (2005-07-16 13:26) [12]Buggy (15.07.05 20:54) [11]
Она не может работать с такой инициацией структуры. Твой код показывает что ты несколько не разобрался с главными переменными структуры tagOFN, и вообще не читал справку. Помогать тебе в переводе мне особенно не хочется - подумай сам хорошенько, куда к примеру функция будет имя файла записывать, если указать на буфер у тебя равен nil (0).
← →
alpet © (2005-07-16 13:28) [13]В смысле указатель lpstrFile = 0.
Описание на русском языке:
http://firststeps.ru/mfc/steps/r.php?140
← →
Buggy (2005-07-20 14:40) [14]2alpet
работает и ещё как, даже без буфера :)
пришлось описать вручную функцию и вынести переменные в глобальный var - в локальном почему-то не работает
program mp;
uses
Windows;
type
POpenFilenameA = ^TOpenFilenameA;
POpenFilename = POpenFilenameA;
tagOFNA = packed record
lStructSize: DWORD;
hWndOwner: HWND;
hInstance: HINST;
lpstrFilter: PAnsiChar;
lpstrCustomFilter: PAnsiChar;
nMaxCustFilter: DWORD;
nFilterIndex: DWORD;
lpstrFile: PAnsiChar;
nMaxFile: DWORD;
lpstrFileTitle: PAnsiChar;
nMaxFileTitle: DWORD;
lpstrInitialDir: PAnsiChar;
lpstrTitle: PAnsiChar;
Flags: DWORD;
nFileOffset: Word;
nFileExtension: Word;
lpstrDefExt: PAnsiChar;
lCustData: LPARAM;
lpfnHook: function(Wnd: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM): UINT stdcall;
lpTemplateName: PAnsiChar;
end;
TOpenFilenameA = tagOFNA;
TOpenFilename = TOpenFilenameA;
function GetOpenFileName(var OpenFile: TOpenFilename): Bool; stdcall; external "comdlg32.dll" name "GetOpenFileNameA";
var
ofn : TOpenFilename;
szFile : array [0..1024] of char;
FileName : string;
begin
FillChar(ofn, SizeOf(TOpenFileName), 0);
with ofn do
begin
lStructSize := SizeOf(TOpenFileName);
lpstrFile := szFile;
nMaxFile := SizeOf(szFile);
end;
if GetOpenFileName(ofn) then
begin
FileName := szFile;
// ...
end;
end.
← →
alpet © (2005-07-20 15:16) [15]Buggy (20.07.05 14:40) [14]
1. Без буфера она не работает. Установи lpstrFile в nil и поймешь что к чему.
2. Что-то я не обнаружил у тебя глобальных переменных. Самой функции GetOpenFileName по барабану где определен буфер - в стеке, хипе, или секции данных.
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2005.09.04;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.011 c