IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Delphi Discussion :

Afficher une TForm sur le deuxième écran


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 157
    Par défaut Afficher une TForm sur le deuxième écran
    Bonjour,

    Je développe sous Delphi. J'ai une application et deux écrans de connecter que je voudrais lancer au au moins afficher la Tform principal de cette application sur le deuxième écran.

    J'ai essayé en initialisant les positions d'origine de la forme aux positions du second écran comme suit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Application.CreateForm(TMainForm, MainForm);
    if Screen.MonitorCount > 1 then
        begin
        MainForm.Top:= Screen.Monitors[1].BoundsRect.Top;
        MainForm.Left:= Screen.Monitors[1].BoundsRect.Left;
    end;
    cependant la forme s'affiche toujours sur le premier écran.
    Auriez vous s'il vous plait une solution à me suggérer pour ce problème

    Merci

  2. #2
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 592
    Billets dans le blog
    65
    Par défaut
    Bonjour,

    je pense que ce code qui semble se trouver dans le source du projet aurait plus sa place dans le OnCreate de la forme.
    La fonction MakeFullyVisible pourrait aussi être envisagée s'il s'agit de VCL

    [edit] il faut peut-être aussi vérifier que la propriété position de la forme à la création ne soit pas incompatible (en exemple : poCenter)

    Néanmoins je n'ai pas encore testé et donc ne peut étayer mes hypothèses faute de second écran installé

  3. #3
    Membre Expert
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 704
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 704
    Par défaut
    Moi j'utilisais ça (dans une application FMX):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    var
      EcranRect: TRect;
    begin
     
      EcranRect := Screen.Displays[nIndexEcran].WorkareaRect;
      Left := (EcranRect.Left);      Top := (EcranRect.Top);
    L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai. :bug: ___ "http://club.developpez.com/regles/#LIII-A"Écrivez dans un français correct !!

    C++Builder 5 - Delphi 6#2 Entreprise - Delphi 2007 Entreprise - Delphi 2010 Architecte - Delphi XE Entreprise - Delphi XE7 Entreprise - Delphi 10 Entreprise - Delphi 10.4.2 Entreprise - Delphi 11.3 Entreprise - Visual studio 2022
    OpenGL 2.1 - Oracle 10g - Paradox - Interbase (XE) - PostgreSQL (15.7)

  4. #4
    Membre émérite Avatar de sergio_is_back
    Homme Profil pro
    Consultant informatique industrielle, développeur tout-terrain
    Inscrit en
    Juin 2004
    Messages
    1 187
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Consultant informatique industrielle, développeur tout-terrain
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 187
    Par défaut
    Citation Envoyé par NGeVtC87 Voir le message
    Bonjour,

    Je développe sous Delphi. J'ai une application et deux écrans de connecter que je voudrais lancer au au moins afficher la Tform principal de cette application sur le deuxième écran.

    J'ai essayé en initialisant les positions d'origine de la forme aux positions du second écran comme suit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Application.CreateForm(TMainForm, MainForm);
    if Screen.MonitorCount > 1 then
        begin
        MainForm.Top:= Screen.Monitors[1].BoundsRect.Top;
        MainForm.Left:= Screen.Monitors[1].BoundsRect.Left;
    end;
    cependant la forme s'affiche toujours sur le premier écran.
    Auriez vous s'il vous plait une solution à me suggérer pour ce problème

    Merci
    Avec la VCL :
    Que ce soit sur le premier ou le deuxième moniteur, c'est lors de l'affichage de la forme qu'il faut modifier les attributs de celle (left, top, windowstate, etc...)
    Dans l'évenement OnShow de la TForm

    MakeFullyVisible empêchera la fenêtre de s'afficher hors des limites du premier moniteur si le second n'est pas branché par exemple
    C'est aussi une bonne idée de le passer à True dans le OnCreate

  5. #5
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 083
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 083
    Par défaut
    Dans une application de Moniteur vidéo j'avais un peu la chose, gérer les écrans selon préférence utilisée
    Par moyen de trouver le code, mais j'ai aussi utilisé MakeFullyVisible et MonitorFromPoint
    c'était je crois l'inverse, selon le nom de poste et le numéro d'écran, cela chargeait des fenêtres configurés différement
    Par exemple à trois écran, le centrale étant le plein écran rotatif et les deux écrans latéraux c'était les vues d'ensemble de 16 à 64 caméras (après ça ramait trop la décompression H264)
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 12/04/2015, 17h07
  2. Réponses: 14
    Dernier message: 20/01/2015, 16h17
  3. Comment afficher une form sur le deuxième écran
    Par saidm dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 16/04/2008, 23h38
  4. Afficher une image sur un écran 3D.
    Par pan99 dans le forum 3D
    Réponses: 1
    Dernier message: 16/04/2007, 13h48
  5. tooltip s'affiche parfois sur le deuxième écran
    Par jdewalqu dans le forum Interfaces Graphiques en Java
    Réponses: 7
    Dernier message: 25/08/2006, 10h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo