|
Thanks! That indead was a smart idea! Never thought of that...
Although I could get to the Excel.Shape but I have no clue on how to transform it to a Image. A can't simply typecast it.
In case you can help: thanks again.
|
|
|
|
|
mvmeijer wrote:
Although I could get to the Excel.Shape but I have no clue on how to transform it to a Image. A can't simply typecast it.
What you want to do is unclear.
Phase one was to get the right method call keywords. With that in hands, now you can fire Google and get your code snippet.
[edit]You've got stuff like this[^] for instance.[/edit]
Good luck!
|
|
|
|
|
The solution is (took me a lot of time to find out myself):
(ws = an Excel.Worksheet, index = Worksheet number)
Excel.Shape shape = ws.Shapes.Item(index);
Excel.Picture p = (Excel.Picture) shape.DrawingObject;
p.CopyPicture(Excel.XlPictureAppearance.xlScreen, Excel.XlCopyPictureFormat.xlBitmap);
if (shape.Type == Microsoft.Office.Core.MsoShapeType.msoPicture) {
IDataObject data = Clipboard.GetDataObject();
if (data.GetDataPresent(DataFormats.Bitmap)) {
Bitmap b = (Bitmap) data.GetData(DataFormats.Bitmap);
// Do something with the Bitmap
}
}
|
|
|
|
|
Hey this is neat! Congrats. I hope people answering on Cp will refer to this code anytime someone asks this question over and over again.
|
|
|
|
|
|
|
|
|
|
|
Hi All
I have a prototype developed colleagues in UK. When i run the exe, it is showing System.TypeInitializationException error.
Has it got something to do with regional settings or what is the cause of the app breakdown !??!!?
Any ideas ?
Thanks,
$iva
|
|
|
|
|
Hi everyone,
Would someone explain this to me, please? As fas as I know, there is no need to explicitly dispose the class instances (objects) created during program execution (using the new operator) after they are no longer needed. (In fact I didn't find a way to dispose them, no substitute for the C++ delete operator, is it possible at all?). So, all objects are disposed from the managed heap when they are not referenced anymore (is this correct?). How about threads? If I create a new instance of Class Dummy:
<br />
public class DummyClass <br />
{<br />
public DummyClass() {}<br />
public void DummyStart()<br />
{<br />
Thread.Sleep(2000);<br />
}<br />
}<br />
and start a new thread using the following code:
<br />
DummyClass SomeDummy=new DummyClass()<br />
thrSomeThread=new Thread(new ThreadStart(SomeDummy.DummyStart));<br />
thrSomeThread.Start();<br />
Let's suppose, that after the thread is started, the SomeDummy variable is no longer stored, and therefore this instance of the DummyClass class is no longer referenced. What will happend? Will the CLR keep track of this instance, and will the garbage collection find out that it is no longer needed when the thread has finished, or will it exist along with the thread, until the instance of the Thread class (which is thrSomeThread in this case) will be referenced? Any ideas, explanations are highly appreciated!
Best regards,
Rado
|
|
|
|
|
With regards to deleting objects, I don't think you can, at least not from the managed heap. With MC++ you can declare a class to be allocated outside of the managed heap using __nogc where you are then responsible for calling delete afterwards.
As for how it actually works, there's a PDF for debugging on .NET (a link was posted in the lounge not long ago -- I'll try and dig it out) it details how the GC works, I'd recommend it!
--
Paul
"If you can keep your head when all around you have lost theirs, then you probably haven't understood the seriousness of the situation."
- David Brent, from "The Office"
MS Messenger: paul@oobaloo.co.uk
Sonork: 100.22446
|
|
|
|
|
There is no delete operator, although if the class implements a Dispose() method, you can call that instead (some classes, such as streams, call Dispose() when their Close() method is called). Generally you do not have to bother, since it will get called eventually anyway. Even so, it would likely be quite some time before the GC sees any need to actually deallocate your object, unless a serious amount of memory has been used up, and space is tight. You are correct that objects are not disposed of until all references are gone, yet the GC is normally in no hurry.
Since the GC heap is fairly large to begin with, there is little gained by it hurrying to deallocate objects, since the heap itself will not normally shrink anyway. Small and moderate sized apps may never use all of that heap, so actually nothing is gained by quick destruction. Only when there is high heap-memory demand is there a need to destroy unused stuff, to make room for yet more objects.
rado wrote:
Let's suppose, that after the thread is started, the SomeDummy variable is no longer stored, and therefore this instance of the DummyClass class is no longer referenced. What will happend?
I hope I'm interpreting correctly here. SomeDummy has to be stored in order to create the ThreadStart object (otherwise an exception is thrown), and since DummyStart() is referenced in that constructor, the reference will remain, even if SomeDummy had a Dispose() method that was called, and it was set to null after calling thrSomeThread.Start().
rado wrote:
Will the CLR keep track of this instance, and will the garbage collection find out that it is no longer needed when the thread has finished, or will it exist along with the thread, until the instance of the Thread class (which is thrSomeThread in this case) will be referenced?
Yes to both cases. The GC will eventually find out if the object instance is no longer needed after the thread is done. Also, the object will exist along with the thread, because the thread itself references the SomeDummy object it was started with. In fact, the lifetime of the thread is determined by how long the DummyStart() call lasts. When DummyStart() ends, so does thrSomeThread. SomeDummy will stay around for at least that long (and possibly longer). I hope my explanation made some sense...
Cheers
|
|
|
|
|
Since this is a very common construct in Java and other GC environments, if I were MS implementing .NET, in the Thread contructor, I would keep and ArrayList of running threads and Add(this) , so it would keep them from being GC. The thread would be removed from this Array after running the delegate.
But I'm not MS, and I don't know how they've implemented it.
You could look at Rotor sources.
I see dumb people
|
|
|
|
|
Hello,
I'd like to thank everyone for their help, explanations and ideas!
Rado
|
|
|
|
|
I've been trying to develop an Explorer bar (band object) using C#. The BandObjectLib article has been very helpful. However, I've been having a few stumbling blocks and annoyances.
First, the annoyance. I've been testing the Explorer bar with Internet Explorer, and it seems to make sense to me to develop this project as an Explorer bar from the get-go, testing as I go,
instead of developing as an application and then later converting it to an Explorer bar. However, due to Windows' file locking habits and other such things, I have to mess around with moving around .PDB files before I can rebuild and register my Explorer bar solution. Is there a handy to debug Explorer bars that might make my life easier?
As for the stumbling blocks, I've been using Pavel Zolnikov's BandObjectLib code (http://codeproject.com/csharp/dotnetbandobjects.asp) which works fine, but when I try to try to register an event handler for a WebBrowser event, the Explorer bar stops working. In fact, the Explorer bar appears as a grey (unpainted) Explorer bar, instead of having the components and title that it should have.
This is the line that causes me trouble:
this.Explorer.NavigateComplete2 += new SHDocVw.DWebBrowserEvents2_NavigateComplete2EventHandler(this.OnNavigateComplete2 );
It seems like Pavel Zolnikov uses the event (the same line of code) in his Command Prompt Explorer Bar project, so I'm wondering if there's some magic that I'm missing in order for me to handle this event.
As another stumbling block, I've been trying to access the Internet Explorer user's history. I'm not sure if I should use the Travel Log interface or IUrlHistoryStg, and it's not really clear to me what the difference is, and that hasn't seemed to be documented in MSDN very well. Nevertheless, I decided to implement IUrlHistoryStg2 in C#, but I think I ran into a problem with converting the types properly for IEnumSTATURL and the STATURL struct. I'm having particular problems (I think) with choosing the correct types in C# for the parameters for IEnumSTATURL.Next(). Is there a translator from MIDL to C#? Has someone written a C# library to access Internet Explorer metadata like this? Are there any great resources to help me with this sort of thing?
Many thanks,
Arun
|
|
|
|
|
I am writing an application that supports a function to search through different types of documents, doc, txt, rtf, pdf, etc looking for a text string. It is to work very similar to the Windows “Find in files” function. I have not been able to find the Win32 API to access this function. I was hoping I could just use the Windows search function. Does anyone know if this is possible? Thanks.
david23g
|
|
|
|
|
I've done the sort of thing you're looking to do. In the Win32 API, you start with FindFirstFileEx(), FindNextFile(), and finally FindClose(), while walking the desired directory tree. That is exactly how the find/search applet in Windows does it, and it's very fast.
Once you have the desired file [by extension], just open it and search it. If the file is not too large, I recommend loading an entire buffer with the contents, then searching the whole thing. If the file is big, it's a little more complicated, because the beginning of the string to be found might lie at the end of one buffer full, and the end of it at the start of the next buffer full. Thus, you need to "overlap" the buffers, if you will, for at least the length of the string to search for. I did this with cyclic buffers, but there's no need to get fancy.
The CLR already wraps those Find* functions in the Directory class, with methods like GetFileSystemEntries() - the closest equivalent - and GetFiles(). Opening and searching the files is pretty much the same in .Net as in the Win32 API.
Cheers
|
|
|
|
|
Hello,
I have a ListView that is set in Details mode for the view. It has no headers though that's likely irrevalent. I have a SmallImageList set and I set an icon for a ListViewItem. When an Item is selected, it also highlights the icon on the left. How would I stop it from highlighting it? I know that I could catch the WM_PAINT but then would I have to repaint the whole control? Is there something that I'm missing?
Thanks,
Jonathan
|
|
|
|
|
Ok. This was a bad question. The standard ListView does not highlight the icon. I am trying to modify the TreeListView that was posted on CodeProject and it does highlight the icon using a ListView. I will have to investigate more.
|
|
|
|
|
It appears that I butchered my question. I still have the original question. When I went back and look at my other example, the icon I was looking at just didn't show the highlight as bad. Therefore, does anyone know the answer to my question?
Thanks,
Jonathan
|
|
|
|
|
Highliting the icon is handled automatically by listviews, and there is no style bit or anything to override that behaviour. I also wish only the text were highlited, but to do so would mean custom drawing, as you mentioned. I have done it, but that code is somewhere in the archives of a company I once worked for.
If you still desire to do so, the drawing of the foreground and background colors is fairly easy, but handling the drawing of the focus rectangle is a bit of a pain (at least when multi-select is enabled). Be careful when drawing selection ranges, as you need to remember which item is the "pivotal" selection (I forget the official term, it's been a while). Othewise, you won't be able to extend or reverse selection changes properly, when the user keeps CTRL or SHIFT down.
|
|
|
|
|
Thank you for your response.
I have been looking at some of Carols Perez's great work here on CodeProject where he does a lot of customdraw listviews and treeviews. It gets pretty complicated as you have to receive all of the correct messages and such. It looks like I'm going to just let it go for now and I may change it a little later. Custom control Drawing does not appear to be one of my strong points.
Jonathan
|
|
|
|
|
can any help me with a problem ! ... i have a encryption program that encrypts (anything) in RC2 or DES. the encryption method is in a static void and gets the (readfile) (writefile) (password)
the read file comes in the form of a full path name ie(c:\something\test.exe) then it is sent to the (readfile) part of encryption as a string. my question is how can i try this directory name and just show the file name(test.exe) and send that too (writefile) with a *.enc extention on it but still preserving the original write name. !! i have not clue how to do this. all i really need to do is trim the string but how because what if the directory isnt the exsact same size as (c:\something\test.exe) anyways all help with this question would be much appreciated.
Jesse M.
|
|
|
|
|