Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 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™

min@y™ (статус: Доктор наук), 6 октября 2007, 17:37 [#3]:

Да набери ты в гугле "delphi ani курсор" (без кавычек). Или зайди ещё вот )">сюда.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Dron

Dron (статус: Студент), 7 октября 2007, 12:12 [#4]:

Блазер:

Цитата:

не хотю его тоскать с программой

А вы в вопросе это указали? Вы вообще свой вопрос читали? Мало того, что на два предложения несколько ошибок, ещё и вместо "ani" написали "ini". А теперь предъявляете претензии, что вам ещё и не то предложили. Эксперты - не телепаты, они не знают, что вам нужно. А если вы не можете этого сказать сразу - то не нужно потом говорить, что в ответе дали не то. В общем, голосую против вопроса.
С уважением.
Аксион

Аксион (статус: 4-ый класс), 7 октября 2007, 13:42 [#5]:

В общем, голосую против вопроса-> а что это даёт?(смысл за/против)
Dron

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™

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)

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:44
Выполнено за 0.03 сек.