|
I'm not sure about COM interop stuff as I've never needed it - but events are quite straight forward to add:
public interface ICalculator
{
event EventHandler CalculationPerformed;
event EventHandler<int> CalculatedResult;
int Add(int Number1, int Number2);
}
public class ManagedClass : ICalculator
{
public event EventHandler CalculationPerformed;
public event EventHandler<int> CalculatedResult;
public int Add(int number1, int number2)
{
int result = number1 + number2;
OnCalculationPerformed(EventArgs.Empty);
OnCalculatedResult(new EventArgs<int>(result));
return result;
}
protected virtual void OnCalculationPerformed(EventArgs e)
{
EventHandler eh = CalculationPerformed;
if (eh != null)
eh(this, e);
}
protected virtual void OnCalculatedResult(EventArgs<int> e)
{
EventHandler<int> eh = CalculatedResult;
if (eh != null)
eh(this, e);
}
}
public delegate void EventHandler<T>(object sender, EventArgs<T> e);
public class EventArgs<T> : EventArgs
{
private T value;
public EventArgs(T value)
{
this.value = value;
}
public T Value
{
get { return value; }
}
}
|
|
|
|
|
Hi everyone,
I would like to know if someone have experienced slow issues with Bitmap.SelectActiveFrame in a 64 bit system,
or why is the method so much slower in a 64 bit system than in a 32 bit?
Here is a sample code that I have used to test:
Bitmap m_bmp = new Bitmap("C:\\01.tif");
String m_Start = DateTime.Now.ToString("hh:mm:ss");
System.Diagnostics.Debug.WriteLine("Started at: " + m_Start);
for (Int32 a = 0; a < 22; a++)
{ m_bmp.SelectActiveFrame(FrameDimension.Page, a); }
String m_Finish = DateTime.Now.ToString("hh:mm:ss");
System.Diagnostics.Debug.WriteLine("Finished at: " + m_Finish.ToString());
The 01.tif file is a black & white image with 1bpp and 23 pages with 300dpi.
Test made with Windows7 VS2010 .NetFramework 4.0 32 bit: Less than 1 second.
Test made with Windows7 VS2010 .NetFramework 4.0 64 bit: 6 seconds.
This is really a lot.
Can someone be kind to help me ?
Thank you. Best regards.
|
|
|
|
|
Hello
i want to load an image that is 50x25, which are really 2 images of 25x25 into imagelist an use the index to refer them, i can't make it work
Thanks
|
|
|
|
|
ImageList has an Images property which has an AddStrip() method[^]
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
Thank you that was the one
|
|
|
|
|
Hello!
How do I post images randomly x, so that we can pick and put in a certain order.
Can help me!
Ps.: Sorry my english
|
|
|
|
|
More detailed required. What do you mean by "post". What do you mean by "pick".
You could put all images or uri strings into a collection, a List, and then use the System.Random class to randomly select the images from the list
"You get that on the big jobs."
|
|
|
|
|
How to extend RectangleF class to have public static function RectangleF Parse(string s); in the similar way as with extension methods when there is no instance variable yet available?
class RectangleF
{
public static RectangleF Parse(string s)
{
...
}
}
Чесноков
|
|
|
|
|
This question is directly related to the one you have asked previously. Please don't repeat and use the current thread so everyone has the details to more accurately answer your questions
I know the language. I've read a book. - _Madmatt
|
|
|
|
|
In which way? I'm not asking about parsing string to rectangle logic here.
I need to add new public static method to RectangleF class without modifying it.
Instead of RectangleF there might be any class.
Чесноков
|
|
|
|
|
maybe...
public static RectangleF Parse(this RectangleF rect, string s)
{
}
very easy to Google this one[^]
EDIT: I got this one a bit wrong. I think thou you just need to return a new instance that is parsed
public static RectangleF Parse(string s)
{
RectangleF result = new RectangleF();
return result;
}
In use...
RectangleF rect = RectangleF.Parse("0,0,100,50");
...but as no one else has posted, maybe I have missed the point again
I may or may not be responsible for my own actions
modified on Tuesday, May 31, 2011 11:40 AM
|
|
|
|
|
This won't work because he's looking to extend the RectangleF class with an instantiation method. Your code requires an instance already (that's kind of what the this in the extension indicates), so perhaps not quite so easy to Google.
|
|
|
|
|
oh yes, my bad completely
I may or may not be responsible for my own actions
|
|
|
|
|
yes and no.
Extension methods, while requiring a static keyword, are really instance methods; now Parse and TryParse are basically static methods, they operate on a string and return a specific type, they don't operate on that type (the MSDN example is string.WordCount which operates on an existing string and returns an int).
So you could have this definition (note the first argument isn't used at all):
public static class MoreTryParse {
public static bool TryParse(this RectangleF dummy, string s, out RectangleF rect) {
float x=0;
float y=0;
float w=0;
float h=0;
if (s.StartsWith("(") && s.EndsWith(")")) s=s.Substring(1, s.Length-2);
string[] sa=s.Split(',');
if (sa.Length==4 && float.TryParse(sa[0], out x) && float.TryParse(sa[1], out y) &&
float.TryParse(sa[2], out w)&& float.TryParse(sa[3], out h)) {
rect=new RectangleF(x, y, w, h);
return true;
} else {
rect=new RectangleF(0, 0, 0, 0);
return false;
}
}
}
but then you would have to call it like this:
public void test(string s) {
RectangleF rect=new RectangleF();
bool result=rect.TryParse(s, out r1);
log(s+" result="+result+" rect="+rect.ToString());
}
which is a bit silly, as you have to create a dummy RectangleF in order to get the actual one.
Luc Pattyn [My Articles] Nil Volentibus Arduum
The quality and detail of your question reflects on the effectiveness of the help you are likely to get. Please use <PRE> tags for code snippets, they improve readability. CP Vanity has been updated to V2.3
|
|
|
|
|
But I'm intrested in that calling convention
string s = "0.0,0.0,1.0,1.0";
RectangleF rect = RectangleF.Parse(s);
I wonder if there is any mechanism available to add public static methods to the class?
If not it'd be of value to add it to future revisions of C#
Чесноков
|
|
|
|
|
Chesnokov Yuriy wrote: add public static methods
No, that is not supported in C#.
Luc Pattyn [My Articles] Nil Volentibus Arduum
The quality and detail of your question reflects on the effectiveness of the help you are likely to get. Please use <PRE> tags for code snippets, they improve readability. CP Vanity has been updated to V2.3
|
|
|
|
|
I don't think this is possible. I don't see what is wrong with
RectangleF rect = MyParserClass.ParseRectangleF(s);
... though.
|
|
|
|
|
That is fine of course, however it would be even nicer if one could add static extension classes, so one can hide the fact that RectangleF is lacking the static Parse() and TryParse() methods other types are offering (int, float, DateTime, etc).
It could e.g. look like:
public static class MoreTryParse {
public static bool TryParse(static, string s, out RectangleF rect) {
...
}
}
and be called like so:
public void test(string s) {
RectangleF rect;
bool result=RectangleF.TryParse(s, out r1);
log(s+" result="+result+" rect="+rect.ToString());
}
Luc Pattyn [My Articles] Nil Volentibus Arduum
The quality and detail of your question reflects on the effectiveness of the help you are likely to get. Please use <PRE> tags for code snippets, they improve readability. CP Vanity has been updated to V2.3
|
|
|
|
|
That's a matter of taste, I think. I don't like extension methods much as it stands because you never know where they are actually defined.
Your declaration wouldn't do the job, it doesn't declare anywhere that it's a static extension on RectangleF. It would have to be
public static bool TryParse(static RectangleF, string s, out RectangleF rect) { ... }
or perhaps
public static bool TryParse(static<T>, string s, out RectangleF rect) where T:RectangleF { ... }
... allowing you to extend entire generic hierarchy subtrees where it was convenient to do so.
|
|
|
|
|
yes, public static bool TryParse(static RectangleF, string s, out RectangleF rect) { ... } is what I meant.
BobJanova wrote: you never know where they are actually defined.
the IDE can worry about that, you don't have to.
Luc Pattyn [My Articles] Nil Volentibus Arduum
The quality and detail of your question reflects on the effectiveness of the help you are likely to get. Please use <PRE> tags for code snippets, they improve readability. CP Vanity has been updated to V2.3
|
|
|
|
|
Although we declare extension methods to be static, they actually work on instances (note that we specify the 'this' keyword in the first parameter). I would love to have the feature you're asking for, so we can use Rectangle.Parse(str) . In your case, the neater alternative is to create a static Parser class and have a ToRectangeF method like this:
static class Parser {
static RectangeF ToRectangeF(string s) {
....
}
}
|
|
|
|
|
Perhaps an implementation like this[^], which I discussed with him when he originally raised this question this morning.
|
|
|
|
|
Hi All,
I am trying to simulate a button click using the SendMessage function of the Win32API. My application is C# WinForms .net 4.0 (the application performing the automation)
EDIT: The application I am trying to automate is not of my own work and I have no control over source code in any way.
First of all I am using FindWindow to get the handle to the window I want, I know this is working as the value of the handle is correct (as found using Spy++)
Next I am getting the handle of the child control (the button I want to click), again I know I am getting the correct value here.
Then I use SetActiveWindow() and pass in the window handle (which appears to work fine)
Then I use SendMessage() to simulate a mouse left button down and a mouse left button up. For now I just want to simulate the "Cancel" button for testing, which when clicked manually will simply close the form. My code however does nothing, the thing that is annoying me thou is that the "Cancel" button actually gets focus (just like it would if it had been clicked manually) but no action is taken.
Does anybody know why this could be happening? Is it possible that the application is question could be detecting I am using the SendMessage function and deciding not to process the relevant code? sort of like a "prevent automation" feature.
Thanks for any help, and the relevant code for SendMessage is as follows (also note, I have tried PostMessage too)
[DllImport("user32.dll")]
public static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam);
uint WM_LBUTTONDOWN = 0x0201;
uint WM_LBUTTONUP = 0x0202;
uint BM_SETSTATE = 0x00F3;
uint BN_CLICKED = 245;
void Function()
{
SendMessage(hwndButton, WM_LBUTTONDOWN, IntPtr.Zero, IntPtr.Zero);
SendMessage(hwndButton, WM_LBUTTONUP, IntPtr.Zero, IntPtr.Zero);
SendMessage(hwndButton, BM_SETSTATE, IntPtr.Zero, IntPtr.Zero);
SendMessage(hwndButton, BN_CLICKED, IntPtr.Zero, IntPtr.Zero);
}
I may or may not be responsible for my own actions
modified on Tuesday, May 31, 2011 11:59 AM
|
|
|
|
|
Did you try BM_CLICK instead?
|
|
|
|
|
I think BM_CLICK is the same as I have BN_CLICKED (seen different name in different places). I have used a value of 245, if you know a different value for BM_CLICK then please let me know and I will give that a try
I may or may not be responsible for my own actions
|
|
|
|
|