begin process at 2012 05 28 20:50:22
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Windows

 > 

GUI

 > 

Empécher la modification d'une zone Edit


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Empécher la modification d'une zone Edit

mercredi 16 août 2006 à 11:28:51 | Empécher la modification d'une zone Edit

skirby

Bonjour tout le monde,

J'aimerais savoir quelle est la méthode la plus simple et la plus propre pour empécher la saisie dans une zone de texte (contrôle Edit)

Je sais que l'on peut :
- Sous classer l'objet pour contrôler la saisie au clavier
- Mettre le contrôle en read only puis changer la couleur de fond (pour restaurer la couleur blanche)

Mais n'existe t'il pas une méthode plus simple comme l'interception d'un message Windows genre WM_KEYDOWN ?

Merci d'avance pour votre aide.

mercredi 16 août 2006 à 11:45:59 | Re : Empécher la modification d'une zone Edit

BruNews

Administrateur CodeS-SourceS
L'interception passe par le sous classement et C'EST très simple.

ciao...
BruNews, MVP VC++
mercredi 16 août 2006 à 12:08:41 | Re : Empécher la modification d'une zone Edit

skirby

Salut BruNews,

Donc si je comprend bien, il n'existe pas d'autre méthode ?

N'est t'il pas possible d'annuler l'événement WM_KEYDOWN pour le contrôle en question genre :
    case WM_COMMAND:
      case IDC_EDT_MONCONTROLE:
        switch (HIWORD(wParam)) {
          case WM_KEYDOWN:
            // blocage de l'événement pour l'annuler
            return FALSE;
          break;
        }

mercredi 16 août 2006 à 12:45:47 | Re : Empécher la modification d'une zone Edit

BruNews

Administrateur CodeS-SourceS
Faut bien saisir la diff entre pre-event et notif sur fenetre mère (post-event).
Ce que tu reçois sur la fenêtre parent est une notif d'action faite alors qu'aller récupérer le WM_KEYDOWN (ou autre) sur les events system par sous classement est une interception directe qui permet de l'annuler en ne repassant pas l'event au controle.

ciao...
BruNews, MVP VC++
mercredi 16 août 2006 à 14:21:31 | Re : Empécher la modification d'une zone Edit

skirby

Ok, j'ai bien compris la différence.

Pour la version avec le sous classement, comment faire pour n'autoriser que le copier (Ctrl + C) dans la zone Edit ?

Sinon, pour ma culture, j'essaye la version avec le contrôle en Read Only.
J'essaye de récupérer la couleur de fond d'une autre zone Edit afin de lui appliquer la même couleur (dans l'hypothèse où l'utilisateur utiliserait une autre couleur que le blanc pour les fenêtres).

Voici un extrait de mon code :
    // Variables globales
    HBRUSH g_hbrBkgnd;

    case WM_INITDIALOG:
      ...
      HDC hdc = GetDC(hEditNom);
      COLORREF crBkgnd = GetBkColor(hdc);
      g_hbrBkgnd = CreateSolidBrush(crBkgnd);
      ReleaseDC(hEditNom, hdc);
    break;

    case WM_CTLCOLORSTATIC:
      switch (GetDlgCtrlID((HWND)(DWORD)LOWORD(lParam))) {
        case IDC_EDT_INFO:    // Contrôle dont je désire changer la couleur
          return (LONG)g_hbrBkgnd;
          break;
      }
      break;

Mon problème est que la fonction GetBkColor retourne toujours 0xFFFFFF (code erreur)
Est ce que j'utilise correctement la fonction ?

J'ai regardé sur le site de MSDN et il semblerait que oui.
Si quelqu'un pouvait faire un test et me dire ce qui ne va pas ce serait sympa.

Merci d'avance.
mercredi 16 août 2006 à 15:02:51 | Re : Empécher la modification d'une zone Edit

BruNews

Administrateur CodeS-SourceS
Réponse acceptée !
Va voir GetSysColor() pour avoir la couleur, faut aussi respecter le choix utilisateur défini dans le panneau de config, API te le donnera.
Dans proc de sous classement, "return 0" sur ce que tu veux interdire et repasse à la oldProc le reste.

ciao...
BruNews, MVP VC++
mercredi 16 août 2006 à 16:38:41 | Re : Empécher la modification d'une zone Edit

racpp

Administrateur CodeS-SourceS
Salut,
Pour empêcher la modification d'un Edit , tu peux regarder mon dernier code source:
http://www.cppfrance.com/codes/EFFET-TYPEWRITER-WIN32_39064.aspx
Il te suffira de modifier la procédure de sous-classement selon ce que tu veux faire

GetBkColor() retourne la couleur d'arrière-plan et non la couleur de fond. La couleur d'arrière-plan concerne le texte alors que la couleur de fond concerne toute la zone interne de l'Edit.


mercredi 16 août 2006 à 19:37:29 | Re : Empécher la modification d'une zone Edit

adrienva

Si tu bosse sous Vstudio, il me semble qu'il y a la propriété Readonly pour empecher la saisie. A moins que je n'aie pas compris le probleme ^^
mercredi 16 août 2006 à 23:13:43 | Re : Empécher la modification d'une zone Edit

skirby

Merci à tous pour vos réponses ! ! !

adrienva :
J'avais mentionné cette possibilité au début mais merci quand même.

BruNews :
Je ne connaissais pas GetSysColor, c'est parfait pour ce que je veux faire.
Merci aussi pour cette petite leçon sur les interceptions ;o)

racpp:
Super ta source. C'est original !
Il ne me reste plus qu'a trouver comment autoriser seulement le Ctrl+C mais je trouverais bien.

Merci et A+
jeudi 17 août 2006 à 00:31:40 | Re : Empécher la modification d'une zone Edit

racpp

Administrateur CodeS-SourceS
Dans la procédure de sous-classement, tu peux ne laisser passer que le message WM_COPY. Mais il faut  quand-même laisser  passer d'autres messages comme pour le clic gauche,  clic  droit,  etc.
Il serait  donc  préférable   de  bloquer  les  messages  comme  WM_CLEARWM_CUT,  et  WM_PASTE.


1 2

Cette discussion est classée dans : edit, zone, méthode, modification, empécher


Répondre à ce message

Sujets en rapport avec ce message

!!!!!!!!!!!SysKeyUP!!!!!!!!!!!!!! [ par furiouspk ] bonjour a vous!!!!!!!je cherche le moyen pour recuperer un evenement du style SysKeyUp dans une zone edit d'une boite de dialogcar l evenement generé ENTER dans une zone de texte [ par anthraxx ] Comment on fait pour que lorsque l'utilisateur, en train de taper un texte dans un controle "EDIT", tape entrée, une fonction soit appelée?J'ai pas tr Re:Comment appliquer une police et une couleur à un contrôle ? [ par marcel6566 ] rebonjour et merci pour l'aide, mais ...Toujours pas de modification de police, fonte, couleur dans le controle Edit.Une partie de mon programme :void Edit box et couleur de text help [ par Shouwi ] Alos la question est une des plus con dans le monde : comment je peux faire pour appliquer une couleur à du text selectionner dans une RICH editbox 2 Focus MFC [ par Helau ] Bonjour,J'ai une appli qui utilise des onglets.Quand j'arrive sur un onglet, j'ai certaines zones de saisie grisées, d'autres active, en fonction de c binarization image [ par darksoul07 ] bonjour je dois binarizer une image en C. J'ai essayer en utilisant la méthode de binarization automatique par la valeur moyenne (histogramme) mais j' Edit box [ par c2millet ] Je voudrais savoir comment faire pour pouvoir changer la couleur de fond de mon editbox en rouge au lieu du blanc.Voilà c toutMerciCmill Controls [ par ngatcha ] comment definir un edit text dans visualc++.Par exemple j'ai pour Radiobutton BS_AUTORADIOBUTTON,j'aimerais la meme chose pour d'autres elements comme


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,437 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales