Subject Re: PasswordMaskEF.cc bug?
From Lee Grant <camilee@nospam.comcast.net>
Date Mon, 26 Feb 2024 04:57:19 -0500
Newsgroups dbase.getting-started

Bernd,

Nice capability addition. I'm sure Ken may want to add that for the next
edition. :)

Lee

On 2/25/2024 11:58 AM, Bernd Hohenester wrote:
<snip>
>
> i added support for inserting a password. You need to add the following lines:
>
> At the beginning where the "defines" are:
> #define CTRLV_KEY         22    // -- ASCII value of Ctrl+V
>
> And in the function key:
>
>> *-------------------------------------------------------------------------------
>>     procedure Key(nChar, nPosition)
>>                 // Handles keys entered in the password entryfield
>>        private enteredChar, returnValue
>>
>>        // Get the character positions of the selected text (if any)
>>        local SelectStartPos, SelectEndPos
>>        SelectStartPos = 0
>>        SelectEndPos = 0
>>        CheckSelect(this.hwnd,0xB0,SelectStartPos,SelectEndPos)
>>        enteredChar = chr(nChar)
>>        returnValue = true                // By default output whatever key was typed
>>        do case                           // Check for keys that modify the value
>>           case nChar = BACKSPACE_KEY
>>              // if the text is not selected, delete the previous character,
>>              // if the text is selected, delete the characters corresponding
>>              // to the selection range
>>              if SelectStartPos == 0 AND SelectEndPos == 0
>>                 this.enteredPassword = ;
>>                    stuff(this.enteredPassword, nPosition - 1, 1, \"\")
>>              else
>>                 this.enteredPassword = ;
>>                    stuff(this.enteredPassword, SelectStartPos + 1, ;
>>                    SelectEndPos - SelectStartPos, \"\")
>>              endif
>>           case nChar = DELETE_KEY
>>              // if the text is not selected, delete the current character,
>>              // if the text is selected, delete the characters corresponding
>>              // to the selection range
>>              if SelectStartPos == 0 AND SelectEndPos == 0
>>                 this.enteredPassword = ;
>>                    stuff(this.enteredPassword, nPosition, 1, \"\")
>>              else
>>                 this.enteredPassword = ;
>>                    stuff(this.enteredPassword, SelectStartPos + 1, ;
>>                    SelectEndPos - SelectStartPos, \"\")
>>              endif
>>           case nChar = ENTER_KEY
>>              if this.captureEnter AND this.enteredPassword.length = 0
>>                          msgbox( \"Kein Passwort eingegeben!\",\"Warnung!\", 48 )
>>                           this.setFocus()
>>                        endif
>
>           case nChar = CTRLV_KEY
>                 // password was inserted with Strg+V
>                 // all chars must be validated
>                 for i = 1 to this.value.length
>                   if not class::IsValidChar(this.value.substring(i-1, 1))
>                     msgbox( "Password contains invalid chars!", "ALERT!", 48)
>                     this.value := ""
>                     this.setFocus()
>                     this.enteredPasswort = ""
>                   endif
>                 endfor
>
>
>>           otherwise
>>              if class::IsValidChar(enteredChar)    // Check if alphanumeric
>>                 // if the text is not selected, insert the character entered,
>>                 // if the text is selected, overwrite the characters
>>                 // corresponding to the selection range with the character
>>                 // entered
>>                 if SelectStartPos == 0 AND SelectEndPos == 0
>>                    this.enteredPassword = ;
>>                       stuff(this.enteredPassword, nPosition, 1, enteredChar)
>>                 else
>>                    this.enteredPassword = ;
>>                       stuff(this.enteredPassword, SelectStartPos + 1, ;
>>                       SelectEndPos - SelectStartPos, enteredChar)
>>                 endif
>>                 if this.camouflageOn
>>                                                 returnValue = asc( this.maskChar ) // Output camouflage character
>>                                         else
>>                                                 returnValue = nChar
>>                                         endif
>>                                 else
>>                                         returnValue = false
>>                                         ? chr(7)    // Beep
>>              endif
>>        endcase
>>     return returnValue
>
>
> And many thanks for your idea with the "reveal" button. I have to work on it, but the optic is well (see password.jpg".
>
> cu
> Bernd
>