Autor Beitrag
AlanWake
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 75
Erhaltene Danke: 2



BeitragVerfasst: Di 31.08.10 23:14 
Hallo Leute,

ich bins mal wieder ^^ :)


Heute habe ich folgendes Problem, ^^

ich versuche ein Programm zu schreiben das wenn ich beim axWindowsMediaPlayer1 mit der Mous darüber fahre, der uiMode = "full" ist und wenn ich den axWindowsMediaPlayer1 mit der Mous verlasse, der uiMode = "none" ist :)

Mit diesem Code bekomme ich nur das darüberfahren hin aber nicht das verlassen: :(

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
        private void Form1_Load(object sender, EventArgs e)
        {
            this.axWindowsMediaPlayer1.MouseMoveEvent += new AxWMPLib._WMPOCXEvents_MouseMoveEventHandler(axWindowsMediaPlayer1_MouseMoveEvent);
        }

        private void axWindowsMediaPlayer1_MouseMoveEvent(object sender, AxWMPLib._WMPOCXEvents_MouseMoveEvent e)
        {
            axWindowsMediaPlayer1.uiMode = "full";
        }


Ich habe alles was es mit Mouse im axWindowsMediaPlayer1 gibt ausprobiert aber nichts davon hat funktioniert :cry:

Bin dankbar für jede hilfe :)

gruß Alan
Trashkid2000
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 561
Erhaltene Danke: 137



BeitragVerfasst: Mi 01.09.10 19:51 
Also, da hier noch niemand was dazu geschrieben hat, habe ich mal damit rumgespielt :)

Ich bin zu der Erkenntnis gekommen, dass das Control des MediaPlayers zwar ein Event feuert, wenn sich der Mauszeiger über das Control bewegt, aber kein Event besitzt bzw. feuert, wenn sich der Mauszeiger wieder rausbewegt.

Also habe ich eine andere Lösung. Und die Idee dabei ist folgende:
Ich habe eine private Property, die als Datentyp einen Enum zurückliefert. Dieser wird beim Initialisieren auf den Staus "none" gesetzt. Wenn das Event "MouseMoveEvent" des Players gefeuert wird (also der Mauszeiger befindet sich über dem Control, so wird die Property auf den Wert "full" gesetzt. Der UiMode des Players wird dabei gleich dem Enum-Wert gesetzt. Davor ist noch eine Prüfung drin, um nicht den UiMode bei jeder kleinen Mausbewegung neu zu setzen. Das ist das setzten des PlayerUiMode auf "full".

Um nun beim Verlassen der Maus wieder auf den UiMode "none" zu kommen, verwende ich einefach die überschriebene Methode "OnMouseMove" der Form. Diese wird nur ausgeführt, wenn sich der Mauszeiger in einer Fläche der Form befindet, jedoch nicht über dem Player. Dort wird mit der Property genauso verfahren und diese auf "none" gesetzt.

Anmerkung1: der Player im Test befand sich direkt auf der Form. Wenn dieser jedoch noch in einem anderen Control eingebettet ist (z.B. Panel oder so), dann müsste das Mouseover-Event des Controls benutzt werden.

Anmerkung2: bei schneller Bewegung des Mauszeigers aus der Form kann es passieren, dass der Player in seinem vollen Modus bleibt, da dann nicht das Event zum zurücksetzen gefeuert wird.

Gut, und da ich weiss, dass Dir Erlärungen nuicht viel bringen, hier mal der Code:
ausblenden volle Höhe C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
public enum UiMode

  none,
  full
}

private UiMode playerUiMode = UiMode.none;
private UiMode PlayerUiMode 
{
  get
  {
    return playerUiMode;
  }
  set
  {
    if (playerUiMode != value)
    {
      playerUiMode = value;
      axWindowsMediaPlayer1.uiMode = playerUiMode.ToString();
    }
  }
}

public Form1()
{
  InitializeComponent();
  axWindowsMediaPlayer1.MouseMoveEvent += new AxWMPLib._WMPOCXEvents_MouseMoveEventHandler(axWindowsMediaPlayer1_MouseMoveEvent);
  axWindowsMediaPlayer1.uiMode = PlayerUiMode.ToString();           
}

private void axWindowsMediaPlayer1_MouseMoveEvent(object sender, AxWMPLib._WMPOCXEvents_MouseMoveEvent e)
{
  PlayerUiMode = UiMode.full;   
}

protected override void OnMouseMove(MouseEventArgs e)
{
  PlayerUiMode = UiMode.none;
  base.OnMouseMove(e);
}


Hoffe, es bringt Dir was!

LG, Marko

Für diesen Beitrag haben gedankt: AlanWake
AlanWake Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 75
Erhaltene Danke: 2



BeitragVerfasst: Mi 01.09.10 20:10 
Trashkid2000 dein Code funktionier mal wieder super :), nur leider habe ich jetzt ein Problem :(

Der axWindowsMediaPlayer1 hat bei Dock den Wert Fill, und so ist die ganze Form1 verdeckt :(

Ist es möglich deinen Code mit dem Form Ramen zu verbinden anstatt mit der inneren Fläche :?:

gruß Alan

ps. Den Weg den du hier versucht hattest, hatte ich auch mal versucht, nur leider steht immer der Wer Fill im Weg :(

Mein Code war:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
        private void Form1_Load(object sender, EventArgs e)
        {
            this.axWindowsMediaPlayer1.MouseMoveEvent += new AxWMPLib._WMPOCXEvents_MouseMoveEventHandler(axWindowsMediaPlayer1_MouseMoveEvent);
            this.MouseMove += new MouseEventHandler(Form1_MouseMove);
        }

        private void Form1_MouseMove(object sender, MouseEventArgs e)
        {
            axWindowsMediaPlayer1.uiMode = "none";
        }
        private void axWindowsMediaPlayer1_MouseMoveEvent(object sender, AxWMPLib._WMPOCXEvents_MouseMoveEvent e)
        {
            axWindowsMediaPlayer1.uiMode = "full";
        }
Trashkid2000
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 561
Erhaltene Danke: 137



BeitragVerfasst: Mi 01.09.10 21:00 
Die Form hat auch ein Event, wenn der Mauszeiger die Form verlässt:
ausblenden C#-Quelltext
1:
2:
3:
4:
private void Form1_MouseLeave(object sender, EventArgs e)
{
  MessageBox.Show("leave");
}


Wie siehts denn damit aus?

Marko

Für diesen Beitrag haben gedankt: AlanWake
AlanWake Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 75
Erhaltene Danke: 2



BeitragVerfasst: Mi 01.09.10 21:12 
Funktioniert leider auch nicht, liegt wieder an dem Wert Fill :(

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
        private void Form1_Load(object sender, EventArgs e)
        {
            this.axWindowsMediaPlayer1.MouseMoveEvent += new AxWMPLib._WMPOCXEvents_MouseMoveEventHandler(axWindowsMediaPlayer1_MouseMoveEvent);
            this.MouseLeave += new EventHandler(Form1_MouseLeave);
        }
        private void axWindowsMediaPlayer1_MouseMoveEvent(object sender, AxWMPLib._WMPOCXEvents_MouseMoveEvent e)
        {
            axWindowsMediaPlayer1.uiMode = "full";
        }
        private void Form1_MouseLeave(object sender, EventArgs e)
        {
            axWindowsMediaPlayer1.uiMode = "none";
        }


gruß Alan
AlanWake Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 75
Erhaltene Danke: 2



BeitragVerfasst: Do 02.09.10 02:10 
Gibt es nicht eine Möglichkeit den Player so zu Programmieren, das wenn die Mous keine eingaben mehr auf dem Player macht etwas passiert(also wenn die Mous sich nicht mehr bewegt):?:

gruß Alan
Trashkid2000
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 561
Erhaltene Danke: 137



BeitragVerfasst: Do 02.09.10 19:04 
Nungut, wenn es so nicht geht. Irgendeinen Weg gibt es immer!
Z.B. dieser hier. Ich frage alle 100 ms ab, ob sich der Mauszeiger über der Form befindet. Da das Control ja die ganze Form einnimmt (ausser die Titelleiste) geht das schon okay, denke ich. Ansonsten müsstest Du es noch ein bisschen umbasteln.

Hier mal der Code:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
        public Form1()
        {
            InitializeComponent();

            Timer timer = new Timer();
            timer.Interval = 100;
            timer.Tick += new EventHandler(timer_Tick);
            timer.Start();  
        }

        private void timer_Tick(object sender, EventArgs e)
        {
            if (Cursor.Position.X >= this.Location.X &&
                Cursor.Position.X <= this.Location.X + this.Width &&
                Cursor.Position.Y >= this.Location.Y &&
                Cursor.Position.Y <= this.Location.Y + this.Height)
            {
                axWindowsMediaPlayer1.uiMode = "full";
            }
            else
                axWindowsMediaPlayer1.uiMode = "none";
        }


Aber den Sinn verstehe ich noch nich ganz. Wenn der Benutzer mit der Maus nicht über der Form ist, was sieht er denn dann ?

LG, Marko

Für diesen Beitrag haben gedankt: AlanWake
AlanWake Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 75
Erhaltene Danke: 2



BeitragVerfasst: Do 02.09.10 19:23 
Dein genialer Code hat funktioniert :)

VIELEN vielen dank :)

gruß Alan

ps. Der Code sollte dafür sein, das ich ein größeres Bild bekomme wenn der Mouszeiger nicht auf dem Player ist :)
AlanWake Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 75
Erhaltene Danke: 2



BeitragVerfasst: Do 02.09.10 19:40 
Ich hatte eben noch mal ein Problem gehabt, wenn ich in den Vollbildmodus gewechselt bin konnte ich nichts mehr anklicken, habe aber eine Lösung gefunden gehabt :)

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
            if (Cursor.Position.X >= this.Location.X &&
                Cursor.Position.X <= this.Location.X + this.Width &&
                Cursor.Position.Y >= this.Location.Y &&
                Cursor.Position.Y <= this.Location.Y + this.Height)
            {
                WindowsMediaPlayer1.uiMode = "full";
            }
            else
            {
                if (WindowsMediaPlayer1.fullScreen == false)
                {
                WindowsMediaPlayer1.uiMode = "none";
                }
            }


gruß Alan