代码之家  ›  专栏  ›  技术社区  ›  Tom

如何从TOpenFileName对话框中删除“打开为只读”按钮功能

  •  0
  • Tom  · 技术社区  · 4 年前

    当我调用这个文件对话框时,它会显示一个很好的现代对话框 打开+作为只读按钮打开。

    如何删除“打开为只读”按钮功能?

    OpenSaveFileDialog(editform,'','my|*.my','','Open my',FilSelez,True,False,True,True) 
    
    function OpenSaveFileDialog(      Parent: TWinControl;
                                const DefExt,Filter,InitialDir,Title: string;
                                  var FileName: string;
                                      MustExist,OverwritePrompt,NoChangeDir,DoOpen: Boolean): Boolean;
         var ofn: TOpenFileName;
             szFile: array[0..MAX_PATH] of Char;
       begin
             Result := False;
             FillChar(ofn, SizeOf(TOpenFileName), 0);
             with ofn do
               begin
               lStructSize := SizeOf(TOpenFileName);
               hwndOwner := Parent.Handle;
               lpstrFile := szFile;
               nMaxFile := SizeOf(szFile);
    
               if (Title <> '') then
                  lpstrTitle := PChar(Title);
    
               if (InitialDir <> '') then
                  lpstrInitialDir := PChar(InitialDir);
    
               StrPCopy(lpstrFile, FileName);
               lpstrFilter := PChar(StringReplace(Filter, '|', #0,[rfReplaceAll, rfIgnoreCase])+#0#0);
    
               if DefExt <> '' then
                  lpstrDefExt := PChar(DefExt);
               end;
    
             if MustExist then
                ofn.Flags := ofn.Flags or OFN_FILEMUSTEXIST;
    
             if OverwritePrompt then
                ofn.Flags := ofn.Flags or OFN_OVERWRITEPROMPT;
    
             if NoChangeDir then
                ofn.Flags := ofn.Flags or OFN_NOCHANGEDIR;
    
             if DoOpen
                then begin
                     if GetOpenFileName(ofn) then
                        begin
                        Result := True;
                        FileName := StrPas(szFile);
                        end;
                     end
                else begin
                     if GetSaveFileName(ofn) then
                        begin
                        Result := True;
                        FileName := StrPas(szFile);
                        end;
                     end;
        end;
    
    1 回复  |  直到 4 年前
        1
  •  1
  •   Andreas Rejbrand    4 年前

    每次使用新的API时,都会阅读完整的文档。

    在这种情况下,你可以到文档中查看 GetOpenFileName 函数,你会发现它只有一个参数,一个类型的结构 OPENFILENAME .因此,你去 documentation 对于这个结构。

    在该页面上,在web浏览器中按Ctrl+F,然后搜索“只读”以快速找到以下文章:

    旗帜

    可用于初始化对话框的一组位标志。当对话框返回时,它会设置这些标志以指示用户的输入。此成员可以是以下标志的组合。

    [...]

    隐秘地 0x00000004

    隐藏只读复选框。

    因此,您意识到您只需要添加以下标志:

    ofn.Flags := ofn.Flags or OFN_HIDEREADONLY;