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

 Delphi Discussion :

Affichage sur deux écrans


Sujet :

Delphi

  1. #21
    Membre chevronné
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 262
    Points : 1 928
    Points
    1 928
    Par défaut
    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.

    @+

  2. #22
    Membre éclairé
    Avatar de Whiler
    Homme Profil pro
    Inscrit en
    Avril 2002
    Messages
    298
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 298
    Points : 664
    Points
    664
    Par défaut
    Citation Envoyé par Droïde Système7 Voir le message
    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.
    Vis-à-vis de l'exemple, tu as simplement la procédure ManagePosition; à modifier... éventuellement, tu lui mets en paramètres les variables que j'ai déclarées et t'imbriques ça dans ta fonction éxistante...

  3. #23
    Membre chevronné
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 262
    Points : 1 928
    Points
    1 928
    Par défaut
    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 ?

  4. #24
    Membre éclairé
    Avatar de Whiler
    Homme Profil pro
    Inscrit en
    Avril 2002
    Messages
    298
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 298
    Points : 664
    Points
    664
    Par défaut
    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...

  5. #25
    Membre chevronné
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 262
    Points : 1 928
    Points
    1 928
    Par défaut


    Ah sur trois écrans, la c'est logique

    Je vais me lancer...

    @+

  6. #26
    Membre éclairé
    Avatar de Whiler
    Homme Profil pro
    Inscrit en
    Avril 2002
    Messages
    298
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 298
    Points : 664
    Points
    664
    Par défaut
    Même sur 2... si ton principal est à droite de ton secondaire.. le secondaire sera en négatif...

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 688
    Points : 13 117
    Points
    13 117
    Par défaut
    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));

  8. #28
    Membre chevronné
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 262
    Points : 1 928
    Points
    1 928
    Par défaut
    Citation Envoyé par Andnotor Voir le message
    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;
    @+

  9. #29
    Membre éclairé
    Avatar de Whiler
    Homme Profil pro
    Inscrit en
    Avril 2002
    Messages
    298
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 298
    Points : 664
    Points
    664
    Par défaut
    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...

  10. #30
    Membre chevronné
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 262
    Points : 1 928
    Points
    1 928
    Par défaut
    Citation Envoyé par Andnotor Voir le message
    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));
    Et par rapport à ton code complet, ça donnerait quoi ?

    Car je n'ai jamais encore rencontré ce MakeFullyVisible(...)

    .
    .

    (Au fait j'ai eu confirmation que ton code fonctionne impec sous 2 écrans )

  11. #31
    Membre éclairé
    Avatar de Whiler
    Homme Profil pro
    Inscrit en
    Avril 2002
    Messages
    298
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 298
    Points : 664
    Points
    664
    Par défaut
    Citation Envoyé par Droïde Système7 Voir le message
    (Au fait j'ai eu confirmation que ton code fonctionne impec sous 2 écrans )


    Citation Envoyé par Droïde Système7 Voir le message
    Et par rapport à ton code complet, ça donnerait quoi ?
    Mon code regarde si t'es dans l'écran.. si c'est pas le cas, il centre la fenêtre...

    La procédure déplace la fenêtre pour qu'elle soit entièrement visible dans un écran spécifique...

  12. #32
    Membre chevronné
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 262
    Points : 1 928
    Points
    1 928
    Par défaut
    Whiler

    Oui mais en code ça donnerait quoi ? code code code

    de nous éclairer

  13. #33
    Membre éclairé
    Avatar de Whiler
    Homme Profil pro
    Inscrit en
    Avril 2002
    Messages
    298
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 298
    Points : 664
    Points
    664
    Par défaut
    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;

  14. #34
    Membre chevronné
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 262
    Points : 1 928
    Points
    1 928
    Par défaut
    là c'est plus clair

    mais que se passe-t-il si l'une de ces 2 coordonnées est hors écran... ?
    Patience... c'est ce que nous saurons au prochain épisode

    @+

  15. #35
    Membre éclairé
    Avatar de Whiler
    Homme Profil pro
    Inscrit en
    Avril 2002
    Messages
    298
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 298
    Points : 664
    Points
    664
    Par défaut
    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;
    ...

  16. #36
    Membre chevronné
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 262
    Points : 1 928
    Points
    1 928
    Par défaut Précision après digestion ;-)
    à 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 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MakeFullyVisible(Screen.MonitorFromPoint(Left, Top));
    Remplace et annule ta fonction (de retour en boolean) toute entière :
    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;
    Donc plus du tout besoin de ta fonction InDesktop : simplification de code

  17. #37
    Membre chevronné
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 262
    Points : 1 928
    Points
    1 928
    Par défaut
    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

  18. #38
    Membre éclairé
    Avatar de Whiler
    Homme Profil pro
    Inscrit en
    Avril 2002
    Messages
    298
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 298
    Points : 664
    Points
    664
    Par défaut Fonctionne impec...
    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.

  19. #39
    Membre chevronné
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 262
    Points : 1 928
    Points
    1 928
    Par défaut
    Whiler à toi et Andnotor.

    Impeccable

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Réponses: 0
    Dernier message: 12/11/2010, 19h32
  2. [Écran] Affichage sur deux écrans
    Par vlksoft dans le forum Périphériques
    Réponses: 1
    Dernier message: 17/11/2009, 11h55
  3. Réponses: 2
    Dernier message: 28/10/2008, 16h18
  4. [Ecran] Problème d'affichage sur un écran
    Par sylsau dans le forum Périphériques
    Réponses: 5
    Dernier message: 09/08/2006, 09h58
  5. Problème d'affichage sur un écran 16/9ème
    Par kurul1 dans le forum C++Builder
    Réponses: 2
    Dernier message: 23/01/2006, 11h51

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