Editbox: nur Hexadeziamlzahlen



  • Hi Leute!

    Ich habe ein Verschlüsselungsprogramm geschrieben, bei dem der verschlüsselte Text am Ende in Hexadezimalform vorliegt.
    Bsp: test -> 1E6F86A3

    Jetzt habe ich auch einen Entschlüssler geschrieben, der auch funktioniert, nur kommt es zum Fehler, wenn der eingegebene Verschlüsselte Text, Zeichen enthält die nicht Hexadeziman sind, wie 'Z'.
    Gibt es da sowas wie ES_UPPERCASE, was man gleich in der Resource bestimmen kann?
    Oder gibts da Alternativen?

    Danke für jede Hilfe! 😉



  • Nö, das wirst du jawohl gerade noch selbst hinkriegen.



  • Filter doch einfach die Eingaben weg die der Benutzer nicht eintippen darf.
    Bzw. korrekter: Laß nur die Eingaben zu die zulässig sind!

    Prinzip:
    WM_COMMAND
    LOWORD(wParam) enthält ID des Editfelds, auf Übereinstimmung checken
    HIWORD(wParam) auf EN_UPDATE abfragen
    Jetzt kannst Du prüfen, ob es eine gültige Tastatur-Eingabe war oder nicht. Evtl. den String korrigieren und die Caret-Position neu setzen.

    So kannst Du das erreichen.

    Martin



  • Danke das Funktioniert bis auf eine Kleinigkeit: die Caret Position 😞
    Wäre nett, wenn mir einer erklären könnte wie ich die setzen kann 🙂



  • Hab einfach aus meinem Code kopiert, hoffentlich selbsterklärend?

    case WM_COMMAND:
      //*********************************************************************
      //** Ein Menüeintrag wurde ausgewählt,                               **
      //** eine Notification wurde von einem Control-Element gesendet oder **
      //** ein Abkürzungsbefehl (accelerator keystroke) ist eingetreten    **
      //*********************************************************************
      //wNotifyCode = HIWORD( wParam ); //Notification code.
      //wID = LOWORD( wParam );         //Item, control or accelerator identifier.
      //hwndCtl = (HWND)lParam;         //Handle of control.
      switch ( LOWORD( wParam ) )
      {
        case IDC_EDIT_BEFEHL: //Editfeld "Befehl".
        case IDC_EDIT_DATEN:  //Editfeld "Daten".
        switch ( HIWORD( wParam ) )
        {
          case EN_UPDATE:
          GetDlgItemText( hwnd_dialog, LOWORD( wParam ), tcsz_temp_70stellen, NUI32_TEXTLAENGE_TEMP_70STELLEN );
          if ( Dialog_CheckEingabe_text_0bis9_AbisF( tcsz_temp_70stellen ) != 0 )
          {
            //String wurde korrigiert -> Editfeld aktualisieren.
            ui16_caret_position = (uint16)LOWORD( SendDlgItemMessage( hwnd_dialog, LOWORD( wParam ), EM_GETSEL,
                                                                      (WPARAM)0, (LPARAM)0 ) );
                                                                    //Aktuelle Caret-Position ermittlen.
            SetDlgItemText( hwnd_dialog, LOWORD( wParam ), tcsz_temp_70stellen );
            if ( ui16_caret_position > 1 )
            {
              ui16_caret_position--;                                //Neue Caret-Position um ein Zeichen weiter nach links.
              SendDlgItemMessage( hwnd_dialog, LOWORD( wParam ), EM_SETSEL,
                                  (WPARAM)ui16_caret_position, (LPARAM)ui16_caret_position );
                                                                    //Caret-Position wiederherstellen.
            }
          }
          return( NBOOL_DIALOGPROC_NACHRICHT_BEARBEITET );          //Nachricht wurde bearbeitet -> TRUE.
          break;
        }
      }
    

    HTH,
    Martin



  • Vielen Dank!
    Das funktioniert einwandfrei! 👍



  • au backe is das ein code style 😮


Log in to reply