![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Хочу вызвать винапишный файлдиалог.
но при вызове ничего не происходит.то есть диалог просто не появляется. код: Код:
uses commdlg; ... procedure TfrmAdd.TntButton2Click(Sender: TObject); var OFNW : TOpenFilenameW; Buf : PWideChar; begin GetMem(Buf, SizeOf(PWideChar)); buf:=''; with OFNW do begin lStructSize := SizeOf(DWORD); hWndOwner := hinstance; lpstrfilter := 'Executable files (*.exe)' + #0 + '*.exe' + #0; lpstrCustomFilter := 'All files (*.*)' + #0 + '*.*' + #0#0; nMaxCustFilter := 255; nFilterIndex := 1; lpstrFile := Buf; nMaxFile := 128; lpstrFileTitle := 'test'; nMaxFileTitle:=128; lpstrInitialDir := 'c:\'; lpstrTitle := 'Open File'; Flags := OFN_FileMustExist + OFN_PathMustExist + OFN_FORCESHOWHIDDEN; end; GetOpenFileNameW(ofnw); //при выполнении в этой строчке ничего не происходит. диалог не появляется end; |
#2
|
||||
|
||||
![]() Лень разбираться
Код:
type TFileName = type String; TOpenDialog = Object Parent : HWND; FileName : TFileName; Filter : String; DefaultExt : String; Title : String; InitialDir : String; function Execute : Boolean; end; var OD : TOpenDialog; ... function TOpenDialog.Execute : Boolean; var szFile : array[0..MAX_PATH - 1] of Char; OFN : TOpenFileName; TempFilter : String; function ExtractLine(const S : String) : String; var P : String; I : Integer; begin for I := 1 to Length(S) do if S[i] = '|' then P := P + #0 else P := P + S[i]; Result := P + #0; end; begin FillChar(OFN, SizeOf(OFN), 0); FillChar(szFile, SizeOf(szFile), 0); OFN.lStructSize := SizeOf(TOpenFilename); OFN.hwndOwner := Parent; OFN.hInstance := hInstance; OFN.lpstrTitle := PChar(Title); TempFilter := ExtractLine(Filter); OFN.lpstrFilter := PChar(TempFilter); OFN.lpstrFile := szFile; OFN.Flags := OFN_EXPLORER or OFN_PATHMUSTEXIST or OFN_HIDEREADONLY or OFN_FILEMUSTEXIST or OFN_ENABLEHOOK or OFN_ENABLESIZING; OFN.nMaxFile := MAX_PATH; if (InitialDir = '') then OFN.lpstrInitialDir := '.' else OFN.lpstrInitialDir := PChar(InitialDir); Result := GetOpenFileName(OFN); if Result then FileName := szFile; end; ... OD.Parent := Wnd; OD.Title := 'Выберите файл'; OD.Filter := 'Поддерживаемые форматы (*.png;*.jpg;*.tif;*.gif;*.bmp)|*.bmp;*.jpg;*.jpeg;*.jpe;*.tif;*.tiff;*.png;*.gif|' + 'Portable network graphics (*.png)|*.png|' + 'JPEG Image File (*.jpg)|*.jpg;*.jpeg;*.jpe|' + 'Tagged Image File Format (*.tif|*.tif;*.tiff|' + 'CompuServe GIF Image (*.gif)|*.gif|' + 'Bitmaps (*.bmp)|*.bmp'; OD.DefaultExt := '*.*'; ... if OD.Execute then Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#3
|
|||
|
|||
![]() >>подскажите где я накосячил?
Код:
GetMem(Buf, SizeOf(PWideChar)); Код:
nMaxFile := 128; Далее Код:
lStructSize := SizeOf(DWORD); Это какой размер структуры получается? |
#4
|
|||
|
|||
![]() angvelem данный способ не подходит. мне нужен именно GetOpenFileNameW так как основная работа будет на компе с русской локалью но файлы имён присутствуют и юникодные
например ддд.txt не откроется... icWasya а не подскажите как кореектно сделать? |
#5
|
||||
|
||||
![]() Цитата:
Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |