Rectangle rect = this.ClientRectangle; graphics.Clear(Color.Black); rect.Inflate(-1,-1); graphics.DrawString(string.Concat("Onpaint error: \'", exception.Message, "\'") , theFont, Brushes.Red, rect);
May 25, 2005
Useful Drawstring function
This version of Drawstring is useful it will fit the string to the given rectangle, automatically wrapping it as appropriate.
Code to write to the App.Config file.
.Net provides something to read configuration file settings but nothing to write them back.
Draw Image To Fit A Rectangular Area
Following code draws an image scaled to a given rectangle, keeping the aspect ratio and centering the scaled image inside the rectangle using GDI+
Graphics.DrawImage(image, FitToRect(this.ClientRectangle, image.Size)); /// <summary> /// Fit the given src Size to the target Rectangle keeping the aspect /// ratio and centering the src inside the rectangle /// </summary> /// <param name="target"></param> /// <param name="src"></param> /// <returns></returns> static public Rectangle FitToRect(Rectangle target, Size src) { // Find the scale to fit the Src to the Target height float sfh = (float)target.Height/(float)src.Height; // Find the scale to fit the Src to the Target width float sfw = (float)target.Width/(float)src.Width; // Smaller of the 2 is the fit to view scale factor float sf = Math.Min(sfh, sfw); // Find the size of the Src scaled to fit the target rectangle Size sizeToFit = new Size((int)Math.Round((double)src.Width*sf), (int)Math.Round((double)src.Height*sf) ); Poiny loc = new Point((target.Width-sizeToFit.Width)/2, (target.Height-sizeToFit.Height)/2); // Now centre the scaled src size in the rectangle Rectangle rect = new Rectangle(loc, sizeToFit); return rect; }
May 20, 2005
ASP.NET and HTTP Protocol
Explains how HTTP protocol works. Very thorough run down of the workings of ASP.NET.
A Bunch of On line books. - These books are very basic but very detailed. They are from the same guys as above.
A Bunch of On line books. - These books are very basic but very detailed. They are from the same guys as above.
Difference between Invalidate, Update and Refresh
Whats the difference between Control.Invalidate, Control.Update and Control.Refresh? See here for a detailed explanantion
Summary:
Control.Invalidate() => Mark region/rectangle for painting in when next WM_PAINT is received. Asynchonouse
Control.Update() => Immediately send WM_PAINT to the WNDPROC() if update region is not empty. Synchonous
Control.Refresh() => Control.Invalidate() followed by Control.Update(). Synchonous
Summary:
Control.Invalidate() => Mark region/rectangle for painting in when next WM_PAINT is received. Asynchonouse
Control.Update() => Immediately send WM_PAINT to the WNDPROC() if update region is not empty. Synchonous
Control.Refresh() => Control.Invalidate() followed by Control.Update(). Synchonous
System.Buffer and System.BitConverter Classes
Discovered System.Buffer class that can directly manipulate the bytes of an array class objects. All its members are static.
int[] myarr1 = newint[5] {1,2,3,4,5}; int[] myarr2=newint[10] {0,0,0,0,0,6,7,8,9,10}; //here we are copying offset to offet as bytes Buffer.BlockCopy(myarr1,0,myarr2,0,20);It has 4 members:
- BlockCopy - Copies a specified number of bytes from a source array starting at a particular offset to a destination array starting at a particular offset.
- ByteLength - Returns the number of bytes in the specified array.
- GetByte - Retrieves the byte at a specified location in a specified array.
- SetByte - Assigns a specified value to a byte at a particular location in a specified
System.BitConverter class - Converts base data types to an array of bytes, and an array of bytes to base data types. See 'SelfMarshalledStruct' in OpenNETCF.Net for a sample usage. Works with the System.Buffer class for serialising/deserialising data types to byte arrays.
May 19, 2005
GetBitmapFromResources
Code to get a bitmap resource from the current Assembly
/// <summary> /// Retrieves a bitmap out of the application's resources. /// </summary> /// <param name="path">Path of the resource</param> /// <returns>An image.</returns> public static Image GetBitmapFromResources( string path ) { // Assembly containing the resources Assembly source = Assembly.GetExecutingAssembly(); // Create and return image if ( source.GetManifestResourceStream( path ) != null) return new Bitmap( source.GetManifestResourceStream( path ) ); return null; }Loading animated icons from an Assembly
private static string PrintIconResouceName = "Controls.Common.PrintAnimated.gif"; private static string ArchiveIconResouceName = "Controls.Common.ArchiveAnimated.gif"; public static Image AnimatedPrintingImage; public static Image AnimatedArchivingImage; /// <summary> /// // Load the animated icons from the Current Assembly /// </summary> private static void LoadAnimatedIcons() { System.IO.Stream imgStream = null; // get a reference to the current assembly System.Reflection.Assembly ass = System.Reflection.Assembly.GetExecutingAssembly(); // get a list of resource names from the manifest //string [] resNames = ass.GetManifestResourceNames(); imgStream = ass.GetManifestResourceStream(PrintIconResouceName); if(!ReferenceEquals(null, imgStream)) { AnimatedPrintingImage = Image.FromStream(imgStream); imgStream.Close(); imgStream = null; } else { System.Diagnostics.Debug.WriteLine("FormsHelpers.LoadAnimatedIcons, - Could not load the Animated Printing Icon!"); } imgStream = ass.GetManifestResourceStream(ArchiveIconResouceName); if(!ReferenceEquals(null, imgStream)) { AnimatedArchivingImage = Image.FromStream(imgStream); imgStream.Close(); imgStream = null; } else { System.Diagnostics.Debug.WriteLine("FormsHelpers.LoadAnimatedIcons - Could not load the Animated Printing Icon!"); } }This can be easily shortened with something like:
AnimatedPrintingImage = new Bitmap( typeof(someclass) , "print.gif"); OR AnimatedPrintingImage = new Bitmap( ass.GetManifestResourceStream (ArchiveIconResouceName));I think.
Resource Constructor (Type, String)
Had a problem loading a resource using the (Type, string) constructor of a graphic type, Bitmap in this case. Had the correct syntax and could not work out why it would not load. Finally I noticed that the graphic had been added to the project file but it must be set as a 'Embedded Resource' in the 'Build Action' property of the resource in Solution Explorer. MSDN does not explain how the 'Type' parameter is used for loading the resource. However the latest version of MSDN, msdn2.microsoft.com gives a better description. Simply search on '
May 11, 2005
System.Uri Class.
Using System.Uri with a local file
Always use IsWellFormedUriString before constructing an instance to ensure that the string being used is valid:
Uri uri = new Uri(@"c:\somefile.dat"); uri.LocalPath => returns 'c:\somefile.dat' uri.ToString() => returns 'file:///c:/somefile.dat'C# Uri Class - With lots of samples using console output to show their effects.
Always use IsWellFormedUriString before constructing an instance to ensure that the string being used is valid:
string GetUriContents(string uriString) { string contents = ""; if (!string.IsNullOrWhiteSpace(uriString) && Uri.IsWellFormedUriString(uriString, UriKind.Absolute)) { Uri uri = new Uri(uriString); if (uri.IsAbsoluteUri || uri.IsUnc) { UrlLoader urlLoader = new UrlLoader(); contents = urlLoader.TryGetUrlContents(uri.AbsoluteUri); if (contents.Length > 0) DoSomething(); } else if (uri.IsFile) { contents = File.ReadAllText(uri.LocalPath); } } return contents; }
Batch Files
Batch file help
Batch file Command Line Parameters
Run Batch File in C#
Batch File To Clean A Build
To put all output from a command in a file (erases existing file):
Batch file Command Line Parameters
Run Batch File in C#
Batch File To Clean A Build
To put all output from a command in a file (erases existing file):
command > filenameTo APPEND output to a file (great for log files):
command >> filenameTo use output from one command as input for another:
command1 | command2Want a certain batch file to clear the screen after running?:
echo @cls >> batfile.batWant to view a text file, a page at a time?:
type filename.txt moreUse call to invoke another batch file:
CALL "C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\vcvarsall.bat"Echo to just display a line of text in the output:
ECHO ========== Started ==========PAUSE to make the batchfile pause until a key is pressed:
ECHO ========== Finished ========== PAUSEHere is an example build script:
ECHO ========== Started ========== CALL "C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\vcvarsall.bat" F: cd F:\SourceControl\XXX ECHO ========== CLEAN ========== del /F /S /Q win32_vs90 del /F /S /Q win32_vs100 del /F /S /Q obj\d32 del /F /S /Q obj\r32 del /F /S /Q *.suo del /F /S /Q *.ncb del /F /S /Q *.user msbuild /t:clean ECHO ========== Syncing to change list 285519 ========== p4 sync //depot/Main/XXX/...@285519 p4 -s -c RBovillTestRelated sync //depot/Main/UnitTestData/...@285519 ECHO ========== Building XXX ========== CALL bin\VSXXX.bat -rebuild -debug -nopause ECHO ========== Finished ========== PAUSE
ASP.NET: Tips, Tutorials, and Code.
Quite a good book.
p90 - Use DNS.Resolve to validate an email address. Tried this but it did not work with my e-mail adddresses
p87 - WebClient.DownloadData to read a web page.
Winkey Shortcuts
WinKey + R - Open the Run dialog
WinKey + L - Locks a workstation
WinKey + E - Open an Explorer window
WinKey + D - Show/Hide Desktop
WinKey + Tab - Cycle through taskbar program buttons (in 3D on Windows 7/Vista)
WinKey + Pause - Open the System Properties dialog
WinKey + F - Find All Files
WinKey + Ctrl+F - Find: Computer
WinKey + M - Minimize all open windows
WinKey + Shift+M - Undo minimize all open windows
WinKey + F1 - Open Windows Help
WinKey + Up Maximize
WinKey + Down Restore / Minimize
WinKey + Left Snap to left
WinKey + Right Snap to right
WinKey + Shift+Left Jump to left monitor
WinKey + Shift+Right Jump to right monitor
WinKey + Home Minimize / Restore all other windows
WinKey + T Focus the first taskbar entry
Pressing again will cycle through them, you can can arrow around.
WinKey + Shift+T cycles backwards.
WinKey + Space Peek at the desktop
WinKey + G Bring gadgets to the top of the Z-order
WinKey + P External display options (mirror, extend desktop, etc)
WinKey + X Mobility Center (same as Vista, but still handy!)
WinKey + # where (# = number key) Launches a new instance of the application in the Nth slot on the taskbar.
Shake window title bar => Grab the window by the title bar and shake it and all the other windows will minimise
WinKey + L - Locks a workstation
WinKey + E - Open an Explorer window
WinKey + D - Show/Hide Desktop
WinKey + Tab - Cycle through taskbar program buttons (in 3D on Windows 7/Vista)
WinKey + Pause - Open the System Properties dialog
WinKey + F - Find All Files
WinKey + Ctrl+F - Find: Computer
WinKey + M - Minimize all open windows
WinKey + Shift+M - Undo minimize all open windows
WinKey + F1 - Open Windows Help
WinKey + Up Maximize
WinKey + Down Restore / Minimize
WinKey + Left Snap to left
WinKey + Right Snap to right
WinKey + Shift+Left Jump to left monitor
WinKey + Shift+Right Jump to right monitor
WinKey + Home Minimize / Restore all other windows
WinKey + T Focus the first taskbar entry
Pressing again will cycle through them, you can can arrow around.
WinKey + Shift+T cycles backwards.
WinKey + Space Peek at the desktop
WinKey + G Bring gadgets to the top of the Z-order
WinKey + P External display options (mirror, extend desktop, etc)
WinKey + X Mobility Center (same as Vista, but still handy!)
WinKey + # where (# = number key) Launches a new instance of the application in the Nth slot on the taskbar.
Shake window title bar => Grab the window by the title bar and shake it and all the other windows will minimise
Loading Cursor From Win32 Resource File In .NET
See the my blog 'Creating a Win 32 Resource DLL' on how to create a C++ resource DLL
Using Colored and Animated Cursors
Using legacy plug-ins with .NET - Using LoadLibrary,FreeLibrary and GetProcAdress within .NET to load and use legacy DLLs dynamically. Building Managed Resources from Win32 Resources Using Win32 and Other Libraries - Interop stuff Create Simple Load time DLLs
Using legacy plug-ins with .NET - Using LoadLibrary,FreeLibrary and GetProcAdress within .NET to load and use legacy DLLs dynamically. Building Managed Resources from Win32 Resources Using Win32 and Other Libraries - Interop stuff Create Simple Load time DLLs
using System; using System.Runtime.InteropServices; using System.Windows.Forms; class Win32 { [DllImport("user32.dll", EntryPoint = "LoadCursorFromFileW",To use the method
CharSet = CharSet.Unicode)] public static extern IntPtr LoadCursorFromFile(String str); [DllImport("user32.dll", EntryPoint = "LoadImageW",
CharSet = CharSet.Unicode)] public static extern IntPtr LoadImage(IntPtr hinst, string lpszName, uint uType, int cxDesired, int cyDesired, uint fuLoad); public const uint LR_LOADFROMFILE = 16; public const uint IMAGE_CURSOR = 2; } class CursorLoader { /// <summary> /// Load Coloured Cursor from a file. Do not scale the cursor to
the default size /// </summary> /// <param name="filename"></param> /// <returns></returns> public static Cursor LoadCursorFromFileUnscaled(string filename) { IntPtr hCursor; Cursor result = null; hCursor = Win32.LoadImage(IntPtr.Zero, filename, Win32.IMAGE_CURSOR,
0, 0, Win32.LR_LOADFROMFILE); if (!IntPtr.Zero.Equals(hCursor)) { result = new Cursor(hCursor); } else { throw new Exception("Could not create cursor from file "
+ filename); } return result; } }
Cursor XxxCursor = CursorLoader.LoadCursorFromFileUnscaled("Xxx.cur");This method can be adapted to load other resource types. Just play around with the Win32 'LoadImage' API call.
Creating a Win 32 Resource DLL
Use a 'Win32 Project' template from the 'Visual C++ Projects' list of project types.
In the Wizard, select 'Application Settings'. In this tab sheet set the 'Application Type' to 'DLL' and 'Additional Options' to 'Empty Project'.
Add the following as a source file called 'DllMain.cpp'
#define WIN32_LEAN_AND_MEAN #include "windows.h" //LPTSTR FileName = _T("AWin32Resources.dll"); BOOL WINAPI DllMain( HINSTANCE hinstDLL, // handle to DLL module DWORD fdwReason, // reason for calling function LPVOID lpReserved ) // reserved { // Perform actions based on the reason for calling. switch( fdwReason ) { case DLL_PROCESS_ATTACH: // Initialize once for each new process. // Return FALSE to fail DLL load. break; case DLL_THREAD_ATTACH: // Do thread-specific initialization. break; case DLL_THREAD_DETACH: // Do thread-specific cleanup. break; case DLL_PROCESS_DETACH: // Perform any necessary cleanup. break; } return TRUE; // Successful DLL_PROCESS_ATTACH. }Add the resources as required.
Dynamics Graphics In ASP.Net
Use this to create a Dynamic graphics object
<img src="DynamicImage.aspx" border="1" alt="Dynamically Graphics Object">where DynamicImage.aspx is:
<%@ Import Namespace="System.Drawing" %> <%@ Import Namespace="System.Drawing.Imaging" %> <script language="C#" runat="server"> void Page_Load(Object sender, EventArgs e) { Bitmap bitmap = new Bitmap(200, 200); Graphics gfx = Graphics.FromImage(objBitmap); // use 'gfx' object to create graphics SolidBrush objBlackBrush = new SolidBrush(Color.Black), objYellowBrush = new SolidBrush(Color.Yellow); Font font = new Font("Arial Black", 9); gfx.FillRectangle(new SolidBrush(Color.Ivory), 0, 0, 200, 200); gfx.DrawString("Blah, blah, blah", font, objBlackBrush, 5, 8); gfx.FillEllipse(objYellowBrush, 375, 5, 50, 50); ... Response.ContentType = "image/jpeg"; bitmap.Save(Response.OutputStream, ImageFormat.Jpeg); gfx.Dispose(); bitmap.Dispose(); } </script>The trick here is to save the bitmap to the 'OutputStream'.
Subscribe to:
Posts (Atom)