17.5. УКАЗАТЕЛИ МЫШИ

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

property Cursor: TCursor;

type TCursor = -32768..+32767;

В Delphi предопределены стандартные указатели, показанные на рисунке 17.2.

Рис. 17.2. Стандартные курсоры Delphi

В практике программирования часто возникает необходимость изменения формы указателя для всех окон программы. Например, при выполнении достаточно длительного по времени процесса указатель мыши часто принимает вид crHourGlass, а после завершения процесса - восстанавливает свой первоначальный вид. Чтобы изменить форму указателя для всех окон программы одновременно, используется свойство cursor у глобального объекта screen, который автоматически создается для каждой программы:

Screen.Cursor := crHourGiass;

..... //Делаем длительную работу

Screen.Cursor := crDefault; // Восстанавливаем начальную

// форму указателя

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

Рассмотрим процесс создания и использования нестандартного указателя на следующем примере, в котором создается и используется указатель в виде окружности.

Рис. 17.3. Окно редактора изображений с заготовкой для указателя мыши

{$R *.DFM} ($R Cursor.res}

procedure TForm1.FormCreate(Sender: TObject);

begin

// Регистрируем указатель:

Screen.Cursors[1] := LoadCursor(HInstance,'MYCURSOR');

// Используем его для клиентской части формы:

Cursor := 1

end;

Не забудьте указать комментарий {$r cursor, res}, чтобы компоновщик пристыковал ресурсный файл cursor, res к ресурсному файлу программы. После запуска программы вы увидите в клиентской части пустой формы нестандартный указатель. Замечу, что при регистрации указателя в screen, cursors индекс может быть любым числом в диапазоне от -32768 до +32767. Однако следует учитывать,

что индексы в диапазоне от -22 до -1 включительно заняты стандартными указателями, показанными на рис. 17.3 (индексы -5 и -1 соответствуют указателю crNone), а индекс 0 всегда связан со стандартным указателем Windows ^ и не может переопределяться.

Рис. 17.4 . Окно редактора с готовым изображением указателя