Август 2002 → | ||||||
1
|
3
|
4
|
||||
---|---|---|---|---|---|---|
5
|
6
|
7
|
8
|
9
|
10
|
11
|
12
|
13
|
14
|
15
|
16
|
17
|
18
|
20
|
21
|
22
|
23
|
24
|
25
|
|
26
|
27
|
28
|
29
|
31
|
За последние 60 дней ни разу не выходила
Открыта:
21-07-2002
Статистика
0 за неделю
Программирование во всем великолепии
Информационный Канал Subscribe.Ru |
Программирование во всем великолепии.
Выпуск #00000003
Содержание:
1. Вступление.2. Программирование на Assembler: Assembler для начинающих. Урок 3.
3. Программирование на Delphi: Delphi для начинающих. Урок 3.
4. JavaScript: Первые шаги. Урок 3.
5. Секреты Windows: Системный реестр.
6. Программирование на Delphi: Регулирование громкости.
7. Как с нами связаться.
1. Вступление.
В чём жизни смысл?.. Спpосите АльтаВистy...
Каждый день мы неожиданно для себя узнаем что-то новое. Каждый день мы стремимся к лучшему, стараемся чего-то достичь. Или помочь чего-то достичь другим. Надеемся, что наша рассылка поможет вам в ваших начинаниях или продолжениях.
Рассылка наша, как мы и говорили в прошлом номере, предназначена как для тех, кто еще только пытается научиться программировать, так и для программистов с большим опытом, которые, мы надеемся, найдут в ней полезные рекомендации и советы. Невозможно в одной рассылке уместить все - поэтому мы стараемся выбирать наиболее актуальные на сегодня, с нашей точки зрения, темы.
Ассемблер, мы думаем, всегда останется языком программирования, который позволяет создавать самые быстрые и маленькие программы - это его неоспоримое преимущество. JavaScript - язык для Web программирования. Интернет, мы думаем, будет развиваться и развиваться, поэтому полезно знать хотя бы основы программирования в Web. Delphi... Мы думаем, что это самый удобный в мире инструмент для программирования. Его код очень быстр, его синтаксис очень прост, его, его, его... Перечислять можно до бесконечности.
Но выбирать вам и больше никому.
Не думайте, что мы решили писать статьи для вас просто так. Нет, "просто так" - нам это не нужно. Понимаете ли вы великолепие программирования? Стремитесь ли вы достичь не только основ, но и всех подробностей, мелочей и азов написания программ? Мы искренне надеемся, что это так.
2. Программирование на Assembler: Assembler для начинающих. Урок 3.
автор: Вий
Здравствуйте, уважаемые подписчики. На прошлом уроке мы с вами узнали, что такое регистры и для чего они нужны. На этом уроке мы с вами узнаем, что такое адресное пространство.
Существует понятие "физический адрес ячейки памяти". Физический адрес ячейки памяти представляет из себя ни что иное, как порядковый номер этой ячейки. Т. е. всю память можно представить как одну длинную цепочку.
Как же происходит адресация этих ячеек? Во первых, существует два режима работы процессора: реальный (Real mode) и защищенный (Protected mode). Защищенный режим мы с вами рассматривать пока не будем - это сложно для начинающих. В реальном же режиме работы микропроцессора физический адрес строится из сегмента и смещения.
Как вы узнали из прошлого урока, существует несколько сегментных регистров: CS, DS, ES, SS, FS, GS. Последние два относятся только к 386 процессорам и выше. В этих регистрах хранятся идентификаторы сегментов. Также существуют регистры общего назначения: AX, DX, BX, CX, DI, SI и указатель команды: IP.
Сегментные регистры и регистры общего назначения в паре составляют физический адрес. Причем действует следующее правило: значение сегментного регистра умножается на 16 (смещается влево на 4 бита) и к полученному значению прибавляется смещение. Полученное число и будет физическим адресом ячейки памяти. Например, адрес следующей команды формируется из сегментного регистра CS и указателя команды IP. (CS*16)+IP.
Отсюда следует, что сегменты как бы накладываются друг на друга. Например 0000h:0ffffh то же самое, что и 00ffh:00ffh. Первое число - это идентификатор сегмента, а второе - смещение в сегменте.
Следующий пример иллюстрирует это.
;---< chars.asm >-< begin >------------------------------------------- code segment assume cs:code, ds:code, ss:code org 100h start: push 0b800h ;Сегмент видеопамяти для текстового режима в es pop es mov bx, 0h ;Смещение 0 mov dx, 420fh ;Символ с кодом 0fh, зеленого цвета на красном фоне call OutputChar ;Выводим символ mov ah, 08h ;Ждем нажатия клавиши int 21h push 0b000h ;Сегмент уже другой pop es mov bx, 8000h ;Смещение тоже другое, но если посчитать, физический ; адрес тот же, что и в предыдущем случае mov dx, 0240fh ;Символ тот же, но красного цвета на зеленом фоне call OutputChar ;Выводим символ int 21h ;Задержка ret ;Возвращаем управление операционной системе OutputChar proc ;Процедура вывода символа mov word ptr es:[bx], dx ret ;Возвращаем управление программе OutputChar endp code ends ;Конец сегмента кода end start ;start - точка входа в программу ;---< chars.asm >-< end >---------------------------------------------На следующем уроке мы изучим структуру программы на языке Assembler.
Всего хорошего.
3. Программирование на Delphi: Delphi для начинающих. Урок 3.
автор: Rasa
Здравствуйте, уважаемые подписчики! Сегодня на уроке мы рассмотрим элементы языка Object Pascal. Это алфавит, идентификаторы, константы, выражения и операции. Начнем с алфавита, который включает в себя буквы, цифры, шестнадцатеричные цифры, специальные символы, пробелы и зарезервированные слова. Буквами принято считать буквы латинского алфавита от a до z и от A до Z, а также знак подчеркивания "_". В языке нет различия между заглавными и строчными буквами алфавита, если только они не входят в символьные и строковые значения. Цифры - арабские цифры от 0 до 9. Каждая шестнадцатеричная цифра имеет значение от 0 до 15. Первые 10 значений обозначаются арабскими цифрами 0..9, остальные шесть - латинскими буквами A..F или a..f.
Специальные символы языка Object Pascal:
+ - * / = , ' . : ; < > [ ] ( ) { } ^ @ # $
и пары символов:
<>, <=, >=, :=, (*, *), (., .), //.
В программе эти пары симвлов нельзя разделять пробелами, если они используются как знаки операций отношеня или ограничители комментария. Символы (. и .) могут употребляться соответственно вместо [ и ].
Особое место в алфавите языка занимают пробелы, к которым относятся любые символы в диапазоне кодов от 0 до 32. Эти символы рассматриваются как ограничители идентификаторов, констант, чисел, зарезервированных слов. Несколько следующих друг за другом пробелов считаются одним пробелом (последнее не относится к строковым константам)
В Object Pascal имеются следующие зарезервированные слова:
and exports mod shr array file nil string as finalization not then asm finally object threadvar begin for of to case function or try class goto out type const if packed unit constructor implementation procedure until destructor in program uses dispinterface inherited property var div initialization raise while do inline record with downto interface repeat xor else is resourcestring end label set except library shlЗарезервированные слова не могут использоваться в качестве идентификаторов.
Стандартные директивы первоначально связаны с некоторыми стандартными объявлениями в программе. К ним относятся:
absolute dynamic name public safecall abstract export near published stdcall assembler external nodefault read stored automated far override readonly virtual cdecl forward package register write contains implements pascal reintroduce writeonly default index private requires dispid message protected residentКак и зарезервированные слова, стандартные директивы в окне Редактора кода Delphi выделяются жирным шрифтом, но тем не менее вы можете переопределить любую стандартную директиву, т. е . объявить одноименный идентификатор, но учитывайте, что слова read и write считаются зарезервироваными только в контексте объявления свойства, а слова private, protected, public, published, automated считаются зарезервированными внутри объявления класса и считаются стандартными директивами - вне объявления.
Идентификаторы - это имена констант, переменных, меток, типов, объектов, классов, свойств, процедур, функций, модулей, программ и полей в записях. Идентификаторы могут иметь произвольню длину, но значащими (уникальными в области определения) являются только первые 63 символа. Идентификатор всегда начинается буквой, за которой могут следовать и буквы и цифры. Напомню, что буой считается также символ подчеркивания, поэтому идентификатор может начинаться этим символом и даже сосотять только из одного или нескольких символов подчеркивания. Пробелы и специальные символы алфавита не могут входить в идентификатор.
Примеры правильных идентификаторов:
g MyProgram dynamic VASYA it_up_code43_65 _YourIdent _of_Примеры неправильных идентификаторов:
1MyProga // Начинается цифрой kolbasa#2 // Содержит специальный символ My Proga // Содержит пробел of // Зарезервированное словоВ этой статье я привел чисто справочную информацию. В следующих номерах рассылки я часто буду ссылаться на сегодняшнюю статью.
Константы и выражения мы рассмотрим на следующем уроке, также я расскажу вам про самые "частоупотребляемые" зарезервированные слова. Операциям я посвящу отдельную статью в одном из ближайших выпусков.
До свидания!
4. JavaScript: Первые шаги. Урок 3.
автор: UniQ
Здравствуйте, уважаемые подписчики! Подходит к концу август, а вместе с ним и лето в целом, жаль. За время прошедшее с выхода прошлого выпуска рассылки я немного расправился с делами, которые свалились на мою голову. Наконец-то завёл почтовый ящик. По всем вопросам обращаться не нужно, а по вопросам, возможно, возникающим по теме рассылки, пишите: post-master@rambler.ru. Ну, а на сегоднешнем уроке, как я и обещал, Вы познакомитесь с типами данных и основными операторами языка. Приступим.
JScript имеет шесть основных типов данных: числа(numbers), строки(strings), объекты(objects), логический тип(boolean) и ещё два пустой (null) и null и неопределённый (undefined). Переменные объявляются с помощью ключевого слова var, и их тип явно не указывается, интерпретатор сам установит типы переменных. Кроме того, переменную можно объявить и без использования ключевого слова var, сразу сопоставив ей значение (например MyStr = "";).
Приведу пример:
<html> <body> <script language="JavaScript"> var MyString = "Я изучаю JavaScript"; // Здесь переменной MyString будет сопоставлен тип string var MyIntNum = 5; // Здесь переменной MyIntNum будет сопоставлен тип int numeric var MyBool = true; // Здесь переменной MyBool будет сопоставлен тип boolean var MyFloatNum = 3.1415926; // Здесь переменной MyFloatNum будет сопоставлен тип float numeric var MyStrToo = "5"; // В данном случае 5 будет уже не числом, а строкой т.к. заключена // в кавычки ""! </script> </body> </html>В этом примере, да и вообще, все строки следующие за символами // и до конца текущей строки являются комментарием и браузером не отображаются. Итак, важный момент, в примере MyStrToo будет сопоставлен тип string, хотя казалось бы переменной присвоено число, но так как оно заключено в кавычки, то интерпретатор считает его строкой! То же произойдёт если переменной, допустим MyStrToo, присвоить "true" - тип будет не логический (boolean), а строковой (string). Продолжим. Так же переменную можно объявить, но не присвоить ей какого-либо значения. Например:
var MyVariable;В таком случае переменная будет иметь тип undefined, т.е. неопределённый. Так же если Вы хотите объявить переменную и инициализировать её, но, на данном этапе не хотите присваивать ей значения, то Вы можете сопоставить ей null.
var MyVariable = null;Далее. Переменные численного типа (numeric) могут быть представлены в десятичной, восьмеричной, шеснадцатеричной системах счисления. Для того что бы указать к какой системе счисления относится число следуют некоторым правилам: чтобы указать, что число записано в шестнадцатеричной системе счисления его объявляют так:
var MyHex = 0x3F;то есть перед самим числом пишут 0x, или 0X - значения не имеет, что бы указать принадлежность числа восьмеричной системе его объявляют так:
var MyOct = 0370;то есть перед самим числом добавляют ноль, а теперь попробуйте угадать какой системе счисления будет принадлежать число:
var MyNum = 0378; // ???На самом деле число будет принадлежать десятичной системе счисления, т.к. в восьмеричной нет символа 8, таких ошибок следует избегать.
Теперь немного поговорим о том какие имена можно и следут давать переменным, что бы облегчить себе существование. Итак , в JScript имена переменных могут состоять из символов английского алфавита. Имена могут начинаться с символов английского алфавита, знака "_" (прочерк) и не могут содержать служебных символов ( например &,],#). Имя не должно начинаться с цифры. JScript различает регистр букв, т.е. MyVar и myvar, это разные переменные с точки зрения интерпретатора JScript. Это всё, касательно того, что относится к правилам написания имён. Сюда стоит добавить ещё кое-что: для повышения читаемости скрипта, я советовал бы, давать не безликие имена своим переменным, типа n, s, i, а более осмысленные, и приписывать к названию переменной её тип, например при объявлении целочисленной переменной ей можно дать имя intMyVar, строковой переменной - strMyVar, этот не хитрый приём позволит избежать проблем с несовпадением типов. Теперь давайте рассмотрим операторы языка. Начнём с арифметических, это:
var intVar1 = 3.5; // для примера var intVar2 = 2; // var intVar3; // - вычитание; intVar3 = intVar1 - intVar2; // intVar3 = 1.5 + сложение; intVar3 = intVar1 + intVar2; // intVar3 = 5.5 ++ инкремент; intVar2++ // intVar2 = 3 -- декремент; intVar2-- // intVar2 = 1 было 3 * умножение; intVar3 = intVar1 * intVar2; // intVar3 = 7 / деление; intVar3 = intVar1 / intVar2; // intVar3 = 1.75 % остаток от деления; intVar3 = intVar1 % intVar2; // intVar3 = 1.5логические операции, используются в основном в условиях:
< меньше чем; > больше чем; <= меньше чем или равно; >= больше чем или равно; == равенство; != не равно; ! логическое NOT; && логическое AND; || логическое OR;и некоторые другие, а так же двоичные:
~ NOT; << двоичный сдвиг влево; >> двоичный сдвиг вправо; >>> беззнаковый сдвиг вправо; & двоичное AND; ^ двоичное XOR; | двоичное OR.Это неполный список операторов, которые поддерживает интерпретатор JScript. Также есть и составные например intVar1+=intVar2, что равносильно выражению: intVar1 = intVar1 + intVar2; Но нам они пока что не понадобятся, я поясню их назначение в процессе изучения JScript. На этом я заканчиваю сегодняшний урок. Если у Вас возникли вопросы по сегодняшнему или прошлым урокам пишите: post-master@rambler.ru
Не боги горшки обжигают...
До свидания!
5. Секреты Windows: Системный реестр.
автор: Rasa
Приветствую Вас, мои читатели!
Сегодня, в этой статье я расскажу Вам о том, как назначить дискам свои значки, а не те, которыми "наградила" их Windows. Вторым делом научимся назначать любым папкам свои иконки.
Так вот, назначить каждому диску свою иконку можно следующими способами:
Cпособ первый: Создаем файл autorun.inf в корневом каталоге диска и пишем в него:
[Autorun] icon=icon.icoЕсли же Вы пожелаете, чтобы при щелчке на значок диска запускалась какая-нибудь программа, то добавьте строку "open=yourprogram.exe", где yourprogram.exe - Ваша программа.
Но, поверьте мне, этот способ не для нас с Вами. Мы поступим более "красиво" :)
Способ второй: Изменим значок диска через реестр. К примеру, назначим иконку C:\Soul\Icons\Computer\Hard\HardDisk.ico диску C.
Откройте раздел реестра
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\explorerВ нем создайте ветвь (по умолчанию Windows не создает ее) DriveIcons\С\DefaultIcon
где С - имя диска. В параметре по умолчанию (@) укажите путь к значку. Здесь я сообщу Вам, что Windows умеет извлекать значки из разных файлов - заметно это по тому, что исполняемые файлы отображаются в Проводнике разными иконками. И для того, чтобы указать диску значок, например, который содержит в себе файл explorer.exe мы пишем explorer.exe,0. То есть указываем файл и сразу после запятой указываем номер иконки (некоторые файлы могут нести в себе больше одного значка). Возьмем тот же explorer.exe - Вы можете написать explorer.exe,1 или explorer.exe,3. Иконки содержат в себе только одну картинку - саму себя. По крайней мере я еще не встречал иконок, которые содержат в себе больше одного рисунка :). Не перепутайте с тем, что значки иногда несут в себе несколько вариантов одной картинки: одни для разных цветовых палитр (например, High Color или True Color), а другие для разных режимов отображения (например, 16x16, 32x32 или 48x48). Так вот, у Вас должно получиться следующее:
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\explorer\DriveIcons\C\DefaultIcon @="C:\Soul\Icons\Computer\Hard\HardDisk.ico,0"Напомню, что @ - это символическое обозначение параметра по умолчанию. Перезагружать компьютер не требуется, просто обновите (горячая клавиша F5) папку 'Мой компьютер'. Изменения сразу вступят в силу.
Теперь попробуем назначить любой папке другую иконку - "нестандартную". Здесь также есть два пути - один через реестр, а другой - не затрагивая его. Наглядный пример папок с другими значками - C\Windows\Font или C:\Windows\History. Сначала выберем папку, например, C:\GTA3 и сделаем ее системной. В Проводнике этого сделать нельзя, зато можно в Dos Navigator'e или с помощью стандартной утилиты Attrib:
C:\Windows\Command\Attrib.exe (Attrib.exe +S C:\GTA3).Способ первый: Создаем в разделе HKEY_CLASSES_ROOT\CLSID раздел с именем типа {XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}, где X ≈ это любая цифра или латинская буква от A до F (в общем, 32 шестнадцатеричные цифры) (название раздела, разумеется, не должно совпадать с уже имеющимися ClsId-разделами). Кстати, "ClsId" значит идентификатор класса, он представляет из себя 128 битовый (16 байтовый) GUID. GUID означает Globally Unique Identifier (Глобальный Уникальный Идентификатор) и является элементом, заимствованным из спецификации DCE Open Software Foundation (OSF) (Открытое Программное Обеспечение). Уникальность номера GUID статически гарантированна на протяжении времени, превышающим время существования вселенной. Замечу, что GUID очень часто используется в спецификации OLE. Так вот, в этом разделе создадим ветку DefaultIcon и в параметре по умолчанию напишем путь к файлу с желаемой иконкой. Например, пусть ClsId будет {00AF0111-0000-0010-8000-00AA00389B7F}, а значок - C:\Soul\Icons\Computer\Shell\Folder.ico,0 тогда у Вас должно получится следующее:
HKEY_CLASSES_ROOT\CLSID\{00AF0111-0000-0010-8000-00AA00389B7F} @="C:\Soul\Icons\Computer\Shell\Folder.ico,0"Теперь создадим в папке C:\GTA3 файл desktop.ini следующего содержания:
[.ShellClassInfo] CLSID={XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}где {XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX} должно совпадать с именем созданного нами раздела (в примере {00AF0111-0000-0010-8000-00AA00389B7F}). Готово. И здесь тоже изменения сразу вступят в силу.
Способ второй: Второй способ гораздо изящнее и удобнее. Именно так и назначает папкам иконки программа Microangelo. Сделав папку системной, создадим в ней файл desktop.ini, содержащий такой текст:
[.ShellClassInfo] InfoTip=Этот текст будет отображаться при наведении мышкой на папку. IconFile=myfolder.ico IconIndex=0И все! Содержание параметра InfoTip будет отображаться при наведении мышкой на папку и справа от папки при ее выборе (разумеется если установлен флажок 'Вид\Как веб страница'). Параметр IconFile несет в себе путь к иконке и ее имя, причем, если иконка в этой же папке, можно просто указать ее имя, не указывая пути (как в примере - myfolder.ico). Что за IconIndex - я думаю, Вы уже догадались - это индекс значка - я рассказывал Вам о нем выше.
Что ж, очень хочется, чтобы мои советы Вам понравились. Лично я 3-4-ем папкам у себя на компьютере назначил другие значки - это помогает, когда папок очень много и приходится прочитывать имена всех папок. А со значками проще - просто открываешь папку и сразу видно твои - вот Медведь, вот Звезда, а вот Флажок :)
До скорой встречи!
6. Программирование на Delphi: Регулирование громкости.
автор: Вий
Здравствуйте, дорогие читатели... В этой статье я расскажу вам, как можно программно увеличить или уменьшить громкость звука в Windows. Для этого нужно воспользоваться функциями waveOutGetVolume и waveOutSetVolume.
Каждая из функций принимает два параметра: дескриптор устройства и, собственно, уровень громкости.
Дескриптор устройства можно получить с помощью функции mciGetDeviceID, принимающей в качестве параметра название устройства (PChar), 'all' - для всех устройств. Также вместо использования этой функции для всех устройств можно использовать константу MCI_ALL_DEVICE_ID.
Второй параметр - уровень громкости звука. Тип DWORD, причем старшее слово - уровень громкости для правого канала, а младшее, соответственно - для левого.
Разберем пример. Для этого поместим на форме два компонента TrackBar. Ниже приводятся их свойства:
object TrackBar1: TTrackBar Width = 25 Height = 150 Max = 65535 Orientation = trVertical Frequency = 1310 Position = 0 OnChange = TrackBar1Change end object TrackBar2: TTrackBar Width = 49 Height = 33 Max = 100 Min = -100 Orientation = trHorizontal Frequency = 100 Position = 0 OnChange = TrackBar1Change end;Далее рассмотрим обработчик событий для этих компонентов:
procedure TVolumeForm.TrackBar1Change(Sender: TObject); var i, j : Integer; begin i := (not TrackBar1.Position) and $FFFF; if TrackBar2.Position<0 then begin j := i; i := round(i*(abs(TrackBar2.Position + 100)/100)); end else j := round(i*(abs(TrackBar2.Position - 100)/100)); i := (i shl 16) or j; waveOutSetVolume(mciGetDeviceID(''), i); end;При создании формы прочитаем уровни громкости для каждого из каналов:
procedure TVolumeForm.FormCreate(Sender: TObject); var i, j : DWord; begin waveOutGetVolume(mciGetDeviceID(''), @i); if (i shr 16) < (i and $FFFF) then begin j := round(((i shr 16)/((i and $FFFF) or 1))*100) - 100; i := not i and $FFFF; end else begin j := abs(round(((i and $FFFF)/((i shr 16) or 1))*100) - 100); i := not i shr 16; end; TrackBar1.Position := i; TrackBar2.Position := j; end; end.Эти функции определены в модуле MMSystem. Вы можете использовать в своих программах этот прием, или придумаете свой... :)
До встречи.
7. Как с нами связаться.
Возможно у Вас есть пожелания по улучшению рассылки или Вы, на
страницах нашей рассылки, хотели бы увидеть материалы по другим
областям программирования, предлагайте, мы рассмотрим и учтём их.
Ведь эти статьи пишутся программистами для программистов!
Ждем ваших отзывов.
Rasa: rasa@fromru.com
UniQ: post-master@rambler.ru
http://subscribe.ru/
E-mail: ask@subscribe.ru |
Отписаться
Убрать рекламу |
В избранное | ||