![]() |
Schnittpunkt einer Canvas.LineTo mit Komponente TButton
Hallo,
ich zeichne eine Linie per Canvas.LineTo von einem Punkt zum anderen. Jetzt würde ich aber gerne feststellen, ob sich auf diesem Weg eine andere Komponente, sagen wir ein Button befindet, der geschnitten wird. Falls dies der Fall ist würde ich nämlich gerne den Weg umleiten. Wie kann ich das denn überprüfen ? Gruß, Nico |
Re: Canvas LineTo: Überschneidung feststellen
Hi,
wenn sich ein Control auf dem Canvas befinden kann, ist ei wohl eine von TWinControl abgeleitete Komponente. Somit solltest du mit der Funktion ControlAtPos ans Ziel kommen. Cu, Frank |
Re: Canvas LineTo: Überschneidung feststellen
Wie könnte denn eine Lösung des Problems aussehen, hättest du code ?
|
Re: Canvas LineTo: Überschneidung feststellen
Auf was zeichnest du denn?
Frank |
Re: Canvas LineTo: Überschneidung feststellen
Auf eine PaintBox
|
Re: Canvas LineTo: Überschneidung feststellen
[/delphi]Hi Scorpion,
da kannst du noch etwas tüfteln. Ich hab mal in folgendem Beispiel auf dem Canvas eine Forms einen Test gemacht:
Delphi-Quellcode:
Es geht nur, wenn das Verhältnis der Punkte - hier oben rechts / unten Links verglichen wird.
function TForm1.LinieDurchControl(AControl: TControl): Boolean;
Var LinieX: Integer; LinieY: Integer; WertLinie: Extended; WertBtnTopRight: Extended; WertBtnBottomLeft: Extended; begin Result := False; Liniex := StrToInt(Edit1.Text); LinieY := StrToInt(Edit2.Text); WertLinie := LinieX / LinieY; WertBtnTopRight := AControl.BoundsRect.Right / AControl.BoundsRect.Top; WertBtnBottomLeft := AControl.BoundsRect.Left / AControl.BoundsRect.Bottom; if (WertLinie < WertBtnTopRight) and (WertLinie > WertBtnBottomLeft) then Result := True; Canvas.LineTo(LinieX, LinieY); end; Die Linie muss im Beispiel von oben links (0,0) beginnen. Ist die Linie frei, musst du einen 0 - Punkt ermitteln und unterscheiden, in welche Richtung die Line geht. Wie gesagt, musst noch etwas tüfteln. Du musst dann alle Controls des Parent der Paintbox durchlaufen und testen. Viel Glück! Frank |
Re: Canvas LineTo: Überschneidung feststellen
Hi,
das sieht ja schon nicht schlecht aus. Nur wie kann ich die effektiven Schnittpunkte mit der Komponente bestimmen, so dass damit arbeiten kann. Würde nämlich gerne einen Weg um die Komponente zeichnen. |
Re: Schnittpunkt einer Canvas.LineTo mit Komponente TButton
Liste der Anhänge anzeigen (Anzahl: 2)
Scorpion,
guck' doch mal die angefügte unit an. Da habe ich versucht, die mathematisch präzise Methode zur Schnittpunkt-Bestimmung zu programmieren und zu erklären. Die zugehörige exe-Datei ist auch dabei. Hilft Dir das? mare_crisium |
Re: Schnittpunkt einer Canvas.LineTo mit Komponente TButton
Hi,
vielen Dank, ich schaus mir gleich mal an... Aber könntest du bitte noch die Projektdateien von dem Bsp. posten, das wäre cool |
Re: Schnittpunkt einer Canvas.LineTo mit Komponente TButton
Scorpion,
wie geht'n das? Hab' ich noch nie gemacht! mare_crisium |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:44 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-2025 by Thomas Breitkreuz