मैं डेल्फी XE6 में एक TSaveDialog
उपयोग करने के लिए कोशिश कर रहा हूँ शैलियों के साथ विफल रहता है:TSaveDialog ग्राहक दृश्य अक्षम
if not SaveDialog1.Execute(0) then
Exit;
कॉल तुरंत झूठी देता है, किसी भी संवाद प्रदर्शित किए बिना। मैं इसे खोल सहेजें संवाद COM वस्तु बनाने का कार्य करने के लिए नीचे का पता लगाया:
function TCustomFileSaveDialog.CreateFileDialog: IFileDialog;
var
LGuid: TGUID;
begin
LGuid := CLSID_FileSaveDialog;
CoCreateInstance(LGuid, nil, CLSCTX_INPROC_SERVER,
StringToGUID(SID_IFileSaveDialog), Result);
end;
CoCreateInstance
करने के लिए कॉल विफल हो रहा है।
0x80040111: ClassFactory अनुरोध किया वर्ग की आपूर्ति नहीं कर सकते, ClassID: {C0B4E2F3-BA21-4773-8DBA-335EC946EB8B
procedure TForm1.Button1Click(Sender: TObject); const CLSID_FileSaveDialog: TGUID = '{C0B4E2F3-BA21-4773-8DBA-335EC946EB8B}'; begin CreateComObject(CLSID_FileSaveDialog); end;
यह EOleSysError अपवाद फेंकता है: मैं इस मुद्दे को पुन: पेश करने में कम से कम कोड बनाया }
मेरा आवेदन आम नियंत्रण पुस्तकालय (6.0.7601.18837) के संस्करण 6 का उपयोग कर रहा है, लेकिन मैं केवल happe यह महसूस किया एनएस उपयोगकर्ता अपने आवेदन के लिए दृश्य शैलियों को अक्षम कर दिया है, तो:
हम अभी भी आम नियंत्रण पुस्तकालय के 6 संस्करण का उपयोग कर रहे, सिर्फ इतना है कि IsAppThemed
रिटर्न झूठी।
नोट: मुझे पता है बहुत से लोगों को गलती से कि विश्वास करते हैं:
- दृश्य शैलियाँ एपीआई ही काम करता है अगर हम Comctrl32.dll के संस्करण 6 लोड
- तो Comctrl32 के 6 संस्करण है। dll लोड किया जाता है, तो दृश्य शैलियाँ एपीआई
- हम ComCtrl v6 तो उपयोग नहीं कर रहे हैं काम करेंगे मतलब है कि अगर हम प्रयोग कर रहे हैं दृश्य शैलियाँ विकलांग
- दृश्य शैलियाँ विकलांग हैं पुराने आम नियंत्रण पुस्तकालय
जानवर बल समाधान वैश्विक UseLatestCommonDialogs गलत पर स्थापित करने के लिए है।
लेकिन वह, बहुत बुरा है, क्योंकि यह केवल जो लोग अपने आवेदन में विकलांग दृश्य शैलियों के लिए लागू होता है:
- संवाद दृश्य शैलियों के बिना ओएस पर काम जारी (जैसे Windows Server 2008 R2)
- संवाद के साथ दृश्य शैलियों बंद कर दिया (जैसे विंडोज 7 दृश्य शैलियों के साथ बंद कर दिया) काम करने के लिए
इसका मतलब यह है कि मैं बस, IsAppThemed
उपयोग नहीं कर सकते के रूप में वह भी झूठी लौटाता है यदि IsThemeActive
गलत है जारी है।
| IsThemeActive | IsAppThemed | Disable visual styles | Result |
|---------------|-------------|-----------------------|-----------|
| True | True | Unchecked | Works |
| True | False | Checked | Fails |
| False | False | Unchecked | Works |
| False | False | Checked | Fails |
क्या मैं लगता है कि मैं पूछ रहा हूँ कैसे disble दृश्य शैलियाँ compat ध्वज की स्थिति की जांच करने के लिए है।
मैं वास्तव में क्या पूछ रहा हूं कि TSaveDialog
डेल्फी में सही तरीके से काम करने के लिए कैसे है (बिना यह बताए कि कंपैट ध्वज को पढ़ने का समाधान समाधान का हिस्सा है)।
मुझे आशा है कि यह एक प्रश्न भी नहीं पहुंचाएगा, लेकिन क्यों "SaveDialog1.Execute (0)" और अधिक सामान्य "SaveDialog1.Execute" क्यों नहीं? – MartynA
@MartynA वैसे इसके लिए तीन कारण हैं i) '.xecute' कोड अंतर्दृष्टि में दिखाई नहीं देता है ii) 'Execute' को कॉल करने से विंडो को 'ApplicationMainHandle' iii' के स्वामित्व का कारण बनता है) वास्तव में मैं संवाद चाहता हूं जिस फॉर्म को मैं देख रहा हूं उसका स्वामित्व (उदाहरण के लिए 'SaveDialog1.Execute (Self.Handle) ')। लेकिन मैं नहीं चाहता था कि लोग 'निष्पादन' पर पारित पैरामीटर पर ध्यान केंद्रित करें, इसलिए मैंने इसे 'निष्पादित (0)' तक सरल बना दिया। हकीकत में, डेल्फी की खिड़की के स्वामित्व को तोड़ दिया गया है, और उसने मालिक को नजरअंदाज कर दिया - इसके बजाय जो कुछ भी आगे चाहता है उसे लाया। –
इस स्वीकृत उत्तर को ध्यान में रखते हुए: http://superuser.com/questions/694734/what-does-compatibility-option-disable-visual-themes-do यह जांचना उचित है ['IsCompositionActive'] (https: // msdn.microsoft.com/en-us/library/windows/desktop/bb759811(v=vs.85).aspx) भी? बस एक अनुमान – fantaghirocco