Привет всем чайникам, которые сейчас собираются прочитать мою статью. \"Почему чайникам?\"- спросите вы и обидетесь. А обижаться не стоит, во первых потому, что чайником быть даже лучше, сами закрутите мыслю: профессионалы - они профессионалы, т.е. всё знают, а мы чайники - т.е знаем мало, зато у нас больше возможностей, мы свободны - можем экспериментировать сколько хотим, делать что хотим(пока что-нибудь дельное не получится) и узнавать, узнавать и еще раз узнавать новое, неизведанное для себя, а потом кричать от счастья, что у нас получилось написать какой-нибудь факториал.Но это так, небольшое отступление от дела.
А рассказать я вам хочу про програму, в которой содержится всего 2 строчки кода!!! Но она зато может изрядно потрепать нервы тому, на чью машину вы её запустите(ну я думаю, что врагу надо запускать, не так ли
. Нет это не вирус, не троян, и вообще, эта программа ничего пакостного не делает, разве что может заставить сделать вынужденную перезагрузку(Reset-для тех, кто еще не понял
Вообще, тут 1 главная строка кода, которая у меня получилась случайно - сидел я как обычно, экспериментируя над API32(в котором еще на разобрался) и вышла строчка. Также я расскажу вам, как сделать так, чтобы программа запускалась при запуске компа, причем в автозагрузке вы её не найдете(и не надо тыкать пальцем - типа списал материал, а где же я еще мог его взять
Ну я думая, пора уже начинать. Профессионалы, гуру, хакеры, крутые программеры могут удалиться. Все остальные: дети, женщины, военные могут остаться
Я думаю, вы уже запустили Delphi и что вам не надо объяснять ,как создать приложение, хотя во многих дотошных статьях и это с удовольствием указывается
Потороплюсь заметить, что на форме ничего размещать не надо, нам больше ничего не понадобится
Теперь приступаем непосредственно к процедуре по написанию программы. Мы будем обрабатывать событие OnMouseMove формы, т.е. при движении мыши над формой.
Причем желательно в свойстве WindowsState указать значение wsMaximized,а свойство BorderStyle сделать равным bsSizeable: Первое обеспечит максимальный размер формы в момент появления, т.е. во весь экран, а второе отключит в правом верхнем углу кнопки свернуть и развернуть(зачем нам это надо
.
На этом наши визуальные приготовления закончились.
Давайте напишем ту самую строчку кода для события OnMouseMove формы, нет, лучше для начала я расскажу, что собственно будет делать программа. А она при каждом движении мыши будет валить на монитор примерно по 50 окон-фреймов-сообщений - называйте их, как хотите
Вы скажите цикл, ан нет, помните, что может делать цикл - всего-то запускать по очереди действие которое вы ему скажите, определенное кол-во раз.За это время наш враг-юзер успеет и кофе допить и Alt+Ctrl+Del нажать
)(), так что глядите:
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
MessageBox(mb_ok,'текст в заглавии сообщения','текст в самом сообщении',mb_ok);
end;
Ну вот и та героическая строка, про которую я вам долбил, теперь при запуске программы чуть стоит вам дернуть мышь и повалится добрая сотня фреймов
)
Что за бред подумаете вы, обычное сообщение вылетит с кнопкой Ok.
Ан нет, всё будет по-моему, ну-ка попробуйте:
Стоп: вы уже собираетесь запускать программу, а как же про окна, которые сейчас повалятся на вас, предлагаю такое решение, вы немного двигаете хвостатую, видите обвал окон и сразу же нажимаете 3 заветные клавиши, чтобы сделать destroy с программой, для тех кто не знает и никогда не знал эти клавиши, говорю: Alt+Ctrl+Del:)
А знаете, почему все это происходит, правильно, и я не знаю
) Вообще-то у меня есть версия на счет этого, не знаю правильная:
Первый параметр отображает кнопки в окне(в данном случае она одна - mb_Ok), со вторым и третим ясно, стало быть, как мне кажется, четвертый делает действие, которое мы в нем указали, в данном случае, действие может быть только 1 - нажать какую-то кнопку, а раз кнопку мы указали такую же, что и в начале - происходит взаимооборот(какое я слово придумал
, а раз взаимооборот присходит без лепты пользователя, то программа думает, что действие не выполнено и начинает его заново(шо я тут наговорил()!!! Короче, думаю, кто-нибудь объяснит
)()()
Кстати, помните, я вам говорил поменять 2 значения, в свойствах формы, если вы не поняли, зачем это, объясняю(такой я дотошный
:
Если бы форма была маленькой(в четверть экрана), то движение по рабочему столу не приводило бы налету фреймов-убийц, и это естественно, ведь мы обрабатывали движение мыши по форме, а не по Windows(Виндоуз - это тоже программа, если не знаете и написана на C), а что касается убирания кнопок - свернуть, развернуть, то тут по моему всё ясно(форма ведь уменьшается).
Кстати, вы не заметили, что крестик, отвечающий за закрытие окна активен, т.е. форму спокойно можно закрыть, да и Alt+F4 работает. Нет, так дело не пойдет. Давайте сделаем со всем этим Destroy.
Итак, обрабатываем событие OnCloseQuery главного окна(а больше у нас их и нет
:
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
canclose:=false;
end;
В этой процедуре объявлена переменная CanClose, имеющая тип Boolean и отвечающая соответственно за работу или неработу функции закрытия окна стандартными методами(есть и не стандартные, например, Reboot, ShutDown, Reset,наконец) вообще, на земле все противоположно, если взглянуть на мир с точки зрения философии(мужчина - женщина, кошка - собака, наши - не наши, наконец); итак, проще говоря функция CanClose может равняться false(0) или true(1). False - значит ложь, то есть крестик отключен, true - абсолютно наоборот. Вообще тип Boolean - очень полезная вещь, без него практически нельзя обойтись при создании любой серьезной программы, так он действует в рамках двухвариантности, он мне например очень пригодился при создании такой крутой игрушки,как - Крестики-Нолики, которую я недавно закончил
))
Но мы немного отвлеклись, теперь, если запустить нашу программу, то её нельзя будет закрыть стандартными способами, проверьте!!
Alt+Ctrl+Del
я не беру в счет, так как не знаю, как програмно отключать эти 3 кнопки, надеюсь, что после этой статьи мне кто-нибудь объяснит
Вообще-то всё, у нас получился готовый продукт. Ах да, совсем забыл, я же обещал вам рассказать еще, как это портище в автозагрузку запихнуть(с помощью реестра, конечно же
. Но пока я писал это статью, мне уже передумалось, типа вспомнил, что уже где-то на итом сайте крутится статья про это и даже нашел её, так что могу подкинуть линк(нехоршо переписывать у людей
(
http://www.realcoding...rticles&id=844.
Мне эта статья очень помогла, именно благодаря ей я научился, хоть и мало-мальски пользоваться реестром.Так что бегите скорее ,пока не стерли
)
На этом говорю всем До Свиданья и... всегда рад ответить на вашы вопросы, если знаю на них ответы, так что пишите на
[email protected].
Regards, Makswell