![](../004.gif)
Нас ребут, а мы крепчаем!
AvaLANche (kolyan@rnc.ru)
Спецвыпуск Хакер, номер #004, стр. 004-114-1
Let the party begin!
Итак, начнем! Берем твою любимую Дельфю и создаем новый проект (в меню главного окна: File -> New Application).
Я не люблю всяких имен по дефолту, поэтому сразу обзываем появившуюся форму, например, 'SuperForm' (в Object Inspector`е поле 'Name'), меняем ее заголовок (Caption) на что-нибудь типа 'sHUTiTdOWN - не дай виндам засохнуть!' и делаем ее диалогом: BorderStyle правим на bsDialog. Теперь тащим на форму label, checkbox, два radiobutton`а, прогрессбар и таймер. Что, грузанул я тебя? Ну, тогда объясняю в чем маза: label - просто текст на окне, checkbox - пимпа с флажком, radiobutton - круглая фигулька с точкой внутри (все это во вкладке 'Standard' списка компонентов), progressbar показывает прогресс выполнения какого-нибудь процесса (например, когда ставишь софтину в setup`е, он показывает, сколько файлов скопировано, и т.п.), находится этот бар во вкладке 'Win32', а таймер и в Гондурасе таймер (вкладка 'System'). Эти фичи нужны для пущего западла, а вот label тебе пригодится во время отладки проги или когда будешь заценять, как она пашет: через него ты будешь шатдаунера нашего закрывать.
"Все еще только начинается!" ;-) (C) Санта-Барбара
Все свойства объектов меняются просто: выбираешь жертву истязаний и в Object Inspector`е редактируешь нужное свойство.
Сначала обзовем радиобатоны и поменяем их подписи (Caption): первый - на 'ToPowerOff', кэпшн - на 'повер офф!'; второй - на 'ToReboot', кэпшн - на 'ребут'. Это все нам дальше пригодится. Таймер называем 'DeathTimer', а прогрессбар просто: 'ProgressBar'. Теперь меняем имя чекбокса на 'ForceBox' и кэпшн на что-то типа 'Force - с потерей всех данных', а вообще по твоему вкусу. Эта феня нужна для очередного глумления над твоим приятелем, заюзающим эту прогу. Представь: жмет он на него, жмет, а винды все равно отрубятся в режиме 'force', т.е. никто не будет спрашивать у запущенных приложений разрешения на взлет. Ты еще помнишь про ма-аленький label (или он у тебя во все окно получился? :))? Вспоминай! Он нам дальше пригодится, а пока лучше назови его 'Title' и напиши в нем заголовок проги, например, 'sHUTiTdOWN'.
Займемся кодингом
Для начала сделаем самое простое - объявим нужные для работы переменные. Делать это будем в разделе implementation, зачем - поймешь сам, если ненадолго включишь мозгу. Итак, вводим вот что:
var
progress : integer; //сколько набежало в прогрессбаре
Want2SwitchOff : byte = 0; //сколько раз кликнули по label`у, чтобы прога закрылась
ReallyClose : boolean = false;//после 5-ти кликов будет true, и все, финита :)
Если ты пока не понял, для чего эти переменные нужны, не кидай ломом в монитор! :) Скоро все станет ясно даже одноногой табуретке :)).
Теперь нужно сделать так, чтобы сколько наш бедный ламер на чекбокс ни давил, флажок все равно стоял. :) Делается это так: кликаешь два раза по твоей пимпе с флажком и в открывшемся окне редактирования кода, внутри функции ForceBoxClick, пишешь:
ForceBox.Checked := true;
Готово! Сейчас сделаем, чтобы прогу обычными средствами (Alf-F4 или крестиком) нельзя было отрубить. Выбираем вкладку 'Events' в свойствах формы (все как обычно в Object Inspector`е), а там создаем обработчик события OnClose. В нем пишем: