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 :

Minimize et OnRestore..


Sujet :

Delphi

  1. #1
    Membre confirmé

    Inscrit en
    Novembre 2002
    Messages
    744
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 744
    Points : 500
    Points
    500
    Par défaut Minimize et OnRestore..
    Bonjour,

    J'ai besoin de minimiser une application entière (fiche principale et secondaire) et de les restaurer.
    J'utilise pour cela : la méthode Application.minimize et le composant "TApplicationEvents" + son événement "OnRestore" car j'ai un traitement à exécuter quand l'application vient d'être restaurée.

    Tous se passe bien, tant que tous cela est exécute depuis la fiche principale, car c'est elle qui reçoit l’événement "OnRestore".
    Mais je dois exécuter ces actions depuis des "boutons" qui sont sur une fiche secondaire et qui est modale. Depuis cette fiche modale les actions de "minimiser" et "restaurer" fonctionnent, mais je ne "capte" pas l’événement "OnRestore" ce qui semble normal, il est traité par la fiche principale. Remarque: si la fiche n'est pas modale, la fichie reçoit bien enlèvement

    Les actions "Minimiser" et "Restaurer" peuvent être traitées dans la fiche principale, seul leur exécution doivent l'être depuis une fiche secondaire et modale.
    J’exécute donc des fonctions qui se trouvent dans la fiche principale , mais depuis une fiche secondaire, pensant que cela réglerait le problème,
    Mais non même comme cela, si je lance les routines qui se trouvent dans la fiche principale depuis une fiche secondaire, l’événement "OnRestore" n'est pas déclenché dans la fiche principale.

    Un peu de code très simple ci-dessous pour mieux comprendre le problème

    code fiche principale:
    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
     
     
    Uses...Unit2,....
     
    ....
    implementation
     
    {$R *.dfm}
     
    Procedure TForm1.Mini;
    begin
        Edit1.text:='';
        Application.Minimize;
    end;
     
    procedure TForm1.ApplicationEvents1Restore(Sender: TObject);
    begin
         Edit1.text:='OnRestore =>ok';
         Application.Restore;
         Application.BringToFront;
    end;
     
    procedure TForm1.MinimiseClick(Sender: TObject);
    begin
       Mini;
    end;
     
    procedure TForm1.Showfiche2Click(Sender: TObject);
    begin
         form2.showModal;
    end;
     
    end.

    Fiche secondaire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    implementation
     
    {$R *.dfm}
     
    uses Unit1;
     
     
    procedure TForm2.MinimiseClick(Sender: TObject);
    begin
        Form1. Mini;
    end;
     
    end.
    J’exécute l'application, tant que form2 est fermé , si je clique sur "Form1.MinimiseClick" cela fonctionne, et je capture bien évènement "OnRestore".
    Si clique sur le bouton qui affiche form2, Si je clique sur "Form2.MinimiseClick" cela fonctionne, mais form1 ne vois plus l'évènement "OnRestore" => qui est mon problème.

    A la recherche d'une solution , idée, merci d'avance.
    Bye et bon code...

    Ce n'est pas tant l'aide de nos amis qui nous aide , mais notre confiance dans cette aide .

  2. #2
    Expert confirmé Avatar de sergio_is_back
    Homme Profil pro
    Responsable informatique, développeur tout-terrain
    Inscrit en
    Juin 2004
    Messages
    1 084
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Responsable informatique, développeur tout-terrain
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 084
    Points : 5 604
    Points
    5 604
    Par défaut
    J'ai fait le test et ça marche très bien.

    Il faut intercepter l'évenement OnMinimize sur ton TApplicationEvents pour mettre à jour ton Edit1.text dans Form1.
    Il n'est pas nécessaire d'appeler Application.Restore dans le OnRestore ni le BringToFront d'ailleurs
    Dans Form2, il suffit d'appeler Application.Minimize sur le Click de ton bouton... Pas besoin d'appeler Form1.Mini qui ne sert à rien...

    Form1
    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
     
    var
      Form1: TForm1;
     
    implementation
     
    {$R *.dfm}
     
    uses Unit2;
     
    procedure TForm1.ApplicationEvents1Minimize(Sender: TObject);
    begin
        Edit1.Text:='';
    end;
     
    procedure TForm1.ApplicationEvents1Restore(Sender: TObject);
    begin
        Edit1.Text:='Restore OK';
    end;
     
    procedure TForm1.Button1Click(Sender: TObject);
    begin
        Form2.ShowModal;
    end;
    Form2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     
    var
      Form2: TForm2;
     
    implementation
     
    {$R *.dfm}
     
    procedure TForm2.Button1Click(Sender: TObject);
    begin
        Application.Minimize;
    end;

  3. #3
    Membre confirmé

    Inscrit en
    Novembre 2002
    Messages
    744
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 744
    Points : 500
    Points
    500
    Par défaut
    Bonjour Sergio,

    Ton code fonctionne pour faire un "minimize" et "restore" (sans rien de plus), mais comme écrit dans mon post, je souhaite plus .
    Dans le code de ta réponse, tu ne passe pas par le "OnRestore" de la form1, si tu minimize l"application depuis form2.

    j'ai mis un "Showmessage" dans l'unit1 du code que tu as envoyé, et mon besoin est que ce showmessage s'execute quand je minimise l'application depuis Form2, en ce moment c'est pas le cas.


    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
    var
      Form1: TForm1;
     
    implementation
     
    {$R *.dfm}
     
    uses Unit2;
     
    procedure TForm1.ApplicationEvents1Minimize(Sender: TObject);
    begin
        Edit1.Text:='';
    end;
     
    procedure TForm1.ApplicationEvents1Restore(Sender: TObject);
    begin
        Edit1.Text:='Restore OK';
       Showmessage('je passe bien là !');
    end;
     
    procedure TForm1.Button1Click(Sender: TObject);
    begin
        Form2.ShowModal;
    end;
    Bye et bon code...

    Ce n'est pas tant l'aide de nos amis qui nous aide , mais notre confiance dans cette aide .

  4. #4
    Expert confirmé Avatar de sergio_is_back
    Homme Profil pro
    Responsable informatique, développeur tout-terrain
    Inscrit en
    Juin 2004
    Messages
    1 084
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Responsable informatique, développeur tout-terrain
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 084
    Points : 5 604
    Points
    5 604
    Par défaut
    Citation Envoyé par petitcoucou31 Voir le message
    Bonjour Sergio,

    Ton code fonctionne pour faire un "minimize" et "restore" (sans rien de plus), mais comme écrit dans mon post, je souhaite plus .
    Dans le code de ta réponse, tu ne passe pas par le "OnRestore" de la form1, si tu minimize l"application depuis form2.

    j'ai mis un "Showmessage" dans l'unit1 du code que tu as envoyé, et mon besoin est que ce showmessage s'execute quand je minimise l'application depuis Form2, en ce moment c'est pas le cas.
    Effectivement si tu minimize l'application via la barre de la fenêtre form2 cela pose problème
    C'est pour ça que j'ai défini la propriété "BorderStyle" de form2 à "bsDialog" et que le minimize se fait via le bouton sur Form2 et dans ce cas cela marche correctement

    Je pense que le provient du fait que lorsque l'on minimize Form2 via la case de la barre titre seule form2 est réellement minimizée, Form1 est en fait cachée (rendue invisible) et pas minimisée

    D'ailleurs dans ce cas tu remarquera lorsque tu restore que Form1 passe au premier plan, ce qui n'est pas le cas avec le bouton qui appelle Application.Minimize sur Form2 hors dans l'API Windows le fait de faire un Show sur fenêtre la passe au premier plan, ce qui accrédite ma thèse sur ce comportement

  5. #5
    Membre confirmé

    Inscrit en
    Novembre 2002
    Messages
    744
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 744
    Points : 500
    Points
    500
    Par défaut
    re,

    Je n'arrive toujours pas à passer par le OnRestore. Même en configurant les fenêtres comme tu le dis :
    Form1 ==> bsSizeable
    Form2 ==> bsDialog
    et en utilisant le bouton de form2 pour minimiser ! . Quand je restore, je n'affiche pas le showmessage.

    De plus :=> j'avais oublié de dire que je n'utilise jamais les boutons de la barre de titre , ni même la barre des titres, seulement les boutons qui sont sur les fiches, car mes fiches sont toutes en bsNone.
    Bye et bon code...

    Ce n'est pas tant l'aide de nos amis qui nous aide , mais notre confiance dans cette aide .

  6. #6
    Expert confirmé Avatar de sergio_is_back
    Homme Profil pro
    Responsable informatique, développeur tout-terrain
    Inscrit en
    Juin 2004
    Messages
    1 084
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Responsable informatique, développeur tout-terrain
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 084
    Points : 5 604
    Points
    5 604
    Par défaut
    Citation Envoyé par petitcoucou31 Voir le message
    re,

    Je n'arrive toujours pas à passer par le OnRestore. Même en configurant les fenêtres comme tu le dis :
    Form1 ==> bsSizeable
    Form2 ==> bsDialog
    et en utilisant le bouton de form2 pour minimiser ! . Quand je restore, je n'affiche pas le showmessage.

    De plus :=> j'avais oublié de dire que je n'utilise jamais les boutons de la barre de titre , ni même la barre des titres, seulement les boutons qui sont sur les fiches, car mes fiches sont toutes en bsNone.
    Chez moi ça marche (sous Windows 7)... Tu serais pas sous Windows 10 des fois ?

  7. #7
    Membre confirmé

    Inscrit en
    Novembre 2002
    Messages
    744
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 744
    Points : 500
    Points
    500
    Par défaut
    bonjour

    Je suis sous W7 et delphi X2..

    Nous sommes bien d'accord, le "minimise" et "maximise" fonctionne bien ! même depuis form2.

    Ce qui ne fonctionne pas c'est le passage dans la procédure de l'évènement "OnRestore".
    Quand tu dis que cela fonctionne bien chez toi ... c'est que le ShowMessage qui se trouve dans la procédure de "OnRestore"s’exécute bien ?
    Bye et bon code...

    Ce n'est pas tant l'aide de nos amis qui nous aide , mais notre confiance dans cette aide .

  8. #8
    Expert confirmé Avatar de sergio_is_back
    Homme Profil pro
    Responsable informatique, développeur tout-terrain
    Inscrit en
    Juin 2004
    Messages
    1 084
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Responsable informatique, développeur tout-terrain
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 084
    Points : 5 604
    Points
    5 604
    Par défaut
    Citation Envoyé par petitcoucou31 Voir le message
    bonjour

    Je suis sous W7 et delphi X2..

    Nous sommes bien d'accord, le "minimise" et "maximise" fonctionne bien ! même depuis form2.

    Ce qui ne fonctionne pas c'est le passage dans la procédure de l'évènement "OnRestore".
    Quand tu dis que cela fonctionne bien chez toi ... c'est que le ShowMessage qui se trouve dans la procédure de "OnRestore"s’exécute bien ?
    Oui, le ShowMessage fonctionne à chaque fois
    Je te précise que j'ai fait l'essai sur Delphi 10.3 et sur Delphi 10.2 même résultat
    Dans mes versions je n'ai pas de Delphi XE2 donc je ne peux donc pas faire l'essai avec cette version là

  9. #9
    Membre confirmé

    Inscrit en
    Novembre 2002
    Messages
    744
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 744
    Points : 500
    Points
    500
    Par défaut
    re,

    Ben alors on dira que XE2 a cette lacune !
    si une personne possédant XE2 et qu'elle a 5 mn à m'accorder, on pourra certifier ou pas que cela vient bien de X2E .

    j’attends une version de Delphi 10.3, j’espère qu'elle sera là avant ma livraison !

    En tout cas ,merci pour ton temps Sergio.
    Bye et bon code...

    Ce n'est pas tant l'aide de nos amis qui nous aide , mais notre confiance dans cette aide .

Discussions similaires

  1. Gérer les boutons Minimize,Close d'une forme
    Par Chupakabra dans le forum Langage
    Réponses: 2
    Dernier message: 05/10/2005, 11h42
  2. Minimizer applications
    Par CheGueVerra dans le forum Langage
    Réponses: 2
    Dernier message: 01/09/2005, 01h40
  3. Minimize Maximize perso sur une form autre que Application
    Par sdebrois dans le forum API, COM et SDKs
    Réponses: 5
    Dernier message: 07/03/2005, 17h59
  4. Savoir si est minimized ?
    Par jamesb dans le forum C++Builder
    Réponses: 6
    Dernier message: 25/01/2005, 12h48
  5. Maximize et Minimize perso...
    Par Antomax dans le forum API, COM et SDKs
    Réponses: 5
    Dernier message: 16/06/2004, 16h40

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