Ошибка: Failed to parse the Currency Converter XML document.
$29 672.01


Ошибка: Failed to parse the Currency Converter XML document.
$2 357.43


Ошибка: Failed to parse the Currency Converter XML document.
$537.78


Три прикола в Дельфи!

Сейчас я покажу, как своими руками написать три прикола в DELPHI. Итак, приступим сразу к делу.

Прикол первый:
Давайте напишем программу, которая будет выводить в какую-то часть экрана кнопку с надписью «нажми на меня», а если объект нашего прикола все же решится нажать на кнопку, то его экран засыплет кнопками с соответствующей надписью!

Создайте новый проект (надеюсь не надо объяснять как =)) на форму в левый верхний угол поместите кнопку и поменяйте ей свойство Caption на «нажми на меня» (без кавычек).

В свойстве формы BorderStyle поставьте bsNone в свойстве FormStyle поставьте fsStayOnTop, чтобы окно было всегда поверх остальных и не имело никаких обрамлений. После всего этого можете поставить на форму компонент XPManifest(если у вас DELPHI 7 и выше), чтобы кнопка была в стиле XP(я обошелся без этого). Теперь создайте обработчик нажатия на кнопку и поместите туда следующий код:


var
X: TForm1; // переменная типа TForm1 для создания нового окна
begin
X:= TForm1.Create(NIL); // создаем новую форму
ShowWindow(X.Handle, SW_SHOW); // показываем новую форму
ShowWindow(X.Button1.Handle, SW_SHOW); // показываем кнопку
X.Top:= Random(Screen.Height); // меняем положение окна

X.Left:= Random(Screen.Width);
X.Repaint; // Перерисовываем окно (чтобы оно отобразилось коррекно)
Sleep(100); //делаем паузу чтобы пользователь попытался что-то сделать
Button1.Click; // снова щелкаем по кнопке
end;

в общем-то здесь можно разобраться по комментариям, но для особо «понятливых» :) поясню. В начале я описываю переменную Х класса TForm1, потом создаю его, также как обычный объект. Но если я просто создам форму то на экране ничего не появится т.к форма созданная таким образом изначально невидима, а чтобы она появилась я вызываю процедуру ShowWindow, ей надо передать два параметра первый это окно, а второй это параметр определяющий будет ли видно окно он может иметь следующие виды:

1: SW_SHOW- окно видимо как обычное окно.
2: SW_HIDE- окно невидимо.
3: SW_MINIMIZE- окно будет свернуто на панель задач.
4: SW_MAXIMIZE- окно будет развернуто на весь экран.
5: SW_RESTORE- если я не ошибаюсь то окно будет восстановлено в нормальное положение.

В принципе параметров много и все я здесь описывать не буду — это лишь основная часть.

Если окно показать просто так то кроме пустого пятна мы не увидим ни чего, чтобы на окне была кнопка надо ее показать тем же методом что и саму форму, к счастью кнопка тоже имеет свойство Handle- это ее окно и мы его тоже должны показать! Потом я меняю положение окна (надеюсь это понятно =)). Потом окно надо ОБЯЗАТЕЛЬНО перерисовать, вызвав метод Repaint самого окна, иначе есть вероятность вместо окна увидеть квадрат или вообще ничего! Потом ждем 100 миллисекунд и опять жмем на кнопку, повторяя те же нехитрые действия пока комп не повиснет =) или наш процесс в Диспетчере задач не убьют :( . В обработчике создания главной формы напишите следующие:

procedure TForm1.FormCreate(Sender: TObject);
begin
Width:= Button1.Width; // Меняем размеры у главного окна
Height:= Button1.Height;
end;

Это нужно для того чтобы и форма и кнопка имела одинаковый размер будет ощущение что кнопка одна без формы «висит» на экране. Размеры я меняю программно (не в среде DELPHI) т.к мышкой нужные размеры поставить не всегда можно, особенно если кнопка очень маленькая. Затем в обработчике ОТОБРАЖЕНИЯ формы напиши следующее:

procedure TForm1.FormShow(Sender: TObject);
begin
ShowWindow(Application.Handle, SW_HIDE); // прячемся с панели задач
end;

Здесь мы исчезаем панели задач вызвав метод ShowWindow и в качестве первого параметра передав окно программы(или как это по научному звучит).

Кто-то скажет: «Че за маразм, почему мы прячемся и изменяем свои размеры в разных обработчиках?», а маразм в том, что если все написать в обработчик создания формы то изображение нашей программы не исчезнет с панели задач, а если все накатать в обработчик показания окна, то размеры не изменятся вот и приходится страдать маразмом и писать непонятные программы! =) Фу, кажется, с первым приколом разобрались! Теперь я опишу второй.

Прикол второй.

Принтер великая вещь я вам скажу, захочешь распечатать статью, например о SQL injection- пожалуйста. А еще принтер это хороший объект для шутки из-за того, что большинство принтеров от этих самых шуток вообще не защищены! Давайте распечатаем на DELPHI пустой лист бумаги, а заодно испугаем этим кого нибуть, заставив переустановить драйвер принтера! Писать будем без VCL поэтому сразу удалите окно нового проекта. Теперь в главном меню Project выберите View Source и в появившемся окне вставьте следующий код:

program Project1;
uses
Printers, Windows; // добавляем модуль для работы с принтером
var
f: TextFile; // переменная для печати текста
begin
while true do // запускаем бесконечный цикл
begin
Sleep(120000); // ждем 2 минуты
AssignPrn(f); // открываем принтер в режиме текстовой печати
Rewrite(f); // открываем файл печати
CloseFile(f); // закрываем файл печати
end;
end.

И так что здесь происходит? В начале я добавляю модуль для печати Printers там есть все для печати. Потом описываем переменную f типа TextFile. Затем я запускаю бесконечный цикл, в котором я в начале жду 2 минуты, потом я открываю принтер методом AssignPrn ему нужно передать переменную типа TextFile, теперь нашей переменной назначен принтер по умолчанию. Процедурой Rewrite я открываю файл печати, это и есть начало печати, после всего этого я закрываю файл и жду еще 2 минуты.

Кстати, если вы захотите напечатать еще и текст то для этого вам понадобится процедура Writeln ей нужно передать строку, и вызвать между Rewrite и CloseFile.

Да, второй прикол куда короче первого, но надеюсь, вам он понравился.

Прикол третий.

Клавиатура и мышь- лучший объект для шуток! Сейчас кто-то подумает что мол вот опять будем двигать мышку или останавливать ее на одном месте! Нет я буду кликать мышкой и «нажимать» на клавиши клавиатуры. Для этого я воспользуюсь функциями Mouse_event и Keybd_event. Первая нужна для щелчка мышью а вторая для нажатия на клавишу. Кодить будем на WinApi поэтому сразу удаляем форму и открываем сорник проекта, и вставляем туда следующий код:

program Project1;

uses
Windows;

procedure MoveMouse(Nomber: Integer); // процедура для активации прикола
begin
case Nomber of
0: begin// щелкаем мышью
mouse_event(MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
Sleep(1000);
mouse_event(MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
end;
1: begin // нажимаем Enter на клавиатуре
keybd_event(VK_RETURN, 0, 0, 0);
end;
2: begin // выводим сообщение о ошибке
MessageBox(0, «Error in mouse and keyboard driver», «Error», MB_OK);
end;
end;
end;

begin
While true do
begin
Sleep(10000); //ждем 10 секунд
MoveMouse(Random(3));// вызываем прикол
end;
end.

Итак что здесь происходит?(я уже третий раз пишу эту фразу =)) В самом начале я создал процедуру, которая будет генерировать щелчок мыши, нажатие на Enter или выводить сообщение об «ошибке». Давайте разберем ее по подробнее. Здесь процедура mouse_event генерирует событие для мыши ей надо передать аж 5 параметров, первый это флаги, флагов много я покажу только несколько из них:

1: MOUSEEVENTF_ABSOLUTE- обязательный флаг без него ничего не работает, указывает на движение мыши относительно абсолютных координат(может это звучит как то странно, но я сам до конца не понял что это значит)
2: MOUSEEVENTF_LEFTDOWN- нажать на левую клавишу
3: MOUSEEVENTF_LEFTUP- отпустить левую клавишу.
4: MOUSEEVENTF_RIGHTDOWN- нажать на правую клавишу.
5: MOUSEEVENTF_RIGHTUP- отпустить правую клавишу.

Остальные параметры нам не интересны (там все равно нули), но постараюсь рассказать и о них. Второй и третий это флаги указывающие на новую позицию мыши(работает только если указан флаг MOUSEEVENTF_MOVE, но работает странно лично я так и не понял относительно чего там все движется поэтому с целью движения мыши лучше использовать старый добрый SetCursorPos) третий и четвертый флаги это доп инфа ее смысл меняется в зависимости от указанных флагов. Ну и keybd_event это процедура, которая генерирует событие для клавиатуры у нее 4 параметра первый это клавиша на которую надо нажать остальные флаги смысл которых понять я так и не смог, но главное что их значение может быть равным нулю. Ну с выводом сообщения об ошибке ты разберешься сам.

Всё все три прикола написаны, надеюсь ты найдешь им достойное применение!

 

Интересное

Создать офис
Для создания деловой атмосферы в офисе и повышения работоспособности служащих необходимы определенные благоприятные условия, напрямую связанные не только с рациональной расстановкой мебели и...
Подробнее...
Какой же из ноутбуков...
Итак, вы стоите перед витриной или сидите перед монитором в уютном кресле и размышляете над вопросом, какой же из ноутбуков Apple будет для вас более подходящим. Кажется, что выбор не так велик:...
Подробнее...
Подключение удаленных...
В настоящее время деловым людям необходим доступ к информации, находящейся в корпоративных сетях, в любое время и из любого места. Независимо от того, находятся ли сотрудники в пути к покупателю,...
Подробнее...
Как раскрутить форум и...
Скажу сразу в начале статьи, что если вы не хотите работать над своим форумом, то и эту заметку читать не надо. Документ содержит лексику специфичную для людей, которые занимаются т.н. «раскруткой...
Подробнее...
Запуск несколкьих...
Введение: Virtual Server 2005 R2 позволяет размещать на сервере гостевые операционные системы. При работе с несколькими виртуальными машинами могут возникнуть некоторые сложности.Мы вам уже...
Подробнее...
Новый способ удаления Msn...
Не секрет, что жесткая инсталляция и невозможность простого удаления программы Msn Messenger не очень радует многих пользователей Windows XP. Какой бы хорошей не была эта программа, большинство из...
Подробнее...
Outlook Express,...
Для этого нужно сохранить в другом месте файлы с нужной корреспонденцией (например, Входящие.dbx и другие с таким же расширением) и гдебы даже и на бумажке. После того как вы переустановите...
Подробнее...
Безопасность. Какой вопрос...
Думаю, у каждого при чтении специализированной литературы возникали вопросы по поводу тех или иных терминов. Но, как правило, поблизости обычно нет того, кто может объяснить их значение. Проблемы...
Подробнее...
Секреты Delphi. Мониторинг...
Не секрет, что приложения баз данных составляют довольно большую долю всех вновь разрабатываемых приложений. Ни одна информационная система не может быть создана без соединения к той или иной...
Подробнее...
Использование программы...
Данная статья содержит сведения о бета-версии программного продукта корпорации Майкрософт. Информация в данной статье не является официальной и может быть изменена без предварительного...
Подробнее...