Autor Beitrag
Highclass
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Mo 18.10.10 13:34 
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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3747
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: 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

_________________
This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
Hidden
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2242
Erhaltene Danke: 55

Win10
VS Code, Delphi 2010 Prof.
BeitragVerfasst: 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,

_________________
Centaur spears can block many spells, but no one tries to block if they see that the spell is a certain shade of green. For this purpose it is useful to know some green stunning hexes. (HPMoR)
Highclass Threadstarter
Hält's aus hier
Beiträge: 2



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2242
Erhaltene Danke: 55

Win10
VS Code, Delphi 2010 Prof.
BeitragVerfasst: 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.

_________________
Centaur spears can block many spells, but no one tries to block if they see that the spell is a certain shade of green. For this purpose it is useful to know some green stunning hexes. (HPMoR)
bummi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1248
Erhaltene Danke: 187

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1331
Erhaltene Danke: 123

Mac OSX, Arch
TypeScript (Webstorm), Kotlin, Clojure (IDEA), Golang (VSCode)
BeitragVerfasst: Di 19.10.10 00:33 
Moin,

user profile iconHighclass hat folgendes geschrieben Zum zitierten Posting springen:
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