저장 대화 상자가 표시되는 동안 사용자의 필터 유형 변경을 연결하고 파일 확장명을 자동으로 변경하려고합니다. (예 : MSPaint의 '다른 이름으로 저장'작업)(저장 대화 상자) Vista/Win7에서 파일 필터 변경시 파일 확장자를 자동으로 변경하는 방법은 무엇입니까?
TSaveDialog를 사용하고 UseLatestCommonDialogs : = False로 설정하면 다음 코드로 처리 할 수 있습니다. (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;
둘 다 XP를 지원하고자, 델파이 2007과/7
내가 대신 TSaveDialog의 TFileSaveDialog 내부 래퍼와 함께 사용해야 비스타? (그리고 IFileDialogControlEvents을 사용하여 COM 프로그래밍에 어려움을 겪고 있습니까?)
또는 TFileSaveDialog로이를 수행 할 수 있습니까? (내 개발 환경은 XP 시스템에 아직, 그래서 나는 한 번도 안 써봤. 죄송합니다.)
나는 그것이 매우 일반적인 일이라고 생각하지만 비스타/7 ...
를 지원하는 모든 샘플 코드를 찾을 수 없습니다
고마워요! 하지만 대개 런타임에 이러한 대화 상자를 작성하므로 OS 버전 확인을 통해 TSaveDialog와 TFileSaveDialog를 모두 전환 할 수 있습니다. – benok
D2007과 호환됩니다. PChar/string-> PWideChar/WideString을 변경합니다 (D2009 이상에서 자동 형식 변환이 가능할 수 있습니다). 감사! p.s. Parent.ClassName = 'TFileSaveDialogWrapper'와 같이 "* SaveDialog1 * TypeChange"내부를 전환하려고했습니다.(대화 상자 클래스를 바꾸는 것보다 더 손쉬운 방법입니다.)하지만 구현 섹션에서 정의 된대로 래퍼를 해킹 할 수는 없습니다 ... – benok