Hier folgend die Lösung des Problems, obwohl eine Lösung für neuere Delphi-Versionen, zumindest ab XE, nicht mehr relevant ist. Dagegen für das auch von mir immer noch zumeist bevorzugte, wunderbar kompakte und stabile Delphi 7 aber schon.
Als Ergebnis meiner vergleichenden Untersuchung der
VCL-Quellcodes zwischen Delphi XE und Delphi 7 ist folgendes herausgekommen: In der
Unit XPActnCtrls.pas von Delphi 7 müssen an 3 Positionen zwei neue Codeanweisungen eingefügt werden.
Der wichtigste, zusätzlich einzufügende Code ist Code #1:
// CODE #1:
Code:
Canvas.Brush.Style := bsClear;
Zur Optimierung des Aussehens, aber nicht zwingend notwendig, ist der weitere, an zwei Positionen in der
Unit inzufügende Code:
// CODE #2:
Code:
SelBmp.Canvas.FillRect(SelBmp.Canvas.ClipRect);
ActionList.Images.Draw(SelBmp.Canvas, 0, 0, ActionClient.ImageIndex, dsNormal, itMask);
Diese Codes müssen in der
Unit XPActnCtrls.pas an folgenden Stellen zugefügt werden:
CODE #1:
Code:
procedure TXPStyleDropDownBtn.DrawFrame(ARect: TRect; Down: Boolean);
begin
if Enabled and not (ActionBar.DesignMode) then
if (MouseInControl or IsChecked) and Assigned(ActionClient) then
begin
// **** CODE #1 HIER ZUFÜGEN ***
Canvas.Pen.Color := ActionBar.ColorMap.BtnFrameColor;
{...}
end;
end;
CODE #2:
Code:
procedure TXPStyleButton.DrawGlyph(const Location: TPoint);
{...}
try
{...}
if ActionList.Images.GetBitmap(ActionClient.ImageIndex, SelBmp) then
begin
{...}
// **** CODE #2 HIER ZUFÜGEN ***
DrawState(Canvas.Handle, Canvas.Brush.Handle, nil, SelBmp.Handle, 0,
NewLocation.X + 1, NewLocation.Y + 1, 0, 0, DST_BITMAP or DSS_MONO);
end;
finally
{...}
end;
{...}
end;
procedure TXPStyleDropDownBtn.DrawGlyph(const Location: TPoint);
{...}
try
{...}
if ActionList.Images.GetBitmap(ActionClient.ImageIndex, SelBmp) then
begin
{...}
// **** CODE #2 HIER ZUFÜGEN ***
DrawState(Canvas.Handle, Canvas.Brush.Handle, nil, SelBmp.Handle, 0,
NewLocation.X + 1, NewLocation.Y + 1, 0, 0, DST_BITMAP or DSS_MONO);
end;
finally
{...}
end;
{...}
end;
Anschließend natürlich das komplette Rebuild nicht vergessen, damit die DCUs das auch mitbekommen.