Валерий Борисок - Delphi. Трюки и эффекты

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

Delphi. Трюки и эффекты: краткое содержание, описание и аннотация

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

«Delphi. Трюки и эффекты», как и все издания данной серии, адресована тем, кто хочет научиться делать с помощью уже знакомых программных пакетов новые, интересные вещи. В первой части книги многое говорится о среде разработки Delphi (самых последних версий) и программировании на языке Object Pascal. Благодаря этому издание подходит и новичкам, и начинающим программистам. Вторая (основная) часть книги описывает удивительные возможности, скрытые в языке, и на примерах учит читателя программистским фокусам – от «мышек-невидимок» и «непослушных окон» до воспроизведения МРЗ и управления офисными программами Word и Excel из приложений Delphi. Купив эту книгу, вы пройдете непростой путь к вершинам программистского мастерства весело и интересно.

Delphi. Трюки и эффекты — читать онлайн ознакомительный отрывок

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

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

Интервал:

Закладка:

Сделать

(

(value: WM_DESTROY; name: \'WM_DESTROY\ used: False),

(value: WM_MOVE; name: \'WM_MOVE\ used: False),

(value: WM_SIZE; name: \'WM_SIZE\ used: False),

(value: WM_ACTIVATE; name: \'WM_ACTIVATE\ used: False),

(value: WM_SETFOCUS; name: \'WM_SETFOCUS\ used: False),

(value: WM_KILLFOCUS; name: \'WM_KILLFOCUS\ used: False),

(value: WM_ENABLE; name: \'WM_ENABLE\ used: False),

(value: WM_SETTEXT; name: \'WM_SETTEXT\ used: False),

(value: WM_GETTEXT; name: \'WM_GETTEXT\ used: False),

(value: WM_PAINT; name: \'WM_PAINT\ used: False),

(value: WM_CLOSE; name: \'WM_CLOSE\ used: False),

(value: WM_QUIT; name: \'WM_QUIT\ used: False),

(value: WM_SIZING; name: \'WM_SIZING\ used: False),

(value: WM_MOVING; name: \'WM_MOVING\ used: False),

(value: WM_NOTIFY; name: \'WM_NOTIFY\ used: False),

(value: WM_NCHITTEST; name: \'WM_NCHITTEST\ used: False)

);

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

...

Листинг 10.14.

Загрузка фильтра сообщений

procedure TfrmMessages.LoadFilter();

var

i: Integer;

begin

//Загрузка фильтра сообщений

lstAvailMessages.Clear();

lstSelMessages.Clear();

for i := mess_first to mess_last do

if messages_list[i].used then

//Сообщение перехватывается

lstSelMessages.Items.Add(messages_list[i].name)

else

lstAvailMessages.Items.Add(messages_list[i].name);

end;

При обращении к форме f rmMessages, кроме загрузки фильтра, нужно произвести некоторые дополнительные действия. Поэтому работа с этой формой начинается так же, как и в случае формы свойств окна, с вызова ее специального метода (листинг 10.15).

...

Листинг 10.15.

Инициализация формы

procedure TfrmMessages.ShowMessages(wnd: HWND);

begin

self.wnd := wnd;

LoadFilter();

ShowModal();

end;

При нажатии кнопок > (выбрать) и < (отменить выбор) происходит перемещение сообщений между списками фильтра (листинг 10.16).

...

Листинг 10.16.

Перемещение сообщений между списками выбранных и доступных сообщений

procedure TfrmMessages.cmbAddMessageClick(Sender: TObject);

var

i: Integer;

begin

if lstAvailMessages.SelCount = 0 then Exit;

//Включение выбранных сообщений в список перехватываемых

for i := lstAvailMessages.Count – 1 downto 0 do

if lstAvailMessages.Selected[i] then

messages_list[GetMessageIndex(i, False)].used := True;

//Отобразим изменения в списках

LoadFilter();

end;

procedure TfrmMessages.cmDelMessageClick(Sender: TObject);

var

i: Integer;

begin

if lstSelMessages.SelCount = 0 then Exit;

//Исключение выбранных сообщений из списка перехватываемых

for i := lstSelMessages.Count – 1 downto 0 do

if lstSelMessages.Selected[i] then

messages_list[GetMessageIndex(i, True)].used := False;

//Отобразим изменения в списках

LoadFilter();

end;

Функция GetMessagelndex, используемая в листинге 10.16, реализована следующим образом (листинг 10.17).

...

Листинг 10.17.

Преобразование номера сообщения в списке в номер сообщения в массиве messages_list

function TfrmMessages.GetMessageIndex(listIndex: Integer;

used: Boolean):Integer;

var

i, count: Integer;

begin

count := 0;

for i := mess_first to mess_last do

if messages_list[i].used = used then

begin

if count = listIndex then

begin

//Нашли

GetMessageIndex := i;

Exit;

end;

Inc(count);

end;

GetMessageIndex := 0;

end;

Теперь обратимся к реализации главной функции, выполняемой формой: использованию ловушки. Итак, слежение за выбранным в дереве окном (дескриптор его сохранен в поле wnd при инициализации формы) начинается и заканчивается при нажатии кнопки cmbStart. Обработчик нажатия этой кнопки приведен в листинге 10.18.

...

Листинг 10.18.

Запуск/остановка перехвата сообщений

procedure TfrmMessages.cmbStartClick(Sender: TObject);

begin

if cmbStart.Caption <> \'Остановить\' then

begin

//Начинаем слежение

lvwMessages.Clear;

//Создаем проекцию файла

hFile := CreateFileMapping(INVALID_HANDLE_VALUE, nil,

PAGE_READWRITE,

0, SizeOf(THookInfo),

strFileMapName);

hook_info := MapViewOfFile(hFile, FILE_MAP_WRITE, 0, 0,

SizeOf(THookInfo));

//Создание ловушки

if InstallHook(wnd, frmMessages.Handle) then

cmbStart.Caption := \'Остановить\'

else

begin

//При ошибке удалим проекцию файла

UnmapViewOfFile(hook_info);

hook_info := nil;

CloseHandle(hFile);

hFile := 0;

MessageBox(Handle, \'Ошибка при создании ловушки\',

PAnsiChar(Application.Title), MB_ICONEXCLAMATION);

end;

end

else

begin

//Заканчиваем слежение (удаляем ловушку и проекцию файла)

RemoveHook();

UnmapViewOfFile(hook_info);

hook_info := nil;

CloseHandle(hFile);

hFile := 0;

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

Интервал:

Закладка:

Сделать

Похожие книги на «Delphi. Трюки и эффекты»

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


Отзывы о книге «Delphi. Трюки и эффекты»

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

x