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


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


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


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

Сейчас я покажу, как своими руками написать три прикола в 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 параметра первый это клавиша на которую надо нажать остальные флаги смысл которых понять я так и не смог, но главное что их значение может быть равным нулю. Ну с выводом сообщения об ошибке ты разберешься сам.

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

 

Интересное

Установка свойств для...
Установка свойств для разных объектов на странице является одной из простейших задач при программировании на VBScript. Стандартная схема этого действия выглядит так:
Подробнее...
Сквозная навигация
Сквозная навигация — это система связей (гиперссылок), облегчающих движение пользователя по сайту. Речь идёт о максимально возможном переплетении данных. Кроме того, наличие такой связи...
Подробнее...
Дюжина вопросов по...
Существуют несколько вопросов, которые изо дня в день повторяются на доске сообщений сервера ISAServer.org и в списках подписчиков. Эти же самые вопросы задают также в общих новостных лентах...
Подробнее...
Обзор ОС Windows Server...
Сервер Windows Server 2003 Datacenter Edition разработан специально для удовлетворения потребностей бизнеса в высокой масштабируемости, доступности и надежности и позволяет создавать...
Подробнее...
Что? Шумит компьютер?
Давным давно жили-были первые компьютеры. Они были большие и неповоротливые и очень сильно шумели и гудели. Эти первые компьютеры были очень нежные, хоть и железнокрепкие (я — Маяковский!),...
Подробнее...
Самые основы J2ME,...
Начнем с предисловия: это моя первая статья, поэтому если что не понравиться, то не пинайте сильно, в ней я постараюсь открыть основы написания простейших мидлетов для мобильных телефонов, что...
Подробнее...
Red Hat и USB-устройства
Цель этой статьи — заставить работать мою USB мышь, USB камеру и USB жесткий диск с Linux«ом.Мой Компьютер с Emperor Linux и USBЯ начал использовать Red Hat 7.3. Хотя уже прошло много времени, и...
Подробнее...
Комплексное продвижение...
В этой статье мы остановимся на положительных сторонах каждого отдельного этапа, а так же определим положительные и отрицательные стороны комплексного подхода при продвижении сайта, т.е....
Подробнее...
Справочник по php
Справочник в формате .chm
Подробнее...
Примеры подключения...
Данный материал содержит примеры создания строк ado connection для различных типов часто используемых Баз Данных, например: odbc dsn, odbc dsn-less, ole db provider, ms remote, oracle, excel,...
Подробнее...