Hi,
Is there samplecode of how to add audio and video to TRichViewEdit, preferably by the MediaPlayer so it can be rendered to a (x)html page.
Add Mediaplayer (or video/audio) to RichView
-
- Site Admin
- Posts: 17554
- Joined: Sat Aug 27, 2005 10:28 am
- Contact:
Hi,
It works but i still have some minor problems
1) I added the following code just after the Player.open call to resize the player to the movie. But TRIchViewEdit keeps showing the cursor at the old size and position.
2) Addding a
behind above code starts it playing directly after insertion (no black square and more like the swf sample).
3) When I delete the avi and try add it again without closing the editor I get a message that 'The device name is alreay being used as an alias by this application'. It also happens whan you insert a second copy of the same movie into a document.
4) When I insert a movie into a tablecell the cell is enlarged a bit but not to the size of the movie being inserted (maybe related to point 1, as the avi was larger then the default player size).
It works but i still have some minor problems
1) I added the following code just after the Player.open call to resize the player to the movie. But TRIchViewEdit keeps showing the cursor at the old size and position.
Code: Select all
mw := Player.DisplayRect.Right - Player.DisplayRect.Left;
mh := Player.DisplayRect.Bottom - Player.DisplayRect.Top;
VideoPanel.Width := mw;
VideoPanel.Height := mh;
Panel.Width := mw;
Panel.Height := mh + Player.Height;
Player.Width := mw;
Code: Select all
Player.Play
3) When I delete the avi and try add it again without closing the editor I get a message that 'The device name is alreay being used as an alias by this application'. It also happens whan you insert a second copy of the same movie into a document.
4) When I insert a movie into a tablecell the cell is enlarged a bit but not to the size of the movie being inserted (maybe related to point 1, as the avi was larger then the default player size).
Hi,
I fixed points 1 and 4 of the previous reply by adding a
just after the finally block.
Another point i forgot to mention is that if the code is used in an application with more than one TRichView the OnPlayerClick needs to know which editor it's addressing. The following code finds the editor and selects the video for resizing:
I fixed points 1 and 4 of the previous reply by adding a
Code: Select all
Editor.Format;
Another point i forgot to mention is that if the code is used in an application with more than one TRichView the OnPlayerClick needs to know which editor it's addressing. The following code finds the editor and selects the video for resizing:
Code: Select all
procedure T_MainForm.OnPlayerClick(Sender: TObject);
var Panel : TPanel;
begin
Panel := Sender as TPanel;
if Panel.Parent is TPanel then
Panel := TPanel(Panel.Parent);
if (Panel.Parent is TRichViewEdit) then
(Panel.Parent as TRichViewEdit).SelectControl(Panel);
end;
Hi,
The following code centers the avi at it's original size and also supports audio.
Only problems left are:
1) to correctly enable the pause/stop button after the play command (Delphi problem) and
2) correctly size the mediaplayer that is emebbed in the exported htmlpage (as it has a different size than a TMediaplayer).
and
and finally
The following code centers the avi at it's original size and also supports audio.
Only problems left are:
1) to correctly enable the pause/stop button after the play command (Delphi problem) and
2) correctly size the mediaplayer that is emebbed in the exported htmlpage (as it has a different size than a TMediaplayer).
Code: Select all
procedure T_MainForm.rvActionVideoExecute(Sender: TObject;
Editor: TCustomRichViewEdit);
var Panel, VideoPanel: TPanel;
Player : TMediaPlayer;
mh : Integer;
mw : Integer;
begin
if OpenDialog2.Execute then
begin
// Creating the player panel
Panel := TPanel.Create(nil);
Panel.BevelInner := bvNone;
Panel.BevelOuter := bvNone;
Panel.Width := 200;
// Creating a panel to show video
VideoPanel := TPanel.Create(Panel);
VideoPanel.Parent := Panel;
VideoPanel.BevelInner := bvNone;
VideoPanel.BevelOuter := bvNone;
VideoPanel.Width := 200;
VideoPanel.Height := 200;
VideoPanel.Color := clBlack;
// Creating a player control
Player := TMediaPlayer.Create(Panel);
Player.Parent := Panel;
Player.ColoredButtons := [];
Player.VisibleButtons := [btPlay, btPause, btStop];
Player.Height := 20;
Panel.Height := VideoPanel.Height + Player.Height;
Player.Left := (Panel.Width - Player.Width) div 2;
Player.Top := VideoPanel.Height;
Player.Display := VideoPanel;
Panel.OnResize := OnPlayerResize;
Panel.OnClick := OnPlayerClick;
VideoPanel.OnClick := OnPlayerClick;
// Inserting in TRichViewEdit
Editor.TopLevelEditor.BeginUndoGroup(rvutInsert);
Editor.TopLevelEditor.SetUndoGroupMode(True); // grouping InsertControl & SetCurrentItemExtraIntProperty
try
if Editor.InsertControl('', Panel, rvvaBaseline) then
begin
Editor.SetCurrentItemExtraIntProperty(rvepResizable, 1, True);
Player.FileName := OpenDialog2.FileName;
Player.Open;
mw := Player.DisplayRect.Right - Player.DisplayRect.Left;
mh := Player.DisplayRect.Bottom - Player.DisplayRect.Top;
VideoPanel.Width := mw;
VideoPanel.Height := mh;
VideoPanel.Left := (Panel.Width - mw) div 2;
Panel.Width := Max(mw, Player.Width);
Panel.Height := Max(mh, 0) + Player.Height;
Player.Top := Panel.Height - Player.Height;
Player.Play;
end;
finally
Editor.TopLevelEditor.SetUndoGroupMode(False);
end;
Editor.Format;
end;
end;
Code: Select all
procedure T_MainForm.OnPlayerResize(Sender: TObject);
var Panel, VideoPanel: TPanel;
Player : TMediaPlayer;
begin
Panel := Sender as TPanel;
VideoPanel := Panel.Components[0] as TPanel;
Player := Panel.Components[1] as TMediaPlayer;
VideoPanel.Left := (Panel.Width - VideoPanel.Width) div 2;
VideoPanel.Top := ((Panel.Height - VideoPanel.Height - Player.Height) div 2);
Player.Left := (Panel.Width - Player.Width) div 2;
Player.Top := Panel.Height - Player.Height;
end;
Code: Select all
procedure T_MainForm.OnPlayerClick(Sender: TObject);
var Panel : TPanel;
begin
Panel := Sender as TPanel;
if Panel.Parent is TPanel then
Panel := TPanel(Panel.Parent);
if (Panel.Parent is TRichViewEdit) then
(Panel.Parent as TRichViewEdit).SelectControl(Panel);
end;
-
- Site Admin
- Posts: 17554
- Joined: Sat Aug 27, 2005 10:28 am
- Contact:
About resizing: call ResizeCurrentControl(NewWidth, NewHeight) instead of Format, it's much more faster.
Or better yet, resize it properly before the insertion to avoid flickering (resizing may require that the panel's Parent is assigned; in this case, temporarily make it hidden (Panel.Visible := False) and assign its parent (Panel.Parent := RichViewEdit1))
Please find answers to other your questions yourself, since they are not directly related to TRichView.
I am afraid that the problem of playing the same file by several players cannot be solved using TMediaPlayer. I believe it can be solved by providing an unique alias name in TMCI_Open_Parms structure when opening video (procedure TMediaPlayer.Open), but TMediaPlayer does not allow to specify aliases.
Or better yet, resize it properly before the insertion to avoid flickering (resizing may require that the panel's Parent is assigned; in this case, temporarily make it hidden (Panel.Visible := False) and assign its parent (Panel.Parent := RichViewEdit1))
Please find answers to other your questions yourself, since they are not directly related to TRichView.
I am afraid that the problem of playing the same file by several players cannot be solved using TMediaPlayer. I believe it can be solved by providing an unique alias name in TMCI_Open_Parms structure when opening video (procedure TMediaPlayer.Open), but TMediaPlayer does not allow to specify aliases.