두 번째 모니터에서 프로그램을 시작 하시겠습니까?
-
03-07-2019 - |
문제
Delphi 또는 C ++ Builder에 응용 프로그램이 나타나는 모니터를 지정하는 방법이 있습니까?
호스 피탈 리티 시스템에 의해 생성 된 보조 모니터에 주방 주문을 표시하는 고객을위한 간단한 프로그램을 개발하고 있습니다. 현재는 창을 시작 후 두 번째 모니터로 수동으로 드래그해야합니다.
해결책
프로그램 종료 전에 창 위치를 저장하고 시작시 복원하십시오. 멀티 모니터 표시는 데스크탑의 크기를 증가시킵니다. 다른 모니터 표면에는 기본 모니터의 왼쪽 상단에 원점이있는 동일한 X/Y 평면의 다른 섹션이 있습니다.
이것은 당신을 위해 자동으로 수행 할 수 있습니다 여러 구성 요소 중 하나.
BTW, 양식 단위의 화면 변수는 MonitorCount라는 속성과 다른 색인 가능한 속성 인 Monitors [index : Integer] : 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;
Windows를 사용하면 CreateWindow API 호출에서 창의 좌표를 지정할 수 있습니다. 나는 당신이 프로세스의 해당 부분에 액세스 할 수 있는지 알기 위해 Delphi 또는 C ++ Builder에 대해 충분히 알지 못합니다.
WM_Create 핸들러에서 창을 움직일 수도 있습니다.
EnumDisplayMonitors는 시스템의 각 모니터의 좌표를 제공합니다.
분명히 Delphi와 C ++ Builder는이 답변을 다소 관련이없는 시설을 가지고 있습니다. 누군가 가이 질문을 발견했지만 다른 환경에 대한 답변이 필요하다면 여기에 남겨 둘 것입니다.
나는 Windows Systems를 많이하지 않으므로 이와 같은 해킹을 제안 할 것입니다.
볼 수있는 데스크탑의 너비를 잡고 (두 모니터 모두 결합) 반으로 나누고 시작 위치를 만듭니다.
API가 Monitor2의 크기를 알려주는 것을 조사 할 수도 있습니다.