Démarrer le programme sur un second écran?

y a-t-il un moyen de spécifier sur quel moniteur une application apparaît dans Delphi ou C++Builder?

je développe un programme simple pour un client, qui affiche les commandes de cuisine sur un écran secondaire, généré par un système d'accueil. Actuellement, ils ont besoin de faire glisser manuellement la fenêtre sur le deuxième moniteur après qu'il démarre.

17
demandé sur Jonas 2008-10-16 00:47:14

7 réponses

Enregistrer la position de la fenêtre avant l'arrêt du programme et les restaurer au démarrage. Les écrans Multimonitor augmentent juste la taille du bureau; les autres surfaces de moniteur ont juste une section différente du même plan X/Y avec son origine en haut à gauche du moniteur primaire.

cela peut être fait automatiquement pour vous par l'un des plusieurs composants .

BTW, la variable D'écran dans L'Unité de formulaires a une propriété appelée MonitorCount et une autre propriété indexable, Monitors [Index: Integer]: TMonitor. TMonitor a des propriétés indiquant la gauche, le dessus, la largeur, la hauteur, etc. donc toutes les informations dont vous avez besoin est là.

22
répondu Barry Kelly 2008-10-15 21:18:45

l'objet global Screen (partie des formulaires) a le concept de moniteurs. Je pense que ceci a été ajouté circa Delphi 6 ou 7. Le code suivant fonctionnera:

// 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;

vous pouvez utiliser n'importe quel décalage positif de cette position pour le mettre n'importe où dans ce moniteur. Vous pouvez obtenir la largeur et la hauteur de là aussi, de connaître les dimensions.

25
répondu Jim McKeeth 2008-10-15 21:55:17

ce n'est pas vraiment la réponse que votre question implique, mais ne pouvez-vous pas stocker les paramètres de fenêtre (Taille, position, État maximisé) lorsque l'application est fermée, puis les appliquer au démarrage?

1
répondu Nathen Silver 2008-10-15 20:52:01
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;
1
répondu sukhoy 2011-02-15 22:22:34

j'ai fait une chose semblable il y a quelque temps dans 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;
-2
répondu Uwe Raabe 2008-10-16 15:46:38

Windows vous permet de spécifier les coordonnées d'une fenêtre dans L'appel de L'API CreateWindow. Je ne connais pas assez Delphi ou C++Builder pour savoir si vous avez accès à cette partie du processus.

vous pourriez également être en mesure de déplacer la fenêtre dans un gestionnaire WM_CREATE.

Énumérdisplaymonitors vous donnera les coordonnées de chaque moniteur dans le système.


Il est évident que Delphi et C++ Builder ont des facilités cette réponse est donc quelque peu hors de propos. Je vais le laisser ici au cas où quelqu'un tomberait sur cette question mais aurait besoin d'une réponse pour un environnement différent.
-3
répondu Mark Ransom 2008-10-16 19:51:15

Je ne fais pas beaucoup avec les systèmes windows, donc je suggère un piratage comme celui-ci.

saisissez la largeur du bureau visible(les deux moniteurs combinés), divisez-le par la moitié et faites que votre position de départ.

vous pouvez également regarder ce que l'api vous dit de surveiller les dimensions de2.

-4
répondu J.J. 2008-10-15 20:50:03