Laden...

Video zwischen zwei Forms austauschen

Erstellt von Stryder vor 12 Jahren Letzter Beitrag vor 12 Jahren 1.095 Views
S
Stryder Themenstarter:in
26 Beiträge seit 2008
vor 12 Jahren
Video zwischen zwei Forms austauschen

Ich habe mal wieder ein Problem zu dem ich einfach keine Lösung finde... 🙁

Ich habe zwei Forms (jeweils Plugins von einem Hauptprogramm, dass ich nicht selber geschrieben habe)

Dort gibt es die Möglichkeit zwischen Plugins Daten in Form von strings auszutauschen.

Das Ziel ist es ein Video das in Form2 bekannt ist und erzeugt wird in Form 1 anzuzeigen.
Dazu wollte ich das Handle eines Panel das in Form1 erstellt wurde von Form 2 abrufen lassen.

Leider bekommt man aber so keinen Zugriff. Hat jemand eine Idee?


string handlestr = DX_echangePluginData("Form1", "getPanelHandle", "Panel");

IntPtr handle = new IntPtr(Convert.ToInt32(handlestr, 16));

MessageBox.Show(handle.ToString());
Control cPanel = Control.FromHandle(handle);
if (cPanel != null)
{
     Panel vPanel = (Panel)cPanel;
     if (vPanel != null)
     {
         vPanel.Controls.Add(pb);
     }
     else
         MessageBox.Show("vpanel is null");
}
else
    MessageBox.Show("cpanel is null");

Das Ergebnis ist das die erste MessageBox das Handle ausgibt:
z.B.: 2508952

cPanel kann dann bereits nicht mehr aus dem Handle erstellt werden.
Sodass ich dort "cpanel is null" ausgegeben bekomme.

Hat jemand eine Idee wie ich das lösen kann?

49.485 Beiträge seit 2005
vor 12 Jahren

Hallo Stryder,

zum eigentlichen Problem siehe Video auf zwei Monitoren ausgeben.

Ansonsten sollte ein Form nicht versuchen, auf ein Control eines anderen Forms zuzugereifen. Da gibt es bessere Lösungen. Siehe [FAQ] Kommunikation von 2 Forms.

herbivore

S
Stryder Themenstarter:in
26 Beiträge seit 2008
vor 12 Jahren

Gibt es zur Anzeige eines Videos auf einer anderen Form also keine andere Möglichkeit als einen Stream mit bytes oder ähnlichem auszutauschen?

49.485 Beiträge seit 2005
vor 12 Jahren

Hallo Stryder,

nach meinem Verständnis werden in dem ersten Link verschiedene andere Möglichkeiten beschrieben.

herbivore

199 Beiträge seit 2006
vor 12 Jahren

Da helfen meine Lösungsanstätze im oben genannten Thread auch nicht wirklich, da diese voraussetzen, dass das Video beim bearbeiten des Graph nicht laufen (geht ja anders gar nicht soviel ich weiß)

Aber die Idee mit dem Handle ist nicht schlecht. Ich hab da jetzt zwar auch keine Erfahrung damit, aber mit Hilfe des Handles solltest du eigentlich den Inhalt abgreifen können und daraus ein WriteableBitmap (oder besser ein D3DImage) rendern können, das dann eben auf der zweiten Form angezeigt wird. Es ist dann allerdings kein echtes Video mehr auf der Form sondern lediglich die Ausgabe des Videos von Form1.
Ob man dann das WritableBitmap bzw D3DImage in Windows Forms schnell genaug auf die Oberfläche schreiben kann, ist dann wieder die andere Frage. Aber zumindest beim D3DImage sollte das auf jeden Fall möglich sein, wenn man wieder auf Handle-Ebene arbeitet.

Einfach ist das Unterfangen aber auf jeden Fall nicht. Rein mit .NET Werkzeugen wird man da ziemlich sicher scheitern, denke ich.