سؤال

هل هناك طريقة لتحديد أي مراقبة تطبيق يظهر على في دلفي أو بناء C ++؟

وأنا تطوير برنامج بسيط لأحد الزبائن، والذي يعرض أوامر المطبخ على جهاز العرض الثانوي، التي تم إنشاؤها بواسطة نظام الضيافة. حاليا التي يحتاجونها لسحب نافذة يدويا على جهاز العرض الثاني بعد بدء تشغيله.

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

المحلول

وانقاذ الموقف نافذة قبل اغلاق البرنامج واستعادتها عند بدء التشغيل. يعرض Multimonitor مجرد زيادة حجم سطح المكتب. الأسطح رصد أخرى يكون مجرد مقطع آخر من نفس الطائرة X / Y مع أصله في الجزء العلوي الأيسر من جهاز العرض الأساسي.

ويمكن أن يتم ذلك تلقائيا بالنسبة لك من قبل أي من عدة عناصر .

وراجع للشغل، المتغير الشاشة في وحدة نماذج لديه خاصية تسمى MonitorCount والممتلكات فهرسة أخرى، ويرصد [الوثيقة: صحيح]: TMonitor. TMonitor له خصائص تشير إلى اليسار، أعلى، العرض، الارتفاع الخ، لذلك كل ما تحتاجه من معلومات هناك.

نصائح أخرى

والكائن شاشة العالمي (جزء من أشكال) لديه مفهوم الشاشات. وأعتقد أن وأضيف هذا حوالي دلفي 6 أو 7. التعليمة البرمجية التالية ستعمل:

// Put the form in the upper left corner of the 2nd monitor
//   if more then one monitor is present.
if Screen.MonitorCount > 1 then
begin
  Left := Screen.Monitors[1].Left;
  Top := Screen.Monitors[1].Top;
end;

هل يمكن استخدام أي إيجابية تعويض عن هذا الموقف وضعه في أي مكان في هذا العرض. يمكنك الحصول على العرض والارتفاع من هناك أيضا لمعرفة أبعاد.

وليس حقا الإجابة يوحي سؤالك، ولكن لا يمكن لك تخزين الإعدادات نافذة (حجمها وموقعها، مكبر الدولة) أي وقت مضى عندما يتم إغلاق التطبيق، ومن ثم تطبيقها عند بدء التشغيل؟

procedure TMDIChild.btnShowMonClick(Sender: TObject);
begin
    if Screen.MonitorCount > 1 then
    begin
      FormShow.Left:=Screen.Monitors[1].Left;
      FormShow.Top:=Screen.Monitors[1].Top;
      FormShow.Width:=Screen.Monitors[1].Width;
      FormShow.Height:=Screen.Monitors[1].Height;
    end
    else
    begin
        FormShow.Show;
    end;
end;

ولقد فعلت شيئا مماثلا منذ فترة في دلفي 5:

procedure TForm18.FormCreate(Sender: TObject);
var
  Mon: TMonitor;
  MonitorIdx: Integer;
begin
  MonitorIdx := 1; // better read from configuration
  if (MonitorIdx <> Monitor.MonitorNum) and (MonitorIdx < Screen.MonitorCount) then begin
    Mon := Screen.Monitors[MonitorIdx];
    Left := Left + Mon.Left - Monitor.Left;
    Top := Top + Mon.Top - Monitor.Top;
  end;
end;

ويندوز سوف تمكنك من تحديد إحداثيات نافذة في الدعوة CreateWindow API. أنا لا أعرف ما يكفي عن دلفي أو بناء C ++ لمعرفة ما إذا كان لديك حق الوصول إلى هذا الجزء من العملية.

وقد تكون ايضا قادرة على تحريك نافذة في معالج WM_CREATE.

وEnumDisplayMonitors سوف تعطيك إحداثيات كل جهاز في النظام.


من الواضح دلفي و C ++ لديها مرافق التي تجعل من هذا الجواب غير ذي صلة إلى حد ما. سأترك هنا في حالة شخص يأتي عبر هذا السؤال ولكن تحتاج الإجابة عليها على بيئة مختلفة.

وأنا لا تفعل الكثير مع أنظمة ويندوز، لذلك أود أن أقترح الإختراق من هذا القبيل.

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

ويمكنك أيضا أن ننظر إلى ما المعهد يخبرك أبعاد monitor2 ل.

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