Hi,
Delphi-Quellcode:
//MediaPlayer.DisplayRect := Rect(links, oben, rechts, unten);
MediaPlayer.DisplayRect := Rect(0, 0, Panel.Width, Panel.Height);
Sollte eigentlich klappen.
Wenn es nicht verzerren sollte, musst du natürlich ein wenig rumrechnen. Ich hab es mal so gemacht:
Delphi-Quellcode:
//MCIAnzeige ist mein Panel
MediaPlayer.Open;
MediaPlayer.DisplayRect := Rect(0, 0, 0, 0);
if (MediaPlayer.DisplayRect.Right > 0) and
(MediaPlayer.DisplayRect.Bottom > 0) then
begin
if (MediaPlayer.DisplayRect.Right > MCIAnzeige.Width) or
(MediaPlayer.DisplayRect.Bottom > MCIAnzeige.Height) or
((MediaPlayer.DisplayRect.Right * 2 <= MCIAnzeige.Width) and
(MediaPlayer.DisplayRect.Bottom * 2 <= MCIAnzeige.Height)) then
begin
NewWidth := MediaPlayer.DisplayRect.Right * MCIAnzeige.Height
div MediaPlayer.DisplayRect.Bottom;
if NewWidth > MCIAnzeige.Width then
begin
NewHeight := MediaPlayer.DisplayRect.Bottom * MCIAnzeige.Width
div MediaPlayer.DisplayRect.Right;
NewWidth := MCIAnzeige.Width;
end else
NewHeight := MCIAnzeige.Height;
end
else
begin
NewWidth := MediaPlayer.DisplayRect.Right;
NewHeight := MediaPlayer.DisplayRect.Bottom;
end;
MediaPlayer.DisplayRect := Rect(
(MCIAnzeige.Width - NewWidth) div 2,
(MCIAnzeige.Height - NewHeight) div 2,
NewWidth, NewHeight);
end;
Hintergrund: Wenn man DisplayRect auf (0, 0, 0, 0) setzt, werden die letzten beiden Koordinaten automatisch auf die Videomaße gesetzt. (Falls es kein Video ist, sind sie natürlich auch 0.) Damit hat man die Videomaße und muss nun so rechnen, dass das Verhältnis beibehalten wird. Ich habe es nach der LetterBox-Methode gemacht, d. h. es wird nichts vom Video abgeschnitten, sondern es bleiben evtl. Teile frei, um das Seitenverhältnis zu bewahren.
[edit] Mein Code skaliert nur zu große Videos oder die, die kleiner als die Hälfte sind, da ich das damals so wollte. Wenn du das nicht willst, lass das
Delphi-Quellcode:
if (MediaPlayer.DisplayRect.Right > MCIAnzeige.Width) or
(MediaPlayer.DisplayRect.Bottom > MCIAnzeige.Height) or
((MediaPlayer.DisplayRect.Right * 2 <= MCIAnzeige.Width) and
(MediaPlayer.DisplayRect.Bottom * 2 <= MCIAnzeige.Height)) then
sowie das dazugehörige else begin..end weg.
[/edit]
Mfg
FAlter
[edit] Letzten Delphi-Tag korrigiert. [/edit]