Announcement

Collapse
No announcement yet.

Dokument öffnen Dialog

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

  • Dokument öffnen Dialog

    Moin,

    ihr kennt sicherlich den Dialog Neues Dokument von MS Word. Ein nettes kleines Window mit haufenweise Icons drin. Ich möchte so was auch in mein Programm einbauen, hab aber noch keinen Ansatzpunkt gefunden. Kennt einer von euch Komponenten oder Möglichkeiten sowas zu codieren?

    thanks a lot
    tb

  • #2
    Hallo,

    die folgende Implementierung stammt aus einem Beispielprojekt, dass ich auf den <i>Entwickler Tagen 2001</i> im Win32-API-Kurs verwendet habe. Man braucht keine neue Komponenten, eine eigene globale Funktion reicht völlig aus:

    Schritt 1: Neue Datenstruktur deklarieren
    <pre>
    const
    OFN_EX_NOPLACESBAR = 1;

    type
    // tagOFNA aus CommDlg.pas erweitern
    TOpenFileNameW2K = packed record
    lStructSize: DWORD;
    hWndOwner: HWND;
    hInstance: HINST;
    lpstrFilter: PAnsiChar;
    lpstrCustomFilter: PAnsiChar;
    nMaxCustFilter: DWORD;
    nFilterIndex: DWORD;
    lpstrFile: PAnsiChar;
    nMaxFile: DWORD;
    lpstrFileTitle: PAnsiChar;
    nMaxFileTitle: DWORD;
    lpstrInitialDir: PAnsiChar;
    lpstrTitle: PAnsiChar;
    Flags: DWORD;
    nFileOffset: Word;
    nFileExtension: Word;
    lpstrDefExt: PAnsiChar;
    lCustData: LPARAM;
    lpfnHook: function(Wnd: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM): UINT stdcall;
    lpTemplateName: PAnsiChar;
    // neu in Windows 2000
    pvReserved : Pointer;
    dwReserved : DWORD;
    FlagsEx : DWORD;
    end;
    </pre>
    Schritt 2: Win32-API-Funktion <b>GetOpenFileName</b> mit der neuen Struktur aufrufen
    <pre>
    function OSDlgOpen(var sOpenFile: String;
    const sStartDir, sFilter, sTitle: String;
    bBar: Boolean): Bool;
    var
    aOFN : TOpenFileNameW2K;
    TempFilter,
    TempFilename : String;

    // Implementierung von TOpenDialogaus Unit Dialogs übernehmen
    function AllocFilterStr(const S: string): string;
    var
    P: PChar;
    begin
    Result := '';
    if S <> '' then
    begin
    Result := S + #0; // double null terminators
    P := AnsiStrScan(PChar(Result), '|');
    while P <> nil do
    begin
    P^ := #0;
    Inc(P);
    P := AnsiStrScan(P, '|');
    end;
    end;
    end;

    begin
    Assert(IsW2K, cERRMSG);
    // Implementierung von TOpenDialogaus Unit Dialogs übernehmen
    FillChar(aOFN, SizeOf(aOFN), 0);
    with aOFN do
    begin
    lStructSize := SizeOf(TOpenFileNameW2K);
    hInstance := SysInit.HInstance;
    TempFilter := AllocFilterStr(sFilter);
    lpstrFilter := PChar(TempFilter);
    nFilterIndex := 0;
    nMaxFile := MAX_PATH;
    SetLength(TempFilename, nMaxFile + 2);
    lpstrFile := PChar(TempFilename);
    FillChar(lpstrFile^, nMaxFile + 2, 0);
    lpstrInitialDir := PChar(sStartDir);
    lpstrTitle := PChar(sTitle);
    Flags := OFN_EXPLORER;
    hWndOwner := Application.Handle;
    // neue Strukturfelder ergänzen
    if bBar then
    FlagsEx := OFN_EX_NOPLACESBAR;
    end;
    Result := GetOpenFileName(aOFN);
    sOpenFile := aOFN.lpstrFile;
    end;
    </pre&gt

    Comment


    • #3
      du must halt nach einer verzeichnis und dateikomponente suchen,
      die eben dieses aussehen hat oder mit einer treeview selbsat programmieren.

      mfg

      marku
      Herzliche Grüße

      Markus Lemcke
      barrierefreies Webdesign

      Comment


      • #4
        <br>Hi,...
        <br>
        <br>sowas kann man mit einer ListView-Komponente machen. Unter Delphi Karteikarte win32.
        <br>
        <br>mfg
        <br>p

        Comment


        • #5
          Bei http://www.agnisoft.com findet Ihr "Agni Win2000 FileOpenDialog"

          Comment


          • #6
            Nachdem ich die Mittelungen nochmals gelesen habe, habe ich den Verdacht, dass Ihr was ganz anderes sucht ... egal

            Comment

            Working...
            X