CnCommon单元之FileProperties、OpenDialog【4】

// 打开文件属性窗口
procedure
FileProperties(const FName: string); var SEI: SHELLEXECUTEINFO; begin with SEI do begin cbSize := SizeOf(SEI); fMask := SEE_MASK_NOCLOSEPROCESS or SEE_MASK_INVOKEIDLIST or SEE_MASK_FLAG_NO_UI; Wnd := Application.Handle; lpVerb := 'properties'; lpFile := PChar(FName); lpParameters := nil; lpDirectory := nil; nShow := 0; hInstApp := 0; lpIDList := nil; end; ShellExecuteEx(@SEI); end;

这个函数可以打开文件夹与各类文件的属性框.与上一篇的很类似,同样需引用Shellapi单元.这个函数用到的情况不多.这里面没用做字符串的结束符处理.

 

// 打开文件框
function OpenDialog(var FileName: WideString; const Title: WideString; const Filter: WideString;
  const Ext: WideString): Boolean;
var
  OpenName: TOPENFILENAMEW;
  TempFilename, ReturnFile: WideString;
begin
  with OpenName do
  begin
    lStructSize := SizeOf(OpenName);
    hWndOwner := GetModuleHandle('');
    Hinstance := SysInit.Hinstance;
    lpstrFilter := PWChar(Filter + #0 + Ext + #0#0);
    lpstrCustomFilter := '';
    nMaxCustFilter := 0;
    nFilterIndex := 1;
    nMaxFile := MAX_PATH;
    SetLength(TempFilename, nMaxFile + 2);
    lpstrFile := PWChar(TempFilename);
    FillChar(lpstrFile^, MAX_PATH, 0);
    SetLength(TempFilename, nMaxFile + 2);
    nMaxFileTitle := MAX_PATH;
    SetLength(ReturnFile, MAX_PATH + 2);
    lpstrFileTitle := PWChar(ReturnFile);
    FillChar(lpstrFile^, MAX_PATH, 0);
    lpstrInitialDir := '.';
    lpstrTitle := PWChar(Title);
    Flags := OFN_HIDEREADONLY + OFN_ENABLESIZING;
    nFileOffset := 0;
    nFileExtension := 0;
    lpstrDefExt := PWChar(Ext);
    lCustData := 0;
    lpfnHook := nil;
    lpTemplateName := '';
  end;
  Result := GetOpenFileNameW(OpenName);
  if Result then
    FileName := ReturnFile
  else
    FileName := '';
end;

一个很不常用的函数,一般都使用控件来弹出文件选择框,注意这里WIn7下要使用Unicode函数,不然无效.

 

posted on 2021-05-09 23:22  YXGust  阅读(109)  评论(0)    收藏  举报

导航