Détecter CTRL+V

Résolu
mogwai93 Messages postés 362 Date d'inscription mardi 31 décembre 2002 Statut Membre Dernière intervention 4 novembre 2023 - 9 oct. 2011 à 19:03
mogwai93 Messages postés 362 Date d'inscription mardi 31 décembre 2002 Statut Membre Dernière intervention 4 novembre 2023 - 9 oct. 2011 à 21:29
Bonjour

j'aimerais savoir s'il est possible de détecter sur un champ edit
si le texte rentré vient "du clavier" ou s'il vient d'un copier coller (ctrl+V ou menu contextuel clic droit+coller)

J'arrive à détecter l'appui sur Ctrl ou sur V, mais pas la combinaison
et pour le clic droit "coller" : aucune idée


merci

2 réponses

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
9 oct. 2011 à 21:24
Pour hooker tout ce qui se passe dans un controle, EDIT ou autre, on le sous classe.

Exemple minimaliste qui interdit le copier-coller.

HWND hNBR = 0;
WNDPROC oldFloatProc = 0;

LRESULT CALLBACK ProcEdFloat(HWND hwnd, UINT mssg, WPARAM wParam, LPARAM lParam)
{
  //if(mssg == WM_CHAR) TonCodePourWM_CHAR();
  if(mssg == WM_PASTE) return 0;
  return CallWindowProc(oldFloatProc, hwnd, mssg, wParam, lParam);
}

INT_PTR AppDlgProc(HWND hdlg, UINT mssg, WPARAM wParam, LPARAM lParam)
{
  switch(mssg) {
    case WM_INITDIALOG:
      SetClassLongPtr(hdlg, GCLP_HICON, (LONG_PTR) LoadIcon(0, IDI_APPLICATION));
      hNBR = GetDlgItem(hdlg, IDED_NBR);
      SendMessage(hNBR, EM_LIMITTEXT, 23, 0);
      oldFloatProc = (WNDPROC) SetWindowLongPtrA(hNBR, GWLP_WNDPROC, (LONG_PTR) ProcEdFloat);
      return 1;
    case WM_COMMAND:
      switch(wParam) {
        case IDOK:
          onOK();
          return 0;
        case IDCANCEL: EndDialog(hdlg, 0);
      }
  }
  return 0;
}


ciao...
BruNews, MVP VC++
3
mogwai93 Messages postés 362 Date d'inscription mardi 31 décembre 2002 Statut Membre Dernière intervention 4 novembre 2023
9 oct. 2011 à 21:29
merci

j'avais bien sous classé mon edit
il me manquait juste le WM_PASTE
0
Rejoignez-nous