2016-08-18 14 views
8

Có một câu hỏi đơn giản về ý tưởng của TSaveDialog và [ofOverwritePromt] tại Delphi overwrite existing file on save dialog.Phần mở rộng tệp TSaveDialog và vấn đề [ofOverwritePromt]

Vì vậy, vấn đề của tôi/kịch bản là như sau:

  • Tôi có một TSaveDialog
  • tôi đặt [ofOverwritePromt] trong Options
  • tôi đặt các bộ lọc để "PDF (* .pdf) | * .pdf "
  • Chỉ mục bộ lọc được đặt thành 1

Bây giờ tôi thực hiện chương trình và gọi hộp thoại. Nếu tập tin tôi chọn VỚI chuột hoặc bàn phím (mà không cần gõ) tồn tại sau đó lưu hộp thoại hỏi tôi ghi đè lên với thông điệp:

save dialog

Nhưng nếu tôi làm những hành động tương tự nhưng gõ tên tập tin như 'thử nghiệm' mà không xác định phần mở rộng hộp thoại lưu không xác nhận ghi đè. Tôi biết rằng thực sự nó trả về một tên tập tin "C: \ Users \ xxx \ Desktop \ Test" thay vì "C: \ Users \ xxx \ Desktop \ Test.pdf". Nó là loại không thoải mái nếu hộp thoại yêu cầu bạn lưu các tập tin, nhưng bạn cần phải gõ phần mở rộng .. Vì vậy, thường tôi xử lý nó như thế này:

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; 

Có cách nào để làm điều đó thêm thanh lịch mà không tùy chỉnh hộp thoại tiêu chuẩn?

Trả lời

13

Tôi đoán là bạn không đặt DefaultExt, đó là lý do bạn nhận được tiện ích mở rộng trống trở lại. Sử dụng thuộc tính này và bạn sẽ không gặp vấn đề gì. Nếu bạn sử dụng nhiều bộ lọc, hãy sử dụng sự kiện OnFilterChange. Dưới đây là một cách để thực hiện:

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; 

Điều này cũng có nghĩa là bạn không phải kiểm tra tiện ích mở rộng và thay đổi!

+0

Cảm ơn bạn rất nhiều! Làm thế nào tôi có thể bỏ lỡ tài sản đó ... có lẽ vì đó là ngày cuối cùng trước khi đi nghỉ: D –

+0

Bạn được chào đón. Nếu bạn hài lòng, vui lòng đánh dấu câu trả lời là đã được chấp nhận. – Dsm

Các vấn đề liên quan