-
Из файла загружается без проблем, но не охота таскать с собой дополнительные файлы, поэтому создаю файл Cur.res из rc-файла такого содержания: BUSY ANICURSOR 4.ani Пробую - не работает. Что не так? Вот код: const
crMyCursor = 777;
implementation
procedure TForm1.Button1Click(Sender: TObject);
var
h: THandle;
begin
h := LoadImage(hInstance, 'BUSY', IMAGE_CURSOR, 0, 0, LR_DEFAULTSIZE);
ShowMessage(IntToStr(h));
Screen.Cursors[crMyCursor] := h;
Screen.Cursor := crMyCursor;
end;
-
Я грузил с помощью LoadCursor и все работало.
-
h := LoadImage(hInstance, 'BUSY', IMAGE_CURSOR, 0, 0, LR_DEFAULTSIZE); if (h = 0) then RaiseLastWin32Error(); // что говорит?
-
> RaiseLastWin32Error(); // что говорит?
"Указанный тип ресурса в файле образа отсутствует." Как это понять?
-
> Я грузил с помощью LoadCursor и все работало.
Покажи код, потому что я как ни пробовал - не работает.
-
> Как это понять?
буквально. Не находит ресурс. Просто добавь в проект Project - Add to project - *.rc res можно заранее и не делать
-
> буквально. Не находит ресурс.Просто добавь в проект Project > - Add to project - *.rcres можно заранее и не делать
Никакой разницы. Ошибка аналогичная.
-
я делал так images.rc: #include "resource.inc"
IDB_DIAGBRUSH BITMAP "res\\dpbrush.bmp" resource.inc: const
IDB_DIAGBRUSH = 101; *.pas:
...
FDisabledBitmap.LoadFromResourceID(hInstance, IDB_DIAGBRUSH); по аналогии должно и с курсором работать типа так h := LoadImage(hInstance, MakeIntResource(IDC_BUSY), IMAGE_CURSOR, 0, 0, 0);
-
> по аналогии должно и с курсором работать
С картинкой оно и у мненя работает. Кажеться я понял: программа попросту не понимает, что мой ресурс есть курсором. Возможно я неправильно создаю rc-файл? Как же тогда правильно указать?
-
> Как же тогда правильно указать?
BUSY CURSOR "1.ani"
-
> BUSY CURSOR "1.ani"
Компилятор ругается: Error Cur.rc 1 13: Invalid cursor format
-
> Компилятор ругается: Error Cur.rc 1 13: Invalid cursor format
Ну и пиши ету твою иконку в RCDATA. Я как-то сам давным-давно сюда выкладывал меню с анимированными иконками. Это была главная часть их загрузчика. Грузит из любого раздела реестра. Надо только собсно раздел указать. ЗЫ под ХРеновину и выше сей загрузчик работает на ура, а вот в 98-м (2К и МЕ не проверял) прут просто НЕРЕАЛЬНЫЕ лаги. В лучшем случае возвращается нулевой результат, в худшем - лично я пару раз словил BSOD. Поэтому предупреждаю сразу. А вообще, ИМХО, надо самому склепать расшифровщик, благо у ANI иконок не пользуется шифрование, а заголовочная запись не сильно огромна :)
function LoadIconEx(H:HINST; N, T:string):HICON; var R : HRSRC; S : Cardinal; G : HGLOBAL; P : Pointer; begin Result:=0; R:=FindResource(H, PChar(N), PChar(T)); if R=0 then exit; S:=SizeOfResource(H, R); G:=LoadResource(H, R); P:=LockResource(G); Result:=CreateIconFromResource(P, S, true, $00030000); end;
-
> Компилятор ругается: Error Cur.rc 1 13: Invalid cursor format
BRCC? Попробуй RC.exe от MS.
-
> Ну и пиши ету твою иконку в RCDATA...
Пробовал твой код, выё время вылетает AV (среда XP SP2, D2007)
> BRCC? Попробуй RC.exe от MS.
Действительно, RC.exe скомпилировал ресурсный файл. Но программа ошибку выдаёт всё ту же :(
-
> [13] jetus (12.01.08 13:13) > > > Ну и пиши ету твою иконку в RCDATA... > > Пробовал твой код, выё время вылетает AV (среда XP SP2, > D2007) > > > > BRCC? Попробуй RC.exe от MS. > > Действительно, RC.exe скомпилировал ресурсный файл. > Но программа ошибку выдаёт всё ту же :(
Это происходит потому, что вызывать мою функцию надо (если ты кнешн действительно положил иконку в раздел RCDATA) вот так:
var i:HICON; ... i:=LoadIconEx(hInstance, 'имя_твоей_иконки_в_ресах', RT_RCDATA);
-
> jetus (12.01.08 13:13) [13]
Какую ту-же? В общем, по шагам. - имеем файл курсора 1.ani - Создаем файл AniCusor.rc, в нем пишем одну строку 200 CURSOR "1.ani" - Компилим из CMD командой rc AniCursor.rc только перейти в каталог не забудь - В любой модуль проекта добавляем строку {$R anicursor.res} - Гди-нить, типа в OnCreate или по кнопке пишем код
var
h: Cardinal;
begin
h:= LoadCursor(hInstance, PChar(200));
if h = 0 then RaiseLastOSError;
Screen.Cursors[1]:= h;
Screen.Cursor:= 1;
Запускаем и наслаждаемся.
-
> Запускаем и наслаждаемся.
Сделал точно как ты написал. Вот: System Error. Code: 1814. Указанное имя ресурса не найдено в файле образа.
Ты сам код проверял?
-
2 jetus > Ты сам код проверял?
Да, и не одноератно. И сейчас еще раз проверил - все работает. Глянь каким-нить просмотрщиком ресурсов полученный экзешник, Ресторатором например. А еще попробуй загрузить твой курсор прямо из файла Screen.Cursors[1]:= LoadImage(0, '1.ani', IMAGE_CURSOR, 0, 0, LR_LOADFROMFILE); Мож у тя исходный файл кривой.
-
> Да, и не одноератно. И сейчас еще раз проверил - все работает. > Глянь каким-нить просмотрщиком ресурсов полученный экзешник, > Ресторатором например. А еще попробуй загрузить твой курсор > прямо из файлаScreen.Cursors[1]:= LoadImage(0, '1.ani', > IMAGE_CURSOR, 0, 0, LR_LOADFROMFILE);Мож у тя исходный файл > кривой.
Смотрел ресурс ResHacker'ом - всё на месте. Курсор грузил напрямую из файла - никаких проблем, грузиться отлично. Не знаю уже, в чём беда...
-
> jetus (13.01.08 10:43) [18]
Ну тады я тож не знаю. Пожоже ты один такой несчастливый. На всяк случай выложи код с объявлением ресурса и загрузкой курсора - мож чего увижу.
> Смотрел ресурс ResHacker'ом - всё на месте
А тип ресурса какой, Ani Cursor? Может в имени ошибся? Я ваще не люблю ресурсам имена давать, только числовые индексы - привычка.
|