AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Vista OpenFileDialog

Ein Thema von Willie1 · begonnen am 28. Feb 2011 · letzter Beitrag vom 2. Mai 2011
Antwort Antwort
Seite 1 von 2  1 2      
Willie1

Registriert seit: 28. Mai 2008
668 Beiträge
 
Delphi 10.1 Berlin Starter
 
#1

Vista OpenFileDialog

  Alt 28. Feb 2011, 11:14
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

Geändert von Willie1 (28. Feb 2011 um 11:18 Uhr)
  Mit Zitat antworten Zitat
Willie1

Registriert seit: 28. Mai 2008
668 Beiträge
 
Delphi 10.1 Berlin Starter
 
#2

AW: Vista OpenFileDialog

  Alt 28. Feb 2011, 22:47
inzwischen kann ich mir die Antwort selbst geben. Ja, hier hat Borland geschlampt und etwas vergessen. Ich habe eine andere Lösung gefunden.
W.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#3

AW: Vista OpenFileDialog

  Alt 28. Feb 2011, 22:54
Wäre schön, wenn du uns diese noch mitteilen würdest.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von vergessen
vergessen

Registriert seit: 29. Jun 2010
85 Beiträge
 
Delphi 5 Professional
 
#4

AW: Vista OpenFileDialog

  Alt 28. Feb 2011, 23:17
inzwischen kann ich mir die Antwort selbst geben. Ja, hier hat Borland geschlampt und etwas vergessen. Ich habe eine andere Lösung gefunden.
W.
Was wo und wie bitte? Wo hat Borland da geschlampt?

Welche "andere Lösung gefunden"?

Bitte belegen oder Guttenbergen!

MfG
  Mit Zitat antworten Zitat
Willie1

Registriert seit: 28. Mai 2008
668 Beiträge
 
Delphi 10.1 Berlin Starter
 
#5

AW: Vista OpenFileDialog

  Alt 1. Mär 2011, 10:51
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.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#6

AW: Vista OpenFileDialog

  Alt 1. Mär 2011, 10:59
Wenn p PAnsiChar ist, dann sollte s auch AnsiString sein.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Willie1

Registriert seit: 28. Mai 2008
668 Beiträge
 
Delphi 10.1 Berlin Starter
 
#7

AW: Vista OpenFileDialog

  Alt 1. Mär 2011, 11:22
also p:=PAnsiChar(AnsiString(s)) ?
Willie
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#8

AW: Vista OpenFileDialog

  Alt 1. Mär 2011, 11:28
Jepp.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.202 Beiträge
 
Delphi 10.4 Sydney
 
#9

AW: Vista OpenFileDialog

  Alt 1. Mär 2011, 11:31
Borland hat vergessen diese Option ein zu bauen
Borland hat seit Jahren nix mehr mit Delphi zu tun.

des SwissDelphi Forum direkt comdlg32.dll angezapt.
Sinnvoll ist gleich die WideString-Version der entsprechenden API-Funktion zu verwenden.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#10

AW: Vista OpenFileDialog

  Alt 1. Mär 2011, 11:54
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.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:30 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz