![]() |
Linienkomponente
Hi Leute!
Ich suche eine Möglichkeit, eine Klasse zu Programmieren, die folgendes kann:
Zuerst wollte ich einfach per eine Klasse schreiben, der beim create ein Canvas übergeben, und dann auf dieses zeichenen. Jedoch kann ich so keine OnClick ereignisse für die einzelnen Objekte erstellen (Oder doch?) Meine zweite Idee war für jede Linie ein TImage zu benutzen und auf diesem zu zeichnen. So hätte ich auch ein onClick-Ereignis. Jedoch entstand nun dass Problem, dass wenn eine Linie unter dem (durchsichtigen Teil) eines anderen TImage verläuft, dennoch das onClick-Ereignis des an der Stelle durchsichtigen TImage ausgeführt wird. Bei Torry gibt dazu soweit ich gesehen habe auch keine andere Lösung. Hat eventuell einer von euch eine Idee, wie ich sowas umsetzen kann? (Die Linien werden erst zur Laufzeit erstellt) Gruß Lars |
Re: Linienkomponente
Lustig, solch eine Klasse will ich auch bald programmieren *g* . Da ich aber mit dem Projekt noch nicht angefangen habe, kann ich dir auch noch keinen Vorschlag zur Struktur machen.
So jedenfalls könnte ich mir es vorstellen: Alle Punkte tragen sich in die Liste einer Container-Klasse ein, die sie verwaltet und Events an sie weiterleitet. Eine Möglichkeit wäre dann, die Containerklasse als nicht sichtbare Komponente zu entwerfen und sie mit den Events eines Images zu verknüpfen, oder die Containerklasse selbst von TImage abzuleiten. |
Re: Linienkomponente
Hi!
Da gibt es doch TBevel... Das kann doch eine wunderbare Linie zeichnen... :-D mfg, Dj_Base |
Re: Linienkomponente
Zitat:
Und es gibt auch kein OnClick-Ereignis Zitat:
|
Re: Linienkomponente
Ich würde die Linien von der Darstellung trennen.
Also keine Controls für die Linien verwenden. Als Erstes eine Klasse für eine Linie:
Delphi-Quellcode:
Dadurch, dass die Punkte als double gespeichert werden, kann später problemlos Skaliert werden.
TLinie = class(TPersistent)
property X1:double; property Y1:double; property X2:double; property Y2:double; function CalcLength:double; property Color:TColor; property ArrowStyle:TArrowStyle; // die Pfeile end; Du sammelst alle Linien in einer TObjectList. Dann brauchst du noch eine Klasse, die die Linien auf ein Canvas zeichnet:
Delphi-Quellcode:
Zu guter Letzt brauchst du noch etwas "Klebstoff".
TLineViewer = class(TObject)
property Width:integer; // Breite deines Ausgabe Canvas property Height:integer; property Canvas:TCanvas; property ScaleX:double; // Vergrösserung in X-richtung property ScaleY:double; // Vergrösserung in Y-richtung procedure DawLine(line:TLinie); // hier wird gezeichnet procedure DrawLines(lines:TObjectList); // zeichnet ALLE Linien // findet die Linie an Position x,y oder liefert nil function FindLineAt(lines:TObjectList; x,y:integer):TLinie; end; Also ein TImage oder TPaintBox als Ausgabedevice für TLineViewer. Ein Klick auf das Image wird dann auf FindLineAt weitergeleitet. Wenn FindLineAt eine Linie liefert, dann entscheidet deine Anwendung, was mit dieser Linie passieren soll: Löschen, Selektieren, Umfärben, Pfeil ändern,... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:43 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