AGB  ·  Datenschutz  ·  Impressum  







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

GdiPlus DropShadow für Hauptform

Ein Thema von stOrM · begonnen am 22. Sep 2012 · letzter Beitrag vom 11. Dez 2013
Antwort Antwort
Seite 2 von 2     12   
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#11

AW: GdiPlus DropShadow für Hauptform

  Alt 29. Sep 2012, 23:59
Der „Schatten“ von Bummi sieht allerdings etwas seltsam aus, weil er linear an Intensität abnimmt. Normalerweise simuliert man Schatten mit einem Gaußschen Weichzeichner, was dem natürlichen Schatten eher entspricht.

Ich habe da über die letzten zwei Tage (war krank, deshalb hat es etwas länger gedauert...) mal selber was gebastelt, was kein GDI+ braucht und realistischere Schatten produziert. Dabei habe ich auch sehr darauf geachtet, dass Schatten und Fenster immer so gut wie synchron sind (also dass nicht der Schatten mit Verzögerung hinterherhinkt wenn man das Fenster bewegt). Das ganze ist über einen Hook gelöst, das heißt, man braucht sich um die Aktualisierung der Position gar nicht mehr manuell zu kümmern.

Es genügt im einfachsten Falle, die Unit unShadow einzubinden und folgenden Code ins OnCreate-Ereignis eines Formulars schreiben: TShadowForm.Create(Self).Attach(Handle); Man kann aber, wenn man will, auch verschiedene Parameter von TShadowForm verändern, z.B. die Farbe (Achtung: ARGB-Format!) oder den Weichzeichnungs-Radius. Im Anhang seht ihr ein Bild von einem blauen Schatten (damit man besser den Unterschied erkennt zu dem schmalen schwarzen Schatten, den Windows sowieso immer zeichnet, was ich unter Vista nicht abstellen kann).

Die unShadow-Unit kann nur Schatten von Rechtecken darstellen, allerdings sind in der unGaussBlur auch Funktionen enthalten, um beliebige Formen weichzuzeichnen. Das wird in der Demo-Anwendung ebenfalls demonstriert. Allerdings ist meine Implementierung des Gaußschen Weichzeichners leider nicht besonders schnell bei großen Radien...
Miniaturansicht angehängter Grafiken
scr5643_20120929.png  
Angehängte Dateien
Dateityp: zip gaussblur.zip (229,4 KB, 127x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#12

AW: GdiPlus DropShadow für Hauptform

  Alt 30. Sep 2012, 00:12
@NamenLozer

tja, das Bessere ist der Feind des brauchbaren ...
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Benutzerbild von stOrM
stOrM

Registriert seit: 7. Jun 2003
Ort: Mülheim an der Ruhr
436 Beiträge
 
Delphi 10.3 Rio
 
#13

AW: GdiPlus DropShadow für Hauptform

  Alt 1. Okt 2012, 14:51
Respekt! Ich find beide Lösungen genial!

Also das der gaußische Weichzeichner zu langsam waere kann ich bisher nicht feststellen sieht wirklich super aus. Ich denke für einen normalen Fensterschatten nutzt man in der Regel ja eh nicht enorme Radien...

Aber mal eine Frage, sollte man wie im Eingansthread erwaehnt statt der gaußischen Weichzeichnung nun 8 Png's nutzen (Ok, man ist dann auf die Form der Form festgelegt) dann sollte die Geschwindigkeit eigentlich ja kein Problem sein???

Müßte man sich nur Gedanken darüber machen wie man die speziellen Teile streckt oder staucht bei Größenaenderung der Form?
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#14

AW: GdiPlus DropShadow für Hauptform

  Alt 1. Okt 2012, 14:57
Für Rechtecke habe ich ja auch eine Extra-Funktion gebastelt, die nicht das ganze Bitmap blurrt, sondern die Farbverläufe einfach direkt zeichnet. Diese ist recht schnell. Du kannst natürlich auch vorberechnete PNGs verwenden, aber einen wirklichen Performancevorteil würde ich davon nicht erwarten.

Nur weil du im Eingangspost geschrieben hattest „Was wenn das Formular z.B. rund wäre?“, hatte ich zunächst einen „richtigen“ Gaußschen Weichzeichner implementiert. Der ist ja auch in der Demo mit drin, kannst du in Aktion sehen, wenn du die oberste Trackbar veränderst. Da siehst du schon, dass sich das Bild bei größeren Radien mit einiger Verzögerung aktualisiert... der Ansatz war für Schatten also nur bedingt geeignet, vor allem wenn die Größe der Form veränderlich ist.

Geändert von Namenloser ( 1. Okt 2012 um 14:59 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von stOrM
stOrM

Registriert seit: 7. Jun 2003
Ort: Mülheim an der Ruhr
436 Beiträge
 
Delphi 10.3 Rio
 
#15

AW: GdiPlus DropShadow für Hauptform

  Alt 1. Okt 2012, 15:02
Für Rechtecke habe ich ja auch eine Extra-Funktion gebastelt, die nicht das ganze Bitmap blurrt, sondern die Farbverläufe einfach direkt zeichnet. Diese ist recht schnell. Du kannst natürlich auch vorberechnete PNGs verwenden, aber einen wirklichen Performancevorteil würde ich davon nicht erwarten.

Nur weil du im Eingangspost geschrieben hattest „Was wenn das Formular z.B. rund wäre?“, hatte ich zunächst einen „richtigen“ Gaußschen Weichzeichner implementiert. Der ist ja auch in der Demo mit drin, kannst du in Aktion sehen, wenn du die oberste Trackbar veränderst. Da siehst du schon, dass sich das Bild bei größeren Radien mit einiger Verzögerung aktualisiert... der Ansatz war für Schatten also nur bedingt geeignet, vor allem wenn die Größe der Form veränderlich ist.
Womit man aber ohne weiteres Leben kann denke ich, ansonsten ist das wohl die perfekteste Lösung alleine schon in Anbetracht, wenn man andere Lösungen sieht, wo da mit einem haufen Forms oder halt einer Menge an Bilder herumgebaut wird.
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#16

AW: GdiPlus DropShadow für Hauptform

  Alt 1. Okt 2012, 19:52
Die richtige vorgehensweise ist meines erachtens.
Die Form egal wie sie aussieht zu einer maske (Schwarz) konvertieren.
Darauf wendet man dann Gaussianblur an.
Über diese maske wird dann die Form gelegt wobei die Maske der Form dann natürlich noch folgen muss bei größenänderung.

Das könnte man dann einfach mit StretchBlt erledigen.

Grundsätzlich ist aber die verwendung von GaussianBlur richtig.

Aber jeder wie er will

gruss
  Mit Zitat antworten Zitat
dunningkruger

Registriert seit: 25. Mai 2012
59 Beiträge
 
#17

AW: GdiPlus DropShadow für Hauptform

  Alt 1. Okt 2012, 20:52
grundsätzlich ist aber die verwendung von gaussianblur richtig.

Aber jeder wie er will
Danke für den Segen
  Mit Zitat antworten Zitat
Benutzerbild von fs999
fs999

Registriert seit: 4. Dez 2006
Ort: Luxembourg
46 Beiträge
 
Delphi 10.3 Rio
 
#18

AW: GdiPlus DropShadow für Hauptform

  Alt 11. Dez 2013, 15:42
Hallo,

Entschuldige wenn ich dieses Thema heraus grabe, aber ich möchte wissen ob es möglich ist diese schöne gaussblur form auch unter TPanels verwenden kann, oder so verändern damit es damit funktioniert.

Vielen Dank
Grüsse
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   

 

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:20 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