Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Загрузка анимированных курсоров из ресурса


Автор: Kostyaxp 19.7.2006, 21:58
Помогите, пожалуйста, решить следующую проблему:

Компилируется ресурс

Код

#define ANICURSOR 21
myCur ANICURSOR "C:\ Cur.ani"



Потом с помощью функции  LoadCursor из ресурса достается указатель

Проблема состоит в том, что если к первому указателю добавить еще один не один из них не загружается, что не так smile 

Код

#define ANICURSOR 21
myCur ANICURSOR "C:\ Cur.ani"
Drag ANICURSOR "C:\ drag.ani"
 

Автор: TP@MB@Y 19.7.2006, 23:13
я не знаю... но первое что приходит в голову - между ними не нужен разделитель? Точка с запятой или запятая... 

Автор: Romikgy 20.7.2006, 09:16
Имхо для каждого курсора надо свой
Цитата(Kostyaxp @  19.7.2006,  20:58 Найти цитируемый пост)
#define ANICURSOR 21

хотя могу и ошибатся

Добавлено @ 09:30 
вот rc для трех курсоров
Код

#define kur1 3
#define kur2 1
#define kur3 7
kur1 CURSOR DISCARDABLE "D:/K/3dgarro.cur"
kur2 CURSOR DISCARDABLE "D:/K/3dgmove.cur"
kur3 CURSOR DISCARDABLE "D:/K/3dgarro.cur"

http://rgy.pisem.net/files/ResEd.zip 

Автор: Kostyaxp 20.7.2006, 17:02
Romikgy, нет, не помогает. Да и для анимированного курсора заранее есть определенное место
В Windows.pas: 
  
Код

{$EXTERNALSYM RT_ANICURSOR}
  RT_ANICURSOR    = MakeIntResource(21);


Кроме всего смотрел MSDN там сказано, что в одной ветки ресурса (в этом случае под именем 21) может располагаться несколько ресурсов, и даже показан пример.

А теперь все сначала. Вот код процедуры:
Код

var
hCur : HCURSOR;
h : THandle;
begin
h := hinstance;
hCur := LoadCursor (h, 'myCur');
Screen.Cursors[1] := hCur;
Screen.Cursor := 1;


Пример самого rc файла см. выше.

В чем проблема понять не могу smile 

P.S. Я не знаю почему админ под именем Girder переместил мою тему в С++ видимо из-за того что я сделал подсветку кода С++ (дак это чтобы #define подсветить), но это еще не значит, что я на C++ на самом деле работаю smile
Хотя может кто-нибудь подобное на C++ попробует и может получиться (кстати, сишный rc.exe я тоже пробовал). 
 

Автор: Romikgy 21.7.2006, 12:49
Код

kur1 CURSOR D:/K/3dgarro.cur"    
kur2 CURSOR  "D:/K/3dgmove.cur"    
kur3 CURSOR  "D:/K/3dgarro.cur"

у меня вот так заработало , без всяких дефайнов 

Автор: Kostyaxp 22.7.2006, 15:36
Это все из фильма «Очевидное и Невероятное». Кое-что вышло, но результат оказался неожиданный:

Пример rc:
Код

51 21 "C:\\Path\\cursors\\Cur.ani"
52 21 "C:\\Path\\cursors\\drag.ani"
53 21 "C:\\Path\\cursors\\h.ani"
54 21 "C:\\Path\\cursors\\m.ani"
55 21 "C:\\Path\\cursors\\off.ani"
56 21 "C:\\Path\\cursors\\temp.ani"


Вот пример самого кода:
Код

procedure TForm1.Button1Click(Sender: TObject);
var
hCur : HCURSOR;
begin
hCur := LoadCursor (hinstance, Pchar('55'));
Screen.Cursors[1] := hCur;
Screen.Cursor := 1;
Form1.Cursor := 1;
end;


Но в таком виде код не работает, а вот если вместо значения «55» поставить значение «7», то загружается ресурс, который должен загружаться как «55». Может, кто скажет, в чем дело?

Добавлено @ 15:44 
Цитата

у меня вот так заработало , без всяких дефайнов  


Дефайн тут был исключительно для Борлодского компилятора ресурсов. http://www.rsdn.ru/article/delphi/QnAdelphi.xml
За ссылку отдельное спасибо to Girder  

Автор: Kostyaxp 22.7.2006, 15:53
Все проверял на Delphi 7&2005 - результат один и тот же.

Romikgy, если не сложно, то кинь исходник на С пожалуйста. 

Автор: Romikgy 22.7.2006, 16:07
Цитата(Kostyaxp @  22.7.2006,  14:36 Найти цитируемый пост)
hCur := LoadCursor (hinstance, Pchar('55'));

Код

 Screen.Cursors[1] := LoadCursor(HInstance, pChar(51));
  Screen.Cursors[2] := LoadCursor(HInstance, pChar(52));

разницу видишь или нет?

Добавлено @ 16:07 
Цитата(Kostyaxp @  22.7.2006,  14:53 Найти цитируемый пост)
о кинь исходник на С пожалуйста

чего исходник на С? 

Автор: Kostyaxp 22.7.2006, 16:47
Цитата

разницу видишь или нет?


А причем тут разница? Если эта функция, что первая LoadCursor(HInstance, pChar(51));, что вторая LoadCursor(HInstance, pChar(52)); возвращает 0 (специально смотрел в отладчике). Не загружается 51, если 7, то, пожалуйста, но ведь должно то быть не 7, а 55! smile 

С обычными курсорами, по-моему, все выходит, а вот с анимированными нет. smile 

Romikgy, исходник я имел в виду рабочей программы, т.е. программы, которая загружает 2 или более АНИМИРОВАНЫХ курсора из ресурса, один из которых потом ставятся вместо стандартного курсора на форме программы.   

Автор: Romikgy 22.7.2006, 17:24
Kostyaxp, попаду домой проэкперементирую 

Автор: Kostyaxp 23.7.2006, 17:37
Romikgy, у меня прогресс  smile  : вызвался 55 и 56 ресурс (т.е. 2 последних) под своими именами (кстати, цифра 7 вместо 55 тоже работает) все остальные ни в какую. Даже пробовал цикл создавать для подбора значений не выходит. 

Из всего вышесказанного можно сделать вывод, что из всех загружаются только два последних курсора. Осталось только найти способ чтобы и другие загружались или найти причину по которой этого не происходит.  smile  

Автор: Romikgy 24.7.2006, 09:34
Kostyaxp, вот рабочий проект 
http://rgy.pisem.net/files/stroki.zip 

Автор: Kostyaxp 25.7.2006, 23:21
Romikgy, огромное спасибо за пример  smile . Буду думать, почему у меня не вышло (может из-за того, что курсоры использую нестандартные, не из винды?)…  smile    

Автор: Romikgy 26.7.2006, 08:23
Цитата(Kostyaxp @  25.7.2006,  22:21 Найти цитируемый пост)
использую нестандартные, не из винды?)

имхо побоку откуда курсоры 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)