Hi,
ich hab ein eigenes Control.
Dieses Zeichnet sich in einer überschriebenen Paint-Routine selber: Erst Hintergrund (Farbe), dann Vordergrund (Text), dann Rahmen.
Delphi-Quellcode:
procedure TMyCustomPanel.Paint;
var Rect: TRect;
begin
Rect := GetClientRect;
doPaintBackground(Rect);
doPaintBorder(Rect);
doPaintText;
end;
procedure TMyCustomPanel.doPaintBackground(const ARect: TRect);
begin
if not ParentBackground then
begin
Canvas.Brush.Color := Color;
Canvas.FillRect(ARect);
end;
end;
Das Funktioniert einwandfrei. Das Control ist hinterher hellgrün mit schwarzem Text und der Rahmen hat auch die richtige Farbe.
Nun habe ich eine Ableitung davon, die zusätzlich ein Hintergrundbild haben kann.
Alte Version:
Delphi-Quellcode:
procedure TMyPanelAbleitung.doPaintBackground(const ARect: TRect);
begin
inherited; // hier WIRD das obere Paint ausgeführt
// draw background image if availabe
if Assigned(FBackgroundBitmap) then
begin
BitBlt(Canvas.Handle,
ARect.Left + 2,
ARect.Top + 2,
FBackgroundBitmap.Width,
FBackgroundBitmap.Height,
FBackgroundBitmap.Canvas.Handle,
0,
0,
SRCCOPY
);
end;
end;
Tja. Nun ist das ganze Control aber leider innen weiss - mit dem gezeichneten Bild. Rahmen und Text passen weiterhin - aber der vorher gezeichnete hellgrüne Hintergrund ist futsch und mit Weiss überzeichnet.
Die aktuelle Version benutzt folgenden Code:
http://www.delphipraxis.net/internal...t.php?t=30824:
Delphi-Quellcode:
procedure TMyPanelAbleitung.doPaintBackground(const ARect: TRect);
var BlendFunction: TBlendFunction;
begin
inherited;
// draw background image if availabe
if Assigned(FBackgroundBitmap) then
begin
BlendFunction.AlphaFormat := 0;
BlendFunction.AlphaFormat := 0;
BlendFunction.BlendFlags := 0;
BlendFunction.BlendOp := AC_SRC_OVER;
BlendFunction.SourceConstantAlpha := 100; // 0 .. 255 (255 = volle Sichtbarkeit)
TryAlphaBlend(Canvas.Handle,
ARect.Left + 2,
ARect.Top + 2,
FBackgroundBitmap.Width,
FBackgroundBitmap.Height,
FBackgroundBitmap.Canvas.Handle,
0,
0,
FBackgroundBitmap.Width,
FBackgroundBitmap.Height,
BlendFunction
);
end;
end;
Nun wird das Bild halt Transparent aufs Weiss gezeichnet - nix vom Hellgrünen über.
Wo ist der Hintergrund hin, den ich in der Basisklasser definitiv einwandfrei zeichne?