|
Wow this looks like a lot more work than I first though, but it looks interesting and I will probably have an attempt to it, but probably not in C#. But at least I know in what direction to look into now, you've shed a lot of light on the issue
Thanks again
|
|
|
|
|
After reading a couple of article of "The Complete Idiot's Guide to Writing Shell Extensions" series (which are excellent), I got curious and did a little investigation in my registry on Winrar. I was trying to find where and how the handler to support a custom clipboard data (data handler) is setup in the registry.
What I figured out is that Winrar only has one shell extension file, rarext.dll is the only thing that came up when I searched the HKCR->CLSID. When I manually unregistered it (renamed it’s GUID key from the HKCR->CLSID) all context menu, property pages and drag drop handlers were removed from the shell (which was what I expected). But I still can drag a file out from an archive to the desktop and the file will only extract from the archive after it's dropped on the target.
It looks like the data handler is still active or does this mean that it’s possible to create that behavior with out shell extensions?
|
|
|
|
|
It is using a common clipboard format to do this. Most likely, it extracts the files to a temp location first and lets explorer copy them. I don't know exactly how it works, though, since it's implementation is unknown. It still comes down to the fact that the drop target is what handles the data transfer, so you have to use a clipboard format that the shell understands.
What you removed from the registry (there are actually several keys that deal with different shell extension types) was merely shell extensions. What you're talking about - which I didn't catch before - is dragging and dropping files from their application (which is already running). The idea is still the same, though: you have to use a clipboard format that the shell understands.
-----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 was able to get the drag drop to work with one major problem… because the extraction of the files has to be done before the DoDragDrop (because I don’t know where else to put it and the DoDragDop doesn't return until the files are dropped). But if the file that’s going to be extracted is big, then the behavior is pretty weird because when I click-hold on the file (in my app) then move the mouse (triggers the item drag) my app extracts the file even before I’ve even decided where to drop it, so then I have to wait that the file is fully extracted before dropping it in the file explorer… Here’s a snippet of code that I have:
void listViewFiles_ItemDrag(object sender, System.Windows.Forms.ItemDragEventArgs e)
{
DataObject data = new DataObject();
string[] fileArray = new string[listViewFiles.Items.Count];
string tempPath = Path.GetTempPath();
for(int i = 0; i < listViewFiles.Items.Count; i++)
fileArray[i] = Path.Combine(tempPath, listViewFiles.Items[0].Text);
data.SetData(DataFormats.FileDrop, fileArray);
ExtractSelectedFileTo(Path.GetTempPath());
DoDragDrop(data, DragDropEffects.Copy | DragDropEffects.Move);
}
So what I’m trying to say is that I think I’m already using a clipboard format that the shell understands, but it still doesn’t make my implementation of it look good enough. The best would be that the DoDragDrop would tell my application by an event when it’s about to drop and only then I would extract the files.
Thanks again for your help
|
|
|
|
|
Begin extracting files in a separate thread and and continue drag-n-drop in the main UI thread (it has to be in the UI thread anyway). Just join the main UI thread (Thread.CurrentThread ) with the extraction thread so that it will continue to perform the drop when the extraction is finished.
You could try something else, too, which is to handle the Control.GiveFeedback in your drag source. Even though the win32 APIs don't mention it, the GiveFeedback event might because fired before the drop target is notified of the drop. Your Effect would be different and maybe you could do your extraction then. This is only a guess, though.
Other than that, you might have to stop using .NET's drag and drop functionality and create interfaces for IDropSource , IDropTarget , and IDataObject (not the .NET one), as well as P/Invoking OLE's DoDragDrop and defining the STGMEDIUM and FORMATETC structures. Many other things might be required as well. Basically, you pack the data (or pointers to the data) in memory (for instance, in global memory which would require a call to something like Marshal.AllocHGlobal ) and give the shell something it knows. You should definitely take a look at the Windows Shell documentation for more information.
-----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 don't know how to switch between two forms in a project in C#. In VB6, if I was on Form1 and I wanted to switch to Form2, I would do something along the lines of:
Form1.Hide
Form2.Show
In C#, I can do...
this.Hide();
but can't get Form2 to load with...
Form2.Show();
because "Show doesn't exist in the class or namespace".
Is there some other way to switch between forms?!?
Thanks in advance for your help,
Paul
|
|
|
|
|
dear pauldaly ,
as i think that you are a new .net programmer in .net you have to create an instance from the object to use it so you have to define to objects like
<br />
Form1 frm1 = new Form1();<br />
Form2 frm2 = new Form2();<br />
now you can use each instance of the forms to do that
<br />
frm1.Show();<br />
frm1.Hide();<br />
frm2.Show();<br />
and so on
Mhmoud Rawas
------------
Software Eng.
|
|
|
|
|
Anybody know of a simple and native way to do this in c#? I want to know if my app can utilize XP themes at runtime.
Thanks,
Todd
|
|
|
|
|
|
An easy way that uses the .NET class library is like this:
Version v = OSFeature.Feature.GetVersionPresent(OSFeature.Themes); Looking at the IL, the IsAppThemed native method is called internally, which will only work if comctl32.dll, version 6, is loaded (which means the binding is being redirected to the side-by-side native assembly).
-----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-----
|
|
|
|
|
Perfect... thanks. Here's the code I used in the end:
if (OSFeature.Feature.IsPresent(OSFeature.Themes))
{
...
}
|
|
|
|
|
Hey Todd,
You could also use a manifest file to enable the themese.
You can get more information in your MSDN. Just search for "Using Windows XP Visual Styles" title which is part of Windows Technical articles. There you will see the manifest code.
Based on your operating system (XP only) your application will load Common Controls version 6 from your manifest if present and if not, it will load previous version. There are also additional information about setting the style of your controls to Flat.
|
|
|
|
|
Hi all,
I need to write a program to schedule promos for a radio station.
Each promo is to be shown a certain number of times a day in one of the ad breaks of which there are so many a day.
The promos need to be as well distrubuted as possible. That is all the promos well spread out amongst the ad breaks and each promo should it be well dispersed among those promos that are shown.
Furthermore some promos are to be shown only between certain times.
Id be grateful for any ideas of how to approach this.
Cheers.
|
|
|
|
|
This sounds like a homework question to me.
First of all, write down your selection criteria. Then consider how to put it into code. I'd probably start with a struct that includes details such as the promo ( a seperate class ), the times it can be played, and then write code to spread the promos over the applicable time periods. So if you can play a promo between 1 and 2, if you can play it three times, play it at 1, 1:30 and 2.
Christian
I have drunk the cool-aid and found it wan and bitter. - Chris Maunder
|
|
|
|
|
Hi Christian,
No not a homework problem but a real world problem . I do have a class that represents the promo with the same type of properties you described.
The problem is I am dissatisfied with the way I have them distributed, and being quite weak on maths I am at a loss as to how to proceed.
The reason I posted is that I hoped that someone might recognise the type of problem and point me to some resources or something.
Thanks for your help.
|
|
|
|
|
Sounds like homeworks to me
No.. Sorry I just joking...
there's a typical problem which almost same with your problem, they call it TimeTabling problem, it focus on scheduling with some constrain.
One of algorithm to solve this problem is Tabu Search.
First you set some hard constrain & soft constrain to your schedule.
Hard constrain means the schedule configuration not a solution if they break rules which define in hard constrain.
Soft constrain means the schedule configuration stil a solution if they break rules which define in soft constrain, but if they didn't break any rules it become a good solution.
Woow... so many things to tell you here and u can serach it on Google, But ..
If u want the easiest way... there's many software package out there which can solve your timetabling problem.
Ok, Now it's my turn to take a rest...
"Courage choose who will follow, Fate choose who will lead" - Lord Gunner, Septerra Core
|
|
|
|
|
Aryo Handono. wrote:
Sounds like homeworks to me
LOL . Thanks for your help Aryo, sounds good to me. Time to get googling.
|
|
|
|
|
OmegaSupreme wrote:
Thanks for your help Aryo, sounds good to me. Time to get googling.
It's my pleasure if I can help you.
BTW, if you found some nice article about that, Would you mine to share it with me, because timetabling is my Last assignment work before graduated.
That's why I call it homework
I believe you already know my email, please don;t hesitate to contact me personally. Maybe we can help each other.
"Courage choose who will follow, Fate choose who will lead" - Lord Gunner, Septerra Core
|
|
|
|
|
Hi Aryo,
Sure I'd be happy to share anything I find. Though I've got so much to do it could well take me over a week before I can get into it.
Good luck with graduating and thanks again for your help.
|
|
|
|
|
hi,
i was onced asked to do a similar project for the radio station i volunteered for, and i can promise you there is no easy solution for scheduling problems, and i have a degree in applied mathematics!
the main problem you face is that station managers/advertising managers want to have very specific rules governing the way ads are played, and telling them that your mathematical algorithm won't let them schedule an ad 2 times a day, except on a full moon which happens to be a sunday they want it played 6 times, is just not going to cut it... get my drift?
having spent many years working on a payroll system that required the programming of awards in much the same way that an ad scheduler needs to work, what i have worked out is that the simpler way to deal with the problem (albeit not the most mathematically asthetic way) is to build a 'rules' database that associates a series of rules to a particular ad...
effectively you are building a mini-expert system that uses rule-based and case-based reasoning (all of which can live in your database)...
particularly, the approach i have seen before is to use a self-referential table that effectively 'parses' the rules associated with the employment award and the employees to whom it applied - an elegant but extraordinarily difficult algorithm to maintain...
my approach (had i continued with the project (i am too old to hack code for nothing and wait for royalties)) was to build a 'vocabulary' which associated key words with particular meanings that could be applied in the system... this would allow the station manager to come up with any weird and wacky combination that they manage to dream up (that would normally haunt programmers in their worst nightmares) and leave me to my peace and quiet...
if this works for you, would love to know about it...
cheers and good luck
nik
Nik Vogiatzis
PhD Candidate: University of South Australia
|
|
|
|
|
NikV wrote:
the main problem you face is that station managers/advertising managers want to have very specific rules governing the way ads are played, and telling them that your mathematical algorithm won't let them schedule an ad 2 times a day, except on a full moon which happens to be a sunday they want it played 6 times, is just not going to cut it
LOL, I hear that, I've done this for several broadcasts now and they do want different rules every time.
Thanks for your suggestions , there's alot of food for thought for me there. I may not build the most perfect solution but I hope I can incorporate some of your ideas. A combination of flexible code and stern client management is in order I think
Thanks very much for your help.
|
|
|
|
|
Hi,
Lemme explain wat i need to do, wat i have done and wat i need help with.
I am creating a windows application which would align controls in a grid format. each control should be resizeable and its size should be a multiple of predefined width and height.
this is what i have done so far. I have created a generic container(panel inherited) which would hold any control. I have implemented mousedown, mouseup, mousemove eventhandlers for the container. this container after adding the required control to it, is added to the main form window.
there are a couple of things i am having problems with.
1. there is a lot of flickering on the screen when i resize control (or infact the container of the control). I was wondering if anyone could provide me with a sample code.
2. I am also not sure if i need to convert the x-y coordinates of the mouse event handlers to some how relate x-y coordinates on the container so that i can have resize cursors when mouse moves over the edges of the container.
there may be a lot more coming up as i develop the application.
Thanks a bunch for your time.
Any help is appreciated.
Rekha
|
|
|
|
|
Hi all,
I am trying to create a custom control that would be resizeable. Instead of having handles like the usual control resize technique, I want to be able to resize with all the edges. I have implemented mousedown, mousemove, mouseup events on the controls. when i am testing it on the runtime window there is a lot of flickering.
and also the resized control is not of desireable size.
can someone help me out with a sample mouse move event to do this.
any help is greatly appreciated
|
|
|
|
|
Hi I am building a chat application and it is hard to differentiate between the user's names so I want the user's names to be different colors (Kinda like AOL IM).
Please tell me how to accomplish this.
Thank You
|
|
|
|
|
This can be done thru RTF (Rich Text Format) codes via the richTextBox.rtf variable. You will need to be careful when you do this because if you break the format rules it can break the display up. If you search on MSDN you should find a list of all the codes.
|
|
|
|