제 생각에도 아래 최도선님께서 답변해주신 것이 맞습니다.
(최도선님 감사~ ^^)
모니터가 세개가 아니라 두개인 상태(제 사무실 PC가 그렇습니다)에서 보여주신 코드를 컴파일하면 당연히 에러가 납니다.
모니터가 두개뿐인데 세번째 모니터인 Screen.Monitors[2]를 액세스하려고 하니까 에러가 나지요.
하지만 실제로 존재하지 않는 세번째 모니터를 위한 코드들(frmThreeMonitor 관련)을 삭제하고 첫번째와 두번째 모니터
코드만 남기고 실행하면 모야님이 원하시는 대로 나옵니다. 즉, frmOneMonitor 폼은 첫번째 모니터에, frmTwoMonitor
폼은 두번째 모니터에 나오네요. 물론 그대로 제 PC에서 테스트해본 겁니다.
하지만 그 전에 반드시 듀얼모니터 설정이 되어있어야 하겠지요.
첫번째 모니터에서 한 윈도우를 드래그해서 다른 모니터로 옮길 수 있는 상태 말입니다.
그럼...
모야 님이 쓰신 글 :
: 각각의 폼을 모니터 별로 서로 다른 정보를 보여주기 위해서 작성해 보았는데
: 맞게 한것인지 아시는 분은 함 봐주세요.....
:
: unit uMain;
:
: interface
:
: uses
: Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
: Dialogs, StdCtrls;
:
: type
: TfrmMonitorMain = class(TForm)
: Button1: TButton;
: procedure Button1Click(Sender: TObject);
: private
: { Private declarations }
: public
: { Public declarations }
: end;
:
: var
: frmMonitorMain: TfrmMonitorMain;
:
: implementation
:
: uses uOneMonitor1,uTwoMonitor2,uThreeMonitor3;
: {$R *.dfm}
:
:
: procedure TfrmMonitorMain.Button1Click(Sender: TObject);
: var
: a : integer;
: begin
: frmOneMonitor.Show;
: frmTwoMonitor.Show;
: frmThreeMonitor.Show;
:
: a := Screen.MonitorCount;
:
: frmOneMonitor.Left := Screen.Monitors[0].Left; <<=== 이렇게 하니까 폼의 위치만 변하더라구요
: frmOneMonitor.Top := Screen.Monitors[0].Top; 제 생각으로는 폼을 모니터로 보내주는 부분의
: 코딩을 어떻게 해야 하는지??????
: frmTwoMonitor.Left := Screen.Monitors[1].Left;
: frmTwoMonitor.Top := Screen.Monitors[1].Top;
:
: frmThreeMonitor.Left := Screen.Monitors[2].Left;
: frmThreeMonitor.Top := Screen.Monitors[2].Top;
:
: end;
:
: end.
|