В настоящее время я работаю с компонентом под названием TdsTaskBar, который должен работать как панель задач в окнах, что означает, что все открытые окна (но теперь внутри моего приложения) перечислены в виде кнопок в нижней части моего окна приложения. Это кнопки TSpeedButtons. Теперь я изменил значки своих собственных окон, эти значки всегда отображаются через глиф SpeedButtons. Проблема в том, что прозрачность не работает.
Я знаю о цвете прозрачности, определяемом пикселем в левом нижнем углу, но это не моя проблема. Проблема в том, что прозрачные области глифов показывают "случайные" артефакты изображения вместо фона кнопки при смене активного окна и последующем наведении курсора на кнопки. Это меняет фон на значок теперь активного окна, но с некоторым искажением.
Я понятия не имею, как эти артефакты попадают туда, но я уверен, что они не исходят от TdsTaskBar-/TdsTaskButton-Component, потому что я изучил все процедуры, связанные с отрисовкой.
Кто-нибудь знает, как решить эту проблему? Я уже думал о том, чтобы нарисовать фон самостоятельно, но поэтому мне нужно знать фактический цвет кнопки за этим глифом, и это еще одна вещь, в которой я не уверен, как это понять.
Здесь фрагмент кода для назначения глифа, рисунок обрабатывается стандартным кодом Vcl SpeedButton:
procedure TTaskBarButton.AssignGlyphIcon;
var
GlyphIcon: TIcon;
b: TBitmap;
begin
if TForm(owner).Icon.Empty then
GlyphIcon := Application.Icon
else
GlyphIcon := TForm(owner).Icon;
b := TBitmap.create;
try
b.Width := GlyphIcon.Width;
b.Height := GlyphIcon.Height;
b.Canvas.Brush.Color := b.TransparentColor; // This two lines were added by me
b.Canvas.FillRect(b.ClipRect); // so that the background of my "helper" bitmap is transparent, too
b.Canvas.Draw(0,0, GlyphIcon);
Glyph.Width := 16;
Glyph.Height := 16;
Glyph.Canvas.StretchDraw(Rect(0, 0, 16, 16), b);
finally
b.free;
end;
end;
Glyph
. Я тоже не очень понимаю, зачем вамb
. Наконец, похоже, вы используете изображения с альфа-прозрачностью. Если да, то зачем использоватьTransparentColor
? - person David Heffernan   schedule 07.04.2014Glyph
не стирается и из-за прозрачности вы получите эти артефакты - person Sir Rufo   schedule 07.04.2014