// 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 D4 unter XP

uses commdlg, Jpeg; 
 
function OpenSaveDialog(H: THandle; opn: boolean; Titel, Filter, IniDir, 
  DefaultExt: string; idx: Cardinal): string; 
var 
  tfn: tagOFNA; 
  buffer: PChar; 
  mp: Cardinal; 
  so: Integer; 
begin 
  Result := ''; 
  mp := MAX_PATH; 
  so := sizeof(tagOFNA); 
  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; 
 
 
// Beispielaufrufe 
 
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, 'C:\Bilder', 'bmp', 2); 
  if s <> '' then 
    Image1.picture.loadfromfile(s); 
end; 
 
procedure TForm1.Button2Click(Sender: TObject); 
var s, pfd: string; 
  jp: TJpegImage; 
begin 
  pfd := 'C:\Bilder\'; 
  s := SaveDialog(Handle, '* JPG speichern *', 
    'JPeg'#0'*.jpg'#0, pfd, 'jpg', 1); 
  if s <> '' then begin 
    jp := TJpegImage.create; 
    jp.assign(Image1.Picture.graphic); 
    jp.savetofile(pfd + 'Test.jpg'); 
    jp.free; 
  end; 
end; 



Zugriffe seit 6.9.2001 auf Delphi-Ecke