|
I am using a the Microsft Animation Control to play a status animation and would like to know if there is a .NET version of this control or something like it that someone has made because COM is Butt-Slow.
Or if someone has a better way todo this using anything please tell me.
TIA
|
|
|
|
|
|
FYI, most controls in the .NET Base Class Library (BCL) are just wrappers for the Windows Common Controls or - in some cases (like with the WebBrowser control in .NET 2.0) - are just out-of-the-box COM interop classes. You could try searching CodeProject or google the 'net for examples, but most likely these will just encapsulate native functionality anyway. The beauty of .NET is that you don't have to create everything from scratch.
You might also check out the Managed DirectX class at http://msdn.microsoft.com/directx[^]. Implementing this is non-trivial so be sure to read the documentation. There's also a couple articles here on CP, though the ones I've seen don't deal with animation besides sprites (sequence of static images).
If you need the status animation to play immediately, one alternative might be to instantiate the control and load the animation when the class that uses it is initialized, making sure that the animation is in the stopped state. When you need to show it, make the control visible and start the animation. When finished, stop the animation and hide the control and don't dispose it if you'll need it again. You'll get a faster response this way and the user will see immediately that something is going on. Of course, don't forget to set the wait cursor for further affect (and to stop processing mouse messages) using Cursor.Current = Cursors.WaitCursor . Don't forget to set it to the default again when done. Just my $0.02 to add to the user experience.
-----BEGIN GEEK CODE BLOCK-----
Version: 3.21
GCS/G/MU d- s: a- C++++ UL@ P++(+++) L+(--) E--- W+++ N++ o+ K? w++++ O- M(+) V? PS-- PE Y++ PGP++ t++@ 5 X+++ R+@ tv+ b(-)>b++ DI++++ D+ G e++>+++ h---* r+++ y+++
-----END GEEK CODE BLOCK-----
|
|
|
|
|
Thanks for the hefty answer, I'll try all that
------------------
I'm naked under my clothes...
|
|
|
|
|
Hi,
I have inherited from the DirectX class to play audio files.
public class MyAudio : Microsoft.DirectX.AudioVideoPlayback.Audio
{
public string MyFile;
public MyAudio(string str) : base(str)
{ }
public MyAudio(string str, bool bln) : base(str, bln)
{ }
}
In my code:
MyAudio newAudio = (MyAudio) MyAudio.FromUrl("http://web.com/46.mp3", false);
When I run this app it gives an error on the above line:
"Specified cast is not valid" !
The declaration of FromUrl func is :
public static Microsoft.DirectX.AudioVideoPlayback.Audio FromUrl ( System.String address , System.Boolean autorun )
How can I fix this problem ? I need to inherit from this class as I want to save the name of the file this object is playing !
Thanks,
Paul
|
|
|
|
|
Why are you trying to cast a reference type of MyAudio to MyAudio.
That is in effect saying "This green cup is green"(Absolutely Pointless).
Or is there some specific reason it needs to be there.
If it doesn't that might be your problem.
|
|
|
|
|
If you see the definition of FromUrl:
public static Microsoft.DirectX.AudioVideoPlayback.Audio FromUrl ( System.String address , System.Boolean autorun )
it returns a Microsoft.DirectX.AudioVideoPlayback.Audio object. So if I don't typecast it to MyAudio, it gives a compilation error.
Paul
|
|
|
|
|
In this function:
public static Microsoft.DirectX.AudioVideoPlayback.Audio FromUrl ( System.String address , System.Boolean autorun )
the signature states it returns an instance of the "Audio" class. You can't convert "Audio" to "MyAudio" because "Audio" doesn't derive from "MyAudio" (the reverse is true). If the function returned a "MyAudio", you could convert it to "Audio", but the other way around would never work.
If I understand what you're trying to do, you should consider creating a constructor for your "MyAudio" class that takes an "Audio" instance as a parameter.
I, for one, do not think the problem was that the band was down. I think that the problem may have been that there was a Stonehenge monument on the stage that was in danger of being crushed by a dwarf.
-David St. Hubbins
|
|
|
|
|
IMO not providing an external accessible contructor , the class should be sealed, the only option is to encapsulate as .NET doesnt allow you to cast from the base type of a derived class.
leppie::AllocCPArticle("Zee blog"); Seen on my Campus BBS: Linux is free...coz no-one wants to pay for it.
|
|
|
|
|
Another alternative would be to implement an explicit cast operator in the MyAudio class. See "explicit keyword" in your VS.NET help for details.
Essentially, the CLR will use this explicit cast operator to cast from Audio to MyAudio but in the implementation of the cast operator, you'll have to take care of the details.
[edit]
Nevermind. I forgot and was quickly reminded that casting to/from a base class (or for that matter, casting to/from derived class) isn't allowed and throws a compiler error.
[/edit]
-----BEGIN GEEK CODE BLOCK-----
Version: 3.21
GCS/G/MU d- s: a- C++++ UL@ P++(+++) L+(--) E--- W+++ N++ o+ K? w++++ O- M(+) V? PS-- PE Y++ PGP++ t++@ 5 X+++ R+@ tv+ b(-)>b++ DI++++ D+ G e++>+++ h---* r+++ y+++
-----END GEEK CODE BLOCK-----
|
|
|
|
|
Sweet...
I've been doing C# for over two years now, and I don't remember seeing that keyword before . I immediately looked up "implicit keyword" and was happy with what I found there as well.
Both implicit and explicit keywords are pretty cool.
I, for one, do not think the problem was that the band was down. I think that the problem may have been that there was a Stonehenge monument on the stage that was in danger of being crushed by a dwarf.
-David St. Hubbins
|
|
|
|
|
Exactly what I mention is not possible at all!
Compiler Error CS0553'conversion routine' : user defined conversion to/from base class
User-defined conversions to values of a base class are not allowed; you do not need such an operator.
The following sample generates CS0553:
namespace x
{
public class ii
{
}
public class a : ii
{
public static implicit operator ii(a aa)
{
return new ii();
}
public static void Main(){}
}
}
leppie::AllocCPArticle("Zee blog"); Seen on my Campus BBS: Linux is free...coz no-one wants to pay for it.
|
|
|
|
|
That error happens in a very few cases, I myself have only bumped into it once. There is NO way around it, unless you encapsulate the class, like a BufferedStream eg.
leppie::AllocCPArticle("Zee blog"); Seen on my Campus BBS: Linux is free...coz no-one wants to pay for it.
|
|
|
|
|
Can u give an example of what u mean by 'creating a constructor for your "MyAudio" class that takes an "Audio" instance as a parameter.'
How would I specify the file and how would i get the instance of Audio ?
|
|
|
|
|
My original advice isn't necessarily the best way to do it. I think I understand a little better now what you're trying to do.
I'm having a hard time figuring out exactly what you're doing, but I might be able to help a bit.
First, the most important thing for you to realize is why what you tried doesn't work. The FromUrl method is a static function that returns an instance of DirectX's Audio class. This type of function is sometimes called a "factory". It's creating a new instance of the Audio class. It's similar to a constructor, but you're not using the "new" operator to create a new instance. Audio is a base class of MyAudio. So an Audio instance can never be converted to a MyAudio (only the reverse can be done).
Now, from what I can tell, you created the "MyAudio" class to simply store a string that's the original file (is this correct?). Since you're dealing with static factory method's that you still want to use and they're not virtual (so you can't override them), my opinion to you would be don't derive from Audio, but contain an Audio instead. The limitation of this is you can't pass around a MyAudio instance anywhere you normally could pass an Audio instance, but it's still not too hard to make it easy to use. For instance, consider this:
public MyAudio
{
public MyAudio(string url, bool autoPlay)
{
audio = Audio.FromUrl(url, autoPlay);
file = "???";
}
public Audio
{
get
{
return audio;
}
}
private Audio audio;
private string file;
}
Then you could write code like:
MyAudio ma = new MyAudio(url, autoPlay);
and whenever you needed to do something you'd normally do with Audio, you could just call
ma.Audio
and have access to the contained DirectX Audio instance.
Does any of that help?
I, for one, do not think the problem was that the band was down. I think that the problem may have been that there was a Stonehenge monument on the stage that was in danger of being crushed by a dwarf.
-David St. Hubbins
|
|
|
|
|
That worked, thankyou so much.
There is some data that I need to save with the MyAudio object. That's why I cannot directly use the Audio object.
Thanks,
Paul
|
|
|
|
|
I have a dataGrid and my reqirements is that i want to add data in the dataGrid form two tables.Both the tables are in the dataset.
How can i display data in the datagrid programatically.I think the
dataGrid.setDataBounding(ds,"Item")
would not work since it binds it to only one table.
Is there unbound method so that i can display data form two table in a single data grid.
Note that i dont want to use the DataRelation obj .
Any Idea.
Thanks
|
|
|
|
|
datagrid.DataSource = dataset;
Just bound iyt to whole of dataset,not to one table.
Mazy
No sig. available now.
|
|
|
|
|
This will require a value for the DataGrid.DataMember property since DataSet is an IListSource implementation. If you don't, you'll see a DataGrid with two collapsable (in the collapsed state) rows for each table. It won't give you a "flat" look, and most likely both tables will have different columns anyway.
A couple of other alternatives might be to merge the two tables together if you don't need to update an RDBMS with the changes to the DataSet . You could also used a couple of DataGridTableStyle s (see the DataGrid.TableStyles property for more information) to control the output of each table depending on the table name, although this won't show them simultaneously. You can programmatically switch from one table style to another hence showing both tables formatted how you want them.
-----BEGIN GEEK CODE BLOCK-----
Version: 3.21
GCS/G/MU d- s: a- C++++ UL@ P++(+++) L+(--) E--- W+++ N++ o+ K? w++++ O- M(+) V? PS-- PE Y++ PGP++ t++@ 5 X+++ R+@ tv+ b(-)>b++ DI++++ D+ G e++>+++ h---* r+++ y+++
-----END GEEK CODE BLOCK-----
|
|
|
|
|
I've got a rather odd problem which I can't fix, and can't find any information about on the Microsoft sites, so maybe some saged person here can help.
In summary, I am referencing a home grown .DLL in my project. The .DLL is relatively simple, it just accesses some legacy BTree files. However with the reference in place, loading up one of the existing forms in the project the form doesn't load - in it's place is a screen saying:
An error occurred while loading the document. Fix the error, and then try loading the document again. The error message follows:<br />
File or assembly name EPoSAccessLayer.dll, or one of it's dependencies, was not found.
I have confirmed that all dependencies are found, and in a brand new project the .DLL does not cause these problems.
In the existing project where this reference is causing the form problems, the application will compile and execute without errors. I just can't edit the forms.
My current workaround is to remove the reference, and then the forms load up and are OK for editing. So the question is, has anyone else experienced this problem, and if so, do you know the solution for it.
Thanks.
Martin.
|
|
|
|
|
Sometimes I found those error too,
What I did.. just try saving the form.. restart the IDE and reopen again.
Mostly it's work..
Sorry I can't help you with other solution
"Courage choose who will follow, Fate choose who will lead" - Lord Gunner, Septerra Core
"Press any key to continue, where's the ANY key ?" - Homer Simpsons
Drinking gives me amazing powers of insight. I can solve all the worlds problems when drunk, but can never remember the solutions in the morning. - Michael P Butler to Paul Watson on 12/08/03
|
|
|
|
|
If the assembly EPoSAccessLayer.dll is from a project in your solution, I recommend you add a Project reference to your project that depends on it (same as adding a .NET or COM reference, only click on the Project tab). This keeps both Debug, Release, or any other build configurations in sync when building. It also makes sure that any changes to the EPoSAccessLayer project force a recompilation of it before compiling your project with a dependency on it. If you're using automatic versioning, this problem seems common and using a project reference should help.
-----BEGIN GEEK CODE BLOCK-----
Version: 3.21
GCS/G/MU d- s: a- C++++ UL@ P++(+++) L+(--) E--- W+++ N++ o+ K? w++++ O- M(+) V? PS-- PE Y++ PGP++ t++@ 5 X+++ R+@ tv+ b(-)>b++ DI++++ D+ G e++>+++ h---* r+++ y+++
-----END GEEK CODE BLOCK-----
|
|
|
|
|
I wasn't orginally using a project reference, just a normal binary reference. But that does seem to have fixed it.
Thanks.
|
|
|
|
|
This problem occurs also when you are using inherited forms. Forms inherited from forms in your own project usually don't cause much trouble. But I have never been able to inherit a form from another (library) project... the program worked just fine - like yours - but the designer wouldn't work...
A bug in VS.NET ...
Anybody knowing how to fix this inheriting problem??
greetz
*Niels Penneman*
Software/Dev Site Personal Site
|
|
|
|
|
I can't seem to figure this out.
I need to dispose the audio after it has finished playing(using DirectX).
ourAudio = new Audio(fileName);
if (ourAudio != null)
ourAudio.Play();
<- NEED SOMTHING HERE (Wait function or Thread...)
ourAudio.Dispose();
Thanks
Thomas
|
|
|
|