문제

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의 크기를 알려주는 것을 조사 할 수도 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top