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

C++Builder Discussion :

Connaitre la form activé


Sujet :

C++Builder

  1. #1
    Membre éclairé Avatar de Baxter67
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 270
    Par défaut Connaitre la form activé
    Bonjours, je developpe un application, qui contien plusieur form.
    Je voudrais savoir si il y a une fonction qui existe qui retourne le nom de la form qui est affiché a l'ecran.

    Je m'explique je voudrais faire clignoter un composant quand il y a un défaut, pour ce faire je pense metre une petite image surchaque form sur laquelle je change la propriété visible toute les 500 ms.
    Le composant qui clignoteras s'apeleras pareil sur chaque form

    un truc de ce genre la je ne sais pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
      TForm *Form;
        Form = GetFormActivate();
        Form->ImageCligno->Visible = true;
    Je sais pas si je me suis bien exprimé lol

    Cordialement Baxter

  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 407
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 407
    Par défaut
    Salut !

    Dans un contexte MDI, la form enfant active est donnée par ActiveMDIChild.
    Toutes les form enfant sont mises en liste dans MDIChildren (MDIChildCount étant le nombre de fenêtres enfant dans la liste).
    Ces trois propriétés sont gérées par la fenêtre principale (Style = fsMDIForm).

    A plus !

  3. #3
    Membre éclairé Avatar de Baxter67
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 270
    Par défaut
    depuis que jai touché cette propriété je n'accede a plus aucune form, il me dis que le pointeur Form6-> est NULL

    quesqui ce passe ?

  4. #4
    Membre éclairé Avatar de Baxter67
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 270
    Par défaut
    jai limpression qu'il lance tous mon programme avant d'avoir fais tous sa :

    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
     
            try
            {
                     Application->Initialize();
                     Application->CreateForm(__classid(TForm1), &Form1);
                     Application->CreateForm(__classid(TForm2), &Form2);
                     Application->CreateForm(__classid(TForm3), &Form3);
                     Application->CreateForm(__classid(TForm5), &Form5);
                     Application->CreateForm(__classid(TFormStatCom), &FormStatCom);
                     Application->CreateForm(__classid(TForm6), &Form6);
                     Application->CreateForm(__classid(TForm7), &Form7);
                     Application->CreateForm(__classid(TForm8), &Form8);
                     Application->CreateForm(__classid(TForm9), &Form9);
                     Application->CreateForm(__classid(TForm4), &Form4);
                     Application->CreateForm(__classid(TForm11), &Form11);
                     Application->CreateForm(__classid(TForm13), &Form13);
                     Application->CreateForm(__classid(TForm12), &Form12);
                     Application->CreateForm(__classid(TForm14), &Form14);
                     Application->CreateForm(__classid(TFormImpre), &FormImpre);
                     Application->CreateForm(__classid(TForm10), &Form10);
                     Application->CreateForm(__classid(TForm15), &Form15);
                     Application->CreateForm(__classid(TForm16), &Form16);
                     Application->Run();
            }
    jai eseyé du pas a pas et juste apres la premiere ligne il lance le onshow de la form1 et la dedans je fais appele a des objet d'autre form.
    Avant sa fonctionnais pourtant grrr
    Jai remis la propriété formStyle comme avant mais c toujours pareil

  5. #5
    Membre éclairé Avatar de Baxter67
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 270
    Par défaut
    voila une capture :



    Je galére, je sais pas pourquoi sa me fais sa grrrr

    Ensuite je ne peut pas utiliser un pointeur vers la form parce que si je fais sa, sa marche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Form6->Images1->Visible = true;
    Mais si je fais sa :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    TForm *Form;
       Form = Form6;
       Form->Images1->Visible = true;
    Il dis Images1 n'est pas une propriété de TForm

    Mais le principale probléme actuelle vien du fait que apperement les autre form ne se construise plus

    Aidez moi s'il vous plait

    Cordialement Baxter

  6. #6
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 407
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 407
    Par défaut
    Salut !

    Si on travaille dans un contexte MDI, la form principale est une fsMDIForm.
    Toutes les fénêtres enfant sont des fsMDIChild (celles qui se dessinent dans la zone client de la form principale).

    Par contre, on peut rajouter des fsStayOnTop qui vont se dessiner par dessus la form principale.
    Dans ce cas précis, on peut éventuellement utiliser un pointeur que l'on initialise à chaque OnActivate si on a plusieurs fenêtres qui vont dans ce sens.
    Ca reste vrai dans un contexte plus général... pour des fiches normales.

    TForm est la classe de base qui ne peut qu'ignorer ce à quoi ressemble une classe dérivée (TForm6 par exemple).

    Si on travaille dans le contexte MDI, la séquence est la suivante (on a besoin de transtyper de la classe de base TForm sur la class dérivée):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    if(ActiveMDIChild != NULL)
        {
        if(ActiveMDIChild->ClassNameIs("TForm6"))
            {
            TForm6 * Form = (TForm6*)ActiveMDIChild;
            //.....
            return;
            }
        //On fait pareil pour les autres fenêtres, chacune ayant sa propre classe
     
        }
    Le code exact dépend d'où l'on teste : ActiveMDIChild ou Form1->ActiveMDIChild...


    On peut donc adapter ce code à un poiteur.
    Le code exacte, dépend de la manière dont on déclare le pointeur (global ou propriété de la form principale)
    En global ça donne ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    TForm *FenetreActive; //En global dans unit1 de Form1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    extern TForm *FenetreActive; // dans les autres fenêtres
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    void __fastcall TForm6::OnActivate(TObject *Sender)
    {
    FenetreActive = this;
    }
    Donc depuis n'importe quelle autre fenêtre (qui aurait pris la main sans avoir le focus):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    if(FenetreActive != NULL)
        {
        if(FenetreActive->ClassNameIs("TForm6"))
        ...
        }
    ...
    Je ne sais pas quoi rajouter de plus... ???

    Salut !

  7. #7
    Membre éclairé Avatar de Baxter67
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 270
    Par défaut
    et pour mon prob de form qui ne se cré plus ?
    parceque la tous c'est bien beau, et je t'en remerci

    Mais mon programme de compile meme plus, il plante a chaque fois que je fais appel a une form ....

  8. #8
    Membre éclairé Avatar de Baxter67
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 270
    Par défaut
    Je ne vais pas utilisé la propriété MDI parceque depuis que j'ai touché a cette propriété , plus rien ne fonctionne
    Je veux que mes différente fenetre reste independate et que je les appele par des Show etc pffff

    La je panique qu'est ce que je dois faire pour que sa refonctionne ?

    Jai eseyé retiré du proget puis ajouté au proget mais rien n'y fait il construit que la form1 et tous de suite apres il plante et je voie que les Form6-> et tous les autre d'aileur sont NULL

    plz help

    Cordialement Baxter

  9. #9
    Membre éclairé Avatar de Baxter67
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 270
    Par défaut
    a mon avie il faudrais refaire la form complétement, mais il s'agit de la form principale, et il y a plein de code
    personne ne voi coment faire
    la je suis completement bloqué

  10. #10
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 407
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 407
    Par défaut
    Salut !

    Si tu as touché à FormStyle (fsMDIForm) il suffit de remettre fsNormal et de reconstruire le projet. Ensuite, ça devrait compiler !

    A plus !

  11. #11
    Membre éclairé Avatar de Baxter67
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 270
    Par défaut
    oui jai eseyé mais rien n'y fait

  12. #12
    Membre éclairé Avatar de Baxter67
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 270
    Par défaut
    Bon, jai remplacé les fichier de cette form ( la form principale ) par ceux que j'avais sauvegardé hier sur une clef usb.
    Jai du refaire les modif que javais fais entre temps, mais la sa fonctionne a nouveau

    Je peut donc a nouveau me concentré sur le form qui est activé

    Cordialement Baxter

  13. #13
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 407
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 407
    Par défaut
    Salut !

    Alors dans ce cas, un pointeur vers TForm fera l'affaire.
    Donc dans la OnActivate pour chaque form, il faudra place le code que j'ai montré.
    Ne pas oublier de transtyper sur les bonnes classes puisque le pointeur vers TForm pointe sur une classe de base et non sur la classe réelle ! (on parle d'instance bien sûr !!!)

    A plus !

  14. #14
    Membre éclairé Avatar de Baxter67
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 270
    Par défaut
    merci beaucoup du coup de main

    Cordialement Baxter

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

Discussions similaires

  1. [C# 2.0] Comment connaitre la Form active ?
    Par 5:35pm dans le forum Windows Mobile
    Réponses: 4
    Dernier message: 10/08/2006, 22h57
  2. [VB6] Form Activate
    Par jerzy59 dans le forum VB 6 et antérieur
    Réponses: 53
    Dernier message: 19/05/2006, 15h18
  3. [C#] Cacher une Form active
    Par ArHacKnIdE dans le forum Windows Forms
    Réponses: 10
    Dernier message: 22/03/2006, 16h35
  4. [C#] liste des form actives
    Par chnew dans le forum C#
    Réponses: 5
    Dernier message: 02/01/2006, 13h04
  5. Comment connaitre la fenêtre active ?
    Par bazinou dans le forum Interfaces Graphiques en Java
    Réponses: 2
    Dernier message: 29/09/2005, 14h26

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