Importación inicial
git-svn-id: https://192.168.0.254/svn/Componentes.Terceros.jcl@16 c37d764d-f447-7644-a108-883140d013fb
This commit is contained in:
parent
7c53c52f9e
commit
84299d30d6
1
official/1.104/Install multiple profiles.bat
Normal file
1
official/1.104/Install multiple profiles.bat
Normal file
@ -0,0 +1 @@
|
||||
Install Latest /MultipleProfiles
|
||||
20
official/1.104/Install turbo delphi.bat
Normal file
20
official/1.104/Install turbo delphi.bat
Normal file
@ -0,0 +1,20 @@
|
||||
@echo off
|
||||
|
||||
echo Launching JCL installer...
|
||||
|
||||
start .\bin\JediInstaller.exe %2 %3 %4 %5 %6 %7 %8 %9
|
||||
if ERRORLEVEL 1 goto FailStart
|
||||
goto FINI
|
||||
|
||||
:FailStart
|
||||
.\bin\JediInstaller.exe %2 %3 %4 %5 %6 %7 %8 %9
|
||||
goto FINI
|
||||
|
||||
:FailedCompile
|
||||
echo.
|
||||
echo.
|
||||
echo An error occured while compiling the installer. Installation aborted.
|
||||
echo.
|
||||
pause
|
||||
|
||||
:FINI
|
||||
42
official/1.104/Install.bat
Normal file
42
official/1.104/Install.bat
Normal file
@ -0,0 +1,42 @@
|
||||
@echo off
|
||||
|
||||
SET DELPHIVERSION=%1
|
||||
|
||||
cd install
|
||||
|
||||
::jpp prototypes
|
||||
|
||||
..\devtools\jpp.exe -c -dVCL -dMSWINDOWS -uVisualCLX -uUnix -uKYLIX -xVclGui\ prototypes\JediGUIMain.pas
|
||||
if ERRORLEVEL 1 goto FailedCompile
|
||||
..\devtools\jpp.exe -c -dVCL -dMSWINDOWS -uVisualCLX -uUnix -uKYLIX -xVclGui\ prototypes\JediGUIReadme.pas
|
||||
if ERRORLEVEL 1 goto FailedCompile
|
||||
..\devtools\jpp.exe -c -dVCL -dMSWINDOWS -uVisualCLX -uUnix -uKYLIX -xVclGui\ prototypes\JediGUIInstall.pas
|
||||
if ERRORLEVEL 1 goto FailedCompile
|
||||
|
||||
|
||||
:: compile installer
|
||||
|
||||
build\dcc32ex.exe --runtime-package-rtl --runtime-package-vcl --preserve-config -q -w -dJCLINSTALL -E..\bin -I..\source\include -U..\source\common;..\source\windows JediInstaller.dpr
|
||||
if ERRORLEVEL 1 goto FailedCompile
|
||||
|
||||
|
||||
echo Launching JCL installer...
|
||||
|
||||
start ..\bin\JediInstaller.exe %2 %3 %4 %5 %6 %7 %8 %9
|
||||
if ERRORLEVEL 1 goto FailStart
|
||||
goto FINI
|
||||
|
||||
:FailStart
|
||||
..\bin\JediInstaller.exe %2 %3 %4 %5 %6 %7 %8 %9
|
||||
goto FINI
|
||||
|
||||
:FailedCompile
|
||||
echo.
|
||||
echo.
|
||||
echo An error occured while compiling the installer. Installation aborted.
|
||||
echo.
|
||||
pause
|
||||
|
||||
:FINI
|
||||
cd ..
|
||||
SET DELPHIVERSION=
|
||||
71
official/1.104/Install.txt
Normal file
71
official/1.104/Install.txt
Normal file
@ -0,0 +1,71 @@
|
||||
JEDI Code Library v 1.104 Installation
|
||||
|
||||
Supported development tools versions:
|
||||
|
||||
- Delphi 2009 and C++Builder 2009
|
||||
- CodeGear RAD Studio 2007 (also known as Delphi 2007 for Win32, C++Builder 2007)
|
||||
- Borland Developer Studio 2006 (also known as Delphi 2006, C++Builder 2006)
|
||||
- Borland Kylix 3
|
||||
- Borland Delphi 7
|
||||
- Borland Delphi 6 Update Pack #2 (including Personal Edition)
|
||||
- Borland Delphi 5 Update Pack #1
|
||||
- Borland C++ Builder 6
|
||||
- Borland C++ Builder 5
|
||||
|
||||
For more detailed information, see docs\Readme.html.
|
||||
|
||||
Please make sure you have installed latest update packs. You can download them
|
||||
from CodeGear Support web page:
|
||||
|
||||
Delphi: http://support.codegear.com/delphi
|
||||
C++Builder: http://support.codegear.com/cppbuilder
|
||||
|
||||
******************************* IMPORTANT **************************************
|
||||
* *
|
||||
* If you have installed any previous version of the JCL/JVCL you have to *
|
||||
* delete them. *
|
||||
* *
|
||||
* *
|
||||
* It is also necessary to remove all installed JCL/JVCL packages from the IDE. *
|
||||
* Do not mix files or compiled packages from older versions of the JCL with *
|
||||
* current version. *
|
||||
* *
|
||||
********************************************************************************
|
||||
|
||||
JEDI INSTALLER
|
||||
==============
|
||||
|
||||
Helps you to integrate JCL with Delphi/BCB IDE. Currently it assists with:
|
||||
|
||||
- Compiling library units (release and debug versions)
|
||||
- Compiling packages and installing design-time packages to the IDE
|
||||
- Adding sample JCL Debug extension dialogs to Object Repository
|
||||
- Adding JCL directories to Library Path / Browsing Path in Environment Options
|
||||
- Adding JCL debug .dcu directory to Debug DCU Path in Debugger Options
|
||||
- Integrating JCL help file to the IDE.
|
||||
- in undoing above changes to the IDE settings ("Uninstall", new in 1.94 final).
|
||||
|
||||
To execute for
|
||||
|
||||
1) Win32
|
||||
- click on "Install.bat" file in the JCL root directory.
|
||||
|
||||
Note: If you have Delphi 8 for Microsoft .NET installed, you probably will have
|
||||
to specify the root directory of the make.exe to use for JCL installation;
|
||||
on the commandline, type (for example):
|
||||
|
||||
>install "C:\Program Files\Borland\Delphi5"
|
||||
|
||||
or
|
||||
|
||||
>install d5
|
||||
|
||||
2) Kylix 3
|
||||
- open a shell window
|
||||
- cd into JCL root directory
|
||||
- at the command prompt, type "sh ./install.sh", then press "Enter".
|
||||
You'll also need to do a "source kylixpath" first (see the README of your
|
||||
Kylix 3 installation) in case your system is not set up to do that at startup.
|
||||
|
||||
--------------------------------
|
||||
Document last updated 2009-01-21
|
||||
42
official/1.104/LICENSE-BZIP2.txt
Normal file
42
official/1.104/LICENSE-BZIP2.txt
Normal file
@ -0,0 +1,42 @@
|
||||
|
||||
--------------------------------------------------------------------------
|
||||
|
||||
This program, "bzip2", the associated library "libbzip2", and all
|
||||
documentation, are copyright (C) 1996-2007 Julian R Seward. All
|
||||
rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions
|
||||
are met:
|
||||
|
||||
1. Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
|
||||
2. The origin of this software must not be misrepresented; you must
|
||||
not claim that you wrote the original software. If you use this
|
||||
software in a product, an acknowledgment in the product
|
||||
documentation would be appreciated but is not required.
|
||||
|
||||
3. Altered source versions must be plainly marked as such, and must
|
||||
not be misrepresented as being the original software.
|
||||
|
||||
4. The name of the author may not be used to endorse or promote
|
||||
products derived from this software without specific prior written
|
||||
permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
|
||||
OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
|
||||
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
||||
GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
Julian Seward, jseward@bzip.org
|
||||
bzip2/libbzip2 version 1.0.5 of 10 December 2007
|
||||
|
||||
--------------------------------------------------------------------------
|
||||
34
official/1.104/LICENSE-DRYICONS.txt
Normal file
34
official/1.104/LICENSE-DRYICONS.txt
Normal file
@ -0,0 +1,34 @@
|
||||
DryIcons Free License Agreement
|
||||
|
||||
Read Full Legal Code
|
||||
|
||||
DryIcons is a service provided by our team of enthusiastic graphic and web designers and programmers. The purpose of this service is to provide only high-quality, free icons and free icon sets, as well as free vector graphics to the general public, with a specific target to designers, software and web developers.
|
||||
All DryIcons' Works (meaning "icons, icon sets and graphics") are free of charge, but please read further under what Terms and Conditions.
|
||||
All DryIcons Works are licensed under a DryIcons Free License. This means that you can use our icons, icon sets and graphics in any publicly accessible web site, web application or any form of presentation publicly accessible through the World Wide Web only according to the DryIcons Free License Terms and Conditions:
|
||||
|
||||
* You must put a back link with credits to http://dryicons.com on every page where DryIcons' Works are used (example: Icons by DryIcons);
|
||||
* You must include the correct back link to DryIcons website, which is: http://dryicons.com;
|
||||
* You must place the link on an easy-to-see, recognizable place, so there is no confusion about the Original Author of the Works (DryIcons);
|
||||
* When copying, or paraphrasing description text (or title) on one of the Works, you must make sure there are no spelling mistakes;
|
||||
* Do not try to take credit or imply in any way that you and not DryIcons is the Original Author of the Licensed Material (icons, icon sets and graphics).
|
||||
|
||||
What you CAN DO:
|
||||
|
||||
1. All DryIcons' Works are being provided to You under the Terms of this agreement, which allows for use of our Works but does not transfer ownership. All DryIcons' Works remain property of DryIcons;
|
||||
2. You may use DryIcons' Works in any personal or commercial project unlimited number of times according to the DryIcons Free License Terms and Conditions;
|
||||
3. You may use DryIcons' Works in any Open Source project and application according to the DryIcons Free License Terms and Conditions;
|
||||
4. Your rights to DryIcons' Works are worldwide and for the duration of DryIcons' rights in the Works;
|
||||
5. Any uses other than the ones mentioned above must be approved by DryIcons in writing;
|
||||
6. Unauthorized use will result in immediate termination of this License, and with it, your rights to use DryIcons' Works.
|
||||
|
||||
What you CAN NOT DO:
|
||||
|
||||
1. You may not alter, crop, modify, manipulate and create derivative works of DryIcons' Works. All Works must be used "AS IS";
|
||||
2. You may not redistribute, license, sell, lease, assign, convey or transfer DryIcons' Works, or offer free downloads in their present form or in a modified form to any third party;
|
||||
3. You may not distribute the DryIcons' Works (icons, icon sets and graphics) online in a downloadable format or enable them to be distributed via mobile devices. You may link to http://dryicons.com instead;
|
||||
4. You may not incorporate DryIcons' Works into a logo, trademark or service mark;
|
||||
5. You may not use DryIcons' Works directly from dryicons.com or any other location hosted on the dryicons.com domain or any other domain owned by DryIcons.
|
||||
|
||||
Copyright
|
||||
|
||||
1. DryIcons.com reserves the copyrights and ownership rights of all DryIcons' Works downloaded from this website. We reserve the right to change parts of this License without notice and at our sole discretion.
|
||||
68
official/1.104/LICENSE-PCRE.txt
Normal file
68
official/1.104/LICENSE-PCRE.txt
Normal file
@ -0,0 +1,68 @@
|
||||
PCRE LICENCE
|
||||
------------
|
||||
|
||||
PCRE is a library of functions to support regular expressions whose syntax
|
||||
and semantics are as close as possible to those of the Perl 5 language.
|
||||
|
||||
Release 7 of PCRE is distributed under the terms of the "BSD" licence, as
|
||||
specified below. The documentation for PCRE, supplied in the "doc"
|
||||
directory, is distributed under the same terms as the software itself.
|
||||
|
||||
The basic library functions are written in C and are freestanding. Also
|
||||
included in the distribution is a set of C++ wrapper functions.
|
||||
|
||||
|
||||
THE BASIC LIBRARY FUNCTIONS
|
||||
---------------------------
|
||||
|
||||
Written by: Philip Hazel
|
||||
Email local part: ph10
|
||||
Email domain: cam.ac.uk
|
||||
|
||||
University of Cambridge Computing Service,
|
||||
Cambridge, England.
|
||||
|
||||
Copyright (c) 1997-2008 University of Cambridge
|
||||
All rights reserved.
|
||||
|
||||
|
||||
THE C++ WRAPPER FUNCTIONS
|
||||
-------------------------
|
||||
|
||||
Contributed by: Google Inc.
|
||||
|
||||
Copyright (c) 2007-2008, Google Inc.
|
||||
All rights reserved.
|
||||
|
||||
|
||||
THE "BSD" LICENCE
|
||||
-----------------
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright notice,
|
||||
this list of conditions and the following disclaimer.
|
||||
|
||||
* Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
|
||||
* Neither the name of the University of Cambridge nor the name of Google
|
||||
Inc. nor the names of their contributors may be used to endorse or
|
||||
promote products derived from this software without specific prior
|
||||
written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
End
|
||||
57
official/1.104/LICENSE-SEVENZIP.txt
Normal file
57
official/1.104/LICENSE-SEVENZIP.txt
Normal file
@ -0,0 +1,57 @@
|
||||
7-Zip
|
||||
~~~~~
|
||||
License for use and distribution
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
7-Zip Copyright (C) 1999-2008 Igor Pavlov.
|
||||
|
||||
Licenses for files are:
|
||||
|
||||
1) 7z.dll: GNU LGPL + unRAR restriction
|
||||
2) All other files: GNU LGPL
|
||||
|
||||
The GNU LGPL + unRAR restriction means that you must follow both
|
||||
GNU LGPL rules and unRAR restriction rules.
|
||||
|
||||
|
||||
Note:
|
||||
You can use 7-Zip on any computer, including a computer in a commercial
|
||||
organization. You don't need to register or pay for 7-Zip.
|
||||
|
||||
|
||||
GNU LGPL information
|
||||
--------------------
|
||||
|
||||
This library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 of the License, or (at your option) any later version.
|
||||
|
||||
This library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with this library; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
|
||||
|
||||
unRAR restriction
|
||||
-----------------
|
||||
|
||||
The decompression engine for RAR archives was developed using source
|
||||
code of unRAR program.
|
||||
All copyrights to original unRAR code are owned by Alexander Roshal.
|
||||
|
||||
The license for original unRAR code has the following restriction:
|
||||
|
||||
The unRAR sources cannot be used to re-create the RAR compression algorithm,
|
||||
which is proprietary. Distribution of modified unRAR sources in separate form
|
||||
or as a part of other software is permitted, provided that it is clearly
|
||||
stated in the documentation and source comments that the code may
|
||||
not be used to develop a RAR (WinRAR) compatible archiver.
|
||||
|
||||
|
||||
--
|
||||
Igor Pavlov
|
||||
25
official/1.104/LICENSE-ZLIB.txt
Normal file
25
official/1.104/LICENSE-ZLIB.txt
Normal file
@ -0,0 +1,25 @@
|
||||
/* zlib.h -- interface of the 'zlib' general purpose compression library
|
||||
version 1.2.3, July 18th, 2005
|
||||
|
||||
Copyright (C) 1995-2005 Jean-loup Gailly and Mark Adler
|
||||
|
||||
This software is provided 'as-is', without any express or implied
|
||||
warranty. In no event will the authors be held liable for any damages
|
||||
arising from the use of this software.
|
||||
|
||||
Permission is granted to anyone to use this software for any purpose,
|
||||
including commercial applications, and to alter it and redistribute it
|
||||
freely, subject to the following restrictions:
|
||||
|
||||
1. The origin of this software must not be misrepresented; you must not
|
||||
claim that you wrote the original software. If you use this software
|
||||
in a product, an acknowledgment in the product documentation would be
|
||||
appreciated but is not required.
|
||||
2. Altered source versions must be plainly marked as such, and must not be
|
||||
misrepresented as being the original software.
|
||||
3. This notice may not be removed or altered from any source distribution.
|
||||
|
||||
Jean-loup Gailly jloup@gzip.org
|
||||
Mark Adler madler@alumni.caltech.edu
|
||||
|
||||
*/
|
||||
470
official/1.104/LICENSE.txt
Normal file
470
official/1.104/LICENSE.txt
Normal file
@ -0,0 +1,470 @@
|
||||
MOZILLA PUBLIC LICENSE
|
||||
Version 1.1
|
||||
|
||||
---------------
|
||||
|
||||
1. Definitions.
|
||||
|
||||
1.0.1. "Commercial Use" means distribution or otherwise making the
|
||||
Covered Code available to a third party.
|
||||
|
||||
1.1. "Contributor" means each entity that creates or contributes to
|
||||
the creation of Modifications.
|
||||
|
||||
1.2. "Contributor Version" means the combination of the Original
|
||||
Code, prior Modifications used by a Contributor, and the Modifications
|
||||
made by that particular Contributor.
|
||||
|
||||
1.3. "Covered Code" means the Original Code or Modifications or the
|
||||
combination of the Original Code and Modifications, in each case
|
||||
including portions thereof.
|
||||
|
||||
1.4. "Electronic Distribution Mechanism" means a mechanism generally
|
||||
accepted in the software development community for the electronic
|
||||
transfer of data.
|
||||
|
||||
1.5. "Executable" means Covered Code in any form other than Source
|
||||
Code.
|
||||
|
||||
1.6. "Initial Developer" means the individual or entity identified
|
||||
as the Initial Developer in the Source Code notice required by Exhibit
|
||||
A.
|
||||
|
||||
1.7. "Larger Work" means a work which combines Covered Code or
|
||||
portions thereof with code not governed by the terms of this License.
|
||||
|
||||
1.8. "License" means this document.
|
||||
|
||||
1.8.1. "Licensable" means having the right to grant, to the maximum
|
||||
extent possible, whether at the time of the initial grant or
|
||||
subsequently acquired, any and all of the rights conveyed herein.
|
||||
|
||||
1.9. "Modifications" means any addition to or deletion from the
|
||||
substance or structure of either the Original Code or any previous
|
||||
Modifications. When Covered Code is released as a series of files, a
|
||||
Modification is:
|
||||
A. Any addition to or deletion from the contents of a file
|
||||
containing Original Code or previous Modifications.
|
||||
|
||||
B. Any new file that contains any part of the Original Code or
|
||||
previous Modifications.
|
||||
|
||||
1.10. "Original Code" means Source Code of computer software code
|
||||
which is described in the Source Code notice required by Exhibit A as
|
||||
Original Code, and which, at the time of its release under this
|
||||
License is not already Covered Code governed by this License.
|
||||
|
||||
1.10.1. "Patent Claims" means any patent claim(s), now owned or
|
||||
hereafter acquired, including without limitation, method, process,
|
||||
and apparatus claims, in any patent Licensable by grantor.
|
||||
|
||||
1.11. "Source Code" means the preferred form of the Covered Code for
|
||||
making modifications to it, including all modules it contains, plus
|
||||
any associated interface definition files, scripts used to control
|
||||
compilation and installation of an Executable, or source code
|
||||
differential comparisons against either the Original Code or another
|
||||
well known, available Covered Code of the Contributor's choice. The
|
||||
Source Code can be in a compressed or archival form, provided the
|
||||
appropriate decompression or de-archiving software is widely available
|
||||
for no charge.
|
||||
|
||||
1.12. "You" (or "Your") means an individual or a legal entity
|
||||
exercising rights under, and complying with all of the terms of, this
|
||||
License or a future version of this License issued under Section 6.1.
|
||||
For legal entities, "You" includes any entity which controls, is
|
||||
controlled by, or is under common control with You. For purposes of
|
||||
this definition, "control" means (a) the power, direct or indirect,
|
||||
to cause the direction or management of such entity, whether by
|
||||
contract or otherwise, or (b) ownership of more than fifty percent
|
||||
(50%) of the outstanding shares or beneficial ownership of such
|
||||
entity.
|
||||
|
||||
2. Source Code License.
|
||||
|
||||
2.1. The Initial Developer Grant.
|
||||
The Initial Developer hereby grants You a world-wide, royalty-free,
|
||||
non-exclusive license, subject to third party intellectual property
|
||||
claims:
|
||||
(a) under intellectual property rights (other than patent or
|
||||
trademark) Licensable by Initial Developer to use, reproduce,
|
||||
modify, display, perform, sublicense and distribute the Original
|
||||
Code (or portions thereof) with or without Modifications, and/or
|
||||
as part of a Larger Work; and
|
||||
|
||||
(b) under Patents Claims infringed by the making, using or
|
||||
selling of Original Code, to make, have made, use, practice,
|
||||
sell, and offer for sale, and/or otherwise dispose of the
|
||||
Original Code (or portions thereof).
|
||||
|
||||
(c) the licenses granted in this Section 2.1(a) and (b) are
|
||||
effective on the date Initial Developer first distributes
|
||||
Original Code under the terms of this License.
|
||||
|
||||
(d) Notwithstanding Section 2.1(b) above, no patent license is
|
||||
granted: 1) for code that You delete from the Original Code; 2)
|
||||
separate from the Original Code; or 3) for infringements caused
|
||||
by: i) the modification of the Original Code or ii) the
|
||||
combination of the Original Code with other software or devices.
|
||||
|
||||
2.2. Contributor Grant.
|
||||
Subject to third party intellectual property claims, each Contributor
|
||||
hereby grants You a world-wide, royalty-free, non-exclusive license
|
||||
|
||||
(a) under intellectual property rights (other than patent or
|
||||
trademark) Licensable by Contributor, to use, reproduce, modify,
|
||||
display, perform, sublicense and distribute the Modifications
|
||||
created by such Contributor (or portions thereof) either on an
|
||||
unmodified basis, with other Modifications, as Covered Code
|
||||
and/or as part of a Larger Work; and
|
||||
|
||||
(b) under Patent Claims infringed by the making, using, or
|
||||
selling of Modifications made by that Contributor either alone
|
||||
and/or in combination with its Contributor Version (or portions
|
||||
of such combination), to make, use, sell, offer for sale, have
|
||||
made, and/or otherwise dispose of: 1) Modifications made by that
|
||||
Contributor (or portions thereof); and 2) the combination of
|
||||
Modifications made by that Contributor with its Contributor
|
||||
Version (or portions of such combination).
|
||||
|
||||
(c) the licenses granted in Sections 2.2(a) and 2.2(b) are
|
||||
effective on the date Contributor first makes Commercial Use of
|
||||
the Covered Code.
|
||||
|
||||
(d) Notwithstanding Section 2.2(b) above, no patent license is
|
||||
granted: 1) for any code that Contributor has deleted from the
|
||||
Contributor Version; 2) separate from the Contributor Version;
|
||||
3) for infringements caused by: i) third party modifications of
|
||||
Contributor Version or ii) the combination of Modifications made
|
||||
by that Contributor with other software (except as part of the
|
||||
Contributor Version) or other devices; or 4) under Patent Claims
|
||||
infringed by Covered Code in the absence of Modifications made by
|
||||
that Contributor.
|
||||
|
||||
3. Distribution Obligations.
|
||||
|
||||
3.1. Application of License.
|
||||
The Modifications which You create or to which You contribute are
|
||||
governed by the terms of this License, including without limitation
|
||||
Section 2.2. The Source Code version of Covered Code may be
|
||||
distributed only under the terms of this License or a future version
|
||||
of this License released under Section 6.1, and You must include a
|
||||
copy of this License with every copy of the Source Code You
|
||||
distribute. You may not offer or impose any terms on any Source Code
|
||||
version that alters or restricts the applicable version of this
|
||||
License or the recipients' rights hereunder. However, You may include
|
||||
an additional document offering the additional rights described in
|
||||
Section 3.5.
|
||||
|
||||
3.2. Availability of Source Code.
|
||||
Any Modification which You create or to which You contribute must be
|
||||
made available in Source Code form under the terms of this License
|
||||
either on the same media as an Executable version or via an accepted
|
||||
Electronic Distribution Mechanism to anyone to whom you made an
|
||||
Executable version available; and if made available via Electronic
|
||||
Distribution Mechanism, must remain available for at least twelve (12)
|
||||
months after the date it initially became available, or at least six
|
||||
(6) months after a subsequent version of that particular Modification
|
||||
has been made available to such recipients. You are responsible for
|
||||
ensuring that the Source Code version remains available even if the
|
||||
Electronic Distribution Mechanism is maintained by a third party.
|
||||
|
||||
3.3. Description of Modifications.
|
||||
You must cause all Covered Code to which You contribute to contain a
|
||||
file documenting the changes You made to create that Covered Code and
|
||||
the date of any change. You must include a prominent statement that
|
||||
the Modification is derived, directly or indirectly, from Original
|
||||
Code provided by the Initial Developer and including the name of the
|
||||
Initial Developer in (a) the Source Code, and (b) in any notice in an
|
||||
Executable version or related documentation in which You describe the
|
||||
origin or ownership of the Covered Code.
|
||||
|
||||
3.4. Intellectual Property Matters
|
||||
(a) Third Party Claims.
|
||||
If Contributor has knowledge that a license under a third party's
|
||||
intellectual property rights is required to exercise the rights
|
||||
granted by such Contributor under Sections 2.1 or 2.2,
|
||||
Contributor must include a text file with the Source Code
|
||||
distribution titled "LEGAL" which describes the claim and the
|
||||
party making the claim in sufficient detail that a recipient will
|
||||
know whom to contact. If Contributor obtains such knowledge after
|
||||
the Modification is made available as described in Section 3.2,
|
||||
Contributor shall promptly modify the LEGAL file in all copies
|
||||
Contributor makes available thereafter and shall take other steps
|
||||
(such as notifying appropriate mailing lists or newsgroups)
|
||||
reasonably calculated to inform those who received the Covered
|
||||
Code that new knowledge has been obtained.
|
||||
|
||||
(b) Contributor APIs.
|
||||
If Contributor's Modifications include an application programming
|
||||
interface and Contributor has knowledge of patent licenses which
|
||||
are reasonably necessary to implement that API, Contributor must
|
||||
also include this information in the LEGAL file.
|
||||
|
||||
(c) Representations.
|
||||
Contributor represents that, except as disclosed pursuant to
|
||||
Section 3.4(a) above, Contributor believes that Contributor's
|
||||
Modifications are Contributor's original creation(s) and/or
|
||||
Contributor has sufficient rights to grant the rights conveyed by
|
||||
this License.
|
||||
|
||||
3.5. Required Notices.
|
||||
You must duplicate the notice in Exhibit A in each file of the Source
|
||||
Code. If it is not possible to put such notice in a particular Source
|
||||
Code file due to its structure, then You must include such notice in a
|
||||
location (such as a relevant directory) where a user would be likely
|
||||
to look for such a notice. If You created one or more Modification(s)
|
||||
You may add your name as a Contributor to the notice described in
|
||||
Exhibit A. You must also duplicate this License in any documentation
|
||||
for the Source Code where You describe recipients' rights or ownership
|
||||
rights relating to Covered Code. You may choose to offer, and to
|
||||
charge a fee for, warranty, support, indemnity or liability
|
||||
obligations to one or more recipients of Covered Code. However, You
|
||||
may do so only on Your own behalf, and not on behalf of the Initial
|
||||
Developer or any Contributor. You must make it absolutely clear than
|
||||
any such warranty, support, indemnity or liability obligation is
|
||||
offered by You alone, and You hereby agree to indemnify the Initial
|
||||
Developer and every Contributor for any liability incurred by the
|
||||
Initial Developer or such Contributor as a result of warranty,
|
||||
support, indemnity or liability terms You offer.
|
||||
|
||||
3.6. Distribution of Executable Versions.
|
||||
You may distribute Covered Code in Executable form only if the
|
||||
requirements of Section 3.1-3.5 have been met for that Covered Code,
|
||||
and if You include a notice stating that the Source Code version of
|
||||
the Covered Code is available under the terms of this License,
|
||||
including a description of how and where You have fulfilled the
|
||||
obligations of Section 3.2. The notice must be conspicuously included
|
||||
in any notice in an Executable version, related documentation or
|
||||
collateral in which You describe recipients' rights relating to the
|
||||
Covered Code. You may distribute the Executable version of Covered
|
||||
Code or ownership rights under a license of Your choice, which may
|
||||
contain terms different from this License, provided that You are in
|
||||
compliance with the terms of this License and that the license for the
|
||||
Executable version does not attempt to limit or alter the recipient's
|
||||
rights in the Source Code version from the rights set forth in this
|
||||
License. If You distribute the Executable version under a different
|
||||
license You must make it absolutely clear that any terms which differ
|
||||
from this License are offered by You alone, not by the Initial
|
||||
Developer or any Contributor. You hereby agree to indemnify the
|
||||
Initial Developer and every Contributor for any liability incurred by
|
||||
the Initial Developer or such Contributor as a result of any such
|
||||
terms You offer.
|
||||
|
||||
3.7. Larger Works.
|
||||
You may create a Larger Work by combining Covered Code with other code
|
||||
not governed by the terms of this License and distribute the Larger
|
||||
Work as a single product. In such a case, You must make sure the
|
||||
requirements of this License are fulfilled for the Covered Code.
|
||||
|
||||
4. Inability to Comply Due to Statute or Regulation.
|
||||
|
||||
If it is impossible for You to comply with any of the terms of this
|
||||
License with respect to some or all of the Covered Code due to
|
||||
statute, judicial order, or regulation then You must: (a) comply with
|
||||
the terms of this License to the maximum extent possible; and (b)
|
||||
describe the limitations and the code they affect. Such description
|
||||
must be included in the LEGAL file described in Section 3.4 and must
|
||||
be included with all distributions of the Source Code. Except to the
|
||||
extent prohibited by statute or regulation, such description must be
|
||||
sufficiently detailed for a recipient of ordinary skill to be able to
|
||||
understand it.
|
||||
|
||||
5. Application of this License.
|
||||
|
||||
This License applies to code to which the Initial Developer has
|
||||
attached the notice in Exhibit A and to related Covered Code.
|
||||
|
||||
6. Versions of the License.
|
||||
|
||||
6.1. New Versions.
|
||||
Netscape Communications Corporation ("Netscape") may publish revised
|
||||
and/or new versions of the License from time to time. Each version
|
||||
will be given a distinguishing version number.
|
||||
|
||||
6.2. Effect of New Versions.
|
||||
Once Covered Code has been published under a particular version of the
|
||||
License, You may always continue to use it under the terms of that
|
||||
version. You may also choose to use such Covered Code under the terms
|
||||
of any subsequent version of the License published by Netscape. No one
|
||||
other than Netscape has the right to modify the terms applicable to
|
||||
Covered Code created under this License.
|
||||
|
||||
6.3. Derivative Works.
|
||||
If You create or use a modified version of this License (which you may
|
||||
only do in order to apply it to code which is not already Covered Code
|
||||
governed by this License), You must (a) rename Your license so that
|
||||
the phrases "Mozilla", "MOZILLAPL", "MOZPL", "Netscape",
|
||||
"MPL", "NPL" or any confusingly similar phrase do not appear in your
|
||||
license (except to note that your license differs from this License)
|
||||
and (b) otherwise make it clear that Your version of the license
|
||||
contains terms which differ from the Mozilla Public License and
|
||||
Netscape Public License. (Filling in the name of the Initial
|
||||
Developer, Original Code or Contributor in the notice described in
|
||||
Exhibit A shall not of themselves be deemed to be modifications of
|
||||
this License.)
|
||||
|
||||
7. DISCLAIMER OF WARRANTY.
|
||||
|
||||
COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS,
|
||||
WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
|
||||
WITHOUT LIMITATION, WARRANTIES THAT THE COVERED CODE IS FREE OF
|
||||
DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING.
|
||||
THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED CODE
|
||||
IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT,
|
||||
YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE
|
||||
COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER
|
||||
OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF
|
||||
ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER.
|
||||
|
||||
8. TERMINATION.
|
||||
|
||||
8.1. This License and the rights granted hereunder will terminate
|
||||
automatically if You fail to comply with terms herein and fail to cure
|
||||
such breach within 30 days of becoming aware of the breach. All
|
||||
sublicenses to the Covered Code which are properly granted shall
|
||||
survive any termination of this License. Provisions which, by their
|
||||
nature, must remain in effect beyond the termination of this License
|
||||
shall survive.
|
||||
|
||||
8.2. If You initiate litigation by asserting a patent infringement
|
||||
claim (excluding declatory judgment actions) against Initial Developer
|
||||
or a Contributor (the Initial Developer or Contributor against whom
|
||||
You file such action is referred to as "Participant") alleging that:
|
||||
|
||||
(a) such Participant's Contributor Version directly or indirectly
|
||||
infringes any patent, then any and all rights granted by such
|
||||
Participant to You under Sections 2.1 and/or 2.2 of this License
|
||||
shall, upon 60 days notice from Participant terminate prospectively,
|
||||
unless if within 60 days after receipt of notice You either: (i)
|
||||
agree in writing to pay Participant a mutually agreeable reasonable
|
||||
royalty for Your past and future use of Modifications made by such
|
||||
Participant, or (ii) withdraw Your litigation claim with respect to
|
||||
the Contributor Version against such Participant. If within 60 days
|
||||
of notice, a reasonable royalty and payment arrangement are not
|
||||
mutually agreed upon in writing by the parties or the litigation claim
|
||||
is not withdrawn, the rights granted by Participant to You under
|
||||
Sections 2.1 and/or 2.2 automatically terminate at the expiration of
|
||||
the 60 day notice period specified above.
|
||||
|
||||
(b) any software, hardware, or device, other than such Participant's
|
||||
Contributor Version, directly or indirectly infringes any patent, then
|
||||
any rights granted to You by such Participant under Sections 2.1(b)
|
||||
and 2.2(b) are revoked effective as of the date You first made, used,
|
||||
sold, distributed, or had made, Modifications made by that
|
||||
Participant.
|
||||
|
||||
8.3. If You assert a patent infringement claim against Participant
|
||||
alleging that such Participant's Contributor Version directly or
|
||||
indirectly infringes any patent where such claim is resolved (such as
|
||||
by license or settlement) prior to the initiation of patent
|
||||
infringement litigation, then the reasonable value of the licenses
|
||||
granted by such Participant under Sections 2.1 or 2.2 shall be taken
|
||||
into account in determining the amount or value of any payment or
|
||||
license.
|
||||
|
||||
8.4. In the event of termination under Sections 8.1 or 8.2 above,
|
||||
all end user license agreements (excluding distributors and resellers)
|
||||
which have been validly granted by You or any distributor hereunder
|
||||
prior to termination shall survive termination.
|
||||
|
||||
9. LIMITATION OF LIABILITY.
|
||||
|
||||
UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT
|
||||
(INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL
|
||||
DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED CODE,
|
||||
OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR
|
||||
ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY
|
||||
CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL,
|
||||
WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER
|
||||
COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN
|
||||
INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF
|
||||
LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY
|
||||
RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW
|
||||
PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE
|
||||
EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO
|
||||
THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU.
|
||||
|
||||
10. U.S. GOVERNMENT END USERS.
|
||||
|
||||
The Covered Code is a "commercial item," as that term is defined in
|
||||
48 C.F.R. 2.101 (Oct. 1995), consisting of "commercial computer
|
||||
software" and "commercial computer software documentation," as such
|
||||
terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48
|
||||
C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995),
|
||||
all U.S. Government End Users acquire Covered Code with only those
|
||||
rights set forth herein.
|
||||
|
||||
11. MISCELLANEOUS.
|
||||
|
||||
This License represents the complete agreement concerning subject
|
||||
matter hereof. If any provision of this License is held to be
|
||||
unenforceable, such provision shall be reformed only to the extent
|
||||
necessary to make it enforceable. This License shall be governed by
|
||||
California law provisions (except to the extent applicable law, if
|
||||
any, provides otherwise), excluding its conflict-of-law provisions.
|
||||
With respect to disputes in which at least one party is a citizen of,
|
||||
or an entity chartered or registered to do business in the United
|
||||
States of America, any litigation relating to this License shall be
|
||||
subject to the jurisdiction of the Federal Courts of the Northern
|
||||
District of California, with venue lying in Santa Clara County,
|
||||
California, with the losing party responsible for costs, including
|
||||
without limitation, court costs and reasonable attorneys' fees and
|
||||
expenses. The application of the United Nations Convention on
|
||||
Contracts for the International Sale of Goods is expressly excluded.
|
||||
Any law or regulation which provides that the language of a contract
|
||||
shall be construed against the drafter shall not apply to this
|
||||
License.
|
||||
|
||||
12. RESPONSIBILITY FOR CLAIMS.
|
||||
|
||||
As between Initial Developer and the Contributors, each party is
|
||||
responsible for claims and damages arising, directly or indirectly,
|
||||
out of its utilization of rights under this License and You agree to
|
||||
work with Initial Developer and Contributors to distribute such
|
||||
responsibility on an equitable basis. Nothing herein is intended or
|
||||
shall be deemed to constitute any admission of liability.
|
||||
|
||||
13. MULTIPLE-LICENSED CODE.
|
||||
|
||||
Initial Developer may designate portions of the Covered Code as
|
||||
"Multiple-Licensed". "Multiple-Licensed" means that the Initial
|
||||
Developer permits you to utilize portions of the Covered Code under
|
||||
Your choice of the NPL or the alternative licenses, if any, specified
|
||||
by the Initial Developer in the file described in Exhibit A.
|
||||
|
||||
EXHIBIT A -Mozilla Public License.
|
||||
|
||||
``The contents of this file are subject to the Mozilla Public License
|
||||
Version 1.1 (the "License"); you may not use this file except in
|
||||
compliance with the License. You may obtain a copy of the License at
|
||||
http://www.mozilla.org/MPL/
|
||||
|
||||
Software distributed under the License is distributed on an "AS IS"
|
||||
basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
|
||||
License for the specific language governing rights and limitations
|
||||
under the License.
|
||||
|
||||
The Original Code is ______________________________________.
|
||||
|
||||
The Initial Developer of the Original Code is ________________________.
|
||||
Portions created by ______________________ are Copyright (C) ______
|
||||
_______________________. All Rights Reserved.
|
||||
|
||||
Contributor(s): ______________________________________.
|
||||
|
||||
Alternatively, the contents of this file may be used under the terms
|
||||
of the _____ license (the "[___] License"), in which case the
|
||||
provisions of [______] License are applicable instead of those
|
||||
above. If you wish to allow use of your version of this file only
|
||||
under the terms of the [____] License and not to allow others to use
|
||||
your version of this file under the MPL, indicate your decision by
|
||||
deleting the provisions above and replace them with the notice and
|
||||
other provisions required by the [___] License. If you do not delete
|
||||
the provisions above, a recipient may use your version of this file
|
||||
under either the MPL or the [___] License."
|
||||
|
||||
[NOTE: The text of this Exhibit A may differ slightly from the text of
|
||||
the notices in the Source Code files of the Original Code. You should
|
||||
use the text of this Exhibit A rather than the text found in the
|
||||
Original Code Source Code for Your Modifications.]
|
||||
|
||||
152
official/1.104/bin/JCL-install.ini
Normal file
152
official/1.104/bin/JCL-install.ini
Normal file
@ -0,0 +1,152 @@
|
||||
[RAD Studio 2009]
|
||||
JclJediCodeLibrary=1
|
||||
JclJCLDef=1
|
||||
JclJCLDefMath=1
|
||||
JclJCLDefDebug=0
|
||||
JclJCLDefEDI=0
|
||||
JclJCLDefPCRE=1
|
||||
JclJCLDefBZip2=1
|
||||
JclJCLDefZLib=1
|
||||
JclJCLDefUnicode=1
|
||||
JclJCLDefContainer=1
|
||||
JclJCLDef7z=1
|
||||
JclJCLDefThreadSafe=1
|
||||
JclJCLDefDropObsoleteCode=1
|
||||
JclJCLDefUnitVersioning=1
|
||||
JclJCLDefMathPrecSingle=0
|
||||
JclJCLDefMathPrecDouble=0
|
||||
JclJCLDefMathPrecExtended=1
|
||||
JclJCLDefMathExtremeValues=1
|
||||
JclJCLDefHookDllExceptions=0
|
||||
JclJCLDefDebugNoBinary=0
|
||||
JclJCLDefDebugNoTD32=0
|
||||
JclJCLDefDebugNoMap=0
|
||||
JclJCLDefDebugNoExports=0
|
||||
JclJCLDefDebugNoSymbols=0
|
||||
JclJCLDefEDIWeakPackageUnits=0
|
||||
JclJCLDefPCREStaticLink=1
|
||||
JclJCLDefPCRELinkDLL=0
|
||||
JclJCLDefPCRELinkOnRequest=0
|
||||
JclJCLDefBZip2StaticLink=1
|
||||
JclJCLDefBZip2LinkDLL=0
|
||||
JclJCLDefBZip2LinkOnRequest=0
|
||||
JclJCLDefZLibStaticLink=1
|
||||
JclJCLDefZLibLinkDLL=0
|
||||
JclJCLDefZLibLinkOnRequest=0
|
||||
JclJCLDefUnicodeSilentFailure=1
|
||||
JclJCLDefUnicodeRawData=1
|
||||
JclJCLDefUnicodeZLibData=0
|
||||
JclJCLDefUnicodeBZip2Data=0
|
||||
JclJCLDefContainerAnsiStr=0
|
||||
JclJCLDefContainerWideStr=0
|
||||
JclJCLDefContainerUnicodeStr=1
|
||||
JclJCLDefContainerNoStr=0
|
||||
JclJCLDef7zLinkDLL=0
|
||||
JclJCLDef7zLinkOnRequest=1
|
||||
JclJCLEnvironment=0
|
||||
JclJCLEnvLibPath=0
|
||||
JclJCLEnvBrowsingPath=0
|
||||
JclJCLEnvDebugDCUPath=0
|
||||
JclJCLMake=1
|
||||
JclJCLMakeRelease=1
|
||||
JclJCLMakeReleaseVClx=0
|
||||
JclJCLMakeReleaseVCL=1
|
||||
JclJCLMakeDebug=1
|
||||
JclJCLMakeDebugVClx=0
|
||||
JclJCLMakeDebugVCL=1
|
||||
JclJCLCopyHppFiles=0
|
||||
JclJCLCheckHppFiles=0
|
||||
JclJCLPackages=1
|
||||
JclJCLVclPackage=1
|
||||
JclJCLClxPackage=0
|
||||
JclJCLDualPackages=0
|
||||
JclJCLCopyPackagesHppFiles=0
|
||||
JclJCLPdbCreate=0
|
||||
JclJCLMapCreate=0
|
||||
JclJCLJdbgCreate=0
|
||||
JclJCLJdbgInsert=0
|
||||
JclJCLMapDelete=0
|
||||
JclJCLExperts=0
|
||||
JclJCLExpertsDsgnPackages=1
|
||||
JclJCLExpertsDLL=0
|
||||
JclJCLExpertDebug=0
|
||||
JclJCLExpertAnalyzer=0
|
||||
JclJCLExpertFavorite=0
|
||||
JclJCLExpertRepository=0
|
||||
JclJCLExpertThreadNames=0
|
||||
JclJCLExpertUses=0
|
||||
JclJCLExpertSimdView=0
|
||||
JclJCLExpertVersionControl=0
|
||||
JclJCLExceptDlg=0
|
||||
JclJCLExceptDlgVCL=0
|
||||
JclJCLExceptDlgVCLSnd=0
|
||||
JclJCLExceptDlgCLX=0
|
||||
JclJCLHelp=0
|
||||
JclJCLHelpHlp=0
|
||||
JclJCLHelpChm=0
|
||||
JclJCLHelpHxS=0
|
||||
JclJCLHelpHxSPlugin=0
|
||||
JclJCLMakeDemos=0
|
||||
BPL-Path=C:\jcl\lib\d12\
|
||||
DCP-Path=C:\jcl\lib\d12\
|
||||
|
||||
[RAD Studio 2009 demos]
|
||||
examples\common\containers\algorithms\AlgorithmsExample.dpr=0
|
||||
examples\windows\peimage\ApiHookExample.dpr=0
|
||||
examples\windows\appinst\AppInstExample.dpr=0
|
||||
examples\windows\compression\archive\ArchiveDemo.dpr=0
|
||||
examples\common\graphics\ClipLineDemo.dpr=0
|
||||
examples\windows\clr\ClrDemo.dpr=0
|
||||
examples\windows\ConsoleExamples.dpr=0
|
||||
examples\common\containers\performance\ContainerPerformance.dpr=0
|
||||
examples\windows\asuser\CreateProcAsUserExample.dpr=0
|
||||
examples\windows\delphitools\dependencyviewer\DependView.dpr=0
|
||||
examples\windows\edisdk\EDICOMExample.dpr=0
|
||||
examples\windows\edisdk\comserver\EDISDK.dpr=0
|
||||
examples\common\sysinfo\EnvironmentExample.dpr=0
|
||||
examples\windows\debug\reportconverter\ExceptionReportConverter.dpr=0
|
||||
examples\common\expreval\ExprEvalExample.dpr=0
|
||||
examples\common\filesearch\FileSearchDemo.dpr=0
|
||||
examples\windows\filesummary\FileSummaryExample.dpr=0
|
||||
examples\windows\debug\framestrack\FramesTrackExample.dpr=0
|
||||
examples\common\containers\hashing\HashingExample.dpr=0
|
||||
examples\windows\ntfs\JEDISoftLinks.dpr=0
|
||||
examples\windows\lanman\LanManExample.dpr=0
|
||||
examples\common\containers\lists\ListExample.dpr=0
|
||||
examples\windows\locales\LocalesExample.dpr=0
|
||||
examples\windows\mapi\MapiExample.dpr=0
|
||||
examples\common\multimedia\MidiOutExample.dpr=0
|
||||
examples\windows\multimedia\MultiMediaExample.dpr=0
|
||||
examples\windows\ntservice\NtSvcExample.dpr=0
|
||||
examples\common\numformat\NumFormatExample.dpr=0
|
||||
examples\common\pcre\PCREDemo.dpr=0
|
||||
examples\windows\peimage\PeFuncExample.dpr=0
|
||||
examples\windows\delphitools\peviewer\PeViewer.dpr=0
|
||||
examples\windows\mapi\ReadMailExample.dpr=0
|
||||
examples\windows\registry\RegistryExample.dpr=0
|
||||
examples\windows\delphitools\resfix\ResFix.dpr=0
|
||||
examples\common\rtti\RTTIExample.dpr=0
|
||||
examples\windows\delphitools\screenjpg\ScreenJPG.dpr=0
|
||||
examples\windows\appinst\SingleInstExample.dpr=0
|
||||
examples\windows\debug\sourceloc\SourceLocExample.dpr=0
|
||||
examples\windows\debug\stacktrack\StackTrackDLLsComLibrary.dpr=0
|
||||
examples\windows\debug\stacktrack\StackTrackDLLsDynamicLibrary.dpr=0
|
||||
examples\windows\debug\stacktrack\StackTrackDLLsExample.dpr=0
|
||||
examples\windows\debug\stacktrack\StackTrackDLLsStaticLibrary.dpr=0
|
||||
examples\windows\debug\stacktrack\StackTrackExample.dpr=0
|
||||
examples\common\graphics\StretchGraphicExample.dpr=0
|
||||
examples\windows\structstorage\StructStorageExample.dpr=0
|
||||
examples\windows\sysinfo\SysInfoExample.dpr=0
|
||||
examples\windows\tasks\TaskDemo.dpr=0
|
||||
examples\common\textconverter\TextConverter.dpr=0
|
||||
examples\common\textreader\TextReaderExample.dpr=0
|
||||
examples\windows\debug\threadexcept\ThreadExceptExample.dpr=0
|
||||
examples\windows\delphitools\toolhelpview\ToolHelpViewer.dpr=0
|
||||
examples\common\containers\trees\TreeExample.dpr=0
|
||||
examples\common\containers\trees\TreeStructure.dpr=0
|
||||
examples\common\unitversioning\UnitVersioningTest.dpr=0
|
||||
examples\common\unitversioning\UnitVersioningTestDLL.dpr=0
|
||||
examples\windows\peimage\UnmangleNameExample.dpr=0
|
||||
examples\windows\fileversion\VerInfoExample.dpr=0
|
||||
examples\windows\widestring\WideStringExample.dpr=0
|
||||
|
||||
BIN
official/1.104/bin/JediInstaller.exe
Normal file
BIN
official/1.104/bin/JediInstaller.exe
Normal file
Binary file not shown.
77
official/1.104/bin/RAD Studio 2009.log
Normal file
77
official/1.104/bin/RAD Studio 2009.log
Normal file
@ -0,0 +1,77 @@
|
||||
================================================================================
|
||||
JCL 1.104 Release Build 3248
|
||||
==========RAD Studio 2009=======================================================
|
||||
Installed personalities :
|
||||
32 bit Delphi
|
||||
================================================================================
|
||||
Single profile installation
|
||||
================================================================================
|
||||
Saving conditional defines...
|
||||
Loaded template for include file C:\jcl\source\include\jcl.template.inc
|
||||
Saved include file C:\jcl\source\include\jcld12.inc
|
||||
Making common library units for RAD Studio 2009
|
||||
Compiling .dcu files...
|
||||
"C:\Archivos de programa\CodeGear\RAD Studio\6.0\bin\dcc32.exe" bzip2 Jcl8087 JclAbstractContainers JclAlgorithms JclAnsiStrings JclArrayLists JclArraySets JclBase JclBinaryTrees JclBorlandTools JclComplex JclCompression JclContainerIntf JclCounter JclDateTime JclEDI JclEDISEF JclEDITranslators JclEDIXML JclEDI_ANSIX12 JclEDI_ANSIX12_Ext JclEDI_UNEDIFACT JclEDI_UNEDIFACT_Ext JclExprEval JclFileUtils JclHashMaps JclHashSets JclIniFiles JclLinkedLists JclLogic JclMath JclMIDI JclMime JclPCRE JclQueues JclResources JclRTTI JclSchedule JclSimpleXml JclSortedMaps JclStacks JclStatistics JclStreams JclStrHashMap JclStringConversions JclStringLists JclStrings JclSynch JclSysInfo JclSysUtils JclTrees JclUnicode JclUnitConv JclUnitVersioning JclUnitVersioningProviders JclValidation JclVectors JclWideStrings pcre zlibh --no-config -U"..\..\..\ARCHIV~1\codegear\RADSTU~1\6.0\lib" -M -$C- -$D- -$I- -$L- -$O+ -$Q- -$R- -$W- -$Y- -N"..\..\lib\d12" -I"..\include" -U".;..\windows;..\vcl;..\visclx" -R".;..\windows;..\vcl;..\visclx"
|
||||
CodeGear Delphi for Win32 compiler version 20.0
|
||||
Copyright (c) 1983,2008 CodeGear
|
||||
539425 lines, 4.86 seconds, 50250 bytes code, 16736 bytes data.
|
||||
Making windows library units for RAD Studio 2009
|
||||
Compiling .dcu files...
|
||||
"C:\Archivos de programa\CodeGear\RAD Studio\6.0\bin\dcc32.exe" Hardlinks JclAppInst JclCIL JclCLR JclCOM JclConsole JclDebug JclDotNet JclHookExcept JclLANMan JclLocales JclMapi JclMetadata JclMiscel JclMsdosSys JclMultimedia JclNTFS JclPeImage JclRegistry JclSecurity JclShell JclStructStorage JclSvcCtrl JclTask JclTD32 JclWideFormat JclWin32 JclWin32Ex JclWinMIDI mscoree_TLB mscorlib_TLB MSHelpServices_TLB MSTask sevenzip Snmp --no-config -U"..\..\..\ARCHIV~1\codegear\RADSTU~1\6.0\lib" -M -$C- -$D- -$I- -$L- -$O+ -$Q- -$R- -$W- -$Y- -N"..\..\lib\d12" -I"..\include" -U"..\common;.;..\vcl;..\visclx" -R"..\common;.;..\vcl;..\visclx"
|
||||
CodeGear Delphi for Win32 compiler version 20.0
|
||||
Copyright (c) 1983,2008 CodeGear
|
||||
189148 lines, 1.88 seconds, 2448 bytes code, 164 bytes data.
|
||||
Making vcl library units for RAD Studio 2009
|
||||
Compiling .dcu files...
|
||||
"C:\Archivos de programa\CodeGear\RAD Studio\6.0\bin\dcc32.exe" JclFont JclGraphics JclGraphUtils JclPrint JclVersionControl JclVersionCtrlCVSImpl JclVersionCtrlSVNImpl --no-config -U"..\..\..\ARCHIV~1\codegear\RADSTU~1\6.0\lib" -M -$C- -$D- -$I- -$L- -$O+ -$Q- -$R- -$W- -$Y- -N"..\..\lib\d12" -I"..\include" -U"..\common;..\windows;.;..\visclx" -R"..\common;..\windows;.;..\visclx"
|
||||
CodeGear Delphi for Win32 compiler version 20.0
|
||||
Copyright (c) 1983,2008 CodeGear
|
||||
25539 lines, 0.69 seconds, 4364 bytes code, 36 bytes data.
|
||||
Making common library debug units for RAD Studio 2009
|
||||
Compiling .dcu files...
|
||||
"C:\Archivos de programa\CodeGear\RAD Studio\6.0\bin\dcc32.exe" bzip2 Jcl8087 JclAbstractContainers JclAlgorithms JclAnsiStrings JclArrayLists JclArraySets JclBase JclBinaryTrees JclBorlandTools JclComplex JclCompression JclContainerIntf JclCounter JclDateTime JclEDI JclEDISEF JclEDITranslators JclEDIXML JclEDI_ANSIX12 JclEDI_ANSIX12_Ext JclEDI_UNEDIFACT JclEDI_UNEDIFACT_Ext JclExprEval JclFileUtils JclHashMaps JclHashSets JclIniFiles JclLinkedLists JclLogic JclMath JclMIDI JclMime JclPCRE JclQueues JclResources JclRTTI JclSchedule JclSimpleXml JclSortedMaps JclStacks JclStatistics JclStreams JclStrHashMap JclStringConversions JclStringLists JclStrings JclSynch JclSysInfo JclSysUtils JclTrees JclUnicode JclUnitConv JclUnitVersioning JclUnitVersioningProviders JclValidation JclVectors JclWideStrings pcre zlibh --no-config -U"..\..\..\ARCHIV~1\codegear\RADSTU~1\6.0\lib" -M -$C+ -$D+ -$I+ -$L+ -$O- -$Q+ -$R+ -$W+ -$Y+ -N"..\..\lib\d12\debug" -I"..\include" -U".;..\windows;..\vcl;..\visclx" -R".;..\windows;..\vcl;..\visclx"
|
||||
CodeGear Delphi for Win32 compiler version 20.0
|
||||
Copyright (c) 1983,2008 CodeGear
|
||||
540180 lines, 5.01 seconds, 50418 bytes code, 16736 bytes data.
|
||||
Making windows library debug units for RAD Studio 2009
|
||||
Compiling .dcu files...
|
||||
"C:\Archivos de programa\CodeGear\RAD Studio\6.0\bin\dcc32.exe" Hardlinks JclAppInst JclCIL JclCLR JclCOM JclConsole JclDebug JclDotNet JclHookExcept JclLANMan JclLocales JclMapi JclMetadata JclMiscel JclMsdosSys JclMultimedia JclNTFS JclPeImage JclRegistry JclSecurity JclShell JclStructStorage JclSvcCtrl JclTask JclTD32 JclWideFormat JclWin32 JclWin32Ex JclWinMIDI mscoree_TLB mscorlib_TLB MSHelpServices_TLB MSTask sevenzip Snmp --no-config -U"..\..\..\ARCHIV~1\codegear\RADSTU~1\6.0\lib" -M -$C+ -$D+ -$I+ -$L+ -$O- -$Q+ -$R+ -$W+ -$Y+ -N"..\..\lib\d12\debug" -I"..\include" -U"..\common;.;..\vcl;..\visclx" -R"..\common;.;..\vcl;..\visclx"
|
||||
CodeGear Delphi for Win32 compiler version 20.0
|
||||
Copyright (c) 1983,2008 CodeGear
|
||||
189148 lines, 2.06 seconds, 2585 bytes code, 164 bytes data.
|
||||
Making vcl library debug units for RAD Studio 2009
|
||||
Compiling .dcu files...
|
||||
"C:\Archivos de programa\CodeGear\RAD Studio\6.0\bin\dcc32.exe" JclFont JclGraphics JclGraphUtils JclPrint JclVersionControl JclVersionCtrlCVSImpl JclVersionCtrlSVNImpl --no-config -U"..\..\..\ARCHIV~1\codegear\RADSTU~1\6.0\lib" -M -$C+ -$D+ -$I+ -$L+ -$O- -$Q+ -$R+ -$W+ -$Y+ -N"..\..\lib\d12\debug" -I"..\include" -U"..\common;..\windows;.;..\visclx" -R"..\common;..\windows;.;..\visclx"
|
||||
CodeGear Delphi for Win32 compiler version 20.0
|
||||
Copyright (c) 1983,2008 CodeGear
|
||||
25539 lines, 0.61 seconds, 4650 bytes code, 36 bytes data.
|
||||
Compiling package C:\jcl\packages\d12\Jcl.dpk...
|
||||
Cleaning package cache for Jcl120.bpl
|
||||
Cleaning ok
|
||||
Compiling package C:\jcl\packages\d12\Jcl.dpk
|
||||
"C:\Archivos de programa\CodeGear\RAD Studio\6.0\bin\dcc32.exe" "C:\jcl\packages\d12\Jcl.dpk" --no-config -U"..\..\..\ARCHIV~1\codegear\RADSTU~1\6.0\lib" -N"..\..\lib\d12" -I"..\..\lib\d12;..\..\source\include" -R"..\..\lib\d12;..\..\source\include" -DRELEASE;$(DCC_Define) -U"..\..\lib\d12;..\..\..\DOCUME~1\ALLUSE~1\DOCUME~1\RADSTU~1\6.0\dcp;..\..\lib\d12;..\..\source\include" -LN"..\..\lib\d12" -LE"..\..\lib\d12"
|
||||
CodeGear Delphi for Win32 compiler version 20.0
|
||||
Copyright (c) 1983,2008 CodeGear
|
||||
128 lines, 0.67 seconds, 1358076 bytes code, 675596 bytes data.
|
||||
Compilation success
|
||||
...done.
|
||||
Compiling package C:\jcl\packages\d12\JclContainers.dpk...
|
||||
Cleaning package cache for JclContainers120.bpl
|
||||
Cleaning ok
|
||||
Compiling package C:\jcl\packages\d12\JclContainers.dpk
|
||||
"C:\Archivos de programa\CodeGear\RAD Studio\6.0\bin\dcc32.exe" "C:\jcl\packages\d12\JclContainers.dpk" --no-config -U"..\..\..\ARCHIV~1\codegear\RADSTU~1\6.0\lib" -N"..\..\lib\d12" -I"..\..\lib\d12;..\..\source\include" -R"..\..\lib\d12;..\..\source\include" -DRELEASE;$(DCC_Define) -U"..\..\lib\d12;..\..\..\DOCUME~1\ALLUSE~1\DOCUME~1\RADSTU~1\6.0\dcp;..\..\lib\d12;..\..\source\include" -LN"..\..\lib\d12" -LE"..\..\lib\d12"
|
||||
CodeGear Delphi for Win32 compiler version 20.0
|
||||
Copyright (c) 1983,2008 CodeGear
|
||||
62 lines, 0.78 seconds, 1460836 bytes code, 816 bytes data.
|
||||
Compilation success
|
||||
...done.
|
||||
Compiling package C:\jcl\packages\d12\JclVcl.dpk...
|
||||
Cleaning package cache for JclVcl120.bpl
|
||||
Cleaning ok
|
||||
Compiling package C:\jcl\packages\d12\JclVcl.dpk
|
||||
"C:\Archivos de programa\CodeGear\RAD Studio\6.0\bin\dcc32.exe" "C:\jcl\packages\d12\JclVcl.dpk" --no-config -U"..\..\..\ARCHIV~1\codegear\RADSTU~1\6.0\lib" -N"..\..\lib\d12" -I"..\..\lib\d12;..\..\source\include" -R"..\..\lib\d12;..\..\source\include" -DRELEASE;$(DCC_Define) -U"..\..\lib\d12;..\..\..\DOCUME~1\ALLUSE~1\DOCUME~1\RADSTU~1\6.0\dcp;..\..\lib\d12;..\..\source\include" -LN"..\..\lib\d12" -LE"..\..\lib\d12"
|
||||
CodeGear Delphi for Win32 compiler version 20.0
|
||||
Copyright (c) 1983,2008 CodeGear
|
||||
57 lines, 0.25 seconds, 90620 bytes code, 1612 bytes data.
|
||||
Compilation success
|
||||
...done.
|
||||
1
official/1.104/bin/dirinfo.txt
Normal file
1
official/1.104/bin/dirinfo.txt
Normal file
@ -0,0 +1 @@
|
||||
This directory is intended as a common place for sample application's EXE files
|
||||
16
official/1.104/clean.bat
Normal file
16
official/1.104/clean.bat
Normal file
@ -0,0 +1,16 @@
|
||||
@echo cleaning...
|
||||
@REM do not delete precompiled installer
|
||||
@for %%f in (bin\*.exe) do @if not %%f==bin\JediInstaller.exe if not %%f==bin\QJediInstaller.exe (del %%f)
|
||||
@del /f /s *.~* *.bk bin\*.dll *.a *.bpi *.dcp *.dcu *.dpu *.hpp *.jdbg *.map *.o
|
||||
@cd lib
|
||||
@del /f /s *.obj *.res *.lib *.bpi
|
||||
@cd ..
|
||||
@cd examples
|
||||
@del /f /s *.cfg
|
||||
@cd ..
|
||||
@cd experts
|
||||
@del /f /s *.cfg
|
||||
@cd ..
|
||||
@cd packages
|
||||
@del /f /s *.cfg *.local *.identcache *.rsp
|
||||
@cd..
|
||||
12
official/1.104/clean.sh
Normal file
12
official/1.104/clean.sh
Normal file
@ -0,0 +1,12 @@
|
||||
#!/bin/bash
|
||||
|
||||
rm -f `find -name \*~`
|
||||
rm -f `find -name *.~*`
|
||||
rm -f `find -name *.a`
|
||||
rm -f `find -name *.bpi`
|
||||
rm -f `find -name *.dcp`
|
||||
rm -f `find -name *.dcu`
|
||||
rm -f `find -name *.dpu`
|
||||
rm -f `find -name *.hpp`
|
||||
rm -f `find -name *.o`
|
||||
rm -f packages/k?/*.mak
|
||||
19
official/1.104/devtools/included_files.bat
Normal file
19
official/1.104/devtools/included_files.bat
Normal file
@ -0,0 +1,19 @@
|
||||
rem shell script to create templates
|
||||
|
||||
copy ..\source\include\jcl.template.inc ..\source\include\jclc5.inc
|
||||
copy ..\source\include\jcl.template.inc ..\source\include\jclc6.inc
|
||||
copy ..\source\include\jcl.template.inc ..\source\include\jclkc3.inc
|
||||
copy ..\source\include\jcl.template.inc ..\source\include\jclkd3.inc
|
||||
copy ..\source\include\jcl.template.inc ..\source\include\jcld5.inc
|
||||
copy ..\source\include\jcl.template.inc ..\source\include\jcld6.inc
|
||||
copy ..\source\include\jcl.template.inc ..\source\include\jcld7.inc
|
||||
copy ..\source\include\jcl.template.inc ..\source\include\jclcs1.inc
|
||||
copy ..\source\include\jcl.template.inc ..\source\include\jcld8.inc
|
||||
copy ..\source\include\jcl.template.inc ..\source\include\jcld9.inc
|
||||
copy ..\source\include\jcl.template.inc ..\source\include\jcld9.net.inc
|
||||
copy ..\source\include\jcl.template.inc ..\source\include\jcld10.inc
|
||||
copy ..\source\include\jcl.template.inc ..\source\include\jcld10.net.inc
|
||||
copy ..\source\include\jcl.template.inc ..\source\include\jcld11.inc
|
||||
copy ..\source\include\jcl.template.inc ..\source\include\jcld11.net.inc
|
||||
copy ..\source\include\jcl.template.inc ..\source\include\jcld12.inc
|
||||
|
||||
21
official/1.104/devtools/included_files.sh
Normal file
21
official/1.104/devtools/included_files.sh
Normal file
@ -0,0 +1,21 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# shell script to create templates
|
||||
|
||||
cp ../source/include/jcl.template.inc ../source/include/jclc5.inc
|
||||
cp ../source/include/jcl.template.inc ../source/include/jclc6.inc
|
||||
cp ../source/include/jcl.template.inc ../source/include/jclkc3.inc
|
||||
cp ../source/include/jcl.template.inc ../source/include/jclkd3.inc
|
||||
cp ../source/include/jcl.template.inc ../source/include/jcld5.inc
|
||||
cp ../source/include/jcl.template.inc ../source/include/jcld6.inc
|
||||
cp ../source/include/jcl.template.inc ../source/include/jcld7.inc
|
||||
cp ../source/include/jcl.template.inc ../source/include/jclcs1.inc
|
||||
cp ../source/include/jcl.template.inc ../source/include/jcld8.inc
|
||||
cp ../source/include/jcl.template.inc ../source/include/jcld9.inc
|
||||
cp ../source/include/jcl.template.inc ../source/include/jcld9.net.inc
|
||||
cp ../source/include/jcl.template.inc ../source/include/jcld10.inc
|
||||
cp ../source/include/jcl.template.inc ../source/include/jcld10.net.inc
|
||||
cp ../source/include/jcl.template.inc ../source/include/jcld11.inc
|
||||
cp ../source/include/jcl.template.inc ../source/include/jcld11.net.inc
|
||||
cp ../source/include/jcl.template.inc ../source/include/jcld12.inc
|
||||
|
||||
BIN
official/1.104/devtools/jpp
Normal file
BIN
official/1.104/devtools/jpp
Normal file
Binary file not shown.
BIN
official/1.104/devtools/jpp.exe
Normal file
BIN
official/1.104/devtools/jpp.exe
Normal file
Binary file not shown.
BIN
official/1.104/devtools/pgEdit.exe
Normal file
BIN
official/1.104/devtools/pgEdit.exe
Normal file
Binary file not shown.
107
official/1.104/devtools/pgEdit.xml
Normal file
107
official/1.104/devtools/pgEdit.xml
Normal file
@ -0,0 +1,107 @@
|
||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
<Configuration>
|
||||
<!-- These are the values stored by jaxStore -->
|
||||
<pgEdit/>
|
||||
<!--
|
||||
The nodes below are read by the generation process.
|
||||
Packages are generated according to a model. The models are defined
|
||||
below and contain generic informations such as the prefix, the format,
|
||||
the location of packages and the location of the include file that
|
||||
contains conditional directives (only used for BCB)
|
||||
Then each model defines Targets and Aliases as described below:
|
||||
|
||||
First, the targets:
|
||||
|
||||
The format of each target node is:
|
||||
name dir pname pdir env ver defines
|
||||
|
||||
name The name of the target, compulsory
|
||||
dir The directory where to generate the packages. Defaults to name
|
||||
pname The name of the associated Perso target. A perso target
|
||||
is the target that will be considered to allow the generation
|
||||
of a different package for a version of the target that do not
|
||||
support some features (Database generally). Leave empty if there
|
||||
are no reason to use this feature.
|
||||
pdir The directory for the associated perso target. Defaults to pname
|
||||
env A character to identify the development environment. Defaults to
|
||||
the first character of name
|
||||
ver A character to identify the version of the environment. Defaults
|
||||
to the second character of name
|
||||
defines A comma separated string to indicate which Conditional
|
||||
Compilation symbols are defined as the result of using this
|
||||
target so that your include file can enclose some $DEFINE in
|
||||
$IFDEF that relate to the compiler being used
|
||||
PathSep Indicates which character is to be used as a path separator for
|
||||
the target. If not specified, this value defaults to "\"
|
||||
IsClx If set to 1 (True), then the target is a CLX target
|
||||
|
||||
Then aliases:
|
||||
|
||||
The format for each alias node is:
|
||||
name value
|
||||
|
||||
name the name of the alias
|
||||
value the comma separated list of targets this alias will expand to.
|
||||
No recursion is done. You don't have to specify the 'all' alias,
|
||||
it will be derived from the target list. If you defined some Perso
|
||||
target, do not forget to include them in the value for your alias
|
||||
|
||||
Finally, CLX filename replacements (see accompanying doc for more details)
|
||||
|
||||
The format for each filename node is:
|
||||
original replacement
|
||||
|
||||
original the prefix to be replaced in file names
|
||||
replacement the value to use as a replacement
|
||||
|
||||
Be careful, all properties of the model node must exist and the targets and
|
||||
aliases children must exist too. If there is no target specified, none will
|
||||
be available.
|
||||
-->
|
||||
<models>
|
||||
<Model format="%p%n" name="JCL" prefix="Jcl" packages="..\packages" incfile="" nolibsuffixformat="%p%n%e%v0" dotnetprefix="Jedi.Jcl">
|
||||
<targets>
|
||||
<target name="c5"/>
|
||||
<target name="c6"/>
|
||||
<target name="d5"/>
|
||||
<target name="d6"/>
|
||||
<target name="d7"/>
|
||||
<target name="d8" IsBds="1"/>
|
||||
<target name="cs1" IsBds="1"/>
|
||||
<target name="d9" IsBds="1"/>
|
||||
<target name="d10" IsBds="1"/>
|
||||
<target name="k3" PathSep="/"/>
|
||||
<target name="d9.net" IsDotNet="1"/>
|
||||
<target name="d10.net" IsDotNet="1"/>
|
||||
<target name="d11" IsBds="1"/>
|
||||
<target name="d11.net" IsDotNet="1"/>
|
||||
<target name="d12" IsBds="1"/>
|
||||
</targets>
|
||||
<aliases>
|
||||
<alias name="Delphi" value="d5,d6,d7,d9,d10,d11,d12"/>
|
||||
<alias name="Bcb" value="c5,c6,d10,d11,d12"/>
|
||||
<alias name="Kylix" value="k3"/>
|
||||
<alias name="Windows" value="c5,c6,d5,d6,d7,d9,d10,d11,d12"/>
|
||||
<alias name="Linux" value="k3"/>
|
||||
<alias name="WinDev" value="c5,c6,d5,d6,d7,d8,d9,d10,cs1,d11,d12"/>
|
||||
<alias name="JclDev" value="c5,c6,d5,d6,d7,d8,d9,d10,k3,cs1,d11,d12"/>
|
||||
<alias name="DelphiDev" value="d5,d6,d7,d8,d9,d10,d11,d12"/>
|
||||
<alias name="WinLibSuffix" value="c6,d6,d7,d8,d9,d10,cs1,d11,d12"/>
|
||||
<alias name="allLibSuffix" value="c6,d6,d7,d8,d9,d10,k3,cs1,d11,d12"/>
|
||||
<alias name="allv12up" value="d12"/>
|
||||
<alias name="noLibSuffix" value="c5,d5"/>
|
||||
<alias name="Clx" value="c6,d6,d7,k3"/>
|
||||
<alias name="Vcl" value="c5,d5,c6,d6,d7,d9,d10,d11,d12"/>
|
||||
<alias name="Bds" value="cs1,d8,d9,d10,d11,d12"/>
|
||||
<alias name="JclDotNet" value="d9.net,d10.net,d11.net"/>
|
||||
<alias name="OldStyleIDE" value="c5,c6,d5,d6,d7"/>
|
||||
</aliases>
|
||||
<ProjectProperties>
|
||||
<ProjectProperty name="VersionMajorNumber" value="1"/>
|
||||
<ProjectProperty name="VersionMinorNumber" value="104"/>
|
||||
<ProjectProperty name="ReleaseNumber" value="1"/>
|
||||
<ProjectProperty name="BuildNumber" value="3248"/>
|
||||
</ProjectProperties>
|
||||
</Model>
|
||||
</models>
|
||||
</Configuration>
|
||||
33
official/1.104/docs/Contacting authors.html
Normal file
33
official/1.104/docs/Contacting authors.html
Normal file
@ -0,0 +1,33 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
||||
<html><head>
|
||||
<link rel="stylesheet" href="..%5CDclStyle.css">
|
||||
<title>Contacting authors</title></head>
|
||||
<body>
|
||||
<h1>Contacting authors</h1>
|
||||
<p>
|
||||
The JEDI Code Library is built upon donations by various individuals. In the
|
||||
documentation for each subroutine or class you will find who the author of that
|
||||
particular code is by looking in the "Quick Info" section. The author's e-mail
|
||||
is not listed there. It is listed in the contributors page elsewhere in this
|
||||
document. Therefore if you really need to contact an author it is possible. However,
|
||||
generically speaking, you should <b>never contact an author</b> regarding code included
|
||||
in this library. There are various reasons for this with the two most prominent
|
||||
being that some authors explicitly requested this and because "author" means
|
||||
different things in different context. Usually "author" means that the described
|
||||
code was donated to the JCL by that individual and included after reformatting and
|
||||
only minor modifications. However, sometimes code was significantly altered,
|
||||
rewritten several times or 'merely' based upon or inspired by code from that
|
||||
individual. Consequently there exist several routines which in no way resemble
|
||||
the original code as it was donated by the "author". Nevertheless, the individual
|
||||
that orginally donated the code is still documented as the author.
|
||||
</p><p>
|
||||
In general, if you like some routine very much and it has proven to work correctly:
|
||||
be grateful to the author (in thought, not by sending him or her an e-mail). On
|
||||
the other hand, if some routine turns out to be buggy, incorrect or for whatever
|
||||
reason is not to your liking: complain to me. It was most likely we who screwed
|
||||
it up and introduced those bugs into code that was working perfectly until we got
|
||||
our hands on it! To report bugs, use Project JEDI's
|
||||
<a href="http://homepages.borland.com/jedi/issuetracker/">Issue Tracker</a>.
|
||||
|
||||
</p><div class="footer">Built on Saturday, November 24, 2007</div>
|
||||
</body></html>
|
||||
398
official/1.104/docs/Contributors.html
Normal file
398
official/1.104/docs/Contributors.html
Normal file
@ -0,0 +1,398 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
||||
<html><head>
|
||||
|
||||
|
||||
<link rel="stylesheet" href="..%5CDclStyle.css">
|
||||
|
||||
|
||||
<title>JCL Contributors (code donators)</title></head>
|
||||
|
||||
<body>
|
||||
|
||||
|
||||
<h2>Contributors</h2>
|
||||
|
||||
|
||||
<p>
|
||||
Following is a list of all people that donated, or gave permission to use their,
|
||||
code in the JEDI Code Library. Be sure that you read the Contacting Authors page
|
||||
in the JCL helpfile before contacting these people. Note that JCL is continously
|
||||
in development and by far not all donations have been processed yet. We're not
|
||||
even half way! Therefore it is very well possible that you donated code but it's
|
||||
not in the JCL yet. However, if you're name is not in the list below then it's
|
||||
likely that something has gone wrong. In that event, please
|
||||
<a href="mailto:jcl@delphi-jedi.org?subject=JCL%20Donations">contact us</a>.
|
||||
</p>
|
||||
|
||||
|
||||
<p>
|
||||
|
||||
<table>
|
||||
|
||||
<tbody>
|
||||
<tr valign="top">
|
||||
|
||||
<td width="25%"><a href="mailto:aa@bitsmart.com">aa</a></td>
|
||||
|
||||
<td width="25%"><a href="mailto:alanglloyd@aol.com">Alan Lloyd</a></td>
|
||||
|
||||
<td width="25%">Alex Denissov</td>
|
||||
|
||||
<td width="25%"><a href="mailto:alexk@mtgroup.ru">Alex Konshin</a></td>
|
||||
|
||||
</tr>
|
||||
|
||||
<tr valign="top">
|
||||
|
||||
<td width="25%"><a href="mailto:ravnvt@chat.ru">Alexander Radchenko</a></td>
|
||||
|
||||
<td width="25%">Alexei Koudinov</td>
|
||||
|
||||
<td width="25%">Allan Lyons</td>
|
||||
|
||||
<td width="25%">Anders Melander</td>
|
||||
|
||||
</tr>
|
||||
|
||||
<tr valign="top">
|
||||
|
||||
<td width="25%"><a href="mailto:asnepvangers@users.sourceforge.net">André Snepvangers</a></td>
|
||||
|
||||
<td width="25%"><a href="mailto:ahuser@users.sourceforge.net">Andreas Hausladen</a></td>
|
||||
|
||||
<td width="25%"><a href="mailto:Jakobsche@addcom.de">Andreas Jakobsche</a></td>
|
||||
|
||||
<td width="25%"><a href="mailto:ajohnson@rpi.net.au">Angus Johnson</a></td>
|
||||
|
||||
</tr>
|
||||
|
||||
<tr valign="top">
|
||||
|
||||
<td width="25%"><a href="mailto:asteele@iafrica.com">Anthony Steele</a></td>
|
||||
|
||||
<td width="25%"><a href="mailto:azret@attglobal.net">Azret Botash</a></td>
|
||||
|
||||
<td width="25%">Barry Kelly</td>
|
||||
|
||||
<td width="25%"><a href="mailto:HBender@Ergonomics.ch">Bender Heri</a></td>
|
||||
|
||||
</tr>
|
||||
|
||||
<tr valign="top">
|
||||
|
||||
<td width="25%"><a href="mailto:bernhardberger@yahoo.de">Bernhard Berger</a></td>
|
||||
|
||||
<td width="25%"><a href="mailto:oracle@bmts.com">Bryan Coutch</a></td>
|
||||
|
||||
<td width="25%"><a href="mailto:carl@caztec.co.za">Carl Clark</a></td>
|
||||
|
||||
<td width="25%"><a href="mailto:cenon@mail.com">Cenon Del Rosario</a></td>
|
||||
|
||||
</tr>
|
||||
|
||||
<tr valign="top">
|
||||
|
||||
<td width="25%"><a href="mailto:ccalvert@inprise.com">Charlie Calvert</a></td>
|
||||
|
||||
<td width="25%">Chris Morris</td>
|
||||
|
||||
<td width="25%"><a href="mailto:christoph@lindemann.nu">Christoph Lindeman</a></td>
|
||||
<td width="25%">Clayton Collie</td>
|
||||
|
||||
</tr>
|
||||
|
||||
<tr valign="top">
|
||||
|
||||
<td width="25%"><a href="mailto:sahfs@iafrica.com">Corrie Engelbrecht</a></td>
|
||||
|
||||
<td width="25%"><a href="mailto:Cybertron_549672@yahoo.com">Cybertron_549672</a></td>
|
||||
|
||||
<td width="25%"><a href="mailto:dj@sguft.com">Daniel Møller</a></td>
|
||||
|
||||
<td width="25%"><a href="mailto:david@e.co.za">David Butler</a></td>
|
||||
|
||||
</tr>
|
||||
|
||||
<tr valign="top">
|
||||
|
||||
<td width="25%"><a href="mailto:dhervieux@Pirel.com">David Hervieux</a></td>
|
||||
|
||||
<td width="25%"><a href="mailto:deian@datecs.bg">Deian Ivanov</a></td>
|
||||
|
||||
<td width="25%"><a href="mailto:dewaldh@emsoft.co.za">Dewald Hess</a></td>
|
||||
|
||||
<td width="25%"><a href="mailto:rmaley@fenix2.dol-esa.gov">Dick Maley (Advanced Delphi Systems)</a></td>
|
||||
|
||||
</tr>
|
||||
|
||||
<tr valign="top">
|
||||
|
||||
<td width="25%"><a href="mailto:dylan@intelnet.net.gt">Dylan Thomas</a></td>
|
||||
|
||||
<td width="25%"><a href="mailto:EarlGlynn@att.net">Earl F. Glynn</a></td>
|
||||
|
||||
<td width="25%">Eric S. Fisher</td>
|
||||
|
||||
<td width="25%">Ernesto Benestante</td>
|
||||
|
||||
</tr>
|
||||
|
||||
<tr valign="top">
|
||||
|
||||
<td width="25%">ESB Consultancy</td>
|
||||
|
||||
<td width="25%"><a href="mailto:ftfarias@dialdata.com.br">Felipe de Toledo Farias</a></td>
|
||||
|
||||
<td width="25%"><a href="mailto:flier@users.sourceforge.net">Flier Lu</a></td>
|
||||
|
||||
<td width="25%"><a href="mailto:ouchet.florent@laposte.net">Florent Ouchet</a></td>
|
||||
|
||||
</tr>
|
||||
|
||||
<tr valign="top">
|
||||
|
||||
<td width="25%"><a href="mailto:hallvard.vassbotn@c2i.net">Hallvard Vassbotn</a></td>
|
||||
|
||||
<td width="25%"><a href="mailto:heinzz@users.sourceforge.net">Heinz Zastrau</a></td>
|
||||
|
||||
<td width="25%"><a href="mailto:helebor@wr.com.au">Helen Borrie</a></td>
|
||||
|
||||
<td width="25%">Heri Bender</td>
|
||||
|
||||
</tr>
|
||||
|
||||
<tr valign="top">
|
||||
|
||||
<td width="25%">Huanlin Tsai</td>
|
||||
|
||||
<td width="25%"><a href="mailto:bauer@ozm.cz">Ivo Bauer</a></td>
|
||||
|
||||
<td width="25%"><a href="mailto:Jack.Bombeeck@Onstream.com">Jack Bombeeck</a></td>
|
||||
|
||||
<td width="25%"><a href="mailto:jackb@europdonor.nl">Jack N.A. Bakker</a></td>
|
||||
|
||||
</tr>
|
||||
|
||||
<tr valign="top">
|
||||
|
||||
<td width="25%"><a href="mailto:support@jazarsoft.cjb.net">James Azarja</a></td>
|
||||
|
||||
<td width="25%">Jean Debord</td>
|
||||
|
||||
<td width="25%"><a href="mailto:cycocrew@orange.fr">Jean-Fabien Connault</a></td>
|
||||
|
||||
<td width="25%"><a href="mailto:rdm_30@users.sourceforge.net">Jean-Philippe BEMPEL</a></td>
|
||||
|
||||
</tr>
|
||||
|
||||
<tr valign="top">
|
||||
|
||||
<td width="25%">Jeroen Speldekamp</td>
|
||||
|
||||
<td width="25%"><a href="mailto:johannes.berg@gmx.net">Johannes Berg</a></td>
|
||||
|
||||
<td width="25%"><a href="mailto:jaymol@hotmail.com">John C Molyneux</a></td>
|
||||
|
||||
<td width="25%"><a href="mailto:jud.mccranie@mindspring.com">Jud McCranie</a></td>
|
||||
|
||||
</tr>
|
||||
|
||||
<tr valign="top">
|
||||
|
||||
<td width="25%"><a href="mailto:j.ferraro@netcourrier.com">Julien Ferraro</a></td>
|
||||
|
||||
<td width="25%"><a href="mailto:gallaghe@teleport.com">Kevin S. Gallagher</a></td>
|
||||
|
||||
<td width="25%"><a href="mailto:lasse@cintra.no">Lasse Vågsæther Karlsen</a></td>
|
||||
|
||||
<td width="25%">Leonard Wennekers</td>
|
||||
|
||||
</tr>
|
||||
|
||||
<tr valign="top">
|
||||
|
||||
<td width="25%"><a href="mailto:liran_shahar@hotmail.com">Liran Shahar</a></td>
|
||||
|
||||
<td width="25%"><a href="mailto:lloydk@iname.com">Lloyd Kinsella</a></td>
|
||||
|
||||
<td width="25%"><a href="mailto:lucjanl@usa.net">Lucjan Lukasik</a></td>
|
||||
|
||||
<td width="25%"><a href="mailto:mavegaart@csstelecom.nl">M.H. Avegaart</a></td>
|
||||
|
||||
</tr>
|
||||
|
||||
<tr valign="top">
|
||||
|
||||
<td width="25%"><a href="mailto:edgar@ccis.adisys.com.au">Malcolm Edgar</a></td>
|
||||
|
||||
<td width="25%"><a href="mailto:manlio@users.sourceforge.net">Manlio Laschena</a></td>
|
||||
|
||||
<td width="25%">Marc Convents</td>
|
||||
|
||||
<td width="25%"><a href="mailto:marcelb@zeelandnet.nl">Marcel Bestebroer</a></td>
|
||||
|
||||
</tr>
|
||||
|
||||
<tr valign="top">
|
||||
|
||||
<td width="25%"><a href="mailto:brakelm@bart.nl">Marcel van Brakel</a></td>
|
||||
|
||||
<td width="25%"><a href="mailto:wieczor@polbox.com">Marcin Wieczorek</a></td>
|
||||
|
||||
<td width="25%"><a href="mailto:DonLuigi@gmx.net">Marco Klemm</a></td>
|
||||
|
||||
<td width="25%"><a href="mailto:ochnap2@yahoo.com.ar">Mario R. Carro</a></td>
|
||||
|
||||
</tr>
|
||||
|
||||
<tr valign="top">
|
||||
|
||||
<td width="25%"><a href="mailto:marius@caddie.co.za">Marius le Roux</a></td>
|
||||
|
||||
<td width="25%">Mark Vaughan</td>
|
||||
|
||||
<td width="25%">Martin Kimmings</td>
|
||||
|
||||
<td width="25%">Martin Kubecka</td>
|
||||
|
||||
</tr>
|
||||
|
||||
<tr valign="top">
|
||||
|
||||
<td width="25%"><a href="mailto:nissl@dada.it">Massimo Maria Ghisalberti</a></td>
|
||||
|
||||
<td width="25%"><a href="mailto:MHamilton@bunge.com.au">Matt Hamilton</a></td>
|
||||
|
||||
<td width="25%"><a href="mailto:mthoma@users.sourceforge.net">Matthias Thoma</a></td>
|
||||
|
||||
<td width="25%"><a href="mailto:michrynn@ozemail.com.au">Michael Rynn</a></td>
|
||||
|
||||
</tr>
|
||||
|
||||
<tr valign="top">
|
||||
|
||||
<td width="25%"><a href="mailto:mschnell@bschnell.de">Michael Schnell</a></td>
|
||||
|
||||
<td width="25%"><a href="mailto:easyman@ms2.seeder.net">Michael Tsai</a></td>
|
||||
|
||||
<td width="25%">Michael Winter</td>
|
||||
|
||||
<td width="25%"><a href="mailto:public@lischke-online.de">Mike Lischke</a></td>
|
||||
|
||||
</tr>
|
||||
|
||||
<tr valign="top">
|
||||
|
||||
<td width="25%"><a href="mailto:nhodges@icss.net">Nick Hodges</a></td>
|
||||
|
||||
<td width="25%"><a href="mailto:n.haeck@simdesign.nl">Nils Haeck</a></td>
|
||||
|
||||
<td width="25%"><a href="mailto:assarbad@users.sourceforge.net">Oliver Schneider</a></td>
|
||||
|
||||
<td width="25%"><a href="mailto:obones@users.sourceforge.net">Olivier Sannier</a></td>
|
||||
|
||||
</tr>
|
||||
|
||||
<tr valign="top">
|
||||
|
||||
<td width="25%"><a href="mailto:patrick.vanlaake@ieee.org">Patrick van Laake</a></td>
|
||||
|
||||
<td width="25%"><a href="mailto:pcisar@atlas.cz">Pavel Cisar</a></td>
|
||||
|
||||
<td width="25%"><a href="mailto:pelle.liljendal@firstconcern.com">Pelle Liljendal</a></td>
|
||||
|
||||
<td width="25%"><a href="mailto:freter@gmx.net">Peter Friese</a></td>
|
||||
|
||||
</tr>
|
||||
|
||||
<tr valign="top">
|
||||
|
||||
<td width="25%"><a href="mailto:fmcmp02@kc.kzn.school.za">Peter McMahon</a></td>
|
||||
|
||||
<td width="25%"><a href="mailto:peter-panino@aon.at">Peter Panino</a></td>
|
||||
|
||||
<td width="25%"><a href="mailto:peter3@users.sourceforge.net">Peter Thörnquist</a></td>
|
||||
|
||||
<td width="25%"><a href="mailto:pvones@users.sourceforge.net">Petr Vones</a></td>
|
||||
|
||||
</tr>
|
||||
|
||||
<tr valign="top">
|
||||
|
||||
<td width="25%">Python</td>
|
||||
|
||||
<td width="25%"><a href="mailto:ralfjunker@gmx.de">Ralf Junker</a></td>
|
||||
|
||||
<td width="25%"><a href="mailto:rayspostbox3@users.sourceforge.net">Raymond Alexander</a></td>
|
||||
|
||||
<td width="25%"><a href="mailto:rikbarker@users.sourceforge.net">Rik Barker</a></td>
|
||||
|
||||
</tr>
|
||||
|
||||
<tr valign="top">
|
||||
|
||||
<td width="25%"><a href="mailto:rhlee@nwu.edu">Robert Lee</a></td>
|
||||
|
||||
<td width="25%"><a href="mailto:marquardt@users.sourceforge.net">Robert Marquardt</a></td>
|
||||
|
||||
<td width="25%"><a href="mailto:robmarsh@koit.fanz.net">Robert R. Marsh</a></td>
|
||||
|
||||
<td width="25%"><a href="mailto:Robert.Rossmair@users.sourceforge.net">Robert Rossmair</a></td>
|
||||
|
||||
</tr>
|
||||
|
||||
<tr valign="top">
|
||||
|
||||
<td width="25%"><a href="mailto:rvelthuis@gmx.de">Rudy Velthuis</a></td>
|
||||
|
||||
<td width="25%"><a href="mailto:scottprice@users.sourceforge.net">Scott Price</a></td>
|
||||
|
||||
<td width="25%"><a href="mailto:anthony@southeaster.com">SouthEaster</a></td>
|
||||
|
||||
<td width="25%"><a href="mailto:stefan_kirschner@01019freenet.de">Stefan Kirschner</a></td>
|
||||
|
||||
</tr>
|
||||
|
||||
<tr valign="top">
|
||||
|
||||
<td width="25%"><a href="mailto:sfillon@ifrance.com">Stephane Fillon</a></td>
|
||||
|
||||
<td width="25%"><a href="mailto:SterlingButts@Bigfoot.com">Sterling Butts</a></td>
|
||||
|
||||
<td width="25%"><a href="mailto:bebekis@otenet.gr">Theo Bebekis</a></td>
|
||||
|
||||
<td width="25%"><a href="mailto:tim@things.demon.co.uk">Tim Yates</a></td>
|
||||
|
||||
</tr>
|
||||
|
||||
<tr valign="top">
|
||||
|
||||
<td width="25%"><a href="mailto:tomhahn@users.sourceforge.net">Tom Hahn</a></td>
|
||||
|
||||
<td width="25%"><a href="mailto:uschuster@users.sourceforge.net">Uwe Schuster</a></td>
|
||||
|
||||
<td width="25%"><a href="mailto:jones-jr@skynet.be">Wim De Cleen</a></td>
|
||||
|
||||
<td width="25%"><a href="mailto:ygolan@netvision.net.il">Yaniv Golan</a></td>
|
||||
|
||||
</tr>
|
||||
|
||||
<tr valign="top">
|
||||
|
||||
<td width="25%"><a href="mailto:">Your name here?</a></td>
|
||||
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
</p>
|
||||
|
||||
|
||||
<p>
|
||||
</p>
|
||||
<div class="footer">Built on 2007-11-24</div>
|
||||
|
||||
|
||||
<p></p>
|
||||
|
||||
</body></html>
|
||||
116
official/1.104/docs/Contributors.txt
Normal file
116
official/1.104/docs/Contributors.txt
Normal file
@ -0,0 +1,116 @@
|
||||
aa=aa@bitsmart.com
|
||||
Alan Lloyd=alanglloyd@aol.com
|
||||
Alex Denissov=denisso@uwindsor.ca
|
||||
Alex Konshin=alexk@mtgroup.ru
|
||||
Alexander Radchenko=ravnvt@chat.ru
|
||||
Alexei Koudinov=
|
||||
Allan Lyons=
|
||||
Anders Melander=
|
||||
André Snepvangers=asnepvangers@users.sourceforge.net
|
||||
Andreas Hausladen=ahuser@users.sourceforge.net
|
||||
Andreas Jakobsche=Jakobsche@addcom.de
|
||||
Angus Johnson=ajohnson@rpi.net.au
|
||||
Anthony Steele=asteele@iafrica.com
|
||||
Azret Botash=azret@attglobal.net
|
||||
Barry Kelly=barry.j.kelly@gmail.com
|
||||
Bender Heri=HBender@Ergonomics.ch
|
||||
Bernhard Berger=bernhardberger@yahoo.de
|
||||
Bryan Coutch=oracle@bmts.com
|
||||
Carl Clark=carl@caztec.co.za
|
||||
Cenon Del Rosario=cenon@mail.com
|
||||
Charlie Calvert=ccalvert@inprise.com
|
||||
Chris Morris=
|
||||
Christoph Lindeman=christoph@lindemann.nu
|
||||
Clayton Collie=
|
||||
Corrie Engelbrecht=sahfs@iafrica.com
|
||||
Cybertron_549672=Cybertron_549672@yahoo.com
|
||||
Daniel Møller=dj@sguft.com
|
||||
David Butler=david@e.co.za
|
||||
David Hervieux=dhervieux@Pirel.com
|
||||
Deian Ivanov=deian@datecs.bg
|
||||
Dewald Hess=dewaldh@emsoft.co.za
|
||||
Dick Maley (Advanced Delphi Systems)=rmaley@fenix2.dol-esa.gov
|
||||
Dylan Thomas=dylan@intelnet.net.gt
|
||||
Earl F. Glynn=EarlGlynn@att.net
|
||||
Eric S. Fisher=
|
||||
Ernesto Benestante=
|
||||
ESB Consultancy=
|
||||
Felipe de Toledo Farias=ftfarias@dialdata.com.br
|
||||
Flier Lu=flier@users.sourceforge.net
|
||||
Florent Ouchet=ouchet.florent@laposte.net
|
||||
Hallvard Vassbotn=hallvard.vassbotn@c2i.net
|
||||
Heinz Zastrau=heinzz@users.sourceforge.net
|
||||
Helen Borrie=helebor@wr.com.au
|
||||
Heri Bender=
|
||||
Huanlin Tsai=
|
||||
Ivo Bauer=bauer@ozm.cz
|
||||
Jack Bombeeck=Jack.Bombeeck@Onstream.com
|
||||
Jack N.A. Bakker=jackb@europdonor.nl
|
||||
James Azarja=support@jazarsoft.cjb.net
|
||||
Jean Debord=
|
||||
Jean-Fabien Connault=cycocrew@orange.fr
|
||||
Jean-Philippe BEMPEL=rdm_30@users.sourceforge.net
|
||||
Jeroen Speldekamp=
|
||||
Johannes Berg=johannes.berg@gmx.net
|
||||
John C Molyneux=jaymol@hotmail.com
|
||||
Jud McCranie=jud.mccranie@mindspring.com
|
||||
Julien Ferraro=j.ferraro@netcourrier.com
|
||||
Kevin S. Gallagher=gallaghe@teleport.com
|
||||
Lasse Vågsæther Karlsen=lasse@cintra.no
|
||||
Leonard Wennekers=
|
||||
Liran Shahar=liran_shahar@hotmail.com
|
||||
Lloyd Kinsella=lloydk@iname.com
|
||||
Lucjan Lukasik=lucjanl@usa.net
|
||||
M.H. Avegaart=mavegaart@csstelecom.nl
|
||||
Malcolm Edgar=edgar@ccis.adisys.com.au
|
||||
Manlio Laschena=manlio@users.sourceforge.net
|
||||
Marc Convents=
|
||||
Marcel Bestebroer=marcelb@zeelandnet.nl
|
||||
Marcel van Brakel=brakelm@bart.nl
|
||||
Marcin Wieczorek=wieczor@polbox.com
|
||||
Marco Klemm=DonLuigi@gmx.net
|
||||
Mario R. Carro=ochnap2@yahoo.com.ar
|
||||
Marius le Roux=marius@caddie.co.za
|
||||
Mark Vaughan=
|
||||
Martin Kimmings=
|
||||
Martin Kubecka=
|
||||
Massimo Maria Ghisalberti=nissl@dada.it
|
||||
Matt Hamilton=MHamilton@bunge.com.au
|
||||
Matthias Thoma=mthoma@users.sourceforge.net
|
||||
Michael Rynn=michrynn@ozemail.com.au
|
||||
Michael Schnell=mschnell@bschnell.de
|
||||
Michael Tsai=easyman@ms2.seeder.net
|
||||
Michael Winter=
|
||||
Mike Lischke=public@lischke-online.de
|
||||
Nick Hodges=nhodges@icss.net
|
||||
Nils Haeck=n.haeck@simdesign.nl
|
||||
Oliver Schneider=assarbad@users.sourceforge.net
|
||||
Olivier Sannier=obones@users.sourceforge.net
|
||||
Patrick van Laake=patrick.vanlaake@ieee.org
|
||||
Pavel Cisar=pcisar@atlas.cz
|
||||
Pelle F. S. Liljendal=pelle.liljendal@firstconcern.com
|
||||
Peter Friese=freter@gmx.net
|
||||
Peter McMahon=fmcmp02@kc.kzn.school.za
|
||||
Peter Panino=peter-panino@aon.at
|
||||
Peter Thörnquist=peter3@users.sourceforge.net
|
||||
Petr Vones=pvones@users.sourceforge.net
|
||||
Python=
|
||||
Ralf Junker=ralfjunker@gmx.de
|
||||
Raymond Alexander=rayspostbox3@users.sourceforge.net
|
||||
Rik Barker=rikbarker@users.sourceforge.net
|
||||
Robert Lee=rhlee@nwu.edu
|
||||
Robert Marquardt=marquardt@users.sourceforge.net
|
||||
Robert R. Marsh=robmarsh@koit.fanz.net
|
||||
Robert Rossmair=Robert.Rossmair@users.sourceforge.net
|
||||
Rudy Velthuis=rvelthuis@gmx.de
|
||||
Scott Price=scottprice@users.sourceforge.net
|
||||
SouthEaster=anthony@southeaster.com
|
||||
Stefan Kirschner=stefan_kirschner@01019freenet.de
|
||||
Stephane Fillon=sfillon@ifrance.com
|
||||
Sterling Butts=SterlingButts@Bigfoot.com
|
||||
Theo Bebekis=bebekis@otenet.gr
|
||||
Tim Yates=tim@things.demon.co.uk
|
||||
Tom Hahn=tomhahn@users.sourceforge.net
|
||||
Uwe Schuster=uschuster@users.sourceforge.net
|
||||
Wim De Cleen=jones-jr@skynet.be
|
||||
Yaniv Golan=ygolan@netvision.net.il
|
||||
160
official/1.104/docs/Experts.html
Normal file
160
official/1.104/docs/Experts.html
Normal file
@ -0,0 +1,160 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
||||
<html lang="en-us">
|
||||
<head>
|
||||
<title>JEDI Code Library Release 1.103</title>
|
||||
<meta content="text/html;charset=ISO-8859-1" http-equiv="Content-Type">
|
||||
<link rel="stylesheet" type="text/css" href="styles/default.css">
|
||||
<meta content="Project JEDI" name="author">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<hr><br>
|
||||
<h1>JEDI Code Library</h1>
|
||||
<p>Release 1.104<br>
|
||||
Build 3248<br>
|
||||
21-January-2009</p>
|
||||
<hr><br>
|
||||
<h3>Content of this file</h3>
|
||||
<ul>
|
||||
<li><a href="#about">About experts</a></li>
|
||||
<li><a href="#debug">Debug Extension for JclDebug unit</a></li>
|
||||
<li><a href="#version">Version control expert</a></li>
|
||||
<li><a href="#xmm">XMM debug window</a></li>
|
||||
<li><a href="#favorites">Favorite combobox in Open/Save dialogs</a></li>
|
||||
</ul>
|
||||
<hr><br>
|
||||
<h3><a name="about">About experts</a></h3>
|
||||
<p>For Delphi 5, Delphi 6, Delphi 7, C++Builder 5 and C++Builder 6, experts can
|
||||
be installed as design time packages or dll experts. For C#Builder 1 and Delphi 8,
|
||||
experts are installed as dll experts (those products don't load design time
|
||||
packages). For Delphi 2005, Borland Developer Studio 2006 and Turbo Delphi Professional,
|
||||
experts are installed as design time packages.</p>
|
||||
<h3><a name="debug">Debug Extension for JclDebug unit</a></h3>
|
||||
<p>The <tt>experts\debug </tt>folder contains an IDE expert which
|
||||
assists to insert JCL Debug information into executable files. This can be
|
||||
useful when use source location routines from JclDebug unit. These routines
|
||||
need some kind of special information to be able provide source location for
|
||||
given address in the process. Currently there are four options to get it work:</p>
|
||||
<ol>
|
||||
<li>Generate and deploy MAP file with your executable file. The file
|
||||
is generated by the linker. It needs to be set in Project|Options
|
||||
dialog -> Linker page, Detailed checkbox.</li>
|
||||
<li>Generate and deploy JDBG file file with your executable file.
|
||||
This is binary file based on MAP file but its size is typically about
|
||||
12% of original MAP file. You can generate it by MapToJdbg tool in <tt>jcl\examples\windows\tools</tt>
|
||||
folder. The advantage over MAP file is smaller size and better security
|
||||
of the file content because it is not a plain text file and it also
|
||||
contains a checksum. The IDE expert can automatically create this file
|
||||
when the project is compiled (see below).</li>
|
||||
<li>Insert JCL Debug info into executable file. The
|
||||
size of added data is similar to JDBG file but it will be inserted
|
||||
directly into the executable file. This is probably best option because
|
||||
it combines small size of included data and no requirement of deploying
|
||||
additional files. The IDE expert can automatically insert these informations
|
||||
when the project is compiled (see below).</li>
|
||||
<li>Generate Borland TD32 debug symbols. These symbols are stored
|
||||
directly in the executable file but usually adds several megabytes so
|
||||
the file is very large. The advantage is you don't have to deploy any
|
||||
other file and it is easy to generate it by checking Include TD32 debug
|
||||
info in Linker option page.</li>
|
||||
</ol>
|
||||
<p>
|
||||
The IDE expert will add new item to IDE Project menu. For
|
||||
Delphi 5, 6 and 7 it adds 'Insert JCL Debug data' check item at the end
|
||||
of the Project menu. When the item is checked, everytime the project is
|
||||
compiled by one of following commands: Compile, Build, Compile All Projects,
|
||||
Build All Projects or Run necessary JCL debug data are automatically created
|
||||
from the detailled MAP file. The behavior of this conversion can be customized in
|
||||
the JCL options dialog (in the Tools menu of the IDE): the debug informations can
|
||||
be exported as .jdbg files or inserted in the binary file. The expert outputs a
|
||||
message in the IDE message view to display details about the data being generated.</p>
|
||||
<p>
|
||||
You can generate those debug data for packages and libraries as well
|
||||
using the expert. Each executable file in the project can use different option
|
||||
from those listed above. It is not necessary to generate any debug data for
|
||||
Borland runtime packages because the source location code can use names of exported
|
||||
functions to get procedure or method name. To get line number information for
|
||||
Borland RTL and VCL/CLX units you have to check Use Debug DCUs checkbox in
|
||||
Project|Options dialog -> Compiler tab. Unfortunately it is not
|
||||
possible to get line number information for Borland runtime packages
|
||||
because Borland does not provide detailed MAP files for them so you get
|
||||
procedure or method name only.</p>
|
||||
<p>In case you have more than one data source for an executable file by
|
||||
an accident the best one is chosen in following order:</p>
|
||||
<ol>
|
||||
<li>JCL Debug data in the executable file</li>
|
||||
<li>JDBG file</li>
|
||||
<li>Borland TD32 symbols</li>
|
||||
<li>MAP file</li>
|
||||
<li>DBG and PDB debug informations (for system DLLs)</li>
|
||||
<li>Library or Borland package export tables</li>
|
||||
</ol>
|
||||
<p>It is also possible to create JCL debug data programmatically from a MAP file
|
||||
by using MakeJclDbg command line tool in jcl\examples\windows\delphitools folder.
|
||||
This utility can either export data as a separate .jdbg file or insert them in the
|
||||
executable. You can study included makefiles which uses this tool for building
|
||||
delphitools examples.</p>
|
||||
<p>To help using JclDebug exceptional stack tracking in application
|
||||
simple dialog is provided in <tt>jcl\experts\debug\dialog</tt>folder. The dialog
|
||||
replaces standard dialog displayed by VCL or CLX application when an unhandled
|
||||
exception occurs. It has additional Detailed button showing the stack, list of
|
||||
loaded modules and other system information. By adding the dialog to the
|
||||
application exceptional stack tracking code is automatically initialized so you
|
||||
don't have to care about it. You can also turn on logging to text file by setting
|
||||
the Tag property of the dialog to '1'. There is also version for CLX
|
||||
(ClxExceptDlg) but it works on Windows only. These dialogs are intended to be added to
|
||||
Object Repository.</p>
|
||||
<p><b>Short description of getting the JclDebug functionality in your
|
||||
project:</b></p>
|
||||
<ol>
|
||||
<li>Close all running instances of Delphi
|
||||
</li>
|
||||
<li>Install JCL and IDE experts by the JCL Installer
|
||||
</li>
|
||||
<li>Run Delphi IDE and open your project
|
||||
</li>
|
||||
<li>Remove any TApplication.OnException handlers from your project(if any).
|
||||
</li>
|
||||
<li>Add new Exception Dialog by selecting File | New | Other ... |
|
||||
Delphi Projects | Delphi Files, Select 'JCL Exception Dialog for XXX' (where XXX is
|
||||
either Delphi or C++Builder depending on your project). A wizard will appear to
|
||||
configure the options for this dialog.
|
||||
</li>
|
||||
<li>Check "Project" | "Insert JCL Debug data" menu item
|
||||
</li>
|
||||
<li>Do Project | Build</li>
|
||||
</ol>
|
||||
<hr><br>
|
||||
<h3><a name="version">Version control expert</a></h3>
|
||||
<p>A new expert integrating version control systems in the IDE was added.
|
||||
It provides an integration of TortoiseCVS and TortoiseSVN inside the IDE, items
|
||||
are added in the IDE menu and buttons can be placed in IDE toolbars via the
|
||||
customize dialog, see below.</p>
|
||||
<p>A dialog-box provides configuration options for JCL experts in the Tools menu.</p>
|
||||
<p>It wraps <a href="http://tortoisecvs.sourceforge.net/">TortoiseCVS</a>
|
||||
and <a href="http://tortoisesvn.sourceforge.net/">TortoiseSVN</a> commands in
|
||||
actions that can be placed on IDE toolbars and in IDE menu.</p>
|
||||
<p>This expert requires <a href="http://tortoisecvs.sourceforge.net/">TortoiseCVS</a>
|
||||
or/and <a href="http://tortoisesvn.sourceforge.net/">TortoiseSVN</a> installed on the
|
||||
system to properly work. Please refer to these products documentations for help
|
||||
about using version control systems.</p>
|
||||
<p>The structure of the "Jcl Version" menu can be customized in the JCL options
|
||||
dialog (in the "Tools" menu).</p>
|
||||
<hr><br>
|
||||
<h3><a name="xmm">XMM debug window</a></h3>
|
||||
<p>This dialog provides enhancement to the debugger of Delphi and C++Builder regarding
|
||||
XMM registers. These registers were introduced in SSE instructions (and are still
|
||||
used in SSE2, SSE3 and SSSE3 instructions). This dialog can be displayed by clicking
|
||||
on menu View | Debug Windows | SIMD (keyboard shortcut Ctrl+Alt+D).
|
||||
It is divided in to panes following the style of the FPU window: the left pane
|
||||
displays content of registers and the right pane displays MXCSR flags. The format
|
||||
of the registers can be modified from the context. All registers and flags can be
|
||||
modified and changes will be applied to the debugged process.</p>
|
||||
<hr><br>
|
||||
<h3><a name="favorites">Favorite combobox in Open/Save dialogs</a></h3>
|
||||
<p>This expert modifies the IDE Open/Save dialogs and add a combobox to store your
|
||||
favorite directories. Items can be added and deleted using the button at the right
|
||||
of the combobox.</p>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
131
official/1.104/docs/MPL FAQ.html
Normal file
131
official/1.104/docs/MPL FAQ.html
Normal file
@ -0,0 +1,131 @@
|
||||
<HTML>
|
||||
<HEAD>
|
||||
<LINK REL="stylesheet" HREF="..\DclStyle.css">
|
||||
<TITLE>MPL FAQ</TITLE>
|
||||
</HEAD>
|
||||
<BODY>
|
||||
<P ALIGN=CENTER>
|
||||
<FONT SIZE="+2"><B>Mozilla Public License FAQ</B></FONT><BR>
|
||||
<B>Draft 1.0, 4/10/2000</B>
|
||||
</P>
|
||||
<P><HR WIDTH="20%"><P>
|
||||
Please email Comments to <A HREF="mailto:mbeck@bigfoot.com">Michael Beck</A><BR>
|
||||
For additional information, please also check the <A HREF="http://www.mozilla.com/MPL/FAQ.html">Official FAQ from Mozilla</A>
|
||||
|
||||
<H3>Author perspective</H3>
|
||||
<OL>
|
||||
<LI><B>Q:</B> Do I retain copyright once I publish source under the MPL?<BR>
|
||||
<B>A:</B> Absolutely. You still retain all your copyrights.
|
||||
<LI><B>Q:</B> Can I release the code under a different (possibly commercial type) license?<BR>
|
||||
<B>A:</B> Yes. Since you have the original copyright, you can do it, but you can do
|
||||
it only for your own code, and not for any contributions from others.
|
||||
<LI><B>Q:</B> In two years Acme, Inc. comes with a great new license, which I would love
|
||||
to use. Am I always bound to MPL for my released code?<BR>
|
||||
<B>A:</B> You can use a Dual License approach, i.e. you keep the code under MPL, and
|
||||
you add another license, e.g. GPL. The user will have then the option to use
|
||||
the one s/he prefers.<BR>
|
||||
Or, as the Initial Contributor, with the original copyright, you can release
|
||||
it under the other license. Please note: even if you release the code under
|
||||
new license, users of your original MPL-released code can continue to use
|
||||
under MPL as before.
|
||||
<LI><B>Q:</B> I think, JEDI could benefit from having cryptographic functions. I would
|
||||
like to donate some (DES, Tripple DES etc.), which are covered by patent
|
||||
rights (RSA, for example)? How should I do it?<BR>
|
||||
<B>A:</B> All contributions are "Subject to third party intellectual property (IP)
|
||||
claims." Thus, if you are aware of any patents infringements, before
|
||||
submitting make sure that you:
|
||||
<UL>
|
||||
<LI> secure the rights to use the IP in your contribution (e.g. by paying
|
||||
a fee)
|
||||
<LI> modify the code so it doesn't infringe (in our case, provide other,
|
||||
non-patented cryptographic functions)
|
||||
<LI> in a worst case scenario, if the two above are not possible, do not
|
||||
submit the code
|
||||
</UL>
|
||||
Please note: different countries may have different patents laws. Therefore
|
||||
in some countries it could be legal to use patented IP (e.g. because the
|
||||
patent expired), while in others not. Check with your local Patent Office.
|
||||
</OL>
|
||||
|
||||
<H3>User perspective</H3>
|
||||
<OL>
|
||||
<LI><B>Q:</B> Can I use the MPL code in commercial software? If yes, am I obligated to
|
||||
credit the author?<BR>
|
||||
<B>A:</B> Yes, you can use the MPL code in any commercial software. Since you have
|
||||
to include the MPL code, the credit is included in the license header.
|
||||
While not required, it is also customary to credit the author in "AboutBox".
|
||||
<LI><B>Q:</B> Must I release the source code of used components?<BR>
|
||||
<B>A:</B> Only of those covered by MPL, together with any modifications to them.
|
||||
<LI><B>Q:</B> Must I publish my apps under MPL if I used MPL licensed code (the viral aspect) ?<BR>
|
||||
<B>A:</B> No. That's the big advantage over GPL - you can use different code, mix MPL
|
||||
and commercial code, but you don't have to release either the application,
|
||||
nor the non-MPL code under MPL. Basically, what is MPL, will stay MPL,
|
||||
but it doesn't have any impact on the non-MPL code.
|
||||
<LI><B>Q:</B> If a bug in MPL licensed code renders my clients machine unbootable, who
|
||||
can I hold responsible for that?<BR>
|
||||
<B>A:</B> Nobody. You use MPL licensed code at your own risk. Since it is provided
|
||||
to you in a source code form, you can inspect it, test it, making sure that
|
||||
it does, what you want it to do.
|
||||
<LI><B>Q:</B> Must I publish modifications to MPL licensed code?<BR>
|
||||
<B>A:</B> Yes. This is one of the MPL requirements. You are getting a free source
|
||||
code, but you have to publish all modifications to the code, unless you
|
||||
have done the changes for your internal use.
|
||||
<LI><B>Q:</B> Must I publish code based on MPL licensed code under MPL?<BR>
|
||||
<B>A:</B> Yes. You cannot change the license terms. Only the Initial Developer can
|
||||
add an additional license (see dual license)
|
||||
<LI><B>Q:</B> If I subclass the MPL code, do I still have to publish the new code? After
|
||||
all I didn't modify the code at all!<BR>
|
||||
<B>A:</B> That's a tricky one. By the letter of the law, since you didn't touch the
|
||||
original code, you might claim that it is a "new" code, therefore no need
|
||||
for MPL. However, by the 'spirit of the law', Inheritance (or subclassing)
|
||||
is a modification of the functionality of a given class, and as such a
|
||||
"derived work", so even if you didn't touch the original code, you are
|
||||
still making changes.
|
||||
<LI><B>Q:</B> I am proposing a modification to a JEDI-VCL component, which has a dual
|
||||
license (MPL and GPL). This new file also needs to include a new class.
|
||||
Should the source files for the new class be put in JEDI-VCL using MPL
|
||||
with GPL dual-license or can it be put in another location and use only
|
||||
the MPL?<BR>
|
||||
<B>A:</B> The license of a file can't be changed without the consent of the copyright
|
||||
owner. And a new file derived from an existing file inherits the licensing
|
||||
from the existing file. In the case of this component, it has to stay MPL/GPL.
|
||||
<LI> I am considering using an XML parser that has being covered by the MPL v1.1
|
||||
(or alternatively the GPL) in a commercial product. I will simply use the
|
||||
DLL libraries without modification, including the necessary header files
|
||||
in my own code. When I distribute (sell) my own product I would, of course,
|
||||
need to distribute the DLL libraries as well. My questions are:
|
||||
<OL>
|
||||
<LI><B>Q1:</B> Am I correct in assuming that simply including unmodified header
|
||||
files and linking with a library covered by the MPL does not
|
||||
place any legal restrictions or obligations on my commercial
|
||||
product and its source code?<BR>
|
||||
<B>A1:</B> It places no obligations on the code YOU wrote, but there are
|
||||
still obligations for the code you included. These include
|
||||
source distribution (for included MPL code, not YOUR code),
|
||||
and some notification requirements.
|
||||
<LI><B>Q2:</B> Am I obligated to distribute the (unmodified) source code that
|
||||
produced the libraries with which I link?<BR>
|
||||
<B>A2:</B> Yes. Since you are shipping the DLL libraries with your product,
|
||||
you have to make source available for the MPL code you ship.<BR>
|
||||
<I>Note that the license also allows you to meet the distribution requirement
|
||||
by making the source available via electronic means rather than having to
|
||||
physically ship them with your product (as long as you tell your users
|
||||
where to get it). If you are using unmodified source code you could probably
|
||||
just point at the code author's server. If you did that you'd have to
|
||||
specify how users could get the exact version of the source you used,
|
||||
such as a CVS date stamp or something.<BR>
|
||||
This might be tricky -- you are responsible to make sure the source is
|
||||
available for 12 months after you ship, and there's no way of knowing
|
||||
how long the author will keep old versions around. The CVS repository
|
||||
is more of a sure bet. You could, of course, host the source on your
|
||||
own servers to be sure it'll stick around.</I>
|
||||
|
||||
<LI><B>Q3:</B> Am I obligated to make my use of the particular libraries known
|
||||
to users of my product?<BR>
|
||||
<B>A3:</B> Yes, it's spelled out in the license. You need to credit the
|
||||
source of copyrighted code that is not yours in both the product
|
||||
and its documentation.
|
||||
</OL>
|
||||
</OL>
|
||||
</BODY>
|
||||
</HTML>
|
||||
470
official/1.104/docs/MPL-1.1.txt
Normal file
470
official/1.104/docs/MPL-1.1.txt
Normal file
@ -0,0 +1,470 @@
|
||||
MOZILLA PUBLIC LICENSE
|
||||
Version 1.1
|
||||
|
||||
---------------
|
||||
|
||||
1. Definitions.
|
||||
|
||||
1.0.1. "Commercial Use" means distribution or otherwise making the
|
||||
Covered Code available to a third party.
|
||||
|
||||
1.1. "Contributor" means each entity that creates or contributes to
|
||||
the creation of Modifications.
|
||||
|
||||
1.2. "Contributor Version" means the combination of the Original
|
||||
Code, prior Modifications used by a Contributor, and the Modifications
|
||||
made by that particular Contributor.
|
||||
|
||||
1.3. "Covered Code" means the Original Code or Modifications or the
|
||||
combination of the Original Code and Modifications, in each case
|
||||
including portions thereof.
|
||||
|
||||
1.4. "Electronic Distribution Mechanism" means a mechanism generally
|
||||
accepted in the software development community for the electronic
|
||||
transfer of data.
|
||||
|
||||
1.5. "Executable" means Covered Code in any form other than Source
|
||||
Code.
|
||||
|
||||
1.6. "Initial Developer" means the individual or entity identified
|
||||
as the Initial Developer in the Source Code notice required by Exhibit
|
||||
A.
|
||||
|
||||
1.7. "Larger Work" means a work which combines Covered Code or
|
||||
portions thereof with code not governed by the terms of this License.
|
||||
|
||||
1.8. "License" means this document.
|
||||
|
||||
1.8.1. "Licensable" means having the right to grant, to the maximum
|
||||
extent possible, whether at the time of the initial grant or
|
||||
subsequently acquired, any and all of the rights conveyed herein.
|
||||
|
||||
1.9. "Modifications" means any addition to or deletion from the
|
||||
substance or structure of either the Original Code or any previous
|
||||
Modifications. When Covered Code is released as a series of files, a
|
||||
Modification is:
|
||||
A. Any addition to or deletion from the contents of a file
|
||||
containing Original Code or previous Modifications.
|
||||
|
||||
B. Any new file that contains any part of the Original Code or
|
||||
previous Modifications.
|
||||
|
||||
1.10. "Original Code" means Source Code of computer software code
|
||||
which is described in the Source Code notice required by Exhibit A as
|
||||
Original Code, and which, at the time of its release under this
|
||||
License is not already Covered Code governed by this License.
|
||||
|
||||
1.10.1. "Patent Claims" means any patent claim(s), now owned or
|
||||
hereafter acquired, including without limitation, method, process,
|
||||
and apparatus claims, in any patent Licensable by grantor.
|
||||
|
||||
1.11. "Source Code" means the preferred form of the Covered Code for
|
||||
making modifications to it, including all modules it contains, plus
|
||||
any associated interface definition files, scripts used to control
|
||||
compilation and installation of an Executable, or source code
|
||||
differential comparisons against either the Original Code or another
|
||||
well known, available Covered Code of the Contributor's choice. The
|
||||
Source Code can be in a compressed or archival form, provided the
|
||||
appropriate decompression or de-archiving software is widely available
|
||||
for no charge.
|
||||
|
||||
1.12. "You" (or "Your") means an individual or a legal entity
|
||||
exercising rights under, and complying with all of the terms of, this
|
||||
License or a future version of this License issued under Section 6.1.
|
||||
For legal entities, "You" includes any entity which controls, is
|
||||
controlled by, or is under common control with You. For purposes of
|
||||
this definition, "control" means (a) the power, direct or indirect,
|
||||
to cause the direction or management of such entity, whether by
|
||||
contract or otherwise, or (b) ownership of more than fifty percent
|
||||
(50%) of the outstanding shares or beneficial ownership of such
|
||||
entity.
|
||||
|
||||
2. Source Code License.
|
||||
|
||||
2.1. The Initial Developer Grant.
|
||||
The Initial Developer hereby grants You a world-wide, royalty-free,
|
||||
non-exclusive license, subject to third party intellectual property
|
||||
claims:
|
||||
(a) under intellectual property rights (other than patent or
|
||||
trademark) Licensable by Initial Developer to use, reproduce,
|
||||
modify, display, perform, sublicense and distribute the Original
|
||||
Code (or portions thereof) with or without Modifications, and/or
|
||||
as part of a Larger Work; and
|
||||
|
||||
(b) under Patents Claims infringed by the making, using or
|
||||
selling of Original Code, to make, have made, use, practice,
|
||||
sell, and offer for sale, and/or otherwise dispose of the
|
||||
Original Code (or portions thereof).
|
||||
|
||||
(c) the licenses granted in this Section 2.1(a) and (b) are
|
||||
effective on the date Initial Developer first distributes
|
||||
Original Code under the terms of this License.
|
||||
|
||||
(d) Notwithstanding Section 2.1(b) above, no patent license is
|
||||
granted: 1) for code that You delete from the Original Code; 2)
|
||||
separate from the Original Code; or 3) for infringements caused
|
||||
by: i) the modification of the Original Code or ii) the
|
||||
combination of the Original Code with other software or devices.
|
||||
|
||||
2.2. Contributor Grant.
|
||||
Subject to third party intellectual property claims, each Contributor
|
||||
hereby grants You a world-wide, royalty-free, non-exclusive license
|
||||
|
||||
(a) under intellectual property rights (other than patent or
|
||||
trademark) Licensable by Contributor, to use, reproduce, modify,
|
||||
display, perform, sublicense and distribute the Modifications
|
||||
created by such Contributor (or portions thereof) either on an
|
||||
unmodified basis, with other Modifications, as Covered Code
|
||||
and/or as part of a Larger Work; and
|
||||
|
||||
(b) under Patent Claims infringed by the making, using, or
|
||||
selling of Modifications made by that Contributor either alone
|
||||
and/or in combination with its Contributor Version (or portions
|
||||
of such combination), to make, use, sell, offer for sale, have
|
||||
made, and/or otherwise dispose of: 1) Modifications made by that
|
||||
Contributor (or portions thereof); and 2) the combination of
|
||||
Modifications made by that Contributor with its Contributor
|
||||
Version (or portions of such combination).
|
||||
|
||||
(c) the licenses granted in Sections 2.2(a) and 2.2(b) are
|
||||
effective on the date Contributor first makes Commercial Use of
|
||||
the Covered Code.
|
||||
|
||||
(d) Notwithstanding Section 2.2(b) above, no patent license is
|
||||
granted: 1) for any code that Contributor has deleted from the
|
||||
Contributor Version; 2) separate from the Contributor Version;
|
||||
3) for infringements caused by: i) third party modifications of
|
||||
Contributor Version or ii) the combination of Modifications made
|
||||
by that Contributor with other software (except as part of the
|
||||
Contributor Version) or other devices; or 4) under Patent Claims
|
||||
infringed by Covered Code in the absence of Modifications made by
|
||||
that Contributor.
|
||||
|
||||
3. Distribution Obligations.
|
||||
|
||||
3.1. Application of License.
|
||||
The Modifications which You create or to which You contribute are
|
||||
governed by the terms of this License, including without limitation
|
||||
Section 2.2. The Source Code version of Covered Code may be
|
||||
distributed only under the terms of this License or a future version
|
||||
of this License released under Section 6.1, and You must include a
|
||||
copy of this License with every copy of the Source Code You
|
||||
distribute. You may not offer or impose any terms on any Source Code
|
||||
version that alters or restricts the applicable version of this
|
||||
License or the recipients' rights hereunder. However, You may include
|
||||
an additional document offering the additional rights described in
|
||||
Section 3.5.
|
||||
|
||||
3.2. Availability of Source Code.
|
||||
Any Modification which You create or to which You contribute must be
|
||||
made available in Source Code form under the terms of this License
|
||||
either on the same media as an Executable version or via an accepted
|
||||
Electronic Distribution Mechanism to anyone to whom you made an
|
||||
Executable version available; and if made available via Electronic
|
||||
Distribution Mechanism, must remain available for at least twelve (12)
|
||||
months after the date it initially became available, or at least six
|
||||
(6) months after a subsequent version of that particular Modification
|
||||
has been made available to such recipients. You are responsible for
|
||||
ensuring that the Source Code version remains available even if the
|
||||
Electronic Distribution Mechanism is maintained by a third party.
|
||||
|
||||
3.3. Description of Modifications.
|
||||
You must cause all Covered Code to which You contribute to contain a
|
||||
file documenting the changes You made to create that Covered Code and
|
||||
the date of any change. You must include a prominent statement that
|
||||
the Modification is derived, directly or indirectly, from Original
|
||||
Code provided by the Initial Developer and including the name of the
|
||||
Initial Developer in (a) the Source Code, and (b) in any notice in an
|
||||
Executable version or related documentation in which You describe the
|
||||
origin or ownership of the Covered Code.
|
||||
|
||||
3.4. Intellectual Property Matters
|
||||
(a) Third Party Claims.
|
||||
If Contributor has knowledge that a license under a third party's
|
||||
intellectual property rights is required to exercise the rights
|
||||
granted by such Contributor under Sections 2.1 or 2.2,
|
||||
Contributor must include a text file with the Source Code
|
||||
distribution titled "LEGAL" which describes the claim and the
|
||||
party making the claim in sufficient detail that a recipient will
|
||||
know whom to contact. If Contributor obtains such knowledge after
|
||||
the Modification is made available as described in Section 3.2,
|
||||
Contributor shall promptly modify the LEGAL file in all copies
|
||||
Contributor makes available thereafter and shall take other steps
|
||||
(such as notifying appropriate mailing lists or newsgroups)
|
||||
reasonably calculated to inform those who received the Covered
|
||||
Code that new knowledge has been obtained.
|
||||
|
||||
(b) Contributor APIs.
|
||||
If Contributor's Modifications include an application programming
|
||||
interface and Contributor has knowledge of patent licenses which
|
||||
are reasonably necessary to implement that API, Contributor must
|
||||
also include this information in the LEGAL file.
|
||||
|
||||
(c) Representations.
|
||||
Contributor represents that, except as disclosed pursuant to
|
||||
Section 3.4(a) above, Contributor believes that Contributor's
|
||||
Modifications are Contributor's original creation(s) and/or
|
||||
Contributor has sufficient rights to grant the rights conveyed by
|
||||
this License.
|
||||
|
||||
3.5. Required Notices.
|
||||
You must duplicate the notice in Exhibit A in each file of the Source
|
||||
Code. If it is not possible to put such notice in a particular Source
|
||||
Code file due to its structure, then You must include such notice in a
|
||||
location (such as a relevant directory) where a user would be likely
|
||||
to look for such a notice. If You created one or more Modification(s)
|
||||
You may add your name as a Contributor to the notice described in
|
||||
Exhibit A. You must also duplicate this License in any documentation
|
||||
for the Source Code where You describe recipients' rights or ownership
|
||||
rights relating to Covered Code. You may choose to offer, and to
|
||||
charge a fee for, warranty, support, indemnity or liability
|
||||
obligations to one or more recipients of Covered Code. However, You
|
||||
may do so only on Your own behalf, and not on behalf of the Initial
|
||||
Developer or any Contributor. You must make it absolutely clear than
|
||||
any such warranty, support, indemnity or liability obligation is
|
||||
offered by You alone, and You hereby agree to indemnify the Initial
|
||||
Developer and every Contributor for any liability incurred by the
|
||||
Initial Developer or such Contributor as a result of warranty,
|
||||
support, indemnity or liability terms You offer.
|
||||
|
||||
3.6. Distribution of Executable Versions.
|
||||
You may distribute Covered Code in Executable form only if the
|
||||
requirements of Section 3.1-3.5 have been met for that Covered Code,
|
||||
and if You include a notice stating that the Source Code version of
|
||||
the Covered Code is available under the terms of this License,
|
||||
including a description of how and where You have fulfilled the
|
||||
obligations of Section 3.2. The notice must be conspicuously included
|
||||
in any notice in an Executable version, related documentation or
|
||||
collateral in which You describe recipients' rights relating to the
|
||||
Covered Code. You may distribute the Executable version of Covered
|
||||
Code or ownership rights under a license of Your choice, which may
|
||||
contain terms different from this License, provided that You are in
|
||||
compliance with the terms of this License and that the license for the
|
||||
Executable version does not attempt to limit or alter the recipient's
|
||||
rights in the Source Code version from the rights set forth in this
|
||||
License. If You distribute the Executable version under a different
|
||||
license You must make it absolutely clear that any terms which differ
|
||||
from this License are offered by You alone, not by the Initial
|
||||
Developer or any Contributor. You hereby agree to indemnify the
|
||||
Initial Developer and every Contributor for any liability incurred by
|
||||
the Initial Developer or such Contributor as a result of any such
|
||||
terms You offer.
|
||||
|
||||
3.7. Larger Works.
|
||||
You may create a Larger Work by combining Covered Code with other code
|
||||
not governed by the terms of this License and distribute the Larger
|
||||
Work as a single product. In such a case, You must make sure the
|
||||
requirements of this License are fulfilled for the Covered Code.
|
||||
|
||||
4. Inability to Comply Due to Statute or Regulation.
|
||||
|
||||
If it is impossible for You to comply with any of the terms of this
|
||||
License with respect to some or all of the Covered Code due to
|
||||
statute, judicial order, or regulation then You must: (a) comply with
|
||||
the terms of this License to the maximum extent possible; and (b)
|
||||
describe the limitations and the code they affect. Such description
|
||||
must be included in the LEGAL file described in Section 3.4 and must
|
||||
be included with all distributions of the Source Code. Except to the
|
||||
extent prohibited by statute or regulation, such description must be
|
||||
sufficiently detailed for a recipient of ordinary skill to be able to
|
||||
understand it.
|
||||
|
||||
5. Application of this License.
|
||||
|
||||
This License applies to code to which the Initial Developer has
|
||||
attached the notice in Exhibit A and to related Covered Code.
|
||||
|
||||
6. Versions of the License.
|
||||
|
||||
6.1. New Versions.
|
||||
Netscape Communications Corporation ("Netscape") may publish revised
|
||||
and/or new versions of the License from time to time. Each version
|
||||
will be given a distinguishing version number.
|
||||
|
||||
6.2. Effect of New Versions.
|
||||
Once Covered Code has been published under a particular version of the
|
||||
License, You may always continue to use it under the terms of that
|
||||
version. You may also choose to use such Covered Code under the terms
|
||||
of any subsequent version of the License published by Netscape. No one
|
||||
other than Netscape has the right to modify the terms applicable to
|
||||
Covered Code created under this License.
|
||||
|
||||
6.3. Derivative Works.
|
||||
If You create or use a modified version of this License (which you may
|
||||
only do in order to apply it to code which is not already Covered Code
|
||||
governed by this License), You must (a) rename Your license so that
|
||||
the phrases "Mozilla", "MOZILLAPL", "MOZPL", "Netscape",
|
||||
"MPL", "NPL" or any confusingly similar phrase do not appear in your
|
||||
license (except to note that your license differs from this License)
|
||||
and (b) otherwise make it clear that Your version of the license
|
||||
contains terms which differ from the Mozilla Public License and
|
||||
Netscape Public License. (Filling in the name of the Initial
|
||||
Developer, Original Code or Contributor in the notice described in
|
||||
Exhibit A shall not of themselves be deemed to be modifications of
|
||||
this License.)
|
||||
|
||||
7. DISCLAIMER OF WARRANTY.
|
||||
|
||||
COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS,
|
||||
WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
|
||||
WITHOUT LIMITATION, WARRANTIES THAT THE COVERED CODE IS FREE OF
|
||||
DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING.
|
||||
THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED CODE
|
||||
IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT,
|
||||
YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE
|
||||
COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER
|
||||
OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF
|
||||
ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER.
|
||||
|
||||
8. TERMINATION.
|
||||
|
||||
8.1. This License and the rights granted hereunder will terminate
|
||||
automatically if You fail to comply with terms herein and fail to cure
|
||||
such breach within 30 days of becoming aware of the breach. All
|
||||
sublicenses to the Covered Code which are properly granted shall
|
||||
survive any termination of this License. Provisions which, by their
|
||||
nature, must remain in effect beyond the termination of this License
|
||||
shall survive.
|
||||
|
||||
8.2. If You initiate litigation by asserting a patent infringement
|
||||
claim (excluding declatory judgment actions) against Initial Developer
|
||||
or a Contributor (the Initial Developer or Contributor against whom
|
||||
You file such action is referred to as "Participant") alleging that:
|
||||
|
||||
(a) such Participant's Contributor Version directly or indirectly
|
||||
infringes any patent, then any and all rights granted by such
|
||||
Participant to You under Sections 2.1 and/or 2.2 of this License
|
||||
shall, upon 60 days notice from Participant terminate prospectively,
|
||||
unless if within 60 days after receipt of notice You either: (i)
|
||||
agree in writing to pay Participant a mutually agreeable reasonable
|
||||
royalty for Your past and future use of Modifications made by such
|
||||
Participant, or (ii) withdraw Your litigation claim with respect to
|
||||
the Contributor Version against such Participant. If within 60 days
|
||||
of notice, a reasonable royalty and payment arrangement are not
|
||||
mutually agreed upon in writing by the parties or the litigation claim
|
||||
is not withdrawn, the rights granted by Participant to You under
|
||||
Sections 2.1 and/or 2.2 automatically terminate at the expiration of
|
||||
the 60 day notice period specified above.
|
||||
|
||||
(b) any software, hardware, or device, other than such Participant's
|
||||
Contributor Version, directly or indirectly infringes any patent, then
|
||||
any rights granted to You by such Participant under Sections 2.1(b)
|
||||
and 2.2(b) are revoked effective as of the date You first made, used,
|
||||
sold, distributed, or had made, Modifications made by that
|
||||
Participant.
|
||||
|
||||
8.3. If You assert a patent infringement claim against Participant
|
||||
alleging that such Participant's Contributor Version directly or
|
||||
indirectly infringes any patent where such claim is resolved (such as
|
||||
by license or settlement) prior to the initiation of patent
|
||||
infringement litigation, then the reasonable value of the licenses
|
||||
granted by such Participant under Sections 2.1 or 2.2 shall be taken
|
||||
into account in determining the amount or value of any payment or
|
||||
license.
|
||||
|
||||
8.4. In the event of termination under Sections 8.1 or 8.2 above,
|
||||
all end user license agreements (excluding distributors and resellers)
|
||||
which have been validly granted by You or any distributor hereunder
|
||||
prior to termination shall survive termination.
|
||||
|
||||
9. LIMITATION OF LIABILITY.
|
||||
|
||||
UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT
|
||||
(INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL
|
||||
DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED CODE,
|
||||
OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR
|
||||
ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY
|
||||
CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL,
|
||||
WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER
|
||||
COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN
|
||||
INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF
|
||||
LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY
|
||||
RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW
|
||||
PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE
|
||||
EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO
|
||||
THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU.
|
||||
|
||||
10. U.S. GOVERNMENT END USERS.
|
||||
|
||||
The Covered Code is a "commercial item," as that term is defined in
|
||||
48 C.F.R. 2.101 (Oct. 1995), consisting of "commercial computer
|
||||
software" and "commercial computer software documentation," as such
|
||||
terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48
|
||||
C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995),
|
||||
all U.S. Government End Users acquire Covered Code with only those
|
||||
rights set forth herein.
|
||||
|
||||
11. MISCELLANEOUS.
|
||||
|
||||
This License represents the complete agreement concerning subject
|
||||
matter hereof. If any provision of this License is held to be
|
||||
unenforceable, such provision shall be reformed only to the extent
|
||||
necessary to make it enforceable. This License shall be governed by
|
||||
California law provisions (except to the extent applicable law, if
|
||||
any, provides otherwise), excluding its conflict-of-law provisions.
|
||||
With respect to disputes in which at least one party is a citizen of,
|
||||
or an entity chartered or registered to do business in the United
|
||||
States of America, any litigation relating to this License shall be
|
||||
subject to the jurisdiction of the Federal Courts of the Northern
|
||||
District of California, with venue lying in Santa Clara County,
|
||||
California, with the losing party responsible for costs, including
|
||||
without limitation, court costs and reasonable attorneys' fees and
|
||||
expenses. The application of the United Nations Convention on
|
||||
Contracts for the International Sale of Goods is expressly excluded.
|
||||
Any law or regulation which provides that the language of a contract
|
||||
shall be construed against the drafter shall not apply to this
|
||||
License.
|
||||
|
||||
12. RESPONSIBILITY FOR CLAIMS.
|
||||
|
||||
As between Initial Developer and the Contributors, each party is
|
||||
responsible for claims and damages arising, directly or indirectly,
|
||||
out of its utilization of rights under this License and You agree to
|
||||
work with Initial Developer and Contributors to distribute such
|
||||
responsibility on an equitable basis. Nothing herein is intended or
|
||||
shall be deemed to constitute any admission of liability.
|
||||
|
||||
13. MULTIPLE-LICENSED CODE.
|
||||
|
||||
Initial Developer may designate portions of the Covered Code as
|
||||
"Multiple-Licensed". "Multiple-Licensed" means that the Initial
|
||||
Developer permits you to utilize portions of the Covered Code under
|
||||
Your choice of the NPL or the alternative licenses, if any, specified
|
||||
by the Initial Developer in the file described in Exhibit A.
|
||||
|
||||
EXHIBIT A -Mozilla Public License.
|
||||
|
||||
``The contents of this file are subject to the Mozilla Public License
|
||||
Version 1.1 (the "License"); you may not use this file except in
|
||||
compliance with the License. You may obtain a copy of the License at
|
||||
http://www.mozilla.org/MPL/
|
||||
|
||||
Software distributed under the License is distributed on an "AS IS"
|
||||
basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
|
||||
License for the specific language governing rights and limitations
|
||||
under the License.
|
||||
|
||||
The Original Code is ______________________________________.
|
||||
|
||||
The Initial Developer of the Original Code is ________________________.
|
||||
Portions created by ______________________ are Copyright (C) ______
|
||||
_______________________. All Rights Reserved.
|
||||
|
||||
Contributor(s): ______________________________________.
|
||||
|
||||
Alternatively, the contents of this file may be used under the terms
|
||||
of the _____ license (the "[___] License"), in which case the
|
||||
provisions of [______] License are applicable instead of those
|
||||
above. If you wish to allow use of your version of this file only
|
||||
under the terms of the [____] License and not to allow others to use
|
||||
your version of this file under the MPL, indicate your decision by
|
||||
deleting the provisions above and replace them with the notice and
|
||||
other provisions required by the [___] License. If you do not delete
|
||||
the provisions above, a recipient may use your version of this file
|
||||
under either the MPL or the [___] License."
|
||||
|
||||
[NOTE: The text of this Exhibit A may differ slightly from the text of
|
||||
the notices in the Source Code files of the Original Code. You should
|
||||
use the text of this Exhibit A rather than the text found in the
|
||||
Original Code Source Code for Your Modifications.]
|
||||
|
||||
406
official/1.104/docs/Readme.html
Normal file
406
official/1.104/docs/Readme.html
Normal file
@ -0,0 +1,406 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
||||
<html lang="en-us">
|
||||
<head>
|
||||
<title>JEDI Code Library Beta 1.103</title>
|
||||
<meta content="text/html;charset=ISO-8859-1" http-equiv="Content-Type">
|
||||
|
||||
|
||||
<link rel="stylesheet" type="text/css" href="styles/default.css">
|
||||
|
||||
|
||||
<meta content="Project JEDI" name="author">
|
||||
</head>
|
||||
|
||||
|
||||
<body>
|
||||
|
||||
<hr><br>
|
||||
|
||||
<h1>JEDI Code Library</h1>
|
||||
|
||||
<p>Release 1.104<br>
|
||||
Build 3248
|
||||
21-January-2009</p>
|
||||
|
||||
<hr><br>
|
||||
|
||||
<h3>Content of this file</h3>
|
||||
|
||||
<ul>
|
||||
|
||||
<li><a href="#about">About this release</a></li>
|
||||
|
||||
<li><a href="#targets">Supported tools</a></li>
|
||||
|
||||
<li><a href="#notes">Installation notes</a></li>
|
||||
|
||||
<li><a href="#manual">Manual installation</a></li>
|
||||
|
||||
<li><a href="#files">Distribution content</a></li>
|
||||
|
||||
<li><a href="#feedback">Giving your feedback</a></li>
|
||||
|
||||
<li><a href="#issues">Reporting bugs</a></li>
|
||||
|
||||
<li><a href="#releases">Downloads of stable sources</a></li>
|
||||
|
||||
<li><a href="#development">Development sources</a></li>
|
||||
|
||||
<li><a href="#contribute">Getting involved in JCL development</a></li>
|
||||
|
||||
</ul>
|
||||
|
||||
<hr><br>
|
||||
|
||||
<h3><a name="about">About this release</a></h3>
|
||||
<p>JCL release 1.104 provides an updated support for all targets (including Delphi 2009 and C++Builder 2009).</p>
|
||||
|
||||
<p>As always, multiple bugs have been fixed; for detailed change logs,
|
||||
use the facilities of our Subversion repository at Sourceforge.net
|
||||
<a href="http://sourceforge.net/projects/jcl/">http://sourceforge.net/projects/jcl/</a>
|
||||
, see below.</p>
|
||||
|
||||
<p><span style="font-weight: bold;">Head changes:</span>
|
||||
</p>
|
||||
|
||||
<ul>
|
||||
|
||||
<li>improved Unicode support for Delphi 2009 and C++Builder 2009;</li>
|
||||
<li>support for late and static binding to ZLib code;</li>
|
||||
<li>version control actions for CVS and SVN added to JCL runtime;</li>
|
||||
<li>the polynomial of CRC computations can be customized;</li>
|
||||
<li>speed improvement of TJclBufferedStream during write operations;</li>
|
||||
<li>new archive compression format provided with 7-zip: lzma, pe, elf, macho, udf, xar, mub, hfs, dmg; the wrapper has previous support for the compression and the decompression of zip, bzip2, gzip, 7z, tar and for the decompression of rar, iso, chm, deb, cab...</li>
|
||||
<li>new string conversion functions with failure detection.</li>
|
||||
|
||||
</ul>
|
||||
|
||||
<p><span style="font-weight: bold;">Important:</span>
|
||||
</p>
|
||||
|
||||
<ul>
|
||||
|
||||
<li>
|
||||
<p>Note that the package naming has changed: the same package name is used by
|
||||
all versions of the compiler supporting suffixes (C++Builder 6, Delphi 6,
|
||||
Delphi 7, C#Builder 1, Delphi 8, Delphi 2005, BDS 2006, RAD Studio 2007, Delphi 2009 and C++Builder 2009); a different suffix
|
||||
is added for each target to the BPL file name (for Delphi and C++Builder 2009, the library file is named jcl120.bpl).
|
||||
The installer tries to remove old packages. 3rd party packages requiring old DJcl* resp. CJcl* packages need to be changed
|
||||
to accomodate the new naming scheme or they will cause conflicts in the IDE at load time.</p>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<p>DCP files are now created in the lib\target subdirectory of the JCL
|
||||
installation. 3rd party packages requiring JCL packages need to have this path
|
||||
in their "browse path" option to compile.</p>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
|
||||
<p><span style="font-weight: bold;">(Windows only) Installation options:</span></p>
|
||||
|
||||
<p>Packages compiled by the JCL installer don't contain any debug
|
||||
informations to keep their size as small as possible.</p>
|
||||
|
||||
<p>The JEDI Code Library packages are required by some 3rd party packages
|
||||
(including the JEDI Visual Component Library - JVCL), the installer generates
|
||||
them if the "Packages" node is checked.</p>
|
||||
|
||||
<p>The installer can generate MAP informations for each package. These informations
|
||||
can be linked into binaries to become JCL debug data or be converted to .jdbg files.
|
||||
Once linked MAP files could be deleted. These options are subnodes of the "Packages" node.</p>
|
||||
|
||||
<p>For BDS 2006, RAD Studio 2007 and C++Builder 2009, the compiler introduced a new option to make the same packages
|
||||
available in C++, by checking the "Dual packages" option of the "Packages" node, you will be able
|
||||
to call functions of the JCL from C++ code.</p>
|
||||
|
||||
<p><span style="font-weight: bold;">.net Framework support:</span></p>
|
||||
|
||||
<p>A subset of JCL units was worked over to support Delphi.Net (Delphi 2005, BDS 2006 and RAD
|
||||
Studio 2007). The packages belong to the Jedi.Jcl namespace.</p>
|
||||
|
||||
<hr><br>
|
||||
|
||||
<h3><a name="targets">Supported Tools</a></h3>
|
||||
|
||||
<p>The JEDI Code Library can be compiled and installed in the following environments</p>
|
||||
|
||||
<p><span style="font-weight: bold;">Only runtime support:</span></p>
|
||||
|
||||
<ul>
|
||||
|
||||
<li>Kylix 3 (cf <a href="#notes">Installation notes</a>)</li>
|
||||
|
||||
</ul>
|
||||
|
||||
|
||||
<p><span style="font-weight: bold;">Only design-time support (only experts):</span></p>
|
||||
|
||||
<ul>
|
||||
|
||||
<li>C#Builder 1 (cf <a href="#notes">Installation notes</a>);</li>
|
||||
|
||||
<li>Delphi 8.net (cf <a href="#notes">Installation notes</a>);</li>
|
||||
|
||||
</ul>
|
||||
|
||||
<p><span style="font-weight: bold;">Both supports (run time and design time):</span></p>
|
||||
|
||||
<ul>
|
||||
|
||||
<li>Delphi version 5, 6, 7;</li>
|
||||
|
||||
<li>C++Builder version 5 & 6;</li>
|
||||
|
||||
<li>Delphi 2005 (Delphi.net personality);</li>
|
||||
|
||||
<li>Borland Developer Studio 2006 (Delphi for Win32, C++Builder Win32, Delphi.net and C#Builder personalities);</li>
|
||||
|
||||
<li>Turbo Delphi (explorer and professional - cf <a href="#notes">Installation notes</a>);</li>
|
||||
|
||||
<li>CodeGear RAD Studio 2007 (Delphi for Win32 and C++Builder for Win32 personalities);</li>
|
||||
|
||||
<li>Delphi 2009 and C++Builder 2009.</li>
|
||||
|
||||
</ul>
|
||||
|
||||
<hr><br>
|
||||
|
||||
<h3><a name="notes">Installation notes</a></h3>
|
||||
|
||||
<ul>
|
||||
|
||||
<li>Not every unit supports all tools. Look out for <tt>*.exc</tt>
|
||||
files in the tool-specific <tt>lib/</tt>subdirectories for a list of units
|
||||
excluded from compilation.</li>
|
||||
|
||||
<li>Kylix 3 Delphi/C++ installation is back but specific code has not been tested with the latest
|
||||
versions of the kernel. Please ensure you use the flavor of the JCL with Unix EOL.</li>
|
||||
|
||||
<li>Free Pascal (<a href="http://www.freepascal.org/">http://www.freepascal.org/</a>)
|
||||
support has not been updated for this release; most units from
|
||||
source/common should work with FP 2.0, as tests with a 2.0 beta (1.9.8)
|
||||
indicated, but this has not been verified. Note that there are no plans
|
||||
to support FP versions from the 1.0 branch.</li>
|
||||
|
||||
</ul>
|
||||
|
||||
<p><span style="font-weight: bold;">Installation for Turbo Delphi</span></p>
|
||||
|
||||
<p>The JEDI Code Library can be compiled targetting Turbo Delphi Explorer and Turbo Delphi Professional.
|
||||
Turbo Delphi Professional is recognized as BDS 2006, you have to download its command line compiler from
|
||||
CodeGear website at <a href="http://www.codegear.com/Default.aspx?tabid=160">http://www.codegear.com/Default.aspx?tabid=160</a>
|
||||
to install the full JCL on this tool.</p>
|
||||
|
||||
<p>To install the JCL targetting Turbo Delphi Explorer, consider the following checks:</p>
|
||||
|
||||
<ul>
|
||||
|
||||
<li>If you have an other supported version of Delphi/C++Builder on this computer, it should automatically be
|
||||
detected and the installer will process as usual.</li>
|
||||
|
||||
<li>If you only have Turbo Delphi Explorer (and no other tools) on the computer, the installer cannot be
|
||||
compiled. You have to use the Turbo Explorer flavor of the JCL that contains a precompiled installer. However,
|
||||
you will not be able to install any experts.</li>
|
||||
|
||||
</ul>
|
||||
|
||||
<p><span style="font-weight: bold;">Installation on C#Builder 1 and Delphi 8:</span></p>
|
||||
|
||||
<ul>
|
||||
|
||||
<li>These products cannot be used to build the JCL installer, you need an
|
||||
other supported product to install JCL experts on these products.</li>
|
||||
|
||||
<li>These products are not able to use the JCL library as a runtime library.
|
||||
You cannot write managed applications and managed packages based on the JCL.</li>
|
||||
|
||||
<li>These products are not shipped with their native compilers, you have to
|
||||
download it from codecentral (<a href="http://cc.codegear.com/">http://cc.codegear.com/</a>).
|
||||
The item (<a href="http://codecentral.codegear.com/Download.aspx?id=21333">http://codecentral.codegear.com/Download.aspx?id=21333</a>)
|
||||
contains the native compiler to be installed in Delphi 8.
|
||||
The item (<a href="http://codecentral.codegear.com/Download.aspx?id=21334">http://codecentral.codegear.com/Download.aspx?id=21334</a>)
|
||||
contains the native compiler to be installed in C#Builder 1.
|
||||
These zip files have to be extracted in the products directory using the standard pattern:</li>
|
||||
|
||||
</ul>
|
||||
|
||||
<pre> Executable files (exe and dll) - BDS\X.0\bin<br> Compiler files (dcp and dcu) - BDS\X.0\lib<br> Toolsapi source files - BDS\X.0\source\ToolsAPI<br></pre>
|
||||
|
||||
<p><span style="font-weight: bold;">Default installation</span></p>
|
||||
|
||||
<p>For all others versions of Delphi, C++Builder and BDS, simply launch Install.bat
|
||||
and the installer window will let you configure options and install the library.</p>
|
||||
|
||||
<hr><br>
|
||||
|
||||
<h3><a name="manual">Manual Installation</a></h3>
|
||||
|
||||
<p>Although it is not recommended, a manual installation is possible. You will have
|
||||
to manually configure options for the library. That is done by modifying an included
|
||||
file.
|
||||
</p>
|
||||
<p>
|
||||
</p>
|
||||
<p>For each tool you want to install the JCL in, repeat the following steps:</p>
|
||||
|
||||
<ol>
|
||||
|
||||
<li>Open and edit included file to customize options:</li>
|
||||
<ul>
|
||||
|
||||
<li>For Kylix 3 (Delphi): source\include\jclkd3.inc</li>
|
||||
|
||||
<li>For Kylix 3 (C++Builder): source\include\jclkc3.inc</li>
|
||||
|
||||
<li>For C++Builder 5: source\include\jclc5.inc</li>
|
||||
|
||||
<li>For C++Builder 6: source\include\jclc6.inc</li>
|
||||
|
||||
<li>For Delphi 5: source\include\jcld5.inc</li>
|
||||
|
||||
<li>For Delphi 6: source\include\jcld6.inc</li>
|
||||
|
||||
<li>For Delphi 7: source\include\jcld7.inc</li>
|
||||
|
||||
<li>For Delphi 2005: source\include\jcld9.inc</li>
|
||||
|
||||
<li>For Delphi.net 2005: source\include\jcld9.net.inc</li>
|
||||
|
||||
<li>For BDS 2006 (Delphi and C++Builder): source\include\jcld10.inc</li>
|
||||
|
||||
<li>For Delphi.net 2006: source\include\jcld10.net.inc</li>
|
||||
|
||||
<li>For CodeGear RAD Studio 2007 (Delphi for Win32 and C++Builder): source\include\jcld11.inc</li>
|
||||
|
||||
<li>For Delphi.net 2007: source\include\jcld11.net.inc</li>
|
||||
|
||||
<li>For Delphi 2009 and C++Builder 2009: source\include\jcld12.inc</li>
|
||||
</ul>
|
||||
|
||||
<li>In the IDE, open and compile package Jcl.dpk (or Jcl.bpk for C++Builder)
|
||||
located in a subdirectory of the "packages" directory matching your version of
|
||||
the IDE. This package doesn't have to be installed since it doesn't provide
|
||||
any components.</li>
|
||||
|
||||
<li>If you want to install experts, open package JclBaseExpert.dpk and compile it,
|
||||
then you can install all the experts you want (packages are located in the same
|
||||
directory).</li>
|
||||
|
||||
</ol>
|
||||
|
||||
<hr><br>
|
||||
|
||||
<h3><a name="files">Distribution content</a></h3>
|
||||
|
||||
<pre>Install.bat - Compile and run VCL version of the JCL Installer (Win32)<br>QInstall.bat - Compile and run CLX version of JCL Installer (Win32)<br>install.sh - Compile and run JCL Installer (Linux)<br>bin - Common place for sample application EXE files<br>lib - Common place for compiled units.<br>docs - Readme (this file) and other documents<br>docs\Readme.html - This file<br>docs\Experts.html - Readme file about the experts<br>docs\MPL-1.1.txt - The Mozilla Public Licence (MPL) version 1.1<br>docs\MPL FAQ.html - Frequently Asked Questions about the MPL<br>docs\cps.html - Cross Platform Strategy<br>experts - JCL IDE experts source code<br>experts\debug - JCL Debug IDE expert for using JclDebug unit<br>experts\debug\dialog - Application exception dialog replacement<br>experts\debug\simdview - Low-level debug window for XMM registers<br>experts\debug\threadnames - IDE expert showing class names for debugged threads<br>experts\debug\tools - Tools for creating files with JCL debug information<br>experts\favfolders - Favorite folders combobox in IDE open/save file dialogs<br>experts\projectanalyzer - Project Analyzer IDE expert<br>experts\useswizard - JCL uses wizard<br>experts\versioncontrol - Integration of TortoiseCVS and TortoiseSVN in the IDE<br>examples - JCL example applications<br>examples\common - CLX and Win32 example applications in Delphi<br>examples\dotnet - JCL example applications for Delphi.net<br>examples\windows - JCL example applications for Delphi.Win32<br>examples\windows\delphitools - Collection of system tools using JCL<br>help - Help file (distributed in a separate archive)<br>install - Installer source code<br>packages - JCL package sources<br>source - JCL source code<br></pre>
|
||||
|
||||
<hr><br>
|
||||
|
||||
<h3><a name="feedback">Giving your feedback</a></h3>
|
||||
|
||||
If you have any comments or suggestions we would appreciate it if you
|
||||
drop us a note. There are several ways to get in contact with us:
|
||||
<ul>
|
||||
|
||||
<li>Newsgroup is the recommended way to contact other JCL users and the team itself.
|
||||
They are hosted at <a href="news://forums.talkto.net/jedi.jcl">news://forums.talkto.net/jedi.jcl</a>.</li>
|
||||
|
||||
<li>Write to <a href="mailto:jcl@delphi-jedi.org">jcl@delphi-jedi.org</a>
|
||||
or to <a href="mailto:jcl-testing@delphi-jedi.org">jcl-testing@delphi-jedi.org</a>
|
||||
This email account should not be used for support requests. If you need
|
||||
support please use either the newsgroups or the mailing list.</li>
|
||||
|
||||
<li>If you want to keep up to date about JCL then you can join the
|
||||
JCL mailing list by going to <a href="http://tech.groups.yahoo.com/group/JEDI-JCL/">http://tech.groups.yahoo.com/group/JEDI-JCL/</a>
|
||||
You can also use this list to voice your opinion, comments or suggestions.</li>
|
||||
|
||||
</ul>
|
||||
|
||||
<hr>
|
||||
<h3><a name="issues">Reporting bugs</a></h3>
|
||||
|
||||
<p>The general rule is: <b><font color="#ff0000">If you want to get a
|
||||
bug fixed you need to log it!</font></b></p>
|
||||
|
||||
<p>An issue tracking tool can be accessed via ('Code Library' category):
|
||||
<a href="http://homepages.codegear.com/jedi/issuetracker/">http://homepages.codegear.com/jedi/issuetracker/</a></p>
|
||||
|
||||
<p>Please be aware that you are allowed there to enter feature request and code donations as well.</p>
|
||||
|
||||
<p>The JEDI issue tracker is based up on the Mantis BugTracker Open
|
||||
Source project. More background information about it is available on its homepage
|
||||
<a href="http://mantisbt.sourceforge.net/">http://mantisbt.sourceforge.net</a></p>
|
||||
|
||||
<hr><br>
|
||||
|
||||
<h3><a name="releases">Downloads of stable sources</a></h3>
|
||||
|
||||
<p>These sources are official JCL releases and file status can be considered as
|
||||
stable for use in final applications. During the past years, there have been around 2
|
||||
or 3 releases per year.</p>
|
||||
|
||||
<p>JEDI Code Library: File List on SourceForge:
|
||||
<a href="http://sourceforge.net/project/showfiles.php?group_id=47514">http://sourceforge.net/project/showfiles.php?group_id=47514</a>
|
||||
</p>
|
||||
|
||||
<hr><br>
|
||||
|
||||
<h3><a name="development">Development sources</a></h3>
|
||||
|
||||
<p>These files are under active development and may cause some incompatibilities
|
||||
and some conflicts with existing code. You should not use these files in final
|
||||
applications. The JCL development team provides these files for testing and
|
||||
feedback from users.</p>
|
||||
|
||||
<p>You can download snapshots of the Subversion repository updated every day in the JCL daily page
|
||||
<a href="http://jcl.sourceforge.net/daily/">http://jcl.sourceforge.net/daily/</a></p>
|
||||
|
||||
<p>To always have access to the most recent changes in the JCL, you
|
||||
should install a Subversion client (we recommend TortoiseSVN <a href="http://tortoisesvn.tigris.org/">http://tortoisesvn.tigris.org/</a>
|
||||
and RapidSVN <a href="http://rapidsvn.tigris.org/">http://rapidsvn.tigris.org/</a>) and download the
|
||||
SVN repository files to your computer as explained in the repository page of the JEDI Wiki at
|
||||
<a href="http://homepages.codegear.com/jedi/wiki/index.php?title=Repository">http://homepages.codegear.com/jedi/wiki/index.php?title=Repository</a>
|
||||
With the SVN client, you can update your local repository at any time.
|
||||
You can also view the repository online via the web interface at <a href="http://jcl.svn.sourceforge.net/">http://jcl.svn.sourceforge.net/</a></p>
|
||||
|
||||
<hr><br>
|
||||
|
||||
<h3><a name="contribute">Getting involved in JCL development</a></h3>
|
||||
|
||||
If you want to help out making JCL better or bigger or just plain
|
||||
cooler, there are several ways in which you can help out. Here are some of the
|
||||
things we need your help on:
|
||||
<ul>
|
||||
|
||||
<li>Donate source code</li>
|
||||
|
||||
<li>Donate time writing help</li>
|
||||
|
||||
<li>Donate time writing demos</li>
|
||||
|
||||
<li>Donate time fixing bugs</li>
|
||||
|
||||
<li>Share your experience by helping users in newsgroups and mailing lists</li>
|
||||
|
||||
</ul>
|
||||
|
||||
<p>JCL accepts donations from developers as long as the source fullfills the
|
||||
requirements set up by the JEDI and JCL teams. To read more about these
|
||||
requirements, visit the page <a href="http://homepages.codegear.com/jedi/jcl">http://homepages.codegear.com/jedi/jcl</a></p>
|
||||
|
||||
<p>You can also donate your time by writing help for the source already
|
||||
in JCL. We currently use Doc-o-Matic to create the finished help files but
|
||||
the actual help sources are plain text files in a simple to understand format.
|
||||
We can provide you with auto-generated templates with all classes, properties,
|
||||
types etc already inserted. The "only" thing left to do is fill in the actual
|
||||
help text for the help items. If you are interested in writing help, contact us.</p>
|
||||
|
||||
<p>If you want to help fix bugs in JCL, go to Mantis and check the bug report
|
||||
there. You can post replies as well as fixes directly in the bug report. One of the
|
||||
JCL developers will pick up the report/fix and update the Subversion repository if the fi
|
||||
is satisfactory. If you report and fix a lot of bugs, you might even get developer
|
||||
access to SVN so you can update the JCL files directly.</p>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
323
official/1.104/docs/Readme.txt
Normal file
323
official/1.104/docs/Readme.txt
Normal file
@ -0,0 +1,323 @@
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
JEDI Code Library
|
||||
Release 1.104
|
||||
Build 3248
|
||||
21-January-2009
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
Content of this file
|
||||
About this release
|
||||
Supported tools
|
||||
Installation notes
|
||||
Manual installation
|
||||
Distribution content
|
||||
Giving your feedback
|
||||
Reporting bugs
|
||||
Downloads of stable sources
|
||||
Development sources
|
||||
Getting involved in JCL development
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
About this release
|
||||
JCL release 1.104 provides an updated support for all targets
|
||||
(including Delphi 2009 and C++Builder 2009).
|
||||
|
||||
As always, multiple bugs have been fixed; for detailed change logs, use the
|
||||
facilities of our Subversion repository at Sourceforge.net
|
||||
http://sourceforge.net/projects/jcl/, see below.
|
||||
|
||||
Head changes:
|
||||
|
||||
- improved Unicode support for Delphi 2009 and C++Builder 2009;
|
||||
- support for late and static binding to ZLib code;
|
||||
- version control actions for CVS and SVN added to JCL runtime;
|
||||
- the polyniomal of CRC computations can be customized;
|
||||
- speed improvement of TJclBufferedStream during write operations;
|
||||
- new archive compression format provided with 7-zip: lzma, pe, elf, macho,
|
||||
udf, xar, mub, hfs, dmg; the wrapper has previous support for the compression
|
||||
and the decompression of zip, bzip2, gzip, 7z, tar and for the decompression
|
||||
of rar, iso, chm, deb, cab...
|
||||
- new string conversion functions with failure detection.
|
||||
|
||||
Important:
|
||||
|
||||
- Note that the package naming has changed: the same package name is used by
|
||||
all versions of the compiler supporting suffixes (C++Builder 6, Delphi 6,
|
||||
Delphi 7, C#Builder 1, Delphi 8, Delphi 2005, BDS 2006, RAD Studio 2007,
|
||||
Delphi 2009 and C++Builder 2009); a different suffix is added for each target
|
||||
to the BPL file name (for Delphi 2009, the library file is named jcl120.bpl).
|
||||
The installer tries to remove old packages. 3rd party packages requiring old
|
||||
DJcl* resp. CJcl* packages need to be changed to accomodate the new naming
|
||||
scheme or they will cause conflicts in the IDE at load time.
|
||||
|
||||
- DCP files are now created in the lib\target subdirectory of the JCL
|
||||
installation. 3rd party packages requiring JCL packages need to have this
|
||||
path in their "browse path" option to compile.
|
||||
|
||||
(Windows only) Installation options:
|
||||
|
||||
Packages compiled by the JCL installer don't contain any debug informations to
|
||||
keep their size as small as possible.
|
||||
|
||||
The JEDI Code Library packages are required by some 3rd party packages
|
||||
(including the JEDI Visual Component Library - JVCL), the installer generates
|
||||
them if the "Packages" node is checked.
|
||||
|
||||
The installer can generate MAP informations for each package. These
|
||||
informations can be linked into binaries to become JCL debug data or be
|
||||
converted to .jdbg files. Once linked MAP files could be deleted. These options
|
||||
are subnodes of the "Packages" node.
|
||||
|
||||
For BDS 2006, RAD Studio 2007 and C++Builder 2009, the compiler introduced
|
||||
a new option to make the same packages available in C++, by checking the
|
||||
"Dual packages" option of the "Packages" node, you will be able to call functions
|
||||
of the JCL from C++ code.
|
||||
|
||||
.net Framework support:
|
||||
|
||||
A subset of JCL units was worked over to support Delphi.Net (Delphi 2005, BDS 2006
|
||||
and RAD Studio 2007). The packages belong to the Jedi.Jcl namespace.
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
Supported Tools
|
||||
The JCL can be compiled and installed in the following environments
|
||||
|
||||
Only runtime support:
|
||||
- Kylix 3 (cf Installation notes)
|
||||
|
||||
Only design-time support (only experts):
|
||||
- C#Builder 1 (cf Installation notes);
|
||||
- Delphi 8.net (cf Installation notes).
|
||||
|
||||
Both supports (run time and design time):
|
||||
- Delphi version 5, 6, 7;
|
||||
- C++Builder version 5 & 6;
|
||||
- Delphi 2005 (Delphi.net personality);
|
||||
- Borland Developer Studio 2006 (Delphi for Win32, C++Builder for Win32,
|
||||
Delphi.net and C#Builder personalities);
|
||||
- Turbo Delphi (explorer and professional - cf Installation notes);
|
||||
- CodeGear RAD Studio 2007 (Delphi for Win32 and C++Builder for Win32
|
||||
personalities);
|
||||
- CodeGear Delphi 2009 and C++Builder 2009.
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
Installation notes
|
||||
|
||||
- Not every unit supports all tools. Look out for *.exc files in the tool-
|
||||
specific lib/subdirectories for a list of units excluded from compilation.
|
||||
|
||||
- Kylix 3 Delphi/C++ installation is back but specific code has not been tested
|
||||
with the latest versions of the kernel. Please ensure you use the flavor of
|
||||
the JCL with Unix EOL.
|
||||
|
||||
- Free Pascal (http://www.freepascal.org/) support has not been updated for
|
||||
this release; most units fromsource/common should work with FP 2.0, as tests
|
||||
with a 2.0 beta (1.9.8)indicated, but this has not been verified. Note that
|
||||
there are no plans to support FP versions from the 1.0 branch.
|
||||
|
||||
Installation for Turbo Delphi
|
||||
|
||||
The JEDI Code Library can be compiled targetting Turbo Delphi Explorer and Turbo
|
||||
Delphi Professional. Turbo Delphi Professional is recognized as BDS 2006, you
|
||||
have to download its command line compiler from CodeGear website at
|
||||
http://www.codegear.com/Default.aspx?tabid=160 to install the full JCL on this
|
||||
tool.
|
||||
|
||||
To install the JCL targetting Turbo Delphi Explorer, consider the following
|
||||
checks:
|
||||
|
||||
- If you have an other supported version of Delphi/C++Builder on this computer,
|
||||
it should automatically be detected and the installer will process as usual.
|
||||
- If you only have Turbo Delphi Explorer (and no other tools) on the computer,
|
||||
the installer cannot becompiled. You have to use the Turbo Explorer flavor of
|
||||
the JCL that contains a precompiled installer. However, you will not be able
|
||||
to install any experts.
|
||||
|
||||
Installation on C#Builder 1 and Delphi 8:
|
||||
|
||||
- These products cannot be used to build the JCL installer, you need an other
|
||||
supported product to install JCL experts on these products.
|
||||
- These products are not able to use the JCL library as a runtime library. You
|
||||
cannot write managed applications and managed packages based on the JCL.
|
||||
- These products are not shipped with their native compilers, you have to
|
||||
download it from codecentral (http://cc.codegear.com/). The item
|
||||
(http://codecentral.codegear.com/Download.aspx?id=21333) contains the native
|
||||
compiler to be installed in Delphi 8. The item
|
||||
(http://codecentral.codegear.com/Download.aspx?id=21334) contains the native
|
||||
compiler to be installed in C#Builder 1. These zip files have to be extracted
|
||||
in the products directory using the standard pattern:
|
||||
Executable files (exe and dll) - BDS\X.0\bin
|
||||
Compiler files (dcp and dcu) - BDS\X.0\lib
|
||||
Toolsapi source files - BDS\X.0\source\ToolsAPI
|
||||
|
||||
Default installation
|
||||
|
||||
For all others versions of Delphi, C++Builder and BDS, simply launch Install.bat
|
||||
and the installer window will let you configure options and install the library.
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
Manual Installation
|
||||
Although it is not recommended, a manual installation is possible. You will have
|
||||
to manually configure options for the library. That is done by modifying an
|
||||
included file.
|
||||
|
||||
For each tool you want to install the JCL in, repeat the following steps:
|
||||
|
||||
1. Open and edit included file to customize options:
|
||||
- For Kylix 3 (Delphi): source\include\jclkd3.inc
|
||||
- For Kylix 3 (C++Builder): source\include\jclkc3.inc
|
||||
- For C++Builder 5: source\include\jclc5.inc
|
||||
- For C++Builder 6: source\include\jclc6.inc
|
||||
- For Delphi 5: source\include\jcld5.inc
|
||||
- For Delphi 6: source\include\jcld6.inc
|
||||
- For Delphi 7: source\include\jcld7.inc
|
||||
- For Delphi 2005: source\include\jcld9.inc
|
||||
- For Delphi.net 2005: source\include\jcld9.net.inc
|
||||
- For BDS 2006 (Delphi and C++Builder): source\include\jcld10.inc
|
||||
- For Delphi.net 2006: source\include\jcld10.net.inc
|
||||
- For CodeGear Delphi 2007 for Win32 and C++Builder 2007: source\include\jcld11.inc
|
||||
- For Delphi.net 2007: source\include\jcld11.net.inc
|
||||
- For Delphi 2009 and C++Builder 2009: source\include\include\jcld12.inc
|
||||
|
||||
2. In the IDE, open and compile package Jcl.dpk (or Jcl.bpk for C++Builder)
|
||||
located in a subdirectory of the "packages" directory matching your version of
|
||||
the IDE. This package doesn't have to be installed since it doesn't provide any
|
||||
components.
|
||||
|
||||
3. If you want to install experts, open package JclBaseExpert.dpk and compile
|
||||
it, then you can install all the experts you want (packages are located in the
|
||||
same directory).
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
Distribution content
|
||||
Install.bat - Compile and run VCL version of the JCL Installer (Win32)
|
||||
QInstall.bat - Compile and run CLX version of JCL Installer (Win32)
|
||||
install.sh - Compile and run JCL Installer (Linux)
|
||||
bin - Common place for sample application EXE files
|
||||
lib - Common place for compiled units.
|
||||
docs - Readme (this file) and other documents
|
||||
docs\Readme.html - This file
|
||||
docs\Experts.html - Readme file about the experts
|
||||
docs\MPL-1.1.txt - The Mozilla Public Licence (MPL) version 1.1
|
||||
docs\MPL FAQ.html - Frequently Asked Questions about the MPL
|
||||
docs\cps.html - Cross Platform Strategy
|
||||
experts - JCL IDE experts source code
|
||||
experts\debug - JCL Debug IDE expert for using JclDebug unit
|
||||
experts\debug\dialog - Application exception dialog replacement
|
||||
experts\debug\simdview - Low-level debug window for XMM registers
|
||||
experts\debug\threadnames - IDE expert showing class names for debugged threads
|
||||
experts\debug\tools - Tools for creating files with JCL debug information
|
||||
experts\favfolders - Favorite folders combobox in IDE open/save file dialogs
|
||||
experts\projectanalyzer - Project Analyzer IDE expert
|
||||
experts\repository - Repository expert
|
||||
experts\useswizard - JCL uses wizard
|
||||
experts\versioncontrol - Integration of TortoiseCVS and TortoiseSVN in the IDE
|
||||
examples - JCL example applications
|
||||
examples\common - CLX and Win32 example applications in Delphi
|
||||
examples\dotnet - JCL example applications for Delphi.net
|
||||
examples\windows - JCL example applications for Delphi.Win32
|
||||
examples\windows\delphitools - Collection of system tools using JCL
|
||||
help - Help file (distributed in a separate archive)
|
||||
install - Installer source code
|
||||
packages - JCL package sources
|
||||
source - JCL source code
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
Giving your feedback
|
||||
|
||||
If you have any comments or suggestions we would appreciate it if you drop us a
|
||||
note. There are several ways to get in contact with us:
|
||||
- Newsgroup is the recommended way to contact other JCL users and the team
|
||||
itself. They are hosted at news://forums.talkto.net/jedi.jcl.
|
||||
- Write to jcl@delphi-jedi.org or to jcl-testing@delphi-jedi.org This email
|
||||
account should not be used for support requests. If you need support please
|
||||
use either the newsgroups or the mailing list.
|
||||
- If you want to keep up to date about JCL then you can join the JCL mailing
|
||||
list by going to http://tech.groups.yahoo.com/group/JEDI-JCL/You can also use
|
||||
this list to voice your opinion, comments or suggestions.
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
Reporting bugs
|
||||
|
||||
The general rule is: If you want to get a bug fixed you need to log it!
|
||||
|
||||
An issue tracking tool can be accessed via ('Code Library' category):
|
||||
http://homepages.codegear.com/jedi/issuetracker/
|
||||
|
||||
Please be aware that you are allowed there to enter feature request and code
|
||||
donations as well.
|
||||
|
||||
The JEDI issue tracker is based up on the Mantis BugTracker Open Source project.
|
||||
More background information about it is available on its homepage
|
||||
http://mantisbt.sourceforge.net
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
Downloads of stable sources
|
||||
|
||||
These sources are official JCL releases and file status can be considered as
|
||||
stable for use in final applications. During the past years, there have been
|
||||
around 2 or 3 releases per year.
|
||||
|
||||
JEDI Code Library: File List on SourceForge:
|
||||
http://sourceforge.net/project/showfiles.php?group_id=47514
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
Development sources
|
||||
|
||||
These files are under active development and may cause some incompatibilities
|
||||
and some conflicts with existing code. You should not use these files in final
|
||||
applications. The JCL development team provides these files for testing and
|
||||
feedback from users.
|
||||
|
||||
You can download snapshots of the Subversion repository updated every day in the
|
||||
JCL daily page http://jcl.sourceforge.net/daily/
|
||||
|
||||
To always have access to the most recent changes in the JCL, you should install
|
||||
a Subversion client (we recommend TortoiseSVN http://tortoisesvn.tigris.org/and
|
||||
RapidSVN http://rapidsvn.tigris.org/) and download the SVN repository files to
|
||||
your computer as explained in the repository page of the JEDI Wiki at
|
||||
http://homepages.codegear.com/jedi/wiki/index.php?title=Repository With the SVN
|
||||
client, you can update your local repository at any time. You can also view the
|
||||
repository online via the web interface at http://jcl.svn.sourceforge.net/
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
Getting involved in JCL development
|
||||
|
||||
If you want to help out making JCL better or bigger or just plain cooler, there
|
||||
are several ways in which you can help out. Here are some of the things we need
|
||||
your help on:
|
||||
- Donate source code
|
||||
- Donate time writing help
|
||||
- Donate time writing demos
|
||||
- Donate time fixing bugs
|
||||
- Share your experience by helping users in newsgroups and mailing lists
|
||||
|
||||
JCL accepts donations from developers as long as the source fullfills the
|
||||
requirements set up by the JEDI and JCL teams. To read more about these
|
||||
requirements, visit the page http://homepages.codegear.com/jedi/jcl
|
||||
|
||||
You can also donate your time by writing help for the source already in JCL.
|
||||
We currently use Doc-o-Matic to create the finished help files but the actual
|
||||
help sources are plain text files in a simple to understand format. We can
|
||||
provide you with auto-generated templates with all classes, properties,
|
||||
types etc already inserted. The "only" thing left to do is fill in the actual
|
||||
help text for the help items. If you are interested in writing help, contact us.
|
||||
|
||||
If you want to help fix bugs in JCL, go to Mantis and check the bug report
|
||||
there. You can post replies as well as fixes directly in the bug report. One of
|
||||
the JCL developers will pick up the report/fix and update the Subversion
|
||||
repository if the fi is satisfactory. If you report and fix a lot of bugs, you
|
||||
might even get developer access to SVN so you can update the JCL files directly.
|
||||
|
||||
28
official/1.104/docs/ThreadSafe.txt
Normal file
28
official/1.104/docs/ThreadSafe.txt
Normal file
@ -0,0 +1,28 @@
|
||||
------------------------------------------------------------------------------
|
||||
JEDI Code Library
|
||||
HomePage: http://jcl.sourceforge.net/
|
||||
------------------------------------------------------------------------------
|
||||
|
||||
Thread safe support
|
||||
|
||||
Some pieces of code can handle read/write accesses from multiples threads
|
||||
without writing specific code.
|
||||
This support can be enabled:
|
||||
- by defining the THREADSAFE compiler symbol {$DEFINE THREADSAFE} when JCL
|
||||
units are part of a project.
|
||||
- by checking the “Enable thread safe code” node in the installer options
|
||||
|
||||
Presently only the following units have some pieces of code that implicitly
|
||||
handles thread safe accesses:
|
||||
source\common\JclAbstractContainers.pas
|
||||
source\common\JclArrayLists.pas
|
||||
source\common\JclArraySets.pas
|
||||
source\common\JclBinaryTrees.pas
|
||||
source\common\JclHashMaps.pas
|
||||
source\common\JclLinkedLists.pas
|
||||
source\common\JclQueues.pas
|
||||
source\common\JclStacks.pas
|
||||
|
||||
This support is made using critical sections, if you want other piece of code
|
||||
to be thread safe, please create a feature request in the “Code Library” category
|
||||
of the mantiss at http://homepages.borland.com/jedi/issuetracker/
|
||||
655
official/1.104/docs/cps.html
Normal file
655
official/1.104/docs/cps.html
Normal file
@ -0,0 +1,655 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
|
||||
<html>
|
||||
<head>
|
||||
<link rel="stylesheet" href="cps_files/test.css" type="text/css">
|
||||
<title>JEDI Code Library - Cross Platform Strategy</title>
|
||||
</head>
|
||||
<body>
|
||||
<h1>JEDI Code Library - Cross Platform Strategy</h1>
|
||||
<p>
|
||||
This paper presents the JCL teams strategy for cross platform
|
||||
compliance of the
|
||||
JEDI Code Library. It is based up on the discussions within the JCL
|
||||
newsgroup
|
||||
and JCL developer mailing lists. This document is currently <b>work in
|
||||
progress</b>
|
||||
and subject to changes with or without notice.
|
||||
</p>
|
||||
<p>
|
||||
Version history: <br>
|
||||
0.1 Initial release
|
||||
</p>
|
||||
<p>
|
||||
</p>
|
||||
<h3>Background</h3>
|
||||
<p>
|
||||
The main objective is to make the JEDI Code Library VisualCLX (Kylix
|
||||
for Delphi/Delphi) and Delphi.NET compatible. For a detailed
|
||||
explanation of the currently used terminology, see the following
|
||||
article <a href="http://bdn.borland.com/article/0,1410,29460,00.html">
|
||||
Overview of the VCL for .NET</a>. </p>
|
||||
<p>
|
||||
We have to cope with nearly all aspects of cross platform progamming,
|
||||
like different APIs, different operating system concepts etc. Since we
|
||||
want to be as crossplatform compatible as possible interface
|
||||
compatability is the most important
|
||||
issue for us. JEDI Code Library users should have to opportunity the
|
||||
use the JCL
|
||||
on whatever platform they like. Figure 1 shows the three basic layers
|
||||
we have to deal with:
|
||||
</p>
|
||||
<ul>
|
||||
<li>Platform independent layer: Units which are not (or only very
|
||||
minor)
|
||||
platform specific and do not depend on a specific component set. This
|
||||
doesn't mean that units in this layer have to consist of no platform
|
||||
dependent code, but they have to
|
||||
be nearly 100% interface compatible and all functionality must have
|
||||
been ported to all
|
||||
supported platforms. </li>
|
||||
<li>Platform dependent layer: Units which depend on a specific
|
||||
platform (e.g. JclCLI) </li>
|
||||
<li>Component set dependent layer: Units which depend on a specific
|
||||
component set</li>
|
||||
</ul>
|
||||
<p>
|
||||
<img src="cps_files/strucv1.jpg" border="1"><br>
|
||||
<i>Fig 1: The JEDI Code Library crossplatform layer structure</i>
|
||||
</p>
|
||||
<p>
|
||||
The JEDI Code Library currently targets the following platforms:
|
||||
</p>
|
||||
<ul>
|
||||
<li>Kylix for Delphi (Kylix 3) / Linux</li>
|
||||
<li>Delphi (Version 5,6,7) / Microsoft Windows</li>
|
||||
</ul>
|
||||
and is trying to support the following platforms as soon as possible:
|
||||
<ul>
|
||||
<li>Delphi .NET / .NET (Micrsoft Windows) </li>
|
||||
</ul>
|
||||
<p>
|
||||
As a mid or long term perspective we are hoping to get the JCL
|
||||
FreePascal compatible.
|
||||
This involves the possibilty to have the JCL running on DOS, OS/2,
|
||||
FreeBSD and
|
||||
AmigaOS. </p>
|
||||
<h3>Common platform independent layer</h3>
|
||||
<p>
|
||||
This layer consists of all files which are not platform dependent or
|
||||
need only very minor adjustations. Furthermore all units in this layer
|
||||
do not depend on a
|
||||
specific component set. Examples for common platform independent units
|
||||
are JclBase, JclDateTime, JclFileUtils and JclMath. The units have been
|
||||
ported to all platforms and are the crossplatform "core" of the Jedi
|
||||
Code Library. As a general rule a unit in this layer should have no
|
||||
platform specific ifdefs in its
|
||||
interface section.
|
||||
</p>
|
||||
<h3>Platform dependent layer</h3>
|
||||
<p>
|
||||
Furthermore we do not have to differentiate between VCL and VisualCLX
|
||||
units only (the so called component set dependent layer), but also
|
||||
between UNIX, Windows and .NET dependent units. The platform dependent
|
||||
units doesn't need to be interface compatible (if there is an
|
||||
equivalent in one of the other suported platforms at all!).
|
||||
An example for a platform dependent unit is JclCLI. Nonetheless if
|
||||
there are equivalents in all other supported platforms as well it might
|
||||
be considerable to write a more general class and include that unit
|
||||
into the common platform indepedant layer.
|
||||
</p>
|
||||
<h3>Component set dependent layer</h3>
|
||||
<p>
|
||||
When it comes to sharing code between VCL and VisualCLX-applications,
|
||||
some facts need to be stated:
|
||||
</p>
|
||||
<p>
|
||||
</p>
|
||||
<li>A unit is called <i>VCL-dependent</i>, when it uses some
|
||||
VCL-unit(s), e.g. Graphics.
|
||||
</li>
|
||||
<li>A unit is called <i>VisualCLX-dependent</i>, when it uses some
|
||||
VisualCLX-unit(s), e.g. QGraphics.</li>
|
||||
<p>
|
||||
When a unit contains neither VCL- nor VisualCLX-specific code, there is
|
||||
no problem: It can be used by either type of application.
|
||||
</p>
|
||||
<p>
|
||||
While it is basically possible to create VCL-dependent and
|
||||
VisualCLX-dependent
|
||||
variants of the same unit by means of conditional compilation - and use
|
||||
them in
|
||||
VCL- and VisualCLX-applications respectively -, this method fails at
|
||||
design time:
|
||||
One and the same unit cannot be installed twice in the IDE, not even as
|
||||
part of
|
||||
different packages. We would have to rename one of the variants,
|
||||
effectively
|
||||
creating a new unit. Therefor we will use a preprocessor to resolve the
|
||||
conditional compilation symbols related to VCL/VisualCLX-specific code
|
||||
and create
|
||||
VCL/VisualCLX units from a common codebase.
|
||||
</p>
|
||||
<p>
|
||||
Component dependent units should be largely "interface compatible" -
|
||||
interface
|
||||
adjustments for specific component sets are unavoidable - nonetheless
|
||||
similar
|
||||
interfaces are desirable.
|
||||
</p>
|
||||
<h3>Preprocessor</h3>
|
||||
<p>
|
||||
The preprocessor jpp is a modified version of Barry Kelly's ppp tool.
|
||||
In contrast to ppp, which resolves all conditional compilation
|
||||
directives without exception, with jpp symbols not only can be defined
|
||||
but also undefined. Those symbols which are neither defined nor
|
||||
explicitely undefined are considered
|
||||
as of unknown status and it and its related source code remains
|
||||
untouched.
|
||||
</p>
|
||||
<p>
|
||||
The usage of jpp is not too hard. It is called via
|
||||
</p>
|
||||
<pre>jpp [options] <input files>...<br></pre>
|
||||
Possible options are
|
||||
<pre> -i Process includes<br> -c Process conditional directives<br> -C Strip comments<br> -pxxx Add xxx to include path<br> -dxxx Define xxx as a preprocessor conditional symbol<br> -uxxx Assume preprocessor conditional symbol xxx as not defined<br> -x[n:]yyy Strip first n characters from file name; precede filename by prefix yyy<br></pre>
|
||||
<p>
|
||||
The example command line below generates a file JclQGraphics.pas in
|
||||
subdirectory
|
||||
CLX from file Graphics.cb located in the current directory. Symbols
|
||||
"VisualCLX"
|
||||
and "COMPILER6_UP" are specified as defined, "Bitmap32" and "VCL" as
|
||||
undefined.
|
||||
</p>
|
||||
<pre> jpp -c -dVisualCLX -dCOMPILER6_UP -uBitmap32 -uVCL -xCLX\JclQ Graphics.cb<br></pre>
|
||||
<h3>Generating Jcl[Q]Graphics.pas and Jcl[Q]GraphUtils.pas</h3>
|
||||
<p>
|
||||
First compile Preprocessor\jpp.exe from Preprocessor\jpp.dpr.
|
||||
Then change to the "Source" directory and type "make" at the command
|
||||
line.
|
||||
This will create the units <br>
|
||||
VCL\JclGraphics.pas <br>
|
||||
VCL\JclGraphUtils.pas <br>
|
||||
CLX\JclQGraphics.pas <br>
|
||||
CLX\JclQGraphUtils.pas <br>
|
||||
</p>
|
||||
<p>
|
||||
from their prototypes _Graphics.pas and _GraphUtils.pas.
|
||||
</p>
|
||||
<h3>Minimizing VCL dependencies</h3>
|
||||
<p>
|
||||
To reduce VCL dependencies in JCL, the following changes have been
|
||||
made:
|
||||
</p>
|
||||
<menu>
|
||||
<dl>
|
||||
<dt>JclFileUtils</dt>
|
||||
<dd>PathCompactPath is an overloaded function. The variant which
|
||||
takes a TCanvas as argument (and thus creates a dependency on VCL unit
|
||||
Graphics) has been removed. </dd>
|
||||
</dl>
|
||||
<br>
|
||||
<dl>
|
||||
<dt>JclShell</dt>
|
||||
<dd> ShellLinkGetIcon has been removed. It could get part of some
|
||||
genuine VCL-dependent unit (e.g. JclGraphUtils), but for now it is left
|
||||
out. </dd>
|
||||
</dl>
|
||||
<br>
|
||||
<dl>
|
||||
<dt>JclPEImage</dt>
|
||||
<dd>
|
||||
<pre> Replace "uses Consts," by<br><br> uses<br> {$IFDEF COMPILER6_UP}<br> RtlConsts, // VisualCLX-package compatible (part of rtlxx.bpl)<br> {$ELSE}<br> Consts, // not VisualCLX-package compatible (part of vclxx.bpl)<br> {$ENDIF COMPILER6_UP} </pre>
|
||||
</dd>
|
||||
</dl>
|
||||
</menu>
|
||||
<p>
|
||||
Note that the first two changes have enormous impact, since many JCL
|
||||
units use JclFileUtils and JclSysInfo (which both use JclShell). This
|
||||
leaves JclGraphics and JclGraphUtils as sole units with genuine
|
||||
VCL/VisualCLX-dependencies.
|
||||
JclPrint is the only remaining pure VCL-dependent units. </p>
|
||||
<h3>New directory structure</h3>
|
||||
<p>
|
||||
With the new JCL release we introduce a more appropriate source file
|
||||
directory
|
||||
structure. The files are now grouped according their respective layers.
|
||||
</p>
|
||||
<pre>Source/<br> Common<br> DotNet<br> Unix<br> VCL<br> VisCLX<br> Windows <br></pre>
|
||||
<h3>Status - Platforms</h3>
|
||||
<p>
|
||||
This table gives a short overview of which units are already working
|
||||
under four different Delphi language compilers/platforms. There are
|
||||
four status levels possible:
|
||||
</p>
|
||||
<p>
|
||||
<table>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td
|
||||
style="text-align: center; background-color: rgb(238, 238, 238);"><span
|
||||
style="font-weight: bold;">+</span><br>
|
||||
</td>
|
||||
<td> the unit has been ported to that platform</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td
|
||||
style="text-align: center; background-color: rgb(238, 238, 238);">-</td>
|
||||
<td> the unit has not been ported to that platform</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td
|
||||
style="text-align: center; background-color: rgb(238, 238, 238);"> (+)
|
||||
<br>
|
||||
</td>
|
||||
<td> the unit compiles, but not all of its functionality
|
||||
has been ported to that platform.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td
|
||||
style="text-align: center; background-color: rgb(238, 238, 238);"> platform
|
||||
<br>
|
||||
</td>
|
||||
<td> the unit is platform dependent and will not be ported.</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</p>
|
||||
<table>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td style="background-color: rgb(238, 238, 238);"><b>Name</b></td>
|
||||
<td
|
||||
style="text-align: center; background-color: rgb(238, 238, 238);"><b>Delphi
|
||||
(Windows)</b></td>
|
||||
<td
|
||||
style="text-align: center; background-color: rgb(238, 238, 238);"><b>Kylix
|
||||
for Delphi</b></td>
|
||||
<td
|
||||
style="text-align: center; background-color: rgb(238, 238, 238);"><b>Delphi.NET</b></td>
|
||||
<td
|
||||
style="text-align: center; background-color: rgb(238, 238, 238);"><b>Free
|
||||
Pascal</b></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Jcl8087</td>
|
||||
<td style="text-align: center;"><b>+</b></td>
|
||||
<td style="text-align: center;"><b>+</b></td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">?</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>JclAppInst</td>
|
||||
<td style="text-align: center;"><b>+</b></td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">?</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>JclCil</td>
|
||||
<td style="text-align: center;"><b>+</b></td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">?</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>JclClr</td>
|
||||
<td style="text-align: center;"><b>+</b></td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">?</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>JclCom</td>
|
||||
<td style="text-align: center;"><b>+</b></td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">?</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>JclComplex</td>
|
||||
<td style="text-align: center;"><b>+</b></td>
|
||||
<td style="text-align: center;"><b>+</b></td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">?</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>JclConsole</td>
|
||||
<td style="text-align: center;"><b>+</b></td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">?</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>JclCounter</td>
|
||||
<td style="text-align: center;"><b>+</b></td>
|
||||
<td style="text-align: center;"><b>+</b></td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">?</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>JclDateTime</td>
|
||||
<td style="text-align: center;"><b>+</b></td>
|
||||
<td style="text-align: center;">(+)</td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">?</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>JclDebug</td>
|
||||
<td style="text-align: center;"><b>+</b></td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">? </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>JclDotNet</td>
|
||||
<td style="text-align: center;"><b>+</b></td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">? </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>JclEDI</td>
|
||||
<td style="text-align: center;"><b>+</b></td>
|
||||
<td style="text-align: center;"><b>+</b></td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">? </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>JclEDISEF</td>
|
||||
<td style="text-align: center;"><b>+</b></td>
|
||||
<td style="text-align: center;"><b>+</b></td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">? </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>JclEDIXML</td>
|
||||
<td style="text-align: center;"><b>+</b></td>
|
||||
<td style="text-align: center;"><b>+</b></td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">? </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>JclEDI_ANSIX12</td>
|
||||
<td style="text-align: center;"><b>+</b></td>
|
||||
<td style="text-align: center;"><b>+</b></td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">? </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>JclEDI_UNEDIFACT</td>
|
||||
<td style="text-align: center;"><b>+</b></td>
|
||||
<td style="text-align: center;"><b>+</b></td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">? </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>JclFileUtils</td>
|
||||
<td style="text-align: center;"><b>+</b></td>
|
||||
<td style="text-align: center;">(+)</td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">? </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>JclExprEval</td>
|
||||
<td style="text-align: center;"><b>+</b></td>
|
||||
<td style="text-align: center;"><b>+</b><br>
|
||||
</td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">? </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>JclHookExcept</td>
|
||||
<td style="text-align: center;"><b>+</b></td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">? </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>JclIniFiles</td>
|
||||
<td style="text-align: center;"><b>+</b></td>
|
||||
<td style="text-align: center;"><b>+</b><br>
|
||||
</td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">? </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>JclLanMan</td>
|
||||
<td style="text-align: center;"><b>+</b></td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">? </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>JclLocales</td>
|
||||
<td style="text-align: center;"><b>+</b></td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">? </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>JclLogic</td>
|
||||
<td style="text-align: center;"><b>+</b></td>
|
||||
<td style="text-align: center;"><b>+</b></td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">? </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>JclMapi</td>
|
||||
<td style="text-align: center;"><b>+</b></td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">? </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>JclMath</td>
|
||||
<td style="text-align: center;"><b>+</b></td>
|
||||
<td style="text-align: center;"><b>+</b></td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">? </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>JclMetaData</td>
|
||||
<td style="text-align: center;"><b>+</b></td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">? </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>JclMidi</td>
|
||||
<td style="text-align: center;"><b>+</b></td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">? </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>JclMime</td>
|
||||
<td style="text-align: center;"><b>+</b></td>
|
||||
<td style="text-align: center;"><b>+</b></td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">? </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>JclMiscel</td>
|
||||
<td style="text-align: center;"><b>+</b></td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">? </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>JclMultimedia</td>
|
||||
<td style="text-align: center;"><b>+</b></td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">? </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>JclNTFS</td>
|
||||
<td style="text-align: center;"><b>+</b></td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">? </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>JclPEImage</td>
|
||||
<td style="text-align: center;"><b>+</b></td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">? </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>JclPrint</td>
|
||||
<td style="text-align: center;"><b>+</b></td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">? </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>JclStrHashMap</td>
|
||||
<td style="text-align: center;"><b>+</b></td>
|
||||
<td style="text-align: center;"><b>+</b><br>
|
||||
</td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">? </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>JclStatistics</td>
|
||||
<td style="text-align: center;"><b>+</b></td>
|
||||
<td style="text-align: center;"><b>+</b></td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">? </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>JclShell</td>
|
||||
<td style="text-align: center;"><b>+</b></td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">? </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>JclSecurity</td>
|
||||
<td style="text-align: center;"><b>+</b></td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">? </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>JclSchedule</td>
|
||||
<td style="text-align: center;"><b>+</b></td>
|
||||
<td style="text-align: center;"><b>+</b></td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">? </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>JclRTTI</td>
|
||||
<td style="text-align: center;"><b>+</b></td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">? </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>JclResources</td>
|
||||
<td style="text-align: center;"><b>+</b></td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">? </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>JclRegistry</td>
|
||||
<td style="text-align: center;"><b>+</b></td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">? </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>JclStrings</td>
|
||||
<td style="text-align: center;"><b>+</b></td>
|
||||
<td style="text-align: center;"><b>+</b></td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">? </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Jclsvcctrl</td>
|
||||
<td style="text-align: center;"><b>+</b></td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">? </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Jclsynch</td>
|
||||
<td style="text-align: center;"><b>+</b></td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">? </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>JclTask</td>
|
||||
<td style="text-align: center;">platform</td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">? </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>JclSysUtils</td>
|
||||
<td style="text-align: center;"><b>+</b></td>
|
||||
<td style="text-align: center;">(+)<br>
|
||||
</td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">? </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>JclSysInfo</td>
|
||||
<td style="text-align: center;"><b>+</b></td>
|
||||
<td style="text-align: center;">(+)<br>
|
||||
</td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">? </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>JclTD32</td>
|
||||
<td style="text-align: center;"><b>+</b></td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">? </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>JclUnicode</td>
|
||||
<td style="text-align: center;"><b>+</b></td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">? </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>JclUnitConv</td>
|
||||
<td style="text-align: center;"><b>+</b></td>
|
||||
<td style="text-align: center;"><b>+</b></td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">? </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>JclWin32</td>
|
||||
<td style="text-align: center;">platform </td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">? </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>JclWinMidi</td>
|
||||
<td style="text-align: center;">platform </td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">? </td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<h3>Assembler</h3>
|
||||
<p>
|
||||
For crossplatform compatability it is absolutely necessary to reduce
|
||||
the amount
|
||||
of inline assembler code used. Therefore as a general rule every line
|
||||
of assembler
|
||||
<b>must have a pure pascal pendant</b>. Please use assembler only if it
|
||||
really has a noticeable impact on the libraries performance. </p>
|
||||
<pre>{$IFNDEF PUREPASCAL}<br> // assembler code here<br>{$ELSE}<br> // Delphi equivalent here<br>{$ENDIF} <br></pre>
|
||||
<h3>Packages</h3>
|
||||
</body>
|
||||
</html>
|
||||
BIN
official/1.104/docs/cps_files/strucv1.jpg
Normal file
BIN
official/1.104/docs/cps_files/strucv1.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 33 KiB |
793
official/1.104/docs/cps_files/test.css
Normal file
793
official/1.104/docs/cps_files/test.css
Normal file
@ -0,0 +1,793 @@
|
||||
TD {
|
||||
font-family : "Arial", "Helvetica", Sans-serif;
|
||||
}
|
||||
|
||||
PRE.SourceCode2 {
|
||||
background-color : #e0ffff;
|
||||
border-width : medium;
|
||||
border-style : outset;
|
||||
border-color : silver;
|
||||
white-space : pre;
|
||||
}
|
||||
|
||||
PRE.SourceCode EM {
|
||||
font-style : normal;
|
||||
color : #9933cc;
|
||||
white-space : pre;
|
||||
}
|
||||
|
||||
PRE.SourceCode {
|
||||
font-family : "Courier", monospace;
|
||||
background-color : white;
|
||||
margin-right : 20px;
|
||||
margin-left : 20px;
|
||||
padding : 5px 20px;
|
||||
border-width : medium;
|
||||
border-style : outset;
|
||||
border-color : silver;
|
||||
white-space : pre;
|
||||
}
|
||||
|
||||
P.chatuser {
|
||||
font-weight : bold;
|
||||
color : #3366cc;
|
||||
vertical-align : top;
|
||||
}
|
||||
|
||||
P.chatquestionpresented {
|
||||
font-weight : bold;
|
||||
background-color : #dddddd;
|
||||
vertical-align : top;
|
||||
}
|
||||
|
||||
P.chatpublicmsg {
|
||||
font-weight : normal;
|
||||
vertical-align : top;
|
||||
padding : 0 0 20px;
|
||||
}
|
||||
|
||||
P.chateditor {
|
||||
color : red;
|
||||
padding : 0 0 10px;
|
||||
}
|
||||
|
||||
P.chataction {
|
||||
font-style : italic;
|
||||
vertical-align : top;
|
||||
}
|
||||
|
||||
P.TechNote {
|
||||
font-weight : normal;
|
||||
background-color : #e0ffff;
|
||||
padding : 2px 5px;
|
||||
border-width : medium;
|
||||
border-style : outset;
|
||||
border-color : silver;
|
||||
}
|
||||
|
||||
H3 {
|
||||
font-weight : bold;
|
||||
font-size : 11pt;
|
||||
font-family : "Arial", "Helvetica", Sans-serif;
|
||||
color : #000000;
|
||||
text-decoration : none;
|
||||
}
|
||||
|
||||
H2 {
|
||||
font-weight : bold;
|
||||
font-size : 14pt;
|
||||
font-family : "Arial", "Helvetica", Sans-serif;
|
||||
color : #000000;
|
||||
text-decoration : none;
|
||||
}
|
||||
|
||||
H1 {
|
||||
font-weight : bold;
|
||||
font-size : 18pt;
|
||||
line-height : 18pt;
|
||||
font-family : "Arial", "Helvetica", Sans-serif;
|
||||
color : #000000;
|
||||
text-decoration : none;
|
||||
padding : 10px 0 0;
|
||||
}
|
||||
|
||||
BODY {
|
||||
background : #ffffff;
|
||||
margin-left : 20 px;
|
||||
margin-right : 20 px;}
|
||||
|
||||
B.Help {
|
||||
color : white;
|
||||
background-color : gray;
|
||||
}
|
||||
|
||||
A:hover {
|
||||
color : #cc3300;
|
||||
}
|
||||
|
||||
.webDirectoryLink {
|
||||
font-size : 0.8em;
|
||||
font-family : "Arial", "Helvetica", Sans-serif;
|
||||
color : #3366cc;
|
||||
text-decoration : underline;
|
||||
}
|
||||
|
||||
.webDirectoryCategoryLink {
|
||||
font-size : 0.8em;
|
||||
font-family : "Arial", "Helvetica", Sans-serif;
|
||||
color : #000000;
|
||||
text-decoration : none;
|
||||
}
|
||||
|
||||
.webDirectoryCatHead {
|
||||
font-size : 0.9em;
|
||||
font-family : "Arial", "Helvetica", Sans-serif;
|
||||
color : #ffffff;
|
||||
text-decoration : none;
|
||||
}
|
||||
|
||||
.vspace5 {
|
||||
padding : 5px 0 0;
|
||||
}
|
||||
|
||||
.visibility {
|
||||
font-weight : bold;
|
||||
font-size : 0.8em;
|
||||
font-family : "Arial", "Helvetica", Sans-serif;
|
||||
color : #ff0000;
|
||||
text-decoration : none;
|
||||
}
|
||||
|
||||
.tuser {
|
||||
color : blue;
|
||||
background-color : white;
|
||||
}
|
||||
|
||||
.ttitle {
|
||||
font-weight : bold;
|
||||
color : black;
|
||||
background-color : #dddddd;
|
||||
}
|
||||
|
||||
.tthis {
|
||||
font-weight : bold;
|
||||
line-height : 1;
|
||||
color : white;
|
||||
background-color : red;
|
||||
vertical-align : top;
|
||||
}
|
||||
|
||||
.tother {
|
||||
font-weight : bold;
|
||||
line-height : 1;
|
||||
color : white;
|
||||
background-color : blue;
|
||||
vertical-align : top;
|
||||
}
|
||||
|
||||
.tmine {
|
||||
font-weight : bold;
|
||||
color : black;
|
||||
background-color : #c71585;
|
||||
}
|
||||
|
||||
.title3 {
|
||||
font-weight : bold;
|
||||
font-size : 12pt;
|
||||
font-family : "Arial", "Helvetica", Sans-serif;
|
||||
color : #000000;
|
||||
text-decoration : none;
|
||||
}
|
||||
|
||||
.thi {
|
||||
background-color : #dddddd;
|
||||
}
|
||||
|
||||
.textAdLink {
|
||||
font-weight : bold;
|
||||
color : #ffffff;
|
||||
text-decoration : none;
|
||||
}
|
||||
|
||||
.textAdCell {
|
||||
font-size : 0.8em;
|
||||
}
|
||||
|
||||
.searchCell {
|
||||
font-weight : bold;
|
||||
font-size : 11px;
|
||||
}
|
||||
|
||||
.rightSidebarLink {
|
||||
color : #000000;
|
||||
text-decoration : none;
|
||||
}
|
||||
|
||||
.rightSidebarHeading {
|
||||
font-weight : bold;
|
||||
font-size : 10pt;
|
||||
color : #ffffff;
|
||||
background : #3366cc;
|
||||
}
|
||||
|
||||
.rightSidebarCell {
|
||||
font-weight : bold;
|
||||
font-size : 10pt;
|
||||
color : #000000;
|
||||
background : #dddddd;
|
||||
}
|
||||
|
||||
.presentLocation {
|
||||
font-weight : bold;
|
||||
color : #000000;
|
||||
text-decoration : none;
|
||||
}
|
||||
|
||||
.logoCell {
|
||||
background : #000000;
|
||||
}
|
||||
|
||||
.logoBar {
|
||||
background : #000000;
|
||||
}
|
||||
|
||||
.loginLinkCell {
|
||||
font-weight : bold;
|
||||
font-size : 0.8em;
|
||||
background : #3366cc;
|
||||
}
|
||||
|
||||
.loginLink {
|
||||
color : #ffffff;
|
||||
text-decoration : none;
|
||||
}
|
||||
|
||||
.loginStd {
|
||||
text-align : right;
|
||||
}
|
||||
|
||||
.loginReq {
|
||||
text-align : right;
|
||||
font-weight : bold;
|
||||
color : blue;
|
||||
}
|
||||
|
||||
.login_std {
|
||||
text-align : right;
|
||||
}
|
||||
|
||||
.login_req {
|
||||
text-align : right;
|
||||
font-weight : bold;
|
||||
color : blue;
|
||||
}
|
||||
|
||||
.locationLink {
|
||||
color : #000000;
|
||||
text-decoration : underline;
|
||||
}
|
||||
|
||||
.localLinkCell {
|
||||
font-size : 9pt;
|
||||
color : #ffffff;
|
||||
background : #3366cc;
|
||||
}
|
||||
|
||||
.localLink {
|
||||
font-weight : bold;
|
||||
color : #ffffff;
|
||||
text-decoration : none;
|
||||
}
|
||||
|
||||
.leftSidebarText {
|
||||
font-weight : normal;
|
||||
font-size : 9pt;
|
||||
color : #000000;
|
||||
}
|
||||
|
||||
.leftSidebarSoapboxLink {
|
||||
font-weight : normal;
|
||||
font-size : 10pt;
|
||||
color : #0000cc;
|
||||
font-style : italic;
|
||||
text-decoration : none
|
||||
|
||||
}
|
||||
|
||||
.leftSidebarSoapboxLink:hover {
|
||||
COLOR: #6666cc;
|
||||
font-weight : normal;
|
||||
font-size : 10pt;
|
||||
font-style : italic;
|
||||
text-decoration : none
|
||||
|
||||
}
|
||||
|
||||
|
||||
.leftSidebarHeading {
|
||||
font-weight : bold;
|
||||
font-size : 12pt;
|
||||
color : #3366cc;
|
||||
}
|
||||
|
||||
.leftSidebarCell {
|
||||
font-size : 0.8em;
|
||||
background : #dddddd;
|
||||
}
|
||||
|
||||
.heading3 {
|
||||
font-weight : bold;
|
||||
font-size : 11pt;
|
||||
font-family : "Arial", "Helvetica", Sans-serif;
|
||||
color : #000000;
|
||||
text-decoration : none;
|
||||
vertical-align: baseline;
|
||||
}
|
||||
|
||||
.heading2 {
|
||||
font-weight : bold;
|
||||
font-size : 14pt;
|
||||
font-family : "Arial", "Helvetica", Sans-serif;
|
||||
color : #000000;
|
||||
text-decoration : none;
|
||||
}
|
||||
|
||||
.heading1 {
|
||||
font-weight : bold;
|
||||
font-size : 18pt;
|
||||
font-family : "Arial", "Helvetica", Sans-serif;
|
||||
color : #000000;
|
||||
text-decoration : none;
|
||||
padding : 10px 0 0;
|
||||
}
|
||||
|
||||
.globalNavBar {
|
||||
background : #dddddd;
|
||||
}
|
||||
|
||||
.globalLinkCell {
|
||||
font-size : 0.8em;
|
||||
background : #dddddd;
|
||||
}
|
||||
|
||||
.globalLink {
|
||||
font-weight : bold;
|
||||
color : #000000;
|
||||
text-decoration : none;
|
||||
}
|
||||
|
||||
.fineprint {
|
||||
font-weight : normal;
|
||||
font-size : 8pt;
|
||||
font-family : "Arial", "Helvetica", Sans-serif;
|
||||
color : #000000;
|
||||
text-decoration : none;
|
||||
}
|
||||
|
||||
.directoryStuff {
|
||||
font-size : 0.8em;
|
||||
font-family : "Arial", "Helvetica", Sans-serif;
|
||||
color : #000000;
|
||||
}
|
||||
|
||||
.directoryLink {
|
||||
font-size : 9pt;
|
||||
font-family : "Arial", "Helvetica", Sans-serif;
|
||||
color : #000000;
|
||||
text-decoration : none;
|
||||
}
|
||||
|
||||
.directoryCategory {
|
||||
font-size : 10pt;
|
||||
font-family : "Arial", "Helvetica", Sans-serif;
|
||||
color : #000000;
|
||||
text-decoration : underline;
|
||||
}
|
||||
|
||||
.date3 {
|
||||
font-weight : normal;
|
||||
font-size : 9pt;
|
||||
font-family : "Arial", "Helvetica", Sans-serif;
|
||||
color : #000000;
|
||||
text-decoration : none;
|
||||
vertical-align: baseline ;
|
||||
|
||||
}
|
||||
|
||||
.copyrightLink {
|
||||
color : #000000;
|
||||
text-decoration : none;
|
||||
}
|
||||
|
||||
.copyrightCell {
|
||||
font-size : 7pt;
|
||||
background : #dddddd;
|
||||
}
|
||||
|
||||
.contentshortDescription {
|
||||
font-weight : normal;
|
||||
font-size : 9pt;
|
||||
color : #000000;
|
||||
}
|
||||
|
||||
.contentTableCell {
|
||||
font-size : 0.8em;
|
||||
background : #ffffff;
|
||||
}
|
||||
|
||||
.contentTable {
|
||||
background : #ffffff;
|
||||
}
|
||||
|
||||
.contentStoryLink {
|
||||
color : #3366cc;
|
||||
}
|
||||
|
||||
.contentStoryHeadingCell {
|
||||
background : #dddddd;
|
||||
}
|
||||
|
||||
.contentStoryHeading {
|
||||
font-weight : normal;
|
||||
font-size : 11pt;
|
||||
color : #000000;
|
||||
text-decoration : none;
|
||||
}
|
||||
|
||||
.contentStoryByline {
|
||||
font-style : italic;
|
||||
font-weight : normal;
|
||||
font-size : 9pt;
|
||||
color : #000000;
|
||||
}
|
||||
|
||||
.contentSectionHeading {
|
||||
font-weight : bold;
|
||||
font-size : 12pt;
|
||||
color : #000000;
|
||||
text-decoration : none;
|
||||
}
|
||||
|
||||
.contentRule {
|
||||
background : #3366cc;
|
||||
}
|
||||
|
||||
.contentMoreLink {
|
||||
font-weight : bold;
|
||||
color : #3366cc;
|
||||
}
|
||||
|
||||
.contentHat {
|
||||
font-weight : bold;
|
||||
font-size : 10pt;
|
||||
color : #000000;
|
||||
text-decoration : none;
|
||||
}
|
||||
|
||||
.contentDevNewsStoryHeading {
|
||||
font-weight : normal;
|
||||
font-size : 10pt;
|
||||
font-family : "Arial", "Helvetica", Sans-serif;
|
||||
color : #000000;
|
||||
text-decoration : none;
|
||||
}
|
||||
|
||||
.contentArticleTypeIndex {
|
||||
font-size : 0.7em;
|
||||
color : #3366cc;
|
||||
}
|
||||
|
||||
.body3, blb, bottomlink {
|
||||
font-weight : normal;
|
||||
font-size : 11pt;
|
||||
font-family : "Arial", "Helvetica", Sans-serif;
|
||||
color : #000000;
|
||||
text-decoration : none;
|
||||
}
|
||||
|
||||
.blueHeading2 {
|
||||
font-weight : bold;
|
||||
font-size : 12pt;
|
||||
font-family : "Arial", "Helvetica", Sans-serif;
|
||||
color : #003399;
|
||||
text-decoration : none;
|
||||
}
|
||||
|
||||
.bigBlue {
|
||||
font-weight : bold;
|
||||
font-size : 14pt;
|
||||
color : #013399;
|
||||
text-decoration : none;
|
||||
}
|
||||
|
||||
.abstract {
|
||||
font-style : italic;
|
||||
font-weight : normal;
|
||||
font-size : 10pt;
|
||||
line-height : 11pt;
|
||||
font-family : "Arial", "Helvetica", Sans-serif;
|
||||
color : #000000;
|
||||
text-decoration : none;
|
||||
padding : 10px;
|
||||
}
|
||||
/* new classes - added 01/11/01 rare medium */
|
||||
|
||||
.whiteLink { font-size : 10pt; text-decoration : none; color : #ffffff; }
|
||||
|
||||
.whiteLinkB { font-size : 10pt; font-weight : bold; text-decoration : none; color : #ffffff; }
|
||||
|
||||
.whiteLinkSmall { font-size : 9pt; text-decoration : none; color : #ffffff; }
|
||||
.yellowLinkSmall { font-size : 9pt; font-weight : bold; text-decoration : none; color : #ffdf00; }
|
||||
.whiteLinkVerySmall { font-size : 8pt; text-decoration : none; color : #ffffff; }
|
||||
|
||||
.newBody { font-weight : normal; font-size : 9pt; font-family : "Arial", "Helvetica", Sans-serif; color : #000000; text-decoration : none; }
|
||||
|
||||
.newTitle { font-weight : bold; font-size : 11pt; font-family : "Arial", "Helvetica", Sans-serif; color : #000000; text-decoration : none; }
|
||||
|
||||
.newDate { font-weight : normal; font-size : 8pt; font-family : "Arial", "Helvetica", Sans-serif; color : #000000; text-decoration : none; margin-top : 3pt; }
|
||||
|
||||
.newHeading { font-weight : bold; font-size : 9pt; font-family : "Arial", "Helvetica", Sans-serif; color : #000000; text-decoration : none; }
|
||||
|
||||
.bigBlack { font-weight : bold; font-size : 14pt; font-family : "Arial", "Helvetica", Sans-serif; color : #000000; text-decoration : none; }
|
||||
|
||||
BODY
|
||||
{
|
||||
MARGINLEFT: 18px
|
||||
}
|
||||
/* Changed font size from 12px to 14 px here due to complaints 2002/5/20 Tom Lam */
|
||||
TR, TD, P, LAYER {
|
||||
FONT-SIZE: 14px;
|
||||
COLOR: #000000;
|
||||
FONT-FAMILY: arial, helvetica, sans-serif;
|
||||
TEXT-DECORATION: none;
|
||||
}
|
||||
|
||||
.newsItem {
|
||||
FONT-SIZE: 11px;
|
||||
COLOR: #000000;
|
||||
FONT-FAMILY: arial, helvetica, sans-serif;
|
||||
TEXT-DECORATION: none;
|
||||
}
|
||||
|
||||
A {
|
||||
COLOR: #0000cc;
|
||||
TEXT-DECORATION: none;
|
||||
}
|
||||
|
||||
A: hover {
|
||||
COLOR: #6666cc;
|
||||
TEXT-DECORATION: none;
|
||||
}
|
||||
|
||||
.divider
|
||||
{
|
||||
BACKGROUND: #999999
|
||||
}
|
||||
|
||||
.lightBG
|
||||
{
|
||||
BACKGROUND: #cccccc;
|
||||
}
|
||||
|
||||
.intTopnav {
|
||||
FONT-SIZE: 12px;
|
||||
FONT-WEIGHT: bold;
|
||||
COLOR: #666666;
|
||||
}
|
||||
|
||||
.intTopnav A {
|
||||
FONT-SIZE: 12px;
|
||||
FONT-WEIGHT: bold;
|
||||
COLOR: #000000;
|
||||
TEXT-DECORATION: none;
|
||||
}
|
||||
|
||||
.intTopnav A:hover {
|
||||
FONT-SIZE: 12px;
|
||||
FONT-WEIGHT: bold;
|
||||
COLOR: #666666;
|
||||
TEXT-DECORATION: underline;
|
||||
}
|
||||
|
||||
.leftNavTop {
|
||||
FONT-SIZE: 14px;
|
||||
FONT-WEIGHT: bold;
|
||||
}
|
||||
|
||||
.leftNavTop A {
|
||||
FONT-SIZE: 14px;
|
||||
FONT-WEIGHT: bold;
|
||||
COLOR: #0000cc;
|
||||
TEXT-DECORATION: underline;
|
||||
}
|
||||
|
||||
.leftNavTop A:hover {
|
||||
FONT-SIZE: 14px;
|
||||
FONT-WEIGHT: bold;
|
||||
COLOR: #6666cc;
|
||||
}
|
||||
|
||||
.leftNav {
|
||||
FONT-SIZE: 12px;
|
||||
COLOR: #666666;
|
||||
FONT-WEIGHT: bold;
|
||||
}
|
||||
|
||||
.leftNav A {
|
||||
FONT-SIZE: 12px;
|
||||
COLOR: #0000cc;
|
||||
FONT-WEIGHT: normal;
|
||||
TEXT-DECORATION: underline;
|
||||
}
|
||||
|
||||
.leftNav A:hover {
|
||||
FONT-SIZE: 12px;
|
||||
COLOR: #6666cc;
|
||||
FONT-WEIGHT: normal;
|
||||
}
|
||||
|
||||
.prodList {
|
||||
FONT-SIZE: 13px;
|
||||
FONT-WEIGHT: bold;
|
||||
COLOR: #666666;
|
||||
TEXT-DECORATION: none;
|
||||
MARGIN-TOP: -6px;
|
||||
}
|
||||
|
||||
.prodList A {
|
||||
COLOR: #666666;
|
||||
TEXT-DECORATION: none;
|
||||
}
|
||||
|
||||
.prodList A:hover {
|
||||
COLOR: #6666cc;
|
||||
TEXT-DECORATION: underline;
|
||||
}
|
||||
|
||||
.contentHeader {
|
||||
FONT-FAMILY: arial, helvetica, sans-serif;
|
||||
FONT-SIZE: 20px;
|
||||
FONT-WEIGHT: bold;
|
||||
}
|
||||
|
||||
.contentHeader A {
|
||||
COLOR: #000000;
|
||||
TEXT-DECORATION: underline;
|
||||
}
|
||||
|
||||
.contentHeader A: hover {
|
||||
COLOR: #666666;
|
||||
TEXT-DECORATION: underline;
|
||||
}
|
||||
|
||||
.contentSubHeader {
|
||||
FONT-FAMILY: arial, helvetica, sans-serif;
|
||||
FONT-SIZE: 16px;
|
||||
FONT-WEIGHT: bold;
|
||||
MARGIN-BOTTOM: -8px;
|
||||
}
|
||||
|
||||
.subHeader {
|
||||
FONT-FAMILY: arial, helvetica, sans-serif;
|
||||
FONT-SIZE: 16px;
|
||||
FONT-WEIGHT: bold;
|
||||
}
|
||||
|
||||
.pressSubHead {
|
||||
FONT-WEIGHT: bold;
|
||||
COLOR: #003366;
|
||||
}
|
||||
|
||||
.bodyLight {
|
||||
COLOR: #666666;
|
||||
}
|
||||
|
||||
A.bodyNav1 {
|
||||
COLOR: #0000cc;
|
||||
TEXT-DECORATION: underline;
|
||||
}
|
||||
|
||||
A.bodyNav1:hover {
|
||||
COLOR: #6666cc;
|
||||
TEXT-DECORATION: underline;
|
||||
}
|
||||
|
||||
A.bodyNav2 {
|
||||
COLOR: #333333;
|
||||
TEXT-DECORATION: underline;
|
||||
}
|
||||
|
||||
A.bodyNav2:hover {
|
||||
COLOR: #003366;
|
||||
TEXT-DECORATION: underline;
|
||||
}
|
||||
|
||||
INPUT.TEXT {
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
.tableHeader {
|
||||
FONT-SIZE: 11px;
|
||||
COLOR: #333333;
|
||||
}
|
||||
|
||||
.footer {
|
||||
font-size: 11px;
|
||||
COLOR: #666666;
|
||||
MARGIN-BOTTOM: 0px;
|
||||
}
|
||||
|
||||
.footer A {
|
||||
COLOR: #003366;
|
||||
}
|
||||
|
||||
.footer A:hover {
|
||||
COLOR: #006699;
|
||||
}
|
||||
|
||||
.Menu
|
||||
{
|
||||
VISIBILITY: hidden;
|
||||
POSITION: absolute;
|
||||
TOP: 93px;
|
||||
}
|
||||
|
||||
.Menu TD
|
||||
{
|
||||
FONT-SIZE: 11px;
|
||||
COLOR: #ffffff;
|
||||
FONT-FAMILY: arial, helvetica, sans-serif;
|
||||
TEXT-DECORATION: none;
|
||||
}
|
||||
|
||||
.Menu A
|
||||
{
|
||||
FONT-SIZE: 11px;
|
||||
COLOR: #ffffff;
|
||||
FONT-FAMILY: arial, helvetica, sans-serif;
|
||||
TEXT-DECORATION: none;
|
||||
}
|
||||
|
||||
.Menu A:hover
|
||||
{
|
||||
FONT-SIZE: 11px;
|
||||
COLOR: #cccccc;
|
||||
FONT-FAMILY: arial, helvetica, sans-serif;
|
||||
TEXT-DECORATION: none;
|
||||
}
|
||||
|
||||
.Trigger
|
||||
{
|
||||
POSITION: relative;
|
||||
TOP: 0px;
|
||||
LEFT: 0px;
|
||||
}
|
||||
|
||||
select {
|
||||
FONT-SIZE: 10px;
|
||||
COLOR: #000000;
|
||||
FONT-FAMILY: arial, helvetica, sans-serif;
|
||||
}
|
||||
|
||||
INPUT.TEXT.srchBox {
|
||||
FONT-SIZE: 12px;
|
||||
WIDTH: 116px;
|
||||
}
|
||||
A.leftLink {
|
||||
COLOR: #0000cc;
|
||||
TEXT-DECORATION: none;
|
||||
}
|
||||
|
||||
A.leftLink:hover {
|
||||
COLOR: #6666cc;
|
||||
TEXT-DECORATION: none;
|
||||
}
|
||||
|
||||
A.leftLinkB {
|
||||
COLOR: #000000;
|
||||
TEXT-DECORATION: none;
|
||||
FONT-WEIGHT: bold;
|
||||
}
|
||||
|
||||
.topLinkB {
|
||||
|
||||
34
official/1.104/docs/styles/default.css
Normal file
34
official/1.104/docs/styles/default.css
Normal file
@ -0,0 +1,34 @@
|
||||
body {padding: 0px 0px 0px 26px;background: #ffffff; color: #000000;font-family: Verdana, Arial, Helvetica, sans-serif;font-size: 9pt;}
|
||||
h1, h2, h3, h4 {font-family: Verdana, Arial, Helvetica, sans-serif;margin-left: -6px;margin-top: .5em;margin-bottom: .5em; }
|
||||
h1 {font-size: 160%;}
|
||||
h2 {font-size: 145%;}
|
||||
h3 {font-size: 130%;}
|
||||
h4 {font-size: 115%;}
|
||||
h5 {font-size: 105%;}
|
||||
hr {align:"right";color:"#000080";noshade;}
|
||||
ul p, ol p, dl p {margin-left: 0em;}
|
||||
p {margin-top: .6em;margin-bottom:.6em;}
|
||||
dl {margin-top: 0em;}
|
||||
dd {margin-bottom: 0em;margin-left: 1.9em;}
|
||||
dt {margin-top: .6em; }
|
||||
ul, ol {margin-top: .6em;margin-bottom: 0em;}
|
||||
ol {margin-left: 1.9em; }
|
||||
ul {list-style-type: disc;margin-left: 1.9em; }
|
||||
li {margin-bottom: .6em;}
|
||||
ul ol, ol ol {list-style-type: lower-alpha;}
|
||||
pre {margin-top: .6em;margin-bottom: .6em; }
|
||||
pre,code {font-family: Courier New, Courier, mono;color: #660000;}
|
||||
table {background: #999999;margin-top: .6em;margin-bottom: .3em;}
|
||||
th {padding: 4px 8px;background: #cccccc;text-align: left;font-size: 70%;vertical-align: bottom;height: 25px;}
|
||||
td {padding: 4px 8px;background: #ffffff;vertical-align: top;font-size: 70%;height: 25px;}
|
||||
blockquote {margin-left: 3.8em;margin-right: 3.8em;margin-top: .6em;margin-bottom: .6em;}
|
||||
sup {text-decoration: none;font-size: smaller; }
|
||||
a:link {color: #0066ff;}
|
||||
a:visited {color: #0066ff;}
|
||||
a:hover {color: #cc9900;}
|
||||
.select {margin-bottom:-4px;border-width: 1px;border-style: solid;width: 400px;}
|
||||
.input, .textarea {margin-bottom:-4px;border-width: 1px;border-style: solid;width: 400px;}
|
||||
.submit {background-color: #CCCCCC;border-width: 1px;border-style: solid;}
|
||||
.reset {background-color: #CCCCCC;border-width: 1px;border-style: solid;}
|
||||
.button {background-color: #CCCCCC;border-width: 1px;border-style: solid;}
|
||||
.InfoField {border: 2px solid #AAAAAA;padding: 4px 4px;background: #EFEFEF;}
|
||||
1
official/1.104/examples/C10.exc
Normal file
1
official/1.104/examples/C10.exc
Normal file
@ -0,0 +1 @@
|
||||
ExtraRequirements.exc
|
||||
1
official/1.104/examples/C5.exc
Normal file
1
official/1.104/examples/C5.exc
Normal file
@ -0,0 +1 @@
|
||||
ExtraRequirements.exc
|
||||
1
official/1.104/examples/C6.exc
Normal file
1
official/1.104/examples/C6.exc
Normal file
@ -0,0 +1 @@
|
||||
ExtraRequirements.exc
|
||||
1
official/1.104/examples/D10.exc
Normal file
1
official/1.104/examples/D10.exc
Normal file
@ -0,0 +1 @@
|
||||
ExtraRequirements.exc
|
||||
1
official/1.104/examples/D11.exc
Normal file
1
official/1.104/examples/D11.exc
Normal file
@ -0,0 +1 @@
|
||||
ExtraRequirements.exc
|
||||
1
official/1.104/examples/D5.exc
Normal file
1
official/1.104/examples/D5.exc
Normal file
@ -0,0 +1 @@
|
||||
ExtraRequirements.exc
|
||||
1
official/1.104/examples/D6.exc
Normal file
1
official/1.104/examples/D6.exc
Normal file
@ -0,0 +1 @@
|
||||
ExtraRequirements.exc
|
||||
1
official/1.104/examples/D7.exc
Normal file
1
official/1.104/examples/D7.exc
Normal file
@ -0,0 +1 @@
|
||||
ExtraRequirements.exc
|
||||
1
official/1.104/examples/D9.exc
Normal file
1
official/1.104/examples/D9.exc
Normal file
@ -0,0 +1 @@
|
||||
ExtraRequirements.exc
|
||||
5
official/1.104/examples/ExtraRequirements.exc
Normal file
5
official/1.104/examples/ExtraRequirements.exc
Normal file
@ -0,0 +1,5 @@
|
||||
common\multimedia\MidiOutExample.dpr=spin.dcu
|
||||
common\numformat\NumFormatExample.dpr=spin.dcu
|
||||
windows\debug\sourceloc\SourceLocExample.dpr=spin.dcu
|
||||
windows\delphitools\peviewer\PeViewer.dpr=spin.dcu
|
||||
windows\tasks\TaskDemo.dpr=MsHtml.dcu
|
||||
23
official/1.104/examples/JclDebugExamples.bdsgroup
Normal file
23
official/1.104/examples/JclDebugExamples.bdsgroup
Normal file
@ -0,0 +1,23 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<BorlandProject>
|
||||
<PersonalityInfo>
|
||||
<Option>
|
||||
<Option Name="Personality">Default.Personality</Option>
|
||||
<Option Name="ProjectType"></Option>
|
||||
<Option Name="Version">1.0</Option>
|
||||
<Option Name="GUID">{DA6232CE-74D4-4FD2-95D5-44C5C155C336}</Option>
|
||||
</Option>
|
||||
</PersonalityInfo>
|
||||
<Default.Personality>
|
||||
|
||||
<Projects>
|
||||
<Projects Name="StackTrackDLLsExample.exe">windows\debug\stacktrack\StackTrackDLLsExample.bdsproj</Projects>
|
||||
<Projects Name="StackTrackDLLsStaticLibrary.dll">windows\debug\stacktrack\StackTrackDLLsStaticLibrary.bdsproj</Projects>
|
||||
<Projects Name="StackTrackDLLsDynamicLibrary.dll">windows\debug\stacktrack\StackTrackDLLsDynamicLibrary.bdsproj</Projects>
|
||||
<Projects Name="StackTrackDLLsComLibrary.dll">windows\debug\stacktrack\StackTrackDLLsComLibrary.bdsproj</Projects>
|
||||
<Projects Name="StackTrackExample.exe">windows\debug\stacktrack\StackTrackExample.bdsproj</Projects>
|
||||
<Projects Name="Targets">StackTrackDLLsExample.exe StackTrackDLLsStaticLibrary.dll StackTrackDLLsDynamicLibrary.dll StackTrackDLLsComLibrary.dll StackTrackExample.exe</Projects>
|
||||
</Projects>
|
||||
<Dependencies/>
|
||||
</Default.Personality>
|
||||
</BorlandProject>
|
||||
33
official/1.104/examples/JclDebugExamples.bpg
Normal file
33
official/1.104/examples/JclDebugExamples.bpg
Normal file
@ -0,0 +1,33 @@
|
||||
#------------------------------------------------------------------------------
|
||||
VERSION = BWS.01
|
||||
#------------------------------------------------------------------------------
|
||||
!ifndef ROOT
|
||||
ROOT = $(MAKEDIR)\..
|
||||
!endif
|
||||
#------------------------------------------------------------------------------
|
||||
MAKE = $(ROOT)\bin\make.exe -$(MAKEFLAGS) -f$**
|
||||
DCC = $(ROOT)\bin\dcc32.exe $**
|
||||
BRCC = $(ROOT)\bin\brcc32.exe $**
|
||||
#------------------------------------------------------------------------------
|
||||
PROJECTS = StackTrackDLLsExample.exe StackTrackDLLsStaticLibrary.dll \
|
||||
StackTrackDLLsDynamicLibrary.dll StackTrackDLLsComLibrary.dll StackTrackExample.exe
|
||||
#------------------------------------------------------------------------------
|
||||
default: $(PROJECTS)
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
StackTrackDLLsExample.exe: windows\debug\stacktrack\StackTrackDLLsExample.dpr
|
||||
$(DCC)
|
||||
|
||||
StackTrackDLLsStaticLibrary.dll: windows\debug\stacktrack\StackTrackDLLsStaticLibrary.dpr
|
||||
$(DCC)
|
||||
|
||||
StackTrackDLLsDynamicLibrary.dll: windows\debug\stacktrack\StackTrackDLLsDynamicLibrary.dpr
|
||||
$(DCC)
|
||||
|
||||
StackTrackDLLsComLibrary.dll: windows\debug\stacktrack\StackTrackDLLsComLibrary.dpr
|
||||
$(DCC)
|
||||
|
||||
StackTrackExample.exe: windows\debug\stacktrack\StackTrackExample.dpr
|
||||
$(DCC)
|
||||
|
||||
|
||||
@ -0,0 +1,2 @@
|
||||
[Directories]
|
||||
OutputDir=..\..\..\..\bin
|
||||
@ -0,0 +1,21 @@
|
||||
program AlgorithmsExample;
|
||||
|
||||
{$I jcl.inc}
|
||||
|
||||
uses
|
||||
{$IFDEF MSWINDOWS}
|
||||
Forms,
|
||||
{$ENDIF MSWINDOWS}
|
||||
{$IFDEF LINUX}
|
||||
QForms,
|
||||
{$ENDIF LINUX}
|
||||
AlgorithmsExampleMain in 'AlgorithmsExampleMain.pas' {MainForm};
|
||||
|
||||
{$R *.res}
|
||||
{$R ..\..\..\..\source\windows\JclCommCtrlAsInvoker.res}
|
||||
|
||||
begin
|
||||
Application.Initialize;
|
||||
Application.CreateForm(TMainForm, MainForm);
|
||||
Application.Run;
|
||||
end.
|
||||
Binary file not shown.
@ -0,0 +1,250 @@
|
||||
object MainForm: TMainForm
|
||||
Left = 280
|
||||
Top = 180
|
||||
ClientWidth = 384
|
||||
ClientHeight = 304
|
||||
ActiveControl = PageControl1
|
||||
Caption = 'Algos'
|
||||
Color = clBtnFace
|
||||
Font.Charset = DEFAULT_CHARSET
|
||||
Font.Color = clWindowText
|
||||
Font.Height = 11
|
||||
Font.Name = 'MS Sans Serif'
|
||||
Font.Pitch = fpVariable
|
||||
Font.Style = []
|
||||
OldCreateOrder = True
|
||||
OnCreate = FormCreate
|
||||
PixelsPerInch = 96
|
||||
TextHeight = 13
|
||||
object PageControl1: TPageControl
|
||||
Left = 0
|
||||
Top = 0
|
||||
Width = 384
|
||||
Height = 303
|
||||
ActivePage = tbsApply
|
||||
Align = alClient
|
||||
TabOrder = 0
|
||||
object tbsApply: TTabSheet
|
||||
Caption = 'Apply'
|
||||
object btnApplyGenerate: TButton
|
||||
Left = 152
|
||||
Top = 48
|
||||
Width = 75
|
||||
Height = 25
|
||||
Caption = 'Generate'
|
||||
TabOrder = 0
|
||||
OnClick = btnApplyGenerateClick
|
||||
end
|
||||
object btnApply: TButton
|
||||
Left = 152
|
||||
Top = 96
|
||||
Width = 75
|
||||
Height = 25
|
||||
Caption = 'Apply'
|
||||
TabOrder = 1
|
||||
OnClick = btnApplyClick
|
||||
end
|
||||
object lbxApply: TListBox
|
||||
Left = 16
|
||||
Top = 48
|
||||
Width = 121
|
||||
Height = 137
|
||||
ItemHeight = 13
|
||||
TabOrder = 2
|
||||
end
|
||||
object edtApply: TEdit
|
||||
Left = 240
|
||||
Top = 96
|
||||
Width = 121
|
||||
Height = 21
|
||||
TabOrder = 3
|
||||
Text = '4'
|
||||
end
|
||||
end
|
||||
object tbsFind: TTabSheet
|
||||
Caption = 'Find'
|
||||
ImageIndex = 1
|
||||
object lblFound: TLabel
|
||||
Left = 152
|
||||
Top = 136
|
||||
Width = 3
|
||||
Height = 13
|
||||
end
|
||||
object btnFindGenerate: TButton
|
||||
Left = 152
|
||||
Top = 48
|
||||
Width = 75
|
||||
Height = 25
|
||||
Caption = 'Generate'
|
||||
TabOrder = 0
|
||||
OnClick = btnFindGenerateClick
|
||||
end
|
||||
object btnFind: TButton
|
||||
Left = 152
|
||||
Top = 96
|
||||
Width = 75
|
||||
Height = 25
|
||||
Caption = 'Find'
|
||||
TabOrder = 1
|
||||
OnClick = btnFindClick
|
||||
end
|
||||
object lbxFind: TListBox
|
||||
Left = 16
|
||||
Top = 48
|
||||
Width = 121
|
||||
Height = 137
|
||||
ItemHeight = 13
|
||||
TabOrder = 2
|
||||
end
|
||||
object edtFind: TEdit
|
||||
Left = 240
|
||||
Top = 96
|
||||
Width = 121
|
||||
Height = 21
|
||||
TabOrder = 3
|
||||
end
|
||||
end
|
||||
object tbsCountObject: TTabSheet
|
||||
Caption = 'CountObject'
|
||||
ImageIndex = 2
|
||||
object lblCount: TLabel
|
||||
Left = 152
|
||||
Top = 136
|
||||
Width = 6
|
||||
Height = 13
|
||||
Caption = '0'
|
||||
end
|
||||
object btnCountGenerate: TButton
|
||||
Left = 152
|
||||
Top = 48
|
||||
Width = 75
|
||||
Height = 25
|
||||
Caption = 'Generate'
|
||||
TabOrder = 0
|
||||
OnClick = btnCountGenerateClick
|
||||
end
|
||||
object btnCount: TButton
|
||||
Left = 152
|
||||
Top = 96
|
||||
Width = 75
|
||||
Height = 25
|
||||
Caption = 'Count'
|
||||
TabOrder = 1
|
||||
OnClick = btnCountClick
|
||||
end
|
||||
object lbxCount: TListBox
|
||||
Left = 16
|
||||
Top = 48
|
||||
Width = 121
|
||||
Height = 137
|
||||
ItemHeight = 13
|
||||
TabOrder = 2
|
||||
end
|
||||
object edtCount: TEdit
|
||||
Left = 240
|
||||
Top = 96
|
||||
Width = 121
|
||||
Height = 21
|
||||
TabOrder = 3
|
||||
end
|
||||
end
|
||||
object tbsCopy: TTabSheet
|
||||
Caption = 'Copy'
|
||||
ImageIndex = 3
|
||||
object btnCopyGenerate: TButton
|
||||
Left = 136
|
||||
Top = 64
|
||||
Width = 75
|
||||
Height = 25
|
||||
Caption = 'Generate'
|
||||
TabOrder = 0
|
||||
OnClick = btnCopyGenerateClick
|
||||
end
|
||||
object btnCopy: TButton
|
||||
Left = 136
|
||||
Top = 120
|
||||
Width = 75
|
||||
Height = 25
|
||||
Caption = 'Copy'
|
||||
TabOrder = 1
|
||||
OnClick = btnCopyClick
|
||||
end
|
||||
object lbxCopySrc: TListBox
|
||||
Left = 40
|
||||
Top = 56
|
||||
Width = 73
|
||||
Height = 153
|
||||
ItemHeight = 13
|
||||
TabOrder = 2
|
||||
end
|
||||
object lbxCopyDes: TListBox
|
||||
Left = 232
|
||||
Top = 56
|
||||
Width = 81
|
||||
Height = 153
|
||||
ItemHeight = 13
|
||||
TabOrder = 3
|
||||
end
|
||||
end
|
||||
object tbsReverse: TTabSheet
|
||||
Caption = 'Reverse'
|
||||
ImageIndex = 4
|
||||
object btnReverseGenerate: TButton
|
||||
Left = 176
|
||||
Top = 56
|
||||
Width = 75
|
||||
Height = 25
|
||||
Caption = 'Generate'
|
||||
TabOrder = 0
|
||||
OnClick = btnReverseGenerateClick
|
||||
end
|
||||
object btnReverse: TButton
|
||||
Left = 176
|
||||
Top = 104
|
||||
Width = 75
|
||||
Height = 25
|
||||
Caption = 'Reverse'
|
||||
TabOrder = 1
|
||||
OnClick = btnReverseClick
|
||||
end
|
||||
object lbxReverse: TListBox
|
||||
Left = 32
|
||||
Top = 56
|
||||
Width = 121
|
||||
Height = 153
|
||||
ItemHeight = 13
|
||||
TabOrder = 2
|
||||
end
|
||||
end
|
||||
object tbsSort: TTabSheet
|
||||
Caption = 'Sort'
|
||||
ImageIndex = 5
|
||||
object btnSortGenerate: TButton
|
||||
Left = 176
|
||||
Top = 56
|
||||
Width = 75
|
||||
Height = 25
|
||||
Caption = 'Generate'
|
||||
TabOrder = 0
|
||||
OnClick = btnSortGenerateClick
|
||||
end
|
||||
object btnSort: TButton
|
||||
Left = 176
|
||||
Top = 104
|
||||
Width = 75
|
||||
Height = 25
|
||||
Caption = 'Sort'
|
||||
TabOrder = 1
|
||||
OnClick = btnSortClick
|
||||
end
|
||||
object lbxSort: TListBox
|
||||
Left = 32
|
||||
Top = 56
|
||||
Width = 121
|
||||
Height = 153
|
||||
ItemHeight = 13
|
||||
TabOrder = 2
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@ -0,0 +1,246 @@
|
||||
unit AlgorithmsExampleMain;
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
{$IFDEF WIN32}
|
||||
Windows, Messages, Forms, ComCtrls, Graphics, Controls,
|
||||
Dialogs, StdCtrls,
|
||||
{$ENDIF}
|
||||
{$IFDEF LINUX}
|
||||
QForms, QStdCtrls, QControls, QComCtrls,
|
||||
{$ENDIF}
|
||||
SysUtils, Classes,
|
||||
JclContainerIntf, JclArrayLists, JclLinkedLists;
|
||||
|
||||
type
|
||||
TMainForm = class(TForm)
|
||||
PageControl1: TPageControl;
|
||||
tbsApply: TTabSheet;
|
||||
tbsFind: TTabSheet;
|
||||
tbsCountObject: TTabSheet;
|
||||
tbsCopy: TTabSheet;
|
||||
tbsReverse: TTabSheet;
|
||||
tbsSort: TTabSheet;
|
||||
btnApplyGenerate: TButton;
|
||||
btnApply: TButton;
|
||||
lbxApply: TListBox;
|
||||
btnFindGenerate: TButton;
|
||||
btnFind: TButton;
|
||||
lbxFind: TListBox;
|
||||
edtFind: TEdit;
|
||||
btnCountGenerate: TButton;
|
||||
btnCount: TButton;
|
||||
lbxCount: TListBox;
|
||||
edtCount: TEdit;
|
||||
btnCopyGenerate: TButton;
|
||||
btnCopy: TButton;
|
||||
lbxCopySrc: TListBox;
|
||||
lbxCopyDes: TListBox;
|
||||
btnReverseGenerate: TButton;
|
||||
btnReverse: TButton;
|
||||
lbxReverse: TListBox;
|
||||
btnSortGenerate: TButton;
|
||||
btnSort: TButton;
|
||||
lbxSort: TListBox;
|
||||
lblFound: TLabel;
|
||||
lblCount: TLabel;
|
||||
edtApply: TEdit;
|
||||
procedure btnApplyGenerateClick(Sender: TObject);
|
||||
procedure FormCreate(Sender: TObject);
|
||||
procedure btnApplyClick(Sender: TObject);
|
||||
procedure btnFindGenerateClick(Sender: TObject);
|
||||
procedure btnFindClick(Sender: TObject);
|
||||
procedure btnCountGenerateClick(Sender: TObject);
|
||||
procedure btnCountClick(Sender: TObject);
|
||||
procedure btnCopyGenerateClick(Sender: TObject);
|
||||
procedure btnCopyClick(Sender: TObject);
|
||||
procedure btnReverseGenerateClick(Sender: TObject);
|
||||
procedure btnReverseClick(Sender: TObject);
|
||||
procedure btnSortGenerateClick(Sender: TObject);
|
||||
procedure btnSortClick(Sender: TObject);
|
||||
private
|
||||
public
|
||||
List: IJclList;
|
||||
end;
|
||||
|
||||
var
|
||||
MainForm: TMainForm;
|
||||
|
||||
implementation
|
||||
|
||||
{$R *.dfm}
|
||||
|
||||
uses JclAlgorithms;
|
||||
|
||||
procedure TMainForm.btnApplyGenerateClick(Sender: TObject);
|
||||
var
|
||||
I: Integer;
|
||||
It: IJclIterator;
|
||||
begin
|
||||
List.Clear;
|
||||
for I := 1 to 10 do
|
||||
List.Add(TObject(I));
|
||||
lbxApply.Items.Clear;
|
||||
It := List.First;
|
||||
while It.HasNext do
|
||||
lbxApply.Items.Add(IntToStr(Integer(It.Next)));
|
||||
end;
|
||||
|
||||
procedure TMainForm.FormCreate(Sender: TObject);
|
||||
begin
|
||||
List := TJclArrayList.Create(16, False);
|
||||
end;
|
||||
|
||||
function Add2(AObject: TObject): TObject;
|
||||
begin
|
||||
Result := TObject(Integer(AObject) + 2);
|
||||
end;
|
||||
|
||||
procedure TMainForm.btnApplyClick(Sender: TObject);
|
||||
var
|
||||
It: IJclIterator;
|
||||
Value: Integer;
|
||||
begin
|
||||
Value := StrToIntDef(edtApply.Text, 0);
|
||||
JclAlgorithms.Apply(List.First, Value, Add2);
|
||||
lbxApply.Items.Clear;
|
||||
It := List.First;
|
||||
while It.HasNext do
|
||||
lbxApply.Items.Add(IntToStr(Integer(It.Next)));
|
||||
end;
|
||||
|
||||
procedure TMainForm.btnFindGenerateClick(Sender: TObject);
|
||||
var
|
||||
I: Integer;
|
||||
It: IJclIterator;
|
||||
begin
|
||||
List.Clear;
|
||||
for I := 1 to 10 do
|
||||
List.Add(TObject(I));
|
||||
lbxFind.Items.Clear;
|
||||
It := List.First;
|
||||
while It.HasNext do
|
||||
lbxFind.Items.Add(IntToStr(Integer(It.Next)));
|
||||
end;
|
||||
|
||||
procedure TMainForm.btnFindClick(Sender: TObject);
|
||||
var
|
||||
It: IJclIterator;
|
||||
Value: Integer;
|
||||
begin
|
||||
Value := StrToIntDef(edtFind.Text, 0);
|
||||
It := JclAlgorithms.Find(List.First, List.Size, TObject(Value), SimpleCompare);
|
||||
if It = nil then
|
||||
lblFound.Caption := 'Not found'
|
||||
else
|
||||
lblFound.Caption := 'Found';
|
||||
end;
|
||||
|
||||
procedure TMainForm.btnCountGenerateClick(Sender: TObject);
|
||||
var
|
||||
I: Integer;
|
||||
It: IJclIterator;
|
||||
begin
|
||||
Randomize;
|
||||
List.Clear;
|
||||
for I := 1 to 10 do
|
||||
List.Add(TObject(Random(10) + 1));
|
||||
lbxCount.Items.Clear;
|
||||
It := List.First;
|
||||
while It.HasNext do
|
||||
lbxCount.Items.Add(IntToStr(Integer(It.Next)));
|
||||
end;
|
||||
|
||||
procedure TMainForm.btnCountClick(Sender: TObject);
|
||||
var
|
||||
Count: Integer;
|
||||
Value: Integer;
|
||||
begin
|
||||
Value := StrToIntDef(edtCount.Text, 0);
|
||||
Count := JclAlgorithms.CountObject(List.First, List.Size, TObject(Value), SimpleCompare);
|
||||
lblCount.Caption := IntToStr(Count);
|
||||
end;
|
||||
|
||||
procedure TMainForm.btnCopyGenerateClick(Sender: TObject);
|
||||
var
|
||||
I: Integer;
|
||||
It: IJclIterator;
|
||||
begin
|
||||
Randomize;
|
||||
List.Clear;
|
||||
for I := 1 to 10 do
|
||||
List.Add(TObject(Random(10) + 1));
|
||||
lbxCopySrc.Items.Clear;
|
||||
It := List.First;
|
||||
while It.HasNext do
|
||||
lbxCopySrc.Items.Add(IntToStr(Integer(It.Next)));
|
||||
end;
|
||||
|
||||
procedure TMainForm.btnCopyClick(Sender: TObject);
|
||||
var
|
||||
AnotherList: IJclList;
|
||||
It: IJclIterator;
|
||||
begin
|
||||
AnotherList := TJclArrayList.Create(16, False);
|
||||
JclAlgorithms.Generate(AnotherList, 10, TObject(0));
|
||||
JclAlgorithms.Copy(List.First, List.Size, AnotherList.First);
|
||||
lbxCopyDes.Items.Clear;
|
||||
It := AnotherList.First;
|
||||
while It.HasNext do
|
||||
lbxCopyDes.Items.Add(IntToStr(Integer(It.Next)));
|
||||
end;
|
||||
|
||||
procedure TMainForm.btnReverseGenerateClick(Sender: TObject);
|
||||
var
|
||||
I: Integer;
|
||||
It: IJclIterator;
|
||||
begin
|
||||
List.Clear;
|
||||
for I := 1 to 10 do
|
||||
List.Add(TObject(I));
|
||||
lbxReverse.Items.Clear;
|
||||
It := List.First;
|
||||
while It.HasNext do
|
||||
lbxReverse.Items.Add(IntToStr(Integer(It.Next)));
|
||||
end;
|
||||
|
||||
procedure TMainForm.btnReverseClick(Sender: TObject);
|
||||
var
|
||||
It: IJclIterator;
|
||||
begin
|
||||
JclAlgorithms.Reverse(List.First, List.Last);
|
||||
lbxReverse.Items.Clear;
|
||||
It := List.First;
|
||||
while It.HasNext do
|
||||
lbxReverse.Items.Add(IntToStr(Integer(It.Next)));
|
||||
end;
|
||||
|
||||
procedure TMainForm.btnSortGenerateClick(Sender: TObject);
|
||||
var
|
||||
I: Integer;
|
||||
It: IJclIterator;
|
||||
begin
|
||||
Randomize;
|
||||
List.Clear;
|
||||
for I := 1 to 10 do
|
||||
List.Add(TObject(Random(10) - 5));
|
||||
lbxSort.Items.Clear;
|
||||
It := List.First;
|
||||
while It.HasNext do
|
||||
lbxSort.Items.Add(IntToStr(Integer(It.Next)));
|
||||
end;
|
||||
|
||||
procedure TMainForm.btnSortClick(Sender: TObject);
|
||||
var
|
||||
It: IJclIterator;
|
||||
begin
|
||||
JclAlgorithms.Sort(List, 0, 9, IntegerCompare);
|
||||
lbxSort.Items.Clear;
|
||||
It := List.First;
|
||||
while It.HasNext do
|
||||
lbxSort.Items.Add(IntToStr(Integer(It.Next)));
|
||||
end;
|
||||
|
||||
end.
|
||||
|
||||
@ -0,0 +1,76 @@
|
||||
[FileVersion]
|
||||
Version=6.0
|
||||
[Compiler]
|
||||
A=8
|
||||
B=0
|
||||
C=1
|
||||
D=1
|
||||
E=0
|
||||
F=0
|
||||
G=1
|
||||
H=1
|
||||
I=1
|
||||
J=0
|
||||
K=0
|
||||
L=1
|
||||
M=0
|
||||
N=1
|
||||
O=1
|
||||
P=1
|
||||
Q=0
|
||||
R=0
|
||||
S=0
|
||||
T=0
|
||||
U=0
|
||||
V=1
|
||||
W=0
|
||||
X=1
|
||||
Y=1
|
||||
Z=1
|
||||
ShowHints=1
|
||||
ShowWarnings=1
|
||||
UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
|
||||
[Linker]
|
||||
MapFile=0
|
||||
OutputObjs=0
|
||||
ConsoleApp=1
|
||||
DebugInfo=0
|
||||
RemoteSymbols=0
|
||||
MinStackSize=16384
|
||||
MaxStackSize=1048576
|
||||
ImageBase=4194304
|
||||
ExeDescription=
|
||||
[Directories]
|
||||
OutputDir=..\..\..\..\bin
|
||||
UnitOutputDir=
|
||||
PackageDLLOutputDir=
|
||||
PackageDCPOutputDir=
|
||||
SearchPath=
|
||||
Packages=
|
||||
Conditionals=
|
||||
DebugSourceDirs=
|
||||
UsePackages=0
|
||||
[Parameters]
|
||||
RunParams=
|
||||
HostApplication=
|
||||
Launcher=
|
||||
UseLauncher=0
|
||||
DebugCWD=
|
||||
[Language]
|
||||
ActiveLang=
|
||||
ProjectLang=
|
||||
RootDir=
|
||||
[Version Info]
|
||||
IncludeVerInfo=0
|
||||
AutoIncBuild=0
|
||||
MajorVer=1
|
||||
MinorVer=0
|
||||
Release=0
|
||||
Build=0
|
||||
Debug=0
|
||||
PreRelease=0
|
||||
Special=0
|
||||
Private=0
|
||||
DLL=0
|
||||
Locale=1031
|
||||
CodePage=1252
|
||||
@ -0,0 +1,21 @@
|
||||
program HashingExample;
|
||||
|
||||
{$I jcl.inc}
|
||||
|
||||
uses
|
||||
{$IFDEF MSWINDOWS}
|
||||
Forms,
|
||||
{$ENDIF MSWINDOWS}
|
||||
{$IFDEF LINUX}
|
||||
QForms,
|
||||
{$ENDIF LINUX}
|
||||
HashingExampleMain in 'HashingExampleMain.pas' {MainForm};
|
||||
|
||||
{$R *.res}
|
||||
{$R ..\..\..\..\source\windows\JclCommCtrlAsInvoker.res}
|
||||
|
||||
begin
|
||||
Application.Initialize;
|
||||
Application.CreateForm(TMainForm, MainForm);
|
||||
Application.Run;
|
||||
end.
|
||||
Binary file not shown.
@ -0,0 +1,173 @@
|
||||
object MainForm: TMainForm
|
||||
Left = 281
|
||||
Top = 201
|
||||
Width = 513
|
||||
Height = 280
|
||||
HorzScrollBar.Range = 476
|
||||
VertScrollBar.Range = 209
|
||||
ActiveControl = btnIntfIntfHashMap
|
||||
Caption = 'Hashing Example'
|
||||
Color = clBtnFace
|
||||
Font.Charset = DEFAULT_CHARSET
|
||||
Font.Color = clWindowText
|
||||
Font.Height = 11
|
||||
Font.Name = 'MS Sans Serif'
|
||||
Font.Pitch = fpVariable
|
||||
Font.Style = []
|
||||
OldCreateOrder = True
|
||||
PixelsPerInch = 96
|
||||
TextHeight = 13
|
||||
object btnIntfIntfHashMap: TButton
|
||||
Left = 8
|
||||
Top = 8
|
||||
Width = 89
|
||||
Height = 25
|
||||
Caption = 'IntfIntfHashMap'
|
||||
TabOrder = 0
|
||||
OnClick = btnIntfIntfHashMapClick
|
||||
end
|
||||
object btnIntfHashSet: TButton
|
||||
Left = 103
|
||||
Top = 8
|
||||
Width = 89
|
||||
Height = 25
|
||||
Caption = 'IntfHashSet'
|
||||
TabOrder = 5
|
||||
OnClick = btnIntfHashSetClick
|
||||
end
|
||||
object btnHashMap: TButton
|
||||
Left = 8
|
||||
Top = 220
|
||||
Width = 89
|
||||
Height = 25
|
||||
Caption = 'HashMap'
|
||||
TabOrder = 4
|
||||
OnClick = btnHashMapClick
|
||||
end
|
||||
object btnHashSet: TButton
|
||||
Left = 103
|
||||
Top = 220
|
||||
Width = 89
|
||||
Height = 25
|
||||
Caption = 'HashSet'
|
||||
TabOrder = 7
|
||||
OnClick = btnHashSetClick
|
||||
end
|
||||
object btnAnsiStrIntfHashMap: TButton
|
||||
Left = 8
|
||||
Top = 47
|
||||
Width = 138
|
||||
Height = 25
|
||||
Caption = 'AnsiStrIntfHashMap'
|
||||
TabOrder = 1
|
||||
OnClick = btnAnsiStrIntfHashMapClick
|
||||
end
|
||||
object btnIntfArraySet: TButton
|
||||
Left = 198
|
||||
Top = 8
|
||||
Width = 89
|
||||
Height = 25
|
||||
Caption = 'IntfArraySet'
|
||||
TabOrder = 8
|
||||
OnClick = btnIntfArraySetClick
|
||||
end
|
||||
object btnArraySet: TButton
|
||||
Left = 198
|
||||
Top = 220
|
||||
Width = 89
|
||||
Height = 25
|
||||
Caption = 'ArraySet'
|
||||
TabOrder = 10
|
||||
OnClick = btnArraySetClick
|
||||
end
|
||||
object btnAnsiStrAnsiStrHashMap: TButton
|
||||
Left = 8
|
||||
Top = 78
|
||||
Width = 138
|
||||
Height = 25
|
||||
Caption = 'AnsiStrAnsiStrHashMap'
|
||||
TabOrder = 2
|
||||
OnClick = btnAnsiStrAnsiStrHashMapClick
|
||||
end
|
||||
object btnAnsiStrHashMap: TButton
|
||||
Left = 8
|
||||
Top = 171
|
||||
Width = 138
|
||||
Height = 25
|
||||
Caption = 'AnsiStrHashMap'
|
||||
TabOrder = 3
|
||||
OnClick = btnAnsiStrHashMapClick
|
||||
end
|
||||
object btnAnsiStrHashSet: TButton
|
||||
Left = 8
|
||||
Top = 109
|
||||
Width = 138
|
||||
Height = 25
|
||||
Caption = 'AnsiStrHashSet'
|
||||
TabOrder = 6
|
||||
OnClick = btnAnsiStrHashSetClick
|
||||
end
|
||||
object btnAnsiStrArraySet: TButton
|
||||
Left = 8
|
||||
Top = 140
|
||||
Width = 138
|
||||
Height = 25
|
||||
Caption = 'AnsiStrArraySet'
|
||||
TabOrder = 9
|
||||
OnClick = btnAnsiStrArraySetClick
|
||||
end
|
||||
object memResult: TListBox
|
||||
Left = 304
|
||||
Top = 0
|
||||
Width = 185
|
||||
Height = 248
|
||||
Anchors = [akTop, akRight, akBottom]
|
||||
ItemHeight = 13
|
||||
TabOrder = 11
|
||||
end
|
||||
object btnWideStrIntfHashMap: TButton
|
||||
Left = 152
|
||||
Top = 47
|
||||
Width = 135
|
||||
Height = 25
|
||||
Caption = 'WideStrIntfHashMap'
|
||||
TabOrder = 12
|
||||
OnClick = btnWideStrIntfHashMapClick
|
||||
end
|
||||
object btnWideStrWideStrHashMap: TButton
|
||||
Left = 152
|
||||
Top = 78
|
||||
Width = 135
|
||||
Height = 25
|
||||
Caption = 'WideStrWideStrHashMap'
|
||||
TabOrder = 13
|
||||
OnClick = btnWideStrWideStrHashMapClick
|
||||
end
|
||||
object btnWideStrHashSet: TButton
|
||||
Left = 152
|
||||
Top = 109
|
||||
Width = 135
|
||||
Height = 25
|
||||
Caption = 'WideStrHashSet'
|
||||
TabOrder = 14
|
||||
OnClick = btnWideStrHashSetClick
|
||||
end
|
||||
object btnWideStrArraySet: TButton
|
||||
Left = 152
|
||||
Top = 140
|
||||
Width = 135
|
||||
Height = 25
|
||||
Caption = 'WideStrArraySet'
|
||||
TabOrder = 15
|
||||
OnClick = btnWideStrArraySetClick
|
||||
end
|
||||
object btnWideStrHashMap: TButton
|
||||
Left = 152
|
||||
Top = 171
|
||||
Width = 135
|
||||
Height = 25
|
||||
Caption = 'AnsiStrHashMap'
|
||||
TabOrder = 16
|
||||
OnClick = btnWideStrHashMapClick
|
||||
end
|
||||
end
|
||||
@ -0,0 +1,442 @@
|
||||
unit HashingExampleMain;
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
{$IFDEF WIN32}
|
||||
Windows, Messages, Graphics, Controls, Forms, Dialogs, StdCtrls,
|
||||
{$ENDIF}
|
||||
{$IFDEF LINUX}
|
||||
QForms, QControls, QStdCtrls,
|
||||
{$ENDIF}
|
||||
SysUtils, Classes;
|
||||
|
||||
type
|
||||
TMainForm = class(TForm)
|
||||
btnIntfIntfHashMap: TButton;
|
||||
btnIntfHashSet: TButton;
|
||||
btnHashMap: TButton;
|
||||
btnHashSet: TButton;
|
||||
btnAnsiStrIntfHashMap: TButton;
|
||||
btnIntfArraySet: TButton;
|
||||
btnArraySet: TButton;
|
||||
btnAnsiStrAnsiStrHashMap: TButton;
|
||||
btnAnsiStrHashMap: TButton;
|
||||
btnAnsiStrHashSet: TButton;
|
||||
btnAnsiStrArraySet: TButton;
|
||||
memResult: TListBox;
|
||||
btnWideStrIntfHashMap: TButton;
|
||||
btnWideStrWideStrHashMap: TButton;
|
||||
btnWideStrHashSet: TButton;
|
||||
btnWideStrArraySet: TButton;
|
||||
btnWideStrHashMap: TButton;
|
||||
procedure btnIntfIntfHashMapClick(Sender: TObject);
|
||||
procedure btnAnsiStrIntfHashMapClick(Sender: TObject);
|
||||
procedure btnWideStrIntfHashMapClick(Sender: TObject);
|
||||
procedure btnHashMapClick(Sender: TObject);
|
||||
procedure btnIntfHashSetClick(Sender: TObject);
|
||||
procedure btnHashSetClick(Sender: TObject);
|
||||
procedure btnIntfArraySetClick(Sender: TObject);
|
||||
procedure btnArraySetClick(Sender: TObject);
|
||||
procedure btnAnsiStrAnsiStrHashMapClick(Sender: TObject);
|
||||
procedure btnWideStrWideStrHashMapClick(Sender: TObject);
|
||||
procedure btnAnsiStrHashMapClick(Sender: TObject);
|
||||
procedure btnWideStrHashMapClick(Sender: TObject);
|
||||
procedure btnAnsiStrHashSetClick(Sender: TObject);
|
||||
procedure btnWideStrHashSetClick(Sender: TObject);
|
||||
procedure btnAnsiStrArraySetClick(Sender: TObject);
|
||||
procedure btnWideStrArraySetClick(Sender: TObject);
|
||||
private
|
||||
{ Private declarations }
|
||||
public
|
||||
{ Public declarations }
|
||||
end;
|
||||
|
||||
IIntfMyObject = interface
|
||||
['{B2CB604F-4F5F-44D8-A86F-6138CD329B42}']
|
||||
function GetInt: Integer;
|
||||
function GetStr: string;
|
||||
procedure SetInt(Value: Integer);
|
||||
procedure SetStr(const Value: string);
|
||||
property Int: Integer read GetInt write SetInt;
|
||||
property Str: string read GetStr write SetStr;
|
||||
end;
|
||||
|
||||
TIntfMyObject = class(TInterfacedObject, IIntfMyObject)
|
||||
private
|
||||
FInt: Integer;
|
||||
FStr: string;
|
||||
protected
|
||||
{ IIntfMyObject }
|
||||
function GetInt: Integer;
|
||||
function GetStr: string;
|
||||
procedure SetInt(Value: Integer);
|
||||
procedure SetStr(const Value: string);
|
||||
end;
|
||||
|
||||
TMyObject = class(TObject)
|
||||
private
|
||||
FInt: Integer;
|
||||
FStr: string;
|
||||
public
|
||||
property Int: Integer read FInt write FInt;
|
||||
property Str: string read FStr write FStr;
|
||||
end;
|
||||
|
||||
var
|
||||
MainForm: TMainForm;
|
||||
|
||||
implementation
|
||||
|
||||
{$R *.dfm}
|
||||
|
||||
uses JclContainerIntf, JclHashMaps, JclHashSets, JclArraySets;
|
||||
|
||||
{ TIntfMyObject }
|
||||
|
||||
function TIntfMyObject.GetInt: Integer;
|
||||
begin
|
||||
Result := FInt;
|
||||
end;
|
||||
|
||||
function TIntfMyObject.GetStr: string;
|
||||
begin
|
||||
Result := FStr;
|
||||
end;
|
||||
|
||||
procedure TIntfMyObject.SetInt(Value: Integer);
|
||||
begin
|
||||
FInt := Value;
|
||||
end;
|
||||
|
||||
procedure TIntfMyObject.SetStr(const Value: string);
|
||||
begin
|
||||
FStr := Value;
|
||||
end;
|
||||
|
||||
procedure TMainForm.btnIntfIntfHashMapClick(Sender: TObject);
|
||||
var
|
||||
Map: IJclIntfIntfMap;
|
||||
MyObject: IIntfMyObject;
|
||||
KeyObject: TInterfacedObject;
|
||||
It: IJclIntfIterator;
|
||||
begin
|
||||
Map := TJclIntfIntfHashMap.Create(DefaultContainerCapacity);
|
||||
MyObject := TIntfMyObject.Create;
|
||||
MyObject.Int := 42;
|
||||
MyObject.Str := 'MyString';
|
||||
KeyObject := TInterfacedObject.Create;
|
||||
Map.PutValue(KeyObject, MyObject);
|
||||
MyObject := IIntfMyObject(Map.GetValue(KeyObject));
|
||||
memResult.Items.Add(IntToStr(MyObject.Int) + ' ' + MyObject.Str);
|
||||
|
||||
It := Map.Values.First;
|
||||
while It.HasNext do
|
||||
memResult.Items.Add(IIntfMyObject(It.Next).Str);
|
||||
memResult.Items.Add('--------------------------------------------------------');
|
||||
end;
|
||||
|
||||
procedure TMainForm.btnAnsiStrIntfHashMapClick(Sender: TObject);
|
||||
var
|
||||
Map: IJclAnsiStrIntfMap;
|
||||
MyObject: IIntfMyObject;
|
||||
begin
|
||||
Map := TJclAnsiStrIntfHashMap.Create(DefaultContainerCapacity);
|
||||
MyObject := TIntfMyObject.Create;
|
||||
MyObject.Int := 42;
|
||||
MyObject.Str := 'MyString';
|
||||
Map.PutValue('MyKey', MyObject);
|
||||
MyObject := TIntfMyObject.Create;
|
||||
MyObject.Int := 43;
|
||||
MyObject.Str := 'AnotherString';
|
||||
Map.PutValue('MyKey2', MyObject);
|
||||
MyObject := IIntfMyObject(Map.GetValue('MyKey2'));
|
||||
memResult.Items.Add(IntToStr(MyObject.Int) + ' ' + MyObject.Str);
|
||||
memResult.Items.Add('--------------------------------------------------------');
|
||||
end;
|
||||
|
||||
procedure TMainForm.btnWideStrIntfHashMapClick(Sender: TObject);
|
||||
var
|
||||
Map: IJclWideStrIntfMap;
|
||||
MyObject: IIntfMyObject;
|
||||
begin
|
||||
Map := TJclWideStrIntfHashMap.Create(DefaultContainerCapacity);
|
||||
MyObject := TIntfMyObject.Create;
|
||||
MyObject.Int := 42;
|
||||
MyObject.Str := 'MyString';
|
||||
Map.PutValue('MyKey', MyObject);
|
||||
MyObject := TIntfMyObject.Create;
|
||||
MyObject.Int := 43;
|
||||
MyObject.Str := 'AnotherString';
|
||||
Map.PutValue('MyKey2', MyObject);
|
||||
MyObject := IIntfMyObject(Map.GetValue('MyKey2'));
|
||||
memResult.Items.Add(IntToStr(MyObject.Int) + ' ' + MyObject.Str);
|
||||
memResult.Items.Add('--------------------------------------------------------');
|
||||
end;
|
||||
|
||||
procedure TMainForm.btnHashMapClick(Sender: TObject);
|
||||
var
|
||||
Map: IJclMap;
|
||||
MyObject: TMyObject;
|
||||
KeyObject: TObject;
|
||||
It: IJclIterator;
|
||||
begin
|
||||
Map := TJclHashMap.Create(DefaultContainerCapacity, False, False);
|
||||
MyObject := TMyObject.Create;
|
||||
KeyObject := TObject.Create;
|
||||
try
|
||||
MyObject.Int := 42;
|
||||
MyObject.Str := 'MyString';
|
||||
Map.PutValue(KeyObject, MyObject);
|
||||
MyObject := TMyObject(Map.GetValue(KeyObject));
|
||||
memResult.Items.Add(IntToStr(MyObject.Int) + ' ' + MyObject.Str);
|
||||
It := Map.Values.First;
|
||||
while It.HasNext do
|
||||
memResult.Items.Add(TMyObject(It.Next).Str);
|
||||
memResult.Items.Add('--------------------------------------------------------');
|
||||
finally
|
||||
MyObject.Free;
|
||||
KeyObject.Free;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TMainForm.btnIntfHashSetClick(Sender: TObject);
|
||||
var
|
||||
MySet: IJclIntfSet;
|
||||
MyObject: IIntfMyObject;
|
||||
It: IJclIntfIterator;
|
||||
begin
|
||||
MySet := TJclIntfHashSet.Create(DefaultContainerCapacity);
|
||||
MyObject := TIntfMyObject.Create;
|
||||
MyObject.Int := 42;
|
||||
MyObject.Str := 'MyString';
|
||||
MySet.Add(MyObject);
|
||||
MySet.Add(MyObject);
|
||||
It := MySet.First;
|
||||
while It.HasNext do
|
||||
memResult.Items.Add(IIntfMyObject(It.Next).Str);
|
||||
memResult.Items.Add(IntToStr(MySet.Size));
|
||||
memResult.Items.Add('--------------------------------------------------------');
|
||||
end;
|
||||
|
||||
procedure TMainForm.btnHashSetClick(Sender: TObject);
|
||||
var
|
||||
MySet: IJclSet;
|
||||
MyObject: TMyObject;
|
||||
It: IJclIterator;
|
||||
begin
|
||||
MySet := TJclHashSet.Create(DefaultContainerCapacity, False);
|
||||
MyObject := TMyObject.Create;
|
||||
MyObject.Int := 42;
|
||||
MyObject.Str := 'MyString';
|
||||
MySet.Add(MyObject);
|
||||
MySet.Add(MyObject);
|
||||
It := MySet.First;
|
||||
while It.HasNext do
|
||||
memResult.Items.Add(TMyObject(It.Next).Str);
|
||||
memResult.Items.Add(IntToStr(MySet.Size));
|
||||
memResult.Items.Add('--------------------------------------------------------');
|
||||
end;
|
||||
|
||||
procedure TMainForm.btnIntfArraySetClick(Sender: TObject);
|
||||
var
|
||||
MySet: IJclIntfSet;
|
||||
MyObject: IIntfMyObject;
|
||||
It: IJclIntfIterator;
|
||||
begin
|
||||
MySet := TJclIntfArraySet.Create(DefaultContainerCapacity);
|
||||
MyObject := TIntfMyObject.Create;
|
||||
MyObject.Int := 42;
|
||||
MyObject.Str := 'MyString';
|
||||
MySet.Add(MyObject);
|
||||
MySet.Add(MyObject);
|
||||
It := MySet.First;
|
||||
while It.HasNext do
|
||||
memResult.Items.Add(IIntfMyObject(It.Next).Str);
|
||||
memResult.Items.Add(IntToStr(MySet.Size));
|
||||
memResult.Items.Add('--------------------------------------------------------');
|
||||
end;
|
||||
|
||||
procedure TMainForm.btnArraySetClick(Sender: TObject);
|
||||
var
|
||||
MySet: IJclSet;
|
||||
MyObject: TMyObject;
|
||||
It: IJclIterator;
|
||||
begin
|
||||
MySet := TJclArraySet.Create(DefaultContainerCapacity, False);
|
||||
MyObject := TMyObject.Create;
|
||||
try
|
||||
MyObject.Int := 42;
|
||||
MyObject.Str := 'MyString';
|
||||
MySet.Add(MyObject);
|
||||
MySet.Add(MyObject);
|
||||
It := MySet.First;
|
||||
while It.HasNext do
|
||||
memResult.Items.Add(TMyObject(It.Next).Str);
|
||||
memResult.Items.Add(IntToStr(MySet.Size));
|
||||
memResult.Items.Add('--------------------------------------------------------');
|
||||
finally
|
||||
MyObject.Free;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TMainForm.btnAnsiStrAnsiStrHashMapClick(Sender: TObject);
|
||||
var
|
||||
Map: IJclAnsiStrAnsiStrMap;
|
||||
It: IJclAnsiStrIterator;
|
||||
begin
|
||||
Map := TJclAnsiStrAnsiStrHashMap.Create(DefaultContainerCapacity);
|
||||
Map.PutValue('MyKey1', 'MyString1');
|
||||
Map.PutValue('MyKey2', 'MyString2');
|
||||
Map.PutValue('MyKey3', 'MyString3');
|
||||
It := Map.KeySet.First;
|
||||
while It.HasNext do
|
||||
memResult.Items.Add(string(It.Next));
|
||||
It := Map.Values.First;
|
||||
while It.HasNext do
|
||||
memResult.Items.Add(string(It.Next));
|
||||
Map.PutValue('MyKey2', 'AnotherString2');
|
||||
memResult.Items.Add(string(Map.GetValue('MyKey2')));
|
||||
memResult.Items.Add('--------------------------------------------------------');
|
||||
end;
|
||||
|
||||
procedure TMainForm.btnWideStrWideStrHashMapClick(Sender: TObject);
|
||||
var
|
||||
Map: IJclWideStrWideStrMap;
|
||||
It: IJclWideStrIterator;
|
||||
begin
|
||||
Map := TJclWideStrWideStrHashMap.Create(DefaultContainerCapacity);
|
||||
Map.PutValue('MyKey1', 'MyString1');
|
||||
Map.PutValue('MyKey2', 'MyString2');
|
||||
Map.PutValue('MyKey3', 'MyString3');
|
||||
It := Map.KeySet.First;
|
||||
while It.HasNext do
|
||||
memResult.Items.Add(It.Next);
|
||||
It := Map.Values.First;
|
||||
while It.HasNext do
|
||||
memResult.Items.Add(It.Next);
|
||||
Map.PutValue('MyKey2', 'AnotherString2');
|
||||
memResult.Items.Add(Map.GetValue('MyKey2'));
|
||||
memResult.Items.Add('--------------------------------------------------------');
|
||||
end;
|
||||
|
||||
procedure TMainForm.btnAnsiStrHashMapClick(Sender: TObject);
|
||||
var
|
||||
Map: IJclAnsiStrMap;
|
||||
MyObject: TMyObject;
|
||||
It: IJclAnsiStrIterator;
|
||||
begin
|
||||
Map := TJclAnsiStrHashMap.Create(DefaultContainerCapacity, False);
|
||||
MyObject := TMyObject.Create;
|
||||
try
|
||||
MyObject.Int := 42;
|
||||
MyObject.Str := 'MyString';
|
||||
|
||||
Map.PutValue('MyKey1', MyObject);
|
||||
MyObject := TMyObject(Map.GetValue('MyKey1'));
|
||||
memResult.Items.Add(IntToStr(MyObject.Int) + ' ' + MyObject.Str);
|
||||
It := Map.KeySet.First;
|
||||
while It.HasNext do
|
||||
memResult.Items.Add(string(It.Next));
|
||||
memResult.Items.Add('--------------------------------------------------------');
|
||||
finally
|
||||
MyObject.Free;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TMainForm.btnWideStrHashMapClick(Sender: TObject);
|
||||
var
|
||||
Map: IJclWideStrMap;
|
||||
MyObject: TMyObject;
|
||||
It: IJclWideStrIterator;
|
||||
begin
|
||||
Map := TJclWideStrHashMap.Create(DefaultContainerCapacity, False);
|
||||
MyObject := TMyObject.Create;
|
||||
try
|
||||
MyObject.Int := 42;
|
||||
MyObject.Str := 'MyString';
|
||||
|
||||
Map.PutValue('MyKey1', MyObject);
|
||||
MyObject := TMyObject(Map.GetValue('MyKey1'));
|
||||
memResult.Items.Add(IntToStr(MyObject.Int) + ' ' + MyObject.Str);
|
||||
It := Map.KeySet.First;
|
||||
while It.HasNext do
|
||||
memResult.Items.Add(It.Next);
|
||||
memResult.Items.Add('--------------------------------------------------------');
|
||||
finally
|
||||
MyObject.Free;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TMainForm.btnAnsiStrHashSetClick(Sender: TObject);
|
||||
var
|
||||
MySet: IJclAnsiStrSet;
|
||||
It: IJclAnsiStrIterator;
|
||||
begin
|
||||
MySet := TJclAnsiStrHashSet.Create(DefaultContainerCapacity);
|
||||
MySet.Add('MyString');
|
||||
MySet.Add('MyString');
|
||||
It := MySet.First;
|
||||
while It.HasNext do
|
||||
memResult.Items.Add(string(It.Next));
|
||||
memResult.Items.Add(IntToStr(MySet.Size));
|
||||
memResult.Items.Add('--------------------------------------------------------');
|
||||
end;
|
||||
|
||||
procedure TMainForm.btnWideStrHashSetClick(Sender: TObject);
|
||||
var
|
||||
MySet: IJclWideStrSet;
|
||||
It: IJclWideStrIterator;
|
||||
begin
|
||||
MySet := TJclWideStrHashSet.Create(DefaultContainerCapacity);
|
||||
MySet.Add('MyString');
|
||||
MySet.Add('MyString');
|
||||
It := MySet.First;
|
||||
while It.HasNext do
|
||||
memResult.Items.Add(It.Next);
|
||||
memResult.Items.Add(IntToStr(MySet.Size));
|
||||
memResult.Items.Add('--------------------------------------------------------');
|
||||
end;
|
||||
|
||||
procedure TMainForm.btnAnsiStrArraySetClick(Sender: TObject);
|
||||
var
|
||||
MySet: IJclAnsiStrSet;
|
||||
It: IJclAnsiStrIterator;
|
||||
I: Integer;
|
||||
begin
|
||||
MySet := TJclAnsiStrArraySet.Create(DefaultContainerCapacity);
|
||||
for I := 1 to 8 do
|
||||
MySet.Add(AnsiString(IntToStr(I)));
|
||||
for I := 8 downto 1 do
|
||||
MySet.Add(AnsiString(IntToStr(I)));
|
||||
MySet.Add('MyString');
|
||||
MySet.Add('MyString');
|
||||
It := MySet.First;
|
||||
while It.HasNext do
|
||||
memResult.Items.Add(string(It.Next));
|
||||
memResult.Items.Add(IntToStr(MySet.Size));
|
||||
memResult.Items.Add('--------------------------------------------------------');
|
||||
end;
|
||||
|
||||
procedure TMainForm.btnWideStrArraySetClick(Sender: TObject);
|
||||
var
|
||||
MySet: IJclWideStrSet;
|
||||
It: IJclWideStrIterator;
|
||||
I: Integer;
|
||||
begin
|
||||
MySet := TJclWideStrArraySet.Create(DefaultContainerCapacity);
|
||||
for I := 1 to 8 do
|
||||
MySet.Add(IntToStr(I));
|
||||
for I := 8 downto 1 do
|
||||
MySet.Add(IntToStr(I));
|
||||
MySet.Add('MyString');
|
||||
MySet.Add('MyString');
|
||||
It := MySet.First;
|
||||
while It.HasNext do
|
||||
memResult.Items.Add(It.Next);
|
||||
memResult.Items.Add(IntToStr(MySet.Size));
|
||||
memResult.Items.Add('--------------------------------------------------------');
|
||||
end;
|
||||
|
||||
end.
|
||||
|
||||
@ -0,0 +1,76 @@
|
||||
[FileVersion]
|
||||
Version=6.0
|
||||
[Compiler]
|
||||
A=8
|
||||
B=0
|
||||
C=1
|
||||
D=1
|
||||
E=0
|
||||
F=0
|
||||
G=1
|
||||
H=1
|
||||
I=1
|
||||
J=0
|
||||
K=0
|
||||
L=1
|
||||
M=0
|
||||
N=1
|
||||
O=1
|
||||
P=1
|
||||
Q=0
|
||||
R=0
|
||||
S=0
|
||||
T=0
|
||||
U=0
|
||||
V=1
|
||||
W=0
|
||||
X=1
|
||||
Y=1
|
||||
Z=1
|
||||
ShowHints=1
|
||||
ShowWarnings=1
|
||||
UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
|
||||
[Linker]
|
||||
MapFile=0
|
||||
OutputObjs=0
|
||||
ConsoleApp=1
|
||||
DebugInfo=0
|
||||
RemoteSymbols=0
|
||||
MinStackSize=16384
|
||||
MaxStackSize=1048576
|
||||
ImageBase=4194304
|
||||
ExeDescription=
|
||||
[Directories]
|
||||
OutputDir=..\..\..\..\bin
|
||||
UnitOutputDir=
|
||||
PackageDLLOutputDir=
|
||||
PackageDCPOutputDir=
|
||||
SearchPath=
|
||||
Packages=
|
||||
Conditionals=
|
||||
DebugSourceDirs=
|
||||
UsePackages=0
|
||||
[Parameters]
|
||||
RunParams=
|
||||
HostApplication=
|
||||
Launcher=
|
||||
UseLauncher=0
|
||||
DebugCWD=
|
||||
[Language]
|
||||
ActiveLang=
|
||||
ProjectLang=
|
||||
RootDir=
|
||||
[Version Info]
|
||||
IncludeVerInfo=0
|
||||
AutoIncBuild=0
|
||||
MajorVer=1
|
||||
MinorVer=0
|
||||
Release=0
|
||||
Build=0
|
||||
Debug=0
|
||||
PreRelease=0
|
||||
Special=0
|
||||
Private=0
|
||||
DLL=0
|
||||
Locale=1031
|
||||
CodePage=1252
|
||||
@ -0,0 +1,22 @@
|
||||
program ListExample;
|
||||
|
||||
{$I jcl.inc}
|
||||
|
||||
uses
|
||||
{$IFDEF MSWINDOWS}
|
||||
Forms,
|
||||
{$ENDIF MSWINDOWS}
|
||||
{$IFDEF LINUX}
|
||||
QForms,
|
||||
{$ENDIF LINUX}
|
||||
ListExampleMain in 'ListExampleMain.pas' {MainForm},
|
||||
MyObjectList in 'MyObjectList.pas';
|
||||
|
||||
{$R *.res}
|
||||
{$R ..\..\..\..\source\windows\JclCommCtrlAsInvoker.res}
|
||||
|
||||
begin
|
||||
Application.Initialize;
|
||||
Application.CreateForm(TMainForm, MainForm);
|
||||
Application.Run;
|
||||
end.
|
||||
BIN
official/1.104/examples/common/containers/lists/ListExample.res
Normal file
BIN
official/1.104/examples/common/containers/lists/ListExample.res
Normal file
Binary file not shown.
@ -0,0 +1,145 @@
|
||||
object MainForm: TMainForm
|
||||
Left = 276
|
||||
Top = 195
|
||||
Width = 564
|
||||
Height = 277
|
||||
HorzScrollBar.Range = 508
|
||||
VertScrollBar.Range = 217
|
||||
ActiveControl = btnIntfArrayList
|
||||
Caption = 'List Example'
|
||||
Color = clBtnFace
|
||||
Font.Charset = DEFAULT_CHARSET
|
||||
Font.Color = clWindowText
|
||||
Font.Height = 11
|
||||
Font.Name = 'MS Sans Serif'
|
||||
Font.Pitch = fpVariable
|
||||
Font.Style = []
|
||||
OldCreateOrder = True
|
||||
PixelsPerInch = 96
|
||||
TextHeight = 13
|
||||
object btnIntfArrayList: TButton
|
||||
Left = 24
|
||||
Top = 24
|
||||
Width = 89
|
||||
Height = 25
|
||||
Caption = 'IntfArrayList'
|
||||
TabOrder = 0
|
||||
OnClick = btnIntfArrayListClick
|
||||
end
|
||||
object btnIntfLinkedList: TButton
|
||||
Left = 152
|
||||
Top = 24
|
||||
Width = 89
|
||||
Height = 25
|
||||
Caption = 'IntfLinkedList'
|
||||
TabOrder = 3
|
||||
OnClick = btnIntfLinkedListClick
|
||||
end
|
||||
object btnIntfVector: TButton
|
||||
Left = 272
|
||||
Top = 24
|
||||
Width = 89
|
||||
Height = 25
|
||||
Caption = 'IntfVector'
|
||||
TabOrder = 6
|
||||
OnClick = btnIntfVectorClick
|
||||
end
|
||||
object btnArrayList: TButton
|
||||
Left = 24
|
||||
Top = 168
|
||||
Width = 89
|
||||
Height = 25
|
||||
Caption = 'ArrayList'
|
||||
TabOrder = 2
|
||||
OnClick = btnArrayListClick
|
||||
end
|
||||
object btnLinkedList: TButton
|
||||
Left = 152
|
||||
Top = 168
|
||||
Width = 89
|
||||
Height = 25
|
||||
Caption = 'LinkedList'
|
||||
TabOrder = 5
|
||||
OnClick = btnLinkedListClick
|
||||
end
|
||||
object btnVector: TButton
|
||||
Left = 272
|
||||
Top = 168
|
||||
Width = 89
|
||||
Height = 25
|
||||
Caption = 'Vector'
|
||||
TabOrder = 8
|
||||
OnClick = btnVectorClick
|
||||
end
|
||||
object memResult: TMemo
|
||||
Left = 395
|
||||
Top = 0
|
||||
Width = 161
|
||||
Height = 243
|
||||
Align = alRight
|
||||
TabOrder = 10
|
||||
end
|
||||
object btnMyObjectList: TButton
|
||||
Left = 152
|
||||
Top = 216
|
||||
Width = 89
|
||||
Height = 25
|
||||
Caption = 'MyObjectList'
|
||||
TabOrder = 9
|
||||
OnClick = btnMyObjectListClick
|
||||
end
|
||||
object btnAnsiStrArrayList: TButton
|
||||
Left = 24
|
||||
Top = 72
|
||||
Width = 89
|
||||
Height = 25
|
||||
Caption = 'AnsiStrArrayList'
|
||||
TabOrder = 1
|
||||
OnClick = btnAnsiStrArrayListClick
|
||||
end
|
||||
object btnAnsiStrLinkedList: TButton
|
||||
Left = 152
|
||||
Top = 72
|
||||
Width = 89
|
||||
Height = 25
|
||||
Caption = 'AnsiStrLinkedList'
|
||||
TabOrder = 4
|
||||
OnClick = btnAnsiStrLinkedListClick
|
||||
end
|
||||
object btnAnsiStrVector: TButton
|
||||
Left = 272
|
||||
Top = 72
|
||||
Width = 89
|
||||
Height = 25
|
||||
Caption = 'AnsiStrVector'
|
||||
TabOrder = 7
|
||||
OnClick = btnAnsiStrVectorClick
|
||||
end
|
||||
object btnWideStrArrayList: TButton
|
||||
Left = 24
|
||||
Top = 120
|
||||
Width = 89
|
||||
Height = 25
|
||||
Caption = 'WideStrArrayList'
|
||||
TabOrder = 11
|
||||
OnClick = btnWideStrArrayListClick
|
||||
end
|
||||
object btnWideStrLinkedList: TButton
|
||||
Left = 152
|
||||
Top = 120
|
||||
Width = 89
|
||||
Height = 25
|
||||
Caption = 'WideStrLinkedList'
|
||||
TabOrder = 12
|
||||
OnClick = btnWideStrLinkedListClick
|
||||
end
|
||||
object btnWideStrVector: TButton
|
||||
Left = 272
|
||||
Top = 120
|
||||
Width = 89
|
||||
Height = 25
|
||||
Caption = 'WideStrVector'
|
||||
TabOrder = 13
|
||||
OnClick = btnWideStrVectorClick
|
||||
end
|
||||
end
|
||||
@ -0,0 +1,575 @@
|
||||
unit ListExampleMain;
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
{$IFDEF WIN32}
|
||||
Windows, Messages, Graphics, Controls, Forms, Dialogs, StdCtrls,
|
||||
{$ENDIF}
|
||||
{$IFDEF LINUX}
|
||||
QForms, QControls, QStdCtrls,
|
||||
{$ENDIF}
|
||||
SysUtils, Classes;
|
||||
|
||||
type
|
||||
TMainForm = class(TForm)
|
||||
btnIntfArrayList: TButton;
|
||||
btnIntfLinkedList: TButton;
|
||||
btnIntfVector: TButton;
|
||||
btnArrayList: TButton;
|
||||
btnLinkedList: TButton;
|
||||
btnVector: TButton;
|
||||
memResult: TMemo;
|
||||
btnMyObjectList: TButton;
|
||||
btnAnsiStrArrayList: TButton;
|
||||
btnAnsiStrLinkedList: TButton;
|
||||
btnAnsiStrVector: TButton;
|
||||
btnWideStrArrayList: TButton;
|
||||
btnWideStrLinkedList: TButton;
|
||||
btnWideStrVector: TButton;
|
||||
procedure btnIntfArrayListClick(Sender: TObject);
|
||||
procedure btnIntfLinkedListClick(Sender: TObject);
|
||||
procedure btnIntfVectorClick(Sender: TObject);
|
||||
procedure btnArrayListClick(Sender: TObject);
|
||||
procedure btnLinkedListClick(Sender: TObject);
|
||||
procedure btnVectorClick(Sender: TObject);
|
||||
procedure btnMyObjectListClick(Sender: TObject);
|
||||
procedure btnAnsiStrArrayListClick(Sender: TObject);
|
||||
procedure btnWideStrArrayListClick(Sender: TObject);
|
||||
procedure btnAnsiStrLinkedListClick(Sender: TObject);
|
||||
procedure btnWideStrLinkedListClick(Sender: TObject);
|
||||
procedure btnAnsiStrVectorClick(Sender: TObject);
|
||||
procedure btnWideStrVectorClick(Sender: TObject);
|
||||
private
|
||||
{ Private declarations }
|
||||
public
|
||||
{ Public declarations }
|
||||
end;
|
||||
|
||||
IIntfMyObject = interface
|
||||
['{BA33CBCC-9CB2-4672-BF54-F52C2A0BEFFE}']
|
||||
function GetInt: Integer;
|
||||
function GetStr: string;
|
||||
procedure SetInt(Value: Integer);
|
||||
procedure SetStr(const Value: string);
|
||||
property Int: Integer read GetInt write SetInt;
|
||||
property Str: string read GetStr write SetStr;
|
||||
end;
|
||||
|
||||
TIntfMyObject = class(TInterfacedObject, IIntfMyObject)
|
||||
private
|
||||
FInt: Integer;
|
||||
FStr: string;
|
||||
protected
|
||||
{ IIntfMyObject }
|
||||
function GetInt: Integer;
|
||||
function GetStr: string;
|
||||
procedure SetInt(Value: Integer);
|
||||
procedure SetStr(const Value: string);
|
||||
end;
|
||||
|
||||
IPerson = interface
|
||||
['{755C857B-A9E2-4D9D-8418-541CAEA79679}']
|
||||
function GetAge: Integer;
|
||||
function GetMarried: Boolean;
|
||||
function GetName: string;
|
||||
procedure SetAge(Value: Integer);
|
||||
procedure SetMarried(Value: Boolean);
|
||||
procedure SetName(const Value: string);
|
||||
property Age: Integer read GetAge write SetAge;
|
||||
property Married: Boolean read GetMarried write SetMarried;
|
||||
property Name: string read GetName write SetName;
|
||||
end;
|
||||
|
||||
TPerson = class(TInterfacedObject, IPerson)
|
||||
private
|
||||
FName: string;
|
||||
FAge: Integer;
|
||||
FMarried: Boolean;
|
||||
protected
|
||||
{ IPerson }
|
||||
function GetAge: Integer;
|
||||
function GetMarried: Boolean;
|
||||
function GetName: string;
|
||||
procedure SetAge(Value: Integer);
|
||||
procedure SetMarried(Value: Boolean);
|
||||
procedure SetName(const Value: string);
|
||||
end;
|
||||
|
||||
var
|
||||
MainForm: TMainForm;
|
||||
|
||||
implementation
|
||||
|
||||
{$R *.dfm}
|
||||
|
||||
uses JclContainerIntf, JclArrayLists, JclLinkedLists, JclVectors, MyObjectList;
|
||||
|
||||
{ TIntfMyObject }
|
||||
|
||||
function TIntfMyObject.GetInt: Integer;
|
||||
begin
|
||||
Result := FInt;
|
||||
end;
|
||||
|
||||
function TIntfMyObject.GetStr: string;
|
||||
begin
|
||||
Result := FStr;
|
||||
end;
|
||||
|
||||
procedure TIntfMyObject.SetInt(Value: Integer);
|
||||
begin
|
||||
FInt := Value;
|
||||
end;
|
||||
|
||||
procedure TIntfMyObject.SetStr(const Value: string);
|
||||
begin
|
||||
FStr := Value;
|
||||
end;
|
||||
|
||||
procedure TMainForm.btnIntfArrayListClick(Sender: TObject);
|
||||
var
|
||||
List, Sub: IJclIntfList;
|
||||
MyArray: IJclIntfArray;
|
||||
MyObject: IIntfMyObject;
|
||||
It: IJclIntfIterator;
|
||||
I: Integer;
|
||||
begin
|
||||
memResult.Lines.Clear;
|
||||
List := TJclIntfArrayList.Create(DefaultContainerCapacity);
|
||||
MyObject := TIntfMyObject.Create;
|
||||
MyObject.Int := 42;
|
||||
MyObject.Str := 'MyString';
|
||||
List.Add(MyObject);
|
||||
|
||||
MyObject := IIntfMyObject(List.GetObject(0));
|
||||
//memResult.Lines.Add(IntToStr(MyObject.Int) + ' ' + MyObject.Str);
|
||||
|
||||
MyObject := TIntfMyObject.Create;
|
||||
MyObject.Int := 41;
|
||||
MyObject.Str := 'AnotherString';
|
||||
List.Add(MyObject);
|
||||
|
||||
Sub := List.SubList(0, 10);
|
||||
|
||||
// Iteration
|
||||
It := Sub.First;
|
||||
while It.HasNext do
|
||||
begin
|
||||
MyObject := IIntfMyObject(It.Next);
|
||||
memResult.Lines.Add(IntToStr(MyObject.Int) + ' ' + MyObject.Str);
|
||||
end;
|
||||
// use [] default of Items[]
|
||||
MyArray := List as IJclIntfArray;
|
||||
for I := 0 to MyArray.Size - 1 do
|
||||
begin
|
||||
MyObject := IIntfMyObject(MyArray[I]);
|
||||
memResult.Lines.Add(IntToStr(MyObject.Int) + ' ' + MyObject.Str);
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TMainForm.btnIntfLinkedListClick(Sender: TObject);
|
||||
var
|
||||
List, Sub: IJclIntfList;
|
||||
MyObject: IIntfMyObject;
|
||||
It: IJclIntfIterator;
|
||||
begin
|
||||
memResult.Lines.Clear;
|
||||
List := TJclIntfLinkedList.Create(nil);
|
||||
MyObject := TIntfMyObject.Create;
|
||||
MyObject.Int := 42;
|
||||
MyObject.Str := 'MyString';
|
||||
List.Add(MyObject);
|
||||
MyObject := IIntfMyObject(List.GetObject(0));
|
||||
memResult.Lines.Add(IntToStr(MyObject.Int) + ' ' + MyObject.Str);
|
||||
|
||||
MyObject := TIntfMyObject.Create;
|
||||
MyObject.Int := 41;
|
||||
MyObject.Str := 'AnotherString';
|
||||
List.Add(MyObject);
|
||||
|
||||
Sub := List.SubList(1, 10);
|
||||
|
||||
It := Sub.First;
|
||||
while It.HasNext do
|
||||
begin
|
||||
MyObject := IIntfMyObject(It.Next);
|
||||
memResult.Lines.Add(IntToStr(MyObject.Int) + ' ' + MyObject.Str);
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TMainForm.btnIntfVectorClick(Sender: TObject);
|
||||
var
|
||||
List: IJclIntfList;
|
||||
MyObject: IIntfMyObject;
|
||||
It: IJclIntfIterator;
|
||||
I: Integer;
|
||||
begin
|
||||
memResult.Lines.Clear;
|
||||
List := TJclIntfVector.Create(DefaultContainerCapacity);
|
||||
try
|
||||
MyObject := TIntfMyObject.Create;
|
||||
MyObject.Int := 42;
|
||||
MyObject.Str := 'MyString';
|
||||
List.Add(MyObject);
|
||||
MyObject := IIntfMyObject(List.GetObject(0));
|
||||
memResult.Lines.Add(IntToStr(MyObject.Int) + ' ' + MyObject.Str);
|
||||
|
||||
MyObject := TIntfMyObject.Create;
|
||||
MyObject.Int := 41;
|
||||
MyObject.Str := 'AnotherString';
|
||||
List.Add(MyObject);
|
||||
It := List.First;
|
||||
while It.HasNext do
|
||||
begin
|
||||
MyObject := IIntfMyObject(It.Next);
|
||||
memResult.Lines.Add(IntToStr(MyObject.Int) + ' ' + MyObject.Str);
|
||||
end;
|
||||
// Fastest way
|
||||
for I := 0 to List.Size - 1 do
|
||||
begin
|
||||
MyObject := IIntfMyObject(List.Objects[I]);
|
||||
memResult.Lines.Add(IntToStr(MyObject.Int) + ' ' + MyObject.Str);
|
||||
end;
|
||||
List.Clear;
|
||||
finally
|
||||
It := nil; // Force release Iterator before free list !
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TMainForm.btnArrayListClick(Sender: TObject);
|
||||
var
|
||||
List: IJclList;
|
||||
MyObject: TMyObject;
|
||||
It: IJclIterator;
|
||||
begin
|
||||
memResult.Lines.Clear;
|
||||
List := TJclArrayList.Create(DefaultContainerCapacity, True);
|
||||
MyObject := TMyObject.Create;
|
||||
MyObject.Int := 42;
|
||||
MyObject.Str := 'MyString';
|
||||
List.Add(MyObject);
|
||||
MyObject := TMyObject(List.GetObject(0));
|
||||
memResult.Lines.Add(IntToStr(MyObject.Int) + ' ' + MyObject.Str);
|
||||
|
||||
MyObject := TMyObject.Create;
|
||||
MyObject.Int := 41;
|
||||
MyObject.Str := 'AnotherString';
|
||||
List.Add(MyObject);
|
||||
|
||||
It := List.First;
|
||||
while It.HasNext do
|
||||
begin
|
||||
MyObject := TMyObject(It.Next);
|
||||
memResult.Lines.Add(IntToStr(MyObject.Int) + ' ' + MyObject.Str);
|
||||
end;
|
||||
It := List.First;
|
||||
while It.HasNext do
|
||||
begin
|
||||
It.Next;
|
||||
It.Remove;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TMainForm.btnLinkedListClick(Sender: TObject);
|
||||
var
|
||||
List: IJclList;
|
||||
MyObject: TMyObject;
|
||||
It: IJclIterator;
|
||||
begin
|
||||
memResult.Lines.Clear;
|
||||
List := TJclLinkedList.Create(nil, True);
|
||||
MyObject := TMyObject.Create;
|
||||
MyObject.Int := 42;
|
||||
MyObject.Str := 'MyString';
|
||||
List.Add(MyObject);
|
||||
MyObject := TMyObject(List.GetObject(0));
|
||||
memResult.Lines.Add(IntToStr(MyObject.Int) + ' ' + MyObject.Str);
|
||||
|
||||
MyObject := TMyObject.Create;
|
||||
MyObject.Int := 41;
|
||||
MyObject.Str := 'AnotherString';
|
||||
List.Add(MyObject);
|
||||
|
||||
It := List.First;
|
||||
while It.HasNext do
|
||||
begin
|
||||
MyObject := TMyObject(It.Next);
|
||||
memResult.Lines.Add(IntToStr(MyObject.Int) + ' ' + MyObject.Str);
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TMainForm.btnVectorClick(Sender: TObject);
|
||||
var
|
||||
List: IJclList;
|
||||
MyObject: TMyObject;
|
||||
It: IJclIterator;
|
||||
I: Integer;
|
||||
begin
|
||||
memResult.Lines.Clear;
|
||||
List := TJclVector.Create(DefaultContainerCapacity, True);
|
||||
try
|
||||
MyObject := TMyObject.Create;
|
||||
MyObject.Int := 42;
|
||||
MyObject.Str := 'MyString';
|
||||
List.Add(MyObject);
|
||||
MyObject := TMyObject(List.GetObject(0));
|
||||
memResult.Lines.Add(IntToStr(MyObject.Int) + ' ' + MyObject.Str);
|
||||
|
||||
MyObject := TMyObject.Create;
|
||||
MyObject.Int := 41;
|
||||
MyObject.Str := 'AnotherString';
|
||||
List.Add(MyObject);
|
||||
|
||||
It := List.First;
|
||||
while It.HasNext do
|
||||
begin
|
||||
MyObject := TMyObject(It.Next);
|
||||
memResult.Lines.Add(IntToStr(MyObject.Int) + ' ' + MyObject.Str);
|
||||
end;
|
||||
// Fastest way
|
||||
for I := 0 to List.Size - 1 do
|
||||
begin
|
||||
MyObject := TMyObject(List.Objects[I]);
|
||||
memResult.Lines.Add(IntToStr(MyObject.Int) + ' ' + MyObject.Str);
|
||||
end;
|
||||
List.Clear;
|
||||
finally
|
||||
It := nil; // Force release Iterator before free list !
|
||||
List := nil;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TMainForm.btnMyObjectListClick(Sender: TObject);
|
||||
var
|
||||
List: IMyObjectList;
|
||||
MyObject: TMyObject;
|
||||
begin
|
||||
memResult.Lines.Clear;
|
||||
List := TMyObjectList.Create(DefaultContainerCapacity, True);
|
||||
MyObject := TMyObject.Create;
|
||||
MyObject.Int := 42;
|
||||
MyObject.Str := 'MyString';
|
||||
List.Add(MyObject);
|
||||
memResult.Lines.Add(IntToStr(List.GetObject(0).Int));
|
||||
memResult.Lines.Add(List.GetObject(0).Str);
|
||||
end;
|
||||
|
||||
procedure TMainForm.btnAnsiStrArrayListClick(Sender: TObject);
|
||||
var
|
||||
List, Sub: IJclAnsiStrList;
|
||||
MyArray: IJclAnsiStrArray;
|
||||
It: IJclAnsiStrIterator;
|
||||
I: Integer;
|
||||
S: string;
|
||||
begin
|
||||
memResult.Lines.Clear;
|
||||
List := TJclAnsiStrArrayList.Create(DefaultContainerCapacity);
|
||||
List.Add('MyString');
|
||||
|
||||
S := string(List.GetString(0));
|
||||
//memResult.Lines.Add(IntToStr(MyObject.Int) + ' ' + MyObject.Str);
|
||||
|
||||
List.Add('AnotherString');
|
||||
|
||||
Sub := List.SubList(0, 10);
|
||||
// Iteration
|
||||
It := Sub.First;
|
||||
while It.HasNext do
|
||||
begin
|
||||
S := string(It.Next);
|
||||
memResult.Lines.Add(S);
|
||||
end;
|
||||
// use [] default of Items[]
|
||||
MyArray := List as IJclAnsiStrArray;
|
||||
for I := 0 to MyArray.Size - 1 do
|
||||
begin
|
||||
S := string(MyArray[I]);
|
||||
memResult.Lines.Add(S);
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TMainForm.btnWideStrArrayListClick(Sender: TObject);
|
||||
var
|
||||
List, Sub: IJclWideStrList;
|
||||
MyArray: IJclWideStrArray;
|
||||
It: IJclWideStrIterator;
|
||||
I: Integer;
|
||||
S: string;
|
||||
begin
|
||||
memResult.Lines.Clear;
|
||||
List := TJclWideStrArrayList.Create(DefaultContainerCapacity);
|
||||
List.Add('MyString');
|
||||
|
||||
S := List.GetString(0);
|
||||
//memResult.Lines.Add(IntToStr(MyObject.Int) + ' ' + MyObject.Str);
|
||||
|
||||
List.Add('AnotherString');
|
||||
|
||||
Sub := List.SubList(0, 10);
|
||||
// Iteration
|
||||
It := Sub.First;
|
||||
while It.HasNext do
|
||||
begin
|
||||
S := It.Next;
|
||||
memResult.Lines.Add(S);
|
||||
end;
|
||||
// use [] default of Items[]
|
||||
MyArray := List as IJclWideStrArray;
|
||||
for I := 0 to MyArray.Size - 1 do
|
||||
begin
|
||||
S := MyArray[I];
|
||||
memResult.Lines.Add(S);
|
||||
end;
|
||||
end;
|
||||
|
||||
{ TPerson }
|
||||
|
||||
function TPerson.GetAge: Integer;
|
||||
begin
|
||||
Result := FAge;
|
||||
end;
|
||||
|
||||
function TPerson.GetMarried: Boolean;
|
||||
begin
|
||||
Result := FMarried;
|
||||
end;
|
||||
|
||||
function TPerson.GetName: string;
|
||||
begin
|
||||
Result := FName;
|
||||
end;
|
||||
|
||||
procedure TPerson.SetAge(Value: Integer);
|
||||
begin
|
||||
FAge := Value;
|
||||
end;
|
||||
|
||||
procedure TPerson.SetMarried(Value: Boolean);
|
||||
begin
|
||||
FMarried := Value;
|
||||
end;
|
||||
|
||||
procedure TPerson.SetName(const Value: string);
|
||||
begin
|
||||
FName := Value;
|
||||
end;
|
||||
|
||||
procedure TMainForm.btnAnsiStrLinkedListClick(Sender: TObject);
|
||||
var
|
||||
List, Sub: IJclAnsiStrList;
|
||||
S: string;
|
||||
It: IJclAnsiStrIterator;
|
||||
begin
|
||||
memResult.Lines.Clear;
|
||||
List := TJclAnsiStrLinkedList.Create(nil);
|
||||
List.Add('MyString');
|
||||
memResult.Lines.Add(string(List.GetString(0)));
|
||||
|
||||
List.Add('AnotherString');
|
||||
|
||||
Sub := List.SubList(1, 10);
|
||||
|
||||
It := Sub.First;
|
||||
while It.HasNext do
|
||||
begin
|
||||
S := string(It.Next);
|
||||
memResult.Lines.Add(S);
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TMainForm.btnWideStrLinkedListClick(Sender: TObject);
|
||||
var
|
||||
List, Sub: IJclWideStrList;
|
||||
S: string;
|
||||
It: IJclWideStrIterator;
|
||||
begin
|
||||
memResult.Lines.Clear;
|
||||
List := TJclWideStrLinkedList.Create(nil);
|
||||
List.Add('MyString');
|
||||
memResult.Lines.Add(List.GetString(0));
|
||||
|
||||
List.Add('AnotherString');
|
||||
|
||||
Sub := List.SubList(1, 10);
|
||||
|
||||
It := Sub.First;
|
||||
while It.HasNext do
|
||||
begin
|
||||
S := It.Next;
|
||||
memResult.Lines.Add(S);
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TMainForm.btnAnsiStrVectorClick(Sender: TObject);
|
||||
var
|
||||
List: IJclAnsiStrList;
|
||||
S: string;
|
||||
It: IJclAnsiStrIterator;
|
||||
I: Integer;
|
||||
begin
|
||||
memResult.Lines.Clear;
|
||||
List := TJclAnsiStrVector.Create(DefaultContainerCapacity);
|
||||
try
|
||||
List.Add('MyString');
|
||||
S := string(List.GetString(0));
|
||||
memResult.Lines.Add(S);
|
||||
|
||||
List.Add('AnotherString');
|
||||
|
||||
It := List.First;
|
||||
while It.HasNext do
|
||||
begin
|
||||
S := string(It.Next);
|
||||
memResult.Lines.Add(S);
|
||||
end;
|
||||
// Fastest way
|
||||
for I := 0 to List.Size - 1 do
|
||||
begin
|
||||
S := string(List.Strings[I]);
|
||||
memResult.Lines.Add(S);
|
||||
end;
|
||||
List.Clear;
|
||||
finally
|
||||
It := nil; // Force release Iterator before free list !
|
||||
List := nil;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TMainForm.btnWideStrVectorClick(Sender: TObject);
|
||||
var
|
||||
List: IJclWideStrList;
|
||||
S: string;
|
||||
It: IJclWideStrIterator;
|
||||
I: Integer;
|
||||
begin
|
||||
memResult.Lines.Clear;
|
||||
List := TJclWideStrVector.Create(DefaultContainerCapacity);
|
||||
try
|
||||
List.Add('MyString');
|
||||
S := List.GetString(0);
|
||||
memResult.Lines.Add(S);
|
||||
|
||||
List.Add('AnotherString');
|
||||
|
||||
It := List.First;
|
||||
while It.HasNext do
|
||||
begin
|
||||
S := It.Next;
|
||||
memResult.Lines.Add(S);
|
||||
end;
|
||||
// Fastest way
|
||||
for I := 0 to List.Size - 1 do
|
||||
begin
|
||||
S := List.Strings[I];
|
||||
memResult.Lines.Add(S);
|
||||
end;
|
||||
List.Clear;
|
||||
finally
|
||||
It := nil; // Force release Iterator before free list !
|
||||
List := nil;
|
||||
end;
|
||||
end;
|
||||
|
||||
end.
|
||||
|
||||
133
official/1.104/examples/common/containers/lists/MyObjectList.pas
Normal file
133
official/1.104/examples/common/containers/lists/MyObjectList.pas
Normal file
@ -0,0 +1,133 @@
|
||||
unit MyObjectList;
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
JclContainerIntf, JclArrayLists;
|
||||
|
||||
type
|
||||
TMyObject = class(TObject)
|
||||
private
|
||||
FInt: Integer;
|
||||
FStr: string;
|
||||
public
|
||||
property Int: Integer read FInt write FInt;
|
||||
property Str: string read FStr write FStr;
|
||||
end;
|
||||
|
||||
// An ArrayList typed with TMyObject
|
||||
IMyObjectList = interface
|
||||
['{DB2B366E-2CA6-4AFC-A2C9-3285D252DC3E}']
|
||||
function Add(AObject: TMyObject): Boolean; overload;
|
||||
function AddAll(const ACollection: IJclCollection): Boolean; overload;
|
||||
procedure Clear;
|
||||
function Contains(AObject: TMyObject): Boolean;
|
||||
function ContainsAll(const ACollection: IJclCollection): Boolean;
|
||||
function Equals(const ACollection: IJclCollection): Boolean;
|
||||
function First: IJclIterator;
|
||||
function IsEmpty: Boolean;
|
||||
function Last: IJclIterator;
|
||||
function Remove(AObject: TMyObject): Boolean; overload;
|
||||
function RemoveAll(const ACollection: IJclCollection): Boolean;
|
||||
function RetainAll(const ACollection: IJclCollection): Boolean;
|
||||
function Size: Integer;
|
||||
|
||||
procedure Add(Index: Integer; AObject: TMyObject); overload;
|
||||
function AddAll(Index: Integer; const ACollection: IJclCollection): Boolean; overload;
|
||||
function GetObject(Index: Integer): TMyObject;
|
||||
function IndexOf(AObject: TMyObject): Integer;
|
||||
function LastIndexOf(AObject: TMyObject): Integer;
|
||||
function Delete(Index: Integer): TMyObject; overload;
|
||||
procedure SetObject(Index: Integer; AObject: TMyObject);
|
||||
function SubList(First, Count: Integer): IJclList;
|
||||
end;
|
||||
|
||||
TMyObjectList = class(TJclArrayList, IMyObjectList)
|
||||
protected
|
||||
{ IJclCollection }
|
||||
function Add(AObject: TMyObject): Boolean; overload;
|
||||
function AddAll(const ACollection: IJclCollection): Boolean; overload;
|
||||
procedure IMyObjectList.Clear = Clear;
|
||||
function Contains(AObject: TMyObject): Boolean;
|
||||
function IMyObjectList.ContainsAll = ContainsAll;
|
||||
function IMyObjectList.Equals = CollectionEquals;
|
||||
function IMyObjectList.First = First;
|
||||
function IMyObjectList.IsEmpty = IsEmpty;
|
||||
function IMyObjectList.Last = Last;
|
||||
function Remove(AObject: TMyObject): Boolean; overload;
|
||||
function IMyObjectList.RemoveAll = RemoveAll;
|
||||
function IMyObjectList.RetainAll = RetainAll;
|
||||
function IMyObjectList.Size = Size;
|
||||
protected
|
||||
{ IJclList }
|
||||
procedure Add(Index: Integer; AObject: TMyObject); overload;
|
||||
function AddAll(Index: Integer; const ACollection: IJclCollection): Boolean; overload;
|
||||
function GetObject(Index: Integer): TMyObject;
|
||||
function IndexOf(AObject: TMyObject): Integer;
|
||||
function LastIndexOf(AObject: TMyObject): Integer;
|
||||
function Delete(Index: Integer): TMyObject; overload;
|
||||
procedure SetObject(Index: Integer; AObject: TMyObject);
|
||||
function IMyObjectList.SubList = SubList;
|
||||
end;
|
||||
|
||||
implementation
|
||||
|
||||
{ TMyObjectList }
|
||||
|
||||
procedure TMyObjectList.Add(Index: Integer; AObject: TMyObject);
|
||||
begin
|
||||
inherited Insert(Index, AObject);
|
||||
end;
|
||||
|
||||
function TMyObjectList.Add(AObject: TMyObject): Boolean;
|
||||
begin
|
||||
Result := inherited Add(AObject);
|
||||
end;
|
||||
|
||||
function TMyObjectList.AddAll(const ACollection: IJclCollection): Boolean;
|
||||
begin
|
||||
Result := inherited AddAll(ACollection);
|
||||
end;
|
||||
|
||||
function TMyObjectList.AddAll(Index: Integer; const ACollection: IJclCollection): Boolean;
|
||||
begin
|
||||
Result := inherited InsertAll(Index, ACollection);
|
||||
end;
|
||||
|
||||
function TMyObjectList.Contains(AObject: TMyObject): Boolean;
|
||||
begin
|
||||
Result := inherited Contains(AObject);
|
||||
end;
|
||||
|
||||
function TMyObjectList.GetObject(Index: Integer): TMyObject;
|
||||
begin
|
||||
Result := TMyObject(inherited GetObject(Index));
|
||||
end;
|
||||
|
||||
function TMyObjectList.IndexOf(AObject: TMyObject): Integer;
|
||||
begin
|
||||
Result := inherited IndexOf(AObject);
|
||||
end;
|
||||
|
||||
function TMyObjectList.LastIndexOf(AObject: TMyObject): Integer;
|
||||
begin
|
||||
Result := inherited LastIndexOf(AObject);
|
||||
end;
|
||||
|
||||
function TMyObjectList.Remove(AObject: TMyObject): Boolean;
|
||||
begin
|
||||
Result := inherited Remove(AObject);
|
||||
end;
|
||||
|
||||
function TMyObjectList.Delete(Index: Integer): TMyObject;
|
||||
begin
|
||||
Result := TMyObject(inherited Delete(Index));
|
||||
end;
|
||||
|
||||
procedure TMyObjectList.SetObject(Index: Integer; AObject: TMyObject);
|
||||
begin
|
||||
inherited SetObject(Index, AObject);
|
||||
end;
|
||||
|
||||
end.
|
||||
|
||||
@ -0,0 +1,3 @@
|
||||
[Directories]
|
||||
OutputDir=..\..\..\..\bin
|
||||
|
||||
@ -0,0 +1,22 @@
|
||||
program ContainerPerformance;
|
||||
|
||||
{$I jcl.inc}
|
||||
|
||||
uses
|
||||
{$IFDEF MSWINDOWS}
|
||||
Forms,
|
||||
{$ENDIF MSWINDOWS}
|
||||
{$IFDEF KYLIX}
|
||||
QForms,
|
||||
{$ENDIF KYLIX}
|
||||
ContainerPerformanceMain in 'ContainerPerformanceMain.pas' {MainForm},
|
||||
ContainerPerformanceTests in 'ContainerPerformanceTests.pas';
|
||||
|
||||
{$R *.res}
|
||||
{$R ..\..\..\..\source\windows\JclCommCtrlAsInvoker.res}
|
||||
|
||||
begin
|
||||
Application.Initialize;
|
||||
Application.CreateForm(TMainForm, MainForm);
|
||||
Application.Run;
|
||||
end.
|
||||
Binary file not shown.
@ -0,0 +1,101 @@
|
||||
object MainForm: TMainForm
|
||||
Left = 402
|
||||
Top = 120
|
||||
Caption = 'Container Performance'
|
||||
ClientHeight = 294
|
||||
ClientWidth = 569
|
||||
Color = clBtnFace
|
||||
Font.Charset = DEFAULT_CHARSET
|
||||
Font.Color = clWindowText
|
||||
Font.Height = 11
|
||||
Font.Name = 'MS Sans Serif'
|
||||
Font.Pitch = fpVariable
|
||||
Font.Style = []
|
||||
Menu = MainMenu1
|
||||
OldCreateOrder = True
|
||||
OnCreate = FormCreate
|
||||
PixelsPerInch = 96
|
||||
TextHeight = 13
|
||||
object ListPerformanceGrid: TStringGrid
|
||||
Left = 0
|
||||
Top = 0
|
||||
Width = 569
|
||||
Height = 173
|
||||
Align = alClient
|
||||
DefaultColWidth = 100
|
||||
RowCount = 6
|
||||
Options = [goFixedVertLine, goFixedHorzLine, goVertLine, goHorzLine]
|
||||
TabOrder = 0
|
||||
end
|
||||
object HashPerformanceGrid: TStringGrid
|
||||
Left = 0
|
||||
Top = 173
|
||||
Width = 569
|
||||
Height = 121
|
||||
Align = alBottom
|
||||
ColCount = 6
|
||||
DefaultColWidth = 90
|
||||
RowCount = 4
|
||||
Options = [goFixedVertLine, goFixedHorzLine, goVertLine, goHorzLine]
|
||||
TabOrder = 1
|
||||
end
|
||||
object MainMenu1: TMainMenu
|
||||
Left = 216
|
||||
object FileMenu: TMenuItem
|
||||
Caption = '&File'
|
||||
object Exit1: TMenuItem
|
||||
Caption = 'E&xit'
|
||||
OnClick = Exit1Click
|
||||
end
|
||||
end
|
||||
object TestMenu: TMenuItem
|
||||
Caption = '&Test'
|
||||
object mnList: TMenuItem
|
||||
Caption = 'TList'
|
||||
OnClick = mnListClick
|
||||
end
|
||||
object mnJclArrayList: TMenuItem
|
||||
Caption = 'TJclArrayList'
|
||||
OnClick = mnJclArrayListClick
|
||||
end
|
||||
object mnJclLinkedList: TMenuItem
|
||||
Caption = 'TJclLinkedList'
|
||||
OnClick = mnJclLinkedListClick
|
||||
end
|
||||
object mnJclVector: TMenuItem
|
||||
Caption = 'TJclVector'
|
||||
OnClick = mnJclVectorClick
|
||||
end
|
||||
object N1: TMenuItem
|
||||
Caption = '-'
|
||||
end
|
||||
object mnBucketList: TMenuItem
|
||||
Caption = 'TBucketList'
|
||||
OnClick = mnBucketListClick
|
||||
end
|
||||
object mnJclHashMap: TMenuItem
|
||||
Caption = 'TJclHashMap'
|
||||
OnClick = mnJclHashMapClick
|
||||
end
|
||||
object mnHashedStringList: TMenuItem
|
||||
Caption = 'THashedStringList'
|
||||
OnClick = mnHashedStringListClick
|
||||
end
|
||||
object mnJclAnsiStrAnsiStrHashMap: TMenuItem
|
||||
Caption = 'TJclAnsiStrAnsiStrHashMap'
|
||||
OnClick = mnJclAnsiStrAnsiStrHashMapClick
|
||||
end
|
||||
object mnJclWideStrWideStrHashMap: TMenuItem
|
||||
Caption = 'TJclWideStrWideStrHashMap'
|
||||
OnClick = mnJclWideStrWideStrHashMapClick
|
||||
end
|
||||
object N2: TMenuItem
|
||||
Caption = '-'
|
||||
end
|
||||
object mnAllTest: TMenuItem
|
||||
Caption = 'All'
|
||||
OnClick = mnAllTestClick
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@ -0,0 +1,158 @@
|
||||
unit ContainerPerformanceMain;
|
||||
|
||||
{$I jcl.inc}
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
{$IFDEF WIN32}
|
||||
Windows, Messages, Graphics, Controls, Forms, Dialogs, StdCtrls,
|
||||
{$ENDIF WIN32}
|
||||
{$IFDEF LINUX}
|
||||
QForms, QStdCtrls, QControls,
|
||||
{$ENDIF LINUX}
|
||||
SysUtils, Classes, Grids, Menus;
|
||||
|
||||
type
|
||||
TMainForm = class(TForm)
|
||||
ListPerformanceGrid: TStringGrid;
|
||||
MainMenu1: TMainMenu;
|
||||
FileMenu: TMenuItem;
|
||||
Exit1: TMenuItem;
|
||||
TestMenu: TMenuItem;
|
||||
mnJclArrayList: TMenuItem;
|
||||
mnList: TMenuItem;
|
||||
mnJclLinkedList: TMenuItem;
|
||||
mnJclVector: TMenuItem;
|
||||
N1: TMenuItem;
|
||||
mnBucketList: TMenuItem;
|
||||
mnJclHashMap: TMenuItem;
|
||||
mnHashedStringList: TMenuItem;
|
||||
mnJclAnsiStrAnsiStrHashMap: TMenuItem;
|
||||
N2: TMenuItem;
|
||||
mnAllTest: TMenuItem;
|
||||
HashPerformanceGrid: TStringGrid;
|
||||
mnJclWideStrWideStrHashMap: TMenuItem;
|
||||
procedure FormCreate(Sender: TObject);
|
||||
procedure mnAllTestClick(Sender: TObject);
|
||||
procedure mnListClick(Sender: TObject);
|
||||
procedure mnJclArrayListClick(Sender: TObject);
|
||||
procedure mnJclLinkedListClick(Sender: TObject);
|
||||
procedure mnJclVectorClick(Sender: TObject);
|
||||
procedure mnBucketListClick(Sender: TObject);
|
||||
procedure mnJclHashMapClick(Sender: TObject);
|
||||
procedure mnHashedStringListClick(Sender: TObject);
|
||||
procedure mnJclAnsiStrAnsiStrHashMapClick(Sender: TObject);
|
||||
procedure mnJclWideStrWideStrHashMapClick(Sender: TObject);
|
||||
procedure Exit1Click(Sender: TObject);
|
||||
public
|
||||
end;
|
||||
|
||||
TMyObject = class(TInterfacedObject);
|
||||
|
||||
var
|
||||
MainForm: TMainForm;
|
||||
|
||||
implementation
|
||||
|
||||
{$R *.dfm}
|
||||
|
||||
uses
|
||||
ContainerPerformanceTests;
|
||||
|
||||
procedure TMainForm.FormCreate(Sender: TObject);
|
||||
begin
|
||||
ListPerformanceGrid.Cells[1, 0] := 'TList';
|
||||
ListPerformanceGrid.Cells[2, 0] := 'TJclArrayList';
|
||||
ListPerformanceGrid.Cells[3, 0] := 'TJclLinkedList';
|
||||
ListPerformanceGrid.Cells[4, 0] := 'TJclVector';
|
||||
ListPerformanceGrid.Cells[0, 1] := 'Add';
|
||||
ListPerformanceGrid.Cells[0, 2] := 'Next';
|
||||
ListPerformanceGrid.Cells[0, 3] := 'Random';
|
||||
ListPerformanceGrid.Cells[0, 4] := 'Insert at 10';
|
||||
ListPerformanceGrid.Cells[0, 5] := 'Clear';
|
||||
|
||||
HashPerformanceGrid.Cells[1, 0] := 'TBucketList';
|
||||
HashPerformanceGrid.Cells[2, 0] := 'TJclHashMap';
|
||||
HashPerformanceGrid.Cells[3, 0] := 'THashedStringList';
|
||||
HashPerformanceGrid.Cells[4, 0] := 'TJclAnsiStrAnsiStrHashMap';
|
||||
HashPerformanceGrid.Cells[5, 0] := 'TJclWideStrWideStrHashMap';
|
||||
HashPerformanceGrid.Cells[0, 1] := 'Add';
|
||||
HashPerformanceGrid.Cells[0, 2] := 'Random';
|
||||
HashPerformanceGrid.Cells[0, 3] := 'Clear';
|
||||
end;
|
||||
|
||||
procedure TMainForm.mnAllTestClick(Sender: TObject);
|
||||
begin
|
||||
TestList(ListPerformanceGrid.Cols[1]);
|
||||
Application.ProcessMessages;
|
||||
TestJclArrayList(ListPerformanceGrid.Cols[2]);
|
||||
Application.ProcessMessages;
|
||||
TestJclLinkedList(ListPerformanceGrid.Cols[3]);
|
||||
Application.ProcessMessages;
|
||||
TestJclVector(ListPerformanceGrid.Cols[4]);
|
||||
Application.ProcessMessages;
|
||||
|
||||
TestBucketList(HashPerformanceGrid.Cols[1]);
|
||||
Application.ProcessMessages;
|
||||
TestJclHashMap(HashPerformanceGrid.Cols[2]);
|
||||
Application.ProcessMessages;
|
||||
TestHashedStringList(HashPerformanceGrid.Cols[3]);
|
||||
Application.ProcessMessages;
|
||||
TestJclAnsiStrAnsiStrHashMap(HashPerformanceGrid.Cols[4]);
|
||||
Application.ProcessMessages;
|
||||
TestJclWideStrWideStrHashMap(HashPerformanceGrid.Cols[5]);
|
||||
end;
|
||||
|
||||
procedure TMainForm.mnListClick(Sender: TObject);
|
||||
begin
|
||||
TestList(ListPerformanceGrid.Cols[1]);
|
||||
end;
|
||||
|
||||
procedure TMainForm.mnJclArrayListClick(Sender: TObject);
|
||||
begin
|
||||
TestJclArrayList(ListPerformanceGrid.Cols[2]);
|
||||
end;
|
||||
|
||||
procedure TMainForm.mnJclLinkedListClick(Sender: TObject);
|
||||
begin
|
||||
TestJclLinkedList(ListPerformanceGrid.Cols[3]);
|
||||
end;
|
||||
|
||||
procedure TMainForm.mnJclVectorClick(Sender: TObject);
|
||||
begin
|
||||
TestJclVector(ListPerformanceGrid.Cols[4]);
|
||||
end;
|
||||
|
||||
procedure TMainForm.mnBucketListClick(Sender: TObject);
|
||||
begin
|
||||
TestBucketList(HashPerformanceGrid.Cols[1]);
|
||||
end;
|
||||
|
||||
procedure TMainForm.mnJclHashMapClick(Sender: TObject);
|
||||
begin
|
||||
TestJclHashMap(HashPerformanceGrid.Cols[2]);
|
||||
end;
|
||||
|
||||
procedure TMainForm.mnHashedStringListClick(Sender: TObject);
|
||||
begin
|
||||
TestHashedStringList(HashPerformanceGrid.Cols[3]);
|
||||
end;
|
||||
|
||||
procedure TMainForm.mnJclAnsiStrAnsiStrHashMapClick(Sender: TObject);
|
||||
begin
|
||||
TestJclAnsiStrAnsiStrHashMap(HashPerformanceGrid.Cols[4]);
|
||||
end;
|
||||
|
||||
procedure TMainForm.mnJclWideStrWideStrHashMapClick(Sender: TObject);
|
||||
begin
|
||||
TestJclWideStrWideStrHashMap(HashPerformanceGrid.Cols[5]);
|
||||
end;
|
||||
|
||||
procedure TMainForm.Exit1Click(Sender: TObject);
|
||||
begin
|
||||
Close;
|
||||
end;
|
||||
|
||||
end.
|
||||
|
||||
@ -0,0 +1,353 @@
|
||||
unit ContainerPerformanceTests;
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
Classes;
|
||||
|
||||
procedure TestList(Results: TStrings);
|
||||
procedure TestJclArrayList(Results: TStrings);
|
||||
procedure TestJclLinkedList(Results: TStrings);
|
||||
procedure TestJclVector(Results: TStrings);
|
||||
|
||||
procedure TestBucketList(Results: TStrings);
|
||||
procedure TestJclHashMap(Results: TStrings);
|
||||
procedure TestHashedStringList(Results: TStrings);
|
||||
procedure TestJclAnsiStrAnsiStrHashMap(Results: TStrings);
|
||||
procedure TestJclWideStrWideStrHashMap(Results: TStrings);
|
||||
|
||||
implementation
|
||||
|
||||
{$I jcl.inc}
|
||||
|
||||
uses
|
||||
SysUtils, Forms, Controls, Math,
|
||||
{$IFDEF RTL140_UP}
|
||||
Contnrs, IniFiles,
|
||||
{$ENDIF RTL140_UP}
|
||||
JclContainerIntf, JclArrayLists, JclLinkedLists, JclHashMaps, JclVectors;
|
||||
|
||||
const
|
||||
ResultFormat = '%.1f ms';
|
||||
MsecsPerDay = 24 * 60 * 60 * 1000;
|
||||
|
||||
{$IFNDEF RTL140_UP}
|
||||
const
|
||||
SNeedRTL140Up = 'requires RTL > 14.0';
|
||||
{$ENDIF ~RTL140_UP}
|
||||
|
||||
var
|
||||
Res: Integer;
|
||||
|
||||
procedure TestList(Results: TStrings);
|
||||
var
|
||||
List: TList;
|
||||
I: Integer;
|
||||
Start: TDateTime;
|
||||
begin
|
||||
Randomize;
|
||||
Start := Now;
|
||||
List := TList.Create;
|
||||
Screen.Cursor := crHourGlass;
|
||||
try
|
||||
for I := 0 to 2000000 do
|
||||
List.Add(Pointer(I));
|
||||
Results[1] := Format(ResultFormat, [(Now - Start) * MsecsPerDay]);
|
||||
Start := Now;
|
||||
for I := 0 to List.Count - 1 do
|
||||
Res := Integer(List[I]);
|
||||
Results[2] := Format(ResultFormat, [(Now - Start) * MsecsPerDay]);
|
||||
Start := Now;
|
||||
for I := 0 to 200 do
|
||||
Res := List.IndexOf(Pointer(Random(1000000)));
|
||||
Results[3] := Format(ResultFormat, [(Now - Start) * MsecsPerDay]);
|
||||
Start := Now;
|
||||
for I := 0 to 100 do
|
||||
List.Insert(10, Pointer(I));
|
||||
Results[4] := Format(ResultFormat, [(Now - Start) * MsecsPerDay]);
|
||||
Start := Now;
|
||||
List.Clear;
|
||||
Results[5] := Format(ResultFormat, [(Now - Start) * MsecsPerDay]);
|
||||
finally
|
||||
List.Free;
|
||||
Screen.Cursor := crDefault;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TestJclArrayList(Results: TStrings);
|
||||
var
|
||||
List: IJclList;
|
||||
It: IJclIterator;
|
||||
I: Integer;
|
||||
Start: TDateTime;
|
||||
begin
|
||||
Randomize;
|
||||
Screen.Cursor := crHourGlass;
|
||||
try
|
||||
Start := Now;
|
||||
List := TJclArrayList.Create(16, False);
|
||||
for I := 0 to 2000000 do
|
||||
List.Add(TObject(I));
|
||||
Results[1] := Format(ResultFormat, [(Now - Start) * MsecsPerDay]);
|
||||
Start := Now;
|
||||
// Fast but Specific ArrayList
|
||||
//for I := 0 to List.Size - 1 do
|
||||
// Res := Integer(List.GetObject(I));
|
||||
// Slower but same for every IJclList
|
||||
It := List.First;
|
||||
while It.HasNext do
|
||||
Res := Integer(It.Next);
|
||||
Results[2] := Format(ResultFormat, [(Now - Start) * MsecsPerDay]);
|
||||
Start := Now;
|
||||
for I := 0 to 200 do
|
||||
Res := List.IndexOf(TObject(Random(1000000)));
|
||||
Results[3] := Format(ResultFormat, [(Now - Start) * MsecsPerDay]);
|
||||
Start := Now;
|
||||
It := List.First;
|
||||
for I := 0 to 10 do
|
||||
It.Next;
|
||||
for I := 0 to 100 do
|
||||
It.Add(TObject(I));
|
||||
Results[4] := Format(ResultFormat, [(Now - Start) * MsecsPerDay]);
|
||||
Start := Now;
|
||||
List.Clear;
|
||||
Results[5] := Format(ResultFormat, [(Now - Start) * MsecsPerDay]);
|
||||
finally
|
||||
Screen.Cursor := crDefault;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TestJclLinkedList(Results: TStrings);
|
||||
var
|
||||
List: IJclList;
|
||||
I: Integer;
|
||||
It: IJclIterator;
|
||||
Start: TDateTime;
|
||||
begin
|
||||
Randomize;
|
||||
Screen.Cursor := crHourGlass;
|
||||
try
|
||||
Start := Now;
|
||||
List := TJclLinkedList.Create(nil, False);
|
||||
for I := 0 to 2000000 do
|
||||
List.Add(TObject(I));
|
||||
Results[1] := Format(ResultFormat, [(Now - Start) * MsecsPerDay]);
|
||||
Start := Now;
|
||||
It := List.First;
|
||||
while It.HasNext do
|
||||
Res := Integer(It.Next);
|
||||
Results[2] := Format(ResultFormat, [(Now - Start) * MsecsPerDay]);
|
||||
Start := Now;
|
||||
for I := 0 to 200 do
|
||||
Res := List.IndexOf(TObject(Random(1000000)));
|
||||
Results[3] := Format(ResultFormat, [(Now - Start) * MsecsPerDay]);
|
||||
Start := Now;
|
||||
It := List.First;
|
||||
for I := 0 to 10 do
|
||||
It.Next;
|
||||
for I := 0 to 100 do
|
||||
It.Add(TObject(I));
|
||||
Results[4] := Format(ResultFormat, [(Now - Start) * MsecsPerDay]);
|
||||
Start := Now;
|
||||
List.Clear;
|
||||
Results[5] := Format(ResultFormat, [(Now - Start) * MsecsPerDay]);
|
||||
finally
|
||||
Screen.Cursor := crDefault;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TestJclVector(Results: TStrings);
|
||||
var
|
||||
List: IJclList;
|
||||
I: Integer;
|
||||
Start: TDateTime;
|
||||
begin
|
||||
Randomize;
|
||||
Screen.Cursor := crHourGlass;
|
||||
Start := Now;
|
||||
List := TJclVector.Create(16, False);
|
||||
try
|
||||
for I := 0 to 2000000 do
|
||||
List.Add(TObject(I));
|
||||
Results[1] := Format(ResultFormat, [(Now - Start) * MsecsPerDay]);
|
||||
Start := Now;
|
||||
for I := 0 to List.Size - 1 do
|
||||
Res := Integer(List.Objects[I]);
|
||||
Results[2] := Format(ResultFormat, [(Now - Start) * MsecsPerDay]);
|
||||
Start := Now;
|
||||
for I := 0 to 200 do
|
||||
Res := List.IndexOf(TObject(Random(1000000)));
|
||||
Results[3] := Format(ResultFormat, [(Now - Start) * MsecsPerDay]);
|
||||
Start := Now;
|
||||
for I := List.Size - 1 downto 20 do
|
||||
List.Objects[I - 10] := List.Objects[I];
|
||||
for I := 0 to 10 do
|
||||
List.Objects[I + 10] := TObject(I);
|
||||
Results[4] := Format(ResultFormat, [(Now - Start) * MsecsPerDay]);
|
||||
Start := Now;
|
||||
List.Clear;
|
||||
Results[5] := Format(ResultFormat, [(Now - Start) * MsecsPerDay]);
|
||||
finally
|
||||
List := nil;
|
||||
Screen.Cursor := crDefault;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TestBucketList(Results: TStrings);
|
||||
{$IFDEF RTL140_UP}
|
||||
var
|
||||
I: Integer;
|
||||
Start: TDateTime;
|
||||
List: TBucketList;
|
||||
begin
|
||||
Randomize;
|
||||
Screen.Cursor := crHourGlass;
|
||||
Start := Now;
|
||||
List := TBucketList.Create(bl256);
|
||||
try
|
||||
for I := 0 to 100000 do
|
||||
List.Add(TObject(I), TObject(I));
|
||||
Results[1] := Format(ResultFormat, [(Now - Start) * MsecsPerDay]);
|
||||
Start := Now;
|
||||
for I := 0 to 100000 do
|
||||
Res := Integer(List.Data[TObject(Random(100000))]);
|
||||
Results[2] := Format(ResultFormat, [(Now - Start) * MsecsPerDay]);
|
||||
Start := Now;
|
||||
List.Clear;
|
||||
Results[3] := Format(ResultFormat, [(Now - Start) * MsecsPerDay]);
|
||||
finally
|
||||
List.Free;
|
||||
Screen.Cursor := crDefault;
|
||||
end;
|
||||
end;
|
||||
{$ELSE ~RTL140_UP}
|
||||
var
|
||||
I: Integer;
|
||||
begin
|
||||
for I := 1 to 3 do
|
||||
Results[I] := SNeedRTL140Up;
|
||||
end;
|
||||
{$ENDIF ~RTL140_UP}
|
||||
|
||||
procedure TestJclHashMap(Results: TStrings);
|
||||
var
|
||||
Map: IJclMap;
|
||||
I: Integer;
|
||||
Start: TDateTime;
|
||||
begin
|
||||
Randomize;
|
||||
Screen.Cursor := crHourGlass;
|
||||
try
|
||||
Start := Now;
|
||||
Map := JclHashMaps.TJclHashMap.Create(256, False, False);
|
||||
for I := 0 to 100000 do
|
||||
Map.PutValue(TObject(Random(100000)), TObject(I));
|
||||
Results[1] := Format(ResultFormat, [(Now - Start) * MsecsPerDay]);
|
||||
Start := Now;
|
||||
for I := 0 to 100000 do
|
||||
Res := Integer(Map.GetValue(TObject(Random(100000))));
|
||||
Results[2] := Format(ResultFormat, [(Now - Start) * MsecsPerDay]);
|
||||
Start := Now;
|
||||
Map.Clear;
|
||||
Results[3] := Format(ResultFormat, [(Now - Start) * MsecsPerDay]);
|
||||
finally
|
||||
Screen.Cursor := crDefault;
|
||||
end;
|
||||
end;
|
||||
|
||||
function GenId(Value: Integer): string;
|
||||
begin
|
||||
Result := IntToStr(Value);
|
||||
end;
|
||||
|
||||
procedure TestHashedStringList(Results: TStrings);
|
||||
{$IFDEF RTL140_UP}
|
||||
var
|
||||
I: Integer;
|
||||
List: THashedStringList;
|
||||
Start: TDateTime;
|
||||
begin
|
||||
Randomize;
|
||||
Screen.Cursor := crHourGlass;
|
||||
Start := Now;
|
||||
List := THashedStringList.Create;
|
||||
try
|
||||
for I := 0 to 100000 do
|
||||
List.Add(GenId(123));
|
||||
Results[1] := Format(ResultFormat, [(Now - Start) * MsecsPerDay]);
|
||||
Start := Now;
|
||||
for I := 0 to 100000 do
|
||||
Res := List.IndexOf(GenId(123));
|
||||
Results[2] := Format(ResultFormat, [(Now - Start) * MsecsPerDay]);
|
||||
Start := Now;
|
||||
List.Clear;
|
||||
Results[3] := Format(ResultFormat, [(Now - Start) * MsecsPerDay]);
|
||||
finally
|
||||
List.Free;
|
||||
Screen.Cursor := crDefault;
|
||||
end;
|
||||
end;
|
||||
{$ELSE ~RTL140_UP}
|
||||
var
|
||||
I: Integer;
|
||||
begin
|
||||
for I := 1 to 3 do
|
||||
Results[I] := SNeedRTL140Up;
|
||||
end;
|
||||
{$ENDIF ~RTL140_UP}
|
||||
|
||||
procedure TestJclAnsiStrAnsiStrHashMap(Results: TStrings);
|
||||
var
|
||||
Map: IJclAnsiStrAnsiStrMap;
|
||||
I: Integer;
|
||||
Res: string;
|
||||
Start: TDateTime;
|
||||
begin
|
||||
Randomize;
|
||||
Screen.Cursor := crHourGlass;
|
||||
try
|
||||
Start := Now;
|
||||
Map := TJclAnsiStrAnsiStrHashMap.Create(256);
|
||||
for I := 0 to 100000 do
|
||||
Map.PutValue(AnsiString(GenId(123)), '');
|
||||
Results[1] := Format(ResultFormat, [(Now - Start) * MsecsPerDay]);
|
||||
Start := Now;
|
||||
for I := 0 to 100000 do
|
||||
Res := string(Map.GetValue(AnsiString(GenId(123))));
|
||||
Results[2] := Format(ResultFormat, [(Now - Start) * MsecsPerDay]);
|
||||
Start := Now;
|
||||
Map.Clear;
|
||||
Results[3] := Format(ResultFormat, [(Now - Start) * MsecsPerDay]);
|
||||
finally
|
||||
Screen.Cursor := crDefault;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TestJclWideStrWideStrHashMap(Results: TStrings);
|
||||
var
|
||||
Map: IJclWideStrWideStrMap;
|
||||
I: Integer;
|
||||
Res: string;
|
||||
Start: TDateTime;
|
||||
begin
|
||||
Randomize;
|
||||
Screen.Cursor := crHourGlass;
|
||||
try
|
||||
Start := Now;
|
||||
Map := TJclWideStrWideStrHashMap.Create(256);
|
||||
for I := 0 to 100000 do
|
||||
Map.PutValue(GenId(123), '');
|
||||
Results[1] := Format(ResultFormat, [(Now - Start) * MsecsPerDay]);
|
||||
Start := Now;
|
||||
for I := 0 to 100000 do
|
||||
Res := Map.GetValue(GenId(123));
|
||||
Results[2] := Format(ResultFormat, [(Now - Start) * MsecsPerDay]);
|
||||
Start := Now;
|
||||
Map.Clear;
|
||||
Results[3] := Format(ResultFormat, [(Now - Start) * MsecsPerDay]);
|
||||
finally
|
||||
Screen.Cursor := crDefault;
|
||||
end;
|
||||
end;
|
||||
|
||||
end.
|
||||
@ -0,0 +1,2 @@
|
||||
[Directories]
|
||||
OutputDir=..\..\..\..\bin
|
||||
@ -0,0 +1,21 @@
|
||||
program TreeExample;
|
||||
|
||||
{$I jcl.inc}
|
||||
|
||||
uses
|
||||
{$IFDEF MSWINDOWS}
|
||||
Forms,
|
||||
{$ENDIF MSWINDOWS}
|
||||
{$IFDEF LINUX}
|
||||
QForms,
|
||||
{$ENDIF LINUX}
|
||||
TreeExampleMain in 'TreeExampleMain.pas' {MainForm};
|
||||
|
||||
{$R *.res}
|
||||
{$R ..\..\..\..\source\windows\JclCommCtrlAsInvoker.res}
|
||||
|
||||
begin
|
||||
Application.Initialize;
|
||||
Application.CreateForm(TMainForm, MainForm);
|
||||
Application.Run;
|
||||
end.
|
||||
BIN
official/1.104/examples/common/containers/trees/TreeExample.res
Normal file
BIN
official/1.104/examples/common/containers/trees/TreeExample.res
Normal file
Binary file not shown.
@ -0,0 +1,62 @@
|
||||
object MainForm: TMainForm
|
||||
Left = 328
|
||||
Top = 237
|
||||
Caption = 'Binary Tree'
|
||||
ClientHeight = 259
|
||||
ClientWidth = 462
|
||||
Color = clBtnFace
|
||||
Font.Charset = DEFAULT_CHARSET
|
||||
Font.Color = clWindowText
|
||||
Font.Height = -11
|
||||
Font.Name = 'MS Sans Serif'
|
||||
Font.Style = []
|
||||
OldCreateOrder = False
|
||||
Position = poScreenCenter
|
||||
PixelsPerInch = 96
|
||||
TextHeight = 13
|
||||
object btnIntfArrayTree: TButton
|
||||
Left = 64
|
||||
Top = 24
|
||||
Width = 97
|
||||
Height = 25
|
||||
Caption = 'IntfBinaryTree'
|
||||
TabOrder = 1
|
||||
OnClick = btnIntfArrayTreeClick
|
||||
end
|
||||
object memoResult: TMemo
|
||||
Left = 230
|
||||
Top = 0
|
||||
Width = 232
|
||||
Height = 259
|
||||
Align = alRight
|
||||
ScrollBars = ssVertical
|
||||
TabOrder = 2
|
||||
end
|
||||
object btnArrayTree: TButton
|
||||
Left = 64
|
||||
Top = 192
|
||||
Width = 97
|
||||
Height = 25
|
||||
Caption = 'BinaryTree'
|
||||
TabOrder = 0
|
||||
OnClick = btnArrayTreeClick
|
||||
end
|
||||
object btnAnsiStrBinaryTree: TButton
|
||||
Left = 64
|
||||
Top = 80
|
||||
Width = 97
|
||||
Height = 25
|
||||
Caption = 'AnsiStrBinaryTree'
|
||||
TabOrder = 3
|
||||
OnClick = btnAnsiStrBinaryTreeClick
|
||||
end
|
||||
object btnWideStrBinaryTree: TButton
|
||||
Left = 64
|
||||
Top = 136
|
||||
Width = 97
|
||||
Height = 25
|
||||
Caption = 'WideStrBinaryTree'
|
||||
TabOrder = 4
|
||||
OnClick = btnWideStrBinaryTreeClick
|
||||
end
|
||||
end
|
||||
@ -0,0 +1,168 @@
|
||||
unit TreeExampleMain;
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
|
||||
Dialogs, StdCtrls, JclBase;
|
||||
|
||||
type
|
||||
TMainForm = class(TForm)
|
||||
btnIntfArrayTree: TButton;
|
||||
memoResult: TMemo;
|
||||
btnArrayTree: TButton;
|
||||
btnAnsiStrBinaryTree: TButton;
|
||||
btnWideStrBinaryTree: TButton;
|
||||
procedure btnIntfArrayTreeClick(Sender: TObject);
|
||||
procedure btnArrayTreeClick(Sender: TObject);
|
||||
procedure btnAnsiStrBinaryTreeClick(Sender: TObject);
|
||||
procedure btnWideStrBinaryTreeClick(Sender: TObject);
|
||||
public
|
||||
end;
|
||||
|
||||
IIntfInteger = interface
|
||||
['{0E32C3C9-5940-4373-B3BA-644473E3F3C2}']
|
||||
function GetValue: Integer;
|
||||
procedure SetValue(AValue: Integer);
|
||||
property Value: Integer read GetValue write SetValue;
|
||||
end;
|
||||
|
||||
TIntfInteger = class(TInterfacedObject, IIntfInteger)
|
||||
private
|
||||
FValue: Integer;
|
||||
function GetValue: Integer;
|
||||
procedure SetValue(AValue: Integer);
|
||||
public
|
||||
constructor Create(AValue: Integer);
|
||||
end;
|
||||
|
||||
var
|
||||
MainForm: TMainForm;
|
||||
|
||||
implementation
|
||||
|
||||
{$R *.dfm}
|
||||
|
||||
uses
|
||||
JclContainerIntf, JclAlgorithms, JclBinaryTrees;
|
||||
|
||||
{ TIntfInteger }
|
||||
|
||||
constructor TIntfInteger.Create(AValue: Integer);
|
||||
begin
|
||||
inherited Create;
|
||||
FValue := AValue;
|
||||
end;
|
||||
|
||||
function TIntfInteger.GetValue: Integer;
|
||||
begin
|
||||
Result := FValue;
|
||||
end;
|
||||
|
||||
procedure TIntfInteger.SetValue(AValue: Integer);
|
||||
begin
|
||||
FValue := AValue;
|
||||
end;
|
||||
|
||||
function IntfIntegerComparator(const AIntf1, AIntf2: IInterface): Integer;
|
||||
begin
|
||||
Result := (AIntf1 as IIntfInteger).Value - (AIntf2 as IIntfInteger).Value;
|
||||
end;
|
||||
|
||||
procedure TMainForm.btnIntfArrayTreeClick(Sender: TObject);
|
||||
var
|
||||
Tree: IJclIntfTree;
|
||||
I: Integer;
|
||||
Obj: IIntfInteger;
|
||||
It: IJclIntfIterator;
|
||||
begin
|
||||
memoResult.Lines.Clear;
|
||||
Tree := TJclIntfBinaryTree.Create(IntfIntegerComparator);
|
||||
for I := 0 to 17 do
|
||||
begin
|
||||
Obj := TIntfInteger.Create(I);
|
||||
Tree.Add(Obj);
|
||||
end;
|
||||
|
||||
Obj := TIntfInteger.Create(15);
|
||||
if Tree.Contains(Obj) then
|
||||
memoResult.Lines.Add('contains 15');
|
||||
|
||||
Tree.TraverseOrder := toPostOrder;
|
||||
It := Tree.Last;
|
||||
while It.HasPrevious do
|
||||
begin
|
||||
Obj := It.Previous as IIntfInteger;
|
||||
memoResult.Lines.Add(IntToStr(Obj.Value));
|
||||
end;
|
||||
|
||||
It := Tree.First;
|
||||
while It.HasNext do
|
||||
begin
|
||||
It.Next;
|
||||
It.Remove;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TMainForm.btnArrayTreeClick(Sender: TObject);
|
||||
var
|
||||
Tree: IJclTree;
|
||||
I: Integer;
|
||||
It: IJclIterator;
|
||||
begin
|
||||
memoResult.Lines.Clear;
|
||||
Tree := TJclBinaryTree.Create(JclAlgorithms.IntegerCompare, {OwnsObjects:}False);
|
||||
for I := 0 to 17 do
|
||||
Tree.Add(TObject(I));
|
||||
|
||||
if Tree.Contains(TObject(15)) then
|
||||
memoResult.Lines.Add('contains 15');
|
||||
|
||||
Tree.TraverseOrder := toOrder;
|
||||
It := Tree.First;
|
||||
while It.HasNext do
|
||||
memoResult.Lines.Add(IntToStr(Integer(It.Next)));
|
||||
end;
|
||||
|
||||
procedure TMainForm.btnAnsiStrBinaryTreeClick(Sender: TObject);
|
||||
var
|
||||
Tree: IJclAnsiStrTree;
|
||||
I: Integer;
|
||||
It: IJclAnsiStrIterator;
|
||||
begin
|
||||
memoResult.Lines.Clear;
|
||||
Tree := TJclAnsiStrBinaryTree.Create(JclAlgorithms.AnsiStrSimpleCompare);
|
||||
for I := 0 to 17 do
|
||||
Tree.Add(AnsiString(Format('%.2d', [I])));
|
||||
|
||||
if Tree.Contains('15') then
|
||||
memoResult.Lines.Add('contains 15');
|
||||
|
||||
Tree.TraverseOrder := toOrder;
|
||||
It := Tree.First;
|
||||
while It.HasNext do
|
||||
memoResult.Lines.Add(string(It.Next));
|
||||
end;
|
||||
|
||||
procedure TMainForm.btnWideStrBinaryTreeClick(Sender: TObject);
|
||||
var
|
||||
Tree: IJclWideStrTree;
|
||||
I: Integer;
|
||||
It: IJclWideStrIterator;
|
||||
begin
|
||||
memoResult.Lines.Clear;
|
||||
Tree := TJclWideStrBinaryTree.Create(JclAlgorithms.WideStrSimpleCompare);
|
||||
for I := 0 to 17 do
|
||||
Tree.Add(Format('%.2d', [I]));
|
||||
|
||||
if Tree.Contains('15') then
|
||||
memoResult.Lines.Add('contains 15');
|
||||
|
||||
Tree.TraverseOrder := toOrder;
|
||||
It := Tree.First;
|
||||
while It.HasNext do
|
||||
memoResult.Lines.Add(It.Next);
|
||||
end;
|
||||
|
||||
end.
|
||||
|
||||
@ -0,0 +1,2 @@
|
||||
[Directories]
|
||||
OutputDir=..\..\..\..\bin
|
||||
@ -0,0 +1,14 @@
|
||||
program TreeStructure;
|
||||
|
||||
uses
|
||||
Forms,
|
||||
TreeStructureMain in 'TreeStructureMain.pas' {Form1};
|
||||
|
||||
{$R *.res}
|
||||
{$R ..\..\..\..\source\windows\JclCommCtrlAsInvoker.res}
|
||||
|
||||
begin
|
||||
Application.Initialize;
|
||||
Application.CreateForm(TForm1, Form1);
|
||||
Application.Run;
|
||||
end.
|
||||
Binary file not shown.
@ -0,0 +1,247 @@
|
||||
object Form1: TForm1
|
||||
Left = 0
|
||||
Top = 0
|
||||
Caption = 'Form1'
|
||||
ClientHeight = 423
|
||||
ClientWidth = 426
|
||||
Color = clBtnFace
|
||||
Font.Charset = DEFAULT_CHARSET
|
||||
Font.Color = clWindowText
|
||||
Font.Height = -11
|
||||
Font.Name = 'Tahoma'
|
||||
Font.Style = []
|
||||
OldCreateOrder = False
|
||||
OnCreate = FormCreate
|
||||
PixelsPerInch = 96
|
||||
TextHeight = 13
|
||||
object GroupBoxOptions: TGroupBox
|
||||
Left = 8
|
||||
Top = 8
|
||||
Width = 410
|
||||
Height = 129
|
||||
Anchors = [akLeft, akTop, akRight]
|
||||
Caption = 'Options:'
|
||||
TabOrder = 0
|
||||
object CheckBoxBinaryTree: TCheckBox
|
||||
Left = 16
|
||||
Top = 24
|
||||
Width = 161
|
||||
Height = 17
|
||||
Action = ActionBinaryTree
|
||||
TabOrder = 0
|
||||
end
|
||||
object CheckBoxGeneralPurposeTree: TCheckBox
|
||||
Left = 16
|
||||
Top = 48
|
||||
Width = 161
|
||||
Height = 17
|
||||
Action = ActionGeneralPurposeTree
|
||||
State = cbChecked
|
||||
TabOrder = 1
|
||||
end
|
||||
object CheckBoxCaseSensitive: TCheckBox
|
||||
Left = 16
|
||||
Top = 96
|
||||
Width = 97
|
||||
Height = 17
|
||||
Action = ActionCaseSensitive
|
||||
TabOrder = 2
|
||||
end
|
||||
object CheckBoxAllowDefault: TCheckBox
|
||||
Left = 199
|
||||
Top = 24
|
||||
Width = 178
|
||||
Height = 17
|
||||
Action = ActionAllowDefault
|
||||
TabOrder = 3
|
||||
end
|
||||
object CheckBoxAllowDuplicates: TCheckBox
|
||||
Left = 200
|
||||
Top = 48
|
||||
Width = 177
|
||||
Height = 17
|
||||
Action = ActionAllowDuplicates
|
||||
TabOrder = 4
|
||||
end
|
||||
object CheckBoxIgnoreDuplicates: TCheckBox
|
||||
Left = 216
|
||||
Top = 72
|
||||
Width = 161
|
||||
Height = 17
|
||||
Action = ActionIgnoreDuplicates
|
||||
TabOrder = 5
|
||||
end
|
||||
object CheckBoxRemoveSingle: TCheckBox
|
||||
Left = 200
|
||||
Top = 96
|
||||
Width = 177
|
||||
Height = 17
|
||||
Action = ActionRemoveSingle
|
||||
TabOrder = 6
|
||||
end
|
||||
end
|
||||
object TreeViewResults: TTreeView
|
||||
Left = 8
|
||||
Top = 143
|
||||
Width = 193
|
||||
Height = 272
|
||||
Anchors = [akLeft, akTop, akRight, akBottom]
|
||||
Indent = 19
|
||||
TabOrder = 1
|
||||
end
|
||||
object GroupBoxActions: TGroupBox
|
||||
Left = 207
|
||||
Top = 143
|
||||
Width = 211
|
||||
Height = 272
|
||||
Anchors = [akTop, akRight, akBottom]
|
||||
Caption = 'Actions:'
|
||||
TabOrder = 2
|
||||
object ButtonGenerateRandom: TButton
|
||||
Left = 16
|
||||
Top = 24
|
||||
Width = 177
|
||||
Height = 25
|
||||
Action = ActionGenerateRandom
|
||||
TabOrder = 0
|
||||
end
|
||||
object ButtonRemoveSelected: TButton
|
||||
Left = 16
|
||||
Top = 56
|
||||
Width = 177
|
||||
Height = 25
|
||||
Action = ActionRemoveSelected
|
||||
TabOrder = 1
|
||||
end
|
||||
object EditNewItem: TEdit
|
||||
Left = 16
|
||||
Top = 168
|
||||
Width = 177
|
||||
Height = 21
|
||||
TabOrder = 2
|
||||
Text = 'New item'
|
||||
end
|
||||
object ButtonAddNew: TButton
|
||||
Left = 16
|
||||
Top = 200
|
||||
Width = 177
|
||||
Height = 25
|
||||
Action = ActionAddNew
|
||||
TabOrder = 3
|
||||
end
|
||||
object ButtonAddNewChild: TButton
|
||||
Left = 16
|
||||
Top = 231
|
||||
Width = 177
|
||||
Height = 25
|
||||
Action = ActionAddNewChild
|
||||
TabOrder = 4
|
||||
end
|
||||
object Button1: TButton
|
||||
Left = 16
|
||||
Top = 87
|
||||
Width = 177
|
||||
Height = 25
|
||||
Action = ActionPack
|
||||
TabOrder = 5
|
||||
end
|
||||
object Button2: TButton
|
||||
Left = 16
|
||||
Top = 120
|
||||
Width = 177
|
||||
Height = 25
|
||||
Action = ActionTestTree
|
||||
TabOrder = 6
|
||||
end
|
||||
end
|
||||
object ActionListMain: TActionList
|
||||
Left = 160
|
||||
Top = 112
|
||||
object ActionAllowDuplicates: TAction
|
||||
Category = 'Tree options'
|
||||
AutoCheck = True
|
||||
Caption = 'Allow duplicates'
|
||||
OnExecute = ActionDuplicatesExecute
|
||||
OnUpdate = ActionAlwaysEnabled
|
||||
end
|
||||
object ActionIgnoreDuplicates: TAction
|
||||
Category = 'Tree options'
|
||||
AutoCheck = True
|
||||
Caption = 'Ignore duplicates'
|
||||
OnExecute = ActionDuplicatesExecute
|
||||
OnUpdate = ActionIgnoreDuplicatesUpdate
|
||||
end
|
||||
object ActionAllowDefault: TAction
|
||||
Category = 'Tree options'
|
||||
AutoCheck = True
|
||||
Caption = 'Allow defaults (empty strings)'
|
||||
OnExecute = ActionAllowDefaultExecute
|
||||
OnUpdate = ActionAlwaysEnabled
|
||||
end
|
||||
object ActionRemoveSingle: TAction
|
||||
Category = 'Tree options'
|
||||
AutoCheck = True
|
||||
Caption = 'Remove single element'
|
||||
OnExecute = ActionRemoveSingleExecute
|
||||
OnUpdate = ActionAlwaysEnabled
|
||||
end
|
||||
object ActionCaseSensitive: TAction
|
||||
Category = 'Tree options'
|
||||
AutoCheck = True
|
||||
Caption = 'Case sensitive'
|
||||
OnExecute = ActionCaseSensitiveExecute
|
||||
OnUpdate = ActionAlwaysEnabled
|
||||
end
|
||||
object ActionGenerateRandom: TAction
|
||||
Category = 'Tree actions'
|
||||
Caption = 'Generate random tree'
|
||||
OnExecute = ActionGenerateRandomExecute
|
||||
OnUpdate = ActionAlwaysEnabled
|
||||
end
|
||||
object ActionAddNew: TAction
|
||||
Category = 'Tree actions'
|
||||
Caption = 'Add new'
|
||||
OnExecute = ActionAddNewExecute
|
||||
OnUpdate = ActionAlwaysEnabled
|
||||
end
|
||||
object ActionRemoveSelected: TAction
|
||||
Category = 'Tree actions'
|
||||
Caption = 'Remove selected'
|
||||
OnExecute = ActionRemoveSelectedExecute
|
||||
OnUpdate = ActionRemoveSelectedUpdate
|
||||
end
|
||||
object ActionAddNewChild: TAction
|
||||
Category = 'Tree actions'
|
||||
Caption = 'Add new child'
|
||||
OnExecute = ActionAddNewChildExecute
|
||||
OnUpdate = ActionAddNewChildUpdate
|
||||
end
|
||||
object ActionBinaryTree: TAction
|
||||
Category = 'Tree options'
|
||||
AutoCheck = True
|
||||
Caption = 'Binary tree'
|
||||
OnExecute = ActionBinaryTreeExecute
|
||||
OnUpdate = ActionAlwaysEnabled
|
||||
end
|
||||
object ActionGeneralPurposeTree: TAction
|
||||
Category = 'Tree options'
|
||||
AutoCheck = True
|
||||
Caption = 'General purpose tree'
|
||||
Checked = True
|
||||
OnExecute = ActionGeneralPurposeTreeExecute
|
||||
OnUpdate = ActionAlwaysEnabled
|
||||
end
|
||||
object ActionPack: TAction
|
||||
Category = 'Tree actions'
|
||||
Caption = 'Pack'
|
||||
OnExecute = ActionPackExecute
|
||||
OnUpdate = ActionAlwaysEnabled
|
||||
end
|
||||
object ActionTestTree: TAction
|
||||
Category = 'Tree actions'
|
||||
Caption = 'Test tree'
|
||||
OnExecute = ActionTestTreeExecute
|
||||
OnUpdate = ActionAlwaysEnabled
|
||||
end
|
||||
end
|
||||
end
|
||||
@ -0,0 +1,344 @@
|
||||
unit TreeStructureMain;
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
|
||||
Dialogs, StdCtrls, ActnList, ComCtrls,
|
||||
JclContainerIntf;
|
||||
|
||||
type
|
||||
TForm1 = class(TForm)
|
||||
GroupBoxOptions: TGroupBox;
|
||||
ActionListMain: TActionList;
|
||||
ActionAllowDuplicates: TAction;
|
||||
ActionIgnoreDuplicates: TAction;
|
||||
ActionAllowDefault: TAction;
|
||||
ActionRemoveSingle: TAction;
|
||||
ActionCaseSensitive: TAction;
|
||||
ActionGenerateRandom: TAction;
|
||||
ActionAddNew: TAction;
|
||||
ActionRemoveSelected: TAction;
|
||||
TreeViewResults: TTreeView;
|
||||
GroupBoxActions: TGroupBox;
|
||||
ButtonGenerateRandom: TButton;
|
||||
ButtonRemoveSelected: TButton;
|
||||
EditNewItem: TEdit;
|
||||
ButtonAddNew: TButton;
|
||||
ActionAddNewChild: TAction;
|
||||
ButtonAddNewChild: TButton;
|
||||
CheckBoxBinaryTree: TCheckBox;
|
||||
ActionBinaryTree: TAction;
|
||||
ActionGeneralPurposeTree: TAction;
|
||||
CheckBoxGeneralPurposeTree: TCheckBox;
|
||||
CheckBoxCaseSensitive: TCheckBox;
|
||||
CheckBoxAllowDefault: TCheckBox;
|
||||
CheckBoxAllowDuplicates: TCheckBox;
|
||||
CheckBoxIgnoreDuplicates: TCheckBox;
|
||||
CheckBoxRemoveSingle: TCheckBox;
|
||||
ActionPack: TAction;
|
||||
Button1: TButton;
|
||||
ActionTestTree: TAction;
|
||||
Button2: TButton;
|
||||
procedure FormCreate(Sender: TObject);
|
||||
procedure ActionGeneralPurposeTreeExecute(Sender: TObject);
|
||||
procedure ActionAlwaysEnabled(Sender: TObject);
|
||||
procedure ActionBinaryTreeExecute(Sender: TObject);
|
||||
procedure ActionCaseSensitiveExecute(Sender: TObject);
|
||||
procedure ActionRemoveSingleExecute(Sender: TObject);
|
||||
procedure ActionAllowDefaultExecute(Sender: TObject);
|
||||
procedure ActionDuplicatesExecute(Sender: TObject);
|
||||
procedure ActionIgnoreDuplicatesUpdate(Sender: TObject);
|
||||
procedure ActionGenerateRandomExecute(Sender: TObject);
|
||||
procedure ActionPackExecute(Sender: TObject);
|
||||
procedure ActionAddNewExecute(Sender: TObject);
|
||||
procedure ActionAddNewChildUpdate(Sender: TObject);
|
||||
procedure ActionAddNewChildExecute(Sender: TObject);
|
||||
procedure ActionRemoveSelectedExecute(Sender: TObject);
|
||||
procedure ActionRemoveSelectedUpdate(Sender: TObject);
|
||||
procedure ActionTestTreeExecute(Sender: TObject);
|
||||
private
|
||||
FTree: IJclWideStrTree;
|
||||
function GetSelectedIterator: IJclWideStrTreeIterator;
|
||||
procedure PrintTree;
|
||||
public
|
||||
end;
|
||||
|
||||
var
|
||||
Form1: TForm1;
|
||||
|
||||
implementation
|
||||
|
||||
uses
|
||||
JclBinaryTrees,
|
||||
JclTrees;
|
||||
|
||||
{$R *.dfm}
|
||||
|
||||
procedure TForm1.ActionBinaryTreeExecute(Sender: TObject);
|
||||
begin
|
||||
if ActionBinaryTree.Checked then
|
||||
begin
|
||||
ActionGeneralPurposeTree.Checked := False;
|
||||
|
||||
FTree := TJclWideStrBinaryTree.Create(nil);
|
||||
|
||||
ActionCaseSensitiveExecute(ActionCaseSensitive);
|
||||
ActionRemoveSingleExecute(ActionRemoveSingle);
|
||||
ActionAllowDefaultExecute(ActionAllowDefault);
|
||||
ActionDuplicatesExecute(nil);
|
||||
PrintTree;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TForm1.ActionCaseSensitiveExecute(Sender: TObject);
|
||||
begin
|
||||
FTree.CaseSensitive := (Sender as TAction).Checked;
|
||||
end;
|
||||
|
||||
procedure TForm1.ActionGeneralPurposeTreeExecute(Sender: TObject);
|
||||
begin
|
||||
if ActionGeneralPurposeTree.Checked then
|
||||
begin
|
||||
ActionBinaryTree.Checked := False;
|
||||
|
||||
FTree := TJclWideStrTree.Create;
|
||||
|
||||
ActionCaseSensitiveExecute(ActionCaseSensitive);
|
||||
ActionRemoveSingleExecute(ActionRemoveSingle);
|
||||
ActionAllowDefaultExecute(ActionAllowDefault);
|
||||
ActionDuplicatesExecute(nil);
|
||||
PrintTree;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TForm1.ActionGenerateRandomExecute(Sender: TObject);
|
||||
var
|
||||
CurrentItem: Integer;
|
||||
function GenerateItem: WideString;
|
||||
begin
|
||||
if FTree.Duplicates = dupAccept then
|
||||
Result := Format('Item %.3d', [Random(10)])
|
||||
else
|
||||
begin
|
||||
Result := Format('Item %.3d', [CurrentItem]);
|
||||
Inc(CurrentItem);
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure GenerateRandomChild(const AIterator: IJclWideStrIterator; Count: Integer);
|
||||
begin
|
||||
while Count > 0 do
|
||||
begin
|
||||
(AIterator as IJclWideStrTreeIterator).AddChild(GenerateItem);
|
||||
Dec(Count);
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure GenerateRandom(Count: Integer);
|
||||
begin
|
||||
while Count > 0 do
|
||||
begin
|
||||
FTree.Add(GenerateItem);
|
||||
Dec(Count);
|
||||
end;
|
||||
end;
|
||||
var
|
||||
Index1, Index2: Integer;
|
||||
Iterator0, Iterator1, Iterator2: IJclWideStrTreeIterator;
|
||||
begin
|
||||
CurrentItem := 0;
|
||||
FTree.Clear;
|
||||
|
||||
if ActionGeneralPurposeTree.Checked then
|
||||
begin
|
||||
// general purpose tree
|
||||
GenerateRandom(5);
|
||||
Iterator0 := FTree.Root;
|
||||
for Index1 := 0 to Iterator0.ChildrenCount - 1 do
|
||||
begin
|
||||
Iterator1 := (Iterator0 as IJclIntfCloneable).IntfClone as IJclWideStrTreeIterator;
|
||||
Iterator1.GetChild(Index1);
|
||||
GenerateRandomChild(Iterator1, 5);
|
||||
for Index2 := 0 to Iterator1.ChildrenCount - 1 do
|
||||
begin
|
||||
Iterator2 := (Iterator1 as IJclIntfCloneable).IntfClone as IJclWideStrTreeIterator;
|
||||
Iterator2.GetChild(Index2);
|
||||
GenerateRandomChild(Iterator2, 5);
|
||||
end;
|
||||
end;
|
||||
end
|
||||
else
|
||||
begin
|
||||
// binary tree
|
||||
GenerateRandom(100);
|
||||
end;
|
||||
PrintTree;
|
||||
end;
|
||||
|
||||
procedure TForm1.ActionIgnoreDuplicatesUpdate(Sender: TObject);
|
||||
begin
|
||||
(Sender as TAction).Enabled := not CheckBoxAllowDuplicates.Checked;
|
||||
end;
|
||||
|
||||
procedure TForm1.ActionPackExecute(Sender: TObject);
|
||||
begin
|
||||
(FTree as IJclPackable).Pack;
|
||||
PrintTree;
|
||||
end;
|
||||
|
||||
procedure TForm1.ActionRemoveSelectedExecute(Sender: TObject);
|
||||
begin
|
||||
GetSelectedIterator.Remove;
|
||||
PrintTree;
|
||||
end;
|
||||
|
||||
procedure TForm1.ActionRemoveSelectedUpdate(Sender: TObject);
|
||||
begin
|
||||
(Sender as TAction).Enabled := TreeViewResults.Selected <> nil;
|
||||
end;
|
||||
|
||||
procedure TForm1.ActionRemoveSingleExecute(Sender: TObject);
|
||||
begin
|
||||
FTree.RemoveSingleElement := (Sender as TAction).Checked;
|
||||
end;
|
||||
|
||||
procedure TForm1.ActionTestTreeExecute(Sender: TObject);
|
||||
procedure CheckNode(const AIterator: IJclWideStrTreeIterator);
|
||||
var
|
||||
Index: Integer;
|
||||
ChildIterator, ParentIterator: IJclWideStrTreeIterator;
|
||||
begin
|
||||
for Index := 0 to AIterator.ChildrenCount - 1 do
|
||||
begin
|
||||
ChildIterator := (AIterator as IJclIntfCloneable).IntfClone as IJclWideStrTreeIterator;
|
||||
ChildIterator.GetChild(Index);
|
||||
|
||||
try
|
||||
ParentIterator := (ChildIterator as IJclIntfCloneable).IntfClone as IJclWideStrTreeIterator;
|
||||
ParentIterator.Parent;
|
||||
|
||||
if not AIterator.IteratorEquals(ParentIterator) then
|
||||
ShowMessage('difference at parent of node ' + string(ChildIterator.GetString));
|
||||
except
|
||||
ShowMessage('error at parent of node ' + string(ChildIterator.GetString));
|
||||
end;
|
||||
|
||||
CheckNode(ChildIterator);
|
||||
end;
|
||||
end;
|
||||
var
|
||||
ARootIterator: IJclWideStrTreeIterator;
|
||||
begin
|
||||
ARootIterator := FTree.Root;
|
||||
ARootIterator.Next; // unlock
|
||||
CheckNode(ARootIterator);
|
||||
ShowMessage('end of test');
|
||||
end;
|
||||
|
||||
procedure TForm1.ActionAddNewChildExecute(Sender: TObject);
|
||||
begin
|
||||
if GetSelectedIterator.AddChild(EditNewItem.Text) then
|
||||
ShowMessage('Success')
|
||||
else
|
||||
ShowMessage('Duplicate');
|
||||
PrintTree;
|
||||
end;
|
||||
|
||||
procedure TForm1.ActionAddNewChildUpdate(Sender: TObject);
|
||||
begin
|
||||
(Sender as TAction).Enabled := ActionGeneralPurposeTree.Checked and (TreeViewResults.Selected <> nil);
|
||||
end;
|
||||
|
||||
procedure TForm1.ActionAddNewExecute(Sender: TObject);
|
||||
begin
|
||||
if FTree.Add(EditNewItem.Text) then
|
||||
ShowMessage('Success')
|
||||
else
|
||||
ShowMessage('Duplicate');
|
||||
PrintTree;
|
||||
end;
|
||||
|
||||
procedure TForm1.ActionAllowDefaultExecute(Sender: TObject);
|
||||
begin
|
||||
FTree.AllowDefaultElements := (Sender as TAction).Checked;
|
||||
end;
|
||||
|
||||
procedure TForm1.ActionDuplicatesExecute(Sender: TObject);
|
||||
begin
|
||||
if ActionAllowDuplicates.Checked then
|
||||
FTree.Duplicates := dupAccept
|
||||
else
|
||||
if ActionIgnoreDuplicates.Checked then
|
||||
FTree.Duplicates := dupIgnore
|
||||
else
|
||||
FTree.Duplicates := dupError;
|
||||
end;
|
||||
|
||||
procedure TForm1.ActionAlwaysEnabled(Sender: TObject);
|
||||
begin
|
||||
(Sender as TAction).Enabled := True;
|
||||
end;
|
||||
|
||||
procedure TForm1.FormCreate(Sender: TObject);
|
||||
begin
|
||||
Randomize;
|
||||
ActionGeneralPurposeTreeExecute(ActionGeneralPurposeTree);
|
||||
end;
|
||||
|
||||
function TForm1.GetSelectedIterator: IJclWideStrTreeIterator;
|
||||
var
|
||||
Indexes: array of Integer;
|
||||
I: Integer;
|
||||
ANode: TTreeNode;
|
||||
begin
|
||||
Result := nil;
|
||||
ANode := TreeViewResults.Selected;
|
||||
if ANode <> nil then
|
||||
begin
|
||||
while ANode.Parent <> nil do
|
||||
begin
|
||||
SetLength(Indexes, Length(Indexes) + 1);
|
||||
Indexes[High(Indexes)] := ANode.Index;
|
||||
ANode := ANode.Parent;
|
||||
end;
|
||||
Result := FTree.Root;
|
||||
for I := High(Indexes) downto Low(Indexes) do
|
||||
Result.GetChild(Indexes[I]);
|
||||
Result.Next;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TForm1.PrintTree;
|
||||
procedure ProcessNode(const AIterator: IJclWideStrTreeIterator; ANode: TTreeNode);
|
||||
var
|
||||
Index: Integer;
|
||||
ChildIterator: IJclWideStrTreeIterator;
|
||||
ChildNode: TTreeNode;
|
||||
begin
|
||||
ANode.Text := string(AIterator.GetString);
|
||||
for Index := 0 to AIterator.ChildrenCount - 1 do
|
||||
begin
|
||||
ChildIterator := (AIterator as IJclIntfCloneable).IntfClone as IJclWideStrTreeIterator;
|
||||
ChildIterator.GetChild(Index);
|
||||
ChildNode := TreeViewResults.Items.AddChild(ANode, '');
|
||||
ProcessNode(ChildIterator, ChildNode);
|
||||
end;
|
||||
end;
|
||||
var
|
||||
ARootIterator: IJclWideStrTreeIterator;
|
||||
ARootNode: TTreeNode;
|
||||
begin
|
||||
TreeViewResults.Items.Clear;
|
||||
if FTree.Size > 0 then
|
||||
begin
|
||||
ARootIterator := FTree.Root;
|
||||
ARootIterator.Next; // unlock
|
||||
ARootNode := TreeViewResults.Items.Add(nil, '');
|
||||
ProcessNode(ARootIterator, ARootNode);
|
||||
ARootNode.Expand(True);
|
||||
ARootNode.MakeVisible;
|
||||
end;
|
||||
end;
|
||||
|
||||
end.
|
||||
@ -0,0 +1,3 @@
|
||||
[Directories]
|
||||
OutputDir=..\..\..\bin
|
||||
|
||||
19
official/1.104/examples/common/expreval/ExprEvalExample.dpr
Normal file
19
official/1.104/examples/common/expreval/ExprEvalExample.dpr
Normal file
@ -0,0 +1,19 @@
|
||||
program ExprEvalExample;
|
||||
|
||||
{$I jcl.inc}
|
||||
|
||||
uses
|
||||
Forms,
|
||||
ExprEvalExampleMain in 'ExprEvalExampleMain.pas' {Form1},
|
||||
JclExprEval in '..\..\..\source\common\JclExprEval.pas',
|
||||
JclStrHashMap in '..\..\..\source\common\JclStrHashMap.pas',
|
||||
ExprEvalExampleLogic in 'ExprEvalExampleLogic.pas';
|
||||
|
||||
{$R *.RES}
|
||||
{$R ..\..\..\source\windows\JclCommCtrlAsInvoker.res}
|
||||
|
||||
begin
|
||||
Application.Initialize;
|
||||
Application.CreateForm(TForm1, Form1);
|
||||
Application.Run;
|
||||
end.
|
||||
BIN
official/1.104/examples/common/expreval/ExprEvalExample.res
Normal file
BIN
official/1.104/examples/common/expreval/ExprEvalExample.res
Normal file
Binary file not shown.
105
official/1.104/examples/common/expreval/ExprEvalExampleLogic.pas
Normal file
105
official/1.104/examples/common/expreval/ExprEvalExampleLogic.pas
Normal file
@ -0,0 +1,105 @@
|
||||
unit ExprEvalExampleLogic;
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
SysUtils, Classes, JclExprEval;
|
||||
|
||||
procedure Init(Evaluator: TEasyEvaluator; FuncList: TStrings);
|
||||
function ResultAsText(Evaluator: TEvaluator; const Input: string): string;
|
||||
|
||||
implementation
|
||||
|
||||
uses
|
||||
JclMath;
|
||||
|
||||
procedure Init(Evaluator: TEasyEvaluator; FuncList: TStrings);
|
||||
begin
|
||||
with Evaluator do
|
||||
begin
|
||||
// Constants
|
||||
AddConst('Pi', Pi);
|
||||
|
||||
// Functions
|
||||
AddFunc('LogBase10', LogBase10);
|
||||
AddFunc('LogBase2', LogBase2);
|
||||
AddFunc('LogBaseN', LogBaseN);
|
||||
AddFunc('ArcCos', ArcCos);
|
||||
AddFunc('ArcCot', ArcCot);
|
||||
AddFunc('ArcCsc', ArcCsc);
|
||||
AddFunc('ArcSec', ArcSec);
|
||||
AddFunc('ArcSin', ArcSin);
|
||||
AddFunc('ArcTan', ArcTan);
|
||||
AddFunc('ArcTan2', ArcTan2);
|
||||
AddFunc('Cos', Cos);
|
||||
AddFunc('Cot', Cot);
|
||||
AddFunc('Coversine', Coversine);
|
||||
AddFunc('Csc', Csc);
|
||||
AddFunc('Exsecans', Exsecans);
|
||||
AddFunc('Haversine', Haversine);
|
||||
AddFunc('Sec', Sec);
|
||||
AddFunc('Sin', Sin);
|
||||
AddFunc('Tan', Tan);
|
||||
AddFunc('Versine', Versine);
|
||||
AddFunc('ArcCosH', ArcCosH);
|
||||
AddFunc('ArcCotH', ArcCotH);
|
||||
AddFunc('ArcCscH', ArcCscH);
|
||||
AddFunc('ArcSecH', ArcSecH);
|
||||
AddFunc('ArcSinH', ArcSinH);
|
||||
AddFunc('ArcTanH', ArcTanH);
|
||||
AddFunc('CosH', CosH);
|
||||
AddFunc('CotH', CotH);
|
||||
AddFunc('CscH', CscH);
|
||||
AddFunc('SecH', SecH);
|
||||
AddFunc('SinH', SinH);
|
||||
AddFunc('TanH', TanH);
|
||||
end;
|
||||
with FuncList do
|
||||
begin
|
||||
Add('LogBase10');
|
||||
Add('LogBase2');
|
||||
Add('LogBaseN');
|
||||
Add('ArcCos');
|
||||
Add('ArcCot');
|
||||
Add('ArcCsc');
|
||||
Add('ArcSec');
|
||||
Add('ArcSin');
|
||||
Add('ArcTan');
|
||||
Add('ArcTan2');
|
||||
Add('Cos');
|
||||
Add('Cot');
|
||||
Add('Coversine');
|
||||
Add('Csc');
|
||||
Add('Exsecans');
|
||||
Add('Haversine');
|
||||
Add('Sec');
|
||||
Add('Sin');
|
||||
Add('Tan');
|
||||
Add('Versine');
|
||||
Add('ArcCosH');
|
||||
Add('ArcCotH');
|
||||
Add('ArcCscH');
|
||||
Add('ArcSecH');
|
||||
Add('ArcSinH');
|
||||
Add('ArcTanH');
|
||||
Add('CosH');
|
||||
Add('CotH');
|
||||
Add('CscH');
|
||||
Add('SecH');
|
||||
Add('SinH');
|
||||
Add('TanH');
|
||||
end;
|
||||
end;
|
||||
|
||||
function ResultAsText(Evaluator: TEvaluator; const Input: string): string;
|
||||
begin
|
||||
try
|
||||
Result := FloatToStr(Evaluator.Evaluate(Input));
|
||||
except
|
||||
on E: Exception do
|
||||
Result := E.Message;
|
||||
end;
|
||||
end;
|
||||
|
||||
|
||||
end.
|
||||
@ -0,0 +1,71 @@
|
||||
object Form1: TForm1
|
||||
Left = 222
|
||||
Top = 107
|
||||
ClientWidth = 479
|
||||
ClientHeight = 321
|
||||
Caption = 'JclExprEval Example'
|
||||
Color = clBtnFace
|
||||
Font.Charset = DEFAULT_CHARSET
|
||||
Font.Color = clWindowText
|
||||
Font.Height = -11
|
||||
Font.Name = 'MS Sans Serif'
|
||||
Font.Style = []
|
||||
OldCreateOrder = False
|
||||
OnCreate = FormCreate
|
||||
OnDestroy = FormDestroy
|
||||
PixelsPerInch = 96
|
||||
TextHeight = 13
|
||||
object Label1: TLabel
|
||||
Left = 12
|
||||
Top = 12
|
||||
Width = 54
|
||||
Height = 13
|
||||
Caption = 'E&xpression:'
|
||||
FocusControl = ExpressionInput
|
||||
end
|
||||
object Label2: TLabel
|
||||
Left = 12
|
||||
Top = 40
|
||||
Width = 49
|
||||
Height = 13
|
||||
Caption = 'Functions:'
|
||||
end
|
||||
object ExpressionInput: TEdit
|
||||
Left = 80
|
||||
Top = 8
|
||||
Width = 305
|
||||
Height = 21
|
||||
Anchors = [akLeft, akTop, akRight]
|
||||
TabOrder = 0
|
||||
end
|
||||
object Memo1: TMemo
|
||||
Left = 0
|
||||
Top = 60
|
||||
Width = 479
|
||||
Height = 270
|
||||
Anchors = [akLeft, akTop, akRight, akBottom]
|
||||
TabOrder = 1
|
||||
end
|
||||
object EnterButton: TButton
|
||||
Left = 396
|
||||
Top = 8
|
||||
Width = 75
|
||||
Height = 25
|
||||
Anchors = [akTop, akRight]
|
||||
Caption = 'Evaluate'
|
||||
Default = True
|
||||
TabOrder = 2
|
||||
OnClick = EnterButtonClick
|
||||
end
|
||||
object FuncList: TComboBox
|
||||
Left = 80
|
||||
Top = 36
|
||||
Width = 145
|
||||
Height = 21
|
||||
Style = csDropDownList
|
||||
ItemHeight = 13
|
||||
Sorted = True
|
||||
TabOrder = 3
|
||||
OnClick = FuncListClick
|
||||
end
|
||||
end
|
||||
@ -0,0 +1,67 @@
|
||||
unit ExprEvalExampleMain;
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
Windows, SysUtils, Classes, Graphics, Controls, Forms, StdCtrls,
|
||||
JclExprEval;
|
||||
|
||||
type
|
||||
TForm1 = class(TForm)
|
||||
ExpressionInput: TEdit;
|
||||
Memo1: TMemo;
|
||||
Label1: TLabel;
|
||||
EnterButton: TButton;
|
||||
FuncList: TComboBox;
|
||||
Label2: TLabel;
|
||||
procedure FormCreate(Sender: TObject);
|
||||
procedure FormDestroy(Sender: TObject);
|
||||
procedure EnterButtonClick(Sender: TObject);
|
||||
procedure FuncListClick(Sender: TObject);
|
||||
private
|
||||
{ Private declarations }
|
||||
FEvaluator: TEasyEvaluator;
|
||||
FX: Extended;
|
||||
FY: Extended;
|
||||
FZ: Extended;
|
||||
public
|
||||
{ Public declarations }
|
||||
end;
|
||||
|
||||
var
|
||||
Form1: TForm1;
|
||||
|
||||
implementation
|
||||
|
||||
{$R *.DFM}
|
||||
|
||||
uses
|
||||
ExprEvalExampleLogic;
|
||||
|
||||
procedure TForm1.FormCreate(Sender: TObject);
|
||||
begin
|
||||
FEvaluator := TEvaluator.Create;
|
||||
FEvaluator.AddVar('X', FX);
|
||||
FEvaluator.AddVar('Y', FY);
|
||||
FEvaluator.AddVar('Z', FZ);
|
||||
Init(FEvaluator, FuncList.Items);
|
||||
end;
|
||||
|
||||
procedure TForm1.FormDestroy(Sender: TObject);
|
||||
begin
|
||||
FEvaluator.Free;
|
||||
end;
|
||||
|
||||
procedure TForm1.EnterButtonClick(Sender: TObject);
|
||||
begin
|
||||
Memo1.Lines.Add(ResultAsText(FEvaluator as TEvaluator, ExpressionInput.Text));
|
||||
end;
|
||||
|
||||
procedure TForm1.FuncListClick(Sender: TObject);
|
||||
begin
|
||||
ExpressionInput.Text := ExpressionInput.Text + FuncList.Text;
|
||||
ActiveControl := ExpressionInput;
|
||||
ExpressionInput.SelStart := Length(ExpressionInput.Text);
|
||||
end;
|
||||
|
||||
end.
|
||||
@ -0,0 +1,2 @@
|
||||
[Directories]
|
||||
OutputDir=../../../bin
|
||||
16
official/1.104/examples/common/filesearch/FileSearchDemo.dpr
Normal file
16
official/1.104/examples/common/filesearch/FileSearchDemo.dpr
Normal file
@ -0,0 +1,16 @@
|
||||
program FileSearchDemo;
|
||||
|
||||
{$I jcl.inc}
|
||||
|
||||
uses
|
||||
Forms,
|
||||
FileSearchDemoMain in 'FileSearchDemoMain.pas' {FileSearchForm};
|
||||
|
||||
{$R *.res}
|
||||
{$R ..\..\..\source\windows\JclCommCtrlAsInvoker.res}
|
||||
|
||||
begin
|
||||
Application.Initialize;
|
||||
Application.CreateForm(TFileSearchForm, FileSearchForm);
|
||||
Application.Run;
|
||||
end.
|
||||
BIN
official/1.104/examples/common/filesearch/FileSearchDemo.res
Normal file
BIN
official/1.104/examples/common/filesearch/FileSearchDemo.res
Normal file
Binary file not shown.
364
official/1.104/examples/common/filesearch/FileSearchDemoMain.dfm
Normal file
364
official/1.104/examples/common/filesearch/FileSearchDemoMain.dfm
Normal file
@ -0,0 +1,364 @@
|
||||
object FileSearchForm: TFileSearchForm
|
||||
Left = 258
|
||||
Top = 301
|
||||
Width = 855
|
||||
Height = 509
|
||||
HorzScrollBar.Range = 378
|
||||
VertScrollBar.Range = 252
|
||||
ActiveControl = StartBtn
|
||||
Caption = 'File Search Demo (TJclFileEnumerator)'
|
||||
Color = clBtnFace
|
||||
Constraints.MinHeight = 279
|
||||
Constraints.MinWidth = 647
|
||||
Font.Charset = DEFAULT_CHARSET
|
||||
Font.Color = clBlack
|
||||
Font.Height = 12
|
||||
Font.Name = 'MS Sans Serif'
|
||||
Font.Pitch = fpVariable
|
||||
Font.Style = []
|
||||
OldCreateOrder = True
|
||||
OnCreate = FormCreate
|
||||
OnDestroy = FormDestroy
|
||||
PixelsPerInch = 96
|
||||
TextHeight = 13
|
||||
object StatusBar: TStatusBar
|
||||
Left = 0
|
||||
Top = 461
|
||||
Width = 847
|
||||
Height = 21
|
||||
Panels = <
|
||||
item
|
||||
Alignment = taRightJustify
|
||||
Width = 100
|
||||
end
|
||||
item
|
||||
Alignment = taRightJustify
|
||||
Width = 100
|
||||
end
|
||||
item
|
||||
Width = 50
|
||||
end>
|
||||
end
|
||||
object FileList: TListView
|
||||
Left = 0
|
||||
Top = 181
|
||||
Width = 847
|
||||
Height = 280
|
||||
Align = alClient
|
||||
Columns = <
|
||||
item
|
||||
Caption = 'File'
|
||||
Width = 360
|
||||
end
|
||||
item
|
||||
Alignment = taRightJustify
|
||||
AutoSize = True
|
||||
Caption = 'Size'
|
||||
end
|
||||
item
|
||||
Alignment = taCenter
|
||||
AutoSize = True
|
||||
Caption = 'Time'
|
||||
end
|
||||
item
|
||||
Caption = 'Attr.'
|
||||
Width = 60
|
||||
end>
|
||||
ReadOnly = True
|
||||
TabOrder = 1
|
||||
ViewStyle = vsReport
|
||||
end
|
||||
object Panel1: TPanel
|
||||
Left = 0
|
||||
Top = 0
|
||||
Width = 847
|
||||
Height = 49
|
||||
Align = alTop
|
||||
BevelOuter = bvNone
|
||||
TabOrder = 2
|
||||
object Label1: TLabel
|
||||
Left = 14
|
||||
Top = 14
|
||||
Width = 16
|
||||
Height = 13
|
||||
Caption = 'List'
|
||||
end
|
||||
object Label2: TLabel
|
||||
Left = 216
|
||||
Top = 14
|
||||
Width = 29
|
||||
Height = 13
|
||||
Caption = 'files in'
|
||||
end
|
||||
object RootDirInput: TEdit
|
||||
Left = 256
|
||||
Top = 10
|
||||
Width = 248
|
||||
Height = 21
|
||||
TabOrder = 1
|
||||
end
|
||||
object StartBtn: TButton
|
||||
Left = 524
|
||||
Top = 10
|
||||
Width = 61
|
||||
Height = 25
|
||||
Caption = 'Start'
|
||||
TabOrder = 2
|
||||
OnClick = StartBtnClick
|
||||
end
|
||||
object StopBtn: TButton
|
||||
Left = 596
|
||||
Top = 10
|
||||
Width = 61
|
||||
Height = 25
|
||||
Caption = 'Stop'
|
||||
Enabled = False
|
||||
TabOrder = 3
|
||||
OnClick = StopBtnClick
|
||||
end
|
||||
object DetailsBtn: TButton
|
||||
Left = 668
|
||||
Top = 10
|
||||
Width = 77
|
||||
Height = 25
|
||||
Caption = 'More >>'
|
||||
TabOrder = 4
|
||||
OnClick = DetailsBtnClick
|
||||
end
|
||||
object FileMaskInput: TEdit
|
||||
Left = 40
|
||||
Top = 10
|
||||
Width = 169
|
||||
Height = 21
|
||||
TabOrder = 0
|
||||
Text = '*'
|
||||
end
|
||||
object SaveBtn: TButton
|
||||
Left = 760
|
||||
Top = 8
|
||||
Width = 75
|
||||
Height = 25
|
||||
Caption = 'Save'
|
||||
TabOrder = 5
|
||||
OnClick = SaveBtnClick
|
||||
end
|
||||
end
|
||||
object DetailsPanel: TPanel
|
||||
Left = 0
|
||||
Top = 49
|
||||
Width = 847
|
||||
Height = 132
|
||||
Align = alTop
|
||||
BevelOuter = bvNone
|
||||
TabOrder = 3
|
||||
Visible = False
|
||||
object GroupBox1: TGroupBox
|
||||
Left = 256
|
||||
Top = 0
|
||||
Width = 249
|
||||
Height = 121
|
||||
Caption = 'File attributes'
|
||||
TabOrder = 0
|
||||
object cbReadOnly: TCheckBox
|
||||
Tag = 1
|
||||
Left = 16
|
||||
Top = 16
|
||||
Width = 89
|
||||
Height = 21
|
||||
AllowGrayed = True
|
||||
Caption = 'Read only'
|
||||
State = cbGrayed
|
||||
TabOrder = 0
|
||||
OnClick = cbFileAttributeClick
|
||||
end
|
||||
object cbHidden: TCheckBox
|
||||
Tag = 2
|
||||
Left = 16
|
||||
Top = 40
|
||||
Width = 89
|
||||
Height = 21
|
||||
AllowGrayed = True
|
||||
Caption = 'Hidden'
|
||||
TabOrder = 1
|
||||
OnClick = cbFileAttributeClick
|
||||
end
|
||||
object cbSystem: TCheckBox
|
||||
Tag = 4
|
||||
Left = 16
|
||||
Top = 64
|
||||
Width = 89
|
||||
Height = 21
|
||||
AllowGrayed = True
|
||||
Caption = 'System'
|
||||
TabOrder = 2
|
||||
OnClick = cbFileAttributeClick
|
||||
end
|
||||
object cbDirectory: TCheckBox
|
||||
Tag = 16
|
||||
Left = 16
|
||||
Top = 88
|
||||
Width = 89
|
||||
Height = 21
|
||||
AllowGrayed = True
|
||||
Caption = 'Directory'
|
||||
TabOrder = 3
|
||||
OnClick = cbFileAttributeClick
|
||||
end
|
||||
object cbSymLink: TCheckBox
|
||||
Tag = 64
|
||||
Left = 136
|
||||
Top = 16
|
||||
Width = 101
|
||||
Height = 21
|
||||
AllowGrayed = True
|
||||
Caption = 'Symbolic link'
|
||||
State = cbGrayed
|
||||
TabOrder = 4
|
||||
OnClick = cbFileAttributeClick
|
||||
end
|
||||
object cbNormal: TCheckBox
|
||||
Tag = 128
|
||||
Left = 136
|
||||
Top = 88
|
||||
Width = 89
|
||||
Height = 21
|
||||
AllowGrayed = True
|
||||
Caption = 'Normal'
|
||||
State = cbGrayed
|
||||
TabOrder = 7
|
||||
OnClick = cbFileAttributeClick
|
||||
end
|
||||
object cbArchive: TCheckBox
|
||||
Tag = 32
|
||||
Left = 136
|
||||
Top = 16
|
||||
Width = 89
|
||||
Height = 21
|
||||
AllowGrayed = True
|
||||
Caption = 'Archive'
|
||||
State = cbGrayed
|
||||
TabOrder = 5
|
||||
OnClick = cbFileAttributeClick
|
||||
end
|
||||
object cbVolumeID: TCheckBox
|
||||
Tag = 8
|
||||
Left = 136
|
||||
Top = 40
|
||||
Width = 89
|
||||
Height = 21
|
||||
AllowGrayed = True
|
||||
Caption = 'Volume ID'
|
||||
TabOrder = 6
|
||||
OnClick = cbFileAttributeClick
|
||||
end
|
||||
end
|
||||
object cbLastChangeAfter: TCheckBox
|
||||
Left = 524
|
||||
Top = 12
|
||||
Width = 131
|
||||
Height = 30
|
||||
Caption = 'Last change after'
|
||||
TabOrder = 1
|
||||
end
|
||||
object edLastChangeAfter: TEdit
|
||||
Left = 656
|
||||
Top = 16
|
||||
Width = 113
|
||||
Height = 21
|
||||
MaxLength = 10
|
||||
TabOrder = 2
|
||||
end
|
||||
object cbLastChangeBefore: TCheckBox
|
||||
Left = 524
|
||||
Top = 36
|
||||
Width = 131
|
||||
Height = 30
|
||||
Caption = 'Last change before'
|
||||
TabOrder = 3
|
||||
end
|
||||
object edLastChangeBefore: TEdit
|
||||
Left = 656
|
||||
Top = 40
|
||||
Width = 113
|
||||
Height = 21
|
||||
MaxLength = 10
|
||||
TabOrder = 4
|
||||
end
|
||||
object cbFileSizeMax: TCheckBox
|
||||
Left = 524
|
||||
Top = 60
|
||||
Width = 131
|
||||
Height = 30
|
||||
Caption = 'Maximum size'
|
||||
TabOrder = 5
|
||||
end
|
||||
object edFileSizeMax: TEdit
|
||||
Left = 656
|
||||
Top = 64
|
||||
Width = 113
|
||||
Height = 21
|
||||
TabOrder = 6
|
||||
Text = '$7FFFFFFFFFFFFFFF'
|
||||
end
|
||||
object cbFileSizeMin: TCheckBox
|
||||
Left = 524
|
||||
Top = 84
|
||||
Width = 131
|
||||
Height = 30
|
||||
Caption = 'Minimum size'
|
||||
TabOrder = 7
|
||||
end
|
||||
object edFileSizeMin: TEdit
|
||||
Left = 656
|
||||
Top = 88
|
||||
Width = 113
|
||||
Height = 21
|
||||
TabOrder = 8
|
||||
Text = '0'
|
||||
end
|
||||
object IncludeSubDirectories: TCheckBox
|
||||
Left = 40
|
||||
Top = 18
|
||||
Width = 157
|
||||
Height = 17
|
||||
Caption = 'Include sub directories'
|
||||
Checked = True
|
||||
State = cbChecked
|
||||
TabOrder = 9
|
||||
OnClick = UpdateIncludeHiddenSubDirs
|
||||
end
|
||||
object IncludeHiddenSubDirs: TCheckBox
|
||||
Left = 40
|
||||
Top = 42
|
||||
Width = 201
|
||||
Height = 17
|
||||
Caption = 'Include hidden sub directories'
|
||||
TabOrder = 10
|
||||
OnClick = IncludeHiddenSubDirsClick
|
||||
end
|
||||
object cbDisplayLiveUpdate: TCheckBox
|
||||
Left = 40
|
||||
Top = 90
|
||||
Width = 189
|
||||
Height = 17
|
||||
Caption = '&Display live update'
|
||||
Checked = True
|
||||
State = cbChecked
|
||||
TabOrder = 12
|
||||
end
|
||||
object cbCaseInsensitiveSearch: TCheckBox
|
||||
Left = 40
|
||||
Top = 66
|
||||
Width = 177
|
||||
Height = 17
|
||||
Caption = 'Case insensitive search'
|
||||
TabOrder = 11
|
||||
end
|
||||
end
|
||||
object SaveDialog: TSaveDialog
|
||||
DefaultExt = '*.txt'
|
||||
Filter = 'Text files (*.txt)|*.txt|All files (*.*)|*.*'
|
||||
Left = 216
|
||||
Top = 96
|
||||
end
|
||||
end
|
||||
260
official/1.104/examples/common/filesearch/FileSearchDemoMain.pas
Normal file
260
official/1.104/examples/common/filesearch/FileSearchDemoMain.pas
Normal file
@ -0,0 +1,260 @@
|
||||
//
|
||||
// Robert Rossmair, 2003
|
||||
//
|
||||
unit FileSearchDemoMain;
|
||||
|
||||
{$INCLUDE jcl.inc}
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
SysUtils, Classes,
|
||||
Graphics, StdCtrls, Controls, ExtCtrls, ComCtrls, Forms, Dialogs,
|
||||
JclStrings, JclFileUtils;
|
||||
|
||||
type
|
||||
TFileSearchForm = class(TForm)
|
||||
StatusBar: TStatusBar;
|
||||
FileList: TListView;
|
||||
Panel1: TPanel;
|
||||
Label1: TLabel;
|
||||
RootDirInput: TEdit;
|
||||
StartBtn: TButton;
|
||||
StopBtn: TButton;
|
||||
Label2: TLabel;
|
||||
DetailsPanel: TPanel;
|
||||
GroupBox1: TGroupBox;
|
||||
cbReadOnly: TCheckBox;
|
||||
cbHidden: TCheckBox;
|
||||
cbSystem: TCheckBox;
|
||||
cbDirectory: TCheckBox;
|
||||
cbSymLink: TCheckBox;
|
||||
cbNormal: TCheckBox;
|
||||
cbArchive: TCheckBox;
|
||||
DetailsBtn: TButton;
|
||||
FileMaskInput: TEdit;
|
||||
cbLastChangeAfter: TCheckBox;
|
||||
edLastChangeAfter: TEdit;
|
||||
cbLastChangeBefore: TCheckBox;
|
||||
edLastChangeBefore: TEdit;
|
||||
cbFileSizeMax: TCheckBox;
|
||||
edFileSizeMax: TEdit;
|
||||
cbFileSizeMin: TCheckBox;
|
||||
edFileSizeMin: TEdit;
|
||||
IncludeSubDirectories: TCheckBox;
|
||||
IncludeHiddenSubDirs: TCheckBox;
|
||||
cbDisplayLiveUpdate: TCheckBox;
|
||||
cbCaseInsensitiveSearch: TCheckBox;
|
||||
SaveBtn: TButton;
|
||||
SaveDialog: TSaveDialog;
|
||||
procedure StartBtnClick(Sender: TObject);
|
||||
procedure StopBtnClick(Sender: TObject);
|
||||
procedure FormCreate(Sender: TObject);
|
||||
procedure FormDestroy(Sender: TObject);
|
||||
procedure cbFileAttributeClick(Sender: TObject);
|
||||
procedure UpdateIncludeHiddenSubDirs(Sender: TObject);
|
||||
procedure IncludeHiddenSubDirsClick(Sender: TObject);
|
||||
procedure DetailsBtnClick(Sender: TObject);
|
||||
procedure SaveBtnClick(Sender: TObject);
|
||||
private
|
||||
{ Private declarations }
|
||||
FFileEnumerator: TJclFileEnumerator;
|
||||
FDirCount: Integer;
|
||||
FTaskID: TFileSearchTaskID;
|
||||
FT0: TDateTime;
|
||||
FFileListLiveUpdate: Boolean;
|
||||
procedure DirectoryEntered(const Directory: string);
|
||||
procedure AddFile(const Directory: string; const FileInfo: TSearchRec);
|
||||
procedure TaskDone(const ID: TFileSearchTaskID; const Aborted: Boolean);
|
||||
end;
|
||||
|
||||
var
|
||||
FileSearchForm: TFileSearchForm;
|
||||
|
||||
implementation
|
||||
|
||||
{$R *.dfm}
|
||||
|
||||
procedure TFileSearchForm.FormCreate(Sender: TObject);
|
||||
begin
|
||||
FFileEnumerator := TJclFileEnumerator.Create;
|
||||
FFileEnumerator.OnEnterDirectory := DirectoryEntered;
|
||||
FFileEnumerator.OnTerminateTask := TaskDone;
|
||||
FileMaskInput.Text := '*.pas;*.dfm;*.xfm;*.dpr;*.dpk*';
|
||||
RootDirInput.Text := ExpandFileName(FFileEnumerator.RootDirectory);
|
||||
edLastChangeAfter.Text := FFileEnumerator.LastChangeAfterAsString;
|
||||
edLastChangeBefore.Text := FFileEnumerator.LastChangeBeforeAsString;
|
||||
cbCaseInsensitiveSearch.Checked := not FFileEnumerator.CaseSensitiveSearch;
|
||||
{$IFDEF MSWINDOWS}
|
||||
cbSymLink.Visible := False;
|
||||
{$ENDIF MSWINDOWS}
|
||||
{$IFDEF UNIX}
|
||||
FileList.Columns.Add.Caption := 'Link';
|
||||
cbArchive.Visible := False;
|
||||
{$ENDIF UNIX}
|
||||
end;
|
||||
|
||||
procedure TFileSearchForm.FormDestroy(Sender: TObject);
|
||||
begin
|
||||
FFileEnumerator.Free;
|
||||
{
|
||||
FileList.Items.BeginUpdate;
|
||||
FileList.Items.Clear;
|
||||
FileList.Items.EndUpdate;
|
||||
}
|
||||
end;
|
||||
|
||||
procedure TFileSearchForm.DirectoryEntered(const Directory: string);
|
||||
begin
|
||||
Inc(FDirCount);
|
||||
StatusBar.Panels[0].Text := Format('%d files', [FileList.Items.Count]);
|
||||
StatusBar.Panels[1].Text := Format('%d directories', [FDirCount]);
|
||||
StatusBar.Panels[2].Text := Format('Processing %s...', [Directory]);
|
||||
end;
|
||||
|
||||
procedure TFileSearchForm.AddFile(const Directory: string; const FileInfo: TSearchRec);
|
||||
var
|
||||
ListItem: TListItem;
|
||||
begin
|
||||
ListItem := FileList.Items.Add;
|
||||
with ListItem do
|
||||
begin
|
||||
Caption := Directory + FileInfo.Name;
|
||||
SubItems.Add(IntToStr(GetSizeOfFile(FileInfo)));
|
||||
SubItems.Add(FormatDateTime(' yyyy-mm-dd hh:nn:ss ', FileDateToDateTime(FileInfo.Time)));
|
||||
SubItems.Add(FileAttributesStr(FileInfo));
|
||||
{$IFDEF UNIX}
|
||||
if (FileInfo.Attr and faSymLink) <> 0 then
|
||||
SubItems.Add(SymbolicLinkTarget(Caption));
|
||||
{$ENDIF UNIX}
|
||||
SubItems.Add(FileGetOwnerName(Caption));
|
||||
SubItems.Add(FileGetGroupName(Caption));
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TFileSearchForm.TaskDone(const ID: TFileSearchTaskID; const Aborted: Boolean);
|
||||
begin
|
||||
if not FFileListLiveUpdate then
|
||||
FileList.Items.EndUpdate;
|
||||
StatusBar.Panels[0].Text := Format('%d files', [FileList.Items.Count]);
|
||||
if Aborted then
|
||||
StatusBar.Panels[2].Text := 'Prematurely aborted.'
|
||||
else
|
||||
StatusBar.Panels[2].Text := Format('...finished (%f seconds).', [(Now - FT0) * SecsPerDay]);
|
||||
StartBtn.Enabled := True;
|
||||
SaveBtn.Enabled := True;
|
||||
StopBtn.Enabled := False;
|
||||
ActiveControl := StartBtn;
|
||||
end;
|
||||
|
||||
procedure TFileSearchForm.StartBtnClick(Sender: TObject);
|
||||
begin
|
||||
RootDirInput.Text := PathCanonicalize(RootDirInput.Text);
|
||||
|
||||
FFileEnumerator.SearchOption[fsLastChangeAfter] := cbLastChangeAfter.Checked;
|
||||
FFileEnumerator.SearchOption[fsLastChangeBefore] := cbLastChangeBefore.Checked;
|
||||
if FFileEnumerator.SearchOption[fsLastChangeAfter] then
|
||||
FFileEnumerator.LastChangeAfterAsString := edLastChangeAfter.Text;
|
||||
if FFileEnumerator.SearchOption[fsLastChangeBefore] then
|
||||
FFileEnumerator.LastChangeBeforeAsString := edLastChangeBefore.Text;
|
||||
FFileEnumerator.RootDirectory := RootDirInput.Text;
|
||||
FFileEnumerator.FileMask := FileMaskInput.Text;
|
||||
FFileEnumerator.SearchOption[fsMinSize] := cbFileSizeMin.Checked;
|
||||
FFileEnumerator.SearchOption[fsMaxSize] := cbFileSizeMax.Checked;
|
||||
FFileEnumerator.FileSizeMin := StrToInt64(edFileSizeMin.Text);
|
||||
FFileEnumerator.FileSizeMax := StrToInt64(edFileSizeMax.Text);
|
||||
FFileEnumerator.IncludeSubDirectories := IncludeSubDirectories.Checked;
|
||||
FFileEnumerator.IncludeHiddenSubDirectories := IncludeHiddenSubDirs.Checked;
|
||||
FFileEnumerator.CaseSensitiveSearch := not cbCaseInsensitiveSearch.Checked;
|
||||
FDirCount := 0;
|
||||
|
||||
StartBtn.Enabled := False;
|
||||
StopBtn.Enabled := True;
|
||||
SaveBtn.Enabled := False;
|
||||
ActiveControl := StopBtn;
|
||||
|
||||
FFileListLiveUpdate := cbDisplayLiveUpdate.Checked;
|
||||
|
||||
FileList.Items.Clear;
|
||||
if not FFileListLiveUpdate then
|
||||
FileList.Items.BeginUpdate;
|
||||
|
||||
FT0 := Now;
|
||||
FTaskID := FFileEnumerator.ForEach(AddFile);
|
||||
end;
|
||||
|
||||
procedure TFileSearchForm.StopBtnClick(Sender: TObject);
|
||||
begin
|
||||
FFileEnumerator.StopTask(FTaskID);
|
||||
end;
|
||||
|
||||
procedure TFileSearchForm.cbFileAttributeClick(Sender: TObject);
|
||||
const
|
||||
Interest: array[TCheckBoxState] of TAttributeInterest = (aiRejected, aiRequired, aiIgnored);
|
||||
CBState: array[TAttributeInterest] of TCheckBoxState = (cbGrayed, cbUnchecked, cbChecked);
|
||||
begin
|
||||
with FFileEnumerator.AttributeMask do
|
||||
begin
|
||||
with Sender as TCheckBox do
|
||||
Attribute[Tag] := Interest[State];
|
||||
cbReadOnly.State := CBState[ReadOnly];
|
||||
cbHidden.State := CBState[Hidden];
|
||||
cbSystem.State := CBState[System];
|
||||
cbDirectory.State := CBState[Directory];
|
||||
cbNormal.State := CBState[Normal];
|
||||
{$IFDEF UNIX}
|
||||
cbSymLink.State := CBState[SymLink];
|
||||
{$ENDIF def UNIX}
|
||||
{$IFDEF MSWINDOWS}
|
||||
cbArchive.State := CBState[Archive];
|
||||
{$ENDIF def MSWINDOWS}
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TFileSearchForm.UpdateIncludeHiddenSubDirs(Sender: TObject);
|
||||
begin
|
||||
IncludeHiddenSubDirs.AllowGrayed := not IncludeSubDirectories.Checked;
|
||||
if IncludeSubDirectories.Checked then
|
||||
begin
|
||||
if IncludeHiddenSubDirs.State = cbGrayed then
|
||||
IncludeHiddenSubDirs.State := cbChecked;
|
||||
end
|
||||
else
|
||||
begin
|
||||
if IncludeHiddenSubDirs.State = cbChecked then
|
||||
IncludeHiddenSubDirs.State := cbGrayed;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TFileSearchForm.IncludeHiddenSubDirsClick(Sender: TObject);
|
||||
begin
|
||||
if not IncludeSubDirectories.Checked then
|
||||
if IncludeHiddenSubDirs.State = cbChecked then
|
||||
IncludeHiddenSubDirs.State := cbUnchecked;
|
||||
end;
|
||||
|
||||
procedure TFileSearchForm.DetailsBtnClick(Sender: TObject);
|
||||
const
|
||||
DetailsBtnCaptions: array[Boolean] of string = ('More >>', 'Less <<');
|
||||
begin
|
||||
DetailsPanel.Visible := not DetailsPanel.Visible;
|
||||
DetailsBtn.Caption := DetailsBtnCaptions[DetailsPanel.Visible];
|
||||
end;
|
||||
|
||||
procedure TFileSearchForm.SaveBtnClick(Sender: TObject);
|
||||
var
|
||||
I: Integer;
|
||||
begin
|
||||
if SaveDialog.Execute then
|
||||
with TStringList.Create do
|
||||
try
|
||||
for I := 0 to FileList.Items.Count - 1 do
|
||||
Add(FileList.Items[I].Caption);
|
||||
SaveToFile(SaveDialog.FileName);
|
||||
finally
|
||||
Free;
|
||||
end;
|
||||
end;
|
||||
|
||||
end.
|
||||
|
||||
3
official/1.104/examples/common/graphics/ClipLineDemo.dof
Normal file
3
official/1.104/examples/common/graphics/ClipLineDemo.dof
Normal file
@ -0,0 +1,3 @@
|
||||
[Directories]
|
||||
OutputDir=../../../bin
|
||||
|
||||
16
official/1.104/examples/common/graphics/ClipLineDemo.dpr
Normal file
16
official/1.104/examples/common/graphics/ClipLineDemo.dpr
Normal file
@ -0,0 +1,16 @@
|
||||
program ClipLineDemo;
|
||||
|
||||
{$I jcl.inc}
|
||||
|
||||
uses
|
||||
Forms,
|
||||
ClipLineDemoMain in 'ClipLineDemoMain.pas' {Form1};
|
||||
|
||||
{$R *.res}
|
||||
{$R ..\..\..\source\windows\JclCommCtrlAsInvoker.res}
|
||||
|
||||
begin
|
||||
Application.Initialize;
|
||||
Application.CreateForm(TForm1, Form1);
|
||||
Application.Run;
|
||||
end.
|
||||
BIN
official/1.104/examples/common/graphics/ClipLineDemo.res
Normal file
BIN
official/1.104/examples/common/graphics/ClipLineDemo.res
Normal file
Binary file not shown.
17
official/1.104/examples/common/graphics/ClipLineDemoMain.dfm
Normal file
17
official/1.104/examples/common/graphics/ClipLineDemoMain.dfm
Normal file
@ -0,0 +1,17 @@
|
||||
object Form1: TForm1
|
||||
Left = 198
|
||||
Top = 147
|
||||
Width = 400
|
||||
Height = 400
|
||||
Caption = 'ClipLine Demo'
|
||||
Color = 15790320
|
||||
OnCreate = FormCreate
|
||||
OnPaint = FormPaint
|
||||
PixelsPerInch = 96
|
||||
TextHeight = 13
|
||||
object Timer1: TTimer
|
||||
Enabled = False
|
||||
Left = 32
|
||||
Top = 24
|
||||
end
|
||||
end
|
||||
85
official/1.104/examples/common/graphics/ClipLineDemoMain.pas
Normal file
85
official/1.104/examples/common/graphics/ClipLineDemoMain.pas
Normal file
@ -0,0 +1,85 @@
|
||||
unit ClipLineDemoMain;
|
||||
|
||||
{$I jcl.inc}
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
SysUtils, Classes,
|
||||
{$IFDEF MSWINDOWS}
|
||||
Windows,
|
||||
{$ENDIF}
|
||||
Graphics, ExtCtrls, Forms, JclGraphUtils,
|
||||
JclBase;
|
||||
|
||||
type
|
||||
TForm1 = class(TForm)
|
||||
Timer1: TTimer;
|
||||
procedure FormCreate(Sender: TObject);
|
||||
procedure FormPaint(Sender: TObject);
|
||||
procedure Timer1Timer(Sender: TObject);
|
||||
private
|
||||
{ Private declarations }
|
||||
R: TRect;
|
||||
P: TPointArray;
|
||||
FPenColor: TColor;
|
||||
FPenColorLight: TColor;
|
||||
procedure InitLines;
|
||||
public
|
||||
{ Public declarations }
|
||||
end;
|
||||
|
||||
var
|
||||
Form1: TForm1;
|
||||
|
||||
implementation
|
||||
|
||||
{$R *.dfm}
|
||||
|
||||
procedure TForm1.FormCreate(Sender: TObject);
|
||||
begin
|
||||
Randomize;
|
||||
R.Left := 100;
|
||||
R.Top := 100;
|
||||
R.Right := 300;
|
||||
R.Bottom := 300;
|
||||
SetLength(P, 50);
|
||||
InitLines;
|
||||
end;
|
||||
|
||||
procedure TForm1.FormPaint(Sender: TObject);
|
||||
begin
|
||||
Canvas.Brush.Color := clWhite;
|
||||
Canvas.FillRect(R);
|
||||
Canvas.Pen.Color := FPenColorLight;
|
||||
Canvas.PolyLine(P);
|
||||
Canvas.Pen.Color := FPenColor;
|
||||
DrawPolyLine(Canvas, P, R);
|
||||
end;
|
||||
|
||||
procedure TForm1.InitLines;
|
||||
var
|
||||
i: Integer;
|
||||
H, S, L: Single;
|
||||
begin
|
||||
for i := 0 to Length(P)-1 do
|
||||
begin
|
||||
P[i].X := Random(Width);
|
||||
P[i].Y := Random(Height);
|
||||
end;
|
||||
H := Random;
|
||||
S := Random;
|
||||
L := 0.4 * Random;
|
||||
|
||||
FPenColor := WinColor(HSLToRGB(H, S, L));
|
||||
FPenColorLight := WinColor(HSLToRGB(H, S, 1 - 0.2 * (1 - L)));
|
||||
end;
|
||||
|
||||
procedure TForm1.Timer1Timer(Sender: TObject);
|
||||
begin
|
||||
InitLines;
|
||||
Refresh;
|
||||
end;
|
||||
|
||||
end.
|
||||
|
||||
@ -0,0 +1,217 @@
|
||||
object StretchDemoForm: TStretchDemoForm
|
||||
Left = 255
|
||||
Top = 208
|
||||
ClientWidth = 780
|
||||
ClientHeight = 583
|
||||
VertScrollBar.Range = 19
|
||||
ActiveControl = PageControl
|
||||
AutoScroll = False
|
||||
Caption = 'JCL Picture Viewer'
|
||||
Color = clBtnFace
|
||||
Font.Charset = DEFAULT_CHARSET
|
||||
Font.Color = clWindowText
|
||||
Font.Height = 12
|
||||
Font.Name = 'MS Sans Serif'
|
||||
Font.Pitch = fpVariable
|
||||
Font.Style = []
|
||||
KeyPreview = True
|
||||
Menu = MainMenu
|
||||
OldCreateOrder = True
|
||||
ShowHint = True
|
||||
OnCreate = FormCreate
|
||||
OnKeyDown = FormKeyDown
|
||||
PixelsPerInch = 96
|
||||
TextHeight = 13
|
||||
object PageControl: TPageControl
|
||||
Left = 0
|
||||
Top = 0
|
||||
Width = 780
|
||||
Height = 544
|
||||
ActivePage = OriginalPage
|
||||
Align = alClient
|
||||
TabOrder = 0
|
||||
OnChanging = PageControlChanging
|
||||
object OriginalPage: TTabSheet
|
||||
Caption = 'Original'
|
||||
object ScrollBox: TScrollBox
|
||||
Left = 0
|
||||
Top = 0
|
||||
Width = 772
|
||||
Height = 516
|
||||
HorzScrollBar.Tracking = True
|
||||
VertScrollBar.Tracking = True
|
||||
Align = alClient
|
||||
Color = clGray
|
||||
ParentColor = False
|
||||
TabOrder = 0
|
||||
object OriginalImage: TImage
|
||||
Left = 0
|
||||
Top = 0
|
||||
Width = 768
|
||||
Height = 512
|
||||
AutoSize = True
|
||||
end
|
||||
end
|
||||
end
|
||||
object StretchedPage: TTabSheet
|
||||
Caption = 'Resized'
|
||||
ImageIndex = 1
|
||||
OnResize = StretchedPageResize
|
||||
OnShow = StretchedPageShow
|
||||
object Bevel1: TBevel
|
||||
Left = 0
|
||||
Top = 0
|
||||
Width = 772
|
||||
Height = 516
|
||||
Align = alClient
|
||||
end
|
||||
object StretchedImage: TImage
|
||||
Left = 1
|
||||
Top = 1
|
||||
Width = 770
|
||||
Height = 513
|
||||
Anchors = [akLeft, akTop, akRight, akBottom]
|
||||
end
|
||||
end
|
||||
object FilesPage: TTabSheet
|
||||
Caption = 'Files'
|
||||
ImageIndex = 2
|
||||
object FileListView: TListView
|
||||
Left = 0
|
||||
Top = 0
|
||||
Width = 772
|
||||
Height = 516
|
||||
Align = alClient
|
||||
Columns = <
|
||||
item
|
||||
AutoSize = True
|
||||
Caption = 'File'
|
||||
MaxWidth = 800
|
||||
MinWidth = 300
|
||||
end
|
||||
item
|
||||
Caption = 'Size'
|
||||
end>
|
||||
HideSelection = False
|
||||
TabOrder = 0
|
||||
ViewStyle = vsReport
|
||||
OnClick = FileListViewClick
|
||||
OnKeyDown = FileListViewKeyDown
|
||||
end
|
||||
end
|
||||
end
|
||||
object StatusBar: TStatusBar
|
||||
Left = 0
|
||||
Top = 544
|
||||
Width = 780
|
||||
Height = 19
|
||||
Panels = <
|
||||
item
|
||||
Width = 120
|
||||
end
|
||||
item
|
||||
Width = 120
|
||||
end
|
||||
item
|
||||
Width = 120
|
||||
end>
|
||||
SimplePanel = False
|
||||
end
|
||||
object OpenDialog: TOpenDialog
|
||||
Filter =
|
||||
'All (*.jpg;*.jpeg;*.bmp)|*.jpg;*.jpeg;*.bmp|JPEG Image File (*.j' +
|
||||
'pg)|*.jpg|JPEG Image File (*.jpeg)|*.jpeg|Bitmaps (*.bmp)|*.bmp'
|
||||
FilterIndex = 0
|
||||
Title = 'Open'
|
||||
Left = 240
|
||||
Top = 68
|
||||
end
|
||||
object MainMenu: TMainMenu
|
||||
Left = 208
|
||||
Top = 68
|
||||
object Fil1: TMenuItem
|
||||
Caption = '&File'
|
||||
object Open1: TMenuItem
|
||||
Caption = 'Open...'
|
||||
OnClick = OpenFile
|
||||
end
|
||||
object N1: TMenuItem
|
||||
Caption = '-'
|
||||
end
|
||||
object ExitItem: TMenuItem
|
||||
Caption = 'E&xit'
|
||||
OnClick = ExitApp
|
||||
end
|
||||
end
|
||||
object Filter1: TMenuItem
|
||||
Caption = '&Resampling Filter'
|
||||
object Box1: TMenuItem
|
||||
Caption = 'Bo&x'
|
||||
GroupIndex = 1
|
||||
RadioItem = True
|
||||
OnClick = SelectFilter
|
||||
end
|
||||
object Triangle1: TMenuItem
|
||||
Tag = 1
|
||||
Caption = '&Triangle'
|
||||
GroupIndex = 1
|
||||
RadioItem = True
|
||||
OnClick = SelectFilter
|
||||
end
|
||||
object Hermite1: TMenuItem
|
||||
Tag = 2
|
||||
Caption = '&Hermite'
|
||||
GroupIndex = 1
|
||||
RadioItem = True
|
||||
OnClick = SelectFilter
|
||||
end
|
||||
object Bell1: TMenuItem
|
||||
Tag = 3
|
||||
Caption = '&Bell'
|
||||
GroupIndex = 1
|
||||
RadioItem = True
|
||||
OnClick = SelectFilter
|
||||
end
|
||||
object Spline1: TMenuItem
|
||||
Tag = 4
|
||||
Caption = '&Spline'
|
||||
Checked = True
|
||||
GroupIndex = 1
|
||||
RadioItem = True
|
||||
OnClick = SelectFilter
|
||||
end
|
||||
object Lanczos31: TMenuItem
|
||||
Tag = 5
|
||||
Caption = '&Lanczos 3'
|
||||
GroupIndex = 1
|
||||
RadioItem = True
|
||||
OnClick = SelectFilter
|
||||
end
|
||||
object Mitchell1: TMenuItem
|
||||
Tag = 6
|
||||
Caption = '&Mitchell'
|
||||
GroupIndex = 1
|
||||
RadioItem = True
|
||||
OnClick = SelectFilter
|
||||
end
|
||||
end
|
||||
object Options1: TMenuItem
|
||||
Caption = '&Options'
|
||||
object PreserveAspectRatio1: TMenuItem
|
||||
Caption = 'Preserve Aspect Ratio'
|
||||
Checked = True
|
||||
OnClick = PreserveAspectRatio1Click
|
||||
end
|
||||
end
|
||||
object PrevItem: TMenuItem
|
||||
Caption = ' &<< '
|
||||
Hint = 'Previous file in directory'
|
||||
OnClick = PrevFile
|
||||
end
|
||||
object NextItem: TMenuItem
|
||||
Caption = ' &>> '
|
||||
Hint = 'Next file in directory'
|
||||
OnClick = NextFile
|
||||
end
|
||||
end
|
||||
end
|
||||
@ -0,0 +1,503 @@
|
||||
//
|
||||
// Robert Rossmair, 2002-09-22
|
||||
// revised 2005-06-26
|
||||
//
|
||||
|
||||
{$I jcl.inc}
|
||||
|
||||
{$IFDEF RTL140_UP}
|
||||
{$IFDEF VCL}
|
||||
{$DEFINE HasShellCtrls} // $(Delphi)\Demos\ShellControls\ShellCtrls.pas
|
||||
{$ENDIF VCL}
|
||||
{$ENDIF RTL140_UP}
|
||||
|
||||
unit StretchGraphicDemoMain;
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
SysUtils, Classes,
|
||||
{$IFDEF MSWINDOWS}
|
||||
Windows, Messages, JPEG, ShellAPI,
|
||||
{$ENDIF MSWINDOWS}
|
||||
Graphics, Controls, Forms,
|
||||
Dialogs, ComCtrls, StdCtrls, Menus, ExtCtrls, ExtDlgs,
|
||||
JclGraphics,
|
||||
{$IFDEF HasShellCtrls}
|
||||
{$WARN UNIT_PLATFORM OFF}
|
||||
ShellCtrls,
|
||||
{$ENDIF HasShellCtrls}
|
||||
JclFileUtils;
|
||||
|
||||
type
|
||||
TStretchDemoForm = class(TForm)
|
||||
PageControl: TPageControl;
|
||||
OriginalPage: TTabSheet;
|
||||
StretchedPage: TTabSheet;
|
||||
StretchedImage: TImage;
|
||||
MainMenu: TMainMenu;
|
||||
Fil1: TMenuItem;
|
||||
Open1: TMenuItem;
|
||||
N1: TMenuItem;
|
||||
ExitItem: TMenuItem;
|
||||
Filter1: TMenuItem;
|
||||
Box1: TMenuItem;
|
||||
Triangle1: TMenuItem;
|
||||
Hermite1: TMenuItem;
|
||||
Bell1: TMenuItem;
|
||||
Spline1: TMenuItem;
|
||||
Lanczos31: TMenuItem;
|
||||
Mitchell1: TMenuItem;
|
||||
Options1: TMenuItem;
|
||||
PreserveAspectRatio1: TMenuItem;
|
||||
PrevItem: TMenuItem;
|
||||
NextItem: TMenuItem;
|
||||
FilesPage: TTabSheet;
|
||||
ScrollBox: TScrollBox;
|
||||
StatusBar: TStatusBar;
|
||||
Bevel1: TBevel;
|
||||
OpenDialog: TOpenDialog;
|
||||
FileListView: TListView;
|
||||
OriginalImage: TImage;
|
||||
procedure FormCreate(Sender: TObject);
|
||||
{$IFDEF VCL}
|
||||
procedure FormDestroy(Sender: TObject);
|
||||
{$ENDIF VCL}
|
||||
procedure OpenFile(Sender: TObject);
|
||||
procedure SelectFilter(Sender: TObject);
|
||||
procedure PreserveAspectRatio1Click(Sender: TObject);
|
||||
procedure ExitApp(Sender: TObject);
|
||||
procedure PrevFile(Sender: TObject);
|
||||
procedure NextFile(Sender: TObject);
|
||||
procedure FileListViewClick(Sender: TObject);
|
||||
procedure LoadSelected;
|
||||
procedure FormKeyDown(Sender: TObject; var Key: Word;
|
||||
Shift: TShiftState);
|
||||
procedure StretchedPageShow(Sender: TObject);
|
||||
procedure StretchedPageResize(Sender: TObject);
|
||||
procedure PageControlChanging(Sender: TObject;
|
||||
var AllowChange: Boolean);
|
||||
procedure FileListViewKeyDown(Sender: TObject; var Key: Word;
|
||||
Shift: TShiftState);
|
||||
{$IFDEF HasShellCtrls}
|
||||
procedure ShellChange;
|
||||
private
|
||||
FShellChangeNotifier: TShellChangeNotifier;
|
||||
{$ELSE}
|
||||
private
|
||||
{$ENDIF HasShellCtrls}
|
||||
FLastImagePage: TTabSheet;
|
||||
FFileName: string;
|
||||
FDir: string;
|
||||
FWidth: Integer;
|
||||
FHeight: Integer;
|
||||
FStretchTime: LongWord;
|
||||
FPreserveAspectRatio: Boolean;
|
||||
FResamplingFilter: TResamplingFilter;
|
||||
procedure AddToFileList(const Directory: string; const FileInfo: TSearchRec);
|
||||
procedure FileSearchTerminated(const ID: TFileSearchTaskID; const Aborted: Boolean);
|
||||
function ChangeDirectory: Boolean;
|
||||
procedure DoStretch;
|
||||
procedure LoadFile(const AFileName: string);
|
||||
procedure InvalidateStretched;
|
||||
procedure UpdateCaption;
|
||||
procedure UpdateFileList;
|
||||
procedure UpdateNavButtons;
|
||||
procedure UpdateStretched;
|
||||
function GetFileListIndex: Integer;
|
||||
procedure SetFileListIndex(const Value: Integer);
|
||||
procedure SetFileName(const Value: string);
|
||||
{$IFDEF VCL}
|
||||
procedure WMDropFiles(var Msg: TWMDropFiles); message WM_DropFiles;
|
||||
{$ENDIF VCL}
|
||||
protected
|
||||
property FileListIndex: Integer read GetFileListIndex write SetFileListIndex;
|
||||
property FileName: string read FFileName write SetFileName;
|
||||
end;
|
||||
|
||||
var
|
||||
StretchDemoForm: TStretchDemoForm;
|
||||
|
||||
implementation
|
||||
|
||||
{$IFDEF VCL}
|
||||
{$R *.dfm}
|
||||
{$ENDIF}
|
||||
{$IFDEF VisualCLX}
|
||||
{$R *.xfm}
|
||||
{$ENDIF VisualCLX}
|
||||
|
||||
var
|
||||
FileMask: string;
|
||||
|
||||
{$IFDEF MSWINDOWS}
|
||||
type
|
||||
TWMDropFilesCallback = procedure (const FileName: string) of object;
|
||||
|
||||
procedure ProcessWMDropFiles(var Msg: TWMDropFiles; Callback: TWMDropFilesCallback; DropPoint: PPoint = nil); overload;
|
||||
var
|
||||
i: Integer;
|
||||
FileName: array[0..MAX_PATH] of Char;
|
||||
begin
|
||||
try
|
||||
// in case DropPoint is evaluated by callback method, get it first
|
||||
if DropPoint <> nil then
|
||||
DragQueryPoint(Msg.Drop, DropPoint^);
|
||||
if Assigned(Callback) then
|
||||
for i := 0 to DragQueryFile(Msg.Drop, $FFFFFFFF, nil, 0) - 1 do
|
||||
begin
|
||||
DragQueryFile(Msg.Drop, i, FileName, MAX_PATH);
|
||||
Callback(FileName);
|
||||
end;
|
||||
Msg.Result := 0;
|
||||
finally
|
||||
DragFinish(Msg.Drop);
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure ProcessWMDropFiles(var Msg: TWMDropFiles; FileNames: TStrings; DropPoint: PPoint = nil); overload;
|
||||
begin
|
||||
ProcessWMDropFiles(Msg, FileNames.Append, DropPoint);
|
||||
end;
|
||||
{$ENDIF MSWINDOWS}
|
||||
|
||||
function IsGraphicFile(const FileName: string): Boolean; overload;
|
||||
var
|
||||
Ext: string;
|
||||
begin
|
||||
Ext := AnsiLowerCase(ExtractFileExt(FileName));
|
||||
Result := (Pos(Ext, FileMask) > 0);
|
||||
end;
|
||||
|
||||
function IsGraphicFile(const Attr: Integer; const FileInfo: TSearchRec): Boolean; overload;
|
||||
begin
|
||||
Result := IsGraphicFile(FileInfo.Name);
|
||||
end;
|
||||
|
||||
procedure TStretchDemoForm.FormCreate(Sender: TObject);
|
||||
begin
|
||||
StretchedPage.Brush.Color := clGray;
|
||||
{$IFDEF VCL}
|
||||
ScrollBox.DoubleBuffered := True;
|
||||
StretchedPage.DoubleBuffered := True;
|
||||
{$ENDIF VCL}
|
||||
FileMask := GraphicFileMask(TGraphic);
|
||||
//Format('%s;%s', [GraphicFileMask(TJPEGImage), GraphicFileMask(TBitmap)]);
|
||||
OpenDialog.Filter := GraphicFilter(TGraphic);
|
||||
FResamplingFilter := rfSpline; // rfLanczos3;
|
||||
FPreserveAspectRatio := True;
|
||||
UpdateNavButtons;
|
||||
{$IFDEF HasShellCtrls}
|
||||
FShellChangeNotifier := TShellChangeNotifier.Create(Self);
|
||||
with FShellChangeNotifier do
|
||||
begin
|
||||
WatchSubTree := False;
|
||||
OnChange := ShellChange;
|
||||
NotifyFilters := [
|
||||
nfFileNameChange,
|
||||
nfDirNameChange,
|
||||
//nfSizeChange,
|
||||
nfWriteChange,
|
||||
nfSecurityChange];
|
||||
end;
|
||||
{$ENDIF HasShellCtrls}
|
||||
{$IFDEF VCL}
|
||||
DragAcceptFiles(Handle, True);
|
||||
{$ENDIF VCL}
|
||||
if ParamCount > 0 then
|
||||
with OpenDialog do
|
||||
begin
|
||||
FileName := ParamStr(1);
|
||||
InitialDir := ExtractFileDir(FileName);
|
||||
LoadFile(FileName);
|
||||
end;
|
||||
end;
|
||||
|
||||
{$IFDEF VCL}
|
||||
procedure TStretchDemoForm.FormDestroy(Sender: TObject);
|
||||
begin
|
||||
DragAcceptFiles(Handle, False);
|
||||
end;
|
||||
{$ENDIF VCL}
|
||||
|
||||
procedure TStretchDemoForm.ExitApp(Sender: TObject);
|
||||
begin
|
||||
Close;
|
||||
end;
|
||||
|
||||
function TStretchDemoForm.ChangeDirectory: Boolean;
|
||||
var
|
||||
Dir, D: string;
|
||||
begin
|
||||
D := ExtractFileDir(FileName);
|
||||
Dir := PathAddSeparator(D);
|
||||
Result := (Dir <> FDir) and (Pos(FDir, Dir) <> 1);
|
||||
if Result then
|
||||
begin
|
||||
FDir := Dir;
|
||||
FilesPage.Caption := Format('Files in %s', [D]);
|
||||
OpenDialog.InitialDir := D;
|
||||
{$IFDEF HasShellCtrls}
|
||||
FShellChangeNotifier.Root := D;
|
||||
{$ELSE}
|
||||
UpdateFileList;
|
||||
{$ENDIF HasShellCtrls}
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TStretchDemoForm.AddToFileList(const Directory: string; const FileInfo: TSearchRec);
|
||||
begin
|
||||
with FileListView.Items.Add do
|
||||
begin
|
||||
Caption := Directory + FileInfo.Name;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TStretchDemoForm.FileSearchTerminated(const ID: TFileSearchTaskID; const Aborted: Boolean);
|
||||
begin
|
||||
with FileListView do
|
||||
Selected := FindCaption(0, FileName, False, True, False);
|
||||
StatusBar.Panels[0].Text := Format('%d files', [FileListView.Items.Count]);
|
||||
UpdateNavButtons;
|
||||
end;
|
||||
|
||||
procedure TStretchDemoForm.UpdateFileList;
|
||||
begin
|
||||
FileListView.Items.Clear;
|
||||
with FileSearch do
|
||||
begin
|
||||
FileMask := GraphicFileMask(TGraphic);
|
||||
RootDirectory := FDir;
|
||||
OnTerminateTask := FileSearchTerminated;
|
||||
ForEach(AddToFileList);
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TStretchDemoForm.LoadFile(const AFileName: string);
|
||||
begin
|
||||
if not IsGraphicFile(AFileName) then
|
||||
Exit;
|
||||
FileName := AFileName;
|
||||
OriginalImage.Picture.LoadFromFile(FileName);
|
||||
if not ChangeDirectory then
|
||||
UpdateNavButtons;
|
||||
|
||||
UpdateCaption;
|
||||
with FileListView do
|
||||
Selected := FindCaption(0, FileName, False, True, False);
|
||||
|
||||
StretchedImage.Picture.Graphic := nil;
|
||||
InvalidateStretched;
|
||||
if PageControl.ActivePage = FilesPage then
|
||||
begin
|
||||
{$IFDEF VCL}
|
||||
if OriginalImage.Picture.Graphic is TMetaFile then
|
||||
PageControl.ActivePage := OriginalPage
|
||||
else
|
||||
{$ENDIF VCL}
|
||||
PageControl.ActivePage := FLastImagePage;
|
||||
FocusControl(PageControl);
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TStretchDemoForm.OpenFile(Sender: TObject);
|
||||
begin
|
||||
if OpenDialog.Execute then
|
||||
LoadFile(OpenDialog.FileName);
|
||||
end;
|
||||
|
||||
procedure TStretchDemoForm.SelectFilter(Sender: TObject);
|
||||
begin
|
||||
with Sender as TMenuItem do
|
||||
begin
|
||||
Checked := True;
|
||||
FResamplingFilter := TResamplingFilter(Tag);
|
||||
InvalidateStretched;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TStretchDemoForm.DoStretch;
|
||||
var
|
||||
W, H: Integer;
|
||||
T: LongWord;
|
||||
begin
|
||||
with OriginalImage.Picture do
|
||||
if (Graphic = nil) {$IFDEF VCL} or (Graphic is TMetafile) {$ENDIF} then
|
||||
Exit;
|
||||
W := StretchedPage.Width-2;
|
||||
H := StretchedPage.Height-2;
|
||||
if FPreserveAspectRatio then
|
||||
with OriginalImage.Picture.Graphic do
|
||||
begin
|
||||
if W * Height > H * Width then
|
||||
W := H * Width div Height
|
||||
else
|
||||
H := W * Height div Width;
|
||||
end;
|
||||
if (FWidth <> W) or (FHeight <> H) then
|
||||
begin
|
||||
T := GetTickCount;
|
||||
StretchedImage.Picture.Graphic := nil;
|
||||
JclGraphics.Stretch(W, H, FResamplingFilter, 0, OriginalImage.Picture.Graphic,
|
||||
StretchedImage.Picture.Bitmap);
|
||||
with OriginalImage.Picture do
|
||||
StatusBar.Panels[0].Text := Format('Original: %d x %d', [Width, Height]);
|
||||
with StretchedImage.Picture do
|
||||
StatusBar.Panels[1].Text := Format('Resized: %d x %d', [Width, Height]);
|
||||
FWidth := W;
|
||||
FHeight := H;
|
||||
FStretchTime := GetTickCount - T;
|
||||
with StretchedImage.Picture do
|
||||
StatusBar.Panels[2].Text := Format('Resize time: %d msec', [FStretchTime]);
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TStretchDemoForm.PreserveAspectRatio1Click(Sender: TObject);
|
||||
begin
|
||||
with Sender as TMenuItem do
|
||||
begin
|
||||
Checked := not Checked;
|
||||
FPreserveAspectRatio := Checked;
|
||||
InvalidateStretched;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TStretchDemoForm.LoadSelected;
|
||||
begin
|
||||
with FileListView do
|
||||
if Selected <> nil then
|
||||
LoadFile(Selected.Caption);
|
||||
end;
|
||||
|
||||
procedure TStretchDemoForm.PrevFile(Sender: TObject);
|
||||
begin
|
||||
if FileListIndex > 0 then
|
||||
FileListIndex := FileListIndex - 1;
|
||||
LoadSelected;
|
||||
end;
|
||||
|
||||
procedure TStretchDemoForm.NextFile(Sender: TObject);
|
||||
begin
|
||||
if FileListIndex < FileListView.Items.Count - 1 then
|
||||
FileListIndex := FileListIndex + 1;
|
||||
LoadSelected;
|
||||
end;
|
||||
|
||||
procedure TStretchDemoForm.UpdateCaption;
|
||||
begin
|
||||
if FileName <> '' then
|
||||
Caption := Format('JCL Picture Viewer - %s', [FileName]);
|
||||
end;
|
||||
|
||||
procedure TStretchDemoForm.UpdateNavButtons;
|
||||
begin
|
||||
PrevItem.Enabled := FileListIndex > 0;
|
||||
NextItem.Enabled := FileListIndex < FileListView.Items.Count - 1;
|
||||
PrevItem.Enabled := FileListIndex > 0;
|
||||
NextItem.Enabled := FileListIndex < FileListView.Items.Count - 1;
|
||||
end;
|
||||
|
||||
procedure TStretchDemoForm.FileListViewClick(Sender: TObject);
|
||||
begin
|
||||
LoadSelected;
|
||||
end;
|
||||
|
||||
procedure TStretchDemoForm.FormKeyDown(Sender: TObject; var Key: Word;
|
||||
Shift: TShiftState);
|
||||
{$IFDEF VCL}
|
||||
const
|
||||
Key_Prior = VK_PRIOR;
|
||||
Key_Next = VK_NEXT;
|
||||
{$ENDIF VCL}
|
||||
begin
|
||||
case Key of
|
||||
Key_Prior:
|
||||
begin
|
||||
PrevFile(Self);
|
||||
Key := 0;
|
||||
end;
|
||||
Key_Next:
|
||||
begin
|
||||
NextFile(Self);
|
||||
Key := 0;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TStretchDemoForm.StretchedPageShow(Sender: TObject);
|
||||
begin
|
||||
UpdateStretched;
|
||||
end;
|
||||
|
||||
procedure TStretchDemoForm.UpdateStretched;
|
||||
begin
|
||||
if StretchedPage.Visible then
|
||||
DoStretch;
|
||||
end;
|
||||
|
||||
procedure TStretchDemoForm.StretchedPageResize(Sender: TObject);
|
||||
begin
|
||||
UpdateStretched;
|
||||
end;
|
||||
|
||||
procedure TStretchDemoForm.InvalidateStretched;
|
||||
begin
|
||||
FWidth := 0;
|
||||
FHeight := 0;
|
||||
UpdateStretched;
|
||||
end;
|
||||
|
||||
{$IFDEF VCL}
|
||||
procedure TStretchDemoForm.WMDropFiles(var Msg: TWMDropFiles);
|
||||
begin
|
||||
ProcessWMDropFiles(Msg, LoadFile);
|
||||
end;
|
||||
{$ENDIF VCL}
|
||||
|
||||
procedure TStretchDemoForm.PageControlChanging(Sender: TObject;
|
||||
var AllowChange: Boolean);
|
||||
begin
|
||||
if PageControl.ActivePage <> FilesPage then
|
||||
FLastImagePage := PageControl.ActivePage;
|
||||
end;
|
||||
|
||||
{$IFDEF HasShellCtrls}
|
||||
procedure TStretchDemoForm.ShellChange;
|
||||
begin
|
||||
UpdateFileList;
|
||||
end;
|
||||
{$ENDIF HasShellCtrls}
|
||||
|
||||
function TStretchDemoForm.GetFileListIndex: Integer;
|
||||
begin
|
||||
Result := -1;
|
||||
if FileListView.Selected <> nil then
|
||||
Result := FileListView.Selected.Index;
|
||||
end;
|
||||
|
||||
procedure TStretchDemoForm.SetFileListIndex(const Value: Integer);
|
||||
begin
|
||||
if Value < 0 then
|
||||
begin
|
||||
if FileListView.Selected <> nil then
|
||||
begin
|
||||
FileListView.Selected.Selected := False;
|
||||
end;
|
||||
end
|
||||
else
|
||||
FileListView.Items[Value].Selected := True;
|
||||
end;
|
||||
|
||||
procedure TStretchDemoForm.FileListViewKeyDown(Sender: TObject;
|
||||
var Key: Word; Shift: TShiftState);
|
||||
begin
|
||||
if Key = VK_RETURN then
|
||||
LoadSelected;
|
||||
end;
|
||||
|
||||
procedure TStretchDemoForm.SetFileName(const Value: string);
|
||||
begin
|
||||
FFileName := PathGetLongName(Value);
|
||||
end;
|
||||
|
||||
end.
|
||||
@ -0,0 +1,3 @@
|
||||
[Directories]
|
||||
OutputDir=..\..\..\bin
|
||||
|
||||
@ -0,0 +1,16 @@
|
||||
program StretchGraphicExample;
|
||||
|
||||
{$I jcl.inc}
|
||||
|
||||
uses
|
||||
Forms,
|
||||
StretchGraphicDemoMain in 'StretchGraphicDemoMain.pas' {StretchDemoForm};
|
||||
|
||||
{$R *.res}
|
||||
{$R ..\..\..\source\windows\JclCommCtrlAsInvoker.res}
|
||||
|
||||
begin
|
||||
Application.Initialize;
|
||||
Application.CreateForm(TStretchDemoForm, StretchDemoForm);
|
||||
Application.Run;
|
||||
end.
|
||||
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user