// Mit diesem Code erstellt man einen NON-VCL-Dialog zum Öffnen oder
// Speichern von Dateien, welcher in etwa dem
TOpenDialog der VCL
// entspricht, aber zusätzlich wird
(zumindest bei D4) eine Leiste
// mit "Verlauf", "Desktop", "Arbeitsplatz" und "Netzwerkumgebung"
// angezeigt.


// Getestet mit RS 10.4 unter
W11

uses Winapi.commdlg; 
 
function OpenSaveDialog(H: THandle; opn: boolean; 
  Titel, Filter, IniDir, DefaultExt: string; idx: Cardinal): string; 
var 
  tfn: TOpenFilename; 
  buffer: PChar; 
  mp: Cardinal; 
  so: Integer; 
begin 
  Result := ''; 
  mp := MAX_PATH; 
  so := sizeof(tfn); 
  zeromemory(@tfn, so); 
  buffer := AllocMem(mp); 
  tfn.lStructSize := so; 
  tfn.lpstrTitle := PChar(Titel); 
  tfn.hwndOwner := H; 
  tfn.lpstrFilter := PChar(Filter); 
  tfn.nFilterIndex := idx; 
  tfn.lpstrInitialDir := PChar(IniDir); 
  tfn.flags := OFN_HIDEREADONLY; 
  tfn.lpstrFile := buffer; 
  tfn.nMaxFile := mp; 
  tfn.nMaxFileTitle := mp; 
  tfn.lpstrDefExt := PChar(DefaultExt); 
  if opn then 
  begin 
    tfn.flags := tfn.flags or OFN_FILEMUSTEXIST or OFN_PATHMUSTEXIST; 
    if GetOpenFileName(tfn) then 
      Result := tfn.lpstrFile; 
  end 
  else 
  begin 
    tfn.flags := tfn.flags or OFN_OVERWRITEPROMPT; 
    if GetSaveFileName(tfn) then 
      Result := tfn.lpstrFile; 
  end; 
  FreeMem(buffer); 
end; 
 
function OpenDialog(H: THandle; Titel, Filter, IniDir, DefaultExt: string; 
  idx: Cardinal): string; 
begin 
  Result := OpenSaveDialog(H, TRUE, Titel, Filter, IniDir, DefaultExt, idx); 
end; 
 
function SaveDialog(H: THandle; Titel, Filter, IniDir, DefaultExt: string; 
  idx: Cardinal): string; 
begin 
  Result := OpenSaveDialog(H, FALSE, Titel, Filter, IniDir, DefaultExt, idx); 
end; 
 
 
// Beispiele 
procedure TForm1.Button1Click(Sender: TObject); 
var 
  s, Filter: string; 
begin 
  Filter := 'Alle Dateien'#0'*.*'#0 + 'Bitmap'#0'*.bmp'#0 + 
    'JPeg'#0'*.jpg;*.jpeg'#0; 
  s := OpenDialog(Handle, '* Bilder öffnen *', Filter, 'D:\Bilder', 'bmp', 2); 
  if s <> '' then 
    Image1.picture.loadfromfile(s); 
end; 
 
procedure TForm1.Button2Click(Sender: TObject); 
var 
  s, pfd: string; 
begin 
  pfd := 'D:\Bilder\'; 
  s := SaveDialog(Handle, '* Speichern *', 'Bitmap'#0'*.bmp'#0, pfd, 'bmp', 1); 
  if s <> '' then 
    Image1.picture.savetofile(s); 
end;
 



Zugriffe seit 6.9.2001 auf Delphi-Ecke