Einzelnen Beitrag anzeigen

Andreas L.

Registriert seit: 23. Mai 2011
Ort: Furth im Wald
308 Beiträge
 
Delphi 11 Alexandria
 
#1

Linie in abgeleiteter Komponente zeichnen

  Alt 23. Mai 2011, 19:12
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;
Andreas Lauß
Blog

Geändert von Andreas L. (23. Mai 2011 um 19:23 Uhr)
  Mit Zitat antworten Zitat