|
Hi,
Your article is interesting but I want to understand some details that you don't explain here.
I want to add to resources some custom cursors(.cur). Then how to embed a cursor as a resource within your application?
I was reading an article in msdn:
--- To make the custom cursor an embedded resource ---
' In Visual Studio:
' 1. Select the cursor file in the Solution Explorer
' 2. Choose View->Properties.
' 3. In the properties window switch "Build Action" to "Embedded"
' On the command line:
' Add the following flag:
' /res:CursorFileName.Cur,Namespace.CursorFileName.Cur
'
' The following line uses the namespace from the passed-in type
' and looks for CustomCursor.MyCursor.Cur in the assemblies manifest.
// NOTE: The cursor name is acase sensitive.
this.Cursor = new Cursor(GetType(), "MyCursor.Cur");
but i really don't understand these lines:
On the command line:
' Add the following flag:
' /res:CursorFileName.Cur,Namespace.CursorFileName.Cur
Do exist some way to do that by code?
Thanks you very much in advance,
Marcel
|
|
|
|
|
Could you supply a link to the MSND article you're reading? Also, what version of VS are you using?
mosquets wrote: but i really don't understand these lines:
On the command line:
' Add the following flag:
' /res:CursorFileName.Cur,Namespace.CursorFileName.Cur
Do exist some way to do that by code?
I don't think you need to worry about that (I know that I don't concern myself with it). I think this is how one would embed a resource if one were compiling one's project outside VS; that is, from the command line.
Anyway, here is how I make a cursor (any file, actually) an embedded resource of my application (.EXE) and/or library (.DLL).
1) If I haven't yet done so, I create an appropriately named file-system directory under the project:
1a) In the "Solution Explorer," right-click on the project
1b) Choose "Add"
1c) Choose "New Folder"
1d) Give the new folder a name to indicate the use planed for it. (For instance, "Cursors" or "Images" or "Icons" or "DataBases," etc)
2) Using Windows Explorer, I copy the files I want to use as embedded resources into this folder.
*) NOTE: These first two steps aren't required, but they make it much easier to organize the projects and to keep everything belonging to each project together.
Now, to actually embed a file or files (whether they be cursors, icons, sound-clips or whatever) into one's project:
3a) In the "Solution Explorer," right-click on the project
3b) Choose "Add"
3c) Choose "Add Existing Item ..."
3d) In the "Add Existing Item" browser window, navigate to the location of the file(s) you want to add to the project (ensure that the "Files of type" filter is set to show the file(s) you want)
3e) Select the file or files you want to add; then click the "Open" button.
The file or files are now added to the project, but they're not yet embedded resources. So, for each of the files just added to the project:
4a) Click on a file in the "Solution Explorer"
4b) In the "Properties" panel, change its "Build Action" to "Embedded Resource"
Done. When the project is recompiled, these file will be embedded resources in the assembly.
mosquets wrote: ' The following line uses the namespace from the passed-in type
' and looks for CustomCursor.MyCursor.Cur in the assemblies manifest.
// NOTE: The cursor name is acase sensitive.
this.Cursor = new Cursor(GetType(), "MyCursor.Cur");
If you do not use my steps 1&2, you could access the embedded resource as the MSDN article mentions:
this.Cursor = new Cursor(GetType(), "MyCursor.Cur");
If you use my steps 1&2, you'll need to modify that to reflect the sub-folder under which you've organized your embedded cursors. For instance:
this.Cursor = new Cursor(GetType(), "Cursors.MyCursor.Cur");
|
|
|
|
|
Thanks you very much for to spend so time in that great explanation.
I review step by step all the process and you know what was my mistake?
I was writing .Cur instead of .cur. I was assuming it is not key sensitive.
Just now your article is completed ha ha ha...
Thanks again for pay attention to me.
Regards,
Marcel
|
|
|
|
|
|
Although *AFAIK* it's not possible to load a colored or animated cursor directly from .NET embedded resource,
it's however possible to load it directly from a .CUR or .ANI file embedded in .NET assembly as native resource.
I've done this for my project back in 2006.
I make the same functional library like yours in only 15 line of code *25 line, if class and namespace declaration, along with some "using" keywords are included*, the rest is just a matter of embedding the required cursor file(s) as native resource. But don't take my words for it, seeing is believing.
Here's the code snippet:
[System.Runtime.InteropServices.DllImport("user32.dll", CharSet = System.Runtime.InteropServices.CharSet.Auto)]
public static extern System.IntPtr LoadCursor(System.IntPtr appHwnd, string lpCursorName);
public static System.Windows.Forms.Cursor LoadCursor(System.Reflection.Assembly assembly, string cursorID) {
if(assembly != null) {
System.IntPtr hInstance = System.Runtime.InteropServices.Marshal.GetHINSTANCE(assembly.GetModules()[0]);
System.IntPtr hCursor = LoadCursor(hInstance, cursorID);
if(hCursor != System.IntPtr.Zero) {
return new System.Windows.Forms.Cursor(hCursor);
}
}
return System.Windows.Forms.Cursors.Default;
}
Just put that inside a class, and reference the required assembly (System.dll, and System.Windows.Forms.dll) and compile.
Regards,
Jakka ![Rose | [Rose]](https://www.codeproject.com/script/Forums/Images/rose.gif)
|
|
|
|
|
Now *that* is a helpful criticism.
And, once I learn what a native resource is and how to put a cursor file into it, I will certainly run this test. And if making cursor files a native resource doesn't involve standing on your head while rubbing your tummy, I don't doubt I'll incorporate your code into my class.
I see that this is the first message you've posted in your three years of membership (which I take to mean you *do* rather than yammer), nor have you submitted any articles.
Might I suggest that you have here the basis of your first article?
|
|
|
|
|
Ilíon wrote: Now *that* is a helpful criticism.
I take that as a compliment so, Thanks...
Ilíon wrote: And, once I learn what a native resource is and how to put a cursor file into it, I will certainly run this test. And if making cursor files a native resource doesn't involve standing on your head while rubbing your tummy, I don't doubt I'll incorporate your code into my class.
Simply said, a native (embedded) resource is how they (windows application) used to embed a resource (prior to .NET). Actually .NET still embed some resources this way, like app.ico (or other icon file you used as an application icon).
Although you can if you wanted to, but no, you don't have to stand on your head while rubbing your tummy to add a native resource to your assembly.
It's quite easy actually, but unfortunately for us, VS doesn't provide any GUI feature to embed a file as native resource upon compilation.
So we have to either add the resource after compilation or create .res file and compile our source with /win32res options from the command prompt.
Try opening .dll/ .exe file with Visual Studio, and you'll see the list of all native resources contained by that .dll/ .exe. You could even delete or add new resources from VS this way. Or Try googling for "resourcehacker" it's (as the author said) a freeware utility to view, modify, rename, add, delete and extract resources in 32bit Windows executables and resource files. Hope this helps.
Ilíon wrote: I see that this is the first message you've posted in your three years of membership (which I take to mean you *do* rather than yammer), nor have you submitted any articles.
Might I suggest that you have here the basis of your first article?
True, this is my first comment. And, I see what I can do about that first article.
Regards,
Jakka
|
|
|
|
|
Jakka Prihatna wrote: Simply said, a native (embedded) resource is how they (windows application) used to embed a resource (prior to .NET). Actually .NET still embed some resources this way, like app.ico (or other icon file you used as an application icon).
Thanks. I had figured it must be something like that (For example, I'd long ago noticed that no matter how many icons might be embedded resources of a typical project, when setting a shortcut's icon, only the "application icon" can be "browsed" in the assembly).
Jakka Prihatna wrote: Although you can if you wanted to, but no, you don't have to stand on your head while rubbing your tummy to add a native resource to your assembly.
Whew!
Jakka Prihatna wrote: So we have to either add the resource after compilation or create .res file
That's about all I'd yet figured out Googling this the other day (the boss keeps wanting me to do work, if you can imagine that!).
Jakka Prihatna wrote: Try opening .dll/ .exe file with Visual Studio, and you'll see the list of all native resources contained by that .dll/ .exe. You could even delete or add new resources from VS this way.
Yes, I see; that worked as a manual step. It's farther than I'd got yet.
Thanks.
Again, I urge you to submit an article (and try to explain, and even illustrate if possible, the steps involved in getting the resources into the assembly).
|
|
|
|
|
I do like the simplicity (and do doubt the small size of compiled code) of your code. But, I have to tell you that at this time it looks even worse than standing on your head and patting your tummy at the same time.
Perhaps the difficulty is that I don't have VS2005? I have VS2002 and VS2003.
I did figure out how to create a .RES file, but not how to compile it into the project -- I could add non-color ".CUR" files easily. To add ".ANI" files into it, I had to create a custom resource type, which is OK. To add color ".CUR" files into it, I had to both change the extension from ".CUR" to something else and then add them as a custom resource type.
I found this article[^] on Code Project ... but the critical step, compiling the resource file into the project, doesn't seem (at least at this point) available to me.
And, so, of course, I never did manage to actually use/test the code you'd posted. Ah, well.
|
|
|
|
|
Ilíon wrote: To add ".ANI" files into it, I had to create a custom resource type, which is OK. To add color ".CUR" files into it, I had to both change the extension from ".CUR" to something else and then add them as a custom resource type.
.CUR and .ANI *though both are cursor files* does not fall under the same resource type. .CUR has resource type ID of 1 (CURSOR) while .ANI is has resource type ID of 21.
There shouldn't be any need to create a custom resource type if you're just going to add a .CUR to a native resource template, VS already support this. But to add an animated cursor is a whole different matter. To add .ANI files you need to create a custom resource type and set its ID/ Name to 21. And since VS doen't permit us to name a custom resource type with numbers (VS will automatically enclosed our number-name with quote, and treats it as a string), you might need to edit/ create a resource script (.rc) file manually and then compile it to .res using resource compiler (rc.exe) .
Ilíon wrote: but the critical step, compiling the resource file into the project, doesn't seem (at least at this point) available to me.
Under VS2003, you can use the command-line to compile the resource (.RES) into the project. Something like:
csc /t:winexe [your source files] /win32res:[your .RES]
Regards
Jakka
|
|
|
|
|
By way of feedback, the code still needs lots of work to be considered as a general-purpose library. Currently, it is way too special case. It contains workarounds ("special processing" in the author's words) to handle specific sample cursor files, "Easter Eggs" with different behavior depending on who is logged on, poor exception handling, lots of commented out code that makes it look like work is still in progress, and a potentionally questionable use of mutexes.
There is some good stuff there, but it is only halfway there in my opinion. YMMV.
Mark Treadwell
Special Enhancements
|
|
|
|
|
Mark Treadwell wrote: By way of feedback, ...
Thank you for this eminently helpful and useful feedback. The wise man welcomes helpful and useful criticism. I, myself, have some feedback for you. It is my hope and desire that you will take it in the same spirit in which yours was offered.
1) “Good But Not Stellar”
I suppose there is no accounting for taste. For instance, when *I* say that something is “good,” I generally mean that it is on the high side of “average” (though, I must admit to some degree of imprecision, as in some contexts I mean more than that). Apparently, when *you* say that something is “good,” you mean that it is on the low side of “mediocre.”
Also, while *I* never claimed that this class is “stellar,” I will admit to being at least slightly gratified that the first six persons who took a moment out of their busy lives to vote on the article apparently thought that something about it rated a “stellar.” I don’t know; perhaps those six are right and the seventh is just an ass jealous that he didn’t think of writing such a potentially useful class. Then again, perhaps there is no accounting for taste. What do I know, anyway?
2) “… the code still needs lots of work to be considered as a general-purpose library.”
Does it now? Could you be prevailed upon to supply me some useful examples of this weakness on my code? Considering that “the code still needs lots of work,” I must suppose that the only limit on your ability to fulfill this request will be the amount of free time you are willing to expend for my benefit.
3) “Currently, it is way too special case.”
That may be true … though, I, myself, would quibble over that “way too” business. The fact is that I threw the class together in a few hours over two evenings after work with the primary purpose of serving my own specific needs, and secondarily with an eye towards submitting an article to The Code Project.
So yes, the class does indeed contain special case objects and code. For instance, had it been my goal to write The Perfect General Class, I’d have included no embedded resources in the class itself. Nor do the class’ special-definition cursor names seem to me to be compatible with a goal of The Perfect General Class.
But, it was not my goal to write The Perfect General Class; rather, my primary goal was A Good General Class That Meets My General Needs; my secondary goal was A Good General Class That Other Developers May Adapt To Their Own Needs.
In my (not at all humble) opinion, I achieved my goals. Nearly perfectly. One might almost be tempted to say in a near-stellar manner.
4) “It contains workarounds ("special processing" in the author's words) to handle specific sample cursor files.”
It does, indeed. And the in-line comments explain the *why* of it.
In the update I submitted the other evening, even before your so-helpful comments were made (and which I now see has been applied), I have much simplified that special processing. Though, I have not entirely eliminated it. That is, since I know that those two specific cursors *require* that special processing when they are embedded resources (as opposed to files read from disk), and since I (currently) *want* those two specific cursors to be embedded resources of the class as I intend to use it, I still have code to ensure that they are treated properly.
5) “… "Easter Eggs" with different behavior depending on who is logged on …”
It does, indeed. As I’ve said, the class is written primarily for *my* purposes.
Now, I *did* intend to explicitly mention those “Easter Eggs” in the article, but I forgot. I also forgot to explicitly mention then in the update I submitted, despite that it was on my mental to-do list. And, considering what a hassle it is to update an article after it has been moved out of “Unedited Reader Contributions,” I much doubt I’ll be updating the article or class again.
So, I suppose that this is the only warning the poor schmucks who *might* have been interested in downloading this class, were it not so mediocre, will possibly ever have. I know that I *always* use free executables, never looking at the source code.
6) “… poor exception handling …”
I really *must* beg for specific examples of what I am doing wrong and a demonstration of the right way to do it; I simply know no better.
There is no reason you would know this (or care), but I am entirely self-taught in respect to object-oriented programming in general, and .NET programming in particular. I worked through a couple of those “Teach Your C# in 24 Hours” type books; I read Herbert Schildt’s ‘C#: The Complete Reference’ and now I learn by reading others’ code in interesting-looking projects on The Code Project. I don’t know: perhaps the people in charge of “Special Enhancements” ought to be doing a better job of screening out all the shoddy code. Then, at least, I’d have good … oops, I mean, stellar … code to learn from.
Back when I was being taught how to program, we students had to code via punched cards, and we had to punch the holes ourselves. With sticks (and only the rich kids could afford the sticks that didn’t wear out after half a dozen cards). You kids these days don’t know how easy you have it! Later, I taught myself how to program on-the-fly by toggling switches. May you never have to try to read a (spontaneous, on-the-fly) core-dump when one of the light-bulbs is burned out.
Anyway, and as a matter of fact, there is very little exception handling in the class -- I like to imagine that the code I write is, generally speaking, well enough written that exceptions are, well, exceptional. I understand that some programmers wrap nearly every statement they write in exception handling; the over-head, and the hassle, has never seemed worth it to me.
But, regardless of other programmers’ style, I am more than willing to learn a better style, if you will teach me. Heavens! I do hope it isn’t the code that comes almost directly from the MSDN article that is incorrect.
7) “… lots of commented out code that makes it look like work is still in progress …”
Now I know that you’re pulling our collective legs with your idiosyncratic usage of the word “lots:” there are very few statements in the class which are commented out. I will admit that I probably have no consistent pattern to why I comment-out some code and completely remove other code. For instance, in the code which originated in the MSDN article, I commented-out, rather than removed, the code I decided was pointless in the context of the class I was writing.
Is there some Rule of Good Practice (or, should that be “Stellar?”): “Thou shallt never, ever, ever leave commented code in-line?”
When I was being taught to code in COBOL, some of my instructors claimed that it was a Rule of Good Practice that “Thou shallt never, ever, ever use ‘GoTo’.” I disregarded the fools, because even as a rank novice I could see that sometimes ‘GoTo’ is exactly proper.
Now, it is true that outside the ‘TdhCursorFactory’ class proper there *is* the entire (commented-out) code of a class which I’ve been putting together over the last couple of years, for the purpose of extracting objects from an assembly’s resources manifest. Only a few methods of this class are applicable to the requirements of the ‘TdhCursorFactory’ class. But, since I imagine others might find some of that code to be useful, I included it all in a commented-out form.
No doubt, this bloats the size of the resulting compiled library. My bad!
We’re already fairly certain that you are a much better and more experienced .NET programmer than I; so, doubtless, you already have better code to do the same sorts of tasks. Hell, you probably even have a better class to do essentially what the 'TdhCursorFactory’ class does -- for, after all, .NET is a good half-decade old and it never has natively supported animated and color cursors.
Clearly, it’s but an oversight on the part of the “Special Enhancements” folk that there is not one other class/article available on The Code Project to encapsulate the basic function of the 'TdhCursorFactory' class.
8) “… and a potentionally questionable use of mutexes .”
Again, I simply *must* beg you to educate me on this matter.
I am aware of only two ways to use the [ lock(object) ] statement: 1) make “object” a reference to the class; or, 2) make “object” a reference to an explicitly defined object -- i.e. no matter what one calls it, is this not a “mutex?”
Perhaps the flaw in my code is that I’m even using the [ lock(object) ] statement in the first place. But no! You faulted the use of mutexes.
Perhaps the flaw in my code is that I should be using the [ lock(object) ] statement for more of the class’ methods. But no! You faulted the use of mutexes.
The only way I can make sense of this helpful comment is that you think option 1) is the correct way to use the [ lock(object) ] statement. I know that I’m ignorant about a lot of things. I’ve often noticed that not everyone is so fortunate in regards to what he does and does not know.
9) “There is some good stuff there, but it is only halfway there in my opinion. YMMV.”
Now, see, this is a place where I, personally, would have used the word “lots,” or even “boat-loads,” were I feeling jaunty.
10) “… but it is only halfway there in my opinion.”
I am certain we all look forward to your soon-to-be-submitted article on this topic. It’s certain to be stellar … well, so long as you start coding from scratch; it would be such a shame to crimp your style by cribbing my mediocre code.
Conclusion:
Your very informative, helpful and useful feedback would appear to be to boil down to: “Aaaa! I couldda done better!”
Now, I don’t doubt that could. But, the fact is, you didn’t. Nor, apparently, did you even try.
There is only one other article on The Code Project which might even begin to be said to be about the same subject matter as this article and mediocre code I’ve submitted: Display Animated Cursors Stored in Resources[^], posted in December of 1999. Its project is written in C++, and appears to me to compile to an .EXE, rather than to a .DLL.
What have you been waiting for, man? You could have owned this concept in relation to .NET.
The only reason I even wrote the 'TdhCursorFactory’ class is that I couldn’t find anything, anywhere. Perhaps, somewhere in the vastness of the internet, there exists The Perfect General Class to perform this function; I decided that it looked like it would take me less time to write a Good-Enough General Class than to find that hypothetical Perfect General Class.
“YMMV”
Indeed.
In my not-at-all-humble opinion, your mileage is indistinguishable from 0.0
Codicil:
As even you must by now suspect, I can be slightly sarcastic when I deem it appropriate. Though, I do have to step outside my comfort-zone to do so. Ah, well, it’s a good thing to stretch one’s abilities, isn’t it?
There is a certain class of person that I do not suffer gladly: even if it happens that the sort of person who signs himself “Special Enhancements” turns out to be one of that special class, I am most unlikely to suffer in silence.
Dude, you *earned* this sarcasm -- not because you criticized my code (I believe I’m man enough to deal with that), but because the criticism is almost entirely pointless, and the few points are worthless to me as a means of improvement. Nor can I see that anything you’ve said is remotely useful to others who may be interested in downloading this project.
But, at least you aren’t the ass who voted Ri Qen-Sin’s comment a ‘2.’ Or are you? (That was a rhetorical question. And, if you are, don’t answer it: I’d hate to have a low opinion of you; that particular no-class fool is the lowest of the low).
|
|
|
|
|
Methinks the lady doth protest too much.
Sir Francis Bacon (a/k/a William Shakespere), The Taming of the Shrew
|
|
|
|
|
But I'm no lady. Nor am I even "nice."
Sir Francis Bacon (a/k/a William Shakespere),
Also, simply everyone knows that if Shakespeare isn't Shakespeare then he's Edward de Vere, 17th Earl of Oxford.
|
|
|
|
|
You have an uncanny grasp of the obvious .....
|
|
|
|
|
I know. But then, that makes it canny, after all, doesn't it? 
|
|
|
|
|
Touchy just by looking at the length, and I have not even read the comment yet, so I agree with [fwsouthern]. I offered several examples of why I thought you had not offered a general purpose library, despite it being in the "C# - General" section, but here are some more specifics. I guess I assumed you knew what I was referring to since you wrote the code.
I said "it is way too special case." In your constructor static TdhCursorFactory() , all the loading of cursors make it specific case. They support your sample. Your sample should load them into the library, not the other way around. The "special processing" in public static void SetCursor() is another place to remove specific case code.
I said "It contains workarounds ("special processing" in the author's words) to handle specific sample cursor files." In public static void SetCursor() you have special case handling of your example cursors. You should not be handling specific cursor files in the library. In the sample code, certainly, but not in the library.
I said "'Easter Eggs' with different behavior depending on who is logged on." We really do not care what you want displayed for crunion or angie as is included in the static TdhCursorFactory() constructor.
I said "poor exception handling." You only have a try / catch block in public static System.Windows.Forms.Cursor FromFile() that just eats exceptions. Any time I see catch {} in a code review it raises red flags. You throw no exceptions to communicate back to the user (a developer) that something went amiss. This is important for library code. Your goal is not to hide everything, only the errors which may come from expected events which are outside of your control.
I said "lots of commented out code that makes it look like work is still in progress." Not counting the GetResource class at the end, there are about 50 source lines commented out with about 400 or so active lines. (I split out your public enum Cursors and internal class iGetResource into separate files to simplify the main file.) I know commenting style and region usage are personal tastes, but your commenting technique lends to the impression you are commenting out additional lines of code, as do your region names. In the end, it was, and is, my impression when I examined your code.
I said "potentially questionable use of mutexes." I used the wrong term here. I meant to refer to all the lock blocks creating critical sections. While I have not run the code is detail, quite a bit of it is in critical sections. That raises another flag for me, hence my inclusion of the word "questionable".
OK, now I will read your comment and see what you have to say.
Mark Treadwell
Special Enhancements
|
|
|
|
|
I hesitated writing this reply, but when I saw that you had written an almost 2100 word reply to my comments on a 1400 word article (less code), I realized there are likely issues you face in your life far beyond my comprehension.
Your comments descended far, far below sarcasm and went into the realm of a childish rant very quickly. While you had some valid points, you had more fun attempting to insult me. Your attempts were not very good, but even so, I have a few answers.
I actually did learn to program FORTRAN 4 using Hollerith cards in 1978. The sharp stick comment really did not work, but I did know what a chad was before the 2000 Presidential election.
When readers rate an article like this with straight fives, I expected to read stellar content like you can see here[^], here[^], here[^], and here[^]. What I saw was just good. It does not really matter that it is nowhere else on Code Project, nor that I did not write it. What matters was the two means you had to communicate with the audience: your article and your code. See here[^].
I voted your article a three. I did not vote on any comments.
I have no interest in writing code on this subject. I thought it would be an interesting read, but you have disabused me of that notion.
It is good you are self-taught, since it likely means your personal interest is higher than someone forced to learn. My only formal instruction was in FORTRAN, PL/1 and COBOL. I taught myself x86 assembler, various Basics, C++, Java, C# and various macro languages. I have made a modest amount of money from programming, since it is now merely a hobby. My Special Enhancements tag is just the business side of that past work. Regretfully, those efforts had to be curtailed for my day job and family.
Note that my opening paragraph is a proper use of sarcasm, polite and biting, not dripping with venom and insult.
You obviously have a poor ability to take any form of criticism, reading the worst possible motive into a comment. Your massive response tells me all I personally need to know of you and your response to adversity. Since I have met people like you before, I know how best to continue.
Mark Treadwell
Special Enhancements
|
|
|
|
|
Mark Treadwell wrote: I hesitated writing this reply, but when I saw that you had written an almost 2100 word reply to my comments on a 1400 word article (less code), ...
Listen up, fellow:
You didn't criticize this effort, you trashed it; unfairly and unjustly, and for no *good* reason. You *intentionally* tried to give the casual reader the impression that this class is next to worthless.
And, on top of that, your "feedback" was almost entirely worthless. I'm much tempted to go with "absolutely worthless," but I'll give you a small benefit of doubt.
As I understood from the start, and as you've now admitted (even if you don't yet realize it), your motivation for trashing this article was that the first six persons who voted on it thought it worth a '5'. *That,* and that alone, is what prompted your small-minded, pointless and illogical "feedback." (I could go on for pages demonstrating merely the wholesale illogic contained in these three posts you've made.)
Moreover -- and importantly -- you chose to trash this effort wearing the hat of an official representative of this web-site. This is why I am expending any of my time on you: you are a petty tin-horn tyrant; you *need* to be put in your place.
[And, so long as we're mentioning official representatives of this web-site, one of them, at least, has a, shall we say, slightly more positive opinion of the article than you have expressed. That person's opinion of the class was unstated.]
Mark Treadwell wrote: ... I realized there are likely issues you face in your life far beyond my comprehension.
And you're a passive-aggressive bully, all puffed up with some small degree of petty authority.
As you can see, I, too, know how to play arm-chair psychologist. And I have better aim.
Mark Treadwell wrote: I hesitated writing this reply, but when I saw that you had written an almost 2100 word reply to my comments on a 1400 word article (less code), ...
... Your massive response tells me all I personally need to know of you and your response to adversity.
Mark Treadwell wrote (previously): Touchy just by looking at the length, and I have not even read the comment yet, so I agree with [fwsouthern].
I'm going to take a few moments to savage the illogic contained in the above. You won't like this; and that's just too bad.
This is how the thinking (may Socrates forgive me) goes:
Person A (that would be you) perpetrates some injustice upon another person (it doesn't matter that this particular injustice in minor, it's still an injustice).
Person B, who may or may not be the aggreived party, though, in this case he is, explains in some detail the error in Person A's original act.
Person C (in this instance, that would be fwsouthern) says: "Well, well, Person B! You certainly used a great number of words to get your point across. ... Therefore, you have no point."
Person A says: "Yes! I agree with Person C; Person B is much too touchy about this!"
The opinion expressed by Person C (fwsouthern) was worth exactly jack-squat. As was yours (nearly all of them, as it turns out). The difference is that fwsouthern posted his worthless opinion as Joe-Blow and you are posting your worthless opinions as an official representative of this web-site.
Mark Treadwell wrote: Note that my opening paragraph is a proper use of sarcasm, polite and biting, not dripping with venom and insult.
You're also self-deluded. Which rather goes along with being a passive-aggressive bully and petty tyrant.
Mark Treadwell wrote: You obviously have a poor ability to take any form of criticism, reading the worst possible motive into a comment. Your massive response tells me all I personally need to know of you and your response to adversity.
How cool it this! You see, I know your kind, too (see above). And I know that it is never a good idea to let your kind get away with anything. At all.
As I've alluded, I understood from your first "feedback" just what I was dealing with.
Mark Treadwell wrote: You obviously have a poor ability to take any form of criticism, reading the worst possible motive into a comment.
And you *obviously* cannot read, either; on top of all the other personal deficiencies under which you suffer. Not to belabor the point, but I do pity you, to a small degree.
Jakka Prihatna's comment implies that there is a far, far better way to go about accomplishing the primary goal of this class.
And what was my response to Jakka Prihatna? Why, of course, it was to thank him for the information and urge him to submit an article himself.
All in all, not at all a shabby response from someone who cannot take criticism, wouldn't you say?
I'm sorry, that question assumes that the person questioned can reason logically all the way from Point A to Point B. Please forgive me my impertinence.
Mark Treadwell wrote: Since I have met people like you before, I know how best to continue.
The *proper* way for persons such as you to deal with persons such as I is to keep one's native and prickly-brittle illogic far, far away.
Somehow, I much doubt that that is what you have in mind. Your kind rarely does. Rather, I do not doubt that this was a very thinly veiled threat. Again, fully in keeping with your kind.
|
|
|
|
|
You are so easy and predictable.
Sorry, but I am not officially associated with the Code Project in any way. Go ahead and ask them. Ask every one of the Secretaries, Programmers, Administrators and Moderators. I cannot help it if you cannot tell an Administrator from a Supporter here. I know that just rips apart much of your last blast, but you will just have to live with the reality of my lack of official standing.
I have read hundreds of Code Project articles over the years and voted what I felt about the article and code. I have voted articles from one to five. What I said was that with such a high initial vote score, before I read anything, the article and code must be stellar. Those prior votes gave me an expectation that was not fulfilled. You could not control those votes any more than you could control mine. I at least offered you some feedback, even if you thought I was rude and inadequate. Not every form of feedback comes with source code attached, but I later did provide specific pointers that I see you have avoided commenting on. That is OK, since it does not fit in with the rest of what you felt you needed to vent at me.
I felt that voting a three needed some comment, and I gave that first short comment what time I had available until family issues interceded. I may have written more had I not been called away. Are you now going to start calling my wife names? You felt you needed to parse it and critically interpret each possible negative nuance.
While your subject was unique for the Code Project, the execution did not meet what I feel is worth of a five. I linked to several articles for which I have voted a five. Lots of people inflate votes around here. There have been several forum threads about it, but there is not much they can do without major changes to their back end system.
Your emotional issues seem to be with someone not fulfilling your expectations. You need me to be "small-minded" and a "bully" so you feel justified that everything I voluntarily wrote was wrong, inappropriate and intentionally done to inflict you pain. That is truly small-minded of you since I am not aware we have ever interacted before. I do not intentionally go around insulting people, but you obviously think I do.
I rarely comment around here because it would take up too much of my time. I write enough professionally elsewhere. In the end, our brief exchange will affect nothing. You will continue with articles, and I hope you continue learning. You feel that you are somehow putting me in my place, but I hardly think you matter in that regard.
It has been an interesting exchange, but it appears to have run its course. Now you can take the last word.
Mark Treadwell
Special Enhancements
|
|
|
|
|
Another thing:
Mark Treadwell wrote: Your comments descended far, far below sarcasm and went into the realm of a childish rant very quickly. While you had some valid points, you had more fun attempting to insult me. Your attempts were not very good, ...
...
Note that my opening paragraph is a proper use of sarcasm, polite and biting, not dripping with venom and insult.
Another thing about your type is seen here.
There are no insults in my first response to you, nor is there a childish rant, nor is it dripping in venom and insult. Rather, my response laughs at nearly everything you said ... what it is dripping with is (very mild) sarcasm.
You, on the other hand, have done exactly what you falsely accuse me of.
|
|
|
|
|
I meant 5 stars…
I never had to worry about what the cursor looked like until now (adding a zoom functionality to the PrintPreviewControl), and this article popped up at just te right time.
ROFLOLMFAO
|
|
|
|
|
"I never had to worry about what the cursor looked like until now ..."
Me, too. And then I did care ... and dang! I was out in the cold.
"I meant 5 stars ..."
Thank you. I'm happy I was able to help you.
-- modified at 13:38 Saturday 27th October, 2007
|
|
|
|
|