Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Mediaplayer Vollbild (https://www.delphipraxis.net/3732-mediaplayer-vollbild.html)

bomberpilot80 27. Mär 2003 12:08


Mediaplayer Vollbild
 
Hallo,
ich erfolrgreich einen Mediaplayer für avi, mpeg usw. programmiert.

Dass das ganze als Vollbild angezeigt wird habe ich auch mit unterschiedlichen Verfahren hinbekommen.
z.B.
"DisplayRect"
"mcisendstring ( ..., show maximized)"

Mein Prolem ist nur, dass das Video auf den kompletten Montior skalliert und somit verzerrt wird.

Gibt es eine Möglichkeit den Film an sich zu skalieren?
Das wäre auch von Vorteil, wenn man eine kleiner Anzeigefläche als die Filmgröße hat.

MFG Timo

Flogo 27. Mär 2003 13:07

Ich hab sowas auch mal versucht und bin auf das gleiche Problem gestoßen. Ich habs damals sehr umständlich (mit viel rumrechnerei) gelöst:
Code:
function Rect(Panel: TPanel): TRect;
var Width, Height: Integer; newWidth, newHeight: Single; T: Integer;
begin
  Result := Panel.ClientRect;
  if not GetSizeInfo(Form1.OpDi.FileName, Width, Height) then exit;
  newWidth := (Width * (Result.Bottom - Result.Top)) / Height;
  newHeight := (Height * (Result.Right - Result.Left)) / Width;
  if (newWidth < (Result.Right - Result.Left)) and
     (newHeight > (Result.Bottom - Result.Top)) then
  begin
    T := Round((Result.Right - Result.Left - newWidth) / 2);
    Inc(Result.Left, T);
    Dec(Result.Right, 2*T);
  end
  else if (newHeight < (Result.Bottom - Result.Top)) and
          (newWidth > (Result.Right - Result.Left)) then
  begin
    T := Round((Result.Bottom - Result.Top - newHeight) / 2);
    Inc(Result.Top, T);
    Dec(Result.Bottom, 2*T);
  end;
end;
Du gibst der Function ein Panel das als Display funktioniert (bei fullscreen ist das natürlich maximiert). Die Funktion schaut dann ob das video zu hoch oder zu breit ist und passt das ergebnis dann als displayrect entsprechent an. Dazu brauch man natürlich die Originalgrößen de videos, die folgende Funktion ausliest (nur für AVI mein Prog konnte kein mpg)

Code:
function GetSizeInfo(Name: string; var Width, Height: Integer): Boolean;
var dwParam2: TMCI_OVLY_RECT_PARMS;
    Retval: longint;
begin
  Result := false;
  dwParam2.dwCallback := Form1.MePl.Handle;
  dwParam2.rc.Left  := 0;
  dwParam2.rc.Top   := 0;
  dwParam2.rc.Right := 0;
  dwParam2.rc.Bottom := 0;
  Retval := mciSendCommand(Form1.MePl.DeviceID,MCI_WHERE, MCI_OVLY_WHERE_SOURCE, integer(@dwParam2));
  if Retval <> 0 then exit;
  Width := dwParam2.rc.Right - dwParam2.rc.Left;
  Height := dwParam2.rc.Bottom - dwParam2.rc.Top;
  Result := true;
end;
Wenn jemand ne einfachere Lösung parat hat nur her damit

bomberpilot80 27. Mär 2003 13:11

Danke
 
Danke schonmal

Eine Frage habe ich aber noch. Welche Units brauche ich alle?

Im Code wird folgendes nicht erkannt:

Zitat:

function GetSizeInfo(Name: string; var Width, Height: Integer): Boolean;
var dwParam2: TMCI_OVLY_RECT_PARMS;
Retval: longint;
TMCI_OVLY_RECT_PARMS wird als "unbekannter Bezeichner" angeben

Wie du schon sagtest, wenn es eine einfachere Lösung gibt, her damit :)

Flogo 29. Mär 2003 10:44

Ich bin mir nicht ganz sicher ich glaub aber es ist mmsystem
wenn nicht ist hier meine gesammte uses liste
Code:
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, MPlayer, ExtCtrls, Menus, ComCtrls, mmsystem;


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