книги хакеры / журнал хакер / специальные выпуски / Специальный выпуск 4_compressed
.pdf>СПЕЦВЫПУСК #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 метр. Но |
|||||||||||||||||||||
|
|
|
|
|
|
|
|
òü |
|
|
|
|
|
|
|
|
|
|
||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|