Hallo,
habe das TShape für eine eigene Komponente abgeleitet, deren Hintergrund zwar transparent aber gedimmt sein soll. Im Paint rufe ich dazu:
Code:
procedure TExtShape.Paint;
function Shadow(Color: TColor): TColor;
const
Delta = 0.7;
begin
Color := ColorToRGB(Color);
Result :=
RGB(Round(GetRValue(Color) * Delta),
Round(GetGValue(Color) * Delta),
Round(GetBValue(Color) * Delta));
end;
var y, x: Integer;
begin
inherited Paint;
if FIsDimmed then
for Y := 0 to Height -1 do
for X := 0 to Width -1 do
SetPixelV( Canvas.Handle, X, Y, Shadow(GetPixel(Canvas.Handle, X, Y)));
Canvas.Font := Font;
Canvas.TextOut((Width - Canvas.TextWidth(Caption)) div 2, (Height - Canvas.TextHeight(Caption)) div 2, Caption);
end;
Das geht prinzipel, aber mit deutlichem Flackern beim Neuzeichnen. Stehe etwas auf dem Schlauch wie das mit z.B. ScanLine schneller bekomme, insbesondere soll das Shape mit RoundRectangle abgerundet sein, und nicht so wie im Screenshot.
Gruß,
Nic