<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0"><channel><atom:id>tag:blogger.com,1999:blog-8857431988988627285</atom:id><lastBuildDate>Wed, 11 Nov 2009 19:21:55 +0000</lastBuildDate><title>Chris Bensen</title><description>I am a Senior R&amp;D Engineer at Embarcadero Technologies. This is my blog about Delphi, Photography, and stuff I find interesting.</description><link>http://chrisbensen.blogspot.com/</link><managingEditor>noreply@blogger.com (Chris Bensen)</managingEditor><generator>Blogger</generator><openSearch:totalResults>299</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/ChrisBensenBlog" type="application/rss+xml" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8857431988988627285.post-6850753732402089229</guid><pubDate>Tue, 27 Oct 2009 20:00:00 +0000</pubDate><atom:updated>2009-10-27T15:12:26.679-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Touch</category><title>Dell Latitude XT2 XFR Rugged Tablet</title><description>&lt;object width="560" height="340"&gt;&lt;param name="movie" value="http://www.youtube.com/v/ZCjqsoDWjyg&amp;hl=en&amp;fs=1&amp;"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/ZCjqsoDWjyg&amp;hl=en&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="560" height="340"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;Dell just introduced the Latitude XT2 XFR; the rugged version of the XT2 multitouch tablet machine I've mentioned a few times before only with a name that is more of a mouth full. So for those of you waiting for a rugged machine before jumping into multitouch wait no longer. The short spec list is 12 inch multitouch display, 5lbs and 1.5 inches thick and mil spec badassness! It also comes with Vista. I guess Windows 7 isn't rugged certified? Just as well, first thing I do when I get a new machine is format it anyway. For all the awesomeness it'll set you back some serious coin. The base model is $3,600 but I loaded one up for just under $5k! I don't think I can justify one of these to Nick, but damn!&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-4398465119811197";
/* 468x60, created 7/20/08 */
google_ad_slot = "3994176404";
google_ad_width = 468;
google_ad_height = 60;
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8857431988988627285-6850753732402089229?l=chrisbensen.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ChrisBensenBlog/~4/d-ls5Mq0rkM" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/ChrisBensenBlog/~3/d-ls5Mq0rkM/dell-latitude-xt2-xfr-rugged-tablet.html</link><author>noreply@blogger.com (Chris Bensen)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><feedburner:origLink>http://chrisbensen.blogspot.com/2009/10/dell-latitude-xt2-xfr-rugged-tablet.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8857431988988627285.post-3014555119554838789</guid><pubDate>Mon, 26 Oct 2009 22:00:00 +0000</pubDate><atom:updated>2009-10-27T09:31:53.507-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Touch</category><title>Dell SX2210T - Multitouch Monitors</title><description>The first standalone multi-touch monitor is the &lt;a href="http://accessories.us.dell.com/sna/products/Displays/productdetail.aspx?c=us&amp;l=en&amp;cs=19&amp;sku=320-1172"&gt; SX2210T&lt;/a&gt;. Looks pretty awesome for those that want to add a multi-touch monitor tho an existing computer.&lt;br /&gt;&lt;br /&gt;Updated: Link goes to the product page (which is up now) rather than the shopping cart.&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-4398465119811197";
/* 468x60, created 7/20/08 */
google_ad_slot = "3994176404";
google_ad_width = 468;
google_ad_height = 60;
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8857431988988627285-3014555119554838789?l=chrisbensen.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ChrisBensenBlog/~4/NkcG3_CGt0g" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/ChrisBensenBlog/~3/NkcG3_CGt0g/dell-sx2210t-multitouch-monitors.html</link><author>noreply@blogger.com (Chris Bensen)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">4</thr:total><feedburner:origLink>http://chrisbensen.blogspot.com/2009/10/dell-sx2210t-multitouch-monitors.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8857431988988627285.post-2277595076987082555</guid><pubDate>Thu, 15 Oct 2009 14:00:00 +0000</pubDate><atom:updated>2009-10-15T07:00:02.235-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Delphi</category><category domain="http://www.blogger.com/atom/ns#">Tips</category><category domain="http://www.blogger.com/atom/ns#">C++Builder</category><title>Delphi Tips and Tricks - Additional Files</title><description>One of the most useful features in the Delphi IDE is CTRL + F12, or the "Search for units" dialog. One of the problems we encounter is we often want to look at files that are not in any of the opened projects. So a hidden registry key was created to add a list of files to the "Search for units" dialog. You can specify the text file by creating a string value under HKEY_CURRENT_USER\Software\CodeGear\BDS\&lt;version number&gt;\Globals named "AdditionalViewFiles". Set the string to the file you want the IDE to load. Note that IDE environment variables can be used here. For Example I have $(TP) set to "c:\source" and the AdditionalViewFiles string value is set to $(TP)\AdditionalViewFiles.txt.&lt;br /&gt;&lt;br /&gt;The text file format is name value pairs like any other INI file where the name is the short name you want to see and the value is the full path to the file (and this will expand IDE environment variables as well). For example:&lt;br /&gt;&lt;br /&gt;Foo.pas=$(TP)\somedirectory\Foo.pas&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-4398465119811197";
/* 468x60, created 7/20/08 */
google_ad_slot = "3994176404";
google_ad_width = 468;
google_ad_height = 60;
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8857431988988627285-2277595076987082555?l=chrisbensen.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ChrisBensenBlog/~4/RAcqArbSyRQ" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/ChrisBensenBlog/~3/RAcqArbSyRQ/delphi-tips-and-tricks-additional-files.html</link><author>noreply@blogger.com (Chris Bensen)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">3</thr:total><feedburner:origLink>http://chrisbensen.blogspot.com/2009/10/delphi-tips-and-tricks-additional-files.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8857431988988627285.post-6145855114772005440</guid><pubDate>Mon, 12 Oct 2009 14:00:00 +0000</pubDate><atom:updated>2009-10-12T07:00:00.091-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Touch</category><title>Sony Touchscreen Computer/TV</title><description>&lt;div style="padding: 0px; margin: 0px; width:320px;"&gt;&lt;embed height="440" width="500" flashvars="&amp;file=http://www.newswire.ca/en/releases/mmnr/smr/Sony.flv" allowfullscreen="true" allowscriptaccess="always" quality="high" src="http://smr.newswire.ca/swf/videoplayer.swf" type="application/x-shockwave-flash"&gt;&lt;/embed&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;From the specs I think this Sony Vaio L beats pants off the HP Touchsmart. It's got glass, HDMI input, 1080p (I'm not sure if this is the computer resolution as well) Blue-ray, NVIDIA graphics and the monitor can be used as a TV without turning on the computer. I'm not sure what the other computer specs are, but the mouse does look horrible. It also appears that the DVD drive isn't a slot loading drive so that's a bit odd. Check out &lt;a href="http://www.sonystyle.com/webapp/wcs/stores/servlet/CategoryDisplay?catalogId=1&amp;storeId=10151&amp;langId=-1&amp;categoryId=16155&amp;SR=sony_search_seo&amp;SQS=Vaio%20L"&gt;Sony website&lt;/a&gt; for more information.&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-4398465119811197";
/* 468x60, created 7/20/08 */
google_ad_slot = "3994176404";
google_ad_width = 468;
google_ad_height = 60;
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8857431988988627285-6145855114772005440?l=chrisbensen.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ChrisBensenBlog/~4/AaHbBHWlCZo" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/ChrisBensenBlog/~3/AaHbBHWlCZo/sony-touchscreen-computertv.html</link><author>noreply@blogger.com (Chris Bensen)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total><feedburner:origLink>http://chrisbensen.blogspot.com/2009/10/sony-touchscreen-computertv.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8857431988988627285.post-5790501889742346194</guid><pubDate>Wed, 07 Oct 2009 16:00:00 +0000</pubDate><atom:updated>2009-11-02T20:32:38.180-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Delphi</category><category domain="http://www.blogger.com/atom/ns#">Touch</category><title>Touch Demo Part III</title><description>Previously I posted &lt;a href="http://chrisbensen.blogspot.com/2009/09/touch-demo-part-i.html"&gt;Part I&lt;/a&gt; and &lt;a href="http://chrisbensen.blogspot.com/2009/10/touch-demo-part-ii.html"&gt;Part II&lt;/a&gt; of the Touch Demo.&lt;br /&gt;&lt;br /&gt;This time around we will add the glowing spots and the basic handling of the WM_TOUCH message. Add Generics.Collections to your uses and copy the following code to your unit:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;type&lt;br /&gt;  TGlowSpot = class&lt;br /&gt;  public&lt;br /&gt;    X, Y, Radius: Integer;&lt;br /&gt;    Alpha: Extended;&lt;br /&gt;    FadeIn: Boolean;&lt;br /&gt;    Color: TColor;&lt;br /&gt;&lt;br /&gt;  public&lt;br /&gt;    constructor Create(AParent: TWinControl);&lt;br /&gt;&lt;br /&gt;    procedure Paint(Canvas: TDirect2DCanvas);&lt;br /&gt;  end;&lt;br /&gt;&lt;br /&gt;  TGlowSpotList = class(TList&amp;lt;TGlowSpot&amp;gt;);&lt;br /&gt;...&lt;br /&gt;&lt;b&gt;implementation&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;{$R *.dfm}&lt;br /&gt;&lt;br /&gt;procedure PaintGlow(Canvas: TDirect2DCanvas; Alpha: Single;&lt;br /&gt;  X, Y, Radius: Integer; Color: TColor);&lt;br /&gt;var&lt;br /&gt;  Stops: array[0 .. 1] of TD2D1GradientStop;&lt;br /&gt;  Gradient: ID2D1GradientStopCollection;&lt;br /&gt;  BrushProperties: TD2D1RadialGradientBrushProperties;&lt;br /&gt;  RadialBrush: ID2D1RadialGradientBrush;&lt;br /&gt;  Brush: TDirect2DBrush;&lt;br /&gt;begin&lt;br /&gt;  Stops[0].position := 0;&lt;br /&gt;  Stops[0].Color := D2D1ColorF(Color, Alpha);&lt;br /&gt;  Stops[1].position := 1;&lt;br /&gt;  Stops[1].Color := D2D1ColorF(Color, 0);&lt;br /&gt;  Canvas.RenderTarget.CreateGradientStopCollection&lt;br /&gt;    (@Stops[0], Length(Stops), D2D1_GAMMA_2_2, D2D1_EXTEND_MODE_CLAMP,&lt;br /&gt;    Gradient);&lt;br /&gt;  BrushProperties.center := D2D1PointF(X, Y);&lt;br /&gt;  BrushProperties.gradientOriginOffset.X := 0;&lt;br /&gt;  BrushProperties.gradientOriginOffset.Y := 0;&lt;br /&gt;  BrushProperties.radiusX := Radius;&lt;br /&gt;  BrushProperties.radiusY := Radius;&lt;br /&gt;  Canvas.RenderTarget.CreateRadialGradientBrush&lt;br /&gt;    (BrushProperties, nil, Gradient, RadialBrush);&lt;br /&gt;  Brush := TDirect2DBrush.Create(Canvas);&lt;br /&gt;  Brush.Handle := RadialBrush;&lt;br /&gt;  Canvas.Pen.Color := clNone;&lt;br /&gt;  Canvas.Brush := Brush;&lt;br /&gt;  Canvas.Ellipse(X - Radius, Y - Radius,&lt;br /&gt;    X + Radius, Y + Radius);&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;{ TGlowButton }&lt;br /&gt;&lt;br /&gt;constructor TGlowSpot.Create(AParent: TWinControl);&lt;br /&gt;begin&lt;br /&gt;  inherited Create;&lt;br /&gt;  Alpha := 1;&lt;br /&gt;  Radius := 80;&lt;br /&gt;  FadeIn := False;&lt;br /&gt;  Randomize;&lt;br /&gt;  Color := RGB(Random(255), Random(256), Random(256));&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;procedure TGlowSpot.Paint(Canvas: TDirect2DCanvas);&lt;br /&gt;begin&lt;br /&gt;  PaintGlow(Canvas, Alpha, X, Y, Radius, Color);&lt;br /&gt;end;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Add a local to hold a lists of TGlowSpots to your form then create it and free it:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;  TTouchForm = class(TForm)&lt;br /&gt;...  &lt;br /&gt;  private&lt;br /&gt;    FSpots: TGlowSpotList;&lt;br /&gt;...&lt;br /&gt;constructor TTouchForm.Create(AOwner: TComponent);&lt;br /&gt;begin&lt;br /&gt;  inherited;&lt;br /&gt;  FCanvas := TDirect2DCanvas.Create(Handle);&lt;br /&gt;  FSpots := TGlowSpotList.Create;&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;destructor TTouchForm.Destroy;&lt;br /&gt;begin&lt;br /&gt;  FCanvas.Free;&lt;br /&gt;  FSpots.Free;&lt;br /&gt;  inherited;&lt;br /&gt;end;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Update the Paint routine to paint the spots:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;procedure TTouchForm.Paint;&lt;br /&gt;var&lt;br /&gt;  Spot: TGlowSpot;&lt;br /&gt;begin&lt;br /&gt;  Canvas.BeginDraw;&lt;br /&gt;&lt;br /&gt;  try&lt;br /&gt;    // Clear Background&lt;br /&gt;    Canvas.RenderTarget.Clear(D2D1ColorF(clBlack));&lt;br /&gt;&lt;br /&gt;    for Spot in FSpots do&lt;br /&gt;      Spot.Paint(Canvas);&lt;br /&gt;&lt;br /&gt;    // FPS&lt;br /&gt;    Canvas.Font.Color := clWhite;&lt;br /&gt;    Canvas.Brush.Color := clNone;&lt;br /&gt;    Canvas.Font.Size := 14;&lt;br /&gt;    Canvas.TextOut(10, 10, FloatToStrF(FFPS, ffFixed, 2, 2) + ' FPS');&lt;br /&gt;  finally&lt;br /&gt;    Canvas.EndDraw;&lt;br /&gt;  end;&lt;br /&gt;end;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Modify the Update method to fade the spots:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;procedure TTouchForm.Update;&lt;br /&gt;var&lt;br /&gt;  Spot: TGlowSpot;&lt;br /&gt;begin&lt;br /&gt;  Inc(FFrames);&lt;br /&gt;&lt;br /&gt;  if GetTickCount - FStartTime &gt;= 1000 then&lt;br /&gt;  begin&lt;br /&gt;    FFPS := FFrames;&lt;br /&gt;    FFrames := 0;&lt;br /&gt;    FStartTime := GetTickCount;&lt;br /&gt;  end;&lt;br /&gt;&lt;br /&gt;  for Spot in FSpots do&lt;br /&gt;  begin&lt;br /&gt;    if Spot.FadeIn then&lt;br /&gt;      Spot.Alpha := Spot.Alpha + 0.012&lt;br /&gt;    else&lt;br /&gt;      Spot.Alpha := Spot.Alpha - 0.012;&lt;br /&gt;&lt;br /&gt;    if Spot.Alpha &lt; 0.3 then&lt;br /&gt;    begin&lt;br /&gt;      Spot.FadeIn := True;&lt;br /&gt;      Spot.Alpha := 0.4&lt;br /&gt;    end&lt;br /&gt;    else if Spot.Alpha &gt; 1 then&lt;br /&gt;      Spot.FadeIn := False;&lt;br /&gt;  end;&lt;br /&gt;end;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;And last handle the WM_TOUCH message:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;  TTouchForm = class(TForm)&lt;br /&gt;...&lt;br /&gt;  procedure WMTouch(var Message: TMessage); message WM_TOUCH;&lt;br /&gt;...&lt;br /&gt;procedure TTouchForm.WMTouch(var Message: TMessage);&lt;br /&gt;&lt;br /&gt;  function TouchPointToPoint(const TouchPoint: TTouchInput): TPoint;&lt;br /&gt;  begin&lt;br /&gt;    Result := Point(TouchPoint.X div 100, TouchPoint.Y div 100);&lt;br /&gt;    PhysicalToLogicalPoint(Handle, Result);&lt;br /&gt;  end;&lt;br /&gt;&lt;br /&gt;var&lt;br /&gt;  TouchInputs: array of TTouchInput;&lt;br /&gt;  TouchInput: TTouchInput;&lt;br /&gt;  Handled: Boolean;&lt;br /&gt;  Point: TPoint;&lt;br /&gt;  Spot: TGlowSpot;&lt;br /&gt;begin&lt;br /&gt;  Handled := False;&lt;br /&gt;  SetLength(TouchInputs, Message.WParam);&lt;br /&gt;  GetTouchInputInfo(Message.LParam, Message.WParam, @TouchInputs[0],&lt;br /&gt;    SizeOf(TTouchInput));&lt;br /&gt;  try&lt;br /&gt;    for TouchInput in TouchInputs do&lt;br /&gt;    begin&lt;br /&gt;      Point := TouchPointToPoint(TouchInput);&lt;br /&gt;      Spot := TGlowSpot.Create(Self);&lt;br /&gt;      Spot.X := Point.X;&lt;br /&gt;      Spot.Y := Point.Y;&lt;br /&gt;      FSpots.Add(Spot);&lt;br /&gt;    end;&lt;br /&gt;&lt;br /&gt;    Handled := True;&lt;br /&gt;  finally&lt;br /&gt;    if Handled then&lt;br /&gt;      CloseTouchInputHandle(Message.LParam)&lt;br /&gt;    else&lt;br /&gt;      inherited;&lt;br /&gt;  end;&lt;br /&gt;end;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;If you ran your app at this point you wouldn't get any touch messages. You need to call RegisterTouchWindow and UnregisterTouchWindow. I find it easiest to call UnregisterTouchWindow in the FormClose:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;procedure TTouchForm.FormClose(Sender: TObject; var Action: TCloseAction);&lt;br /&gt;begin&lt;br /&gt;  UnregisterTouchWindow(Handle);&lt;br /&gt;end;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;and to call RegisterTouchWindow in the CreateWnd:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;procedure TTouchForm.CreateWnd;&lt;br /&gt;begin&lt;br /&gt;  inherited;&lt;br /&gt;  RegisterTouchWindow(Handle, 0);&lt;br /&gt;end;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Now when you run your app and press the screen you'll get glowing spots wherever you touch the screen. Depending on your hardware 1, 2 or more at a time.&lt;br /&gt;&lt;br /&gt;UPDATE: There is a memory leak in this program because I didn't want to delete any code for the next step.&lt;br /&gt;&lt;br /&gt;UPDATE: Fixed HTML to make TGlowSpotList = class(TList) actually read TGlowSpotList(TList&amp;lt;TGlowSpot&amp;gt;);&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-4398465119811197";
/* 468x60, created 7/20/08 */
google_ad_slot = "3994176404";
google_ad_width = 468;
google_ad_height = 60;
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8857431988988627285-5790501889742346194?l=chrisbensen.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ChrisBensenBlog/~4/R1s6uumrlec" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/ChrisBensenBlog/~3/R1s6uumrlec/touch-demo-part-iii.html</link><author>noreply@blogger.com (Chris Bensen)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">15</thr:total><feedburner:origLink>http://chrisbensen.blogspot.com/2009/10/touch-demo-part-iii.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8857431988988627285.post-8002444258492287921</guid><pubDate>Tue, 06 Oct 2009 20:00:00 +0000</pubDate><atom:updated>2009-10-07T09:07:54.064-07:00</atom:updated><title>How to Write Applications Useful for Color Blind Users</title><description>&lt;a href="http://www.wearecolorblind.com"&gt;We Are Color Blind&lt;/a&gt; is an online repository of information for anyone involved with creating content for the web and making it accessible to the color blind. This is a great resource that I feel is useful for anyone creating content or building applications, not just for the web.&lt;br /&gt;&lt;br /&gt;The &lt;a href="http://www.wearecolorblind.com/articles/quick-tips/"&gt;Quick Tips&lt;/a&gt; is probably a good place to start.&lt;br /&gt;&lt;br /&gt;UPDATE: Fixed links.&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-4398465119811197";
/* 468x60, created 7/20/08 */
google_ad_slot = "3994176404";
google_ad_width = 468;
google_ad_height = 60;
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8857431988988627285-8002444258492287921?l=chrisbensen.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ChrisBensenBlog/~4/SPNQeUyZTp8" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/ChrisBensenBlog/~3/SPNQeUyZTp8/how-to-write-applications-useful-for.html</link><author>noreply@blogger.com (Chris Bensen)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total><feedburner:origLink>http://chrisbensen.blogspot.com/2009/10/how-to-write-applications-useful-for.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8857431988988627285.post-564082044553700552</guid><pubDate>Tue, 06 Oct 2009 15:00:00 +0000</pubDate><atom:updated>2009-10-06T10:00:01.612-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Delphi</category><category domain="http://www.blogger.com/atom/ns#">Touch</category><title>Touch Demo Part II</title><description>Last week I posted &lt;a href="http://chrisbensen.blogspot.com/2009/09/touch-demo-part-i.html"&gt;Touch Demo Part I&lt;/a&gt;. This is the continuation to that series.&lt;br /&gt;&lt;br /&gt;In Part I I demonstrated how to add the Direct2D Canvas to a form. This step is another foundation step that will add frames to your application by adding a timer.&lt;br /&gt;&lt;br /&gt;At the moment the form looks like this:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;b&gt;type&lt;/b&gt;&lt;br /&gt;  TTouchForm = &lt;b&gt;class&lt;/b&gt;(TForm)&lt;br /&gt;  &lt;b&gt;private&lt;/b&gt;&lt;br /&gt;    FCanvas: TDirect2DCanvas;&lt;br /&gt;  &lt;b&gt;protected&lt;/b&gt;&lt;br /&gt;    &lt;b&gt;procedure&lt;/b&gt; Paint; override;&lt;br /&gt;    &lt;b&gt;procedure&lt;/b&gt; Resize; override;&lt;br /&gt;    &lt;b&gt;procedure&lt;/b&gt; WMEraseBkgnd(&lt;b&gt;var Message&lt;/b&gt;: TWMEraseBkgnd); &lt;b&gt;message&lt;/b&gt; WM_ERASEBKGND;&lt;br /&gt;&lt;br /&gt;  &lt;b&gt;public&lt;/b&gt;&lt;br /&gt;    &lt;b&gt;constructor&lt;/b&gt; Create(AOwner: TComponent); &lt;b&gt;override&lt;/b&gt;;&lt;br /&gt;    &lt;b&gt;destructor&lt;/b&gt; Destroy; &lt;b&gt;override&lt;/b&gt;;&lt;br /&gt;&lt;br /&gt;    &lt;b&gt;property&lt;/b&gt; Canvas: TDirect2DCanvas &lt;b&gt;read&lt;/b&gt; FCanvas&lt;br /&gt;      &lt;b&gt;write&lt;/b&gt; FCanvas;&lt;br /&gt;  &lt;b&gt;end&lt;/b&gt;;  &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Add the following private fields to keep track of the frames:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;    FFPS: Integer;&lt;br /&gt;    FFrames: Integer;&lt;br /&gt;    FStartTime: Cardinal;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;and initialize them in the FormShow:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;b&gt;procedure&lt;/b&gt; TTouchForm.FormShow(Sender: TObject);&lt;br /&gt;&lt;b&gt;begin&lt;/b&gt;&lt;br /&gt;  FFPS := 0;&lt;br /&gt;  FFrames := 0;&lt;br /&gt;  FStartTime := GetTickCount;&lt;br /&gt;&lt;b&gt;end&lt;/b&gt;;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Next update the Paint function:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;b&gt;procedure&lt;/b&gt; TTouchForm.Paint;&lt;br /&gt;&lt;b&gt;begin&lt;/b&gt;&lt;br /&gt;  Canvas.BeginDraw;&lt;br /&gt;  &lt;b&gt;try&lt;/b&gt;&lt;br /&gt;    &lt;font color=green&gt;// Clear Background&lt;/font&gt;&lt;br /&gt;    Canvas.RenderTarget.Clear(D2D1ColorF(clBlack));&lt;br /&gt;&lt;br /&gt;    &lt;font color=green&gt;// FPS&lt;/font&gt;&lt;br /&gt;    Canvas.Font.Color := clWhite;&lt;br /&gt;    Canvas.Brush.Color := clNone;&lt;br /&gt;    Canvas.Font.Size := &lt;font color=blue&gt;14&lt;/font&gt;;&lt;br /&gt;    Canvas.TextOut(&lt;font color=blue&gt;10&lt;/font&gt;, &lt;font color=blue&gt;10&lt;/font&gt;, FloatToStrF(FFPS, ffFixed, &lt;font color=blue&gt;2&lt;/font&gt;, &lt;font color=blue&gt;2&lt;/font&gt;) + &lt;font color=blue&gt;' FPS'&lt;/font&gt;);  &lt;b&gt;finally&lt;/b&gt;&lt;br /&gt;    Canvas.EndDraw;&lt;br /&gt;  &lt;b&gt;end&lt;/b&gt;;&lt;br /&gt;&lt;b&gt;end&lt;/b&gt;;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;And then add a protected Update method that updates the frames:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;b&gt;procedure&lt;/b&gt; TTouchForm.Update;&lt;br /&gt;&lt;b&gt;begin&lt;/b&gt;&lt;br /&gt;  Inc(FFrames);&lt;br /&gt;&lt;br /&gt;  &lt;b&gt;if&lt;/b&gt; GetTickCount - FStartTime &gt;= 1000 &lt;b&gt;then&lt;/b&gt;&lt;br /&gt;  &lt;b&gt;begin&lt;/b&gt;&lt;br /&gt;    FFPS := FFrames;&lt;br /&gt;    FFrames := 0;&lt;br /&gt;    FStartTime := GetTickCount;&lt;br /&gt;  &lt;b&gt;end&lt;/b&gt;;&lt;br /&gt;&lt;b&gt;end&lt;/b&gt;;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Last, drop a TTimer on your form and set the interval to 10. Also set the form's Align to alClient and the BorderStyle to bsNone.&lt;br /&gt;&lt;br /&gt;Next create the OnTimer event and simply call two functions, Update and Paint:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;b&gt;procedure&lt;/b&gt; TTouchForm.Timer1Timer(Sender: TObject);&lt;br /&gt;&lt;b&gt;begin&lt;/b&gt;&lt;br /&gt;  Update;&lt;br /&gt;  Paint;&lt;br /&gt;&lt;b&gt;end&lt;/b&gt;;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;At this point your form should look like this:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;b&gt;type&lt;/b&gt;&lt;br /&gt;  TTouchForm = &lt;b&gt;class&lt;/b&gt;(TForm)&lt;br /&gt;    Timer1: TTimer;&lt;br /&gt;    &lt;b&gt;procedure&lt;/b&gt; Timer1Timer(Sender: TObject);&lt;br /&gt;    &lt;b&gt;procedure&lt;/b&gt; FormShow(Sender: TObject);&lt;br /&gt;  &lt;b&gt;private&lt;/b&gt;&lt;br /&gt;    FCanvas: TDirect2DCanvas;&lt;br /&gt;    FFPS: Integer;&lt;br /&gt;    FFrames: Integer;&lt;br /&gt;    FStartTime: Cardinal;&lt;br /&gt;  &lt;b&gt;protected&lt;/b&gt;&lt;br /&gt;    &lt;b&gt;procedure&lt;/b&gt; Update;&lt;br /&gt;    &lt;b&gt;procedure&lt;/b&gt; Paint; override;&lt;br /&gt;    &lt;b&gt;procedure&lt;/b&gt; Resize; override;&lt;br /&gt;    &lt;b&gt;procedure&lt;/b&gt; WMEraseBkgnd(&lt;b&gt;var Message&lt;/b&gt;: TWMEraseBkgnd); &lt;b&gt;message&lt;/b&gt; WM_ERASEBKGND;&lt;br /&gt;&lt;br /&gt;  &lt;b&gt;public&lt;/b&gt;&lt;br /&gt;    &lt;b&gt;constructor&lt;/b&gt; Create(AOwner: TComponent); &lt;b&gt;override&lt;/b&gt;;&lt;br /&gt;    &lt;b&gt;destructor&lt;/b&gt; Destroy; &lt;b&gt;override&lt;/b&gt;;&lt;br /&gt;&lt;br /&gt;    &lt;b&gt;property&lt;/b&gt; Canvas: TDirect2DCanvas &lt;b&gt;read&lt;/b&gt; FCanvas&lt;br /&gt;      &lt;b&gt;write&lt;/b&gt; FCanvas;&lt;br /&gt;  &lt;b&gt;end&lt;/b&gt;;  &lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-4398465119811197";
/* 468x60, created 7/20/08 */
google_ad_slot = "3994176404";
google_ad_width = 468;
google_ad_height = 60;
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8857431988988627285-564082044553700552?l=chrisbensen.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ChrisBensenBlog/~4/UMqiBmURj90" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/ChrisBensenBlog/~3/UMqiBmURj90/touch-demo-part-ii.html</link><author>noreply@blogger.com (Chris Bensen)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://chrisbensen.blogspot.com/2009/10/touch-demo-part-ii.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8857431988988627285.post-3519685742618506254</guid><pubDate>Mon, 05 Oct 2009 17:00:00 +0000</pubDate><atom:updated>2009-10-05T10:41:12.496-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Delphi</category><category domain="http://www.blogger.com/atom/ns#">Touch</category><title>HP Touchsmart</title><description>If you buy a Touchsmart be sure to spend the extra duckets to get the NVIDIA graphics card. It comes with an NVIDIA GeForce 9300M which is a pretty smokin' card and you'll be much happier.&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-4398465119811197";
/* 468x60, created 7/20/08 */
google_ad_slot = "3994176404";
google_ad_width = 468;
google_ad_height = 60;
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8857431988988627285-3519685742618506254?l=chrisbensen.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ChrisBensenBlog/~4/FyggNZ_vJD8" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/ChrisBensenBlog/~3/FyggNZ_vJD8/hp-touchsmart.html</link><author>noreply@blogger.com (Chris Bensen)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total><feedburner:origLink>http://chrisbensen.blogspot.com/2009/10/hp-touchsmart.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8857431988988627285.post-6615502801186067966</guid><pubDate>Thu, 24 Sep 2009 22:00:00 +0000</pubDate><atom:updated>2009-09-24T15:00:00.719-07:00</atom:updated><title>Failure Doesn't Preclude Success</title><description>This is a brilliant video on how failure doesn't preclude future success:&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/Y6hz_s2XIAU&amp;hl=en&amp;fs=1&amp;"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/Y6hz_s2XIAU&amp;hl=en&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;/center&gt;&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-4398465119811197";
/* 468x60, created 7/20/08 */
google_ad_slot = "3994176404";
google_ad_width = 468;
google_ad_height = 60;
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8857431988988627285-6615502801186067966?l=chrisbensen.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ChrisBensenBlog/~4/GtfkT8-4M1Q" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/ChrisBensenBlog/~3/GtfkT8-4M1Q/failure-doesnt-preclude-success.html</link><author>noreply@blogger.com (Chris Bensen)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><feedburner:origLink>http://chrisbensen.blogspot.com/2009/09/failure-doesnt-preclude-success.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8857431988988627285.post-7385487004049998013</guid><pubDate>Tue, 22 Sep 2009 17:00:00 +0000</pubDate><atom:updated>2009-10-06T13:29:19.066-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Delphi</category><category domain="http://www.blogger.com/atom/ns#">CodeGear</category><category domain="http://www.blogger.com/atom/ns#">Touch</category><title>Touch Demo Part I</title><description>Over the next few posts I am going to walk you through building one of the touch demos I used in my &lt;a href="http://cc.embarcadero.com/download.aspx?id=27253"&gt;CodeRage 4 Session&lt;/a&gt;. This demo demonstrates using Direct2D and the WM_TOUCH message. Before we get started here is a brief explanation of these two technologies.&lt;br /&gt;&lt;br /&gt;Since Windows Vista GDI has become a legacy drawing API supported with software rendering on top of Direct3D. Direct3D is great but it is very raw. This is where Direct2D shines for applications. Direct2D has all the performance benefits of Direct3D and adds support for bitmaps and text and support for GDI Interop all with a much simpler API. And Delphi 2010 has made it even simpler by wrapping it up with a TDirect2DCanvas that is very similar to TCanvas. Direct2D supports remote rendering through Remote Desktop which is very cool.&lt;br /&gt;&lt;br /&gt;WM_TOUCH is the raw multi-touch message that provides various states of contact with the input digitizer for hot sizzling touch applications.&lt;br /&gt;&lt;br /&gt;Now that we got that out of the way, create yourself a VCL Application. We want to start painting with Direct2D so add Direct2D and D2D1 to the uses and a TDirect2DCanvas property to your form like this:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;  &lt;b&gt;private&lt;/b&gt;&lt;br /&gt;    FCanvas: TDirect2DCanvas;&lt;br /&gt;  ...&lt;br /&gt;  &lt;b&gt;public&lt;/b&gt;&lt;br /&gt;    &lt;b&gt;constructor&lt;/b&gt; Create(AOwner: TComponent); &lt;b&gt;override&lt;/b&gt;;&lt;br /&gt;    &lt;b&gt;destructor&lt;/b&gt; Destroy; &lt;b&gt;override&lt;/b&gt;;&lt;br /&gt;&lt;br /&gt;    &lt;b&gt;property&lt;/b&gt; Canvas: TDirect2DCanvas &lt;b&gt;read&lt;/b&gt; FCanvas&lt;br /&gt;      &lt;b&gt;write&lt;/b&gt; FCanvas;&lt;br /&gt;  &lt;b&gt;end&lt;/b&gt;;&lt;br /&gt;...&lt;br /&gt;&lt;b&gt;constructor&lt;/b&gt; TTouchForm.Create(AOwner: TComponent);&lt;br /&gt;&lt;b&gt;begin&lt;/b&gt;&lt;br /&gt;  &lt;b&gt;inherited&lt;/b&gt;;&lt;br /&gt;  FCanvas := TDirect2DCanvas.Create(Handle);&lt;br /&gt;&lt;b&gt;end&lt;/b&gt;;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;destructor&lt;/b&gt; TTouchForm.Destroy;&lt;br /&gt;&lt;b&gt;begin&lt;/b&gt;&lt;br /&gt;  FCanvas.Free;&lt;br /&gt;  &lt;b&gt;inherited&lt;/b&gt;;&lt;br /&gt;&lt;b&gt;end&lt;/b&gt;;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;This creates a Direct2D surface (TDirect2DCanvas) that we can draw to instead of the traditional GDI surface (TCanvas).&lt;br /&gt;&lt;br /&gt;Depending on the type of application you build you may experience some flicker. To avoid this handle the message WM_ERASEBKGND and returns true.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;b&gt;procedure&lt;/b&gt; TTouchForm.WMEraseBkgnd(&lt;br /&gt;  &lt;b&gt;var&lt;/b&gt; Message: TWMEraseBkgnd);&lt;br /&gt;&lt;b&gt;begin&lt;/b&gt;&lt;br /&gt;  Message.Result := 1;&lt;br /&gt;&lt;b&gt;end&lt;/b&gt;;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Next override Paint and just draw a line:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;b&gt;procedure&lt;/b&gt; TTouchForm.Paint;&lt;br /&gt;&lt;b&gt;begin&lt;/b&gt;&lt;br /&gt;  Canvas.BeginDraw;&lt;br /&gt;  &lt;b&gt;try&lt;/b&gt;&lt;br /&gt;    Canvas.Pen.Color := clRed;&lt;br /&gt;    Canvas.MoveTo(10, 10);&lt;br /&gt;    Canvas.LineTo(40, 40);&lt;br /&gt;  &lt;b&gt;finally&lt;/b&gt;&lt;br /&gt;    Canvas.EndDraw;&lt;br /&gt;  &lt;b&gt;end&lt;/b&gt;;&lt;br /&gt;&lt;b&gt;end&lt;/b&gt;;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;If you run your application at this point and resize the form you will noticed that the line changes size. This is because the view port is resizing to scale to the window and  your line will do the same. To prevent this override the Resize method and add the following:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;b&gt;procedure&lt;/b&gt; TTouchForm.Resize;&lt;br /&gt;&lt;b&gt;var&lt;/b&gt;&lt;br /&gt;  HwndTarget: ID2D1HwndRenderTarget;&lt;br /&gt;&lt;b&gt;begin&lt;/b&gt;&lt;br /&gt;  &lt;b&gt;inherited&lt;/b&gt;;&lt;br /&gt;  &lt;b&gt;if&lt;/b&gt; Supports(Canvas.RenderTarget,&lt;br /&gt;    ID2D1HwndRenderTarget, HwndTarget) &lt;b&gt;then&lt;/b&gt;&lt;br /&gt;    HwndTarget.Resize(D2D1SizeU(ClientWidth, ClientHeight));&lt;br /&gt;  Invalidate;&lt;br /&gt;&lt;b&gt;end&lt;/b&gt;;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Now you have a form that renders everything drawn to the Canvas through a Direct2D surface.&lt;br /&gt;&lt;br /&gt;UPDATE: Added Invalidate to Resize because when resizing the window larger it will force a redraw but smaller will not because typically a redraw isn't required.&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-4398465119811197";
/* 468x60, created 7/20/08 */
google_ad_slot = "3994176404";
google_ad_width = 468;
google_ad_height = 60;
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8857431988988627285-7385487004049998013?l=chrisbensen.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ChrisBensenBlog/~4/JT8AElwN5fM" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/ChrisBensenBlog/~3/JT8AElwN5fM/touch-demo-part-i.html</link><author>noreply@blogger.com (Chris Bensen)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">4</thr:total><feedburner:origLink>http://chrisbensen.blogspot.com/2009/09/touch-demo-part-i.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8857431988988627285.post-6340840714169702414</guid><pubDate>Tue, 22 Sep 2009 15:00:00 +0000</pubDate><atom:updated>2009-09-22T09:22:53.272-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Delphi</category><category domain="http://www.blogger.com/atom/ns#">Tips</category><category domain="http://www.blogger.com/atom/ns#">Touch</category><category domain="http://www.blogger.com/atom/ns#">C++Builder</category><title>Delphi 2010 - Touch and Pen added to TShiftState</title><description>While we were researching adding Touch and Gesturing to VCL we quickly realized it was important to detect what type of input produced the mouse messages. So we introduced some new elements to TShiftState: ssTouch and ssPen:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;  TShiftState = &lt;b&gt;set of&lt;/b&gt; (ssShift, ssAlt, ssCtrl,&lt;br /&gt;    ssLeft, ssRight, ssMiddle, ssDouble, ssTouch, ssPen);&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;One of the key reasons this is so important is when handling WM_TOUCH messages the mouse messages are also fired. Chances are you only want to handle one of them. On a non-touch machine you want to handle the mouse. So this allows input to be filtered and handled independently.&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-4398465119811197";
/* 468x60, created 7/20/08 */
google_ad_slot = "3994176404";
google_ad_width = 468;
google_ad_height = 60;
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8857431988988627285-6340840714169702414?l=chrisbensen.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ChrisBensenBlog/~4/fj2KPdMyVaY" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/ChrisBensenBlog/~3/fj2KPdMyVaY/delphi-2010-touch-and-pen-added-to.html</link><author>noreply@blogger.com (Chris Bensen)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://chrisbensen.blogspot.com/2009/09/delphi-2010-touch-and-pen-added-to.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8857431988988627285.post-208541682022528919</guid><pubDate>Thu, 17 Sep 2009 04:49:00 +0000</pubDate><atom:updated>2009-09-22T09:23:39.451-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">photo</category><title>September Photo of the Month</title><description>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_HmveHAmi4No/SrG_8dWYqZI/AAAAAAAABnQ/3UOYhdJGIPE/s1600-h/CottonwoodLake.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 102px;" src="http://1.bp.blogspot.com/_HmveHAmi4No/SrG_8dWYqZI/AAAAAAAABnQ/3UOYhdJGIPE/s320/CottonwoodLake.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5382294075076028818" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This is a photo of Cottonwood Lake in Inyo National Forest. This photo is a panorama stitched from 14 photos! And one of the most beautiful mornings I've ever had the pleasure to see.&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-4398465119811197";
/* 468x60, created 7/20/08 */
google_ad_slot = "3994176404";
google_ad_width = 468;
google_ad_height = 60;
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8857431988988627285-208541682022528919?l=chrisbensen.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ChrisBensenBlog/~4/9UMkuMRnHRk" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/ChrisBensenBlog/~3/9UMkuMRnHRk/september-photo-of-month.html</link><author>noreply@blogger.com (Chris Bensen)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_HmveHAmi4No/SrG_8dWYqZI/AAAAAAAABnQ/3UOYhdJGIPE/s72-c/CottonwoodLake.jpg" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><feedburner:origLink>http://chrisbensen.blogspot.com/2009/09/september-photo-of-month.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8857431988988627285.post-9211976709607479980</guid><pubDate>Tue, 15 Sep 2009 16:00:00 +0000</pubDate><atom:updated>2009-09-15T18:11:58.940-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Delphi</category><title>Interactive Gestures 101</title><description>As promised at my CodeRage 4 session I will be blogging about Gestures and the Touch feature of Delphi 2010. So here is a quick set of steps to use interactive gestures. It will require a multi-touch system such as I described &lt;a href="http://chrisbensen.blogspot.com/2009/08/touch-hardware.html"&gt;here&lt;/a&gt; (the mouse will not work here) and some context by watching my CodeRage 4 session from &lt;a href="http://cc.embarcadero.com/download.aspx?id=27253"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;1. File | New VCL Application&lt;br /&gt;2. Drop a TPanel on your form &lt;i&gt;(there is a known bug using interactive gestures on the form)&lt;/i&gt;&lt;br /&gt;3. Select Panel1 and expand the Touch property&lt;br /&gt;4. Check igoPanSinglerFingerHorizontal, and check igPan. I also like to turn off toPressandHold&lt;br /&gt;5. Go to events and add the following code to the OnGesture event:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;b&gt;if&lt;/b&gt; EventInfo.GestureID = igiPan &lt;b&gt;then&lt;/b&gt;&lt;br /&gt;  Caption := IntToStr(EventInfo.Location.X);&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Now run the application and move your finger left and right on the panel.&lt;br /&gt;&lt;br /&gt;Note: Interactive Gestures don't require a TGestureManage. Only Gestures require the Gesture Manager.&lt;br /&gt;&lt;br /&gt;Update: Fixed the code and added links for touch hardware and my CodeRage 4 session.&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-4398465119811197";
/* 468x60, created 7/20/08 */
google_ad_slot = "3994176404";
google_ad_width = 468;
google_ad_height = 60;
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8857431988988627285-9211976709607479980?l=chrisbensen.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ChrisBensenBlog/~4/03FsMH684oA" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/ChrisBensenBlog/~3/03FsMH684oA/interactive-gestures-101.html</link><author>noreply@blogger.com (Chris Bensen)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">4</thr:total><feedburner:origLink>http://chrisbensen.blogspot.com/2009/09/interactive-gestures-101.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8857431988988627285.post-2988312039319044859</guid><pubDate>Wed, 02 Sep 2009 21:00:00 +0000</pubDate><atom:updated>2009-09-02T14:37:13.738-07:00</atom:updated><title>CodeRage 4</title><description>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://conferences.embarcadero.com/coderage"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 196px; height: 196px;" src="http://1.bp.blogspot.com/_HmveHAmi4No/Sp1rz2GSPrI/AAAAAAAABnI/vV0Pftqbxic/s320/196x196_logo.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5376572068589616818" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Register for CodeRage4 and come check out the &lt;a href="http://conferences.embarcadero.com/coderage/sessions"&gt;sessions&lt;/a&gt;. It's all free so why not, it should be a lot of fun.&lt;br /&gt;&lt;br /&gt;I'll be at three talks answering questions:&lt;br /&gt;&lt;br /&gt;Building Awesome Touch Enabled Applications by Chris Bensen&lt;br /&gt;Tuesday, September 8, 2009 -- 11:00am - 11:45am PDT&lt;br /&gt;Wednesday, September 9, 2009 -- 9:00am - 9:45am PDT&lt;br /&gt;&lt;br /&gt;Hands-On: Gestures in the VCL by Seppy Bloom&lt;br /&gt;Tuesday, September 8, 2009 -- 4:00pm - 4:45pm PDT&lt;br /&gt;&lt;br /&gt;What's New in the VCL *&lt;br /&gt;Tuesday, September 8, 2009 -- 3:00pm - 3:45pm PDT&lt;br /&gt;Thursday, September 10, 2009 -- 8:00am - 8:45am PDT (I won't be here because I'll be on vacation!)&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-4398465119811197";
/* 468x60, created 7/20/08 */
google_ad_slot = "3994176404";
google_ad_width = 468;
google_ad_height = 60;
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8857431988988627285-2988312039319044859?l=chrisbensen.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ChrisBensenBlog/~4/jUPfs9DcKIo" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/ChrisBensenBlog/~3/jUPfs9DcKIo/coderage-4.html</link><author>noreply@blogger.com (Chris Bensen)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_HmveHAmi4No/Sp1rz2GSPrI/AAAAAAAABnI/vV0Pftqbxic/s72-c/196x196_logo.jpg" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total><feedburner:origLink>http://chrisbensen.blogspot.com/2009/09/coderage-4.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8857431988988627285.post-8024482623242313197</guid><pubDate>Thu, 20 Aug 2009 21:31:00 +0000</pubDate><atom:updated>2009-08-20T17:44:22.467-07:00</atom:updated><title>RAD Studio 2010 - SOAP 1.2</title><description>Chris White here.  This cycle around I have moved from working on the product's many areas that make up the IDE's Help experience to something that has been brand new to me, SOAP.&lt;br /&gt;&lt;br /&gt;This posed quite a few challenges for me, one being I knew nothing about SOAP.  So after familiarizing myself with SOAP, I started working on the largest feature request in the SOAP area, upgrading our SOAP client support to SOAP 1.2.  So, I flew headlong into learning the differences between the specs for SOAP 1.1 and 1.2.  With the new SOAP 1.2 client support, our ability to communicate with other SOAP Web Services has greatly increased.&lt;br /&gt;&lt;br /&gt;Also since it had been a while, I gave the WSDL Importer Wizard a face lift.  I simplified the UI greatly.  There are only 3 dialogs (4 if you don't have a project open), all of which are in succession; as well as moved it to an easier to get to location (Component -&gt; Import WSDL...).  One nice thing about moving it to the Component menu, you can now import a WSDL without a project open.  Hopefully this will be as useful to users as it has been to me; creating a project just to look at a WSDL got tiresome.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_chsEO63IbNk/So3Ih6c0ljI/AAAAAAAAAAM/B_H1_o7cBaA/s1600-h/WSDLWizard1.jpg"&gt;&lt;img style="float:center; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 320px; height: 262px;" src="http://3.bp.blogspot.com/_chsEO63IbNk/So3Ih6c0ljI/AAAAAAAAAAM/B_H1_o7cBaA/s320/WSDLWizard1.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5372170415474251314" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_chsEO63IbNk/So3IltTMC1I/AAAAAAAAAAU/Xlms6ecyst8/s1600-h/WSDLWizard2.jpg"&gt;&lt;img style="float:center; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 320px; height: 262px;" src="http://2.bp.blogspot.com/_chsEO63IbNk/So3IltTMC1I/AAAAAAAAAAU/Xlms6ecyst8/s320/WSDLWizard2.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5372170480663661394" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_chsEO63IbNk/So3Iqa6gvuI/AAAAAAAAAAc/vwa4Ge0DFqg/s1600-h/WSDLWizard3.jpg"&gt;&lt;img style="float:center; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 320px; height: 261px;" src="http://1.bp.blogspot.com/_chsEO63IbNk/So3Iqa6gvuI/AAAAAAAAAAc/vwa4Ge0DFqg/s320/WSDLWizard3.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5372170561627668194" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_chsEO63IbNk/So3IuKPGmcI/AAAAAAAAAAk/5C9UOgehCfQ/s1600-h/WSDLWizard4.jpg"&gt;&lt;img style="float:center; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 320px; height: 262px;" src="http://2.bp.blogspot.com/_chsEO63IbNk/So3IuKPGmcI/AAAAAAAAAAk/5C9UOgehCfQ/s320/WSDLWizard4.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5372170625870109122" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;WSDLImp.exe also got sync'd up with the IDE's WSDL Importer Wizard.  So now you can do everything with the commandline as you can with the IDE.&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-4398465119811197";
/* 468x60, created 7/20/08 */
google_ad_slot = "3994176404";
google_ad_width = 468;
google_ad_height = 60;
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8857431988988627285-8024482623242313197?l=chrisbensen.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ChrisBensenBlog/~4/_0qWLuJ16-I" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/ChrisBensenBlog/~3/_0qWLuJ16-I/rad-studio-2010-soap-12.html</link><author>noreply@blogger.com (Chris White)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/_chsEO63IbNk/So3Ih6c0ljI/AAAAAAAAAAM/B_H1_o7cBaA/s72-c/WSDLWizard1.jpg" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">5</thr:total><feedburner:origLink>http://chrisbensen.blogspot.com/2009/08/rad-studio-2010-soap-12.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8857431988988627285.post-5362370629762121762</guid><pubDate>Mon, 17 Aug 2009 21:00:00 +0000</pubDate><atom:updated>2009-10-05T10:39:59.354-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Delphi</category><category domain="http://www.blogger.com/atom/ns#">CodeGear</category><category domain="http://www.blogger.com/atom/ns#">Touch</category><category domain="http://www.blogger.com/atom/ns#">C++Builder</category><title>Touch Hardware</title><description>One of the first questions people ask about multi-touch is what hardware to get.&lt;br /&gt;&lt;br /&gt;Everything is supported just at different levels. First you have touch screens that emulate the mouse such as most Point-of-Sale monitors. We have a Dell POS and a Planar PT 19. These are only good for big buttons. Any sort of dragging your finger across the screen is lost by the device/driver. The Planar doesn't loose the mouse as bad as the Dell.&lt;br /&gt;&lt;br /&gt;Then you have the old school tablet laptops. These add pen and sometimes support touch with the finger as well. The pen resolution is equal to or better than the mouse. The finger with these older systems is an afterthought. Lenovo IBM X61 is an example of such a system.&lt;br /&gt;&lt;br /&gt;Next you have all-in-one systems such as the Asus EeeTop which has better drivers/hardware than the Point-of-Sale monitors but they are still just a touch screen mouse. I.E. push the monitor with your finger and you get a left mouse click. The Asus has a pretty decent touch screen but still only supports one touch point and it is just emulating the mouse. The processor on the Asus is really slow.&lt;br /&gt;&lt;br /&gt;Now enters multi-touch which only Windows 7 really supports. Some Vista systems support multi-touch but just go with Windows 7, you'll be much happier.&lt;br /&gt;&lt;br /&gt;Building on the tablet there are currently two shipping multi-touch laptops. One by Dell and one by HP. These make touch a forethought and add multi-touch. The HP supports 2 touch points and with an updated driver 4. The Dell supports 10 touch points. They are the exact same display so it must be the driver or other components that allow the extra touch points on the Dell. A Dell is currently sitting on my desk and it is the nicest of the systems. It feels like a laptop that I would buy for myself. The Dell is priced a bit high but it is a nice slimline laptop. The HP feels a bit cheap and has some flowery patterns on it.&lt;br /&gt;&lt;br /&gt;Lastly you have the all-in-one multi-touch systems such as the HP TouchSmart which features a large display and two touch points. We have purchased two batches of these. The first batch is pretty bad. I'm pretty sure these are the ones currently selling on Woot. The second batch is a lot better but the Dell and HP laptops I mentioned above are better. Update: If you buy one of these be sure to get the NVIDIA graphics card.&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-4398465119811197";
/* 468x60, created 7/20/08 */
google_ad_slot = "3994176404";
google_ad_width = 468;
google_ad_height = 60;
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8857431988988627285-5362370629762121762?l=chrisbensen.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ChrisBensenBlog/~4/FFoWClVDGJ0" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/ChrisBensenBlog/~3/FFoWClVDGJ0/touch-hardware.html</link><author>noreply@blogger.com (Chris Bensen)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">19</thr:total><feedburner:origLink>http://chrisbensen.blogspot.com/2009/08/touch-hardware.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8857431988988627285.post-7124517210039859353</guid><pubDate>Thu, 13 Aug 2009 16:00:00 +0000</pubDate><atom:updated>2009-08-13T14:14:29.849-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Delphi</category><title>Delphi 2010 - New Units</title><description>A lot of header translations and new units have been added. Here are just a few that are interesting:&lt;br /&gt;&lt;br /&gt;Wincodec.pas&lt;br /&gt;Enables TWICImage. Support for Tiff, CR2 or NEF anyone?&lt;br /&gt;&lt;br /&gt;Cor.pas&lt;br /&gt;.NET unmanaged compiler API. Always fun to crack open Assemblies from native code.&lt;br /&gt;&lt;br /&gt;Direct3D.pas, D3DX9.pas, D2D1.pas&lt;br /&gt;DirectX header translations.&lt;br /&gt;&lt;br /&gt;Direct2D.pas&lt;br /&gt;TDirect2DCanvas. Get to Direct2D using the same TCanvas methods you know and love.&lt;br /&gt;&lt;br /&gt;Manipulations.pas&lt;br /&gt;The inertia manipulators. Great for spinning and throwing things around your screen.&lt;br /&gt;&lt;br /&gt;Gestures.pas, GestureMgr.pas, GestureCtrls.pas&lt;br /&gt;Hot gesturing goodness.&lt;br /&gt;&lt;br /&gt;Keyboard.pas, KeyboardTypes.pas&lt;br /&gt;TTouchKeyboard for all your touchscreen input needs.&lt;br /&gt;&lt;br /&gt;IOUtils.pas&lt;br /&gt;A serious addition to the RTL with TDirectory, TPath, and TFile.&lt;br /&gt;&lt;br /&gt;Update: I forgot one RTTI.pas&lt;br /&gt;For some very cool runtime stuff.&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-4398465119811197";
/* 468x60, created 7/20/08 */
google_ad_slot = "3994176404";
google_ad_width = 468;
google_ad_height = 60;
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8857431988988627285-7124517210039859353?l=chrisbensen.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ChrisBensenBlog/~4/b_HCz_KfPQ8" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/ChrisBensenBlog/~3/b_HCz_KfPQ8/delphi-2010-new-units.html</link><author>noreply@blogger.com (Chris Bensen)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">13</thr:total><feedburner:origLink>http://chrisbensen.blogspot.com/2009/08/delphi-2010-new-units.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8857431988988627285.post-3242750137975154890</guid><pubDate>Thu, 13 Aug 2009 01:00:00 +0000</pubDate><atom:updated>2009-08-12T18:00:03.129-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Delphi</category><category domain="http://www.blogger.com/atom/ns#">Touch</category><title>RAD Studio 2010 - Gestures and Multi-Touch</title><description>One of the most exciting features in RAD Studio 2010 is Gestures and Multi-Touch (or what I like to call Interactive Gestures). I can't really show much here because it requires video, but if you've seen the videos or my Delphi Live! talk then you've seen some of what can be done.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_HmveHAmi4No/SoLnyLAkcEI/AAAAAAAABnA/vXaCgZKhkWI/s1600-h/TouchProperty.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 233px; height: 320px;" src="http://1.bp.blogspot.com/_HmveHAmi4No/SoLnyLAkcEI/AAAAAAAABnA/vXaCgZKhkWI/s320/TouchProperty.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5369108554913706050" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Gestures takes full advantage of synthetic properties so you don't see much in the Object Inspector until a GestureManager is assigned. But Interactive Gestures and Tablet Options can be fully utilized without any setup, just check a few check boxes and add some code to the OnGesture event.&lt;br /&gt;&lt;br /&gt;Gestures of all flavors can be added per control but different flavors of gestures are mutually exclusive. So you can have a panel with the Gestures and another panel with Interactive Gestures. It's pretty slick.&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-4398465119811197";
/* 468x60, created 7/20/08 */
google_ad_slot = "3994176404";
google_ad_width = 468;
google_ad_height = 60;
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8857431988988627285-3242750137975154890?l=chrisbensen.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ChrisBensenBlog/~4/Q3_Q2UyzBg0" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/ChrisBensenBlog/~3/Q3_Q2UyzBg0/rad-studio-2010-gestures-and-multi.html</link><author>noreply@blogger.com (Chris Bensen)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_HmveHAmi4No/SoLnyLAkcEI/AAAAAAAABnA/vXaCgZKhkWI/s72-c/TouchProperty.jpg" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://chrisbensen.blogspot.com/2009/08/rad-studio-2010-gestures-and-multi.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8857431988988627285.post-3780397456910811830</guid><pubDate>Wed, 12 Aug 2009 13:00:00 +0000</pubDate><atom:updated>2009-08-12T06:00:06.700-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Delphi</category><category domain="http://www.blogger.com/atom/ns#">Touch</category><title>RAD Studio 2010 - Touch Keyboard</title><description>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_HmveHAmi4No/SoH3ReBaW5I/AAAAAAAABm4/mpQAO0qeDM0/s1600-h/Keyboard.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 178px;" src="http://3.bp.blogspot.com/_HmveHAmi4No/SoH3ReBaW5I/AAAAAAAABm4/mpQAO0qeDM0/s320/Keyboard.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5368844110291164050" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The Touch Keyboard (TTouchKeyboard) is a new component designed specifically for touch systems. It supports a pile of languages and multi-touch. You can see the multi-touch in action in the screen shot above where I was holding down shift and pressing G. The Touch Keyboard is supported on Windows 2000, XP, Vista and Windows 7, but only Windows 7 gets multi-touch.&lt;br /&gt;&lt;br /&gt;The Touch Keyboard is designed to be embedded in your applications where you need input from the users. Notice there is no Windows key. After much thought we decided to take a different approach to the Touch Keyboard than Microsoft did with their on screen keyboard. Our focus was on touch systems without a physical keyboard, hence the name, where Microsoft emulated the hardware keyboard.&lt;br /&gt;&lt;br /&gt;A lot of thought was given to the colors and the font uses. Touch systems are probably more likely to be used in harsh light so there needed to be a lot of contrast between the keys and the background.&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-4398465119811197";
/* 468x60, created 7/20/08 */
google_ad_slot = "3994176404";
google_ad_width = 468;
google_ad_height = 60;
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8857431988988627285-3780397456910811830?l=chrisbensen.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ChrisBensenBlog/~4/KcboU58AdYw" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/ChrisBensenBlog/~3/KcboU58AdYw/rad-studio-2010-touch-keyboard.html</link><author>noreply@blogger.com (Chris Bensen)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/_HmveHAmi4No/SoH3ReBaW5I/AAAAAAAABm4/mpQAO0qeDM0/s72-c/Keyboard.jpg" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">20</thr:total><feedburner:origLink>http://chrisbensen.blogspot.com/2009/08/rad-studio-2010-touch-keyboard.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8857431988988627285.post-7498190357536405705</guid><pubDate>Tue, 11 Aug 2009 13:00:00 +0000</pubDate><atom:updated>2009-08-12T08:34:33.210-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Delphi</category><title>RAD Studio 2010 - Touch Preview Video</title><description>Watch the &lt;a href="http://etnaweb04.embarcadero.com/rad-studio-2010/"&gt;Touch and Gesturing preview video&lt;/a&gt; where David I and I did some serious acting. And then there was some serious editing by someone that isn't David I.
&lt;br /&gt;
&lt;br /&gt;&lt;embed src='http://etnaweb04.embarcadero.com/includes/mediaplayer/player-viral.swf' height='300' width='400' allowscriptaccess='always' allowfullscreen='true' flashvars='file=http%3A%2F%2Faltd.embarcadero.com%2Fdownload%2Fvideo%2Fweaver%2Frad-studio-touch-gestures-preview.mp4&amp;plugins=viral-1d'/&gt;
&lt;br /&gt;
&lt;br /&gt;Update: Here is a Japanese version that was translated before the editing:
&lt;br /&gt;
&lt;br /&gt;&lt;embed src='http://etnaweb04.embarcadero.com/includes/mediaplayer/player-viral.swf' height='300' width='400' allowscriptaccess='always' allowfullscreen='true' flashvars='file=http%3A%2F%2Faltd.embarcadero.com%2Fdownload%2Fvideo%2Fweaver%2Frad-studio-touch-gestures-preview-jp.mp4&amp;plugins=viral-1d'/&gt;
&lt;br /&gt;
&lt;br /&gt;For those interested the songs used in the video are "I Touch Myself by Divinyls" and "Touch Me by The Doors". You can listen or buy them here (I wish Amazon would just let me put a little play button so you didn't have to go to their website):
&lt;br /&gt;
&lt;br /&gt;&lt;iframe src="http://rcm.amazon.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=chribens-20&amp;o=1&amp;p=8&amp;l=as1&amp;m=amazon&amp;f=ifr&amp;md=10FE9736YVPPT7A0FBG2&amp;asins=B0011Z933I" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"&gt;&lt;/iframe&gt;&lt;iframe src="http://rcm.amazon.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=chribens-20&amp;o=1&amp;p=8&amp;l=as1&amp;m=amazon&amp;f=ifr&amp;md=10FE9736YVPPT7A0FBG2&amp;asins=B000TDUUZS" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"&gt;&lt;/iframe&gt;
&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-4398465119811197";
/* 468x60, created 7/20/08 */
google_ad_slot = "3994176404";
google_ad_width = 468;
google_ad_height = 60;
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8857431988988627285-7498190357536405705?l=chrisbensen.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ChrisBensenBlog/~4/4vUr79ohnoU" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/ChrisBensenBlog/~3/4vUr79ohnoU/rad-studio-2010-touch-preview-video.html</link><author>noreply@blogger.com (Chris Bensen)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">7</thr:total><feedburner:origLink>http://chrisbensen.blogspot.com/2009/08/rad-studio-2010-touch-preview-video.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8857431988988627285.post-4343889245877566641</guid><pubDate>Thu, 06 Aug 2009 15:30:00 +0000</pubDate><atom:updated>2009-08-06T09:39:14.934-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Delphi</category><category domain="http://www.blogger.com/atom/ns#">CodeGear</category><title>RAD Studio 2010 - Actions</title><description>One very useful feature is an updated Action property editor. The little drop down hasn't changed in years and we wanted to get to our Actions quicker. So &lt;a href="http://blogs.embarcadero.com/seppybloom/"&gt;Seppy Bloom&lt;/a&gt; through some Object Inspector trickery, which you can find all about in his &lt;a href="http://conferences.embarcadero.com/coderage/"&gt;CodeRage 4&lt;/a&gt; session &lt;a href="http://conferences.embarcadero.com/coderage/sessions"&gt;Customizing the Object Inspector&lt;/a&gt;, updated the Action property editor.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_HmveHAmi4No/Snr9Js_WDpI/AAAAAAAABmo/J4h3343LWSM/s1600-h/Actions2.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 194px; height: 132px;" src="http://1.bp.blogspot.com/_HmveHAmi4No/Snr9Js_WDpI/AAAAAAAABmo/J4h3343LWSM/s320/Actions2.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5366880249102864018" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_HmveHAmi4No/Snr5HiOs-MI/AAAAAAAABmg/sLpr7IT3U7E/s1600-h/Actions.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 236px;" src="http://3.bp.blogspot.com/_HmveHAmi4No/Snr5HiOs-MI/AAAAAAAABmg/sLpr7IT3U7E/s320/Actions.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5366875813808240834" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;What you are looking at is a new drop down that allows you to selection from one simple menu any standard action from the action list, choose any existing actions, or create a new action.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_HmveHAmi4No/Snr-ippVb3I/AAAAAAAABmw/8GlZpP7Mjp8/s1600-h/Actions3.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 298px;" src="http://4.bp.blogspot.com/_HmveHAmi4No/Snr-ippVb3I/AAAAAAAABmw/8GlZpP7Mjp8/s320/Actions3.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5366881777213599602" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;If you have more than one action list then just choose which one to use.&lt;br /&gt;&lt;br /&gt;Just one more example of increased productivity.&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-4398465119811197";
/* 468x60, created 7/20/08 */
google_ad_slot = "3994176404";
google_ad_width = 468;
google_ad_height = 60;
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8857431988988627285-4343889245877566641?l=chrisbensen.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ChrisBensenBlog/~4/KNnzZGXZrbY" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/ChrisBensenBlog/~3/KNnzZGXZrbY/rad-studio-2010-actions.html</link><author>noreply@blogger.com (Chris Bensen)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_HmveHAmi4No/Snr9Js_WDpI/AAAAAAAABmo/J4h3343LWSM/s72-c/Actions2.jpg" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">5</thr:total><feedburner:origLink>http://chrisbensen.blogspot.com/2009/08/rad-studio-2010-actions.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8857431988988627285.post-3808645109879717630</guid><pubDate>Wed, 05 Aug 2009 16:00:00 +0000</pubDate><atom:updated>2009-08-05T09:43:39.233-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Delphi</category><title>RAD Studio 2010 - The IDE</title><description>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_HmveHAmi4No/SnmxLdtZLnI/AAAAAAAABmA/aOQDUR6cKl8/s1600-h/IDE.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 200px;" src="http://2.bp.blogspot.com/_HmveHAmi4No/SnmxLdtZLnI/AAAAAAAABmA/aOQDUR6cKl8/s320/IDE.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5366515241500356210" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Here is a screen shot of the entire IDE showing many of the new features. From top to bottom you can see a retro &lt;a href="http://windwings.wordpress.com/2009/08/05/rad-studio-2010-review-2-the-new-old-component-toolbar/"&gt;component palette&lt;/a&gt;. In the middle of the screen you can see IDE Insight. In the object inspector you can see the &lt;a href="http://chrisbensen.blogspot.com/2009/08/embarcadero-rad-studio-2010.html"&gt;check boxes I mentioned yesterday&lt;/a&gt;. And at the bottom of the editor you can see the search bar. And of course I'm running it on Windows 7.&lt;br /&gt;&lt;br /&gt;As you can tell from all the blog posts everyone here loves IDE Insight. And I briefly mentioned yesterday find units has changed to use IDE Insight. Find Units (CTRL + F12) and Find Forms (Shift + F12) are specialized versions of IDE Insight. Here's a screenshot of each of them to compare:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_HmveHAmi4No/Snm1v2_ZuuI/AAAAAAAABmY/72q-l0fAk0Y/s1600-h/IDEInsight.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 308px;" src="http://4.bp.blogspot.com/_HmveHAmi4No/Snm1v2_ZuuI/AAAAAAAABmY/72q-l0fAk0Y/s320/IDEInsight.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5366520264808577762" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_HmveHAmi4No/Snm1Rc2Zf9I/AAAAAAAABmQ/WNrZ7NENQ-I/s1600-h/SearchForms.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 308px;" src="http://2.bp.blogspot.com/_HmveHAmi4No/Snm1Rc2Zf9I/AAAAAAAABmQ/WNrZ7NENQ-I/s320/SearchForms.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5366519742395416530" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_HmveHAmi4No/Snhb80r0TXI/AAAAAAAABlQ/ELLINHIF0gQ/s1600-h/SearchUnits.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 308px;" src="http://2.bp.blogspot.com/_HmveHAmi4No/Snhb80r0TXI/AAAAAAAABlQ/ELLINHIF0gQ/s320/SearchUnits.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5366140056504651122" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-4398465119811197";
/* 468x60, created 7/20/08 */
google_ad_slot = "3994176404";
google_ad_width = 468;
google_ad_height = 60;
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8857431988988627285-3808645109879717630?l=chrisbensen.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ChrisBensenBlog/~4/1oxB8Fy4Jec" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/ChrisBensenBlog/~3/1oxB8Fy4Jec/rad-studio-2010-ide.html</link><author>noreply@blogger.com (Chris Bensen)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_HmveHAmi4No/SnmxLdtZLnI/AAAAAAAABmA/aOQDUR6cKl8/s72-c/IDE.jpg" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">7</thr:total><feedburner:origLink>http://chrisbensen.blogspot.com/2009/08/rad-studio-2010-ide.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8857431988988627285.post-168154911290117998</guid><pubDate>Tue, 04 Aug 2009 17:00:00 +0000</pubDate><atom:updated>2009-08-04T10:20:04.171-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Delphi</category><category domain="http://www.blogger.com/atom/ns#">CodeGear</category><title>Embarcadero RAD Studio 2010</title><description>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_HmveHAmi4No/SnhtPIUZ2CI/AAAAAAAABlw/FXbBuGcxR6U/s1600-h/RadStudioSplash.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 86px;" src="http://4.bp.blogspot.com/_HmveHAmi4No/SnhtPIUZ2CI/AAAAAAAABlw/FXbBuGcxR6U/s320/RadStudioSplash.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5366159062710474786" /&gt;&lt;/a&gt;
&lt;br /&gt;
&lt;br /&gt;Finally I can talk about Delphi 2010/C++Builder 2010/RAD Studio 2010! This should be a pretty awesome release with some cool stuff. For anyone that didn't attended my Delphi Live! talk, I've been working on something a bit different from COM and ActiveX this release, but that'll have to wait because first I want to talk about some of the IDE features we worked on.
&lt;br /&gt;
&lt;br /&gt;For the official RAD Studio 2010 preview page click &lt;a href="http://www.embarcadero.com/rad-studio-2010/"&gt;here&lt;/a&gt; where you can watch a video of David I getting the Delphi 2010 low down from Nick Hodges.
&lt;br /&gt;
&lt;br /&gt;&lt;center&gt;&lt;embed src='http://www.embarcadero.com/includes/mediaplayer/player-viral.swf' height='300' width='400' allowscriptaccess='always' allowfullscreen='true' flashvars='file=http%3A%2F%2Faltd.embarcadero.com%2Fdownload%2Fvideo%2Fweaver%2Fweaver-sneak-peak.mp4&amp;plugins=viral-1d'/&gt;&lt;/center&gt;
&lt;br /&gt;
&lt;br /&gt;At the very end of the video you can see my office door.
&lt;br /&gt;
&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_HmveHAmi4No/SnhY9ZkPk_I/AAAAAAAABlI/enqUby2jKAA/s1600-h/myoffice.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 268px; height: 178px;" src="http://3.bp.blogspot.com/_HmveHAmi4No/SnhY9ZkPk_I/AAAAAAAABlI/enqUby2jKAA/s320/myoffice.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5366136767870112754" /&gt;&lt;/a&gt;
&lt;br /&gt;
&lt;br /&gt;I've talked about CTRL + F12 before &lt;a href="http://chrisbensen.blogspot.com/2007/12/delphi-and-cbuilder-ide-tip-of-day.html"&gt;here&lt;/a&gt; but this release it has gotten way better. In the video Nick showed off IDE Insight which is a totally awesome feature built by Mark Duncan using my search edit. Everyone one of us here use it every day. Features like this don't just spring out of nowhere. It went through various incarnations and refinements. Features like this are always fun because they build from collaboration of a few different features getting smashed together. One of the earliest versions of Find Units was embedded in the Project Manager.
&lt;br /&gt;
&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_HmveHAmi4No/Snhb80r0TXI/AAAAAAAABlQ/ELLINHIF0gQ/s1600-h/SearchUnits.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 308px;" src="http://2.bp.blogspot.com/_HmveHAmi4No/Snhb80r0TXI/AAAAAAAABlQ/ELLINHIF0gQ/s320/SearchUnits.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5366140056504651122" /&gt;&lt;/a&gt;
&lt;br /&gt;
&lt;br /&gt;The search edit is the same search edit seen throughout the IDE but with a few more bells and whistles because this one supports pattern matching with '*' and '?'. And it's fast! Which is why we didn't want to support regular expressions. All information gathered and searched is gathered on the fly, not indexed which is why a fast pattern search is needed.
&lt;br /&gt;
&lt;br /&gt;The Gallery also has been augmented with a search feature. And as an extra productivity enhancement, all gallery items show up but the ones that used to be invisible are grayed out. This should really help those customers migrating from Delphi 7 where all COM wizards were visible but you had to know the order to create them. Now, you can run any wizard that is enabled and there won't be any question of where the COM wizards went.
&lt;br /&gt;
&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_HmveHAmi4No/SnhcyLu3_rI/AAAAAAAABlY/NcwBfjeAKFo/s1600-h/NewGallery.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 241px;" src="http://2.bp.blogspot.com/_HmveHAmi4No/SnhcyLu3_rI/AAAAAAAABlY/NcwBfjeAKFo/s320/NewGallery.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5366140973224558258" /&gt;&lt;/a&gt;
&lt;br /&gt;
&lt;br /&gt;Another place the search edit shows up is in the C++ class browser built by Bruneau Babet. Did I mention the search is fast? Well in a fraction of a second you can search with wild cards through all symbols in your C++ projects.
&lt;br /&gt;
&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_HmveHAmi4No/SnheDkG-V5I/AAAAAAAABlg/md0Gay8rrQ0/s1600-h/ClassBrowser.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 188px; height: 320px;" src="http://3.bp.blogspot.com/_HmveHAmi4No/SnheDkG-V5I/AAAAAAAABlg/md0Gay8rrQ0/s320/ClassBrowser.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5366142371337492370" /&gt;&lt;/a&gt;
&lt;br /&gt;
&lt;br /&gt;One last feature before I wrap this up. The Object Inspector got a small update from our newest VCL memeber Thom Gerdes. Boolean values now have check boxes. It might seem silly but it's really hard to use an older version of Delphi after getting used to the check boxes. We've also enhanced some of the property editors such as TDateTimePicker.Date.
&lt;br /&gt;
&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_HmveHAmi4No/SnhgCMrD1RI/AAAAAAAABlo/aRTeUmcwG_4/s1600-h/ObjectInspector.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 301px; height: 267px;" src="http://2.bp.blogspot.com/_HmveHAmi4No/SnhgCMrD1RI/AAAAAAAABlo/aRTeUmcwG_4/s320/ObjectInspector.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5366144546889782546" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-4398465119811197";
/* 468x60, created 7/20/08 */
google_ad_slot = "3994176404";
google_ad_width = 468;
google_ad_height = 60;
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8857431988988627285-168154911290117998?l=chrisbensen.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ChrisBensenBlog/~4/gpitFj1q074" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/ChrisBensenBlog/~3/gpitFj1q074/embarcadero-rad-studio-2010.html</link><author>noreply@blogger.com (Chris Bensen)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/_HmveHAmi4No/SnhtPIUZ2CI/AAAAAAAABlw/FXbBuGcxR6U/s72-c/RadStudioSplash.jpg" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">13</thr:total><feedburner:origLink>http://chrisbensen.blogspot.com/2009/08/embarcadero-rad-studio-2010.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8857431988988627285.post-348625869132374055</guid><pubDate>Fri, 05 Jun 2009 04:46:00 +0000</pubDate><atom:updated>2009-06-04T22:06:20.278-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">photo</category><title>June Photo of the Month</title><description>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_HmveHAmi4No/SiijK2MVgLI/AAAAAAAABjs/zSN7pQCx4nk/s1600-h/02-001500-01.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 213px; height: 320px;" src="http://3.bp.blogspot.com/_HmveHAmi4No/SiijK2MVgLI/AAAAAAAABjs/zSN7pQCx4nk/s320/02-001500-01.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5343700364616368306" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This photo was taken at &lt;a href="http://www.parks.ca.gov/?page_id=523"&gt;Año Nuevo State Reserver&lt;/a&gt;. Wikipedia also has a good bit of information on &lt;a href="http://en.wikipedia.org/wiki/Año_Nuevo_State_Reserve"&gt;Año Nuevo&lt;/a&gt;. This is one of the most amazing parks to visit. These little pups just roll all over one another.&lt;br /&gt;&lt;br /&gt;California with it's sizable budget problem is entertaining the possibility of closing over 80% of the parks, including Año Nuevo State Reserver and every beach and park in and around Santa Cruz. Most of the photos you see on my website are taken at these parks and every year I buy a State Parks pass to support the parks. Who knows what will actually happen. Only time will tell, but needless to say I really hope they find another solution since overall the closure will do more harm than good. You can read up on the potential closing &lt;a href="http://www.calparks.org/takeaction/"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;In other news, the National Parks will be free to visit three weekends this summer. Check out &lt;a href="http://www.nps.gov/findapark/feefreeparks.htm"&gt;&lt;br /&gt;Fee-Free Weekends In Your National Parks&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-4398465119811197";
/* 468x60, created 7/20/08 */
google_ad_slot = "3994176404";
google_ad_width = 468;
google_ad_height = 60;
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8857431988988627285-348625869132374055?l=chrisbensen.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ChrisBensenBlog/~4/_JTp84c_UVk" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/ChrisBensenBlog/~3/_JTp84c_UVk/june-photo-of-month.html</link><author>noreply@blogger.com (Chris Bensen)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/_HmveHAmi4No/SiijK2MVgLI/AAAAAAAABjs/zSN7pQCx4nk/s72-c/02-001500-01.jpg" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://chrisbensen.blogspot.com/2009/06/june-photo-of-month.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8857431988988627285.post-2465138765417573558</guid><pubDate>Sat, 16 May 2009 04:35:00 +0000</pubDate><atom:updated>2009-05-17T07:10:47.308-07:00</atom:updated><title>Touch</title><description>At 5pm today I presented my talk on Touch at Delphi Live!. This is all raw, straight from the labs, by the Delphi frameworks team, which I'm part of now. Everyone seemed excited. The energy level was pegged on excitement. After all, this is some cool stuff. I'd like to thank everyone for attending the session and for packing the room. Standing room only it hot! Temperature wise that is.&lt;br /&gt;&lt;br /&gt;So check back for more low down on Touch.&lt;br /&gt;&lt;br /&gt;Peace out Delphi Live!.&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-4398465119811197";
/* 468x60, created 7/20/08 */
google_ad_slot = "3994176404";
google_ad_width = 468;
google_ad_height = 60;
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8857431988988627285-2465138765417573558?l=chrisbensen.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ChrisBensenBlog/~4/Ks5nSbo4b1Q" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/ChrisBensenBlog/~3/Ks5nSbo4b1Q/touch.html</link><author>noreply@blogger.com (Chris Bensen)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">3</thr:total><feedburner:origLink>http://chrisbensen.blogspot.com/2009/05/touch.html</feedburner:origLink></item></channel></rss>
