AGB  ·  Datenschutz  ·  Impressum  







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

Auf Shape zeichnen

Ein Thema von slytab · begonnen am 18. Mär 2008 · letzter Beitrag vom 18. Mär 2008
Antwort Antwort
slytab

Registriert seit: 18. Mär 2008
2 Beiträge
 
Delphi 5 Standard
 
#1

Auf Shape zeichnen

  Alt 18. Mär 2008, 14:25
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:
   with shape1 do
   begin
      Canvas.Pen.Color := clBlack;
      Canvas.MoveTo(Left, Top);
      Canvas.LineTo(Width+left, Height+Top);
   end;
Im Prinzip funktioniert es, nur man sieht es nicht, da die Linie immer unter das Shape gezeichnet wird.

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
Miniaturansicht angehängter Grafiken
shapes_und_diagonale_190.gif  
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#2

Re: Auf Shape zeichnen

  Alt 18. Mär 2008, 15:27
Über das with kommst Du nicht an den Canvas des Shapes.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Die Muhkuh
Die Muhkuh

Registriert seit: 21. Aug 2003
7.332 Beiträge
 
Delphi 2009 Professional
 
#3

Re: Auf Shape zeichnen

  Alt 18. Mär 2008, 15:28
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;
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Auf Shape zeichnen

  Alt 18. Mär 2008, 15:30
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.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#5

Re: Auf Shape zeichnen

  Alt 18. Mär 2008, 15:34
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;
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
slytab

Registriert seit: 18. Mär 2008
2 Beiträge
 
Delphi 5 Standard
 
#6

Re: Auf Shape zeichnen

  Alt 18. Mär 2008, 15:59
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?
  Mit Zitat antworten Zitat
Benutzerbild von Die Muhkuh
Die Muhkuh

Registriert seit: 21. Aug 2003
7.332 Beiträge
 
Delphi 2009 Professional
 
#7

Re: Auf Shape zeichnen

  Alt 18. Mär 2008, 16:01
Zitat von slytab:
Kommt man denn irgendwie an die Canvas des shapes?

Aber davon abgesehen, warum sehe ich die Linie nicht, wenn das Shape ausgefüllt ist?
Siehe meine Antwort oben dran

Die Linie wird bei Dir auf die Form gezeichnet und dort drüber wird ein TShape gezeichnet.
  Mit Zitat antworten Zitat
Antwort Antwort


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 09:40 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz