4 pièce(s) jointe(s)
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:
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:
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: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
Pièce jointe 665817 Pièce jointe 665818 Pièce jointe 665819 Pièce jointe 665821