From WikiChip
Difference between revisions of "mirc/on events/on keydown"
< mirc‎ | on events

m (Bot: adding missing title)
Line 1: Line 1:
 
{{mirc title|On Keydown - Events}}
 
{{mirc title|On Keydown - Events}}
 
The '''ON KEYDOWN''' event is triggered when a key is pressed down inside of a custom [[custom windows - mIRC|@window]].
 
The '''ON KEYDOWN''' event is triggered when a key is pressed down inside of a custom [[custom windows - mIRC|@window]].
 +
 +
'''Note''': Before version 7.62, on keydown was broken, it was incorrectly trying to do two things at once, reporting keypress and the resulting character of keypresses.
 +
The idea was to report the key being pressed in $keyval, and the resulting character in $keychar. From the very beginning, $keyval was incorrect because it returned the ASCII value of the character being pressed instead of the corresponding keycode which comes with the internal WM_KEYDOWN windows message, which has a different value for letters than ASCII. And then, if you needed to press two keys to get a character, something related to 'dead key' as well, you couldn't get the resulting character properly. For example if you press control + o, you need to get the control key being pressed, the 'o' key being pressed, and the resulting character, which is a $chr(15). It was not even possible to change on keydown to report things correctly because keypresses and resulting character comes from two differents message, and the resulting character is only known in the second one, which is always sent second. So on keydown was changed to only report keypress, which is way more correct. The event now to get the resulting character no matter what, like if you're trying to script a visual editbox in a picture window, you need to use the new created event, {{mIRC|on char}}
  
 
This event fills the following identifiers:
 
This event fills the following identifiers:
 
<div style="background-color: rgba(0,0,0,.03); display: block;"><span style="border-right: 1px dashed rgba(0,0,0,.15); display: inline-block; margin-left: 35px; margin-right: 10px; width: 70px;">'''{{mIRC|$keyval}}'''</span>The [[unicode character|unicode character]] value of the key pressed</div>
 
<div style="background-color: rgba(0,0,0,.03); display: block;"><span style="border-right: 1px dashed rgba(0,0,0,.15); display: inline-block; margin-left: 35px; margin-right: 10px; width: 70px;">'''{{mIRC|$keyval}}'''</span>The [[unicode character|unicode character]] value of the key pressed</div>
  
<div style="background-color: rgba(0,0,0,.03); display: block;"><span style="border-right: 1px dashed rgba(0,0,0,.15); display: inline-block; margin-left: 35px; margin-right: 10px; width: 70px;">'''{{mIRC|$keychar}}'''</span>The actual character pressed</div>
+
<div style="background-color: rgba(0,0,0,.03); display: block;"><span style="border-right: 1px dashed rgba(0,0,0,.15); display: inline-block; margin-left: 35px; margin-right: 10px; width: 70px;">'''{{mIRC|$keychar}}'''</span>The actual character pressed, see the note above, this is kept for backward compatibility reason, scripters should not use this value inside on keydown</div>
  
 
<div style="background-color: rgba(0,0,0,.03); display: block; margin-bottom: 10px;"><span style="border-right: 1px dashed rgba(0,0,0,.15); display: inline-block; margin-left: 35px; margin-right: 10px; width: 70px;">'''{{mIRC|$keyrpt}}'''</span>If the key is being held down/repeating</div>
 
<div style="background-color: rgba(0,0,0,.03); display: block; margin-bottom: 10px;"><span style="border-right: 1px dashed rgba(0,0,0,.15); display: inline-block; margin-left: 35px; margin-right: 10px; width: 70px;">'''{{mIRC|$keyrpt}}'''</span>If the key is being held down/repeating</div>

Revision as of 19:45, 22 January 2022

The ON KEYDOWN event is triggered when a key is pressed down inside of a custom @window.

Note: Before version 7.62, on keydown was broken, it was incorrectly trying to do two things at once, reporting keypress and the resulting character of keypresses. The idea was to report the key being pressed in $keyval, and the resulting character in $keychar. From the very beginning, $keyval was incorrect because it returned the ASCII value of the character being pressed instead of the corresponding keycode which comes with the internal WM_KEYDOWN windows message, which has a different value for letters than ASCII. And then, if you needed to press two keys to get a character, something related to 'dead key' as well, you couldn't get the resulting character properly. For example if you press control + o, you need to get the control key being pressed, the 'o' key being pressed, and the resulting character, which is a $chr(15). It was not even possible to change on keydown to report things correctly because keypresses and resulting character comes from two differents message, and the resulting character is only known in the second one, which is always sent second. So on keydown was changed to only report keypress, which is way more correct. The event now to get the resulting character no matter what, like if you're trying to script a visual editbox in a picture window, you need to use the new created event, on char

This event fills the following identifiers:

$keyvalThe unicode character value of the key pressed
$keycharThe actual character pressed, see the note above, this is kept for backward compatibility reason, scripters should not use this value inside on keydown
$keyrptIf the key is being held down/repeating

Synopsis

ON <level>:KEYDOWN:<@>:<key,...,keyN>:<commands>

Parameters

<level>The level for the event to trigger.

<@>The custom window where this event should listen. Can be @ for all windows.

<commands>The specific key, or keys to listen for. Can specify multiple keys, such as:

ON *:KEYDOWN:@myWindow:38,42,55,78:echo -a $keyval

Example

Create an alias that launches a custom, picture window which listens for key presses and displays the key value pressed, the key character pressed, and if it is repeating:

alias keyDownTest {
  window -p $+ $iif($window(@myWindow),ra) @myWindow 550 300 250 105
}
ON *:KEYDOWN:@myWindow:*: {
  clear @myWindow
  drawtext @myWindow 1 3 3 Key value: $iif($keyval,$v1,NA)
  drawtext @myWindow 1 3 25 Key character: $iif($keychar,$v1,NA)
  drawtext @myWindow 1 3 47 @myWindow Repeating: $keyrpt
}

The following command can now be typed into any mIRC command prompt:

/keyDownTest

Below is an image reflecting what this example will look like:

This screenshot shows an example of the ON KEYDOWN event custom example.

Note that this makes use of a picture window, as well as the drawtext command. These types of windows and their tools can be very powerful in creating some amazing graphical layouts, as well as mIRC games.

Compatibility

Added: mIRC v5.8
Added on: 05 Sep 2000
Note: Unless otherwise stated, this was the date of original functionality.
Further enhancements may have been made in later versions.


See Also