delphi - una - segundo monitor detectado pero sin imagen
¿Inicia el programa en un segundo monitor? (7)
El objeto Pantalla global (parte de Formularios) tiene el concepto de Monitores. Creo que esto fue agregado alrededor de Delphi 6 o 7. El siguiente código funcionará:
// 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;
Puede usar cualquier desplazamiento positivo desde esa posición para colocarlo en cualquier parte de ese monitor. Puede obtener el ancho y la altura desde allí también para conocer las dimensiones.
¿Hay alguna manera de especificar en qué monitor aparece una aplicación en Delphi o C ++ Builder?
Estoy desarrollando un programa simple para un cliente, que muestra los pedidos de cocina en un monitor secundario, generado por un sistema de hospitalidad. Actualmente necesitan arrastrar manualmente la ventana al segundo monitor después de que se inicie.
Guarde la posición de la ventana antes del apagado del programa y restaurelos al inicio. Las pantallas de Multimonitor solo aumentan el tamaño del escritorio; otras superficies del monitor solo tienen una sección diferente del mismo plano X / Y con su origen en la parte superior izquierda del monitor principal.
Esto puede hacerse automáticamente por usted mediante cualquiera de varios componentes .
Por cierto, la variable Screen en la unidad Forms tiene una propiedad llamada MonitorCount y otra propiedad indexable, Monitors [Index: Integer]: TMonitor. TMonitor tiene propiedades que indican la izquierda, la parte superior, el ancho, la altura, etc., por lo que toda la información que necesita está allí.
No es realmente la respuesta que su pregunta implica, pero ¿no podría almacenar la configuración de la ventana (tamaño, posición, estado maximizado) cuando la aplicación está cerrada y luego aplicarlas al inicio?
No hago mucho con los sistemas de Windows, así que sugeriría un truco como este.
Tome el ancho del escritorio visible (ambos monitores combinados), divídalo por la mitad y establezca su posición inicial.
También puedes ver qué api te dice las dimensiones de monitor2.
He hecho algo similar hace un tiempo en Delphi 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 le permitirá especificar las coordenadas de una ventana en la llamada a la API de CreateWindow. No sé lo suficiente sobre Delphi o C ++ Builder para saber si tienes acceso a esa parte del proceso.
También es posible que pueda mover la ventana en un controlador WM_CREATE.
EnumDisplayMonitors le dará las coordenadas de cada monitor en el sistema.
Evidentemente, Delphi y C ++ Builder tienen instalaciones que hacen que esta respuesta sea algo irrelevante. Lo dejaré aquí en caso de que alguien se encuentre con esta pregunta, pero necesita que la respondan para un entorno diferente.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;