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

EDI Delphi Discussion :

Passage poste double écran vers mono écran


Sujet :

EDI Delphi

  1. #1
    P.G
    P.G est déconnecté
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    158
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 158
    Points : 73
    Points
    73
    Par défaut Passage poste double écran vers mono écran
    Bonjour à tous,

    Voilà le topo je met au point une application delphi6, sur un poste double écran. La form est sur l'écran supplémentaire. Donc l'éxécutable s'ouvre à cette place.

    Lors du passage sur un poste mono écran, (salle de classe), la forme n'apparait plus, lorsque l'on ouvre le projet Delphi déplacé sur ce poste.

    Je suppose qu'elle doit être toujours sur le deuxième écran mais là il n'y en a pas !! de même l’exécutable est invisible une fois lancé en direct !!

    Y a t-il une commande pour remettre à zéro les emplacements écrans ?

    Merci beaucoup.

    P.G

  2. #2
    Membre du Club Avatar de delagoutte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 42
    Points : 65
    Points
    65
    Par défaut
    j'ai eu le même problème que toi et du coup j'ai donc fait un recentreur de fenêtre générique.
    Ci dessous le code :
    projet avec :
    un memo : memo1
    un edit : edit1
    un bouton : button1.

    Fonctionnement, tu mets le nom du fichier exe à "recentrer" dans le edit et tu cliques sur le bouton, le memo ne sert que pour information.
    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
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
     
    unit Unit1;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      StdCtrls, Tlhelp32;
     
    type
      TForm1 = class(TForm)
        Button1: TButton;
        Memo1: TMemo;
        Label1: TLabel;
        Label2: TLabel;
        Edit1: TEdit;
        procedure Button1Click(Sender: TObject);
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
     
      end;
    var
      Form1: TForm1;
    function EnumWindowsCallback(hWnd: HWND; lParam: LPARAM): BOOL; stdcall;
     
    implementation
     
    {$R *.DFM}
     
    procedure CenterWnd(const Wnd: HWND);
    var 
      R: TRect; 
      SW, SH, W, H: Integer; 
    begin 
      SW := GetSystemMetrics(SM_CXSCREEN); 
      SH := GetSystemMetrics(SM_CYSCREEN); 
      GetWindowRect(Wnd, R); 
      W := R.Right - R.Left; 
      H := R.Bottom - R.Top; 
      R.Left := (SW - W) div 2; 
      if R.Left < 0 then R.Left := 0; 
      R.Top := (SH - H) div 2; 
      if R.Top < 0 then R.Top := 0; 
      MoveWindow(Wnd, R.Left, R.Top, W, H, True); 
    end;
     
    Function GetProcessNameFromHandle(Handle:HWND):string;
    var
      Pid:DWord;
      SnapShot:HWND;
      Module:TModuleEntry32;
    begin
      Result:='';
      if not IsWindow(Handle) then exit;
      GetWindowThreadProcessId(Handle,@Pid); 
      Snapshot:=CreateToolhelp32Snapshot(TH32CS_SNAPMODULE,Pid); 
      try
        if Snapshot<>-1 then
        begin
          Module.dwSize:=SizeOf(TModuleEntry32);
          if Module32First(Snapshot,Module) then  result:=Module.szExePath; 
        end;
      finally
        CloseHandle(Snapshot);
      end;
    end;
     
     
    function EnumWindowsCallback(hWnd: HWND; lParam: LPARAM): BOOL;
    Var Texte:array[0..250]of Char;
        Classe:array[0..250]of Char;
    begin
      if pos(uppercase(form1.edit1.Text),uppercase(GetProcessNameFromHandle(hWnd)))>0 then
      begin
      CenterWnd(hWnd); //recentre la fenêtre
      GetWindowText(hWnd,Texte,SizeOf(Texte)); // récupération du texte de la fenêtre
      GetClassName(hWnd,Classe,SizeOf(Classe)); // récupération de la classe
      Form1.Memo1.lines.add('classe :'+Classe+'      Texte: '+Texte+'    Handle: '+IntToStr(hWnd)
      +' Exécutable : '+GetProcessNameFromHandle(hWnd));
      end;
      result:=true;
    end;
     
     
     
    procedure TForm1.Button1Click(Sender: TObject);
    begin
     
      Memo1.Clear;
      EnumWindows(@EnumWindowsCallback,0);
     
      showmessage('terminé');
    end;

  3. #3
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 445
    Points
    28 445
    Par défaut
    je fais l'inverse en ajoutant un code qui place ma fiche sur le second écran, s'il existe

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    procedure TMainForm.FormCreate(Sender: TObject);
    begin
      if Screen.MonitorCount > 1 then
        Left := Left + Screen.Monitors[0].Width;
    end;
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  4. #4
    P.G
    P.G est déconnecté
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    158
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 158
    Points : 73
    Points
    73
    Par défaut Suite double écran
    Hello,

    Merci pour vos réponses, je test ce WE.

    Une solution non automatique consiste à enregistrer tout le projet avec la form et le code , bref tout sur le premier écran. Comme cela on déploie si besoin sur un poste double écran.

    J'essaye vos solutions ce WE.

    A + et merci encore

    P.G

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Copie écran vers une image
    Par celeborn56 dans le forum Flash/Flex
    Réponses: 3
    Dernier message: 29/05/2011, 12h33
  2. Réponses: 2
    Dernier message: 30/08/2009, 23h56
  3. Coordonnées 3D vers 2D écran
    Par vladvad dans le forum DirectX
    Réponses: 1
    Dernier message: 23/10/2008, 02h49
  4. Déplacer une fenêtre d'un écran vers un autre
    Par scorbo dans le forum Administration système
    Réponses: 0
    Dernier message: 21/10/2008, 18h36
  5. [Débutant] Copie d'écran vers BMP
    Par Mille sabords dans le forum Windows
    Réponses: 2
    Dernier message: 23/11/2005, 14h17

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