//------------------------------------------------------
        public static void AppliqueToForm(Form racine)
        {
            if (racine == null)
            {
                return;
            }
            racine.KeyPreview = true;
            racine.KeyDown   -= m_handlerKey;

            CSessionClient   session = CSessionClient.GetSessionUnique();
            IInfoUtilisateur info    = session != null?session.GetInfoUtilisateur() : null;

            bool bIsAdmin = false;

            if (info != null)
            {
                if (info.GetDonneeDroit(CDroitDeBaseSC2I.c_droitInterface) != null)
                {
                    bIsAdmin        = true;
                    racine.KeyDown += m_handlerKey;
                }
            }
            CSetupVisibiliteControles setup = GetSetupForWindow(session, racine);

            if (setup != null && (
                    !bIsAdmin ||
                    (GetKeyState(0x10) & 0xF000) != 0xF000 || //SHIFT
                    (GetKeyState(0x12) & 0xF000) != 0xF000))  //ALT
            {
                setup.Apply(racine, false);
            }
        }
        //------------------------------------------------------
        static void racine_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.Alt && e.Shift && e.KeyCode == Keys.F7)
            {
                CSessionClient   session = CSessionClient.GetSessionUnique();
                IInfoUtilisateur info    = session != null?session.GetInfoUtilisateur() : null;

                if (info != null)
                {
                    if (info.GetDonneeDroit(CDroitDeBaseSC2I.c_droitInterface) != null)
                    {
                        CSetupVisibiliteControles setup = new CSetupVisibiliteControles();
                        Control ctrl = sender as Control;
                        if (ctrl != null)
                        {
                            Form frm = ctrl.FindForm();
                            if (frm != null)
                            {
                                setup = GetSetupForWindow(session, frm);
                                CFormSetupFenetreDynamique.ShowArbre(frm, setup);
                                SetSetupForWindow(session, frm, setup);
                                setup.Apply(frm, false);
                            }
                        }
                    }
                }
            }
        }
        //------------------------------------------------------
        private static void SetSetupForWindow(CSessionClient session, Form form, CSetupVisibiliteControles setup)
        {
            string strKey = c_racineCleRegistre + form.GetType().ToString();
            CDataBaseRegistrePourClient reg = new CDataBaseRegistrePourClient(session.IdSession);

            if (setup == null)
            {
                reg.SetValeurBlob(strKey, new byte[0]);
            }
            else
            {
                MemoryStream           stream = new MemoryStream();
                BinaryWriter           writer = new BinaryWriter(stream);
                CSerializerSaveBinaire ser    = new CSerializerSaveBinaire(writer);
                CResultAErreur         result = setup.Serialize(ser);
                stream.Flush();
                reg.SetValeurBlob(strKey, stream.GetBuffer());
                writer.Close();
                stream.Close();
                stream.Dispose();
            }
        }
        //------------------------------------------------------
        private static CSetupVisibiliteControles GetSetupForWindow(CSessionClient session, Form frm)
        {
            CSetupVisibiliteControles setup = new CSetupVisibiliteControles();
            string strKey = c_racineCleRegistre + frm.GetType().ToString();
            //cherche le setup dans le registre
            CDataBaseRegistrePourClient reg = new CDataBaseRegistrePourClient(session.IdSession);

            byte[] bts = reg.GetValeurBlob(strKey);
            if (bts != null)
            {
                MemoryStream           stream = new MemoryStream(bts);
                BinaryReader           reader = new BinaryReader(stream);
                CSerializerReadBinaire ser    = new CSerializerReadBinaire(reader);
                CResultAErreur         result = setup.Serialize(ser);
                if (!result)
                {
                    setup = new CSetupVisibiliteControles();
                }
                reader.Close();
                stream.Close();
                stream.Dispose();
            }
            return(setup);
        }