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