2009-01-21 9 views
10

मेरे पास एक ऐसा एप्लिकेशन है जहां मुख्य पृष्ठभूमि फॉर्म है, वहां से उपयोगकर्ता केवल गैर-मोडल रूपों को ही सिस्टम के विभिन्न हिस्सों को बनाए रख सकता है। गैर मोडल रूपों CreateParams विधि ओवरराइड करता है तो हर एक शुरुआत कार्य पट्टी में एक बटन प्रदर्शित करता है:डेल्फी, केवल माता-पिता के रूप में केवल एक प्रारूप मोडल बनाने के लिए संभव है?

procedure TfmMaterialsPlanning.CreateParams(var Params: TCreateParams); 
begin 
    inherited; 
    //create a new window on the task bar when this form is created 
    Params.ExStyle := Params.ExStyle or WS_EX_APPWINDOW; 
end; 

वास्तव में, एक उपयोगकर्ता एक गैर-मोडल रूप है कि का कहना है 'सेब', एक और गैर-मोडल खोल सकते हैं फॉर्म जो 'संतरे' बनाए रखता है, और दोनों के बीच आसानी से स्विच करने के लिए स्टार्ट मेनू बार का उपयोग करें।

हालांकि, अगर वे 'सेब' फॉर्म से एक मोडल फॉर्म खोलते हैं, उदा। विकल्पों, प्राथमिकताओं, आदि को सेट करने के लिए, तब तक वे 'संतरे' रूपों का उपयोग नहीं कर सकते हैं जब तक कि वे मोडल फॉर्म बंद न करें।

क्या यह केवल माता-पिता के रूप में मोडल फॉर्म मोडल बनाना संभव है? तो अगर वे ऐप्पल के विकल्प फॉर्म खोलते हैं, तो वे एप्पल रखरखाव फॉर्म का उपयोग नहीं कर सकते हैं, लेकिन फिर भी संतरे रखरखाव के रूप का उपयोग कर सकते हैं?

धन्यवाद

उत्तर

0

आप ध्यान स्वीकार करते समय अपने बच्चे को प्रपत्र खुला है से "एपल्स" फ़ॉर्म रोकने के द्वारा एक ही प्रभाव को प्राप्त नहीं किया जा सका?

-2

यह संभव है, यदि आप अपने स्वयं के धागे में प्रत्येक गैर-मोडल फॉर्म बनाते हैं। प्रत्येक मोडल फॉर्म उस धागे को अवरुद्ध कर देगा जो इसके अंतर्गत आता है।

संपादित करें: यह संभव होना चाहिए, भले ही vcl थ्रेड-सुरक्षित न हो। तो अगर आप रूपों है कि एक अलग थ्रेड में तो जीना चाहिए उन्हें एक dll में जगह का एक सेट है, तो

, संकुल के बिना यह संकलन और उपयोग करें: कृपया यह कैसे किया जा सकता है की Alexeys explanation पर एक नज़र डालें! यह काम करेगा और यह थ्रेड-सुरक्षित होगा।

+0

वीसीएल का उपयोग करते समय करना असंभव है, यह GUI सामान करते समय केवल एक थ्रेड से उपयोग किया जा सकता है। – mghie

+0

सच है, लेकिन फिर प्रत्येक डीएलएल की पूरी वीसीएल और अपनी स्वयं की एप्लिकेशन ऑब्जेक्ट की अपनी प्रति है। आईएमओ यह पहली जगह में अलग निष्पादन योग्य के साथ जाने से शायद ही बेहतर है। – mghie

+0

अब मैं रोबो चीजों को जिस तरह से वर्णन करता हूं, वह क्यों नहीं चाहता। वह पूछता है कि क्या यह संभव है, और मैं कहता हूं कि यह है। आप कहते हैं कि यह नहीं है, मैं कहता हूं कि आप गलत हैं ... – Vegar

6

आप) TCustomForm.ShowModal (के स्रोत कोड पर एक नज़र आपको लगता है कि VCL मोडल संवाद दिखाने के लिए Windows API कॉल का उपयोग नहीं करता देखेंगे, लेकिन यह बजाय में अन्य सभी रूपों को निष्क्रिय करता है कि है, तो आवेदन मोड के दौरान आवेदन दिखाया गया है। आप निश्चित रूप से वही कोशिश कर सकते हैं, बस फॉर्म-मोडल संवाद दिखाएं(), फिर माता-पिता को अक्षम करें, फिर फॉर्म-मोडल संवाद बंद होने के बाद इसे फिर से सक्षम करें। वहां एक केंद्रीय स्थान होना चाहिए जहां आप फॉर्म-मोडल संवादों का ट्रैक रखें, वे रूप जिन्हें पुनः सक्षम करने की आवश्यकता है और इसी तरह। हालांकि, आपको पूरी तरह से परीक्षण करना चाहिए कि क्या कोड वास्तव में करता है कि आप इसे क्या करना चाहते हैं, भले ही एप्लिकेशन को कम करने के दौरान, अनुप्रयोगों के बीच आगे और पीछे स्विच करते समय भी।

ऐसा कहकर - मुझे नहीं लगता कि यह एक अच्छा विचार है। यह उन सभी मान्यताओं को तोड़ता है जो एक विंडोज उपयोगकर्ता अनुप्रयोगों के व्यवहार के बारे में बनाता है। मैक ओएस एक्स के विपरीत विंडोज़ में एप्लिकेशन-मोडल और फॉर्म-मोडल डायलॉग के बीच कोई भेद नहीं है, और आपको उस प्लेटफार्म के अनुरूप व्यवहार करना चाहिए जो आप प्रोग्रामिंग कर रहे हैं।

आपके यूआई को व्यवस्थित करने का शायद एक बेहतर तरीका है। "विंडोज उपयोगकर्ता अनुभव इंटरैक्शन दिशानिर्देश" में dialog boxes के लिए प्रासंगिक पृष्ठ पर एक नज़र डालें। जितना संभव हो सके मॉडल से बेहतर तरीके से बचा जा सकता है, जुड़े दिशानिर्देश कई उपयोग मामलों के लिए बेहतर विकल्प दिखाते हैं। यदि आप मोडल संवादों के उपयोग को सीमित करते हैं, तो आपको अब फॉर्म-मोडल संवाद की आवश्यकता नहीं है।

+1

यदि उपयोगकर्ता के पास दो टास्कबार बटन हैं, तो यह पूरी तरह से यूआई दिशानिर्देशों के भीतर है कि उन दो विंडो में से एक द्वारा दिखाया गया एक मॉडल संवाद अन्य विंडो को अवरुद्ध नहीं करता है। तथ्य यह है कि एक ही प्रक्रिया द्वारा दो टास्कबार बटन होस्ट किए जाते हैं, उपयोगकर्ता के लिए अप्रासंगिक है। मैं वास्तव में तर्क दूंगा कि एक मोडल संवाद दोनों विंडोज़ को अनुचित करता है। वैसे भी, डैनियल एक समाधान के लिए लिंक करता है जो काम करता है। –

0

बस एक तरफ के रूप में (हालांकि यह बहुत काम करेगा), इस समस्या का एक और तरीका Google क्रोम चला गया है, जहां प्रत्येक "टैब" एक अलग प्रक्रिया है लेकिन उपयोगकर्ता को एक एकीकृत के रूप में दिखाई देती है आवेदन।

भले ही यह दृष्टिकोण आप जो चाहते थे उसे प्राप्त करेंगे, मुझे उपरोक्त टिप्पणी से सहमत होना होगा कि यह उपयोगकर्ता व्यवहार और मोडल व्यवहार के बारे में अपेक्षाओं को तोड़ देगा।

3

इस पोस्ट में अपनी आवश्यकताओं को पूरा करने के लिए एक अच्छा चाल है: http://blogs.teamb.com/deepakshenoy/2006/08/21/26864

सारांश nonmodal खिड़की जब मोडल विंडो यह अक्षम आप चाहते हैं फिर से सक्षम है।

+0

बढ़िया काम करता है! शायद कुछ अतिरिक्त तर्क जोड़ने का एक अच्छा विचार है, इसलिए जब यह अपने आप के एक मॉडल संवाद दिखा रहा है तो फॉर्म 'WM_REENABLED' को स्वयं नहीं भेजता है। –

संबंधित मुद्दे