2009-09-15 8 views
7

Screen.DesktopHeight और Screen.DesktopWidth साथ में स्क्रीन के उपयोग किए जाने योग्य निर्देशांक कैसे मिलता है, मैं "आभासी" डेस्कटॉप का आकार प्राप्त कर सकते हैं और मुझे विश्वास है कि एक या एकाधिक मॉनिटर के लिए काम करता है।मैं डेल्फी

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

मैं इसे इस कोड के साथ मूल रूप से कर सकते हैं:

if MyForm.Width > screen.DesktopWidth then 
    MyForm.Width := screen.DesktopWidth; 

if MyForm.Height > screen.DesktopHeight then 
    MyForm.Height := screen.DesktopHeight; 

if (MyForm.Left + MyForm.Width) > screen.DesktopWidth then 
    MyForm.Left := screen.DesktopWidth - MyForm.Width; 
if MyForm.Left < 0 then MyForm.Left := 0; 

if (MyForm.Top + LogoAppForm.Height) > screen.DesktopHeight then 
    MyForm.Top := screen.DesktopHeight - LogoAppForm.Height; 
if MyForm.Top < 0 then MyFormTop := 0; 

यह ठीक काम करता है, सिवाय इसके कि इसे नहीं खाते में डेस्कटॉप के तल पर कार्यपट्टी आमतौर पर (लेकिन हमेशा नहीं) है कि ले करता है। तो यदि टास्कबार मेरे एप्लिकेशन की विंडो के रास्ते में है, तो मेरा एप्लिकेशन अस्पष्ट हो जाता है।

कैसे मुझे लगता है कि कार्य पट्टी के स्थान को बाहर स्क्रीन के प्रयोग करने योग्य स्थिति और आकार सेटिंग मिल सकता है?

उत्तर

12

मुझे यकीन है कि विंडोज वास्तव में जिस तरह से आपको लगता है यह करता है काम करता है नहीं कर रहा हूँ - मैं एकाधिक मॉनिटर है, लेकिन वे एक ही ऊंचाई की जरूरत नहीं है - तो मेरे डेस्कटॉप सब पर नज़र रखता है भर में एक समान ऊंचाई जरूरत नहीं है।

स्क्रीन का उपयोग करने के लिए मैं क्या करता हूं। मॉनिटर काउंटर और स्क्रीन। मॉनीटर सरणी यह ​​काम करने के लिए कि कौन सी मॉनीटर में अधिकांश विंडो होती है और फिर उस स्क्रीन पर एक उपयुक्त आयताकार पाता है। TMonitor की WorkareaRect प्रॉपर्टी आपको किसी विशेष मॉनीटर पर कार्यक्षेत्र का सीमा प्रदान करती है, जिसमें किसी भी टास्कबार या टूलबार शामिल नहीं होते हैं।

+0

टिप के लिए धन्यवाद। आप इसे कैसे करें इसके बारे में कोई विवरण नहीं देते हैं, इसलिए मुझे इसे सब कुछ करना होगा ... लेकिन यह सही विचार है। – lkessler

12

आप Screen.WorkArea * गुण का उपयोग करना चाहिए:

Screen.WorkAreaRect 
    Screen.WorkAreaHeight 
    Screen.WorkAreaLeft 
    Screen.WorkAreaTop 
    Screen.WorkAreaWidth 

या

Screen.Monitors[I].WorkareaRect 
+0

स्क्रीन। मॉनीटर [I]। वर्कअरेरारेक्ट वह फ़ंक्शन है जिसकी मुझे आवश्यकता है कि गैरेथम का उल्लेख नहीं किया गया है। धन्यवाद। मॉनीटर के बिना [मैं], यह केवल प्राथमिक मॉनीटर देता है। मुझे मॉनीटर के माध्यम से इसे सही तरीके से करने के लिए पुन: प्रयास करना होगा। – lkessler

3

मौजूदा फार्म के लिए कार्य क्षेत्र का निर्धारण करने के लिए, Monitor.WorkareaRect का उपयोग करें। जैसे

BoundsRect := Monitor.WorkareaRect; 

फॉर्म आकार को अधिकतम क्षेत्र में अधिकतम किए बिना सेट करने के लिए।

तुम भी TCustomForm.MakeFullyVisible विधि पर गौर करना चाहिए।

D2006 मदद से:

"। MakeFullyVisible जाँच करता है कि प्रपत्र निर्दिष्ट मॉनिटर पर पूरी तरह से फिट बैठता है यदि नहीं, तो यह रूप पुनर्स्थानापन्न इतना है कि यह, फिट बैठता है यदि संभव हो तो।"

+0

MakeFullyVisible काफी सही कार्य नहीं है। यद्यपि यह प्रपत्र दृश्य क्षेत्र में दिखाई देगा, लेकिन यह फॉर्म के स्थान को भी बदल देगा यदि यह दो मॉनीटर पर विभाजित है लेकिन पूरी तरह से दिखाई देता है - और मैं इसे बाद के मामले में नहीं ले जाना चाहता हूं। लेकिन इस समारोह को इंगित करने के लिए धन्यवाद। – lkessler

+0

मुझे संदेह था कि यह वही नहीं कर सकता जो वास्तव में चाहता था, मैंने हाल ही में इसे "खोजा"। ऐसा लगता है कि यह कार्य क्षेत्र का उपयोग नहीं करता है। –