Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.09.04;
Скачать: CL | DM;

Вниз

ничего не происходит при вызове 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 вся ветка

Текущий архив: 2005.09.04;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.03 c
1-1124036570
_Odi_
2005-08-14 20:22
2005.09.04
аналог ACDSee.Подскажите


14-1123529076
Fredericco
2005-08-08 23:24
2005.09.04
Рыбалка. Иваньковское вдхр.


14-1122567008
Knight
2005-07-28 20:10
2005.09.04
Где можно недорого остановиться в Москве недели на две?


1-1123944383
tazik
2005-08-13 18:46
2005.09.04
Как выделить слова из KAК-файла


2-1123246330
Гость22
2005-08-05 16:52
2005.09.04
Как сменить регистр символа?