Whiler de ce code, je vais voir si je suis fichu (plutôt si ça se bouffe pas le nez) d'emboiter ça avec une fonction exportée renvoyant la mémorisation du positionnement.
Je vais voir... ensuite demander à l'utilisateur possédant deux écrans.
@+
Whiler de ce code, je vais voir si je suis fichu (plutôt si ça se bouffe pas le nez) d'emboiter ça avec une fonction exportée renvoyant la mémorisation du positionnement.
Je vais voir... ensuite demander à l'utilisateur possédant deux écrans.
@+
Oui c'est clair et net
Mais un élément m'interroge ; une erreur de frappe le signe "moins" ici :
iPreviousLeft := -3000;
Pour jouer au fantôme à left ?
J'ai testé sur 3 écrans...
Mon principal est au centre... et un autre de chaque côté....
Celui de gauche a un Left < 0...
Si tu as utilisé un type qui ne supporte pas les négatifs, cela pourrait expliquer pourquoi ton utilisateur a tjr une position foireuse au lancement...
Ah sur trois écrans, la c'est logique
Je vais me lancer...
@+
Même sur 2... si ton principal est à droite de ton secondaire.. le secondaire sera en négatif...
Oui, le point 0,0 est le coin supérieur-gauche de l'écran principal. Le Left du desktop peut être négatif.
Sinon, on peut faire ainsi:
Code : Sélectionner tout - Visualiser dans une fenêtre à part MakeFullyVisible(Screen.MonitorFromPoint(Left, Top));
Oui mais le placer à quel endroit ?
Dans le result de la fonction InDesktop ?
@+
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 function TForm1.InDesktop: Boolean; begin Result := (Screen.DesktopLeft <= Self.Left) and (Screen.DesktopTop <= Self.Top ) and (Self.Left + Self.Width <= Screen.DesktopLeft + Screen.DesktopWidth) and (Self.Top + Self.Height <= Screen.DesktopTop + Screen.DesktopHeight); end;
Non.. c'est l'un ou l'autre...
Tu peux par exemple, après avoir réaffecter tes positions sauvegardées, appeler la méthode MakeFullyVisible(Screen.MonitorFromPoint(LeftSauvegardé, TopSauvegardé));
Comme ça, t'es sûr que ta fiche est visible...
Whiler
Oui mais en code ça donnerait quoi ? code code code
de nous éclairer
Un truc dans ce genre...
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 procedure TForm1.FormCreate(Sender: TObject); begin ManagePosition; end; procedure TForm1.ManagePosition; var iPreviousLeft , iPreviousTop : Integer; iPreviousWidth, iPreviousHeight: Integer; begin // Charger les valeurs précédentes // ... iPreviousLeft := -3000; // depuis tes données... au lieu de ces constantes... iPreviousTop := 50; iPreviousWidth := 750; iPreviousHeight := 400; // Positionner la fenêtre Left := iPreviousLeft; Top := iPreviousTop; Width := iPreviousWidth; Height := iPreviousHeight; Position := poDesigned; MakeFullyVisible(Screen.MonitorFromPoint(Left, Top)); // mais que se passe-t-il si l'une de ces 2 coordonnées est hors écran... ? end;
là c'est plus clair
Patience... c'est ce que nous saurons au prochain épisodemais que se passe-t-il si l'une de ces 2 coordonnées est hors écran... ?
@+
J'viens de vérifier... la procédure fait la vérification... donc pas de pb en vue...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 procedure TCustomForm.MakeFullyVisible(AMonitor: TMonitor); var ALeft: Integer; ATop: Integer; begin if AMonitor = nil then AMonitor := Monitor; ...
à toi et Andnotor ; un code très utile à conserver et surtout utiliser !
@+
Edit :
Oui je percute je crois
Donc la ligne évoquée par Andnotor :
Remplace et annule ta fonction (de retour en boolean) toute entière :
Code : Sélectionner tout - Visualiser dans une fenêtre à part MakeFullyVisible(Screen.MonitorFromPoint(Left, Top));
Donc plus du tout besoin de ta fonction InDesktop : simplification de code
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 function TForm1.InDesktop: Boolean; begin Result := (Screen.DesktopLeft <= Self.Left) and (Screen.DesktopTop <= Self.Top ) and (Self.Left + Self.Width <= Screen.DesktopLeft + Screen.DesktopWidth) and (Self.Top + Self.Height <= Screen.DesktopTop + Screen.DesktopHeight); end;
Bonjour,
Whiler, puisque tu as au moins deux écrans, peux-tu stp me confirmer (ou infirmer) que la modif de ton code et + la ligne d'Andnotor, comme j'indique en message juste ci-dessus, fonctionne impec également ?
merci
Car n'ayant qu'un écran
Ce code fonctionne :
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58 unit Unit1; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, System.Types; type TForm1 = class(TForm) procedure FormCreate(Sender: TObject); private procedure ManagePosition; { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); begin ManagePosition; end; procedure TForm1.ManagePosition; var iPreviousLeft , iPreviousTop : Integer; iPreviousWidth, iPreviousHeight: Integer; begin {$REGION 'Depuis tes données sauvegardées'} // Charger les valeurs précédentes // ... iPreviousLeft := -100; // iPreviousLeft := -5000; // iPreviousLeft := 5000; iPreviousTop := 50; iPreviousWidth := 750; iPreviousHeight := 400; {$ENDREGION} // Positionner la fenêtre Left := iPreviousLeft; Top := iPreviousTop; Width := iPreviousWidth; Height := iPreviousHeight; Position := poDesigned; MakeFullyVisible(Screen.MonitorFromPoint(Point(Left, Top))); end; end.
Whiler à toi et Andnotor.
Impeccable
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager