<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Hi！Delphi ！</title>
	<atom:link href="http://www.hidelphi.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.hidelphi.com</link>
	<description>All About Delphi</description>
	<lastBuildDate>Tue, 08 May 2012 00:51:54 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Mutant records: on methods (and helpers)</title>
		<link>http://www.hidelphi.com/201205/mutant-records-on-methods-and-helpers/</link>
		<comments>http://www.hidelphi.com/201205/mutant-records-on-methods-and-helpers/#comments</comments>
		<pubDate>Tue, 08 May 2012 00:51:54 +0000</pubDate>
		<dc:creator>hidelphi</dc:creator>
				<category><![CDATA[Technical Articles]]></category>

		<guid isPermaLink="false">http://www.hidelphi.com/?p=1144</guid>
		<description><![CDATA[When “record with methods” were introduced, an important feature was overlooked: mutability. This article discusses the problem, and introduces a possible syntax extension to solve it. Ideas &#38; comments welcome!
The Problem
Effectively, “records with methods” treat all record “const” elements as “var“, even when they shouldn’t, and effectively ignores the compiler option “assignable constants”. Witness the [...]]]></description>
			<content:encoded><![CDATA[<p>When “record with methods” were introduced, an important feature was overlooked: mutability. This article discusses the problem, and introduces a possible syntax extension to solve it. Ideas &amp; comments welcome!</p>
<h4>The Problem</h4>
<p>Effectively, “<em>records with methods</em>” treat all record “<em>const</em>” elements as “<em>var</em>“, even when they shouldn’t, and effectively ignores the compiler option “assignable constants”. Witness the following record:</p>
<p>[delphi]type<br />
   TRec = record<br />
      Field : Integer;<br />
      procedure IncMe;<br />
   end;<br />
&#8230;<br />
procedure TRec.IncMe;<br />
begin<br />
   Inc(Field);<br />
end;[/delphi]</p>
<p>Then the compiler will happily allow you to do:</p>
<p>[delphi]const MyNullRec : TRec = (Field: 0);<br />
&#8230;<br />
MyNullRec.IncMe; // watch me, I&#8217;m magic!<br />
WriteLn(MyNullRec.Field); // will write 1 ![/delphi]</p>
<p>…it will also accept…</p>
<p>[delphi]procedure Myproc(const r : TRec);<br />
begin<br />
   r.IncMe; // modified whatever r as if it had been a var<br />
end;[/delphi]</p>
<p>…and that as well…</p>
<p>[delphi]type<br />
   TMyClass = class<br />
      private<br />
         FRec : TRec;<br />
         procedure SetRec(const aRec : TRec);<br />
      public<br />
         property RW : TRec read FRec write SetRec;<br />
         property RO : TRec read FRec;<br />
   end;<br />
&#8230;<br />
var myClass : TMyClass;<br />
&#8230;<br />
// everything&#8217;s as it should be there<br />
myClass.RO := aRec; // gives an error<br />
myClass.RW := aRec; // uses SetRec<br />
// but that compiles to&#8230;<br />
myClass.RO.IncMe; // modifying a read-only property !<br />
myClass.RW.IncMe; // modifies and bypasses SetRec ![/delphi]</p>
<p>It would “compile” even if the getter was a function returning a record… or just in about any case, really.</p>
<p>And of course you can cascade all the above in a real-world case, so you end up with weird side-effects and really hard-to-track down bugs.</p>
<p>Besides bug, that also raises the issue of usability of records like <em>TPoint</em> and other simple vector/matrix types, as properties of objects. As long as they did not have methods, you would have to use the setter to modify such a property, so the objects had guaranteed notification of a position change f.i., with methods being able to magically mutate the records, you no longer have that guarantee. And adding all the baggage so that a <em>TPoint</em> can be owned and notify its owner of a change would be over-the-top, wouldn’t it?</p>
<h4>What’s Missing</h4>
<p>Two syntax elements are missing:</p>
<ul>
<li>the ability to specify if a method is mutating the record or not, ie. if it should get “<em>Self</em>” as a “<em>var</em>” or as a “<em>const</em>“, so that you can make the above behavior explicit, and the compiler can emit errors when it’s not appropriate</li>
<li>the ability to mark a record as mutable/immutable, to further remove the ambiguities</li>
</ul>
<p>Ideas for such a syntax, in explicit form, and reusing existing keywords:</p>
<p>[delphi]type<br />
   TRec = record<br />
      Field : Integer;<br />
      var procedure IncMe; // mutating<br />
      const function ToString : String; // non-mutating<br />
   end;[/delphi]</p>
<p>Modifiers in Pascal (except “<em>class</em>“) usually follow the declaration, but “<em>var</em>” and “<em>const</em>” can’t, as they could be ambiguous with the declaration of a following constant/variant. So if reusing those, rather than introducing new keywords, they have to be in front.</p>
<p>Also you could mark a record as explicitly mutable or immutable, by prefixing it with “var” or “const”</p>
<p>[delphi]type<br />
   TImmutableRec = const record<br />
      Field : Integer;<br />
      var procedure IncMe; // mark as explicitly mutating ?<br />
      function ToString : String; // non-mutating by default<br />
   end;<br />
   TMutableRec = var record<br />
      Field : Integer;<br />
      procedure IncMe; // implicitly mutating<br />
      const function ToString : String; // mark as explicitly non-mutating<br />
   end;[/delphi]</p>
<p>For backward compatibility with existing records with methods, the implicit default would have to be “<em>var record</em>” as the records are currently all mutable.</p>
<p>With that extra information, the compiler could then perform proper checks and proper parameter passing, so the side-effects mentioned could happen only if you explicitly went for them, rather than by mistake as is currently the case.</p>
<p>Additionally, immutable records would implicitly have their fields as read-only everywhere outside the record constructor (which would then become truly useful as language syntax element). It might also be possible to extend the syntax to be able to declare explicitly immutable classes.</p>
<p><a href="http://delphitools.info/2012/05/07/mutant-records-on-methods-and-helpers/" target="_blank">View Full Article </a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.hidelphi.com/201205/mutant-records-on-methods-and-helpers/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>RealThinClient SDK v5.15 Full Source</title>
		<link>http://www.hidelphi.com/201204/realthinclient-sdk-v5-15-full-source/</link>
		<comments>http://www.hidelphi.com/201204/realthinclient-sdk-v5-15-full-source/#comments</comments>
		<pubDate>Fri, 27 Apr 2012 05:43:45 +0000</pubDate>
		<dc:creator>hidelphi</dc:creator>
				<category><![CDATA[VCL Components]]></category>

		<guid isPermaLink="false">http://www.hidelphi.com/?p=1142</guid>
		<description><![CDATA[RealThinClient SDK v5.15 was released on April 25th 2012.This is a stable RealThinClient SDK release, polished and stress-tested to work reliably on Win32, Win64, MacOSX and iOS platforms:
* using Delphi 6 &#8211; XE: Win32 support
* using Delphi XE2 with the RTL / VCL: Win32 and Win64 support
* using Delphi XE2 with FireMonkey: Win32, Win64, Mac [...]]]></description>
			<content:encoded><![CDATA[<p><strong>RealThinClient SDK v5.15 was released on April 25th 2012.</strong>This is a stable RealThinClient SDK release, polished and stress-tested to work reliably on Win32, Win64, MacOSX and iOS platforms:<br />
* using Delphi 6 &#8211; XE: <strong>Win32</strong> support<br />
* using Delphi XE2 with the RTL / VCL: <strong>Win32 </strong>and <strong>Win64</strong> support<br />
* using Delphi XE2 with FireMonkey: <strong>Win32</strong>, <strong>Win64</strong>, <strong>Mac OSX</strong> and <strong>iOS</strong> support<br />
- Mac OSX 10.6 or later required for Mac OSX development<br />
- Mac OSX 10.6 or later with XCode 4.1 or later and an active Apple Developer program required for iOS development<br />
<strong>Download Links:<br />
</strong><a href="http://depositfiles.com/files/b7i5vwz0l" target="_blank">M1</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.hidelphi.com/201204/realthinclient-sdk-v5-15-full-source/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>DevExpress VCL 2011 vol2.4 Full Source</title>
		<link>http://www.hidelphi.com/201204/devexpress-vcl-2011-vol2-4-full-source/</link>
		<comments>http://www.hidelphi.com/201204/devexpress-vcl-2011-vol2-4-full-source/#comments</comments>
		<pubDate>Thu, 26 Apr 2012 00:39:58 +0000</pubDate>
		<dc:creator>hidelphi</dc:creator>
				<category><![CDATA[VCL Components]]></category>

		<guid isPermaLink="false">http://www.hidelphi.com/?p=1135</guid>
		<description><![CDATA[New Setup features:
Source + Demos + Help + HTMLHelp Setup By DarkRapt0r Great Thanks
+ You can select which components you want to compile and install
+ Once installed you can change the sources and relaunch the Setup to recompile
+ Relaunching the Setup you can also add/remove installed components and modify installation options
+ If Setup isn&#8217;t able [...]]]></description>
			<content:encoded><![CDATA[<p><span style="color: #555555;">New Setup features:</span><br />
<strong>Source + Demos + Help + HTMLHelp Setup By DarkRapt0r Great Thanks</strong></p>
<p>+ You can select which components you want to compile and install<br />
+ Once installed you can change the sources and relaunch the Setup to recompile<br />
+ Relaunching the Setup you can also add/remove installed components and modify installation options<br />
+ If Setup isn&#8217;t able to compile the packages you can check the DCC log<br />
+ If you have a trial IDE you will be explicitly notified</p>
<p><strong>Download Links:</strong><br />
<a href="http://depositfiles.com/files/bjal5j0i0" target="_blank">M1</a><br />
<a href="http://netload.in/datei39sun3mvC8/devcl20110204sde.rar.htm" target="_blank">M2</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.hidelphi.com/201204/devexpress-vcl-2011-vol2-4-full-source/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>RealThinClient SDK v5.11 Full Source</title>
		<link>http://www.hidelphi.com/201204/realthinclient-sdk-v5-11-full-source/</link>
		<comments>http://www.hidelphi.com/201204/realthinclient-sdk-v5-11-full-source/#comments</comments>
		<pubDate>Thu, 26 Apr 2012 00:31:26 +0000</pubDate>
		<dc:creator>hidelphi</dc:creator>
				<category><![CDATA[VCL Components]]></category>

		<guid isPermaLink="false">http://www.hidelphi.com/?p=1132</guid>
		<description><![CDATA[RealThinClient SDK v5.11 was released on December 4th 2011.
This is a stable RealThinClient SDK release, polished and stress-tested to work reliably on Win32, Win64, MacOSX and iOS platforms:
* using Delphi 6 &#8211; XE: Win32 support
* using Delphi XE2 with the RTL / VCL: Win32 and Win64 support
* using Delphi XE2 with FireMonkey: Win32, Win64, Mac [...]]]></description>
			<content:encoded><![CDATA[<p>RealThinClient SDK v5.11 was released on December 4th 2011.</p>
<p>This is a stable RealThinClient SDK release, polished and stress-tested to work reliably on Win32, Win64, MacOSX and iOS platforms:<br />
* using Delphi 6 &#8211; XE: Win32 support<br />
* using Delphi XE2 with the RTL / VCL: Win32 and Win64 support<br />
* using Delphi XE2 with FireMonkey: Win32, Win64, Mac OSX and iOS support<br />
- Mac OSX 10.6 or later required for Mac OSX development<br />
- Mac OSX 10.6 or later with XCode 4.1 or later and an active Apple Developer program required for iOS development<br />
<strong>Download Links:</strong><br />
<a href="http://depositfiles.com/files/fhkpa9uvb" target="_blank">M1</a><br />
<a href="http://netload.in/dateiRz3KPWoIEa/RTCSDK511fs.rar.htm" target="_blank">M2</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.hidelphi.com/201204/realthinclient-sdk-v5-11-full-source/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Add A Grab Bar To The TSplitter</title>
		<link>http://www.hidelphi.com/201204/add-a-grab-bar-to-the-tsplitter/</link>
		<comments>http://www.hidelphi.com/201204/add-a-grab-bar-to-the-tsplitter/#comments</comments>
		<pubDate>Wed, 25 Apr 2012 00:42:23 +0000</pubDate>
		<dc:creator>hidelphi</dc:creator>
				<category><![CDATA[Technical Articles]]></category>

		<guid isPermaLink="false">http://www.hidelphi.com/?p=1129</guid>
		<description><![CDATA[The TSplitter Delphi component is a nice one. I have dozens of them on my complex forms.
The TSplitter divides the client area of a control (the one like TPanel or TForm accepting other controls) into resizable panes. Having the splitter between two aligned controls allows users to resize the controls at runtime.
Imagine two panels on [...]]]></description>
			<content:encoded><![CDATA[<p>The TSplitter Delphi component is a nice one. I have dozens of them on my complex forms.</p>
<p>The TSplitter divides the client area of a control (the one like TPanel or TForm accepting other controls) into resizable panes. Having the splitter between two aligned controls allows users to resize the controls at runtime.</p>
<p>Imagine two panels on a form. The first panel is aligned to the top of the form (Align property = alTop), the second panel fills the rest of the client area of the form (Align = alClient). Having a splitter (Align = alTop) control between them, when the user moves the splitter, it resizes the panels.</p>
<h3>A Grab Bar?</h3>
<p>Having complex screen designs, it is sometimes hard for a user to see if there&#8217;s a splitter between two controls. Ok, when the user passes the mouse pointer over the Splitter control, the cursor changes (to crHSplit or crVSplit) to indicate that the controls above/below or to left/right can be resized.</p>
<p>When there are lots of panels and UI elements that can be resized &#8211; there would be lots of splitters and the user would need to move the mouse over the splitter to see that there is a splitter actually there (as the default splitter painting does not &#8220;stand out&#8221; the splitter).</p>
<p>How about <strong>doing some custom splitter painting to draw something like a drag bar &#8211; so that splitters are more visible to the user</strong>?</p>
<p>[delphi]type<br />
  TSplitter = class(ExtCtrls.TSplitter)<br />
  private<br />
    fMouseIn: boolean;<br />
    property MouseIn : boolean read fMouseIn;<br />
    procedure CMMouseEnter(var AMsg: TMessage); message CM_MOUSEENTER;<br />
    procedure CMMouseLeave(var AMsg: TMessage); message CM_MOUSELEAVE;<br />
  protected<br />
    procedure Paint; override;<br />
  end;[/delphi]</p>
<p>[delphi]</p>
<p>procedure TSplitter.CMMouseEnter(var AMsg: TMessage);<br />
begin<br />
  fMouseIn := true;<br />
  Refresh;<br />
end;</p>
<p>procedure TSplitter.CMMouseLeave(var AMsg: TMessage);<br />
begin<br />
  fMouseIn := false;<br />
  Refresh;<br />
end;</p>
<p>procedure TSplitter.Paint;<br />
var<br />
  R: TRect;<br />
  X, Y: integer;<br />
  DX, DY: integer;<br />
  i: integer;<br />
  Brush: TBitmap;<br />
  dTo : integer;<br />
begin<br />
  //inherited NO<br />
  //Beveled property = FALSE (never mind what has been set)</p>
<p>  R := ClientRect;<br />
 <br />
  Canvas.Brush.Color := Color;<br />
  Canvas.FillRect(ClientRect);</p>
<p>  X := (R.Left+R.Right) div 2;<br />
  Y := (R.Top+R.Bottom) div 2;<br />
  if (Align in [alLeft, alRight]) then<br />
  begin<br />
    DX := 0;<br />
    DY := 3;<br />
  end<br />
 else<br />
  begin<br />
    DX := 3;<br />
    DY := 0;<br />
  end;</p>
<p>  Brush := TBitmap.Create;<br />
  try<br />
    Brush.SetSize(2, 2);<br />
    Brush.Canvas.Brush.Color := clBtnHighlight;</p>
<p>    Brush.Canvas.FillRect(Rect(0,0,1,1));</p>
<p>    if MouseIn then<br />
    begin<br />
      Brush.Canvas.Pixels[0, 0] := clBtnText;<br />
      dTo := 9;<br />
      dec(X, DX*4);<br />
      dec(Y, DY*4);<br />
    end<br />
    else<br />
    begin<br />
      Brush.Canvas.Pixels[0, 0] := clBtnShadow;<br />
      dTo := 4;<br />
      dec(X, DX*2);<br />
      dec(Y, DY*2);<br />
    end;</p>
<p>    for i := 0 to dTo do<br />
    begin<br />
      Canvas.Draw(X, Y, Brush);<br />
      inc(X, DX);<br />
      inc(Y, DY);<br />
    end;<br />
  finally<br />
    Brush.Free;<br />
  end;</p>
<p>  //no raising of OnPaint<br />
end;</p>
<p>[/delphi]</p>
<p><a href="http://delphi.about.com/od/vclusing/a/delphi-grab-bar-splitter.htm" target="_blank">Upgrade Your Delphi Application Resizable User Interface In Seconds</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.hidelphi.com/201204/add-a-grab-bar-to-the-tsplitter/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>OmniThreadLibrary 3.01 released</title>
		<link>http://www.hidelphi.com/201204/omnithreadlibrary-3-01-released/</link>
		<comments>http://www.hidelphi.com/201204/omnithreadlibrary-3-01-released/#comments</comments>
		<pubDate>Wed, 25 Apr 2012 00:37:23 +0000</pubDate>
		<dc:creator>hidelphi</dc:creator>
				<category><![CDATA[Open Source Library]]></category>

		<guid isPermaLink="false">http://www.hidelphi.com/?p=1126</guid>
		<description><![CDATA[This is mainly bugfix release with only few additions to the codebase. If you are using version 3.0 and not following the SVN trunk, update is very much recommended.
New features
Exception handling added to Parallel.Async. 
Task property added to the IOmniWorkItem interface. 
Added TOmniValueObj class, a class wrapper for TOmniValue record.
read More
]]></description>
			<content:encoded><![CDATA[<p>This is mainly bugfix release with only few additions to the codebase. If you are using version 3.0 and not following the SVN trunk, update is very much recommended.</p>
<h2>New features</h2>
<p><strong>Exception handling added to Parallel.Async. </strong><br />
<strong>Task property added to the IOmniWorkItem interface. </strong><br />
<strong>Added TOmniValueObj class, a class wrapper for TOmniValue record.</strong></p>
<p><strong><a href="http://www.thedelphigeek.com/2012/04/omnithreadlibrary-301-released.html" target="_blank">read More</a></strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.hidelphi.com/201204/omnithreadlibrary-3-01-released/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>IDE Fix Pack 4.9 released</title>
		<link>http://www.hidelphi.com/201204/ide-fix-pack-4-9-released/</link>
		<comments>http://www.hidelphi.com/201204/ide-fix-pack-4-9-released/#comments</comments>
		<pubDate>Wed, 25 Apr 2012 00:28:22 +0000</pubDate>
		<dc:creator>hidelphi</dc:creator>
				<category><![CDATA[Practical Tools]]></category>

		<guid isPermaLink="false">http://www.hidelphi.com/?p=1123</guid>
		<description><![CDATA[And here is a new version of IDE Fix Pack. The main reason for this release is a fix for the TImageList streaming patch that didn’t work when Windows is used with the classic style. With the classic style it depends on how often you have saved your DFM and how many images you have [...]]]></description>
			<content:encoded><![CDATA[<p>And here is a new version of IDE Fix Pack. The main reason for this release is a fix for the TImageList streaming patch that didn’t work when Windows is used with the classic style. With the classic style it depends on how often you have saved your DFM and how many images you have in the ImageList, if the streaming into the DFM will destroy the ImageList. This doesn’t happen if you have a themed Windows.</p>
<p>The other 2 changes are IDE and compiler performance optimizations. ErrorInsight caused my directory cache to reset itself for every DCU file the parser wants to read (ErrorInsight reinitialized the compiler for every file; that’s what happens if you have 1 compiler and multiple consumers). With version 4.9 the directory cache is only reset if the “consumer” changes.</p>
<p>The second performance patch removes the HelpInsight parser invocation in the main thread from the OnUpdate handler of the View/HelpInsight menu item’s action and puts it into the OnExecute handler. This solves a performance issue I experienced all the time when I opened a large project and pressed Ctrl+F12 (Search Unit) while the FormDesigner was active. The IDE stopped responding and parsed the whole application in the main thread (&lt;= OnUpdate). Now the HelpInsight parser starts if you press Ctrl+Shift+H. And you can press ESC to cancel it.</p>
<p><a href="http://andy.jgknet.de/blog/2012/04/ide-fix-pack-4-9-released/" target="_blank">Download D2007-XE2</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.hidelphi.com/201204/ide-fix-pack-4-9-released/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Understanding Generic Types in Delphi</title>
		<link>http://www.hidelphi.com/201203/understanding-generic-types-in-delphi/</link>
		<comments>http://www.hidelphi.com/201203/understanding-generic-types-in-delphi/#comments</comments>
		<pubDate>Tue, 20 Mar 2012 14:45:56 +0000</pubDate>
		<dc:creator>hidelphi</dc:creator>
				<category><![CDATA[Blog Collections]]></category>

		<guid isPermaLink="false">http://www.hidelphi.com/?p=1121</guid>
		<description><![CDATA[Generics, a powerful addition to Delphi, were introduced in Delphi 2009 as a new langage feature. Generics or generic types (also know as parametrized types), allow you to define classes that don&#8217;t specifically define the type of certain data members.
As an example, instead of using the TObjectList type to have a list of any object [...]]]></description>
			<content:encoded><![CDATA[<p>Generics, a powerful addition to Delphi, were introduced in Delphi 2009 as a new langage feature. Generics or generic types (also know as <em>parametrized types</em>), allow you to define classes that don&#8217;t specifically define the type of certain data members.</p>
<p>As an example, instead of using the TObjectList type to have a list of any object types, from Delphi 2009, the <strong>Generics.Collections</strong> unit defines a more strongly typed TObjectList.</p>
<h3>Simple Generics Type Example</h3>
<p>Here&#8217;s how to define a simple generic class:<br />
[delphi]type<br />
  TGenericContainer&lt;T&gt; = class<br />
  Value : T;<br />
 end;[/delphi]</p>
<p>With the following definition, here&#8217;s how to use an integer and string generic container:</p>
<p>[delphi]</p>
<p>var<br />
  genericInt : TGenericContainer&lt;integer&gt;;<br />
  genericStr : TGenericContainer&lt;string&gt;;<br />
begin<br />
  genericInt := TGenericContainer&lt;integer&gt;.Create;<br />
  genericInt.Value := 2009; //only integers<br />
  genericInt.Free;</p>
<p>  genericStr := TGenericContainer&lt;string&gt;.Create;<br />
  genericStr.Value := &#8216;Delphi Generics&#8217;; //only strings<br />
  genericStr.Free;<br />
end;</p>
<p>[/delphi] </p>
<p>The above example only scratches the surface of using Generics in Delphi (does not explain nothing though &#8211; but above articles have it all you want to know!).</p>
<p>For me, generics were the reason to move from Delphi 7 / 2007 to Delphi 2009 (and newer).</p>
<p>this article is from:<a href="http://delphi.about.com/od/objectpascalide/a/understanding-generic-types-in-delphi.htm" target="_blank">Understanding Generic Types in Delphi</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.hidelphi.com/201203/understanding-generic-types-in-delphi/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Delphi Vcl Styles and TWebBrowser, Source code released</title>
		<link>http://www.hidelphi.com/201203/delphi-vcl-styles-and-twebbrowser-source-code-released/</link>
		<comments>http://www.hidelphi.com/201203/delphi-vcl-styles-and-twebbrowser-source-code-released/#comments</comments>
		<pubDate>Tue, 20 Mar 2012 14:38:30 +0000</pubDate>
		<dc:creator>hidelphi</dc:creator>
				<category><![CDATA[Open Source Library]]></category>

		<guid isPermaLink="false">http://www.hidelphi.com/?p=1117</guid>
		<description><![CDATA[Motivation
While I was working on my favorite personal project I realised which the TWebBrowser embedded in one of my forms doesn’t look very nice when the vcl styles are enabled. So I decide write a fix.
My main goal was skin the scrollbars of the TWebBrowser component which by default uses the native windows look and [...]]]></description>
			<content:encoded><![CDATA[<h2>Motivation</h2>
<p>While I was working on my favorite personal project I realised which the TWebBrowser embedded in one of my forms doesn’t look very nice when the vcl styles are enabled. So I decide write a fix.</p>
<p>My main goal was skin the scrollbars of the TWebBrowser component which by default uses the native windows look and feel.</p>
<p><a href="http://theroadtodelphi.wordpress.com/2012/03/20/delphi-vcl-styles-and-twebbrowser-source-code-released/" target="_blank">Author Blog</a></p>
<p><a href="http://code.google.com/p/vcl-styles-utils/" target="_blank">Extend the Delphi VCL Styles</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.hidelphi.com/201203/delphi-vcl-styles-and-twebbrowser-source-code-released/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>EhLib v5.6.215 Full Source</title>
		<link>http://www.hidelphi.com/201203/ehlib-v5-6-215-full-source/</link>
		<comments>http://www.hidelphi.com/201203/ehlib-v5-6-215-full-source/#comments</comments>
		<pubDate>Tue, 20 Mar 2012 14:27:12 +0000</pubDate>
		<dc:creator>hidelphi</dc:creator>
				<category><![CDATA[VCL Components]]></category>

		<guid isPermaLink="false">http://www.hidelphi.com/?p=1114</guid>
		<description><![CDATA[* Fixed handling of the global variable OldStyleFlatBorder. In previous versions, if OldStyleFlatBorder = False (default value is False), then if TDBEditEh.Flat = True then drawing boundaries of TDBEditEh in Flat style never worked. In this version, if OldStyleFlatBorder = False then drawing boundaries of TDBEditEh in Flat style will work when the Windwos is [...]]]></description>
			<content:encoded><![CDATA[<p>* Fixed handling of the global variable OldStyleFlatBorder. In previous versions, if OldStyleFlatBorder = False (default value is False), then if TDBEditEh.Flat = True then drawing boundaries of TDBEditEh in Flat style never worked. In this version, if OldStyleFlatBorder = False then drawing boundaries of TDBEditEh in Flat style will work when the Windwos is in the Classic style and drawing Flat border will not work when the Windwos is in Themed environments and application use Themes.</p>
<p>+ Added a Images property in the class TEditButtonEh (TDBEditEh.EditButtons[i].Images) of a TEditButtonImagesE type.</p>
<p>TEditButtonImagesEh = class(TPersistent)<br />
published property NormalImages: TCustomImageList;<br />
property HotImages: TCustomImageList;<br />
property PressedImages: TCustomImageList;<br />
property DisabledImages: TCustomImageList;<br />
property NormalIndex: Integer;<br />
property HotIndex: Integer;<br />
property PressedIndex: Integer;<br />
property DisabledIndex: Integer;<br />
end;</p>
<p>Now it is allowed to draw Images from ImageList in EditButtons of Edit controls and columns of TDBGridEh. Images are drawn when TEditButtonEh.Style = ebsGlyphEh and TDBEditEh.EditButtons[i].Images.NormalImages is assigned.<br />
Download Links:<br />
<a href="http://depositfiles.com/files/gngsmh75r" target="_blank">M1</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.hidelphi.com/201203/ehlib-v5-6-215-full-source/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

