एक सहेजने वाला संवाद दिखाते समय, मैं उपयोगकर्ता के फ़िल्टर प्रकार परिवर्तन को हुक करना और फ़ाइल एक्सटेंशन को स्वचालित रूप से बदलना चाहता हूं। (उदाहरण के लिए एमएसपीएन्ट की "सेव एज़" ऑपरेशन की तरह।)(सहेजें संवाद) Vista/Win7 में फ़ाइल फ़िल्टर परिवर्तन पर फ़ाइल एक्सटेंशन को स्वचालित रूप से कैसे बदलें?
TSaveDialog के साथ और UseLatestCommonDialogs को सेट करना: = गलत, मैं इसे निम्नलिखित कोड से संभाल सकता हूं। (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 समर्थन करना चाहते हैं, और विस्टा/7 डेल्फी 2007 के साथ
मैं आंतरिक आवरण के साथ TSaveDialog के बजाय TFileSaveDialog उपयोग करना चाहिए? (और मुझे IFileDialogControlEvents का उपयोग कर COM प्रोग्रामिंग के साथ संघर्ष करना है?)
या क्या मैं इसे TFileSaveDialog और केवल मानक गुणों के साथ प्राप्त कर सकता हूं? (मेरे विकास के वातावरण अभी भी XP मशीन पर खेद है, इसलिए मैं कभी नहीं की कोशिश की है।।)
मुझे लगता है कि यह बहुत ही सामान्य कार्य है, लेकिन मैं Vista/7 ...
समर्थन किसी भी नमूना कोड नहीं मिल सका
धन्यवाद! लेकिन मैं आमतौर पर रनटाइम में इन संवादों को बना देता हूं, इसलिए मैं ओएस संस्करण जांच के साथ दोनों TSaveDialog और TFileSaveDialog को स्विच कर सकता हूं। – benok
यह डी 2007 के साथ काम करता है। मैं बस पीसीहर/स्ट्रिंग-> PWideChar/वाइडस्ट्रिंग को बदलता हूं। (यह डी 2009 या बाद में ऑटो टाइप रूपांतरण के साथ काम करता है।)। धन्यवाद! पी। मैंने "* SaveDialog1 * TypeChange" के अंदर स्विच करने की कोशिश की, "अगर Parent.ClassName = 'TFileSaveDialogWrapper'" का उपयोग कर।(यह संवाद वर्गों को स्विच करने से आसान है।) लेकिन मैं रैपर को हैक नहीं कर सका, क्योंकि इसे कार्यान्वयन अनुभाग में परिभाषित किया गया है ... – benok