|
Generally, when you run into the limitations of the standard control usage, you have to write custom code. I can imagine two major ways around this.
1) Manage the Height property differently, never letting it pass the maximum size. Handle the zoom settings separately, ignoring the items that are not visible. (Probably the easiest solution.) Pay attention to cases where this could cause problems and write code to prevent them.
2) Create a custom solution in which you draw everything yourself, letting you use any sort of number to handle the height and other values. (Lots of work in most cases.)
John
"You said a whole sentence with no words in it, and I understood you!" -- my wife as she cries about slowly becoming a geek.
|
|
|
|
|
The API call
StringFormat.SetMeasurableCharacterRanges(CharacterRange[])
will throw an Overflow exception if the CharacterRange[] parameter is greater than 32 elements long. For instance, the following code will throw an exception:
CharacterRange[] ranges = new CharacterRange[33];
StringFormat format = new StringFormat();
format.SetMeasurableCharacterRanges(ranges);
However, if ranges[] was <= 32 elements long, no exceptions are thrown. All of this is regardless of whether each CharacterRange element is initialized (of course, .NET initializes value types anyway). Looking throught the MSDN documentation, I see no mention of a length limit for the .SetMeasurableCharacterRanges method.
So I have 2 questions: is this a known bug or expected functionality? And what other options do I have for retrieving the character positions of text?
The graveyards are filled with indispensible men.
|
|
|
|
|
The documentation I found is a bit confusing. The VB version of the SetMeasurableCharacterRanges method takes one parameter, an array of type CharacterRange. The C# version takes two parameters:
Status SetMeasurableCharacterRanges(
INT rangeCount,
const CharacterRange *ranges
);
The first being the number of elements in the array pointed to by the second parameter, a pointer to an array of type CharacterRange.
The docs I found doesn't say that either parameter is optional, so I'd start there...
RageInTheMachine9532
|
|
|
|
|
Not sure what documentation you're looking at there, but .NET's SetMeasurableCharacterRanges takes only a single parameter, which is not optional.
I posted this question on an MSDN newsgroup and got the following reply:
We hit the same problem, and basically it is an undocumented 'feature'
To get around this limitation, test each character at a time, or in batches
of 32 characters
James
So it seems this is a 'feature'...? Really strange why it would be limited to 32 characters.
The graveyards are filled with indispensible men.
|
|
|
|
|
I wasn't reall impresed with the quality of what I found, but it's in the VS.NET2K3 documentation that came with the Enterprise version. Paste this: ms-help://MS.VSCC.2003/MS.MSDNQTR.2003APR.1033/gdicpp/gdi+/gdi+reference/classes/stringformatclass/stringformatmethods/setmeasurablecharacterranges.htm into the help browser address bar to see what I was looking at. It gives a C# example that takes TWO parameters. It could be that these docs were updated in the Oct'03 update to the VS documentation. I haven't been able to get that update installed...
SetMeasureableCharacterRanges is also not limited to 32 characters, but 32 character ranges.
RageInTheMachine9532
|
|
|
|
|
Hello!
I do not know how to open CD-ROM! Thanks.
|
|
|
|
|
Push the open/close button on the outside of the drive.
- Nick Parker My Blog
|
|
|
|
|
Could you provide some pictures explaining this?
Perl combines all the worst aspects of C and Lisp: a billion different sublanguages in one monolithic executable. It combines the power of C with the readability of PostScript. -- Jamie Zawinski
|
|
|
|
|
|
You get the Reply Of Today gift.
Mazy
"A bank is a place that will lend you money if you can prove that you don't need it." - Bob Hope
|
|
|
|
|
Mazdak wrote:
You get the Reply Of Today gift.
- Nick Parker My Blog
|
|
|
|
|
That's not correct...
That's how I get to my cup holder!
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
Heath Stewart wrote:
That's how I get to my cup holder!
I always confuse the two!
- Nick Parker My Blog
|
|
|
|
|
This type of functionality isn't built into the .NET framework, so you'll just have to use P/Invoke.
Lucky for you, I guy I know from another forum already has done this[^].
The graveyards are filled with indispensible men.
|
|
|
|
|
heheh
Matthew Hazlett
Windows 2000/2003 MCSE
Never got an MCSD, go figure...
|
|
|
|
|
|
I'm learning to deliver some additional functionality to the end user I'm going to have to envoke some transact-sql statements to detach and reattach my SQL-Server (MSDE) database. My C# application uses standard ADO.NET but I can't find any examples of Transact-sql statements be called from within a C# program.
Any hints or an snippet of code on how I would do this from within a C# application?
Thanks,
cb
|
|
|
|
|
betterc wrote:
Any hints
Search for SqlCommand class. You can run any query or t-sql statement with it.
Mazy
"A bank is a place that will lend you money if you can prove that you don't need it." - Bob Hope
|
|
|
|
|
Something like the following should do it:
static void DetachPubsDB()<br />
{<br />
string connStr = "provider=SQLOLEDB;Data Source=(local);User ID=sa;Password=;Initial Catalog=master; Network Library=dbmssocn";<br />
OleDbConnection conn = new OleDbConnection(connStr); <br />
<br />
try<br />
{<br />
conn.Open();<br />
<br />
OleDbCommand cmdDetach = new OleDbCommand("sp_detach_db", conn);<br />
cmdDetach.CommandType = CommandType.StoredProcedure;<br />
cmdDetach.Parameters.Add("dbname", "Pubs");<br />
cmdDetach.ExecuteNonQuery();<br />
<br />
OleDbCommand cmdAttach = new OleDbCommand("sp_attach_db", conn);<br />
cmdAttach.CommandType = CommandType.StoredProcedure;<br />
cmdAttach.Parameters.Add("dbname", "Pubs");<br />
cmdAttach.Parameters.Add("filename1", @"C:\Program Files\Microsoft SQL Server\Data\MSSQL\Data\pubs.mdf");<br />
cmdAttach.Parameters.Add("filename2", @"C:\Program Files\Microsoft SQL Server\Data\MSSQL\Data\pubs_Log.ldf");<br />
cmdAttach.ExecuteNonQuery();<br />
}<br />
catch(Exception excp)<br />
{<br />
Console.WriteLine(excp.Message);<br />
}<br />
finally<br />
{<br />
if(conn.State == ConnectionState.Open)<br />
conn.Close();<br />
conn.Dispose();<br />
}<br />
}
The most exciting phrase to hear in science, the one that heralds the most discoveries, is not 'Eureka!' ('I found it!') but 'That's funny...’
|
|
|
|
|
Thank you sooooooo much, I can hardly wait to give it a try!
Why is it that finding a simple example such as the one you have furnished is so difficult?
Thanks again!
cb
|
|
|
|
|
Actually, it's not so bad.
MSDN has lots of good articles on various facets of ADO.Net and if all else fails, there's Google. I would strongly recommend visiting Microsoft's ADO.Net Primer[^] if you plan to work with ADO.Net a lot.
Most of the challenge that I've seen people suffer through with ADO.Net stems from their previous history with ADO 2.x (COM-based).
The two ADO implementations share some terminology and concepts, but are largely different. Many experienced ADO 2.x developers find ADO.Net syntax more cumbersome than ADO 2.x and I suppose I agree to some extent.
A very good place to start is by examining the ADO.Net object hierarchy. Take the time to read about each class (there really aren't that many, and there are only a handful that get used in most common database transactions).
CodeProject is a great place to get information, but you have to have a mindset that you're prepared to explore and experiment - experience is the best teacher.
The most exciting phrase to hear in science, the one that heralds the most discoveries, is not 'Eureka!' ('I found it!') but 'That's funny...’
|
|
|
|
|
Agrreed and thank you.
I have bought several ADO.NET books and am picking it up really quickly. I was doing pretty good until I needed to write an application using an MSDE DB on a distributable CD.
In one sense since my application will be just referencing (reading) the DB my work is easy.
The hardwork is in developing a 'setup' routine that installs MDAC, .NET, MSDE, my application and reference the data on the CD.
This kind of through me into using transact-sql, something I've never needed to do before.
I found plenty of examples of transact-sql statements and I've written qutie a few ExecuteNonQuery() routines but I couldn't find an example that put it all together.
What you pointed out was that my commandtype = storedprocedure which I didn't think I needed.
So with your help and my recently purchased "The Guru's Guide to Transact-SQL" I'll get to experimenting.
Thanks again,
cb
|
|
|
|
|
Printing within C#/.NET seems pretty easy. At least it did until I tried to draw some objects with specific sizes.
During a print page event I try to draw a rectangle 1" x 1". I calculate the size as:
RectangleF r = new RectangleF( 0,0,g.DpiX,g.DpiY );
The rectangle is grossly over sized.
The DpiXY of the graphics is typically 600x600...seems right.
However, I do notice that the page units of the graphics are GraphicsUnit.Display which is not what I was expecting for a print event.
Transform of the Graphics is identity.
Any ideas ?
-Duncan
|
|
|
|
|
Ok, I'll answer this one myself
GraphicsUnit.Display is the default. This implied a 100dpi device.
Thus the correct way to calculate a real world size is:
float dpiXA = g.DpiX * ( 100.0f / g.DpiX );
float dpiYA = g.DpiY * ( 100.0f / g.DpiY );
Then use dpiXA/YA in your size calculations.
If you are doing a print preview to a display device ( typically 96dpi ) then this calculation will also be correct.
|
|
|
|
|
hi,
i have a Mesh that fills all the screen and i want to get a window loaded in the app so i can interact with it as realy active window
can i make my app form is parent for this certain window if yes how ??
|
|
|
|