Михаил Краснов - Графика DirectX в Delphi

Здесь есть возможность читать онлайн «Михаил Краснов - Графика DirectX в Delphi» — ознакомительный отрывок электронной книги совершенно бесплатно, а после прочтения отрывка купить полную версию. В некоторых случаях можно слушать аудио, скачать через торрент в формате fb2 и присутствует краткое содержание. Жанр: Программирование, на русском языке. Описание произведения, (предисловие) а так же отзывы посетителей доступны на портале библиотеки ЛибКат.

Графика DirectX в Delphi: краткое содержание, описание и аннотация

Предлагаем к чтению аннотацию, описание, краткое содержание или предисловие (зависит от того, что написал сам автор книги «Графика DirectX в Delphi»). Если вы не нашли необходимую информацию о книге — напишите в комментариях, мы постараемся отыскать её.

Графика DirectX в Delphi — читать онлайн ознакомительный отрывок

Ниже представлен текст книги, разбитый по страницам. Система сохранения места последней прочитанной страницы, позволяет с удобством читать онлайн бесплатно книгу «Графика DirectX в Delphi», без необходимости каждый раз заново искать на чём Вы остановились. Поставьте закладку, и сможете в любой момент перейти на страницу, на которой закончили чтение.

Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

if (GlobalThisTickCount - GlobalLastTickCount > DelayConsole) then

begin // Плавное появление консоли

Inc (ConsoleHeight, 5);

if ConsoleHeight > 100 then ConsoleHeight := 100;

SetRect (rcRectConsole, 0, 0, 640, ConsoleHeight);

end;

// Собственно воспроизведение консоли

FDDSBack.BltFast(0, 0, FDDSConsole, @rcRectConsole, DDBLTFAST__WAIT);

end;

Текст в консоли выводится с помощью функций GDI:

procedure OutText (const X, Y : Integer; const TextCon : String);

var

DC : HOC;

begin

FDDSConsole.GetDC (DC) ;

SetBkColor(DC, RGB (255, 255, 255)); // Цвета фона и букв необходимо

SetTextColor (DC, 0); // задавать обязательно

TextOut (DC, X, Y, PChar(TextCon), length (TextCon));

FDDSConsole.ReleaseDC (DC);

end;

Немало хлопот принесла обработка нажатия клавиши : чтобы стереть старый текст, приходится воспроизводить ряд пробелов:

if diks [DIK_TAB] and $80 <> 0 then begin // Клавиша

if not ConsoleLive then begin // Включение консоли

ConsoleHeight := 0; ConsoleLive := True;

end

else ConsoleLive := False; // Выключить консоль

Sleep(lOO); // Небольшая пауза

end;

if ConsoleLive then begin // Обработка клавиш для консоли

OutText (5, 10, TextConsolel); // Вывод трех строк в консоли

OutText (5, 30, TextConsole2); OutText (5, 50, TextConsole3);

if diks [DIK_RETURN] and $80 <> 0 then begin // Ввод команды

// Введена команда "Exit"; выход из программы

if (TextConsole3 = '>EXIT_') or (TextConsole3 = '> EXIT_') then Close;

// Введена другая команда, строки стираются и поднимаются наверх

TextConsolel := ' ';

OutText (5, 10, TextConsolel); // Затираем пробелами

TextConsolel := TextConsole2; // Строка сдвигается вверх

TextConsole2 := ' ' ;

OutText (5, 30, TextConsole2);

TextConsole2 := '> Command : ' + Copy (TextConsole3, 2,

length (TextConsoleS) - 2); // Реакция на все остальные команды -

// вывод эха

TextConsoleS := ' ';

OutText (5, 50, TextConsoleS);

TextConsoleS := '>_'; // Последняя строка превратилась в приглашение

Sleep(100);

end;

if diks [DIK_BACKSPACE] and $80 <> 0 then begin // Нажата клавиша

//

TextConsole3 := ' ';

OutText (5, 50, TextConsoleS); // Стираем последнюю строку

TextConsoleS := '>_';

OutText (5, 50, TextConsoleS);

end;

for i := DIK_Q to DIK_M do // Просматриваем буквенные клавиши

if diks [i] and $80 <> 0 then begin // Нажата какая-то клавиша с буквой

if length (TextConsoleS) < 20 then begin // Ограничение длины строки

// Перед символом подчеркивания вставляем букву нажатой клавиши

TextConsoleS := Copy (TextConsoleS, I, length (TextConsoleS) - 1) +

ScanToChar (i) +'_';

OutText (5, 50, TextConsoleS); // Вывод получившейся строки

Sleep(100);

end;

end;

end;

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

Диалоговые окна

Многие приложения нуждаются в диалоговых окнах, поэтому уделим немного внимания этому вопросу. Пример данного раздела (проект каталога Ех10) представляет собой окончательную реализацию нашего хранителя экрана с плавающими рыбками. В развитие предыдущего состояния добавлена поддержка пароля для входа в систему.

Установка и запрос пароля хранителя экрана являются системными действиями, но вызов их не ограничивается одной строкой. Это означает, что диалоги установки и ввода пароля не должны реализовываться программистом, пароль назначается для всех хранителей экранов. Мы не можем самостоятельно запросить пароль, хранить его в реестре, в определенном разделе, и самостоятельно организовывать ввод пароля при нажатии клавиши или движении курсора мыши.

Следующая процедура предназначена для вызова системного диалога задания нового пароля:

procedure TfrmDD.RunSetPassword;

type // Специальный тип функции, используется только в этой ситуации

TPCPAFunc = function(A : PChar; Parent : hWnd; В, С : Integer) :

Integer; stdcall;

var

Lib : THandle; // Ссылка на DLL

PCPAFunc : TPCPAFunc; // Загружаемая функция

begin

Lib := .LoadLibrary('MPR.DLL1); // Динамическая загрузка DLL

if Lib > 32 then begin // Проверка успешности загрузки

// Получаем адрес точки входа нужной функции

@PCPAFunc := GetProcAddress(Lib, 'PwdChangePasswordA');

// Задаем пароль хранителей экрана

if @PCPAFunc о nil then PCPAFunc('SCRSAVE', StrToInt(ParamStr(2)),

0, 0);

FreeLibrary(Lib); // Выгружаем библиотеку

end;

end;

В нашей программе эта процедура вызывается, если приложение запущено с параметром /а, т. е. в ситуации, когда пользователь нажал кнопку Изменить на вкладке Заставка (см. рис. 4.3).

При нажатии клавиши или движении курсора программа должна сама определить, установлен ли пароль для хранителя экрана, и запустить системный диалог ввода пароля:

function TfrmDD.TestPassword : BOOL;

type

// Специальный тип, тоже используется только в этом, особом случае

TVSSPFunc = function(Parent : hWnd) : BOOL; stdcall;

var

Key : hKey;

D1,D2 : Integer;

Value : Integer;

Lib : THandle;

VSSPFunc : TVSSPFunc;

begin

Result := True;

// Загружаем информацию из реестра, используя функции API

if RegOpenKeyEx(hKey_Current_User, 'Control Panei\Desktop', 0,

Key_Read, Key) = Error_Success then begin

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Похожие книги на «Графика DirectX в Delphi»

Представляем Вашему вниманию похожие книги на «Графика DirectX в Delphi» списком для выбора. Мы отобрали схожую по названию и смыслу литературу в надежде предоставить читателям больше вариантов отыскать новые, интересные, ещё непрочитанные произведения.


Отзывы о книге «Графика DirectX в Delphi»

Обсуждение, отзывы о книге «Графика DirectX в Delphi» и просто собственные мнения читателей. Оставьте ваши комментарии, напишите, что Вы думаете о произведении, его смысле или главных героях. Укажите что конкретно понравилось, а что нет, и почему Вы так считаете.

x