На днях мне задали довольно тривиальный вопрос: "Как сделать собственные курсоры в Delphi?". Что, думаю, в сети разве нет информации по этому поводу? Методом "гугления" обнаружил статью на DelphiSources - была первая в списке. Но это не совсем то, просмотрев еще несклько ресурсов, бросил это дело. И хотя вся процедура создания и подключения курсоров, да и других ресурсов довольно проста, но она не прозрачна и содержит много подводных камней, и может вызвать затруднения у начинающего программиста.
Итак, что мы имеем? Тривиальная задача из студенчества: создание примитивнейшего графического редактора. Необходимо подключить к программе и использовать курсоры для карандаша и резинки.
Собственно курсоры создаются в программе ImageEditor входящей в поставку Delphi 7 (именно для этой версии прозвучал порос). Процесс рисования курсора опустим - там все достаточно просто. Первые проблемы могут возникнуть при попытке подключения курсоров к программе.
В некоторых статьях рекомендуют открывать файл ресурсов, создаваемый в приложении по умолчанию и добавлять курсоры туда. Я не советую так делать, поскольку в свое время наколося на этом - среда просто переписала созданный файл (не помню зачем - ей виднее) и все курсоры пропали, пришлось делать заново - что не очень приятно. Поэтому будем делать собственный файл ресурсов, тем более что в этом нет ничего сложного.
Для создания ресурсов нам понадобится утилита brcc32.exe (Borland Resource Compiler) - которая распологается в каталоге с Delphi. Я рекомендую создать отдельный подкаталог "resources" в каталоге с проектом и разместить там все необходимые файлы для создания файла с собственными ресурсами. Туда же скопировать и эту утилиту.
Теперь необходимо подготовить файлик для компиляции ресурсов. Неоходимо открыть блокнот и описать каждый курсор в следующем формате:
ИМЯ_РЕСУРСА ТИП_РЕСУРСА ПУТЬ_К_РЕСУРСУ
Для исключения возможных неточностей следует имя ресурса сразу же писать заглавными латинскими буквами. Чтобы мои ресурсы можно было легко увидеть в одном месте я именую их все с заглавной буквы Z - так проще. Реальный файл с описаниями ресурсов одного из моих проектов представлен ниже:
В нашем случае необходимо написать следующее:
ZCURSOR_PEN CURSOR pen.cur
ZCURSOR_ERR CURSOR err.cur
и сохранить в файле cursors.rc. Теперь остается только выполнить из командной строки команду brcc32 cursors.rc в результате чего создастся файл с ресурсами cursors.res, содержащий в себе наши курсоры.
Теперь остается только подключить этот файл к проекту, делается это следующей директивой {$R cursors.res}. В моем проекте это сделано следующим образом:
Затем объявляется числовая константа на каждый курсор, например:
crPen = 100;
crErraser = 101;
и далее при инициализации формы следует подгрузить эти ресурсы:
Screen.Cursors[crPen] := LoadCursor(HInstance, 'ZCURSOR_PEN');
Screen.Cursors[crErraser] := LoadCursor(HInstance, 'ZCURSOR_ERR CURSOR');
Ну и теперь, наконец-то, можно с ними работать как с обычными курсорами. Кстати, тут можно посмотреть описание функций для работы с курсорами.
Вот собственно и все, довольно объемный пост получился, даже сам не ожидал :)
если не ошибаюсь, для редактирования курсоров и сохранения в ресурс более подходит Borland Image Editor -- imagedit.exe в каталоге bin установки Delphi
ОтветитьУдалитьА для добавления других ресурсов - Restorator 2007) На мой взгляд, удобнее)
ОтветитьУдалитьда! но! считаю, что использование "своих" курсоров в программах отличных от игр - дурной тон.
ОтветитьУдалить-gf-
Да ну! 2 самых простых и самых примитивных примера где нужны собственные курсоры: графический редактор и просмотрщик изображений. Тот же MS Word использует некоторое количество собственных курсоров - и что это тоже дурной тон? Конечно, я абсолютно согласен, что курсор в виде зеленого крокодила в информационной системе просто неуместен, но есть ситуации где без этого не обойтись.
ОтветитьУдалить