현재 TdsTaskBar라는 구성 요소로 작업 중이며, 이는 창에서 TaskBar처럼 작동합니다. 즉, 열려있는 모든 창 (이제는 내 애플리케이션 내부)이 내 애플리케이션의 아래쪽에 버튼으로 나열된다는 것을 의미합니다. -창문. 이 버튼은 TSpeedButtons입니다. 이제 윈도우의 아이콘을 변경했습니다.이 아이콘은 항상 SpeedButton의 글리프를 통해 표시됩니다. 문제는 투명성이 작동하지 않는다는 것입니다.Delphi TSpeedButton Glyph 투명도
왼쪽 하단 모서리 픽셀로 정의 된 투명 색을 알고 있지만 내 문제는 아닙니다. 문제는 활성 창을 변경 한 다음 버튼 위로 마우스를 가져갈 때 글리프의 투명한 영역에 버튼 배경 대신 "임의"이미지 아티팩트가 표시된다는 것입니다. 그러면 배경이 현재 활성 창의 아이콘으로 변경되지만 약간의 왜곡이 있습니다.
나는이 유물이 얼마나 단서가 없다,하지만 난 모든 페인트 관련 절차를 점검 때문에, 그것은 TdsTaskBar-/TdsTaskButton-구성 요소에서 오지 않는다는 것을 확신 .
누군가이 문제를 해결하는 방법에 대해 알고 있습니까? 배경을 직접 그리는 방법에 대해서는 이미 생각해 봤지만이 글리프 뒤에있는 실제 버튼 색을 알아야 할 필요가 있습니다. 그 점을 파악하는 방법에 대해 잘 모르겠습니다. 여기
글리프를 할당하는 코드
는 도면 표준 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;
[디자이너] (http://www.pretty-software.com/)에게 나에게 구성 요소의 결함이있는 것 같습니까? – whosrdaddy
필자는 구성 요소의 전체 소스를 가지고 있으며 그다지 코드가 아니며 하나의 짧은 단위입니다. 글리프 그리기는 간단하고 간단합니다. 오류가 그곳에 있지 않다는 것이 확실합니다. 질문을 편집하고 Glyph 도면의 코드를 추가하겠습니다. –
'글리프 (Glyph)'배경을 지울 수 없습니다. 나는 또한 당신이 왜'b'가 필요한지 정말로 이해하지 못합니다. 마지막으로 알파 투명도가 적용된 이미지를 사용하고있는 것처럼 보입니다. 그렇다면 왜 'TransparentColor'를 사용해야합니까? –