-
вопрос наверно глупый... Как запустить плеер из чистого КОЛ? При создании с помощью КОЛнМЦК работает, а в КОЛ не получается program ScrSvrVid;
uses FastMM4, Windows, KOL,
main in 'main.pas',
dlg in 'dlg.pas';
var
s: string;
begin
Run_;
end.
unit main;
interface
uses
Windows, KOL, KOLMediaPlayer;
procedure Run_;
var
f: PControl;
mp: PMediaPlayer;
implementation
procedure onnotif(d: pointer; Sender: PMediaPlayer; NotifyValue: TMPNotifyValue);
begin
if NotifyValue = nvSuccessful then
Sender.Play(1,-1);
end;
procedure Run_;
begin
f := NewForm(nil, '');
f.Show;
mp := NewMediaPlayer('t.wmv', f.GetWindowHandle); mp.OnNotify := TMPOnNotify(MakeMethod(nil, @onnotif));
Run(f);
mp.Stop;
mp.Free;
end;
end.
-
program Project1;
uses
KOL, KOLMediaPlayer;
var
Form: PControl;
Btn: PControl;
MP: PMediaPlayer;
procedure BtnClick(Dummy, Sender: PObj);
begin
MP.Play(0, MP.Length);
end;
begin
Form := NewForm(nil, '');
Applet := Form;
Form.CreateWindow;
Form.HasCaption := False;
MP := NewMediaPlayer('c:\windows\media\tada.wav', Form.Handle);
Form.Add2AutoFree(MP);
Btn := NewButton(Form, 'Play');
Btn.OnClick := TOnEvent(MakeMethod(nil, @BtnClick));
Run(Applet);
end.
-
Дмитрий К, в проекте будет только обработка ключей запуска, а всё остальное - в модуле(-ях). По-другому будет каша
-
в моём варианте вылезает ошибка, в другом вообще не запускается
-
МедиаПлейеру нужен Applet для обработки нотификаций.
-
музыка есть, нет видео - AV. Во всех вариантах. Кодеки стоят. КОЛ 2.87 с не помню сколькими плюсами
-
Была такая же проблема. Заюзал DirectShow - помогло.
-
как?
-
Что-то навроде этого: uses DShow, ActiveX, ComObj;
var
MyGraphBuilder: IGraphBuilder;
MyMediaControl: IMediaControl;
MyMediaEventEx: IMediaEventEx;
MyMediaSeeking: IMediaSeeking;
MyVideoWindow : IVideoWindow;
MyBasicAudio : IBasicAudio;
*********
При запуске программы:
CoInitialize(nil);
*********
При выходе:
CoUninitialize;
*********
function Play(f:Kol_String):boolean;
var hr:integer;
begin
result:=false;
CoCreateInstance(CLSID_FilterGraph,nil,CLSCTX_INPROC_SERVER,IID_IGraphBuilder,My GraphBuilder);
hr:=MyGraphBuilder.RenderFile(StringToOleStr(f),nil);
if FAILED(hr) then exit;
hr:=MyGraphBuilder.QueryInterface(IID_IMediaControl,MyMediaControl);
if FAILED(hr) then exit;
hr:=MyGraphBuilder.QueryInterface(IID_IMediaEventEx,MyMediaEventEx);
if FAILED(hr) then exit;
hr:=MyGraphBuilder.QueryInterface(IID_IMediaSeeking,MyMediaSeeking);
if FAILED(hr) then exit;
hr:=MyGraphBuilder.QueryInterface(IID_IBasicAudio,MyBasicAudio);
if FAILED(hr) then exit;
hr:=MyGraphBuilder.QueryInterface(IID_IVideoWindow,MyVideoWindow);
if FAILED(hr) then exit;
hr:=MyVideoWindow.put_Owner(Form1.Panel1.Handle);
if FAILED(hr) then exit;
hr:=MyVideoWindow.put_WindowStyle(WS_CHILD OR WS_CLIPSIBLINGS);
if FAILED(hr) then exit;
hr:=MyVideoWindow.SetWindowPosition(0,0,Form1.Panel1.ClientRect.Right,Form1.Pane l1.ClientRect.Bottom);
if FAILED(hr) then exit;
hr:=MyBasicAudio.put_Volume(VolumeTrackBar.Position);
hr:=MyMediaControl.Run;
if FAILED(hr) then exit;
result:=true;
end;
А более подробно сюда - http://directshow.wonderu.com/
|