tag:blogger.com,1999:blog-74299014952862306702024-03-14T03:15:10.231+13:00Lachlan's BlogzoneSoftware Development BitsLachlan Keownhttp://www.blogger.com/profile/14681765389224928298noreply@blogger.comBlogger16125tag:blogger.com,1999:blog-7429901495286230670.post-4055733490716517882014-03-04T14:09:00.000+13:002014-10-23T21:14:34.387+13:00Image crop control for Silverlight or Windows PhoneThis example gives the basis of an image cropping control for Silverlight or Windows Phone (7 or 8). It produces output as left, right, top and bottom trim %s for generic use. It would be trivial to perform the actual trimming with a library such as <a href="http://writeablebitmapex.codeplex.com/" target="_blank">WriteableBitmapEx</a>. I have made no effort to tidy this code to be more efficient or readable, but there are many such modifications that could be made.<br />
<br />
This code allows for the phone to be used in either portrait or landscape mode. Aspect ratio is not locked, but the code could be tweaked to enforce this.<br />
<br />
Try it out <a href="http://www.windowsphone.com/s?appid=09ae1a6f-a87d-46b4-85ff-3262bfc93667" target="_blank">here in my WP8 Meme Maker</a> app.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-PVzXo5OrJts/UxUhpyTZQqI/AAAAAAAATAA/ni977zmT5a8/s1600/WPCrop.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://2.bp.blogspot.com/-PVzXo5OrJts/UxUhpyTZQqI/AAAAAAAATAA/ni977zmT5a8/s1600/WPCrop.png" height="240" width="400" /></a></div>
<br />
<b>How it works</b><br />
Two images sit within a grid, with the semi-transparent instance behind in z-order. A rectangle is positioned in each corner. The topmost image is clipped to a rectangle defined by dragging the rectangles around.<br />
<b><br /></b>
<br />
<b>XAML:</b><br />
<b><br /></b>
<br />
<pre style="background-color: white; background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 13px;"><span style="color: blue;"><</span><span style="color: #a31515;">Grid</span><span style="color: blue;">></span>
<span style="color: #a31515;"> </span><span style="color: blue;"><</span><span style="color: #a31515;">Grid</span> <span style="color: red;"> HorizontalAlignment</span><span style="color: blue;">=</span><span style="color: blue;">"Center"</span><span style="color: red;"> VerticalAlignment</span><span style="color: blue;">=</span><span style="color: blue;">"Center"</span><span style="color: blue;">></span>
<span style="color: #a31515;"> </span><span style="color: blue;"><</span><span style="color: #a31515;">Image</span><span style="color: red;"> Source</span><span style="color: blue;">=</span><span style="color: blue;">"Assets/</span><span style="color: blue;">someImage</span><span style="color: blue;">.png"</span><span style="color: red;"> IsHitTestVisible</span><span style="color: blue;">=</span><span style="color: blue;">"False"</span><span style="color: red;"> Opacity</span><span style="color: blue;">=</span><span style="color: blue;">"0.3"</span><span style="color: blue;"> ></</span><span style="color: #a31515;">Image</span><span style="color: blue;">></span>
<span style="color: #a31515;"> </span><span style="color: blue;"><</span><span style="color: #a31515;">Image</span><span style="color: red;"> Name</span><span style="color: blue;">=</span><span style="color: blue;">"imgSauce"</span><span style="color: red;"> Source</span><span style="color: blue;">=</span><span style="color: blue;">"Assets/someImage.png"</span><span style="color: blue;"> ></span>
<span style="color: #a31515;"> </span><span style="color: blue;"><</span><span style="color: #a31515;">Image.Clip</span><span style="color: blue;">></span>
<span style="color: #a31515;"> </span><span style="color: blue;"><</span><span style="color: #a31515;">RectangleGeometry</span><span style="color: red;"> x</span><span style="color: blue;">:</span><span style="color: red;">Name</span><span style="color: blue;">=</span><span style="color: blue;">"clipRect"</span><span style="color: blue;"> ></</span><span style="color: #a31515;">RectangleGeometry</span><span style="color: blue;">></span>
<span style="color: #a31515;"> </span><span style="color: blue;"></</span><span style="color: #a31515;">Image.Clip</span><span style="color: blue;">></span>
<span style="color: #a31515;"> </span><span style="color: blue;"></</span><span style="color: #a31515;">Image</span><span style="color: blue;">></span>
<span style="color: #a31515;"> </span><span style="color: blue;"><</span><span style="color: #a31515;">Rectangle</span><span style="color: red;"> Name</span><span style="color: blue;">=</span><span style="color: blue;">"rectTopLeft"</span><span style="color: red;"> Width</span><span style="color: blue;">=</span><span style="color: blue;">"20"</span><span style="color: red;"> Height</span><span style="color: blue;">=</span><span style="color: blue;">"20"</span><span style="color: red;"> Margin</span><span style="color: blue;">=</span><span style="color: blue;">"-10"</span><span style="color: red;"> Fill</span><span style="color: blue;">=</span><span style="color: blue;">"Yellow"</span><span style="color: red;"> HorizontalAlignment</span><span style="color: blue;">=</span><span style="color: blue;">"Left"</span><span style="color: red;"> VerticalAlignment</span><span style="color: blue;">=</span><span style="color: blue;">"Top"</span><span style="color: blue;"> ></span>
<span style="color: #a31515;"> </span><span style="color: blue;"><</span><span style="color: #a31515;">Rectangle.RenderTransform</span><span style="color: blue;">></span>
<span style="color: #a31515;"> </span><span style="color: blue;"><</span><span style="color: #a31515;">TranslateTransform</span><span style="color: blue;">></</span><span style="color: #a31515;">TranslateTransform</span><span style="color: blue;">></span>
<span style="color: #a31515;"> </span><span style="color: blue;"></</span><span style="color: #a31515;">Rectangle.RenderTransform</span><span style="color: blue;">></span>
<span style="color: #a31515;"> </span><span style="color: blue;"></</span><span style="color: #a31515;">Rectangle</span><span style="color: blue;">></span>
<span style="color: #a31515;"> </span><span style="color: blue;"><</span><span style="color: #a31515;">Rectangle</span><span style="color: red;"> Name</span><span style="color: blue;">=</span><span style="color: blue;">"rectTopRight"</span><span style="color: red;"> Width</span><span style="color: blue;">=</span><span style="color: blue;">"20"</span><span style="color: red;"> Height</span><span style="color: blue;">=</span><span style="color: blue;">"20"</span><span style="color: red;"> Margin</span><span style="color: blue;">=</span><span style="color: blue;">"-10"</span><span style="color: red;"> Fill</span><span style="color: blue;">=</span><span style="color: blue;">"Yellow"</span><span style="color: red;"> HorizontalAlignment</span><span style="color: blue;">=</span><span style="color: blue;">"Right"</span><span style="color: red;"> VerticalAlignment</span><span style="color: blue;">=</span><span style="color: blue;">"Top"</span><span style="color: blue;"> ></span>
<span style="color: #a31515;"> </span><span style="color: blue;"><</span><span style="color: #a31515;">Rectangle.RenderTransform</span><span style="color: blue;">></span>
<span style="color: #a31515;"> </span><span style="color: blue;"><</span><span style="color: #a31515;">TranslateTransform</span><span style="color: blue;">></</span><span style="color: #a31515;">TranslateTransform</span><span style="color: blue;">></span>
<span style="color: #a31515;"> </span><span style="color: blue;"></</span><span style="color: #a31515;">Rectangle.RenderTransform</span><span style="color: blue;">></span>
<span style="color: #a31515;"> </span><span style="color: blue;"></</span><span style="color: #a31515;">Rectangle</span><span style="color: blue;">></span>
<span style="color: #a31515;"> </span><span style="color: blue;"><</span><span style="color: #a31515;">Rectangle</span><span style="color: red;"> Name</span><span style="color: blue;">=</span><span style="color: blue;">"rectBotLeft"</span><span style="color: red;"> Width</span><span style="color: blue;">=</span><span style="color: blue;">"20"</span><span style="color: red;"> Height</span><span style="color: blue;">=</span><span style="color: blue;">"20"</span><span style="color: red;"> Margin</span><span style="color: blue;">=</span><span style="color: blue;">"-10"</span><span style="color: red;"> Fill</span><span style="color: blue;">=</span><span style="color: blue;">"Yellow"</span><span style="color: red;"> HorizontalAlignment</span><span style="color: blue;">=</span><span style="color: blue;">"Left"</span><span style="color: red;"> VerticalAlignment</span><span style="color: blue;">=</span><span style="color: blue;">"Bottom"</span><span style="color: blue;"> ></span>
<span style="color: #a31515;"> </span><span style="color: blue;"><</span><span style="color: #a31515;">Rectangle.RenderTransform</span><span style="color: blue;">></span>
<span style="color: #a31515;"> </span><span style="color: blue;"><</span><span style="color: #a31515;">TranslateTransform</span><span style="color: blue;">></</span><span style="color: #a31515;">TranslateTransform</span><span style="color: blue;">></span>
<span style="color: #a31515;"> </span><span style="color: blue;"></</span><span style="color: #a31515;">Rectangle.RenderTransform</span><span style="color: blue;">></span>
<span style="color: #a31515;"> </span><span style="color: blue;"></</span><span style="color: #a31515;">Rectangle</span><span style="color: blue;">></span>
<span style="color: #a31515;"> </span><span style="color: blue;"><</span><span style="color: #a31515;">Rectangle</span><span style="color: red;"> Name</span><span style="color: blue;">=</span><span style="color: blue;">"rectBotRight"</span><span style="color: red;"> Width</span><span style="color: blue;">=</span><span style="color: blue;">"20"</span><span style="color: red;"> Height</span><span style="color: blue;">=</span><span style="color: blue;">"20"</span><span style="color: red;"> Margin</span><span style="color: blue;">=</span><span style="color: blue;">"-10"</span><span style="color: red;"> Fill</span><span style="color: blue;">=</span><span style="color: blue;">"Yellow"</span><span style="color: red;"> HorizontalAlignment</span><span style="color: blue;">=</span><span style="color: blue;">"Right"</span><span style="color: red;"> VerticalAlignment</span><span style="color: blue;">=</span><span style="color: blue;">"Bottom"</span><span style="color: blue;"> ></span>
<span style="color: #a31515;"> </span><span style="color: blue;"><</span><span style="color: #a31515;">Rectangle.RenderTransform</span><span style="color: blue;">></span>
<span style="color: #a31515;"> </span><span style="color: blue;"><</span><span style="color: #a31515;">TranslateTransform</span><span style="color: blue;">></</span><span style="color: #a31515;">TranslateTransform</span><span style="color: blue;">></span>
<span style="color: #a31515;"> </span><span style="color: blue;"></</span><span style="color: #a31515;">Rectangle.RenderTransform</span><span style="color: blue;">></span>
<span style="color: #a31515;"> </span><span style="color: blue;"></</span><span style="color: #a31515;">Rectangle</span><span style="color: blue;">></span>
<span style="color: #a31515;"> </span><span style="color: blue;"></</span><span style="color: #a31515;">Grid</span><span style="color: blue;">></span>
<span style="color: #a31515;"> </span><span style="color: blue;"></</span><span style="color: #a31515;">Grid</span><span style="color: blue;">></span></pre>
<pre style="background-color: white; background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 13px;"><span style="color: blue;">
</span></pre>
<pre style="background-color: white; font-size: 13px;"><b><span style="font-family: Arial, Helvetica, sans-serif;">Code Behind:</span></b></pre>
<pre style="background-color: white; font-size: 13px;"><b><span style="font-family: Arial, Helvetica, sans-serif;">
</span></b></pre>
<pre style="background-color: white; font-size: 13px;"><pre style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; font-family: Consolas;"><span style="color: blue;">using</span> System;
<span style="color: blue;">using</span> System.Windows;
<span style="color: blue;">using</span> Microsoft.Phone.Controls;
<span style="color: blue;">using</span> System.Windows.Media;
<span style="color: blue;">using</span> System.Windows.Shapes;</pre>
<pre style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; font-family: Consolas;">
</pre>
</pre>
<pre style="background-color: white; font-size: 13px;"><pre style="background-position: initial initial; background-repeat: initial initial; font-family: Consolas;"><span style="color: blue;">public</span> <span style="color: blue;">partial</span> <span style="color: blue;">class</span> <span style="color: #2b91af;">CropPage</span> : <span style="color: #2b91af;">Page</span>
{
<span style="color: blue;">private</span> <span style="color: #2b91af;">Rectangle</span> _draggedRect = <span style="color: blue;">null</span>;
<span style="color: blue;">public</span> CropPage()
{
InitializeComponent();
<span style="color: blue;">var</span> rects = <span style="color: blue;">new</span> <span style="color: #2b91af;">Rectangle</span>[] { rectTopRight, rectTopLeft, rectBotRight, rectBotLeft };
<span style="color: #2b91af;">Point</span> _dragOrigin =<span style="color: blue;">new</span> <span style="color: #2b91af;">Point</span>();
<span style="color: blue;">double</span> origLeftPerc= 0, origRightPerc = 0, origTopPerc = 0, origBotPerc = 0;
<span style="color: blue;">var</span> setOrigin = <span style="color: blue;">new</span> <span style="color: #2b91af;">Action</span><<span style="color: #2b91af;">Point</span>>((p) => {
_dragOrigin = p;
origLeftPerc = <span style="color: blue;">this</span>._clipLeftPerc;
origRightPerc = <span style="color: blue;">this</span>._clipRightPerc;
origTopPerc = <span style="color: blue;">this</span>._clipTopPerc;
origBotPerc = <span style="color: blue;">this</span>._clipBotPerc;
});
<span style="color: blue;">foreach</span> (<span style="color: blue;">var</span> aRect <span style="color: blue;">in</span> rects)
{
aRect.MouseLeftButtonDown += (s, e) => {
<span style="color: blue;">var</span> r = (<span style="color: #2b91af;">Rectangle</span>)s;
_draggedRect = r;
setOrigin( e.GetPosition(<span style="color: blue;">this</span>.imgSauce));
r.CaptureMouse();
};
aRect.MouseLeftButtonUp += (s, e) => {
_draggedRect = <span style="color: blue;">null</span>;
};
aRect.MouseMove += (s, e) => {
<span style="color: blue;">if</span> (_draggedRect != <span style="color: blue;">null</span>) {
<span style="color: blue;">var</span> pos = e.GetPosition(<span style="color: blue;">this</span>.imgSauce);
<span style="color: blue;">if</span> (s == <span style="color: blue;">this</span>.rectTopLeft || s == <span style="color: blue;">this</span>.rectTopRight) {
<span style="color: green;">// Adjust top</span>
_clipTopPerc = origTopPerc + (pos.Y - _dragOrigin.Y) / imgSauce.ActualHeight;
}
<span style="color: blue;">if</span> (s == <span style="color: blue;">this</span>.rectTopLeft || s == <span style="color: blue;">this</span>.rectBotLeft) {
<span style="color: green;">// Adjust Left</span>
_clipLeftPerc = origLeftPerc + (pos.X - _dragOrigin.X) / imgSauce.ActualWidth;
}
<span style="color: blue;">if</span> (s == <span style="color: blue;">this</span>.rectBotLeft || s == <span style="color: blue;">this</span>.rectBotRight) {
<span style="color: green;">// Adjust bottom</span>
_clipBotPerc = origBotPerc - (pos.Y - _dragOrigin.Y) / imgSauce.ActualHeight;
}
<span style="color: blue;">if</span> (s == <span style="color: blue;">this</span>.rectTopRight || s == <span style="color: blue;">this</span>.rectBotRight) {
<span style="color: green;">// Adjust Right</span>
_clipRightPerc = origRightPerc - (pos.X - _dragOrigin.X) / imgSauce.ActualWidth;
}
<span style="color: blue;">this</span>.updateClipAndTransforms();
}
};
}
<span style="color: blue;">var</span> draggingImg = <span style="color: blue;">false</span>;
imgSauce.MouseLeftButtonDown += (s, e) => {
setOrigin( e.GetPosition(<span style="color: blue;">this</span>.imgSauce));
imgSauce.CaptureMouse();
draggingImg = <span style="color: blue;">true</span>;
};
imgSauce.MouseLeftButtonUp += (s, e) => {
draggingImg = <span style="color: blue;">false</span>;
};
imgSauce.MouseMove += (s, e) => {
<span style="color: blue;">if</span> (draggingImg) {
<span style="color: blue;">var</span> pos = e.GetPosition(<span style="color: blue;">this</span>.imgSauce);
<span style="color: blue;">var</span> xAdjust = (pos.X - _dragOrigin.X) / imgSauce.ActualWidth;
<span style="color: blue;">var</span> yAdjust = (pos.Y - _dragOrigin.Y) / imgSauce.ActualHeight;
_clipLeftPerc = origLeftPerc + xAdjust;
_clipRightPerc = origRightPerc - xAdjust;
_clipTopPerc = origTopPerc + yAdjust;
_clipBotPerc = origBotPerc - yAdjust;
<span style="color: blue;">this</span>.updateClipAndTransforms();
}
};
imgSauce.SizeChanged += (x,y) => {
<span style="color: blue;">this</span>.updateClipAndTransforms();
};
<span style="color: blue;">this</span>.updateClipAndTransforms();
}
<span style="color: blue;">private</span> <span style="color: blue;">double</span> _clipLeftPerc, _clipRightPerc, _clipTopPerc, _clipBotPerc = 0;
<span style="color: blue;">void</span> updateClipAndTransforms()
{
<span style="color: green;">// Check bounds</span>
<span style="color: blue;">if</span> (_clipLeftPerc + _clipRightPerc >= 1)
_clipLeftPerc = (1 - _clipRightPerc) - 0.04;
<span style="color: blue;">if</span> (_clipTopPerc + _clipBotPerc >= 1)
_clipTopPerc = (1 - _clipBotPerc) - 0.04;
<span style="color: blue;">if</span> (_clipLeftPerc < 0)
_clipLeftPerc = 0;
<span style="color: blue;">if</span> (_clipRightPerc < 0)
_clipRightPerc = 0;
<span style="color: blue;">if</span> (_clipBotPerc < 0)
_clipBotPerc = 0;
<span style="color: blue;">if</span> (_clipTopPerc < 0)
_clipTopPerc = 0;
<span style="color: blue;">if</span> (_clipLeftPerc >= 1)
_clipLeftPerc = 0.99;
<span style="color: blue;">if</span> (_clipRightPerc >= 1)
_clipRightPerc = 0.99;
<span style="color: blue;">if</span> (_clipBotPerc >= 1)
_clipBotPerc = 0.99;
<span style="color: blue;">if</span> (_clipTopPerc >= 1)
_clipTopPerc = 0.99;
<span style="color: green;">// Image Clip</span>
<span style="color: blue;">var</span> leftX = _clipLeftPerc * <span style="color: blue;">this</span>.imgSauce.ActualWidth;
<span style="color: blue;">var</span> topY = _clipTopPerc * <span style="color: blue;">this</span>.imgSauce.ActualHeight;
clipRect.Rect = <span style="color: blue;">new</span> <span style="color: #2b91af;">Rect</span>(leftX, topY, (1 -_clipRightPerc) * <span style="color: blue;">this</span>.imgSauce.ActualWidth - leftX, (1 - _clipBotPerc) * <span style="color: blue;">this</span>.imgSauce.ActualHeight - topY);
<span style="color: green;">// Rectangle Transforms</span>
((<span style="color: #2b91af;">TranslateTransform</span>)<span style="color: blue;">this</span>.rectTopLeft.RenderTransform).X = clipRect.Rect.X;
((<span style="color: #2b91af;">TranslateTransform</span>)<span style="color: blue;">this</span>.rectTopLeft.RenderTransform).Y = clipRect.Rect.Y;
((<span style="color: #2b91af;">TranslateTransform</span>)<span style="color: blue;">this</span>.rectTopRight.RenderTransform).X = -_clipRightPerc * <span style="color: blue;">this</span>.imgSauce.ActualWidth;
((<span style="color: #2b91af;">TranslateTransform</span>)<span style="color: blue;">this</span>.rectTopRight.RenderTransform).Y = clipRect.Rect.Y;
((<span style="color: #2b91af;">TranslateTransform</span>)<span style="color: blue;">this</span>.rectBotLeft.RenderTransform).X = clipRect.Rect.X;
((<span style="color: #2b91af;">TranslateTransform</span>)<span style="color: blue;">this</span>.rectBotLeft.RenderTransform).Y = - _clipBotPerc * <span style="color: blue;">this</span>.imgSauce.ActualHeight;
((<span style="color: #2b91af;">TranslateTransform</span>)<span style="color: blue;">this</span>.rectBotRight.RenderTransform).X = -_clipRightPerc * <span style="color: blue;">this</span>.imgSauce.ActualWidth;
((<span style="color: #2b91af;">TranslateTransform</span>)<span style="color: blue;">this</span>.rectBotRight.RenderTransform).Y = -_clipBotPerc * <span style="color: blue;">this</span>.imgSauce.ActualHeight;
}
}</pre>
<b><span style="font-family: Arial, Helvetica, sans-serif;">
</span></b></pre>
Lachlan Keownhttp://www.blogger.com/profile/14681765389224928298noreply@blogger.com5tag:blogger.com,1999:blog-7429901495286230670.post-73531838215329531962013-02-27T08:27:00.000+13:002013-02-27T08:29:21.615+13:00Windows Store app Lock Screen Badge Icon fixThere is a requirement in Windows 8 Store apps that lock screen badges be white only, with varying transparency levels. Visual Studio doesn't enforce this; you only find out when you run the App Cert Kit and your app fails with:<br />
<br />
<em style="background-color: white; font-family: 'Segoe UI', Tahoma, Arial, Helvetica, sans-serif; font-size: 13px;">Image reference "Foo.png": The image "\Foo.png" has an ABGR value "0x1CAAAAAA" at position (0, 0) that is not valid. The pixel must be white (##FFFFFF) or transparent (00######).</em><br />
<br />
You then jump on Google and find <a href="http://msdn.microsoft.com/en-us/library/windows/apps/hh779720.aspx" target="_blank">this</a> or <a href="http://www.sadev.co.za/content/windows-store-app-development-snack-lock-screen-image-pain" target="_blank">this</a>.<br />
<br />
Manually altering 24*24 pixels individually is not my cup of tea.<br />
<br />
Here is some trivial VB.Net code that will take any image and convert it to a format suitable to use for a lock screen badge icon (ie every pixel has RGB of FFFFFF, with a varying A). You can then use Paint.Net or whatever to resize the image.<br />
<br />
<br />
<pre style="background-color: white; color: #222222; font-family: 'Courier New'; font-size: 12px; white-space: pre-wrap;"><span style="color: blue;">Imports</span> System.Drawing
</pre>
<pre style="background-color: white; color: #222222; font-family: 'Courier New'; font-size: 12px; white-space: pre-wrap;"><span style="color: blue;">Private</span> <span style="color: blue;">Function</span> conv2Badge(<wbr></wbr>img <span style="color: blue;">As</span> <span style="color: #2b91af;">Bitmap</span>)
<span style="color: blue;">Dim</span> destImage = <span style="color: blue;">New</span> <span style="color: #2b91af;">Bitmap</span><wbr></wbr>(img.Width, img.Height, <wbr></wbr>Imaging.<span style="color: #2b91af;">PixelFormat</span>.<wbr></wbr>Format32bppArgb)
<span style="color: blue;">For</span> x = <span style="background-color: yellow; background-position: initial initial; background-repeat: initial initial;">0</span> <span style="color: blue;">To</span> img.Width - <span style="background-color: yellow; background-position: initial initial; background-repeat: initial initial;">1</span>
<span style="color: blue;">For</span> y = <span style="background-color: yellow; background-position: initial initial; background-repeat: initial initial;">0</span> <span style="color: blue;">To</span> img.<wbr></wbr>Height - <span style="background-color: yellow; background-position: initial initial; background-repeat: initial initial;">1</span>
<span style="color: blue;">Dim</span> srcCol = img.<wbr></wbr>GetPixel(x, y)
<span style="color: blue;">Dim</span> avgInt = (((<span style="color: blue;">CI<wbr></wbr>nt</span>(srcCol.R) + <span style="color: blue;">CInt</span>(srcCol.G) <wbr></wbr>+ <span style="color: blue;">CInt</span>(srcCol.B)) / <span style="background-color: yellow; background-position: initial initial; background-repeat: initial initial;">3</span>) * <span style="color: blue;">CInt</span>(<wbr></wbr>srcCol.A)) / <span style="background-color: yellow; background-position: initial initial; background-repeat: initial initial;">255</span>
<span style="color: blue;">Dim</span> destCol = <span style="color: #2b91af;">Colo<wbr></wbr>r</span>.FromArgb(<span style="color: blue;">CByte</span>(avgInt), <span style="color: #2b91af;">Colo<wbr></wbr>r</span>.White)
destImage.<wbr></wbr>SetPixel(x, y, destCol)
<span style="color: blue;">Next</span>
<span style="color: blue;">Next</span>
<span style="color: blue;">Return</span> destImage
<span style="color: blue;">End</span> <span style="color: blue;">Function</span></pre>
Lachlan Keownhttp://www.blogger.com/profile/14681765389224928298noreply@blogger.com1tag:blogger.com,1999:blog-7429901495286230670.post-89832095281299572152010-05-08T12:24:00.003+12:002010-05-10T10:58:16.267+12:00AJAX Control Toolkit HTMLEditor - buttons with jQueryHave you tried adding buttons to the toolbar of the HTML Editor in the Ajax Control Toolkit? If so, you will know it is a "mission". I gave up and built my own with jQuery. To use, just add your own buttons to the "images" div...<div><br /></div>Hopefully modifying the script for your own purposes is relatively painless; I think the code is mostly self-documenting??<br /><br /><div style="font-family: Courier New; font-size: 10pt; color: black; background: white;"><br /><p style="margin: 0px;"><span style="background: #ffee62;"><%</span><span style="color: blue;">@</span> <span style="color: #a31515;">Page</span> <span style="color: red;">Language</span><span style="color: blue;">="vb"</span> <span style="color: red;">AutoEventWireup</span><span style="color: blue;">="false"</span> <span style="color: red;">CodeBehind</span><span style="color: blue;">="HTMLEditorButtons.aspx.vb"</span> <span style="color: red;">Inherits</span><span style="color: blue;">="Foo.HTMLEditorButtons"</span> <span style="background: #ffee62;">%></span></p><br /><p style="margin: 0px;"> </p><br /><p style="margin: 0px;"><span style="background: #ffee62;"><%</span><span style="color: blue;">@</span> <span style="color: #a31515;">Register</span> <span style="color: red;">Assembly</span><span style="color: blue;">="AjaxControlToolkit"</span> <span style="color: red;">Namespace</span><span style="color: blue;">="AjaxControlToolkit"</span> <span style="color: red;">TagPrefix</span><span style="color: blue;">="cc2"</span> <span style="background: #ffee62;">%></span></p><br /><p style="margin: 0px;"> </p><br /><p style="margin: 0px;"><span style="background: #ffee62;"><%</span><span style="color: blue;">@</span> <span style="color: #a31515;">Register</span> <span style="color: red;">Assembly</span><span style="color: blue;">="AjaxControlToolkit"</span> <span style="color: red;">Namespace</span><span style="color: blue;">="AjaxControlToolkit.HTMLEditor"</span></p><br /><p style="margin: 0px;"> <span style="color: red;">TagPrefix</span><span style="color: blue;">="cc1"</span> <span style="background: #ffee62;">%></span></p><br /><p style="margin: 0px;"> </p><br /><p style="margin: 0px;"><span style="color: blue;"><!</span><span style="color: #a31515;">DOCTYPE</span> <span style="color: red;">html</span> <span style="color: red;">PUBLIC</span> <span style="color: blue;">"-//W3C//DTD XHTML 1.0 Transitional//EN"</span> <span style="color: blue;">"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"></span></p><br /><p style="margin: 0px;"> </p><br /><p style="margin: 0px;"><span style="color: blue;"><</span><span style="color: #a31515;">html</span> <span style="color: red;">xmlns</span><span style="color: blue;">="http://www.w3.org/1999/xhtml"</span> <span style="color: blue;">></span></p><br /><p style="margin: 0px;"><span style="color: blue;"><</span><span style="color: #a31515;">head</span> <span style="color: red;">id</span><span style="color: blue;">="Head1"</span> <span style="color: red;">runat</span><span style="color: blue;">="server"></span></p><br /><p style="margin: 0px;"> <span style="color: blue;"><</span><span style="color: #a31515;">title</span><span style="color: blue;">></</span><span style="color: #a31515;">title</span><span style="color: blue;">></span></p><br /><p style="margin: 0px;"><span style="color: blue;"></</span><span style="color: #a31515;">head</span><span style="color: blue;">></span></p><br /><p style="margin: 0px;"><span style="color: blue;"><</span><span style="color: #a31515;">body</span><span style="color: blue;">></span></p><br /><p style="margin: 0px;"> </p><br /><p style="margin: 0px;"> <span style="color: blue;"><</span><span style="color: #a31515;">script</span> <span style="color: red;">src</span><span style="color: blue;">="../Script/jquery-1.3.2.js"</span> <span style="color: red;">type</span><span style="color: blue;">="text/javascript"></</span><span style="color: #a31515;">script</span><span style="color: blue;">></span></p><br /><p style="margin: 0px;"> <span style="color: blue;"><</span><span style="color: #a31515;">form</span> <span style="color: red;">id</span><span style="color: blue;">="form1"</span> <span style="color: red;">runat</span><span style="color: blue;">="server"></span></p><br /><p style="margin: 0px;"> <span style="color: blue;"><</span><span style="color: #a31515;">cc2</span><span style="color: blue;">:</span><span style="color: #a31515;">ToolkitScriptManager</span> <span style="color: red;">ID</span><span style="color: blue;">="ToolkitScriptManager1"</span> <span style="color: red;">runat</span><span style="color: blue;">="server"></span></p><br /><p style="margin: 0px;"> <span style="color: blue;"></</span><span style="color: #a31515;">cc2</span><span style="color: blue;">:</span><span style="color: #a31515;">ToolkitScriptManager</span><span style="color: blue;">></span></p><br /><p style="margin: 0px;"> <span style="color: blue;"><</span><span style="color: #a31515;">div</span><span style="color: blue;">></span></p><br /><p style="margin: 0px;"> <span style="color: blue;"><</span><span style="color: #a31515;">cc1</span><span style="color: blue;">:</span><span style="color: #a31515;">Editor</span> <span style="color: red;">ID</span><span style="color: blue;">="Editor1"</span> <span style="color: red;">runat</span><span style="color: blue;">="server"</span> <span style="color: red;">Height</span><span style="color: blue;">="400px"</span> </p><br /><p style="margin: 0px;"> <span style="color: red;">onclientactivemodechanged</span><span style="color: blue;">="modeChanged"</span> <span style="color: blue;">/></span></p><br /><p style="margin: 0px;"> </p><br /><p style="margin: 0px;"> <span style="color: blue;"></</span><span style="color: #a31515;">div</span><span style="color: blue;">></span></p><br /><p style="margin: 0px;"> </p><br /><p style="margin: 0px;"> <span style="color: blue;"><</span><span style="color: #a31515;">div</span> <span style="color: red;">id</span><span style="color: blue;">=images</span> <span style="color: red;">style</span><span style="color: blue;">="</span><span style="color: red;">display</span>: <span style="color: blue;">none</span>; <span style="color: red;">position</span>: <span style="color: blue;">absolute</span>; <span style="color: red;">border</span>: <span style="color: blue;">solid</span> <span style="color: blue;">1px</span> <span style="color: blue;">black</span>; <span style="color: red;">background-color</span>: <span style="color: blue;">White</span>; <span style="color: red;">overflow</span>: <span style="color: blue;">scroll</span>; <span style="color: red;">cursor</span>: <span style="color: blue;">hand</span>;<span style="color: red;">height</span>: <span style="color: blue;">150px</span>; <span style="color: red;">width</span>:<span style="color: blue;">80px</span> <span style="color: blue;">"></span></p><br /><p style="margin: 0px;"> <span style="color: blue;"><</span><span style="color: #a31515;">img</span> <span style="color: red;">src</span><span style="color: blue;">="../Images/Stuffed_Folder.png"</span> <span style="color: blue;">/><</span><span style="color: #a31515;">br</span> <span style="color: blue;">/></span></p><br /><p style="margin: 0px;"> <span style="color: blue;"><</span><span style="color: #a31515;">img</span> <span style="color: red;">src</span><span style="color: blue;">="../Images/User_Complete.gif"</span> <span style="color: blue;">/><</span><span style="color: #a31515;">br</span> <span style="color: blue;">/></span></p><br /><p style="margin: 0px;"> <span style="color: blue;"><</span><span style="color: #a31515;">img</span> <span style="color: red;">src</span><span style="color: blue;">="../Images/Move.gif"</span> <span style="color: blue;">/><</span><span style="color: #a31515;">br</span> <span style="color: blue;">/></span></p><br /><p style="margin: 0px;"> <span style="color: blue;"><</span><span style="color: #a31515;">img</span> <span style="color: red;">src</span><span style="color: blue;">="../Images/help.gif"</span> <span style="color: blue;">/></span></p><br /><p style="margin: 0px;"> <span style="color: blue;"></</span><span style="color: #a31515;">div</span><span style="color: blue;">></span></p><br /><p style="margin: 0px;"> </p><br /><p style="margin: 0px;"> <span style="color: blue;"></</span><span style="color: #a31515;">form</span><span style="color: blue;">></span></p><br /><p style="margin: 0px;"> </p><br /><p style="margin: 0px;"> </p><br /><p style="margin: 0px;"> <span style="color: blue;"><</span><span style="color: #a31515;">script</span> <span style="color: red;">language</span><span style="color: blue;">=javascript></span></p><br /><p style="margin: 0px;"> $(document).ready(<span style="color: blue;">function</span>() {</p><br /><p style="margin: 0px;"> </p><br /><p style="margin: 0px;"> $(<span style="color: #a31515;">".ajax__htmleditor_editor_toptoolbar > div"</span>).append(<span style="color: #a31515;">'<img class="ajax__htmleditor_toolbar_button customButton" title="Images" id="btnImages" alt="" src="../images/picture.png" onclick="showImages()" />'</span>);</p><br /><p style="margin: 0px;"> </p><br /><p style="margin: 0px;"> </p><br /><p style="margin: 0px;"> </p><br /><p style="margin: 0px;"> $(<span style="color: #a31515;">"#images"</span>).mouseleave(hideImageList);</p><br /><p style="margin: 0px;"> $(<span style="color: #a31515;">"iframe"</span>).mouseover(hideImageList);</p><br /><p style="margin: 0px;"> </p><br /><p style="margin: 0px;"> $(<span style="color: #a31515;">"#images img"</span>).click(<span style="color: blue;">function</span>(e) {</p><br /><p style="margin: 0px;"> <span style="color: blue;">var</span> editor = $find(<span style="color: #a31515;">'Editor1'</span>)</p><br /><p style="margin: 0px;"> editor._editPanel._modePanels[0].insertHTML(<span style="color: #a31515;">"<img src='"</span> + $(<span style="color: blue;">this</span>).attr(<span style="color: #a31515;">"src"</span>) + <span style="color: #a31515;">"' />"</span>);</p><br /><p style="margin: 0px;"> hideImageList();</p><br /><p style="margin: 0px;"> }).css(<span style="color: #a31515;">"cursor"</span>, <span style="color: #a31515;">"pointer"</span>);</p><br /><p style="margin: 0px;"> </p><br /><p style="margin: 0px;"> $(<span style="color: #a31515;">".customButton"</span>).mouseenter(<span style="color: blue;">function</span>() {</p><br /><p style="margin: 0px;"> $(<span style="color: blue;">this</span>).addClass(<span style="color: #a31515;">"ajax__htmleditor_toolbar_button_hover"</span>);</p><br /><p style="margin: 0px;"> });</p><br /><p style="margin: 0px;"> </p><br /><p style="margin: 0px;"> $(<span style="color: #a31515;">".customButton"</span>).mouseleave(<span style="color: blue;">function</span>() {</p><br /><p style="margin: 0px;"> $(<span style="color: blue;">this</span>).removeClass(<span style="color: #a31515;">"ajax__htmleditor_toolbar_button_hover"</span>);</p><br /><p style="margin: 0px;"> });</p><br /><p style="margin: 0px;"> </p><br /><p style="margin: 0px;"> });</p><br /><p style="margin: 0px;"> </p><br /><p style="margin: 0px;"> <span style="color: blue;">function</span> showImages() {</p><br /><p style="margin: 0px;"> <span style="color: blue;">var</span> imgPos = $(<span style="color: #a31515;">"#btnImages"</span>).offset();</p><br /><p style="margin: 0px;"> $(<span style="color: #a31515;">"#images"</span>).css(<span style="color: #a31515;">"top"</span>, imgPos.top + 23).css(<span style="color: #a31515;">"left"</span>, imgPos.left);</p><br /><p style="margin: 0px;"> $(<span style="color: #a31515;">"#images"</span>).slideToggle(100);</p><br /><p style="margin: 0px;"> </p><br /><p style="margin: 0px;"> }</p><br /><p style="margin: 0px;"> </p><br /><p style="margin: 0px;"> <span style="color: blue;">function</span> hideImageList() {</p><br /><p style="margin: 0px;"> $(<span style="color: #a31515;">"#images"</span>).fadeOut(100);</p><br /><p style="margin: 0px;"> </p><br /><p style="margin: 0px;"> }</p><br /><p style="margin: 0px;"> </p><br /><p style="margin: 0px;"> <span style="color: blue;">function</span> modeChanged(e) {</p><br /><p style="margin: 0px;"> <span style="color: blue;">if</span> (e._activeMode == 0) {</p><br /><p style="margin: 0px;"> <span style="color: green;">// show custom buttons</span></p><br /><p style="margin: 0px;"> $(<span style="color: #a31515;">".customButton"</span>).show();</p><br /><p style="margin: 0px;"> } <span style="color: blue;">else</span> {</p><br /><p style="margin: 0px;"> $(<span style="color: #a31515;">".customButton"</span>).hide(); </p><br /><p style="margin: 0px;"> }</p><br /><p style="margin: 0px;"> </p><br /><p style="margin: 0px;"> }</p><br /><p style="margin: 0px;"> <span style="color: blue;"></</span><span style="color: #a31515;">script</span><span style="color: blue;">></span></p><br /><p style="margin: 0px;"><span style="color: blue;"></</span><span style="color: #a31515;">body</span><span style="color: blue;">></span></p><br /><p style="margin: 0px;"><span style="color: blue;"></</span><span style="color: #a31515;">html</span><span style="color: blue;">></span></p><br /><p style="margin: 0px;"> </p><br /><p style="margin: 0px;"> </p><br /></div>Lachlan Keownhttp://www.blogger.com/profile/14681765389224928298noreply@blogger.com0tag:blogger.com,1999:blog-7429901495286230670.post-80093637004963495902010-02-02T19:21:00.007+13:002010-02-05T08:31:37.961+13:00Online Javascript Hex viewer - LocalCheck it out, similar functionality to XVI32, but written entirely in Javascript. Uses new HTML5 methods to access local files, so no transfer of data to the server necessary. No easy means of writing file back to disk via Javascript yet, so view only for now, no edit :(<br /><br />Unfortunately only works on Firefox 3 at the moment, but expect other browsers will adopt these standards reasonably quickly.<br /><br />Can be a bit slow on old computers...<br /><div><br /></div><div><br /></div><br /><iframe src="http://d461534.u33.hostdone.com/hexviewJS/HexEdit.htm" style="width: 100%; height: 700px;"></iframe>Lachlan Keownhttp://www.blogger.com/profile/14681765389224928298noreply@blogger.com0tag:blogger.com,1999:blog-7429901495286230670.post-18432993185057753272009-11-02T09:45:00.004+13:002009-11-19T21:25:22.506+13:00Linq GetEnumerator.reset and new MS Chart charting controlsSo I thought I would try out the <a href="http://weblogs.asp.net/scottgu/archive/2008/11/24/new-asp-net-charting-control-lt-asp-chart-runat-quot-server-quot-gt.aspx">new Microsoft charting controls</a> for ASP.Net and winforms... <div><br /></div><div>Looks fantastic but when I came to do some runtime databinding to a simple linq collection (selecting an x and y value into an enumerable anonymous type...) it failed miserably with an obscure error message.</div><div><br /></div><div>With a bit of snooping I found that the problem is that the chart control always calls .Reset() on its IEnumerable(Of T) datasource before iterating the collection. Unfortunately the System.Linq.Enumerable.Iterator(Of TSource) that Linq returns as a concrete IEnumerable throws a "NotImplementedException" in its implementation of IEnumerable.Reset() - good one MS! (Check it out in <a href="http://www.red-gate.com/products/reflector/">Reflector</a>)</div><div><br /></div><div>Simple answer - call .ToArray() on your Linq collection and hey presto your Linq query will work as a chart datasource.</div><br /><div><b>UPDATE - </b>Click <a href="http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=507920">here </a>and vote for MS to fix this bug!!!</div>Lachlan Keownhttp://www.blogger.com/profile/14681765389224928298noreply@blogger.com0tag:blogger.com,1999:blog-7429901495286230670.post-36422765304576898192009-08-22T18:06:00.004+12:002009-09-02T09:48:44.288+12:00Retro Games ReleasedAs a programming "hobby" I have been writing retro 8-bit games - you can play the results here:<div><br /></div><div><span class="Apple-style-span" style=" border-collapse: collapse; color: rgb(51, 51, 51); font-family:arial;font-size:10px;"><div><a href="http://wiki.cpc-live.com/index.php/Robotron_6128">http://wiki.cpc-live.com/index.php/Robotron_6128</a></div><div><a href="http://wiki.cpc-live.com/index.php/Sewer_Rat">http://wiki.cpc-live.com/index.php/Sewer_Rat</a></div><div><br /></div><div><br /></div></span></div><br /><div style="display: none"><a href="http://www.csnzl.co.nz">Credit Services NZ Ltd</a> </div>Lachlan Keownhttp://www.blogger.com/profile/14681765389224928298noreply@blogger.com0tag:blogger.com,1999:blog-7429901495286230670.post-37554783518432537232009-03-13T13:59:00.005+13:002009-11-02T22:46:51.499+13:00An Improved MsgBox for Asp.NetOften times a simple messagebox is required at the client under ASP.Net. This is easy to do by sending back a JavaScript Alert(). However, this does not work so well if the user navigates around using the back and forward buttons, as they will see the message multiple times. Also, we would like our msgbox to be usable from AJAX enabled apps, so that an asynchronous postback can also trigger an alert.<div><br /></div><div>The below vb.net 3.5 code meets these criteria:</div><div><br /></div><br /><br /><div style=" background: white;font-family:Consolas;font-size:10pt;color:black;"><br /><pre style="margin: 0px;"><span style="color:blue;">Module</span> PageExtensions</pre><pre style="margin: 0px;"> </pre><pre style="margin: 0px;"> <span class="Apple-style-span" style="white-space: pre-wrap; "><extension()><extension()> <span class="Apple-style-span" style="white-space: pre; ">_</span></extension()></span></pre><pre style="margin: 0px;"> <span style="color:blue;">Public</span> <span style="color:blue;">Sub</span> MsgBox(<span style="color:blue;">ByVal</span> aPage <span style="color:blue;">As</span> Page, <span style="color:blue;">ByVal</span> aMessage <span style="color:blue;">As</span> <span style="color:blue;">String</span>)</pre><br /><pre style="margin: 0px;"> <span style="color:blue;">Dim</span> timeStr <span style="color:blue;">As</span> <span style="color:blue;">String</span> = <span style="background: lime;">"msgbox"</span> & <span style="color:blue;">Date</span>.Now().Ticks.ToString</pre><br /><pre style="margin: 0px;"> <span style="color:green;">' Set a cookie after showing alert so as will not re-show if back button or refresh is used.</span></pre><br /><pre style="margin: 0px;"> <span style="color:blue;">Dim</span> alertScript <span style="color:blue;">As</span> <span style="color:blue;">String</span> = <span style="background: lime;">"if (document.cookie.indexOf('"</span> & timeStr & <span style="background: lime;">"') == -1) {"</span></pre><pre style="margin: 0px;"> alertScript &= <span style="background: lime;">"alert("""</span> & aMessage & <span style="background: lime;">""");"</span></pre><pre style="margin: 0px;"> alertScript &= <span style="background: lime;">"document.cookie = '"</span> & timeStr & <span style="background: lime;">"=deleted';}"</span></pre><pre style="margin: 0px;"><br /></pre><pre style="margin: 0px;"> System.Web.UI.ScriptManager.RegisterStartupScript(aPage, <span style="color:blue;">GetType</span>(<span style="color:blue;">String</span>), aMessage, alertScript, <span style="color:blue;">True</span>)</pre><br /><pre style="margin: 0px;"> <span style="color:blue;">End</span> <span style="color:blue;">Sub</span></pre><pre style="margin: 0px;"><br /></pre><pre style="margin: 0px;"><span style="color:blue;">End</span> <span style="color:blue;">Module</span></pre><br /></div><br />To use within a page, you can now simply type:<div>MsgBox("Hello World"), just like in a Windows App.<br /><br />A temporary cookie is set for each msgbox invoked so that the msgbox will only be shown once. The method is an extension method of the Page class, so needs to be contained within a Module, or used without the <extension()> <extension()>attribute.<div><br /></div><div>Note also you will need a reference to System.Web.Extensions in your project.</div></extension()></extension()></div>Lachlan Keownhttp://www.blogger.com/profile/14681765389224928298noreply@blogger.com0tag:blogger.com,1999:blog-7429901495286230670.post-83635101551864020282008-10-01T21:56:00.002+13:002008-10-01T21:58:55.811+13:00EazyCaptcha.com Simple Captcha ServerAs a programming exercise I created a public captcha server that can be used to generate captchas without requiring any software libraries or complex programming by the developer.<br /><br />You can try it out here...<br /><br /><a href="http://www.eazycaptcha.com">www.eazycaptcha.com</a>Lachlan Keownhttp://www.blogger.com/profile/14681765389224928298noreply@blogger.com0tag:blogger.com,1999:blog-7429901495286230670.post-74155283802803815082008-09-28T16:52:00.002+13:002008-09-28T16:57:29.700+13:00VegePlanVegePlan is a pet .Net project I have been working on to get up to speed on AJAX and LINQ.<br /><br />It is a basic drag-n-drop vegetable garden planner and designer.<br /><br />I have openend it up for anyone to use here:<br /><br /><a href="http://www.vegeplan.com">www.vegeplan.com</a><br /><br />I have used the JavaScript Prototype library for the AJAX, and YUI and the Ajax Control Toolkit for the drag-n-drop and other UI functionality.Lachlan Keownhttp://www.blogger.com/profile/14681765389224928298noreply@blogger.com0tag:blogger.com,1999:blog-7429901495286230670.post-72393709090824434702008-05-08T20:55:00.010+12:002008-05-11T21:48:26.800+12:00Homebrew Google Position finder for Keywords / DomainSEO sites like <a href="http://www.seomoz.org/rank-checker">http://www.seomoz.org/rank-checker</a> are great if you want to check out how your page ranks in Google for a given set of keywords, but you can only perform 5 searches per day using the free account :(.<br />There are others out there that will let you perform lots of searches, but restrict you to the first 100 results.<br /><br />Apparently Google limits a given user to only so many (1000?) searches per day before having to use a CAPTCHA to perform subsequent searches, which I guess is understandable. <br /><br />But what if you want to do more than 5 but less than 1000? And you want to scan the first 1000 results, because your site is really crap and you want to see if it's getting better? Luckily ,it is trivial to replicate the behaviour of SEOMOZ using simple screen scraping techniques. If you use the code below and install it on your localhost IIS you will be able to perform (practically) unlimited SEO searches. With the caveat that Google may at their whim change their HTML of course and hence break it!<br /><br />Use at your own risk would be my advice.<br /><br />You will need the latest .Net Framework 3.5 to run this. Create a new web app project in Visual Studio Pro 2008 or Web Dev Express and make a new .aspx page. Copy and paste the code below and voila, it should all work! (Oh yeah, you'll need a couple of images too if you want the nice AJAX effect - I suggest <a href="http://www.ajaxload.info/">http://www.ajaxload.info/</a>) If you are wondering it's Open Source so feel free to make it work better for you!<br /><br /><br /><input type=button onclick="document.getElementById('hidden').style.display='';" value="Show Code" ></input> (Copy all to new .aspx page)<br /><br /><div id=hidden style="font-size: 50%;display:none;"><br /><p><font face='Monospace' size='-1'><br /><%<font color='Blue'>@</font><font color='Black'> </font><font color='#a31515'>Import</font><font color='Black'> </font><font color='Red'>Namespace</font><font color='Blue'>="System.IO"</font><font color='Black'> %><br/><br /><%</font><font color='Blue'>@</font><font color='Black'> </font><font color='#a31515'>Import</font><font color='Black'> </font><font color='Red'>Namespace</font><font color='Blue'>="System.Net"</font><font color='Black'> %><br/><br /><br/><br /><%</font><font color='Blue'>@</font><font color='Black'> </font><font color='#a31515'>Page</font><font color='Black'> </font><font color='Red'>Language</font><font color='Blue'>="vb"</font><font color='Black'> </font><font color='Red'>AutoEventWireup</font><font color='Blue'>="false"</font><font color='Black'> </font><font color='Red'>EnableViewState</font><font color='Blue'>="false"</font><font color='Black'> %><br/><br /><br/><br /></font><font color='Blue'><!</font><font color='#a31515'>DOCTYPE</font><font color='Black'> </font><font color='Red'>html</font><font color='Black'> </font><font color='Red'>PUBLIC</font><font color='Black'> </font><font color='Blue'>"-//W3C//DTD XHTML 1.0 Transitional//EN"</font><font color='Black'> </font><font color='Blue'>"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><br/><br /><br/><br /><</font><font color='#a31515'>script</font><font color='Black'> </font><font color='Red'>runat</font><font color='Blue'>="server"><br/><br /><br/><br /><br/><br /><br/><br /></font><font color='Black'> </font><font color='Blue'>Private</font><font color='Black'> _baseURL </font><font color='Blue'>As</font><font color='Black'> </font><font color='Blue'>String</font><font color='Black'> = "http://www.google.co.nz/search?num=100"<br/><br /> <br/><br /> </font><font color='Blue'>Protected</font><font color='Black'> </font><font color='Blue'>Sub</font><font color='Black'> btnGo_Click(</font><font color='Blue'>ByVal</font><font color='Black'> sender </font><font color='Blue'>As</font><font color='Black'> </font><font color='Blue'>Object</font><font color='Black'>, </font><font color='Blue'>ByVal</font><font color='Black'> e </font><font color='Blue'>As</font><font color='Black'> EventArgs) </font><font color='Blue'>Handles</font><font color='Black'> btnGo.Click<br/><br /> </font><font color='Blue'>Dim</font><font color='Black'> baseurl </font><font color='Blue'>As</font><font color='Black'> </font><font color='Blue'>String</font><font color='Black'> = _baseURL & "&q=" & </font><font color='Blue'>Me</font><font color='Black'>.txtKeywords.Text.Trim<br/><br /><br/><br /> </font><font color='Blue'>Dim</font><font color='Black'> numTries </font><font color='Blue'>As</font><font color='Black'> Int32 = Math.Min(</font><font color='Blue'>CInt</font><font color='Black'>(</font><font color='Blue'>Me</font><font color='Black'>.cbxResults.Text) \ 100, 10)<br/><br /><br/><br /><br/><br /> </font><font color='Blue'>For</font><font color='Black'> iTry </font><font color='Blue'>As</font><font color='Black'> Int32 = 1 </font><font color='Blue'>To</font><font color='Black'> numTries<br/><br /> </font><font color='Blue'>Dim</font><font color='Black'> url </font><font color='Blue'>As</font><font color='Black'> </font><font color='Blue'>String</font><font color='Black'> = baseurl<br/><br /> </font><font color='Blue'>If</font><font color='Black'> iTry > 1 </font><font color='Blue'>Then<br/><br /></font><font color='Black'> url &= "&start=" & ((iTry - 1) * 100).ToString<br/><br /> </font><font color='Blue'>End</font><font color='Black'> </font><font color='Blue'>If<br/><br /><br/><br /></font><font color='Black'> </font><font color='Blue'>Dim</font><font color='Black'> results </font><font color='Blue'>As</font><font color='Black'> </font><font color='Blue'>String</font><font color='Black'> = </font><font color='Blue'>Me</font><font color='Black'>.readHTMLPage(url)<br/><br /><br/><br /> </font><font color='Blue'>If</font><font color='Black'> results.ToLower.Contains(</font><font color='Blue'>Me</font><font color='Black'>.txtDomain.Text.Trim.ToLower) </font><font color='Blue'>Then<br/><br /></font><font color='Black'> </font><font color='Blue'>Me</font><font color='Black'>.showResults(results, (iTry - 1) * 100, url)<br/><br /> </font><font color='Blue'>Return<br/><br /></font><font color='Black'> </font><font color='Blue'>End</font><font color='Black'> </font><font color='Blue'>If<br/><br /></font><font color='Black'> </font><font color='Blue'>Next<br/><br /><br/><br /></font><font color='Black'> </font><font color='Green'>' If got here then not found<br/><br /></font><font color='Black'> </font><font color='Blue'>Me</font><font color='Black'>.lblResult.Text = "Not found..."<br/><br /> </font><font color='Blue'>Me</font><font color='Black'>.lblResult.Visible = </font><font color='Blue'>True<br/><br /></font><font color='Black'> </font><font color='Blue'>End</font><font color='Black'> </font><font color='Blue'>Sub<br/><br /><br/><br /></font><font color='Black'> </font><font color='Blue'>Private</font><font color='Black'> </font><font color='Blue'>Sub</font><font color='Black'> showResults(</font><font color='Blue'>ByVal</font><font color='Black'> someHTML </font><font color='Blue'>As</font><font color='Black'> </font><font color='Blue'>String</font><font color='Black'>, </font><font color='Blue'>ByVal</font><font color='Black'> addResults </font><font color='Blue'>As</font><font color='Black'> Int32, </font><font color='Blue'>ByVal</font><font color='Black'> googleURL </font><font color='Blue'>As</font><font color='Black'> </font><font color='Blue'>String</font><font color='Black'>)<br/><br /><br/><br /> </font><font color='Blue'>Dim</font><font color='Black'> googleResults </font><font color='Blue'>As</font><font color='Black'> </font><font color='Blue'>New</font><font color='Black'> List(</font><font color='Blue'>Of</font><font color='Black'> </font><font color='Blue'>String</font><font color='Black'>)(someHTML.Split(</font><font color='Blue'>New</font><font color='Black'> </font><font color='Blue'>String</font><font color='Black'>() {"<div class=g>", "<div class=g "}, StringSplitOptions.RemoveEmptyEntries))<br/><br /><br/><br /> </font><font color='Blue'>If</font><font color='Black'> googleResults.Count > 0 </font><font color='Blue'>Then<br/><br /></font><font color='Black'> googleResults.RemoveAt(0) </font><font color='Green'>' Remove the header rubbish from google<br/><br /></font><font color='Black'> </font><font color='Blue'>End</font><font color='Black'> </font><font color='Blue'>If<br/><br /><br/><br /></font><font color='Black'> </font><font color='Blue'>Dim</font><font color='Black'> resultNum </font><font color='Blue'>As</font><font color='Black'> Int32 = 1<br/><br /><br/><br /> </font><font color='Blue'>For</font><font color='Black'> </font><font color='Blue'>Each</font><font color='Black'> aResult </font><font color='Blue'>As</font><font color='Black'> </font><font color='Blue'>String</font><font color='Black'> </font><font color='Blue'>In</font><font color='Black'> googleResults<br/><br /> </font><font color='Blue'>If</font><font color='Black'> aResult.ToLower.Contains(</font><font color='Blue'>Me</font><font color='Black'>.txtDomain.Text.Trim.ToLower) </font><font color='Blue'>Then<br/><br /></font><font color='Black'> </font><font color='Blue'>Me</font><font color='Black'>.lblResult.Text = "Result found at position " & (addResults + resultNum).ToString()<br/><br /> </font><font color='Blue'>Me</font><font color='Black'>.lblResult.Visible = </font><font color='Blue'>True<br/><br /><br/><br /></font><font color='Black'> </font><font color='Blue'>Dim</font><font color='Black'> link </font><font color='Blue'>As</font><font color='Black'> </font><font color='Blue'>New</font><font color='Black'> HyperLink()<br/><br /> link.NavigateUrl = googleURL<br/><br /> link.Text = googleURL<br/><br /><br/><br /> </font><font color='Blue'>Me</font><font color='Black'>.panelResults.Controls.Add(link)<br/><br /> </font><font color='Blue'>Me</font><font color='Black'>.panelResults.Controls.Add(</font><font color='Blue'>New</font><font color='Black'> LiteralControl("<br /><hr />"))<br/><br /><br/><br /> </font><font color='Green'>' Show the resulting text<br/><br /></font><font color='Black'> </font><font color='Blue'>If</font><font color='Black'> aResult.ToLower.Contains("<br clear=""all""/>") </font><font color='Blue'>Then<br/><br /></font><font color='Black'> </font><font color='Green'>' Remove below that<br/><br /></font><font color='Black'> aResult = Split(aResult, "<br clear=""all""/>", , CompareMethod.Text)(0)<br/><br /> </font><font color='Blue'>End</font><font color='Black'> </font><font color='Blue'>If<br/><br /></font><font color='Black'> aResult = Replace(aResult, "onmousedown", "onmousedownX") </font><font color='Green'>' Disable on mousedown<br/><br /></font><font color='Black'> </font><font color='Blue'>Dim</font><font color='Black'> lit </font><font color='Blue'>As</font><font color='Black'> </font><font color='Blue'>New</font><font color='Black'> LiteralControl(aResult)<br/><br /> </font><font color='Blue'>Me</font><font color='Black'>.panelResults.Controls.Add(lit)<br/><br /> </font><font color='Blue'>Return<br/><br /></font><font color='Black'> </font><font color='Blue'>End</font><font color='Black'> </font><font color='Blue'>If<br/><br /><br/><br /></font><font color='Black'> resultNum += 1<br/><br /> </font><font color='Blue'>Next<br/><br /><br/><br /></font><font color='Black'> </font><font color='Blue'>End</font><font color='Black'> </font><font color='Blue'>Sub<br/><br /><br/><br /></font><font color='Black'> </font><font color='Blue'>Private</font><font color='Black'> </font><font color='Blue'>Function</font><font color='Black'> readHTMLPage(</font><font color='Blue'>ByVal</font><font color='Black'> url </font><font color='Blue'>As</font><font color='Black'> </font><font color='Blue'>String</font><font color='Black'>) </font><font color='Blue'>As</font><font color='Black'> </font><font color='Blue'>String<br/><br /></font><font color='Black'> </font><font color='Blue'>Dim</font><font color='Black'> result </font><font color='Blue'>As</font><font color='Black'> </font><font color='Blue'>String<br/><br /></font><font color='Black'> </font><font color='Green'>'Threading.Thread.Sleep(3000)<br/><br /><br/><br /></font><font color='Black'> </font><font color='Blue'>Dim</font><font color='Black'> objRequest </font><font color='Blue'>As</font><font color='Black'> WebRequest = HttpWebRequest.Create(url)<br/><br /><br/><br /> objRequest.Credentials = CredentialCache.DefaultCredentials<br/><br /><br/><br /> </font><font color='Blue'>Dim</font><font color='Black'> objResponse </font><font color='Blue'>As</font><font color='Black'> WebResponse = objRequest.GetResponse()<br/><br /><br/><br /> </font><font color='Blue'>Using</font><font color='Black'> sr </font><font color='Blue'>As</font><font color='Black'> </font><font color='Blue'>New</font><font color='Black'> StreamReader(objResponse.GetResponseStream())<br/><br /> result = sr.ReadToEnd()<br/><br /><br/><br /> sr.Close()<br/><br /> </font><font color='Blue'>End</font><font color='Black'> </font><font color='Blue'>Using<br/><br /><br/><br /></font><font color='Black'> </font><font color='Blue'>Return</font><font color='Black'> result<br/><br /><br/><br /> </font><font color='Blue'>End</font><font color='Black'> </font><font color='Blue'>Function<br/><br /></</font><font color='#a31515'>script</font><font color='Blue'>><br/><br /><br/><br /><</font><font color='#a31515'>html</font><font color='Black'> </font><font color='Red'>xmlns</font><font color='Blue'>="http://www.w3.org/1999/xhtml"</font><font color='Black'> </font><font color='Blue'>><br/><br /><</font><font color='#a31515'>head</font><font color='Black'> </font><font color='Red'>runat</font><font color='Blue'>="server"><br/><br /></font><font color='Black'> </font><font color='Blue'><</font><font color='#a31515'>title</font><font color='Blue'>></font><font color='Black'>Untitled Page</font><font color='Blue'></</font><font color='#a31515'>title</font><font color='Blue'>><br/><br /></font><font color='Black'> </font><font color='Blue'><</font><font color='#a31515'>style</font><font color='Black'> </font><font color='Red'>type</font><font color='Blue'>="text/css"><br/><br /></font><font color='Black'> </font><font color='#a31515'>.style1<br/><br /></font><font color='Black'> {<br/><br /> </font><font color='Red'>width</font><font color='Black'>: </font><font color='Blue'>255px</font><font color='Black'>;<br/><br /> }<br/><br /> </font><font color='#a31515'>.style2<br/><br /></font><font color='Black'> {<br/><br /> </font><font color='Red'>font-size</font><font color='Black'>: </font><font color='Blue'>x-large</font><font color='Black'>;<br/><br /> }<br/><br /> </font><font color='Blue'></</font><font color='#a31515'>style</font><font color='Blue'>><br/><br /></font><font color='Black'> </font><font color='Blue'><</font><font color='#a31515'>style</font><font color='Black'> </font><font color='Red'>type</font><font color='Blue'>="text/css"><br/><br /></font><font color='Black'> </font><font color='#a31515'>div</font><font color='Black'>,</font><font color='#a31515'>td</font><font color='Black'>,</font><font color='#a31515'>.n</font><font color='Black'> </font><font color='#a31515'>a</font><font color='Black'>,</font><font color='#a31515'>.n</font><font color='Black'> </font><font color='#a31515'>a:visited</font><font color='Black'>{</font><font color='Red'>color</font><font color='Black'>:</font><font color='Blue'>#000</font><font color='Black'>}</font><font color='#a31515'>.ts</font><font color='Black'> </font><font color='#a31515'>td</font><font color='Black'>,</font><font color='#a31515'>.tc</font><font color='Black'>{</font><font color='Red'>padding</font><font color='Black'>:</font><font color='Blue'>0</font><font color='Black'>}</font><font color='#a31515'>.ts</font><font color='Black'>,</font><font color='#a31515'>.tb</font><font color='Black'>{</font><font color='Red'>border-collapse</font><font color='Black'>:</font><font color='Blue'>collapse</font><font color='Black'>}</font><font color='#a31515'>.ti</font><font color='Black'>,</font><font color='#a31515'>.bl</font><font color='Black'>{</font><font color='Red'>display</font><font color='Black'>:</font><font color='Blue'>inline</font><font color='Black'>}</font><font color='#a31515'>.ti</font><font color='Black'>{</font><font color='Red'>display</font><font color='Black'>:</font><font color='Blue'>inline-table</font><font color='Black'>}</font><font color='#a31515'>.f</font><font color='Black'>,</font><font color='#a31515'>.m</font><font color='Black'>{</font><font color='Red'>color</font><font color='Black'>:</font><font color='Blue'>#666</font><font color='Black'>}</font><font color='#a31515'>.flc</font><font color='Black'>,</font><font color='#a31515'>a.fl</font><font color='Black'>{</font><font color='Red'>color</font><font color='Black'>:</font><font color='Blue'>#77c</font><font color='Black'>}</font><font color='#a31515'>a</font><font color='Black'>,</font><font color='#a31515'>.w</font><font color='Black'>,</font><font color='#a31515'>.q:visited</font><font color='Black'>,</font><font color='#a31515'>.q:active</font><font color='Black'>,</font><font color='#a31515'>.q</font><font color='Black'>,</font><font color='#a31515'>.b</font><font color='Black'> </font><font color='#a31515'>a</font><font color='Black'>,</font><font color='#a31515'>.b</font><font color='Black'> </font><font color='#a31515'>a:visited</font><font color='Black'>,</font><font color='#a31515'>.mblink:visited</font><font color='Black'>{</font><font color='Red'>color</font><font color='Black'>:</font><font color='Blue'>#00c</font><font color='Black'>}</font><font color='#a31515'>a:visited</font><font color='Black'>{</font><font color='Red'>color</font><font color='Black'>:</font><font color='Blue'>#551a8b</font><font color='Black'>}</font><font color='#a31515'>a:active</font><font color='Black'>{</font><font color='Red'>color</font><font color='Black'>:</font><font color='Blue'>red</font><font color='Black'>}</font><font color='#a31515'>.t</font><font color='Black'>{</font><font color='Red'>background</font><font color='Black'>:</font><font color='Blue'>#d5ddf3</font><font color='Black'>;</font><font color='Red'>color</font><font color='Black'>:</font><font color='Blue'>#000</font><font color='Black'>;</font><font color='Red'>padding</font><font color='Black'>:</font><font color='Blue'>5px</font><font color='Black'> </font><font color='Blue'>1px</font><font color='Black'> </font><font color='Blue'>4px</font><font color='Black'>}</font><font color='#a31515'>.bb</font><font color='Black'>{</font><font color='Red'>border-bottom</font><font color='Black'>:</font><font color='Blue'>1px</font><font color='Black'> </font><font color='Blue'>solid</font><font color='Black'> </font><font color='Blue'>#36c</font><font color='Black'>}</font><font color='#a31515'>.bt</font><font color='Black'>{</font><font color='Red'>border-top</font><font color='Black'>:</font><font color='Blue'>1px</font><font color='Black'> </font><font color='Blue'>solid</font><font color='Black'> </font><font color='Blue'>#36c</font><font color='Black'>}</font><font color='#a31515'>.j</font><font color='Black'>{</font><font color='Red'>width</font><font color='Black'>:</font><font color='Blue'>34em</font><font color='Black'>}</font><font color='#a31515'>.h</font><font color='Black'>{</font><font color='Red'>color</font><font color='Black'>:</font><font color='Blue'>#36c</font><font color='Black'>}</font><font color='#a31515'>.i</font><font color='Black'>{</font><font color='Red'>color</font><font color='Black'>:</font><font color='Blue'>#a90a08</font><font color='Black'>}</font><font color='#a31515'>.a</font><font color='Black'>{</font><font color='Red'>color</font><font color='Black'>:</font><font color='Blue'>green</font><font color='Black'>}</font><font color='#a31515'>.z</font><font color='Black'>{</font><font color='Red'>display</font><font color='Black'>:</font><font color='Blue'>none</font><font color='Black'>}</font><font color='#a31515'>div.n</font><font color='Black'>{</font><font color='Red'>margin-top</font><font color='Black'>:</font><font color='Blue'>1ex</font><font color='Black'>}</font><font color='#a31515'>.n</font><font color='Black'> </font><font color='#a31515'>a</font><font color='Black'>,</font><font color='#a31515'>.n</font><font color='Black'> </font><font color='#a31515'>.i</font><font color='Black'>{</font><font color='Red'>font-size</font><font color='Black'>:</font><font color='Blue'>10pt</font><font color='Black'>}</font><font color='#a31515'>.n</font><font color='Black'> </font><font color='#a31515'>.i</font><font color='Black'>,</font><font color='#a31515'>.b</font><font color='Black'> </font><font color='#a31515'>a</font><font color='Black'>{</font><font color='Red'>font-weight</font><font color='Black'>:</font><font color='Blue'>bold</font><font color='Black'>}</font><font color='#a31515'>.b</font><font color='Black'> </font><font color='#a31515'>a</font><font color='Black'>{</font><font color='Red'>font-size</font><font color='Black'>:</font><font color='Blue'>12pt</font><font color='Black'>}</font><font color='#a31515'>.std</font><font color='Black'>{</font><font color='Red'>font-size</font><font color='Black'>:</font><font color='Blue'>82%</font><font color='Black'>}</font><font color='#a31515'>#np</font><font color='Black'>,</font><font color='#a31515'>#nn</font><font color='Black'>,</font><font color='#a31515'>.nr</font><font color='Black'>,</font><font color='#a31515'>#logo</font><font color='Black'> </font><font color='#a31515'>span</font><font color='Black'>,</font><font color='#a31515'>.ch</font><font color='Black'>{</font><font color='Red'>cursor</font><font color='Black'>:</font><font color='Blue'>pointer</font><font color='Black'>;</font><font color='Red'>cursor</font><font color='Black'>:</font><font color='Blue'>hand</font><font color='Black'>}</font><font color='#a31515'>.ta</font><font color='Black'>{</font><font color='Red'>padding</font><font color='Black'>:</font><font color='Blue'>3px</font><font color='Black'> </font><font color='Blue'>3px</font><font color='Black'> </font><font color='Blue'>3px</font><font color='Black'> </font><font color='Blue'>5px</font><font color='Black'>}</font><font color='#a31515'>#tpa2</font><font color='Black'>,</font><font color='#a31515'>#tpa3</font><font color='Black'>{</font><font color='Red'>padding-top</font><font color='Black'>:</font><font color='Blue'>9px</font><font color='Black'>}</font><font color='#a31515'>#gbar</font><font color='Black'>{</font><font color='Red'>float</font><font color='Black'>:</font><font color='Blue'>left</font><font color='Black'>;</font><font color='Red'>height</font><font color='Black'>:</font><font color='Blue'>22px</font><font color='Black'>;</font><font color='Red'>padding-left</font><font color='Black'>:</font><font color='Blue'>2px</font><font color='Black'>}</font><font color='#a31515'>.gbh</font><font color='Black'>,</font><font color='#a31515'>.gb2</font><font color='Black'> </font><font color='#a31515'>div</font><font color='Black'>{</font><font color='Red'>border-top</font><font color='Black'>:</font><font color='Blue'>1px</font><font color='Black'> </font><font color='Blue'>solid</font><font color='Black'> </font><font color='Blue'>#c9d7f1</font><font color='Black'>;</font><font color='Red'>font-size</font><font color='Black'>:</font><font color='Blue'>0</font><font color='Black'>;</font><font color='Red'>height</font><font color='Black'>:</font><font color='Blue'>0</font><font color='Black'>}</font><font color='#a31515'>.gbh</font><font color='Black'>{</font><font color='Red'>position</font><font color='Black'>:</font><font color='Blue'>absolute</font><font color='Black'>;</font><font color='Red'>top</font><font color='Black'>:</font><font color='Blue'>24px</font><font color='Black'>;</font><font color='Red'>width</font><font color='Black'>:</font><font color='Blue'>100%</font><font color='Black'>}</font><font color='#a31515'>.gb2</font><font color='Black'> </font><font color='#a31515'>div</font><font color='Black'>{</font><font color='Red'>margin</font><font color='Black'>:</font><font color='Blue'>5px</font><font color='Black'>}</font><font color='#a31515'>#gbi</font><font color='Black'>{</font><font color='Red'>background</font><font color='Black'>:</font><font color='Blue'>#fff</font><font color='Black'>;</font><font color='Red'>border</font><font color='Black'>:</font><font color='Blue'>1px</font><font color='Black'> </font><font color='Blue'>solid</font><font color='Black'>;</font><font color='Red'>border-color</font><font color='Black'>:</font><font color='Blue'>#c9d7f1</font><font color='Black'> </font><font color='Blue'>#36c</font><font color='Black'> </font><font color='Blue'>#36c</font><font color='Black'> </font><font color='Blue'>#a2bae7</font><font color='Black'>;</font><font color='Red'>font-size</font><font color='Black'>:</font><font color='Blue'>13px</font><font color='Black'>;</font><font color='Red'>top</font><font color='Black'>:</font><font color='Blue'>24px</font><font color='Black'>;</font><font color='Red'>z-index</font><font color='Black'>:</font><font color='Blue'>1000</font><font color='Black'>}</font><font color='#a31515'>#guser</font><font color='Black'>{</font><font color='Red'>padding-bottom</font><font color='Black'>:</font><font color='Blue'>7px</font><font color='Black'> </font><font color='Blue'>!important</font><font color='Black'>}</font><font color='#a31515'>#gbar</font><font color='Black'>,</font><font color='#a31515'>#guser</font><font color='Black'>{</font><font color='Red'>font-size</font><font color='Black'>:</font><font color='Blue'>13px</font><font color='Black'>;</font><font color='Red'>padding-top</font><font color='Black'>:</font><font color='Blue'>1px</font><font color='Black'> </font><font color='Blue'>!important</font><font color='Black'>}</font><font color='Blue'>@media</font><font color='Black'> all{</font><font color='#a31515'>.gb1</font><font color='Black'>,</font><font color='#a31515'>.gb3</font><font color='Black'>{</font><font color='Red'>height</font><font color='Black'>:</font><font color='Blue'>22px</font><font color='Black'>;</font><font color='Red'>margin-right</font><font color='Black'>:</font><font color='Blue'>.73em</font><font color='Black'>;</font><font color='Red'>vertical-align</font><font color='Black'>:</font><font color='Blue'>top</font><font color='Black'>}</font><font color='#a31515'>.gb2</font><font color='Black'> </font><font color='#a31515'>a</font><font color='Black'>,</font><font color='#a31515'>.gb2</font><font color='Black'> </font><font color='#a31515'>b</font><font color='Black'>{</font><font color='Red'>display</font><font color='Black'>:</font><font color='Blue'>block</font><font color='Black'>;</font><font color='Red'>padding</font><font color='Black'>:</font><font color='Blue'>.2em</font><font color='Black'> </font><font color='Blue'>.5em</font><font color='Black'>}}</font><font color='#a31515'>#gbi</font><font color='Black'>,</font><font color='#a31515'>.gb2</font><font color='Black'>{</font><font color='Red'>display</font><font color='Black'>:</font><font color='Blue'>none</font><font color='Black'>;</font><font color='Red'>position</font><font color='Black'>:</font><font color='Blue'>absolute</font><font color='Black'>;</font><font color='Red'>width</font><font color='Black'>:</font><font color='Blue'>8em</font><font color='Black'>}</font><font color='#a31515'>.gb2</font><font color='Black'>{</font><font color='Red'>z-index</font><font color='Black'>:</font><font color='Blue'>1001</font><font color='Black'>}</font><font color='#a31515'>#gbar</font><font color='Black'> </font><font color='#a31515'>a</font><font color='Black'>{</font><font color='Red'>color</font><font color='Black'>:</font><font color='Blue'>#00c</font><font color='Black'>}</font><font color='#a31515'>.gb2</font><font color='Black'> </font><font color='#a31515'>a</font><font color='Black'>,</font><font color='#a31515'>.gb3</font><font color='Black'> </font><font color='#a31515'>a</font><font color='Black'>{</font><font color='Red'>text-decoration</font><font color='Black'>:</font><font color='Blue'>none</font><font color='Black'>}</font><font color='#a31515'>#gbar</font><font color='Black'> </font><font color='#a31515'>.gb2</font><font color='Black'> </font><font color='#a31515'>a:hover</font><font color='Black'>{</font><font color='Red'>background</font><font color='Black'>:</font><font color='Blue'>#36c</font><font color='Black'>;</font><font color='Red'>color</font><font color='Black'>:</font><font color='Blue'>#fff</font><font color='Black'>;</font><font color='Red'>display</font><font color='Black'>:</font><font color='Blue'>block</font><font color='Black'>}</font><font color='#a31515'>.sl</font><font color='Black'>,</font><font color='#a31515'>.r</font><font color='Black'>{</font><font color='Red'>display</font><font color='Black'>:</font><font color='Blue'>inline</font><font color='Black'>;</font><font color='Red'>font-weight</font><font color='Black'>:</font><font color='Blue'>normal</font><font color='Black'>;</font><font color='Red'>margin</font><font color='Black'>:</font><font color='Blue'>0</font><font color='Black'>}</font><font color='#a31515'>.sl</font><font color='Black'>{</font><font color='Red'>font-size</font><font color='Black'>:</font><font color='Blue'>84%</font><font color='Black'>}</font><font color='#a31515'>.r</font><font color='Black'>{</font><font color='Red'>font-size</font><font color='Black'>:</font><font color='Blue'>100%</font><font color='Black'>}</font><font color='#a31515'>.e</font><font color='Black'>{</font><font color='Red'>margin</font><font color='Black'>:</font><font color='Blue'>.75em</font><font color='Black'> </font><font color='Blue'>0</font><font color='Black'>}</font><font color='#a31515'>.m</font><font color='Black'>{</font><font color='Red'>font-size</font><font color='Black'>:</font><font color='Blue'>84%</font><font color='Black'>}</font><font color='#a31515'>.sm</font><font color='Black'>{</font><font color='Red'>display</font><font color='Black'>:</font><font color='Blue'>block</font><font color='Black'>;</font><font color='Red'>margin</font><font color='Black'>:</font><font color='Blue'>0</font><font color='Black'>;</font><font color='Red'>margin-left</font><font color='Black'>:</font><font color='Blue'>40px</font><font color='Black'>}</font><font color='#a31515'>.slk</font><font color='Black'> </font><font color='#a31515'>td</font><font color='Black'>{</font><font color='Red'>padding-top</font><font color='Black'>:</font><font color='Blue'>5px</font><font color='Black'>;</font><font color='Red'>padding-left</font><font color='Black'>:</font><font color='Blue'>40px</font><font color='Black'>;</font><font color='Red'>vertical-align</font><font color='Black'>:</font><font color='Blue'>top</font><font color='Black'>;</font><font color='Red'>font-size</font><font color='Black'>:</font><font color='Blue'>84%</font><font color='Black'>}</font><font color='#a31515'>.slk</font><font color='Black'> </font><font color='#a31515'>div</font><font color='Black'>{</font><font color='Red'>text-indent</font><font color='Black'>:</font><font color='Blue'>-10px</font><font color='Black'>;</font><font color='Red'>padding-left</font><font color='Black'>:</font><font color='Blue'>10px</font><font color='Black'>}</font><font color='#a31515'>.csb</font><font color='Black'>,</font><font color='#a31515'>.n</font><font color='Black'> </font><font color='#a31515'>div</font><font color='Black'>,</font><font color='#a31515'>#logo</font><font color='Black'> </font><font color='#a31515'>span</font><font color='Black'>{</font><font color='Red'>background</font><font color='Black'>:</font><font color='Blue'>url(/images/nav_logo3.png)</font><font color='Black'> </font><font color='Blue'>no-repeat</font><font color='Black'>;</font><font color='Red'>height</font><font color='Black'>:</font><font color='Blue'>26px</font><font color='Black'>;</font><font color='Red'>overflow</font><font color='Black'>:</font><font color='Blue'>hidden</font><font color='Black'>}</font><font color='#a31515'>.n</font><font color='Black'> </font><font color='#a31515'>.nr</font><font color='Black'>{</font><font color='Red'>background-position</font><font color='Black'>:</font><font color='Blue'>-60px</font><font color='Black'> </font><font color='Blue'>0</font><font color='Black'>;</font><font color='Red'>width</font><font color='Black'>:</font><font color='Blue'>16px</font><font color='Black'>}</font><font color='#a31515'>#np</font><font color='Black'>{</font><font color='Red'>width</font><font color='Black'>:</font><font color='Blue'>44px</font><font color='Black'>}</font><font color='#a31515'>#nf</font><font color='Black'>{</font><font color='Red'>background-position</font><font color='Black'>:</font><font color='Blue'>-26px</font><font color='Black'> </font><font color='Blue'>0</font><font color='Black'>;</font><font color='Red'>width</font><font color='Black'>:</font><font color='Blue'>18px</font><font color='Black'>}</font><font color='#a31515'>#nc</font><font color='Black'>{</font><font color='Red'>background-position</font><font color='Black'>:</font><font color='Blue'>-44px</font><font color='Black'> </font><font color='Blue'>0</font><font color='Black'>;</font><font color='Red'>width</font><font color='Black'>:</font><font color='Blue'>16px</font><font color='Black'>}</font><font color='#a31515'>#nn</font><font color='Black'>{</font><font color='Red'>margin-right</font><font color='Black'>:</font><font color='Blue'>34px</font><font color='Black'>;</font><font color='Red'>width</font><font color='Black'>:</font><font color='Blue'>66px</font><font color='Black'>}</font><font color='#a31515'>#nl</font><font color='Black'>{</font><font color='Red'>width</font><font color='Black'>:</font><font color='Blue'>46px</font><font color='Black'>}</font><font color='#a31515'>#nn</font><font color='Black'>,</font><font color='#a31515'>#nl</font><font color='Black'>{</font><font color='Red'>background-position</font><font color='Black'>:</font><font color='Blue'>-76px</font><font color='Black'> </font><font color='Blue'>0</font><font color='Black'>}</font><font color='#a31515'>#logo</font><font color='Black'>{</font><font color='Red'>display</font><font color='Black'>:</font><font color='Blue'>block</font><font color='Black'>;</font><font color='Red'>height</font><font color='Black'>:</font><font color='Blue'>52px</font><font color='Black'>;</font><font color='Red'>margin</font><font color='Black'>:</font><font color='Blue'>13px</font><font color='Black'> </font><font color='Blue'>0</font><font color='Black'> </font><font color='Blue'>7px</font><font color='Black'>;</font><font color='Red'>overflow</font><font color='Black'>:</font><font color='Blue'>hidden</font><font color='Black'>;</font><font color='Red'>position</font><font color='Black'>:</font><font color='Blue'>relative</font><font color='Black'>;</font><font color='Red'>width</font><font color='Black'>:</font><font color='Blue'>150px</font><font color='Black'>}</font><font color='#a31515'>#logo</font><font color='Black'> </font><font color='#a31515'>span</font><font color='Black'>{</font><font color='Red'>background-position</font><font color='Black'>:</font><font color='Blue'>0</font><font color='Black'> </font><font color='Blue'>-26px</font><font color='Black'>;</font><font color='Red'>height</font><font color='Black'>:</font><font color='Blue'>100%</font><font color='Black'>;</font><font color='Red'>left</font><font color='Black'>:</font><font color='Blue'>0</font><font color='Black'>;</font><font color='Red'>position</font><font color='Black'>:</font><font color='Blue'>absolute</font><font color='Black'>;</font><font color='Red'>top</font><font color='Black'>:</font><font color='Blue'>0</font><font color='Black'>;</font><font color='Red'>width</font><font color='Black'>:</font><font color='Blue'>100%</font><font color='Black'>}</font><font color='#a31515'>.ss</font><font color='Black'>{</font><font color='Red'>background</font><font color='Black'>:</font><font color='Blue'>url(/images/nav_logo3.png)</font><font color='Black'> </font><font color='Blue'>no-repeat</font><font color='Black'>;</font><font color='Red'>background-position</font><font color='Black'>:</font><font color='Blue'>0</font><font color='Black'> </font><font color='Blue'>-87px</font><font color='Black'>;</font><font color='Red'>display</font><font color='Black'>:</font><font color='Blue'>block</font><font color='Black'>;</font><font color='Red'>left</font><font color='Black'>:</font><font color='Blue'>0</font><font color='Black'>;</font><font color='Red'>overflow</font><font color='Black'>:</font><font color='Blue'>hidden</font><font color='Black'>;</font><font color='Red'>position</font><font color='Black'>:</font><font color='Blue'>absolute</font><font color='Black'>;</font><font color='Red'>top</font><font color='Black'>:</font><font color='Blue'>0</font><font color='Black'>}</font><font color='#a31515'>.cps</font><font color='Black'>{</font><font color='Red'>overflow</font><font color='Black'>:</font><font color='Blue'>hidden</font><font color='Black'>;</font><font color='Red'>height</font><font color='Black'>:</font><font color='Blue'>18px</font><font color='Black'>;</font><font color='Red'>width</font><font color='Black'>:</font><font color='Blue'>114px</font><font color='Black'>}</font><font color='#a31515'>.mbi</font><font color='Black'>{</font><font color='Red'>display</font><font color='Black'>:</font><font color='Blue'>block</font><font color='Black'>;</font><font color='Red'>font-size</font><font color='Black'>:</font><font color='Blue'>0</font><font color='Black'>;</font><font color='Red'>width</font><font color='Black'>:</font><font color='Blue'>12px</font><font color='Black'>;</font><font color='Red'>height</font><font color='Black'>:</font><font color='Blue'>12px</font><font color='Black'>;</font><font color='Red'>background-position</font><font color='Black'>:</font><font color='Blue'>-114px</font><font color='Black'> </font><font color='Blue'>-78px</font><font color='Black'>;</font><font color='Red'>margin-right</font><font color='Black'>:</font><font color='Blue'>2px</font><font color='Black'>}</font><font color='#a31515'>.mblink</font><font color='Black'>{</font><font color='Red'>font-size</font><font color='Black'>:</font><font color='Blue'>100%</font><font color='Black'>}</font><font color='#a31515'>body</font><font color='Black'>,</font><font color='#a31515'>td</font><font color='Black'>,</font><font color='#a31515'>div</font><font color='Black'>,</font><font color='#a31515'>.p</font><font color='Black'>,</font><font color='#a31515'>a</font><font color='Black'>{</font><font color='Red'>font-family</font><font color='Black'>:</font><font color='Blue'>arial,sans-serif</font><font color='Black'>}</font><font color='#a31515'>.g</font><font color='Black'>{</font><font color='Red'>margin</font><font color='Black'>:</font><font color='Blue'>1em</font><font color='Black'> </font><font color='Blue'>0</font><font color='Black'>}</font><font color='#a31515'>#sd</font><font color='Black'>{</font><font color='Red'>font-size</font><font color='Black'>:</font><font color='Blue'>84%</font><font color='Black'>;</font><font color='Red'>font-weight</font><font color='Black'>:</font><font color='Blue'>bold</font><font color='Black'>}</font><font color='#a31515'>#ap</font><font color='Black'>{</font><font color='Red'>font-size</font><font color='Black'>:</font><font color='Blue'>64%</font><font color='Black'>}<br/><br /></font><font color='Blue'></</font><font color='#a31515'>style</font><font color='Blue'>><br/><br /></</font><font color='#a31515'>head</font><font color='Blue'>><br/><br /><</font><font color='#a31515'>body</font><font color='Blue'>><br/><br /></font><font color='Black'> <br/><br /> </font><font color='Blue'><</font><font color='#a31515'>script</font><font color='Black'> </font><font color='Red'>type</font><font color='Blue'>="text/javascript"</font><font color='Black'> </font><font color='Red'>src</font><font color='Blue'>="script/prototype.js"></</font><font color='#a31515'>script</font><font color='Blue'>><br/><br /></font><font color='Black'> <br/><br /> <br/><br /> </font><font color='Blue'><</font><font color='#a31515'>form</font><font color='Black'> </font><font color='Red'>id</font><font color='Blue'>="form1"</font><font color='Black'> </font><font color='Red'>runat</font><font color='Blue'>="server"><br/><br /></font><font color='Black'> </font><font color='Blue'><</font><font color='#a31515'>asp</font><font color='Blue'>:</font><font color='#a31515'>ScriptManager</font><font color='Black'> </font><font color='Red'>ID</font><font color='Blue'>="ScriptManager1"</font><font color='Black'> </font><font color='Red'>runat</font><font color='Blue'>="server"><br/><br /></font><font color='Black'> </font><font color='Blue'></</font><font color='#a31515'>asp</font><font color='Blue'>:</font><font color='#a31515'>ScriptManager</font><font color='Blue'>><br/><br /></font><font color='Black'> </font><font color='Blue'><</font><font color='#a31515'>asp</font><font color='Blue'>:</font><font color='#a31515'>UpdatePanel</font><font color='Black'> </font><font color='Red'>ID</font><font color='Blue'>="UpdatePanel1"</font><font color='Black'> </font><font color='Red'>runat</font><font color='Blue'>="server"><br/><br /></font><font color='Black'> </font><font color='Blue'><</font><font color='#a31515'>ContentTemplate</font><font color='Blue'>><br/><br /></font><font color='Black'> </font><font color='Blue'><</font><font color='#a31515'>div</font><font color='Blue'>><br/><br /></font><font color='Black'> </font><font color='Blue'><</font><font color='#a31515'>table</font><font color='Black'> </font><font color='Red'>style</font><font color='Blue'>="</font><font color='Red'>width</font><font color='Black'>: </font><font color='Blue'>100%</font><font color='Black'>;</font><font color='Blue'>"><br/><br /></font><font color='Black'> </font><font color='Blue'><</font><font color='#a31515'>tr</font><font color='Blue'>><br/><br /></font><font color='Black'> </font><font color='Blue'><</font><font color='#a31515'>td</font><font color='Black'> </font><font color='Red'>class</font><font color='Blue'>="style1"><br/><br /></font><font color='Black'> Keywords</font><font color='Blue'></</font><font color='#a31515'>td</font><font color='Blue'>><br/><br /></font><font color='Black'> </font><font color='Blue'><</font><font color='#a31515'>td</font><font color='Blue'>><br/><br /></font><font color='Black'> </font><font color='Blue'><</font><font color='#a31515'>asp</font><font color='Blue'>:</font><font color='#a31515'>TextBox</font><font color='Black'> </font><font color='Red'>ID</font><font color='Blue'>="txtKeywords"</font><font color='Black'> </font><font color='Red'>runat</font><font color='Blue'>="server"</font><font color='Black'> </font><font color='Red'>Width</font><font color='Blue'>="356px"></</font><font color='#a31515'>asp</font><font color='Blue'>:</font><font color='#a31515'>TextBox</font><font color='Blue'>><br/><br /></font><font color='Black'> </font><font color='Blue'></</font><font color='#a31515'>td</font><font color='Blue'>><br/><br /></font><font color='Black'> </font><font color='Blue'></</font><font color='#a31515'>tr</font><font color='Blue'>><br/><br /></font><font color='Black'> </font><font color='Blue'><</font><font color='#a31515'>tr</font><font color='Blue'>><br/><br /></font><font color='Black'> </font><font color='Blue'><</font><font color='#a31515'>td</font><font color='Black'> </font><font color='Red'>class</font><font color='Blue'>="style1"><br/><br /></font><font color='Black'> Domain </font><font color='Blue'></</font><font color='#a31515'>td</font><font color='Blue'>></font><font color='Black'> </font><font color='Blue'><</font><font color='#a31515'>td</font><font color='Blue'>><br/><br /></font><font color='Black'> </font><font color='Blue'><</font><font color='#a31515'>asp</font><font color='Blue'>:</font><font color='#a31515'>TextBox</font><font color='Black'> </font><font color='Red'>ID</font><font color='Blue'>="txtDomain"</font><font color='Black'> </font><font color='Red'>runat</font><font color='Blue'>="server"</font><font color='Black'> </font><font color='Red'>Width</font><font color='Blue'>="358px"></</font><font color='#a31515'>asp</font><font color='Blue'>:</font><font color='#a31515'>TextBox</font><font color='Blue'>><br/><br /></font><font color='Black'> </font><font color='Blue'></</font><font color='#a31515'>td</font><font color='Blue'>><br/><br /></font><font color='Black'> </font><font color='Blue'></</font><font color='#a31515'>tr</font><font color='Blue'>><br/><br /></font><font color='Black'> </font><font color='Blue'><</font><font color='#a31515'>tr</font><font color='Blue'>><br/><br /></font><font color='Black'> </font><font color='Blue'><</font><font color='#a31515'>td</font><font color='Black'> </font><font color='Red'>class</font><font color='Blue'>="style1"><br/><br /></font><font color='Black'> Results to search</font><font color='Blue'></</font><font color='#a31515'>td</font><font color='Blue'>><br/><br /></font><font color='Black'> </font><font color='Blue'><</font><font color='#a31515'>td</font><font color='Blue'>><br/><br /></font><font color='Black'> </font><font color='Blue'><</font><font color='#a31515'>asp</font><font color='Blue'>:</font><font color='#a31515'>DropDownList</font><font color='Black'> </font><font color='Red'>ID</font><font color='Blue'>="cbxResults"</font><font color='Black'> </font><font color='Red'>runat</font><font color='Blue'>="server"><br/><br /></font><font color='Black'> </font><font color='Blue'><</font><font color='#a31515'>asp</font><font color='Blue'>:</font><font color='#a31515'>ListItem</font><font color='Blue'>></font><font color='Black'>100</font><font color='Blue'></</font><font color='#a31515'>asp</font><font color='Blue'>:</font><font color='#a31515'>ListItem</font><font color='Blue'>><br/><br /></font><font color='Black'> </font><font color='Blue'><</font><font color='#a31515'>asp</font><font color='Blue'>:</font><font color='#a31515'>ListItem</font><font color='Blue'>></font><font color='Black'>200</font><font color='Blue'></</font><font color='#a31515'>asp</font><font color='Blue'>:</font><font color='#a31515'>ListItem</font><font color='Blue'>><br/><br /></font><font color='Black'> </font><font color='Blue'><</font><font color='#a31515'>asp</font><font color='Blue'>:</font><font color='#a31515'>ListItem</font><font color='Blue'>></font><font color='Black'>300</font><font color='Blue'></</font><font color='#a31515'>asp</font><font color='Blue'>:</font><font color='#a31515'>ListItem</font><font color='Blue'>><br/><br /></font><font color='Black'> </font><font color='Blue'><</font><font color='#a31515'>asp</font><font color='Blue'>:</font><font color='#a31515'>ListItem</font><font color='Blue'>></font><font color='Black'>400</font><font color='Blue'></</font><font color='#a31515'>asp</font><font color='Blue'>:</font><font color='#a31515'>ListItem</font><font color='Blue'>><br/><br /></font><font color='Black'> </font><font color='Blue'><</font><font color='#a31515'>asp</font><font color='Blue'>:</font><font color='#a31515'>ListItem</font><font color='Blue'>></font><font color='Black'>500</font><font color='Blue'></</font><font color='#a31515'>asp</font><font color='Blue'>:</font><font color='#a31515'>ListItem</font><font color='Blue'>><br/><br /></font><font color='Black'> </font><font color='Blue'><</font><font color='#a31515'>asp</font><font color='Blue'>:</font><font color='#a31515'>ListItem</font><font color='Blue'>></font><font color='Black'>600</font><font color='Blue'></</font><font color='#a31515'>asp</font><font color='Blue'>:</font><font color='#a31515'>ListItem</font><font color='Blue'>><br/><br /></font><font color='Black'> </font><font color='Blue'><</font><font color='#a31515'>asp</font><font color='Blue'>:</font><font color='#a31515'>ListItem</font><font color='Blue'>></font><font color='Black'>700</font><font color='Blue'></</font><font color='#a31515'>asp</font><font color='Blue'>:</font><font color='#a31515'>ListItem</font><font color='Blue'>><br/><br /></font><font color='Black'> </font><font color='Blue'><</font><font color='#a31515'>asp</font><font color='Blue'>:</font><font color='#a31515'>ListItem</font><font color='Blue'>></font><font color='Black'>800</font><font color='Blue'></</font><font color='#a31515'>asp</font><font color='Blue'>:</font><font color='#a31515'>ListItem</font><font color='Blue'>><br/><br /></font><font color='Black'> </font><font color='Blue'><</font><font color='#a31515'>asp</font><font color='Blue'>:</font><font color='#a31515'>ListItem</font><font color='Blue'>></font><font color='Black'>900</font><font color='Blue'></</font><font color='#a31515'>asp</font><font color='Blue'>:</font><font color='#a31515'>ListItem</font><font color='Blue'>><br/><br /></font><font color='Black'> </font><font color='Blue'><</font><font color='#a31515'>asp</font><font color='Blue'>:</font><font color='#a31515'>ListItem</font><font color='Blue'>></font><font color='Black'>1000</font><font color='Blue'></</font><font color='#a31515'>asp</font><font color='Blue'>:</font><font color='#a31515'>ListItem</font><font color='Blue'>><br/><br /></font><font color='Black'> </font><font color='Blue'></</font><font color='#a31515'>asp</font><font color='Blue'>:</font><font color='#a31515'>DropDownList</font><font color='Blue'>><br/><br /></font><font color='Black'> </font><font color='Blue'></</font><font color='#a31515'>td</font><font color='Blue'>><br/><br /></font><font color='Black'> </font><font color='Blue'></</font><font color='#a31515'>tr</font><font color='Blue'>><br/><br /></font><font color='Black'> </font><font color='Blue'><</font><font color='#a31515'>tr</font><font color='Blue'>><br/><br /></font><font color='Black'> </font><font color='Blue'><</font><font color='#a31515'>td</font><font color='Black'> </font><font color='Red'>class</font><font color='Blue'>="style1"><br/><br /></font><font color='Black'> </font><font color='Blue'><</font><font color='#a31515'>asp</font><font color='Blue'>:</font><font color='#a31515'>Button</font><font color='Black'> </font><font color='Red'>ID</font><font color='Blue'>="btnGo"</font><font color='Black'> </font><font color='Red'>runat</font><font color='Blue'>="server"</font><font color='Black'> </font><font color='Red'>Text</font><font color='Blue'>="Find page rank"</font><font color='Black'> </font><font color='Blue'>/><br/><br /></font><font color='Black'> </font><font color='Blue'></</font><font color='#a31515'>td</font><font color='Blue'>><br/><br /></font><font color='Black'> </font><font color='Blue'><</font><font color='#a31515'>td</font><font color='Blue'>><br/><br /></font><font color='Black'> </font><font color='Blue'><</font><font color='#a31515'>asp</font><font color='Blue'>:</font><font color='#a31515'>UpdateProgress<br/><br /></font><font color='Black'> </font><font color='Red'>ID</font><font color='Blue'>="UpdateProgress1"</font><font color='Black'> </font><font color='Red'>runat</font><font color='Blue'>="server"</font><font color='Black'> </font><font color='Red'>AssociatedUpdatePanelID</font><font color='Blue'>="UpdatePanel1"</font><font color='Black'> </font><font color='Red'>DynamicLayout</font><font color='Blue'>=true><br/><br /></font><font color='Black'> </font><font color='Blue'><</font><font color='#a31515'>ProgressTemplate</font><font color='Blue'>><br/><br /></font><font color='Black'> </font><font color='Blue'><</font><font color='#a31515'>div</font><font color='Black'> </font><font color='Red'>style</font><font color='Blue'>="</font><font color='Red'>background-image</font><font color='Black'>: </font><font color='Blue'>url('images/bg.jpg')</font><font color='Black'>; </font><font color='Red'>width</font><font color='Black'>: </font><font color='Blue'>179px</font><font color='Black'>;</font><font color='Blue'>"><br/><br /></font><font color='Black'> </font><font color='Blue'><</font><font color='#a31515'>img</font><font color='Black'> </font><font color='Red'>src</font><font color='Blue'>="Images/loading.gif"</font><font color='Black'> </font><font color='Blue'>/><</font><font color='#a31515'>span</font><font color='Black'> </font><font color='Red'>class</font><font color='Blue'>="style2"></font><font color='Black'>Searching..</font><font color='Blue'></</font><font color='#a31515'>span</font><font color='Blue'>></font><font color='Black'>.<br/><br /> </font><font color='Blue'></</font><font color='#a31515'>div</font><font color='Blue'>><br/><br /></font><font color='Black'> </font><font color='Blue'></</font><font color='#a31515'>ProgressTemplate</font><font color='Blue'>><br/><br /></font><font color='Black'> </font><font color='Blue'></</font><font color='#a31515'>asp</font><font color='Blue'>:</font><font color='#a31515'>UpdateProgress</font><font color='Blue'>><br/><br /></font><font color='Black'> </font><font color='Blue'></</font><font color='#a31515'>td</font><font color='Blue'>><br/><br /></font><font color='Black'> </font><font color='Blue'></</font><font color='#a31515'>tr</font><font color='Blue'>><br/><br /></font><font color='Black'> </font><font color='Blue'></</font><font color='#a31515'>table</font><font color='Blue'>><br/><br /></font><font color='Black'> </font><font color='Blue'></</font><font color='#a31515'>div</font><font color='Blue'>><br/><br /></font><font color='Black'> <br/><br /> </font><font color='Blue'><</font><font color='#a31515'>div</font><font color='Black'> </font><font color='Red'>id</font><font color='Blue'>=results><br/><br /></font><font color='Black'> <br/><br /> </font><font color='Blue'></</font><font color='#a31515'>div</font><font color='Blue'>><br/><br /></font><font color='Black'> <br/><br /> </font><font color='Blue'><</font><font color='#a31515'>asp</font><font color='Blue'>:</font><font color='#a31515'>Panel</font><font color='Black'> </font><font color='Red'>ID</font><font color='Blue'>="panelResults"</font><font color='Black'> </font><font color='Red'>runat</font><font color='Blue'>="server"><br/><br /></font><font color='Black'> </font><font color='Blue'><</font><font color='#a31515'>asp</font><font color='Blue'>:</font><font color='#a31515'>Label</font><font color='Black'> </font><font color='Red'>ID</font><font color='Blue'>="lblResult"</font><font color='Black'> </font><font color='Red'>runat</font><font color='Blue'>="server"</font><font color='Black'> </font><font color='Red'>Text</font><font color='Blue'>="Label"</font><font color='Black'> </font><font color='Red'>Visible</font><font color='Blue'>="False"</font><font color='Black'> <br/><br /> </font><font color='Red'>Font-Bold</font><font color='Blue'>="True"</font><font color='Black'> </font><font color='Red'>Font-Size</font><font color='Blue'>="X-Large"></</font><font color='#a31515'>asp</font><font color='Blue'>:</font><font color='#a31515'>Label</font><font color='Blue'>><br/><br /></font><font color='Black'> </font><font color='Blue'></</font><font color='#a31515'>asp</font><font color='Blue'>:</font><font color='#a31515'>Panel</font><font color='Blue'>><br/><br /></font><font color='Black'> </font><font color='Blue'></</font><font color='#a31515'>ContentTemplate</font><font color='Blue'>><br/><br /></font><font color='Black'> </font><font color='Blue'></</font><font color='#a31515'>asp</font><font color='Blue'>:</font><font color='#a31515'>UpdatePanel</font><font color='Blue'>><br/><br /></font><font color='Black'> </font><font color='Blue'></</font><font color='#a31515'>form</font><font color='Blue'>><br/><br /></</font><font color='#a31515'>body</font><font color='Blue'>><br/><br /></</font><font color='#a31515'>html</font><font color='Blue'>><br/><br /></font><br /></font></p><br /></div>Lachlan Keownhttp://www.blogger.com/profile/14681765389224928298noreply@blogger.com0tag:blogger.com,1999:blog-7429901495286230670.post-70073280442978533432008-05-04T12:44:00.009+12:002010-02-05T08:30:47.784+13:00Online Viewstate Viewer / Decoder for Asp.Net 2.0I got frustrated trying to find an online viewstate decoder for ASP.Net 2.0(.aspx), so wrote my own. You can use it below. NOTE! this is very basic; if you do something wrong you will get a generic error so make sure you copy the viewstate carefully (<a href="http://www.getfirebug.com/">Firebug</a> in Firefox makes this easy!).<br /><br />Also, if you have a large viewstate it will take a while for the Treeview to build as I am just using the MS TreeView control which is very verbose in its HTML output.<div><br /></div><div><b>Breaking news : </b>World's first (possibly) <a href="http://lachlankeown.blogspot.com/2010/02/online-javascript-hex-viewer-local.html">online hex file viewer</a> written entirely in Javascript!<br /><br /><iframe src="http://d461534.u33.hostdone.com/viewstate/ViewState.aspx" style="width:100%; height:700px;"></iframe></div>Lachlan Keownhttp://www.blogger.com/profile/14681765389224928298noreply@blogger.com15tag:blogger.com,1999:blog-7429901495286230670.post-47666984871412833402008-04-29T18:24:00.010+12:002008-05-16T11:28:19.505+12:00Firefox refresh viewstate updatepanel bug hell!!!Have you ever noticed that when you click the Refresh button in Firefox, any form values you have filled in on the screen are retained after the refresh? Firefox is automatically altering these values at the end of the request, presumably as a convenience to you, the user. Hence the DOM and the page source are out of sync immediately after the refresh. There is nothing you can do to disable this behaviour within Firefox.<br /><br />For the average web app, this is a desirable feature. But when combined with the ASP.Net viewstate model, it is anything but desirable, as ASP.Net uses a hidden form field to store serialized viewstate information.<br /><br />The specific bug I have encountered is when using ASP.Net in conjunction with the built-in validation controls and AJAX. When using validation controls, if viewstate does not match that which last left the server, an error is produced :<br /><pre>The state information is invalid for this page and might be corrupted.</pre><br />Because Firefox attempts to fill in the current form with current values after a refresh, a new viewstate, representing a fresh page, can be overwritten by an old viewstate (the result of 1 or many AJAX postbacks changing control states since the last "fresh" page load.)<br /><br />The easiest solution I have found to this problem thus far is to change the form ID with each (non postback) page load. This will fool Firefox into thinking the form is different, and as such all values (including viewstate) will get their values from the incoming HTML rather than the browser's previous state.<br /><br /><p style="font-size: 60%"><font face='Monospace' size='-1'><br /><font color='Blue'>Protected</font><font color='Black'> </font><font color='Blue'>Sub</font><font color='Black'> Page_Load(</font><font color='Blue'>ByVal</font><font color='Black'> sender </font><font color='Blue'>As</font><font color='Black'> </font><font color='Blue'>Object</font><font color='Black'>, </font><font color='Blue'>ByVal</font><font color='Black'> e </font><font color='Blue'>As</font><font color='Black'> System.EventArgs) </font><font color='Blue'>Handles</font><font color='Black'> </font><font color='Blue'>Me</font><font color='Black'>.Load<br/><br /> </font><font color='Blue'>If</font><font color='Black'> </font><font color='Blue'>Not</font><font color='Black'> </font><font color='Blue'>Me</font><font color='Black'>.IsPostBack </font><font color='Blue'>Then<br/><br /></font><font color='Black'> </font><font color='Blue'>Me</font><font color='Black'>.form1.ID = "form" & </font><font color='Blue'>Date</font><font color='Black'>.Now.Ticks().ToString() <br/><br /> </font><font color='Blue'>End</font><font color='Black'> </font><font color='Blue'>If<br/><br /></font><font color='Black'></font><font color='Blue'>End</font><font color='Black'> </font><font color='Blue'>Sub</font><br /></font></p><br /><br />The only potential problem you could encounter with this solution is where the form ID has been hardwired in your application, either in client side script or server side code. This can be mitigated by always using myForm.clientID when referencing the form's ID. This is good practice in any case.<br /><br />Hopefully this will help others having the same problems I was.<br /><br /><span style="font-weight:bold;">NOTE!!!</span><br />This solution will not work when using a Master Page. Use the solution suggested <a href="http://forums.asp.net/p/1252135/2361051.aspx#2361051">here</a> instead (change form ID in pageLoaded AJAX event).<br /><br />For those interested, the offending code is here in System.Web.UI.HtmlControls.HtmlForm.UniqueID: (from Reflector)<br /><br />Public Overrides ReadOnly Property UniqueID As String<br /> Get<br /> If (Me.NamingContainer Is Me.Page) Then<br /> Return MyBase.UniqueID<br /> End If<br /> Return "aspnetForm"<br /> End Get<br />End PropertyLachlan Keownhttp://www.blogger.com/profile/14681765389224928298noreply@blogger.com8tag:blogger.com,1999:blog-7429901495286230670.post-22704186789390701982008-04-23T20:54:00.012+12:002008-05-11T21:51:16.506+12:00LINQDataSource Many-to-many filtering Hell!!OK new LINQ is all wizzy do and great at Teched and Microsoft demo's etc, but what about when you want to do something real world? Like using drag-and-drop to build an asp.net form with a gridview for editing a many-to-many child table?<br /><br />As it says somewhere in the bowels of the stupendous MSDN help, LINQDataSource is only for use with a single table: the where clause can only refer to fields within that table or an error will be generated.<br /><br />I looked all over the net and could find no simple way to implement Northwind's <span style="font-style: italic;">Order - OrderDetails - Products</span> example using LINQDataSource to show an editable gridview containing all the products for a given order - i.e. <span style="font-style: italic;">productList.aspx?orderID=123</span>.<br /><br />The only (relatively) easy method I could figure out was this:<br /><br /><ul><li>Create your LINQ DBML file in the usual way by dragging on all tables from the Server Explorer.</li><li>Do a compile here or you will be frustrated in the next step...<br /></li><li>Add a LINQDataSource(LDS) and Gridview to the form and wire up the LDS to your Products table and the GridView in the usual <span style="font-style: italic;">Dev for Dummies </span>way on the designer.</li><li>Leave the WHERE clause of the LDS empty for now...</li><li>Make sure you tick the * in the SELECT fields, otherwise the cast (below) won't work!!</li><li>Make sure you tick enable update, delete, insert or it won't work (don't ask me why).<br /></li><li>Add an event handler for your LINQDataSource's Selected event. The e.Result parameter gives you access to the returned records as a generic list that you can remove items from, yay!</li><li>Add the code below to the event handler...<br /></li><li>Voila! Almost drag and drop - only a little bit of code required.</li></ul><br /><br /><div style="font-size:60%;"><br /><br /><p><font face='Monospace' size='-1'><br /> <font color='Blue'>Protected</font><font color='Black'> </font><font color='Blue'>Sub</font><font color='Black'> LinqDataSource1_Selected(</font><font color='Blue'>ByVal</font><font color='Black'> sender </font><font color='Blue'>As</font><font color='Black'> </font><font color='Blue'>Object</font><font color='Black'>, </font><font color='Blue'>ByVal</font><font color='Black'> e </font><font color='Blue'>As</font><font color='Black'> System.Web.UI.WebControls.LinqDataSourceStatusEventArgs) </font><font color='Blue'>Handles</font><font color='Black'> LinqDataSource1.Selected<br/><br /> </font><font color='Green'>' Cast result to generic list of (LINQ) Products<br/><br /></font><font color='Black'> </font><font color='Blue'>Dim</font><font color='Black'> prodList </font><font color='Blue'>As</font><font color='Black'> List(</font><font color='Blue'>Of</font><font color='Black'> Product) = </font><font color='Blue'>CType</font><font color='Black'>(e.Result, List(</font><font color='Blue'>Of</font><font color='Black'> Product))<br/><br /><br/><br /> </font><font color='Green'>' iterate through each Product and remove any that aren't associated with the passed OrderID<br/><br /></font><font color='Black'> </font><font color='Blue'>For</font><font color='Black'> </font><font color='Blue'>Each</font><font color='Black'> aProduct </font><font color='Blue'>In</font><font color='Black'> </font><font color='Blue'>New</font><font color='Black'> List(</font><font color='Blue'>Of</font><font color='Black'> Product)(prodList)<br/><br /> </font><font color='Blue'>Dim</font><font color='Black'> keepProduct </font><font color='Blue'>As</font><font color='Black'> </font><font color='Blue'>Boolean</font><font color='Black'> = </font><font color='Blue'>False<br/><br /><br/><br /></font><font color='Black'> </font><font color='Green'>' Asking for the Order_Details will cause a new request to SQL for these rows<br/><br /></font><font color='Black'> </font><font color='Blue'>For</font><font color='Black'> </font><font color='Blue'>Each</font><font color='Black'> anOrderDetail </font><font color='Blue'>As</font><font color='Black'> Order_Detail </font><font color='Blue'>In</font><font color='Black'> aProduct.Order_Details<br/><br /> </font><font color='Blue'>If</font><font color='Black'> Request("orderID") </font><font color='Blue'>IsNot</font><font color='Black'> </font><font color='Blue'>Nothing</font><font color='Black'> </font><font color='Blue'>AndAlso</font><font color='Black'> anOrderDetail.OrderID = </font><font color='Blue'>CInt</font><font color='Black'>(Request("orderID")) </font><font color='Blue'>Then<br/><br /></font><font color='Black'> </font><font color='Green'>' We have a match, this product is in the request order, keep it!!<br/><br /></font><font color='Black'> keepProduct = </font><font color='Blue'>True<br/><br /></font><font color='Black'> </font><font color='Blue'>Exit</font><font color='Black'> </font><font color='Blue'>For<br/><br /></font><font color='Black'> </font><font color='Blue'>End</font><font color='Black'> </font><font color='Blue'>If<br/><br /></font><font color='Black'> </font><font color='Blue'>Next<br/><br /><br/><br /></font><font color='Black'> </font><font color='Blue'>If</font><font color='Black'> </font><font color='Blue'>Not</font><font color='Black'> keepProduct </font><font color='Blue'>Then<br/><br /></font><font color='Black'> </font><font color='Green'>' Remove it from e.result list.<br/><br /></font><font color='Black'> prodList.Remove(aProduct)<br/><br /> </font><font color='Blue'>End</font><font color='Black'> </font><font color='Blue'>If<br/><br /></font><font color='Black'> </font><font color='Blue'>Next<br/><br /></font><font color='Black'> </font><font color='Blue'>End</font><font color='Black'> </font><font color='Blue'>Sub</font><br /></font></p><br /><br /></div>Lachlan Keownhttp://www.blogger.com/profile/14681765389224928298noreply@blogger.com1tag:blogger.com,1999:blog-7429901495286230670.post-74759808308620398102008-04-23T18:55:00.009+12:002008-05-11T21:51:53.261+12:00Transparent GIFs in .Net hell!!There is a very useful article <a href="http://bobpowell.net/giftransparency.htm">here </a>about creating transparent gifs in .net, but there are (I think) a couple of points missing, which I'll detail here in case it saves anyone wasting a day scratching their head like I have...<br /><br /><span style="font-size:130%;"><span style="font-size:180%;">GDI+ Version<br /></span></span><span style="font-size:100%;">It would appear that there are differences between versions 1.0 (file version 5.x) and 1.1 (6.x) of Microsoft's GDI+, in the way that they encode a non-indexed bitmap (eg 32bppARGB) into an indexed format such as Format8bppIndexed.<br /><br />The problem comes with the converted palette; on my development machine (gdiplus.dll version 6.x), I appeared to be getting a custom palette based on (maybe?) the colours in the converted image (<span style="font-style: italic;">image quantization)</span>.<br /><br />On a Windows 2003 server, running gdiplus.dll 5.x, I would get the standard palette as per Bob Powell's article.<br /><br />This could potentially cause headaches for you if (as I did) you released a web project to production and it didn't behave as it did on your dev machine...<br /><br />There appears to be very little documentation on this change between gdi+ 1.0 and 1.1, but what links I found I've added below.<br /><br /><span style="font-size:180%;">Altering GIF palette</span><br /><span style="font-size:100%;">When I tried to adapt Bob's algorithm to make my gif's background transparent, I ran into a problem. Sometimes the algorithm would work, sometimes it wouldn't. At this stage, the only conclusion I can draw is that you must remove any transparent colours from the palette before attempting to set a new transparent colour... i.e, don't do this (variation of Bob's code):<br /></span></span></span></span><br /><span style="font-size:130%;"><span style="font-size:100%;"><span style="color: rgb(51, 204, 0);font-family:courier new;" >'copy all the entries from the old palette removing any transparency</span><br /><span style="font-family:courier new;">Dim n As Integer = 0</span><br /><span style="font-family:courier new;">Dim c As Color</span><br /><span style="font-family:courier new;">For Each c In cp.Entries</span><br /><span style="font-family:courier new;"> If n = idxToMakeTransparent Then</span><br /><span style="font-family:courier new;"> ncp.Entries(n) = Color.FromArgb(0, c)</span><br /><span style="font-family:courier new;"> Else</span><br /><span style="font-family:courier new;"> ncp.Entries(n) = Color.FromArgb(255, c)</span><br /><span style="font-family:courier new;"> End If</span><br /><br /><span style="font-family:courier new;">n += 1</span><br /><span style="font-family:courier new;">Next c</span><br /><br /><span style="color: rgb(51, 204, 0);font-family:courier new;" >'re-insert the palette</span><br /><span style="font-family:courier new;">bm.Palette = ncp</span><br /><br />I think that this <span style="font-style: italic;">doesn't </span>work if one of the colours is already defined as transparent (as seems to be the default in <span style="font-style: italic;">old </span>gdi+ (1.0). This is all pure speculation at this point!<br /><br />Good luck with your hacking.<br /><br /><span style="font-size:180%;">Links</span><br /><a href="http://www.xtremevbtalk.com/t92821.html"><span style="font-size:100%;">http://www.xtremevbtalk.com/t92821.html</a><br /></span><a href="http://support.microsoft.com/default.aspx?scid=kb;EN-US;Q319061">http://support.microsoft.com/default.aspx?scid=kb;EN-US;Q319061</a><br /><a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnaspp/html/colorquant.asp">http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnaspp/html/colorquant.asp</a><br /><br /></span></span>Lachlan Keownhttp://www.blogger.com/profile/14681765389224928298noreply@blogger.com0tag:blogger.com,1999:blog-7429901495286230670.post-17303132329460716762008-04-09T07:49:00.006+12:002009-03-11T12:05:11.604+13:00AvalonCab Arcade Frontend Released!I have now released the beta version of my MAME (and generic emulator) frontend for arcade cabinets. It is built on top of Microsoft's new Windows Presentation Framework, so can take advantage of declarative GUI design with XAML, making the interface very flexible.<br /><br />The idea was to allow rapid navigation to any game within the database, whilst showing videos and/or screenshots of the selected game.<br /><br />I have released the project as open source, so as anyone else can make modifications or improvements. It is my hope that someone will tidy up all the loose ends and maybe add all the missing functionality that will make it a "complete" system.<br /><br />You can download the windows executable or source code here <a href="http://www.mameemu.com/">www.avaloncab.info</a>Lachlan Keownhttp://www.blogger.com/profile/14681765389224928298noreply@blogger.com0tag:blogger.com,1999:blog-7429901495286230670.post-19838041489054767752007-12-14T10:53:00.001+13:002008-05-11T21:52:57.784+12:00Hello WorldHello world, well here I am blogging, oh what <span style="font-weight: bold; color: rgb(51, 102, 255);">fun</span>.<br /><br />Village Green at work today, if you're interested.<br /><br />That's all til next time.Lachlan Keownhttp://www.blogger.com/profile/14681765389224928298noreply@blogger.com0