![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Ошибка в KOL / TBitmap.SetHandle. [Delphi, KOL]
gent © (2005-03-02 02:16:00)Уже обсуждались проблемы, связанные с обновлением TBitmap.SetHandle в KOL 2.04
(см. http://delphimaster.ru/cgi-bin/forum.pl?id=1109056582&n=10).
Вот еще одна.
Следующая программа не работает под Windows'98 (access violation).
Компиляция через Delphi 5 + KOL 2.05 + {$DEFINE ASM_VERSION} + замена system.dcu.
program rbox;
{$R 'rbox.res'}
uses KOL;
begin
NewBitmap(0, 0).LoadFromResourceName(hInstance, 'RBOX');
end.
Здесь ресурс-файл rbox.rc: RBOX BITMAP "rbox.bmp" ,
а rbox.bmp - красный квадрат, 16-цветный битмап размером 200х200.
После обратной замены в Kol.pas кода TBitmap.SetHandle на аналог из версии 2.03 приведенная программа работает без проблем.
Сергей Близнюков (2005-03-03 12:40:00) [1]
>ECM (02.03.05 09:22)
>Вот еще одна
Это та же проблема.
procedure TBitmap.SetHandle(const Value: HBitmap);
...
Move( Dib.dsBitfields, fDIBHeader.bmiColors, 3 * SizeOf(DWORD) );
>Пробовали?
Я, как автор предыдущей ветки (Ошибка TBitmap.LoadFromResource в Win98 Версия KOL >=2.04 ), могу заявить:
Пробовали! Не помогает!!!
Выкрутился так
- {$ELSE ASM_VERSION_NO_USE} //временно вырубили использование ASM кода //Pascal
- поставил проверку WinVer
if WinVer() < wvY2k then begin
// старая процедура из KOL 2.02
if GetObject( Value, Sizeof( B ), @B ) = 0 then Exit;
fHandle := Value;
fWidth := B.bmWidth;
fHeight := B.bmHeight;
fHandleType := bmDDB;
end
По прежнему терпеливо ждём комментарий уважаемого автора - Владимира Кладова!
ECM (2005-03-02 09:24:00) [2]P.S. упс - неточность: не затираться, просто будет чтение
несуществующей памяти...:)
ECM (2005-03-02 09:22:00) [3]>Вот еще одна
Это та же проблема.
procedure TBitmap.SetHandle(const Value: HBitmap);
...
Move( Dib.dsBitfields, fDIBHeader.bmiColors, 3* SizeOf(DWORD) );
Пробовали?
Все дело в том, что поле Dib.dsBitfields - это Array[0..2] of DWORD. Естесственно, при копировании 256-ти DWORD-ов, будут
затираться другие переменные или сразу вылезет AV