Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Alternative zur Paintbox (https://www.delphipraxis.net/193709-alternative-zur-paintbox.html)

Hardy81 31. Aug 2017 11:22

Alternative zur Paintbox
 
Hallo zusammen,

ich bin gerade ein wenig am Verzweifeln. Habe auf einer Form eine Paintbox, in der verschiedene Hintergründe gezeichnet werden müssen - abhängig davon, was der Benutzer ausgewählt hat.

Auf diesen Hintergrund kann der Benutzer nun mit einem Mausklick Stellen markieren.


Mein Problem nun bei dieser Sache:

- Das gezeichnete verschwindet, wenn das Fenster in den Hintergrund gerät, also von einem anderen Fenster verdeckt wird - der Grund für dieses Verhalten ist bekannt

- Die Paintbox mit allen vom Benutzer markierten Stellen - es können bis zu 60 sein - jedes mal neuzeichnen ist für mich keine Alternative, da es unheimlich flackert --> nicht schön


Ich bin leider bei der Grafikprogrammierung nicht so firm. Gibt es Alternativen zur Paintbox oder ist die Herangehensweise generell "falsch" bzw. verbesserungswürdig?


Was ich möchte ist ein Hintergrund, der wenn er einmal gezeichnet wurde statisch bleibt. Daran ändert sich nichts mehr. Lediglich die markierten Stellen, die vom Benutzer kommen sollten einen gewissen Grad der Dynamik aufweisen --> anwählbar, löschen, evtl. verschieben.


Jemand ne Idee, wie ich sowas am besten lösen könnte?

himitsu 31. Aug 2017 12:00

AW: Alternative zur Paintbox
 
Es Verschwindet, weil DU etwas vergessen hast.


TImage.Bitmap.Canvas, da geht alles alleine.

ODER: TPaintBox hat nicht umsonst ein OnPaint-Ereignis.
Da drin mußt du deinen Inhalt neu zeichnen, wenn die Komponente neu gezeichnet wird.
* entweder man merkt sich was gezeichnet werden muß und zeichnet es da neu
* oder man benutzt ein Offscreenbitmap (ein temporäres Bild)
** beim OnPaint wird dieses Bitmap auf den Canvas kopiert
** hier entweder immer doppelt zeichnen (in das Temp-Bitmap und auf das PaintboxCanvas)
** oder immer nur ins Bitmap zeichnen und anschließend ein PaintBox.Repaint auslösen

Hardy81 31. Aug 2017 12:30

AW: Alternative zur Paintbox
 
Zitat:

Es Verschwindet, weil DU etwas vergessen hast.
Ich vergesse nie etwas ;-)


Zitat:

* entweder man merkt sich was gezeichnet werden muß und zeichnet es da neu
Habe ich bereite versucht. Hatte allerdings den unschönen Nebeneffekt, dass das gezeichnete Bild unheimlich geflackert hat.


Zitat:

* oder man benutzt ein Offscreenbitmap (ein temporäres Bild)
Was ist das? Zeichne ich ein Bild "unsichtbar" im Speicher und kopiere dieses dann in die Paintbox? Bzw. lasse es nachdem es im Speicher gezeichnet wurde von der Paintbox zeichnen?


Zitat:

** beim OnPaint wird dieses Bitmap auf den Canvas kopiert
** hier entweder immer doppelt zeichnen (in das Temp-Bitmap und auf das PaintboxCanvas)
** oder immer nur ins Bitmap zeichnen und anschließend ein PaintBox.Repaint auslösen
Bahnhof! :shock:

Jens01 31. Aug 2017 12:56

AW: Alternative zur Paintbox
 
Zitat:

Was ich möchte ist ein Hintergrund, der wenn er einmal gezeichnet wurde statisch bleibt. Daran ändert sich nichts mehr. Lediglich die markierten Stellen, die vom Benutzer kommen sollten einen gewissen Grad der Dynamik aufweisen --> anwählbar, löschen, evtl. verschieben.
Also irgendwie mußt Du immer den Hintergrund bei Veränderung zeichnen und neu auf die Paintbox schicken. Das sollte auch ohne Flackern gehen.
Das statische Bild kannst Du Dir ja einmal erzeugen und dann als Basis immer wieder benutzen und die Änderungen darauf zeichnen.
Wenn Du etwas mit Schieben haben willst, dann solltest Du Dir die Sachen von Graphics32 (TImgView32) angucken. Dort kann man mit Layern arbeiten. Die Einarbeitung kostet aber etwas Zeit. Grafik ist aber grundsätzlich aufwendig (insbesondere die Einarbeitung).
https://github.com/graphics32/graphics32

Luckie 31. Aug 2017 12:56

AW: Alternative zur Paintbox
 
Zitat:

Zitat von Hardy81 (Beitrag 1380047)
Zitat:

* oder man benutzt ein Offscreenbitmap (ein temporäres Bild)
Was ist das? Zeichne ich ein Bild "unsichtbar" im Speicher und kopiere dieses dann in die Paintbox? Bzw. lasse es nachdem es im Speicher gezeichnet wurde von der Paintbox zeichnen?

Genauso.


Zitat:

Zitat:

** beim OnPaint wird dieses Bitmap auf den Canvas kopiert
** hier entweder immer doppelt zeichnen (in das Temp-Bitmap und auf das PaintboxCanvas)
** oder immer nur ins Bitmap zeichnen und anschließend ein PaintBox.Repaint auslösen
Bahnhof! :shock:
Und so macht man es. Was verstehst du jetzt nicht? An welcher Stelle brauchst du Hilfe?
Hier ein kleines Beispiel: http://michael-puff.de/Programmierun...enBitmap.shtml

TiGü 31. Aug 2017 13:03

AW: Alternative zur Paintbox
 
Zitat:

Zitat von Hardy81 (Beitrag 1380047)
Habe ich bereite versucht. Hatte allerdings den unschönen Nebeneffekt, dass das gezeichnete Bild unheimlich geflackert hat.


Zitat:

* oder man benutzt ein Offscreenbitmap (ein temporäres Bild)
Was ist das? Zeichne ich ein Bild "unsichtbar" im Speicher und kopiere dieses dann in die Paintbox? Bzw. lasse es nachdem es im Speicher gezeichnet wurde von der Paintbox zeichnen?


Zitat:

** beim OnPaint wird dieses Bitmap auf den Canvas kopiert
** hier entweder immer doppelt zeichnen (in das Temp-Bitmap und auf das PaintboxCanvas)
** oder immer nur ins Bitmap zeichnen und anschließend ein PaintBox.Repaint auslösen
Bahnhof! :shock:

http://docwiki.embarcadero.com/RADSt...screen-Bitmaps
http://docwiki.embarcadero.com/RADSt..._und_verwalten

https://books.google.de/books?id=9Jz...bitmap&f=false

Hardy81 1. Sep 2017 09:23

AW: Alternative zur Paintbox
 
Danke für die Tips... Ich werds heute Nachmittag mal probieren und berichten.

Hardy81 1. Sep 2017 18:30

AW: Alternative zur Paintbox
 
Hallo nochmal...

Also, ich habe mir nun mal die Geschichte mit dem Offscreen Bitmap angeschaut. Das hilft mir nun schon mal weiter. Die gezeichneten Sachen bleiben erhalten, auch wenn das Fenster geschlossen oder verdeckt wird. --> Super.


Was mir allerdings noch etwas Kopfzerbrechen macht, bzw. was mich etwas überrascht ist die Tatsache welcher Aufwand notwendig wird, wenn die vom Benutzer markierten Stellen verwaltet werden sollen. :shock:

Hier werd ich noch ein gutes Stück Arbeit vor mir haben...


Trotzdem vielen Dank!

Redeemer 1. Sep 2017 19:24

AW: Alternative zur Paintbox
 
Zitat:

Zitat von himitsu (Beitrag 1380038)
Es Verschwindet, weil DU etwas vergessen hast.


TImage.Bitmap.Canvas, da geht alles alleine.

Ohne Bitmap. Nur TImage.Canvas.

Hardy81 1. Sep 2017 20:02

AW: Alternative zur Paintbox
 
Update:

Bin jetzt soweit, dass ich Bereiche markieren kann...

Habs allerdings nicht mit gezeichneten Objekten gelöst, sondern erzeuge mir bei jedem Klick auf die Paintbox an der Stelle eine neue Komponente von Typ TShape. Damit kann ich flexibler arbeiten.

Hinzufügen geht, löschen, ... bis jetzt bin ich zufrieden.


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:11 Uhr.
Seite 1 von 2  1 2      

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