Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Parent löschen? (https://www.delphipraxis.net/202443-parent-loeschen.html)

progopa 4. Nov 2019 21:46

Parent löschen?
 
Hallo,
ich möchte eine Video Ausgabe (TPasLibVlcPlayer) wahlfrei auf 2 Monitoren und eingebettet auf einem Panel anzeigen.
Die Anzeige soll wärend der laufenden Wiedergabe erfolgen.
Der TPasLibVlcPlayer ist auf einem Form ohne Rand.
Über Screem.Monitors kann ich das Fenster wahlfrei auf Monitor 1 oder 2 darstellen.
Die Anzeige soll auch im Programm auf einen Panel eingebettet möglich sein.
Dazu weise ich das Panel als Parent zu.
Das funktioniert auch.
Den gesetzten Parent kann ich jedoch nicht wieder löschen.
Das Fenster ist danach nicht mehr auf Monitor1 oder 2 zuweisbar.
Parent Handle auf 0 setzen bringt Fehler.
Parent := nil geht auch nicht.
Hat wer eine Idee?

Viele Grüße

progopa 5. Nov 2019 10:07

AW: Parent löschen?
 
Guten Tag.
Hier noch mal mein Problem ausführlicher.
In dem zu verschiebenden Fenster läuft der VLC Player.
Wärend des Abspielens eines Videos möchte ich per Button dieses Fenster auf einen von 2 Monitoren als Vollbild darstellen.
Die Form soll auch wieder in ein Panel(Platzhalter) auf dem Hauptfenster verschoben werden.
Vollbildmodus funktioniert problemlos.

So ändere ich das Fenster.
Delphi-Quellcode:
procedure TFrmVideo.ShowFullScreen1;
begin
  InitPos(0);
  PasLibVlcPlayer1.Align := alClient;
  FormStyle := fsNormal;
  Invalidate;
  Show;
end
;

Delphi-Quellcode:
procedure TFrmVideo.InitPos(Monitor: Integer);
begin
  FormStyle := fsNormal;
  PasLibVlcPlayer1.Align := alNone;
  MakeFullyVisible(Screen.Monitors[Monitor]);
  aleft := Screen.Monitors[Monitor].left;
  aTop := Screen.Monitors[Monitor].Top;
  awidth := Screen.Monitors[Monitor].width;
  aheight := Screen.Monitors[Monitor].height;
  Align := alNone;
  Parent := nil;
end;
Zum Einbetten in eine Form übergebe ich ein TPanel als Parent.
Ein Zuweisen des Parent an die Form wüde funktionieren.
Ist hier allerdings nicht verwendbar, da der VLCPlayer bei Parentwechsel im aktiven Zustand einen Fehler bringt.
Mit diesem Code möchte ich die Form auf die Position des Panels legen.
Die Position ist jedoch nicht richtig.
Delphi-Quellcode:
procedure TFrmVideo.SetParentComponent(aParent: TWinControl);
var
  P: TPoint;
begin
  p := aParent.ClientToScreen(Point(aParent.Left,aParent.Top));
  aleft := p.x;
  aTop := p.y;
  awidth := aParent.Width;
  aheight := aParent.Height;
  Self.left := aleft;
  Self.Top := aTop;
  Self.width := awidth;
  Self.height := aheight;
  FormStyle := fsNormal;
  Invalidate;
  Show;
end;
Als Aparent wird ein Panel übergeben.

Hat wer eine Idee, was ich falsch mache.
Danke im Voraus.

progopa 6. Nov 2019 09:48

AW: Parent löschen?
 
Hat sich erledigt.
Ich habe es hinbekommen.
Das Testen gestaltet sich etwas schwierig, da ich mit XE2 arbeite.
Wnnz.B. eine Shelltree oder der VLC Player im Spiel ist, kann der Start schon mal 1 min dauern (nur im Debug Modus).

TurboMagic 6. Nov 2019 19:03

AW: Parent löschen?
 
Zitat:

Zitat von progopa (Beitrag 1450834)
Hat sich erledigt.
Ich habe es hinbekommen.
Das Testen gestaltet sich etwas schwierig, da ich mit XE2 arbeite.
Wnnz.B. eine Shelltree oder der VLC Player im Spiel ist, kann der Start schon mal 1 min dauern (nur im Debug Modus).

Ist ja schön, dass du's hinbekommen hast, nur lässt du uns ob des wie das nun
klappte leider ganz im dunkeln...

Und was macht XE2 für Probleme mit dem Testen?

Grüße
TurboMagic

progopa 7. Nov 2019 08:39

AW: Parent löschen?
 
Der Programmteil war nicht von mir.
Ich habe ihn neu geschrieben und jetzt funktioniert es halt.
Um zu vermeiden, dass noch wer Zeit für ein gelöstes Problem verschwendet, habe ich hier die Lösung des Problems mitgeteilt.
XE2 hat mit dem Debugger Probleme, wenn Shell Funktionen aufgerufen werden. Hier werden unendlich Messages generiert.
In Folgeversionen ist das Problem wohl beseitigt.
Ich habe halt das Pech weiter mit XE2 arbeiten zu müssen.
Trotzdem vielen Dank für den konstruktiven Hinweis.


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:48 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