AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Alternative zur Paintbox

Ein Thema von Hardy81 · begonnen am 31. Aug 2017 · letzter Beitrag vom 16. Sep 2017
Antwort Antwort
Seite 1 von 2  1 2      
Hardy81

Registriert seit: 25. Nov 2016
7 Beiträge
 
#1

Alternative zur Paintbox

  Alt 31. Aug 2017, 11:22
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?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.114 Beiträge
 
Delphi 12 Athens
 
#2

AW: Alternative zur Paintbox

  Alt 31. Aug 2017, 12:00
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
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Hardy81

Registriert seit: 25. Nov 2016
7 Beiträge
 
#3

AW: Alternative zur Paintbox

  Alt 31. Aug 2017, 12:30
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!
  Mit Zitat antworten Zitat
Jens01

Registriert seit: 14. Apr 2009
670 Beiträge
 
#4

AW: Alternative zur Paintbox

  Alt 31. Aug 2017, 12:56
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
Achtung: Bin kein Informatiker sondern komme vom Bau.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#5

AW: Alternative zur Paintbox

  Alt 31. Aug 2017, 12:56
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!
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
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.060 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: Alternative zur Paintbox

  Alt 31. Aug 2017, 13:03
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!
http://docwiki.embarcadero.com/RADSt...screen-Bitmaps
http://docwiki.embarcadero.com/RADSt..._und_verwalten

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

Registriert seit: 25. Nov 2016
7 Beiträge
 
#7

AW: Alternative zur Paintbox

  Alt 1. Sep 2017, 09:23
Danke für die Tips... Ich werds heute Nachmittag mal probieren und berichten.
  Mit Zitat antworten Zitat
Hardy81

Registriert seit: 25. Nov 2016
7 Beiträge
 
#8

AW: Alternative zur Paintbox

  Alt 1. Sep 2017, 18:30
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.

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


Trotzdem vielen Dank!
  Mit Zitat antworten Zitat
Redeemer

Registriert seit: 19. Jan 2009
Ort: Kirchlinteln (LK Verden)
1.016 Beiträge
 
Delphi 2009 Professional
 
#9

AW: Alternative zur Paintbox

  Alt 1. Sep 2017, 19:24
Es Verschwindet, weil DU etwas vergessen hast.


TImage.Bitmap.Canvas, da geht alles alleine.
Ohne Bitmap. Nur TImage.Canvas.
Janni
2005 PE, 2009 PA, XE2 PA
  Mit Zitat antworten Zitat
Hardy81

Registriert seit: 25. Nov 2016
7 Beiträge
 
#10

AW: Alternative zur Paintbox

  Alt 1. Sep 2017, 20:02
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.
Programmieren ist Angst
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:21 Uhr.
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