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 :

Comment passer au premier plan une application instanciée une seconde fois


Sujet :

Delphi

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    31
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 31
    Points : 18
    Points
    18
    Par défaut Comment passer au premier plan une application instanciée une seconde fois
    Bonjour,

    J'ai voulu utiliser la FAQ pour n'instancier qu'une fois mon application et la mettre au première plan. Je fais les copiés-collés nécéssaires mais ce ne fonctionne pas. Le .zip du projet d'exemple complet n'étant plus disponible quelqu'un pourrait - il me dire ce qu'il manque ?

    Le code dans le projet

    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
     
    unit Unit1;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs;
     
    type
      TForm1 = class(TForm)
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
      end;
     
    var
      Form1: TForm1;
     
    implementation
     
    {$R *.dfm}
     
     
    function IsPrevInstance: HWND; 
    var 
      ClassName: array[0..255] of char; 
      Title: string; 
    begin 
      Title := Application.Title; 
      Application.Title := ''; 
      { On change le titre, car on trouverait toujours une application lancée, (la notre). }
      try 
        GetClassName(Application.Handle, ClassName, 255); 
        { Met dans ClassName le nom de la classe de l'application. }
        Result := FindWindow(ClassName, PChar(Title)); 
        { Renvoie le Handle de la 1ère fenêtre de Class (Type) ClassName, et le titre de l'application. }
      finally 
        Application.Title := Title; { Restauration du vrai titre. }
      end; 
    end; 
     
     
    procedure AfficherInstance(InstHandle: HWND);
    begin
      { Restaurer l'application si minimisée }
      ShowWindow(InstHandle, SW_RESTORE);
      { Mettre la première instance en premier plan : }
      SetForegroundWindow(InstHandle);
      { Fin de la deuxième instance }
      Application.Terminate;
    end;
     
    end.
    Le code à l'initialisation

    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
     
    program Project1;
     
    uses
      Forms,
      Unit1 in 'Unit1.pas' {Form1};
     
    {$R *.res}
     
    begin
     
      if IsPrevInstance = 0 then
      begin
        Application.Initialize;
        Application.CreateForm(TForm1, Form1);
      Application.Run;
      end
      else
        AfficherInstance(IsPrevInstance);
     
    end.
    Projet vierge auquel j'ai ajouté le code ci-joint.

    Il me dit que IsPrevInstance n'est pas déclaré alors que Unit1 est bien dans les uses ?

    Merci de votre aide.
    Fichiers attachés Fichiers attachés
    Delphi 7 Professionnel
    WinNT & 2000 Pro

  2. #2
    Membre émérite
    Avatar de NoisetteProd
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    1 905
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 1 905
    Points : 2 614
    Points
    2 614
    Par défaut
    Bonjour, je vais répondre a votre mail, mais en attendant, je pense que le bon code est celui ci :

    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
     
    unit Unit1;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs;
     
    type
      TForm1 = class(TForm)
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
      end;
    procedure AfficherInstance(InstHandle: HWND);
    function IsPrevInstance: HWND; 
     
    var
      Form1: TForm1;
     
    implementation
     
    {$R *.dfm}
     
     
    function IsPrevInstance: HWND; 
    var 
      ClassName: array[0..255] of char; 
      Title: string; 
    begin 
      Title := Application.Title; 
      Application.Title := ''; 
      { On change le titre, car on trouverait toujours une application lancée, (la notre). }
      try 
        GetClassName(Application.Handle, ClassName, 255); 
        { Met dans ClassName le nom de la classe de l'application. }
        Result := FindWindow(ClassName, PChar(Title)); 
        { Renvoie le Handle de la 1ère fenêtre de Class (Type) ClassName, et le titre de l'application. }
      finally 
        Application.Title := Title; { Restauration du vrai titre. }
      end; 
    end; 
     
     
    procedure AfficherInstance(InstHandle: HWND);
    begin
      { Restaurer l'application si minimisée }
      ShowWindow(InstHandle, SW_RESTORE);
      { Mettre la première instance en premier plan : }
      SetForegroundWindow(InstHandle);
      { Fin de la deuxième instance }
      Application.Terminate;
    end;
     
    end.
    Cordialement
    Fais cogiter ta Noisette !!

    Participez à la page SOURCES Delphi !

    Découvrez le Défi Delphi

    Mon Mail

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    31
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 31
    Points : 18
    Points
    18
    Par défaut
    OK, ca fonctionne, Merci beaucoup.
    Delphi 7 Professionnel
    WinNT & 2000 Pro

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 20/09/2011, 17h23
  2. Passer d'une application Java à une application web
    Par freddy000 dans le forum Développement Web en Java
    Réponses: 2
    Dernier message: 02/01/2011, 14h57
  3. Réponses: 7
    Dernier message: 06/11/2008, 16h38
  4. [Joomla!] passer d'une application locale à une application web sur Joomla
    Par Gabrieel dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 1
    Dernier message: 15/05/2008, 18h38

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