![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
CreateIconIndirect - по разному работает в разных Win??? [Win95/98, Win2k, WinXP]
Users © (2003-09-17 08:37:00)
Делаю динамически иконку для помещения в Tray:
Var
IInfo : TIconInfo;
Img : hBitmap;
Msk : hBitmap;
Brush : HBrush;
BitCount : Integer;
...
begin
DC := CreateCompatibleDC(0);
BitCount := GetDeviceCaps(DC, BITSPIXEL);
Img := CreateBitmap(16, 16, 2, BitCount Div 2, Nil);
Msk := CreateBitmap(16, 16, 1, 1, Nil);
SelectObject(DC, Img);
Brush := CreateSolidBrush(ColorBack);
With Rect Do
Begin
Left := 0;
Right := 16;
Top := 0;
Bottom := 16;
End;
FillRect(DC, Rect, Brush);
DeleteObject(Brush);
...
Добавляю текст, и т.д.
..
MainIcon := CreateIconIndirect(IInfo);
DeleteObject(Img);
DeleteObject(Msk);
DeleteDC(DC);
В 2000 и XP работает нормально, в Win 98 вместо иконки получается Dump какого то участка памяти.
Скорее всего причина в создании Img (наверное не верно делаю). Может кто сталкивался...
MBo (2003-09-17 12:28:00) [1]
прав.
Users (2003-09-17 11:26:00) [2]
Да, моя ошибка.
Заменил на :
Img := CreateBitmap(16, 16, 1, BitCount,Nil);
Т.е. UINT cBitsPerPel должен совпадать с битность текущего видеорежима? На 2000 проверил - работает, проверю на 98.
Спасибо.
CreateCompatibleBitmap создаст bitmap в соответствии контекстом "рабочего стола" (явно не монохром), а мне же нужно ч/б образ. Или я не прав?
MBo (2003-09-17 08:46:00) [3]
какова причина использования двух цветовых плоскостей в
Img := CreateBitmap(16, 16, 2, BitCount Div 2, Nil);?
Да и не лучше ли для ксорного образа использовать CreateCompatibleBitmap?