Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.06.22;
Скачать: CL | DM;

Вниз

Перерисовка 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 вся ветка

Текущий архив: 2008.06.22;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.046 c
1-1194937505
DancerMan
2007-11-13 10:05
2008.06.22
Обмен значениями элементов ListView


2-1211736709
Jeqa
2008-05-25 21:31
2008.06.22
приход-расход


2-1211875062
AlekseyB
2008-05-27 11:57
2008.06.22
Как программно сделать даблклик на DBGrid


2-1211698255
may be I am noob...
2008-05-25 10:50
2008.06.22
Юлианов День


9-1171442617
Vemer
2007-02-14 11:43
2008.06.22
Удаление объектов OpenGL