Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Grafikfehler verhindern (https://www.delphipraxis.net/69173-grafikfehler-verhindern.html)

StefanW 11. Mai 2006 09:27


Grafikfehler verhindern
 
Liste der Anhänge anzeigen (Anzahl: 2)
Hi DP,

ich bin momentan dabei für ein Programm eine schönere Oberfläche zu gestalten, und da das mit einer PNG (und ihrem Alphakanal) so schön geht hab ich jedenfalls eine "Gezeichnet". Sieht auch wunderbar aus, allerdings entstehen solche bescheidenen Grafikfehler, wenn sich ein anderes Fenster davorlegt und sich danach verschiebt oder minimiert.

Ich hab mal die Oberfläche und ein Screenshot des Grafikfehlers angehängt...

vllt hat ja einer von euch eine Lösung für das Problem... ich beiß mir da momentan die Zähne drann aus.

Tschau Stefan

OregonGhost 11. Mai 2006 09:32

Re: Grafikfehler verhindern
 
Wenn ich das richtig sehe, ist dein Problem, dass andere Fenster durch den äußeren "weißen" Rand der Form durchscheinen, oder? Das liegt daran, dass das Bild an der Stelle transparent ist. Alpha-Wert auf 255 bzw. 1 setzen für den Rand :)

Matze 11. Mai 2006 09:41

Re: Grafikfehler verhindern
 
Zitat:

Zitat von OregonGhost
Wenn ich das richtig sehe, ist dein Problem, dass andere Fenster durch den äußeren "weißen" Rand der Form durchscheinen, oder?

Das Problem ist sicher, dass, wenn ein Fenster über seiner Anwendung ist und minimiert wird, eine Art "Screenshot" dieses Fensters auf seiner grafischen Oberfläsche zurückbleibt.

Beim normalen Canvas würde ich es im OnPaint neu zeichnen, doch ob das mit PNG bei dir geht, kann ich dir nicht sagen.

StefanW 11. Mai 2006 09:44

Re: Grafikfehler verhindern
 
und wie mach ich das? (mal blöd gefragt) ich hab das Form mittels
Delphi-Quellcode:
Form1.Brush.Style:=bsClear;
transparent gemacht. wenn ich das per Alphablend vom Form mache dann verschwindet doch auch mein PNG auf dem Form... und in der PNG den Wert setzen bringt auch nix da (wie man im Schatten sieht)

Matze 11. Mai 2006 09:47

Re: Grafikfehler verhindern
 
Hi,

du könntest folgendes (zusätzlich?) eingeben, ich weiß nicht ob's funktioniert, aber erste Tests waren positiv. ^^

Delphi-Quellcode:
Form1.Canvas.Brush.Style := bsClear;

StefanW 11. Mai 2006 09:53

Re: Grafikfehler verhindern
 
Liste der Anhänge anzeigen (Anzahl: 1)
leider nein, wie gesagt ziemlich knifflig

OregonGhost 11. Mai 2006 10:01

Re: Grafikfehler verhindern
 
Ah, jetzt seh ich erst, was gemeint war.
bsClear bringt aber doch nicht wirklich was, oder? Das bedeutet doch nur, dass "nichts" gezeichnet wird. Es bedeutet nicht, dass der Hintergrund durchscheint. Das heißt, das, was einmal im Fenster ist, bleibt auch dort, bis es wieder richtig überzeichnet wird.

Das, was du vor hast, erfordert doch ein LayeredWindow, oder?
Wenn man AlphaBlend = true macht, müsste das Fenster schon Layered sein. Dann müsstest du, falls Delphi von sich aus keine Möglichkeit dazu bietet, mit der Funktion UpdateLayeredWindow deine PNG-Grafik als Quelle für die Grafik des Fensters einsetzen. Kann aber sein, dass du das Fenster dann bei jeder Bewegung etc. mit UpdateLayeredWindow aktualisieren musst.
UpdateLayeredWindow

StefanW 11. Mai 2006 10:43

Re: Grafikfehler verhindern
 
ah das erinnert mich die Unit hier da hat alles wunderbar geklappt sah super aus, der Fehler war weg! allerdings waren auch alle Komponenten auf dem Form mit verschwunden, d.h. sie waren schon noch da man konnte sie auch anklicken nur wurden sie mit der PNG übermahlt und kamen auch nicht mehr zum vorschein. kann da vllt mal wer kucken ob man da nicht mal noch was abändern kann?
ich weiß sonst auch nicht weiter

turboPASCAL 11. Mai 2006 11:14

Re: Grafikfehler verhindern
 
Khabarakh hat hier ein Beispiel aufgezeigt wie das auf einfache weise mit PNG-Images funktioniert.

Leider besteht auch in diesem Beispiel das Problen mit den Controls auf einer Form.
Bis jetzt bin ich auch noch nicht auf eine Lösung gekommen. (Controls neu zeichnen lassen ?!)

:gruebel:

StefanW 11. Mai 2006 11:23

Re: Grafikfehler verhindern
 
das gleiche mach die Unit aus dem DF :( und ich komm nicht weiter... schade eigentlich. bei Miranda (so nem Chat Programm) gehts ja auch... nur leider versteh ich den C code nicht sonst hätte ich da mal versucht was zu übersetzen... aber ich weis ja nicht mal wo das da steht. (den Code gibs jedenfalls frei soweit ich weis)

Edit: ich seh grad mein Samurize kann das auch. und ich dacht das war auch Open

Khabarakh 11. Mai 2006 11:50

Re: Grafikfehler verhindern
 
Zitat:

Zitat von StefanW
schade eigentlich. bei Miranda (so nem Chat Programm) gehts ja auch...

Ich denke, das sind keine Windows-Controls, sondern selbstgemalte. Und solange du nicht gerade auf Avalon wartest, wird AFAIK auch dir das Selbstmalen nicht erspart bleiben.

StefanW 11. Mai 2006 12:42

Re: Grafikfehler verhindern
 
ich hab schon versucht mit Canvas drauf zu malen... leider ohne erfolg. wie kann ich das dann machen?

Khabarakh 11. Mai 2006 12:58

Re: Grafikfehler verhindern
 
Du musst das Bitmap bearbeiten und dann UpdateLayeredWindow aufrufen.

StefanW 11. Mai 2006 13:01

Re: Grafikfehler verhindern
 
aber bleibt dann auch der Alphakanal der PNG so wie er ist?

Nur nochmal zum mitmeiseln: ich sill einfach die PNG laden, bearbeiten (zB. ein Button draufmalen) und dann erst ausgeben.

hmm... ich probiers mal...

Edit: ahh... wunderbrar jetzt hab ichs raus... Danke nochmal an alle

turboPASCAL 11. Mai 2006 13:14

Re: Grafikfehler verhindern
 
Zitat:

Zitat von StefanW
... nur leider versteh ich den C code nicht sonst hätte ich da mal versucht was zu übersetzen... aber ich weis ja nicht mal wo das da steht. (den Code gibs jedenfalls frei soweit ich weis)

Wo, ein Blick darauf und mann kann sich etwas zusammenreimen... :zwinker:

StefanW 11. Mai 2006 18:22

Re: Grafikfehler verhindern
 
@turboPASCAL: Hier z.B. :D ist zwar nicht der ganz neue aber immerhin

Gans legal über sourceforge

turboPASCAL 12. Mai 2006 10:26

Re: Grafikfehler verhindern
 
Also Miranda hat eigentlich nur eine transpartente Form (Alphablend/Alphablendvalue).
Mit UpdateLayeredWindow arbeitet es nicht.

StefanW 12. Mai 2006 10:39

Re: Grafikfehler verhindern
 
die haben aber da auch so ne Art Aero Style (wie ich mit meiner PNG versuch) und die haben aber das Problem mit dem Grafikfehler nicht!?

Was mach ich da falsch? Ich will ja wie gesagt nur n Teil des Bildes/Forms Transparent

turboPASCAL 12. Mai 2006 11:01

Re: Grafikfehler verhindern
 
Mit Alphablend aber ohne Schatten (Alphakanal des PNG's).

Zitat:

Zitat von Khabarakh
Du musst das Bitmap bearbeiten und dann UpdateLayeredWindow aufrufen.

Also die Buttons selber malen, zB. aus einem Bitmap dann auf das PNG zeichnen und wieder UpdateLayeredWindow aufrufen.
Dann muss aber auch nach / bei jedem Buttonclick das Spiel wiederholt werden.

StefanW 12. Mai 2006 13:27

Re: Grafikfehler verhindern
 
Zitat:

Zitat von turboPASCAL
Mit Alphablend aber ohne Schatten (Alphakanal des PNG's).

versteh jetzt nicht was du meinst.

Hast du noch ne Idee wie ich Icons (die ja auch Teilweise Transparent sind) da draufmalen kann?


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:11 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