Форум: "WinAPI";
Текущий архив: 2008.06.22;
Скачать: [xml.tar.bz2];
ВнизПерерисовка PopupMenu Найти похожие ветки
← →
Dib@zol © (2007-09-30 16:45) [0]Как по запросу перерисовать всплывающее меню, используя только средства API? Вот у главного меню есть DrawMenuBar, а вот как обновить поп-уп, ума не приложу... Ах да, вдогонку - как загрузить из ресурса анимированный курсор? LoadCursor не катит, т.к. ни brcc32, ни ImagEdit.exe, ни Resource Builder не могут запихать в Icon- или Cursor-секцию реса файлы данного типа, грят неправильный формат.
← →
Dib@zol © (2007-09-30 19:41) [1]ОК. Первая проблема решилась принятием WM_ENTERIDLE. Осталась вторая...
← →
Dib@zol © (2007-09-30 22:08) [2]Вот, сижу решаю 2-ю проблему. Может ли мне кто-нибудь вразумительно объяснить, почему не работает вот эта функция??? CreateIconFromResource возвращает всегда 0, хотя отладка показывает, что ресурс она находит и правильно определяет размер. ГетЛастЕррор возвращает результат, который был задан до вызова функции. В чём же причина?
function LoadIconEx(H:HINST; N, T:PChar):HICON;
var
R : HRSRC;
S : Cardinal;
G : HGLOBAL;
P : Pointer;
begin
Result:=0;
R:=FindResource(H, N, T);
if R=0 then exit;
S:=SizeOfResource(H, R);
G:=LoadResource(H, R);
P:=LockResource(G);
Result:=CreateIconFromResource(P, S, true, $00030000);
end;
← →
Dib@zol © (2007-10-10 18:09) [3]Погуглился. Как ни странно - нифига! Тык что, никто не знает? :(
← →
Ping (2007-10-10 19:01) [4]Что ты в ресурс кладешь? Как называется ресурс? Как вызываешь приведенную тобой функцию?
← →
Dib@zol © (2007-10-10 19:21) [5]я кладу в ресы иконку ANI-формата. Поскольку в стандартный раздел ICON доступными мне средствами его не положишь, пришлось создавать собственный раздел ресов, называется ANIMATED. Даю иконке имя ANIICON1. Сохраняю ресы, линкую их к проге (*$R Icon.res*) и вызываю функцию:
I : HICON;
...
I:=LoadIconEx(hInstance, "ANIICON1", "ANIMATED");
Трассирую функцию. Ресурс найден, и получен его размер. Получена и сохранена в P ссылка на него. Вызываю CreateIconFromResource - и ни фига! Result=0! Почему???
← →
Dib@zol © (2007-10-10 19:23) [6]ГетЛастЕррор возвращает результат, который был задан до вызова CreateIconFromResource.
← →
Ping (2007-10-10 19:40) [7]У меня вот это "на скорую руку" работает:
const
MY_CURSOR = $100;
procedure TForm1.FormCreate(Sender: TObject);
var
hRes: THandle;
iSize: integer;
hGlob: THandle;
pBytes: PByte;
hCursor: THandle;
begin
hRes := FindResource(HINSTANCE, "MY_CURSOR", "ANICURSORS");
iSize := SizeOfResource(HINSTANCE, hRes);
hGlob := LoadResource(HINSTANCE, hRes);
pBytes := LockResource(hGlob);
Screen.Cursors[MY_CURSOR] := CreateIconFromResource(pBytes, iSize, true, $30000);
Cursor := MY_CURSOR;
Тестировал на windows\cursors\dinosaur.ani
Вот такой вот .rc
MY_CURSOR ANICURSORS "dinosaur.ani"
P.S. В коде, скорее всего, утечки памяти.
← →
Dib@zol © (2007-10-10 20:00) [8]Мдя. На ХР-шнике мой код тоже работает. А вот на 98-м - не пашет ни один... :(
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2008.06.22;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.049 c