Страница 1 из 1
StretchBlt и стиль XP
Добавлено: 29 окт 2007, 10:02
Hastur
Код: Выделить всё
SetStretchBltMode(ACanvas.Handle,HALFTONE);
StretchBlt(ACanvas.Handle,ARect.Left-1,ARect.Top-1,
ARect.Right-ARect.Left,ARect.Bottom-ARect.Top+3,
pict.Canvas.Handle,1,0,pict.Width-sm,
pict.Height,SRCCOPY);
OldBkMode := SetBkMode(ACanvas.Handle, TRANSPARENT);
ACanvas.TextOut(ARect.Left+2,ARect.Top+2,TMenuItem(Sender).Caption);
SetBkMode(ACanvas.Handle, OldBkMode);
ACanvas это канва пункта главного меню, pict это объект TBitMap, картинку гружу из бмпшного файла. И всё это работает под классическим стилем, а под стилем XP при закрытие программы(даже не при выполнение этого кода!!!) вылетает куча мессаг о критических ошибках. Что за собственно нафиг?
Re: StretchBlt и стиль XP
Добавлено: 29 окт 2007, 13:22
Игорь Акопян
" писал(а):даже не при выполнение этого кода
стало быть не в этом куске дело

Re: StretchBlt и стиль XP
Добавлено: 29 окт 2007, 17:18
Hastur
Всё проверено. Дело именно в рисование на канве и именно функцией StretchBlt. И косяк вонизникает именно для стиля рабочего стола XP!
Re: StretchBlt и стиль XP
Добавлено: 31 окт 2007, 17:03
Hastur
Если кому интересно. Я разобрался в чём косяк был. Выше приведённый код стоит на прорисовки пункта меню. Объект pict типа TBitMap убивался при закрытии программы в обработчике OnClose. Косяк был в том что после OnClose приложение почемуто опять пытается прорисовать все пункты меню, вызывая про этом выше указанный код, который в свою очеред пытается обратиться к несуществующему уже pict, что собственно и приводило к множеству ошиобок связанным с памятью.
Re: StretchBlt и стиль XP
Добавлено: 31 окт 2007, 19:09
Duncon
Приложение делает все верно, для этого и существует следующий "цикл" жизни формы Destroy