Цитата | Quote
Привет всем чайникам, которые сейчас собираются прочитать мою статью. \"Почему чайникам?\"- спросите вы и обидетесь. А обижаться не стоит, во первых потому, что чайником быть даже лучше, сами закрутите мыслю: профессионалы - они профессионалы, т.е. всё знают, а мы чайники - т.е знаем мало, зато у нас больше возможностей, мы свободны - можем экспериментировать сколько хотим, делать что хотим(пока что-нибудь дельное не получится) и узнавать, узнавать и еще раз узнавать новое, неизведанное для себя, а потом кричать от счастья, что у нас получилось написать какой-нибудь факториал.Но это так, небольшое отступление от дела.
А рассказать я вам хочу про програму, в которой содержится всего 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
А рассказать я вам хочу про програму, в которой содержится всего 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