<?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>All Things Seen and Unseen &#187; Delphi</title>
	<atom:link href="http://rmarsh.com/category/programming/delphi/feed/" rel="self" type="application/rss+xml" />
	<link>http://rmarsh.com</link>
	<description>Spirituality and Theology</description>
	<lastBuildDate>Thu, 09 Oct 2008 15:58:54 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Objects on the Stack: A Delphi Relic</title>
		<link>http://rmarsh.com/2005/08/28/objects-on-the-stack-a-delphi-relic/</link>
		<comments>http://rmarsh.com/2005/08/28/objects-on-the-stack-a-delphi-relic/#comments</comments>
		<pubDate>Sun, 28 Aug 2005 15:43:10 +0000</pubDate>
		<dc:creator>Rob</dc:creator>
				<category><![CDATA[Delphi]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://rmarsh.com/2005/08/28/objects-on-the-stack-a-delphi-relic/</guid>
		<description><![CDATA[Now here&#8217;s a dangerous and dubious technique for you to try at your own risk&#8211; allocate objects on the stack instead of on the heap. Hey, C++ does it all the time! The advantage: object allocation is at least twice as fast on the stack. Disadvantage: only applicable to objects which are local variables. Example [...]<p>Post from: <a href="http://rmarsh.com">All Things Seen and Unseen</a><br/><br/><a href="http://rmarsh.com/2005/08/28/objects-on-the-stack-a-delphi-relic/">Objects on the Stack: A Delphi Relic</a></p>
]]></description>
			<content:encoded><![CDATA[<p>Now here&#8217;s a dangerous and dubious technique for you to try at your own risk&#8211;<br />
allocate objects on the stack instead of on the heap. Hey, C++ does it all the<br />
time!</p>
<p>The advantage:  object allocation is at least twice as fast on the stack.<br />
Disadvantage: only applicable to objects which are local variables.</p>
<p><span id="more-341"></span></p>
<p>Example</p>
<p>First, an example and then the explanation.</p>
<p>uses<br />
StackObjects;</p>
<p>procedure Test;<br />
var<br />
t : array [0..199] of TMyObject;<br />
n : Integer;<br />
begin<br />
StackObjects.BeginStackAllocation(200*50, false);<br />
for n := 0 to 199 do<br />
t[n] := TMyObject.Create;<br />
&#8230;<br />
StackObjects.EndStackAllocation;<br />
end;</p>
<p>Notice that t is a local variable&#8211;an array of objects. To get those objects<br />
allocated on the stack along with the array itself all you need to do is call<br />
BeginStackAllocation before they are created. BeginStackAllocation<br />
reserves a portion of the stack for allocations (I&#8217;ll explain the boolean<br />
parameter later). If you don&#8217;t reserve enough space an exception will be<br />
raised. You might also have to use the $M compiler directive to make enough<br />
space available. Then you just go ahead and create and use the objects as<br />
you see fit. Finally, after you are through using them you call EndStackAllocation,<br />
after which object allocations revert to the heap as usual.</p>
<p>Notice that there is no need to Free the objects on the stack. They automagically<br />
vanish when they go out of scope. Reference-counted variables (e.g., dynamic<br />
arrays) needs to be treated carefully and explicitly finalized before ending the<br />
stack allocator. You also have to be careful that you don&#8217;t (explicitly or implicitly)<br />
create any objects from a superior scope between calls of Begin- and EndStackAllocation<br />
or they will vanish too and explode your app. The VCL user-interface is the<br />
source of potential problems in this regard which the attached demo discusses<br />
ways of getting round.</p>
<p>The stack space set aside by BeginStackAllocation is available wherever it is in<br />
scope. This applies to procedures too. Memory allocated in an inner scope may<br />
be safely used in the original scope. You could, in principle, make your whole<br />
program into a procedure and put all allocations on the stack. I haven&#8217;t tried<br />
that yet!</p>
<p>How it Works</p>
<p>Deep in the grids.pas unit the VCL itself uses this technique to allocate memory<br />
on the stack. The trick is to shift the stack pointer to make room for your<br />
extra variables. Such allocations disappear when the current procedure exits.<br />
Grids uses two routines, StackAlloc and StackFree, to achieve some very fast<br />
dynamic memory allocation.</p>
<p>I&#8217;ve adapted the method to work with other Delphi objects instead of just plain<br />
vanilla memory and in the process made it a little safer. What the StackObjects<br />
unit does is provide a plug-in Delphi memory manager that uses stack memory.<br />
When BeginStackAllocation is called the new stack memory manager replaces the<br />
standard memory manager and all subsequent memory allocations come from the<br />
reserved space on the stack.</p>
<p>Now re-routing ALL memory allocation to the stack causes a number of problems.<br />
It is amazing how hard it is to keep track of all the string variables that get<br />
allocated behind the scenes and linger to blow up your app. For this reason all<br />
dynamic string allocations are kept from the stack and re-routed to the standard<br />
memory manager. In addition the stack memory manager can either handle all the<br />
remaining allocation (including ordinary memory, and dynamic arrays) or just<br />
the allocation of objects. Remember the boolean parameter in BeginStackAllocation.<br />
If true is passed, only objects are created on the stack. Otherwise New and Dispose,<br />
StrAlloc, StrDispose, GetMem, FreeMem, creation and destruction of dynamic arrays,<br />
etc. all allocate on the stack.</p>
<p>It is essential to call EndStackAllocation before leaving the local scope. It reinstates<br />
the default memory manager. If you don&#8217;t you&#8217;ll blow things to pieces. You could<br />
use a try &#8230; finally block to ensure the memory manager is replaced in the event of<br />
a problem but that might cause some stack-allocated entities to be freed by the<br />
standard manager with more explosions!</p>
<p>The commented code in StackObjects.pas and the demo should explain the details.</p>
<p>Dangers</p>
<p>Make sure you match BeginStackAllocation and EndStackAllocation</p>
<p>Beware of implicit creation of objects from a superior scope</p>
<p>Don&#8217;t try and use with multiple threads.</p>
<p>Don&#8217;t try and use with other memory managers&#8211;at least not while stack allocation<br />
is in progress.</p>
<p>This is an edgy technique, subverting Delphi to squeeze out some extra speed.<br />
If I haven&#8217;t already made myself clear on this point &#8230; don&#8217;t blame me if,<br />
in trying this code, you destroy your computer or start World War III.</p>
<ul>
<li><a href="http://rmarsh.com/files/stackobjects.zip">Download StackObjects for Delphi (6K)</a></li>
</ul>
<p>Post from: <a href="http://rmarsh.com">All Things Seen and Unseen</a><br/><br/><a href="http://rmarsh.com/2005/08/28/objects-on-the-stack-a-delphi-relic/">Objects on the Stack: A Delphi Relic</a></p>
<div id="wherego_related"><h3>Readers who viewed this page, also viewed:</h3><ul><li><a href="http://rmarsh.com/2001/06/18/snoop-memory-leak-sniffer/" rel="bookmark" class="wherego_title">Snoop: Memory Leak Sniffer</a></li><li><a href="http://rmarsh.com/2008/10/09/apologies-2/" rel="bookmark" class="wherego_title">Apologies</a></li><li><a href="http://rmarsh.com/2001/06/18/firstaid/" rel="bookmark" class="wherego_title">FirstAid</a></li><li><a href="http://rmarsh.com/2005/08/29/the-enemy-of-my-enemies/" rel="bookmark" class="wherego_title">&#8216;The Enemy of My Enemies&#8217;</a></li><li><a href="http://rmarsh.com/2001/06/18/maps-generic-associative-containers/" rel="bookmark" class="wherego_title">Maps: Generic Associative Containers</a></li><li>Powered by <a href="http://ajaydsouza.com/wordpress/plugins/where-did-they-go-from-here/">Where did they go from here?</a></li></ul></div>Similar Posts:<ul><li><a href="http://rmarsh.com/2001/06/18/snoop-memory-leak-sniffer/" rel="bookmark" title="June 18th, 2001">Snoop: Memory Leak Sniffer</a></li>

<li><a href="http://rmarsh.com/2001/06/18/firstaid/" rel="bookmark" title="June 18th, 2001">FirstAid</a></li>

<li><a href="http://rmarsh.com/2001/06/18/maps-generic-associative-containers/" rel="bookmark" title="June 18th, 2001">Maps: Generic Associative Containers</a></li>
</ul><!-- Similar Posts took 8.526 ms -->]]></content:encoded>
			<wfw:commentRss>http://rmarsh.com/2005/08/28/objects-on-the-stack-a-delphi-relic/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>QDB: Quick Database Components</title>
		<link>http://rmarsh.com/2001/06/18/qdb-quick-database-components/</link>
		<comments>http://rmarsh.com/2001/06/18/qdb-quick-database-components/#comments</comments>
		<pubDate>Mon, 18 Jun 2001 15:46:52 +0000</pubDate>
		<dc:creator>Rob</dc:creator>
				<category><![CDATA[Delphi]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://rmarsh.com/2001/06/18/qdb-quick-database-components/</guid>
		<description><![CDATA[Borland&#8217;s Delphi© makes the construction of Windows applications easier than ever. In particular, the Borland Database Engine (BDE) offers enormous power with great ease. Sometimes, however, the full might of the BDE is overkill. Wouldn&#8217;t it be better for your simple projects to use a simple tool, one that could be distributed inside your EXE [...]<p>Post from: <a href="http://rmarsh.com">All Things Seen and Unseen</a><br/><br/><a href="http://rmarsh.com/2001/06/18/qdb-quick-database-components/">QDB: Quick Database Components</a></p>
]]></description>
			<content:encoded><![CDATA[<p>Borland&#8217;s Delphi© makes the construction of Windows applications easier than ever. In particular, the Borland Database Engine (BDE) offers enormous power with great ease. Sometimes, however, the full might of the BDE is overkill. Wouldn&#8217;t it be better for your simple projects to use a simple tool, one that could be distributed inside your EXE and didn&#8217;t require enormous DLLs to function?<br />
The QDB components for Delphi offer fast, indexed access to a flat-file database of variable-sized items. QDB is quick, easy to use, and comes with full installable help. It&#8217;s also free! <em>Caveat!</em> It is some years since these components were developed and they probably won&#8217;t function beyond D5 without a lot of tweaking. They are&#8211;regrettably&#8211;also unsupported. Nevertheless I hope you find them useful in some way.<br />
Also available are the usual demonstration applications written to show the power and ease of QDB. There is a simple address book, a rewrite of Borland&#8217;s Animals demo, and a rudimentary knowledge-base system. They each come with full source code. </p>
<ul>
<li><a href="http://rmarsh.com/files/qdb.zip">Download QDB source code (v2.12) (41K)</a> </li>
<li><a href="http://rmarsh.com/files/qdbv.zip">Download QDBView source code (v2.12) (18K)</a> </li>
<li><a href="http://rmarsh.com/files/qdbg.zip">Download QDBGrid source code (v2.12) (51K)</a> </li>
<p><span id="more-174"></span></p>
<li><a href="http://rmarsh.com/files/qdbhlp1.zip">Download QDB help files for D1 (v2.10) (75K)</a> </li>
<li><a href="http://rmarsh.com/files/qdbhlp2.zip">Download QDB help files for D2 (v2.10) (75K) </a></li>
<li><a href="http://rmarsh.com/files/qdbhlp3.zip">Download QDB help files for D3 (v2.10) (74K)</a> </li>
<li><a href="http://rmarsh.com/files/qdbhtml.zip">Download QDB help as html (v2.10) (166K)</a> </li>
<li><a href="http://rmarsh.com/files/addbook.zip">Download QDB address-book demo (11K)</a> </li>
<li><a href="http://rmarsh.com/files/vaddbook.zip">Download QDB address-book demo (using QDBView) (12K)</a> </li>
<li><a href="http://rmarsh.com/files/animals.zip">Download QDB animals bitmap demo (63K) </a></li>
<li><a href="http://rmarsh.com/files/vanimals.zip">Download QDB animals bitmap demo (using QDBView) (63K) </a></li>
<li><a href="http://rmarsh.com/files/archive.zip">Download QDB knowledge-base demo (76K)</a> </li>
<li><a href="http://rmarsh.com/files/glimpse.zip">Download QDB file-viewer demo (using QDBItem) (3K)</a> </li>
</ul>
<p>Post from: <a href="http://rmarsh.com">All Things Seen and Unseen</a><br/><br/><a href="http://rmarsh.com/2001/06/18/qdb-quick-database-components/">QDB: Quick Database Components</a></p>
<div id="wherego_related"><h3>Readers who viewed this page, also viewed:</h3><ul><li><a href="http://rmarsh.com/2008/09/01/last-words-tragic-commons-and-a-beknighted-penguin/" rel="bookmark" class="wherego_title">Last Words, Tragic Commons, and a Beknighted Penguin</a></li><li><a href="http://rmarsh.com/2001/06/18/snoop-memory-leak-sniffer/" rel="bookmark" class="wherego_title">Snoop: Memory Leak Sniffer</a></li><li><a href="http://rmarsh.com/2008/08/23/trying-to-be-a-christian/" rel="bookmark" class="wherego_title">&#8220;Trying to be a Christian&#8221;</a></li><li><a href="http://rmarsh.com/2001/06/24/sunday-week-3-of-easter/" rel="bookmark" class="wherego_title">Sunday Week 3 of Easter</a></li><li><a href="http://rmarsh.com/2001/06/18/compdocs-structured-storage-wrapper/" rel="bookmark" class="wherego_title">CompDocs: Structured Storage Wrapper</a></li><li><a href="http://rmarsh.com/2001/06/18/maps-generic-associative-containers/" rel="bookmark" class="wherego_title">Maps: Generic Associative Containers</a></li><li>Powered by <a href="http://ajaydsouza.com/wordpress/plugins/where-did-they-go-from-here/">Where did they go from here?</a></li></ul></div>Similar Posts:<ul><li><a href="http://rmarsh.com/2001/06/18/snoop-memory-leak-sniffer/" rel="bookmark" title="June 18th, 2001">Snoop: Memory Leak Sniffer</a></li>

<li><a href="http://rmarsh.com/2001/06/18/compdocs-structured-storage-wrapper/" rel="bookmark" title="June 18th, 2001">CompDocs: Structured Storage Wrapper</a></li>

<li><a href="http://rmarsh.com/2001/06/18/maps-generic-associative-containers/" rel="bookmark" title="June 18th, 2001">Maps: Generic Associative Containers</a></li>
</ul><!-- Similar Posts took 4.243 ms -->]]></content:encoded>
			<wfw:commentRss>http://rmarsh.com/2001/06/18/qdb-quick-database-components/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Snoop: Memory Leak Sniffer</title>
		<link>http://rmarsh.com/2001/06/18/snoop-memory-leak-sniffer/</link>
		<comments>http://rmarsh.com/2001/06/18/snoop-memory-leak-sniffer/#comments</comments>
		<pubDate>Mon, 18 Jun 2001 15:41:43 +0000</pubDate>
		<dc:creator>Rob</dc:creator>
				<category><![CDATA[Delphi]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://rmarsh.com/2001/06/18/snoop-memory-leak-sniffer/</guid>
		<description><![CDATA[Writing programs that work at all is difficult enough without having to track down memory leaks and strange problems with overwritten memory. Snoop and Snoop Monitor make it easy to snoop out those bugs &#8212; and they&#8217;re free. Caveat! It is some years since these components were developed and they won&#8217;t function beyond D5. They [...]<p>Post from: <a href="http://rmarsh.com">All Things Seen and Unseen</a><br/><br/><a href="http://rmarsh.com/2001/06/18/snoop-memory-leak-sniffer/">Snoop: Memory Leak Sniffer</a></p>
]]></description>
			<content:encoded><![CDATA[<p>Writing programs that work at all is difficult enough without having to track down memory leaks and strange problems with overwritten memory. Snoop and Snoop Monitor make it easy to snoop out those bugs &#8212; and they&#8217;re free. <em>Caveat!</em> It is some years since these components were developed and they won&#8217;t function beyond D5. They are–regrettably–also unsupported. Nevertheless I hope you find them useful in some way.</p>
<p>Snoop v2.0 has been completely rewritten and has a bunch of new features. It works correctly with DLL files and with multi-threaded programs and now comes with a Delphi expert to display its memory-leak reports and jump to the offending line in your source code.<span id="more-173"></span></p>
<ul>
<li><a href="http://rmarsh.com/files/snoop2.zip">Snoop for Delphi 2 (v.2.11) (30K) </a></li>
<li><a href="http://rmarsh.com/files/snoop3.zip">Snoop for Delphi 3 (v.2.11) (30K) </a></li>
<li><a href="http://rmarsh.com/files/snoop4.zip">Snoop for Delphi 4 (v.2.11) (32K) </a></li>
<li><a href="http://rmarsh.com/files/snoop5.zip">Snoop for Delphi 5 (v.2.11) (32K)</a></li>
<li><a href="http://rmarsh.com/files/snpmonap.zip">Snoop Monitor Application (188K)</a> </li>
<li><a href="http://rmarsh.com/files/snpmonx2.zip">Snoop Monitor Expert for Delphi 2 (177)</a> </li>
<li><a href="http://rmarsh.com/files/snpmonx3.zip">Snoop Monitor Expert for Delphi 3 (201K) </a></li>
<li><a href="http://rmarsh.com/files/snpmonx4.zip">Snoop Monitor Expert for Delphi 4 (253K) </a></li>
<li><a href="http://rmarsh.com/files/snpmonx5.zip">Snoop Monitor Expert for Delphi 5 (260K) </a></li>
<li><a href="http://rmarsh.com/files/snooptst.zip">Snoop examples projects (4K) </a></li>
</ul>
<p>Post from: <a href="http://rmarsh.com">All Things Seen and Unseen</a><br/><br/><a href="http://rmarsh.com/2001/06/18/snoop-memory-leak-sniffer/">Snoop: Memory Leak Sniffer</a></p>
<div id="wherego_related"><h3>Readers who viewed this page, also viewed:</h3><ul><li><a href="http://rmarsh.com/2008/10/09/apologies-2/" rel="bookmark" class="wherego_title">Apologies</a></li><li><a href="http://rmarsh.com/2001/06/18/widgets-title-bar-buttons/" rel="bookmark" class="wherego_title">Widgets: Title-Bar Buttons</a></li><li><a href="http://rmarsh.com/2001/06/18/qdb-quick-database-components/" rel="bookmark" class="wherego_title">QDB: Quick Database Components</a></li><li><a href="http://rmarsh.com/2001/06/18/compdocs-structured-storage-wrapper/" rel="bookmark" class="wherego_title">CompDocs: Structured Storage Wrapper</a></li><li>Powered by <a href="http://ajaydsouza.com/wordpress/plugins/where-did-they-go-from-here/">Where did they go from here?</a></li></ul></div>Similar Posts:<ul><li><a href="http://rmarsh.com/2001/06/18/qdb-quick-database-components/" rel="bookmark" title="June 18th, 2001">QDB: Quick Database Components</a></li>

<li><a href="http://rmarsh.com/2001/06/18/firstaid/" rel="bookmark" title="June 18th, 2001">FirstAid</a></li>

<li><a href="http://rmarsh.com/2001/06/18/compdocs-structured-storage-wrapper/" rel="bookmark" title="June 18th, 2001">CompDocs: Structured Storage Wrapper</a></li>
</ul><!-- Similar Posts took 4.347 ms -->]]></content:encoded>
			<wfw:commentRss>http://rmarsh.com/2001/06/18/snoop-memory-leak-sniffer/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>CompDocs: Structured Storage Wrapper</title>
		<link>http://rmarsh.com/2001/06/18/compdocs-structured-storage-wrapper/</link>
		<comments>http://rmarsh.com/2001/06/18/compdocs-structured-storage-wrapper/#comments</comments>
		<pubDate>Mon, 18 Jun 2001 15:39:25 +0000</pubDate>
		<dc:creator>Rob</dc:creator>
				<category><![CDATA[Delphi]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://rmarsh.com/2001/06/18/compdocs-structured-storage-wrapper/</guid>
		<description><![CDATA[OLE Structured Storage (or Compound Documents or DocFiles &#8230; the names change regularly!) provide a clever way to have a whole file-system within a single file with nested &#8216;directories&#8217; (storages) and &#8216;files&#8217; (streams). There&#8217;s also the ability to do transaction processing: keeping modifications in limbo until &#8216;committed&#8217; or rolled-back. The only catch has been that [...]<p>Post from: <a href="http://rmarsh.com">All Things Seen and Unseen</a><br/><br/><a href="http://rmarsh.com/2001/06/18/compdocs-structured-storage-wrapper/">CompDocs: Structured Storage Wrapper</a></p>
]]></description>
			<content:encoded><![CDATA[<p>OLE Structured Storage (or Compound Documents or DocFiles &#8230; the names change regularly!) provide a clever way to have a whole file-system within a single file with nested &#8216;directories&#8217; (storages) and &#8216;files&#8217; (streams). There&#8217;s also the ability to do transaction processing: keeping modifications in limbo until &#8216;committed&#8217; or rolled-back. The only catch has been that the necessary APIs are complex, most un-Delphi-like, and in places self-contradictory. Indeed, the DCU supplied with Delphi 1 is error-ridden. There&#8217;s also the matter of the small print and the arcane error codes! With these complexities it&#8217;s no wonder that most Delphi developers have avoided Compound Documents.<br />
The CompDocs components available here encapsulate OLE structured storage in a straightforward and Delphi-like way. They protect you from most of the hidden problems with using the API directly and work with all versions of Delphi. As usual these components are available for free. <em>Caveat!</em> It is some years since these components were developed and they probably won&#8217;t function beyond D5 without a lot of tweaking. They are–regrettably–also unsupported. Nevertheless I hope you find them useful in some way.</p>
<p>TRootStorage models a physical file on disk while TStorage and TStorageStream model substorages and streams. Storages can be nested and can be opened in transacted mode. Creating temporary storages and streams is made easy. The TStorageStream is fully compatible with other Delphi stream types.<br />
I have provided a simple example program, Viewer, which browses the contents of a compound file, showing the names of storages and streams. You&#8217;ll be surprised to discover the complexity of many files.<span id="more-172"></span></p>
<ul>
<li><a href="http://rmarsh.com/files/compdocs.zip">Compound Documents for Delphi (37K)</a> </li>
</ul>
<p>Post from: <a href="http://rmarsh.com">All Things Seen and Unseen</a><br/><br/><a href="http://rmarsh.com/2001/06/18/compdocs-structured-storage-wrapper/">CompDocs: Structured Storage Wrapper</a></p>
<div id="wherego_related"><h3>Readers who viewed this page, also viewed:</h3><ul><li><a href="http://rmarsh.com/2001/06/18/widgets-title-bar-buttons/" rel="bookmark" class="wherego_title">Widgets: Title-Bar Buttons</a></li><li><a href="http://rmarsh.com/2001/06/18/snoop-memory-leak-sniffer/" rel="bookmark" class="wherego_title">Snoop: Memory Leak Sniffer</a></li><li><a href="http://rmarsh.com/2008/10/09/apologies-2/" rel="bookmark" class="wherego_title">Apologies</a></li><li>Powered by <a href="http://ajaydsouza.com/wordpress/plugins/where-did-they-go-from-here/">Where did they go from here?</a></li></ul></div>Similar Posts:<ul><li><a href="http://rmarsh.com/2001/06/18/qdb-quick-database-components/" rel="bookmark" title="June 18th, 2001">QDB: Quick Database Components</a></li>

<li><a href="http://rmarsh.com/2001/06/18/snoop-memory-leak-sniffer/" rel="bookmark" title="June 18th, 2001">Snoop: Memory Leak Sniffer</a></li>

<li><a href="http://rmarsh.com/2008/03/20/site-outage/" rel="bookmark" title="March 20th, 2008">Site Outage&#8230;</a></li>
</ul><!-- Similar Posts took 3.849 ms -->]]></content:encoded>
			<wfw:commentRss>http://rmarsh.com/2001/06/18/compdocs-structured-storage-wrapper/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Widgets: Title-Bar Buttons</title>
		<link>http://rmarsh.com/2001/06/18/widgets-title-bar-buttons/</link>
		<comments>http://rmarsh.com/2001/06/18/widgets-title-bar-buttons/#comments</comments>
		<pubDate>Mon, 18 Jun 2001 15:37:32 +0000</pubDate>
		<dc:creator>Rob</dc:creator>
				<category><![CDATA[Delphi]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://rmarsh.com/2001/06/18/widgets-title-bar-buttons/</guid>
		<description><![CDATA[Another title-bar button? Yes, but one that works simply and cleanly to provide buttons which mimic the look and feel of Windows&#8217; own frame controls by using Windows&#8217; own drawing technique. Each Widget contains a single glyph from a truetype font. Windows uses the &#8220;Marlett&#8221; font for its own glyphs but you can use any [...]<p>Post from: <a href="http://rmarsh.com">All Things Seen and Unseen</a><br/><br/><a href="http://rmarsh.com/2001/06/18/widgets-title-bar-buttons/">Widgets: Title-Bar Buttons</a></p>
]]></description>
			<content:encoded><![CDATA[<p>Another title-bar button? Yes, but one that works simply and cleanly to provide buttons which mimic the look and feel of Windows&#8217; own frame controls by using Windows&#8217; own drawing technique.<br />
Each Widget contains a single glyph from a truetype font. Windows uses the &#8220;Marlett&#8221; font for its own glyphs but you can use any and choose a colour and weight too. Widgets have their own Hint property and are even visible at design-time. A component editor is included to make Widgets very easy to use. <em>Caveat!</em> It is some years since these components were developed and they probably won&#8217;t function beyond D5 without a lot of tweaking. They are–regrettably–also unsupported. Nevertheless I hope you find them useful in some way.</p>
<p><span id="more-171"></span></p>
<ul>
<li><a href="http://rmarsh.com/files/widgets.zip">Widgets for Delphi 2, 3 &amp; 4 (13K) </a></li>
</ul>
<p>Post from: <a href="http://rmarsh.com">All Things Seen and Unseen</a><br/><br/><a href="http://rmarsh.com/2001/06/18/widgets-title-bar-buttons/">Widgets: Title-Bar Buttons</a></p>
<div id="wherego_related"><h3>Readers who viewed this page, also viewed:</h3><ul><li><a href="http://rmarsh.com/2001/06/18/qdb-quick-database-components/" rel="bookmark" class="wherego_title">QDB: Quick Database Components</a></li><li><a href="http://rmarsh.com/1999/04/23/friday-week-3-of-easter-st-george/" rel="bookmark" class="wherego_title">Friday Week 3 of Easter (St George)</a></li><li><a href="http://rmarsh.com/2001/06/18/maps-generic-associative-containers/" rel="bookmark" class="wherego_title">Maps: Generic Associative Containers</a></li><li><a href="http://rmarsh.com/2008/09/01/last-words-tragic-commons-and-a-beknighted-penguin/" rel="bookmark" class="wherego_title">Last Words, Tragic Commons, and a Beknighted Penguin</a></li><li><a href="http://rmarsh.com/2001/06/18/compdocs-structured-storage-wrapper/" rel="bookmark" class="wherego_title">CompDocs: Structured Storage Wrapper</a></li><li>Powered by <a href="http://ajaydsouza.com/wordpress/plugins/where-did-they-go-from-here/">Where did they go from here?</a></li></ul></div>Similar Posts:<ul><li><a href="http://rmarsh.com/2001/06/18/snoop-memory-leak-sniffer/" rel="bookmark" title="June 18th, 2001">Snoop: Memory Leak Sniffer</a></li>

<li><a href="http://rmarsh.com/2001/06/18/compdocs-structured-storage-wrapper/" rel="bookmark" title="June 18th, 2001">CompDocs: Structured Storage Wrapper</a></li>

<li><a href="http://rmarsh.com/2001/06/18/qdb-quick-database-components/" rel="bookmark" title="June 18th, 2001">QDB: Quick Database Components</a></li>
</ul><!-- Similar Posts took 4.114 ms -->]]></content:encoded>
			<wfw:commentRss>http://rmarsh.com/2001/06/18/widgets-title-bar-buttons/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Maps: Generic Associative Containers</title>
		<link>http://rmarsh.com/2001/06/18/maps-generic-associative-containers/</link>
		<comments>http://rmarsh.com/2001/06/18/maps-generic-associative-containers/#comments</comments>
		<pubDate>Mon, 18 Jun 2001 15:33:27 +0000</pubDate>
		<dc:creator>Rob</dc:creator>
				<category><![CDATA[Delphi]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://rmarsh.com/2001/06/18/maps-generic-associative-containers/</guid>
		<description><![CDATA[The Maps Library offers nine genuine generic container classes. Just as TStringList lets you keep lists of objects indexed by a string value, Maps let you keep lists of just about any type, object or atomic, indexed by whatever type you like. The nine different kinds of map have different performance characteristics allowing you to [...]<p>Post from: <a href="http://rmarsh.com">All Things Seen and Unseen</a><br/><br/><a href="http://rmarsh.com/2001/06/18/maps-generic-associative-containers/">Maps: Generic Associative Containers</a></p>
]]></description>
			<content:encoded><![CDATA[<p>The Maps Library offers nine genuine generic container classes. Just as TStringList lets you keep lists of objects indexed by a string value, Maps let you keep lists of just about any type, object or atomic, indexed by whatever type you like.<br />
The nine different kinds of map have different performance characteristics allowing you to choose the perfect container for your application, whether you need fast insertion, super-fast searching, random-access, or whatever.<br />
The library is quite compact and surprisingly efficient given its generic nature. A simple demo is also available. <em>Caveat!</em> It is some years since these components were developed and they probably won&#8217;t function beyond D5 without a lot of tweaking. They are–regrettably–also unsupported. Nevertheless I hope you find them useful in some way.</p>
<ul>
<li><a href="http://rmarsh.com/files/maplib.zip">Maps v.1.11 for Delphi 2, 3, 4 &amp; 5 (66K) </a></li>
<p><span id="more-170"></span></p>
<li><a href="http://rmarsh.com/files/maptst.zip">Anagram demo(295K)</a> </li>
</ul>
<p>Post from: <a href="http://rmarsh.com">All Things Seen and Unseen</a><br/><br/><a href="http://rmarsh.com/2001/06/18/maps-generic-associative-containers/">Maps: Generic Associative Containers</a></p>
<div id="wherego_related"><h3>Readers who viewed this page, also viewed:</h3><ul><li><a href="http://rmarsh.com/2008/03/24/still-fighting-the-official-plugins-directory/" rel="bookmark" class="wherego_title">Still Fighting the Official Plugins Directory&#8230;</a></li><li><a href="http://rmarsh.com/2001/06/18/widgets-title-bar-buttons/" rel="bookmark" class="wherego_title">Widgets: Title-Bar Buttons</a></li><li><a href="http://rmarsh.com/2001/06/18/firstaid/" rel="bookmark" class="wherego_title">FirstAid</a></li><li><a href="http://rmarsh.com/2001/06/18/snoop-memory-leak-sniffer/" rel="bookmark" class="wherego_title">Snoop: Memory Leak Sniffer</a></li><li>Powered by <a href="http://ajaydsouza.com/wordpress/plugins/where-did-they-go-from-here/">Where did they go from here?</a></li></ul></div>Similar Posts:<ul><li><a href="http://rmarsh.com/2001/06/18/qdb-quick-database-components/" rel="bookmark" title="June 18th, 2001">QDB: Quick Database Components</a></li>

<li><a href="http://rmarsh.com/2001/06/18/widgets-title-bar-buttons/" rel="bookmark" title="June 18th, 2001">Widgets: Title-Bar Buttons</a></li>

<li><a href="http://rmarsh.com/2001/06/18/snoop-memory-leak-sniffer/" rel="bookmark" title="June 18th, 2001">Snoop: Memory Leak Sniffer</a></li>
</ul><!-- Similar Posts took 4.292 ms -->]]></content:encoded>
			<wfw:commentRss>http://rmarsh.com/2001/06/18/maps-generic-associative-containers/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>FirstAid</title>
		<link>http://rmarsh.com/2001/06/18/firstaid/</link>
		<comments>http://rmarsh.com/2001/06/18/firstaid/#comments</comments>
		<pubDate>Mon, 18 Jun 2001 07:48:31 +0000</pubDate>
		<dc:creator>Rob</dc:creator>
				<category><![CDATA[Delphi]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://rmarsh.com/2001/06/18/firstaid/</guid>
		<description><![CDATA[Every so often the Delphi IDE (from D2 until at least D7) seems to get confused about its line numbers: errors are reported in places there is no code; the debugger jumps about with no apparent relation to the code that is being executed. The Delphi newsgroups propose many diagnoses but, in my experience, the [...]<p>Post from: <a href="http://rmarsh.com">All Things Seen and Unseen</a><br/><br/><a href="http://rmarsh.com/2001/06/18/firstaid/">FirstAid</a></p>
]]></description>
			<content:encoded><![CDATA[<p>Every so often the Delphi IDE (from D2 until at least D7) seems to get confused about its line numbers: errors are reported in places there is no code; the debugger jumps about with no apparent relation to the code that is being executed. The Delphi newsgroups propose many diagnoses but, in my experience, the culprit has always been code pasted into the IDE from another source. The Delphi IDE flags line breaks with the characters $D$A but some other editors use $A$D or even just $A or $D. The IDE understands such markers enough to format the code correctly but not enough to mark errors properly. The solution is straightforward but awkward: filter out any improper codes. FirstAid does the job for you. </p>
<p><span id="more-169"></span></p>
<ul>
<li><a href='http://rmarsh.com/files/firstaid.zip' title=''>FirstAid for Delphi (124K)</a></li>
</ul>
<p>Post from: <a href="http://rmarsh.com">All Things Seen and Unseen</a><br/><br/><a href="http://rmarsh.com/2001/06/18/firstaid/">FirstAid</a></p>
<div id="wherego_related"><h3>Readers who viewed this page, also viewed:</h3><ul><li><a href="http://rmarsh.com/2001/06/18/compdocs-structured-storage-wrapper/" rel="bookmark" class="wherego_title">CompDocs: Structured Storage Wrapper</a></li><li><a href="http://rmarsh.com/2001/06/18/maps-generic-associative-containers/" rel="bookmark" class="wherego_title">Maps: Generic Associative Containers</a></li><li><a href="http://rmarsh.com/2001/06/18/qdb-quick-database-components/" rel="bookmark" class="wherego_title">QDB: Quick Database Components</a></li><li>Powered by <a href="http://ajaydsouza.com/wordpress/plugins/where-did-they-go-from-here/">Where did they go from here?</a></li></ul></div>Similar Posts:<ul><li><a href="http://rmarsh.com/2001/06/18/snoop-memory-leak-sniffer/" rel="bookmark" title="June 18th, 2001">Snoop: Memory Leak Sniffer</a></li>

<li><a href="http://rmarsh.com/2001/06/18/compdocs-structured-storage-wrapper/" rel="bookmark" title="June 18th, 2001">CompDocs: Structured Storage Wrapper</a></li>

<li><a href="http://rmarsh.com/2001/06/18/qdb-quick-database-components/" rel="bookmark" title="June 18th, 2001">QDB: Quick Database Components</a></li>
</ul><!-- Similar Posts took 10.866 ms -->]]></content:encoded>
			<wfw:commentRss>http://rmarsh.com/2001/06/18/firstaid/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

