![]() |
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 |
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:
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)
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;
Code:
Wenn jemand ne einfachere Lösung parat hat nur her damit
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; |
Danke
Danke schonmal
Eine Frage habe ich aber noch. Welche Units brauche ich alle? Im Code wird folgendes nicht erkannt: Zitat:
Wie du schon sagtest, wenn es eine einfachere Lösung gibt, her damit :) |
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 16:36 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz