2016-08-18 12 views
8

Zaten TSaveDialog ve Delphi overwrite existing file on save dialog [ofOverwritePromt] fikri hakkında basit bir soru var. TSaveDialog dosya uzantısı ve [ofOverwritePromt] sorunu

Yani benim sorun/senaryo takip ediyor:
  • Ben TSaveDialog
  • ben filtreyi için "PDF (* .pdf) set Options
  • yılında [ofOverwritePromt] ayarlanmış | * .pdf "
  • Filtre endeksi programa yürütmek ve iletişim çağrı Şimdi 1

olarak ayarlanır.

save dialog

Ama aynı eylemleri yapmak ama eğer olmadan 'Testi' gibi dosya adını yazın: I (yazmadan) fare veya klavye ile seçmek dosya daha sonra iletişim kaydetmek Varlığından beni sorarsa mesajla üzerine yazmak uzantıyı belirterek kaydetme iletişim kutusu üzerine yazmayı onaylamaz. Bunun aslında "C: \ Users \ xxx \ Desktop \ Test.pdf" yerine "C: \ Users \ xxx \ Desktop \ Test" adlı başka bir dosya adı döndürdüğünü biliyorum. iletişim dosyasını kaydetmek ister eğer biraz hoş değil, ancak uzantısını yazmanız gerekir .. Yani genellikle böyle hallederim:

repeat 
    { Ask for the file if not silent } 
    if not dlgSave.Execute then 
    Exit; 

    { Read the filename from the save dialog } 
    LTempFile := dlgSave.FileName; 
    if not SameText(ExtractFileExt(LTempFile), '.pdf') then 
    begin 
     { Add the extension } 
     LTempFile := LTempFile + '.pdf'; 

     { As we bypassed the overwrite check in dialog do it now } 
     if FileExists(LTempFile) then 
     if MsgWarn(Format('%s already exists. Replace?', [ExtractFileName(LTempFile)]), mbOKCancel) <> mrOk then 
      Continue; 
    end; 

    Break; 
until False; 

var mı yapmak daha şık olduğunu bir yolu Standart iletişim kutusu'u özelleştirmeden ?

cevap

13

Tahminim, DefaultExt ayarlamamanızdır, bu yüzden boş bir uzantı almanızın nedeni budur. Bu özelliği kullanın ve sorun olmayacak. Birden fazla filtre kullanıyorsanız, OnFilterChange olayını kullanın. İşte bunu yapmanın bir yolu:

procedure TFormMain.SigSaveDialogMainTypeChange(Sender: TObject); 
begin 
    case (Sender as TSaveDialog).FilterIndex of 
    0: (Sender as TSaveDialog).DefaultExt := 'pdf'; 
    1: (Sender as TSaveDialog).DefaultExt := 'txt'; 
    end; 
end; 

Ayrıca, uzantıyı denetlemeniz ve değiştirmek zorunda olmadığınız anlamına da gelir!

+0

Çok teşekkür ederim! Bu özelliği nasıl özleyebilirim ... belki de tatilden önceki son gün olduğu için: D –

+0

Bir şey değil. Eğer mutluysanız, lütfen cevabı kabul edildi olarak işaretleyin. – Dsm