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.
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à.
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.
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?
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;
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;
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.
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.