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 :

Desactiver bouton fermer


Sujet :

C++Builder

  1. #1
    Membre confirmé
    Inscrit en
    Juillet 2010
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 71
    Par défaut Desactiver bouton fermer
    Bonjour,
    je voudrais empecher l'utilisateur de fermer une forme

    j'ai cherché la proprété CanClose (pour lui affecter la valeur false) mais je ne la trouve pas!

    de plus je ne sais comment l'utiliser avec les evenement OnClose ou OnCloseQuery ....j'ai cherché dans l'aide de code gear mais ce n'est guerre clair!

    pourriez vous m'indiquer la maniere d'utiliser ces evenements et propriétés??
    Merci

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    573
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 573
    Par défaut
    Salut

    C est peut être pas ce que tu veux

    Form1->BorderIcons->biSystemMenu=false

    Ca te fait sauter les boutons mini , max , close mais la barre pour déplacer est conservée , rien ne t empêche de rajouter un petit bouton ou une image pour pouvoir fermer la form au cas échéant


    Sinon dans l aide
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    void __fastcall TForm1::FormCloseQuery(TObject *Sender, bool &CanClose)
    {
    CanClose = false;
     
    }

  3. #3
    Membre confirmé
    Inscrit en
    Juillet 2010
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 71
    Par défaut
    Merci pour ton aide
    j'ai essayé d'appliquer la premiere solution
    j'ai cherché la propriété BorderIcons et j'ai trouvé qu'elle a la fonction Contains qui renvoie true si l'objet TBorderIcon est contenu dans la BorderIcons et false i non
    j'ai écrit ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    frmcnslm->BorderIcons.Contains(biSystemMenu)=false;
    mais ça me donne l'erreur:
    Lvalue nécessaire

    Contains n'a pas de Value comme propriété ...

    comment faire fonctionner cette méthode??

  4. #4
    Membre émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2005
    Messages
    401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 401
    Par défaut
    Hello,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    // Enlever biSystemMenu:
    frmcnslm->BorderIcons = frmcnslm->BorderIcons >> biSystemMenu;
    ...
    // Autre exemple: On ajoute biMaximize:
    frmcnslm->BorderIcons = frmcnslm->BorderIcons << biMaximize;
    ...
    // On ne met que biMinimize
    frmcnslm->BorderIcons = TBorderIcons() << biMinimize;

  5. #5
    Membre éclairé
    Homme Profil pro
    Consultant technique
    Inscrit en
    Juillet 2002
    Messages
    519
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

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

    Informations forums :
    Inscription : Juillet 2002
    Messages : 519
    Par défaut
    On peut faire ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
    {
    Action = caNone;
    }
    Mais il faut quand même prévoir une action claire pour fermer la fiche. Sinon, l'utilisateur passera par le gestionnaire des tâches.

  6. #6
    Membre confirmé
    Inscrit en
    Juillet 2010
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 71
    Par défaut
    Merci tout le monde
    mais ça ne marche tjrs pas!
    j'ai essayé ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    void __fastcall Tfrmcnslm::FormCreate(TObject *Sender)
    {
    frmcnslm->BorderIcons = frmcnslm->BorderIcons >> biSystemMenu;
    }
    quant à:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    void __fastcall Tfrmcnslm::FormClose(TObject *Sender, TCloseAction &Action)
    {
    Action = caNone;
    }
    un message dit que :
    FormClose(TObject *Sender, TCloseAction &Action)
    n'est pas membre de frmcnslm


  7. #7
    Membre éclairé
    Homme Profil pro
    Consultant technique
    Inscrit en
    Juillet 2002
    Messages
    519
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

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

    Informations forums :
    Inscription : Juillet 2002
    Messages : 519
    Par défaut
    Si tu n'es pas passé par le gestionnaire d'évènements de l'IDE, il faut rajouter ces lignes :
    dans le .h en dessous des déclarations __published :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void __fastcall FormClose(TObject *Sender, TCloseAction &Action);
    Et ensuite il faut l'assigner à la form dans le CPP :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    frmcnslm->OnClose = FormClose;


    Par le gestionnaire d'évènements, il suffit de double cliquer sur OnClose et de mettre la ligne de code.

  8. #8
    Membre confirmé
    Inscrit en
    Juillet 2010
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 71
    Par défaut
    le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    void __fastcall Tfrmcnslm::FormClose(TObject *Sender, TCloseAction &Action)
    {
    Action = caNone;
    }
    //---------------------------------------------------------------------------
    desactive l'icon fermer!
    MAIS il desactive aussi la méthode Close() de la forme
    le code que j'ai prévu pour fermer la forme ne marche plus!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    void __fastcall Tfrmcnslm::BtquitClick(TObject *Sender)
    {
    frmcnslm->Close();
    acc->Enabled=true;
    acc->Show();
    }
    //---------------------------------------------------------------------------

  9. #9
    Membre confirmé
    Inscrit en
    Juillet 2010
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 71
    Par défaut
    le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    void __fastcall Tfrmcnslm::FormClose(TObject *Sender, TCloseAction &Action)
    {
    Action = caNone;
    }
    //---------------------------------------------------------------------------
    desactive l'icon fermer
    MAIS il desactive aussi la méthode Close() de la forme
    le code que j'ai prévu pour fermer la forme ne marche plus!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    void __fastcall Tfrmcnslm::BtquitClick(TObject *Sender)
    {
    frmcnslm->Close();
    acc->Enabled=true;
    acc->Show();
    }
    //---------------------------------------------------------------------------

  10. #10
    Membre éclairé
    Homme Profil pro
    Consultant technique
    Inscrit en
    Juillet 2002
    Messages
    519
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

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

    Informations forums :
    Inscription : Juillet 2002
    Messages : 519
    Par défaut
    En même temps, tu ne l'avais pas demandé et je pensais que le code était suffisamment simple pour être personnalisé sans informations supplémentaires.

    Il suffit de mettre une condition.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if (unevariable == quequechose)
       {
       Action = caNone;
       }
    Ainsi, si l'utilisateur clique sur l'icône, il ne se passe rien.
    Si on clique sur ton bouton, il va mettre ce qu'il faut dans la variable avant d'appeler la fonction.

    Vérifie aussi s'il ne faut pas mettre ton Close() en dernier. Je ne suis pas certain que la suite du code de ton bouton soit exécuté. J'ai pas vérifié.

  11. #11
    Membre émérite
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    573
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 573
    Par défaut
    Tiens , voilà

    tu joues par exemple avec le caption de la form tant que le "test" n est pas fait :
    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
     
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
            : TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------
     
    void __fastcall TForm1::FormCloseQuery(TObject *Sender, bool &CanClose)
    {
    CanClose = false;
    }
    //---------------------------------------------------------------------------
     
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    HWND hwndexe;
     
     
            if ((hwndexe = FindWindow(NULL, "machin")) != NULL)
       {
     
          DWORD ID;
          UINT ExitCode = 1;
          HANDLE hdl;
     
          GetWindowThreadProcessId(hwndexe, &ID);
          hdl = OpenProcess(PROCESS_ALL_ACCESS,false, ID);
     
          // GetExitCodeProcess(hdl, &ExitCode);
          TerminateProcess(hdl, ExitCode);
     
       }
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::FormCreate(TObject *Sender)
    {
    Form1->Caption="truc";
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Button2Click(TObject *Sender)
    {
     
    // ici on pourrait mettre une fonction à la place du bouton qui renvoye un caption valide pour la fermeture
    Form1->Caption="machin";
    }
    //---------------------------------------------------------------------------

  12. #12
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2002
    Messages
    481
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 481
    Par défaut
    Je crois qu'il y a une autre solution :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    HMENU WinMenu;
    WinMenu = GetSystemMenu(Form1->Handle, FALSE);
    DeleteMenu(WinMenu, SC_CLOSE, MF_BYCOMMAND);
     
    ou
     
    DeleteMenu(WinMenu, 6, MF_BYPOSITION); // 6 est la position dans le menu
    Je pense qu'il faut ajouter à la fin du code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    DrawMenuBar(Handle);
    J'ai utilisé ceci dans une version antérieure de C++ Builder

  13. #13
    Membre confirmé
    Inscrit en
    Juillet 2010
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 71
    Par défaut
    Bonjour,
    merci à tous
    puisque je suis debutante en c++builder j'ai trouvé les dernieres solutions un peu compliquer
    mais maitenent ça marche avec le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    void __fastcall Tacc::FormCreate(TObject *Sender)
    {
    TBorderIcons tempBI = BorderIcons;
      tempBI >> biSystemMenu;
      BorderIcons = tempBI;
     
    }
    Encore Merci pour votre aide

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

Discussions similaires

  1. Acitver desactiver le bouton fermer un formualire
    Par inter_amine dans le forum Windows Forms
    Réponses: 2
    Dernier message: 10/11/2008, 14h51
  2. desactivé bouton fermer tant que tt n'est pas saisi
    Par mat75019 dans le forum Access
    Réponses: 7
    Dernier message: 11/04/2006, 20h34
  3. Désactiver le bouton "fermer fomulaire"
    Par 973thom dans le forum IHM
    Réponses: 10
    Dernier message: 03/02/2005, 20h26
  4. desactiver bouton
    Par pascal.cargouet dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 14/01/2005, 14h21
  5. desactiver bouton pour certains enregistrements
    Par GymTonic dans le forum IHM
    Réponses: 7
    Dernier message: 04/01/2005, 23h46

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