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

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


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

ExCode.ru - программирование на высоком уровне
Выпуск №4 ( 2005.08.20 )
Здравствуйте, уважаемые подписчики!
Сегодня в выпуске самые интересные новости за последнюю неделю, любопытная статья по Delphi, список новых статей и файлов на сайте ExCode.ru и новая порция анекдотов о компьютерщиках. Приятного вам чтения!

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

Новости копьютерного мира:
2005-08-13    Microsoft капитулировала перед пиратами
После помпезного запуска службы принудительной "проверки подлинности" на сервере Microsoft, не дававшей клиентам с нелегальными копиями Windows скачивать приложения и обновления с сайта компании, уже через несколько часов свое решение проблемы в Сети представили и хакеры.

2005-08-13    Microsoft внесла поправки в последнюю версию заплаток
Спустя сутки после выхода заплаток, решающих проблемы с критическими уязвимостями Internet Explorer, Microsoft обнаружила, что в пакете заплаток присутствует ошибка и блокировала процесс обновления.

2005-08-15    AMD выпускает программу эмуляции AMD64
9 августа 2005 г. компания AMD объявила о том, что в ближайшее время будет выпущена SimNow - высокопроизводительная программа эмуляции AMD64, предоставляющая разработчикам приложений доступ к функциям следующего поколения процессоров AMD, включая технологию виртуализации AMD с кодовым названием Pacifica.

2005-08-14    Internet Explorer 7.0 официально стал доступен
Как известно, вместе с первой бета-версией Windows Vista вышел и встроенный в нее предварительный IE 7.0. Отдельная же версия этого web-браузера с самого начала отсутствовала. Теперь же, два дня спустя после выхода Vista Beta 1, стала доступна для скачивания и самостоятельная версия IE 7.0 Beta 1. Среди наиболее заметных нововведений - переход на многостраничный режим работы в едином окне браузера (как в Opera, Maxthon и др.). При этом не меньший интерес представляют и новые технологии, которые будут поддерживаться этим web-браузером. Среди таковых называются PNG (Portable Network Graphics) и IDN (Internationalized Domain Names). Также был усовершенствован пользовательский интерфейс Secure Sockets Layer (SSL).

2005-08-14    Проверку подлинности сломали в течение 24 часов
Продолжая тему попыток увеличения продаж Microsoft, стоит сообщить и о судьбе программы по автоматической проверке подлинности установленной на ПК пользователя Windows. Если ранее проверка подлинности Windows при скачивании обновлений была добровольной, то в понедельник на прошлой неделе Microsoft сообщила, что эта процедура (в рамках акции Windows Genuine Advantage) становится обязательной. Владельцам пиратских копий отныне доступны лишь самые критические для безопасности обновления.

2005-08-15    Novell предлагает простой способ перехода на Linux
Компания Novell объявляет о готовности усовершенствованной версии пакета сетевых служб Novell Open Enterprise Server с повышенной производительностью и улучшенными средствами миграции. Теперь Open Enterprise Server еще больше облегчает заказчикам NetWare и Windows единовременный или постепенный перевод на Linux ключевых сетевых служб для рабочих групп, таких как службы печати и файлов. В результате предприятия смогут получить все выгоды гибкого и экономически эффективного перехода на Linux.

2005-08-15    Стоимость перехода с Windows на Linux - слишком велика?
Большинство компаний еще не готовы полностью перейти на операционную систему Linux и параллельные разработки с открытым исходным кодом, поскольку переквалификация персонала обойдется во вполне ощутимые суммы, сообщила проводившая недавний опрос компания Gartner.

2005-08-15    Opera скрещивает браузер и поисковик
Компания Opera Software заключила деловое соглашение с поисковиком Answers.com.

2005-08-18    Хакеры обходят "чиповую защиту" MacOS X
В Сети появились инструкции, указывающие, как обойти "чиповую защиту" при установке MacOS X на платформу PC.

2005-08-18    Microsoft изменил эмблему Internet Explorer 7
Компания Microsoft определилась с графикой Internet Explorer 7. Изменению подвергся не только интерфейс в целом, но и эмблема браузера.

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

Создание главного меню средствами Win API


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

Сегодня мы добавим в наше минимальное приложение главное меню. Но прежде рассмотрим некоторые API функции для работы с ним.

CreateMenu
function CreateMenu: HMENU; В случае успешного выполнения, функция возвращает дескриптор созданного меню, иначе возвращает 0.

CreatePopupMenu
function CreatePopupMenu: HMENU; Как и в случае с CreateMenu, после успешного выполнения, функция возвращает дескриптор созданного меню, иначе возвращает 0.

AppendMenu
function AppendMenu( hMenu: HMENU; uFlags, uIDNewItem: UINT; lpNewItem: PChar ): BOOL; Функция AppendMenu добавляет новый элемент (пункт) к концу указанной строки меню, раскрывающегося меню или подменю. Эту функцию можно использовать, чтобы определить содержание, появление, и поведение пункта меню. hMenu Идентификатор строки меню, раскрывающееся меню или подменю, которое будет изменено. uFlags Определяет флажки, управляющие появлением и поведением нового пункта меню. Этот параметр может быть комбинация значений. uIDNewItem Определяет или идентификатор нового пункта меню или, если uFlags параметр установлен в MF_POPUP, дескриптор раскрывающегося меню или подменю. lpNewItem Определяет содержание нового пункта меню.

InsertMenu
function AppendMenu( hMenu: HMENU; uPosition, uFlags, uIDNewItem: UINT; lpNewItem: PChar ): BOOL; Функция InsertMenu вставляет новый пункт в меню, перемещая другие элементы меню вниз. Параметры этой функции те же, что и у AppendMenu, за одним исключением. uPosition Определяет место, в которое должен быть вставлен новый пункт меню.

SetMenu
function SetMenu( hWnd: HWND; hMenu: HMENU ): BOOL; Функция SetMenu связываем новое меню с окном. hWnd Идентификатор окна, которому должно быть назначено новое меню. hMenu Идентификатор меню, которое должно быть назначено окну. Если этот параметр нулевой, текущее меню окна удаляется.

DrawMenuBar
function DrawMenuBar( hWnd: HWND ): BOOL; Функция DrawMenuBar перерисовывает строку меню указанного окна. hWnd Идентификатор окна, чья строка меню нуждается в изменении.

EnableMenuItem
function EnableMenuItem( hMenu: HMENU; uIDEnableItem, uEnable: UINT ): BOOL; Функция EnableMenuItem включает/отключает указанный пункт меню. hMenu Идентификатор меню. uIDEnableItem Определяет пункт меню, состояние которого нужно изменить. uEnable Определяет флажки, управляющие состоянием пункта меню.

CheckMenuItem
function CheckMenuItem( hMenu: HMENU; uIDEnableItem, uEnable: UINT ): BOOL; Функция CheckMenuItem помечает пункт меню или снимает пометку (пометка в виде галочки). hMenu Идентификатор меню. uIDCheckItem Определяет пункт меню, чей атрибут пометки должен быть установлен в соответствии со значением параметра uCheck. uCheck Определяет флажки, управляющие состоянием пункта меню.

Более полную и подробную информацию смотрите в хэлпе. Делая эту программу, я нашел пару способов создать меню (они не очень сильно отличаются друг от друга, но оба имеют право на существование). На первом способе я остановлюсь поподробнее, а, говоря о втором, просто скажу, чем он отличается от первого.

Главное меню программы, это строка, которая располагается в верхней части формы. Она состоит из пунктов, нажатие на любой из них приведет к раскрытию подменю, принадлежащего данному пункту. Это всплывающее меню в Windows называется PopupMenu. Обратите внимание, понятие PopupMenu в Delphi и Windows различаются. В Windows PopupMenu - это подменю, принадлежащее другому пункту меню (который отмечается треугольником справа от текста пункта) или одному из пунктов главного меню. В Delphi PopupMenu — это меню, которое может "всплывать" в любой точке формы. Осознав вышесказанное, приступаем к работе.

Откроем шаблон, написанный в прошлый раз, и дополним список констант и переменных


const
WndClass = 'TWinApiWnd';
WndCaption = 'Главное меню формы на Win API';
mFile = 100;
mEdit = 200;
mCheck = 300;
sExit = 101;
sCopy = 201;
sCut = 202;
sPaste = 203;
sSelect = 301;
sNextMenu = 302;
sSecondLevel = 311;
SEPARATOR = 1;

var
Wc: TWndClassEx;
Wnd: HWND;
Msg: TMsg;
MainMenu: HMENU;
SubMenuFile: HMENU;
SubMenuEdit: HMENU;
SubMenuCheck: HMENU;
SubMenuSecondLevel: HMENU;
Check: boolean = false;


Сначала разберемся с константами. Каждый пункт меню должен иметь свой уникальный идентификационный номер. Так как именно по этим номерам мы и будем работать с меню, удобнее всего оформить их как константы. Идея следующая. В главном меню будет 3 пункта: Menu, Edit и Check. Константы для него начинаются с буквы m и имеют номера 100, 200 и 300 соответственно. Каждому из этих пунктов будет сопоставлено свое подменю. Константы для них начинаются с буквы s и номеруются следующим образом: те, которые относятся к первому пункту, начинаются со 100+1, те, которые относятся ко второму пункту, начинаются с 200+1, ну и по аналогии, те, которые относятся к третьему пункту, начинаются с 300+1. В третьем пункте будет подменю второго уровня, константа для него равна 300+10+1. Отдельное значение имеет константа SEPARATOR, это просто разделитель между пунктами подменю.

Переходим к разделу var. Здесь появилось 5 переменных типа HMENU, они содержат Hendle соответствующего меню (какого, понятно из их названия). Переменная Check показывает, установлен или сброшен пункт меню (читайте дальше, и все поймете).

При добавлении нового пункта приходится выполнить ряд действий, в том числе инициализацию структуры MENUITEMINFO. Так как эти действия нужно производить при добавлении каждого пункта, чтобы избавиться от избыточности кода, оформим эти действия в виде отдельной процедуры.


function CreateMenuItem( hMenu, SubMenu: HMENU; Cap: PChar;
_uID, _wID: UINT; Sep: boolean ): boolean;
var
Mi: MENUITEMINFO;
begin
with Mi do
begin
cbSize := SizeOf( Mi );
fMask := MIIM_STATE or MIIM_TYPE or MIIM_SUBMENU or MIIM_ID;
if not Sep then
fType := MFT_STRING
else
fType := MFT_SEPARATOR;
fState := MFS_ENABLED;
wID := _wID;
hSubMenu := SubMenu;
dwItemData := 0;
dwTypeData := Cap;
cch := SizeOf( Cap );
end;
Result := InsertMenuItem( hMenu, _uID, false, Mi );
end;


Поясню входные параметры функции. hMenu - меню, в которое добавляется новый пункт; SubMenu - связанное с этим пунктом подменю (если оно есть); Cap - заголовок нового пункта; _uID - всегда 0 (этот параметр используется в функции InsertMenuItem); _wID - идентификатор, связанный с данным пунктом; Sep - признак, является ли новый пункт разделителем или нет.

Наше приложение должно реагировать на выбор того или иного пункта меню. Дополним оконную процедуру следующим образом:


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;
WM_COMMAND: begin
case LOWORD( wParam ) of
sExit: PostMessage( Wnd, WM_QUIT, 0, 0 );
sCopy: MessageBox( Wnd, 'Пункт: Copy', 'Меню: Edit', 0 );
sCut: MessageBox( Wnd, 'Пункт: Cut', 'Меню: Edit', 0 );
sPaste: MessageBox( Wnd, 'Пункт: Paste', 'Меню: Edit', 0 );
sSelect: begin
if Check then
CheckMenuItem( SubMenuCheck, sSelect, MF_UNCHECKED )
else
CheckMenuItem( SubMenuCheck, sSelect, MF_CHECKED );
Check := not Check;
end;
sSecondLevel: MessageBeep( MB_ICONHAND );
end;
end;
else
Result := DefWindowProc( Wnd, Msg, wParam, lParam );
end;
end;


При выборе пункта Exit (константа sExit) программа будет закрыта. Выбор пунктов Copy, Cut, Paste (константы sCopy, sCut и sPaste соответственно) приведет к появлению сообщения, соответствующего выбранному пункту. Пункт Select (константа sSelect) работает аналогично TCheckBox, то есть может быть установлен или сброшен. При выборе пункта Beep (константа sSecondLevel) мы услышим звуковой сигнал.

Теперь для создания меню все готово. Приступаем.


begin
// Создаем меню
MainMenu := CreateMenu;
// Заполняем структуру TWndClassEx
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 := @MainMenu;
lpszClassName := WndClass;
end;
// Регистрируем класс в системе
RegisterClassEx( Wc );
// Создаем подменю
SubMenuFile := CreatePopupMenu;
SubMenuEdit := CreatePopupMenu;
SubMenuCheck := CreatePopupMenu;
SubMenuSecondLevel := CreatePopupMenu;
// Создаем окно
Wnd := CreateWindowEx( 0, WndClass, WndCaption, WS_OVERLAPPEDWINDOW,
10, 10, 300, 100, 0, MainMenu, hInstance, nil );
// Создаем пункты главного меню
CreateMenuItem( MainMenu, subMenuFile, 'File', 0, mFile, false );
CreateMenuItem( MainMenu, subMenuEdit, 'Edit', 0, mFile, false );
CreateMenuItem( MainMenu, subMenuCheck, 'Check', 0, mFile, false );
// Подменю для пункта File
CreateMenuItem( SubMenuFile, 0, 'Exit', 0, sExit, false );
// Подменю для пункта Edit
CreateMenuItem( SubMenuEdit, 0, 'Copy', 0, sCopy, false );
CreateMenuItem( SubMenuEdit, 0, 'Cut', 0, sCut, false );
CreateMenuItem( SubMenuEdit, 0, '', 0, SEPARATOR, true );
CreateMenuItem( SubMenuEdit, 0, 'Paste', 0, sPaste, false );
// Подменю для пункта Check->NextMenu
CreateMenuItem( SubMenuSecondLevel, 0, 'Beep', 0, sSecondLevel, false );
// Подменю для пункта Check
CreateMenuItem( SubMenuCheck, 0, 'Select', 0, sSelect, false );
CreateMenuItem( SubMenuCheck, SubMenuSecondLevel, 'NextMenu', 0, sNextMenu, false );
// Перерисовываем меню
DrawMenuBar( Wnd );
// Показываем окно
ShowWindow( Wnd, SW_SHOWNORMAL );

// Цикл обработки сообщений
while GetMessage( Msg, 0, 0, 0 ) do
begin
TranslateMessage( Msg );
DispatchMessage( Msg );
end;
Halt( Msg.wParam );
end.


Разбираемся. Первым делом создаем главное меню. Указатель на него присваиваем полю lpszMenuName структуры Wc (раньше оно было равно nil). После регистрации класса в системе создаем подменю. При создании окна, параметр hMenu функции CreateWindowEx равен MainMenu (Handle созданного меню, а не 0, как было в шаблоне). После создания всех пунктов, перерисовываем меню при помощи функции DrawMenuBar.

Теперь второй способ создания меню. Здесь я приведу его в сокращении, и поясню произведенные изменения (полный текст программы имеется в архиве с примерами в конце статьи).


begin
// Заполняем структуру TWndClassEx
with Wc do
begin
...
lpszMenuName := nil;
...
end;
...
// Создаем меню
MainMenu := CreateMenu;
...
Wnd := CreateWindowEx( 0, WndClass, WndCaption, WS_OVERLAPPEDWINDOW,
10, 10, 300, 100, 0, 0, hInstance, nil );
...
// Устонавливаем меню
SetMenu( Wnd, MainMenu );
...
end.


Поле lpszMenuName структуры Wc остается равным nil. Главное меню создаем после регистрации класса в системе. При создании окна, параметр hMenu функции CreateWindowEx можно оставить равным 0, т.к. здесь мы не перерисовываем меню, а назначаем его форме, используя функцию SetMenu.

Все. Теперь у нашей формы есть меню. Это оказалось совсем не сложно. До новых встреч, удачи в программировании.


Новые статьи на сайте ExCode.ru:
НазваниеРаздел
TSTATUSBAR, TCHECKBOX, TRADIOBUTTON и TBUTTON с другим лицомDelphi / Pascal » Интерфейс
Защита от SoftIceDelphi / Pascal » Общие
Создание главного меню средствами Win APIDelphi / Pascal » WinAPI
Инсталяция ODBC - Watcom SQLFAQ » Delphi » Базы данных » ODBC
Как получить дескриптор ODBC соединенияFAQ » Delphi » Базы данных » ODBC
Получить имена всех ODBC-источниковFAQ » Delphi » Базы данных » ODBC
Ошибка ODBC SQL PrepareFAQ » Delphi » Базы данных » ODBC
Настройка ODBC и псевдонимаFAQ » Delphi » Базы данных » ODBC
Настройка ODBCFAQ » Delphi » Базы данных » ODBC
Установка ODBC-драйверов в Delphi FAQ » Delphi » Базы данных » ODBC
Вопросы по BDE и SQL Links в DelphiFAQ » Delphi » Базы данных » ODBC
Соединения с ODBCFAQ » Delphi » Базы данных » ODBC
SQL Server, BDE и ODBC в DelphiFAQ » Delphi » Базы данных » ODBC
Соединение с personal OracleFAQ » Delphi » Базы данных » Oracle
Соединение BDE с OracleFAQ » Delphi » Базы данных » Oracle
Что такое Instance и DatabaseFAQ » Delphi » Базы данных » Oracle
Как в Oracle поменять compatibleFAQ » Delphi » Базы данных » Oracle
Как подключиться к Personal Oracle с помощью BDEFAQ » Delphi » Базы данных » Oracle
TOraCommentsToFL — загрузка русских наименований колонок из ERwin в DisplayLabelsFAQ » Delphi » Базы данных » Oracle
Как при выполнении операции в Oracle показать progressbarFAQ » Delphi » Базы данных » Oracle
Как соединиться с базой данных под Personal OracleFAQ » Delphi » Базы данных » Oracle
Корректная работа Personal Oracle с числами и BDEFAQ » Delphi » Базы данных » Oracle
Как напрямую работать с OracleFAQ » Delphi » Базы данных » Oracle
Создание sequence с некоторого номера в OracleFAQ » Delphi » Базы данных » Oracle
Доступ к объекту базы данных OracleFAQ » Delphi » Базы данных » Oracle
Корректное прерывание выполнение SQL-запросаFAQ » Delphi » Базы данных » Oracle
Как вывести текст с помощью DBMS_OUTPUT.PUT_LINE в режиме отладкиFAQ » Delphi » Базы данных » Oracle
Не открывается база во время отладки приложенияFAQ » Delphi » Базы данных » Oracle
Экспорт базы данных OracleFAQ » Delphi » Базы данных » Oracle
Написание программ для баз ORACLE на Delphi с помощью Client-Server FAQ » Delphi » Базы данных » Oracle
FAQ по Delphi и OracleFAQ » Delphi » Базы данных » Oracle
Нестандартные заголовкиDelphi / Pascal » Интерфейс
Пишем Screensaver в DelphiDelphi / Pascal » Мультимедиа
Приколы в Delphi: АРМАГЕДЕЦ ВИНДАМDelphi / Pascal » Примеры
Упаковка таблиц баз данных Paradox и dBaseFAQ » Delphi » Базы данных » Paradox
Как ускорить открытие таблицы ParadoxFAQ » Delphi » Базы данных » Paradox
Программное создание таблицы Paradox FAQ » Delphi » Базы данных » Paradox
Запретить появление окошка для ввода пароля в ParadoxFAQ » Delphi » Базы данных » Paradox
Ставим пароль на таблицу Paradox FAQ » Delphi » Базы данных » Paradox
После завершения работы не сохраняются изменения в базе ParadoxFAQ » Delphi » Базы данных » Paradox
Распечатка структуры таблицы ParadoxFAQ » Delphi » Базы данных » Paradox
Какой предел IDAPI для подключенных пользователей и размера файла для таблиц Paradox?FAQ » Delphi » Базы данных » Paradox
Общий доступ к данным в DBD и ParadoxFAQ » Delphi » Базы данных » Paradox
Каскадированное удаление данных с последующей проверкой целостности ParadoxFAQ » Delphi » Базы данных » Paradox
Упаковка баз DBase и Paradox в режиме RunTimeFAQ » Delphi » Базы данных » Paradox
Уменьшение даты в ParadoxFAQ » Delphi » Базы данных » Paradox
Как сменить пароль в Paradox FAQ » Delphi » Базы данных » Paradox
Паковка таблиц Paradox и восстанавление индексов FAQ » Delphi » Базы данных » Paradox
Смена LangDriver для dBase и ParadoxFAQ » Delphi » Базы данных » Paradox
Как открыть таблицу Paradox на которую установлен парольFAQ » Delphi » Базы данных » Paradox
БД Paradox в локальной сетиFAQ » Delphi » Базы данных » Paradox
Как узнать имя пользователя ParadoxFAQ » Delphi » Базы данных » Paradox
Программное изменение месторасположения .NET-файлаFAQ » Delphi » Базы данных » Paradox
Доступ к Read-only таблицам ParadoxFAQ » Delphi » Базы данных » Paradox
Ставим пароль на базу ParadoxFAQ » Delphi » Базы данных » Paradox
Доступ к записи в таблице ParadoxFAQ » Delphi » Базы данных » Paradox
Автоматическое подключение к Paradox FAQ » Delphi » Базы данных » Paradox
Ошибочные индексы под Win95 в ParadoxFAQ » Delphi » Базы данных » Paradox
Работа с сетью и ParadoxFAQ » Delphi » Базы данных » Paradox
Bytefield в базах ParadoxFAQ » Delphi » Базы данных » Paradox
TUTILITYFAQ » Delphi » Базы данных » Paradox
Функции для работы с датой в SQLFAQ » Delphi » Базы данных » SQL
Master-записиFAQ » Delphi » Базы данных » SQL
Проблемы StoredProc у SQL serverFAQ » Delphi » Базы данных » SQL
Запросы с параметрамиFAQ » Delphi » Базы данных » SQL
Не работающий SQL ORFAQ » Delphi » Базы данных » SQL
Как узнать, доступен ли сервер MSSQLFAQ » Delphi » Базы данных » SQL
Откат внутри триггераFAQ » Delphi » Базы данных » SQL
Как получить разницу между хранимой датой и текущей датойFAQ » Delphi » Базы данных » SQL
Интерактивные SQL-запросыFAQ » Delphi » Базы данных » SQL
Определить имя SQL-таблицыFAQ » Delphi » Базы данных » SQL
Зарезервированные слова Local SQLFAQ » Delphi » Базы данных » SQL
Возврат курсора после выполнения запросаFAQ » Delphi » Базы данных » SQL
Блокированная таблица в MSSQLFAQ » Delphi » Базы данных » SQL
TUpdateSQL. Одновременное выполнение нескольких SQL запросовFAQ » Delphi » Базы данных » SQL
Расширенные символы в SQLFAQ » Delphi » Базы данных » SQL
Использование SQL в DelphiFAQ » Delphi » Базы данных » SQL
Outer join FAQ » Delphi » Базы данных » SQL
Суммирование вычисляемого поля в SQLFAQ » Delphi » Базы данных » SQL
Сортировка вычисляемого поля в SQLFAQ » Delphi » Базы данных » SQL
Функция SUBSTRING в SQLFAQ » Delphi » Базы данных » SQL
Выполнение SQL с пробелами и специальными символами в имени поля/колонкиFAQ » Delphi » Базы данных » SQL
Временная таблица в Local SQLFAQ » Delphi » Базы данных » SQL
Обработка транзакций в ADO.NET 2.0.NET » C#
Реализация цикла без условных переходов и арифметических операций (assembler)Задачи » С решениями

Новые файлы на сайте ExCode.ru:
НазваниеРазделРазмерСсылки
ExGUI4UPX full (с UPX 1.25)- визуальная оболочка для программы UPX
UPX - самая известная и наверное самая лучшая программа для сжатия исполняемых файлов. Но у нее есть один недостаток - отсутствие графического интерфейса. Этот недостаток я и попытался устранить в сво...
Наши работы178 kb  Скачать
ExGUI4UPX lite - визуальная оболочка для программы UPX
UPX - самая известная и наверное самая лучшая программа для сжатия исполняемых файлов. Но у нее есть один недостаток - отсутствие графического интерфейса. Этот недостаток я и попытался устранить в сво...
Наши работы29 kb  Скачать
YuF Color Picker
статус: FreeWare

Мощный цветоподборщик для веб-дизайнеров и веб-мастеров. Работает с кодами HEX и RGB, умеет получать цвет любой точки экрана, есть палитра безопасных веб-цветов и мн. др., ...
Утилиты602 kb  Скачать
Stud_PE 2.1.0.1
статус: FreeWare

Неплохой хекс редактор. ...
Утилиты509 kb  Скачать
NetScat Installer Pro 12.11
статус: FreeWare

Программа для создания инсталляторов. Является профессиональной версией miniINSTALL Maker. Несмотря на простоту всех действий, выполняемых при создании исталлятора, NetScat...
Утилиты1,15 mb  Скачать
Easy HTML To Any Script Converter 1.3.0 build 019
статус: FreeWare

Easy HTML To Any Script Converter предназначен для быстрого и легкого преобразования HTML-файлов и HTML-блоков из буфера обмена в любой скрипт. Ты можешь использовать имеющ...
Утилиты239 kb  Скачать
CHM Encoder 1.2
статус: FreeWare

Простенькая утилита, с помощью которой можно декомпилировать CHM-файл или e-book в набор html-страниц и картинок. ...
Утилиты329 kb  Скачать
Cool Environment for CD 3.0
Freeware

Это мощная оболочка для ваших дисков.
Среди достоинств программы можно отменить следующее:
- Возможность извлечения *.zip, *.rar и *.ace архивов из оболочки
- Поддер...
Утилиты638 kb  Скачать
AMX Html Edit 2.1
статус: FreeWare

Программа HTML Edit Новинка сезона 2005. Самый простой и быстрый редактор HTML страниц - причем все это с визуальным просмотром. Программа не использует движок IE. Поэтому ...
Утилиты576 kb  Скачать
Linux-раздел для Windows
Этот компонент необходим вам, если вы работаете с файловыми системами Linux (ext2/ext3)...
Компоненты » C++301 kb  Скачать
Sticky notes
Это компонент из разряда "исходников". Да, да именно так, все что он делает отображает заметку которую можно прикреплять к рабочему столу....
Компоненты » C++134 kb  Скачать
ShellLinker
Вспоминаю времена MS-DOS и командной строки и с ужасом представляю, что для запуска программы нужно было писать полный путь к файлу или долго путешествовать по каталогам с помощью команды CD. Сейчас ч...
Компоненты » Delphi232 kb  Скачать
Memory Map
Не всегда удобно читать и писать файлы стандартными методами. Часто приходится загружать файл в память и только потом использовать его, что отнимает очень много времени. А как хорошо было бы работать ...
Компоненты » Delphi211 kb  Скачать
TDragWith EffectsObject
Очень часто нужно иметь возможность внутри программы перетаскивать объекты из одного компонента в другой. Например, нужно перетаскивать строки между двумя ListBox.ами. Задача несложная, но нудная, осо...
Компоненты » Delphi208 kb  Скачать
TFileType
Как иногда надоедает отвечать на одни и те же вопросы. В свое время, чтобы у читателей вопросов стало меньше, я написал книгу «Библия Delphi». Но количество от этого не изменилось, зато изменилось кач...
Компоненты » Delphi2 kb  Скачать
Справочное руководство по MySQL версии 4.1.1-alpha
Это - справочное руководство по MySQL; оно представляет собой документацию по MySQL версии 4.1.1-alpha. Функциональные изменения отмечены номером версии, в которой они произведены, поэтому это руковод...
Книги » Web745 kb  Скачать
Русский мануал по PHP 4
При написании этой книги я в первую очередь стремился к тому, чтобы читатель мог немедленно применить полученные знания на практике. Глупо было бы пересказывать то, что можно прочитать в электронной д...
Книги » Web » PHP613 kb  Скачать
ТУРБО ПРОЛОГ - ЕСТЕСТВЕННЫЙ ЯЗЫК ДЛЯ ИСКУССТВЕННОГО ИНТЕЛЛЕКТА
Турбо Пролог - язык ЭВМ пятого поколения, переводящий программирование в новое измерение. Благодаря его естественному и логичному подходу как новички в программировании, так и профессиональные ...
Книги » Prolog70 kb  Скачать
Основы функционального программирования
В этой статье предпринята попытка простым и понятным языком рассказать о функциональном программировании. Несмотря на то, что языки функционального программирования еще не получили широкого распростра...
Книги10 kb  Скачать
Элементарное руководство по CRC-алгоритмам обнаружения ошибок
Ross N. Williams
Элементарное руководство по CRC-алгоритмам обнаружения ошибок

Anarchriz/DREAD
CRC, и как его восстановить

Все, что Вы хотели бы знать о CRC-алгоритмах,...
Книги261 kb  Скачать
ВВЕДЕНИЕ В ФУНКЦИОНАЛЬНОЕ ПРОГРАММИРОВАНИЕ


Григорий Строкин <grg@philol.msu.ru>

Реферативный перевод статьи "Why functional programming matters", конспекты других источников, примеры на Haskell, Standard ML и Lisp,...
Книги16 kb  Скачать
РУКОВОДСТВО ПО СТАНДАРТНОЙ БИБЛИОТЕКЕ ШАБЛОНОВ (STL)
Авторы:
Александр Степанов
Менг Ли

Перевод на русский язык:
Алексей Суханов
Андрей Кутырин

Руководитель:
Григорий Александрович Милонов ...
Книги » C++141 kb  Скачать
Advanced Bash-Scripting Guide
Искусство программирования на языке сценариев командной оболочки

Версия 2.5 (15 февраля 2004)
Автор: Mendel Cooper (thegrendel at theriver dot com)

Перевод: Андрей Киселев (...
Книги » BASH415 kb  Скачать
Анекдоты о программистах:
Если "Microsoft" начнет выпускать автомобили - то:
1. Когда на дорогу нанесут новую разметку, вам придется покупать новую машину.
3. "Macintosh" тоже начнет выпускать автомобили, они будут заряжаться от солнца, будут в два раза быстрее, ими будет легче управлять, но ездить они будут только по 5% дорог.
4. Индикаторы топлива, температуры двигателя и масла будут объединены в один "главный машинный индикатор".
7. Во время аварии подушки безопасности, прежде чем сработают, спросят: "Are you sure?"


"Bugs" - фильм ужасов для программистов-отладчиков.


Погода выполнила недопустимую операцию и завалила Африку снегом...


- Алло, техотдел? Я пароль набираю - а меня не пускают.
- Значит, правильно набирать надо.
- Я правильно набираю! Пять звездочек!


Пришёл программер как-то раз в ресторан, заказал себе отбивную. Берётся, значит, за дело, бац, а вилка с ножиком, аж соскальзывают с отбивной:
- Read only... - подумал программер.
Программисты не пишут нелогичных программ, бывают нелогичные пользователи.


Забрали интернетчика в армию. На границе служить. Стоит он на посту. Вдруг - шаги.
- Пароль!!! ...тишина
- Пароль!!!! ...тишина
Программер снимает с плеча автомат... короткая очередь...
- User Anonymous Access Denied.


Вопрос:
- Почему в UNIX процедура входа называется "login", а в Winodows - "logon"?
Ответ:
- Ну, знаете ли, это от позы зависит.


Письмо в компьютерный сервисный центр:
- Этанутипауменяпробелполомалсячеделатьто?
Ответ:
- Настоящие_программисты_не_пользуются_пробелами.


У молодого хакера спрашивают:
- Максим, ну что тебе нравится, кроме женщин и компьютеров?
- Как что? Девушки и калькуляторы.


Антивирус. Ты кто?
Вирус. Область данных!
Антивирус. А не вирус?
Вирус. Hи боже мой!
Антивирус. А зачем прерывания перехватываешь?
Вирус. Я?!
Антивирус. Вот же подпрограмма.
Вирус. Это не подпрограмма. Это цитата из Лао-цзы на языке оригинала в альтернативной кодировке.
Антивирус. А зачем EXE-файлы ищешь?
Вирус. А вдруг хозяин спросит: "А где мои ЕХЕ-файлы?" А я ему - вот они!
Антивирус. Сдается мне, что ты все-таки вирус.
Вирус. Hу ладно, только тебе признаюсь, только ты никому не говори! Hа самом деле я... антивирусная вакцина!
Антивирус. А зачем нужна антивирусная вакцина, если есть я?
Вирус. Откуда я знаю? У хозяина спроси.
Антивирус. А если я тебя на всякий случай все-таки грохну?
Вирус. А если я тебя?
Антивирус. Hе получится. У меня управление.
Вирус. А ты свою контрольную сумму давно пересчитывал?
Антивирус. А причем тут моя контрольная... ой!!!
Вирус. То-то же.


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


В дополнение к высказываниям "настоящие" программисты считают, что в 1 км - 1024 м, в сутках 3 байта...


Два программиста:
- Ко мне вчера чувак приходил, сервак сломал.
- Он что хакер?
- Нет, мудак!
Послесловие:
Предлагаем обменяться ссылками с сайтами компьютерной тематики.

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

Код нашей ссылки: <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
Отписаться
Вспомнить пароль

В избранное