Khi hiển thị hộp thoại lưu, tôi muốn tự động thay đổi loại bộ lọc của người dùng và tự động thay đổi phần mở rộng tệp. (ví dụ như hoạt động "Lưu dưới dạng" của MSPaint.)(Lưu hộp thoại) Làm thế nào để thay đổi phần mở rộng tập tin tự động vào thay đổi bộ lọc tập tin trong Vista/Win7?
Với TSaveDialog và thiết lập UseLatestCommonDialogs: = False, Tôi có thể xử lý điều này bằng mã sau. (Không có hỗ trợ thoại phổ biến mới nhất, của cource.)
procedure TForm1.SaveDialog1TypeChange(Sender: TObject);
var
FName, Ext: string;
begin
with TSaveDialog(Sender) do
begin
if DirectoryExists(FileName) then // FileName is Empty
exit;
case FilterIndex of
1: Ext := '.png';
2: Ext := '.bmp';
3: Ext := '.jpg';
end;
FName := ChangeFileExt(ExtractFileName(FileName), Ext);
SendMessage(Windows.GetParent(Handle), CDM_SETCONTROLTEXT, 1152, LongInt(PChar(FName)));
end;
end;
tôi muốn hỗ trợ cả XP và vista/7 với Delphi 2007.
Tôi có nên sử dụng TFileSaveDialog thay vì TSaveDialog với wrapper nội bộ? (Và tôi phải đấu tranh với lập trình COM bằng cách sử dụng IFileDialogControlEvents?)
Hoặc tôi có thể đạt được điều này với TFileSaveDialog và các thuộc tính tiêu chuẩn của nó không? (môi trường phát triển của tôi vẫn còn trên máy XP, vì vậy tôi đã không bao giờ cố gắng. Xin lỗi.)
Tôi nghĩ đó là nhiệm vụ rất phổ biến, nhưng tôi không thể tìm thấy bất kỳ mẫu mã hỗ trợ Vista/7 ...
Cảm ơn! Nhưng tôi thường tạo các hộp thoại này trong thời gian chạy, vì vậy tôi có thể chuyển đổi cả TSaveDialog và TFileSaveDialog bằng kiểm tra phiên bản hệ điều hành. – benok
Nó hoạt động với D2007. Tôi chỉ cần thay đổi PChar/string-> PWideChar/WideString. (Có thể nó hoạt động trên D2009 hoặc mới hơn với tự động chuyển đổi kiểu.). Cảm ơn! p.s. Tôi đã cố gắng chuyển đổi bên trong "* SaveDialog1 * TypeChange", sử dụng như "nếu Parent.ClassName = 'TFileSaveDialogWrapper'".(Đó là thủ công hơn chuyển đổi các lớp hộp thoại.) Nhưng tôi không thể hack wrapper, vì nó được định nghĩa trong phần thực hiện ... – benok