Page 1 of 1
Delphi causes EOleExeption using SetPosition in VLC ActiveX
Posted: 04 Apr 2006 12:36
by Guest
Hi,
I wrote a simple Delphi 7 Example to use the VLC activeX Plugin ver. 0.8.5 test2.
Code: Select all
//***********************************************************
procedure TForm1.BtnOpenClick(Sender: TObject);
var
Parameter : array of String;
Dateiname : String;
begin
if OpenDialog1.Execute then
begin
Dateiname := OpenDialog1.FileName;
SetLength(Parameter,2);
Parameter[0]:=':vout-filter=deinterlace';
Parameter[1]:=':deinterlace-mode=blend';
VLCPlugin1.addTarget(Dateiname ,Parameter ,VLCPlayListInsert ,0);
end;
end;
//*********************************************************
procedure TForm1.BtnPlayClick(Sender: TObject);
begin
VLCPlugin1.play;
end;
//***********************************************************
procedure TForm1.BtnFFClick(Sender: TObject);
begin
VLCPlugIn1.Position := 0.5;
end;
//***********************************************************
The application is working fine. I'm unsing *.vdr Files to test it.
With the BtnFF Button I want to seek to the middle of the movie.
But when I click on the BtnFF Button Delphi shows me:
Project Project1.exe raised expetion class EOleExeption with Message 'Schwerwiegender Fehler'. Process stopped. Use Step or Run to continue.
By pressing run I can continue the application and the seek to the middle of the movie works.
What can I do to prevent this Error Message?
Is there an other opportunity to seek in the movie? F.e. Simulation of some pressed Keys?
Thanks
Cu Trucki
Posted: 04 Apr 2006 12:39
by Trucki
Sorry, I forgot the Login.
Trucki
Posted: 04 Apr 2006 16:32
by Quovodis
you cannot change the 'position' property if nothing is being played, try 'time' property instead, which seeks or starts to play at the time position in seconds
Posted: 05 Apr 2006 06:49
by Guest
Hi Quovodis,
thank you for your replay. I forgot to mention, that I first press the "Open" Button and select a *.vdr File. Then I press the "Play" Button to start playing the selected file. After VLC started to play the file I press the "BtnF" Button to seek to a Position and get the Error Message.
I tried to seek with the "time" property but it didn't show any effekt. But I think this is a Problem of the PES Format, because when I use the VLC GUI to play *.vdr files the time always shows me "00:00:00".
I hope somebody can help me. The VLC ActiveX Plugin is really great, but I can't use it.
Thanks
Cu Trucki
Posted: 06 Apr 2006 11:01
by Trucki
UP
Nobody here who is using the Position Property of the ActiveX VLC Plugin with Borland?
Thanks
Trucki
Posted: 06 Apr 2006 14:49
by Quovodis
can you move the seek bar in VLC player when playing those VDR files ?
if not, then the position property will not work
Posted: 06 Apr 2006 18:46
by Trucki
HI,
the Seekbar in the VLC 0.8.5 test2 GUI is working fine with *.vdr files. I also tried to use the Position Property in Delphi while I played *.wmv files.
Same Effekt. The Seek is working, but I always get this EOleExeption Error.
Any ideas?
Thanks
Trucki
Posted: 07 Apr 2006 08:59
by Trucki
Hi,
I figuerd out that the VLC_PositionSet funktion needs 2 parameters. The ActiveX Position Property only needs one position Parameter. Why? Is there no possibility to switch between absolute and relative seeking?
Can I use the functions getVariable an SetVariable to seek?
I tried
Code: Select all
procedure TForm1.BtnFFClick(Sender: TObject);
var
tmp : OleVariant;
begin
tmp := VLCPlugIn1.getVariable('position');
VLCPlugIn1.setVariable('0.5',tmp);
end;
but it seems that a position variable doesn't exists.
Trucki
Posted: 08 Apr 2006 16:25
by Quovodis
I reviewed some of the code in ActiveX and I have indeed found an issue with the 'position' property, which I have fixed in SVN. so try out the latest nightly build if you need to.
BTW, the 'position' property is internally translated into set/getVariable('position'), so using the property or the variable makes no difference.
Posted: 09 Apr 2006 09:26
by Trucki
HI Quovodis,
thank you very much! I installed "vlc-0.8.5-test2-20060409-0001-win32.exe" and it's working! Cool!
Unfortunallity I found another problem with the VersionInfo function.
Code: Select all
procedure TForm1.Button1Click(Sender: TObject);
begin
LabelTime.Caption := VLCPLugin1.VersionInfo;
end;
On a Button1 Click I only get a EOLESYSERROR: "Member not found" and no Info.
The VersionInfo function isn't really important for me. It's just to report that there could be a problem!
Thank you again for solving my problem!
Cu trucki
Posted: 09 Apr 2006 18:31
by Quovodis
VersionInfo is declared as a read-only variable in the ActiveX idl; I am not a Delphi expert, but maybe the call with Delphi should be as follow:
Posted: 09 Apr 2006 19:06
by Trucki
Hi,
no, the ActiveX PlugIn hasn't got a property 'getVersionInfo' in Delphi.
I also tried VlcPlugin1.PlaylistIndex / Count. Same Error : 'Member not found' .
Maybe the ActiveX PlugIn still has a bug?
Unfortunality I need these Variables for my project.
Can I access these variables with get_variable(name as Sting)?
Where can I find the possible "Names as String" for the get_variable function?
Thank you again for your support!
Cu Trucki
Posted: 09 Apr 2006 21:16
by Quovodis
these are 'hidden' properties; they are marked that way so that they don't appear in in property page, but they should be usuable in programming (and they are for VB, Javascript, etc...)
I don't know why Delphi can't use them, seems like an oversight from borland.
Posted: 10 Apr 2006 08:12
by Trucki
Hi,
by installing the activex Plugin, Delphi automaticly creates an AVLC_TLB.pas file in his Import Directory.
In this File you can find lines like this:
Code: Select all
TVLCPlugin = class(TOleControl)
...
property Playing: WordBool index 101 read GetWordBoolProp;
property Length: Integer index 104 read GetIntegerProp;
...
property PlaylistIndex: Integer index -1 read GetIntegerProp;
property PlaylistCount: Integer index -1 read GetIntegerProp;
property VersionInfo: WideString index -1 read GetWideStringProp;
...
property Position: Single index 102 read GetSingleProp write SetSingleProp stored False;
With these lines of the TVLCPlugIn Object Delphi knows which function it should use for read or write access. I don't understand very mutch of ActiveX programming, but I can't access properties which have the index Number -1 and I don't understand the difference between the declaration of the properies PlayListIndex and PlayListCount.
Unfortunality I do not unterstand enough to find the reason for these strange indexes in the ActiveX Plugin Sourcecode.
I hope you can help me.
Thanks Trucki
Posted: 10 Apr 2006 15:15
by Quovodis
indexes are allocated for all methods and properties inside an ActiveX TypeLibrary, OLE Object Viewer dump the content of the TypeLibrary and displays the indexes as follow:
Code: Select all
[id(0x60020015), propget, helpstring("Returns index of current target in playlist.")]
HRESULT PlaylistIndex([out, retval] int* index);
[id(0x60020016), propget, helpstring("Returns number of items in playlist.")]
HRESULT PlaylistCount([out, retval] int* index);
Delphi 7 should have been able to retrieve those indexes since it managed to do so for the others.
Posted: 10 Apr 2006 16:25
by Trucki
HI,
But I don't know how I can force Delphi to get these Index Numbers. Do you have an idea how I can solve this problem?
Thanks
Trucki
Posted: 10 Apr 2006 17:10
by Quovodis
why not changing the -1 indexes in AVLC_TLB.pas with the right values after importing, and recompile it
Posted: 11 Apr 2006 07:59
by Trucki
ok, sorry for this silly question, but where can I find the right indexes?
Are they really: ?
- hex : 0x60020015 for PlaylistIndex
- hex : 0x60020016 for PlaylistCount
What programm did you use to geht the OLE Viewer dump? I tried Micro$ofts OLE Viewer but I don't kno hiw to use it.
Cu trucki
Posted: 11 Apr 2006 08:19
by Trucki
OK,
sorry for the last question! I just replaced in the AXVLC_TLB.pas the lines
Code: Select all
property PlaylistIndex: Integer index -1 read GetIntegerProp;
property PlaylistCount: Integer index -1 read GetIntegerProp;
with
Code: Select all
property PlaylistIndex: Integer index $60020015 read GetIntegerProp;
property PlaylistCount: Integer index $60020016 read GetIntegerProp;
and recompiled.
It works!
What programm did you use to get the OLE Viewer dump? Do you also know the index for the VersionInfo property?
Thanks
Cu Trucki
Posted: 11 Apr 2006 10:25
by Quovodis
there you go:
http://www.microsoft.com/windows2000/te ... view-o.asp
I don't think that the more recent version of Deplhi have this problem (at least no-one reported any of the sort).
Anyway, If you don't mind, could you had a section on your experience using Deplhi 7 in the ActiveX wiki (
http://wiki.videolan.org/index.php/ActiveX/Delphi)
Re: Delphi causes EOleExeption using SetPosition in VLC ActiveX
Posted: 17 Mar 2008 04:10
by James23
The ActiveX Position Property only needs one position Parameter.
Re: Delphi causes EOleExeption using SetPosition in VLC ActiveX
Posted: 16 Apr 2008 06:51
by Themasteratdelphi
if your sure the error is irrelavent of the intended outcome, ie it sill works even after the error is shown, then you can enclose the problem statement with the
try and
finally statements (used just like
begin and
end; except finally is also followed by
end;).
for example:
Code: Select all
try
//insert probelem statement
finally
//insert rest of procedure
end;
with the
try finally statements errors are ignored after the
try and before
finally, the statements after
finally are ran regardless of error,
finally must be used to mark the end of
try, it has no other use as if
try was allowed on its own for one statement it would have the same effect, ie everything after the statement would be ran regardless.
there is also
try and
except which is used in the same way except if there is an error, the code between
except and
end; is ran, but not if there is no error.
for example:
Code: Select all
try
// insert code that could sometimes cause an error
except
//handle any error with this code. example:
messagedlg('An error occured', mterror, [mbok], 0);
end;
this should sort out the error but will not stop it from occuring. You must handle the error if it could cause the program to become instable. The is done with the
on [exceptionName]
do statement, this follows except, this can be used to customise what happens according to the error, and can make sure nothing tries to use erronious data.
hope this helps, i can see you've been having quite a few problems.
note: during a debug run in delphi the error is still picked up and is shown. It only runs without showing the error when executed as standalone ie not in debug.
also i recommend not changing the original source code for fear of instability and also how these changes could effect other machines when running your program, if any. this is probably the best way to get round the problem.