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

Langage Delphi Discussion :

en mode multi écran, quand une fiche appelle une fiche fille, comment avoir les infos de l'écran de la fille ?


Sujet :

Langage Delphi

  1. #1
    Membre éclairé

    Homme Profil pro
    Direction financière et formateur en gestion et contrôle de gestion
    Inscrit en
    Mai 2003
    Messages
    212
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Direction financière et formateur en gestion et contrôle de gestion
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2003
    Messages : 212
    Par défaut en mode multi écran, quand une fiche appelle une fiche fille, comment avoir les infos de l'écran de la fille ?
    Que d'histoire ...

    Contexte :
    Un projet contenant 2 form : une form principale, une form fille
    • Fiche principale : contient un bouton, la déclaration d'un Record contenant les infos du moniteur, une fonction pour aller chercher les infos du moniteur et remplir le record.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
     
    type
      TRecordInfoMonitor = record
        Count: Integer;    // Nombre d'écrans
        MaxWidth: Integer; // Largeur maximum de l'ensemble des écrans
     
        Num: Integer;      // numéro d'écran actuel
        Width: Integer;    // Largeur de l'écran actuel
        Heigth: Integer;   // Hauteur de l'écran actuel
        bPrimary: Boolean; // L'écran actuel est l'écran principal
        PosX: Integer;     // Position X de la souris sur l'écran
        PosY: Integer;     // Position Y de la souris sur l'écran
      end;
     
     
    Function TPrincipale.InfoMonitorC(Form: TForm): TRecordInfoMonitor;
    var
       I: Integer;
       ScreenPoint: TPoint;
    begin
       GetCursorPos(ScreenPoint);
       Result.Count := Screen.MonitorCount;
       Result.MaxWidth := 0;
       for I := 0 to Screen.MonitorCount -1
       do Result.MaxWidth := Result.MaxWidth + Screen.Monitors[I].Left;
       Result.Num := Monitor.MonitorNum;
       Result.Heigth := Monitor.WorkareaRect.Height;
       Result.Width := Monitor.WorkareaRect.Width;
       if Monitor.Primary
       then Result.bPrimary := true
       else Result.bPrimary := false;
       Result.PosX := ScreenPoint.X;
       Result.PosY := ScreenPoint.Y;
    end;
     
     
     
    procedure TPrincipale.Button1Click(Sender: TObject);
    begin
       Fille.Show;
    end;
    • Fiche fille : 1 bouton, 1 memo pour afficher les infos du moniteur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    procedure TFormFille.Button1Click(Sender: TObject);
    var
       RecordInfoMonitor: TRecordInfoMonitor;
    begin
       // Affiche les infos du moniteur contenant la fiche fille
       // ******************************************************
       RecordInfoMonitor := Principale.InfoMonitorC(Fille);
       Memo1.Clear;
       Memo1.Lines.Add('Nb écran : '+ IntToStr(RecordInfoMonitor.Count));
       Memo1.Lines.Add('Zone max : ' + IntToStr(RecordInfoMonitor.MaxWidth));
       Memo1.Lines.Add(' ');
       Memo1.Lines.Add(' --- ECRAN ACTUEL ---');
       Memo1.Lines.Add('Ecran n° : ' + IntToStr(RecordInfoMonitor.Num));
       Memo1.Lines.Add('H écran : ' + IntToStr(RecordInfoMonitor.Heigth));
       Memo1.Lines.Add('L écran : ' + IntToStr(RecordInfoMonitor.Width));
       if RecordInfoMonitor.bPrimary = true
       then Memo1.Lines.Add('Principal : OUI')
       else Memo1.Lines.Add('Principal : NON');
       Memo1.Lines.Add(' ');
       Memo1.Lines.Add(' --- POSITION SOURIS ---');
       Memo1.Lines.Add('posX : ' + IntToStr(RecordInfoMonitor.PosX));
       Memo1.Lines.Add('posY : ' + IntToStr(RecordInfoMonitor.PosY));
    end;
    → Je sais que je passe le paramètre "fille" à la procédure et que je ne m'en sert pas mais je me suis dit qu'il devait y avoir un truc avec ça.

    Au résultat :
    Le memo affiche les infos du moniteur sur lequel est la fiche principale (ce qui semble normal, puisque la procédure est appelée de cet endroit).

    Question :
    Comment avoir les infos de l'écran de la fille SANS DEPLACER InfoMonitorC SUR LA FILLE (l'idée est d'avoir un code commun pour plusieurs fiches)

    (Et comme je vous fait perdre du temps et que je vous remercie de vous pencher sur mon sujet ... et que c'est pas trop gros, voici les fichiers pour aller +vite)
    et comme d'habiture, les .dfm sont en .txt pour pouvoir être transmis

    Form_Principale.pas Form_Fille.pas Form_Principale.dfm.txt Form_Fille.dfm.txt

  2. #2
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 908
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 908
    Par défaut
    Pour une fiche quelconque : Monitor := Screen.MonitorFromWindow(Form.Handle);.

    Sinon TForm, pour son propre usage, contient une propriété Monitor.

  3. #3
    Membre éclairé

    Homme Profil pro
    Direction financière et formateur en gestion et contrôle de gestion
    Inscrit en
    Mai 2003
    Messages
    212
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Direction financière et formateur en gestion et contrôle de gestion
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2003
    Messages : 212
    Par défaut
    Super Andnotor,
    Bon ben c'est résolu! Enfin!

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

Discussions similaires

  1. comment avoir les traces d'une impression
    Par cyreel dans le forum Windows XP
    Réponses: 2
    Dernier message: 16/08/2008, 17h49
  2. Comment afficher les infos en mode debug ?
    Par jppaysan dans le forum Qt
    Réponses: 4
    Dernier message: 28/05/2008, 00h24
  3. Comment avoir les dépendance d'une DLL
    Par wrida dans le forum C#
    Réponses: 4
    Dernier message: 23/05/2007, 14h18
  4. Réponses: 1
    Dernier message: 01/05/2007, 08h44
  5. Comment recuperer les info d'un formulaire dans une boite de dialogue
    Par frutix dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 31/05/2006, 11h42

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