книги хакеры / журнал хакер / специальные выпуски / Специальный выпуск 4_compressed
.pdf90 |
005A |
КОНСТРУКТОР |
|
|
>СПЕЦВЫПУСК #4 |
|
ASM -ПРОЩЕ
CJ Pusher (lapkarelief@mail.ru)
|
Проснись. |
|
Отныне |
и навсегда |
Пример 1: Хау ту ребут (Kak |
pereza- |
|
|
|
|
|||||||||||||
|
|
gruzitza) |
|
|
|
|
|
|
|
|
|
||||||||||||
|
двери виртуального |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||
|
пространства для тебя |
|
Otchen prosto. Åñòü |
три похода к этой |
процеду- |
|
|
|
|
|
|
|
|||||||||||
|
|
ре. Первый: нажать |
Ctrl+Alt+Del. Åñëè |
ýòî íå |
|
|
|
|
|||||||||||||||
открыты! |
Åùå îäèí øàã |
|
|
|
|
|
|||||||||||||||||
|
помогает, то можно |
нажать кнопку Reset на |
|
|
|
|
|||||||||||||||||
продвинул |
òåáÿ íà ïóòè |
|
корпусе компьютера. |
И, что называется, |
“äëÿ |
|
|
|
|
|
|||||||||||||
|
|
|
|
|
|
||||||||||||||||||
к почетному |
званию |
|
утонченных натур” |
есть третий способ |
- íàïè- |
|
|
|
|
|
|||||||||||||
|
сать прогу, в нашем |
случае на ASM’е. Сначала |
|
|
|
|
|
|
|
||||||||||||||
кул-хацкера |
- ты начал |
|
|
|
|
|
|
|
|||||||||||||||
|
тебе придется набить с помощью текстового |
|
|
|
|
|
|
|
|
||||||||||||||
|
|
|
|
|
|
|
|||||||||||||||||
|
|
|
|
|
|
|
|
||||||||||||||||
|
кодить. Запомни |
день, когда |
редактора вот такой файл: |
|
|
|
|
|
|
|
|
|
|
|
|
||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
заработала |
òâîÿ |
первая |
model tiny |
|
|
|
|
|||||||||||||||
|
прога, и когда |
наступит |
|
.code |
|
|
|
|
|||||||||||||||
|
|
|
|
||||||||||||||||||||
|
день твоего первого взлома, |
org 100h |
|
|
|
|
|||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||
|
òû |
|
подсчитаешь, сколько |
start: |
|
|
|
|
|||||||||||||||
|
|
jmp dword ptr reboot |
|
|
|
|
|||||||||||||||||
äíåé |
|
пройдет от кодинга |
|
.data |
|
|
|
|
|||||||||||||||
|
до хака. Обычно это 120-180 |
reboot dw 0ffff0000h |
|
|
|
|
|||||||||||||||||
|
|
|
|
|
|||||||||||||||||||
|
end start |
|
|
|
|
||||||||||||||||||
дней, в течение которых |
|
|
|
|
|
||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||
|
раз пятнадцать придется |
Сохрани этот файл и дай ему расширение asm. |
|
|
|
|
|||||||||||||||||
|
|
|
|
|
|||||||||||||||||||
|
переустановить винды, раз |
Чтобы запустить эту прогу, надо будет этот |
|
|
|
|
|||||||||||||||||
|
файл ассемблировать и скомпоновать (не |
|
|
|
|
||||||||||||||||||
|
|
|
|
||||||||||||||||||||
|
десять переформатировать |
|
|
|
|
||||||||||||||||||
|
боись, в нашем случае это то же самое, что и |
|
|
|
|
||||||||||||||||||
|
винт и, наконец, раз пять |
“откомпилить”). Ассемблируют все нормаль- |
|
|
|
|
|||||||||||||||||
|
сказать себе, что никогда |
ные люди с помощью tasm.exe или masm.exe. |
|
|
|
|
|||||||||||||||||
|
Допустим, что у тебя tasm, тогда набери в ко- |
|
|
|
|
||||||||||||||||||
|
больше не сядешь за свой |
мандной строке команду tasm имя_файла.asm, |
|
|
|
|
|||||||||||||||||
поганый комп. Виной |
|
чтобы его ассемблировать. Если ты все набрал |
|
|
|
|
|||||||||||||||||
|
правильно, то в текущем каталоге появится |
|
|
|
|
||||||||||||||||||
всему - первые попытки |
|
|
|
|
|
||||||||||||||||||
|
файл с именем исходника, но с расширением |
|
|
|
|
|
|
|
|||||||||||||||
|
кодинга на ASM’е, которые |
obj. Это объектный код нашей проги. Тебе не |
|
|
|
|
|||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||
|
заставляют процессор |
надо знать, что такое объектный код, для тебя |
|
|
|
|
|||||||||||||||||
|
это всего лишь шаг на пути от исходника на |
|
|
|
|
||||||||||||||||||
|
хохотать над твоими |
|
|
|
|
||||||||||||||||||
|
ASM’е к exe’шнику или com’у. Получив obj |
|
|
|
|
||||||||||||||||||
|
потугами, а тебя - радо- |
файл, его надо скомпоновать. Это делается с |
|
|
|
|
|||||||||||||||||
|
ваться каждой своей удач- |
помощью tlink.exe (link.exe). Введи такую ко- |
|
|
|
|
|||||||||||||||||
|
манду: tlink /t имя_файла. /t значит, что ты хо- |
|
|
|
|
||||||||||||||||||
ной проге. |
|
|
|
|
|
|
чешь получить на выходе файл com, а не exe. |
|
|
|
|
||||||||||||
|
|
|
|
|
|
|
|
|
|
Если ты все сделал правильно, то появится го- |
|
|
|
|
|||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||
|
ы думаешь, конечно, что ASM - это |
шистый и очень даже приятный. Ты сможешь |
товая программа, запустив которую, получишь |
|
|
|
|
||||||||||||||||
|
привилегия избранных, суперсложная, |
въехать в его суть с первого или со второго ра- |
полный reboot, причем холодный. |
|
|
|
|
|
|
|
|
|
|
|
|
||||||||
|
нереально неземная вещь и что ты не |
за. Несколько простых и очень полезных приме- |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||
|
Òбудешь в силах въехать в нее никогда. |
ров помогут тебе в этом. Все что тебе понадо- |
Настало время объяснить, как все |
работает. |
|
|
|
|
|
|
|
|
|
||||||||||
|
|
|
|
|
|
|
|
||||||||||||||||
|
Не думай так - эту мысль распространили спе- |
бится - это компьютер, причем только PC (если |
Первое - ты, наверное, знаешь, как |
работает |
|
|
|
|
|
|
|
|
|
||||||||||
|
циально некоторые недобросовестные разра- |
же у тебя компьютер Макинтош, то его придет- |
твой проц, если нет - то это несложно |
|
понять. |
|
|
|
|
|
|
|
|
|
|||||||||
|
|
|
|
|
|
|
|
||||||||||||||||
|
|
|
|
|
|
|
|
||||||||||||||||
ботчики лицензионного программного обеспе- |
ся выбросить и купить новый PC), программа |
Вся работа проца заключается в том, что он бе- |
|
|
|
|
|
|
|
|
|||||||||||||
|
чения в целях борьбы с конкурентами и ком- |
tasm.exe (можно masm.exe - если ты любишь |
рет из памяти подряд числа, смотрит, какой ко- |
|
|
|
|
|
|
|
|
||||||||||||
|
|
|
|
|
|
|
|
|
|||||||||||||||
|
пьютерными (о Боже, как можно произносить |
Microsoft, но это маловероятно), программа |
манде они соответствуют и, если какой-то |
|
|
|
|
||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||
|
это ужасное слово) пиратами (прямо как в |
tlink.exe (можно link.exe - то же самое, что и для |
соответствуют, он эту команду выполняет. Если |
|
|
|
|
||||||||||||||||
|
средние века - пираты атакуют мирные корабли |
masm’а). Не забудь также перезагрузиться в |
число не соответствует никакой команде - проц |
|
|
|
|
|
|
|
|||||||||||||
|
и, вместо ядер, стреляют из пушек компьюте- |
режиме эмуляции MS-DOS, чтобы избежать |
виснет. То есть в проге на ASM’е ты должен |
|
|
|
|
||||||||||||||||
|
рами - ужас!). ASM на самом деле - белый и пу- |
неприятностей с повисанием виндов etc. |
расписать в нужном порядке команды проца, |
|
|
|
|
|
|
КОНСТРУКТОР |
|
|
|
>СПЕЦВЫПУСК #4 |
005B |
91 |
|
|
НЕКУДА
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
которые ты хочешь, чтобы он выполнил. Теперь |
чает, что в этом месте начинаются данные. Са- |
|
|
|
|
|
|
|
|
|||||
|
|
|
представь, что ты только включил комп, чтобы |
ми данные - это переменная reboot, которая |
|
|
|
|
|
|
|
|
|||||
|
|
|
поиграть или залезть в Инет. Как проц будет |
описана в следующей строчке - reboot dd |
|
|
|
|
|
|
|
|
|||||
|
|
|
знать, откуда взять ему самую первую команду |
0ffff0000h. dd значит, что переменная занимает |
|
|
|
|
|
|
|
|
|||||
|
|
|
|
|
|
|
|
|
|
|
|||||||
|
|
|
для выполнения? Естественно, никак. Просто |
4 байта; если надо один байт, то пишут db, если |
|
|
|
|
|
|
|
|
|||||
|
|
|
разработчики компании Intel, когда в очеред- |
два - то dw. В ассемблере нет типов данных ти- |
CMOS checksum error - Defaults loaded. |
|
Êàê ýòî |
|
|||||||||
|
|
|
|||||||||||||||
|
|
|
ной раз в дупель упились в баре, за стаканом |
па “целое число”, символ etc - все в байтах. Для |
чудо работает? Тебе нужно знать лишь |
строчки |
|
||||||||||
|
|
|
решили, что проц будет считывать первую пос |
- |
|
|
числа надо два байта, для символа - |
mov... и out... Что делает mov al, 5eh? |
Просто за- |
|
|||||||
|
|
|
|
целого |
|
||||||||||||
|
|
|
ле включения команду по некоему адресу. А по- |
|
îäèí. |
В нашей проге требуется 4 байта, чтобы |
носит число 5eh в al (move 5eh to al). А |
что такое |
|
||||||||
|
|
|
том решили в этом адресе поместить BIOS. Та- |
|
записать адрес перехода для команды jmp. Чис- |
al? Это один из так называемых регистров про- |
|
||||||||||
|
|
|
ким образом проц включается и сразу же попа- |
ло 0ffff0000h в hex - это значение адреса, куда |
ца. Регистр - это такая ячейка в процессоре, в |
|
|||||||||||
|
|
|
дает в BIOS, выполняет оттуда команды, |
êîòî- |
мы прыгаем. Именно по этому адресу проц счи- |
которую можно записывать разные числа, хра- |
|
||||||||||
|
|
|
рые и делают все то, что делает комп |
после |
тывает первую команду после включения. Вооб- |
нить их там, чтобы потом использовать. Регис- |
|
||||||||||
|
|
|
включения или перезагрузки. Это наталкивает |
ще, в ASM’е большинство чисел пишут в hexe, |
тров более 20 штук, и каждый имеет свое имя. |
|
|||||||||||
|
|
|
на мысль, что для software перезагрузки надо |
поэтому если ты еще не работаешь в этой сис- |
Есть регистры вместимостью один, два или че- |
|
|||||||||||
|
|
|
|
||||||||||||||
|
|
|
начать выполнять команды оттуда, откуда их |
теме, то придется ее выучить (там всего лишь |
тыре байта. Размер AL - байт. Дальше - команда |
|
|||||||||||
|
|
|
начинает выполнять сам проц. Но как это сде- |
таблица сложения и умножения). Также, перей- |
out 70h, al. Это команда вывода в порт числа. |
|
|||||||||||
|
|
|
ëàòü? Ýòî |
тоже просто, ведь разработчики ком- |
дя на hex, ты станешь очень продвинутым чува- |
Порт - это как бы канал связи камня и внешнего |
|
||||||||||
|
|
|
|||||||||||||||
|
|
|
пании Intel сделали нам великий подарок - ко- |
ком (чувихой), так как будешь владеть самой |
устройства. Каждое устройство (винт, видеокар- |
|
|||||||||||
|
|
|
манды перехода. Они заставляют проц выпол- |
модной в этом сезоне таблицей умножения. |
та, аудиокарта, etc) имеет свой порт, через кото- |
|
|||||||||||
|
|
|
нять команду, которая лежит в том месте, где |
Последняя строчка end start завершает текст ис- |
рый проц может управлять им. out 70h, al значит, |
|
|||||||||||
|
|
|
|||||||||||||||
|
|
|
ты ему скажешь: по нужному тебе адресу (типа |
ходника и говорит, что точкой входа в прогу бу- |
что надо послать число, которое лежит в al в порт |
|
|||||||||||
|
|
|
goto в Бейсике). Благодаря им ты можешь за- |
дет метка start. Вот так работает ребут. Видишь |
номер 70h. Для справки, порты 70h и 71h соот- |
|
|||||||||||
|
|
|
пускать весь софт на своем компе и переклю- |
- немного усилий, и ты получил полезнейшую |
ветствуют CMOS’у. Чтобы программировать |
|
|||||||||||
|
|
|
чаться между приложениями в виндах. А раз |
прогу, которую ты можешь усовершенствовать и |
CMOS, надо сначала вывести в порт 70h то, что |
|
|||||||||||
|
|
|
так, то чтобы перезагрузить комп, понадобится |
использовать ее во множестве случаев: от про- |
в CMOS’е ты хочешь изменить (дата, время, нас- |
|
|||||||||||
|
|
|
|||||||||||||||
|
|
|
пирога всего из одной команды - переход туда, |
писки ее в autoexec.bat до вставки ее в некото- |
тройки винта, пароль), а затем вывести в порт |
|
|||||||||||
|
|
|
где лежит первая команда проца. Именно эту |
рый участок тела вируса. |
71h новое значение (дату, время, параметр вин- |
|
|||||||||||
|
|
|
прогу ты только что у себя запустил. |
Пример 2: Clear the CMOS |
та etc). Здесь мы сначала выводим в порт 70h |
|
|||||||||||
|
|
|
Что внутри? |
|
|
число 5eh, которое значит, что мы будем изме- |
|
||||||||||
|
|
|
|
|
|
|
|
нять настройку пароля on/off. Затем мы выводим |
|
||||||||
|
|
|
|
|
|
|
“Маленькая, да удаленькая”, - говорят в таких |
в порт 71h ноль, что значит - пароль выключен |
|
||||||||
|
|
|
Разберем ее подробнее. В первой строчке напи- |
случаях. Эта программка весит всего 9 байт, а |
(чтобы пароль включить, надо вывести единицу). |
|
|||||||||||
|
|
|
сано - model tiny. Это всего-навсего значит, что |
пользы от нее - хоть отбавляй. Если у тебя BIOS |
Последняя строчка ret нужна, чтобы вернуться в |
|
|||||||||||
|
|
|
должен быть com файл, а не exe. Если захочешь |
AWARD, то держись - прога сбрасывает пароль и |
ÄÎÑ - åñëè áû åå íå áûëî, òî â ÄÎÑ áû ìû íå |
|
|||||||||||
|
|
|
|||||||||||||||
|
|
|
exe’шник, то пиши model small. Во второй строч- |
настройки SETUP’а. Теперь сбросить пассворд в |
вернулись и повисли бы. |
|
|||||||||||
|
|
|
ке написано .code. По названию ясно, что так |
BIOS’е так же просто, как его поставить! Запи- |
Âîòà |
|
|
|
|
|
|
|
|||||
|
|
|
отмечается начало кода проги. Это нужно, пото- |
сывай и ассемблируй. |
|
|
|
|
|
|
|
||||||
|
|
|
му что у реальных программ код (команды) и |
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
данные (переменные) должны быть разделены. |
model tiny |
Вот такие вещи можно писать на ассемблере. |
|
|||||||||||
|
|
|
|||||||||||||||
|
|
|
Если ты хочешь в каком-то месте вставить дан- |
.code |
Теперь твоя очередь изучить его. Придется тебе |
|
|||||||||||
|
|
|
ные, то пиши .data, а потом уже сами данные. |
org 100h |
также изучить аппаратные части твоего компа и |
|
|||||||||||
|
|
|
Далее идет строчка org 100h. Она нужна только |
start: |
сам процессор, так как без этого много на |
|
|||||||||||
|
|
|
для com файлов и связана с особенностями MS- |
mov al, 5eh |
ASM’е не напишешь. Необязательно все знать и |
|
|||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
DOS (опять вездесущий Mracosoft), и тебе сей- |
out 70h, al |
держать в голове - нужен просто хороший спра- |
||||||||||||
|
|
|
час необязательно знать, зачем она нужна. Start: |
mov al, 0 |
вочник. Предлагаю тебе юзать в этих целях |
||||||||||||
|
|
|
- это место, где находится точка входа програм- |
out 71h, al |
Interrupt List Ральфа Брауна. Там куча разной |
||||||||||||
|
|
|
мы. На ассемблере всегда надо помечать место, |
ret |
текстовой инфы - все тянет мегов на пять-шес- |
||||||||||||
|
|
|
|||||||||||||||
|
|
|
где находится начало программы (первая ко- |
end start |
ть. Надеюсь, твоя программерская потенция |
||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
манда). А вот и первая команда - jmp dword ptr |
COM-файл получается как в первом примере: |
сильно возросла, и ты полон решимости теперь |
||||||||||||
|
|
|
reboot. Она говорит процу: прыгай (перейди) по |
стать реальным кодером, так что соблюдай до- |
|||||||||||||
|
|
|
адресу, который находится в переменной |
tasm.exe+tlink.exe /t. Запусти его, перезагру- |
зы ежедневного потребления пива и учи ассем- |
||||||||||||
|
|
|
reboot. Еще ниже - строчка .data, которая озна- |
зись и увидишь при загрузке сообщение типа |
блер. Успехов! |
|
|
|
|
|
|
|
|||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
92 |
005C |
КОНСТРУКТОР |
>СПЕЦВЫПУСК #4 |
||
Текстовый реда |
|||||
илиснова текст |
|||||
ÌÌÕ (ììõ.mail.md) |
|
|
|||
Займемся-ка мы с тобой такой |
|
||||
гиперполезной прогой, как |
|
||||
текстовый редактор, и напишем |
|
||||
его на Дельфях. Ты скажешь: |
|
||||
да ладно, блин, в этом номере |
|
||||
уже есть один такой |
|
||||
на VJ++ - простой как валенок! |
Выбираем, даблклик и вот перед собой видим |
||||
На фиг мне второй-то? |
|||||
уже имеющий некоторые знакомые формы |
|||||
Объясняю: когда на двух |
(нет-нет, просто квадратный и с кнопками как |
||||
языках делаешь одинаковые |
настоящее приложение) проект. Сразу же |
||||
можно в Object Inspector’е найти пункт под |
|||||
программы, то сразу видно, |
|||||
названием Caption и поменять его в соответ- |
|||||
на каком языке конкретно ТЕБЕ |
ствии со своим извращенным вкусом. Звиняй, |
||||
проще и удобнее кодить. |
у меня на название фантазии не хватило. |
||||
|
|||||
Вот попробуешь, помаешься - |
|
||||
глядишь, и язык себе |
|
||||
конкретный выберешь. Так что |
|
||||
готовь себя к процессу, садись |
|
||||
за машину, а главное - не |
|
||||
боись. Все будет круто. Многого |
|
||||
нам от сей лихой проги не на- |
|
||||
до: будет уметь файлы откры- |
|
||||
вать, редактировать и сохра- |
|
||||
нять. Наворотов никаких |
|
||||
не будет - но зато чем проще, |
|
||||
тем ближе к совершенству. |
Теперь сотворим из этого чуда почти настоя- |
||||
|
|
|
|
щий редактор. Для этого лезем в панель ин- |
|
Начали |
|
Приступим. |
струментов Standard (обычно она включена по |
||
|
умолчанию, а если у кого ручонки слишком |
||||
|
|
|
|
шаловливые, то это, в общем-то, не совсем |
|
Запускаем Дельфю, видим все ту же форму, |
Меню File (что означает “напильник” - если кто |
плохо, но...), там ищем кнопень Memo. Она |
|||
Object Inspector и всякие менюхи. Так как мы |
не знал, можете в словаре проверить). Там, |
выглядит как большой piece of..., не как sheet |
|||
люди умные, с нуля писать не будем. Основ- |
если как следует напрячь извилину, можно |
of paper, вот. Давим на нее всем весом крыси- |
|||
ная фишка Дельфей как раз в том, что человек |
сообразить, что надо жать New... |
ного указателя, а потом растягиваем (извини, |
|||
умный (и, следовательно, ленивый), проявив |
|
если вдруг тебя словом этим огорчил) в сво- |
|||
некоторую находчивость, может за пару дви- |
После этого знаменательного действа полу- |
бодной области формы. Размер не важен - |
|||
жений правой рукой (в смысле грызуна туда- |
чаем окошко, в коем видим закладки со вся- |
сейчас произойдет чудо. В Object Inspector’е, |
|||
сюда по коврику протащив) получить уже |
ческими заготовочками. Нам нужна закладка |
как водится, появились ее, фигулины этой то |
|||
практически готовую программку. |
Projects, à òàì SDI Application. |
есть, свойства. Среди них есть несколько под- |
|
|
КОНСТРУКТОР |
|
|
|
>СПЕЦВЫПУСК #4 |
005D |
93 |
|
|
ктор на Дельфи овый редактор
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
лежащих незамедлительному изменению. |
Memo1.Lines.LoadFromFile |
|
дверь), и увидим мы тогда надпись |
Close. |
Ýòî |
|
|
|
|
|
||||||
|
|
Первое - это Align (не AlignMENT - до органов |
(OpenDialog.FileName); |
|
просто выход. Добавив перед |
|
волшебным |
|
|
|
|
|
||||||
|
|
правопорядка нам сейчас дела нет, а просто |
|
|
|
|
|
словом Close вот такое: |
|
|
|
|
|
|
|
|
||
|
|
Align). Легким кликом исправляем его значе- |
Идея этого фрагмента в том, что уж если |
|
|
|
|
|
|
|
|
|
|
|||||
|
|
ние с alNone на alClient. Что, понравилось? |
OpenDialog сработал, а OpenDialog - это всем |
if Memo1.Lines.Count>0 then |
|
|
|
|
|
|
|
|
||||||
|
|
Как настоящий. Следующая жертва безжалос- |
знакомое окошко открытия файла или зага- |
|
|
|
|
|
|
|
|
|
|
|||||
|
|
тного мышекликанья - это параметр Lines. |
дочная пиктограммка с открытой папкой в |
if MessageBox(0,’Засейвиться?’,’Save |
èëè |
|
|
|
|
|
||||||||
|
|
Сейчас там загадочный (TStrings) и многозна- |
правом верхнем углу нашей формы (так его |
íåò?’,MB_YESNO)=IDYES then |
|
|
|
|
|
|
|
|
||||||
|
|
чительное многоточие. Много... тьфу, просто |
Дельфя обозначает), то надо из файла читать |
SaveItemClick(Sender); |
|
|
|
|
|
|
|
|
||||||
|
|
|
|
|
|
|
|
|
|
|||||||||
|
|
кликаем на многоточие и злобно удаляем там |
то, что надо, а имя файла - это и есть |
|
|
|
|
|
|
|
|
|||||||
|
|
все, что можно. А можно удалить глупую |
FileName, а файл - это напильник... Но мы от- |
|
|
|
|
|
|
|
|
|
|
|||||
|
|
строчку |
“Memo1”. И напоследок - параметр |
влеклись. Теперь сделаем практически анало- |
мы получим при жалкой попытке |
трусливо |
|
|
|
|
|
|||||||
|
|
|
|
|
|
|
||||||||||||
|
|
ScrollBars, |
его выставляем в ssBoth, чтобы об- |
гичную вещь для сохранения. Даблклик по |
выйти с каким-то набранным текстом |
вопрос |
|
|
|
|
|
|||||||
|
|
скроллиться можно было. Теперь у нас должно |
кнопе с дискетой отправит нас туда, где напи- |
“Действительно ли мы этого хотим”. |
Òàì, ãäå |
|
|
|
|
|
||||||||
|
|
было накликаться нечто в этом роде. |
сано SaveDialog.Execute. Исправляем на: |
у меня написано “Засейвиться” и |
“Save èëè |
|||||||||||||
|
|
|||||||||||||||||
|
|
|
|
|
|
|
|
|
нет”, можно писать что угодно, хоть |
“Ñ äíåì |
||||||||
|
|
|
|
|
if SaveDialog.Execute |
рождения, Пух”. |
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
then |
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
M e m o 1 . L i n e s . S a - |
Чего еще? Правильно, About. Здесь |
óæå âñå |
|
|
|
|
|
||||||
|
|
|
|
|
|
|
|
|
|
|||||||||
|
|
|
|
|
v e T o F i l e ( S a v e D i a - |
готово, достаточно влезть в меню View, а там |
||||||||||||
|
|
|
|
|
||||||||||||||
|
|
|
|
|
log.FileName); |
нажать Forms... и выбрать AboutBox. Здесь |
||||||||||||
|
|
|
|
|
|
|
|
|
можно вымещать свое тщеславие. |
|||||||||
|
|
|
|
|
Почти то же самое. |
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
×òî |
действительно |
Можно запускать. Работает. Просто, удобно, |
|||||||||||
|
|
|
|
|
смешно - это то, что |
быстро. Понравилось? |
||||||||||||
|
|
|
|
|
îíî |
работает! Если |
Òî-òî æå! |
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
И чудесным образом закончили |
хочется, то можно до- |
||||||
|
||||||||
|
|
|
бавить |
êîä, |
который |
|||
|
|
|
||||||
|
|
Теперь - святая святых. Будем писать код, то |
перед |
выходом |
ñïðî- |
|||
|
|
есть оставим на минутку в покое грызуна и |
сит, не хотим ли мы |
|||||
|
||||||||
|
|
набьем пару слов на клаве. Собственно, что |
посейвиться? Для это- |
|||||
|
||||||||
|
|
осталось сделать - это научить наш редактор |
го надо жестоко даб- |
|||||
|
|
грузить и сохранять. Начнем с первого. |
лкликнуть |
по третьей |
||||
|
||||||||
|
|
|
кнопке с чем-то подоз- |
|||||
|
|
Ловкий даблклик по кнопке с заманчивой кар- |
рительно фрейдовски- |
|||||
|
|
тинкой “типа лоад” - и мы в описании проце- |
фаллическим |
(после |
||||
|
|
|
|
|
||||
|
|
дуры, то есть того, что это кнопка делает. Там |
длительного |
любова- |
||||
|
|
написано OpenDialog.Execute. Исправляем это |
íèÿ |
ýòèì |
шедевром |
|||
|
|
на следующий текст: |
прикладного искусства |
|||||
|
|
if OpenDialog.Execute then |
ÿ |
понял, |
|
÷òî |
ýòî |
94 |
005E |
КОНСТРУКТОР |
|
|
>СПЕЦВЫПУСК #4 |
|
|
||||||
|
|
|
|
|
|
|
КРАНТЫ СОСЕД СОБСТВЕННЫЙ
Horrific (smirnandr@mail.ru)
Не знаю как ты, а я люблю
слушать музыку по максимуму. Чтобы каждая звуковая волна
проникала сквозь мои клетки и раздалбливала мозги
вдребезги :). А что нужно для отличного прослушивания
цифровой музыки? Всего лишь
компьютер, хороший проигрыватель и пачка памперсов для соседей :).
|
|
|
|
|
Сначала пишем CD-Player |
строке “Icon”, и перед тобой появится окно |
|
|
|
|
|
|
выбора иконки для проги (рисунок 2). Нажми |
||
|
|
|
|
|
|
|
кнопку “Load” и найди какую-нибудь подходя- |
|
|
|
|
|
Если ты еще не установил Delphi, пока я тут рас- |
щую иконку. Когда найд¸шь, жми “ОК” и читай |
|
|
|
|
|
|
пинался, то принимайся за это немедленно. Я |
статью дальше. |
|
|
|
|
|
|
буду считать, что ты достал 5-ю версию этой |
|
|
проги. Возможны и другие варианты, но никак |
|
||||||
|
|
|
|
|
не меньше 3-й. Как устанавливать Delphi, я тебя |
|
|
|
|
|
|
|
учить не буду - в этом номере про инсталляцию |
|
|
|
|
|
|
|
языков вообще отдельная статья есть. Если ус- |
|
|
тановил, то смело запускай, и мы рванем в бой. |
|
||||||
|
|
|
|
|
Когда Delphi загрузится, перед твоими глазами |
|
|
|
|
|
|
|
откроется новый проект. |
|
|
|
|
|
|
|
Вообще-то, мы уже рассказывали о Delphi, но я |
|
|
|
|
|
|
|
все же постараюсь рассказать все подробно, |
|
|
|
|
|
|
|
чтобы поняли и те, кто не смог с первого раза |
|
|
|
|
|
|
|
пролезть в танкетку. Для тех, кто видит это в |
|
|
|
|
|
|
|
первый раз, сообщаю, что находящееся посере- |
|
|
|
|
|
|
|
дине окно с заголовком “Form1” - это твоя фор- |
|
|
|
|
|
|
|
ма. Слева расположено окно “ObjectInspector” |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
(рисунок 1), с которым ты будешь очень много |
|
|
|
|
|
|
|
работать и менять различные свойства. |
|
|
|
|
|
|
|
Вот с “ObjectInspector” мы и начнем. Сейчас в |
|
|
|
|
|
|
|
нем находятся свойства твоего окна (будуще- |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
го плеера). Щелкни по строке “Caption” и на- |
1 |
|
пиши там название своего будущего произве- |
Рисунок |
||||||
|
|
|
|
|
дения. Это название ты увидишь в заголовке |
||
|
|
|
|
|
формы и будущей проги. Теперь щелкни по |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Найди сверху окно, похожее на рисунок 3. У |
меня немного отличается, в связи с моими из- |
вращенными пристрастиями, но что-то похо- |
æåå åñòü ó òåáÿ. |
Рисунок 2
В этом окне под строкой меню справа есть ку- ча закладок - это палитра компонентов. Выдели на ней закладку “System” и найди там “MediaPlayer” (он должен быть третьим слева). Теперь щелкни по нему, а потом щелкни по форме. У тебя должно получиться нечто похожее на рисунок 4. Если не получилось, то стоит обработать руки напильником и зубилом или, по крайней мере, попробовать еще раз :).
На твоей форме теперь появился компонент с названием MediaPlayer1. На этом компоненте ты можешь увидеть 9 кнопок: воспроизведение, пауза, стоп, перемотки, перескоки на следующий и предыдущий трек, запись и вытаскивание CD.
Теперь нажми клавишу “F9” и вставляй музыкальный компакт диск. Ты можешь запросто его слушать. Круто? Ни одной строчки кода, только легкие движения мауса и IBM - совмес-
|
|
КОНСТРУКТОР |
|
|
|
>СПЕЦВЫПУСК #4 |
005F |
95 |
|
|
ЯМ ИЛИ ТВОЙ МЕГА-ПЛЕЕР
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
тимые ручки :). Хотя моей задачей было толь- |
на кнопку. |
|
|
|
начать |
|
|
|
||||||||||
|
|
|
|
|
|
|
ко это, я решил продвинуться немного даль- |
|
|
|
|
|
|
MediaPlayer1.ИмяФайла присвоить |
значение |
|
|||||||||
|
|
|
|
|
|
|
ше. Закрой прогу и возвращайся в Delphi. |
Прямо там, где находится курсор, напиши |
ИмяФайла из OpenDialog1. |
|
|
|
|||||||||||||
|
А потом делаем суперплеер |
|
|
|
следующие пять строчек: |
MediaPlayer1.ОткрытьФайл |
|
|
|
||||||||||||||||
|
|
|
|
|
|
|
|
|
|
Кончить :) |
|
|
|
||||||||||||
|
|
|
|
|
|
|
Сейчас мы сделаем универсальный плеер. Не |
|
|
|
|
|
|
Взгляни на код и эти строчки - если |
òû IBM- |
|
|||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||
|
|
|
|
|
|
|
пугайся, много времени и мозгов это не отни- |
|
|
|
|
|
|
совместимый чел, то дополнительные |
объяс- |
|
|||||||||
|
ìåò. |
|
|
|
|
|
|
|
|
|
|
нения тебе не понадобятся. Теперь |
можешь |
|
|||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
снова жать “F9”, и твоя прога должна |
запус- |
|
||||
|
|
|
|
|
|
|
Щелкни по закладке “Standart” на палитре |
|
|
|
|
|
|
титься. Если не запустилась, то читай |
статью |
|
|||||||||
|
|
|
|
|
|
|
компонентов и найди там “Button”. Установи |
|
|
|
|
|
|
заново. |
|
|
|
|
|
|
|||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||
|
|
|
|
|
|
|
его где-нибудь на форме, так же как и |
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||
|
|
|
|
|
|
|
“MediaPlayer”. Зачем это нужно, поймешь чуть |
|
|
|
|
|
|
Попробуй нажать кнопку “Открыть”. |
Перед то- |
|
|||||||||
|
|
|
|
|
|
|
позже, а пока... Делай :)! Теперь найди “Panel” |
|
|
|
|
|
|
бой должно открыться стандартное |
îêíî îò- |
|
|||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||
|
|
|
|
|
|
|
и повтори операцию. Теперь найди закладку |
|
|
|
|
|
|
крытия файла. Можешь открывать |
файлы: |
|
|||||||||
|
|
|
|
|
|
|
“Dialogs” на палитре компонентов и найди там |
Рисунок 4 |
|
|
WAV, MID, AVI и другие мультимедийные |
ïðè- |
|
||||||||||||
|
|
|
|
|
|
|
“OpenDialog” (он должен быть первым). Уста- |
|
|
|
|
|
|
мочки. Достаточно только иметь установлен- |
|
||||||||||
|
|
|
|
нови его на форму. |
|
|
|
procedure |
|
TForm1.Button1Click(Sender: |
|
ные соответствующие драйверы в системе. |
|
||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
TObject); |
|
|
|
Все это после открытия можно просмотреть |
|
|||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||
|
|
|
|
|
|
|
После всего этого у тебя должно получиться |
begin |
|
|
|
(прослушать) с помощью “MediaPlayer”. И все |
|
||||||||||||
|
|
|
|
нечто похожее на рисунок 5. |
|
|
|
if OpenDialog1.Execute then |
|
это возможно благодаря “MMSystem” - все, |
|
||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
begin |
|
|
что ты можешь прослушать стандартным воо- |
|
||||||||
|
|
|
|
|
|
|
Можешь оформить все это покрасивее. Для |
|
|
|
|
|
|
ружением окон, можно прослушать и через |
|
||||||||||
|
|
|
|
|
|
|
этого тебе нужно просто перетаскивать или |
MediaPlayer1.FileName:=OpenDialog1.Filename |
|
эту прогу. |
|
||||||||||||||
|
|
|
|
|
|
|
растягивать созданные на форме объекты. |
; |
|
|
|
|
|
И, наконец, улучшаем наш плеер |
|
|
|||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
MediaPlayer1.Open; |
|
|
|
|||||||||
|
|
|
|
|
|
|
Надо еще пять минут потужиться, и что-ни- |
end; |
|
|
|
|
|
|
|
|
|
||||||||
|
|
|
|
|
|
|
будь выйдет. Выдели созданную тобой кнопку |
end; |
|
|
Чтобы продолжить, нужно вернуться к форме. |
|
|||||||||||||
|
|
|
|
|
|
|
|
|
|
||||||||||||||||
|
|
|
|
|
|
|
на форме и иди в “ObjectInspector”. Найди |
|
|
|
|
|
|
Чтобы без проблем переключаться между |
|
||||||||||
|
|
|
|
|
|
|
строчку “Caption” и измени ее на “Открыть”. |
Примечание!! Набирать на клаве нужно |
только |
формой и ее исходным текстом, используй |
|
||||||||||||||
|
|
|
|
|
|
|
Теперь выдели “MediaPlayer” и в строке |
то, что написано между крайними Begin |
è End, |
пимпу F12. |
|
||||||||||||||
|
|
|
|
|
|
|
“Display” выдели имя созданной тобой панели |
все остальное уже должно быть |
создано |
|
|
|
|
|
|
|
|||||||||
|
|
|
|
|
|
|
(по умолчанию это “Panel1”). |
Delphi. Я привожу полную процедуру, |
только |
Мы хотим сделать очень громкий плеер, |
|
||||||||||||||
|
|
|
|
|
|
|
|
||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
чтобы тебе было удобно глазеть и сравнивать |
поэтому добавим возможность изменения |
|
||||||||||
|
|
|
|
И еще кое-что. Дважды щелкни по кнопке, и |
с тем, что за тебя делает Delphi. |
громкости. Для этого щелкни по закладке |
|
||||||||||||||||||
|
|
|
|
|
|
|
перед тобой откроется редактор текста (рису- |
По-нашенски это звучит так: |
“Win32” на палитре компонентов и найди там |
|
|||||||||||||||
|
|
|
|
|
|
|
нок 6). Здесь Delphi уже создала процедуру (в |
компонент по имени “TrackBar”. Установи два |
|
||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ней должен стоять твой курсор), которая бу- |
|
|
|
|
|
|
таких компонента на свою форму. У тебя дол- |
|
||||||||||
|
|
|
|
|
|
|
дет вызываться каждый раз, когда ты жмешь |
если OpenDialog1.Выполнить то |
жны получиться TrackBar1 и TrackBar2. |
||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Теперь выдели любой из них и перейди в |
||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
“ObjectInspector”. Найди в нем строку |
||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
“Orientation”. Щелкни по ней, и перед тобой |
||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
появится выпадающий список. Выбери в нем |
||||||
|
|
|
|
|
|
|
Рисунок 3 |
|
|
|
|
|
|
|
|
|
“trVertical”. Теперь найди строку “Max” и изме- |
||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ни хранящееся там значение (по умолчанию |
|||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
96 |
0060 |
|
КОНСТРУКТОР |
|
|
>СПЕЦВЫПУСК #4 |
|
|||||||
|
||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
дающий список, в котором ты должен выбрать |
|
|
|
|
|
|
|
|
||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
только |
÷òî |
созданную |
процедуру |
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
(TrackBar1Change). |
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
Теперь при изменении положения любого из |
|
|
|
|
|
|
|
|
||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
TrackBar-ов будет вызываться |
îäíà è òà æå |
|
|
|
|
|
|
|
|
|||||
|
|
|
|
|
|
|
|
|
|
|
|
|
процедура “TrackBar1Change”. |
Давай разбе- |
|
|
|
|
|
|
|
|
|||||
|
|
|
|
|
|
|
|
|
|
|
|
|
рем по косточкам, что написано в этой проце- |
|
|
|
|
|
|
|
|
||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
дуре. Это будет немного сложно, но полезно. |
|
|
|
|
|
|
|
|
||||||
|
|
Рисунок5 |
|
|
|
|
|
|
|
|
|
Первая строка (var LValue,RValue:Word) гово- |
|
|
|
|
|
|
|
|
|||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||
|
|
|
|
|
|
|
|
|
|
рит, что нам нужно выделить память под две |
|
|
|
|
|
|
|
|
|||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
переменные Lvalue (это у нас будет значение |
Рисунок 7 |
|
|
|
|
|
|
|
||||||
|
|
10) на 255. После этого повтори те же опера- |
громкости левого канала) и Rvalue (это значе- |
выходов: WAVE/Direct |
Sound, CD Audio, |
MIDI è |
|||||||||||||||||||||
|
|
ции со вторым TrackBar. У тебя должно полу- |
ние громкости правого канала). |
|
|||||||||||||||||||||||
|
|
читься нечто, похожее на рисунок 7. |
|
|
|
|
|
|
|
линейный вход - ты |
в курсе? |
|
|
|
|
|
|||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
Строка “LValue:=$FF-TrackBar1.Position” выс- |
|
|
|
|
|
|
|
|
||||||
|
|
Теперь опять нужно выделить этот TrackBar. |
читывает значение громкости для левого ка- |
(RValue SHL 8)+LValue означает, что |
|
|
íàäî |
|
|||||||||||||||||||
|
|
|
|||||||||||||||||||||||||
|
|
Перейди в “ObjectInspector” и щелкни по зак- |
нала. На понятном языке это будет звучать |
взять переменную Rvalue, сдвинуть ее на 8 |
|
||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||
|
|
ладке |
“Events”. |
Теперь дважды щелкни по |
так: “переменной Lvalue присвоить значение |
бит влево и прибавить значение левого кана- |
|
|
|||||||||||||||||||
|
|
строке |
“OnChange”. Delphi опять создаст про- |
(шестнадцатиричное 255 - текущая позиция у |
ла. На первый взгляд непонятно, но попробую |
||||||||||||||||||||||
|
|
цедуру. Здесь ты должен написать следую- |
TrackBar1”. То же самое касается следующей |
объяснить все на пальцах. Представим, что у |
|||||||||||||||||||||||
ùåå: |
|
|
|
|
|
|
|
|
|
|
строки, где рассчитывается громкость право- |
тебя значение правого канала равно 55, а зна- |
|
|
|||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
чение левого = 44. После |
|
|
|
|
||
|
|
procedure |
|
Увидимся |
сдвига числа 55 на 8 бит влево |
|
|
|
|
||||||||||||||||||
|
|
TForm1.TrackBar1Change- |
|
у тебя получится число 5500. А |
|
|
|||||||||||||||||||||
|
|
(Sender: TObject); |
|
после прибавления 44 полу- |
|||||||||||||||||||||||
|
|
var LValue,RValue:Word; |
â |
àäó |
|
:) . |
|
чится число 5544. Первые две |
|
||||||||||||||||||
|
|
|
|
|
|||||||||||||||||||||||
|
|
begin |
|
|
цифры означают правый ка- |
||||||||||||||||||||||
|
|
LValue:=$FF- |
|
|
нал, а вторые две - левый (мо- |
|
|
|
|
||||||||||||||||||
|
|
TrackBar1.Position; |
|
|
|
|
|
|
|
|
|
|
|
|
|
жет наоборот, я не помню :)). |
|
||||||||||
|
|
RValue:=$FF- |
|
|
|
|
|
|
|
|
|
|
|
|
Åê! |
|
|
|
|
|
|
|
|||||
|
|
TrackBar2.Position; |
|
|
|
|
|
го канала. Зачем нужно отнимать 255 от теку- |
|
|
|
|
|
|
|
||||||||||||
|
|
waveOutSetVolume(0, (RValue SHL 8)+LValue); |
щей позиции? Это связано с тем, что 0 - озна- |
|
|
|
|
|
|
|
|
||||||||||||||||
|
|
end; |
|
|
|
|
|
чает наивысшую громкость, а 255 - наимень- |
Вот и все, а ты боялась:). Но, прежде чем жать |
||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
шую. Этими двумя строчками я переворачи- |
“F9”, тебе надо сделать еще кое-что. Найди в |
|||||||||||||
|
|
А вот теперь выдели второй TrackBar. Снова |
ваю значение текущей позиции у TrackBar1. |
самом начале исходного текста слово “uses” и |
|||||||||||||||||||||||
|
|
иди в “ObjectInspector” и щелкай по закладке |
Если не переворачивать, то нижняя позиция |
допиши туда слово “mmsystem”. У тебя дол- |
|||||||||||||||||||||||
|
|
“Events”. Ткни один раз мышкой в строку |
TrackBar1 будет соответствовать максималь- |
жно получиться нечто похожее на: |
|||||||||||||||||||||||
|
|
“OnChange”, и перед тобой |
появится выпа- |
ной громкости, а верхняя - минимальной. Это |
|
|
|
|
|
|
|
|
|||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
неудобно, |
поэтому я |
uses |
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
сделал подъем с пере- |
mmsystem, Windows, Messages, .... |
|||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
воротом. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Если ты этого не сделаешь, то Delphi не смо- |
|||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Следующая |
строка: |
жет запустить твою прогу и будет ругаться на |
|
|||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
waveOutSetVolume(0, |
waveOutSetVolume. А вот теперь запусти прогу |
|||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
(RValue SHL 8)+LValue) |
и открой какой-нибудь WAVE файл. Попробуй |
|||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- выставляет громкость |
подвигать свои TrackBar-ы - круто? Несколько |
|||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
звука. |
|
WaveOut- |
строчек кода и пять минут вождения мышью - |
|||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
SetVolume - процедура, |
твой крутой проигрыватель готов. Хотя меня |
|||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ó ñ ò à í à â ë è â à þ ù à ÿ |
просили научить тебя проигрывать только му- |
|||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
громкость. Первый па- |
зыкальные диски, я уверен - Holod не тронет |
|||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
раметр в ней (ноль) оз- |
мое достоинство. Подключай к компьютеру |
|
||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
начает, что надо уста- |
колонки помощнее и врубай музон, чтоб тем, |
|
|
|
|
|||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
новить |
громкость |
кто за стеной, даже памперсы не помогли. |
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
WAVE/Direct Sound âû- |
Удачи тебе. |
|
|
|
|
|
|
|
||
|
|
Рисунок 6 |
|
|
|
|
|
|
|
|
|
|
|
|
|
хода. У звуковой карты |
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
может быть |
несколько |
Увидимся в аду :). |
||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
98 |
0062 |
КОНСТРУКТОР |
|
|
>СПЕЦВЫПУСК #4 |
|
|
||||||
|
|
|
|
|
|
|
СУРОВАЯ ПРАВДА Ж
Автор: Mr_False (mr_false@mail.ru)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Небольшой |
|
словарь |
|
Фактически как это выглядит, показано |
íà èë- |
|
|
|
|
|
|
|
||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||||||||||||||
|
3D-программера |
|
|
|
|
|
|
|
|
|
люстрации, но, стоит заметить, что начало |
êîîð- |
|
|
|
|
|
|
|
||||||||||||||||
|
|
|
|
|
|
|
|
|
|
динат находится в центре экрана (по |
умолча- |
|
|
|
|
|
|
|
|
|
|||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||
|
|
RENDERING - то же рисова- |
|
íèþ). |
|
|
|
|
|
|
|
|
|
||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||||||
íèå, |
только |
|
ïî |
отношению к 3D |
|
Во-вторых - модели |
освещения. В D3D |
èõ äîñ- |
|
|
|
|
|
|
|
||||||||||||||||||||
|
|
|
|
|
|
(прорисовка твоей 3D |
|
тупно две: Плоская |
|
|
|
|
|
|
|
|
|
|
|
||||||||||||||||
|
объектам |
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||||||||||||
сцены, короче). |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||
|
|
SOFTWARE/HARDWARE |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||||
|
RENDERING |
- òîò |
же рендеринг, |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||
|
только в |
первом |
случае все |
|
|
|
|
|
|
|
и Гуро - она стоит по |
умолчанию. |
|
|
|
|
|
|
|
|
|||||||||||||||
|
рисует проц, а во втором - ак- |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||||||
|
ñåëü. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
POLYGON - в переводе - мно- |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||||
|
|
гоугольник, но чаще имеется |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||
|
ввиду треугольник. А вообще |
|
Не вдаваясь в подробности, скажу лишь |
òî, ÷òî |
|
|
|
|
|
|
|
|
|
||||||||||||||||||||||
|
это - плоскость в трехмерном |
|
|
|
|
|
|
|
|
||||||||||||||||||||||||||
|
|
в плоской рассчитывается цвет всего |
полигона |
|
|
|
|
|
|
|
|
||||||||||||||||||||||||
|
пространстве, ограниченная те- |
|
сразу, тогда как в гуро рассчитывается |
öâåò â |
|
|
|
|
|
|
|
|
|||||||||||||||||||||||
|
|
|
|
||||||||||||||||||||||||||||||||
|
ми многими (или тремя) углами. |
|
каждой вершине. Чем это фактически |
отличает- |
|
|
|
|
|
|
|
||||||||||||||||||||||||
|
|
ся, видно на врезанных имагах. Первая |
- ïëîñ- |
|
|
|
|
|
|
|
|
|
|||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||||||||||||||
|
|
PRIMITIVE - примитивные |
|
|
|
|
|
|
|
|
|||||||||||||||||||||||||
|
|
|
кая модель. Вторая - Гуро. Еще одна инфа: она, |
|
|
||||||||||||||||||||||||||||||
основные геометрические фигу- |
|
|
по принципу своего действия, относится к рен- |
|
|||||||||||||||||||||||||||||||
ры (полигон, например, или ли- |
|
|
|
дерингу и освещению. Если ты задал вершины |
|
||||||||||||||||||||||||||||||
|
|
своего полигона по часовой стрелке по отноше- |
|
|
|
|
|
|
|
|
|
||||||||||||||||||||||||
|
íèÿ). |
|
|
|
|
|
|
|
|
|
нию к наблюдателю, то этот полигон будет ви- |
|
|||||||||||||||||||||||
|
И все-таки OpenGL лучше. |
|
ден (D3D не поленится его нарисовать), и нао- |
|
|||||||||||||||||||||||||||||||
|
|
борот. Ну и обязательно надо знать, что такое |
|
||||||||||||||||||||||||||||||||
|
ЗЫ. Если что-то непонятно или |
|
|
||||||||||||||||||||||||||||||||
|
|
двойная буферизация. Никакого отношения к |
|
||||||||||||||||||||||||||||||||
|
какие-нибудь проблемы - мыль |
|
телкам и их буферам эта штука не имеет. Это |
|
|||||||||||||||||||||||||||||||
|
ìíå íà mr_false@mail.ru. |
|
просто значит, что ты, когда рендеришь, резуль- |
|
|||||||||||||||||||||||||||||||
|
|
таты своих трудов выводишь не на экран, а сна- |
|
||||||||||||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
чала в память, и только закончив рисовать, по- |
|
|||||||||||||||
Ç |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
казываешь свое старание, попутно рисуя сле- |
|
|||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
дравствуй, здравствуй, мой дорогой |
|
Рановато пока.). Перед тем как начать програм- |
|
дующий шедевр. Сделано так умно не потому, |
|
|||||||||||||||||||||||||||
|
|
|
дружок - программер. Я знаю, у тебя |
|
мировать эту самую графику, надо знать некото- |
|
что звучит неплохо (это тебе не хухры-мухры), а |
|
|
|
|||||||||||||||||||||||||
|
|
|
уже давно чешутся руки от желания |
|
рые основы. Во-первых, это система координат. |
|
только лишь потому, что иначе экран мигает и |
|
|||||||||||||||||||||||||||
|
|
|
написать свою 3D прогу/гамесу/фиг- |
|
В D3D она левая. Это просто значит, что ось Z |
|
дергается (я программил и без пресловутой бу- |
|
|
|
|||||||||||||||||||||||||
|
|
|
|
|
|
|
|
||||||||||||||||||||||||||||
|
ню. Но ты не знаешь - как. Мхнда... Ты, типа, |
|
устремлена в глубь экрана, X - вправо, Y - вверх, |
феризации - лучше бы ты не видел). Вроде все. |
|
|
|
|
|
|
|
|
|
||||||||||||||||||||||
|
пишешь на C++. Нет?! Тяжелый случай... Ну, |
|
а не то что к ней свою руку (левую) приложили |
|
Творить |
|
|||||||||||||||||||||||||||||
|
иди учись, здесь я тебе ничем помочь не могу... |
коммунисты. |
|
|
|
|
|
|
|
|
|||||||||||||||||||||||||
|
Если ты действительно пишешь на C (или уже |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||
|
научился - ну и шустрый же ты!), то сейчас ты |
|
|
|
|
|
|
|
|
|
Для того чтобы начинать творить, надо сначала |
|
|||||||||||||||||||||||
|
будешь открывать просторы Direct3D вместе со |
|
|
|
|
|
|
|
|
|
обзавестись описаниями функций и классов (в |
|
|||||||||||||||||||||||
|
мной (“э-э-э, я хочу сказать, ну ты можешь, ес- |
|
|
|
|
|
|
|
|
|
данном случае это методы и интерфейсы соот- |
|
|||||||||||||||||||||||
|
ли хочешь, но, если не хочешь, ты не обязана, |
|
|
|
|
|
|
|
|
|
ветственно - Direct3D использует Component |
|
|
|
|||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||||||||||||
|
ты просто могла бы... Да” :)). А рисовать мы бу- |
|
|
|
|
|
|
|
|
|
Object Model (COM), но это нам пока особо не |
|
|||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||
|
дем... Треугольник, т.е. полигон (доволен?, а ты |
|
|
|
|
|
|
|
|
|
суть важно, поэтому я не буду заострять на этом |
|
|||||||||||||||||||||||
|
думал, я тебя заставлю сцены из анрыла рисо- |
|
|
|
|
|
|
|
|
|
внимания - все подробно описано в SDK). “А что |
|
|||||||||||||||||||||||
|
вать с применением Environment Mapping, ба- |
|
|
|
|
|
|
|
|
|
за SDK??” - наверняка спросишь ты. Настал че- |
|
|||||||||||||||||||||||
|
нального текстурирования и т.д.? А вот и кукиш. |
|
|
|
|
|
|
|
|
|
ред объяснять. SDK, он же Software Development |
|
|||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|