AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Transparente Bereiche werden nicht aktualisiert

Ein Thema von skoschke · begonnen am 12. Jul 2019 · letzter Beitrag vom 15. Jul 2019
Antwort Antwort
skoschke

Registriert seit: 6. Jan 2009
138 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#1

Transparente Bereiche werden nicht aktualisiert

  Alt 12. Jul 2019, 10:25
Hallo,

ich habe ein transparentes Panel, welches weitere Controls enthält.
Der Hintergrund wird auch schön durchgezeichnet, bis auf einen kleinen Fehler:

Sobald das Panel per Code verschoben wird, wandert der transparente Bereich mit, als wenn er ausgeschnitten worden wäre!
Ein Panel.Refresh oder Repaint bringt gar nichts, ich behelfe mir momentan damit, das Panel vor dem Schieben unsichtbar zu machen und danach wieder visible zu setzen, dann ist der durchscheinende Hintergrund wieder korrekt.

Nur gefällt mir das nicht, es muss doch eine Möglichkeit geben, diesen Hintergrund zu "repainten"?

Ciao
Stefan
  Mit Zitat antworten Zitat
Benutzerbild von EWeiss
EWeiss

Registriert seit: 16. Okt 2010
6.577 Beiträge
 
Delphi 2010 Architect
 
#2

AW: Transparente Bereiche werden nicht aktualisiert

  Alt 12. Jul 2019, 10:41
Zitat:
es muss doch eine Möglichkeit geben, diesen Hintergrund zu "repainten"?
Dann musst du WM_PAINT überschreiben und den Hintergrund in dem Event auf das Panel neu zeichnen..
Zitat:
Ein Panel.Refresh oder Repaint bringt gar nichts
Wie denn auch es ist nur ein Invalidate es zeichnet aber nicht automatisch den Hintergrund deines Panels in das Panel.
Das must du selber tun.

gruss

Geändert von EWeiss (12. Jul 2019 um 10:57 Uhr)
  Mit Zitat antworten Zitat
peterbelow

Registriert seit: 12. Jan 2019
Ort: Hessen
316 Beiträge
 
Delphi 10.3 Rio
 
#3

AW: Transparente Bereiche werden nicht aktualisiert

  Alt 12. Jul 2019, 12:53
Hallo,

ich habe ein transparentes Panel, welches weitere Controls enthält.
Der Hintergrund wird auch schön durchgezeichnet, bis auf einen kleinen Fehler:

Sobald das Panel per Code verschoben wird, wandert der transparente Bereich mit, als wenn er ausgeschnitten worden wäre!
Ein Panel.Refresh oder Repaint bringt gar nichts, ich behelfe mir momentan damit, das Panel vor dem Schieben unsichtbar zu machen und danach wieder visible zu setzen, dann ist der durchscheinende Hintergrund wieder korrekt.

Nur gefällt mir das nicht, es muss doch eine Möglichkeit geben, diesen Hintergrund zu "repainten"?

Ciao
Stefan
Versuch mal das Parent des Panels per Invalidate neu zu zeichnen. Ich nehme mal an, ParentBackground des Panels ist True?
Peter Below
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli
Online

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
3.696 Beiträge
 
Delphi XE3 Ultimate
 
#4

AW: Transparente Bereiche werden nicht aktualisiert

  Alt 12. Jul 2019, 13:09
Arbeitest Du mit mit der VCL?

Es gibt da keine wirklich transparenten Controls.

Wenn Du das einigermaßen umsetzen kannst wird der Hintergrund letztlich in das Panel kopiert.
Wenn Du das Panel dann verschiebst, sieht das aus wie ausgeschnitten (ist es ja auch).

Wie man das am besten heilt kann ich nicht sagen und es kann auch auf jedem System und jeder Delphi-Version wieder etwas anders (besser/schlechter) funktionieren.

Mit FMX könnte das vielleicht besser gehen, aber da gibt es wieder andere Nachteile.
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Benutzerbild von EWeiss
EWeiss

Registriert seit: 16. Okt 2010
6.577 Beiträge
 
Delphi 2010 Architect
 
#5

AW: Transparente Bereiche werden nicht aktualisiert

  Alt 12. Jul 2019, 14:51
Zitat:
Wenn Du das einigermaßen umsetzen kannst wird der Hintergrund letztlich in das Panel kopiert.
Wenn Du das Panel dann verschiebst, sieht das aus wie ausgeschnitten (ist es ja auch).
Richtig!
Die Lösung habe ich gepostet.

Zitat:
Versuch mal das Parent des Panels per Invalidate neu zu zeichnen. Ich nehme mal an, ParentBackground des Panels ist True?
Bringt gar nichts.
Indem man das Parent zwingt sich neu zu zeichnen bekomme ich den Inhalt des Parent nicht in mein Panel.

gruss
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
6.806 Beiträge
 
Delphi 10.3 Rio
 
#6

AW: Transparente Bereiche werden nicht aktualisiert

  Alt 12. Jul 2019, 15:14
Indem man das Parent zwingt sich neu zu zeichnen bekomme ich den Inhalt des Parent nicht in mein Panel.
Die VCL ist da dann doch nicht ganz so stumpf. Wenn ParentBackground gesetzt ist, dann führt das Invalidate ein InvalidateRect auf das Parent.Handle aus. Insofern ist das schon nicht so falsch gedacht. Es ist ja auch nicht das Panel selbst, das den Hintergrund zeichnet, sondern eben das Parent-Control. Das Panel übermalt diesen halt in seiner eigenen Paint-Routine dann nicht mehr.

Sobald das Panel per Code verschoben wird, wandert der transparente Bereich mit, als wenn er ausgeschnitten worden wäre!
Ich hätte dazu jetzt gern ein kleines Beispiel-Programm, mit dem man diesen Fehler nachvollziehen kann.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von EWeiss
EWeiss

Registriert seit: 16. Okt 2010
6.577 Beiträge
 
Delphi 2010 Architect
 
#7

AW: Transparente Bereiche werden nicht aktualisiert

  Alt 12. Jul 2019, 15:27
Zitat:
Die VCL ist da dann doch nicht ganz so stumpf.
Nun gut.. Ich mache es ohne VCL alles von Hand und es funktioniert.
Zitat:
Es ist ja auch nicht das Panel selbst, das den Hintergrund zeichnet
Bei mir schon es wird der Hintergrund in das Panel gezeichnet.
Siehe Shot.. Panel in Panel und beide übernehmen den Inhalt des Hauptfensters. (JA nicht 100% Transparent aber emuliert! )
Zudem verlieren meine Panels den eigenen Inhalt nicht.. wenn dem so wäre könnte man die Rahmen der Panels nicht mehr erkennen.

Mein Window wird so erstellt..
Delphi-Quellcode:
FHPanel := CreateWindowEx(WS_EX_TRANSPARENT, SKPANEL, '', Style, Left, Top, Width, Height,
  ParentHandle, DlgItemID, SkinEngine.skInstance, nil);
Inklusive den Property Style BS_GROUPBOX.

Bin raus.. da es hier um VCL geht.

gruss

Geändert von EWeiss (13. Jul 2019 um 09:08 Uhr)
  Mit Zitat antworten Zitat
skoschke

Registriert seit: 6. Jan 2009
138 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#8

AW: Transparente Bereiche werden nicht aktualisiert

  Alt 15. Jul 2019, 06:10
Hallo,

es funktioniert nun so wie gewünscht, der Tip mit dem Invalidate des Parents war der entscheidende!

Vielen Dank!
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 13:28 Uhr.
Powered by vBulletin® Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2019 by Daniel R. Wolf