Показать сообщение отдельно

  #2  
Старый 29.03.2006, 18:27
~Fenix~
Banned
Регистрация: 26.07.2005
Сообщений: 240
Провел на форуме:
1266236

Репутация: 75
Отправить сообщение для ~Fenix~ с помощью ICQ
По умолчанию

Такс.....а теперь рассмотрим новую программу игру-головоломку

Для начала зайдите в делфи и сохраните новый проект под названием к примеру фишки...
Сохранили?, тогда приступим к созданию игры.
На вкладке Standard имеется компонент panel.
Теперь перейдем в инспектор объектов и зададим некие свойства для панели:

1.)Height(Высота)=65;
2.)Width(Ширина)=401;
3.)Очищаем значение Caption
4.)Bevellnner(Внутренняя фаска)=bwLowered //это по своему вкусу)

Добавим кнопку, но не простую, а с рисунком.
Откройте в палитре компонентов вкладку Additional и выберете компонент BitBtn
Изменим ее свойства:

1.) Height=49;
2.) Width=49;
3.) Left=8;
4.) Top=8;
5.) Свойство Сaption необходимо очистить

Теперь создайте еще 5 таких же кнопок с помощью буфера и в итоге должно получиться 6 кнопок. Для 2-6 кнопок задайте значение
left = (64,120,232,288,344)
Для каждой кнопки задайте свойство Tag = (2,4,6,11,13,15);
Свойство Тег может хранить целое число, а что нужно хранить нам? Нам нужно хранить два числа. Во-первых, номер клетки,
в которой находится кнопка, а во-вторых, признак "цвета" фишки (от него зависит, в какую сторону она может ходить).
Зайдите в Paint и нарисуйте 2 изображения (размеры рисунков 45*45 пикселов), одно для трех левых кнопок, а одно для трех правых.
Лутьше нарисовать просто стрелочки, так будет понятней.
Сохраните эти рисунки и после загрузите их через свойство нашей кнопки Glyph.

Ну чтож, а теперь приступим непосредственно к программированию..............
Клацаем по кнопке 2 раза и появляется обработчик событий BitBtn1Click, в него пишем следующее:

procedure TForm1.BitBtn1Click(Sender: TObject);
var
i,c,k,ak:integer;
begin
with Sender as TBitBtn do
begin
i:=Tag div 2; //деление нацело
c:=Tag mod 2; //остаток от деления
k:=n-i; //величина перемещения
ak:=Abs(k); //и длина хода
if ak<3 then //максимальная длина хода
if ((c=0) and (k>0)) or ((c=1) and (k<0)) then //это порверка хода, в зависимости от цвета фишки
begin
Tag:=Tag+2*k; //значение должно изменяться на удвоенную величину перемещения
Left:=Left+56*k; //величину перемещения умножаем на расстояние между клетками
win:=win-ak;
n:=i; //пустая клетка окажется там, где раньше была фишка
end;
end;
if win = 0 then //выполняем проверку завершения решения
begin
Caption:='Готово';
panel1.color:=clFuchsia;
Panel1.Enabled:=false;
end;
end;

А теперь в окне инспектора объектов переходим на вкладку Events и в событии OnClick выбираем BitBtn1Click; Это сделано для
уменьшения работы, чтоб для каждой кнопки не писать один и тот же код.
Ах да нам еще необходимо описать глобальные переменные, они описуются здесь:

var
Form1: TForm1;
implementation

И должно получиться вот такое:

var
Form1: TForm1;
implementation
n:integer=4;
win:integer=24;

Вот и все осталось только нажать F9 как видите ничего сложного

А сейчас я приведу пример бесконечного цикла(взято и немного переработано с книги Михаила Фленова), будем открывать-закрывать сидиром). Кстати это частенько используется в Троянах
ну в общем ладно, начнем)

Запустите делфи, создайте новый проект и сохраните его)
Теперь перейдите на вкладку Events формы и создайте обработчик событий OnCreate и поместити туда следующий код:


procedure TForm1.FormCreate(Sender: TObject);
begin
ok:=false;
openparm.lpstrDeviceType:='CDAudio';
repeat
mciSendCommand(0,mci_open,mci_open_type,longint(@O penParm));
DI:=OpenParm.wDeviceID;
mciSendCommand(Di,mci_set,mci_set_door_open,longin t(@setparm));
mciSendCommand(Di,mci_set,mci_set_door_closed,long int(@setparm));
mcisendcommand(DI,mci_close,mci_notify,longint(@ge nparm));
sleep(5000);
until ok;
end;

И еще описывам глобальные переменные

var
Form1: TForm1;
openparm:tmci_open_parms;
genparm:tmci_Generic_parms;
setparm:tmci_set_parms;
di:cardinal;
ok:boolean;

И еще, в раздел uses добавляем новый модуль mmsystem, и должно получиться что то типа этого:

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls,mmsystem;

Такс....., а теперь будем разбирать код)......

В первой строчке кода переменной ок присваивается значение false. Потом запускается цикл repeat..until, который будет выполняться,
пока эта переменная не станет равной true. Но так как нигде и никто не изменяет значение этой переменной, то она всегда будет равна
false, и цикл получиться бесконечным. (Кстати попробуйте сделать сами открытие и закрытие сидюка при нажатии на кнопку ).
Перед началом цикла необходимо еще заполнить параметр lpstrDeviceType структуры OpenParm. Сюда нужно занести значение CDAudio,
что и будет указывать на необходимость работы с CD-ROM.
Ну а дальше запускается цикл, в котором поочередно то открывается дверца, то закрывается. В конце цикла ставится задержка
в пять секунд sleep(5000), чтобы CD-ROM успел "увидеть" диск после того, как закрылась дверца.

Ну а теперь хочу выложить прогу, которая к примеру по заданному таймеру зайдет в спящий режим)
Все как обычно, создаем форму, сохраняем, и переносим вот таки компоненты:

1.) Label1;
2.) Label2;
3.) Button1;
4.) Edit1;
5.) Timer1;
6.) Timer2;

Для компонента Label1 изменяем значение Caption, стираем его.
Для компонента Label2 изменяем значение Caption на "Выключить в:".
Для компонента Button1 изменяем значение Caption на "Активизировать".
Для компонента Edit1 изменяем значение Text на "00:00:00".
Для компонента Timer1 изменяем значение Interval = 1;
Для компонента Timer2 изменяем значение

1.)Interval = 1;
2.)Enabled = False;

Теперь клацаем по Timer1 два раза и появляется обработчик событий Timer1Timer, там пишем следующее:

procedure TForm1.Timer1Timer(Sender: TObject);
begin
label1.Caption:=timeToStr(time); //эта "штуковина" показывает текущее время
end;

Теперь клацаем по Timer2 два раза и появляется обработчик событий Timer2Timer, там пишем следующее:

procedure TForm1.Timer2Timer(Sender: TObject);
begin
if edit1.Text=label1.Caption then ExitWindowsEx(EWX_Force,0); //если текст в Label1 совпадает с текстом в Edit1 то..догадайтесь)
end;

И наконец клацаем на нашу родную кнопку и пишем:

procedure TForm1.Button1Click(Sender: TObject);
begin
timer2.Enabled:=true; //Включаем таймер
end;

Вот и все, домашнее задание вам сделать прогу, которая будет по заданному таймеру выключать комп. Кстати
удобная и полезная вещица, особенно кто на поминутке, допустим что-то начали скачивать большое, сами ложитесь спать,
выставляете таймер и все...когда время законница компьютер выключится.)

Продолжение следует, но наверно уже после того как я поступлю в институт (сейчас мало времени). Планирую выпустить 4 последнюю
главу - это создание трояна), но к этому нужно подойти серьезно, так как это не просто программа, ее нужно сделать
качественной, чтоб ее неловили антивирусы и прочая лабуда, так что ждите...

А еще хочу выложить программу www.hack-viyu.h16.ru/123.zip, ее хочу встроить в будующий троян)

Последний раз редактировалось VIYu; 29.03.2006 в 18:43..