26.03.2009, 20:20
|
|
Активный
|
|
Регистрация: 22.09.2007
Адрес: SPb
Сообщения: 228
Версия Delphi: 7, 2009, XE2
Репутация: 70
|
|
можно самому, используя WinAPI функции вызвать диалог и работать с его окном:
Код:
uses
CommDlg;
function DialogHook(Wnd: HWND; Mes: UINT; wParam: WPARAM; lParam: LPARAM): UINT; stdcall;
var
Style: Integer;
Window: HWND;
begin
if Mes = WM_INITDIALOG then
begin
if (Win32MajorVersion >= 5) and (Win32Platform = VER_PLATFORM_WIN32_NT) or { Win2k }
((Win32Platform = VER_PLATFORM_WIN32_WINDOWS) and (Win32MajorVersion >= 4) and (Win32MinorVersion >= 90)) then { WinME }
Window:= GetWindowLong(Wnd, GWL_HWNDPARENT)
else
Window:= Wnd;
Style:= GetWindowLong(Window, GWL_STYLE);
SetWindowLong(Window, GWL_STYLE, Style and not WS_SYSMENU);
end;
Result:= 0;
end;
function OpFile(Form: HWND; Filter, DefExt: string; var Str: string): boolean;
var
OpenFN: TOpenFilename;
FileName: array[0..MAX_PATH-1] of Char;
begin
Result:= false;
FileName:= '';
lstrcpy(FileName, pChar(Str));
FillChar(OpenFN, SizeOf(TOpenFileName), 0);
with OpenFN do
begin
if (Win32MajorVersion >= 5) and (Win32Platform = VER_PLATFORM_WIN32_NT) or { Win2k }
((Win32Platform = VER_PLATFORM_WIN32_WINDOWS) and (Win32MajorVersion >= 4) and (Win32MinorVersion >= 90)) then { WinME }
lStructSize:= SizeOf(TOpenFilename)
else
lStructSize:= SizeOf(TOpenFilename) - (SizeOf(DWORD) shl 1) - SizeOf(Pointer); { subtract size of added fields }
hwndOwner:= Form;
lpstrFilter:= pChar(Filter);
lpstrFile:= FileName;
nMaxFile:= SizeOf(FileName);
lpstrDefExt:= pChar(DefExt);
lpfnHook:= DialogHook;
flags:= OFN_EXPLORER or OFN_FILEMUSTEXIST or OFN_NOREADONLYRETURN or
OFN_HIDEREADONLY or OFN_OVERWRITEPROMPT or OFN_ENABLEHOOK;
FlagsEx:= 0;
end;
if GetOpenFileName(OpenFN) then
begin
Str:= FileName;
Result:= true;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
s: string;
begin
if OpFile(Handle, 'exe files'#0'*.exe'#0'all files'#0'*.*'#0, '', s) then ShowMessage(s);
end;
__________________
Начинающий программист уверен, что в 1 килобайте 1000 байт.
Законченный программист уверен, что в 1 километре 1024 метра.
|