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