|
Вопрос # 960/ вопрос решён / |
|
Здравствуйте!Как можно заменить обычный курсор делфи в прихожении на союственный ini курсор?Может быть есть какойнибудь компонент?
 |
Вопрос задал: Аксион (статус: 4-ый класс)
Вопрос отправлен: 6 октября 2007, 16:24
Состояние вопроса: решён, ответов: 3.
|
Ответ #1. Отвечает эксперт: min@y™
Наверно, не ini, а ani?
Надо прикомпилить файл(ы) курсора(ов) как ресурс(ы) к exe-файлу (или даже dll) приложения, а потом загрузить их из ресурса и назначить объекту Screen, типа Screen.Cursors[номер_курсора]:= LoadCursor(...);
Я сам такое делал, но копаться в исходниках неохота. Вот один из многих примеров в DelphiWorld (советую скачать):
Определение и использование курсора
--------------------------------------------------------------------------------
Сначала (поскольку многие попадаются в эту ловушку) убедитесь в том, что имя .RES-файла, в котором вы храните ваш курсор, отличается от имени .RES-файла вашего проекта, т.е., если ваш проект имеет имя MyApp.DPR, то не используйте для хранения новых ресурсов файл MyApp.RES. Вы должны создать отдельный .RES-файл с другим именем (например, MyApp01.RES) и включить его в ваш проект, например так:
implementation
{$R MyApp01.Res}
Вы не можете назначить курсор свойству компонента Cursor или DragCursor из .RES-файла напрямую, необходимо выполнить несколько промежуточных шагов. В каждом проекте Delphi определяет глобальный объект с именем Screen (тип TScreen), который, между прочим, определяет массив курсоров, называемый, как ни странно, Cursors. Когда вы щелкаете на свойстве Cursor/DragCursor в Инспекторе объектов, выпадающий список и есть список элементов указанного массива.
Для предустановленных курсоров Delphi использует элементы массива с индексами начиная с -1 и ниже (т.е. только отрицательные числа), поэтому собственные курсоры вы можете размещать с порядковым номером, начинающимся с нуля и выше.
Для начала определите константу, допустим так:
Const
MyCursor = 1;
Далее необходимо загрузить курсор. Сделать это можно в обработчике события формы OnCreate:
Screen.Cursors[MyCursor] := LoadCursor(HInstance, 'MYCURSOR');
Затем просто установите в свойстве DragCursor любого элемента управления:
MyListbox.DragCursor := MyCursor;
Примечание: имя вашего курсора всегда должно писаться в ВЕРХНЕМ регистре, как при вызове LoadCursor, так и в его названии в .RES-файле.
 |
Ответ отправил: min@y™ (статус: Доктор наук)
Время отправки: 6 октября 2007, 16:59
Оценка за ответ: 5
|
Ответ #2. Отвечает эксперт: Dron
Здравствуйте, Блазер!
Курсор необязательно хранить как ресурс. Можно просто загружать его из файла:
const
crMyCursor = 1;
procedure TForm1.FormCreate(Sender: TObject);
begin
// Загружаем курсор
Screen.Cursors[crMyCursor] := LoadCursorFromFile('c:mystuffmycursor.ani');
// Используем курсор на форме
Cursor := crMyCursor;
end;
 |
Ответ отправил: Dron (статус: Студент)
Время отправки: 6 октября 2007, 19:17
Оценка за ответ: 4
Комментарий к оценке: не хотю его тоскать с программой :)
|
Ответ #3. Отвечает эксперт: Feniks
Здравствуйте, Блазер!
После подключения RES-файла проект надо полностью перебилдить, используя меню Build, а не Compiler. Иначе, он не подхватится и не встроется в выходной файл проекта.
 |
Ответ отправил: Feniks (статус: Бакалавр)
Время отправки: 8 октября 2007, 12:02
Оценка за ответ: 5
Комментарий к оценке: Спасибо за совет
|
Мини-форум вопроса
Всего сообщений: 9; последнее сообщение — 8 октября 2007, 13:21; участников в обсуждении: 3.
|
Аксион (статус: 4-ый класс), 6 октября 2007, 16:31 [#1]:
ой за ранее извеняюсь не ini а ani
|
|
Аксион (статус: 4-ый класс), 6 октября 2007, 17:12 [#2]:
RES-файл - как мне его сделать? знаю как сделать RES-файл с картинкой музыкой простым чёрнобелым курсором...но как туды засунуть ani фаил незнаю.
|
|
min@y™ (статус: Доктор наук), 6 октября 2007, 17:37 [#3]:
Да набери ты в гугле "delphi ani курсор" (без кавычек). Или зайди ещё вот )">сюда.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
Dron (статус: Студент), 7 октября 2007, 12:12 [#4]:
Блазер:
Цитата:
не хотю его тоскать с программой
А вы в вопросе это указали? Вы вообще свой вопрос читали? Мало того, что на два предложения несколько ошибок, ещё и вместо "ani" написали "ini". А теперь предъявляете претензии, что вам ещё и не то предложили. Эксперты - не телепаты, они не знают, что вам нужно. А если вы не можете этого сказать сразу - то не нужно потом говорить, что в ответе дали не то. В общем, голосую против вопроса.
С уважением.
|
|
Аксион (статус: 4-ый класс), 7 октября 2007, 13:42 [#5]:
В общем, голосую против вопроса-> а что это даёт?(смысл за/против)
|
|
Dron (статус: Студент), 7 октября 2007, 13:57 [#6]:
Цитата:
а что это даёт?(смысл за/против)
Вопрос может быть аннулирован. Читайте правила.
С уважением.
|
|
Аксион (статус: 4-ый класс), 7 октября 2007, 16:49 [#7]:
min@y™ я запоковал свой ani курсор в res фаил стал делать как вы сказали .Пишу
procedure TForm1.FormCreate(Sender: TObject);
Const
MyCursor = 1;
begin
Screen.Cursors[MyCursor] := LoadCursor(HInstance, 'CURSORINI');
form1.Cursor:= MyCursor;
end;
- но не работает!
п.с. {$R Cursor.Res} я добавил в implementation
|
|
min@y™ (статус: Доктор наук), 8 октября 2007, 08:15 [#8]:
Всё зависит от того, что за ошибки ты наворотил в коде и правильно ли сформировал RES-файл. 
Я делал так: {$R Cursors.res} писал в файле проекта (DPR), извлекал из ресурса также, например:
// Извлекаем курсоры мыши из ресурсов программы
Screen.Cursors[crPen]:= LoadCursor(HInstance, 'PEN'); // Карандаш
Screen.Cursors[crLine]:= LoadCursor(HInstance, 'CROSS_LN'); // Отрезок
Screen.Cursors[crRect]:= LoadCursor(HInstance, 'CROSS_RC'); // Прямоугольник
Screen.Cursors[crEllipse]:= LoadCursor(HInstance, 'CROSS_EL'); // Эллипс
Screen.Cursors[crFill]:= LoadCursor(HInstance, 'FILL'); // Заливка
Screen.Cursors[crEraser]:= LoadCursor(HInstance, 'ERASER8'); // Стёрка
Screen.Cursors[crSelect]:= LoadCursor(HInstance, 'CROSS'); // Крест
И всё работает.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
Аксион (статус: 4-ый класс), 8 октября 2007, 13:21 [#9]:
спасибо я разобрался
|
31 января 2011, 20:02: Статус вопроса изменён на решённый (изменил модератор Ерёмин А.А.): Автоматическая обработка (2 и более ответов с оценкой 5)
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|