<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>https://wiki.lmd.de/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Wikiadmin</id>
		<title>LMD - User contributions [en]</title>
		<link rel="self" type="application/atom+xml" href="https://wiki.lmd.de/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Wikiadmin"/>
		<link rel="alternate" type="text/html" href="https://wiki.lmd.de/index.php/Special:Contributions/Wikiadmin"/>
		<updated>2026-05-24T08:22:19Z</updated>
		<subtitle>User contributions</subtitle>
		<generator>MediaWiki 1.27.3</generator>

	<entry>
		<id>https://wiki.lmd.de/index.php?title=FCKEditor&amp;diff=2057</id>
		<title>FCKEditor</title>
		<link rel="alternate" type="text/html" href="https://wiki.lmd.de/index.php?title=FCKEditor&amp;diff=2057"/>
				<updated>2008-03-25T21:11:43Z</updated>
		
		<summary type="html">&lt;p&gt;Wikiadmin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;For WYSIWYG-editing you can use FCKEditor for MediaWiki. It's uses a special version of the FCKeditor WYSIWYG editor that outputs wiki text, not HTML.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
By default this addon activated for all users. You can return to standard Wiki-editing through toggle&amp;amp;nbsp;[[Image:Wikitext icon.png|Image:Wikitext_icon.png]] icon. Or you can permanently disable it for the whole site or for defined namespaces on the &amp;quot;Misc&amp;quot; tab in your [[Special:Preferences|Preferences]] page - a '''Rich Editor:*''' selectors.&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>	</entry>

	<entry>
		<id>https://wiki.lmd.de/index.php?title=FCKEditor&amp;diff=2056</id>
		<title>FCKEditor</title>
		<link rel="alternate" type="text/html" href="https://wiki.lmd.de/index.php?title=FCKEditor&amp;diff=2056"/>
				<updated>2008-03-25T21:09:29Z</updated>
		
		<summary type="html">&lt;p&gt;Wikiadmin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;For WYSIWYG-editing you can use FCKEditor for MediaWiki. It's uses a special version of the FCKeditor WYSIWYG editor that outputs wiki text, not HTML.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
By default this addon activated for all users. You can return to standard Wiki-editing through toggle&amp;amp;nbsp;[[Image:Wikitext icon.png|Image:Wikitext_icon.png]] icon. Or you can permanently disable it for whole site or for defined namespaces on the &amp;quot;Misc&amp;quot; tab in your [[Special:Preferences|Preferences]] - Rich Editor:* selectors.&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>	</entry>

	<entry>
		<id>https://wiki.lmd.de/index.php?title=FCKEditor&amp;diff=2055</id>
		<title>FCKEditor</title>
		<link rel="alternate" type="text/html" href="https://wiki.lmd.de/index.php?title=FCKEditor&amp;diff=2055"/>
				<updated>2008-03-25T21:00:47Z</updated>
		
		<summary type="html">&lt;p&gt;Wikiadmin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;For WYSIWYG-editing you can use FCKEditor for MediaWiki. It's uses a special version of the FCKeditor WYSIWYG editor that outputs wiki text, not HTML.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
By default this addon activated for all users. You can return to standard Wiki-editing through toggle&amp;amp;nbsp;[[Image:Wikitext icon.png|Image:Wikitext_icon.png]] icon. Or you can permanently disable it for whole site or for defined namespaces on the &amp;quot;Misc&amp;quot; tab in your [http://wiki.lmd.de/index.php/Special:Preferences wiki.lmd.de/index.php/Special:Preferences|Preferences] - Rich Editor:* selectors.&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>	</entry>

	<entry>
		<id>https://wiki.lmd.de/index.php?title=FCKEditor&amp;diff=2054</id>
		<title>FCKEditor</title>
		<link rel="alternate" type="text/html" href="https://wiki.lmd.de/index.php?title=FCKEditor&amp;diff=2054"/>
				<updated>2008-03-25T21:00:18Z</updated>
		
		<summary type="html">&lt;p&gt;Wikiadmin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;For WYSIWYG-editing you can use FCKEditor for MediaWiki. It's uses a special version of the FCKeditor WYSIWYG editor that outputs wiki text, not HTML.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
By default this addon activated for all users. You can return to standard Wiki-editing through toggle&amp;amp;nbsp;[[Image:Wikitext icon.png|Image:Wikitext_icon.png]] icon. Or you can permanently disable it for whole site or for defined namespaces on the &amp;quot;Misc&amp;quot; tab in your&amp;amp;nbsp;[[http://wiki.lmd.de/index.php/Special:Preferences wiki.lmd.de/index.php/Special:Preferences|Preferences]] - Rich Editor:* selectors.&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>	</entry>

	<entry>
		<id>https://wiki.lmd.de/index.php?title=FCKEditor&amp;diff=2053</id>
		<title>FCKEditor</title>
		<link rel="alternate" type="text/html" href="https://wiki.lmd.de/index.php?title=FCKEditor&amp;diff=2053"/>
				<updated>2008-03-25T20:48:13Z</updated>
		
		<summary type="html">&lt;p&gt;Wikiadmin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;For WYSIWYG-editing you can use FCKEditor for MediaWiki. It's uses a special version of the FCKeditor WYSIWYG editor that outputs wiki text, not HTML.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
By default this addon activated for all users. You can return to standard Wiki-editing through toggle&amp;amp;nbsp;[[Image:Wikitext icon.png|Image:Wikitext_icon.png]] icon. Or you can permanently disable it for whole site or for defined namespaces on the &amp;quot;Misc&amp;quot; tab in your&amp;amp;nbsp;[http://wiki.lmd.de/index.php/Special:Preferences wiki.lmd.de/index.php/Special:Preferences] - Rich Editor:* selectors.&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>	</entry>

	<entry>
		<id>https://wiki.lmd.de/index.php?title=FCKEditor&amp;diff=2052</id>
		<title>FCKEditor</title>
		<link rel="alternate" type="text/html" href="https://wiki.lmd.de/index.php?title=FCKEditor&amp;diff=2052"/>
				<updated>2008-03-24T22:37:23Z</updated>
		
		<summary type="html">&lt;p&gt;Wikiadmin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;For WYSIWYG-editing you can use FCKEditor for MediaWiki. It's uses a special version of the FCKeditor WYSIWYG editor that outputs wiki text, not HTML.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
By default this addon activated for all users. You can return to standard Wiki-editing through toggle&amp;amp;nbsp;[[Image:Wikitext icon.png|Image:Wikitext_icon.png]] icon.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
...&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>	</entry>

	<entry>
		<id>https://wiki.lmd.de/index.php?title=FCKEditor&amp;diff=2051</id>
		<title>FCKEditor</title>
		<link rel="alternate" type="text/html" href="https://wiki.lmd.de/index.php?title=FCKEditor&amp;diff=2051"/>
				<updated>2008-03-24T22:37:04Z</updated>
		
		<summary type="html">&lt;p&gt;Wikiadmin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;For WYSIWYG-editing you can use FCKEditor for MediaWiki. It's uses a special version of the FCKeditor WYSIWYG editor that outputs wiki text, not HTML.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
By default this addon activated for all users. You can return to standard Wiki-editing through toggle&amp;amp;nbsp;[[Image:Wikitext_icon.png]] icon.&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>	</entry>

	<entry>
		<id>https://wiki.lmd.de/index.php?title=File:Wikitext_icon.png&amp;diff=2050</id>
		<title>File:Wikitext icon.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.lmd.de/index.php?title=File:Wikitext_icon.png&amp;diff=2050"/>
				<updated>2008-03-24T22:36:19Z</updated>
		
		<summary type="html">&lt;p&gt;Wikiadmin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>	</entry>

	<entry>
		<id>https://wiki.lmd.de/index.php?title=FCKEditor&amp;diff=2049</id>
		<title>FCKEditor</title>
		<link rel="alternate" type="text/html" href="https://wiki.lmd.de/index.php?title=FCKEditor&amp;diff=2049"/>
				<updated>2008-03-24T22:28:56Z</updated>
		
		<summary type="html">&lt;p&gt;Wikiadmin: New page: For WYSIWYG-editing you can use FCKEditor for MediaWiki. It's uses a special version of the FCKeditor WYSIWYG editor that outputs wiki text, not HTML.&amp;lt;br&amp;gt;  By default this addon activated ...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;For WYSIWYG-editing you can use FCKEditor for MediaWiki. It's uses a special version of the FCKeditor WYSIWYG editor that outputs wiki text, not HTML.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
By default this addon activated for all users. You can return to standard Wiki-editing through toggle&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>	</entry>

	<entry>
		<id>https://wiki.lmd.de/index.php?title=Help:Contents&amp;diff=2048</id>
		<title>Help:Contents</title>
		<link rel="alternate" type="text/html" href="https://wiki.lmd.de/index.php?title=Help:Contents&amp;diff=2048"/>
				<updated>2008-03-24T22:17:14Z</updated>
		
		<summary type="html">&lt;p&gt;Wikiadmin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[http://meta.wikimedia.org/wiki/Help:Contents MediaWiki Docs]&lt;br /&gt;
&lt;br /&gt;
[[FCKEditor|WYSIWYG Editor]]&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>	</entry>

	<entry>
		<id>https://wiki.lmd.de/index.php?title=File:Perfectcreature.flv&amp;diff=2014</id>
		<title>File:Perfectcreature.flv</title>
		<link rel="alternate" type="text/html" href="https://wiki.lmd.de/index.php?title=File:Perfectcreature.flv&amp;diff=2014"/>
				<updated>2008-03-12T00:34:44Z</updated>
		
		<summary type="html">&lt;p&gt;Wikiadmin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;FLVPlayer test&lt;br /&gt;
&amp;lt;flvplayer width=&amp;quot;320&amp;quot; height=&amp;quot;262&amp;quot; autoplay=&amp;quot;true&amp;quot;&amp;gt;Perfectcreature.flv&amp;lt;/flvplayer&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>	</entry>

	<entry>
		<id>https://wiki.lmd.de/index.php?title=File:Perfectcreature.flv&amp;diff=2013</id>
		<title>File:Perfectcreature.flv</title>
		<link rel="alternate" type="text/html" href="https://wiki.lmd.de/index.php?title=File:Perfectcreature.flv&amp;diff=2013"/>
				<updated>2008-03-12T00:34:01Z</updated>
		
		<summary type="html">&lt;p&gt;Wikiadmin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;FLVPlayer test&lt;br /&gt;
&amp;lt;flvplayer width=&amp;quot;320&amp;quot; height=&amp;quot;262&amp;quot; autoplay=&amp;quot;true&amp;quot; hidecontrols=&amp;quot;true&amp;quot;&amp;gt;Perfectcreature.flv&amp;lt;/flvplayer&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>	</entry>

	<entry>
		<id>https://wiki.lmd.de/index.php?title=File:Perfectcreature.flv&amp;diff=2012</id>
		<title>File:Perfectcreature.flv</title>
		<link rel="alternate" type="text/html" href="https://wiki.lmd.de/index.php?title=File:Perfectcreature.flv&amp;diff=2012"/>
				<updated>2008-03-12T00:33:00Z</updated>
		
		<summary type="html">&lt;p&gt;Wikiadmin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;FLVPlayer test&lt;br /&gt;
&amp;lt;flvplayer width=&amp;quot;400&amp;quot; height=&amp;quot;400&amp;quot; autoplay=&amp;quot;true&amp;quot; hidecontrols=&amp;quot;true&amp;quot;&amp;gt;Perfectcreature.flv&amp;lt;/flvplayer&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>	</entry>

	<entry>
		<id>https://wiki.lmd.de/index.php?title=File:Perfectcreature.flv&amp;diff=2011</id>
		<title>File:Perfectcreature.flv</title>
		<link rel="alternate" type="text/html" href="https://wiki.lmd.de/index.php?title=File:Perfectcreature.flv&amp;diff=2011"/>
				<updated>2008-03-12T00:32:02Z</updated>
		
		<summary type="html">&lt;p&gt;Wikiadmin: FLVPlayer test&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;FLVPlayer test&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>	</entry>

	<entry>
		<id>https://wiki.lmd.de/index.php?title=LMD_VCL_-_LMD-Tools_FAQ&amp;diff=1570</id>
		<title>LMD VCL - LMD-Tools FAQ</title>
		<link rel="alternate" type="text/html" href="https://wiki.lmd.de/index.php?title=LMD_VCL_-_LMD-Tools_FAQ&amp;diff=1570"/>
				<updated>2007-04-10T20:25:46Z</updated>
		
		<summary type="html">&lt;p&gt;Wikiadmin: /* CBuilder SpeedUp */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Head-Overview}} [[Category:FAQ]] [[Category:LMD-Tools]] &lt;br /&gt;
&lt;br /&gt;
==General==&lt;br /&gt;
===CBuilder SpeedUp===&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
#include &amp;lt;oleidl.h&amp;gt;&lt;br /&gt;
HKEY_CURRECTUSER&lt;br /&gt;
SaveSettings&lt;br /&gt;
#define NO_WIN32_LEAN_AND_MEAN&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
NO_WIN32_LEAN_AND_MEAN &lt;br /&gt;
When this macro is defined, VCL.H does not define WIN32_LEAN_AND_MEAN. Default: OFF &lt;br /&gt;
&lt;br /&gt;
VCL_FULL &lt;br /&gt;
Same as NO_WIN32_LEAN_AND_MEAN (NOTE: This macro is for BCB v1.0 backward compatibility) Default: OFF &lt;br /&gt;
&lt;br /&gt;
INC_VCLDB_HEADERS &lt;br /&gt;
When this macro is defined, VCL.H includes the core Database headers of VCL. &lt;br /&gt;
(Defining this macro is functionally equivalent to including VCLDB.H) Default: OFF &lt;br /&gt;
&lt;br /&gt;
INC_ALLVCL_HEADERS When this macro is defined, VCL.H includes all VCL headers. &lt;br /&gt;
(Defining this macro is functionally equivalent to including VCLMAX.H) Default: OFF&lt;br /&gt;
&lt;br /&gt;
===Installation===&lt;br /&gt;
====Installing Source Version (Release 7)====&lt;br /&gt;
Make sure to install first the CE special packages (DesignPack, BarPack and StoragePack) and at last LMD-Tools Core Package (oldest to latest package).  I strongly suggest to install all to the same installation path. Make sure that the source path is available in Library path settings and is  in best case the first path mentioned. Then load the &amp;lt;br&amp;gt;&lt;br /&gt;
__lmd2003all_d5.bpg &lt;br /&gt;
project group. &amp;lt;br&amp;gt;&lt;br /&gt;
This project group contains all package files in the order we suggest to install them. Ignore if e.g. dcllmdold.dpk is not found (or CE packages if you did not install them). However the most important point is, that dcllmdshared_d5 is the first package to be compiled. As a rule: lmd*.bpl are runtime packages, dcllmd*.bpl packages are designtime packages. Only for designtime packages press &amp;quot;Install&amp;quot; button. &lt;br /&gt;
The compiler will place all new packages into your projects\bpl folder, so I suggest you remove runtime packages from previous installation. &amp;lt;br&amp;gt;&lt;br /&gt;
Do not use &amp;quot;Build ALL&amp;quot; command, because this feature is buggy in D5.  If any further problems occur please let me know.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Version Mix Up====&lt;br /&gt;
if Delphi claims that it can't find a file (though DCUs are available and Library Path is set correctly - see Environment Options), there can be only possible cause for the problem: There is a version mix up. &lt;br /&gt;
For the offending files please check whether a previous version was completely uninstalled, that no parts are compiled into existing packages (e.g. your personal packages, you might have to rebuild the package), that your project was REBUILD (to force the compilation of latest PAS/DCU files). Furthermore the project files may have references to older package files (especially if you use runtime packages, simply check Package settings in Project Options.&lt;br /&gt;
&lt;br /&gt;
====&amp;quot;Entry Point not found&amp;quot; (Release 6)====&lt;br /&gt;
Each time you receive &amp;quot;Entry Point not found&amp;quot; or &amp;quot;Could not find [..]&amp;quot; error, you can be sure that it is caused by a version mix up. I guess somehow you did not uninstall a previous version completely. E.g. if you compiled sourcecode, Delphi places created runtime BPL's automatically into the default BPL output path &lt;br /&gt;
(can be set in Environment Options dialog). Older version may have installed them in System directory - so there is the possible version conflict.&lt;br /&gt;
To completely remove an old LMD-Tools version (the hard way):&lt;br /&gt;
* Close Delphi (Note: Be sure that you did not include any LMD-Tools units in own packages, otherwise &lt;br /&gt;
open these packages, remove LMD-Tools units and recompile them).&lt;br /&gt;
** Use all uninstallers for previous version&lt;br /&gt;
** Delete all LMD-Tools directoies&lt;br /&gt;
** Delete all LMD-Tools path settings from Extras|Environment Options|Tab Library&lt;br /&gt;
** Now most important point: Search your harddisk (at least in your system directory &lt;br /&gt;
and the Delphi Projects\BPL path) for LMD BPLs.&lt;br /&gt;
* Use as search string lmd*.bpl for runtime packages.&lt;br /&gt;
* Use as search string dcllmd*.bpl for designtime packages.&lt;br /&gt;
* Remove them all&lt;br /&gt;
To install LMD-Tools sourcecode:&lt;br /&gt;
* Use the LMD-Tools 6 source installer&lt;br /&gt;
* After installation check whether paths to LMD-Tools Source files are correctly set. If for any reason not, add them yourself&lt;br /&gt;
* We have extremly simplified source compilation. Load the correct project group (e.g. lmdtools_d6.bpg for Delphi 6). and compile one package after another. Install only Desigtime packages (dcllmd*.bpk). All compiled packages can be found after compilation in the Projects\BPL path of your Delphi version. &lt;br /&gt;
Note: Simply ignore errors for RichPack and ShellPack project files, both packages are not included in current release and will be available in the next days.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
To install LMD-Tools default packages:&lt;br /&gt;
Run the correct installer. The only issues which could go wrong are:&lt;br /&gt;
* Paths are not updated: Solution is to add paths manually&lt;br /&gt;
* Packages are not seen in Delphi: Add dcl*.bpl packages manually from the Install Packages dialog.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==LMD-Tools==&lt;br /&gt;
===TLMDOneInstance: Flickering of main window when second instance is started.===&lt;br /&gt;
There are two ways to workaround this:&lt;br /&gt;
* You create a small separate application which has nothing else to do except closing the current instance and restarting it..&lt;br /&gt;
* You do not use the component but internal functions of LMD-Tools (more complex, but elegant). &lt;br /&gt;
To mimic TLMDOneInstance without using the control: In the project source file add LMDClass unit to uses clause and check LMDApplication.IsPrevRunning property before any form is loaded (this global property tells you, whether a previous instance is running). If yes, simple exit the application and call LMDActivatePrevInstance method from LMDUtils.pas to activate the already running instance. &lt;br /&gt;
To explicitely allow restart simply use a command line parameter, so that test for previous instance is skipped when command line parameter is set.&lt;br /&gt;
===Using OnCustomize event in dialog controls===&lt;br /&gt;
&amp;lt;delphi&amp;gt;&lt;br /&gt;
procedure TForm1.dCustomize(Sender: TObject);&lt;br /&gt;
var&lt;br /&gt;
i:Integer;&lt;br /&gt;
begin&lt;br /&gt;
with TForm(Sender) do&lt;br /&gt;
	for i:=0 to ComponentCount-1 do&lt;br /&gt;
	if (Components[i] is TLMDButton) and (TLMDButton(Components[i]).Caption='&amp;amp;New Folder') then&lt;br /&gt;
		TLMDButton(Components[i]).Caption:='MyString';&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/delphi&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Help Index problems until Delphi 7===&lt;br /&gt;
Itsa actually a limitation of WinHelp and the amount of Indexes it can deal with. Go over the limit and the index part of WinHelp just packs up and goes home. The only solution is to open OpenHelp and remove a few indexes from the index tab until you get under the WinHelp threshold.&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>	</entry>

	<entry>
		<id>https://wiki.lmd.de/index.php?title=LMD_VCL_-_LMD_ElPack_FAQ&amp;diff=1569</id>
		<title>LMD VCL - LMD ElPack FAQ</title>
		<link rel="alternate" type="text/html" href="https://wiki.lmd.de/index.php?title=LMD_VCL_-_LMD_ElPack_FAQ&amp;diff=1569"/>
				<updated>2007-04-10T20:22:38Z</updated>
		
		<summary type="html">&lt;p&gt;Wikiadmin: /* Could you tell me how to get the HTML text on an HTML Label (View, TElXTreeCell etc.) to center? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Head-Overview}} [[Category:FAQ]] [[Category:LMD ElPack]] &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== TElInspector ==&lt;br /&gt;
=== How to use custom inplace editors? ===&lt;br /&gt;
Inspector uses own collection of inplace editors. You can examine them in&lt;br /&gt;
ElInspectorEditors.pas  We'll define simple descendant of the button edit&lt;br /&gt;
and will use it for editing of boolean values.&lt;br /&gt;
&amp;lt;delphi&amp;gt;&lt;br /&gt;
type&lt;br /&gt;
&lt;br /&gt;
  TForm1 = class(TForm)&lt;br /&gt;
&lt;br /&gt;
    ElInspector1: TElInspector;&lt;br /&gt;
    ElInspectorRTTIDataSource1: TElInspectorRTTIDataSource;&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
  end;&lt;br /&gt;
&lt;br /&gt;
  TMyElInspectorInplaceButtonEdit = class(TElInspectorInplaceButtonEdit)&lt;br /&gt;
  protected&lt;br /&gt;
    procedure BtnClick(Sender: TObject); override;&lt;br /&gt;
  end;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
implementation&lt;br /&gt;
&lt;br /&gt;
{ TMyElInspectorInplaceButtonEdit }&lt;br /&gt;
&lt;br /&gt;
procedure TMyElInspectorInplaceButtonEdit.BtnClick(Sender: TObject);&lt;br /&gt;
begin&lt;br /&gt;
  if MessageDlg('Yes = True, No = False', mtConfirmation, [mbYes,mbNo], 0) = mrYes then&lt;br /&gt;
  begin&lt;br /&gt;
    TElInspectorItem(Item).InspectorData.AsString := 'True';&lt;br /&gt;
    Editor.Text := 'True';&lt;br /&gt;
  end&lt;br /&gt;
  else&lt;br /&gt;
  begin&lt;br /&gt;
    TElInspectorItem(Item).InspectorData.AsString := 'False';&lt;br /&gt;
    Editor.Text := 'False';&lt;br /&gt;
  end;&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
procedure TForm1.FormCreate(Sender: TObject);&lt;br /&gt;
var&lt;br /&gt;
  i: integer;&lt;br /&gt;
  LT: TElInspectorRegister;&lt;br /&gt;
begin&lt;br /&gt;
// we must to find current editor for boolean values in inspector's editors list&lt;br /&gt;
  for i := 1 to ElInspectorRTTIDataSource1.RegisterList.Count - 1 do&lt;br /&gt;
  begin&lt;br /&gt;
    LT := TElInspectorRegister(ElInspectorRTTIDataSource1.RegisterList.Items[i]);&lt;br /&gt;
    if (LT is TElInspectorTypeInfo) and (TElInspectorTypeInfo(LT).TypeInfo = TypeInfo(Boolean)) then&lt;br /&gt;
    begin &lt;br /&gt;
    // remove current boolean editor&lt;br /&gt;
      ElInspectorRTTIDataSource1.RegisterList.Remove( ElInspectorRTTIDataSource1.RegisterList.Items[i] );&lt;br /&gt;
    // register our editor&lt;br /&gt;
      ElInspectorRTTIDataSource1.RegisterList.Insert(i, TElInspectorTypeInfo.Create(TMyElInspectorInplaceButtonEdit, TElBooleanProperty, TypeInfo(Boolean)));&lt;br /&gt;
      Break;&lt;br /&gt;
    end;&lt;br /&gt;
  end;&lt;br /&gt;
&amp;lt;/delphi&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== TStyleManager ==&lt;br /&gt;
=== How to use StyleName? ===&lt;br /&gt;
&lt;br /&gt;
Style Manager operates with hierarchical style sheets. These style sheets are similar to Cascading Style Sheets (CSS), used in web pages, but they are more effective and easy to use. Each style sheet contains several styles. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Each style contains one or more property values. When the style is applied to the component, the component is checked for presence of the property with given name. If the property is present, it is set to the value, specified in the style. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Style can be one of three types: &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:1) Default&lt;br /&gt;
:2) Class&lt;br /&gt;
:3) Specific&lt;br /&gt;
&lt;br /&gt;
There is one default style per style sheet. It is an ancestor for all other styles. Specific styles are applied when they are explicitly referred to by the component (in it's StyleName property).&amp;lt;br&amp;gt;&lt;br /&gt;
Name of Specific style should begin by point (ex. '.CustomStyle') for prevention of crossing with names of classes.&amp;lt;br&amp;gt; &lt;br /&gt;
Class styles are applied when there is no specific style name specified for the component. In this case the style with the name equal to component's class is searched for and applied. For example, if the component TElEdit refers to style manager, but there is no style name specified, Style Manager tries to find the style named 'TElEdit'. If it finds, this style is applied. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== HTML controls ==&lt;br /&gt;
=== Could you tell me how to get the HTML text on an HTML Label (View, TElXTreeCell etc.) to center? ===&lt;br /&gt;
You may use &amp;lt;html4strict&amp;gt;'&amp;lt;p align=&amp;quot;Center&amp;quot;&amp;gt;&amp;lt;/p&amp;gt;'&amp;lt;/html4strict&amp;gt; tag to set desired text alignment.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== El(X)Tree ==&lt;br /&gt;
=== How to draw part of item's text to pass over the several columns? ===&lt;br /&gt;
&lt;br /&gt;
You can use OnItemPostDraw event to redraw part of item. For example I can&lt;br /&gt;
redraw item text over first two columns:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;delphi&amp;gt;&lt;br /&gt;
uses elstrutils;&lt;br /&gt;
&lt;br /&gt;
procedure TForm1.ElTree1ItemPostDraw(Sender: TObject; Canvas: TCanvas;&lt;br /&gt;
  Item: TElTreeItem; ItemRect: TRect; var DrawFocusRect: Boolean);&lt;br /&gt;
var&lt;br /&gt;
  R: TRect;&lt;br /&gt;
  s: TElFString;&lt;br /&gt;
  i: integer;&lt;br /&gt;
begin&lt;br /&gt;
  R := ItemRect;&lt;br /&gt;
  R.Right := ElTree1.HeaderSections[0].Width + ElTree1.HeaderSections[1].Width - 1;&lt;br /&gt;
  R.Top := R.Top + Item.Height div 2; // dirty calculation. use HTMLRender to render text if you need exact result&lt;br /&gt;
  // this is main column so we need to take into account space for lines and buttons&lt;br /&gt;
  R.Left := R.Left + Item.IndentAdjust;&lt;br /&gt;
  if (ElTree1.ShowRoot and ElTree1.ShowLines) or (ElTree1.ShowButtons and ElTree1.ShowRootButtons) then&lt;br /&gt;
    Inc(R.Left, ElTree1.ItemIndent)&lt;br /&gt;
  else&lt;br /&gt;
    Inc(R.Left, ElTree1.ItemIndent div 5);&lt;br /&gt;
  // offset rect if we use images&lt;br /&gt;
  R.Left := R.Left + 20 ; // paste here image width + 4 instead of 20&lt;br /&gt;
  Canvas.Brush.Style := bsSolid;&lt;br /&gt;
  Canvas.Brush.Color := clWhite; // set item's color if need&lt;br /&gt;
  // my Item.Text = '&amp;lt;html&amp;gt;&amp;lt;b&amp;gt;Some text 1&amp;lt;/b&amp;gt; &amp;lt;p&amp;gt;'+#13#10+'Some very very very very very very long text 2&amp;lt;/html&amp;gt;'&lt;br /&gt;
  i := Pos(#10, Item.Text);&lt;br /&gt;
  s := '';&lt;br /&gt;
  if i &amp;gt; 0 then&lt;br /&gt;
    s := Copy(Item.Text, i + 1, length(Item.Text) - i - 8); // 8 to ignore '&amp;lt;/html&amp;gt;'&lt;br /&gt;
  DrawTextW(Canvas.Handle, PWideChar(s), length(s), R, DT_NOPREFIX and DT_Left);&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/delphi&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ElDB(X)Tree  ==&lt;br /&gt;
=== How could I display images in an Item if I've stored image's indexes in a database field? ===&lt;br /&gt;
:1. Set TElDBXTree.ShowImages = True &amp;lt;br&amp;gt;&lt;br /&gt;
:2. Assign list of images (TImageList, TElImageList etc) to TElDBXTree.Images (and TElDBXTree.Images2 if you need it) properties &amp;lt;br&amp;gt;&lt;br /&gt;
:3. Open TElDBXTree.StylesDefs property in Object Inspector and choice &amp;quot;Table field&amp;quot; radiobutton in &amp;quot;Item images&amp;quot; radiogroup. It enforce setting Item.ImagesFromBase property to True for items. &amp;lt;br&amp;gt;&lt;br /&gt;
:4. Set data fields, where values for 1st (and 2st) image indexes was stored (look at Normal and State combos). &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hereon you should see images on the left side of the item's text. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How to make the sorted column drawn with an special background color ===&lt;br /&gt;
There are several ways to reach it. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:1) you may use OnSortEnd event to set custom style to each cell&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ex:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;delphi&amp;gt;&lt;br /&gt;
procedure TForm1.ElXTree1SortEnd(Sender: TObject);&lt;br /&gt;
var&lt;br /&gt;
  i, j: integer;&lt;br /&gt;
begin&lt;br /&gt;
  for j := 0 to ElXTree1.Items.Count - 1 do&lt;br /&gt;
  begin&lt;br /&gt;
    for i := 0 to ElXTree1.HeaderSections.Count - 1 do&lt;br /&gt;
    begin&lt;br /&gt;
      ElXTree1.Items.Item[j].Cells[i].UseOwnStyle := True;&lt;br /&gt;
      if (i = ElXTree1.SortSection) and&lt;br /&gt;
       (ElXTree1.HeaderSections.Sections[ElXTree1.SortSection].SortMode &amp;lt;&amp;gt; hsmNone)&lt;br /&gt;
      then&lt;br /&gt;
      begin&lt;br /&gt;
        ElXTree1.Items.Item[j].Cells[i].Style.CellBackGroundColor := clMoneyGreen;&lt;br /&gt;
        ElXTree1.Items.Item[j].Cells[i].Style.ParentColors := false;&lt;br /&gt;
        ElXTree1.Items.Item[j].Cells[i].Style.UseBackGroundColor := true;&lt;br /&gt;
      end&lt;br /&gt;
      else&lt;br /&gt;
      begin&lt;br /&gt;
        ElXTree1.Items.Item[j].Cells[i].Style.CellBackGroundColor := clWhite;&lt;br /&gt;
        ElXTree1.Items.Item[j].Cells[i].Style.ParentColors := false;&lt;br /&gt;
        ElXTree1.Items.Item[j].Cells[i].Style.UseBackGroundColor := true;&lt;br /&gt;
      end;&lt;br /&gt;
    end;&lt;br /&gt;
  end;&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/delphi&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:2) you may use the cascading property of style to reach the same effect:&amp;lt;br&amp;gt;&lt;br /&gt;
ex:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;delphi&amp;gt;&lt;br /&gt;
procedure TForm1.FormCreate(Sender: TObject);&lt;br /&gt;
var&lt;br /&gt;
  i, j: integer;&lt;br /&gt;
begin&lt;br /&gt;
// create test tree with 5 items. set custom colors in cells but not activate it&lt;br /&gt;
  for j := 0 to 5 do&lt;br /&gt;
  begin&lt;br /&gt;
    ElXTree1.Items.AddChild(nil,'Item'+Inttostr(j));&lt;br /&gt;
    ElXTree1.Items.Item[j].Cells[1].Text := Inttostr(j);&lt;br /&gt;
    for i := 0 to ElXTree1.HeaderSections.Count - 1 do&lt;br /&gt;
    begin&lt;br /&gt;
      ElXTree1.Items.Item[j].Cells[i].UseOwnStyle := True;&lt;br /&gt;
      ElXTree1.Items.Item[j].Cells[i].Style.CellBackGroundColor := clMoneyGreen;&lt;br /&gt;
      ElXTree1.Items.Item[j].Cells[i].Style.ParentColors := true;&lt;br /&gt;
    end;&lt;br /&gt;
  end;&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
procedure TForm1.ElXTree1SortEnd(Sender: TObject);&lt;br /&gt;
var&lt;br /&gt;
  i, j: integer;&lt;br /&gt;
begin&lt;br /&gt;
// in this procedure we activate using own colors for cells in sorted section&lt;br /&gt;
  for j := 0 to ElXTree1.Items.Count - 1 do&lt;br /&gt;
  begin&lt;br /&gt;
    for i := 0 to ElXTree1.HeaderSections.Count - 1 do&lt;br /&gt;
    begin&lt;br /&gt;
      if (i = ElXTree1.SortSection) and&lt;br /&gt;
       (ElXTree1.HeaderSections.Sections[ElXTree1.SortSection].SortMode &amp;lt;&amp;gt; hsmNone) &lt;br /&gt;
      then&lt;br /&gt;
        ElXTree1.Items.Item[j].Cells[i].Style.ParentColors := false&lt;br /&gt;
      else&lt;br /&gt;
        ElXTree1.Items.Item[j].Cells[i].Style.ParentColors := true;&lt;br /&gt;
    end;&lt;br /&gt;
  end;&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/delphi&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:3) if the tree contains a lot of items more optimized to set colors in OnItemPreDraw event:&amp;lt;br&amp;gt;&lt;br /&gt;
ex:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;delphi&amp;gt;&lt;br /&gt;
procedure TForm1.ElXTree1ItemPreDraw(Sender: TObject; Item: TElXTreeItem);&lt;br /&gt;
var&lt;br /&gt;
  i: integer;&lt;br /&gt;
begin&lt;br /&gt;
  for i := 0 to ElXTree1.HeaderSections.Count - 1 do&lt;br /&gt;
  begin&lt;br /&gt;
    Item.Cells[i].UseOwnStyle := True;&lt;br /&gt;
    if (i = ElXTree1.SortSection) and&lt;br /&gt;
       (ElXTree1.HeaderSections.Sections[ElXTree1.SortSection].SortMode &amp;lt;&amp;gt; hsmNone)&lt;br /&gt;
    then&lt;br /&gt;
    begin&lt;br /&gt;
      Item.Cells[i].Style.CellBackGroundColor := clMoneyGreen;&lt;br /&gt;
      Item.Cells[i].Style.ParentColors := false;&lt;br /&gt;
      Item.Cells[i].Style.UseBackGroundColor := true;&lt;br /&gt;
    end&lt;br /&gt;
    else&lt;br /&gt;
    begin&lt;br /&gt;
      Item.Cells[i].Style.CellBackGroundColor := clWhite;&lt;br /&gt;
      Item.Cells[i].Style.ParentColors := false;&lt;br /&gt;
      Item.Cells[i].Style.UseBackGroundColor := true;&lt;br /&gt;
    end;&lt;br /&gt;
  end;&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/delphi&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
: 3a) ... or use virtual mode of tree &amp;lt;br&amp;gt;&lt;br /&gt;
[ Please look examle of virtual tree in our demo]&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>	</entry>

	<entry>
		<id>https://wiki.lmd.de/index.php?title=LMD_VCL_-_LMD_ElPack_FAQ&amp;diff=1568</id>
		<title>LMD VCL - LMD ElPack FAQ</title>
		<link rel="alternate" type="text/html" href="https://wiki.lmd.de/index.php?title=LMD_VCL_-_LMD_ElPack_FAQ&amp;diff=1568"/>
				<updated>2007-04-10T20:21:41Z</updated>
		
		<summary type="html">&lt;p&gt;Wikiadmin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Head-Overview}} [[Category:FAQ]] [[Category:LMD ElPack]] &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== TElInspector ==&lt;br /&gt;
=== How to use custom inplace editors? ===&lt;br /&gt;
Inspector uses own collection of inplace editors. You can examine them in&lt;br /&gt;
ElInspectorEditors.pas  We'll define simple descendant of the button edit&lt;br /&gt;
and will use it for editing of boolean values.&lt;br /&gt;
&amp;lt;delphi&amp;gt;&lt;br /&gt;
type&lt;br /&gt;
&lt;br /&gt;
  TForm1 = class(TForm)&lt;br /&gt;
&lt;br /&gt;
    ElInspector1: TElInspector;&lt;br /&gt;
    ElInspectorRTTIDataSource1: TElInspectorRTTIDataSource;&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
  end;&lt;br /&gt;
&lt;br /&gt;
  TMyElInspectorInplaceButtonEdit = class(TElInspectorInplaceButtonEdit)&lt;br /&gt;
  protected&lt;br /&gt;
    procedure BtnClick(Sender: TObject); override;&lt;br /&gt;
  end;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
implementation&lt;br /&gt;
&lt;br /&gt;
{ TMyElInspectorInplaceButtonEdit }&lt;br /&gt;
&lt;br /&gt;
procedure TMyElInspectorInplaceButtonEdit.BtnClick(Sender: TObject);&lt;br /&gt;
begin&lt;br /&gt;
  if MessageDlg('Yes = True, No = False', mtConfirmation, [mbYes,mbNo], 0) = mrYes then&lt;br /&gt;
  begin&lt;br /&gt;
    TElInspectorItem(Item).InspectorData.AsString := 'True';&lt;br /&gt;
    Editor.Text := 'True';&lt;br /&gt;
  end&lt;br /&gt;
  else&lt;br /&gt;
  begin&lt;br /&gt;
    TElInspectorItem(Item).InspectorData.AsString := 'False';&lt;br /&gt;
    Editor.Text := 'False';&lt;br /&gt;
  end;&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
procedure TForm1.FormCreate(Sender: TObject);&lt;br /&gt;
var&lt;br /&gt;
  i: integer;&lt;br /&gt;
  LT: TElInspectorRegister;&lt;br /&gt;
begin&lt;br /&gt;
// we must to find current editor for boolean values in inspector's editors list&lt;br /&gt;
  for i := 1 to ElInspectorRTTIDataSource1.RegisterList.Count - 1 do&lt;br /&gt;
  begin&lt;br /&gt;
    LT := TElInspectorRegister(ElInspectorRTTIDataSource1.RegisterList.Items[i]);&lt;br /&gt;
    if (LT is TElInspectorTypeInfo) and (TElInspectorTypeInfo(LT).TypeInfo = TypeInfo(Boolean)) then&lt;br /&gt;
    begin &lt;br /&gt;
    // remove current boolean editor&lt;br /&gt;
      ElInspectorRTTIDataSource1.RegisterList.Remove( ElInspectorRTTIDataSource1.RegisterList.Items[i] );&lt;br /&gt;
    // register our editor&lt;br /&gt;
      ElInspectorRTTIDataSource1.RegisterList.Insert(i, TElInspectorTypeInfo.Create(TMyElInspectorInplaceButtonEdit, TElBooleanProperty, TypeInfo(Boolean)));&lt;br /&gt;
      Break;&lt;br /&gt;
    end;&lt;br /&gt;
  end;&lt;br /&gt;
&amp;lt;/delphi&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== TStyleManager ==&lt;br /&gt;
=== How to use StyleName? ===&lt;br /&gt;
&lt;br /&gt;
Style Manager operates with hierarchical style sheets. These style sheets are similar to Cascading Style Sheets (CSS), used in web pages, but they are more effective and easy to use. Each style sheet contains several styles. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Each style contains one or more property values. When the style is applied to the component, the component is checked for presence of the property with given name. If the property is present, it is set to the value, specified in the style. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Style can be one of three types: &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:1) Default&lt;br /&gt;
:2) Class&lt;br /&gt;
:3) Specific&lt;br /&gt;
&lt;br /&gt;
There is one default style per style sheet. It is an ancestor for all other styles. Specific styles are applied when they are explicitly referred to by the component (in it's StyleName property).&amp;lt;br&amp;gt;&lt;br /&gt;
Name of Specific style should begin by point (ex. '.CustomStyle') for prevention of crossing with names of classes.&amp;lt;br&amp;gt; &lt;br /&gt;
Class styles are applied when there is no specific style name specified for the component. In this case the style with the name equal to component's class is searched for and applied. For example, if the component TElEdit refers to style manager, but there is no style name specified, Style Manager tries to find the style named 'TElEdit'. If it finds, this style is applied. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== HTML controls ==&lt;br /&gt;
=== Could you tell me how to get the HTML text on an HTML Label (View, TElXTreeCell etc.) to center? ===&lt;br /&gt;
You may use &amp;lt;pre&amp;gt;'&amp;lt;p align=&amp;quot;Center&amp;quot;&amp;gt;&amp;lt;/p&amp;gt;'&amp;lt;/pre&amp;gt; tag to set desired text alignment.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== El(X)Tree ==&lt;br /&gt;
=== How to draw part of item's text to pass over the several columns? ===&lt;br /&gt;
&lt;br /&gt;
You can use OnItemPostDraw event to redraw part of item. For example I can&lt;br /&gt;
redraw item text over first two columns:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;delphi&amp;gt;&lt;br /&gt;
uses elstrutils;&lt;br /&gt;
&lt;br /&gt;
procedure TForm1.ElTree1ItemPostDraw(Sender: TObject; Canvas: TCanvas;&lt;br /&gt;
  Item: TElTreeItem; ItemRect: TRect; var DrawFocusRect: Boolean);&lt;br /&gt;
var&lt;br /&gt;
  R: TRect;&lt;br /&gt;
  s: TElFString;&lt;br /&gt;
  i: integer;&lt;br /&gt;
begin&lt;br /&gt;
  R := ItemRect;&lt;br /&gt;
  R.Right := ElTree1.HeaderSections[0].Width + ElTree1.HeaderSections[1].Width - 1;&lt;br /&gt;
  R.Top := R.Top + Item.Height div 2; // dirty calculation. use HTMLRender to render text if you need exact result&lt;br /&gt;
  // this is main column so we need to take into account space for lines and buttons&lt;br /&gt;
  R.Left := R.Left + Item.IndentAdjust;&lt;br /&gt;
  if (ElTree1.ShowRoot and ElTree1.ShowLines) or (ElTree1.ShowButtons and ElTree1.ShowRootButtons) then&lt;br /&gt;
    Inc(R.Left, ElTree1.ItemIndent)&lt;br /&gt;
  else&lt;br /&gt;
    Inc(R.Left, ElTree1.ItemIndent div 5);&lt;br /&gt;
  // offset rect if we use images&lt;br /&gt;
  R.Left := R.Left + 20 ; // paste here image width + 4 instead of 20&lt;br /&gt;
  Canvas.Brush.Style := bsSolid;&lt;br /&gt;
  Canvas.Brush.Color := clWhite; // set item's color if need&lt;br /&gt;
  // my Item.Text = '&amp;lt;html&amp;gt;&amp;lt;b&amp;gt;Some text 1&amp;lt;/b&amp;gt; &amp;lt;p&amp;gt;'+#13#10+'Some very very very very very very long text 2&amp;lt;/html&amp;gt;'&lt;br /&gt;
  i := Pos(#10, Item.Text);&lt;br /&gt;
  s := '';&lt;br /&gt;
  if i &amp;gt; 0 then&lt;br /&gt;
    s := Copy(Item.Text, i + 1, length(Item.Text) - i - 8); // 8 to ignore '&amp;lt;/html&amp;gt;'&lt;br /&gt;
  DrawTextW(Canvas.Handle, PWideChar(s), length(s), R, DT_NOPREFIX and DT_Left);&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/delphi&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ElDB(X)Tree  ==&lt;br /&gt;
=== How could I display images in an Item if I've stored image's indexes in a database field? ===&lt;br /&gt;
:1. Set TElDBXTree.ShowImages = True &amp;lt;br&amp;gt;&lt;br /&gt;
:2. Assign list of images (TImageList, TElImageList etc) to TElDBXTree.Images (and TElDBXTree.Images2 if you need it) properties &amp;lt;br&amp;gt;&lt;br /&gt;
:3. Open TElDBXTree.StylesDefs property in Object Inspector and choice &amp;quot;Table field&amp;quot; radiobutton in &amp;quot;Item images&amp;quot; radiogroup. It enforce setting Item.ImagesFromBase property to True for items. &amp;lt;br&amp;gt;&lt;br /&gt;
:4. Set data fields, where values for 1st (and 2st) image indexes was stored (look at Normal and State combos). &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hereon you should see images on the left side of the item's text. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How to make the sorted column drawn with an special background color ===&lt;br /&gt;
There are several ways to reach it. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:1) you may use OnSortEnd event to set custom style to each cell&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ex:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;delphi&amp;gt;&lt;br /&gt;
procedure TForm1.ElXTree1SortEnd(Sender: TObject);&lt;br /&gt;
var&lt;br /&gt;
  i, j: integer;&lt;br /&gt;
begin&lt;br /&gt;
  for j := 0 to ElXTree1.Items.Count - 1 do&lt;br /&gt;
  begin&lt;br /&gt;
    for i := 0 to ElXTree1.HeaderSections.Count - 1 do&lt;br /&gt;
    begin&lt;br /&gt;
      ElXTree1.Items.Item[j].Cells[i].UseOwnStyle := True;&lt;br /&gt;
      if (i = ElXTree1.SortSection) and&lt;br /&gt;
       (ElXTree1.HeaderSections.Sections[ElXTree1.SortSection].SortMode &amp;lt;&amp;gt; hsmNone)&lt;br /&gt;
      then&lt;br /&gt;
      begin&lt;br /&gt;
        ElXTree1.Items.Item[j].Cells[i].Style.CellBackGroundColor := clMoneyGreen;&lt;br /&gt;
        ElXTree1.Items.Item[j].Cells[i].Style.ParentColors := false;&lt;br /&gt;
        ElXTree1.Items.Item[j].Cells[i].Style.UseBackGroundColor := true;&lt;br /&gt;
      end&lt;br /&gt;
      else&lt;br /&gt;
      begin&lt;br /&gt;
        ElXTree1.Items.Item[j].Cells[i].Style.CellBackGroundColor := clWhite;&lt;br /&gt;
        ElXTree1.Items.Item[j].Cells[i].Style.ParentColors := false;&lt;br /&gt;
        ElXTree1.Items.Item[j].Cells[i].Style.UseBackGroundColor := true;&lt;br /&gt;
      end;&lt;br /&gt;
    end;&lt;br /&gt;
  end;&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/delphi&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:2) you may use the cascading property of style to reach the same effect:&amp;lt;br&amp;gt;&lt;br /&gt;
ex:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;delphi&amp;gt;&lt;br /&gt;
procedure TForm1.FormCreate(Sender: TObject);&lt;br /&gt;
var&lt;br /&gt;
  i, j: integer;&lt;br /&gt;
begin&lt;br /&gt;
// create test tree with 5 items. set custom colors in cells but not activate it&lt;br /&gt;
  for j := 0 to 5 do&lt;br /&gt;
  begin&lt;br /&gt;
    ElXTree1.Items.AddChild(nil,'Item'+Inttostr(j));&lt;br /&gt;
    ElXTree1.Items.Item[j].Cells[1].Text := Inttostr(j);&lt;br /&gt;
    for i := 0 to ElXTree1.HeaderSections.Count - 1 do&lt;br /&gt;
    begin&lt;br /&gt;
      ElXTree1.Items.Item[j].Cells[i].UseOwnStyle := True;&lt;br /&gt;
      ElXTree1.Items.Item[j].Cells[i].Style.CellBackGroundColor := clMoneyGreen;&lt;br /&gt;
      ElXTree1.Items.Item[j].Cells[i].Style.ParentColors := true;&lt;br /&gt;
    end;&lt;br /&gt;
  end;&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
procedure TForm1.ElXTree1SortEnd(Sender: TObject);&lt;br /&gt;
var&lt;br /&gt;
  i, j: integer;&lt;br /&gt;
begin&lt;br /&gt;
// in this procedure we activate using own colors for cells in sorted section&lt;br /&gt;
  for j := 0 to ElXTree1.Items.Count - 1 do&lt;br /&gt;
  begin&lt;br /&gt;
    for i := 0 to ElXTree1.HeaderSections.Count - 1 do&lt;br /&gt;
    begin&lt;br /&gt;
      if (i = ElXTree1.SortSection) and&lt;br /&gt;
       (ElXTree1.HeaderSections.Sections[ElXTree1.SortSection].SortMode &amp;lt;&amp;gt; hsmNone) &lt;br /&gt;
      then&lt;br /&gt;
        ElXTree1.Items.Item[j].Cells[i].Style.ParentColors := false&lt;br /&gt;
      else&lt;br /&gt;
        ElXTree1.Items.Item[j].Cells[i].Style.ParentColors := true;&lt;br /&gt;
    end;&lt;br /&gt;
  end;&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/delphi&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:3) if the tree contains a lot of items more optimized to set colors in OnItemPreDraw event:&amp;lt;br&amp;gt;&lt;br /&gt;
ex:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;delphi&amp;gt;&lt;br /&gt;
procedure TForm1.ElXTree1ItemPreDraw(Sender: TObject; Item: TElXTreeItem);&lt;br /&gt;
var&lt;br /&gt;
  i: integer;&lt;br /&gt;
begin&lt;br /&gt;
  for i := 0 to ElXTree1.HeaderSections.Count - 1 do&lt;br /&gt;
  begin&lt;br /&gt;
    Item.Cells[i].UseOwnStyle := True;&lt;br /&gt;
    if (i = ElXTree1.SortSection) and&lt;br /&gt;
       (ElXTree1.HeaderSections.Sections[ElXTree1.SortSection].SortMode &amp;lt;&amp;gt; hsmNone)&lt;br /&gt;
    then&lt;br /&gt;
    begin&lt;br /&gt;
      Item.Cells[i].Style.CellBackGroundColor := clMoneyGreen;&lt;br /&gt;
      Item.Cells[i].Style.ParentColors := false;&lt;br /&gt;
      Item.Cells[i].Style.UseBackGroundColor := true;&lt;br /&gt;
    end&lt;br /&gt;
    else&lt;br /&gt;
    begin&lt;br /&gt;
      Item.Cells[i].Style.CellBackGroundColor := clWhite;&lt;br /&gt;
      Item.Cells[i].Style.ParentColors := false;&lt;br /&gt;
      Item.Cells[i].Style.UseBackGroundColor := true;&lt;br /&gt;
    end;&lt;br /&gt;
  end;&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/delphi&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
: 3a) ... or use virtual mode of tree &amp;lt;br&amp;gt;&lt;br /&gt;
[ Please look examle of virtual tree in our demo]&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>	</entry>

	<entry>
		<id>https://wiki.lmd.de/index.php?title=LMD_VCL_-_LMD_ElPack_FAQ&amp;diff=1567</id>
		<title>LMD VCL - LMD ElPack FAQ</title>
		<link rel="alternate" type="text/html" href="https://wiki.lmd.de/index.php?title=LMD_VCL_-_LMD_ElPack_FAQ&amp;diff=1567"/>
				<updated>2007-04-10T20:15:37Z</updated>
		
		<summary type="html">&lt;p&gt;Wikiadmin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Head-Overview}} [[Category:FAQ]] [[Category:LMD ElPack]] &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== TElInspector ==&lt;br /&gt;
=== How to use custom inplace editors? ===&lt;br /&gt;
Inspector uses own collection of inplace editors. You can examine them in&lt;br /&gt;
ElInspectorEditors.pas  We'll define simple descendant of the button edit&lt;br /&gt;
and will use it for editing of boolean values.&lt;br /&gt;
&amp;lt;delphi&amp;gt;&lt;br /&gt;
type&lt;br /&gt;
&lt;br /&gt;
  TForm1 = class(TForm)&lt;br /&gt;
&lt;br /&gt;
    ElInspector1: TElInspector;&lt;br /&gt;
    ElInspectorRTTIDataSource1: TElInspectorRTTIDataSource;&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
  end;&lt;br /&gt;
&lt;br /&gt;
  TMyElInspectorInplaceButtonEdit = class(TElInspectorInplaceButtonEdit)&lt;br /&gt;
  protected&lt;br /&gt;
    procedure BtnClick(Sender: TObject); override;&lt;br /&gt;
  end;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
implementation&lt;br /&gt;
&lt;br /&gt;
{ TMyElInspectorInplaceButtonEdit }&lt;br /&gt;
&lt;br /&gt;
procedure TMyElInspectorInplaceButtonEdit.BtnClick(Sender: TObject);&lt;br /&gt;
begin&lt;br /&gt;
  if MessageDlg('Yes = True, No = False', mtConfirmation, [mbYes,mbNo], 0) = mrYes then&lt;br /&gt;
  begin&lt;br /&gt;
    TElInspectorItem(Item).InspectorData.AsString := 'True';&lt;br /&gt;
    Editor.Text := 'True';&lt;br /&gt;
  end&lt;br /&gt;
  else&lt;br /&gt;
  begin&lt;br /&gt;
    TElInspectorItem(Item).InspectorData.AsString := 'False';&lt;br /&gt;
    Editor.Text := 'False';&lt;br /&gt;
  end;&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
procedure TForm1.FormCreate(Sender: TObject);&lt;br /&gt;
var&lt;br /&gt;
  i: integer;&lt;br /&gt;
  LT: TElInspectorRegister;&lt;br /&gt;
begin&lt;br /&gt;
// we must to find current editor for boolean values in inspector's editors list&lt;br /&gt;
  for i := 1 to ElInspectorRTTIDataSource1.RegisterList.Count - 1 do&lt;br /&gt;
  begin&lt;br /&gt;
    LT := TElInspectorRegister(ElInspectorRTTIDataSource1.RegisterList.Items[i]);&lt;br /&gt;
    if (LT is TElInspectorTypeInfo) and (TElInspectorTypeInfo(LT).TypeInfo = TypeInfo(Boolean)) then&lt;br /&gt;
    begin &lt;br /&gt;
    // remove current boolean editor&lt;br /&gt;
      ElInspectorRTTIDataSource1.RegisterList.Remove( ElInspectorRTTIDataSource1.RegisterList.Items[i] );&lt;br /&gt;
    // register our editor&lt;br /&gt;
      ElInspectorRTTIDataSource1.RegisterList.Insert(i, TElInspectorTypeInfo.Create(TMyElInspectorInplaceButtonEdit, TElBooleanProperty, TypeInfo(Boolean)));&lt;br /&gt;
      Break;&lt;br /&gt;
    end;&lt;br /&gt;
  end;&lt;br /&gt;
&amp;lt;/delphi&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== TStyleManager ==&lt;br /&gt;
=== How to use StyleName? ===&lt;br /&gt;
&lt;br /&gt;
Style Manager operates with hierarchical style sheets. These style sheets are similar to Cascading Style Sheets (CSS), used in web pages, but they are more effective and easy to use. Each style sheet contains several styles. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Each style contains one or more property values. When the style is applied to the component, the component is checked for presence of the property with given name. If the property is present, it is set to the value, specified in the style. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Style can be one of three types: &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:1) Default&lt;br /&gt;
:2) Class&lt;br /&gt;
:3) Specific&lt;br /&gt;
&lt;br /&gt;
There is one default style per style sheet. It is an ancestor for all other styles. Specific styles are applied when they are explicitly referred to by the component (in it's StyleName property).&amp;lt;br&amp;gt;&lt;br /&gt;
Name of Specific style should begin by point (ex. '.CustomStyle') for prevention of crossing with names of classes.&amp;lt;br&amp;gt; &lt;br /&gt;
Class styles are applied when there is no specific style name specified for the component. In this case the style with the name equal to component's class is searched for and applied. For example, if the component TElEdit refers to style manager, but there is no style name specified, Style Manager tries to find the style named 'TElEdit'. If it finds, this style is applied. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== HTML controls ==&lt;br /&gt;
=== Could you tell me how to get the HTML text on an HTML Label (View, TElXTreeCell etc.) to center? ===&lt;br /&gt;
You may use &amp;lt;pre&amp;gt;'&amp;lt;p align=&amp;quot;Center&amp;quot;&amp;gt;&amp;lt;/p&amp;gt;'&amp;lt;/pre&amp;gt; tag to set desired text alignment.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== El(X)Tree ==&lt;br /&gt;
=== How to draw part of item's text to pass over the several columns? ===&lt;br /&gt;
&lt;br /&gt;
You can use OnItemPostDraw event to redraw part of item. For example I can&lt;br /&gt;
redraw item text over first two columns:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
uses elstrutils;&lt;br /&gt;
&lt;br /&gt;
procedure TForm1.ElTree1ItemPostDraw(Sender: TObject; Canvas: TCanvas;&lt;br /&gt;
  Item: TElTreeItem; ItemRect: TRect; var DrawFocusRect: Boolean);&lt;br /&gt;
var&lt;br /&gt;
  R: TRect;&lt;br /&gt;
  s: TElFString;&lt;br /&gt;
  i: integer;&lt;br /&gt;
begin&lt;br /&gt;
  R := ItemRect;&lt;br /&gt;
  R.Right := ElTree1.HeaderSections[0].Width + ElTree1.HeaderSections[1].Width - 1;&lt;br /&gt;
  R.Top := R.Top + Item.Height div 2; // dirty calculation. use HTMLRender to render text if you need exact result&lt;br /&gt;
  // this is main column so we need to take into account space for lines and buttons&lt;br /&gt;
  R.Left := R.Left + Item.IndentAdjust;&lt;br /&gt;
  if (ElTree1.ShowRoot and ElTree1.ShowLines) or (ElTree1.ShowButtons and ElTree1.ShowRootButtons) then&lt;br /&gt;
    Inc(R.Left, ElTree1.ItemIndent)&lt;br /&gt;
  else&lt;br /&gt;
    Inc(R.Left, ElTree1.ItemIndent div 5);&lt;br /&gt;
  // offset rect if we use images&lt;br /&gt;
  R.Left := R.Left + 20 ; // paste here image width + 4 instead of 20&lt;br /&gt;
  Canvas.Brush.Style := bsSolid;&lt;br /&gt;
  Canvas.Brush.Color := clWhite; // set item's color if need&lt;br /&gt;
  // my Item.Text = '&amp;lt;html&amp;gt;&amp;lt;b&amp;gt;Some text 1&amp;lt;/b&amp;gt; &amp;lt;p&amp;gt;'+#13#10+'Some very very very very very very long text 2&amp;lt;/html&amp;gt;'&lt;br /&gt;
  i := Pos(#10, Item.Text);&lt;br /&gt;
  s := '';&lt;br /&gt;
  if i &amp;gt; 0 then&lt;br /&gt;
    s := Copy(Item.Text, i + 1, length(Item.Text) - i - 8); // 8 to ignore '&amp;lt;/html&amp;gt;'&lt;br /&gt;
  DrawTextW(Canvas.Handle, PWideChar(s), length(s), R, DT_NOPREFIX and DT_Left);&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ElDB(X)Tree  ==&lt;br /&gt;
=== How could I display images in an Item if I've stored image's indexes in a database field? ===&lt;br /&gt;
:1. Set TElDBXTree.ShowImages = True &amp;lt;br&amp;gt;&lt;br /&gt;
:2. Assign list of images (TImageList, TElImageList etc) to TElDBXTree.Images (and TElDBXTree.Images2 if you need it) properties &amp;lt;br&amp;gt;&lt;br /&gt;
:3. Open TElDBXTree.StylesDefs property in Object Inspector and choice &amp;quot;Table field&amp;quot; radiobutton in &amp;quot;Item images&amp;quot; radiogroup. It enforce setting Item.ImagesFromBase property to True for items. &amp;lt;br&amp;gt;&lt;br /&gt;
:4. Set data fields, where values for 1st (and 2st) image indexes was stored (look at Normal and State combos). &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hereon you should see images on the left side of the item's text. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How to make the sorted column drawn with an special background color ===&lt;br /&gt;
There are several ways to reach it. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:1) you may use OnSortEnd event to set custom style to each cell&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ex:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
procedure TForm1.ElXTree1SortEnd(Sender: TObject);&lt;br /&gt;
var&lt;br /&gt;
  i, j: integer;&lt;br /&gt;
begin&lt;br /&gt;
  for j := 0 to ElXTree1.Items.Count - 1 do&lt;br /&gt;
  begin&lt;br /&gt;
    for i := 0 to ElXTree1.HeaderSections.Count - 1 do&lt;br /&gt;
    begin&lt;br /&gt;
      ElXTree1.Items.Item[j].Cells[i].UseOwnStyle := True;&lt;br /&gt;
      if (i = ElXTree1.SortSection) and&lt;br /&gt;
       (ElXTree1.HeaderSections.Sections[ElXTree1.SortSection].SortMode &amp;lt;&amp;gt; hsmNone)&lt;br /&gt;
      then&lt;br /&gt;
      begin&lt;br /&gt;
        ElXTree1.Items.Item[j].Cells[i].Style.CellBackGroundColor := clMoneyGreen;&lt;br /&gt;
        ElXTree1.Items.Item[j].Cells[i].Style.ParentColors := false;&lt;br /&gt;
        ElXTree1.Items.Item[j].Cells[i].Style.UseBackGroundColor := true;&lt;br /&gt;
      end&lt;br /&gt;
      else&lt;br /&gt;
      begin&lt;br /&gt;
        ElXTree1.Items.Item[j].Cells[i].Style.CellBackGroundColor := clWhite;&lt;br /&gt;
        ElXTree1.Items.Item[j].Cells[i].Style.ParentColors := false;&lt;br /&gt;
        ElXTree1.Items.Item[j].Cells[i].Style.UseBackGroundColor := true;&lt;br /&gt;
      end;&lt;br /&gt;
    end;&lt;br /&gt;
  end;&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:2) you may use the cascading property of style to reach the same effect:&amp;lt;br&amp;gt;&lt;br /&gt;
ex:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
procedure TForm1.FormCreate(Sender: TObject);&lt;br /&gt;
var&lt;br /&gt;
  i, j: integer;&lt;br /&gt;
begin&lt;br /&gt;
// create test tree with 5 items. set custom colors in cells but not activate it&lt;br /&gt;
  for j := 0 to 5 do&lt;br /&gt;
  begin&lt;br /&gt;
    ElXTree1.Items.AddChild(nil,'Item'+Inttostr(j));&lt;br /&gt;
    ElXTree1.Items.Item[j].Cells[1].Text := Inttostr(j);&lt;br /&gt;
    for i := 0 to ElXTree1.HeaderSections.Count - 1 do&lt;br /&gt;
    begin&lt;br /&gt;
      ElXTree1.Items.Item[j].Cells[i].UseOwnStyle := True;&lt;br /&gt;
      ElXTree1.Items.Item[j].Cells[i].Style.CellBackGroundColor := clMoneyGreen;&lt;br /&gt;
      ElXTree1.Items.Item[j].Cells[i].Style.ParentColors := true;&lt;br /&gt;
    end;&lt;br /&gt;
  end;&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
procedure TForm1.ElXTree1SortEnd(Sender: TObject);&lt;br /&gt;
var&lt;br /&gt;
  i, j: integer;&lt;br /&gt;
begin&lt;br /&gt;
// in this procedure we activate using own colors for cells in sorted section&lt;br /&gt;
  for j := 0 to ElXTree1.Items.Count - 1 do&lt;br /&gt;
  begin&lt;br /&gt;
    for i := 0 to ElXTree1.HeaderSections.Count - 1 do&lt;br /&gt;
    begin&lt;br /&gt;
      if (i = ElXTree1.SortSection) and&lt;br /&gt;
       (ElXTree1.HeaderSections.Sections[ElXTree1.SortSection].SortMode &amp;lt;&amp;gt; hsmNone) &lt;br /&gt;
      then&lt;br /&gt;
        ElXTree1.Items.Item[j].Cells[i].Style.ParentColors := false&lt;br /&gt;
      else&lt;br /&gt;
        ElXTree1.Items.Item[j].Cells[i].Style.ParentColors := true;&lt;br /&gt;
    end;&lt;br /&gt;
  end;&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:3) if the tree contains a lot of items more optimized to set colors in OnItemPreDraw event:&amp;lt;br&amp;gt;&lt;br /&gt;
ex:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
procedure TForm1.ElXTree1ItemPreDraw(Sender: TObject; Item: TElXTreeItem);&lt;br /&gt;
var&lt;br /&gt;
  i: integer;&lt;br /&gt;
begin&lt;br /&gt;
  for i := 0 to ElXTree1.HeaderSections.Count - 1 do&lt;br /&gt;
  begin&lt;br /&gt;
    Item.Cells[i].UseOwnStyle := True;&lt;br /&gt;
    if (i = ElXTree1.SortSection) and&lt;br /&gt;
       (ElXTree1.HeaderSections.Sections[ElXTree1.SortSection].SortMode &amp;lt;&amp;gt; hsmNone)&lt;br /&gt;
    then&lt;br /&gt;
    begin&lt;br /&gt;
      Item.Cells[i].Style.CellBackGroundColor := clMoneyGreen;&lt;br /&gt;
      Item.Cells[i].Style.ParentColors := false;&lt;br /&gt;
      Item.Cells[i].Style.UseBackGroundColor := true;&lt;br /&gt;
    end&lt;br /&gt;
    else&lt;br /&gt;
    begin&lt;br /&gt;
      Item.Cells[i].Style.CellBackGroundColor := clWhite;&lt;br /&gt;
      Item.Cells[i].Style.ParentColors := false;&lt;br /&gt;
      Item.Cells[i].Style.UseBackGroundColor := true;&lt;br /&gt;
    end;&lt;br /&gt;
  end;&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
: 3a) ... or use virtual mode of tree &amp;lt;br&amp;gt;&lt;br /&gt;
[ Please look examle of virtual tree in our demo]&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>	</entry>

	<entry>
		<id>https://wiki.lmd.de/index.php?title=LMD_VCL_-_LMD_ElPack_FAQ&amp;diff=1566</id>
		<title>LMD VCL - LMD ElPack FAQ</title>
		<link rel="alternate" type="text/html" href="https://wiki.lmd.de/index.php?title=LMD_VCL_-_LMD_ElPack_FAQ&amp;diff=1566"/>
				<updated>2007-04-10T20:02:24Z</updated>
		
		<summary type="html">&lt;p&gt;Wikiadmin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Head-Overview}} [[Category:FAQ]] [[Category:LMD ElPack]] &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== TElInspector ==&lt;br /&gt;
=== How to use custom inplace editors? ===&lt;br /&gt;
Inspector uses own collection of inplace editors. You can examine them in&lt;br /&gt;
ElInspectorEditors.pas  We'll define simple descendant of the button edit&lt;br /&gt;
and will use it for editing of boolean values.&lt;br /&gt;
&amp;lt;pre lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
type&lt;br /&gt;
&lt;br /&gt;
  TForm1 = class(TForm)&lt;br /&gt;
&lt;br /&gt;
    ElInspector1: TElInspector;&lt;br /&gt;
    ElInspectorRTTIDataSource1: TElInspectorRTTIDataSource;&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
  end;&lt;br /&gt;
&lt;br /&gt;
  TMyElInspectorInplaceButtonEdit = class(TElInspectorInplaceButtonEdit)&lt;br /&gt;
  protected&lt;br /&gt;
    procedure BtnClick(Sender: TObject); override;&lt;br /&gt;
  end;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
implementation&lt;br /&gt;
&lt;br /&gt;
{ TMyElInspectorInplaceButtonEdit }&lt;br /&gt;
&lt;br /&gt;
procedure TMyElInspectorInplaceButtonEdit.BtnClick(Sender: TObject);&lt;br /&gt;
begin&lt;br /&gt;
  if MessageDlg('Yes = True, No = False', mtConfirmation, [mbYes,mbNo], 0) = mrYes then&lt;br /&gt;
  begin&lt;br /&gt;
    TElInspectorItem(Item).InspectorData.AsString := 'True';&lt;br /&gt;
    Editor.Text := 'True';&lt;br /&gt;
  end&lt;br /&gt;
  else&lt;br /&gt;
  begin&lt;br /&gt;
    TElInspectorItem(Item).InspectorData.AsString := 'False';&lt;br /&gt;
    Editor.Text := 'False';&lt;br /&gt;
  end;&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
procedure TForm1.FormCreate(Sender: TObject);&lt;br /&gt;
var&lt;br /&gt;
  i: integer;&lt;br /&gt;
  LT: TElInspectorRegister;&lt;br /&gt;
begin&lt;br /&gt;
// we must to find current editor for boolean values in inspector's editors list&lt;br /&gt;
  for i := 1 to ElInspectorRTTIDataSource1.RegisterList.Count - 1 do&lt;br /&gt;
  begin&lt;br /&gt;
    LT := TElInspectorRegister(ElInspectorRTTIDataSource1.RegisterList.Items[i]);&lt;br /&gt;
    if (LT is TElInspectorTypeInfo) and (TElInspectorTypeInfo(LT).TypeInfo = TypeInfo(Boolean)) then&lt;br /&gt;
    begin &lt;br /&gt;
    // remove current boolean editor&lt;br /&gt;
      ElInspectorRTTIDataSource1.RegisterList.Remove( ElInspectorRTTIDataSource1.RegisterList.Items[i] );&lt;br /&gt;
    // register our editor&lt;br /&gt;
      ElInspectorRTTIDataSource1.RegisterList.Insert(i, TElInspectorTypeInfo.Create(TMyElInspectorInplaceButtonEdit, TElBooleanProperty, TypeInfo(Boolean)));&lt;br /&gt;
      Break;&lt;br /&gt;
    end;&lt;br /&gt;
  end;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== TStyleManager ==&lt;br /&gt;
=== How to use StyleName? ===&lt;br /&gt;
&lt;br /&gt;
Style Manager operates with hierarchical style sheets. These style sheets are similar to Cascading Style Sheets (CSS), used in web pages, but they are more effective and easy to use. Each style sheet contains several styles. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Each style contains one or more property values. When the style is applied to the component, the component is checked for presence of the property with given name. If the property is present, it is set to the value, specified in the style. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Style can be one of three types: &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:1) Default&lt;br /&gt;
:2) Class&lt;br /&gt;
:3) Specific&lt;br /&gt;
&lt;br /&gt;
There is one default style per style sheet. It is an ancestor for all other styles. Specific styles are applied when they are explicitly referred to by the component (in it's StyleName property).&amp;lt;br&amp;gt;&lt;br /&gt;
Name of Specific style should begin by point (ex. '.CustomStyle') for prevention of crossing with names of classes.&amp;lt;br&amp;gt; &lt;br /&gt;
Class styles are applied when there is no specific style name specified for the component. In this case the style with the name equal to component's class is searched for and applied. For example, if the component TElEdit refers to style manager, but there is no style name specified, Style Manager tries to find the style named 'TElEdit'. If it finds, this style is applied. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== HTML controls ==&lt;br /&gt;
=== Could you tell me how to get the HTML text on an HTML Label (View, TElXTreeCell etc.) to center? ===&lt;br /&gt;
You may use &amp;lt;pre&amp;gt;'&amp;lt;p align=&amp;quot;Center&amp;quot;&amp;gt;&amp;lt;/p&amp;gt;'&amp;lt;/pre&amp;gt; tag to set desired text alignment.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== El(X)Tree ==&lt;br /&gt;
=== How to draw part of item's text to pass over the several columns? ===&lt;br /&gt;
&lt;br /&gt;
You can use OnItemPostDraw event to redraw part of item. For example I can&lt;br /&gt;
redraw item text over first two columns:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
uses elstrutils;&lt;br /&gt;
&lt;br /&gt;
procedure TForm1.ElTree1ItemPostDraw(Sender: TObject; Canvas: TCanvas;&lt;br /&gt;
  Item: TElTreeItem; ItemRect: TRect; var DrawFocusRect: Boolean);&lt;br /&gt;
var&lt;br /&gt;
  R: TRect;&lt;br /&gt;
  s: TElFString;&lt;br /&gt;
  i: integer;&lt;br /&gt;
begin&lt;br /&gt;
  R := ItemRect;&lt;br /&gt;
  R.Right := ElTree1.HeaderSections[0].Width + ElTree1.HeaderSections[1].Width - 1;&lt;br /&gt;
  R.Top := R.Top + Item.Height div 2; // dirty calculation. use HTMLRender to render text if you need exact result&lt;br /&gt;
  // this is main column so we need to take into account space for lines and buttons&lt;br /&gt;
  R.Left := R.Left + Item.IndentAdjust;&lt;br /&gt;
  if (ElTree1.ShowRoot and ElTree1.ShowLines) or (ElTree1.ShowButtons and ElTree1.ShowRootButtons) then&lt;br /&gt;
    Inc(R.Left, ElTree1.ItemIndent)&lt;br /&gt;
  else&lt;br /&gt;
    Inc(R.Left, ElTree1.ItemIndent div 5);&lt;br /&gt;
  // offset rect if we use images&lt;br /&gt;
  R.Left := R.Left + 20 ; // paste here image width + 4 instead of 20&lt;br /&gt;
  Canvas.Brush.Style := bsSolid;&lt;br /&gt;
  Canvas.Brush.Color := clWhite; // set item's color if need&lt;br /&gt;
  // my Item.Text = '&amp;lt;html&amp;gt;&amp;lt;b&amp;gt;Some text 1&amp;lt;/b&amp;gt; &amp;lt;p&amp;gt;'+#13#10+'Some very very very very very very long text 2&amp;lt;/html&amp;gt;'&lt;br /&gt;
  i := Pos(#10, Item.Text);&lt;br /&gt;
  s := '';&lt;br /&gt;
  if i &amp;gt; 0 then&lt;br /&gt;
    s := Copy(Item.Text, i + 1, length(Item.Text) - i - 8); // 8 to ignore '&amp;lt;/html&amp;gt;'&lt;br /&gt;
  DrawTextW(Canvas.Handle, PWideChar(s), length(s), R, DT_NOPREFIX and DT_Left);&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ElDB(X)Tree  ==&lt;br /&gt;
=== How could I display images in an Item if I've stored image's indexes in a database field? ===&lt;br /&gt;
:1. Set TElDBXTree.ShowImages = True &amp;lt;br&amp;gt;&lt;br /&gt;
:2. Assign list of images (TImageList, TElImageList etc) to TElDBXTree.Images (and TElDBXTree.Images2 if you need it) properties &amp;lt;br&amp;gt;&lt;br /&gt;
:3. Open TElDBXTree.StylesDefs property in Object Inspector and choice &amp;quot;Table field&amp;quot; radiobutton in &amp;quot;Item images&amp;quot; radiogroup. It enforce setting Item.ImagesFromBase property to True for items. &amp;lt;br&amp;gt;&lt;br /&gt;
:4. Set data fields, where values for 1st (and 2st) image indexes was stored (look at Normal and State combos). &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hereon you should see images on the left side of the item's text. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How to make the sorted column drawn with an special background color ===&lt;br /&gt;
There are several ways to reach it. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:1) you may use OnSortEnd event to set custom style to each cell&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ex:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
procedure TForm1.ElXTree1SortEnd(Sender: TObject);&lt;br /&gt;
var&lt;br /&gt;
  i, j: integer;&lt;br /&gt;
begin&lt;br /&gt;
  for j := 0 to ElXTree1.Items.Count - 1 do&lt;br /&gt;
  begin&lt;br /&gt;
    for i := 0 to ElXTree1.HeaderSections.Count - 1 do&lt;br /&gt;
    begin&lt;br /&gt;
      ElXTree1.Items.Item[j].Cells[i].UseOwnStyle := True;&lt;br /&gt;
      if (i = ElXTree1.SortSection) and&lt;br /&gt;
       (ElXTree1.HeaderSections.Sections[ElXTree1.SortSection].SortMode &amp;lt;&amp;gt; hsmNone)&lt;br /&gt;
      then&lt;br /&gt;
      begin&lt;br /&gt;
        ElXTree1.Items.Item[j].Cells[i].Style.CellBackGroundColor := clMoneyGreen;&lt;br /&gt;
        ElXTree1.Items.Item[j].Cells[i].Style.ParentColors := false;&lt;br /&gt;
        ElXTree1.Items.Item[j].Cells[i].Style.UseBackGroundColor := true;&lt;br /&gt;
      end&lt;br /&gt;
      else&lt;br /&gt;
      begin&lt;br /&gt;
        ElXTree1.Items.Item[j].Cells[i].Style.CellBackGroundColor := clWhite;&lt;br /&gt;
        ElXTree1.Items.Item[j].Cells[i].Style.ParentColors := false;&lt;br /&gt;
        ElXTree1.Items.Item[j].Cells[i].Style.UseBackGroundColor := true;&lt;br /&gt;
      end;&lt;br /&gt;
    end;&lt;br /&gt;
  end;&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:2) you may use the cascading property of style to reach the same effect:&amp;lt;br&amp;gt;&lt;br /&gt;
ex:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
procedure TForm1.FormCreate(Sender: TObject);&lt;br /&gt;
var&lt;br /&gt;
  i, j: integer;&lt;br /&gt;
begin&lt;br /&gt;
// create test tree with 5 items. set custom colors in cells but not activate it&lt;br /&gt;
  for j := 0 to 5 do&lt;br /&gt;
  begin&lt;br /&gt;
    ElXTree1.Items.AddChild(nil,'Item'+Inttostr(j));&lt;br /&gt;
    ElXTree1.Items.Item[j].Cells[1].Text := Inttostr(j);&lt;br /&gt;
    for i := 0 to ElXTree1.HeaderSections.Count - 1 do&lt;br /&gt;
    begin&lt;br /&gt;
      ElXTree1.Items.Item[j].Cells[i].UseOwnStyle := True;&lt;br /&gt;
      ElXTree1.Items.Item[j].Cells[i].Style.CellBackGroundColor := clMoneyGreen;&lt;br /&gt;
      ElXTree1.Items.Item[j].Cells[i].Style.ParentColors := true;&lt;br /&gt;
    end;&lt;br /&gt;
  end;&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
procedure TForm1.ElXTree1SortEnd(Sender: TObject);&lt;br /&gt;
var&lt;br /&gt;
  i, j: integer;&lt;br /&gt;
begin&lt;br /&gt;
// in this procedure we activate using own colors for cells in sorted section&lt;br /&gt;
  for j := 0 to ElXTree1.Items.Count - 1 do&lt;br /&gt;
  begin&lt;br /&gt;
    for i := 0 to ElXTree1.HeaderSections.Count - 1 do&lt;br /&gt;
    begin&lt;br /&gt;
      if (i = ElXTree1.SortSection) and&lt;br /&gt;
       (ElXTree1.HeaderSections.Sections[ElXTree1.SortSection].SortMode &amp;lt;&amp;gt; hsmNone) &lt;br /&gt;
      then&lt;br /&gt;
        ElXTree1.Items.Item[j].Cells[i].Style.ParentColors := false&lt;br /&gt;
      else&lt;br /&gt;
        ElXTree1.Items.Item[j].Cells[i].Style.ParentColors := true;&lt;br /&gt;
    end;&lt;br /&gt;
  end;&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:3) if the tree contains a lot of items more optimized to set colors in OnItemPreDraw event:&amp;lt;br&amp;gt;&lt;br /&gt;
ex:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
procedure TForm1.ElXTree1ItemPreDraw(Sender: TObject; Item: TElXTreeItem);&lt;br /&gt;
var&lt;br /&gt;
  i: integer;&lt;br /&gt;
begin&lt;br /&gt;
  for i := 0 to ElXTree1.HeaderSections.Count - 1 do&lt;br /&gt;
  begin&lt;br /&gt;
    Item.Cells[i].UseOwnStyle := True;&lt;br /&gt;
    if (i = ElXTree1.SortSection) and&lt;br /&gt;
       (ElXTree1.HeaderSections.Sections[ElXTree1.SortSection].SortMode &amp;lt;&amp;gt; hsmNone)&lt;br /&gt;
    then&lt;br /&gt;
    begin&lt;br /&gt;
      Item.Cells[i].Style.CellBackGroundColor := clMoneyGreen;&lt;br /&gt;
      Item.Cells[i].Style.ParentColors := false;&lt;br /&gt;
      Item.Cells[i].Style.UseBackGroundColor := true;&lt;br /&gt;
    end&lt;br /&gt;
    else&lt;br /&gt;
    begin&lt;br /&gt;
      Item.Cells[i].Style.CellBackGroundColor := clWhite;&lt;br /&gt;
      Item.Cells[i].Style.ParentColors := false;&lt;br /&gt;
      Item.Cells[i].Style.UseBackGroundColor := true;&lt;br /&gt;
    end;&lt;br /&gt;
  end;&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
: 3a) ... or use virtual mode of tree &amp;lt;br&amp;gt;&lt;br /&gt;
[ Please look examle of virtual tree in our demo]&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>	</entry>

	<entry>
		<id>https://wiki.lmd.de/index.php?title=LMD_VCL_-_LMD_ElPack_FAQ&amp;diff=1565</id>
		<title>LMD VCL - LMD ElPack FAQ</title>
		<link rel="alternate" type="text/html" href="https://wiki.lmd.de/index.php?title=LMD_VCL_-_LMD_ElPack_FAQ&amp;diff=1565"/>
				<updated>2007-04-10T20:02:01Z</updated>
		
		<summary type="html">&lt;p&gt;Wikiadmin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Head-Overview}} [[Category:FAQ]] [[Category:LMD ElPack]] &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== TElInspector ==&lt;br /&gt;
=== How to use custom inplace editors? ===&lt;br /&gt;
Inspector uses own collection of inplace editors. You can examine them in&lt;br /&gt;
ElInspectorEditors.pas  We'll define simple descendant of the button edit&lt;br /&gt;
and will use it for editing of boolean values.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
type&lt;br /&gt;
&lt;br /&gt;
  TForm1 = class(TForm)&lt;br /&gt;
&lt;br /&gt;
    ElInspector1: TElInspector;&lt;br /&gt;
    ElInspectorRTTIDataSource1: TElInspectorRTTIDataSource;&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
  end;&lt;br /&gt;
&lt;br /&gt;
  TMyElInspectorInplaceButtonEdit = class(TElInspectorInplaceButtonEdit)&lt;br /&gt;
  protected&lt;br /&gt;
    procedure BtnClick(Sender: TObject); override;&lt;br /&gt;
  end;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
implementation&lt;br /&gt;
&lt;br /&gt;
{ TMyElInspectorInplaceButtonEdit }&lt;br /&gt;
&lt;br /&gt;
procedure TMyElInspectorInplaceButtonEdit.BtnClick(Sender: TObject);&lt;br /&gt;
begin&lt;br /&gt;
  if MessageDlg('Yes = True, No = False', mtConfirmation, [mbYes,mbNo], 0) = mrYes then&lt;br /&gt;
  begin&lt;br /&gt;
    TElInspectorItem(Item).InspectorData.AsString := 'True';&lt;br /&gt;
    Editor.Text := 'True';&lt;br /&gt;
  end&lt;br /&gt;
  else&lt;br /&gt;
  begin&lt;br /&gt;
    TElInspectorItem(Item).InspectorData.AsString := 'False';&lt;br /&gt;
    Editor.Text := 'False';&lt;br /&gt;
  end;&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
procedure TForm1.FormCreate(Sender: TObject);&lt;br /&gt;
var&lt;br /&gt;
  i: integer;&lt;br /&gt;
  LT: TElInspectorRegister;&lt;br /&gt;
begin&lt;br /&gt;
// we must to find current editor for boolean values in inspector's editors list&lt;br /&gt;
  for i := 1 to ElInspectorRTTIDataSource1.RegisterList.Count - 1 do&lt;br /&gt;
  begin&lt;br /&gt;
    LT := TElInspectorRegister(ElInspectorRTTIDataSource1.RegisterList.Items[i]);&lt;br /&gt;
    if (LT is TElInspectorTypeInfo) and (TElInspectorTypeInfo(LT).TypeInfo = TypeInfo(Boolean)) then&lt;br /&gt;
    begin &lt;br /&gt;
    // remove current boolean editor&lt;br /&gt;
      ElInspectorRTTIDataSource1.RegisterList.Remove( ElInspectorRTTIDataSource1.RegisterList.Items[i] );&lt;br /&gt;
    // register our editor&lt;br /&gt;
      ElInspectorRTTIDataSource1.RegisterList.Insert(i, TElInspectorTypeInfo.Create(TMyElInspectorInplaceButtonEdit, TElBooleanProperty, TypeInfo(Boolean)));&lt;br /&gt;
      Break;&lt;br /&gt;
    end;&lt;br /&gt;
  end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== TStyleManager ==&lt;br /&gt;
=== How to use StyleName? ===&lt;br /&gt;
&lt;br /&gt;
Style Manager operates with hierarchical style sheets. These style sheets are similar to Cascading Style Sheets (CSS), used in web pages, but they are more effective and easy to use. Each style sheet contains several styles. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Each style contains one or more property values. When the style is applied to the component, the component is checked for presence of the property with given name. If the property is present, it is set to the value, specified in the style. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Style can be one of three types: &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:1) Default&lt;br /&gt;
:2) Class&lt;br /&gt;
:3) Specific&lt;br /&gt;
&lt;br /&gt;
There is one default style per style sheet. It is an ancestor for all other styles. Specific styles are applied when they are explicitly referred to by the component (in it's StyleName property).&amp;lt;br&amp;gt;&lt;br /&gt;
Name of Specific style should begin by point (ex. '.CustomStyle') for prevention of crossing with names of classes.&amp;lt;br&amp;gt; &lt;br /&gt;
Class styles are applied when there is no specific style name specified for the component. In this case the style with the name equal to component's class is searched for and applied. For example, if the component TElEdit refers to style manager, but there is no style name specified, Style Manager tries to find the style named 'TElEdit'. If it finds, this style is applied. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== HTML controls ==&lt;br /&gt;
=== Could you tell me how to get the HTML text on an HTML Label (View, TElXTreeCell etc.) to center? ===&lt;br /&gt;
You may use &amp;lt;pre&amp;gt;'&amp;lt;p align=&amp;quot;Center&amp;quot;&amp;gt;&amp;lt;/p&amp;gt;'&amp;lt;/pre&amp;gt; tag to set desired text alignment.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== El(X)Tree ==&lt;br /&gt;
=== How to draw part of item's text to pass over the several columns? ===&lt;br /&gt;
&lt;br /&gt;
You can use OnItemPostDraw event to redraw part of item. For example I can&lt;br /&gt;
redraw item text over first two columns:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
uses elstrutils;&lt;br /&gt;
&lt;br /&gt;
procedure TForm1.ElTree1ItemPostDraw(Sender: TObject; Canvas: TCanvas;&lt;br /&gt;
  Item: TElTreeItem; ItemRect: TRect; var DrawFocusRect: Boolean);&lt;br /&gt;
var&lt;br /&gt;
  R: TRect;&lt;br /&gt;
  s: TElFString;&lt;br /&gt;
  i: integer;&lt;br /&gt;
begin&lt;br /&gt;
  R := ItemRect;&lt;br /&gt;
  R.Right := ElTree1.HeaderSections[0].Width + ElTree1.HeaderSections[1].Width - 1;&lt;br /&gt;
  R.Top := R.Top + Item.Height div 2; // dirty calculation. use HTMLRender to render text if you need exact result&lt;br /&gt;
  // this is main column so we need to take into account space for lines and buttons&lt;br /&gt;
  R.Left := R.Left + Item.IndentAdjust;&lt;br /&gt;
  if (ElTree1.ShowRoot and ElTree1.ShowLines) or (ElTree1.ShowButtons and ElTree1.ShowRootButtons) then&lt;br /&gt;
    Inc(R.Left, ElTree1.ItemIndent)&lt;br /&gt;
  else&lt;br /&gt;
    Inc(R.Left, ElTree1.ItemIndent div 5);&lt;br /&gt;
  // offset rect if we use images&lt;br /&gt;
  R.Left := R.Left + 20 ; // paste here image width + 4 instead of 20&lt;br /&gt;
  Canvas.Brush.Style := bsSolid;&lt;br /&gt;
  Canvas.Brush.Color := clWhite; // set item's color if need&lt;br /&gt;
  // my Item.Text = '&amp;lt;html&amp;gt;&amp;lt;b&amp;gt;Some text 1&amp;lt;/b&amp;gt; &amp;lt;p&amp;gt;'+#13#10+'Some very very very very very very long text 2&amp;lt;/html&amp;gt;'&lt;br /&gt;
  i := Pos(#10, Item.Text);&lt;br /&gt;
  s := '';&lt;br /&gt;
  if i &amp;gt; 0 then&lt;br /&gt;
    s := Copy(Item.Text, i + 1, length(Item.Text) - i - 8); // 8 to ignore '&amp;lt;/html&amp;gt;'&lt;br /&gt;
  DrawTextW(Canvas.Handle, PWideChar(s), length(s), R, DT_NOPREFIX and DT_Left);&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ElDB(X)Tree  ==&lt;br /&gt;
=== How could I display images in an Item if I've stored image's indexes in a database field? ===&lt;br /&gt;
:1. Set TElDBXTree.ShowImages = True &amp;lt;br&amp;gt;&lt;br /&gt;
:2. Assign list of images (TImageList, TElImageList etc) to TElDBXTree.Images (and TElDBXTree.Images2 if you need it) properties &amp;lt;br&amp;gt;&lt;br /&gt;
:3. Open TElDBXTree.StylesDefs property in Object Inspector and choice &amp;quot;Table field&amp;quot; radiobutton in &amp;quot;Item images&amp;quot; radiogroup. It enforce setting Item.ImagesFromBase property to True for items. &amp;lt;br&amp;gt;&lt;br /&gt;
:4. Set data fields, where values for 1st (and 2st) image indexes was stored (look at Normal and State combos). &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hereon you should see images on the left side of the item's text. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How to make the sorted column drawn with an special background color ===&lt;br /&gt;
There are several ways to reach it. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:1) you may use OnSortEnd event to set custom style to each cell&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ex:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
procedure TForm1.ElXTree1SortEnd(Sender: TObject);&lt;br /&gt;
var&lt;br /&gt;
  i, j: integer;&lt;br /&gt;
begin&lt;br /&gt;
  for j := 0 to ElXTree1.Items.Count - 1 do&lt;br /&gt;
  begin&lt;br /&gt;
    for i := 0 to ElXTree1.HeaderSections.Count - 1 do&lt;br /&gt;
    begin&lt;br /&gt;
      ElXTree1.Items.Item[j].Cells[i].UseOwnStyle := True;&lt;br /&gt;
      if (i = ElXTree1.SortSection) and&lt;br /&gt;
       (ElXTree1.HeaderSections.Sections[ElXTree1.SortSection].SortMode &amp;lt;&amp;gt; hsmNone)&lt;br /&gt;
      then&lt;br /&gt;
      begin&lt;br /&gt;
        ElXTree1.Items.Item[j].Cells[i].Style.CellBackGroundColor := clMoneyGreen;&lt;br /&gt;
        ElXTree1.Items.Item[j].Cells[i].Style.ParentColors := false;&lt;br /&gt;
        ElXTree1.Items.Item[j].Cells[i].Style.UseBackGroundColor := true;&lt;br /&gt;
      end&lt;br /&gt;
      else&lt;br /&gt;
      begin&lt;br /&gt;
        ElXTree1.Items.Item[j].Cells[i].Style.CellBackGroundColor := clWhite;&lt;br /&gt;
        ElXTree1.Items.Item[j].Cells[i].Style.ParentColors := false;&lt;br /&gt;
        ElXTree1.Items.Item[j].Cells[i].Style.UseBackGroundColor := true;&lt;br /&gt;
      end;&lt;br /&gt;
    end;&lt;br /&gt;
  end;&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:2) you may use the cascading property of style to reach the same effect:&amp;lt;br&amp;gt;&lt;br /&gt;
ex:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
procedure TForm1.FormCreate(Sender: TObject);&lt;br /&gt;
var&lt;br /&gt;
  i, j: integer;&lt;br /&gt;
begin&lt;br /&gt;
// create test tree with 5 items. set custom colors in cells but not activate it&lt;br /&gt;
  for j := 0 to 5 do&lt;br /&gt;
  begin&lt;br /&gt;
    ElXTree1.Items.AddChild(nil,'Item'+Inttostr(j));&lt;br /&gt;
    ElXTree1.Items.Item[j].Cells[1].Text := Inttostr(j);&lt;br /&gt;
    for i := 0 to ElXTree1.HeaderSections.Count - 1 do&lt;br /&gt;
    begin&lt;br /&gt;
      ElXTree1.Items.Item[j].Cells[i].UseOwnStyle := True;&lt;br /&gt;
      ElXTree1.Items.Item[j].Cells[i].Style.CellBackGroundColor := clMoneyGreen;&lt;br /&gt;
      ElXTree1.Items.Item[j].Cells[i].Style.ParentColors := true;&lt;br /&gt;
    end;&lt;br /&gt;
  end;&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
procedure TForm1.ElXTree1SortEnd(Sender: TObject);&lt;br /&gt;
var&lt;br /&gt;
  i, j: integer;&lt;br /&gt;
begin&lt;br /&gt;
// in this procedure we activate using own colors for cells in sorted section&lt;br /&gt;
  for j := 0 to ElXTree1.Items.Count - 1 do&lt;br /&gt;
  begin&lt;br /&gt;
    for i := 0 to ElXTree1.HeaderSections.Count - 1 do&lt;br /&gt;
    begin&lt;br /&gt;
      if (i = ElXTree1.SortSection) and&lt;br /&gt;
       (ElXTree1.HeaderSections.Sections[ElXTree1.SortSection].SortMode &amp;lt;&amp;gt; hsmNone) &lt;br /&gt;
      then&lt;br /&gt;
        ElXTree1.Items.Item[j].Cells[i].Style.ParentColors := false&lt;br /&gt;
      else&lt;br /&gt;
        ElXTree1.Items.Item[j].Cells[i].Style.ParentColors := true;&lt;br /&gt;
    end;&lt;br /&gt;
  end;&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:3) if the tree contains a lot of items more optimized to set colors in OnItemPreDraw event:&amp;lt;br&amp;gt;&lt;br /&gt;
ex:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
procedure TForm1.ElXTree1ItemPreDraw(Sender: TObject; Item: TElXTreeItem);&lt;br /&gt;
var&lt;br /&gt;
  i: integer;&lt;br /&gt;
begin&lt;br /&gt;
  for i := 0 to ElXTree1.HeaderSections.Count - 1 do&lt;br /&gt;
  begin&lt;br /&gt;
    Item.Cells[i].UseOwnStyle := True;&lt;br /&gt;
    if (i = ElXTree1.SortSection) and&lt;br /&gt;
       (ElXTree1.HeaderSections.Sections[ElXTree1.SortSection].SortMode &amp;lt;&amp;gt; hsmNone)&lt;br /&gt;
    then&lt;br /&gt;
    begin&lt;br /&gt;
      Item.Cells[i].Style.CellBackGroundColor := clMoneyGreen;&lt;br /&gt;
      Item.Cells[i].Style.ParentColors := false;&lt;br /&gt;
      Item.Cells[i].Style.UseBackGroundColor := true;&lt;br /&gt;
    end&lt;br /&gt;
    else&lt;br /&gt;
    begin&lt;br /&gt;
      Item.Cells[i].Style.CellBackGroundColor := clWhite;&lt;br /&gt;
      Item.Cells[i].Style.ParentColors := false;&lt;br /&gt;
      Item.Cells[i].Style.UseBackGroundColor := true;&lt;br /&gt;
    end;&lt;br /&gt;
  end;&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
: 3a) ... or use virtual mode of tree &amp;lt;br&amp;gt;&lt;br /&gt;
[ Please look examle of virtual tree in our demo]&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>	</entry>

	<entry>
		<id>https://wiki.lmd.de/index.php?title=LMD_VCL_-_LMD_ElPack_FAQ&amp;diff=1564</id>
		<title>LMD VCL - LMD ElPack FAQ</title>
		<link rel="alternate" type="text/html" href="https://wiki.lmd.de/index.php?title=LMD_VCL_-_LMD_ElPack_FAQ&amp;diff=1564"/>
				<updated>2007-04-10T19:59:32Z</updated>
		
		<summary type="html">&lt;p&gt;Wikiadmin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Head-Overview}} [[Category:FAQ]] [[Category:LMD ElPack]] &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== TElInspector ==&lt;br /&gt;
=== How to use custom inplace editors? ===&lt;br /&gt;
Inspector uses own collection of inplace editors. You can examine them in&lt;br /&gt;
ElInspectorEditors.pas  We'll define simple descendant of the button edit&lt;br /&gt;
and will use it for editing of boolean values.&lt;br /&gt;
&amp;lt;pre lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
type&lt;br /&gt;
&lt;br /&gt;
  TForm1 = class(TForm)&lt;br /&gt;
&lt;br /&gt;
    ElInspector1: TElInspector;&lt;br /&gt;
    ElInspectorRTTIDataSource1: TElInspectorRTTIDataSource;&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
  end;&lt;br /&gt;
&lt;br /&gt;
  TMyElInspectorInplaceButtonEdit = class(TElInspectorInplaceButtonEdit)&lt;br /&gt;
  protected&lt;br /&gt;
    procedure BtnClick(Sender: TObject); override;&lt;br /&gt;
  end;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
implementation&lt;br /&gt;
&lt;br /&gt;
{ TMyElInspectorInplaceButtonEdit }&lt;br /&gt;
&lt;br /&gt;
procedure TMyElInspectorInplaceButtonEdit.BtnClick(Sender: TObject);&lt;br /&gt;
begin&lt;br /&gt;
  if MessageDlg('Yes = True, No = False', mtConfirmation, [mbYes,mbNo], 0) = mrYes then&lt;br /&gt;
  begin&lt;br /&gt;
    TElInspectorItem(Item).InspectorData.AsString := 'True';&lt;br /&gt;
    Editor.Text := 'True';&lt;br /&gt;
  end&lt;br /&gt;
  else&lt;br /&gt;
  begin&lt;br /&gt;
    TElInspectorItem(Item).InspectorData.AsString := 'False';&lt;br /&gt;
    Editor.Text := 'False';&lt;br /&gt;
  end;&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
procedure TForm1.FormCreate(Sender: TObject);&lt;br /&gt;
var&lt;br /&gt;
  i: integer;&lt;br /&gt;
  LT: TElInspectorRegister;&lt;br /&gt;
begin&lt;br /&gt;
// we must to find current editor for boolean values in inspector's editors list&lt;br /&gt;
  for i := 1 to ElInspectorRTTIDataSource1.RegisterList.Count - 1 do&lt;br /&gt;
  begin&lt;br /&gt;
    LT := TElInspectorRegister(ElInspectorRTTIDataSource1.RegisterList.Items[i]);&lt;br /&gt;
    if (LT is TElInspectorTypeInfo) and (TElInspectorTypeInfo(LT).TypeInfo = TypeInfo(Boolean)) then&lt;br /&gt;
    begin &lt;br /&gt;
    // remove current boolean editor&lt;br /&gt;
      ElInspectorRTTIDataSource1.RegisterList.Remove( ElInspectorRTTIDataSource1.RegisterList.Items[i] );&lt;br /&gt;
    // register our editor&lt;br /&gt;
      ElInspectorRTTIDataSource1.RegisterList.Insert(i, TElInspectorTypeInfo.Create(TMyElInspectorInplaceButtonEdit, TElBooleanProperty, TypeInfo(Boolean)));&lt;br /&gt;
      Break;&lt;br /&gt;
    end;&lt;br /&gt;
  end;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== TStyleManager ==&lt;br /&gt;
=== How to use StyleName? ===&lt;br /&gt;
&lt;br /&gt;
Style Manager operates with hierarchical style sheets. These style sheets are similar to Cascading Style Sheets (CSS), used in web pages, but they are more effective and easy to use. Each style sheet contains several styles. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Each style contains one or more property values. When the style is applied to the component, the component is checked for presence of the property with given name. If the property is present, it is set to the value, specified in the style. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Style can be one of three types: &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:1) Default&lt;br /&gt;
:2) Class&lt;br /&gt;
:3) Specific&lt;br /&gt;
&lt;br /&gt;
There is one default style per style sheet. It is an ancestor for all other styles. Specific styles are applied when they are explicitly referred to by the component (in it's StyleName property).&amp;lt;br&amp;gt;&lt;br /&gt;
Name of Specific style should begin by point (ex. '.CustomStyle') for prevention of crossing with names of classes.&amp;lt;br&amp;gt; &lt;br /&gt;
Class styles are applied when there is no specific style name specified for the component. In this case the style with the name equal to component's class is searched for and applied. For example, if the component TElEdit refers to style manager, but there is no style name specified, Style Manager tries to find the style named 'TElEdit'. If it finds, this style is applied. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== HTML controls ==&lt;br /&gt;
=== Could you tell me how to get the HTML text on an HTML Label (View, TElXTreeCell etc.) to center? ===&lt;br /&gt;
You may use &amp;lt;pre&amp;gt;'&amp;lt;p align=&amp;quot;Center&amp;quot;&amp;gt;&amp;lt;/p&amp;gt;'&amp;lt;/pre&amp;gt; tag to set desired text alignment.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== El(X)Tree ==&lt;br /&gt;
=== How to draw part of item's text to pass over the several columns? ===&lt;br /&gt;
&lt;br /&gt;
You can use OnItemPostDraw event to redraw part of item. For example I can&lt;br /&gt;
redraw item text over first two columns:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
uses elstrutils;&lt;br /&gt;
&lt;br /&gt;
procedure TForm1.ElTree1ItemPostDraw(Sender: TObject; Canvas: TCanvas;&lt;br /&gt;
  Item: TElTreeItem; ItemRect: TRect; var DrawFocusRect: Boolean);&lt;br /&gt;
var&lt;br /&gt;
  R: TRect;&lt;br /&gt;
  s: TElFString;&lt;br /&gt;
  i: integer;&lt;br /&gt;
begin&lt;br /&gt;
  R := ItemRect;&lt;br /&gt;
  R.Right := ElTree1.HeaderSections[0].Width + ElTree1.HeaderSections[1].Width - 1;&lt;br /&gt;
  R.Top := R.Top + Item.Height div 2; // dirty calculation. use HTMLRender to render text if you need exact result&lt;br /&gt;
  // this is main column so we need to take into account space for lines and buttons&lt;br /&gt;
  R.Left := R.Left + Item.IndentAdjust;&lt;br /&gt;
  if (ElTree1.ShowRoot and ElTree1.ShowLines) or (ElTree1.ShowButtons and ElTree1.ShowRootButtons) then&lt;br /&gt;
    Inc(R.Left, ElTree1.ItemIndent)&lt;br /&gt;
  else&lt;br /&gt;
    Inc(R.Left, ElTree1.ItemIndent div 5);&lt;br /&gt;
  // offset rect if we use images&lt;br /&gt;
  R.Left := R.Left + 20 ; // paste here image width + 4 instead of 20&lt;br /&gt;
  Canvas.Brush.Style := bsSolid;&lt;br /&gt;
  Canvas.Brush.Color := clWhite; // set item's color if need&lt;br /&gt;
  // my Item.Text = '&amp;lt;html&amp;gt;&amp;lt;b&amp;gt;Some text 1&amp;lt;/b&amp;gt; &amp;lt;p&amp;gt;'+#13#10+'Some very very very very very very long text 2&amp;lt;/html&amp;gt;'&lt;br /&gt;
  i := Pos(#10, Item.Text);&lt;br /&gt;
  s := '';&lt;br /&gt;
  if i &amp;gt; 0 then&lt;br /&gt;
    s := Copy(Item.Text, i + 1, length(Item.Text) - i - 8); // 8 to ignore '&amp;lt;/html&amp;gt;'&lt;br /&gt;
  DrawTextW(Canvas.Handle, PWideChar(s), length(s), R, DT_NOPREFIX and DT_Left);&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ElDB(X)Tree  ==&lt;br /&gt;
=== How could I display images in an Item if I've stored image's indexes in a database field? ===&lt;br /&gt;
:1. Set TElDBXTree.ShowImages = True &amp;lt;br&amp;gt;&lt;br /&gt;
:2. Assign list of images (TImageList, TElImageList etc) to TElDBXTree.Images (and TElDBXTree.Images2 if you need it) properties &amp;lt;br&amp;gt;&lt;br /&gt;
:3. Open TElDBXTree.StylesDefs property in Object Inspector and choice &amp;quot;Table field&amp;quot; radiobutton in &amp;quot;Item images&amp;quot; radiogroup. It enforce setting Item.ImagesFromBase property to True for items. &amp;lt;br&amp;gt;&lt;br /&gt;
:4. Set data fields, where values for 1st (and 2st) image indexes was stored (look at Normal and State combos). &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hereon you should see images on the left side of the item's text. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How to make the sorted column drawn with an special background color ===&lt;br /&gt;
There are several ways to reach it. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:1) you may use OnSortEnd event to set custom style to each cell&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ex:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
procedure TForm1.ElXTree1SortEnd(Sender: TObject);&lt;br /&gt;
var&lt;br /&gt;
  i, j: integer;&lt;br /&gt;
begin&lt;br /&gt;
  for j := 0 to ElXTree1.Items.Count - 1 do&lt;br /&gt;
  begin&lt;br /&gt;
    for i := 0 to ElXTree1.HeaderSections.Count - 1 do&lt;br /&gt;
    begin&lt;br /&gt;
      ElXTree1.Items.Item[j].Cells[i].UseOwnStyle := True;&lt;br /&gt;
      if (i = ElXTree1.SortSection) and&lt;br /&gt;
       (ElXTree1.HeaderSections.Sections[ElXTree1.SortSection].SortMode &amp;lt;&amp;gt; hsmNone)&lt;br /&gt;
      then&lt;br /&gt;
      begin&lt;br /&gt;
        ElXTree1.Items.Item[j].Cells[i].Style.CellBackGroundColor := clMoneyGreen;&lt;br /&gt;
        ElXTree1.Items.Item[j].Cells[i].Style.ParentColors := false;&lt;br /&gt;
        ElXTree1.Items.Item[j].Cells[i].Style.UseBackGroundColor := true;&lt;br /&gt;
      end&lt;br /&gt;
      else&lt;br /&gt;
      begin&lt;br /&gt;
        ElXTree1.Items.Item[j].Cells[i].Style.CellBackGroundColor := clWhite;&lt;br /&gt;
        ElXTree1.Items.Item[j].Cells[i].Style.ParentColors := false;&lt;br /&gt;
        ElXTree1.Items.Item[j].Cells[i].Style.UseBackGroundColor := true;&lt;br /&gt;
      end;&lt;br /&gt;
    end;&lt;br /&gt;
  end;&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:2) you may use the cascading property of style to reach the same effect:&amp;lt;br&amp;gt;&lt;br /&gt;
ex:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
procedure TForm1.FormCreate(Sender: TObject);&lt;br /&gt;
var&lt;br /&gt;
  i, j: integer;&lt;br /&gt;
begin&lt;br /&gt;
// create test tree with 5 items. set custom colors in cells but not activate it&lt;br /&gt;
  for j := 0 to 5 do&lt;br /&gt;
  begin&lt;br /&gt;
    ElXTree1.Items.AddChild(nil,'Item'+Inttostr(j));&lt;br /&gt;
    ElXTree1.Items.Item[j].Cells[1].Text := Inttostr(j);&lt;br /&gt;
    for i := 0 to ElXTree1.HeaderSections.Count - 1 do&lt;br /&gt;
    begin&lt;br /&gt;
      ElXTree1.Items.Item[j].Cells[i].UseOwnStyle := True;&lt;br /&gt;
      ElXTree1.Items.Item[j].Cells[i].Style.CellBackGroundColor := clMoneyGreen;&lt;br /&gt;
      ElXTree1.Items.Item[j].Cells[i].Style.ParentColors := true;&lt;br /&gt;
    end;&lt;br /&gt;
  end;&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
procedure TForm1.ElXTree1SortEnd(Sender: TObject);&lt;br /&gt;
var&lt;br /&gt;
  i, j: integer;&lt;br /&gt;
begin&lt;br /&gt;
// in this procedure we activate using own colors for cells in sorted section&lt;br /&gt;
  for j := 0 to ElXTree1.Items.Count - 1 do&lt;br /&gt;
  begin&lt;br /&gt;
    for i := 0 to ElXTree1.HeaderSections.Count - 1 do&lt;br /&gt;
    begin&lt;br /&gt;
      if (i = ElXTree1.SortSection) and&lt;br /&gt;
       (ElXTree1.HeaderSections.Sections[ElXTree1.SortSection].SortMode &amp;lt;&amp;gt; hsmNone) &lt;br /&gt;
      then&lt;br /&gt;
        ElXTree1.Items.Item[j].Cells[i].Style.ParentColors := false&lt;br /&gt;
      else&lt;br /&gt;
        ElXTree1.Items.Item[j].Cells[i].Style.ParentColors := true;&lt;br /&gt;
    end;&lt;br /&gt;
  end;&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:3) if the tree contains a lot of items more optimized to set colors in OnItemPreDraw event:&amp;lt;br&amp;gt;&lt;br /&gt;
ex:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
procedure TForm1.ElXTree1ItemPreDraw(Sender: TObject; Item: TElXTreeItem);&lt;br /&gt;
var&lt;br /&gt;
  i: integer;&lt;br /&gt;
begin&lt;br /&gt;
  for i := 0 to ElXTree1.HeaderSections.Count - 1 do&lt;br /&gt;
  begin&lt;br /&gt;
    Item.Cells[i].UseOwnStyle := True;&lt;br /&gt;
    if (i = ElXTree1.SortSection) and&lt;br /&gt;
       (ElXTree1.HeaderSections.Sections[ElXTree1.SortSection].SortMode &amp;lt;&amp;gt; hsmNone)&lt;br /&gt;
    then&lt;br /&gt;
    begin&lt;br /&gt;
      Item.Cells[i].Style.CellBackGroundColor := clMoneyGreen;&lt;br /&gt;
      Item.Cells[i].Style.ParentColors := false;&lt;br /&gt;
      Item.Cells[i].Style.UseBackGroundColor := true;&lt;br /&gt;
    end&lt;br /&gt;
    else&lt;br /&gt;
    begin&lt;br /&gt;
      Item.Cells[i].Style.CellBackGroundColor := clWhite;&lt;br /&gt;
      Item.Cells[i].Style.ParentColors := false;&lt;br /&gt;
      Item.Cells[i].Style.UseBackGroundColor := true;&lt;br /&gt;
    end;&lt;br /&gt;
  end;&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
: 3a) ... or use virtual mode of tree &amp;lt;br&amp;gt;&lt;br /&gt;
[ Please look examle of virtual tree in our demo]&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>	</entry>

	<entry>
		<id>https://wiki.lmd.de/index.php?title=LMD_VCL_-_LMD_ElPack_FAQ&amp;diff=1563</id>
		<title>LMD VCL - LMD ElPack FAQ</title>
		<link rel="alternate" type="text/html" href="https://wiki.lmd.de/index.php?title=LMD_VCL_-_LMD_ElPack_FAQ&amp;diff=1563"/>
				<updated>2007-04-10T15:35:52Z</updated>
		
		<summary type="html">&lt;p&gt;Wikiadmin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Head-Overview}} [[Category:FAQ]] [[Category:LMD ElPack]] &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== TElInspector ==&lt;br /&gt;
=== How to use custom inplace editors? ===&lt;br /&gt;
Inspector uses own collection of inplace editors. You can examine them in&lt;br /&gt;
ElInspectorEditors.pas  We'll define simple descendant of the button edit&lt;br /&gt;
and will use it for editing of boolean values.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
type&lt;br /&gt;
&lt;br /&gt;
  TForm1 = class(TForm)&lt;br /&gt;
&lt;br /&gt;
    ElInspector1: TElInspector;&lt;br /&gt;
    ElInspectorRTTIDataSource1: TElInspectorRTTIDataSource;&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
  end;&lt;br /&gt;
&lt;br /&gt;
  TMyElInspectorInplaceButtonEdit = class(TElInspectorInplaceButtonEdit)&lt;br /&gt;
  protected&lt;br /&gt;
    procedure BtnClick(Sender: TObject); override;&lt;br /&gt;
  end;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
implementation&lt;br /&gt;
&lt;br /&gt;
{ TMyElInspectorInplaceButtonEdit }&lt;br /&gt;
&lt;br /&gt;
procedure TMyElInspectorInplaceButtonEdit.BtnClick(Sender: TObject);&lt;br /&gt;
begin&lt;br /&gt;
  if MessageDlg('Yes = True, No = False', mtConfirmation, [mbYes,mbNo], 0) = mrYes then&lt;br /&gt;
  begin&lt;br /&gt;
    TElInspectorItem(Item).InspectorData.AsString := 'True';&lt;br /&gt;
    Editor.Text := 'True';&lt;br /&gt;
  end&lt;br /&gt;
  else&lt;br /&gt;
  begin&lt;br /&gt;
    TElInspectorItem(Item).InspectorData.AsString := 'False';&lt;br /&gt;
    Editor.Text := 'False';&lt;br /&gt;
  end;&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
procedure TForm1.FormCreate(Sender: TObject);&lt;br /&gt;
var&lt;br /&gt;
  i: integer;&lt;br /&gt;
  LT: TElInspectorRegister;&lt;br /&gt;
begin&lt;br /&gt;
// we must to find current editor for boolean values in inspector's editors list&lt;br /&gt;
  for i := 1 to ElInspectorRTTIDataSource1.RegisterList.Count - 1 do&lt;br /&gt;
  begin&lt;br /&gt;
    LT := TElInspectorRegister(ElInspectorRTTIDataSource1.RegisterList.Items[i]);&lt;br /&gt;
    if (LT is TElInspectorTypeInfo) and (TElInspectorTypeInfo(LT).TypeInfo = TypeInfo(Boolean)) then&lt;br /&gt;
    begin &lt;br /&gt;
    // remove current boolean editor&lt;br /&gt;
      ElInspectorRTTIDataSource1.RegisterList.Remove( ElInspectorRTTIDataSource1.RegisterList.Items[i] );&lt;br /&gt;
    // register our editor&lt;br /&gt;
      ElInspectorRTTIDataSource1.RegisterList.Insert(i, TElInspectorTypeInfo.Create(TMyElInspectorInplaceButtonEdit, TElBooleanProperty, TypeInfo(Boolean)));&lt;br /&gt;
      Break;&lt;br /&gt;
    end;&lt;br /&gt;
  end;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== TStyleManager ==&lt;br /&gt;
=== How to use StyleName? ===&lt;br /&gt;
&lt;br /&gt;
Style Manager operates with hierarchical style sheets. These style sheets are similar to Cascading Style Sheets (CSS), used in web pages, but they are more effective and easy to use. Each style sheet contains several styles. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Each style contains one or more property values. When the style is applied to the component, the component is checked for presence of the property with given name. If the property is present, it is set to the value, specified in the style. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Style can be one of three types: &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:1) Default&lt;br /&gt;
:2) Class&lt;br /&gt;
:3) Specific&lt;br /&gt;
&lt;br /&gt;
There is one default style per style sheet. It is an ancestor for all other styles. Specific styles are applied when they are explicitly referred to by the component (in it's StyleName property).&amp;lt;br&amp;gt;&lt;br /&gt;
Name of Specific style should begin by point (ex. '.CustomStyle') for prevention of crossing with names of classes.&amp;lt;br&amp;gt; &lt;br /&gt;
Class styles are applied when there is no specific style name specified for the component. In this case the style with the name equal to component's class is searched for and applied. For example, if the component TElEdit refers to style manager, but there is no style name specified, Style Manager tries to find the style named 'TElEdit'. If it finds, this style is applied. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== HTML controls ==&lt;br /&gt;
=== Could you tell me how to get the HTML text on an HTML Label (View, TElXTreeCell etc.) to center? ===&lt;br /&gt;
You may use &amp;lt;pre&amp;gt;'&amp;lt;p align=&amp;quot;Center&amp;quot;&amp;gt;&amp;lt;/p&amp;gt;'&amp;lt;/pre&amp;gt; tag to set desired text alignment.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== El(X)Tree ==&lt;br /&gt;
=== How to draw part of item's text to pass over the several columns? ===&lt;br /&gt;
&lt;br /&gt;
You can use OnItemPostDraw event to redraw part of item. For example I can&lt;br /&gt;
redraw item text over first two columns:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
uses elstrutils;&lt;br /&gt;
&lt;br /&gt;
procedure TForm1.ElTree1ItemPostDraw(Sender: TObject; Canvas: TCanvas;&lt;br /&gt;
  Item: TElTreeItem; ItemRect: TRect; var DrawFocusRect: Boolean);&lt;br /&gt;
var&lt;br /&gt;
  R: TRect;&lt;br /&gt;
  s: TElFString;&lt;br /&gt;
  i: integer;&lt;br /&gt;
begin&lt;br /&gt;
  R := ItemRect;&lt;br /&gt;
  R.Right := ElTree1.HeaderSections[0].Width + ElTree1.HeaderSections[1].Width - 1;&lt;br /&gt;
  R.Top := R.Top + Item.Height div 2; // dirty calculation. use HTMLRender to render text if you need exact result&lt;br /&gt;
  // this is main column so we need to take into account space for lines and buttons&lt;br /&gt;
  R.Left := R.Left + Item.IndentAdjust;&lt;br /&gt;
  if (ElTree1.ShowRoot and ElTree1.ShowLines) or (ElTree1.ShowButtons and ElTree1.ShowRootButtons) then&lt;br /&gt;
    Inc(R.Left, ElTree1.ItemIndent)&lt;br /&gt;
  else&lt;br /&gt;
    Inc(R.Left, ElTree1.ItemIndent div 5);&lt;br /&gt;
  // offset rect if we use images&lt;br /&gt;
  R.Left := R.Left + 20 ; // paste here image width + 4 instead of 20&lt;br /&gt;
  Canvas.Brush.Style := bsSolid;&lt;br /&gt;
  Canvas.Brush.Color := clWhite; // set item's color if need&lt;br /&gt;
  // my Item.Text = '&amp;lt;html&amp;gt;&amp;lt;b&amp;gt;Some text 1&amp;lt;/b&amp;gt; &amp;lt;p&amp;gt;'+#13#10+'Some very very very very very very long text 2&amp;lt;/html&amp;gt;'&lt;br /&gt;
  i := Pos(#10, Item.Text);&lt;br /&gt;
  s := '';&lt;br /&gt;
  if i &amp;gt; 0 then&lt;br /&gt;
    s := Copy(Item.Text, i + 1, length(Item.Text) - i - 8); // 8 to ignore '&amp;lt;/html&amp;gt;'&lt;br /&gt;
  DrawTextW(Canvas.Handle, PWideChar(s), length(s), R, DT_NOPREFIX and DT_Left);&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ElDB(X)Tree  ==&lt;br /&gt;
=== How could I display images in an Item if I've stored image's indexes in a database field? ===&lt;br /&gt;
:1. Set TElDBXTree.ShowImages = True &amp;lt;br&amp;gt;&lt;br /&gt;
:2. Assign list of images (TImageList, TElImageList etc) to TElDBXTree.Images (and TElDBXTree.Images2 if you need it) properties &amp;lt;br&amp;gt;&lt;br /&gt;
:3. Open TElDBXTree.StylesDefs property in Object Inspector and choice &amp;quot;Table field&amp;quot; radiobutton in &amp;quot;Item images&amp;quot; radiogroup. It enforce setting Item.ImagesFromBase property to True for items. &amp;lt;br&amp;gt;&lt;br /&gt;
:4. Set data fields, where values for 1st (and 2st) image indexes was stored (look at Normal and State combos). &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hereon you should see images on the left side of the item's text. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How to make the sorted column drawn with an special background color ===&lt;br /&gt;
There are several ways to reach it. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:1) you may use OnSortEnd event to set custom style to each cell&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ex:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
procedure TForm1.ElXTree1SortEnd(Sender: TObject);&lt;br /&gt;
var&lt;br /&gt;
  i, j: integer;&lt;br /&gt;
begin&lt;br /&gt;
  for j := 0 to ElXTree1.Items.Count - 1 do&lt;br /&gt;
  begin&lt;br /&gt;
    for i := 0 to ElXTree1.HeaderSections.Count - 1 do&lt;br /&gt;
    begin&lt;br /&gt;
      ElXTree1.Items.Item[j].Cells[i].UseOwnStyle := True;&lt;br /&gt;
      if (i = ElXTree1.SortSection) and&lt;br /&gt;
       (ElXTree1.HeaderSections.Sections[ElXTree1.SortSection].SortMode &amp;lt;&amp;gt; hsmNone)&lt;br /&gt;
      then&lt;br /&gt;
      begin&lt;br /&gt;
        ElXTree1.Items.Item[j].Cells[i].Style.CellBackGroundColor := clMoneyGreen;&lt;br /&gt;
        ElXTree1.Items.Item[j].Cells[i].Style.ParentColors := false;&lt;br /&gt;
        ElXTree1.Items.Item[j].Cells[i].Style.UseBackGroundColor := true;&lt;br /&gt;
      end&lt;br /&gt;
      else&lt;br /&gt;
      begin&lt;br /&gt;
        ElXTree1.Items.Item[j].Cells[i].Style.CellBackGroundColor := clWhite;&lt;br /&gt;
        ElXTree1.Items.Item[j].Cells[i].Style.ParentColors := false;&lt;br /&gt;
        ElXTree1.Items.Item[j].Cells[i].Style.UseBackGroundColor := true;&lt;br /&gt;
      end;&lt;br /&gt;
    end;&lt;br /&gt;
  end;&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:2) you may use the cascading property of style to reach the same effect:&amp;lt;br&amp;gt;&lt;br /&gt;
ex:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
procedure TForm1.FormCreate(Sender: TObject);&lt;br /&gt;
var&lt;br /&gt;
  i, j: integer;&lt;br /&gt;
begin&lt;br /&gt;
// create test tree with 5 items. set custom colors in cells but not activate it&lt;br /&gt;
  for j := 0 to 5 do&lt;br /&gt;
  begin&lt;br /&gt;
    ElXTree1.Items.AddChild(nil,'Item'+Inttostr(j));&lt;br /&gt;
    ElXTree1.Items.Item[j].Cells[1].Text := Inttostr(j);&lt;br /&gt;
    for i := 0 to ElXTree1.HeaderSections.Count - 1 do&lt;br /&gt;
    begin&lt;br /&gt;
      ElXTree1.Items.Item[j].Cells[i].UseOwnStyle := True;&lt;br /&gt;
      ElXTree1.Items.Item[j].Cells[i].Style.CellBackGroundColor := clMoneyGreen;&lt;br /&gt;
      ElXTree1.Items.Item[j].Cells[i].Style.ParentColors := true;&lt;br /&gt;
    end;&lt;br /&gt;
  end;&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
procedure TForm1.ElXTree1SortEnd(Sender: TObject);&lt;br /&gt;
var&lt;br /&gt;
  i, j: integer;&lt;br /&gt;
begin&lt;br /&gt;
// in this procedure we activate using own colors for cells in sorted section&lt;br /&gt;
  for j := 0 to ElXTree1.Items.Count - 1 do&lt;br /&gt;
  begin&lt;br /&gt;
    for i := 0 to ElXTree1.HeaderSections.Count - 1 do&lt;br /&gt;
    begin&lt;br /&gt;
      if (i = ElXTree1.SortSection) and&lt;br /&gt;
       (ElXTree1.HeaderSections.Sections[ElXTree1.SortSection].SortMode &amp;lt;&amp;gt; hsmNone) &lt;br /&gt;
      then&lt;br /&gt;
        ElXTree1.Items.Item[j].Cells[i].Style.ParentColors := false&lt;br /&gt;
      else&lt;br /&gt;
        ElXTree1.Items.Item[j].Cells[i].Style.ParentColors := true;&lt;br /&gt;
    end;&lt;br /&gt;
  end;&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:3) if the tree contains a lot of items more optimized to set colors in OnItemPreDraw event:&amp;lt;br&amp;gt;&lt;br /&gt;
ex:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
procedure TForm1.ElXTree1ItemPreDraw(Sender: TObject; Item: TElXTreeItem);&lt;br /&gt;
var&lt;br /&gt;
  i: integer;&lt;br /&gt;
begin&lt;br /&gt;
  for i := 0 to ElXTree1.HeaderSections.Count - 1 do&lt;br /&gt;
  begin&lt;br /&gt;
    Item.Cells[i].UseOwnStyle := True;&lt;br /&gt;
    if (i = ElXTree1.SortSection) and&lt;br /&gt;
       (ElXTree1.HeaderSections.Sections[ElXTree1.SortSection].SortMode &amp;lt;&amp;gt; hsmNone)&lt;br /&gt;
    then&lt;br /&gt;
    begin&lt;br /&gt;
      Item.Cells[i].Style.CellBackGroundColor := clMoneyGreen;&lt;br /&gt;
      Item.Cells[i].Style.ParentColors := false;&lt;br /&gt;
      Item.Cells[i].Style.UseBackGroundColor := true;&lt;br /&gt;
    end&lt;br /&gt;
    else&lt;br /&gt;
    begin&lt;br /&gt;
      Item.Cells[i].Style.CellBackGroundColor := clWhite;&lt;br /&gt;
      Item.Cells[i].Style.ParentColors := false;&lt;br /&gt;
      Item.Cells[i].Style.UseBackGroundColor := true;&lt;br /&gt;
    end;&lt;br /&gt;
  end;&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
: 3a) ... or use virtual mode of tree &amp;lt;br&amp;gt;&lt;br /&gt;
[ Please look examle of virtual tree in our demo]&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>	</entry>

	<entry>
		<id>https://wiki.lmd.de/index.php?title=LMD_VCL_-_LMD_ElPack_FAQ&amp;diff=1562</id>
		<title>LMD VCL - LMD ElPack FAQ</title>
		<link rel="alternate" type="text/html" href="https://wiki.lmd.de/index.php?title=LMD_VCL_-_LMD_ElPack_FAQ&amp;diff=1562"/>
				<updated>2007-04-10T15:33:18Z</updated>
		
		<summary type="html">&lt;p&gt;Wikiadmin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Head-Overview}} [[Category:FAQ]] [[Category:LMD ElPack]] &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== TElInspector ==&lt;br /&gt;
=== How to use custom inplace editors? ===&lt;br /&gt;
Inspector uses own collection of inplace editors. You can examine them in&lt;br /&gt;
ElInspectorEditors.pas  We'll define simple descendant of the button edit&lt;br /&gt;
and will use it for editing of boolean values.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
type&lt;br /&gt;
&lt;br /&gt;
  TForm1 = class(TForm)&lt;br /&gt;
&lt;br /&gt;
    ElInspector1: TElInspector;&lt;br /&gt;
    ElInspectorRTTIDataSource1: TElInspectorRTTIDataSource;&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
  end;&lt;br /&gt;
&lt;br /&gt;
  TMyElInspectorInplaceButtonEdit = class(TElInspectorInplaceButtonEdit)&lt;br /&gt;
  protected&lt;br /&gt;
    procedure BtnClick(Sender: TObject); override;&lt;br /&gt;
  end;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
implementation&lt;br /&gt;
&lt;br /&gt;
{ TMyElInspectorInplaceButtonEdit }&lt;br /&gt;
&lt;br /&gt;
procedure TMyElInspectorInplaceButtonEdit.BtnClick(Sender: TObject);&lt;br /&gt;
begin&lt;br /&gt;
  if MessageDlg('Yes = True, No = False', mtConfirmation, [mbYes,mbNo], 0) = mrYes then&lt;br /&gt;
  begin&lt;br /&gt;
    TElInspectorItem(Item).InspectorData.AsString := 'True';&lt;br /&gt;
    Editor.Text := 'True';&lt;br /&gt;
  end&lt;br /&gt;
  else&lt;br /&gt;
  begin&lt;br /&gt;
    TElInspectorItem(Item).InspectorData.AsString := 'False';&lt;br /&gt;
    Editor.Text := 'False';&lt;br /&gt;
  end;&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
procedure TForm1.FormCreate(Sender: TObject);&lt;br /&gt;
var&lt;br /&gt;
  i: integer;&lt;br /&gt;
  LT: TElInspectorRegister;&lt;br /&gt;
begin&lt;br /&gt;
// we must to find current editor for boolean values in inspector's editors list&lt;br /&gt;
  for i := 1 to ElInspectorRTTIDataSource1.RegisterList.Count - 1 do&lt;br /&gt;
  begin&lt;br /&gt;
    LT := TElInspectorRegister(ElInspectorRTTIDataSource1.RegisterList.Items[i]);&lt;br /&gt;
    if (LT is TElInspectorTypeInfo) and (TElInspectorTypeInfo(LT).TypeInfo = TypeInfo(Boolean)) then&lt;br /&gt;
    begin &lt;br /&gt;
    // remove current boolean editor&lt;br /&gt;
      ElInspectorRTTIDataSource1.RegisterList.Remove( ElInspectorRTTIDataSource1.RegisterList.Items[i] );&lt;br /&gt;
    // register our editor&lt;br /&gt;
      ElInspectorRTTIDataSource1.RegisterList.Insert(i, TElInspectorTypeInfo.Create(TMyElInspectorInplaceButtonEdit, TElBooleanProperty, TypeInfo(Boolean)));&lt;br /&gt;
      Break;&lt;br /&gt;
    end;&lt;br /&gt;
  end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== TStyleManager ==&lt;br /&gt;
=== How to use StyleName? ===&lt;br /&gt;
&lt;br /&gt;
Style Manager operates with hierarchical style sheets. These style sheets are similar to Cascading Style Sheets (CSS), used in web pages, but they are more effective and easy to use. Each style sheet contains several styles. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Each style contains one or more property values. When the style is applied to the component, the component is checked for presence of the property with given name. If the property is present, it is set to the value, specified in the style. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Style can be one of three types: &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:1) Default&lt;br /&gt;
:2) Class&lt;br /&gt;
:3) Specific&lt;br /&gt;
&lt;br /&gt;
There is one default style per style sheet. It is an ancestor for all other styles. Specific styles are applied when they are explicitly referred to by the component (in it's StyleName property).&amp;lt;br&amp;gt;&lt;br /&gt;
Name of Specific style should begin by point (ex. '.CustomStyle') for prevention of crossing with names of classes.&amp;lt;br&amp;gt; &lt;br /&gt;
Class styles are applied when there is no specific style name specified for the component. In this case the style with the name equal to component's class is searched for and applied. For example, if the component TElEdit refers to style manager, but there is no style name specified, Style Manager tries to find the style named 'TElEdit'. If it finds, this style is applied. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== HTML controls ==&lt;br /&gt;
=== Could you tell me how to get the HTML text on an HTML Label (View, TElXTreeCell etc.) to center? ===&lt;br /&gt;
You may use &amp;lt;pre&amp;gt;'&amp;lt;p align=&amp;quot;Center&amp;quot;&amp;gt;&amp;lt;/p&amp;gt;'&amp;lt;/pre&amp;gt; tag to set desired text alignment.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== El(X)Tree ==&lt;br /&gt;
=== How to draw part of item's text to pass over the several columns? ===&lt;br /&gt;
&lt;br /&gt;
You can use OnItemPostDraw event to redraw part of item. For example I can&lt;br /&gt;
redraw item text over first two columns:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
uses elstrutils;&lt;br /&gt;
&lt;br /&gt;
procedure TForm1.ElTree1ItemPostDraw(Sender: TObject; Canvas: TCanvas;&lt;br /&gt;
  Item: TElTreeItem; ItemRect: TRect; var DrawFocusRect: Boolean);&lt;br /&gt;
var&lt;br /&gt;
  R: TRect;&lt;br /&gt;
  s: TElFString;&lt;br /&gt;
  i: integer;&lt;br /&gt;
begin&lt;br /&gt;
  R := ItemRect;&lt;br /&gt;
  R.Right := ElTree1.HeaderSections[0].Width + ElTree1.HeaderSections[1].Width - 1;&lt;br /&gt;
  R.Top := R.Top + Item.Height div 2; // dirty calculation. use HTMLRender to render text if you need exact result&lt;br /&gt;
  // this is main column so we need to take into account space for lines and buttons&lt;br /&gt;
  R.Left := R.Left + Item.IndentAdjust;&lt;br /&gt;
  if (ElTree1.ShowRoot and ElTree1.ShowLines) or (ElTree1.ShowButtons and ElTree1.ShowRootButtons) then&lt;br /&gt;
    Inc(R.Left, ElTree1.ItemIndent)&lt;br /&gt;
  else&lt;br /&gt;
    Inc(R.Left, ElTree1.ItemIndent div 5);&lt;br /&gt;
  // offset rect if we use images&lt;br /&gt;
  R.Left := R.Left + 20 ; // paste here image width + 4 instead of 20&lt;br /&gt;
  Canvas.Brush.Style := bsSolid;&lt;br /&gt;
  Canvas.Brush.Color := clWhite; // set item's color if need&lt;br /&gt;
  // my Item.Text = '&amp;lt;html&amp;gt;&amp;lt;b&amp;gt;Some text 1&amp;lt;/b&amp;gt; &amp;lt;p&amp;gt;'+#13#10+'Some very very very very very very long text 2&amp;lt;/html&amp;gt;'&lt;br /&gt;
  i := Pos(#10, Item.Text);&lt;br /&gt;
  s := '';&lt;br /&gt;
  if i &amp;gt; 0 then&lt;br /&gt;
    s := Copy(Item.Text, i + 1, length(Item.Text) - i - 8); // 8 to ignore '&amp;lt;/html&amp;gt;'&lt;br /&gt;
  DrawTextW(Canvas.Handle, PWideChar(s), length(s), R, DT_NOPREFIX and DT_Left);&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ElDB(X)Tree  ==&lt;br /&gt;
=== How could I display images in an Item if I've stored image's indexes in a database field? ===&lt;br /&gt;
:1. Set TElDBXTree.ShowImages = True &amp;lt;br&amp;gt;&lt;br /&gt;
:2. Assign list of images (TImageList, TElImageList etc) to TElDBXTree.Images (and TElDBXTree.Images2 if you need it) properties &amp;lt;br&amp;gt;&lt;br /&gt;
:3. Open TElDBXTree.StylesDefs property in Object Inspector and choice &amp;quot;Table field&amp;quot; radiobutton in &amp;quot;Item images&amp;quot; radiogroup. It enforce setting Item.ImagesFromBase property to True for items. &amp;lt;br&amp;gt;&lt;br /&gt;
:4. Set data fields, where values for 1st (and 2st) image indexes was stored (look at Normal and State combos). &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hereon you should see images on the left side of the item's text. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How to make the sorted column drawn with an special background color ===&lt;br /&gt;
There are several ways to reach it. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:1) you may use OnSortEnd event to set custom style to each cell&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ex:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
procedure TForm1.ElXTree1SortEnd(Sender: TObject);&lt;br /&gt;
var&lt;br /&gt;
  i, j: integer;&lt;br /&gt;
begin&lt;br /&gt;
  for j := 0 to ElXTree1.Items.Count - 1 do&lt;br /&gt;
  begin&lt;br /&gt;
    for i := 0 to ElXTree1.HeaderSections.Count - 1 do&lt;br /&gt;
    begin&lt;br /&gt;
      ElXTree1.Items.Item[j].Cells[i].UseOwnStyle := True;&lt;br /&gt;
      if (i = ElXTree1.SortSection) and&lt;br /&gt;
       (ElXTree1.HeaderSections.Sections[ElXTree1.SortSection].SortMode &amp;lt;&amp;gt; hsmNone)&lt;br /&gt;
      then&lt;br /&gt;
      begin&lt;br /&gt;
        ElXTree1.Items.Item[j].Cells[i].Style.CellBackGroundColor := clMoneyGreen;&lt;br /&gt;
        ElXTree1.Items.Item[j].Cells[i].Style.ParentColors := false;&lt;br /&gt;
        ElXTree1.Items.Item[j].Cells[i].Style.UseBackGroundColor := true;&lt;br /&gt;
      end&lt;br /&gt;
      else&lt;br /&gt;
      begin&lt;br /&gt;
        ElXTree1.Items.Item[j].Cells[i].Style.CellBackGroundColor := clWhite;&lt;br /&gt;
        ElXTree1.Items.Item[j].Cells[i].Style.ParentColors := false;&lt;br /&gt;
        ElXTree1.Items.Item[j].Cells[i].Style.UseBackGroundColor := true;&lt;br /&gt;
      end;&lt;br /&gt;
    end;&lt;br /&gt;
  end;&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:2) you may use the cascading property of style to reach the same effect:&amp;lt;br&amp;gt;&lt;br /&gt;
ex:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
procedure TForm1.FormCreate(Sender: TObject);&lt;br /&gt;
var&lt;br /&gt;
  i, j: integer;&lt;br /&gt;
begin&lt;br /&gt;
// create test tree with 5 items. set custom colors in cells but not activate it&lt;br /&gt;
  for j := 0 to 5 do&lt;br /&gt;
  begin&lt;br /&gt;
    ElXTree1.Items.AddChild(nil,'Item'+Inttostr(j));&lt;br /&gt;
    ElXTree1.Items.Item[j].Cells[1].Text := Inttostr(j);&lt;br /&gt;
    for i := 0 to ElXTree1.HeaderSections.Count - 1 do&lt;br /&gt;
    begin&lt;br /&gt;
      ElXTree1.Items.Item[j].Cells[i].UseOwnStyle := True;&lt;br /&gt;
      ElXTree1.Items.Item[j].Cells[i].Style.CellBackGroundColor := clMoneyGreen;&lt;br /&gt;
      ElXTree1.Items.Item[j].Cells[i].Style.ParentColors := true;&lt;br /&gt;
    end;&lt;br /&gt;
  end;&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
procedure TForm1.ElXTree1SortEnd(Sender: TObject);&lt;br /&gt;
var&lt;br /&gt;
  i, j: integer;&lt;br /&gt;
begin&lt;br /&gt;
// in this procedure we activate using own colors for cells in sorted section&lt;br /&gt;
  for j := 0 to ElXTree1.Items.Count - 1 do&lt;br /&gt;
  begin&lt;br /&gt;
    for i := 0 to ElXTree1.HeaderSections.Count - 1 do&lt;br /&gt;
    begin&lt;br /&gt;
      if (i = ElXTree1.SortSection) and&lt;br /&gt;
       (ElXTree1.HeaderSections.Sections[ElXTree1.SortSection].SortMode &amp;lt;&amp;gt; hsmNone) &lt;br /&gt;
      then&lt;br /&gt;
        ElXTree1.Items.Item[j].Cells[i].Style.ParentColors := false&lt;br /&gt;
      else&lt;br /&gt;
        ElXTree1.Items.Item[j].Cells[i].Style.ParentColors := true;&lt;br /&gt;
    end;&lt;br /&gt;
  end;&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:3) if the tree contains a lot of items more optimized to set colors in OnItemPreDraw event:&amp;lt;br&amp;gt;&lt;br /&gt;
ex:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
procedure TForm1.ElXTree1ItemPreDraw(Sender: TObject; Item: TElXTreeItem);&lt;br /&gt;
var&lt;br /&gt;
  i: integer;&lt;br /&gt;
begin&lt;br /&gt;
  for i := 0 to ElXTree1.HeaderSections.Count - 1 do&lt;br /&gt;
  begin&lt;br /&gt;
    Item.Cells[i].UseOwnStyle := True;&lt;br /&gt;
    if (i = ElXTree1.SortSection) and&lt;br /&gt;
       (ElXTree1.HeaderSections.Sections[ElXTree1.SortSection].SortMode &amp;lt;&amp;gt; hsmNone)&lt;br /&gt;
    then&lt;br /&gt;
    begin&lt;br /&gt;
      Item.Cells[i].Style.CellBackGroundColor := clMoneyGreen;&lt;br /&gt;
      Item.Cells[i].Style.ParentColors := false;&lt;br /&gt;
      Item.Cells[i].Style.UseBackGroundColor := true;&lt;br /&gt;
    end&lt;br /&gt;
    else&lt;br /&gt;
    begin&lt;br /&gt;
      Item.Cells[i].Style.CellBackGroundColor := clWhite;&lt;br /&gt;
      Item.Cells[i].Style.ParentColors := false;&lt;br /&gt;
      Item.Cells[i].Style.UseBackGroundColor := true;&lt;br /&gt;
    end;&lt;br /&gt;
  end;&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
: 3a) ... or use virtual mode of tree &amp;lt;br&amp;gt;&lt;br /&gt;
[ Please look examle of virtual tree in our demo]&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>	</entry>

	<entry>
		<id>https://wiki.lmd.de/index.php?title=LMD_VCL_-_LMD_ElPack_FAQ&amp;diff=1561</id>
		<title>LMD VCL - LMD ElPack FAQ</title>
		<link rel="alternate" type="text/html" href="https://wiki.lmd.de/index.php?title=LMD_VCL_-_LMD_ElPack_FAQ&amp;diff=1561"/>
				<updated>2007-04-10T15:32:43Z</updated>
		
		<summary type="html">&lt;p&gt;Wikiadmin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Head-Overview}} [[Category:FAQ]] [[Category:LMD ElPack]] &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== TElInspector ==&lt;br /&gt;
=== How to use custom inplace editors? ===&lt;br /&gt;
Inspector uses own collection of inplace editors. You can examine them in&lt;br /&gt;
ElInspectorEditors.pas  We'll define simple descendant of the button edit&lt;br /&gt;
and will use it for editing of boolean values.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;pascal&amp;quot;&amp;gt;&lt;br /&gt;
type&lt;br /&gt;
&lt;br /&gt;
  TForm1 = class(TForm)&lt;br /&gt;
&lt;br /&gt;
    ElInspector1: TElInspector;&lt;br /&gt;
    ElInspectorRTTIDataSource1: TElInspectorRTTIDataSource;&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
  end;&lt;br /&gt;
&lt;br /&gt;
  TMyElInspectorInplaceButtonEdit = class(TElInspectorInplaceButtonEdit)&lt;br /&gt;
  protected&lt;br /&gt;
    procedure BtnClick(Sender: TObject); override;&lt;br /&gt;
  end;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
implementation&lt;br /&gt;
&lt;br /&gt;
{ TMyElInspectorInplaceButtonEdit }&lt;br /&gt;
&lt;br /&gt;
procedure TMyElInspectorInplaceButtonEdit.BtnClick(Sender: TObject);&lt;br /&gt;
begin&lt;br /&gt;
  if MessageDlg('Yes = True, No = False', mtConfirmation, [mbYes,mbNo], 0) = mrYes then&lt;br /&gt;
  begin&lt;br /&gt;
    TElInspectorItem(Item).InspectorData.AsString := 'True';&lt;br /&gt;
    Editor.Text := 'True';&lt;br /&gt;
  end&lt;br /&gt;
  else&lt;br /&gt;
  begin&lt;br /&gt;
    TElInspectorItem(Item).InspectorData.AsString := 'False';&lt;br /&gt;
    Editor.Text := 'False';&lt;br /&gt;
  end;&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
procedure TForm1.FormCreate(Sender: TObject);&lt;br /&gt;
var&lt;br /&gt;
  i: integer;&lt;br /&gt;
  LT: TElInspectorRegister;&lt;br /&gt;
begin&lt;br /&gt;
// we must to find current editor for boolean values in inspector's editors list&lt;br /&gt;
  for i := 1 to ElInspectorRTTIDataSource1.RegisterList.Count - 1 do&lt;br /&gt;
  begin&lt;br /&gt;
    LT := TElInspectorRegister(ElInspectorRTTIDataSource1.RegisterList.Items[i]);&lt;br /&gt;
    if (LT is TElInspectorTypeInfo) and (TElInspectorTypeInfo(LT).TypeInfo = TypeInfo(Boolean)) then&lt;br /&gt;
    begin &lt;br /&gt;
    // remove current boolean editor&lt;br /&gt;
      ElInspectorRTTIDataSource1.RegisterList.Remove( ElInspectorRTTIDataSource1.RegisterList.Items[i] );&lt;br /&gt;
    // register our editor&lt;br /&gt;
      ElInspectorRTTIDataSource1.RegisterList.Insert(i, TElInspectorTypeInfo.Create(TMyElInspectorInplaceButtonEdit, TElBooleanProperty, TypeInfo(Boolean)));&lt;br /&gt;
      Break;&lt;br /&gt;
    end;&lt;br /&gt;
  end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== TStyleManager ==&lt;br /&gt;
=== How to use StyleName? ===&lt;br /&gt;
&lt;br /&gt;
Style Manager operates with hierarchical style sheets. These style sheets are similar to Cascading Style Sheets (CSS), used in web pages, but they are more effective and easy to use. Each style sheet contains several styles. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Each style contains one or more property values. When the style is applied to the component, the component is checked for presence of the property with given name. If the property is present, it is set to the value, specified in the style. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Style can be one of three types: &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:1) Default&lt;br /&gt;
:2) Class&lt;br /&gt;
:3) Specific&lt;br /&gt;
&lt;br /&gt;
There is one default style per style sheet. It is an ancestor for all other styles. Specific styles are applied when they are explicitly referred to by the component (in it's StyleName property).&amp;lt;br&amp;gt;&lt;br /&gt;
Name of Specific style should begin by point (ex. '.CustomStyle') for prevention of crossing with names of classes.&amp;lt;br&amp;gt; &lt;br /&gt;
Class styles are applied when there is no specific style name specified for the component. In this case the style with the name equal to component's class is searched for and applied. For example, if the component TElEdit refers to style manager, but there is no style name specified, Style Manager tries to find the style named 'TElEdit'. If it finds, this style is applied. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== HTML controls ==&lt;br /&gt;
=== Could you tell me how to get the HTML text on an HTML Label (View, TElXTreeCell etc.) to center? ===&lt;br /&gt;
You may use &amp;lt;pre&amp;gt;'&amp;lt;p align=&amp;quot;Center&amp;quot;&amp;gt;&amp;lt;/p&amp;gt;'&amp;lt;/pre&amp;gt; tag to set desired text alignment.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== El(X)Tree ==&lt;br /&gt;
=== How to draw part of item's text to pass over the several columns? ===&lt;br /&gt;
&lt;br /&gt;
You can use OnItemPostDraw event to redraw part of item. For example I can&lt;br /&gt;
redraw item text over first two columns:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
uses elstrutils;&lt;br /&gt;
&lt;br /&gt;
procedure TForm1.ElTree1ItemPostDraw(Sender: TObject; Canvas: TCanvas;&lt;br /&gt;
  Item: TElTreeItem; ItemRect: TRect; var DrawFocusRect: Boolean);&lt;br /&gt;
var&lt;br /&gt;
  R: TRect;&lt;br /&gt;
  s: TElFString;&lt;br /&gt;
  i: integer;&lt;br /&gt;
begin&lt;br /&gt;
  R := ItemRect;&lt;br /&gt;
  R.Right := ElTree1.HeaderSections[0].Width + ElTree1.HeaderSections[1].Width - 1;&lt;br /&gt;
  R.Top := R.Top + Item.Height div 2; // dirty calculation. use HTMLRender to render text if you need exact result&lt;br /&gt;
  // this is main column so we need to take into account space for lines and buttons&lt;br /&gt;
  R.Left := R.Left + Item.IndentAdjust;&lt;br /&gt;
  if (ElTree1.ShowRoot and ElTree1.ShowLines) or (ElTree1.ShowButtons and ElTree1.ShowRootButtons) then&lt;br /&gt;
    Inc(R.Left, ElTree1.ItemIndent)&lt;br /&gt;
  else&lt;br /&gt;
    Inc(R.Left, ElTree1.ItemIndent div 5);&lt;br /&gt;
  // offset rect if we use images&lt;br /&gt;
  R.Left := R.Left + 20 ; // paste here image width + 4 instead of 20&lt;br /&gt;
  Canvas.Brush.Style := bsSolid;&lt;br /&gt;
  Canvas.Brush.Color := clWhite; // set item's color if need&lt;br /&gt;
  // my Item.Text = '&amp;lt;html&amp;gt;&amp;lt;b&amp;gt;Some text 1&amp;lt;/b&amp;gt; &amp;lt;p&amp;gt;'+#13#10+'Some very very very very very very long text 2&amp;lt;/html&amp;gt;'&lt;br /&gt;
  i := Pos(#10, Item.Text);&lt;br /&gt;
  s := '';&lt;br /&gt;
  if i &amp;gt; 0 then&lt;br /&gt;
    s := Copy(Item.Text, i + 1, length(Item.Text) - i - 8); // 8 to ignore '&amp;lt;/html&amp;gt;'&lt;br /&gt;
  DrawTextW(Canvas.Handle, PWideChar(s), length(s), R, DT_NOPREFIX and DT_Left);&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ElDB(X)Tree  ==&lt;br /&gt;
=== How could I display images in an Item if I've stored image's indexes in a database field? ===&lt;br /&gt;
:1. Set TElDBXTree.ShowImages = True &amp;lt;br&amp;gt;&lt;br /&gt;
:2. Assign list of images (TImageList, TElImageList etc) to TElDBXTree.Images (and TElDBXTree.Images2 if you need it) properties &amp;lt;br&amp;gt;&lt;br /&gt;
:3. Open TElDBXTree.StylesDefs property in Object Inspector and choice &amp;quot;Table field&amp;quot; radiobutton in &amp;quot;Item images&amp;quot; radiogroup. It enforce setting Item.ImagesFromBase property to True for items. &amp;lt;br&amp;gt;&lt;br /&gt;
:4. Set data fields, where values for 1st (and 2st) image indexes was stored (look at Normal and State combos). &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hereon you should see images on the left side of the item's text. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How to make the sorted column drawn with an special background color ===&lt;br /&gt;
There are several ways to reach it. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:1) you may use OnSortEnd event to set custom style to each cell&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ex:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
procedure TForm1.ElXTree1SortEnd(Sender: TObject);&lt;br /&gt;
var&lt;br /&gt;
  i, j: integer;&lt;br /&gt;
begin&lt;br /&gt;
  for j := 0 to ElXTree1.Items.Count - 1 do&lt;br /&gt;
  begin&lt;br /&gt;
    for i := 0 to ElXTree1.HeaderSections.Count - 1 do&lt;br /&gt;
    begin&lt;br /&gt;
      ElXTree1.Items.Item[j].Cells[i].UseOwnStyle := True;&lt;br /&gt;
      if (i = ElXTree1.SortSection) and&lt;br /&gt;
       (ElXTree1.HeaderSections.Sections[ElXTree1.SortSection].SortMode &amp;lt;&amp;gt; hsmNone)&lt;br /&gt;
      then&lt;br /&gt;
      begin&lt;br /&gt;
        ElXTree1.Items.Item[j].Cells[i].Style.CellBackGroundColor := clMoneyGreen;&lt;br /&gt;
        ElXTree1.Items.Item[j].Cells[i].Style.ParentColors := false;&lt;br /&gt;
        ElXTree1.Items.Item[j].Cells[i].Style.UseBackGroundColor := true;&lt;br /&gt;
      end&lt;br /&gt;
      else&lt;br /&gt;
      begin&lt;br /&gt;
        ElXTree1.Items.Item[j].Cells[i].Style.CellBackGroundColor := clWhite;&lt;br /&gt;
        ElXTree1.Items.Item[j].Cells[i].Style.ParentColors := false;&lt;br /&gt;
        ElXTree1.Items.Item[j].Cells[i].Style.UseBackGroundColor := true;&lt;br /&gt;
      end;&lt;br /&gt;
    end;&lt;br /&gt;
  end;&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:2) you may use the cascading property of style to reach the same effect:&amp;lt;br&amp;gt;&lt;br /&gt;
ex:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
procedure TForm1.FormCreate(Sender: TObject);&lt;br /&gt;
var&lt;br /&gt;
  i, j: integer;&lt;br /&gt;
begin&lt;br /&gt;
// create test tree with 5 items. set custom colors in cells but not activate it&lt;br /&gt;
  for j := 0 to 5 do&lt;br /&gt;
  begin&lt;br /&gt;
    ElXTree1.Items.AddChild(nil,'Item'+Inttostr(j));&lt;br /&gt;
    ElXTree1.Items.Item[j].Cells[1].Text := Inttostr(j);&lt;br /&gt;
    for i := 0 to ElXTree1.HeaderSections.Count - 1 do&lt;br /&gt;
    begin&lt;br /&gt;
      ElXTree1.Items.Item[j].Cells[i].UseOwnStyle := True;&lt;br /&gt;
      ElXTree1.Items.Item[j].Cells[i].Style.CellBackGroundColor := clMoneyGreen;&lt;br /&gt;
      ElXTree1.Items.Item[j].Cells[i].Style.ParentColors := true;&lt;br /&gt;
    end;&lt;br /&gt;
  end;&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
procedure TForm1.ElXTree1SortEnd(Sender: TObject);&lt;br /&gt;
var&lt;br /&gt;
  i, j: integer;&lt;br /&gt;
begin&lt;br /&gt;
// in this procedure we activate using own colors for cells in sorted section&lt;br /&gt;
  for j := 0 to ElXTree1.Items.Count - 1 do&lt;br /&gt;
  begin&lt;br /&gt;
    for i := 0 to ElXTree1.HeaderSections.Count - 1 do&lt;br /&gt;
    begin&lt;br /&gt;
      if (i = ElXTree1.SortSection) and&lt;br /&gt;
       (ElXTree1.HeaderSections.Sections[ElXTree1.SortSection].SortMode &amp;lt;&amp;gt; hsmNone) &lt;br /&gt;
      then&lt;br /&gt;
        ElXTree1.Items.Item[j].Cells[i].Style.ParentColors := false&lt;br /&gt;
      else&lt;br /&gt;
        ElXTree1.Items.Item[j].Cells[i].Style.ParentColors := true;&lt;br /&gt;
    end;&lt;br /&gt;
  end;&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:3) if the tree contains a lot of items more optimized to set colors in OnItemPreDraw event:&amp;lt;br&amp;gt;&lt;br /&gt;
ex:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
procedure TForm1.ElXTree1ItemPreDraw(Sender: TObject; Item: TElXTreeItem);&lt;br /&gt;
var&lt;br /&gt;
  i: integer;&lt;br /&gt;
begin&lt;br /&gt;
  for i := 0 to ElXTree1.HeaderSections.Count - 1 do&lt;br /&gt;
  begin&lt;br /&gt;
    Item.Cells[i].UseOwnStyle := True;&lt;br /&gt;
    if (i = ElXTree1.SortSection) and&lt;br /&gt;
       (ElXTree1.HeaderSections.Sections[ElXTree1.SortSection].SortMode &amp;lt;&amp;gt; hsmNone)&lt;br /&gt;
    then&lt;br /&gt;
    begin&lt;br /&gt;
      Item.Cells[i].Style.CellBackGroundColor := clMoneyGreen;&lt;br /&gt;
      Item.Cells[i].Style.ParentColors := false;&lt;br /&gt;
      Item.Cells[i].Style.UseBackGroundColor := true;&lt;br /&gt;
    end&lt;br /&gt;
    else&lt;br /&gt;
    begin&lt;br /&gt;
      Item.Cells[i].Style.CellBackGroundColor := clWhite;&lt;br /&gt;
      Item.Cells[i].Style.ParentColors := false;&lt;br /&gt;
      Item.Cells[i].Style.UseBackGroundColor := true;&lt;br /&gt;
    end;&lt;br /&gt;
  end;&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
: 3a) ... or use virtual mode of tree &amp;lt;br&amp;gt;&lt;br /&gt;
[ Please look examle of virtual tree in our demo]&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>	</entry>

	<entry>
		<id>https://wiki.lmd.de/index.php?title=LMD_VCL_-_LMD_ElPack_FAQ&amp;diff=1560</id>
		<title>LMD VCL - LMD ElPack FAQ</title>
		<link rel="alternate" type="text/html" href="https://wiki.lmd.de/index.php?title=LMD_VCL_-_LMD_ElPack_FAQ&amp;diff=1560"/>
				<updated>2007-04-10T15:22:09Z</updated>
		
		<summary type="html">&lt;p&gt;Wikiadmin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Head-Overview}} [[Category:FAQ]] [[Category:LMD ElPack]] &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== TElInspector ==&lt;br /&gt;
=== How to use custom inplace editors? ===&lt;br /&gt;
Inspector uses own collection of inplace editors. You can examine them in&lt;br /&gt;
ElInspectorEditors.pas  We'll define simple descendant of the button edit&lt;br /&gt;
and will use it for editing of boolean values.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
type&lt;br /&gt;
&lt;br /&gt;
  TForm1 = class(TForm)&lt;br /&gt;
&lt;br /&gt;
    ElInspector1: TElInspector;&lt;br /&gt;
    ElInspectorRTTIDataSource1: TElInspectorRTTIDataSource;&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
  end;&lt;br /&gt;
&lt;br /&gt;
  TMyElInspectorInplaceButtonEdit = class(TElInspectorInplaceButtonEdit)&lt;br /&gt;
  protected&lt;br /&gt;
    procedure BtnClick(Sender: TObject); override;&lt;br /&gt;
  end;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
implementation&lt;br /&gt;
&lt;br /&gt;
{ TMyElInspectorInplaceButtonEdit }&lt;br /&gt;
&lt;br /&gt;
procedure TMyElInspectorInplaceButtonEdit.BtnClick(Sender: TObject);&lt;br /&gt;
begin&lt;br /&gt;
  if MessageDlg('Yes = True, No = False', mtConfirmation, [mbYes,mbNo], 0) = mrYes then&lt;br /&gt;
  begin&lt;br /&gt;
    TElInspectorItem(Item).InspectorData.AsString := 'True';&lt;br /&gt;
    Editor.Text := 'True';&lt;br /&gt;
  end&lt;br /&gt;
  else&lt;br /&gt;
  begin&lt;br /&gt;
    TElInspectorItem(Item).InspectorData.AsString := 'False';&lt;br /&gt;
    Editor.Text := 'False';&lt;br /&gt;
  end;&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
procedure TForm1.FormCreate(Sender: TObject);&lt;br /&gt;
var&lt;br /&gt;
  i: integer;&lt;br /&gt;
  LT: TElInspectorRegister;&lt;br /&gt;
begin&lt;br /&gt;
// we must to find current editor for boolean values in inspector's editors list&lt;br /&gt;
  for i := 1 to ElInspectorRTTIDataSource1.RegisterList.Count - 1 do&lt;br /&gt;
  begin&lt;br /&gt;
    LT := TElInspectorRegister(ElInspectorRTTIDataSource1.RegisterList.Items[i]);&lt;br /&gt;
    if (LT is TElInspectorTypeInfo) and (TElInspectorTypeInfo(LT).TypeInfo = TypeInfo(Boolean)) then&lt;br /&gt;
    begin &lt;br /&gt;
    // remove current boolean editor&lt;br /&gt;
      ElInspectorRTTIDataSource1.RegisterList.Remove( ElInspectorRTTIDataSource1.RegisterList.Items[i] );&lt;br /&gt;
    // register our editor&lt;br /&gt;
      ElInspectorRTTIDataSource1.RegisterList.Insert(i, TElInspectorTypeInfo.Create(TMyElInspectorInplaceButtonEdit, TElBooleanProperty, TypeInfo(Boolean)));&lt;br /&gt;
      Break;&lt;br /&gt;
    end;&lt;br /&gt;
  end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== TStyleManager ==&lt;br /&gt;
=== How to use StyleName? ===&lt;br /&gt;
&lt;br /&gt;
Style Manager operates with hierarchical style sheets. These style sheets are similar to Cascading Style Sheets (CSS), used in web pages, but they are more effective and easy to use. Each style sheet contains several styles. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Each style contains one or more property values. When the style is applied to the component, the component is checked for presence of the property with given name. If the property is present, it is set to the value, specified in the style. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Style can be one of three types: &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:1) Default&lt;br /&gt;
:2) Class&lt;br /&gt;
:3) Specific&lt;br /&gt;
&lt;br /&gt;
There is one default style per style sheet. It is an ancestor for all other styles. Specific styles are applied when they are explicitly referred to by the component (in it's StyleName property).&amp;lt;br&amp;gt;&lt;br /&gt;
Name of Specific style should begin by point (ex. '.CustomStyle') for prevention of crossing with names of classes.&amp;lt;br&amp;gt; &lt;br /&gt;
Class styles are applied when there is no specific style name specified for the component. In this case the style with the name equal to component's class is searched for and applied. For example, if the component TElEdit refers to style manager, but there is no style name specified, Style Manager tries to find the style named 'TElEdit'. If it finds, this style is applied. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== HTML controls ==&lt;br /&gt;
=== Could you tell me how to get the HTML text on an HTML Label (View, TElXTreeCell etc.) to center? ===&lt;br /&gt;
You may use &amp;lt;pre&amp;gt;'&amp;lt;p align=&amp;quot;Center&amp;quot;&amp;gt;&amp;lt;/p&amp;gt;'&amp;lt;/pre&amp;gt; tag to set desired text alignment.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== El(X)Tree ==&lt;br /&gt;
=== How to draw part of item's text to pass over the several columns? ===&lt;br /&gt;
&lt;br /&gt;
You can use OnItemPostDraw event to redraw part of item. For example I can&lt;br /&gt;
redraw item text over first two columns:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
uses elstrutils;&lt;br /&gt;
&lt;br /&gt;
procedure TForm1.ElTree1ItemPostDraw(Sender: TObject; Canvas: TCanvas;&lt;br /&gt;
  Item: TElTreeItem; ItemRect: TRect; var DrawFocusRect: Boolean);&lt;br /&gt;
var&lt;br /&gt;
  R: TRect;&lt;br /&gt;
  s: TElFString;&lt;br /&gt;
  i: integer;&lt;br /&gt;
begin&lt;br /&gt;
  R := ItemRect;&lt;br /&gt;
  R.Right := ElTree1.HeaderSections[0].Width + ElTree1.HeaderSections[1].Width - 1;&lt;br /&gt;
  R.Top := R.Top + Item.Height div 2; // dirty calculation. use HTMLRender to render text if you need exact result&lt;br /&gt;
  // this is main column so we need to take into account space for lines and buttons&lt;br /&gt;
  R.Left := R.Left + Item.IndentAdjust;&lt;br /&gt;
  if (ElTree1.ShowRoot and ElTree1.ShowLines) or (ElTree1.ShowButtons and ElTree1.ShowRootButtons) then&lt;br /&gt;
    Inc(R.Left, ElTree1.ItemIndent)&lt;br /&gt;
  else&lt;br /&gt;
    Inc(R.Left, ElTree1.ItemIndent div 5);&lt;br /&gt;
  // offset rect if we use images&lt;br /&gt;
  R.Left := R.Left + 20 ; // paste here image width + 4 instead of 20&lt;br /&gt;
  Canvas.Brush.Style := bsSolid;&lt;br /&gt;
  Canvas.Brush.Color := clWhite; // set item's color if need&lt;br /&gt;
  // my Item.Text = '&amp;lt;html&amp;gt;&amp;lt;b&amp;gt;Some text 1&amp;lt;/b&amp;gt; &amp;lt;p&amp;gt;'+#13#10+'Some very very very very very very long text 2&amp;lt;/html&amp;gt;'&lt;br /&gt;
  i := Pos(#10, Item.Text);&lt;br /&gt;
  s := '';&lt;br /&gt;
  if i &amp;gt; 0 then&lt;br /&gt;
    s := Copy(Item.Text, i + 1, length(Item.Text) - i - 8); // 8 to ignore '&amp;lt;/html&amp;gt;'&lt;br /&gt;
  DrawTextW(Canvas.Handle, PWideChar(s), length(s), R, DT_NOPREFIX and DT_Left);&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ElDB(X)Tree  ==&lt;br /&gt;
=== How could I display images in an Item if I've stored image's indexes in a database field? ===&lt;br /&gt;
:1. Set TElDBXTree.ShowImages = True &amp;lt;br&amp;gt;&lt;br /&gt;
:2. Assign list of images (TImageList, TElImageList etc) to TElDBXTree.Images (and TElDBXTree.Images2 if you need it) properties &amp;lt;br&amp;gt;&lt;br /&gt;
:3. Open TElDBXTree.StylesDefs property in Object Inspector and choice &amp;quot;Table field&amp;quot; radiobutton in &amp;quot;Item images&amp;quot; radiogroup. It enforce setting Item.ImagesFromBase property to True for items. &amp;lt;br&amp;gt;&lt;br /&gt;
:4. Set data fields, where values for 1st (and 2st) image indexes was stored (look at Normal and State combos). &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hereon you should see images on the left side of the item's text. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How to make the sorted column drawn with an special background color ===&lt;br /&gt;
There are several ways to reach it. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:1) you may use OnSortEnd event to set custom style to each cell&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ex:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
procedure TForm1.ElXTree1SortEnd(Sender: TObject);&lt;br /&gt;
var&lt;br /&gt;
  i, j: integer;&lt;br /&gt;
begin&lt;br /&gt;
  for j := 0 to ElXTree1.Items.Count - 1 do&lt;br /&gt;
  begin&lt;br /&gt;
    for i := 0 to ElXTree1.HeaderSections.Count - 1 do&lt;br /&gt;
    begin&lt;br /&gt;
      ElXTree1.Items.Item[j].Cells[i].UseOwnStyle := True;&lt;br /&gt;
      if (i = ElXTree1.SortSection) and&lt;br /&gt;
       (ElXTree1.HeaderSections.Sections[ElXTree1.SortSection].SortMode &amp;lt;&amp;gt; hsmNone)&lt;br /&gt;
      then&lt;br /&gt;
      begin&lt;br /&gt;
        ElXTree1.Items.Item[j].Cells[i].Style.CellBackGroundColor := clMoneyGreen;&lt;br /&gt;
        ElXTree1.Items.Item[j].Cells[i].Style.ParentColors := false;&lt;br /&gt;
        ElXTree1.Items.Item[j].Cells[i].Style.UseBackGroundColor := true;&lt;br /&gt;
      end&lt;br /&gt;
      else&lt;br /&gt;
      begin&lt;br /&gt;
        ElXTree1.Items.Item[j].Cells[i].Style.CellBackGroundColor := clWhite;&lt;br /&gt;
        ElXTree1.Items.Item[j].Cells[i].Style.ParentColors := false;&lt;br /&gt;
        ElXTree1.Items.Item[j].Cells[i].Style.UseBackGroundColor := true;&lt;br /&gt;
      end;&lt;br /&gt;
    end;&lt;br /&gt;
  end;&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:2) you may use the cascading property of style to reach the same effect:&amp;lt;br&amp;gt;&lt;br /&gt;
ex:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
procedure TForm1.FormCreate(Sender: TObject);&lt;br /&gt;
var&lt;br /&gt;
  i, j: integer;&lt;br /&gt;
begin&lt;br /&gt;
// create test tree with 5 items. set custom colors in cells but not activate it&lt;br /&gt;
  for j := 0 to 5 do&lt;br /&gt;
  begin&lt;br /&gt;
    ElXTree1.Items.AddChild(nil,'Item'+Inttostr(j));&lt;br /&gt;
    ElXTree1.Items.Item[j].Cells[1].Text := Inttostr(j);&lt;br /&gt;
    for i := 0 to ElXTree1.HeaderSections.Count - 1 do&lt;br /&gt;
    begin&lt;br /&gt;
      ElXTree1.Items.Item[j].Cells[i].UseOwnStyle := True;&lt;br /&gt;
      ElXTree1.Items.Item[j].Cells[i].Style.CellBackGroundColor := clMoneyGreen;&lt;br /&gt;
      ElXTree1.Items.Item[j].Cells[i].Style.ParentColors := true;&lt;br /&gt;
    end;&lt;br /&gt;
  end;&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
procedure TForm1.ElXTree1SortEnd(Sender: TObject);&lt;br /&gt;
var&lt;br /&gt;
  i, j: integer;&lt;br /&gt;
begin&lt;br /&gt;
// in this procedure we activate using own colors for cells in sorted section&lt;br /&gt;
  for j := 0 to ElXTree1.Items.Count - 1 do&lt;br /&gt;
  begin&lt;br /&gt;
    for i := 0 to ElXTree1.HeaderSections.Count - 1 do&lt;br /&gt;
    begin&lt;br /&gt;
      if (i = ElXTree1.SortSection) and&lt;br /&gt;
       (ElXTree1.HeaderSections.Sections[ElXTree1.SortSection].SortMode &amp;lt;&amp;gt; hsmNone) &lt;br /&gt;
      then&lt;br /&gt;
        ElXTree1.Items.Item[j].Cells[i].Style.ParentColors := false&lt;br /&gt;
      else&lt;br /&gt;
        ElXTree1.Items.Item[j].Cells[i].Style.ParentColors := true;&lt;br /&gt;
    end;&lt;br /&gt;
  end;&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:3) if the tree contains a lot of items more optimized to set colors in OnItemPreDraw event:&amp;lt;br&amp;gt;&lt;br /&gt;
ex:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
procedure TForm1.ElXTree1ItemPreDraw(Sender: TObject; Item: TElXTreeItem);&lt;br /&gt;
var&lt;br /&gt;
  i: integer;&lt;br /&gt;
begin&lt;br /&gt;
  for i := 0 to ElXTree1.HeaderSections.Count - 1 do&lt;br /&gt;
  begin&lt;br /&gt;
    Item.Cells[i].UseOwnStyle := True;&lt;br /&gt;
    if (i = ElXTree1.SortSection) and&lt;br /&gt;
       (ElXTree1.HeaderSections.Sections[ElXTree1.SortSection].SortMode &amp;lt;&amp;gt; hsmNone)&lt;br /&gt;
    then&lt;br /&gt;
    begin&lt;br /&gt;
      Item.Cells[i].Style.CellBackGroundColor := clMoneyGreen;&lt;br /&gt;
      Item.Cells[i].Style.ParentColors := false;&lt;br /&gt;
      Item.Cells[i].Style.UseBackGroundColor := true;&lt;br /&gt;
    end&lt;br /&gt;
    else&lt;br /&gt;
    begin&lt;br /&gt;
      Item.Cells[i].Style.CellBackGroundColor := clWhite;&lt;br /&gt;
      Item.Cells[i].Style.ParentColors := false;&lt;br /&gt;
      Item.Cells[i].Style.UseBackGroundColor := true;&lt;br /&gt;
    end;&lt;br /&gt;
  end;&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
: 3a) ... or use virtual mode of tree &amp;lt;br&amp;gt;&lt;br /&gt;
[ Please look examle of virtual tree in our demo]&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>	</entry>

	<entry>
		<id>https://wiki.lmd.de/index.php?title=LMD_VCL_-_LMD_ElPack_FAQ&amp;diff=1559</id>
		<title>LMD VCL - LMD ElPack FAQ</title>
		<link rel="alternate" type="text/html" href="https://wiki.lmd.de/index.php?title=LMD_VCL_-_LMD_ElPack_FAQ&amp;diff=1559"/>
				<updated>2007-04-10T15:01:38Z</updated>
		
		<summary type="html">&lt;p&gt;Wikiadmin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Head-Overview}} [[Category:FAQ]] [[Category:LMD ElPack]] &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== TElInspector ==&lt;br /&gt;
=== How to use custom inplace editors? ===&lt;br /&gt;
Inspector uses own collection of inplace editors. You can examine them in&lt;br /&gt;
ElInspectorEditors.pas  We'll define simple descendant of the button edit&lt;br /&gt;
and will use it for editing of boolean values.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
type&lt;br /&gt;
&lt;br /&gt;
  TForm1 = class(TForm)&lt;br /&gt;
&lt;br /&gt;
    ElInspector1: TElInspector;&lt;br /&gt;
    ElInspectorRTTIDataSource1: TElInspectorRTTIDataSource;&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
  end;&lt;br /&gt;
&lt;br /&gt;
  TMyElInspectorInplaceButtonEdit = class(TElInspectorInplaceButtonEdit)&lt;br /&gt;
  protected&lt;br /&gt;
    procedure BtnClick(Sender: TObject); override;&lt;br /&gt;
  end;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
implementation&lt;br /&gt;
&lt;br /&gt;
{ TMyElInspectorInplaceButtonEdit }&lt;br /&gt;
&lt;br /&gt;
procedure TMyElInspectorInplaceButtonEdit.BtnClick(Sender: TObject);&lt;br /&gt;
begin&lt;br /&gt;
  if MessageDlg('Yes = True, No = False', mtConfirmation, [mbYes,mbNo], 0) = mrYes then&lt;br /&gt;
  begin&lt;br /&gt;
    TElInspectorItem(Item).InspectorData.AsString := 'True';&lt;br /&gt;
    Editor.Text := 'True';&lt;br /&gt;
  end&lt;br /&gt;
  else&lt;br /&gt;
  begin&lt;br /&gt;
    TElInspectorItem(Item).InspectorData.AsString := 'False';&lt;br /&gt;
    Editor.Text := 'False';&lt;br /&gt;
  end;&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
procedure TForm1.FormCreate(Sender: TObject);&lt;br /&gt;
var&lt;br /&gt;
  i: integer;&lt;br /&gt;
  LT: TElInspectorRegister;&lt;br /&gt;
begin&lt;br /&gt;
// we must to find current editor for boolean values in inspector's editors list&lt;br /&gt;
  for i := 1 to ElInspectorRTTIDataSource1.RegisterList.Count - 1 do&lt;br /&gt;
  begin&lt;br /&gt;
    LT := TElInspectorRegister(ElInspectorRTTIDataSource1.RegisterList.Items[i]);&lt;br /&gt;
    if (LT is TElInspectorTypeInfo) and (TElInspectorTypeInfo(LT).TypeInfo = TypeInfo(Boolean)) then&lt;br /&gt;
    begin &lt;br /&gt;
    // remove current boolean editor&lt;br /&gt;
      ElInspectorRTTIDataSource1.RegisterList.Remove( ElInspectorRTTIDataSource1.RegisterList.Items[i] );&lt;br /&gt;
    // register our editor&lt;br /&gt;
      ElInspectorRTTIDataSource1.RegisterList.Insert(i, TElInspectorTypeInfo.Create(TMyElInspectorInplaceButtonEdit, TElBooleanProperty, TypeInfo(Boolean)));&lt;br /&gt;
      Break;&lt;br /&gt;
    end;&lt;br /&gt;
  end;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== TStyleManager ==&lt;br /&gt;
=== How to use StyleName? ===&lt;br /&gt;
&lt;br /&gt;
Style Manager operates with hierarchical style sheets. These style sheets are similar to Cascading Style Sheets (CSS), used in web pages, but they are more effective and easy to use. Each style sheet contains several styles. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Each style contains one or more property values. When the style is applied to the component, the component is checked for presence of the property with given name. If the property is present, it is set to the value, specified in the style. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Style can be one of three types: &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:1) Default&lt;br /&gt;
:2) Class&lt;br /&gt;
:3) Specific&lt;br /&gt;
&lt;br /&gt;
There is one default style per style sheet. It is an ancestor for all other styles. Specific styles are applied when they are explicitly referred to by the component (in it's StyleName property).&amp;lt;br&amp;gt;&lt;br /&gt;
Name of Specific style should begin by point (ex. '.CustomStyle') for prevention of crossing with names of classes.&amp;lt;br&amp;gt; &lt;br /&gt;
Class styles are applied when there is no specific style name specified for the component. In this case the style with the name equal to component's class is searched for and applied. For example, if the component TElEdit refers to style manager, but there is no style name specified, Style Manager tries to find the style named 'TElEdit'. If it finds, this style is applied. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== HTML controls ==&lt;br /&gt;
=== Could you tell me how to get the HTML text on an HTML Label (View, TElXTreeCell etc.) to center? ===&lt;br /&gt;
You may use &amp;lt;pre&amp;gt;'&amp;lt;p align=&amp;quot;Center&amp;quot;&amp;gt;&amp;lt;/p&amp;gt;'&amp;lt;/pre&amp;gt; tag to set desired text alignment.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== El(X)Tree ==&lt;br /&gt;
=== How to draw part of item's text to pass over the several columns? ===&lt;br /&gt;
&lt;br /&gt;
You can use OnItemPostDraw event to redraw part of item. For example I can&lt;br /&gt;
redraw item text over first two columns:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
uses elstrutils;&lt;br /&gt;
&lt;br /&gt;
procedure TForm1.ElTree1ItemPostDraw(Sender: TObject; Canvas: TCanvas;&lt;br /&gt;
  Item: TElTreeItem; ItemRect: TRect; var DrawFocusRect: Boolean);&lt;br /&gt;
var&lt;br /&gt;
  R: TRect;&lt;br /&gt;
  s: TElFString;&lt;br /&gt;
  i: integer;&lt;br /&gt;
begin&lt;br /&gt;
  R := ItemRect;&lt;br /&gt;
  R.Right := ElTree1.HeaderSections[0].Width + ElTree1.HeaderSections[1].Width - 1;&lt;br /&gt;
  R.Top := R.Top + Item.Height div 2; // dirty calculation. use HTMLRender to render text if you need exact result&lt;br /&gt;
  // this is main column so we need to take into account space for lines and buttons&lt;br /&gt;
  R.Left := R.Left + Item.IndentAdjust;&lt;br /&gt;
  if (ElTree1.ShowRoot and ElTree1.ShowLines) or (ElTree1.ShowButtons and ElTree1.ShowRootButtons) then&lt;br /&gt;
    Inc(R.Left, ElTree1.ItemIndent)&lt;br /&gt;
  else&lt;br /&gt;
    Inc(R.Left, ElTree1.ItemIndent div 5);&lt;br /&gt;
  // offset rect if we use images&lt;br /&gt;
  R.Left := R.Left + 20 ; // paste here image width + 4 instead of 20&lt;br /&gt;
  Canvas.Brush.Style := bsSolid;&lt;br /&gt;
  Canvas.Brush.Color := clWhite; // set item's color if need&lt;br /&gt;
  // my Item.Text = '&amp;lt;html&amp;gt;&amp;lt;b&amp;gt;Some text 1&amp;lt;/b&amp;gt; &amp;lt;p&amp;gt;'+#13#10+'Some very very very very very very long text 2&amp;lt;/html&amp;gt;'&lt;br /&gt;
  i := Pos(#10, Item.Text);&lt;br /&gt;
  s := '';&lt;br /&gt;
  if i &amp;gt; 0 then&lt;br /&gt;
    s := Copy(Item.Text, i + 1, length(Item.Text) - i - 8); // 8 to ignore '&amp;lt;/html&amp;gt;'&lt;br /&gt;
  DrawTextW(Canvas.Handle, PWideChar(s), length(s), R, DT_NOPREFIX and DT_Left);&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ElDB(X)Tree  ==&lt;br /&gt;
=== How could I display images in an Item if I've stored image's indexes in a database field? ===&lt;br /&gt;
:1. Set TElDBXTree.ShowImages = True &amp;lt;br&amp;gt;&lt;br /&gt;
:2. Assign list of images (TImageList, TElImageList etc) to TElDBXTree.Images (and TElDBXTree.Images2 if you need it) properties &amp;lt;br&amp;gt;&lt;br /&gt;
:3. Open TElDBXTree.StylesDefs property in Object Inspector and choice &amp;quot;Table field&amp;quot; radiobutton in &amp;quot;Item images&amp;quot; radiogroup. It enforce setting Item.ImagesFromBase property to True for items. &amp;lt;br&amp;gt;&lt;br /&gt;
:4. Set data fields, where values for 1st (and 2st) image indexes was stored (look at Normal and State combos). &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hereon you should see images on the left side of the item's text. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How to make the sorted column drawn with an special background color ===&lt;br /&gt;
There are several ways to reach it. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:1) you may use OnSortEnd event to set custom style to each cell&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ex:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
procedure TForm1.ElXTree1SortEnd(Sender: TObject);&lt;br /&gt;
var&lt;br /&gt;
  i, j: integer;&lt;br /&gt;
begin&lt;br /&gt;
  for j := 0 to ElXTree1.Items.Count - 1 do&lt;br /&gt;
  begin&lt;br /&gt;
    for i := 0 to ElXTree1.HeaderSections.Count - 1 do&lt;br /&gt;
    begin&lt;br /&gt;
      ElXTree1.Items.Item[j].Cells[i].UseOwnStyle := True;&lt;br /&gt;
      if (i = ElXTree1.SortSection) and&lt;br /&gt;
       (ElXTree1.HeaderSections.Sections[ElXTree1.SortSection].SortMode &amp;lt;&amp;gt; hsmNone)&lt;br /&gt;
      then&lt;br /&gt;
      begin&lt;br /&gt;
        ElXTree1.Items.Item[j].Cells[i].Style.CellBackGroundColor := clMoneyGreen;&lt;br /&gt;
        ElXTree1.Items.Item[j].Cells[i].Style.ParentColors := false;&lt;br /&gt;
        ElXTree1.Items.Item[j].Cells[i].Style.UseBackGroundColor := true;&lt;br /&gt;
      end&lt;br /&gt;
      else&lt;br /&gt;
      begin&lt;br /&gt;
        ElXTree1.Items.Item[j].Cells[i].Style.CellBackGroundColor := clWhite;&lt;br /&gt;
        ElXTree1.Items.Item[j].Cells[i].Style.ParentColors := false;&lt;br /&gt;
        ElXTree1.Items.Item[j].Cells[i].Style.UseBackGroundColor := true;&lt;br /&gt;
      end;&lt;br /&gt;
    end;&lt;br /&gt;
  end;&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:2) you may use the cascading property of style to reach the same effect:&amp;lt;br&amp;gt;&lt;br /&gt;
ex:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
procedure TForm1.FormCreate(Sender: TObject);&lt;br /&gt;
var&lt;br /&gt;
  i, j: integer;&lt;br /&gt;
begin&lt;br /&gt;
// create test tree with 5 items. set custom colors in cells but not activate it&lt;br /&gt;
  for j := 0 to 5 do&lt;br /&gt;
  begin&lt;br /&gt;
    ElXTree1.Items.AddChild(nil,'Item'+Inttostr(j));&lt;br /&gt;
    ElXTree1.Items.Item[j].Cells[1].Text := Inttostr(j);&lt;br /&gt;
    for i := 0 to ElXTree1.HeaderSections.Count - 1 do&lt;br /&gt;
    begin&lt;br /&gt;
      ElXTree1.Items.Item[j].Cells[i].UseOwnStyle := True;&lt;br /&gt;
      ElXTree1.Items.Item[j].Cells[i].Style.CellBackGroundColor := clMoneyGreen;&lt;br /&gt;
      ElXTree1.Items.Item[j].Cells[i].Style.ParentColors := true;&lt;br /&gt;
    end;&lt;br /&gt;
  end;&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
procedure TForm1.ElXTree1SortEnd(Sender: TObject);&lt;br /&gt;
var&lt;br /&gt;
  i, j: integer;&lt;br /&gt;
begin&lt;br /&gt;
// in this procedure we activate using own colors for cells in sorted section&lt;br /&gt;
  for j := 0 to ElXTree1.Items.Count - 1 do&lt;br /&gt;
  begin&lt;br /&gt;
    for i := 0 to ElXTree1.HeaderSections.Count - 1 do&lt;br /&gt;
    begin&lt;br /&gt;
      if (i = ElXTree1.SortSection) and&lt;br /&gt;
       (ElXTree1.HeaderSections.Sections[ElXTree1.SortSection].SortMode &amp;lt;&amp;gt; hsmNone) &lt;br /&gt;
      then&lt;br /&gt;
        ElXTree1.Items.Item[j].Cells[i].Style.ParentColors := false&lt;br /&gt;
      else&lt;br /&gt;
        ElXTree1.Items.Item[j].Cells[i].Style.ParentColors := true;&lt;br /&gt;
    end;&lt;br /&gt;
  end;&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:3) if the tree contains a lot of items more optimized to set colors in OnItemPreDraw event:&amp;lt;br&amp;gt;&lt;br /&gt;
ex:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
procedure TForm1.ElXTree1ItemPreDraw(Sender: TObject; Item: TElXTreeItem);&lt;br /&gt;
var&lt;br /&gt;
  i: integer;&lt;br /&gt;
begin&lt;br /&gt;
  for i := 0 to ElXTree1.HeaderSections.Count - 1 do&lt;br /&gt;
  begin&lt;br /&gt;
    Item.Cells[i].UseOwnStyle := True;&lt;br /&gt;
    if (i = ElXTree1.SortSection) and&lt;br /&gt;
       (ElXTree1.HeaderSections.Sections[ElXTree1.SortSection].SortMode &amp;lt;&amp;gt; hsmNone)&lt;br /&gt;
    then&lt;br /&gt;
    begin&lt;br /&gt;
      Item.Cells[i].Style.CellBackGroundColor := clMoneyGreen;&lt;br /&gt;
      Item.Cells[i].Style.ParentColors := false;&lt;br /&gt;
      Item.Cells[i].Style.UseBackGroundColor := true;&lt;br /&gt;
    end&lt;br /&gt;
    else&lt;br /&gt;
    begin&lt;br /&gt;
      Item.Cells[i].Style.CellBackGroundColor := clWhite;&lt;br /&gt;
      Item.Cells[i].Style.ParentColors := false;&lt;br /&gt;
      Item.Cells[i].Style.UseBackGroundColor := true;&lt;br /&gt;
    end;&lt;br /&gt;
  end;&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
: 3a) ... or use virtual mode of tree &amp;lt;br&amp;gt;&lt;br /&gt;
[ Please look examle of virtual tree in our demo]&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>	</entry>

	<entry>
		<id>https://wiki.lmd.de/index.php?title=LMD_VCL_-_LMD_ElPack_FAQ&amp;diff=1558</id>
		<title>LMD VCL - LMD ElPack FAQ</title>
		<link rel="alternate" type="text/html" href="https://wiki.lmd.de/index.php?title=LMD_VCL_-_LMD_ElPack_FAQ&amp;diff=1558"/>
				<updated>2007-04-10T15:00:27Z</updated>
		
		<summary type="html">&lt;p&gt;Wikiadmin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Head-Overview}} [[Category:FAQ]] [[Category:LMD ElPack]] &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== TElInspector ==&lt;br /&gt;
=== How to use custom inplace editors? ===&lt;br /&gt;
Inspector uses own collection of inplace editors. You can examine them in&lt;br /&gt;
ElInspectorEditors.pas  We'll define simple descendant of the button edit&lt;br /&gt;
and will use it for editing of boolean values.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
type&lt;br /&gt;
&lt;br /&gt;
  TForm1 = class(TForm)&lt;br /&gt;
&lt;br /&gt;
    ElInspector1: TElInspector;&lt;br /&gt;
    ElInspectorRTTIDataSource1: TElInspectorRTTIDataSource;&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
  end;&lt;br /&gt;
&lt;br /&gt;
  TMyElInspectorInplaceButtonEdit = class(TElInspectorInplaceButtonEdit)&lt;br /&gt;
  protected&lt;br /&gt;
    procedure BtnClick(Sender: TObject); override;&lt;br /&gt;
  end;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
implementation&lt;br /&gt;
&lt;br /&gt;
{ TMyElInspectorInplaceButtonEdit }&lt;br /&gt;
&lt;br /&gt;
procedure TMyElInspectorInplaceButtonEdit.BtnClick(Sender: TObject);&lt;br /&gt;
begin&lt;br /&gt;
  if MessageDlg('Yes = True, No = False', mtConfirmation, [mbYes,mbNo], 0) = mrYes then&lt;br /&gt;
  begin&lt;br /&gt;
    TElInspectorItem(Item).InspectorData.AsString := 'True';&lt;br /&gt;
    Editor.Text := 'True';&lt;br /&gt;
  end&lt;br /&gt;
  else&lt;br /&gt;
  begin&lt;br /&gt;
    TElInspectorItem(Item).InspectorData.AsString := 'False';&lt;br /&gt;
    Editor.Text := 'False';&lt;br /&gt;
  end;&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
procedure TForm1.FormCreate(Sender: TObject);&lt;br /&gt;
var&lt;br /&gt;
  i: integer;&lt;br /&gt;
  LT: TElInspectorRegister;&lt;br /&gt;
begin&lt;br /&gt;
// we must to find current editor for boolean values in inspector's editors list&lt;br /&gt;
  for i := 1 to ElInspectorRTTIDataSource1.RegisterList.Count - 1 do&lt;br /&gt;
  begin&lt;br /&gt;
    LT := TElInspectorRegister(ElInspectorRTTIDataSource1.RegisterList.Items[i]);&lt;br /&gt;
    if (LT is TElInspectorTypeInfo) and (TElInspectorTypeInfo(LT).TypeInfo = TypeInfo(Boolean)) then&lt;br /&gt;
    begin &lt;br /&gt;
    // remove current boolean editor&lt;br /&gt;
      ElInspectorRTTIDataSource1.RegisterList.Remove( ElInspectorRTTIDataSource1.RegisterList.Items[i] );&lt;br /&gt;
    // register our editor&lt;br /&gt;
      ElInspectorRTTIDataSource1.RegisterList.Insert(i, TElInspectorTypeInfo.Create(TMyElInspectorInplaceButtonEdit, TElBooleanProperty, TypeInfo(Boolean)));&lt;br /&gt;
      Break;&lt;br /&gt;
    end;&lt;br /&gt;
  end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== TStyleManager ==&lt;br /&gt;
=== How to use StyleName? ===&lt;br /&gt;
&lt;br /&gt;
Style Manager operates with hierarchical style sheets. These style sheets are similar to Cascading Style Sheets (CSS), used in web pages, but they are more effective and easy to use. Each style sheet contains several styles. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Each style contains one or more property values. When the style is applied to the component, the component is checked for presence of the property with given name. If the property is present, it is set to the value, specified in the style. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Style can be one of three types: &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:1) Default&lt;br /&gt;
:2) Class&lt;br /&gt;
:3) Specific&lt;br /&gt;
&lt;br /&gt;
There is one default style per style sheet. It is an ancestor for all other styles. Specific styles are applied when they are explicitly referred to by the component (in it's StyleName property).&amp;lt;br&amp;gt;&lt;br /&gt;
Name of Specific style should begin by point (ex. '.CustomStyle') for prevention of crossing with names of classes.&amp;lt;br&amp;gt; &lt;br /&gt;
Class styles are applied when there is no specific style name specified for the component. In this case the style with the name equal to component's class is searched for and applied. For example, if the component TElEdit refers to style manager, but there is no style name specified, Style Manager tries to find the style named 'TElEdit'. If it finds, this style is applied. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== HTML controls ==&lt;br /&gt;
=== Could you tell me how to get the HTML text on an HTML Label (View, TElXTreeCell etc.) to center? ===&lt;br /&gt;
You may use &amp;lt;pre&amp;gt;'&amp;lt;p align=&amp;quot;Center&amp;quot;&amp;gt;&amp;lt;/p&amp;gt;'&amp;lt;/pre&amp;gt; tag to set desired text alignment.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== El(X)Tree ==&lt;br /&gt;
=== How to draw part of item's text to pass over the several columns? ===&lt;br /&gt;
&lt;br /&gt;
You can use OnItemPostDraw event to redraw part of item. For example I can&lt;br /&gt;
redraw item text over first two columns:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
uses elstrutils;&lt;br /&gt;
&lt;br /&gt;
procedure TForm1.ElTree1ItemPostDraw(Sender: TObject; Canvas: TCanvas;&lt;br /&gt;
  Item: TElTreeItem; ItemRect: TRect; var DrawFocusRect: Boolean);&lt;br /&gt;
var&lt;br /&gt;
  R: TRect;&lt;br /&gt;
  s: TElFString;&lt;br /&gt;
  i: integer;&lt;br /&gt;
begin&lt;br /&gt;
  R := ItemRect;&lt;br /&gt;
  R.Right := ElTree1.HeaderSections[0].Width + ElTree1.HeaderSections[1].Width - 1;&lt;br /&gt;
  R.Top := R.Top + Item.Height div 2; // dirty calculation. use HTMLRender to render text if you need exact result&lt;br /&gt;
  // this is main column so we need to take into account space for lines and buttons&lt;br /&gt;
  R.Left := R.Left + Item.IndentAdjust;&lt;br /&gt;
  if (ElTree1.ShowRoot and ElTree1.ShowLines) or (ElTree1.ShowButtons and ElTree1.ShowRootButtons) then&lt;br /&gt;
    Inc(R.Left, ElTree1.ItemIndent)&lt;br /&gt;
  else&lt;br /&gt;
    Inc(R.Left, ElTree1.ItemIndent div 5);&lt;br /&gt;
  // offset rect if we use images&lt;br /&gt;
  R.Left := R.Left + 20 ; // paste here image width + 4 instead of 20&lt;br /&gt;
  Canvas.Brush.Style := bsSolid;&lt;br /&gt;
  Canvas.Brush.Color := clWhite; // set item's color if need&lt;br /&gt;
  // my Item.Text = '&amp;lt;html&amp;gt;&amp;lt;b&amp;gt;Some text 1&amp;lt;/b&amp;gt; &amp;lt;p&amp;gt;'+#13#10+'Some very very very very very very long text 2&amp;lt;/html&amp;gt;'&lt;br /&gt;
  i := Pos(#10, Item.Text);&lt;br /&gt;
  s := '';&lt;br /&gt;
  if i &amp;gt; 0 then&lt;br /&gt;
    s := Copy(Item.Text, i + 1, length(Item.Text) - i - 8); // 8 to ignore '&amp;lt;/html&amp;gt;'&lt;br /&gt;
  DrawTextW(Canvas.Handle, PWideChar(s), length(s), R, DT_NOPREFIX and DT_Left);&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ElDB(X)Tree  ==&lt;br /&gt;
=== How could I display images in an Item if I've stored image's indexes in a database field? ===&lt;br /&gt;
:1. Set TElDBXTree.ShowImages = True &amp;lt;br&amp;gt;&lt;br /&gt;
:2. Assign list of images (TImageList, TElImageList etc) to TElDBXTree.Images (and TElDBXTree.Images2 if you need it) properties &amp;lt;br&amp;gt;&lt;br /&gt;
:3. Open TElDBXTree.StylesDefs property in Object Inspector and choice &amp;quot;Table field&amp;quot; radiobutton in &amp;quot;Item images&amp;quot; radiogroup. It enforce setting Item.ImagesFromBase property to True for items. &amp;lt;br&amp;gt;&lt;br /&gt;
:4. Set data fields, where values for 1st (and 2st) image indexes was stored (look at Normal and State combos). &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hereon you should see images on the left side of the item's text. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How to make the sorted column drawn with an special background color ===&lt;br /&gt;
There are several ways to reach it. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:1) you may use OnSortEnd event to set custom style to each cell&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ex:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
procedure TForm1.ElXTree1SortEnd(Sender: TObject);&lt;br /&gt;
var&lt;br /&gt;
  i, j: integer;&lt;br /&gt;
begin&lt;br /&gt;
  for j := 0 to ElXTree1.Items.Count - 1 do&lt;br /&gt;
  begin&lt;br /&gt;
    for i := 0 to ElXTree1.HeaderSections.Count - 1 do&lt;br /&gt;
    begin&lt;br /&gt;
      ElXTree1.Items.Item[j].Cells[i].UseOwnStyle := True;&lt;br /&gt;
      if (i = ElXTree1.SortSection) and&lt;br /&gt;
       (ElXTree1.HeaderSections.Sections[ElXTree1.SortSection].SortMode &amp;lt;&amp;gt; hsmNone)&lt;br /&gt;
      then&lt;br /&gt;
      begin&lt;br /&gt;
        ElXTree1.Items.Item[j].Cells[i].Style.CellBackGroundColor := clMoneyGreen;&lt;br /&gt;
        ElXTree1.Items.Item[j].Cells[i].Style.ParentColors := false;&lt;br /&gt;
        ElXTree1.Items.Item[j].Cells[i].Style.UseBackGroundColor := true;&lt;br /&gt;
      end&lt;br /&gt;
      else&lt;br /&gt;
      begin&lt;br /&gt;
        ElXTree1.Items.Item[j].Cells[i].Style.CellBackGroundColor := clWhite;&lt;br /&gt;
        ElXTree1.Items.Item[j].Cells[i].Style.ParentColors := false;&lt;br /&gt;
        ElXTree1.Items.Item[j].Cells[i].Style.UseBackGroundColor := true;&lt;br /&gt;
      end;&lt;br /&gt;
    end;&lt;br /&gt;
  end;&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:2) you may use the cascading property of style to reach the same effect:&amp;lt;br&amp;gt;&lt;br /&gt;
ex:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
procedure TForm1.FormCreate(Sender: TObject);&lt;br /&gt;
var&lt;br /&gt;
  i, j: integer;&lt;br /&gt;
begin&lt;br /&gt;
// create test tree with 5 items. set custom colors in cells but not activate it&lt;br /&gt;
  for j := 0 to 5 do&lt;br /&gt;
  begin&lt;br /&gt;
    ElXTree1.Items.AddChild(nil,'Item'+Inttostr(j));&lt;br /&gt;
    ElXTree1.Items.Item[j].Cells[1].Text := Inttostr(j);&lt;br /&gt;
    for i := 0 to ElXTree1.HeaderSections.Count - 1 do&lt;br /&gt;
    begin&lt;br /&gt;
      ElXTree1.Items.Item[j].Cells[i].UseOwnStyle := True;&lt;br /&gt;
      ElXTree1.Items.Item[j].Cells[i].Style.CellBackGroundColor := clMoneyGreen;&lt;br /&gt;
      ElXTree1.Items.Item[j].Cells[i].Style.ParentColors := true;&lt;br /&gt;
    end;&lt;br /&gt;
  end;&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
procedure TForm1.ElXTree1SortEnd(Sender: TObject);&lt;br /&gt;
var&lt;br /&gt;
  i, j: integer;&lt;br /&gt;
begin&lt;br /&gt;
// in this procedure we activate using own colors for cells in sorted section&lt;br /&gt;
  for j := 0 to ElXTree1.Items.Count - 1 do&lt;br /&gt;
  begin&lt;br /&gt;
    for i := 0 to ElXTree1.HeaderSections.Count - 1 do&lt;br /&gt;
    begin&lt;br /&gt;
      if (i = ElXTree1.SortSection) and&lt;br /&gt;
       (ElXTree1.HeaderSections.Sections[ElXTree1.SortSection].SortMode &amp;lt;&amp;gt; hsmNone) &lt;br /&gt;
      then&lt;br /&gt;
        ElXTree1.Items.Item[j].Cells[i].Style.ParentColors := false&lt;br /&gt;
      else&lt;br /&gt;
        ElXTree1.Items.Item[j].Cells[i].Style.ParentColors := true;&lt;br /&gt;
    end;&lt;br /&gt;
  end;&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:3) if the tree contains a lot of items more optimized to set colors in OnItemPreDraw event:&amp;lt;br&amp;gt;&lt;br /&gt;
ex:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
procedure TForm1.ElXTree1ItemPreDraw(Sender: TObject; Item: TElXTreeItem);&lt;br /&gt;
var&lt;br /&gt;
  i: integer;&lt;br /&gt;
begin&lt;br /&gt;
  for i := 0 to ElXTree1.HeaderSections.Count - 1 do&lt;br /&gt;
  begin&lt;br /&gt;
    Item.Cells[i].UseOwnStyle := True;&lt;br /&gt;
    if (i = ElXTree1.SortSection) and&lt;br /&gt;
       (ElXTree1.HeaderSections.Sections[ElXTree1.SortSection].SortMode &amp;lt;&amp;gt; hsmNone)&lt;br /&gt;
    then&lt;br /&gt;
    begin&lt;br /&gt;
      Item.Cells[i].Style.CellBackGroundColor := clMoneyGreen;&lt;br /&gt;
      Item.Cells[i].Style.ParentColors := false;&lt;br /&gt;
      Item.Cells[i].Style.UseBackGroundColor := true;&lt;br /&gt;
    end&lt;br /&gt;
    else&lt;br /&gt;
    begin&lt;br /&gt;
      Item.Cells[i].Style.CellBackGroundColor := clWhite;&lt;br /&gt;
      Item.Cells[i].Style.ParentColors := false;&lt;br /&gt;
      Item.Cells[i].Style.UseBackGroundColor := true;&lt;br /&gt;
    end;&lt;br /&gt;
  end;&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
: 3a) ... or use virtual mode of tree &amp;lt;br&amp;gt;&lt;br /&gt;
[ Please look examle of virtual tree in our demo]&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>	</entry>

	<entry>
		<id>https://wiki.lmd.de/index.php?title=LMD_VCL_-_LMD_ElPack_FAQ&amp;diff=1557</id>
		<title>LMD VCL - LMD ElPack FAQ</title>
		<link rel="alternate" type="text/html" href="https://wiki.lmd.de/index.php?title=LMD_VCL_-_LMD_ElPack_FAQ&amp;diff=1557"/>
				<updated>2007-04-10T14:43:39Z</updated>
		
		<summary type="html">&lt;p&gt;Wikiadmin: /* How to draw part of item's text to pass over the several columns? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Head-Overview}} [[Category:FAQ]] [[Category:LMD ElPack]] &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== TElInspector ==&lt;br /&gt;
=== How to use custom inplace editors? ===&lt;br /&gt;
Inspector uses own collection of inplace editors. You can examine them in&lt;br /&gt;
ElInspectorEditors.pas  We'll define simple descendant of the button edit&lt;br /&gt;
and will use it for editing of boolean values.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
type&lt;br /&gt;
&lt;br /&gt;
  TForm1 = class(TForm)&lt;br /&gt;
&lt;br /&gt;
    ElInspector1: TElInspector;&lt;br /&gt;
    ElInspectorRTTIDataSource1: TElInspectorRTTIDataSource;&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
  end;&lt;br /&gt;
&lt;br /&gt;
  TMyElInspectorInplaceButtonEdit = class(TElInspectorInplaceButtonEdit)&lt;br /&gt;
  protected&lt;br /&gt;
    procedure BtnClick(Sender: TObject); override;&lt;br /&gt;
  end;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
implementation&lt;br /&gt;
&lt;br /&gt;
{ TMyElInspectorInplaceButtonEdit }&lt;br /&gt;
&lt;br /&gt;
procedure TMyElInspectorInplaceButtonEdit.BtnClick(Sender: TObject);&lt;br /&gt;
begin&lt;br /&gt;
  if MessageDlg('Yes = True, No = False', mtConfirmation, [mbYes,mbNo], 0) = mrYes then&lt;br /&gt;
  begin&lt;br /&gt;
    TElInspectorItem(Item).InspectorData.AsString := 'True';&lt;br /&gt;
    Editor.Text := 'True';&lt;br /&gt;
  end&lt;br /&gt;
  else&lt;br /&gt;
  begin&lt;br /&gt;
    TElInspectorItem(Item).InspectorData.AsString := 'False';&lt;br /&gt;
    Editor.Text := 'False';&lt;br /&gt;
  end;&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
procedure TForm1.FormCreate(Sender: TObject);&lt;br /&gt;
var&lt;br /&gt;
  i: integer;&lt;br /&gt;
  LT: TElInspectorRegister;&lt;br /&gt;
begin&lt;br /&gt;
// we must to find current editor for boolean values in inspector's editors list&lt;br /&gt;
  for i := 1 to ElInspectorRTTIDataSource1.RegisterList.Count - 1 do&lt;br /&gt;
  begin&lt;br /&gt;
    LT := TElInspectorRegister(ElInspectorRTTIDataSource1.RegisterList.Items[i]);&lt;br /&gt;
    if (LT is TElInspectorTypeInfo) and (TElInspectorTypeInfo(LT).TypeInfo = TypeInfo(Boolean)) then&lt;br /&gt;
    begin &lt;br /&gt;
    // remove current boolean editor&lt;br /&gt;
      ElInspectorRTTIDataSource1.RegisterList.Remove( ElInspectorRTTIDataSource1.RegisterList.Items[i] );&lt;br /&gt;
    // register our editor&lt;br /&gt;
      ElInspectorRTTIDataSource1.RegisterList.Insert(i, TElInspectorTypeInfo.Create(TMyElInspectorInplaceButtonEdit, TElBooleanProperty, TypeInfo(Boolean)));&lt;br /&gt;
      Break;&lt;br /&gt;
    end;&lt;br /&gt;
  end;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== TStyleManager ==&lt;br /&gt;
=== How to use StyleName? ===&lt;br /&gt;
&lt;br /&gt;
Style Manager operates with hierarchical style sheets. These style sheets are similar to Cascading Style Sheets (CSS), used in web pages, but they are more effective and easy to use. Each style sheet contains several styles. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Each style contains one or more property values. When the style is applied to the component, the component is checked for presence of the property with given name. If the property is present, it is set to the value, specified in the style. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Style can be one of three types: &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:1) Default&lt;br /&gt;
:2) Class&lt;br /&gt;
:3) Specific&lt;br /&gt;
&lt;br /&gt;
There is one default style per style sheet. It is an ancestor for all other styles. Specific styles are applied when they are explicitly referred to by the component (in it's StyleName property).&amp;lt;br&amp;gt;&lt;br /&gt;
Name of Specific style should begin by point (ex. '.CustomStyle') for prevention of crossing with names of classes.&amp;lt;br&amp;gt; &lt;br /&gt;
Class styles are applied when there is no specific style name specified for the component. In this case the style with the name equal to component's class is searched for and applied. For example, if the component TElEdit refers to style manager, but there is no style name specified, Style Manager tries to find the style named 'TElEdit'. If it finds, this style is applied. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== HTML controls ==&lt;br /&gt;
=== Could you tell me how to get the HTML text on an HTML Label (View, TElXTreeCell etc.) to center? ===&lt;br /&gt;
You may use &amp;lt;pre&amp;gt;'&amp;lt;p align=&amp;quot;Center&amp;quot;&amp;gt;&amp;lt;/p&amp;gt;'&amp;lt;/pre&amp;gt; tag to set desired text alignment.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== El(X)Tree ==&lt;br /&gt;
=== How to draw part of item's text to pass over the several columns? ===&lt;br /&gt;
&lt;br /&gt;
You can use OnItemPostDraw event to redraw part of item. For example I can&lt;br /&gt;
redraw item text over first two columns:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
uses elstrutils;&lt;br /&gt;
&lt;br /&gt;
procedure TForm1.ElTree1ItemPostDraw(Sender: TObject; Canvas: TCanvas;&lt;br /&gt;
  Item: TElTreeItem; ItemRect: TRect; var DrawFocusRect: Boolean);&lt;br /&gt;
var&lt;br /&gt;
  R: TRect;&lt;br /&gt;
  s: TElFString;&lt;br /&gt;
  i: integer;&lt;br /&gt;
begin&lt;br /&gt;
  R := ItemRect;&lt;br /&gt;
  R.Right := ElTree1.HeaderSections[0].Width + ElTree1.HeaderSections[1].Width - 1;&lt;br /&gt;
  R.Top := R.Top + Item.Height div 2; // dirty calculation. use HTMLRender to render text if you need exact result&lt;br /&gt;
  // this is main column so we need to take into account space for lines and buttons&lt;br /&gt;
  R.Left := R.Left + Item.IndentAdjust;&lt;br /&gt;
  if (ElTree1.ShowRoot and ElTree1.ShowLines) or (ElTree1.ShowButtons and ElTree1.ShowRootButtons) then&lt;br /&gt;
    Inc(R.Left, ElTree1.ItemIndent)&lt;br /&gt;
  else&lt;br /&gt;
    Inc(R.Left, ElTree1.ItemIndent div 5);&lt;br /&gt;
  // offset rect if we use images&lt;br /&gt;
  R.Left := R.Left + 20 ; // paste here image width + 4 instead of 20&lt;br /&gt;
  Canvas.Brush.Style := bsSolid;&lt;br /&gt;
  Canvas.Brush.Color := clWhite; // set item's color if need&lt;br /&gt;
  // my Item.Text = '&amp;lt;html&amp;gt;&amp;lt;b&amp;gt;Some text 1&amp;lt;/b&amp;gt; &amp;lt;p&amp;gt;'+#13#10+'Some very very very very very very long text 2&amp;lt;/html&amp;gt;'&lt;br /&gt;
  i := Pos(#10, Item.Text);&lt;br /&gt;
  s := '';&lt;br /&gt;
  if i &amp;gt; 0 then&lt;br /&gt;
    s := Copy(Item.Text, i + 1, length(Item.Text) - i - 8); // 8 to ignore '&amp;lt;/html&amp;gt;'&lt;br /&gt;
  DrawTextW(Canvas.Handle, PWideChar(s), length(s), R, DT_NOPREFIX and DT_Left);&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ElDB(X)Tree  ==&lt;br /&gt;
=== How could I display images in an Item if I've stored image's indexes in a database field? ===&lt;br /&gt;
:1. Set TElDBXTree.ShowImages = True &amp;lt;br&amp;gt;&lt;br /&gt;
:2. Assign list of images (TImageList, TElImageList etc) to TElDBXTree.Images (and TElDBXTree.Images2 if you need it) properties &amp;lt;br&amp;gt;&lt;br /&gt;
:3. Open TElDBXTree.StylesDefs property in Object Inspector and choice &amp;quot;Table field&amp;quot; radiobutton in &amp;quot;Item images&amp;quot; radiogroup. It enforce setting Item.ImagesFromBase property to True for items. &amp;lt;br&amp;gt;&lt;br /&gt;
:4. Set data fields, where values for 1st (and 2st) image indexes was stored (look at Normal and State combos). &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hereon you should see images on the left side of the item's text. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How to make the sorted column drawn with an special background color ===&lt;br /&gt;
There are several ways to reach it. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:1) you may use OnSortEnd event to set custom style to each cell&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ex:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
procedure TForm1.ElXTree1SortEnd(Sender: TObject);&lt;br /&gt;
var&lt;br /&gt;
  i, j: integer;&lt;br /&gt;
begin&lt;br /&gt;
  for j := 0 to ElXTree1.Items.Count - 1 do&lt;br /&gt;
  begin&lt;br /&gt;
    for i := 0 to ElXTree1.HeaderSections.Count - 1 do&lt;br /&gt;
    begin&lt;br /&gt;
      ElXTree1.Items.Item[j].Cells[i].UseOwnStyle := True;&lt;br /&gt;
      if (i = ElXTree1.SortSection) and&lt;br /&gt;
       (ElXTree1.HeaderSections.Sections[ElXTree1.SortSection].SortMode &amp;lt;&amp;gt; hsmNone)&lt;br /&gt;
      then&lt;br /&gt;
      begin&lt;br /&gt;
        ElXTree1.Items.Item[j].Cells[i].Style.CellBackGroundColor := clMoneyGreen;&lt;br /&gt;
        ElXTree1.Items.Item[j].Cells[i].Style.ParentColors := false;&lt;br /&gt;
        ElXTree1.Items.Item[j].Cells[i].Style.UseBackGroundColor := true;&lt;br /&gt;
      end&lt;br /&gt;
      else&lt;br /&gt;
      begin&lt;br /&gt;
        ElXTree1.Items.Item[j].Cells[i].Style.CellBackGroundColor := clWhite;&lt;br /&gt;
        ElXTree1.Items.Item[j].Cells[i].Style.ParentColors := false;&lt;br /&gt;
        ElXTree1.Items.Item[j].Cells[i].Style.UseBackGroundColor := true;&lt;br /&gt;
      end;&lt;br /&gt;
    end;&lt;br /&gt;
  end;&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:2) you may use the cascading property of style to reach the same effect:&amp;lt;br&amp;gt;&lt;br /&gt;
ex:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
procedure TForm1.FormCreate(Sender: TObject);&lt;br /&gt;
var&lt;br /&gt;
  i, j: integer;&lt;br /&gt;
begin&lt;br /&gt;
// create test tree with 5 items. set custom colors in cells but not activate it&lt;br /&gt;
  for j := 0 to 5 do&lt;br /&gt;
  begin&lt;br /&gt;
    ElXTree1.Items.AddChild(nil,'Item'+Inttostr(j));&lt;br /&gt;
    ElXTree1.Items.Item[j].Cells[1].Text := Inttostr(j);&lt;br /&gt;
    for i := 0 to ElXTree1.HeaderSections.Count - 1 do&lt;br /&gt;
    begin&lt;br /&gt;
      ElXTree1.Items.Item[j].Cells[i].UseOwnStyle := True;&lt;br /&gt;
      ElXTree1.Items.Item[j].Cells[i].Style.CellBackGroundColor := clMoneyGreen;&lt;br /&gt;
      ElXTree1.Items.Item[j].Cells[i].Style.ParentColors := true;&lt;br /&gt;
    end;&lt;br /&gt;
  end;&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
procedure TForm1.ElXTree1SortEnd(Sender: TObject);&lt;br /&gt;
var&lt;br /&gt;
  i, j: integer;&lt;br /&gt;
begin&lt;br /&gt;
// in this procedure we activate using own colors for cells in sorted section&lt;br /&gt;
  for j := 0 to ElXTree1.Items.Count - 1 do&lt;br /&gt;
  begin&lt;br /&gt;
    for i := 0 to ElXTree1.HeaderSections.Count - 1 do&lt;br /&gt;
    begin&lt;br /&gt;
      if (i = ElXTree1.SortSection) and&lt;br /&gt;
       (ElXTree1.HeaderSections.Sections[ElXTree1.SortSection].SortMode &amp;lt;&amp;gt; hsmNone) &lt;br /&gt;
      then&lt;br /&gt;
        ElXTree1.Items.Item[j].Cells[i].Style.ParentColors := false&lt;br /&gt;
      else&lt;br /&gt;
        ElXTree1.Items.Item[j].Cells[i].Style.ParentColors := true;&lt;br /&gt;
    end;&lt;br /&gt;
  end;&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:3) if the tree contains a lot of items more optimized to set colors in OnItemPreDraw event:&amp;lt;br&amp;gt;&lt;br /&gt;
ex:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
procedure TForm1.ElXTree1ItemPreDraw(Sender: TObject; Item: TElXTreeItem);&lt;br /&gt;
var&lt;br /&gt;
  i: integer;&lt;br /&gt;
begin&lt;br /&gt;
  for i := 0 to ElXTree1.HeaderSections.Count - 1 do&lt;br /&gt;
  begin&lt;br /&gt;
    Item.Cells[i].UseOwnStyle := True;&lt;br /&gt;
    if (i = ElXTree1.SortSection) and&lt;br /&gt;
       (ElXTree1.HeaderSections.Sections[ElXTree1.SortSection].SortMode &amp;lt;&amp;gt; hsmNone)&lt;br /&gt;
    then&lt;br /&gt;
    begin&lt;br /&gt;
      Item.Cells[i].Style.CellBackGroundColor := clMoneyGreen;&lt;br /&gt;
      Item.Cells[i].Style.ParentColors := false;&lt;br /&gt;
      Item.Cells[i].Style.UseBackGroundColor := true;&lt;br /&gt;
    end&lt;br /&gt;
    else&lt;br /&gt;
    begin&lt;br /&gt;
      Item.Cells[i].Style.CellBackGroundColor := clWhite;&lt;br /&gt;
      Item.Cells[i].Style.ParentColors := false;&lt;br /&gt;
      Item.Cells[i].Style.UseBackGroundColor := true;&lt;br /&gt;
    end;&lt;br /&gt;
  end;&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
: 3a) ... or use virtual mode of tree &amp;lt;br&amp;gt;&lt;br /&gt;
[ Please look examle of virtual tree in our demo]&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>	</entry>

	<entry>
		<id>https://wiki.lmd.de/index.php?title=LMD_VCL_-_LMD_ElPack_FAQ&amp;diff=1556</id>
		<title>LMD VCL - LMD ElPack FAQ</title>
		<link rel="alternate" type="text/html" href="https://wiki.lmd.de/index.php?title=LMD_VCL_-_LMD_ElPack_FAQ&amp;diff=1556"/>
				<updated>2007-04-10T14:36:32Z</updated>
		
		<summary type="html">&lt;p&gt;Wikiadmin: /* How to draw part of item's text to pass over the several columns? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Head-Overview}} [[Category:FAQ]] [[Category:LMD ElPack]] &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== TElInspector ==&lt;br /&gt;
=== How to use custom inplace editors? ===&lt;br /&gt;
Inspector uses own collection of inplace editors. You can examine them in&lt;br /&gt;
ElInspectorEditors.pas  We'll define simple descendant of the button edit&lt;br /&gt;
and will use it for editing of boolean values.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
type&lt;br /&gt;
&lt;br /&gt;
  TForm1 = class(TForm)&lt;br /&gt;
&lt;br /&gt;
    ElInspector1: TElInspector;&lt;br /&gt;
    ElInspectorRTTIDataSource1: TElInspectorRTTIDataSource;&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
  end;&lt;br /&gt;
&lt;br /&gt;
  TMyElInspectorInplaceButtonEdit = class(TElInspectorInplaceButtonEdit)&lt;br /&gt;
  protected&lt;br /&gt;
    procedure BtnClick(Sender: TObject); override;&lt;br /&gt;
  end;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
implementation&lt;br /&gt;
&lt;br /&gt;
{ TMyElInspectorInplaceButtonEdit }&lt;br /&gt;
&lt;br /&gt;
procedure TMyElInspectorInplaceButtonEdit.BtnClick(Sender: TObject);&lt;br /&gt;
begin&lt;br /&gt;
  if MessageDlg('Yes = True, No = False', mtConfirmation, [mbYes,mbNo], 0) = mrYes then&lt;br /&gt;
  begin&lt;br /&gt;
    TElInspectorItem(Item).InspectorData.AsString := 'True';&lt;br /&gt;
    Editor.Text := 'True';&lt;br /&gt;
  end&lt;br /&gt;
  else&lt;br /&gt;
  begin&lt;br /&gt;
    TElInspectorItem(Item).InspectorData.AsString := 'False';&lt;br /&gt;
    Editor.Text := 'False';&lt;br /&gt;
  end;&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
procedure TForm1.FormCreate(Sender: TObject);&lt;br /&gt;
var&lt;br /&gt;
  i: integer;&lt;br /&gt;
  LT: TElInspectorRegister;&lt;br /&gt;
begin&lt;br /&gt;
// we must to find current editor for boolean values in inspector's editors list&lt;br /&gt;
  for i := 1 to ElInspectorRTTIDataSource1.RegisterList.Count - 1 do&lt;br /&gt;
  begin&lt;br /&gt;
    LT := TElInspectorRegister(ElInspectorRTTIDataSource1.RegisterList.Items[i]);&lt;br /&gt;
    if (LT is TElInspectorTypeInfo) and (TElInspectorTypeInfo(LT).TypeInfo = TypeInfo(Boolean)) then&lt;br /&gt;
    begin &lt;br /&gt;
    // remove current boolean editor&lt;br /&gt;
      ElInspectorRTTIDataSource1.RegisterList.Remove( ElInspectorRTTIDataSource1.RegisterList.Items[i] );&lt;br /&gt;
    // register our editor&lt;br /&gt;
      ElInspectorRTTIDataSource1.RegisterList.Insert(i, TElInspectorTypeInfo.Create(TMyElInspectorInplaceButtonEdit, TElBooleanProperty, TypeInfo(Boolean)));&lt;br /&gt;
      Break;&lt;br /&gt;
    end;&lt;br /&gt;
  end;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== TStyleManager ==&lt;br /&gt;
=== How to use StyleName? ===&lt;br /&gt;
&lt;br /&gt;
Style Manager operates with hierarchical style sheets. These style sheets are similar to Cascading Style Sheets (CSS), used in web pages, but they are more effective and easy to use. Each style sheet contains several styles. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Each style contains one or more property values. When the style is applied to the component, the component is checked for presence of the property with given name. If the property is present, it is set to the value, specified in the style. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Style can be one of three types: &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:1) Default&lt;br /&gt;
:2) Class&lt;br /&gt;
:3) Specific&lt;br /&gt;
&lt;br /&gt;
There is one default style per style sheet. It is an ancestor for all other styles. Specific styles are applied when they are explicitly referred to by the component (in it's StyleName property).&amp;lt;br&amp;gt;&lt;br /&gt;
Name of Specific style should begin by point (ex. '.CustomStyle') for prevention of crossing with names of classes.&amp;lt;br&amp;gt; &lt;br /&gt;
Class styles are applied when there is no specific style name specified for the component. In this case the style with the name equal to component's class is searched for and applied. For example, if the component TElEdit refers to style manager, but there is no style name specified, Style Manager tries to find the style named 'TElEdit'. If it finds, this style is applied. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== HTML controls ==&lt;br /&gt;
=== Could you tell me how to get the HTML text on an HTML Label (View, TElXTreeCell etc.) to center? ===&lt;br /&gt;
You may use &amp;lt;pre&amp;gt;'&amp;lt;p align=&amp;quot;Center&amp;quot;&amp;gt;&amp;lt;/p&amp;gt;'&amp;lt;/pre&amp;gt; tag to set desired text alignment.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== El(X)Tree ==&lt;br /&gt;
=== How to draw part of item's text to pass over the several columns? ===&lt;br /&gt;
&lt;br /&gt;
You can use OnItemPostDraw event to redraw part of item. For example I can&lt;br /&gt;
redraw item text over first two columns:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
uses elstrutils;&lt;br /&gt;
&lt;br /&gt;
procedure TForm1.ElTree1ItemPostDraw(Sender: TObject; Canvas: TCanvas;&lt;br /&gt;
  Item: TElTreeItem; ItemRect: TRect; var DrawFocusRect: Boolean);&lt;br /&gt;
var&lt;br /&gt;
  R: TRect;&lt;br /&gt;
  s: TElFString;&lt;br /&gt;
  i: integer;&lt;br /&gt;
begin&lt;br /&gt;
  R := ItemRect;&lt;br /&gt;
  R.Right := ElTree1.HeaderSections[0].Width + ElTree1.HeaderSections[1].Width - 1;&lt;br /&gt;
  R.Top := R.Top + Item.Height div 2; // dirty calculation. use HTMLRender to render text if you need exact result&lt;br /&gt;
  // this is main column so we need to take into account space for lines and buttons&lt;br /&gt;
  R.Left := R.Left + Item.IndentAdjust;&lt;br /&gt;
  if (ElTree1.ShowRoot and ElTree1.ShowLines) or (ElTree1.ShowButtons and ElTree1.ShowRootButtons) then&lt;br /&gt;
    Inc(R.Left, ElTree1.ItemIndent)&lt;br /&gt;
  else&lt;br /&gt;
    Inc(R.Left, ElTree1.ItemIndent div 5);&lt;br /&gt;
  // offset rect if we use images&lt;br /&gt;
  R.Left := R.Left + 20 ; // paste here image width + 4 instead of 20&lt;br /&gt;
  Canvas.Brush.Style := bsSolid;&lt;br /&gt;
  Canvas.Brush.Color := clWhite; // set item's color if need&lt;br /&gt;
  // my Item.Text = '&amp;lt;html&amp;gt;&amp;lt;b&amp;gt;Some text 1&amp;lt;/b&amp;gt; &amp;lt;p&amp;gt;'+#13#10+'Some very very very very very very long text 2&amp;lt;/html&amp;gt;'&lt;br /&gt;
  i := Pos(#10, Item.Text);&lt;br /&gt;
  s := '';&lt;br /&gt;
  if i &amp;gt; 0 then&lt;br /&gt;
    s := Copy(Item.Text, i + 1, length(Item.Text) - i - 8); // 8 to ignore '&amp;lt;/html&amp;gt;'&lt;br /&gt;
  DrawTextW(Canvas.Handle, PWideChar(s), length(s), R, DT_NOPREFIX and DT_Left);&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ElDB(X)Tree  ==&lt;br /&gt;
=== How could I display images in an Item if I've stored image's indexes in a database field? ===&lt;br /&gt;
:1. Set TElDBXTree.ShowImages = True &amp;lt;br&amp;gt;&lt;br /&gt;
:2. Assign list of images (TImageList, TElImageList etc) to TElDBXTree.Images (and TElDBXTree.Images2 if you need it) properties &amp;lt;br&amp;gt;&lt;br /&gt;
:3. Open TElDBXTree.StylesDefs property in Object Inspector and choice &amp;quot;Table field&amp;quot; radiobutton in &amp;quot;Item images&amp;quot; radiogroup. It enforce setting Item.ImagesFromBase property to True for items. &amp;lt;br&amp;gt;&lt;br /&gt;
:4. Set data fields, where values for 1st (and 2st) image indexes was stored (look at Normal and State combos). &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hereon you should see images on the left side of the item's text. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How to make the sorted column drawn with an special background color ===&lt;br /&gt;
There are several ways to reach it. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:1) you may use OnSortEnd event to set custom style to each cell&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ex:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
procedure TForm1.ElXTree1SortEnd(Sender: TObject);&lt;br /&gt;
var&lt;br /&gt;
  i, j: integer;&lt;br /&gt;
begin&lt;br /&gt;
  for j := 0 to ElXTree1.Items.Count - 1 do&lt;br /&gt;
  begin&lt;br /&gt;
    for i := 0 to ElXTree1.HeaderSections.Count - 1 do&lt;br /&gt;
    begin&lt;br /&gt;
      ElXTree1.Items.Item[j].Cells[i].UseOwnStyle := True;&lt;br /&gt;
      if (i = ElXTree1.SortSection) and&lt;br /&gt;
       (ElXTree1.HeaderSections.Sections[ElXTree1.SortSection].SortMode &amp;lt;&amp;gt; hsmNone)&lt;br /&gt;
      then&lt;br /&gt;
      begin&lt;br /&gt;
        ElXTree1.Items.Item[j].Cells[i].Style.CellBackGroundColor := clMoneyGreen;&lt;br /&gt;
        ElXTree1.Items.Item[j].Cells[i].Style.ParentColors := false;&lt;br /&gt;
        ElXTree1.Items.Item[j].Cells[i].Style.UseBackGroundColor := true;&lt;br /&gt;
      end&lt;br /&gt;
      else&lt;br /&gt;
      begin&lt;br /&gt;
        ElXTree1.Items.Item[j].Cells[i].Style.CellBackGroundColor := clWhite;&lt;br /&gt;
        ElXTree1.Items.Item[j].Cells[i].Style.ParentColors := false;&lt;br /&gt;
        ElXTree1.Items.Item[j].Cells[i].Style.UseBackGroundColor := true;&lt;br /&gt;
      end;&lt;br /&gt;
    end;&lt;br /&gt;
  end;&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:2) you may use the cascading property of style to reach the same effect:&amp;lt;br&amp;gt;&lt;br /&gt;
ex:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
procedure TForm1.FormCreate(Sender: TObject);&lt;br /&gt;
var&lt;br /&gt;
  i, j: integer;&lt;br /&gt;
begin&lt;br /&gt;
// create test tree with 5 items. set custom colors in cells but not activate it&lt;br /&gt;
  for j := 0 to 5 do&lt;br /&gt;
  begin&lt;br /&gt;
    ElXTree1.Items.AddChild(nil,'Item'+Inttostr(j));&lt;br /&gt;
    ElXTree1.Items.Item[j].Cells[1].Text := Inttostr(j);&lt;br /&gt;
    for i := 0 to ElXTree1.HeaderSections.Count - 1 do&lt;br /&gt;
    begin&lt;br /&gt;
      ElXTree1.Items.Item[j].Cells[i].UseOwnStyle := True;&lt;br /&gt;
      ElXTree1.Items.Item[j].Cells[i].Style.CellBackGroundColor := clMoneyGreen;&lt;br /&gt;
      ElXTree1.Items.Item[j].Cells[i].Style.ParentColors := true;&lt;br /&gt;
    end;&lt;br /&gt;
  end;&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
procedure TForm1.ElXTree1SortEnd(Sender: TObject);&lt;br /&gt;
var&lt;br /&gt;
  i, j: integer;&lt;br /&gt;
begin&lt;br /&gt;
// in this procedure we activate using own colors for cells in sorted section&lt;br /&gt;
  for j := 0 to ElXTree1.Items.Count - 1 do&lt;br /&gt;
  begin&lt;br /&gt;
    for i := 0 to ElXTree1.HeaderSections.Count - 1 do&lt;br /&gt;
    begin&lt;br /&gt;
      if (i = ElXTree1.SortSection) and&lt;br /&gt;
       (ElXTree1.HeaderSections.Sections[ElXTree1.SortSection].SortMode &amp;lt;&amp;gt; hsmNone) &lt;br /&gt;
      then&lt;br /&gt;
        ElXTree1.Items.Item[j].Cells[i].Style.ParentColors := false&lt;br /&gt;
      else&lt;br /&gt;
        ElXTree1.Items.Item[j].Cells[i].Style.ParentColors := true;&lt;br /&gt;
    end;&lt;br /&gt;
  end;&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:3) if the tree contains a lot of items more optimized to set colors in OnItemPreDraw event:&amp;lt;br&amp;gt;&lt;br /&gt;
ex:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
procedure TForm1.ElXTree1ItemPreDraw(Sender: TObject; Item: TElXTreeItem);&lt;br /&gt;
var&lt;br /&gt;
  i: integer;&lt;br /&gt;
begin&lt;br /&gt;
  for i := 0 to ElXTree1.HeaderSections.Count - 1 do&lt;br /&gt;
  begin&lt;br /&gt;
    Item.Cells[i].UseOwnStyle := True;&lt;br /&gt;
    if (i = ElXTree1.SortSection) and&lt;br /&gt;
       (ElXTree1.HeaderSections.Sections[ElXTree1.SortSection].SortMode &amp;lt;&amp;gt; hsmNone)&lt;br /&gt;
    then&lt;br /&gt;
    begin&lt;br /&gt;
      Item.Cells[i].Style.CellBackGroundColor := clMoneyGreen;&lt;br /&gt;
      Item.Cells[i].Style.ParentColors := false;&lt;br /&gt;
      Item.Cells[i].Style.UseBackGroundColor := true;&lt;br /&gt;
    end&lt;br /&gt;
    else&lt;br /&gt;
    begin&lt;br /&gt;
      Item.Cells[i].Style.CellBackGroundColor := clWhite;&lt;br /&gt;
      Item.Cells[i].Style.ParentColors := false;&lt;br /&gt;
      Item.Cells[i].Style.UseBackGroundColor := true;&lt;br /&gt;
    end;&lt;br /&gt;
  end;&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
: 3a) ... or use virtual mode of tree &amp;lt;br&amp;gt;&lt;br /&gt;
[ Please look examle of virtual tree in our demo]&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>	</entry>

	<entry>
		<id>https://wiki.lmd.de/index.php?title=MediaWiki:Sidebar&amp;diff=1500</id>
		<title>MediaWiki:Sidebar</title>
		<link rel="alternate" type="text/html" href="https://wiki.lmd.de/index.php?title=MediaWiki:Sidebar&amp;diff=1500"/>
				<updated>2006-11-28T15:57:37Z</updated>
		
		<summary type="html">&lt;p&gt;Wikiadmin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* navigation&lt;br /&gt;
** mainpage|mainpage&lt;br /&gt;
** portal-url|portal&lt;br /&gt;
** http://bts.lmd.de |BTS&lt;br /&gt;
** recentchanges-url|recentchanges&lt;br /&gt;
** helppage|help&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>	</entry>

	<entry>
		<id>https://wiki.lmd.de/index.php?title=MediaWiki:Sidebar&amp;diff=1499</id>
		<title>MediaWiki:Sidebar</title>
		<link rel="alternate" type="text/html" href="https://wiki.lmd.de/index.php?title=MediaWiki:Sidebar&amp;diff=1499"/>
				<updated>2006-11-28T15:55:37Z</updated>
		
		<summary type="html">&lt;p&gt;Wikiadmin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* navigation&lt;br /&gt;
** mainpage|mainpage&lt;br /&gt;
** portal-url|portal&lt;br /&gt;
** recentchanges-url|recentchanges&lt;br /&gt;
** helppage|help&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>	</entry>

	</feed>