Transparenz eines Fensters ohne VisualStyles möglich?
- C#
Sie verwenden einen veralteten Browser (%browser%) mit Sicherheitsschwachstellen und können nicht alle Funktionen dieser Webseite nutzen.
Hier erfahren Sie, wie einfach Sie Ihren Browser aktualisieren können.
Hier erfahren Sie, wie einfach Sie Ihren Browser aktualisieren können.
Es gibt 17 Antworten in diesem Thema. Der letzte Beitrag () ist von Fakiz.
-
-
-
-
Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch
Ein guter .NET-Snippetkonverter (der ist verfügbar).
Programmierfragen über PN / Konversation werden ignoriert! -
Hi
es gibt auch eine Control.Region-Eigenschaft (diese bspw. für die Form setzen).
TransparencyKey halte ich für ein Unding, quasi eine Unnötigkeit, da mir kein Fall bekannt ist, bei der es nötig wäre. Bei aktuellen visuellen Stilen kann man einfach nicht ausschließen, dass eine Farbe auf der Form vorkommt.
Dennoch halte ich RodFromGermanys Frage nach dem Grund für das WMP-Control für relevant.
Viele Grüße
~blaze~ -
Der Mediaplayer bzw. das Steuerelement davon nimmt die Transparenz dessen Parent an, soweit ich das sehe. Da ich eine Visualisierung verwende bringt mir ein Hintergrundbild leider auch nichts.
*Edit*
Ich vermute ich habe die Frage falsch verstanden. Der Grund warum ich die Transparenz benötige wäre ein Fadein/out Effekt. Ich darf/soll den Windows start mit einem Random Musikstück ausstaten. Hierfür setze ich eine Form als Desktophintergrund. Auf dieser Form ist ein MediaPlayer der eine .mp3 abspielt, die Form soll nun bis 80% langsam eingeblendet werden und im Anschluss wieder ausgeblendet werden.
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Fakiz“ ()
-
-
Das ganze sollte letztendlich von nicht sichtbar bis 80% sichtbarkeit eingeblendet werden. Nach dem eine .mp3 abgespielt wurde soll es bis zur unsichtbarkeit ausgeblendet werden und im Anschluss beendet sich die Anwendung.
Für ein besseres Verständniss habe ich das Projekt mal angehängt.Dabei sieht man das obwohl dieLayeredWindowAttributes
auf Transparent geändert wurden dennoch das Hintergrundbild komplett überdeckt und keine Teiltransparenz der Form erkennbar ist.Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Fakiz“ ()
-
-
-
-
-
Fakiz schrieb:
Für ein besseres Verständniss habe ich das Projekt mal angehängt. Dabei sieht man das obwohl dieLayeredWindowAttributes
auf Transparent geändert wurden dennoch das Hintergrundbild komplett überdeckt und keine Teiltransparenz der Form erkennbar ist.
1. bevor der Mediaplayer aufgerufen wird solltest Du sicherstellen, dass auch mp3's eingetragen sind.if(mp3Files.Length > 0)
2. Das Fenster wird zunächst gar nicht gezeigt, das solltest Du besser ändern, sonst verpufft der Effekt ja.
2. Ich habe hier etwas gefunden, mit dem ich das Faden Out fast ohne Änderungen realisieren konnte. Kleinigkeiten wie das FadeOut vom richtigen Ereignis aus anzusteuern oder breits bei .8 (80%) das FadeIn zu stoppen sind natürlich zu machen. -
Auf welche Werte setzt du sie denn? 0 ist vollständig transparent
Bei der Eigenschaft Opacity starte ich bei 0 und gehe in 0.01 Schritten bzw. würde ich.
könnteste das nicht iwie uppen, dass mans zügig auch in Gang kriegt? Und bitte ohne bin-Ordner!
Habs auf den relevanten teil runtergebrochen. Sorry an die Binärdaten habe ich gestern nicht gedacht.
bevor der Mediaplayer aufgerufen wird solltest Du sicherstellen, dass auch mp3's eingetragen sind. if(mp3Files.Length > 0)
Mach ich auchif (mp3Files != null && mp3Files.Length > 0)
Ich hab auch noch mal ein Bild gemacht um zu verdeutlichen was ich meine. Die Transparenz versuche ich dabei mit der Windows -FunktionSetLayeredWindowAttributes
zu erreichen. Bei dieser Funktion ist 255 vollständig opak. Mit 200 sollte also eine leichte transparenz erreicht werden zu sehen an preview1.png.
*Edit*
So funktioniert das
Spoiler anzeigen C#-Quellcode
- NativeMethodes.SetWindowLong(this.Handle, NativeMethodes.GWL_EXSTYLE, NativeMethodes.GetWindowLong(this.Handle, NativeMethodes.GWL_EXSTYLE) ^ NativeMethodes.WS_EX_LAYERED);
- NativeMethodes.SetParent(this.Handle, hProgman);
- NativeMethodes.SetLayeredWindowAttributes(this.Handle, 0, 200, NativeMethodes.LWA_ALPHA);
Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „Fakiz“ ()
-
Fakiz schrieb:
Mach ich auchif (mp3Files != null && mp3Files.Length > 0)
Wenn die Sample-Solution die Du hier hochgeladen hattest die Prüfung gemacht hätte, würde ich es wohl kaum geschrieben haben.
-
Bei dem Sample war das ganze auskommentiert und statt dessen ein
FolderbrowserDailog
in verwendung.
So sah die From_Load aus (Zeile 21)
Spoiler anzeigen C#-Quellcode
- private void Form1_Load(object sender, EventArgs e)
- {
- axWindowsMediaPlayer_main.uiMode = "none";
- //if (Properties.Settings.Default.MusicPath != "")
- // mp3Files = new DirectoryInfo(Properties.Settings.Default.MusicPath).GetFiles("*.mp3", SearchOption.TopDirectoryOnly);
- using (FolderBrowserDialog fb = new FolderBrowserDialog()) {
- fb.Description = "Bitte eine mp3 Datei auswählen";
- if (fb.ShowDialog() == DialogResult.OK) {
- mp3Files = new DirectoryInfo(fb.SelectedPath).GetFiles("*.mp3", SearchOption.TopDirectoryOnly);
- CreateNewWorkerW();
- if (hProgman != IntPtr.Zero) {
- NativeMethodes.SetWindowLong(this.Handle, NativeMethodes.GWL_EXSTYLE, NativeMethodes.GetWindowLong(this.Handle, NativeMethodes.GWL_EXSTYLE) ^ NativeMethodes.WS_EX_LAYERED);
- NativeMethodes.SetLayeredWindowAttributes(this.Handle, 0, 200, NativeMethodes.LWA_ALPHA);
- NativeMethodes.SetParent(this.Handle, hProgman);
- }
- }
- }
- //if (mp3Files != null && mp3Files.Length > 0) {
- // Random rnd = new Random();
- // axWindowsMediaPlayer_main.URL = mp3Files[rnd.Next(0, mp3Files.Length)].FullName;
- // CreateNewWorkerW();
- // if (hProgman != IntPtr.Zero) {
- // //NativeMethodes.SetWindowLong(this.Handle, NativeMethodes.GWL_EXSTYLE, NativeMethodes.GetWindowLong(this.Handle, NativeMethodes.GWL_EXSTYLE) ^ NativeMethodes.WS_EX_LAYERED);
- // //NativeMethodes.SetLayeredWindowAttributes(this.Handle, 0, 200, NativeMethodes.LWA_ALPHA);
- // NativeMethodes.SetParent(this.Handle, hProgman);
- // }
- //}
- //else {
- // MessageBox.Show("Es wurde kein Musik -Pfad gewählt", "", MessageBoxButtons.OK, MessageBoxIcon.Information);
- // this.WindowState = FormWindowState.Normal;
- // this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Sizable;
- //}
- }
-
Denkst Du ich guck mir den auskommentierten Code an?
Ich rede hiervon
Spoiler anzeigen
C#-Quellcode
- using (FolderBrowserDialog fb = new FolderBrowserDialog())
- {
- fb.Description = "Bitte whälen sie einen Ordner mit mp3 -Dateien";
- if (fb.ShowDialog() == DialogResult.OK)
- {
- mp3Files = new DirectoryInfo(fb.SelectedPath).GetFiles("*.mp3", SearchOption.TopDirectoryOnly);
- Random rnd = new Random();
- axWindowsMediaPlayer_main.URL = mp3Files[rnd.Next(0, mp3Files.Length)].FullName;
- CreateNewWorkerW();
- if (hProgman != IntPtr.Zero)
- {
- NativeMethodes.SetParent(this.Handle, hProgman);
- NativeMethodes.SetWindowLong(hProgman, NativeMethodes.GWL_EXSTYLE, NativeMethodes.GetWindowLong(hProgman, NativeMethodes.GWL_EXSTYLE) ^ NativeMethodes.WS_EX_LAYERED);
- NativeMethodes.SetLayeredWindowAttributes(hProgman, 0, 200, NativeMethodes.LWA_ALPHA);
- }
- }
- }
-
Den
FolderBrowserDialog
hab ich nur kurz fürs Forum rein gehauen. Der ist bei mir nicht in verwendung.
Die Form_Load die verwendet wird sieht so aus:
Spoiler anzeigen C#-Quellcode
- private void Form1_Load(object sender, EventArgs e)
- {
- axWindowsMediaPlayer_main.uiMode = "none";
- if (Properties.Settings.Default.MusicPath != "")
- mp3Files = new DirectoryInfo(Properties.Settings.Default.MusicPath).GetFiles("*.mp3", SearchOption.TopDirectoryOnly);
- if (mp3Files != null && mp3Files.Length > 0) {
- Random rnd = new Random();
- axWindowsMediaPlayer_main.URL = mp3Files[rnd.Next(0, mp3Files.Length)].FullName;
- CreateNewWorkerW();
- if (hProgman != IntPtr.Zero) {
- //NativeMethodes.SetWindowLong(this.Handle, NativeMethodes.GWL_EXSTYLE, NativeMethodes.GetWindowLong(this.Handle, NativeMethodes.GWL_EXSTYLE) ^ NativeMethodes.WS_EX_LAYERED);
- //NativeMethodes.SetLayeredWindowAttributes(this.Handle, 0, 200, NativeMethodes.LWA_ALPHA);
- NativeMethodes.SetParent(this.Handle, hProgman);
- }
- }
- else {
- MessageBox.Show("Es wurde kein Musik -Pfad gewählt", "", MessageBoxButtons.OK, MessageBoxIcon.Information);
- this.WindowState = FormWindowState.Normal;
- this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Sizable;
- }
- }
-
Ähnliche Themen
-
Alle schwarzen Pixel transparent machen
TheGameSiders - - Sonstige Problemstellungen
-
6 Benutzer haben hier geschrieben
- Fakiz (8)
- ~blaze~ (4)
- Dksksm (3)
- RodFromGermany (1)
- ichduersie (1)
- ErfinderDesRades (1)