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
>
|
|