Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - TPaintBox über den Bildschirmrand schieben
Highclass - Mo 18.10.10 13:34
Titel: TPaintBox über den Bildschirmrand schieben
Guten Tag,
ich habe in einem meiner Programme eine TPaintBox verwendet. Allerdings erscheinen auf dieser immer Streifen wenn man sie über den Bildschirmrand und wieder zurück schiebt. Da dies sicherlich ein bekanntes "Problem" ist, ich aber bei googlen keine hilfreiche Antwort gefunden habe, wollte ich hier mal nachfragen.
Wie wird dies umgangen / behoben?
elundril - Mo 18.10.10 13:39
Hallo und :welcome: im Delphi-Forum!
Nach dem verschieben neu zeichnen lassen, würde ich mal sagen.
lg elundril
Hidden - Mo 18.10.10 15:30
Moin!
Eine Paintbox ist kein Bildbehälter mit "Permanentstift", und das mit Absicht: Um so ein "Permanent"-Verhalten für ein Bild zu erzeugen, muss es nämlich jedes Mal neu auf den Bildschirm gezeichnet werden, wenn es teilweise verdeckt worden ist.
Ein Bildbehälter, der nicht automatisch sofort so neu gezeichnet(und damit komplett fremdverwaltet) wird wie er war, wird dann an dieser Stelle grau werden: Du kannst z.B. mit einem anderen Fenster darauf "radieren".
Die TPaintbox ist nun gerade ein solcher Behälter, den du selbst verwalten kannst. Einer, der sich automatisch wiederherstellt, wäre ein TImage.
Im Prinzip ist für ernsthafte Projekte eine Paintbox beispielsweise einem Image vorzuziehen, da das selbst Zeichnen unter Umständen flüssiger läuft: Dann nämlich, wenn durch automatisches Zeichnen überflüssige Operationen ausgeführt werden. Z.B., dass einmal neu gezeichnet wird, und dann direkt darüber noch einmal, weil sich z.B. ein Objekt ein Stück bewegt hat.
Und zur Verwendung: Windows schickt einem Fenster eine Nachricht, wenn es neu gezeichnet werden muss(z.B. aufgrund teilweiser Verdeckung). Genau auf diese Nachricht reagiert beispielsweise ein TImage automatisch, du musst dies explizit tun - indem du die Methode OnPaint der Paintbox ausfüllst.
Auf das Canvas einer Paintbox sollte man außerhalb dieser OnPaint-Methode gar nicht zugreifen(und es IMHO auch gar nicht dürfen!).
lg,
Highclass - Mo 18.10.10 21:46
Danke schonmal für eure Antwort.
Das OnPaint Ereigniss nutze ich schon die gesamte Zeit. Ich rufe in dieser 2 Prozeduren auf, eine zum entfernen aller Zeichnungen auf der Paintbox und eine weitere um die neue Zeichnung darstellen zu lassen. Allerdings funktioniert dies trotzdem nicht. Die Prozeduren an sich arbeiten allerdings einwandfrei, dessen bin ich mir ziemlich sicher, da das Programm bereits wie gewünscht funktioniert.
Die Frage ist nun, warum bleiben diese Streifen bestehen? Bzw wann oder wie stellt man ein das das OnPaint ereigniss ausgeführt wird, sobald die Paintbox ausserhalb des im Bildschirms sichtbaren Bereich ist?
Hidden - Mo 18.10.10 22:02
Hmm, da bräuchte ich jetzt mal einen Screenshot :gruebel:
Edit: UNd eventuell etwas Source, bzw. Das Projekt oder ein Minimalbeispiel mal als Archiv ohne Exe.
bummi - Mo 18.10.10 22:05
Warum willst Du außerhalb des sichtbaren Bereichs malen?
gegf. in ein BMP malen und dieses in der Paintbox darstellen?
Ich verstehe nicht was Dein Problem ist...
FinnO - Di 19.10.10 00:33
Moin,
Highclass hat folgendes geschrieben : |
| Die Frage ist nun, warum bleiben diese Streifen bestehen? Bzw wann oder wie stellt man ein das das OnPaint ereigniss ausgeführt wird, sobald die Paintbox ausserhalb des im Bildschirms sichtbaren Bereich ist? |
mit
TPaintbox.Repaint; zeichnest du sie neu. Mit Form.Left und Form.Top sowie Desktop.Width und Desktop.Height sollte sich da recht simpel etwas zaubern lassen ;)
LG
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!