كيف يمكنني الحصول على الاحداثيات يمكن استخدامها للشاشة في دلفي

StackOverflow https://stackoverflow.com/questions/1424920

سؤال

ومع 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;

وهذا يعمل على ما يرام، إلا أنه لا يأخذ بعين الاعتبار المهام التي عادة ما تكون (ولكن ليس دائما) في الجزء السفلي من سطح المكتب. لذلك إذا كان شريط المهام في طريق نافذة التطبيق الخاص بي، ويحصل على حجب طلبي.

وكيف يمكنني الحصول على موقف وحجم إعدادات قابلة للاستخدام الشاشة التي تستبعد الموقع من شريط المهام؟

هل كانت مفيدة؟

المحلول

ولست متأكدا من أن ويندوز يعمل حقا الطريقة التي تفكر يفعل - لدي أجهزة عرض متعددة، ولكن لم يكن لديهم نفس الارتفاع - حتى سطح المكتب لايوجد ارتفاع موحد في جميع المراقبين

ما أقوم به هو استخدام Screen.MonitorCount ومجموعة Screen.Monitors للعمل على أي جهاز يحتوي على أكثر من النافذة ومن ثم العثور على المستطيل مناسب على هذه الشاشة. الخاصية WorkareaRect من TMonitor تمنحك حدود منطقة العمل على شاشة معين، الذي يستبعد أي أشرطة المهام أو أشرطة الأدوات.

نصائح أخرى

ويجب عليك استخدام خصائص Screen.WorkArea *:

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

أو

Screen.Monitors[I].WorkareaRect

لتحديد منطقة العمل للنموذج الحالي، استخدم Monitor.WorkareaRect. منها مثلا.

BoundsRect := Monitor.WorkareaRect;

لتعيين حجم النموذج إلى أقصى المنطقة دون تحقيق أقصى قدر من ذلك.

ويجب أن ننظر أيضا في في TCustomForm.MakeFullyVisible الأسلوب.

ومن مساعدة D2006:

و"الشيكات MakeFullyVisible سواء على شكل يناسب تماما على شاشة محددة. إذا لم يكن كذلك، تتأهب النموذج بحيث تناسبها، إذا كان ذلك ممكنا."

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top