This article or section documents something not included in the current version of Scratch (3.0). It is only useful from a historical perspective. |
In 1.4, the ability to drag and drop reporter block in the drop-down menu on the Key () Pressed? block was not available. To enable drag and dropping reporter block in the drop-down menu on the Key () Pressed? block, the %K argument's function in the System Browser had to be changed by editing the underlying Squeak code which controlled inputs.
Enabling
First, open the System Browser. Navigate to Scratch-Blocks → CommandBlockMorph → private → uncoloredArgMorphFor:
Replace the code with this:
uncoloredArgMorphFor: t1 | t2 | t2 _ t1 at: 2. $a = t2 ifTrue: [^ AttributeArgMorph new choice: 'volume']. $b = t2 ifTrue: [^ BooleanArgMorph new]. $c = t2 ifTrue: [^ ColorArgMorph new showPalette: true]. $C = t2 ifTrue: [^ ColorArgMorph new showPalette: false]. $d = t2 ifTrue: [^ ExpressionArgMorphWithMenu new numExpression: '0'; menuSelector: #directionMenu]. $D = t2 ifTrue: [^ ExpressionArgMorphWithMenu new numExpression: '48'; menuSelector: #midiDrumMenu]. $e = t2 ifTrue: [^ EventTitleMorph new]. $f = t2 ifTrue: [^ ChoiceArgMorph new getOptionsSelector: #mathFunctionNames; choice: 'sqrt']. $g = t2 ifTrue: [^ ChoiceArgMorph new getOptionsSelector: #graphicEffectNames; choice: 'color']. $H = t2 ifTrue: [^ ChoiceArgMorph new getOptionsSelector: #hookupSensorNames]. $h = t2 ifTrue: [^ ChoiceArgMorph new getOptionsSelector: #hookupBooleanSensorNames]. $I = t2 ifTrue: [^ ExpressionArgMorphWithMenu new numExpression: '1'; menuSelector: #midiInstrumentMenu]. $i = t2 ifTrue: [^ ExpressionArgMorphWithMenu new numExpression: '1'; menuSelector: #listIndexMenu]. $k = t2 ifTrue: [^ ChoiceOrExpressionArgMorph new getOptionsSelector: #keyNames; choice: 'space']. $L = t2 ifTrue: [^ ChoiceArgMorph new getOptionsSelector: #listVarMenu]. $l = t2 ifTrue: [^ ChoiceOrExpressionArgMorph new getOptionsSelector: #costumeNames; choice: 'costume1']. $m = t2 ifTrue: [^ SpriteArgMorph new]. $M = t2 ifTrue: [^ ChoiceArgMorph new getOptionsSelector: #motorNames]. $n = t2 ifTrue: [^ ExpressionArgMorph new numExpression: '10']. $N = t2 ifTrue: [^ ExpressionArgMorphWithMenu new numExpression: '60'; menuSelector: #noteSelector]. $s = t2 ifTrue: [^ ExpressionArgMorph new stringExpression: '']. $S = t2 ifTrue: [^ ChoiceOrExpressionArgMorph new getOptionsSelector: #soundNames; choice: 'pop']. $v = t2 ifTrue: [^ ChoiceArgMorph new getOptionsSelector: #varNamesMenu; choice: '']. $W = t2 ifTrue: [^ ChoiceArgMorph new getOptionsSelector: #motorDirection]. $x = t2 ifTrue: [^ ChoiceOrExpressionArgMorph new getOptionsSelector: #sceneNames; choice: '']. $y = t2 ifTrue: [^ ExpressionArgMorphWithMenu new numExpression: '1'; menuSelector: #listIndexForDeleteMenu]. ^ ExpressionArgMorph new numExpression: '10'
Alternatively, scroll down to the line:
$k = t2 ifTrue: [^ ChoiceArgMorph new getOptionsSelector: #keyNames; choice: 'space'].
and replace ChoiceArgMorph
with ChoiceOrExpressionArgMorph
:
$k = t2 ifTrue: [^ ChoiceOrExpressionArgMorph new getOptionsSelector: #keyNames; choice: 'space'].
Finally, Shift-Click R and select "save image for end-user" to save changes.
Warning: | Saving changes may cause irreversible damage to some copies of Scratch. If this happens, simply re-install Scratch. |
Explanation
This patch functions by changing the input type. The basic input types include text boxes, text boxes with drop-down menus, drop-down menus which accept drop-ins, and drop-down menus which do not. By setting the input type to ChoceOrExpressionArgMorph
, it is being set to a drop-down menu which accept drop-ins.
Using the modified block
There are many uses for this change. One use, namely emulating the (key pressed) block, is outlined here:
when gf clicked set [n v] to [0] forever set [n v] to ((n) mod ((length of [keys v])+(1))) change [n v] by (1) if <key (item (n) of [keys v]) pressed?> then set [key v] to (item (n) of [keys v]) end end when [space v] key pressed say (key)// space
The list "keys" contains all the keys, namely:
1 2 3 4 5 6 7 8 9 0 a b c d e f g h i j k l m n o p q r s t u v w x y z space up arrow down arrow left arrow right arrow
This script makes projects like word processors very easy.