StretchBlt и стиль XP

Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду

Ответить
Аватара пользователя
Hastur
Сообщения: 18
Зарегистрирован: 05 авг 2007, 18:09

Код: Выделить всё

 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 при закрытие программы(даже не при выполнение этого кода!!!) вылетает куча мессаг о критических ошибках. Что за собственно нафиг?
Аватара пользователя
Игорь Акопян
Сообщения: 1440
Зарегистрирован: 13 окт 2004, 17:11
Откуда: СПБ
Контактная информация:

&quot писал(а):даже не при выполнение этого кода
стало быть не в этом куске дело ;)
Изображение
Аватара пользователя
Hastur
Сообщения: 18
Зарегистрирован: 05 авг 2007, 18:09

Всё проверено. Дело именно в рисование на канве и именно функцией StretchBlt. И косяк вонизникает именно для стиля рабочего стола XP!
Аватара пользователя
Hastur
Сообщения: 18
Зарегистрирован: 05 авг 2007, 18:09

Если кому интересно. Я разобрался в чём косяк был. Выше приведённый код стоит на прорисовки пункта меню. Объект pict типа TBitMap убивался при закрытии программы в обработчике OnClose. Косяк был в том что после OnClose приложение почемуто опять пытается прорисовать все пункты меню, вызывая про этом выше указанный код, который в свою очеред пытается обратиться к несуществующему уже pict, что собственно и приводило к множеству ошиобок связанным с памятью.
Аватара пользователя
Duncon
Сообщения: 2085
Зарегистрирован: 10 окт 2004, 14:11
Откуда: Питер
Контактная информация:

Приложение делает все верно, для этого и существует следующий "цикл" жизни формы Destroy
Ответить