Как создать узлы с прозрачным фоном в TVirtualDrawTree? - PullRequest
2 голосов
/ 06 апреля 2011

Я извлекаю пользовательский элемент управления из TVirtualDrawTree и переопределяю событие DoPaintBackground, чтобы нарисовать эффект градиента фона для дерева.

Я также переопределяю функцию DoBeforeItemPaint, чтобы я мог рисовать элементы в виде дерева. Однако мне не удается заставить предметы рисовать на прозрачном фоне.

Глядя на источник для TVirtualDrawTree, выглядит, как будто элемент копируется в изображение TBitmap, а затем копируется на холст, однако я попытался отредактировать источник и установить параметры прозрачности для самого растрового изображения, и он все еще не работает. кажется, не работает.

Я также пытался очистить холст перед рисованием, например. Canvas.Brush.Style := bsClear и заполнение предмета прямоугольником, но без радости.

1 Ответ

3 голосов
/ 06 апреля 2011

Не делайте прозрачности, обманывайте!

Рисование градиента звучит как большая работа: перетяните его во временное растровое изображение, чтобы вам не приходилось создавать его заново каждый раз, когда вызывается DoPaintBackgrdound(). Когда у вас есть фон в растровом изображении, вы можете BitBlt соответствующую часть в Canvas при обработке DoBeforeItemPaint, и вы можете BitBlt растровое изображение для всего виртуального дерева, когда вам нужен весь фон.

Таким образом, вам не нужно иметь дело с дорогой прозрачностью, но для конечного пользователя похоже, что ваши элементы были нарисованы с использованием прозрачности. Это победа: выигрышная ситуация.

...