Страница 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
Игорь Акопян
&quot писал(а):даже не при выполнение этого кода
стало быть не в этом куске дело ;)

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