Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

книги хакеры / журнал хакер / специальные выпуски / Специальный выпуск 4_compressed

.pdf
Скачиваний:
16
Добавлен:
20.04.2024
Размер:
7.13 Mб
Скачать

>СПЕЦВЫПУСК #4

Â

ОВИЯХ

па блокнота вот с таким текстом:

 

void __fastcall TForm1::N2Click(TObject *Sender)

- вызов

класса

 

 

{

- начало функции

 

 

- тело функции

 

}- конец функции

 

 

 

Теперь между вот этими фигурными скобочками - в тело

 

 

 

 

должен прописать событие. Свою первую строчку на

 

 

 

 

впиши туда вот это, и общий вид будет таков:

 

 

 

 

void __fastcall TForm1::N2Click(TObject *Sender)

 

 

{

 

 

 

 

 

 

if(OpenPictureDialog1->Execute())

 

 

{

 

 

 

 

 

 

 

 

 

 

Image1->Picture->LoadFromFile(OpenPic-tureDialog1->File

 

 

}

 

 

 

 

 

 

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Âîò

òàê

все и должно выглядеть. Причем не забывай, что

 

 

 

 

 

чувствительный к регистру. Поэтому если вместо большой

 

 

 

 

 

 

 

 

 

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

 

 

 

 

предельно внимателен - как когда играешь в квак.

 

 

 

 

 

 

 

 

 

 

 

Опишем оставшиеся подменю. Смонтируем подменю

-

 

 

 

но так же кликаешь на нем и прописываешь меж фигурных

 

 

 

 

 

 

 

 

эту строчку:

 

 

 

 

Image1->Picture=NULL;

 

 

 

 

И самое последнее подменю - “Выйти” - описываем так

-

 

 

 

ных скобок):

 

 

 

 

Form1->Close();

 

 

 

 

Кончина

 

 

 

 

Теперь осталось кинуть на форму последнюю пару

-

 

 

 

 

 

 

шу супер-прогу можно уже продавать - если, конечно, ты раскрутишь

 

 

 

ее, то она наверняка сможет конкурировать с прогами

:-

 

 

 

). Ну вот: находишь в закладке Additional компонент под названием

 

 

 

“ScrollBox” и кидаешь его к себе на панельку. Ищешь в

-

 

 

 

ств “Align”, кликаешь по нему и выбираешь там “alClient”.

 

 

 

 

 

 

 

 

же закладке ищешь компонент Image, кидаешь его на

-

 

 

 

ти, ты уже заметил, что твой компонент ScrollBox занял

 

 

 

 

Так и должно быть - верным путем идете, товарищи!).

-

 

 

 

понент “Image” - находим свойство “AutoSize” и

â

 

 

 

 

 

 

 

 

 

 

значение true... Все! Прога готова. Осталось только из

 

 

 

 

сделать исполняемый модуль - откомпилировать программу

-

 

 

 

го ищешь в верхнем меню Project подменю Build AllProject

-

 

 

 

то всевозможный Build) и нажимаешь BuildAll. Компилятор несколько

 

 

 

 

 

 

минут помучается (в зависимости от производительности

 

 

 

 

 

 

 

 

 

 

 

может мучаться и часами) и... Вот ты и получил ЕХЕшник.

 

 

 

 

юзать свою прогу по полной программе. А вообще-то, это

 

 

 

 

легкий примерчик - возможностям C++ Builder нет предела.

 

 

 

 

поймешь это, если, конечно, не будешь лениться :). Удачи!

 

 

 

 

 

 

 

 

80

0050

КОНСТРУКТОР

 

 

>СПЕЦВЫПУСК #4

 

GETRIGHT ÑÂ

SpelinblimbeR (spelinblimber@chat.ru)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Теперь смотри над

формой - там палитра

êîì-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

понентов. На закладке

Standard кликай

мышом

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

по букве А. Эта буква

À - íè ÷òî èíîå, êàê

Метка

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(Label). Нам она нужна, чтобы писать на

форме.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Кликай мышом по ней, а потом по форме, куда

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

кликнешь на форме - там она и будет. Она сей-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

час выделена (в черных квадратиках вся), посе-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

му Object Inspector отображает ее свойства. Ме-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

няй Caption (в нем напиши “Введи адрес файла

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Постановка

 

задачи

 

 

 

 

 

 

сюда: “) и Font (он находится ниже, кликни на

 

 

 

 

 

она там перед тобой раскрывается? Тогда по-

 

нем, а потом на трех точках; я ставлю 10-ый MS

 

 

 

 

 

 

 

 

 

 

 

 

 

 

зырь на монитор - вон она, большой серый пря-

 

Sans Serif полужирный). Добавь еще одну метку

 

А задача наша

 

проста как угол дома - сесть за

моугольник в центре. И вообще, я не буду тебе

 

(поставь ее ниже), в ней Caption поставь “Сохра-

 

 

 

комп и максимум

 

 

за полчаса сообразить себе

щас про дельфийский интерфейс шибко под-

 

нить файл сюда: “, ну и шрифт поставь анало-

 

собственный

 

GetRight. Конечно, он не будет

робно рассказывать. Лучше сразу за дело! Сей-

 

гичный. В третьей метке поменяй шрифт и сот-

 

 

 

 

 

 

 

производить докачку после дисконнекта, качать

час мы немного покликаем мышом и потаскаем.

 

ри все в Caption, здесь мы будем выдавать

 

 

в заданное тобой время, не сможет качать нес-

Итак, начнем: сначала нужно изменить название

 

сообщения по ходу загрузки. Теперь добавь два

 

 

 

 

 

 

 

 

 

колько файлов сразу... но зато он сможет качать

формы. Она сейчас называется Form1, а на кой

 

Edit’а (справа от метки в палитре компонентов).

 

 

 

 

 

 

 

 

 

 

 

файло по ftp и http, для начала совсем неплохо.

тебе такое название? Это ж название окна твоей

 

Первый поставь напротив первой метки справа

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Соображать прогу будем на Delphi. Ну что, зада-

проги. Изменить! Кликай по форме, она стано-

 

(это будет для ввода адреса), второй - напротив

 

 

 

 

 

 

 

 

 

ча ясна? От винта!

вится активной, теперь смотри налево - там

 

второй метки справа (это для сохранения). У

Делаем фейс

 

 

 

 

Object Inspector, фича для конфигурирования

 

обоих сотри текст (там написано Edit1, Edit2, на

 

 

 

 

разных свойств. Свойство, ответственное за

 

фиг оно надо), для этого выдели (клик по нему

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

название, называется Caption, ищи его в Object

 

мышом) и стирай текст в свойстве Text. Затем

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Запускай Delphi, желательно в версии 4 или 5.

Inspector’е и нажимай на него. В белом окошке

 

кинь на форму две кнопки (через одну справа от

 

 

Перед тобой раскроется целехонькая и нетрону-

вводи что-то типа “Крутая программа-качалка”.

 

Edit’а в палитре компонентов), первую назови

 

 

тая (хе-хе, пока) форма. На ней мы и будем му-

Ну как, все понятно? Позырь вон на скриншот,

 

“Закачать”, вторую - “Закрыть” (это все свой-

 

 

тить. Что, ты не знаешь, что такое форма и где

òàì Object Inspector åñòü.

 

ства Caption кнопок). Потом открой закладку

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

КОНСТРУКТОР

 

 

 

>СПЕЦВЫПУСК #4

0051

81

 

ОИМИ РУКАМИ

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Internet (äëÿ Delphi 4) èëè FastNet (äëÿ Delphi 5)

по фтп, если она установлена

 

умолчанию 0), это нам понадобится потом, для

 

 

палитры компонентов. Помести на форму ком-

NMHTTP1.Disconnect ; // разрываем связь

проверки заполнения всех полей.

 

 

 

 

 

поненты NMFTP и NMHTTP, это для закачки. Они

по хттп, если она установлена

 

 

 

 

не будут видны в готовой программе, посему

Close ; // Закрываем прогу

procedure TForm1.Edit1Change(Sender: TObject)

 

 

 

 

 

тыкай их куда хочешь. Уфф, можешь сохранять-

end ;

;

 

 

 

 

 

ся. Дави File -> Save All. Форму обзови main,

Если не разорвать связь, прога просто откажет-

begin

 

 

 

 

 

 

 

 

 

например, а проект - downloader. Посмотри, что

 

 

 

 

 

 

у меня получилось.

ся выходить. Поэтому и разрываем.

Edit1.Tag := 1 ; // присвоить тагу первого

 

 

 

 

 

 

 

 

 

 

 

 

 

эдита значение 1

 

 

 

 

 

 

 

 

 

end ;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Аналогичную операцию необходимо проделать и

 

 

 

 

 

 

 

 

 

со вторым эдитом, только там нужно писать:

 

 

 

 

 

 

 

 

 

Edit2.Tag := 1 ;

 

 

 

 

 

 

 

 

 

Не забывай об именах! Вот и все с подготовкой,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

а теперь начинается...

 

 

 

 

 

 

 

 

 

Реальный кодинг

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Да, именно он. Читай внимательнее и вникай.

 

 

 

 

 

 

 

 

 

Перейдем к нашей главной кнопке - “Закачать”.

 

 

 

 

 

 

 

 

 

Кликай по ней два раза и создавай обработчик,

 

 

 

 

 

 

 

 

 

далее вписывай код, чтобы получилось вот что:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

procedure TForm1.Button1Click(Sender: TObject)

 

 

 

 

 

 

 

 

 

;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

begin

 

 

 

 

 

 

 

 

 

Label3.Caption := ‘’ ; // очищаем метку для

 

 

 

 

 

 

 

 

 

 

 

 

 

Готовимся кодить

 

 

 

сообщений

 

 

 

 

 

Кстати, после // в Delphi до конца строки

èäåò

 

 

 

 

 

 

 

комментарий, его она не учитывает при

компи-

if ( Edit1.Tag = 1 ) and ( Edit2.Tag = 1 ) and

 

 

 

 

 

Увы, программирование состоит не только из

ляции. Комментарии для тебя, чтобы понятнее

( Edit1.Text <> ‘’ )

 

 

 

 

 

кликанья мышой и редактирования свойств.

было, не нужно их переписывать. Обрати внима-

and ( Edit2.Text <> ‘’ ) then // проверка

 

 

 

 

 

Приходится и кодить, и сейчас мы вплотную

ние, там написано Button2Click, а не “Закрыть”

данных

 

 

 

 

 

приблизились к этому. Но начнем с простого.

Click. Button2 - это рабочее имя кнопки для

begin

 

 

 

 

 

 

 

 

 

Кликни два раза по кнопке “Закрыть”. Опа! На

взаимодействия с программой (как в вышеопи-

// данные введены, выполнять действия

 

 

 

 

 

экране появилось следующее:

санном примере), а Caption - это всего лишь

end

 

 

 

 

 

 

надпись на кнопке. Все имена компонентов на-

else Label3.Caption := ‘Введи все данные,

 

 

 

 

 

procedure TForm1.Button2Click(Sender: TObject) ;

ходятся в их свойстве Name, можешь посмот-

чувак!’ // не все данные

 

 

 

 

 

begin

реть в Object Inspector’е. Теперь кликни два ра-

 

 

 

 

 

 

 

 

 

 

 

 

 

за по первому Edit’у, появляется нечто похожее

end ;

 

 

 

 

 

end ;

на обработчик для кнопки:

 

 

 

 

 

 

 

procedure TForm1.Edit1Change(Sender: TObject)

Что есть что: сначала очищаем метку, просто

 

 

 

 

 

 

 

 

 

 

и твой курсор мигает между begin и end. Это -

присваиваем ее Caption’у пустое место (сначала

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

обработчик события OnClick для кнопки “Зак-

;

 

 

она, правда, и так пустая, но потом будет пол-

 

 

 

 

рыть”, и все, что ты напишешь между begin и

begin

ная, поэтому очищаем), затем идет стандартный

 

 

 

 

end, будет выполняться при клике по этой кноп-

 

 

 

оператор if then else, используем этот оператор

 

 

 

 

ке. А нам нужно, чтобы прога закрывалась, посе-

end ;

для проверки, все ли поля заполнены - пом-

 

 

 

 

 

 

 

му пишем

 

 

 

нишь, мы тагам единицы присваивали? Так вот,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Тут вместо OnClick мы видим OnChange - все,

теперь и проверяем - если чувак поля не запол-

 

 

 

 

procedure TForm1.Button2Click(Sender: TObject) ;

что находится между begin и end, будет выпол-

нил, то таги - “0”, и проверка не пройдет. Но юз-

 

 

 

 

begin

няться, когда в Edit’е что-то напишут. Мы изме-

верь мог ввести дату, а потом все стереть - вот

 

 

 

 

NMFTP1.Disconnect ; // разрываем связь

ним Tag (свойство Edit’а, некоторое число, по

для этого и нужна проверка значений эдитов на

 

 

 

 

 

 

 

 

 

 

82

0052

КОНСТРУКТОР

 

 

>СПЕЦВЫПУСК #4

 

 

 

 

 

 

 

 

 

 

 

 

‘’ - если там пустое место (‘’), то проверка не

колько - они нам потом пригодятся. Вот так:

(Pos( ‘/’ , addr ) -1). Все путем! Функция Pos на-

 

 

 

 

 

пройдет. Дальше просто: если проверка прошла

 

 

ходит положение символа / в строке addr

è

âû-

 

 

 

 

 

 

 

 

- гоним далее, нет - пишем в метке “Введи все

var

дает число, которое показывает, какой

 

ýòîò

 

 

 

 

 

данные, чувак!”. Ну как, врубаешься? Если нет,

serv , addr , host , dir : String ;

символ по счету. Но нам его копировать

íå

 

 

íà -

 

 

 

 

 

 

просто пиши код, но все-таки старайся понять.

 

 

до, поэтому и отнимаем единицу. Теперь,

 

 

 

åñëè

 

 

 

 

 

 

 

 

 

String - это строка, соответственно, все эти пе-

адрес файла ftp://my.host.com/file.exe, то адрес

 

 

 

 

 

 

 

 

 

 

 

 

 

Продолжаем разговор. Нам нужно узнать, по

ременные - строки. Уфф! Теперь последние

сервера будет my.host.com. Дальше стираем из

 

 

 

 

 

 

фтп загружать или по хттп. Для этого нужно

штрихи на этой стадии - для скачки по фтп нуж-

адреса хост, и остается адрес файла

- åãî è

 

 

 

 

 

 

 

 

 

 

знать, что впереди: ftp:// или http://. Чтобы вы-

но сначала соединиться с хостом (сервером), а

присваиваем переменной dir. Все, подготовка

 

 

 

 

 

тянуть это из оригинального адреса, проведем

потом уже скачивать файло. Нужно разбить ад-

закончена, все данные обработаны, сохраняй-

 

 

 

 

 

ряд извращений со строками. Дописывай код:

рес на хост и собственно адрес файла, а это

ñÿ.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

опять извращения со строками. Дописывай:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

procedure TForm1.Button1Click(Sender: TObject)

procedure TForm1.Button1Click(Sender: TObject)

Кодим скачку по

ôòï

 

 

 

 

 

 

 

 

 

 

 

 

;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

begin

;

 

Обработаем теперь

 

 

 

 

 

докачку по фтп. Ниже иду -

 

 

 

 

 

Label3.Caption := ‘’ ; // очищаем метку для

begin

ùèé êîä ïèøè òàì,

где надпись:

сообщений

 

Label3.Caption := ‘’ ; // очищаем метку для

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

if ( Edit1.Tag = 1 ) and ( Edit2.Tag = 1 ) and

сообщений

 

// качаем по фтп.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

( Edit1.Text <> ‘’ )

if ( Edit1.Tag = 1 ) and ( Edit2.Tag = 1 ) and

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

and ( Edit2.Text <> ‘’ ) then // проверка

( Edit1.Text <> ‘’ )

Сначала поработаем

с кнопками, дописывай

 

 

 

 

 

 

 

 

 

данных

 

 

and ( Edit2.Text <> ‘’ ) then // проверка

êîä:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

begin // данные введены, выполнять дей-

данных

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ствия

 

 

 

begin // данные введены, выполнять дей-

Edit1.Enabled := false

;

 

 

 

 

 

 

 

 

 

 

 

addr :=

Edit1.Text ; // сохраняем адрес в

ствия

Edit2.Enabled := false

; // вырубаем эдиты

 

 

 

переменную

 

addr := Edit1.Text ; // сохраняем адрес в

Button1.Enabled :=

false ; // выключаем кнопку

 

 

 

 

serv := Copy( addr , 1 , 6 ) ; // копируем 6

переменную

“Закачать”

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

символов из адреса в

serv := Copy( addr , 1 , 6 ) ; // копируем 6

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

// переменную serv

символов из адреса в

 

Тут, я думаю, все понятно, прописываем закач-

 

 

 

 

 

 

if serv = ‘ftp://’ then // впереди ftp://

// переменную serv

êó:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

begin

if serv = ‘ftp://’ then // впереди ftp://

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

// качаем по фтп

begin

NMFTP1.Host := host ;

 

 

 

 

 

 

 

 

end

Delete( addr , 1 , 6 ) ; // удаляем первые 6

NMFTP1.UserID := ‘anonymous’ ;

 

 

 

 

 

else

символов из

 

NMFTP1.Password := ‘’ ;

 

 

 

 

 

if serv = ‘http:/’ then // впереди http:/

//адреса

 

Label3.Caption := ‘Подключаемся ... ‘ ;

 

 

 

 

 

begin

host := Copy ( addr , 1 , ( Pos( ‘/’ , addr ) -

NMFTP1.Connect ;

// качаем по хттп

1 ) ) ;

 

NMFTP1.Mode( MODE_IMAGE ) ;

 

 

 

 

end

// находим хост

 

Label3.Caption := ‘Начинаем качать ...’ ;

 

 

 

 

else Label3.Caption := ‘Что за корявый ад-

Delete( addr , 1 , ( Pos( ‘/’ , addr ) - 1 ) ) ;

NMFTP1.Download( dir , Edit2.Text ) ;

 

 

 

ðåñ?’ ;

dir := addr ;

Label3.Caption := ‘Óðà !!!’ ;

 

 

 

 

end

// находим путь к файлу

Label3.Caption := ‘Отключаемся ...’ ;

 

 

 

 

else Label3.Caption := ‘Введи все данные,

// качаем по фтп

 

NMFTP1.Disconnect ;

 

 

 

чувак!’ // не все данные

end

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

end ;

else

Тут тоже все понятно - соединяемся, скачи-

 

 

 

 

 

 

 

 

if serv = ‘http:/’ then // впереди http:/

ваем, отсоединяемся. Download берет себе

 

 

 

Сначала мы сохранили адрес из первого эдита

begin

сначала адрес файла в Инете, а потом адрес,

 

 

 

 

 

 

 

 

 

 

 

 

в переменную addr, затем в переменную serv

// качаем по хттп

 

куда его сохранить на диске. Вот и все. Обраба-

 

 

 

 

 

мы из переменной addr копируем 6 символов.

end

тываем кнопки:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Используем функцию Copy. В скобках идут па-

else Label3.Caption := ‘Что за корявый ад-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

раметры - сначала пишем переменную, из кото-

ðåñ?’ ;

Button1.Enabled := true ; // включаем кнопку

 

 

 

рой копировать, потом номер символа, с кото-

end

“Закачать”

 

 

 

рого начинать, ну и потом сколько символов ко-

else Label3.Caption := ‘Введи все данные,

Edit1.Enabled := true ;

 

 

 

пировать. Всю скопированную бурду сохраняем

чувак!’ // не все данные

Edit2.Enabled := true ; // врубаем эдиты

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

в переменной serv, теперь проверяем: если

end ;

Edit1.Clear ;

 

 

 

 

 

 

 

 

 

 

серв равен ftp://, то качать будем по фтп, а ес-

Итак, сначала функцией Delete стираем первые

Edit2.Clear ; // очищаем эдиты

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ли http:/ - по хттп. Ну а если серв другой, то ад-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

рес корявый - это и напишем в метке. Кстати,

6 символов из адреса. Функция берет строку,

Поработай немного мышом - добавим несколь-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

переменные serv и addr еще не определены, и

из которой стирать, символ, с которого начи-

ко комментариев. Выдели компонент NMFTF1 у

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

программа будет ругаться (а работать не бу-

нать стирать, количество стираемых символов -

себя на форме, затем кликни в Object

 

 

 

дет). Надо их определить, иди в самый верх ко-

все очень похоже на Copy. Затем в переменную

Inspector’е на вкладку Events (кликай на

 

 

 

äà è

òàì èùè

слово var. Вот после этого слова

host копируем адрес сервака, но вместо коли-

OnConnect, затем на белое место справа - два

 

 

 

 

 

 

и допиши переменные, заодно добавь еще нес-

чества символов там стоит конструкция типа

ðàçà).

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

КОНСТРУКТОР

 

 

 

 

 

 

 

 

 

>СПЕЦВЫПУСК #4

0053

83

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Delete(addr,

1, 7) ;

 

 

 

 

Теперь, когда прога будет что-то качать, синяя

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

строчка будет ползти, а в метке будет написано,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

В переменной addr у нас адрес, помнишь?

 

Òàê

сколько байт уже получено. Все эти действия

 

 

 

 

 

 

 

 

 

 

 

вот, удаляем из него кусок http:// - это

 

ОЧЕНЬ

необходимо повторить и для NMHTTP1, только

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

важно. Почему? Потом объясню. Теперь,

 

ñîá-

NMFTP1 в коде замени на NMHTTP1. После за-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ственно, скачка:

 

 

 

 

вершения загрузки очистим ProgressBar - для

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

этого в конце фтп и хттп фрагментов - там, где

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

NMHTTP1.InputFileMode := true ;

 

 

 

мы открывали эдиты и очищали их - допиши

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

NMHTTP1.Body := Edit2.Text ;

 

 

 

 

следующую строку:

 

 

 

 

 

 

 

 

 

 

 

 

 

NMHTTP1.Get( addr ) ; // качаем

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Опять обрабатываем кнопки:

 

 

 

 

ProgressBar1.Position := 0 ; // очищаем прог-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ðåññ-áàð

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Button1.Enabled := true ; // включаем

 

кнопку

Теперь сохраняй все и компилируй (дави на F9)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

“Закачать”

 

 

 

 

 

- получишь вполне работоспособную прогу-ка-

 

 

 

 

 

 

 

 

 

 

 

Edit1.Enabled

:= true ;

 

 

 

 

чалку, пользуйся.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Edit2.Enabled

:= true ; // врубаем эдиты

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Ïèøè:

 

 

Edit1.Clear

;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Edit2.Clear

; // очищаем эдиты

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

procedure

TForm1.NMFTP1Connect(Sender:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

TObject);

 

С кодом все, теперь осталось добавить несколь-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

begin

 

ко событий, как и при скачке по фтп. Кликай на

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Label3.Caption := ‘Подключено успешно!!!’

компоненте

NMHTTP1 на форме, и в

 

Object

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

;

 

 

 

Inspector’å

выбирай закладку Events. А

 

дальше

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

end;

 

фантазируй:

напиши что-нибудь при OnConnect,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

OnConnectionFailed, OnDisconnect. À

вообще,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Теперь,

когда соединение установлено, прога

корректная

обработка

ошибок

(òèïà

 

 

 

 

 

 

 

 

 

 

 

выдаст

в метку сообщение. Кликай по

OnConnectionFailed) - это гимор, поэтому особо

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

OnConnectionFailed. Ïèøè:

не забивай себе голову.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

procedure

 

Последние штрихи

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

TForm1.NMFTP1ConnectionFailed(Sender:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

TObject);

 

Чего-то не хватает... Правильно! Не хватает

Последнее слово

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

begin

 

прогресс-бара - этой синей полоски с процента-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Label3.Caption := ‘Ошибка!!! Не могу сое-

ми! Но это не проблема, сейчас сделаем. От-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

диниться!’ ;

 

крывай закладку Win32 палитры компонентов,

Так вот, чтобы написать эту прогу, мне приш-

 

 

 

 

 

 

 

 

 

end;

 

хватай компонент ProgressBar и лепи его на

лось основательно помучаться: я не знал, ни как

 

 

 

 

 

 

 

 

 

 

 

 

 

форму (чтобы посмотреть, как его прилепил я,

закачать файло по фтп, ни как закачать его по

 

 

 

Ну и так и далее, там все прозрачно, пофантази-

позырь на скриншот готовой проги). Теперь вы-

хттп. Но если с фтп, перерыв борландовский

 

 

 

 

 

 

 

руй немного.

 

деляй компонент NMFTP1 и открывай в Object

хелп и примеры, я разобрался, то хттп постоян-

 

 

 

 

 

 

 

 

 

 

 

 

 

Inspector’е закладку Events. Ищи OnPacketRcvd.

но глючил, выдавал битый файл. Я написал в

 

 

 

Все, обработка фтп закончена.

Создавай обработчик (клик по OnPacketRecvd,

десяток ньюсгрупп - как русских, так и забугор-

 

 

 

 

 

 

 

 

 

Кодим скачку по http

два по пустому месту справа от него). Там пиши

ных, задавал вопросы на бордах крутых дель-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

следующий код:

 

 

 

 

фовских сайтов, я писал программерам, я напи-

 

 

 

 

 

 

 

 

 

После скачки по фтп это совсем легко, посему

procedure TForm1.NMFTP1PacketRecvd(Sender:

сал в службу поддержки разработчика компо-

 

 

 

 

 

 

 

 

 

 

 

 

 

нента NMHTTP ... И что ты думаешь, кто-нибудь

 

 

 

отдыхай. Код пиши вместо строки:

TObject);

 

 

 

 

 

посоветовал что-нибудь путевое? Фиг!

 

 

 

 

 

 

 

 

// качаем по хттп .

begin

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ProgressBar1.Position :=

 

 

 

 

Я дошел сам. А дело было в мелочи: я делал все

 

 

 

 

 

 

 

 

 

 

 

 

 

Round(NMFTP1.BytesRecvd*100/NMFTP1.BytesT

правильно, но писал

 

 

 

 

 

 

 

 

 

А код следующий:

otal) ;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

NMHTTP1.Get(‘http://www.host.com/file.zip’) ;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Edit1.Enabled := false ;

Label3.Caption := ‘Получено ‘ +

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Edit2.Enabled := false ; // вырубаем эдиты

IntToStr(NMFTP1.BytesRecvd) + ‘ áàéò èç ‘ +

А нужно было

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Button1.Enabled := false ; // выключаем кнопку

IntToStr (

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

“Закачать”

 

NMFTP1.BytesTotal ) ;

 

 

 

 

NMHTTP1.Get(‘www.host.com/file.zip’) ;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Обрабатываем кнопки и эдиты, как и при скачке

end;

 

 

 

 

 

Вот почему нужно выбрасывать часть http://. Но

 

ïî ôòï.

 

 

 

 

 

 

 

 

 

ты теперь можешь не мучаться и кодить спокой-

 

 

 

 

 

 

 

 

 

 

 

Строки разрывать не надо, просто они длинные

но, а если что не так - мыль мне, я постараюсь

 

 

 

 

 

 

 

Label3.Caption := ‘Подключаемся ... ‘ ;

и не помещаются.

 

 

 

 

ответить на твои вопросы. Удачи!

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

84

0054

КОНСТРУКТОР

>СПЕЦВЫПУСК #4

СКАНЕР ПОР

ЛЕГКО!

 

Horrific (smirnandr@mail.ru)

 

 

сли Delphi уже запустился, то давай

Все, с оформлением покончено. Теперь перехо-

socket(PF_INET, SOCK_STREAM,0);

 

приступим к оформлению формы.

 

addrport.sin_family := PF_INET;

 

Последовательно выполняй следую-

 

addrport.sin_addr.s_addr := inet_addr(PC-

Åщие действия: поставь на форму

 

har(Edit1.Text));

Panel из закладки “Standard” и измени его

 

 

свойство Align на “alTop”. Как менять свойства,

 

index:=SpinEdit1.Value;

я уже рассказывал в других статьях этого но-

 

while index<SpinEdit1.Value do

мера. Поэтому теперь я буду просто говорить,

 

begin

какие свойства изменить, а ты будешь выде-

 

addrport.sin_port := htons(index);

лять объект и искать

такую строку в

Рисунок 2

if connect(ws,addrport,sizeof(addrport))=0

ObjectInspector (и, конечно же, ставить то, что

then

 

я скажу :0) ).

 

 

RichEdit1.Lines.Add(‘Port ‘+IntToStr(index)+’

 

 

 

дим к программированию. Много мы писать не

открыт’);

Теперь поставь на форму RichEdit из закладки

будем, нам понадобится только одна процеду-

Inc(index);

“Win32” и измени его свойство Align на

ра. Дважды кликни по Button1, и она у тебя пе-

end;

“alClient”. У тебя должно получиться нечто по-

ред глазами появится. Дополни ее этим тек-

RichEdit1.Lines.Add(‘ Готово’);

хожее на рисунок 1.

 

ñòîì:

closesocket(ws);

 

 

 

Выражение сканер портовíà

 

 

 

страницах Х появляется

 

 

 

достаточно часто. Но не все

 

 

 

знают, что представляет собой

 

 

 

даже самый простейший сканер.

 

 

 

На меня упала честь показать

Рисунок 1

 

тебе простейший вариант

 

 

 

нюхача портов. Сейчас мы

Теперь установи на Pantl1 три Label и один Edit

напишем его с тобой на Delphi.

из закладки “Standard”. У всех Label-ов измени

Вообще, этот номер просто

свойство “Caption” на:

 

заполнен такими вещами,

 

 

 

Label1 -

“Host address” (IP адрес жертвы).

и ты наверно уже ощутил

Label2 -

“First port” (первый порт).

ýòî íà ñåáå.

 

Label3 -

“Last port” (последний порт).

 

 

Можешь написать это на русском, но я пред-

procedure TScanPortForm.Button1Click(Sender:

end;

почитаю такие вещи видеть на английском (да

TObject);

 

простит меня редактор :)).

 

var

На первый взгляд очень много. Но ничего

Теперь установи на Pantl1 два компонента

index:Integer;

страшного здесь нет. Сейчас я все аккуратно

SpinEdit из закладки “Samples” и кнопку из зак-

initdata:WSADATA;

распишу. Давай рассмотрим каждую строчку в

ладки “Standard”.

 

ws:TSOCKET;

отдельности:

Постарайся все это разместить так, как на ри-

addrport:TSockAddrIn;

 

сунке 2, для этого нужно немного поработать

begin

RichEdit1.Lines.Clear - очищает RichEdit1.

мышкой, перетаскивая объекты по панели

RichEdit1.Lines.Clear;

 

Panel1.

 

 

WSAStartup($101, InitData);

WSAStartup($101, InitData); - запускаем библио-

>СПЕЦВЫПУСК #4

ÒÎÂ?

теку winsock, которая используется для работы с сокетами. Я здесь работаю с сокетами через API, а не через ClientSocket, как в статье про троянов. Это сделано для увеличения скорости сканирования. Ты же не хочешь, чтобы тебя выловила наша доблестная милиция.

В качестве первого параметра ($101) указывается версия необходимого драйвера winsock.dll. Второй параметр нами не используется, поэтому там пустая переменная типа WSADATA. socket(PF_INET, SOCK_STREAM,0) - открывает сеанс работы с сокетами. Кстати, сокет - это по-нашему гнездо. AF_INET говорит, что меня интересует один из протоколов TCP или UTP. SOCK_STREAM - указывает, что мне нужен протокол из семейства TCP. Третий параметр 0 означает TCP.

Дальше я заполняю структуру addrport, в которой я должен указать адрес жертвы и протокол.

addrport.sin_family := PF_INET - указываю протокол PF_INET. addrport.sin_addr.s_addr := inet_addr(PChar(Edit1.Text))- устанавли-

ваю адрес жертвы, введенный в Edit1.

index:=SpinEdit1.Value - запоминаю порт, с которого нужно начать сканирование.

Дальше идет цикл. Я его распишу на русском, а ты разберешься методом сравнения с кодом:

Пока текущий < конечный порт делать

Начать цикл установить текущий порт

Если коннект прошел удачно, то

В RichEdit1 добавляю строку: “Port такой-то открыт” Следующий порт сделать текущим

Конец цикла

После этого я вывожу сообщение RichEdit1.Li-nes.Add(‘Готово’) в

RichEdit, что сканирование закончено.

В самом конце я закрываю порт с помощью closesocket.

Перед запуском перейди в начало исходного кода и добавь слово “winsock” в раздел “uses”. Такие вещи мы тоже уже делали в других статьях этого номера, поэтому у тебя не должно возникнуть никаких проблем. Жми “F9”, и твой сканер портов взлетит в бой. Больше не буду напрягать твои мозги, ты и так нахватал слишком много инфы :). Дополнительную информацию о сокетах ищи на страницах журнала VR Online. Там все очень хорошо расписано, и если ты чего-то не понял, то там догонишь.

Удачных тебе сканов!!!

Только в сетевой галерее “Модерн арт” вы найдете все для оформления вашего сайта, журнала, рекламной кампании.

Модерн арт - это уникальная коллекция цифровых изображений от современных художников.

86

0056

КОНСТРУКТОР

 

 

>СПЕЦВЫПУСК #4

 

 

 

 

 

 

 

 

 

СПРАВОЧНИК КО КВАРТИР НА VB

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Matt (matt@nm.ru)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Дарова, хакерюга! Сегодня

ìû ñ

картиночке, а там

написано: що це таке

è ç ÷èì

 

 

 

 

 

 

 

 

 

 

 

 

 

 

тобой будем собирать свой

 

його едять. Ну ничего, мы тоже так сделаем ;).

 

 

 

 

 

 

 

Короче говоря: находишь картиночку, у которой

 

 

 

 

 

справочник конспиративных

 

 

 

 

 

 

 

написано Data, и нажимаешь на нее. Теперь

 

 

 

 

 

 

квартир. Ты думаешь, он никому

подводи мышу к форме (это та серая масса, что

 

 

 

 

 

 

не нужен? Только выкинь его в

по центру) и дрожащими руками, как в пайнте,

 

 

 

 

 

 

 

 

рисуй прямоугольничек. Рулез, да? Не, это еще

 

 

 

 

 

Инет - загребут с руками и

не рулез! Щелкаем на том прямоугольничке, ко-

 

 

 

 

 

 

 

 

 

 

 

äàæå

 

бабки заплатят! Ïîêà íå

торый мы только что нарисовали. Вокруг него

 

 

 

 

 

 

 

появилось 6 квадратиков. Вот эта хитроумная

 

 

 

 

 

 

 

 

 

 

 

 

 

поздно,

 

пошли мамку в ближай-

 

 

 

 

 

 

операция нажатия левой кнопки мыши на пря-

 

 

 

 

 

 

øèé

киоск за ящиком пива и

моугольнике, которую не дано понять позорно-

 

 

 

 

 

 

можешь

 

включать комп!

му ламерюге, называется выделением. Подож-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ди, это еще тоже не рулез. За эти квадратики,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

как и в пайнте, можно тянуть в разные стороны

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Нож! Тампон! Спирт! Огурец!..

и таким манером растягивать этот объект. Что-

 

 

 

 

 

 

 

ýëë,

нам надо создать базу данных,

бы сдвинуть объект, нажимаешь левую кнопку и

 

 

 

 

 

 

 

â

которой будут храниться адреса,

 

 

тянешь этот объект хз (хакер знает) куда. Потом

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

описания и имена хозяев этих самых

Теперь возвращаемся к визуальному басику и

отпускаешь кнопку, и все - объект приклеили.

 

 

 

 

 

Óконспиративных квартир. Запускаем

 

беремся за наше грязное дело. Создаем новый

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

мелкософтный аксес и через кон-

 

проект. Ну, до того, чтобы в меню Файл выбрать

Каждый объект имеет имя. Это типа твоего ни-

 

 

 

 

 

 

структор создаем таблицу с тремя полями:

“Новый проект”, я думаю, ты уже допер. Теперь

ка. По этому имени к объекту будем потом об-

 

 

 

 

 

 

Owner (хозяин), Address (УРЛ... сорри, адрес) и

надо придумать, что тебе, собственно, нужно.

ращаться из кода, так что особо не разглаголь-

 

 

 

 

 

 

Comment (то, что ты думаешь об этой нычке).

Пока что до уровня Билли мы не дошли, так что

ствуй и без мата! Чтобы задать имя справа в

 

 

 

 

 

 

Если ты без руля, как это все сделать, то вруби

пойдем по порядку и с самого простого. Настоя-

окошке “Свойства”, в левой колонке находишь

 

 

 

 

 

 

аксесовский хелп - там все очень просто. Ты

щие хацкеры начинают со стандартных экзешек,

Name (или (Имя)), а в правой пишешь то, что

 

 

 

 

 

 

скажешь: а на фиг мне париться с VB, если я и

так что ищи там “Standard EXE” и жми батон “От-

придумал. Я назвал его “datа”. Теперь связы-

 

 

 

 

 

 

так на Аксесе все смогу? Объясняю: сколько

крыть”. Ну все, самое сложное сделали :).

ваем эту Data с базой данных. Для этого справа,

 

 

 

 

 

твой аксес весит? Во-во. А наша прога будет ра-

 

ДидидидидизигН

 

в окне “Свойства”, находишь в первой колонке

 

 

 

 

 

 

ботать безо всяких аксесов и весить будет кило-

 

DatabaseName. Теперь во второй колонке надо

 

 

 

 

 

байт двести от силы. Создал табличку в аксесе -

 

 

 

написать, куда ты кинул ту файлу с базой дан-

 

 

 

 

 

 

сноси его, твоя прога будет куда круче! Вс напи-

Открывай следующую бутылку пива, и можешь

ных, которую мы сколотили в первом пункте.

 

 

 

 

 

санное своими руками всегда круче, чем у сосе-

 

пока спрятать клаву. Мы будем создавать ин-

Сорри, забыл. Ты же уже заныкал клаву! Ну, тог-

 

 

 

 

 

 

 

да, и уж по крайней мере гарантированно круче,

 

терфейс. Интерфейс - это все то, что юзверь бу-

да щелкаешь на кнопке с тремя точечками в кон-

 

 

 

 

 

÷åì ó ÁÃ!

 

 

 

 

 

 

 

дет видеть, когда запустит твою прогу. Чего

це правой колонки и находишь эту свою файлу.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

нам, собственно, надо? Нам надо фичу, которая

Запомни на всю свою визуально-басиковскую

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

будет связываться с базой данных, и надо такие

жизнь: если есть три точки, то можно обойтись

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

финтифлюшки, в которых будет показываться

без клавы. Теперь неплохо было бы вспомнить

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

инфа про хозяина квартиры, адрес ее и коммен-

имя таблицы, которую ты сделал в первой гла-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

тарии. Потом надо будет еще присобачить кноп-

ве. А, ладно, настоящие хацкеры всегда идут в

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ки для добавления новых и удаления разобла-

обход! Все просто. Опять переходишь в окошко

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ченных квартир.

 

свойств (это то, что справа) и находишь там в

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

левой колонке RecordSource. Опять в конце пра-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Но обо всем по порядку. Для связи с базой дан-

вой колонки появилась кнопка :). Не, я не теле-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ных нам нужен такой объект (фича по-нашему),

пат - я только учусь. Правда, теперь на кнопке

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

который называется Data. Все объекты, если

нарисована стрелочка вниз (треугольничек та-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

своими шаловливыми ручонками не перетаски-

кой равнобедренный, с основанием вверху). Это

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

вать окна, находятся слева. Подводишь мышу к

тоже кульно. Кликаешь на этой кнопке, и у тебя,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

КОНСТРУКТОР

 

 

 

>СПЕЦВЫПУСК #4

0057

87

 

НСПИРАТИВНЫХ

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Первого секса не стоит бояться,

 

 

 

 

 

 

 

он не так страшен, как последний

 

 

 

 

 

 

 

 

 

 

(c) 2000 В.Шахрин

 

 

 

 

 

 

 

 

 

 

 

 

 

откуда ни возьмись, появляется список всех

Ну, считай, самое сложное сделали.

 

сейчас будет еще один рулез. Тыкай на кнопку,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

таблиц, которые есть в той файле, которую ты

 

 

 

которую ты нарисовал (типа выделяй ее). Нахо-

 

 

 

 

выбрал перед этим. Если список не появляется,

Если у тебя еще не пятерится в глазах от выпи-

ди свойство Caption и ставь какое хочешь значе-

 

 

 

 

 

 

 

а басик начинает матюкаться - значит, братан,

того пива, то можешь сделать подписи к этим

ние (только чтоб ты понял - на фига эта кнопка).

 

 

 

 

ты че-то намудрил. Возвращайся к первому пун-

текстовым полям. Находишь слева объект Label

Теперь ищи свойство ToolTipText и присваивай

 

 

кту, и все заново. Ну, а если тебе все-таки по-

и рисуешь его тоже слева от твоего текстового

ему значение типа “Жми сюда”. Проперло? Это

 

 

везло, и список выскочил, то кликай на той таб-

поля. Я знаю, что уже ломает имя задавать. Ну и

еще тоже не рулез. Можешь нарисовать еще од-

 

 

 

 

лице, в которой хранится вся та бубырня, нам

хрен с ним. Мы ж с тобой не ламаки, чтобы де-

ну кнопку cmdDel для того, чтобы удалять запи-

 

 

 

 

так нужная. В принципе, с базой связались!

лать все, что босс сказал :). Выделяешь этот

си. Да, надо еще один батон (кнопка) для сохра-

 

 

 

 

 

 

 

лейбак и ставишь ему свойство Caption каким

нения всего, что мы наваяем (cmdSave).

 

 

 

 

Пора бы сообразить, как вся инфа будет нам,

хочешь - лишь бы ты сам догнал, что написал.

 

 

 

 

 

 

 

 

кул-хацкерам, выводиться. Находим объект

Можешь для каждого текстового окна нарисо-

Ну все, братуха. Дизайн комплит. Можешь ре-

 

 

 

 

 

 

 

 

TextBox (текстовое окно). Для тех, кто в танке,

вать такой label.

лакснуть и сыграть разок в Сапера.

 

 

 

 

напоминаю: объекты - картиночки слева. Ри-

 

 

 

 

 

 

 

 

 

 

 

ñóåì

òàê

же, как и Data: кликаешь на иконке, а

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

потом как

в пайнте. Нам надо будет три тексто-

 

 

 

 

 

 

 

 

 

 

 

âûõ îêíà.

Если ты еще не совсем обалдел, то,

 

 

 

 

 

 

 

 

 

 

 

наверное,

догадаешься, что для этого надо тупо

 

 

 

 

 

 

 

 

 

 

 

повторить

всю эту незамысловатую операцию

 

 

 

 

 

 

 

 

 

 

 

òðè ðàçà.

Готово? Ну, считай, что еще одну бу-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

тылку пива ты заслужил. Теперь надо всем трем

 

 

 

 

 

 

 

 

 

 

 

текстовым окнам задать имена (Name, то бишь).

 

 

 

 

 

 

 

 

 

 

 

Я назвал их txtOwner, txtAddress и txtComment. В

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

первом будем светить хозяина хаты, во втором -

 

 

 

 

 

 

 

 

 

 

 

адрес, а в третьем - все, что не первое и не вто-

 

 

 

 

 

 

 

 

 

 

 

рое. txtComment надо растянуть за квадратики,

 

 

 

 

 

 

 

 

 

 

 

чтобы больше помещалось. Можешь даже пос-

 

 

 

 

 

 

 

 

 

 

 

тавить для него свойства Multiline равным True

 

 

 

 

 

 

 

 

 

 

 

(типа “правда”, тоже выбираешь из списочка), и

 

 

 

 

 

 

 

 

 

 

 

тогда вся шняга будет выводиться в несколько

 

 

 

 

 

 

 

 

 

 

 

строк. Рулез? Не, еще не рулез. Теперь надо

 

 

 

 

 

 

 

 

 

 

 

сказать этим текстовым окнам, чтобы они пока-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

зывали то, что мы запихнули в базу данных. Всю

 

 

 

 

 

 

 

 

 

 

 

эту бубырню мы опять делаем через свойства.

 

 

 

 

 

 

 

 

 

 

 

Так как у нас объект datа (тот прямоугольничек,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

который мы намалевали самым первым) типа

 

 

 

Кодинг! Динг! Инг! Нг! Г!

 

 

 

 

 

 

 

посредника между базой данных и всем осталь-

Ó òåáÿ ïèâî

осталось? Открывай следующую

áó-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ным, то эти текстовые окна мы привязываем к

тылку.

 

 

 

 

 

 

 

 

 

 

нему. Тыкаешь в каждый textbox мышой (выде-

 

 

 

Взорвался? Ничего... Знаешь самую страшную

 

 

 

 

ляешь его) и для каждого ставишь свойство

В принципе,

вьюверить записи уже можно. Те-

пословицу саперов? “Одной ногой здесь, другой

 

 

 

 

DataSource равным datа (или как ты там его наз-

перь сделаем такую фичу, которая будет их до-

там”. Ладно, вернемся к нашим баранам. Доста-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

вал). Ну, ты помнишь, как делают кул-хацкеры:

бавлять. Надо нарисовать еще один объект -

вай клаву. Сейчас мы с тобой будем писать код.

 

 

 

выбираем из списка. Теперь надо сказать каж-

кнопку (CommandButton). Ну, с этим, я надеюсь,

Да, это тебе не мышой квадратики на форме ри-

 

 

 

дому текстовому окну, какую инфу о квартире

ты уже сам разберешься. Если все-таки не въе-

совать. В принципе, у нас уже все есть, надо

 

 

 

показывать. Я думаю, ты не дятел и понял, что

хал, то закрывай пиво - на сегодня с тебя хватит.

только чтобы записи добавлялись и удалялись.

 

 

 

 

 

 

для этого мы и делали три текстовых окна.

Завтра утром попробуй заново.

 

Отставь пиво и повдупляй чуть-чуть. В вб, дел-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Опять по порядку выделяешь текстовые окна и

Нарисовал кнопку? Теперь задаем ник (name по-

фях, вижС, etc. все происходит, как реакция на

 

 

 

для каждого ставишь разные свойства Datafield.

какое-то событие. Допустим, добавление запи-

 

 

 

 

 

Ты уже догнал, что это имена полей таблицы, и

ихнему). Мне ничего лучшего, чем cmdAdd, в го-

си происходит как реакция на нажатие кнопки

 

 

 

их выбирать тоже можно из списка?

лову не пришло (видать, пиво сказывается). А

cmdAdd. Короче, ближе к телу. Делаешь даб-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

88

0058

КОНСТРУКТОР

 

 

>СПЕЦВЫПУСК #4

 

 

 

 

 

 

 

 

 

 

Итак, врубаем

Microsoft

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Visual Basic.

Да, мелкософт, да,

 

 

 

 

 

 

 

 

 

 

 

 

басик, да, отстой. Прр! À ïî÷å-

 

 

 

 

 

 

 

 

 

 

му, собственно, так сразу -

 

 

 

 

 

 

 

 

 

 

 

 

 

 

отстой? Для первого раза и

 

 

 

 

 

 

 

 

 

 

простой программулины сгодит-

 

 

 

 

 

 

 

 

 

 

 

ñÿ! У меня стоит русская вер-

 

 

 

 

 

 

 

 

 

 

 

ñèÿ 6.1, òàê ÷òî åñëè òû äî ñèõ

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

пор сидишь на

третьем vb под

Компайл

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Форточками

3.11,

у тебя могут

Теперь сделаем из

всего этого экзешку,

чтобы

 

 

 

 

 

 

 

 

 

 

быть проблемы

;-( - íî òóò ÿ

 

 

эту рулезную прогу

можно было запускать без

тебе не помощник.

 

 

 

 

 

 

 

 

 

 

 

 

ВижБасика. Просто

в меню Файл выбираешь

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Создать rulezzzz.exe

и пишешь там имя

лклик (двойной щелчок по-русски) на кнопке

On Error Resume Next ‘я надеюсь, ты уже понял

Нажимаешь ОК и все! Можешь

 

cmdAdd и балдеешь. Не, это не M$ Word и не

íà ôèãà ýòî

простой софт.

 

 

 

 

 

 

 

 

 

 

notepad. Это то, что умные люди называют ре-

dat.Recordset.Update ‘сохраняем бд

Ç.Û.

 

 

 

 

 

 

 

 

 

 

дактор кода. Вот тут-то мы и будем печатать

Тест-драйв офф-роад

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

всякие загадочные слова. По идее у тебя уже

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

должно быть написано:

 

 

 

 

 

 

 

Все, твоя первая прога на вб готова.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Âñå! Format C:\ complete. Íó ÷òî, êàê? Äà, òå-

круче, чем “хелло ворлд”, но помни, ч

 

Private

Sub cmdAdd_

Click()

перь можешь проводить тест-драйв. Просто

мелкософтный басюк. Я тебя плавно

 

End

Sub

 

 

нажимай ф5 и кайфуй!

 

 

 

 

 

 

очередной лаже нашего Биллушки. Вся

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

и между этими строчками мелькает курсор.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(Private sub) значит, что это процедура, которая

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

может быть вызвана только из этой формы. Для

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

начала нам этого хватит.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

cmdAdd_Click значит, что при операции click

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(щелчок то бишь) на объекте cmdAdd (кнопке

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

“Добавить”) вызывается эта процедура и выпол-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

няется все то, что написАно до слов End Sub.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Теперь там, где сейчас мелькает курсор (между

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Private Sub и End Sub), набиваешь:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

on error resume next ‘это чтобы при ошибках он

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

не матерился

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

dat.Recordset.AddNew ‘а это, собственно, стро-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ка, которая будет добавлять запись к базе дан-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

íûõ

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Âîò è âñå!

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Теперь сообразим на двоих удаление записей.

Чтобы перейти к другой записи, просто кли-

том, что эту прогу

можно запускать

 

Возвращаемся на форму (шифт+ф7) и даблкли-

каешь стрелочку на data. Если хочешь доба-

компе, где есть вб.

Можно, конечно,

 

 

 

 

каем на кнопке удалить (cmdDel). Там, где поя-

вить в свой справочник новую заначку, нажи-

скачать несколько

библиотек, которые

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

вился курсор, пишем:

маешь кнопку “Добавить” и пишешь во всех

чтобы на компе запустить

 

 

 

 

 

 

 

 

трех окнах нужную инфу. Если хочешь поки-

Или - другой вариант: мелкософт

 

 

 

 

 

 

 

on error resume next ‘кладем ... на ошибки

лять паленую хату - находишь ее методом пе-

кую феню, которая называется Setup

 

dat.recordset.delete ‘киляем запись

ребора по базе с помощью стрелочек Даты и

(Package & deployment wizard). Ýòà, â

 

 

 

 

 

 

 

 

кликаешь “Удалить”. Да, и не забывай после

пе, полезная софтварина делает

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Осталось сделать сохранение изменений. Опять

того, как удалил или добавил запись, сохра-

сталляшки и в них запихивает все

 

возвращаемся на форму, даблкликаем на кноп-

няться! Теперь подведи мышу к кнопке “доба-

мые длльки. Но Билли в своем

 

ке “сохранить” и сразу пишем:

вить” и подержи ее там чуть-чуть. Вот это и ес-

этот сетап весит минимум 1 метр. Но

 

 

 

 

 

 

 

 

òü