Announcement

Collapse
No announcement yet.

OpenDialog in Detail-Ansicht öffnen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • OpenDialog in Detail-Ansicht öffnen

    Hallo zusammen,

    hat mir jemand eine Anregung, wie ich den TOpenDialog so ausführen kann, dass er mir die Dateiliste nach Datum sortiert in der Detail-Ansicht öffnet???
    Standardmäßig wird immer nur mit der Option "Liste" geöffnet und nach dem Datei-Namen sortiert.
    Ziel ist es, immer die aktuellste Datei ganz oben in der Liste zu haben.

    Mit den Options [...] geht's leider nicht

    Danke Euch für eine kurze Hilfe, Achim

  • #2
    du könntest im "onIncludeItem drauf reagieren und die
    Position verändern.

    SHLObj in die uses einbinden

    procedure TForm1.OpenDialog1IncludeItem(const OFN: TOFNotifyEx;
    var Include: Boolean);
    var
    fi : WIN32_FILE_ATTRIBUTE_DATA;
    sr : _STRRET;
    FileName : string;
    begin
    ofn.psf.GetDisplayNameOf(ofn.pidl, SHGDN_FORPARSING, sr);
    case sr.uType of
    STRRET_CSTR : FileName := sr.cStr;
    STRRET_WSTR : FileName := sr.pOleStr;
    STRRET_OFFSET: FileName := PChar(Cardinal(ofn.pidl)+sr.uOffset);
    end;

    GetFileAttributesEx (PChar(FileName), GetFileExInfoStandard, @fi);
    // hier kannst du jetzt z.B prüfen mit
    // fi.ftCreationTime und das Item verschieben

    end

    Comment


    • #3
      Hallo Andreas,

      sorry dass ich erst jetzt antworte, war die letzten Tage geschäftlich unterwegs.
      Danke für Deine Idee. Hört sich recht verzwickt an, aber ich werd's mal ausprobieren und dann wieder Bescheid geben, ob's geklappt hat.
      Bis dann, Gruß Achi

      Comment


      • #4
        Hallo Andreas,

        damit kann ich zwar die Anordnung der Files in der Liste manipulieren, aber der Benutzer hat trotzdem keine Kontrolle darüber, ob es tatsächlich das neuste File ist.
        Also muss er trotzdem wieder die Anzeige-Option manuell auf "Details" umstellen, um das Datum + Uhrzeit angezeigt zu bekommen. Und genau darum geht's mir.
        Ist es nicht möglich, den Dialog so zu starten, dass er defaultmäßig die Anzeige-Option "Details" aktiv hat???
        Weil dann ist es auch kein Act mehr für Ihn, die Sortierung nach Datum selbst vorzunehmen und damit auch sicher zu wissen, dass das neuste File ganz oben steht.

        Danke schon mal vorab, Gruß Achi

        Comment


        • #5
          Moin Achim,
          ich fürchte, da wird Dir niemand weiterhelfen können.
          TOpenDialog.Execute ruft die API-Funktion "GetOpenFileName" auf, in der sich vieles einstellen läßt. Eine "Ansichtsoption habe ich dabei aber noch nicht entdeckt.
          Gruß,
          Geer

          Comment


          • #6
            Code um Caption zu ändern und um auf Detailansicht zu schalten:

            OpenSaveDialogParentWnd: HWnd;
            OpenSaveDialogCaption: array[0..cLenghtDialogCaption] of Char;

            procedure TDM.OpenDialog1Show(Sender: TObject);
            begin
            OpenSaveDialogParentWnd:= 0;
            (Sender as TCommonDialog).Tag:= -1;
            OpenSaveDialogParentWnd:= GetParent((Sender as TCommonDialog).Handle);
            FillChar(OpenSaveDialogCaption, SizeOf(OpenSaveDialogCaption), #0);
            if OpenSaveDialogParentWnd <> 0 then begin
            GetWindowText(OpenSaveDialogParentWnd, OpenSaveDialogCaption, cLenghtDialogCaption);
            StrCat(OpenSaveDialogCaption, ' - ');
            end;
            end;

            procedure TDM.OpenDialog1FolderChange(Sender: TObject);
            var
            lDefViewWnd: HWnd;
            s: string;
            begin
            if OpenSaveDialogParentWnd <> 0 then begin
            if (Sender is TOpenDialog) then
            s:= (Sender as TOpenDialog).FileName
            else if (Sender is TSaveDialog) then
            s:= (Sender as TSaveDialog).FileName
            else
            s:= '';
            if not DirectoryExists(s) then
            s:= ExtractFilePath(s);
            SendMessage(OpenSaveDialogParentWnd, WM_SETTEXT, 0, LongInt(PChar(OpenSaveDialogCaption + s)));
            if (Sender as TCommonDialog).Tag = -1 then begin
            lDefViewWnd:= FindWindowEx(OpenSaveDialogParentWnd, 0, PChar('SHELLDLL_DefView'), nil);
            if lDefViewWnd <> 0 then begin
            SendMessage(lDefViewWnd, WM_Command, $702C, 0);
            (Sender as TCommonDialog).Tag:= 0;
            end;
            end;
            end;
            end

            Comment


            • #7
              Hallo Dietmar,

              vielen Dank für Deinen guten Tipp...es klappt prima.
              Genau so hab ich mir das vorgestellt. DANKE

              Schönen Tag noch, Gruß Achi

              Comment

              Working...
              X