|
To make myself more clear, 'olelib.DESKBANDINFO_Masks' is an int Enum.
"Do unto others as you would have them do unto you." - Jesus
"An eye for an eye only makes the whole world blind." - Mahatma Gandhi
|
|
|
|
|
Don't know for sure, but I think you need to have the Flags attribute on the olelib.DESKBANDINFO_Masks enum.
- monrobot13
|
|
|
|
|
Found out it had nothing to do with that. That line of code should be:
if(!((pdbi.dwMask & olelib.DESKBANDINFO_Masks.DBIM_TITLE)==0))
I clean forgot that in C#, true is -1 !!!!
"Do unto others as you would have them do unto you." - Jesus
"An eye for an eye only makes the whole world blind." - Mahatma Gandhi
|
|
|
|
|
jdunlap wrote:
I clean forgot that in C#, true is -1 !!!!
Its not that true is -1, in C# you cannot implicitly convert from an int to a bool. While pdbi.dwMask & olelib.DESKBANDINFO_Masks.DBIM_TITLE may result in a non-zero value; the if statement requires a bool. Which is why simply comparing that result to zero works, the comparison produces a bool which the if statement can deal with.
James
"It is self repeating, of unknown pattern"
Data - Star Trek: The Next Generation
|
|
|
|
|
Is there a way to get a tab page change event (or any event for that matter) to fire when you click the "tab" portion of the tab page...??? All the events I've tried seem to need a click in the tab page body in order to fire...
I need to be able to do some "init" coding on tab pages as soon as the tab label is clicked, without having to first click in the tab page body, and I'm wondering if anyone has some advice as to how this can be done...
thanks.
|
|
|
|
|
You can use the SelectedIndexChanged event of the TabControl. This event fires whenever the selected tab page changes. The selectedindex property of the TabControl will be the page that was selected (0 based).
- monrobot13
|
|
|
|
|
Yo,
thanks for the clue, that's what I was looking for....
I owe you a beverage...
|
|
|
|
|
Is there any easy way to get the width of a font? I see that I can use the ToLogFont method or the Font class and then use the lfWidth member of the LOGFONT structure to get the width, but there has to be an easier way. Am I wrong? If there is no easier way how would I use the ToLogFont method?
Thanks
- monrobot13
|
|
|
|
|
Well, with the windows API, you use GetTextMetrics. There should be a wrapper for this API in .NET. Just keep looking!
"Do unto others as you would have them do unto you." - Jesus
"An eye for an eye only makes the whole world blind." - Mahatma Gandhi
|
|
|
|
|
I think what you're looking for here is the Graphics.MeasureString() method
|
|
|
|
|
Hey all
i've got a small app that creates several Rectangle objects as part of its constructor code. These are then used later as bounding rectangles for hit testing of lines. This works very well for my needs ... the problem is when i scroll vertically the rectangles no londer bound the correct area!! i've tried creating a seperate function(which i called in my paint handler) which re-initialises the Rects to the original co-ords plus AutoScrollPosition.X and Y. .... this doesn't seem to have any effect though!!! i guess i'm calling the function from the wrong place but is there an event that's triggered by scrolling as in OnScroll for ex.
If anyone has any ideas i'd love to hear them
thanks
Paul
Paul Griffin
|
|
|
|
|
my first thought is rememeber that Rects are structs...
so bob.rect = new Rectangle(1,2,3,4); is fine, but
bob.rect.x = 1; will not work...
as Rectangles are stuctures they are copy by value.
"When the only tool you have is a hammer, a sore thumb you will have."
|
|
|
|
|
Ya your right but i don't actually attempt anything like that luckily
what i try to do is add the scroll position offsets to the Rect dimensions by creating entirely new rects but of the same name.
the trouble is when to do this ... that's why i was hoping there might be some event triggered by the scrolling
Paul Griffin
|
|
|
|
|
Events are:
ValueChanged<br />
Scroll
"When the only tool you have is a hammer, a sore thumb you will have."
|
|
|
|
|
Thanks Philip
believe or not though i've just managed to get around it by trying something a little different.... instead of trying to re create the Rects after the scroll i just modified the mouse click point by subtracting the scroll offset .. that way i don't have to touch the Rects...
but thanks for that info .. i'm sure i'll need it further down the road at some stage
Cheers
Paul
Paul Griffin
|
|
|
|
|
Hello there,
i've written a control derived from System.Windows.Forms.TextBox.
When the user presses Shift + CursorLeft I want to select more than
one character under certain circumstances.
So I set the SelectionStart and the SelectionLength properties
to new values and mark the key event as handled.
After that, the TextBox always positions the cursor to the right
of the selection.
Does anybody have an idea how to avoid that? I'd like to position
the cursor to the left of the selection after that event...
Thanks a lot.
brian
|
|
|
|
|
Now why the hell is this so difficult?
I mean, it works perfectly with child windows, but do I really have to go subclassing and calling API only to draw a simpke string on the background of an MDI window?
I appreciate any help about this. Thanks.
.
|
|
|
|
|
I don't know if there's a "proper" way to do this, but a workround I've found is to draw the text on a bitmap then assign this bitmap to the MDI window's BackgroundImage property. A snag is that you have to re-create the bitmap whenever the window size changes or it gets tiled (actually you probably only need to recreate it if the window gets smaller, but I haven't tested this). For example, putting the following code in the MyMDIForm_Load and the MyMDIForm_Resize event handlers works:
Bitmap bm = new Bitmap(ClientSize.Width, ClientSize.Height);<br />
Graphics gr = Graphics.FromImage(bm);<br />
gr.FillRectangle(new SolidBrush(Color.Yellow), 0, 0, bm.Width, bm.Height);<br />
gr.DrawString("The cat sat on the mat", Font, new SolidBrush(Color.Red), 50, 50);<br />
BackgroundImage = bm;
Chris Jobson
|
|
|
|
|
Yes, thanks, but I already new this one. The solution is awkward one, and I was looking for something better
I also know how to subclass the window and then enumarate all windows to find the MDIClientWnd (which is actually a container for all child windows) and then to intercept WM_PAINT and WM_ERASEBKGND messages to get a device context to draw onto.
But this all is just too much for a simple drawing on the MDI background, so I was just wondering if I am missing something obvious.
Thanks for yor answers anyways, I appreciate it.
.
|
|
|
|
|
Try this in the MDI parent form:
foreach(Control c in Controls)
{
MdiClient mc = c as MdiClient;
if (null != mc)
{
using(Graphics g = mc.CreateGraphics())
{
g.DrawString(...);
}
}
} As far as I can see, the MdiClient class is the managed equivalent of the MDIClientWnd .
"These people looked deep within my soul and assigned me a number based on the order in which I joined." - Homer
|
|
|
|
|
Thanks, your solution is a smart one, and it works, but only partially. When I put this in the Form_Load event it will draw the text, but then any child window that moves over that area of MDI background where the text is drawn will actually erase it. I put it in the load event, so to draw it only ones for the lifetime of the application, if I put it in the paint event it does not work at all.
But thanks for your code anyways, it is good to know that MdiClient class maps to the MdiClientWnd, which is something I totally disregarded.
.
|
|
|
|
|
The general question is: How I can make a class that will support this kind of command:
book[1].name
or
book[7].FindInText ("This is a first line");
I mean for this part of code (book[5]) I need a n indexer inside of class 'book' but indexer properties can only accept accesories like Set; and Get; -How I can add my own function/properties to indexer ? Or may be I don't need an indexer to do this ?
Please if you can - write a little peace of code that will provide solution and help me understand thecnics used. Thank you
|
|
|
|
|
This is done by returning a class from you indexer:
public class Books: CollectionBase<br />
{<br />
public Books()<br />
{<br />
}<br />
<br />
public void Add(Book book)<br />
{<br />
List.Add(book);<br />
}<br />
<br />
public void Remove(Book book)<br />
{<br />
List.Remove(book); <br />
}<br />
<br />
public Book this[int index]<br />
{<br />
get<br />
{<br />
return (Book) List[index];<br />
}<br />
}<br />
}<br />
<br />
public class Book<br />
{<br />
public Book()<br />
{<br />
}<br />
<br />
public void FindInText(String value)<br />
{<br />
<br />
}<br />
<br />
public String name<br />
{<br />
get<br />
{<br />
return "hello, world";<br />
}<br />
}<br />
}
"When the only tool you have is a hammer, a sore thumb you will have."
|
|
|
|
|
10x man for quick answer - It's look very simple now but there's some problem with this code in my program Actually I making program that will be Outlook client (receive e-mails from Inbox,manage them,send, etc...) For this purpose I made an .DLL that will implement all function,properties that I need in my main() program. Generally I read one by one all e-mails in Inbox and return to main() program the properties of this e-mail item. To work with e-mail item I need to know it serial number (number in the list,index..) So I came up with idea how to handle (error traping,return error codes..) e-mail's from my DLL. For this I made function like
String Subject (int eMailIndex)
{
try
{ return this.emailItem.Subject.ToString(); }
catch
{ throw (new System.Exception ("eMail is not found"); }
}
But number of requred function is grow up quickly (like GetSenderName,GetReceivedTime, etc...) and all of them requred just an index (integer) of active e-mail item. So I thought instead sending all the time the integer with the function, make an indexer that will do all the work. The problem is - I don't know how to write this Some function requred just an index some of them requred some parameters to be send with them and not just an index, and I don't have any collection (and don't need it) in my class and nowhere in the program (So I can not work directly with .List[index] ). Can you help me to write such a class that will do this work ? (Don't worry about connection to Outlook - I'll make it myself - just name it with guesible names (like eMailItem) and I'll do all the rest)
P.S. If you know any site that will help me with Outlook programing please send me a link too if you can
|
|
|
|
|
There are a number of solutions
1) An indexer does not have to be a integer - you can use any type of object, so create a class that contains the index of the email and the command you want to execute.
2) Use a standard index to get the email back then add a function to the class for every outlook function.
I prefer the later as its more oo.
"When the only tool you have is a hammer, a sore thumb you will have."
|
|
|
|