Hallo,
ich habe eine Komponente von TCustomPanel abgeleitet die verschiedene Rahmen haben kann. Von dieser Komponente (TCsCustomPanel) habe ich wiederrum eine Komponente (TCsPageNavigation) abgeleitet die eine Eigenschaft Style hat mit der die Komponente in 3 Stilen erscheinen kann. In der Refresh-Methode setze ich je nach Style die BorderTop-Eigenschaft. Das funktioniert auch super. Bei einem Stil muss aber unter dem Border noch nachträglich eine weiße Linie gezeichnet werden um einen Schatten wie bei TBevel darzustellen. Die Linie wird leider nicht angezeigt. Ich vermute das sie schon gezeichnet wird aber das die Paint-Methode des Vorfahren sie wieder überschreibt. Was mache ich falsch bzw. wie kann ich das Problem lösen?
Delphi-Quellcode:
...
...
procedure TCsCustomPanel.DrawBorder(Style: TCsBorderStyle;
Position: TCsBorderPosition);
var
Coord: TPoint;
begin
if Style.Visible and (Style.Width > 0) then
begin
Canvas.Pen.Color := Style.Color;
Canvas.Pen.Width := Style.Width;
Canvas.PenPos := GetBorderStartPosition(Position);
Coord := GetBorderEndPosition(Position);
Canvas.LineTo(Coord.X, Coord.Y);
end;
end;
procedure TCsCustomPanel.Paint;
begin
inherited Paint;
DrawBorder(FBorderLeft, cbpLeft);
DrawBorder(FBorderRight, cbpRight);
DrawBorder(FBorderTop, cbpTop);
DrawBorder(FBorderBottom, cbpBottom);
end;
...
...
procedure TCsPageNavigation.DrawBorderShadow;
begin
Canvas.Pen.Color := clWhite;
Canvas.Pen.Width := 1;
Canvas.MoveTo(0, 1);
Canvas.LineTo(Width - 1 , 1);
end;
procedure TCsPageNavigation.Refresh;
begin
case FStyle of
cwsFlat:
begin
BorderTop.Visible := False;
end;
cwsWin2000:
begin
BorderTop.Visible := True;
BorderTop.Color := clGray;
DrawBorderShadow; // Hier soll die weiße Linie gezeichnet werden
end;
cwsVista:
begin
BorderTop.Visible := True;
BorderTop.Color := clSilver;
end;
end;
end;