应该要win2000、win me中新的dll文件。

解决方案 »

  1.   

    你可以看MSDN的COMMDLG.DLL的帮助,然后直接调用Windows2000的COMMDLG.DLL里的函数。
    Delphi的通用对话框控件是封装过的,控件没有更新当然还是老面孔。
      

  2.   

    我使用下面的方法生成新式的对话框,但是有个问题:
    uses commdlg;
    ...
    procedure ...
    var
      ofn: TOpenFileName;  // common dialog box structure
      szFile: array[0..260] of char; // buffer for file name
      hwnd: Integer; //HWnd: owner window
      hf: Integer;   //Handle: file handle
    begin
    // Initialize OPENFILENAME
      FillChar(ofn, SizeOf(ofn), 0);
      FillChar(szFile, SizeOf(szFile), 0);
      ofn.lStructSize := sizeof(OPENFILENAME);
    //  ofn.hInstance := SysInit.HInstance;
      ofn.hwndOwner := Application.Handle;
      ofn.lpstrFile := szFile;
      ofn.nMaxFile := sizeof(szFile);
      ofn.lpstrFilter := 'All supported types' + #0 + '*.mp3;*.m3u' + #0 +
                         'PlayList Files (*.m3u)' + #0 + '*.m3u' + #0 +
                         'MPEG Audio Files (*.mp3)' + #0 + '*.mp3' + #0;
      ofn.nFilterIndex := 1;
      ofn.lpstrFileTitle := nil;
      ofn.nMaxFileTitle := 0;
      ofn.lpstrInitialDir := nil;
      ofn.Flags := OFN_PATHMUSTEXIST or OFN_FILEMUSTEXIST;
    // Display the Open dialog box.
      if GetOpenFileName(ofn) then
        hf := CreateFile(ofn.lpstrFile, GENERIC_READ, 0,
              nil, //(LPSECURITY_ATTRIBUTES) NULL,
              OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,
              null); //(HANDLE) NULL)
      opendialog1.FileEditStyle := fsEdit; 
    end
    如果最后这句不写的话,对话框就显示不出来,这是为什么呢?正确的写法是什么?
      

  3.   

    OK啦,把
    ofn.hwndOwner := Application.Handle;
    改成
    ofn.hwndOwner := self.Handle
    就可以了
    不需要opendialog1那句了。