![]() |
Funktionsplotter: Kurve mit Maus flüssig verschieben
Hallo,
ich habe ein Problem beim verschieben einer Grafik/Kurve auf einem TImage: Das verschieben der Kurve mit der Maus ist nicht "flüssig" sondern es sieht aus als sei die Akualisierungfrequenz des Bildes zu niedrig. Gibt es eine Möglichkeit das zu verbessern? Zur Vorgehensweise: Ich habe ein TImage und ein TBitmap. Bewege ich die Maus mit gedrückter linker Maustaste, soll der Inhalt des Images entsprechend verschoben werden.
Ist eine höhrer Frequenz mit diesen Komponenten überhaupt möglich? Oder sollte ich methodisch ganz anders vorgehen? |
AW: Funktionsplotter: Kurve mit Maus flüssig verschieben
Zitat:
Eine TImage-Komponente ist wirklich nur für das Wiedergeben von "statsichen" Bilder gedacht, und nicht geeignet, wenn es darum geht, häufig neu zu zeichnen. Für solche Fälle eignet sich eher eine PaintBox, auf deren Canvas im OnPaint-Ereignis gezeichnet werden kann. |
AW: Funktionsplotter: Kurve mit Maus flüssig verschieben
Danke für den Tip!
Bin gerade dabei das Program auf TPaintbox umzuschreiben. Soweit ich bisher gelesen habe, muss (oder kann?) man bei TPaintbox direkt auf den Canvas zeichnen und muss (oder braucht?) nicht den Umweg über ein TBitmap gehen. Hat das nicht auch wieder Performance Nachteile, wenn ich jede einzelne Zeichenaktion direkt im Onpaint Ereignis ausführen muss? Habe gerade versucht die Grafik per Assign vom separaten Bitmap zu kopieren, aber offensichtlich sind TPaintbox.Canvas und TBitmap.Canvas nicht kompatibel. Wie bekomme ich die Grafik denn nun in die Paintbox? |
AW: Funktionsplotter: Kurve mit Maus flüssig verschieben
Bei einer PaintBox muss du nicht erst auf ein Bitmap im Speicher zeichnen, sondern du kannst direkt auf die Canvas der PaintBox zeichnen. Wenn du dir in diesem Zusammenhang die Eigenschaft "
![]() Ausgeben kannst du dann z.B. per
Delphi-Quellcode:
oder
paintbox.canvas.paint({...});
Delphi-Quellcode:
im OnPaint-Ereignis der PaintBox.
BitBlt({...});
EDIT: Muss natürlich paintbox.canvas.paint heißen... |
AW: Funktionsplotter: Kurve mit Maus flüssig verschieben
Ich habe jetzt auf TPaintbox umgestellt. Allerdings ist das Verschieben immer noch nicht flüssig.
Im OnPaint-Ereignis der Paintbox kopiere ich mit bitblt den Inhalt des bitmaps in die Paintbox. Im OnMouseMove-Ereignis erstelle ich das bitmap neu und rufe dann paintbox.repaint auf. Sollte es so schon funktionieren, oder sollte ich direkt in die Paintbox zeichnen? EDIT: Habe gerade ein Minimalbeispiel gemacht und dort funktioniert es. Ich werde jetzt erstmal prüfen müssen, wann bzw. wo der Fehler erzeugt wird. Danke! |
AW: Funktionsplotter: Kurve mit Maus flüssig verschieben
Ich würde zunächst mal mit
![]() ![]() |
AW: Funktionsplotter: Kurve mit Maus flüssig verschieben
Zitat:
|
AW: Funktionsplotter: Kurve mit Maus flüssig verschieben
Sowas habe ich vor kurzem erst mit TImage32 und GR32_lines von Graphics32 hergestellt und es ging so wie von Dir anfangs beschrieben sehr gut.
|
AW: Funktionsplotter: Kurve mit Maus flüssig verschieben
Danke für die vielen Antworten und Tips.
Nach einigem Aufräumen im Code funktioniert etzt alles einwandfrei. Zitat:
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:01 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