Модераторы: Snowy, Alexeis, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как наделить потомка TWinControl прозрачным фоном? 
:(
    Опции темы
GydruS
  Дата 25.1.2012, 18:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 1.10.2010

Репутация: нет
Всего: нет



Добрый день, гуру!

Пытаюсь создать компонент, который будет отрисовывать на собственной канве полупрозрачный png. При этом, он не должен затирать то, что под ним (например, Label). В качестве родительского выбран класс TCustomControl.
И вот беда - он под собой заливает(?) канву цветом формы...

Как можно добиться того, чтобы потомок TCustomControl не затирал то, что под ним отрисовано?
Я пробовал и 
Код

ControlStyle := ControlStyle - [csOpaque];

и 
Код

procedure TMyControl.Paint;
begin
  Canvas.Brush.Style := bsClear;
  inherited;
  ...
end;

и 
Код

procedure TMyControl.Paint;
begin
  SetBkMode(Canvas.Handle, TRANSPARENT);
  ...
end;

Не помогло... 
Не подскажите ли, как быть? Куда смотреть?

Спасибо!
PM MAIL   Вверх
volvo877
Дата 25.1.2012, 18:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2073
Регистрация: 15.11.2004

Репутация: 1
Всего: 116



Цитата(GydruS @  25.1.2012,  17:02 Найти цитируемый пост)
Куда смотреть?
Сюда (ответ Remy)


Это сообщение отредактировал(а) volvo877 - 25.1.2012, 18:39
PM MAIL   Вверх
GydruS
Дата 26.1.2012, 14:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 1.10.2010

Репутация: нет
Всего: нет



volvo877, спасибо за ответ - я сделал вот так:
Код

procedure TGSCustomImageControl.CreateParams(var Params: TCreateParams);
begin
  inherited;
  Params.ExStyle := Params.ExStyle or WS_EX_TRANSPARENT;
end;

procedure TGSCustomImageControl.WMEraseBkGnd(var msg: TWMEraseBkGnd);
begin
  msg.result := 1;
end

Теперь фон не стирается перед отрисовкой в Paint.
Но появляется другая проблема - каждая отрисовка накладывает на отрисованную ранее полупрозрачную картинку еще одну такую же, и получается что полупрозрачность выведенной картинки с каждой отрисовкой уменьшается...

Вот как бы умудриться получать изображение того, что должно быть отрисовано под моим контролом?

Пробую сделать вот так:
Код

...
FParentBMP: TBitMap;
...
procedure TGSCustomImageControl.WMEraseBkGnd(var msg: TWMEraseBkGnd);
begin
  BitBlt(FParentBMP.Canvas.Handle, 0, 0, Width, Height, GetDC(Parent.Handle), Left, Top, SRCCOPY);
  msg.result := 1;
end;

procedure TGSCustomImageControl.Paint;
begin
  BitBlt(Canvas.Handle, 0, 0, Width, Height, FParentBMP.Canvas.Handle, 0, 0, SRCCOPY);
  // далее подготовка картинки и blendFunction
  ...
  // отрисовка
  Windows.AlphaBlend(Canvas.Handle, 0,0,FMasterBMP.Width, FMasterBMP.Height, 
                                    FMasterBMP.Canvas.Handle, 0,0,FMasterBMP.Width,FMasterBMP.Height, bf);
end;

Но это не дает результата... Можете подсказать, как быть в этот раз?

Это сообщение отредактировал(а) GydruS - 26.1.2012, 15:11
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Звук, графика и видео"
Girder
Snowy
Alexeis

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • По вопросам разработки игр стоит заглянуть сюда

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Girder, Snowy.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Звук, графика и видео | Следующая тема »


 




[ Время генерации скрипта: 0.0585 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.