<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<!--
* $Rev$
* $Date$
*
* ***** BEGIN LICENSE BLOCK *****
*
* Version: MPL 1.1
*
* The contents of this file are subject to the Mozilla Public License Version
* 1.1 (the "License"); you may not use this file except in compliance with the
* License. You may obtain a copy of the License at http://www.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for
* the specific language governing rights and limitations under the License.
*
* The Original Code is snippet_unit.htm
*
* The Initial Developer of the Original Code is Peter Johnson
* (http://www.delphidabbler.com/).
*
* Portions created by the Initial Developer are Copyright (C) 2012 Peter
* Johnson. All Rights Reserved.
*
* ***** END LICENSE BLOCK *****
-->
<html>
<head>
<meta http-equiv="Content-Type" content="text-html; charset=Windows-1252">
<title>
Unit Snippets
</title>
<link rel="stylesheet" href="../css/codesnip.css" type="text/css">
</head>
<body>
<object
type="application/x-oleobject"
classid="clsid:1e2a7bd0-dab9-11d0-b93a-00c04fc99f9e"
>
<param name="ALink Name" value="SnippetUnit">
</object>
<h1>
<a name="snippet_unit"></a>Unit Snippets
</h1>
<p>
A <em>unit</em> snippet defines a complete Pascal unit. If a unit compiles
successfully in Delphi or in Free Pascal then it is valid for use as a
<em>unit</em> snippet.
</p>
<p>
<em>Unit</em> snippets are compilable just like all the other
<a href="snippet_kinds.htm">snippet kinds</a> except
<a href="snippet_freeform.htm">freeform</a>. However, that is where the
similarities end. Specifically, <em>unit</em> snippets:
</p>
<ul class="spaced">
<li>
Can't be referenced by other snippets except as cross references.
</li>
<li>
Can't depend on any other snippets.
</li>
<li>
Can't be included in a generated unit. This is obvious: units can't
contain other units.
</li>
<li>
Must be self contained. Any constants, types (including classes and
advanced records) or routines referenced by the unit's code must be
defined in the unit itself on in a unit included in one the unit's
<strong>uses</strong>
statements<sup style="font-size:smaller;">†</sup>. To compile
correctly the used units must be accessible to the available compilers
(i.e. be on the compiler's search
path<sup style="font-size:smaller;">‡</sup>.)
</li>
<li>
Do not have comments containg the snippet description inserted when
saved.
</li>
</ul>
<p>
Here is an example of a <em>unit</em> snippet:
</p>
<pre class="source-code">// A sample unit, adapted from the CodeSnip source code repository
unit UShowCaseCtrl;
interface
uses
Controls;
type
// Simple transparent control designed to be placed over other controls to
// prevent user interaction with the "show cased" controls.
TShowCaseCtrl = class(TCustomControl)
protected
// Modifies window creation parameters. Ensures control is transparent.
procedure CreateParams(var Params: TCreateParams); override;
end;
implementation
uses
Windows;
{ TShowCaseCtrl }
procedure TShowCaseCtrl.CreateParams(var Params: TCreateParams);
begin
inherited;
Params.ExStyle := Params.ExStyle or WS_EX_TRANSPARENT;
end;
end.</pre>
<p>
In this unit, the <var>Windows</var> and <var>Controls</var> must be
available to the available compilers. All is well in this case because the
units are in the VCL.
</p>
<p>
<strong>Notes</strong>
</p>
<p>
† For other compilable snippet types the required units are entered
in the <a href="dlg_editsnippet.htm">Snippets Editor</a>, but for
<em>unit</em> snippets they are entered in the source code itself.
</p>
<p>
‡ Compiler search paths can be configured in the <em>Search
Paths</em> tab of the <a href="dlg_configcompilers.htm">Configure
Compilers</a> dialogue box.
</p>
</body>
</html>