Entwickler-Ecke
Sonstiges (Delphi) - Arbeiten mit TImage und Canvas
wafrie - Mi 16.08.06 18:09
Titel: Arbeiten mit TImage und Canvas
Hallo,
als Neuling in diesem Forum möchte ich alle herzlich begrüßen und bereits jetzt darum bitten, mir die gröbsten "Anfänger-Fehler" zu verzeihen. Schon länger bin ich auf der Suche nach einer Lösung für folgendes Problem:
Ich möchte ein Programm erstellen, mit dem es möglich ist einzenle Wegpunkte zu setzen und zu verbinden. Als Delphi-Anfänger habe ich mich für diese Lösung entschieden:
-Als Zeichenbereich dient eine TImage-Komponente
-Durch Doppelklick auf das Image-Objekt können Wegpunkte in verschiedenen Farben erzeugt werden
-Zu jedem dieser Punkte werden Daten wie etwa die Position in einem eigens dafür definierten Datentyp (record) abgespeichert
-Durch Klick auf einen dieser Punkte können dessen Eigenschaften durch einen Vergleich mit dem Datensatz angezeigt werden (Der entsprechende Datensatz wird mittels Koordinatenvergleich und for-Schleife ermittelt)
-Punkte können durch Wechsel in einen anderen Modus gelöscht oder durch Linien verbunden werden
-Mit der Maus können Punkte an einen anderen Ort verschoben werden
An sich erfüllt das Programm alle oben genannten Anforderungen ganz gut. Allerdings erscheint mir die von mir gewählte Lösung aufgrund folgender Aspekte relativ umständlich:
-Es muss jedes Mal eine ganze Reihe von Schleifen abgearbeitet werden, bis ein Punkt hinzugefügt ist oder dessen Eigenschaften angezeigt werden können. Problematisch ist also die Zuordung der Daten zu den einzelnen Bereichen im Bild
-Besonders das verschieben eines Punktes mit der Maus gestaltet sich aufwändig: Das Bild in TImage muss, damit die Bewegung des Punkes flüssig erscheint, unwahrscheinlich oft neu gezeichnet werden.
Wie gesagt, ich bin ein Programmier-Anfänger. Gibt es eine elegantere Lösung für ein solches Programm. Vielleicht bietet Delphi für solche Aufgaben ja passende Befehle an, die ich nur nicht kenne. Muss man eine neue Delphi-Komponente schreiben, um das Probelem effizient zu lösen? Angefügt ist eine beispielhafte Darstellung eines Graphen, der mit dem Programm erstellt wurde
Ich bin für jede Hilfe Dankbar!
wafrie
Marco D. - Mi 16.08.06 18:22
Canvas bietet die Methode LineTo. Du könntest die Records für die Punkte in einer verketteten Liste abspeichern.
Bei den letzten beiden Punkten kann ich dir auch nicht weiterhelfen.
wafrie - Mi 16.08.06 19:12
Hallo,
danke für den Tipp. Das Zeichnen mit Canvas (LineTo) habe ich schon im Griff. Mein Hautproblem ist die Optimierung des Programms. Mir ist es bereits gelungen, die Grundfunktionen (die oberen Stichpunke) zu realisieren. Meine Frage bezieht sich in erster Linie auf die letzten zwei Punkte (Mir ist im Nachhinein aufgefallen, dass ich mein eigentliches Anliegen nicht genau formuliert habe). Mir geht es im Wesentlichen um folgende Punkte:
-Ist es sinnvoll bei dieser Aufgabe mit Canvas zu arbeiten (Ich habe nur wenig Erfahrung, mein Programm kommt mir umständlich vor)
-Gibt es eine komplett andere Möglichkeit, die Anforderungen ohne Canvas zu realisieren
Und noch dazu die beiden letzen Punkte von oben
-Es muss jedes Mal eine ganze Reihe von Schleifen abgearbeitet werden, bis ein Punkt hinzugefügt ist oder dessen Eigenschaften angezeigt werden können. Problematisch ist also die Zuordung der Daten zu den einzelnen Bereichen im Bild
-Besonders das verschieben eines Punktes mit der Maus gestaltet sich aufwändig: Das Bild in TImage muss, damit die Bewegung des Punkes flüssig erscheint, unwahrscheinlich oft neu gezeichnet werden
wafrie
Marco D. - Mi 16.08.06 19:20
Setze mal im OnCreate:
Delphi-Quelltext
1:
| DoubleBuffered := true; |
Vielleicht lässt sich damit das Flackern zumindest vermindern.
wafrie - Mi 16.08.06 23:34
Danke für den guten Tipp! Die Grafikdarstellung funktioniert jetzt wesentlich besser!
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!