![]() |
Windows OpenFileDialog - wie bekomme ich den?
Liste der Anhänge anzeigen (Anzahl: 2)
Moin,
der normale OpenFileDialog ist ja ganz schön aber wie bekomme ich diesen Dialog, wie man ihn von Windows kennt. Der 1. Screenshot zeigt den Dialog den ich gerne hätte. Der 2. Screenshot zeigt den StandardDialog. Wie rufe ich den 1. Dialog auf? Danke im Voraus. Sven |
AW: Windows OpenFileDialog - wie bekomme ich den?
TOpenDialog ?
|
AW: Windows OpenFileDialog - wie bekomme ich den?
1 ist nicht der Standarddialog.
Beides sind die gleichen Dialoge, aber da wurde an Beiden nachträglich unten an den Buttons/Optionen rumgepfuscht. Bei 2 wurde "Codierung" hinzugefügt. (gibt mehrere Tutorials/Beispiele, wie man das selber machen kann) Und links die Anzeige, das kann man in den Optionen der Dialoge einstellen. Offiziell (in Delphi): TOpenDialog die alte API (XP) TFileOpenDialog die neue API (seit Vista) aber der TOpenDialog leitet seit Vista (Delphi XE oder so) intern auf TFileOpenDialog um. Intern grauenhaft umgeleitet ... also besser direkt TFileOpenDialog verwenden, wenn das Programm eh nicht meht auf XP und älter laufen wird. Und da hast du dann auch direkt die aktuelleren Optionen zum richtig einstellen. |
AW: Windows OpenFileDialog - wie bekomme ich den?
Ich habe mir mal vor Ewigkeiten eine eigene Unit dafür angelegt, greift auf die Api zu anstelle der Delphi verbauten.
Wer mag kann damit rumspielen, der Code ist selbsterklärend.
Delphi-Quellcode:
uses Windows;
function OpenSaveFileDialog(ParentHandle: THandle; const DefExt, Filter, InitialDir, Title: string; var FileName: string; IsOpenDialog: Boolean): Boolean; implementation uses ShlObj, SysUtils; type POpenFilenameA = ^TOpenFilenameA; POpenFilename = POpenFilenameA; tagOFNA = 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; end; TOpenFilenameA = tagOFNA; TOpenFilename = TOpenFilenameA; function GetOpenFileName(var OpenFile: TOpenFilename): Bool; stdcall; external 'comdlg32.dll' name 'GetOpenFileNameA'; function GetSaveFileName(var OpenFile: TOpenFilename): Bool; stdcall; external 'comdlg32.dll' name 'GetSaveFileNameA'; const OFN_DONTADDTORECENT = $02000000; OFN_FILEMUSTEXIST = $00001000; OFN_HIDEREADONLY = $00000004; OFN_PATHMUSTEXIST = $00000800; function CharReplace(const Source: string; oldChar, newChar: Char): string; var i: Integer; begin Result := Source; for i := 1 to Length(Result) do if Result[i] = oldChar then Result[i] := newChar end; function OpenSaveFileDialog(ParentHandle: THandle; const DefExt, Filter, InitialDir, Title: string; var FileName: string; IsOpenDialog: 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 := ParentHandle; lpstrFile := szFile; nMaxFile := SizeOf(szFile); if (Title '') then lpstrTitle := PChar(Title); if (InitialDir '') then lpstrInitialDir := PChar(InitialDir); StrPCopy(lpstrFile, FileName); lpstrFilter := PChar(CharReplace(Filter, '|', #0)+#0#0); if DefExt '' then lpstrDefExt := PChar(DefExt); end; if IsOpenDialog 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; |
AW: Windows OpenFileDialog - wie bekomme ich den?
Oder man baut sich selber was. LOL
gruss |
AW: Windows OpenFileDialog - wie bekomme ich den?
Cool.
Das Forum und sein Mitglieder sind einzigartig. Ich kenne ich von keinem anderen Forum. Ich verwendet den TFileOpenDialog. Der reicht mir völlig. Hatte ich bis dato gar nicht auf dem Radar. Gruß und schönes WE Sven |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:12 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz