![]() |
Vista OpenFileDialog
Hallo Leute,
bei dem Vista OpenFileDialog gibt es die Möglichkeit eine Datei nur zum Lesen zu öffnen. Diese Option vermisse ich bei der Delphi XE Komponente. Ich bin bei Delphi XE Neuling, übersehe ich da was? Gehört hier nicht hin: aber ich lese von einem Virus, der Delphi befallen soll? Ich habe Delphi XE Trial am Samstag installiert, könnte ich davon betroffen sein? MfG Willie |
AW: Vista OpenFileDialog
inzwischen kann ich mir die Antwort selbst geben. Ja, hier hat Borland geschlampt und etwas vergessen. Ich habe eine andere Lösung gefunden.
W. |
AW: Vista OpenFileDialog
Wäre schön, wenn du uns diese noch mitteilen würdest.
|
AW: Vista OpenFileDialog
Zitat:
Welche "andere Lösung gefunden"? Bitte belegen oder Guttenbergen! MfG |
AW: Vista OpenFileDialog
Hi, ich hatte gefragt, ob bei die Vista OpenFile Kompomente die Möglichkeit besteht, eine Datei als schreibgeschüzt zu öffnen. Diese Möglichkeit bietet der Vista OFD, Borland hat vergessen diese Option ein zu bauen.
Meine Lösung: Ich hatte für D-2005 nach einem Rezept des SwissDelphi Forum direkt comdlg32.dll angezapt. Die Umsetzung auf D-XE erweist sich als schwierig. U.a. löst (p: PAnsiChar, s: string) p:=PChar(s) eine Fehlermeldung des Compilers aus, auch p:=PAnsiChar(s) liefert nur das 1. Zeichen zurück! Kann jemand helfen? Wenn die Sache läuft, melde ich mich. W. |
AW: Vista OpenFileDialog
Wenn p PAnsiChar ist, dann sollte s auch AnsiString sein.
|
AW: Vista OpenFileDialog
also p:=PAnsiChar(AnsiString(s)) ?
Willie |
AW: Vista OpenFileDialog
Jepp.
|
AW: Vista OpenFileDialog
Zitat:
Zitat:
|
AW: Vista OpenFileDialog
Ich habe das mal schnell umgeschrieben und in eine Unit gepackt, falls jemand Fehler entdeckt, korrigiere man mich bitte.
Delphi-Quellcode:
unit uCustomFileDialog;
interface 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; tagOFNA = packed record lStructSize: DWORD; hWndOwner: HWND; hInstance: HINST; lpstrFilter: PAnsiChar; lpstrCustomFilter: PChar; 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; ParamW: WPARAM; ParamL: LPARAM): UINT stdcall; lpTemplateName: PAnsiChar; end; TOpenFilenameA = tagOFNA; POpenFilenameW = ^TOpenFilenameW; tagOFNW = packed record lStructSize: DWORD; hWndOwner: HWND; hInstance: HINST; lpstrFilter: PWideChar; lpstrCustomFilter: PChar; nMaxCustFilter: DWORD; nFilterIndex: DWORD; lpstrFile: PWideChar; nMaxFile: DWORD; lpstrFileTitle: PWideChar; nMaxFileTitle: DWORD; lpstrInitialDir: PWideChar; lpstrTitle: PWideChar; Flags: DWORD; nFileOffset: Word; nFileExtension: Word; lpstrDefExt: PWideChar; lCustData: LPARAM; lpfnHook: function(Wnd: HWND; Msg: UINT; ParamW: WPARAM; ParamL: LPARAM): UINT stdcall; lpTemplateName: PWideChar; end; TOpenFilenameW = tagOFNW; TOpenFilename = {$IFDEF UNICODE}TOpenFilenameW{$ELSE}TOpenFilenameA{$ENDIF}; function GetOpenFileName(var OpenFile: TOpenFilename): Bool; stdcall; external 'comdlg32.dll' name {$IFDEF UNICODE}'GetOpenFileNameW'{$ELSE}'GetOpenFileNameA'{$ENDIF}; function GetSaveFileName(var OpenFile: TOpenFilename): Bool; stdcall; external 'comdlg32.dll' name {$IFDEF UNICODE}'GetSaveFileNameW'{$ELSE}'GetSaveFileNameA'{$ENDIF}; 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; end. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:02 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 by Thomas Breitkreuz