{Действуем, если только текущий символ находится между "0" и "9", исключая дефисы}
if
Val(Number[i], CheckValue, Err);
{Алгоритм для каждого символа кода ISBN, Cnt - n-й обрабатываемый символ}
CheckSum := CheckSum + CheckValue * (11 - Cnt);
Inc(Cnt);
end
end
{Проверяем делимость без остатка полученного значения на 11}
if
else
end
else
end
Это примитивный пример, сильно упрощенный для лучшего понимания алгоритма декодирования кода ISBN. В реальной жизни (приложении) имеется немало мелочей, которые необходимо учесть для нормальной работы. Для примера, описанная выше функция требует от кандидата ISBN строку паскалевского типа с дефисами, разделяющими четыре части кода. В качестве дополнительной функциональности можно проверять кандидата ISBNs на наличие дефисов. Другой полезной вещью могла бы быть проверка на наличие трех дефисов на нужных позициях, а не простая проверка на наличие необходимых одиннадцати символов-цифр.
API
Переменные среды
Как раскрыть строки с подстановками вида '%SystemRoot%\IOSUBSYS\'?
Nomadic советует:
Используй вызов
ExpandEnvironmentStrings(LPCTSTR lpSrc, LPTSTR lpDst, DWORD nSize);
Изменение системного времени из Delphi II
Delphi 1
Можно. Попробуйте следующий код:
Procedure
asm
mov ch, hour
mov cl, min
mov dh, sec
mov dl, hundreths
mov ah, $2d
int $21
end
Procedure
asm
mov cx, year
mov dh, month
mov dl, day
mov ah, $2b
int $21
end
Завершение работы Windows
Определение завершения работы Windows
НОМЕР ДОКУМЕНТА
ПРОДУКТ
: DelphiВерсия
: 1.0ОС
: WindowsДата
: 1 октября, 1996Тема
: Определение завершения работы WindowsСуществует ли возможность определения завершения работы Windows для нормального завершения работы работающего приложения Delphi?
Самым простым решением является создание обработчика события главной формы OnCloseQuery. Данное событие возникает как результат сообщения WM_QUERYENDSESSION, которое посылается всем работающим приложениям Windows в момент инициализации процесса окончания работы Windows. Логическая переменная CanClose, передаваемая обработчику как var-параметр, может позволить программе (и Windows) завершить свою работу, если имеет значение True, значение же False не позволит программе завершить свою работу.
Следующий код демонстрирует как можно воспользоваться данным событием.
Демонстрационный код
procedure
begin
{Спрашиваем пользователя, если инициировано завершение работы.}
if
else
end
Как консольное приложение может узнать, что Винды завершаются?
Nomadic рекомендует следующий код:
Все процессы получают сигналы CTRL_CLOSE_EVENT, CTRL_LOGOFF_EVENT и CTRL_SHUTDOWN_EVENT. А делается это (грубо говоря :) так:
BOOL Ctrl_Handler(DWORD Ctrl) {
if ((Ctrl == CTRL_SHUTDOWN_EVENT) || (Ctrl == CTRL_LOGOFF_EVENT)) {
// Вау! Юзер обламывает!
} else {
// Тут что-от другое можно творить. А можно и не творить :-)
}
return TRUE;
}