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.
• 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
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;
→ 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.
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;
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
Partager