많은 삽질 끝에 성공했다 -_-
먼저 폼을 만들어 보자.
아래와 같이 만들자.
- 패널 3개를 넣고 Align 속성을 altop, alClient, alBottom 으로 나눈다.
- TStatusBar 컴포넌트 넣고, 팝업메뉴에서 Panel Editor를 선택하고 1개 추가한다.
- 버튼 2개를 넣고 각각 Open, Exit 로 속성을 변경한다.
- TMediaPlayer 컴포넌트를 패널1에 넣고, 속성은 Display는 Panel2로 설정
- TTrackBar컴포넌트를 패널2에 넣고 속성은 Align은 alBottom으로 설정
- 패널3에 라벨를 넣고 위 그림과 같이 Caption 속성을 입력한다.
- 패널3에 패널 하나 더 넣고 BevelOuter를 bvLowered로 지정한다.
- TOpenDialog와 TTimer컴포넌트를 넣는다.
---------------------------------------------------------------------------------
unit UVideo;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls, Vcl.ComCtrls,
Vcl.StdCtrls, Vcl.MPlayer, Vcl.Buttons;
type
TForm1 = class(TForm)
Panel1: TPanel;
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
MediaPlayer1: TMediaPlayer;
Panel2: TPanel;
Panel3: TPanel;
TrackBar1: TTrackBar;
StatusBar1: TStatusBar;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
mPlayFrame: TLabel;
mTotalFrame: TLabel;
mTime00: TLabel;
mTime01: TLabel;
mFileName: TPanel;
OpenDialog1: TOpenDialog;
Timer1: TTimer;
procedure FormCreate(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
procedure MediaPlayer1Click(Sender: TObject; Button: TMPBtnType;
var DoDefault: Boolean);
procedure MediaPlayer1Notify(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.BitBtn1Click(Sender: TObject);
var
h,m,s,ss : integer;
begin
if OpenDialog1.Execute then
begin
//열기 대화 상자에서 선택한 동영상 파일을 미디어 플레이어의 FileName 속성에 대입하여 연결
MediaPlayer1.FileName := OpenDialog1.FileName;
//경로명과 파일명을 가지고 있는 문자열에서 파일명과 확장자명만을 축출하는 함수
mFileName.Caption := ExtractFileName(OpenDialog1.FileName);
//재생할 동영상을 연결
Mediaplayer1.Open;
mediaPlayer1.TimeFormat := tfFrames;
//전체 프레임 수를 표시
TrackBar1.Max := MediaPlayer1.Length;
//현재 재생 위치를 표시
TrackBar1.Position := MediaPlayer1.Position;
mTotalFrame.Caption := FormatFloat('##,###,###,###,##0',MediaPlayer1.Length);
mPlayFrame.Caption := FormatFloat('##,###,###,###,##0',MediaPlayer1.Position);
MediaPlayer1.TimeFormat := tfMilliseconds;
ss := MediaPlayer1.Length div 1000;
s := ss mod 60;
m := ss div 60;
h := m div 60;
m := m mod 60;
mTime00.Caption := FormatFloat('00:00:00',0);
mTime01.Caption := FormatFloat('00',h)+':'+FormatFloat('00',m)+':'+FormatFloat('00',s);
end;
end;
procedure TForm1.BitBtn2Click(Sender: TObject);
begin
Application.Terminate;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
OpenDialog1.Filter := 'Avi Files|*.avi|MPEG Files|*.mpg|All Files|*.*';
mPlayFrame.Caption := '0';
mTotalFrame.Caption := '0';
mTime00.Caption := '00:00:00';
mTime01.Caption := '00:00:00';
end;
procedure TForm1.MediaPlayer1Click(Sender: TObject; Button: TMPBtnType;
var DoDefault: Boolean);
begin
case Button of
btPlay: begin
Timer1.Enabled := true;
StatusBar1.Panels[0].Text := '재생';
end;
btPause: StatusBar1.Panels[0].Text := '잠시멈춤';
btStop: StatusBar1.Panels[0].Text := '재생중지';
btNext: StatusBar1.Panels[0].Text := '다음';
btPrev: StatusBar1.Panels[0].Text := '이전';
btStep: StatusBar1.Panels[0].Text := '앞으로';
btBack: StatusBar1.Panels[0].Text := '뒤로';
end;
end;
procedure TForm1.MediaPlayer1Notify(Sender: TObject);
begin
if (MediaPlayer1.NotifyValue = nvSuccessful) and (MediaPlayer1.Mode = mpStopped) then
StatusBar1.Panels[0].Text := '재생완료';
if MediaPlayer1.Mode = mPStopped then
StatusBar1.Panels[0].Text := '재생중지';
end;
procedure TForm1.Timer1Timer(Sender: TObject);
var
h,m,s,ss : integer;
begin
MediaPlayer1.TimeFormat := tfFrames;
mPlayFrame.Caption := FormatFloat('##,###,###,###,##0',MediaPlayer1.Position);
TrackBar1.Position := MediaPlayer1.Position;
MediaPlayer1.TimeFormat := tfMilliseconds;
ss := MediaPlayer1.Position div 1000;
s := ss mod 60;
m := ss div 60;
h := m div 60;
m := m mod 60;
mTime00.Caption := FormatFloat('00',h)+':'+FormatFloat('00', m)+ ':' + FormatFloat('00',s);
Timer1.Enabled := true;
end;
end.
---------------------------------------------------------------------------------
역시 빨강 부분은 폼을 완성하면서 자동으로 추가된 코드고
주황 부분이 직접 넣어야 하는 부분이다.
실행해보니 코덱의 문제인지 소리만 나는 영상도 있고, 나오는 영상도 있고, 안나오는 영상도 있다 ㅡㅡ;;
어째든 이번 장도 끝~ ㅎㅎ;; ㅌㅌㅌ
댓글 없음:
댓글 쓰기