![]() |
Auf Shape zeichnen
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo, ich würde gerne auf einem rechteckigen Shape eine Diagonale einzeichnen.
Ich würde dazu gerne das Canvas des Shapes benutzen, ist zwar protected, aber über with scheine ich dranzukommen:
Delphi-Quellcode:
Im Prinzip funktioniert es, nur man sieht es nicht, da die Linie immer unter das Shape gezeichnet wird.
with shape1 do
begin Canvas.Pen.Color := clBlack; Canvas.MoveTo(Left, Top); Canvas.LineTo(Width+left, Height+Top); end; Ich kann das erkennen, wenn ich das Shape nicht ausfülle. Und: Warum klappt dies nur in der onPaint-Routine, nicht in onActivate? Und wie bekomme es hin, dass ich die Linie sehe, wenn das Shape (weiß) ausgefüllt ist (brush.style = bsSolid)? Dann überdeckt das Shape die Linie. Mir liegt jetzt mehr daran, die Phänomeme zu verstehen, als Alternativlösungen zu bekommen. Viele Grüße & Dänke slytab |
Re: Auf Shape zeichnen
Über das with kommst Du nicht an den Canvas des Shapes.
|
Re: Auf Shape zeichnen
Ich würde eine Komponente von TShape ableiten und mit der dann diesen Strich zeichnen.
Delphi-Quellcode:
interface
type TMyShape = class(TShape) protected procedure Paint; override; end; implementation procedure TMyShape.Paint; begin inherited Paint; Canvas.MoveTo(0, 0); Canvas.LineTo(Width, Height); end; |
Re: Auf Shape zeichnen
Dies ist ein wunderbares Beispiel warum man with nicht unbedingt nehmen wollte - Dadurch sieht man nicht auf anhieb worauf sich die Befehle in dem with beziehen und es kommt zu Irrtümern.
|
Re: Auf Shape zeichnen
Obwohl ich nicht generell die Verwendung von with verteufeln würde, muss ich Jens in diesem Fall Recht geben. Ich möchte wetten, wenn Du Deinen Code etwas erweiterst, tritt keine Änderung ein, aber evtl. geht Dir dann ein Licht auf:
Delphi-Quellcode:
with shape1 do
begin self.Canvas.Pen.Color := clBlack; self.Canvas.MoveTo(Left, Top); self.Canvas.LineTo(Width+left, Height+Top); end; |
Re: Auf Shape zeichnen
Danke erstmal für die vielen, schnellen Antworten.
Ich glaube Ihr habt recht, dass ich über with nicht an die Canvas des Shapes komme. Ich dachte, dass dies der Fall wäre, weil die Werte von Top, Left, Width und Height eben genau die der Shape sind und nicht des Formulars. Deswegen dachte ich, Canvas wäre auch vom Shape und nicht vom Formular. In der Hilfe steht, dass Shapes die Eigenschaft Canvas haben, andereseits scheint man nicht drauf zugreifen zu können. Folgendes geht nicht: shape1.canvas.pen.color := clBlack Ich hab mal irgendwo gelesen, dass Canvas der Shapes protected ist und dachte, ich könnte es mit with aushebeln. (War zwar nicht logisch, zugegeben, aber es sah so aus als ob es klappt :-( Kommt man denn irgendwie an die Canvas des shapes? Aber davon abgesehen, warum sehe ich die Linie nicht, wenn das Shape ausgefüllt ist? |
Re: Auf Shape zeichnen
Zitat:
Die Linie wird bei Dir auf die Form gezeichnet und dort drüber wird ein TShape gezeichnet. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:24 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