Lösungsvorschlag für einen Dialog mit dem man sowohl Dateien als auch Ordner auswählen kann.



  • Ich hab mir jetzt mal eine Lösung gebastelt die macht was ich will:

    #define STRICT
    //...
    HWND DiagFeld;
    WNDPROC OldProc;
    bool CharSet;
    //...
    LRESULT CALLBACK NewProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
    {
     if(uMsg==WM_LBUTTONUP)
     {
       if(GetWindowTextLength(DiagFeld)==0)
       {
        SetWindowText(DiagFeld, "#");
        CharSet=true;
       }
     }
     return CallWindowProc(OldProc, hwnd, uMsg, wParam, lParam);
    }
    
    void __fastcall TForm1::saveShow(TObject *Sender)
    {
     HWND hDialog = GetParent(((TOpenDialog*)Sender)->Handle);
     HWND button  = GetDlgItem(hDialog, ID_OK);
     DiagFeld     = GetDlgItem(hDialog, 1152);
    
     OldProc=(WNDPROC)SetWindowLong(button,GWL_WNDPROC,(LONG)NewProc);
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::saveFolderChange(TObject *Sender)
    {
     if(CharSet)
     {
      SetWindowText(DiagFeld, "");
      CharSet=false;
     }
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
     if(save->Execute())
     if(CharSet)
      save->FileName=ExtractFilePath(save->FileName);
     ShowMessage(save->FileName);
    }
    

    Ist vielleicht nicht die schönste Lösung aber sie tut.

    Wollte jetzt mal fragen was ihr so davon haltet.



  • Hi,
    ich hab's mal ausprobiert, aber nach wie vor kann ich nur Dateien auswählen, keine Ordner. Hab ich vielleicht irgendetwas übersehen?
    Bei 'save' bin ich mal davon ausgegangen, daß es sich um einen TSaveDialog handelt.
    Gruß,
    Christian



  • Hi

    Die Ordnerauswahl funktioniert so, dass der Dialog den Ordner zurück gibt in dem sich der Benutzer aktuell befindet wenn dieser auf "Speichern klickt".
    Bei mir funktioniert das jedenfalls wunderbar.


Anmelden zum Antworten