AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Linie in abgeleiteter Komponente zeichnen

Ein Thema von Andreas L. · begonnen am 23. Mai 2011 · letzter Beitrag vom 24. Mai 2011
 
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, 20: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 20:23 Uhr)
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:23 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz