У меня есть вопрос разъяснить мой беспорядок об организации памяти в компьютере в C++.
В C++ различные данные помещаются в другое местоположение. Мое понимание похоже на это.
1) раздел сегмента данных, где глобальные и статические данные расположены;
2) раздел "кучи", объекты, созданные новым
3) сложите раздел, локальную переменную
4) текстовый раздел, сам код.
Это правильно? Есть ли что-нибудь, что я пропустил или сделал неправильно?
Спасибо!
Ну, несмотря на то, что был принят другой ответ, я собираюсь выбросить один там в любом случае.
$(document).ready(function() {
var easterEgg = 'egg';
var eggLength = easterEgg.length;
var keyHistory = '';
var match;
$(document).keypress(function(e) {
keyHistory += String.fromCharCode(e.which)
match = keyHistory.match(easterEgg);
if(match) {
alert(match);
keyHistory = match = '';
} else if (keyHistory.length > 30) {
keyHistory = keyHistory.substr((keyHistory.length - eggLength - 1));
}
});
});
Когда вы в конечном итоге наберете «яйцо» (для этого примера), вы получите предупреждение, и история ключей будет сброшена.
EDIT: Обновлен код для усечения последовательности, если он становится слишком длинным.
-121--4213336-Откорректированный ответ
Вы можете легко прослушивать события на клавиатуре, возникающие при фокусировке текстового поля.
Просто добавьте событие KEY_DOWN непосредственно в текстовое поле, а затем делайте все, что хотите.
// get key presses only when the textfield is being edited
inputText.addEventListener(KeyboardEvent.KEY_DOWN,handler);
function handler(event:KeyboardEvent){
// if the key is ENTER
if(event.charCode == 13){
// your code here
doSomething();
}
}
В отдельном примечании текстовые поля также отправляют другие полезные события:
Я думаю, что единственный способ сделать то, что вы хотите, немного сложный.
В основном, невозможно получить какое-либо событие из обычного TextField, которое было бы инициировано при нажатии клавиши Enter. Вы должны делать работу вокруг...
Одной из идей было бы прослушивание текстового поля для фокус-событий. Когда он имеет фокус, вы добавляете прослушиватель в рабочую область для событий на панели клавиш и проверяете, нажата ли клавиша Enter, если это так, запустите действие, в противном случае пропустите.
Пример кода:
inputText.addEventListener(FocusEvent.FOCUS_IN,textInputHandler);
inputText.addEventListener(FocusEvent.FOCUS_OUT,textInputHandlerOut);
function textInputHandler(event:FocusEvent):void {
//our textfield has focus, we want to listen for keyboard events.
stage.addEventListener( KeyboardEvent.KEY_DOWN, keyDownHandler);
}
function textInputHandlerOut(event:FocusEvent):void {
//our textfield lost focus, remove our listener.
stage.removeEventListener( KeyboardEvent.KEY_DOWN, keyDownHandler);
}
function keyDownHandler( e:KeyboardEvent ):void{
//a key was pressed, check if it was Enter => charCode 13.
if( e.charCode == 13 ){
//ok, enter was pressed. Do your thing.
trace("We pressed enter, doSomething" )
}
}
-121--3221211- Обычно существует по крайней мере два раздела данных. Один с инициализированными глобалами, другой без (BSS). Раздел стека обычно не излучается в двоичном файле.
Конечно, такие конкретные вопросы реализации бесполезны, если не указать реализацию.