Скачать книгу

за установление шрифта отвечает в приведенном листинге только одна строка:

      EnumChildWindows(hMainWnd, Addr(EnumFunc), font);

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

Листинг 2.37. Реализация функции EnumFunc

      function EnumFunc(wnd: HWND; param: LPARAM):BOOL; stdcall;

      begin

      SendMessage(wnd, WM_SETFONT, WPARAM(param), LPARAM(True));

      EnumFunc := True; //Продолжать перечисление

      end;

      В принципе, имя этой функции и названия параметров могут быть любыми. А вот типы параметров и возвращаемого значения, а также способ вызова функции должны быть именно такими, как в листинге 2.37. Функция должна возвращать True, если нужно продолжать перечисление окон, и False в противном случае. Значение, которое было передано в качестве третьего параметра API-функции EnumChildWindows, передается в функцию обратного вызова. В нашем случае этим параметром является дескриптор шрифта.

      Глава 3

      Мышь и клавиатура

      • Мышь

      • Клавиатура

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

      3.1. Мышь

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

      Координаты и указатель мыши

      Для начала программным путем определим присутствие мыши в системе. Один из способов определения наличия мыши демонстрирует следующий пример (листинг 3.1).

Листинг 3.1. Как узнать, присутствует ли мышь

      function MousePresent : Boolean;

      begin

      //При помощи вызова GetSystemMetrics определяем

      //наличие мыши в системе

      if GetSystemMetrics(SM_MOUSEPRESENT) <> 0 then

      Result := True

      else

      Result := False;

      end;

      Описанная выше функция MousePresent позволяет проверить наличие мыши. Когда мышь присутствует, MousePresent возвращает True, в противном случае – False.

      После того как мы обнаружили мышь, можем приступать к определению ее координат на экране (листинг 3.2).

Листинг 3.2. Определение координат указателя мыши

      procedure MouseForm.Button1Click(Sender: TObject);

      var

      pt: TPoint;

      begin

      //Получаем координаты указателя мыши

      GetCursorPos(pt);

      ShowMessage( '(' + IntToStr(pt.X) + ' ,' + IntToStr( pt.Y ) + ')' );

      end;

      Для определения координат мыши использовалась API-функция GetCursorPos. Передав в эту функцию переменную pt типа ТPoint, мы получим текущие экранные координаты указателя.

      Рассмотрим пример, в котором указатель мыши при нажатии кнопки Button2 скрывается, а при нажатии кнопки Button3 (например, при помощи клавиатуры)

Скачать книгу