|
Вопрос # 2 033/ вопрос решён / |
|
Здравствуйте! Хочу разнообразить программу, добавив в нее, так называемое, "пасхальноея яйцо". Вот что хочу спросить - а можно сделать так, что бы фора 2 появлялась при наборе определенной комбинации из баттонов - т. е. если сначала нажать, там, например, баттон1, затем баттон3, затем2 и затем снова баттон1 - то появится форма 2? Не судите строго) Спасибо...
 |
Вопрос задал: Вечперик (статус: Посетитель)
Вопрос отправлен: 2 ноября 2008, 02:05
Состояние вопроса: решён, ответов: 3.
|
Ответ #1. Отвечает эксперт: Вадим К
Здравствуйте, Вечперик!
А почему нельзя? можно, если осторожно:) Ведь люди делают.
Вся идея заключается в том, что мы где то храним текущее состояние нажатия кнопок.
Итак, наиболее простой способ. Заводим глобальную переменную step:integer;
В FormCreate инициализируем её нулем.
Эта переменная будет хранить число-состояние. Каждая кнопка при нажатии анализирует текущее число, и выполняет нужное действие. вот схематический код для Вашего варианта
//первая кнопка.
if step = 0 then step := 1
else if step = 3 then "показать форму"
else step := 0;
//вторая кнопка
if step = 2 then step := 3 else step := 0;
//третья кнопка
if step = 1 then step := 2 else step := 0;
Понятно, что кроме этого может быть и другой код. Если сделать где то вывод переменной step на форму, то будет видно, как при правильном наборе "условной секретной комбинации", она будет увеличиваться на единицу при каждом нажатии и обращаться в ноль при ошибке - то есть начальное состояние.
 |
Ответ отправил: Вадим К (статус: Академик)
Время отправки: 2 ноября 2008, 02:19
Оценка за ответ: 5
Комментарий к оценке: Если уже я понял - то ответ хорош))
|
Ответ #2. Отвечает эксперт: Dron
Здравствуйте, Вечперик!
Раз уж вопрос зашёл о пасхалках типа "нажать что-то в нужной последовательности", расскажу вкратце о том, как сделать пасхалку следующую: если нажать на клавиатуре клавиши в определённом порядке (например, какое-то слово), то что-то происходит. Подобные секреты есть во многих программах. А делается достаточно легко. Определяем текст, который нужно набрать и переменную для хранения того, что набрано:
const
EasterEggTargetText ='Hello';
var
Form1: TForm1;
EasterEggTypedText: String = '';
Чтобы реагировать на нажатия клавиш независимо от того, какой элемент активен на форме, ставим у формы KeyPreview = True.
Теперь самое главное - обработчик события формы OnKeyPress:
procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
if LowerCase(EasterEggTargetText[Length(EasterEggTypedText)+1]) = LowerCase(Key) then
EasterEggTypedText:=EasterEggTypedText+Key
else
EasterEggTypedText:='';
if Length(EasterEggTypedText) = Length(EasterEggTargetText) then
begin
MessageDlg('Easter egg!',mtInformation,[mbOk],0);
EasterEggTypedText:=''
end;
end;
Что происходит: сравниваем набранный символ с очередным символом строки-ключа. На всякий случай приводим их к одному регистру. Если символ совпал, добавляем его в строку набранных символов, а если не совпал, значит последовательность неверна и всю строку очищаем. Далее смотрим, совпадает ли длина набранного текста с длиной ключа. Если совпала - делаем "что-то" (в примере - текстовое сообщение) и не забываем очистить строку. Вот и всё! Осталось только заменить "что-то" - тут уж на что фантазии хватит.
 |
Ответ отправил: Dron (статус: Студент)
Время отправки: 2 ноября 2008, 13:54
Оценка за ответ: 5
Комментарий к оценке: Спасибо - прикольно очень)
|
Ответ #3. Отвечает эксперт: Аксион
Здравствуйте, Вечперик!
Описанное вами можно сделать ещё так:
s:string;
//обработчик первой кнопки
s:=s+'1';
if s='1321' then form2.visible:=true; //if именно тут потому, что комбинация должна закончится при нажатии этой кнопки
//обработчик второй кнопки
s:=s+'2';
//обработчик третьей кнопки
s:=s+'3';
 |
Ответ отправил: Аксион (статус: 4-ый класс)
Время отправки: 4 ноября 2008, 17:25
Оценка за ответ: 5
|
Мини-форум вопроса
Всего сообщений: 4; последнее сообщение — 2 ноября 2008, 16:31; участников в обсуждении: 2.
|
Вечперик (статус: Посетитель), 2 ноября 2008, 11:59 [#1]:
Большое спасибо - понял принцип - но 2 недочета нашел - может подскажите, как их устранить можно... 1-й: код все тот же 1321 - если нажать 11321 - то не срабатывает - хотя должна же по идее... можно это как-то исправить? и 2-й: если после ввода комбинации и появлении формы 2 просто нажать опять на баттон1 - то она появится... можно как-то онулироватьзначение step после того, как появится форма? Спасибо
|
|
Вечперик (статус: Посетитель), 2 ноября 2008, 16:23 [#2]:
Dron, большое спасибо - тоже очень забавно выходит... ну вот по первой пасхалке через step у меня все еще осталась под вопросом проблема с тем, что после появления скрытой формы 2 при нажатии сразу только на баттон 1 она свова будет появляться... вопрос с работой комбинации после n-го нажатия на начальную кнопку решил вроде - а с этим не знаю... может кто подскажет, как после form2.show или form2.visible = true присвоить значение step := 0? Ато я уж все перепробовал, на что способен - спасибо)
|
|
Вадим К (статус: Академик), 2 ноября 2008, 16:24 [#3]:
Да, походу надо поправить обработчик первой кнопки, где то так
//первая кнопка.
if step = 0 then step := 1
else if step = 3 then
begin
"показать форму";
step := 0;
end
else step := 1;
Галочка "подтверждения прочтения" - вселенское зло.
|
|
Вечперик (статус: Посетитель), 2 ноября 2008, 16:31 [#4]:
О.. теперь все работает прекрасно - еще раз большое спасибо)
|
31 января 2011, 19:23: Статус вопроса изменён на решённый (изменил модератор Ерёмин А.А.): Автоматическая обработка (2 и более ответов с оценкой 5)
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|