Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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
14-1122654997
Piter
2005-07-29 20:36
2005.09.04
О подлодке "Курск"


14-1123683162
Kerk
2005-08-10 18:12
2005.09.04
Абрамович предложил своим футболистам отдохнуть на Чукотке


14-1123770169
Андрей Жук
2005-08-11 18:22
2005.09.04
Инструменты тестирования ПО


14-1123924715
PZ
2005-08-13 13:18
2005.09.04
Что бы это значило ?


5-1097407865
asdfgh
2004-10-10 15:31
2005.09.04
Перенос в ячейке StringGrid





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский