Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

ExCode.ru - программирование на высоком уровне - выпуск №3


Информационный Канал Subscribe.Ru

ExCode.ru - программирование на высоком уровне
Выпуск №3 ( 2005.08.13 )
Здравствуйте, уважаемые подписчики!
Хочу сообщить, что начиная с этого выпуска мы будем публиковать не все новости, а только 10 самых популярных за прошедшую неделю, так что если Вы хотите узнать и другие новости, то ждем Вас на нашем сайте ( ExCode.ru ). Также мы решили публиковать не ту статью, которая понравилась нам, а ту которую больше всего читают. Думаю, что это будет справедливо. Как всегда свои отзывы присылайте мне. ( ledworm@excode.ru ).

Мы ждем Вас в гости к нам на сайт www.ExCode.ru

Новости копьютерного мира:
2005-08-06    В ядре Windows 2000 выявлена неуязвимая уязвимость
В ядре Windows 2000 выявлена опасная уязвимость, которую, вероятно, невозможно блокировать в принципе. Возможно, ей подвержены и другие операционные системы Microsoft.

2005-08-06    Google приходит в Россию
Интернет-компания Google начинает деятельность в России.

2005-08-06    Мнения поисковых машин разделились
Результаты поиска в различных поисковых машинах все больше отдаляются друг от друга. Сейчас поисковые выдачи отличаются друг от друга гораздо сильнее, чем это было несколько месяцев назад.

2005-08-06    "Лаборатория Касперского" представила на рынке США антивирус для Linux
"Лаборатория Касперского", российский производитель антивирусного ПО, продолжает штурм заграничных рынков. Последней разработкой компании стал пакет антивирусных фильтров для почтовых и файл-серверов под управлением Linux, Unix и FreeBSD.

2005-08-08    Windows Vista: первый вирус
Автралийский вирусописатель опубликовал код, включающий 5 концепт-вирусов, нацеленных на Microsoft Shell.

2005-08-08    Microsoft выпустит шесть новых патчей для Windows
Компания Microsoft опубликовала предварительную информацию о выпуске обновлений для своих продуктов в августе 2005 года.

2005-08-08    Microsoft выпустила средство цензурирования документов Word
Компания Microsoft выпустила любопытный плагин для текстового процессора Word 2003. Называется он Word Redaction, а его основная функция является защита конфиденциальной информации от посторонних глаз. Весь секретный текст будет закрыт черными полосами - как в письмах и газетах военного времени, подвергнутых цензуре.

2005-08-08    Google патентует рекламные вставки в RSS
Google подала в патентное бюро США заявку на технологию рекламных вставок в потоки RSS.

2005-08-08    Сбербанк: новая ИТ-инфраструктура кредитования
Компания Cognitive Technologies объявляет о начале экспериментального проекта по созданию информационной инфраструктуры экспресс-кредитования Сбербанка России.

2005-08-10    Windows 2000 открыта для удаленных атак
Серьезная уязвимость была обнаружена в основной компоненте Windows 2000, ни отключить которую, ни временно блокировать не представляется возможным. Уязвимость позволяет потенциальным злоумышленникам, используя IP-адрес компьютера, выполнить удаленную атаку и захватить контроль над ПК даже без каких-либо действий со стороны пользователя.

Статья номера:

Минимальная программа на WinAPI


Источник: http://decoding.narod.ru/api/min/min.html

Данная статья начинает серию статей, посвященных программированию в Delphi на Win API. API (Application Program Interface) - это набор функций, которые находятся в стандартных библиотеках (DLL), располагающихся в системном каталоге Windows. Операционная система предоставляет эти функции для использования каждой программе.

Что дает нам использование API функций? В первую очередь минимальные размеры получившегося приложения. Это может оказаться важным при написании таких программ как инсталляторы, при создании пачтей или при работе с графикой. Программы маленьких размеров удобно распространять через интернет. Также стоит отметить, что программы, написанные на Win API, работают быстрее, чем их "собратья", написанные с использованием классов объектно-ориентированных языков.

Первое знакомство с Win API начнем с того, что создадим окно. Просто пустое окно, которое в дальнейшем будет служить нам шаблоном. Постепенно наращивая этот шаблон, мы будем создавать более сложные приложения.

Итак, приступим. Запускаем Delphi и создаем новый проект. Нам необходимо убрать из проекта форму, для этого делаем следующее. В меню Project выбираем Remove from Project..., в появившемся окне выделяем строку Unit1 и нажимаем кнопку OK. Delphi попросит подтвердить, хотим ли мы удалить Unit1 из проекта, ответьте утвердительно. Теперь необходимо открыть файл проекта. Снова лезем в меню Project и выбираем View Source. Последний шаг, нужно удалить несколько лишних строк. Приведите файл проекта к следующему виду.


program Project1;

begin

end.


Да, это все, что должно остаться! Перед нами "чистый холст" и мы начинаем творить. Как уже упоминалось выше, API функции располагаются в динамических библиотеках, и чтобы вызвать их оттуда, нам необходимо их описать. К счастью для нас, в Delphi уже имеются модули, в которых описаны многие API функции, нам нужно просто упомянуть их в разделе uses.


program Project1;

uses
Windows, Messages;

begin

end.


Для начала нам хватит этих двух модулей. А мы продолжаем, и переходим к объявлению переменных. Когда в Windows создаётся некоторый объект, ему присваивается уникальный 32-разрядный номер, который называется дескриптором. В дальнейшем при работе с этим объектом каждой функции передаётся этот дескриптор, поэтому нам необходимо его сохранить. Для этого нам понадобится переменная типа HWND. Также потребуется переменная типа TWndClassEx, ее мы используем для того, чтобы описать создаваемый нами объект. И еще одна переменная типа TMsg будет использоваться для обработки сообщений. Наш проект принимает следующий вид.


program Project1;

uses
Windows, Messages;

var
Wc: TWndClassEx;
Wnd: HWND;
Msg: TMsg;

begin

end.


Теперь опишем оконную процедуру.


function WindowProc( Wnd: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM ): LRESULT; stdcall;
begin
case Msg of
WM_DESTROY: begin
PostQuitMessage( 0 );
Result := 0;
Exit;
end;
else
Result := DefWindowProc( Wnd, Msg, wParam, lParam );
end;
end;


Эта процедура занимается обработкой сообщений, полученных нашим приложением, и пока выглядит скромно. Когда приложение пытаются закрыть, оно получает сообщение WM_DESTROY. Получив это сообщение мы, закрываем программу. Процедура PostQuitMessage сообщает Windows, что поток, связанный с нашим приложением, сделал запрос на закрытие. Дальше все понятно. Получив любое другое сообщение, мы вызываем оконную процедуру, заданную по умолчанию, чтобы обеспечить обработку сообщения по умолчанию. Другими словами, эта функция гарантирует, что каждое сообщение будет обработано. DefWindowProc вызывается с теми же самыми параметрами, полученными оконной процедурой.

Небольшое отступление. Действие процедуры PostQuitMessage аналогично сообщению WM_QUIT, и описанную выше процедуру можно было бы написать следующим образом.


function WindowProc( Wnd: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM ): LRESULT; stdcall;
begin
case Msg of
WM_DESTROY: begin
PostMessage( Wnd, WM_QUIT, 0, 0 );
Result := 0;
Exit;
end;
else
Result := DefWindowProc( Wnd, Msg, wParam, lParam );
end;
end;


Подготовка окончена, и теперь нам пора создавать окно. Последовательность действий будет такая: описать класс создаваемого объекта, зарегистрировать этот класс в системе, создать и показать окно. Приступаем.


...

const
WndClass = 'TWinApiWnd';
WndCaption = 'Минимальная программа на Win API';

...

begin
with Wc do
begin
cbSize := SizeOf( Wc );
style := CS_HREDRAW or CS_VREDRAW;
lpfnWndProc := @WindowProc;
cbClsExtra := 0;
cbWndExtra := 0;
hInstance := hInstance;
hIcon := LoadIcon( 0, IDI_APPLICATION );
hCursor := LoadCursor( 0, IDC_ARROW );
hbrBackground := COLOR_WINDOW;
lpszMenuName := nil;
lpszClassName := WndClass;
end;
RegisterClassEx( Wc );

Wnd := CreateWindowEx( 0, WndClass, WndCaption, WS_OVERLAPPEDWINDOW,
10, 10, 300, 100, 0, 0, hInstance, nil );

ShowWindow( Wnd, SW_SHOWNORMAL );

while GetMessage( Msg, 0, 0, 0 ) do
begin
TranslateMessage( Msg );
DispatchMessage( Msg );
end;
Halt( Msg.wParam );
end.


Теперь я дам краткое описание происходящего. Начнем с описания класс объекта. Флаги CS_HREDRAW и CS_VREDRAW говорят о том, что окно должно перерисовываться при изменении вертикального или горизонтального размера. lpfnWndProc присваиваем адрес созданной нами оконной процедуры. hInstance содержит описатель экземпляра приложения (адрес начала образа exe файла в адресном пространстве). С иконкой, курсором и цветом все понятно. lpszMenuName - указатель на главное меню, которого пока нет. И последнее, lpszClassName - имя класса создаваемого объекта.

Забегая немного вперед, обращаю ваше внимание на то, что второй параметр функции CreateWindowEx имеет тоже значение, что и поле lpszClassName описываемого объекта. Они должны быть одинаковыми, поэтому я использую константу, созданную ранее. Это не обязательно, просто мне так удобнее.

Используя RegisterClassEx регистрируем описанный класс в системе. Создаем окно. Первый параметр CreateWindowEx - расширенный стиль окна. Далее идут имя класса и заголовок окна. Затем описывается стиль окна. Если посмотреть описание флага WS_OVERLAPPEDWINDOW (оно приведено ниже), мы увидим, что это комбинация нескольких флагов. Другими словами, мы сами можем определять стиль окна, используя различные комбинации, например WS_OVERLAPPED or WS_SYSMENU or WS_MINIMIZEBOX. Советую вам поэкспериментировать с этим параметром. Следующие 4 параметра отвечают за позицию и размер окна. Затем идет дескриптор окна родителя, его у нас нет, так что ставим 0. Меню у нас пока тоже нет, так что дальше тоже ставим 0. Далее идут дескриптор оконной процедуры и указатель на структуру CREATESTRUCT. Создав окно, воспользуемся процедурой ShowWindow, чтобы его показать.


{$EXTERNALSYM WS_OVERLAPPEDWINDOW}
WS_OVERLAPPEDWINDOW = (WS_OVERLAPPED or WS_CAPTION or WS_SYSMENU or
WS_THICKFRAME or WS_MINIMIZEBOX or WS_MAXIMIZEBOX);


Заканчивается все циклом обработки сообщений. Функция TranslateMessage транслирует сообщения виртуальных клавиш в символьные сообщения. Функция DispatchMessage посылает сообщения оконной процедуре. Цикл обработки сообщений может меняться в зависимости от ситуации, но эти 2 процедуры присутствуют всегда.

Наша минимальная программа готова. В следующий раз мы усовершенствуем ее, добавим меню и элементы управления, а пока это все. До скорой встречи и удачи в программировании.


Новые статьи на сайте ExCode.ru:
НазваниеРаздел
Получение статуса операций с помощью обратных вызовов BDE32FAQ » Delphi » Базы данных » BDE
Установлена ли BDEFAQ » Delphi » Базы данных » BDE
Как узнать о наличие IDAPIFAQ » Delphi » Базы данных » BDE
Как проверить, инсталирован ли BDEFAQ » Delphi » Базы данных » BDE
Зачем устанавливать BDEFAQ » Delphi » Базы данных » BDE
Совместный доступ к базе данныхFAQ » Delphi » Базы данных » BDE
Работа с большими LCK-файламиFAQ » Delphi » Базы данных » BDE
Основные ограничения IDAPIFAQ » Delphi » Базы данных » BDE
Основные ограничения BDEFAQ » Delphi » Базы данных » BDE
Как управлять сетевыми каталогами в BDEFAQ » Delphi » Базы данных » BDE
Установка BDE на клиентской машинеFAQ » Delphi » Базы данных » BDE
Освоение протокола блокировки BDEFAQ » Delphi » Базы данных » BDE
Как узнать версию BDEFAQ » Delphi » Базы данных » BDE
Создание BDE32 приложений в ptp-сетиFAQ » Delphi » Базы данных » BDE
BDE и его работа с SQL-серверами 2FAQ » Delphi » Базы данных » BDE
BDE и его работа с SQL-серверами 1FAQ » Delphi » Базы данных » BDE
Как представить данные с помощью API BDEFAQ » Delphi » Базы данных » BDE
Как записать буфер BDE на жесткий дискFAQ » Delphi » Базы данных » BDE
Обратный вызов BDEFAQ » Delphi » Базы данных » BDE
Добавление нового псевдонима функцией DbiAddAliasFAQ » Delphi » Базы данных » Alias
Динамическое создание псевдонимовFAQ » Delphi » Базы данных » Alias
Создание псевдонима с указанием пути к папке с базойFAQ » Delphi » Базы данных » Alias
Установлена ли BDE 3FAQ » Delphi » Базы данных » BDE
Установлена ли BDE 2FAQ » Delphi » Базы данных » BDE
Установлена ли BDEFAQ » Delphi » Базы данных » BDE
Удаляем BDE таблицуFAQ » Delphi » Базы данных » BDE
Копируем BDE таблицуFAQ » Delphi » Базы данных » BDE
Проинсталлирована ли BDE?FAQ » Delphi » Базы данных » BDE
Собственный диалог ввода пароля BDEFAQ » Delphi » Базы данных » BDE
Регистрируем базу данных (BDE)FAQ » Delphi » Базы данных » BDE
Буфер записей в BDEFAQ » Delphi » Базы данных » BDE
BDE и сетьFAQ » Delphi » Базы данных » BDE
Удаление записей с помощью API BDEFAQ » Delphi » Базы данных » BDE
Как добавить или изменить пользовательский ODBC DSN-источник для доступа к MS SQL-серверуFAQ » Delphi » Базы данных » Alias
Программно создаем Alias 2FAQ » Delphi » Базы данных » Alias
Программно создаем AliasFAQ » Delphi » Базы данных » Alias
Получаем информацию о псевдонимах BDEFAQ » Delphi » Базы данных » Alias
Имитируем псевдоним PdoxWIN PRIVFAQ » Delphi » Базы данных » Alias
Меняем псевдоним прямо во время выполнения программыFAQ » Delphi » Базы данных » Alias
Как изменить текущий каталог псевдонима во время выполнения приложенияFAQ » Delphi » Базы данных » Alias
Как программно задать псевдонимFAQ » Delphi » Базы данных » Alias
Описание функции DbiAddAliasFAQ » Delphi » Базы данных » Alias
Псевдонимы в DelphiFAQ » Delphi » Базы данных » Alias
Новый псевдоним на летуFAQ » Delphi » Базы данных » Alias
Как получить путь псевдонима и таблицы 4FAQ » Delphi » Базы данных » Alias
Как получить путь псевдонима и таблицы 3FAQ » Delphi » Базы данных » Alias
Как получить путь псевдонима и таблицы 2FAQ » Delphi » Базы данных » Alias
Как получить путь псевдонима и таблицыFAQ » Delphi » Базы данных » Alias
Получаем информацию обо всех имеющихся альясахFAQ » Delphi » Базы данных » Alias
Как отобразить все псевдонимы в ComboBoxFAQ » Delphi » Базы данных » Alias
Програмное создание нового DSNFAQ » Delphi » Базы данных » Alias
Как узнать расположение локальной БД по ее AliasFAQ » Delphi » Базы данных » Alias
Как создать SystemDSNFAQ » Delphi » Базы данных » Alias
Создание алиасов в DelphiFAQ » Delphi » Базы данных » Alias
Минимальная программа на WinAPIDelphi / Pascal » WinAPI
EDBEngineError - обработка исключенийFAQ » Delphi » Базы данных » BDE
Общий локальный доступ к базеFAQ » Delphi » Базы данных » BDE
Конфликт языков IDAPI German и EnglishFAQ » Delphi » Базы данных » BDE
Устанавливаем BDE 2FAQ » Delphi » Базы данных » BDE
Устанавливаем BDEFAQ » Delphi » Базы данных » BDE
Чтение OLE из BLOBFIELD ParadoxFAQ » Delphi » Базы данных » BLOBFIELD
Сохранение страницы TF1Book в BLOBFIELDFAQ » Delphi » Базы данных » BLOBFIELD
Сохранение и чтение файлов из BLOBFIELDFAQ » Delphi » Базы данных » BLOBFIELD
Сохранение TForm и всех ее свойств в BLOBFIELDFAQ » Delphi » Базы данных » BLOBFIELD
Копирование массива чисел в BLOBFIELDFAQ » Delphi » Базы данных » BLOBFIELD
Как удалить данные из BLOBFIELDFAQ » Delphi » Базы данных » BLOBFIELD
Как сохранить текст в формате RTF в TBlobFieldFAQ » Delphi » Базы данных » BLOBFIELD
[br] Как записать весь файл в BLOBFIELDFAQ » Delphi » Базы данных » BLOBFIELD
Как записать в BLOBFIELD большой текстFAQ » Delphi » Базы данных » BLOBFIELD
Как определить размер BLOBFIELDFAQ » Delphi » Базы данных » BLOBFIELD
Как в TBlobField вставить картинку из TBitmapFAQ » Delphi » Базы данных » BLOBFIELD
Изображения и BLOBFIELD в InterBaseFAQ » Delphi » Базы данных » BLOBFIELD
Получение изображения из BLOBFIELDFAQ » Delphi » Базы данных » BLOBFIELD
Запись всего потока в BLOBFIELDFAQ » Delphi » Базы данных » BLOBFIELD
Запись и чтение чисел в BLOBFIELDFAQ » Delphi » Базы данных » BLOBFIELD
Загрузка изображения в BLOBFIELDFAQ » Delphi » Базы данных » BLOBFIELD
BLOBFIELD в InterbaseFAQ » Delphi » Базы данных » BLOBFIELD
BLOBFIELD в качестве BITMAPFAQ » Delphi » Базы данных » BLOBFIELD
Определение формата и размера dBase-поляFAQ » Delphi » Базы данных » DBASE и DBF
Как узнать текущий номер записиFAQ » Delphi » Базы данных » DBASE и DBF
Конвертирование форматов в DOS DBF файлахFAQ » Delphi » Базы данных » DBASE и DBF
Как отобразить все удаленные записи таблицыFAQ » Delphi » Базы данных » DBASE и DBF
Отображение удаленных записей в таблице dBASEFAQ » Delphi » Базы данных » DBASE и DBF
Отображение меток удаленных записей в dBASE-файлахFAQ » Delphi » Базы данных » DBASE и DBF
Как создать новые индексы для полей с истекшей датойFAQ » Delphi » Базы данных » DBASE и DBF
Запаковка таблиц dBASE 4FAQ » Delphi » Базы данных » DBASE и DBF
Запаковка таблиц dBASE 3FAQ » Delphi » Базы данных » DBASE и DBF
Запаковка таблиц dBASE 2FAQ » Delphi » Базы данных » DBASE и DBF
Запаковка таблиц dBASE 1FAQ » Delphi » Базы данных » DBASE и DBF
Как отменить удаление dBASE записиFAQ » Delphi » Базы данных » DBASE и DBF
Удаление записей в .DBFFAQ » Delphi » Базы данных » DBASE и DBF
Как определить номер записи в таблице dBASEFAQ » Delphi » Базы данных » DBASE и DBF
Обработка ошибки "index not found"FAQ » Delphi » Базы данных » DBASE и DBF
Компонент Tdbf для доступа к файлам DBFFAQ » Delphi » Базы данных » DBASE и DBF
Как создать таблицу dBASE во время работы программыFAQ » Delphi » Базы данных » DBASE и DBF
Как переместить все данные из DBF в БДFAQ » Delphi » Базы данных » DBASE и DBF
Что делать если индекс БД находится в другом каталогеFAQ » Delphi » Базы данных » DBASE и DBF
Как восстановить запись dBase FAQ » Delphi » Базы данных » DBASE и DBF
Взаимодействие DBase и BDEFAQ » Delphi » Базы данных » DBASE и DBF
Поиск с помощью DBFSeek и DBFLocateFAQ » Delphi » Базы данных » DBASE и DBF
Индексы выражений базы данных DBASEFAQ » Delphi » Базы данных » DBASE и DBF
Как создать таблицу FoxPRO в DelphiFAQ » Delphi » Базы данных » FoxPRO
Шифрование полей таблицы InterbaseFAQ » Delphi » Базы данных » Interbase
UDF для InterBaseFAQ » Delphi » Базы данных » Interbase
DBExpress-Connection в Run-TimeFAQ » Delphi » Базы данных » Interbase
Программное создание и удаление базы Interbase, и выполнение SQL-скриптовFAQ » Delphi » Базы данных » Interbase
Программное создание и удаление базы Interbase, и выполнение SQL-скриптовFAQ » Delphi » Базы данных » Interbase
Программное сжатие базы InterbaseFAQ » Delphi » Базы данных » Interbase
ошибка - udf not defined, при регистрации UDFFAQ » Delphi » Базы данных » Interbase
Ошибка IBCheck после удаления Interbase Server 5.0FAQ » Delphi » Базы данных » Interbase
Безболезненный переход с Oracle на InterbaseFAQ » Delphi » Базы данных » Interbase
Назначение прав на пользование таблицей InterBase FAQ » Delphi » Базы данных » Interbase
Установка клиента InterBaseFAQ » Delphi » Базы данных » Interbase
Текущие дата и время в InterbaseFAQ » Delphi » Базы данных » Interbase
Включение COLLATE PXW_CYRL по умолчанию в InterBaseFAQ » Delphi » Базы данных » Interbase
Как сделать backup базы InterbaseFAQ » Delphi » Базы данных » Interbase
Поддержка русского языка в InterBaseFAQ » Delphi » Базы данных » Interbase
Автоматическое подключение к локальной InterBaseFAQ » Delphi » Базы данных » Interbase
Interbase: Автоинкрементальные поля 3FAQ » Delphi » Базы данных » Interbase
Interbase: Автоинкрементальные поля 2FAQ » Delphi » Базы данных » Interbase
Interbase: Автоинкрементальные поляFAQ » Delphi » Базы данных » Interbase
Чтение и запись с помощью OLE в InterbaseFAQ » Delphi » Базы данных » Interbase
Установка Interbase и добавление нового пользователяFAQ » Delphi » Базы данных » Interbase
Как создать базу данных на локальном MSSQL2000 сервереFAQ » Delphi » Базы данных » MSSQL
Преобразование строки в строку для MSSQLFAQ » Delphi » Базы данных » MSSQL
Преобразование даты в строку для MSSQLFAQ » Delphi » Базы данных » MSSQL
Преобразование типа boolean в строку для MSSQLFAQ » Delphi » Базы данных » MSSQL
Преобразование типа boolean в Y или N для MSSQLFAQ » Delphi » Базы данных » MSSQL
Связь от MSSQL-сервера к клиентуFAQ » Delphi » Базы данных » MSSQL
Подгонка даты или времени к различным форматам SQL-сервераFAQ » Delphi » Базы данных » MSSQL

Новые файлы на сайте ExCode.ru:
НазваниеРазделРазмерСсылки
Tdbf
Компонент TDBF предназначен для непосредственного доступа (без использования BDE, ODBC и т.п.) к файлам формата dbf версий dBase III+, dBase IV, dBase V, dBase for Windows. Работает с Delphi 3..6 под ...
Компоненты » Delphi18 kb  Скачать
Анекдоты о программистах:

Скачивание файла.
Размер: неизвестно (скачено 45%).


От: Святой Петр
Кому: Всем на Земле
Дата Октябрь, 1999 от рождества Христова
Тема: Не помирать!
Для ускорения регистрационного процесса у врат Рая, мы стали использовать Microsoft Access, после чего у нас начались серьeзные проблемы. А посему, пожалуйста, не помирайте пока!


Больница совершила недопустимую операцию и будет закрыта...


Из беседы юзеров: "Как включить Windows, не включая компьютер?"


Ну и запросы у вас - сказала база данных и повисла.


Упакуй, Господи, душу его...


До чего же несовершенна техника! Человеку, чтобы прийти в себя, необходимо два пальца, а компьютеру - три.


Вежливое обращение к Компьютеру: "Ваше Висючество!"


Hаши баги мы для совместимости сохраним в следующих версиях.


Окошко: "Программа Microsoft не совершила никакой ошибки, но по привычке будет закрыта".

Послесловие:
Предлагаем обменяться ссылками с сайтами компьютерной тематики (сайты на бесплатных хостингах не принимаются).

Разместите нашу ссылку у себя на сайте и пришлите письмо с адресом страницы на которой размещена наша ссылка и кодом своей ссылки. После проверки модератором мы добавим Ваш код на свой сайт.

Код нашей ссылки: <a href="http://www.excode.ru" >ExCode.ru - программирование на высоком уровне: программы, статьи, исходники, компоненты</a>

Код нашего банера (88x31): <a href=http://www.excode.ru/><img src=http://www.excode.ru/excode.gif width=88 height=31 border=0 alt="ExCode.ru - программирование на высоком уровне: программы, статьи, исходники, компоненты"></a>

Спасибо за внимание!
Ведущий рассылки: LedWorm
ExCode.ru 2005

Subscribe.Ru
Поддержка подписчиков
Другие рассылки этой тематики
Другие рассылки этого автора
Подписан адрес:
Код этой рассылки: comp.soft.prog.excode
Отписаться
Вспомнить пароль

В избранное