git-svn-id: https://192.168.0.254/svn/Componentes.Terceros.jcl@4 c37d764d-f447-7644-a108-883140d013fb

This commit is contained in:
David Arranz 2007-07-10 07:46:27 +00:00
parent ea4bfc54d6
commit 837cb736e0
1552 changed files with 354473 additions and 0 deletions

13
official/1.96/Install.bat Normal file
View File

@ -0,0 +1,13 @@
@echo off
cd install\build
call pretest.bat
if ERRORLEVEL 1 GOTO FINI
SET DELPHIVERSION=%1
if "%1" == "" SET DELPHIVERSION=newest
build.exe %DELPHIVERSION% "--make=installer"
:FINI
cd ..\..

70
official/1.96/Install.txt Normal file
View File

@ -0,0 +1,70 @@
JEDI Code Library v 1.96 Installation
Supported development tools versions:
- Borland C++ Builder 5
- Borland C++ Builder 6
- Borland Delphi 5 Update Pack #1
- Borland Delphi 6 Update Pack #2 (including Personal Edition)
- Borland Delphi 7
- Borland Kylix 3
- Borland Delphi 2005
- Borland Developer Studio 2006 (also known as Delphi 2006, C++Builder 2006)
For more detailed information, see docs\Readme.html.
Please make sure you have installed latest update packs. You can download them
from Borland Support web page:
Delphi: http://info.borland.com/devsupport/delphi/
C++Builder: http://info.borland.com/devsupport/bcppbuilder/
******************************* 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. *
* *
* JCL 1.96 is not compatible with JVCL versions < 3 and _will_ break them! *
* JVCL v. 3.1 will get released together with JCL 1.96; it is available from *
* http://jvcl.sourceforge.net/daily/ *
* *
********************************************************************************
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"
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 2005-10-30

View File

@ -0,0 +1,13 @@
@echo off
cd install\build
call pretest.bat
if ERRORLEVEL 1 GOTO FINI
SET DELPHIVERSION=%1
if "%1" == "" SET DELPHIVERSION=d7
build.exe %DELPHIVERSION% "--make=qinstaller"
:FINI
cd ..\..

View File

@ -0,0 +1,557 @@
Borland Developer Studio 2006 Build 10.0.2558.35231
Added "T:\COMPON~1\jcl\lib\d10;T:\COMPON~1\jcl\source" to library path.
Added "T:\COMPON~1\jcl\source\common;T:\COMPON~1\jcl\source\windows;T:\COMPON~1\jcl\source\vcl;T:\COMPON~1\jcl\source\visclx;" to library browsing path.
Added "T:\COMPON~1\jcl\lib\d10\debug" to Debug DCU Path.
Making common library units for Borland Developer Studio 2006
Compiling .dcu files...
"C:\Archivos de programa\Borland\Delphi10\bin\dcc32.exe"
Borland Delphi for Win32 compiler version 18.0
Copyright (c) 1983,2005 Borland Software Corporation
Syntax: dcc32 [options] filename [options]
-A<unit>=<alias> = Set unit alias
-B = Build all units
-CC = Console target
-CG = GUI target
-D<syms> = Define conditionals
-E<path> = EXE/DLL output directory
-F<offset> = Find error
-GD = Detailed map file
-GP = Map file with publics
-GS = Map file with segments
-H = Output hint messages
-I<paths> = Include directories
-J = Generate .obj file
-JPHNE = Generate C++ .obj file, .hpp file, in namespace, export all
-K<addr> = Set image base addr
-LE<path> = package .bpl output directory
-LN<path> = package .dcp output directory
-LU<package> = Use package
-M = Make modified units
-N0<path> = unit .dcu output directory
-NH<path> = unit .hpp output directory
-NO<path> = unit .obj output directory
-NB<path> = unit .bpi output directory
-NS<namespaces> = Namespace search path
-O<paths> = Object directories
-P = look for 8.3 file names also
-Q = Quiet compile
-R<paths> = Resource directories
-U<paths> = Unit directories
-V = Debug information in EXE
-VR = Generate remote debug (RSM)
-W[+|-][warn_id] = Output warning messages
-Z = Output 'never build' DCPs
-$<dir> = Compiler directive
--help = Show this help screen
--version = Show name and version
--codepage:<cp> = specify source file encoding
--default-namespace:<namespace> = set namespace
--depends = output unit dependency information
--doc = output XML documentation
--drc = output resource string .drc file
--no-config = do not load default DCC32.CFG file
Compiler switches: -$<letter><state> (defaults are shown below)
A8 Aligned record fields
B- Full boolean Evaluation
C- Evaluate assertions at runtime
D- Debug information
G+ Use imported data references
H+ Use long strings by default
I+ I/O checking
J- Writeable structured consts
L+ Local debug symbols
M- Runtime type info
O+ Optimization
P+ Open string params
Q- Integer overflow checking
R- Range checking
T- Typed @ operator
U- Pentium(tm)-safe divide
V+ Strict var-strings
W- Generate stack frames
X+ Extended syntax
Y+ Symbol reference info
Z1 Minimum size of enum types
Making windows library units for Borland Developer Studio 2006
Compiling .dcu files...
"C:\Archivos de programa\Borland\Delphi10\bin\dcc32.exe"
Borland Delphi for Win32 compiler version 18.0
Copyright (c) 1983,2005 Borland Software Corporation
Syntax: dcc32 [options] filename [options]
-A<unit>=<alias> = Set unit alias
-B = Build all units
-CC = Console target
-CG = GUI target
-D<syms> = Define conditionals
-E<path> = EXE/DLL output directory
-F<offset> = Find error
-GD = Detailed map file
-GP = Map file with publics
-GS = Map file with segments
-H = Output hint messages
-I<paths> = Include directories
-J = Generate .obj file
-JPHNE = Generate C++ .obj file, .hpp file, in namespace, export all
-K<addr> = Set image base addr
-LE<path> = package .bpl output directory
-LN<path> = package .dcp output directory
-LU<package> = Use package
-M = Make modified units
-N0<path> = unit .dcu output directory
-NH<path> = unit .hpp output directory
-NO<path> = unit .obj output directory
-NB<path> = unit .bpi output directory
-NS<namespaces> = Namespace search path
-O<paths> = Object directories
-P = look for 8.3 file names also
-Q = Quiet compile
-R<paths> = Resource directories
-U<paths> = Unit directories
-V = Debug information in EXE
-VR = Generate remote debug (RSM)
-W[+|-][warn_id] = Output warning messages
-Z = Output 'never build' DCPs
-$<dir> = Compiler directive
--help = Show this help screen
--version = Show name and version
--codepage:<cp> = specify source file encoding
--default-namespace:<namespace> = set namespace
--depends = output unit dependency information
--doc = output XML documentation
--drc = output resource string .drc file
--no-config = do not load default DCC32.CFG file
Compiler switches: -$<letter><state> (defaults are shown below)
A8 Aligned record fields
B- Full boolean Evaluation
C- Evaluate assertions at runtime
D- Debug information
G+ Use imported data references
H+ Use long strings by default
I+ I/O checking
J- Writeable structured consts
L+ Local debug symbols
M- Runtime type info
O+ Optimization
P+ Open string params
Q- Integer overflow checking
R- Range checking
T- Typed @ operator
U- Pentium(tm)-safe divide
V+ Strict var-strings
W- Generate stack frames
X+ Extended syntax
Y+ Symbol reference info
Z1 Minimum size of enum types
Making vcl library units for Borland Developer Studio 2006
Compiling .dcu files...
"C:\Archivos de programa\Borland\Delphi10\bin\dcc32.exe"
Borland Delphi for Win32 compiler version 18.0
Copyright (c) 1983,2005 Borland Software Corporation
Syntax: dcc32 [options] filename [options]
-A<unit>=<alias> = Set unit alias
-B = Build all units
-CC = Console target
-CG = GUI target
-D<syms> = Define conditionals
-E<path> = EXE/DLL output directory
-F<offset> = Find error
-GD = Detailed map file
-GP = Map file with publics
-GS = Map file with segments
-H = Output hint messages
-I<paths> = Include directories
-J = Generate .obj file
-JPHNE = Generate C++ .obj file, .hpp file, in namespace, export all
-K<addr> = Set image base addr
-LE<path> = package .bpl output directory
-LN<path> = package .dcp output directory
-LU<package> = Use package
-M = Make modified units
-N0<path> = unit .dcu output directory
-NH<path> = unit .hpp output directory
-NO<path> = unit .obj output directory
-NB<path> = unit .bpi output directory
-NS<namespaces> = Namespace search path
-O<paths> = Object directories
-P = look for 8.3 file names also
-Q = Quiet compile
-R<paths> = Resource directories
-U<paths> = Unit directories
-V = Debug information in EXE
-VR = Generate remote debug (RSM)
-W[+|-][warn_id] = Output warning messages
-Z = Output 'never build' DCPs
-$<dir> = Compiler directive
--help = Show this help screen
--version = Show name and version
--codepage:<cp> = specify source file encoding
--default-namespace:<namespace> = set namespace
--depends = output unit dependency information
--doc = output XML documentation
--drc = output resource string .drc file
--no-config = do not load default DCC32.CFG file
Compiler switches: -$<letter><state> (defaults are shown below)
A8 Aligned record fields
B- Full boolean Evaluation
C- Evaluate assertions at runtime
D- Debug information
G+ Use imported data references
H+ Use long strings by default
I+ I/O checking
J- Writeable structured consts
L+ Local debug symbols
M- Runtime type info
O+ Optimization
P+ Open string params
Q- Integer overflow checking
R- Range checking
T- Typed @ operator
U- Pentium(tm)-safe divide
V+ Strict var-strings
W- Generate stack frames
X+ Extended syntax
Y+ Symbol reference info
Z1 Minimum size of enum types
Making common library debug units for Borland Developer Studio 2006
Compiling .dcu files...
"C:\Archivos de programa\Borland\Delphi10\bin\dcc32.exe"
Borland Delphi for Win32 compiler version 18.0
Copyright (c) 1983,2005 Borland Software Corporation
Syntax: dcc32 [options] filename [options]
-A<unit>=<alias> = Set unit alias
-B = Build all units
-CC = Console target
-CG = GUI target
-D<syms> = Define conditionals
-E<path> = EXE/DLL output directory
-F<offset> = Find error
-GD = Detailed map file
-GP = Map file with publics
-GS = Map file with segments
-H = Output hint messages
-I<paths> = Include directories
-J = Generate .obj file
-JPHNE = Generate C++ .obj file, .hpp file, in namespace, export all
-K<addr> = Set image base addr
-LE<path> = package .bpl output directory
-LN<path> = package .dcp output directory
-LU<package> = Use package
-M = Make modified units
-N0<path> = unit .dcu output directory
-NH<path> = unit .hpp output directory
-NO<path> = unit .obj output directory
-NB<path> = unit .bpi output directory
-NS<namespaces> = Namespace search path
-O<paths> = Object directories
-P = look for 8.3 file names also
-Q = Quiet compile
-R<paths> = Resource directories
-U<paths> = Unit directories
-V = Debug information in EXE
-VR = Generate remote debug (RSM)
-W[+|-][warn_id] = Output warning messages
-Z = Output 'never build' DCPs
-$<dir> = Compiler directive
--help = Show this help screen
--version = Show name and version
--codepage:<cp> = specify source file encoding
--default-namespace:<namespace> = set namespace
--depends = output unit dependency information
--doc = output XML documentation
--drc = output resource string .drc file
--no-config = do not load default DCC32.CFG file
Compiler switches: -$<letter><state> (defaults are shown below)
A8 Aligned record fields
B- Full boolean Evaluation
C+ Evaluate assertions at runtime
D+ Debug information
G+ Use imported data references
H+ Use long strings by default
I+ I/O checking
J- Writeable structured consts
L+ Local debug symbols
M- Runtime type info
O- Optimization
P+ Open string params
Q+ Integer overflow checking
R+ Range checking
T- Typed @ operator
U- Pentium(tm)-safe divide
V+ Strict var-strings
W+ Generate stack frames
X+ Extended syntax
Y+ Symbol reference info
Z1 Minimum size of enum types
Making windows library debug units for Borland Developer Studio 2006
Compiling .dcu files...
"C:\Archivos de programa\Borland\Delphi10\bin\dcc32.exe"
Borland Delphi for Win32 compiler version 18.0
Copyright (c) 1983,2005 Borland Software Corporation
Syntax: dcc32 [options] filename [options]
-A<unit>=<alias> = Set unit alias
-B = Build all units
-CC = Console target
-CG = GUI target
-D<syms> = Define conditionals
-E<path> = EXE/DLL output directory
-F<offset> = Find error
-GD = Detailed map file
-GP = Map file with publics
-GS = Map file with segments
-H = Output hint messages
-I<paths> = Include directories
-J = Generate .obj file
-JPHNE = Generate C++ .obj file, .hpp file, in namespace, export all
-K<addr> = Set image base addr
-LE<path> = package .bpl output directory
-LN<path> = package .dcp output directory
-LU<package> = Use package
-M = Make modified units
-N0<path> = unit .dcu output directory
-NH<path> = unit .hpp output directory
-NO<path> = unit .obj output directory
-NB<path> = unit .bpi output directory
-NS<namespaces> = Namespace search path
-O<paths> = Object directories
-P = look for 8.3 file names also
-Q = Quiet compile
-R<paths> = Resource directories
-U<paths> = Unit directories
-V = Debug information in EXE
-VR = Generate remote debug (RSM)
-W[+|-][warn_id] = Output warning messages
-Z = Output 'never build' DCPs
-$<dir> = Compiler directive
--help = Show this help screen
--version = Show name and version
--codepage:<cp> = specify source file encoding
--default-namespace:<namespace> = set namespace
--depends = output unit dependency information
--doc = output XML documentation
--drc = output resource string .drc file
--no-config = do not load default DCC32.CFG file
Compiler switches: -$<letter><state> (defaults are shown below)
A8 Aligned record fields
B- Full boolean Evaluation
C+ Evaluate assertions at runtime
D+ Debug information
G+ Use imported data references
H+ Use long strings by default
I+ I/O checking
J- Writeable structured consts
L+ Local debug symbols
M- Runtime type info
O- Optimization
P+ Open string params
Q+ Integer overflow checking
R+ Range checking
T- Typed @ operator
U- Pentium(tm)-safe divide
V+ Strict var-strings
W+ Generate stack frames
X+ Extended syntax
Y+ Symbol reference info
Z1 Minimum size of enum types
Making vcl library debug units for Borland Developer Studio 2006
Compiling .dcu files...
"C:\Archivos de programa\Borland\Delphi10\bin\dcc32.exe"
Borland Delphi for Win32 compiler version 18.0
Copyright (c) 1983,2005 Borland Software Corporation
Syntax: dcc32 [options] filename [options]
-A<unit>=<alias> = Set unit alias
-B = Build all units
-CC = Console target
-CG = GUI target
-D<syms> = Define conditionals
-E<path> = EXE/DLL output directory
-F<offset> = Find error
-GD = Detailed map file
-GP = Map file with publics
-GS = Map file with segments
-H = Output hint messages
-I<paths> = Include directories
-J = Generate .obj file
-JPHNE = Generate C++ .obj file, .hpp file, in namespace, export all
-K<addr> = Set image base addr
-LE<path> = package .bpl output directory
-LN<path> = package .dcp output directory
-LU<package> = Use package
-M = Make modified units
-N0<path> = unit .dcu output directory
-NH<path> = unit .hpp output directory
-NO<path> = unit .obj output directory
-NB<path> = unit .bpi output directory
-NS<namespaces> = Namespace search path
-O<paths> = Object directories
-P = look for 8.3 file names also
-Q = Quiet compile
-R<paths> = Resource directories
-U<paths> = Unit directories
-V = Debug information in EXE
-VR = Generate remote debug (RSM)
-W[+|-][warn_id] = Output warning messages
-Z = Output 'never build' DCPs
-$<dir> = Compiler directive
--help = Show this help screen
--version = Show name and version
--codepage:<cp> = specify source file encoding
--default-namespace:<namespace> = set namespace
--depends = output unit dependency information
--doc = output XML documentation
--drc = output resource string .drc file
--no-config = do not load default DCC32.CFG file
Compiler switches: -$<letter><state> (defaults are shown below)
A8 Aligned record fields
B- Full boolean Evaluation
C+ Evaluate assertions at runtime
D+ Debug information
G+ Use imported data references
H+ Use long strings by default
I+ I/O checking
J- Writeable structured consts
L+ Local debug symbols
M- Runtime type info
O- Optimization
P+ Open string params
Q+ Integer overflow checking
R+ Range checking
T- Typed @ operator
U- Pentium(tm)-safe divide
V+ Strict var-strings
W+ Generate stack frames
X+ Extended syntax
Y+ Symbol reference info
Z1 Minimum size of enum types
Compiling package T:\COMPON~1\jcl\packages\d10\Jcl.dpk...
Cleaning package cache for Jcl100.bpl
Compiling package T:\COMPON~1\jcl\packages\d10\Jcl.dpk
"C:\Archivos de programa\Borland\Delphi10\bin\dcc32.exe" T:\COMPON~1\jcl\packages\d10\Jcl.dpk
Borland Delphi for Win32 compiler version 18.0
Copyright (c) 1983,2005 Borland Software Corporation
128 lines, 0.61 seconds, 802048 bytes code, 44320 bytes data.
Compilation success
...done.
Compiling package T:\COMPON~1\jcl\packages\d10\JclVcl.dpk...
Cleaning package cache for JclVcl100.bpl
Cleaning ok
Compiling package T:\COMPON~1\jcl\packages\d10\JclVcl.dpk
"C:\Archivos de programa\Borland\Delphi10\bin\dcc32.exe" T:\COMPON~1\jcl\packages\d10\JclVcl.dpk
Borland Delphi for Win32 compiler version 18.0
Copyright (c) 1983,2005 Borland Software Corporation
53 lines, 0.16 seconds, 69712 bytes code, 832 bytes data.
Compilation success
...done.
Installing package T:\COMPON~1\jcl\packages\d10\JclBaseExpert.dpk...
Installing package T:\COMPON~1\jcl\packages\d10\JclBaseExpert.dpk
Compiling package T:\COMPON~1\jcl\packages\d10\JclBaseExpert.dpk
"C:\Archivos de programa\Borland\Delphi10\bin\dcc32.exe" T:\COMPON~1\jcl\packages\d10\JclBaseExpert.dpk
Borland Delphi for Win32 compiler version 18.0
Copyright (c) 1983,2005 Borland Software Corporation
7986 lines, 0.20 seconds, 21836 bytes code, 296 bytes data.
Compilation success
Cleaning package cache for JclBaseExpert100.bpl
Registering package T:\Bpl_D10\JclBaseExpert100.bpl
Registration ok
Installation of package finished
...done.
Installing package T:\COMPON~1\jcl\packages\d10\JclDebugExpert.dpk...
Installing package T:\COMPON~1\jcl\packages\d10\JclDebugExpert.dpk
Compiling package T:\COMPON~1\jcl\packages\d10\JclDebugExpert.dpk
"C:\Archivos de programa\Borland\Delphi10\bin\dcc32.exe" T:\COMPON~1\jcl\packages\d10\JclDebugExpert.dpk
Borland Delphi for Win32 compiler version 18.0
Copyright (c) 1983,2005 Borland Software Corporation
2557 lines, 0.16 seconds, 12404 bytes code, 128 bytes data.
Compilation success
Cleaning package cache for JclDebugExpert100.bpl
Registering package T:\Bpl_D10\JclDebugExpert100.bpl
Registration ok
Installation of package finished
...done.
Installing package T:\COMPON~1\jcl\packages\d10\JclProjectAnalysisExpert.dpk...
Installing package T:\COMPON~1\jcl\packages\d10\JclProjectAnalysisExpert.dpk
Compiling package T:\COMPON~1\jcl\packages\d10\JclProjectAnalysisExpert.dpk
"C:\Archivos de programa\Borland\Delphi10\bin\dcc32.exe" T:\COMPON~1\jcl\packages\d10\JclProjectAnalysisExpert.dpk
Borland Delphi for Win32 compiler version 18.0
Copyright (c) 1983,2005 Borland Software Corporation
3875 lines, 0.14 seconds, 15352 bytes code, 148 bytes data.
Compilation success
Cleaning package cache for JclProjectAnalysisExpert100.bpl
Registering package T:\Bpl_D10\JclProjectAnalysisExpert100.bpl
Registration ok
Installation of package finished
...done.
Installing package T:\COMPON~1\jcl\packages\d10\JclFavoriteFoldersExpert.dpk...
Installing package T:\COMPON~1\jcl\packages\d10\JclFavoriteFoldersExpert.dpk
Compiling package T:\COMPON~1\jcl\packages\d10\JclFavoriteFoldersExpert.dpk
"C:\Archivos de programa\Borland\Delphi10\bin\dcc32.exe" T:\COMPON~1\jcl\packages\d10\JclFavoriteFoldersExpert.dpk
Borland Delphi for Win32 compiler version 18.0
Copyright (c) 1983,2005 Borland Software Corporation
3662 lines, 0.14 seconds, 8540 bytes code, 128 bytes data.
Compilation success
Cleaning package cache for JclFavoriteFoldersExpert100.bpl
Registering package T:\Bpl_D10\JclFavoriteFoldersExpert100.bpl
Registration ok
Installation of package finished
...done.
Installing package T:\COMPON~1\jcl\packages\d10\JclUsesExpert.dpk...
Installing package T:\COMPON~1\jcl\packages\d10\JclUsesExpert.dpk
Compiling package T:\COMPON~1\jcl\packages\d10\JclUsesExpert.dpk
"C:\Archivos de programa\Borland\Delphi10\bin\dcc32.exe" T:\COMPON~1\jcl\packages\d10\JclUsesExpert.dpk
Borland Delphi for Win32 compiler version 18.0
Copyright (c) 1983,2005 Borland Software Corporation
6764 lines, 0.14 seconds, 24664 bytes code, 244 bytes data.
Compilation success
Cleaning package cache for JclUsesExpert100.bpl
Registering package T:\Bpl_D10\JclUsesExpert100.bpl
Registration ok
Installation of package finished
...done.
Installing package T:\COMPON~1\jcl\packages\d10\JclSIMDViewExpert.dpk...
Installing package T:\COMPON~1\jcl\packages\d10\JclSIMDViewExpert.dpk
Compiling package T:\COMPON~1\jcl\packages\d10\JclSIMDViewExpert.dpk
"C:\Archivos de programa\Borland\Delphi10\bin\dcc32.exe" T:\COMPON~1\jcl\packages\d10\JclSIMDViewExpert.dpk
Borland Delphi for Win32 compiler version 18.0
Copyright (c) 1983,2005 Borland Software Corporation
10456 lines, 0.22 seconds, 34696 bytes code, 624 bytes data.
Compilation success
Cleaning package cache for JclSIMDViewExpert100.bpl
Registering package T:\Bpl_D10\JclSIMDViewExpert100.bpl
Registration ok
Installation of package finished
...done.

View File

@ -0,0 +1,426 @@
Delphi 7 Build 7.0.8.1 =====================
Added "T:\COMPON~1\jcl\lib\d7;T:\COMPON~1\jcl\source" to library path.
Added "T:\COMPON~1\jcl\source\common;T:\COMPON~1\jcl\source\windows;T:\COMPON~1\jcl\source\vcl;T:\COMPON~1\jcl\source\visclx;" to library browsing path.
Added "T:\COMPON~1\jcl\lib\d7\debug" to Debug DCU Path.
Making common library units for Delphi 7
Compiling .dcu files...
"C:\Archivos de programa\Borland\Delphi7\bin\dcc32.exe"
Borland Delphi Version 15.0
Copyright (c) 1983,2002 Borland Software Corporation
Syntax: dcc32 [options] filename [options]
-A<unit>=<alias> = Set unit alias -LU<package> = Use package
-B = Build all units -M = Make modified units
-CC = Console target -N<path> = DCU output directory
-CG = GUI target -O<paths> = Object directories
-D<syms> = Define conditionals -P = look for 8.3 file names also
-E<path> = EXE output directory -Q = Quiet compile
-F<offset> = Find error -R<paths> = Resource directories
-GD = Detailed map file -U<paths> = Unit directories
-GP = Map file with publics -V = Debug information in EXE
-GS = Map file with segments -VR = Generate remote debug (RSM)
-H = Output hint messages -W = Output warning messages
-I<paths> = Include directories -Z = Output 'never build' DCPs
-J = Generate .obj file -$<dir> = Compiler directive
-JP = Generate C++ .obj file --help = Show this help screen
-K<addr> = Set image base addr --version = Show name and version
Compiler switches: -$<letter><state> (defaults are shown below)
A8 Aligned record fields P+ Open string params
B- Full boolean Evaluation Q- Integer overflow checking
C- Evaluate assertions at runtime R- Range checking
D- Debug information T- Typed @ operator
G+ Use imported data references U- Pentium(tm)-safe divide
H+ Use long strings by default V+ Strict var-strings
I+ I/O checking W- Generate stack frames
J- Writeable structured consts X+ Extended syntax
L+ Local debug symbols Y+ Symbol reference info
M- Runtime type info Z1 Minimum size of enum types
O+ Optimization
Making windows library units for Delphi 7
Compiling .dcu files...
"C:\Archivos de programa\Borland\Delphi7\bin\dcc32.exe"
Borland Delphi Version 15.0
Copyright (c) 1983,2002 Borland Software Corporation
Syntax: dcc32 [options] filename [options]
-A<unit>=<alias> = Set unit alias -LU<package> = Use package
-B = Build all units -M = Make modified units
-CC = Console target -N<path> = DCU output directory
-CG = GUI target -O<paths> = Object directories
-D<syms> = Define conditionals -P = look for 8.3 file names also
-E<path> = EXE output directory -Q = Quiet compile
-F<offset> = Find error -R<paths> = Resource directories
-GD = Detailed map file -U<paths> = Unit directories
-GP = Map file with publics -V = Debug information in EXE
-GS = Map file with segments -VR = Generate remote debug (RSM)
-H = Output hint messages -W = Output warning messages
-I<paths> = Include directories -Z = Output 'never build' DCPs
-J = Generate .obj file -$<dir> = Compiler directive
-JP = Generate C++ .obj file --help = Show this help screen
-K<addr> = Set image base addr --version = Show name and version
Compiler switches: -$<letter><state> (defaults are shown below)
A8 Aligned record fields P+ Open string params
B- Full boolean Evaluation Q- Integer overflow checking
C- Evaluate assertions at runtime R- Range checking
D- Debug information T- Typed @ operator
G+ Use imported data references U- Pentium(tm)-safe divide
H+ Use long strings by default V+ Strict var-strings
I+ I/O checking W- Generate stack frames
J- Writeable structured consts X+ Extended syntax
L+ Local debug symbols Y+ Symbol reference info
M- Runtime type info Z1 Minimum size of enum types
O+ Optimization
Making vcl library units for Delphi 7
Compiling .dcu files...
"C:\Archivos de programa\Borland\Delphi7\bin\dcc32.exe"
Borland Delphi Version 15.0
Copyright (c) 1983,2002 Borland Software Corporation
Syntax: dcc32 [options] filename [options]
-A<unit>=<alias> = Set unit alias -LU<package> = Use package
-B = Build all units -M = Make modified units
-CC = Console target -N<path> = DCU output directory
-CG = GUI target -O<paths> = Object directories
-D<syms> = Define conditionals -P = look for 8.3 file names also
-E<path> = EXE output directory -Q = Quiet compile
-F<offset> = Find error -R<paths> = Resource directories
-GD = Detailed map file -U<paths> = Unit directories
-GP = Map file with publics -V = Debug information in EXE
-GS = Map file with segments -VR = Generate remote debug (RSM)
-H = Output hint messages -W = Output warning messages
-I<paths> = Include directories -Z = Output 'never build' DCPs
-J = Generate .obj file -$<dir> = Compiler directive
-JP = Generate C++ .obj file --help = Show this help screen
-K<addr> = Set image base addr --version = Show name and version
Compiler switches: -$<letter><state> (defaults are shown below)
A8 Aligned record fields P+ Open string params
B- Full boolean Evaluation Q- Integer overflow checking
C- Evaluate assertions at runtime R- Range checking
D- Debug information T- Typed @ operator
G+ Use imported data references U- Pentium(tm)-safe divide
H+ Use long strings by default V+ Strict var-strings
I+ I/O checking W- Generate stack frames
J- Writeable structured consts X+ Extended syntax
L+ Local debug symbols Y+ Symbol reference info
M- Runtime type info Z1 Minimum size of enum types
O+ Optimization
Making visclx library units for Delphi 7
Compiling .dcu files...
"C:\Archivos de programa\Borland\Delphi7\bin\dcc32.exe"
Borland Delphi Version 15.0
Copyright (c) 1983,2002 Borland Software Corporation
Syntax: dcc32 [options] filename [options]
-A<unit>=<alias> = Set unit alias -LU<package> = Use package
-B = Build all units -M = Make modified units
-CC = Console target -N<path> = DCU output directory
-CG = GUI target -O<paths> = Object directories
-D<syms> = Define conditionals -P = look for 8.3 file names also
-E<path> = EXE output directory -Q = Quiet compile
-F<offset> = Find error -R<paths> = Resource directories
-GD = Detailed map file -U<paths> = Unit directories
-GP = Map file with publics -V = Debug information in EXE
-GS = Map file with segments -VR = Generate remote debug (RSM)
-H = Output hint messages -W = Output warning messages
-I<paths> = Include directories -Z = Output 'never build' DCPs
-J = Generate .obj file -$<dir> = Compiler directive
-JP = Generate C++ .obj file --help = Show this help screen
-K<addr> = Set image base addr --version = Show name and version
Compiler switches: -$<letter><state> (defaults are shown below)
A8 Aligned record fields P+ Open string params
B- Full boolean Evaluation Q- Integer overflow checking
C- Evaluate assertions at runtime R- Range checking
D- Debug information T- Typed @ operator
G+ Use imported data references U- Pentium(tm)-safe divide
H+ Use long strings by default V+ Strict var-strings
I+ I/O checking W- Generate stack frames
J- Writeable structured consts X+ Extended syntax
L+ Local debug symbols Y+ Symbol reference info
M- Runtime type info Z1 Minimum size of enum types
O+ Optimization
Making common library debug units for Delphi 7
Compiling .dcu files...
"C:\Archivos de programa\Borland\Delphi7\bin\dcc32.exe"
Borland Delphi Version 15.0
Copyright (c) 1983,2002 Borland Software Corporation
Syntax: dcc32 [options] filename [options]
-A<unit>=<alias> = Set unit alias -LU<package> = Use package
-B = Build all units -M = Make modified units
-CC = Console target -N<path> = DCU output directory
-CG = GUI target -O<paths> = Object directories
-D<syms> = Define conditionals -P = look for 8.3 file names also
-E<path> = EXE output directory -Q = Quiet compile
-F<offset> = Find error -R<paths> = Resource directories
-GD = Detailed map file -U<paths> = Unit directories
-GP = Map file with publics -V = Debug information in EXE
-GS = Map file with segments -VR = Generate remote debug (RSM)
-H = Output hint messages -W = Output warning messages
-I<paths> = Include directories -Z = Output 'never build' DCPs
-J = Generate .obj file -$<dir> = Compiler directive
-JP = Generate C++ .obj file --help = Show this help screen
-K<addr> = Set image base addr --version = Show name and version
Compiler switches: -$<letter><state> (defaults are shown below)
A8 Aligned record fields P+ Open string params
B- Full boolean Evaluation Q+ Integer overflow checking
C+ Evaluate assertions at runtime R+ Range checking
D+ Debug information T- Typed @ operator
G+ Use imported data references U- Pentium(tm)-safe divide
H+ Use long strings by default V+ Strict var-strings
I+ I/O checking W+ Generate stack frames
J- Writeable structured consts X+ Extended syntax
L+ Local debug symbols Y+ Symbol reference info
M- Runtime type info Z1 Minimum size of enum types
O- Optimization
Making windows library debug units for Delphi 7
Compiling .dcu files...
"C:\Archivos de programa\Borland\Delphi7\bin\dcc32.exe"
Borland Delphi Version 15.0
Copyright (c) 1983,2002 Borland Software Corporation
Syntax: dcc32 [options] filename [options]
-A<unit>=<alias> = Set unit alias -LU<package> = Use package
-B = Build all units -M = Make modified units
-CC = Console target -N<path> = DCU output directory
-CG = GUI target -O<paths> = Object directories
-D<syms> = Define conditionals -P = look for 8.3 file names also
-E<path> = EXE output directory -Q = Quiet compile
-F<offset> = Find error -R<paths> = Resource directories
-GD = Detailed map file -U<paths> = Unit directories
-GP = Map file with publics -V = Debug information in EXE
-GS = Map file with segments -VR = Generate remote debug (RSM)
-H = Output hint messages -W = Output warning messages
-I<paths> = Include directories -Z = Output 'never build' DCPs
-J = Generate .obj file -$<dir> = Compiler directive
-JP = Generate C++ .obj file --help = Show this help screen
-K<addr> = Set image base addr --version = Show name and version
Compiler switches: -$<letter><state> (defaults are shown below)
A8 Aligned record fields P+ Open string params
B- Full boolean Evaluation Q+ Integer overflow checking
C+ Evaluate assertions at runtime R+ Range checking
D+ Debug information T- Typed @ operator
G+ Use imported data references U- Pentium(tm)-safe divide
H+ Use long strings by default V+ Strict var-strings
I+ I/O checking W+ Generate stack frames
J- Writeable structured consts X+ Extended syntax
L+ Local debug symbols Y+ Symbol reference info
M- Runtime type info Z1 Minimum size of enum types
O- Optimization
Making vcl library debug units for Delphi 7
Compiling .dcu files...
"C:\Archivos de programa\Borland\Delphi7\bin\dcc32.exe"
Borland Delphi Version 15.0
Copyright (c) 1983,2002 Borland Software Corporation
Syntax: dcc32 [options] filename [options]
-A<unit>=<alias> = Set unit alias -LU<package> = Use package
-B = Build all units -M = Make modified units
-CC = Console target -N<path> = DCU output directory
-CG = GUI target -O<paths> = Object directories
-D<syms> = Define conditionals -P = look for 8.3 file names also
-E<path> = EXE output directory -Q = Quiet compile
-F<offset> = Find error -R<paths> = Resource directories
-GD = Detailed map file -U<paths> = Unit directories
-GP = Map file with publics -V = Debug information in EXE
-GS = Map file with segments -VR = Generate remote debug (RSM)
-H = Output hint messages -W = Output warning messages
-I<paths> = Include directories -Z = Output 'never build' DCPs
-J = Generate .obj file -$<dir> = Compiler directive
-JP = Generate C++ .obj file --help = Show this help screen
-K<addr> = Set image base addr --version = Show name and version
Compiler switches: -$<letter><state> (defaults are shown below)
A8 Aligned record fields P+ Open string params
B- Full boolean Evaluation Q+ Integer overflow checking
C+ Evaluate assertions at runtime R+ Range checking
D+ Debug information T- Typed @ operator
G+ Use imported data references U- Pentium(tm)-safe divide
H+ Use long strings by default V+ Strict var-strings
I+ I/O checking W+ Generate stack frames
J- Writeable structured consts X+ Extended syntax
L+ Local debug symbols Y+ Symbol reference info
M- Runtime type info Z1 Minimum size of enum types
O- Optimization
Making visclx library debug units for Delphi 7
Compiling .dcu files...
"C:\Archivos de programa\Borland\Delphi7\bin\dcc32.exe"
Borland Delphi Version 15.0
Copyright (c) 1983,2002 Borland Software Corporation
Syntax: dcc32 [options] filename [options]
-A<unit>=<alias> = Set unit alias -LU<package> = Use package
-B = Build all units -M = Make modified units
-CC = Console target -N<path> = DCU output directory
-CG = GUI target -O<paths> = Object directories
-D<syms> = Define conditionals -P = look for 8.3 file names also
-E<path> = EXE output directory -Q = Quiet compile
-F<offset> = Find error -R<paths> = Resource directories
-GD = Detailed map file -U<paths> = Unit directories
-GP = Map file with publics -V = Debug information in EXE
-GS = Map file with segments -VR = Generate remote debug (RSM)
-H = Output hint messages -W = Output warning messages
-I<paths> = Include directories -Z = Output 'never build' DCPs
-J = Generate .obj file -$<dir> = Compiler directive
-JP = Generate C++ .obj file --help = Show this help screen
-K<addr> = Set image base addr --version = Show name and version
Compiler switches: -$<letter><state> (defaults are shown below)
A8 Aligned record fields P+ Open string params
B- Full boolean Evaluation Q+ Integer overflow checking
C+ Evaluate assertions at runtime R+ Range checking
D+ Debug information T- Typed @ operator
G+ Use imported data references U- Pentium(tm)-safe divide
H+ Use long strings by default V+ Strict var-strings
I+ I/O checking W+ Generate stack frames
J- Writeable structured consts X+ Extended syntax
L+ Local debug symbols Y+ Symbol reference info
M- Runtime type info Z1 Minimum size of enum types
O- Optimization
Compiling package T:\COMPON~1\jcl\packages\d7\Jcl.dpk...
Compiling package T:\COMPON~1\jcl\packages\d7\Jcl.dpk
"C:\Archivos de programa\Borland\Delphi7\bin\dcc32.exe" T:\COMPON~1\jcl\packages\d7\Jcl.dpk
Borland Delphi Version 15.0
Copyright (c) 1983,2002 Borland Software Corporation
128 lines, 0.81 seconds, 803604 bytes code, 44413 bytes data.
Compilation success
...done.
Compiling package T:\COMPON~1\jcl\packages\d7\JclVClx.dpk...
Compiling package T:\COMPON~1\jcl\packages\d7\JclVClx.dpk
"C:\Archivos de programa\Borland\Delphi7\bin\dcc32.exe" T:\COMPON~1\jcl\packages\d7\JclVClx.dpk
Borland Delphi Version 15.0
Copyright (c) 1983,2002 Borland Software Corporation
51 lines, 0.27 seconds, 25320 bytes code, 585 bytes data.
Compilation success
...done.
Compiling package T:\COMPON~1\jcl\packages\d7\JclVcl.dpk...
Compiling package T:\COMPON~1\jcl\packages\d7\JclVcl.dpk
"C:\Archivos de programa\Borland\Delphi7\bin\dcc32.exe" T:\COMPON~1\jcl\packages\d7\JclVcl.dpk
Borland Delphi Version 15.0
Copyright (c) 1983,2002 Borland Software Corporation
53 lines, 0.38 seconds, 70944 bytes code, 897 bytes data.
Compilation success
...done.
Installing package T:\COMPON~1\jcl\packages\d7\JclBaseExpert.dpk...
Installing package T:\COMPON~1\jcl\packages\d7\JclBaseExpert.dpk
Compiling package T:\COMPON~1\jcl\packages\d7\JclBaseExpert.dpk
"C:\Archivos de programa\Borland\Delphi7\bin\dcc32.exe" T:\COMPON~1\jcl\packages\d7\JclBaseExpert.dpk
Borland Delphi Version 15.0
Copyright (c) 1983,2002 Borland Software Corporation
7986 lines, 0.28 seconds, 21916 bytes code, 317 bytes data.
Compilation success
Registering package T:\Bpl_D7\JclBaseExpert70.bpl
Registration ok
Installation of package finished
...done.
Installing package T:\COMPON~1\jcl\packages\d7\JclDebugExpert.dpk...
Installing package T:\COMPON~1\jcl\packages\d7\JclDebugExpert.dpk
Compiling package T:\COMPON~1\jcl\packages\d7\JclDebugExpert.dpk
"C:\Archivos de programa\Borland\Delphi7\bin\dcc32.exe" T:\COMPON~1\jcl\packages\d7\JclDebugExpert.dpk
Borland Delphi Version 15.0
Copyright (c) 1983,2002 Borland Software Corporation
2557 lines, 0.14 seconds, 13292 bytes code, 193 bytes data.
Compilation success
Registering package T:\Bpl_D7\JclDebugExpert70.bpl
Registration ok
Installation of package finished
...done.
Installing package T:\COMPON~1\jcl\packages\d7\JclProjectAnalysisExpert.dpk...
Installing package T:\COMPON~1\jcl\packages\d7\JclProjectAnalysisExpert.dpk
Compiling package T:\COMPON~1\jcl\packages\d7\JclProjectAnalysisExpert.dpk
"C:\Archivos de programa\Borland\Delphi7\bin\dcc32.exe" T:\COMPON~1\jcl\packages\d7\JclProjectAnalysisExpert.dpk
Borland Delphi Version 15.0
Copyright (c) 1983,2002 Borland Software Corporation
3875 lines, 0.12 seconds, 16244 bytes code, 213 bytes data.
Compilation success
Registering package T:\Bpl_D7\JclProjectAnalysisExpert70.bpl
Registration ok
Installation of package finished
...done.
Installing package T:\COMPON~1\jcl\packages\d7\JclFavoriteFoldersExpert.dpk...
Installing package T:\COMPON~1\jcl\packages\d7\JclFavoriteFoldersExpert.dpk
Compiling package T:\COMPON~1\jcl\packages\d7\JclFavoriteFoldersExpert.dpk
"C:\Archivos de programa\Borland\Delphi7\bin\dcc32.exe" T:\COMPON~1\jcl\packages\d7\JclFavoriteFoldersExpert.dpk
Borland Delphi Version 15.0
Copyright (c) 1983,2002 Borland Software Corporation
3662 lines, 0.12 seconds, 9528 bytes code, 193 bytes data.
Compilation success
Registering package T:\Bpl_D7\JclFavoriteFoldersExpert70.bpl
Registration ok
Installation of package finished
...done.
Installing package T:\COMPON~1\jcl\packages\d7\JclUsesExpert.dpk...
Installing package T:\COMPON~1\jcl\packages\d7\JclUsesExpert.dpk
Compiling package T:\COMPON~1\jcl\packages\d7\JclUsesExpert.dpk
"C:\Archivos de programa\Borland\Delphi7\bin\dcc32.exe" T:\COMPON~1\jcl\packages\d7\JclUsesExpert.dpk
Borland Delphi Version 15.0
Copyright (c) 1983,2002 Borland Software Corporation
6764 lines, 0.16 seconds, 25704 bytes code, 309 bytes data.
Compilation success
Registering package T:\Bpl_D7\JclUsesExpert70.bpl
Registration ok
Installation of package finished
...done.
Installing package T:\COMPON~1\jcl\packages\d7\JclSIMDViewExpert.dpk...
Installing package T:\COMPON~1\jcl\packages\d7\JclSIMDViewExpert.dpk
Compiling package T:\COMPON~1\jcl\packages\d7\JclSIMDViewExpert.dpk
"C:\Archivos de programa\Borland\Delphi7\bin\dcc32.exe" T:\COMPON~1\jcl\packages\d7\JclSIMDViewExpert.dpk
Borland Delphi Version 15.0
Copyright (c) 1983,2002 Borland Software Corporation
10456 lines, 0.16 seconds, 35980 bytes code, 689 bytes data.
Compilation success
Registering package T:\Bpl_D7\JclSIMDViewExpert70.bpl
Registration ok
Installation of package finished
...done.
Installing Exception Dialog...
-> T:\COMPON~1\JCL\EXPERTS\DEBUG\DIALOG\EXCEPTDLG.PAS
-> T:\COMPON~1\JCL\EXPERTS\DEBUG\DIALOG\EXCEPTDLG.ico
...done.
Installing Exception Dialog with Send...
-> T:\COMPON~1\JCL\EXPERTS\DEBUG\DIALOG\EXCEPTDLGMAIL.PAS
-> T:\COMPON~1\JCL\EXPERTS\DEBUG\DIALOG\EXCEPTDLGMAIL.ico
...done.
Installing CLX Exception Dialog...
-> T:\COMPON~1\JCL\EXPERTS\DEBUG\DIALOG\CLXEXCEPTDLG.PAS
-> T:\COMPON~1\JCL\EXPERTS\DEBUG\DIALOG\CLXEXCEPTDLG.ico
...done.
Added T:\COMPON~1\jcl\help\JCLHelp.hlp to Delphi Online Help

View File

@ -0,0 +1,377 @@
[Delphi 7]
ioTarget=2070
ioJCL=2070
ioJclDefThreadSafe=2070
ioJclDefDropObsoleteCode=2070
ioJclDefMathPrecSingle=-1
ioJclDefMathPrecDouble=-1
ioJclDefMathPrecExtended=2070
ioJclMapCreate=-1
ioJclMapLink=-1
ioJclMapDelete=-1
ioJclEnv=2070
ioJclEnvLibPath=2070
ioJclEnvBrowsingPath=2070
ioJclEnvDebugDCUPath=2070
ioJclMake=2070
ioJclMakeRelease=2070
ioJclMakeReleaseVClx=2070
ioJclMakeDebug=2070
ioJclMakeDebugVClx=2070
ioJclCopyHppFiles=-1
ioJclDualPackages=-1
ioJclPackages=2070
ioJclExpertsDesignPackages=2070
ioJclExpertsDLL=-1
ioJclExperts=2070
ioJclExpertDebug=2070
ioJclExpertAnalyzer=2070
ioJclExpertFavorite=2070
ioJclExpertThreadNames=-1
ioJclExpertUses=2070
ioJclExpertSimdView=2070
ioJclExpertVersionControl=-1
ioJclCopyPackagesHppFiles=-1
ioJclExcDialog=2070
ioJclExcDialogVCL=2070
ioJclExcDialogVCLSnd=2070
ioJclExcDialogCLX=2070
ioJclHelp=2070
ioJclHelpHlp=2070
ioJclHelpChm=-1
ioJclMakeDemos=-1
BPL-Path=T:\Bpl_D7
DCP-Path=D:\Proyectos\Componentes\jcl\lib\d7
[Delphi 7 demos]
common\containers\algorithms\AlgorithmsExample.dpr=-1
windows\peimage\ApiHookExample.dpr=-1
windows\appinst\AppInstExample.dpr=-1
windows\ConsoleExamples.dpr=-1
windows\asuser\CreateProcAsUserExample.dpr=-1
windows\delphitools\dependencyviewer\DependView.dpr=-1
windows\edisdk\EDICOMExample.dpr=-1
windows\edisdk\comserver\EDISDK.dpr=-1
common\expreval\ExprEvalExample.dpr=-1
windows\debug\framestrack\FramesTrackExample.dpr=-1
common\containers\hashing\HashingExample.dpr=-1
windows\ntfs\JEDISoftLinks.dpr=-1
windows\lanman\LanManExample.dpr=-1
common\containers\lists\ListExample.dpr=-1
windows\locales\LocalesExample.dpr=-1
windows\mapi\MapiExample.dpr=-1
common\multimedia\MidiOutExample.dpr=-1
windows\multimedia\MultiMediaExample.dpr=-1
windows\ntservice\NtSvcExample.dpr=-1
common\pcre\PCREDemo.dpr=-1
windows\peimage\PeFuncExample.dpr=-1
windows\delphitools\peviewer\PeViewer.dpr=-1
common\graphics\QClipLineDemo.dpr=-1
common\sysinfo\QEnvironmentExample.dpr=-1
common\expreval\QExprEvalExample.dpr=-1
common\numformat\QNumFormatExample.dpr=-1
common\pcre\QPCREDemo.dpr=-1
common\rtti\QRTTIDemo.dpr=-1
windows\mapi\ReadMailExample.dpr=-1
windows\registry\RegistryExample.dpr=-1
windows\delphitools\resfix\ResFix.dpr=-1
common\rtti\RTTIExample.dpr=-1
windows\delphitools\screenjpg\ScreenJPG.dpr=-1
windows\appinst\SingleInstExample.dpr=-1
windows\debug\sourceloc\SourceLocExample.dpr=-1
windows\debug\stacktrack\StackTrackDLLsComLibrary.dpr=-1
windows\debug\stacktrack\StackTrackDLLsDynamicLibrary.dpr=-1
windows\debug\stacktrack\StackTrackDLLsExample.dpr=-1
windows\debug\stacktrack\StackTrackDLLsStaticLibrary.dpr=-1
windows\debug\stacktrack\StackTrackExample.dpr=-1
common\graphics\StretchGraphicExample.dpr=-1
windows\structstorage\StructStorageExample.dpr=-1
windows\sysinfo\SysInfoExample.dpr=-1
windows\tasks\TaskDemo.dpr=-1
common\textreader\TextReaderExample.dpr=-1
windows\debug\threadexcept\ThreadExceptExample.dpr=-1
windows\delphitools\toolhelpview\ToolHelpViewer.dpr=-1
common\containers\trees\TreeExample.dpr=-1
common\unitversioning\UnitVersioningTest.dpr=-1
common\unitversioning\UnitVersioningTestDLL.dpr=-1
windows\peimage\UnmangleNameExample.dpr=-1
windows\fileversion\VerInfoExample.dpr=-1
[Delphi 5]
ioTarget=-1
ioJCL=-1
ioJclDefThreadSafe=-1
ioJclDefDropObsoleteCode=-1
ioJclDefMathPrecSingle=-1
ioJclDefMathPrecDouble=-1
ioJclDefMathPrecExtended=-1
ioJclMapCreate=-1
ioJclMapLink=-1
ioJclMapDelete=-1
ioJclEnv=-1
ioJclEnvLibPath=-1
ioJclEnvBrowsingPath=-1
ioJclEnvDebugDCUPath=-1
ioJclMake=-1
ioJclMakeRelease=-1
ioJclMakeReleaseVClx=-1
ioJclMakeDebug=-1
ioJclMakeDebugVClx=-1
ioJclCopyHppFiles=-1
ioJclDualPackages=-1
ioJclPackages=-1
ioJclExpertsDesignPackages=-1
ioJclExpertsDLL=-1
ioJclExperts=-1
ioJclExpertDebug=-1
ioJclExpertAnalyzer=-1
ioJclExpertFavorite=-1
ioJclExpertThreadNames=-1
ioJclExpertUses=-1
ioJclExpertSimdView=-1
ioJclExpertVersionControl=-1
ioJclCopyPackagesHppFiles=-1
ioJclExcDialog=-1
ioJclExcDialogVCL=-1
ioJclExcDialogVCLSnd=-1
ioJclExcDialogCLX=-1
ioJclHelp=-1
ioJclHelpHlp=-1
ioJclHelpChm=-1
ioJclMakeDemos=-1
BPL-Path=(Enter valid path)
DCP-Path=(Enter valid path)
[Delphi 5 demos]
common\containers\algorithms\AlgorithmsExample.dpr=-1
windows\peimage\ApiHookExample.dpr=-1
windows\appinst\AppInstExample.dpr=-1
windows\ConsoleExamples.dpr=-1
windows\asuser\CreateProcAsUserExample.dpr=-1
windows\delphitools\dependencyviewer\DependView.dpr=-1
windows\edisdk\EDICOMExample.dpr=-1
windows\edisdk\comserver\EDISDK.dpr=-1
common\expreval\ExprEvalExample.dpr=-1
windows\debug\framestrack\FramesTrackExample.dpr=-1
common\containers\hashing\HashingExample.dpr=-1
windows\ntfs\JEDISoftLinks.dpr=-1
windows\lanman\LanManExample.dpr=-1
common\containers\lists\ListExample.dpr=-1
windows\locales\LocalesExample.dpr=-1
windows\mapi\MapiExample.dpr=-1
common\multimedia\MidiOutExample.dpr=-1
windows\multimedia\MultiMediaExample.dpr=-1
windows\ntservice\NtSvcExample.dpr=-1
common\pcre\PCREDemo.dpr=-1
windows\peimage\PeFuncExample.dpr=-1
windows\delphitools\peviewer\PeViewer.dpr=-1
windows\mapi\ReadMailExample.dpr=-1
windows\registry\RegistryExample.dpr=-1
windows\delphitools\resfix\ResFix.dpr=-1
common\rtti\RTTIExample.dpr=-1
windows\delphitools\screenjpg\ScreenJPG.dpr=-1
windows\appinst\SingleInstExample.dpr=-1
windows\debug\sourceloc\SourceLocExample.dpr=-1
windows\debug\stacktrack\StackTrackDLLsComLibrary.dpr=-1
windows\debug\stacktrack\StackTrackDLLsDynamicLibrary.dpr=-1
windows\debug\stacktrack\StackTrackDLLsExample.dpr=-1
windows\debug\stacktrack\StackTrackDLLsStaticLibrary.dpr=-1
windows\debug\stacktrack\StackTrackExample.dpr=-1
common\graphics\StretchGraphicExample.dpr=-1
windows\structstorage\StructStorageExample.dpr=-1
windows\sysinfo\SysInfoExample.dpr=-1
windows\tasks\TaskDemo.dpr=-1
common\textreader\TextReaderExample.dpr=-1
windows\debug\threadexcept\ThreadExceptExample.dpr=-1
windows\delphitools\toolhelpview\ToolHelpViewer.dpr=-1
common\containers\trees\TreeExample.dpr=-1
common\unitversioning\UnitVersioningTest.dpr=-1
common\unitversioning\UnitVersioningTestDLL.dpr=-1
windows\peimage\UnmangleNameExample.dpr=-1
windows\fileversion\VerInfoExample.dpr=-1
[Delphi 6]
ioTarget=-1
ioJCL=-1
ioJclDefThreadSafe=-1
ioJclDefDropObsoleteCode=-1
ioJclDefMathPrecSingle=-1
ioJclDefMathPrecDouble=-1
ioJclDefMathPrecExtended=-1
ioJclMapCreate=-1
ioJclMapLink=-1
ioJclMapDelete=-1
ioJclEnv=-1
ioJclEnvLibPath=-1
ioJclEnvBrowsingPath=-1
ioJclEnvDebugDCUPath=-1
ioJclMake=-1
ioJclMakeRelease=-1
ioJclMakeReleaseVClx=-1
ioJclMakeDebug=-1
ioJclMakeDebugVClx=-1
ioJclCopyHppFiles=-1
ioJclDualPackages=-1
ioJclPackages=-1
ioJclExpertsDesignPackages=-1
ioJclExpertsDLL=-1
ioJclExperts=-1
ioJclExpertDebug=-1
ioJclExpertAnalyzer=-1
ioJclExpertFavorite=-1
ioJclExpertThreadNames=-1
ioJclExpertUses=-1
ioJclExpertSimdView=-1
ioJclExpertVersionControl=-1
ioJclCopyPackagesHppFiles=-1
ioJclExcDialog=-1
ioJclExcDialogVCL=-1
ioJclExcDialogVCLSnd=-1
ioJclExcDialogCLX=-1
ioJclHelp=-1
ioJclHelpHlp=-1
ioJclHelpChm=-1
ioJclMakeDemos=-1
BPL-Path=
DCP-Path=
[Delphi 6 demos]
common\containers\algorithms\AlgorithmsExample.dpr=-1
windows\peimage\ApiHookExample.dpr=-1
windows\appinst\AppInstExample.dpr=-1
windows\ConsoleExamples.dpr=-1
windows\asuser\CreateProcAsUserExample.dpr=-1
windows\delphitools\dependencyviewer\DependView.dpr=-1
windows\edisdk\EDICOMExample.dpr=-1
windows\edisdk\comserver\EDISDK.dpr=-1
common\expreval\ExprEvalExample.dpr=-1
windows\debug\framestrack\FramesTrackExample.dpr=-1
common\containers\hashing\HashingExample.dpr=-1
windows\ntfs\JEDISoftLinks.dpr=-1
windows\lanman\LanManExample.dpr=-1
common\containers\lists\ListExample.dpr=-1
windows\locales\LocalesExample.dpr=-1
windows\mapi\MapiExample.dpr=-1
common\multimedia\MidiOutExample.dpr=-1
windows\multimedia\MultiMediaExample.dpr=-1
windows\ntservice\NtSvcExample.dpr=-1
common\pcre\PCREDemo.dpr=-1
windows\peimage\PeFuncExample.dpr=-1
windows\delphitools\peviewer\PeViewer.dpr=-1
windows\mapi\ReadMailExample.dpr=-1
windows\registry\RegistryExample.dpr=-1
windows\delphitools\resfix\ResFix.dpr=-1
common\rtti\RTTIExample.dpr=-1
windows\delphitools\screenjpg\ScreenJPG.dpr=-1
windows\appinst\SingleInstExample.dpr=-1
windows\debug\sourceloc\SourceLocExample.dpr=-1
windows\debug\stacktrack\StackTrackDLLsComLibrary.dpr=-1
windows\debug\stacktrack\StackTrackDLLsDynamicLibrary.dpr=-1
windows\debug\stacktrack\StackTrackDLLsExample.dpr=-1
windows\debug\stacktrack\StackTrackDLLsStaticLibrary.dpr=-1
windows\debug\stacktrack\StackTrackExample.dpr=-1
common\graphics\StretchGraphicExample.dpr=-1
windows\structstorage\StructStorageExample.dpr=-1
windows\sysinfo\SysInfoExample.dpr=-1
windows\tasks\TaskDemo.dpr=-1
common\textreader\TextReaderExample.dpr=-1
windows\debug\threadexcept\ThreadExceptExample.dpr=-1
windows\delphitools\toolhelpview\ToolHelpViewer.dpr=-1
common\containers\trees\TreeExample.dpr=-1
common\unitversioning\UnitVersioningTest.dpr=-1
common\unitversioning\UnitVersioningTestDLL.dpr=-1
windows\peimage\UnmangleNameExample.dpr=-1
windows\fileversion\VerInfoExample.dpr=-1
[Borland Developer Studio 2006]
ioTarget=2070
ioJCL=2070
ioJclDefThreadSafe=2070
ioJclDefDropObsoleteCode=2070
ioJclDefMathPrecSingle=-1
ioJclDefMathPrecDouble=-1
ioJclDefMathPrecExtended=2070
ioJclMapCreate=-1
ioJclMapLink=-1
ioJclMapDelete=-1
ioJclEnv=2070
ioJclEnvLibPath=2070
ioJclEnvBrowsingPath=2070
ioJclEnvDebugDCUPath=2070
ioJclMake=2070
ioJclMakeRelease=2070
ioJclMakeReleaseVClx=-1
ioJclMakeDebug=2070
ioJclMakeDebugVClx=-1
ioJclCopyHppFiles=-1
ioJclDualPackages=-1
ioJclPackages=2070
ioJclExpertsDesignPackages=2070
ioJclExpertsDLL=-1
ioJclExperts=2070
ioJclExpertDebug=2070
ioJclExpertAnalyzer=2070
ioJclExpertFavorite=2070
ioJclExpertThreadNames=-1
ioJclExpertUses=2070
ioJclExpertSimdView=2070
ioJclExpertVersionControl=-1
ioJclCopyPackagesHppFiles=-1
ioJclExcDialog=-1
ioJclExcDialogVCL=-1
ioJclExcDialogVCLSnd=-1
ioJclExcDialogCLX=-1
ioJclHelp=-1
ioJclHelpHlp=-1
ioJclHelpChm=-1
ioJclMakeDemos=-1
BPL-Path=T:\Bpl_D10
DCP-Path=D:\PROYEC~1\COMPON~1\jcl\lib\d10
[Borland Developer Studio 2006 demos]
common\containers\algorithms\AlgorithmsExample.dpr=-1
windows\peimage\ApiHookExample.dpr=-1
windows\appinst\AppInstExample.dpr=-1
windows\ConsoleExamples.dpr=-1
windows\asuser\CreateProcAsUserExample.dpr=-1
windows\delphitools\dependencyviewer\DependView.dpr=-1
windows\edisdk\EDICOMExample.dpr=-1
windows\edisdk\comserver\EDISDK.dpr=-1
common\expreval\ExprEvalExample.dpr=-1
windows\debug\framestrack\FramesTrackExample.dpr=-1
common\containers\hashing\HashingExample.dpr=-1
windows\ntfs\JEDISoftLinks.dpr=-1
windows\lanman\LanManExample.dpr=-1
common\containers\lists\ListExample.dpr=-1
windows\locales\LocalesExample.dpr=-1
windows\mapi\MapiExample.dpr=-1
common\multimedia\MidiOutExample.dpr=-1
windows\multimedia\MultiMediaExample.dpr=-1
windows\ntservice\NtSvcExample.dpr=-1
common\pcre\PCREDemo.dpr=-1
windows\peimage\PeFuncExample.dpr=-1
windows\delphitools\peviewer\PeViewer.dpr=-1
windows\mapi\ReadMailExample.dpr=-1
windows\registry\RegistryExample.dpr=-1
windows\delphitools\resfix\ResFix.dpr=-1
common\rtti\RTTIExample.dpr=-1
windows\delphitools\screenjpg\ScreenJPG.dpr=-1
windows\appinst\SingleInstExample.dpr=-1
windows\debug\sourceloc\SourceLocExample.dpr=-1
windows\debug\stacktrack\StackTrackDLLsComLibrary.dpr=-1
windows\debug\stacktrack\StackTrackDLLsDynamicLibrary.dpr=-1
windows\debug\stacktrack\StackTrackDLLsExample.dpr=-1
windows\debug\stacktrack\StackTrackDLLsStaticLibrary.dpr=-1
windows\debug\stacktrack\StackTrackExample.dpr=-1
common\graphics\StretchGraphicExample.dpr=-1
windows\structstorage\StructStorageExample.dpr=-1
windows\sysinfo\SysInfoExample.dpr=-1
common\textreader\TextReaderExample.dpr=-1
windows\debug\threadexcept\ThreadExceptExample.dpr=-1
windows\delphitools\toolhelpview\ToolHelpViewer.dpr=-1
common\containers\trees\TreeExample.dpr=-1
common\unitversioning\UnitVersioningTest.dpr=-1
common\unitversioning\UnitVersioningTestDLL.dpr=-1
windows\peimage\UnmangleNameExample.dpr=-1
windows\fileversion\VerInfoExample.dpr=-1

Binary file not shown.

View File

@ -0,0 +1 @@
This directory is intended as a common place for sample application's EXE files

16
official/1.96/clean.bat Normal file
View 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
@cd..

12
official/1.96/clean.sh Normal file
View 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

BIN
official/1.96/devtools/jpp Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,127 @@
<?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 name="JVCL" prefix="Jv" format="%p%n%e%v%t" clxPrefix="JvQ" packages="..\..\packages" incfile="..\..\common\jvcl%t.inc" incdeffile="..\..\common\jvclbase.inc">
<targets>
<target name="c5" pname="c5s" pdir="c5std"/>
<target name="c6" pname="c6p" pdir="c6per"/>
<target name="d5" pname="d5s" pdir="d5std"/>
<target name="d6" pname="d6p" pdir="d6per"/>
<target name="d7" pname="d7p" pdir="d7per"/>
<target name="d7clx" IsClx="1"/>
<target name="k3" pname="k3p" pdir="k3per" pathsep="/" IsClx="1"/>
<target name="d9" pname="d9p" pdir="d9per"/>
<target name="d10" pname="d10p" pdir="d10per"/>
</targets>
<aliases>
<alias name="Delphi" value="d5,d5s,d6,d6p,d7,d7p,d7clx,d9,d9p,d10,d10p"/>
<alias name="DelphiNoClx" value="d5,d5s,d6,d6p,d7,d7p,d9,d9p,d10,d10p"/>
<alias name="Bcb" value="c5,c5s,c6,c6p,d10,d10p"/>
<alias name="Kylix" value="k3,k3p"/>
<alias name="Windows" value="c5,c5s,c6,c6p,d5,d5s,d6,d6p,d7,d7p,d7clx,d9,d9p,d10,d10p"/>
<alias name="Linux" value="k3,k3p"/>
<alias name="allclx" value="d7clx,k3,k3p"/>
<alias name="allbutclx" value="c5,c5s,c6,c6p,d5,d5s,d6,d6p,d7,d7p,d9,d9p,d10,d10p"/>
<alias name="allbutperso" value="c5,c6,d5,d6,d7,d7clx,k3,d9,d10"/>
</aliases>
<ClxReplacements>
<replacement original="\run\Jv" replacement="\qrun\JvQ"/>
<replacement original="\design\Jv" replacement="\qdesign\JvQ"/>
<replacement original="\common\Jv" replacement="\qcommon\JvQ"/>
</ClxReplacements>
</model>
<Model Name="JCL" format="%p%n" NoLibSuffixFormat="%p%n%e%v0" prefix="Jcl" packages="..\packages" incfile="">
<targets>
<target name="c5"/>
<target name="c6"/>
<target name="d5"/>
<target name="d5.dev"/>
<target name="d6"/>
<target name="d6.dev"/>
<target name="d7"/>
<target name="d7.dev"/>
<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="k3.dev" PathSep="/"/>
</targets>
<aliases>
<alias name="Delphi" value="d5,d6,d7,d9,d10"/>
<alias name="Bcb" value="c5,c6,d10"/>
<alias name="Kylix" value="k2,k3,k3p"/>
<alias name="Windows" value="c5,c6,d5,d6,d7,d9,d10"/>
<alias name="Linux" value="k2,k3,k3p"/>
<alias name="WinDev" value="c5,c6,d5,d6,d7,d8,d9,d10,d5.dev,cs1"/>
<alias name="JclDev" value="c5,c6,d5,d6,d7,d8,d9,d10,k3,d5.dev,cs1"/>
<alias name="DelphiDev" value="d5,d6,d7,d8,d9,d10,d5.dev"/>
<alias name="WinLibSuffix" value="c6,d6,d7,d8,d9,d10,d5.dev,d6.dev,d7.dev,cs1"/>
<alias name="allLibSuffix" value="c6,d6,d7,d8,d9,d10,k3,d5.dev,d6.dev,d7.dev,k3.dev,cs1"/>
<alias name="Clx" value="c6,d6,d7,k3"/>
<alias name="ClxDev" value="c6.dev,d7.dev,k3.dev"/>
<alias name="Vcl" value="c6,d6,d7,d9,d10"/>
<alias name="VclDev" value="c6.dev,d6.dev,d7.dev"/>
<alias name="Bds" value="cs1,d8,d9,d10"/>
</aliases>
</Model>
</models>
</Configuration>

View File

@ -0,0 +1,42 @@
.*
*.~*
*~
*.bpi
*.dcp
*.dcu
*.dpu
*.ddp
*.conf
*.desk
*.hpp
template.*
*.log
CVS
jcl/build.sh
jcl/convert.sh
jcl/listtxtfiles.sh
jcl/makedist.sh
jcl/want.exe
jcl/want.xml
jcl/bin/JCL-install.ini
jcl/bin/QJediInstaller*
jcl/devtools
jcl/dist
jcl/dist-excludes
jcl/docs/Contributors.txt
jcl/docs/*.info
jcl/help
jcl/install/Makefile
jcl/install/prototypes.mak
jcl/install/BCB5-dcc32.cfg.mak
jcl/install/prototypes
jcl/lib/*.o
jcl/packages/*.dev
jcl/packages/*.mak
jcl/packages/k1
jcl/packages/k2
jcl/packages/JclDev*.bpg
jcl/source/*.bat
jcl/source/Makefile.fpc
jcl/source/common/*.int
jcl/source/prototypes

View File

@ -0,0 +1,35 @@
<HTML>
<HEAD>
<LINK REL="stylesheet" HREF="..\DclStyle.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>
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>.
<DIV CLASS="footer">Built on Friday, May 14, 2004</DIV>
</BODY>
</HTML>

View File

@ -0,0 +1,199 @@
<html>
<head>
<link rel="stylesheet" href="..\DclStyle.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 Donations">contact us</a>.
</p>
<p>
<table>
<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%>Clayton Collie</td>
<td width=25%><a href="mailto:sahfs@iafrica.com">Corrie Engelbrecht</a></td>
</tr>
<tr valign="top">
<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>
<td width=25%><a href="mailto:dhervieux@Pirel.com">David Hervieux</a></td>
</tr>
<tr valign="top">
<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>
<td width=25%><a href="mailto:dylan@intelnet.net.gt">Dylan Thomas</a></td>
</tr>
<tr valign="top">
<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>
<td width=25%>ESB Consultancy</td>
</tr>
<tr valign="top">
<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>
<td width=25%><a href="mailto:hallvard.vassbotn@c2i.net">Hallvard Vassbotn</a></td>
</tr>
<tr valign="top">
<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>
<td width=25%>Huanlin Tsai</td>
</tr>
<tr valign="top">
<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>
<td width=25%><a href="mailto:support@jazarsoft.cjb.net">James Azarja</a></td>
</tr>
<tr valign="top">
<td width=25%>Jean Debord</td>
<td width=25%>Jean-Fabien Connault</td>
<td width=25%><a href="mailto:rdm_30@users.sourceforge.net">Jean-Philippe BEMPEL</a></td>
<td width=25%>Jeroen Speldekamp</td>
</tr>
<tr valign="top">
<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>
<td width=25%><a href="mailto:j.ferraro@netcourrier.com">Julien Ferraro</a></td>
</tr>
<tr valign="top">
<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>
<td width=25%><a href="mailto:liran_shahar@hotmail.com">Liran Shahar</a></td>
</tr>
<tr valign="top">
<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>
<td width=25%><a href="mailto:edgar@ccis.adisys.com.au">Malcolm Edgar</a></td>
</tr>
<tr valign="top">
<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>
<td width=25%><a href="mailto:brakelm@bart.nl">Marcel van Brakel</a></td>
</tr>
<tr valign="top">
<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>
<td width=25%><a href="mailto:marius@caddie.co.za">Marius le Roux</a></td>
</tr>
<tr valign="top">
<td width=25%>Mark Vaughan</td>
<td width=25%>Martin Kimmings</td>
<td width=25%>Martin Kubecka</td>
<td width=25%><a href="mailto:nissl@dada.it">Massimo Maria Ghisalberti</a></td>
</tr>
<tr valign="top">
<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>
<td width=25%><a href="mailto:mschnell@bschnell.de">Michael Schnell</a></td>
</tr>
<tr valign="top">
<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>
<td width=25%><a href="mailto:nhodges@icss.net">Nick Hodges</a></td>
</tr>
<tr valign="top">
<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>
<td width=25%><a href="mailto:patrick.vanlaake@ieee.org">Patrick van Laake</a></td>
</tr>
<tr valign="top">
<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>
<td width=25%><a href="mailto:fmcmp02@kc.kzn.school.za">Peter McMahon</a></td>
</tr>
<tr valign="top">
<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>
<td width=25%>Python</td>
</tr>
<tr valign="top">
<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>
<td width=25%><a href="mailto:rhlee@nwu.edu">Robert Lee</a></td>
</tr>
<tr valign="top">
<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>
<td width=25%><a href="mailto:rvelthuis@gmx.de">Rudy Velthuis</a></td>
</tr>
<tr valign="top">
<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>
<td width=25%><a href="mailto:sfillon@ifrance.com">Stephane Fillon</a></td>
</tr>
<tr valign="top">
<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>
<td width=25%><a href="mailto:tomhahn@users.sourceforge.net">Tom Hahn</a></td>
</tr>
<tr valign="top">
<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>
<td width=25%><a href="mailto:">Your name here?</a></td>
</table>
</p>
<p>
<div class="footer">Built on 2005-03-14</div>
</p>
</body>
</html>

View File

@ -0,0 +1,115 @@
aa=aa@bitsmart.com
Alan Lloyd=alanglloyd@aol.com
Alex Denissov=
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=
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=
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=
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 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

View 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>

View 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.]

View File

@ -0,0 +1,347 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="en-us">
<head>
<title>Jedi Code Library Release 1.97</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>
<h1>Jedi Code Library</h1>
<p>Release 1.97<br>
Build 2172<br>
10-February-2006</p>
<hr><br>
<h3>News</h3>
<p>JCL release 1.97 provide an updated support for all targets (including Borland
Developer Studio 2006) and an installation of some experts in C#Builder 1 and Delphi 8.</p>
<p>As always, multiple bugs have been fixed; for detailed change logs,
use the facilities of our CVS repository at <a href="http://sourceforge.net/projects/jcl/">SourceForge.net</a>
, see below.</p>
<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 and BDS 2006); a different suffix
is added for each target. 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)&nbsp;Installation&nbsp;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. Once linked MAP files could
be deleted. These options are subnodes of the "Packages" node.</p>
<p><span style="FONT-WEIGHT: bold">Experts:</span></p>
<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 and Borland Developer Studio 2006, experts are
installed as design time packages.</p>
<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><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
&amp; BDS 2006). The packages belong to the Jedi.Jcl namespace.</p>
<hr>
<h3>Supported Tools</h3>
<p><span style="FONT-WEIGHT: bold">Run time support:</span></p>
<ul>
<li>Kylix 3</li>
</ul>
<p><span style="FONT-WEIGHT: bold">Design&nbsp;time support (only experts):</span></p>
<ul>
<li>C#Builder 1 (refer to&nbsp;installation notes below).
</li>
<li>Delphi 8.net (refer to installation notes below).</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 &amp; 6
</li>
<li>Delphi 2005 (Delphi Win32 and Delphi.net personalities)
</li>
<li>Borland Developer Studio 2006 (Delphi Win32, C++ Builder Win32, Delphi.net and C#Builder personalities)</li>
</ul>
<hr>
<h3>Notes</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/C++ installation is broken; the installer will fail when
it attempts to build the packages. Since the dreaded file open/save dialog Kylix
bug is haunting us again (wasn't it considered to be defeated as of Kernel 2.4.21?),
we are at present not investigating this further.
</li>
<li><a href="http://www.freepascal.org/"><b>Free Pascal</b></a>&nbsp;(FP)
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&nbsp;support FP versions from the 1.0 branch.</li>
</ul>
<p><span style="FONT-WEIGHT: bold">Installation on C#Builder 1 and Delphi 8:</span></p>
<ol>
<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.borland.com/">http://cc.borland.com</a>).
The item (<a href="http://codecentral.borland.com/Download.aspx?id=21333">21333</a>)
&nbsp;the native compiler to be installed in Delphi 8.
The item (<a href="http://codecentral.borland.com/Download.aspx?id=21334">21334</a>)
&nbsp;the native compiler to be installed in C#Builder 1.
These zip files have to be extracted in the products director using the standard pattern:</li>
</ol>
<pre> 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.
</pre>
<hr>
<h3>JCL Distribution content</h3>
<pre>Install.bat - Compile and run 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
examples - JCL example applications
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\useswizard - JCL uses wizard
experts\versioncontrol - Integration of TortoiseCVS and TortoiseSVN in the IDE
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
install - Installer source code
packages - JCL package sources
source - JCL source code
</pre>
<hr>
<h3>Feedback</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&nbsp;<a href="news://forums.talkto.net/jedi.jcl">news://forums.talkto.net/jedi.jcl</a>.
</li>
<li>Write to&nbsp;<a href="mailto:jcl@delphi-jedi.org">jcl@delphi-jedi.org</a>&nbsp;
or to&nbsp;<a href="mailto:jcl-testing@delphi-jedi.org">jcl-testing@delphi-jedi.org</a>&nbsp;
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://www.egroups.com/group/JEDI-JCL">http://www.egroups.com/group/JEDI-JCL</a>
You can also use this list to voice your opinion, comments or suggestions.
</li>
</ul>
<hr>
<h3>Issue Tracking</h3>
<p>An issue tracking tool can be accessed via ('Code Library' category):</p>
<p><a href="http://homepages.borland.com/jedi/issuetracker/">http://homepages.borland.com/jedi/issuetracker/</a></p>
<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>The JEDI issue tracker is based up on the Mantis BugTracker Open
Source project. More background information about it is available on its homepage&nbsp;
<a href="http://mantisbt.sourceforge.net/">http://mantisbt.sourceforge.net</a></p>
<p>Please be aware that you are allowed there to enter feature request
and code donations as well.</p>
<hr>
<h3>Debug Extension for JclDebug unit</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 -&gt; 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.
</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>
<li>Insert JCL Debug info into executable file by the IDE expert. 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. In case you use this option you need install the
JclDebugIde expert.</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 inserted into the
executable. Moreover, for Build and Build All commands dialog with detailed
information of size of these data will be displayed.</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 -&gt; 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>Library or Borland package exports</li>
</ol>
<p>It is also possible to insert JCL debug data programmatically to the
executable file by using MakeJclDbg command line tool in
jcl\examples\windows\delphitools folder. 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 ... |
Dialogs tab, Select 'Exception Dialog' or 'Exception Dialog with Send'
icon, Click OK button, Save the form (use ExceptionDialog.pas name, for
example)
</li>
<li>Check Project | Insert JCL Debug data menu item
</li>
<li>Do Project | Build</li>
</ol>
<hr>
<h3>Version control expert</h3>
<p>The JCL team is proud to release a new expert integrating version control actions
inside the Delphi/BCB/BDS IDE. It wraps <a href="http://tortoisecvs.sourceforge.net/">TortoiseCVS</a>&nbsp;
and&nbsp;<a href="http://tortoisesvn.sourceforge.net/">TortoiseSVN</a>&nbsp;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>&nbsp;
or/and&nbsp;<a href="http://tortoisesvn.sourceforge.net/">TortoiseSVN</a>&nbsp;installed on the
system to work properly. 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>
<h3>Downloads of stable sources</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:&nbsp;
<a href="http://sourceforge.net/project/showfiles.php?group_id=47514">http://sourceforge.net/project/showfiles.php?group_id=47514</a>
</p>
<hr>
<h3>Development sources</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>
<html>
<head></head>
<body>
<p>You can download snapshots of the CVS repository updated every day in the
&nbsp;<a href="http://jcl.sourceforge.net/daily">JCL daily page</a>
</p>
</body>
</html>
<p>To always have access to the most recent changes in the JCL, you
should install a CVS client (we recommend TortoiseCVS and WinCVS) and download
the CVS repository files to your computer. With the CVS client, you can update
your local repository at any time. For more instructions on how to set up CVS
and use it with JCL, see the&nbsp;<a href="http://sourceforge.net/docs/E04/">CVS instruction page</a>.
You can also access the CVS repository via the&nbsp;<a href="http://cvs.sourceforge.net/viewcvs.py/jcl/">web interface</a>.
</p>
<hr>
<h3>Getting involved in JCL development</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 http://homepages.borland.com/jedi/jcl</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 CVS repository if the fix is
satisfactory. If you report and fix a lot of bugs, you might even get developer
access to CVS so you can update the JCL files directly.</p>
</body>
</html>

View File

@ -0,0 +1,322 @@
--------------------------------------------------------------------------------
Jedi Code Library
Release 1.97
Build 2172
10-February-2006
--------------------------------------------------------------------------------
News
JCL release 1.97 provide an updated support for all targets (including Borland
Developer Studio 2006) and an installation of some experts in C#Builder 1 and
Delphi 8.
As always, multiple bugs have been fixed; for detailed change logs, use the
facilities of our CVS repository at SourceForge.net , see below.
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 and BDS 2006); a different suffix is added
for each target. 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. Once linked
MAP files could be deleted. These options are subnodes of the "Packages" node.
Experts:
- 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 and Borland Developer Studio 2006,
experts are installed as design time packages.
- 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.
- A dialog-box provides configuration options for JCL experts in the Tools menu.
.net Framework support:
A subset of JCL units was worked over to support Delphi.Net (Delphi 2005 & BDS
2006). The packages belong to the Jedi.Jcl namespace.
--------------------------------------------------------------------------------
Supported Tools
Run time support:
- Kylix 3
Design time support (only experts):
- C#Builder 1 (refer to installation notes below).
- Delphi 8.net (refer to installation notes below).
Both supports (run time and design time):
- Delphi version 5, 6, 7
- C++Builder version 5 & 6
- Delphi 2005 (Delphi Win32 and Delphi.net personalities)
- Borland Developer Studio 2006 (Delphi Win32, C++ Builder Win32, Delphi.net
and C#Builder personalities)
--------------------------------------------------------------------------------
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/C++ installation is broken; the installer will fail when it attempts to
build the packages. Since the dreaded file open/save dialog Kylix bug is
haunting us again (wasn't it considered to be defeated as of Kernel 2.4.21?),
we are at present not investigating this further.
Free Pascal (FP) 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.
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.borland.com). The item (21333) the native
compiler to be installed in Delphi 8. The item (21334) the native compiler to
be installed in C#Builder 1. These zip files have to be extracted in the
products director 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.
--------------------------------------------------------------------------------
JCL Distribution content
Install.bat - Compile and run 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
examples - JCL example applications
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\useswizard - JCL uses wizard
experts\versioncontrol - Integration of TortoiseCVS and TortoiseSVN in the IDE
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
install - Installer source code
packages - JCL package sources
source - JCL source code
--------------------------------------------------------------------------------
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://www.egroups.com/group/JEDI-JCL You can also use this list to
voice your opinion, comments or suggestions.
--------------------------------------------------------------------------------
Issue Tracking
An issue tracking tool can be accessed via ('Code Library' category):
http://homepages.borland.com/jedi/issuetracker/
The general rule is: IF YOU WANT TO GET A BUG FIXED YOU NEED TO LOG IT!
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
Please be aware that you are allowed there to enter feature request and code
donations as well.
--------------------------------------------------------------------------------
Debug Extension for JclDebug unit
The experts\debug 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:
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.
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 jcl\examples\windows\tools 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.
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.
Insert JCL Debug info into executable file by the IDE expert. 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. In case you use
this option you need install the JclDebugIde expert.
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 inserted into the executable. Moreover, for Build
and Build All commands dialog with detailed information of size of these data
will be displayed.
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.
In case you have more than one data source for an executable file by an accident
the best one is chosen in following order:
- JCL Debug data in the executable file
- JDBG file
- Borland TD32 symbols
- MAP file
Library or Borland package exports
It is also possible to insert JCL debug data programmatically to the executable
file by using MakeJclDbg command line tool in jcl\examples\windows\delphitools
folder. You can study included makefiles which uses this tool for building
delphitools examples.
To help using JclDebug exceptional stack tracking in application simple dialog
is provided in jcl\experts\debug\dialogfolder. 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.
Short description of getting the JclDebug functionality in your project:
- Close all running instances of Delphi
- Install JCL and IDE experts by the JCL Installer
- Run Delphi IDE and open your project
- Remove any TApplication.OnException handlers from your project(if any).
- Add new Exception Dialog by selecting File | New | Other ... | Dialogs tab,
- Select 'Exception Dialog' or 'Exception Dialog with Send' icon, Click OK button,
- Save the form (use ExceptionDialog.pas name, for example)
- Check Project | Insert JCL Debug data menu item
- Do Project | Build
--------------------------------------------------------------------------------
Version control expert
The JCL team is proud to release a new expert integrating version control
actions inside the Delphi/BCB/BDS IDE. It wraps TortoiseCVS and TortoiseSVN
commands in actions that can be placed on IDE toolbars and in IDE menu.
This expert requires TortoiseCVS or/and TortoiseSVN installed on the system to
work properly. Please refer to these products documentations for help about
using version control systems.
The structure of the "Jcl Version" menu can be customized in the JCL options
dialog (in the "Tools" menu).
--------------------------------------------------------------------------------
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 CVS repository updated every day in the JCL
daily page
To always have access to the most recent changes in the JCL, you should install
a CVS client (we recommend TortoiseCVS and WinCVS) and download the CVS
repository files to your computer. With the CVS client, you can update your
local repository at any time. For more instructions on how to set up CVS and use
it with JCL, see the CVS instruction page. You can also access the CVS
repository via the web interface.
--------------------------------------------------------------------------------
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.borland.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 CVS repository if
the fix is satisfactory. If you report and fix a lot of bugs, you might even get
developer access to CVS so you can update the JCL files directly.

655
official/1.96/docs/cps.html Normal file
View 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>
&nbsp;&nbsp;&nbsp;&nbsp;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] &lt;input files&gt;...<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>&nbsp; the unit has been ported to that platform</td>
</tr>
<tr>
<td
style="text-align: center; background-color: rgb(238, 238, 238);">-</td>
<td>&nbsp; the unit has not been ported to that platform</td>
</tr>
<tr>
<td
style="text-align: center; background-color: rgb(238, 238, 238);">&nbsp;(+)
<br>
</td>
<td>&nbsp; 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);">&nbsp;platform
<br>
</td>
<td>&nbsp; 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>

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

View 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 {

View 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;}

View File

@ -0,0 +1,4 @@
common\containers\performance\ContainerPerformance.dpr
windows\clr\ClrDemo.dpr
windows\tasks\TaskDemo.dpr
visclx.exc

View File

@ -0,0 +1,2 @@
windows\clr\ClrDemo.dpr
visclx.exc

View File

@ -0,0 +1,3 @@
windows\clr\ClrDemo.dpr
common\filesearch\QFileSearchDemo.dpr
visclx.exc=STD

View File

@ -0,0 +1,4 @@
common\containers\performance\ContainerPerformance.dpr
windows\clr\ClrDemo.dpr
windows\tasks\TaskDemo.dpr
visclx.exc

View File

@ -0,0 +1,3 @@
common\containers\performance\ContainerPerformance.dpr
windows\clr\ClrDemo.dpr
visclx.exc

View File

@ -0,0 +1,4 @@
common\containers\performance\ContainerPerformance.dpr
common\filesearch\QFileSearchDemo.dpr
windows\clr\ClrDemo.dpr
visclx.exc=STD

View File

@ -0,0 +1,4 @@
common\containers\performance\ContainerPerformance.dpr
common\filesearch\QFileSearchDemo.dpr
windows\clr\ClrDemo.dpr
visclx.exc=STD

View File

@ -0,0 +1,4 @@
common\containers\performance\ContainerPerformance.dpr
windows\clr\ClrDemo.dpr
windows\tasks\TaskDemo.dpr
visclx.exc

View 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>

View 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)

View File

@ -0,0 +1,2 @@
[Directories]
OutputDir=..\..\..\..\bin

View File

@ -0,0 +1,20 @@
program AlgorithmsExample;
{$I jcl.inc}
uses
{$IFDEF MSWINDOWS}
Forms,
{$ENDIF MSWINDOWS}
{$IFDEF LINUX}
QForms,
{$ENDIF LINUX}
AlgorithmsExampleMain in 'AlgorithmsExampleMain.pas' {MainForm};
{$R *.res}
begin
Application.Initialize;
Application.CreateForm(TMainForm, MainForm);
Application.Run;
end.

View File

@ -0,0 +1,251 @@
object MainForm: TMainForm
Left = 280
Top = 180
Width = 392
Height = 330
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
Scaled = False
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

View File

@ -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.

View File

@ -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

View File

@ -0,0 +1,20 @@
program HashingExample;
{$I jcl.inc}
uses
{$IFDEF MSWINDOWS}
Forms,
{$ENDIF MSWINDOWS}
{$IFDEF LINUX}
QForms,
{$ENDIF LINUX}
HashingExampleMain in 'HashingExampleMain.pas' {MainForm};
{$R *.res}
begin
Application.Initialize;
Application.CreateForm(TMainForm, MainForm);
Application.Run;
end.

View File

@ -0,0 +1,130 @@
object MainForm: TMainForm
Left = 281
Top = 201
Width = 497
Height = 279
HorzScrollBar.Range = 476
VertScrollBar.Range = 209
ActiveControl = btnIntfIntfHashMap
AutoScroll = False
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
Scaled = False
PixelsPerInch = 96
TextHeight = 13
object btnIntfIntfHashMap: TButton
Left = 16
Top = 24
Width = 89
Height = 25
Caption = 'IntfIntfHashMap'
TabOrder = 0
OnClick = btnIntfIntfHashMapClick
end
object btnIntfHashSet: TButton
Left = 120
Top = 24
Width = 75
Height = 25
Caption = 'IntfHashSet'
TabOrder = 5
OnClick = btnIntfHashSetClick
end
object btnHashMap: TButton
Left = 16
Top = 184
Width = 89
Height = 25
Caption = 'HashMap'
TabOrder = 4
OnClick = btnHashMapClick
end
object btnHashSet: TButton
Left = 120
Top = 184
Width = 75
Height = 25
Caption = 'HashSet'
TabOrder = 7
OnClick = btnHashSetClick
end
object btnStrIntfHashMap: TButton
Left = 16
Top = 64
Width = 89
Height = 25
Caption = 'StrIntfHashMap'
TabOrder = 1
OnClick = btnStrIntfHashMapClick
end
object btnIntfArraySet: TButton
Left = 216
Top = 24
Width = 75
Height = 25
Caption = 'IntfArraySet'
TabOrder = 8
OnClick = btnIntfArraySetClick
end
object btnArraySet: TButton
Left = 216
Top = 184
Width = 75
Height = 25
Caption = 'ArraySet'
TabOrder = 10
OnClick = btnArraySetClick
end
object btnStrStrHashMap: TButton
Left = 16
Top = 104
Width = 89
Height = 25
Caption = 'StrStrHashMap'
TabOrder = 2
OnClick = btnStrStrHashMapClick
end
object btnStrHashMap: TButton
Left = 16
Top = 144
Width = 89
Height = 25
Caption = 'StrHashMap'
TabOrder = 3
OnClick = btnStrHashMapClick
end
object btnStrHashSet: TButton
Left = 120
Top = 104
Width = 73
Height = 25
Caption = 'StrHashSet'
TabOrder = 6
OnClick = btnStrHashSetClick
end
object btnStrArraySet: TButton
Left = 216
Top = 104
Width = 73
Height = 25
Caption = 'StrArraySet'
TabOrder = 9
OnClick = btnStrArraySetClick
end
object memResult: TListBox
Left = 304
Top = 0
Width = 185
Height = 248
Anchors = [akTop, akRight, akBottom]
ItemHeight = 13
TabOrder = 11
end
end

View File

@ -0,0 +1,335 @@
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;
btnStrIntfHashMap: TButton;
btnIntfArraySet: TButton;
btnArraySet: TButton;
btnStrStrHashMap: TButton;
btnStrHashMap: TButton;
btnStrHashSet: TButton;
btnStrArraySet: TButton;
memResult: TListBox;
procedure btnIntfIntfHashMapClick(Sender: TObject);
procedure btnStrIntfHashMapClick(Sender: TObject);
procedure btnHashMapClick(Sender: TObject);
procedure btnIntfHashSetClick(Sender: TObject);
procedure btnHashSetClick(Sender: TObject);
procedure btnIntfArraySetClick(Sender: TObject);
procedure btnArraySetClick(Sender: TObject);
procedure btnStrStrHashMapClick(Sender: TObject);
procedure btnStrHashMapClick(Sender: TObject);
procedure btnStrHashSetClick(Sender: TObject);
procedure btnStrArraySetClick(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;
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.btnStrIntfHashMapClick(Sender: TObject);
var
Map: IJclStrIntfMap;
MyObject: IIntfMyObject;
begin
Map := TJclStrIntfHashMap.Create;
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;
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; // Free in the map (Default: OwnsObject = True)
// KeyObject.Free;
end;
end;
procedure TMainForm.btnIntfHashSetClick(Sender: TObject);
var
MySet: IJclIntfSet;
MyObject: IIntfMyObject;
It: IJclIntfIterator;
begin
MySet := TJclIntfHashSet.Create;
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;
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;
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;
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.btnStrStrHashMapClick(Sender: TObject);
var
Map: IJclStrStrMap;
It: IJclStrIterator;
begin
Map := TJclStrStrHashMap.Create;
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;
type
TLinks = class(TJclStrHashMap);
procedure TMainForm.btnStrHashMapClick(Sender: TObject);
var
Map: IJclStrMap;
MyObject: TMyObject;
//It: IJclStrIterator;
Links: TLinks;
begin
Map := TJclStrHashMap.Create;
MyObject := TMyObject.Create;
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('--------------------------------------------------------');
}
Links := TLinks.Create;
Links.PutValue('MyKey1', MyObject);
Links.Remove('MyKey1');
Links.PutValue('MyKey1', MyObject);
end;
procedure TMainForm.btnStrHashSetClick(Sender: TObject);
var
MySet: IJclStrSet;
It: IJclStrIterator;
begin
MySet := TJclStrHashSet.Create;
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.btnStrArraySetClick(Sender: TObject);
var
MySet: IJclStrSet;
It: IJclStrIterator;
I: Integer;
begin
MySet := TJclStrArraySet.Create;
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.

View File

@ -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

View File

@ -0,0 +1,21 @@
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}
begin
Application.Initialize;
Application.CreateForm(TMainForm, MainForm);
Application.Run;
end.

View File

@ -0,0 +1,120 @@
object MainForm: TMainForm
Left = 276
Top = 195
Width = 548
Height = 276
HorzScrollBar.Range = 508
VertScrollBar.Range = 217
ActiveControl = btnIntfArrayList
AutoScroll = False
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
Scaled = False
PixelsPerInch = 96
TextHeight = 13
object btnIntfArrayList: TButton
Left = 24
Top = 24
Width = 75
Height = 25
Caption = 'IntfArrayList'
TabOrder = 0
OnClick = btnIntfArrayListClick
end
object btnIntfLinkedList: TButton
Left = 152
Top = 24
Width = 75
Height = 25
Caption = 'IntfLinkedList'
TabOrder = 3
OnClick = btnIntfLinkedListClick
end
object btnIntfVector: TButton
Left = 272
Top = 24
Width = 75
Height = 25
Caption = 'IntfVector'
TabOrder = 6
OnClick = btnIntfVectorClick
end
object btnArrayList: TButton
Left = 24
Top = 120
Width = 75
Height = 25
Caption = 'ArrayList'
TabOrder = 2
OnClick = btnArrayListClick
end
object btnLinkedList: TButton
Left = 152
Top = 120
Width = 75
Height = 25
Caption = 'LinkedList'
TabOrder = 5
OnClick = btnLinkedListClick
end
object btnVector: TButton
Left = 272
Top = 120
Width = 75
Height = 25
Caption = 'Vector'
TabOrder = 8
OnClick = btnVectorClick
end
object memResult: TMemo
Left = 379
Top = 0
Width = 161
Height = 249
Align = alRight
TabOrder = 10
end
object btnMyObjectList: TButton
Left = 152
Top = 192
Width = 75
Height = 25
Caption = 'MyObjectList'
TabOrder = 9
OnClick = btnMyObjectListClick
end
object btnStrArrayList: TButton
Left = 24
Top = 72
Width = 75
Height = 25
Caption = 'StrArrayList'
TabOrder = 1
OnClick = btnStrArrayListClick
end
object btnStrLinkedList: TButton
Left = 152
Top = 72
Width = 75
Height = 25
Caption = 'StrLinkedList'
TabOrder = 4
OnClick = btnStrLinkedListClick
end
object btnStrVector: TButton
Left = 272
Top = 72
Width = 75
Height = 25
Caption = 'StrVector'
TabOrder = 7
OnClick = btnStrVectorClick
end
end

View File

@ -0,0 +1,475 @@
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;
btnStrArrayList: TButton;
btnStrLinkedList: TButton;
btnStrVector: 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 btnStrArrayListClick(Sender: TObject);
procedure btnStrLinkedListClick(Sender: TObject);
procedure btnStrVectorClick(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;
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;
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: TJclIntfVector;
MyObject: IIntfMyObject;
It: IJclIntfIterator;
I: Integer;
begin
memResult.Lines.Clear;
List := TJclIntfVector.Create;
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.Items[I]);
memResult.Lines.Add(IntToStr(MyObject.Int) + ' ' + MyObject.Str);
end;
List.Clear;
finally
It := nil; // Force release Iterator before free list !
List.Free; // No Ref Count
end;
end;
procedure TMainForm.btnArrayListClick(Sender: TObject);
var
List: IJclList;
MyObject: TMyObject;
It: IJclIterator;
begin
memResult.Lines.Clear;
List := TJclArrayList.Create;
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
It.Remove;
end;
procedure TMainForm.btnLinkedListClick(Sender: TObject);
var
List: IJclList;
MyObject: TMyObject;
It: IJclIterator;
begin
memResult.Lines.Clear;
List := TJclLinkedList.Create;
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: TJclVector;
MyObject: TMyObject;
It: IJclIterator;
I: Integer;
begin
memResult.Lines.Clear;
List := TJclVector.Create;
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.Items[I]);
memResult.Lines.Add(IntToStr(MyObject.Int) + ' ' + MyObject.Str);
end;
List.Clear;
finally
It := nil; // Force release Iterator before free list !
List.Free; // No ref count
end;
end;
procedure TMainForm.btnMyObjectListClick(Sender: TObject);
var
List: IMyObjectList;
MyObject: TMyObject;
begin
memResult.Lines.Clear;
List := TMyObjectList.Create;
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.btnStrArrayListClick(Sender: TObject);
var
List, Sub: IJclStrList;
MyArray: IJclStrArray;
It: IJclStrIterator;
I: Integer;
S: string;
begin
memResult.Lines.Clear;
List := TJclStrArrayList.Create;
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 IJclStrArray;
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.btnStrLinkedListClick(Sender: TObject);
var
List, Sub: IJclStrList;
S: string;
It: IJclStrIterator;
begin
memResult.Lines.Clear;
List := TJclStrLinkedList.Create;
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.btnStrVectorClick(Sender: TObject);
var
List: TJclStrVector;
S: string;
It: IJclStrIterator;
I: Integer;
begin
memResult.Lines.Clear;
List := TJclStrVector.Create;
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.Items[I];
memResult.Lines.Add(S);
end;
List.Clear;
finally
It := nil; // Force release Iterator before free list !
List.Free; // No Ref Count
end;
end;
end.

View File

@ -0,0 +1,134 @@
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(ACollection: IJclCollection): Boolean; overload;
procedure Clear;
function Contains(AObject: TMyObject): Boolean;
function ContainsAll(ACollection: IJclCollection): Boolean;
function Equals(ACollection: IJclCollection): Boolean;
function First: IJclIterator;
function IsEmpty: Boolean;
function Last: IJclIterator;
function Remove(AObject: TMyObject): Boolean; overload;
function RemoveAll(ACollection: IJclCollection): Boolean;
function RetainAll(ACollection: IJclCollection): Boolean;
function Size: Integer;
procedure Add(Index: Integer; AObject: TMyObject); overload;
function AddAll(Index: Integer; ACollection: IJclCollection): Boolean; overload;
function GetObject(Index: Integer): TMyObject;
function IndexOf(AObject: TMyObject): Integer;
function LastIndexOf(AObject: TMyObject): Integer;
function Remove(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(ACollection: IJclCollection): Boolean; overload;
procedure IMyObjectList.Clear = Clear;
function Contains(AObject: TMyObject): Boolean;
function IMyObjectList.ContainsAll = ContainsAll;
function IMyObjectList.Equals = Equals;
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; ACollection: IJclCollection): Boolean; overload;
function GetObject(Index: Integer): TMyObject;
function IndexOf(AObject: TMyObject): Integer;
function LastIndexOf(AObject: TMyObject): Integer;
function Remove(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(ACollection: IJclCollection): Boolean;
begin
Result := inherited AddAll(ACollection);
end;
function TMyObjectList.AddAll(Index: Integer;
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.Remove(Index: Integer): TMyObject;
begin
Result := TMyObject(inherited Remove(Index));
end;
procedure TMyObjectList.SetObject(Index: Integer; AObject: TMyObject);
begin
inherited SetObject(Index, AObject);
end;
end.

View File

@ -0,0 +1,3 @@
[Directories]
OutputDir=..\..\..\..\bin

View File

@ -0,0 +1,21 @@
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}
begin
Application.Initialize;
Application.CreateForm(TMainForm, MainForm);
Application.Run;
end.

View File

@ -0,0 +1,98 @@
object MainForm: TMainForm
Left = 402
Top = 120
AutoScroll = False
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
Scaled = False
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
DefaultColWidth = 100
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 mnJclStrStrHashMap: TMenuItem
Caption = 'TJclStrStrHashMap'
OnClick = mnJclStrStrHashMapClick
end
object N2: TMenuItem
Caption = '-'
end
object mnAllTest: TMenuItem
Caption = 'All'
OnClick = mnAllTestClick
end
end
end
end

View File

@ -0,0 +1,148 @@
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;
mnJclStrStrHashMap: TMenuItem;
N2: TMenuItem;
mnAllTest: TMenuItem;
HashPerformanceGrid: TStringGrid;
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 mnJclStrStrHashMapClick(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] := 'TJclStrStrHashMap';
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;
TestJclStrStrHashMap(HashPerformanceGrid.Cols[4]);
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.mnJclStrStrHashMapClick(Sender: TObject);
begin
TestJclStrStrHashMap(HashPerformanceGrid.Cols[4]);
end;
procedure TMainForm.Exit1Click(Sender: TObject);
begin
Close;
end;
end.

View File

@ -0,0 +1,325 @@
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 TestJclStrStrHashMap(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}
procedure TestList(Results: TStrings);
var
List: TList;
I, res: 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, Res: 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
I := 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, Res: 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
I := 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: TJclVector;
I, res: 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.Items[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 := 0 to 10 do
begin
System.Move(List.Items[10], List.Items[10 + 1],
(List.Size - 10) * SizeOf(TObject));
List.Items[10] := TObject(I);
end;
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 TestBucketList(Results: TStrings);
{$IFDEF RTL140_UP}
var
I, Res: 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, Res: Integer;
Start: TDateTime;
begin
Randomize;
Screen.Cursor := crHourGlass;
try
Start := Now;
Map := JclHashMaps.TJclHashMap.Create(256, 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;
Index: 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
Index := 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 TestJclStrStrHashMap(Results: TStrings);
var
Map: IJclStrStrMap;
I: Integer;
Res: string;
Start: TDateTime;
begin
Randomize;
Screen.Cursor := crHourGlass;
try
Start := Now;
Map := TJclStrStrHashMap.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.

View File

@ -0,0 +1,2 @@
[Directories]
OutputDir=..\..\..\..\bin

View File

@ -0,0 +1,20 @@
program TreeExample;
{$I jcl.inc}
uses
{$IFDEF MSWINDOWS}
Forms,
{$ENDIF MSWINDOWS}
{$IFDEF LINUX}
QForms,
{$ENDIF LINUX}
TreeExampleMain in 'TreeExampleMain.pas' {MainForm};
{$R *.res}
begin
Application.Initialize;
Application.CreateForm(TMainForm, MainForm);
Application.Run;
end.

View File

@ -0,0 +1,53 @@
object MainForm: TMainForm
Left = 328
Top = 237
Width = 470
Height = 295
Caption = 'Binary Tree'
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 = 72
Top = 24
Width = 81
Height = 25
Caption = 'IntfBinaryTree'
TabOrder = 1
OnClick = btnIntfArrayTreeClick
end
object memoResult: TMemo
Left = 230
Top = 0
Width = 232
Height = 268
Align = alRight
ScrollBars = ssVertical
TabOrder = 2
end
object btnArrayTree: TButton
Left = 72
Top = 152
Width = 81
Height = 25
Caption = 'BinaryTree'
TabOrder = 0
OnClick = btnArrayTreeClick
end
object btnStrBinaryTree: TButton
Left = 72
Top = 88
Width = 81
Height = 25
Caption = 'StrBinaryTree'
TabOrder = 3
OnClick = btnStrBinaryTreeClick
end
end

View File

@ -0,0 +1,142 @@
unit TreeExampleMain;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, JclBase;
type
TMainForm = class(TForm)
btnIntfArrayTree: TButton;
memoResult: TMemo;
btnArrayTree: TButton;
btnStrBinaryTree: TButton;
procedure btnIntfArrayTreeClick(Sender: TObject);
procedure btnArrayTreeClick(Sender: TObject);
procedure btnStrBinaryTreeClick(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(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;
if Tree.Contains(TIntfInteger.Create(15)) 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
It.Remove;
end;
procedure TMainForm.btnArrayTreeClick(Sender: TObject);
var
Tree: IJclTree;
I: Integer;
It: IJclIterator;
begin
memoResult.Lines.Clear;
Tree := TJclBinaryTree.Create(JclAlgorithms.IntegerCompare);
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.btnStrBinaryTreeClick(Sender: TObject);
var
Tree: IJclStrTree;
I: Integer;
It: IJclStrIterator;
begin
memoResult.Lines.Clear;
Tree := TJclStrBinaryTree.Create(JclAlgorithms.StrSimpleCompare);
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.

View File

@ -0,0 +1,3 @@
[Directories]
OutputDir=..\..\..\bin

View File

@ -0,0 +1,16 @@
program ExprEvalExample;
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}
begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.

View 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.

View File

@ -0,0 +1,71 @@
object Form1: TForm1
Left = 222
Top = 107
Width = 487
Height = 357
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

View File

@ -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.

View File

@ -0,0 +1,2 @@
[Directories]
OutputDir=..\..\..\bin

View File

@ -0,0 +1,16 @@
program QExprEvalExample;
uses
QForms,
JclExprEval in '..\..\..\source\common\JclExprEval.pas',
JclStrHashMap in '..\..\..\source\common\JclStrHashMap.pas',
ExprEvalExampleLogic in 'ExprEvalExampleLogic.pas',
QExprEvalExampleMain in 'QExprEvalExampleMain.pas' {Form1};
{$R *.RES}
begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.

View File

@ -0,0 +1,62 @@
unit QExprEvalExampleMain;
interface
uses
Types, SysUtils, Classes,
QGraphics, QControls, QForms, QStdCtrls,
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: TEvaluator;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.XFM}
uses
ExprEvalExampleLogic;
procedure TForm1.FormCreate(Sender: TObject);
begin
FEvaluator := TEvaluator.Create;
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, ExpressionInput.Text));
end;
procedure TForm1.FuncListClick(Sender: TObject);
begin
ExpressionInput.Text := ExpressionInput.Text + FuncList.Text;
ActiveControl := ExpressionInput;
ExpressionInput.SelStart := Length(ExpressionInput.Text);
end;
end.

View File

@ -0,0 +1,71 @@
object Form1: TForm1
Left = 222
Top = 107
Width = 487
Height = 357
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 = 44
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

View File

@ -0,0 +1,2 @@
[Directories]
OutputDir=../../../bin

View File

@ -0,0 +1,13 @@
program QFileSearchDemo;
uses
QForms,
QFileSearchDemoMain in 'QFileSearchDemoMain.pas' {FileSearchForm};
{$R *.res}
begin
Application.Initialize;
Application.CreateForm(TFileSearchForm, FileSearchForm);
Application.Run;
end.

View File

@ -0,0 +1,353 @@
object FileSearchForm: TFileSearchForm
Left = 258
Top = 301
Width = 787
Height = 508
HorzScrollBar.Range = 378
VertScrollBar.Range = 252
ActiveControl = StartBtn
AutoScroll = False
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
Position = poDefaultPosOnly
Scaled = False
OnCreate = FormCreate
OnDestroy = FormDestroy
PixelsPerInch = 96
TextHeight = 13
object StatusBar: TStatusBar
Left = 0
Top = 460
Width = 779
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 = 779
Height = 279
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
OnColumnClick = FileListColumnClick
end
object Panel1: TPanel
Left = 0
Top = 0
Width = 779
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
end
object DetailsPanel: TPanel
Left = 0
Top = 49
Width = 779
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
end

View File

@ -0,0 +1,280 @@
//
// Robert Rossmair, 2003
//
unit QFileSearchDemoMain;
{$INCLUDE jcl.inc}
interface
uses
SysUtils, Classes,
Types, Qt, QGraphics, QStdCtrls, QControls, QExtCtrls, QComCtrls, QForms, QMask,
JclStrings, JclFileUtils, QDialogs;
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 FileListColumnClick(Sender: TObject; Column: TListColumn);
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;
FColumnIndex: Integer;
FTaskID: TFileSearchTaskID;
FT0: TDateTime;
FSortDirection: TSortDirection;
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 *.xfm}
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;
S: string;
begin
ListItem := FileList.Items.Add;
with ListItem do
begin
Caption := Directory + FileInfo.Name;
Str(GetSizeOfFile(FileInfo):13, S);
SubItems.Add(S);
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]);
FileList.Sorted := True;
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;
FileList.Sorted := False;
FT0 := Now;
FTaskID := FFileEnumerator.ForEach(AddFile);
end;
procedure TFileSearchForm.StopBtnClick(Sender: TObject);
begin
FFileEnumerator.StopTask(FTaskID);
end;
procedure TFileSearchForm.FileListColumnClick(Sender: TObject; Column: TListColumn);
const
SD: array[TSortDirection] of TSortDirection = (sdDescending, sdAscending);
begin
if FColumnIndex = Column.Index then
begin
FSortDirection := SD[FSortDirection];
FileList.SortDirection := FSortDirection;
end
else
FColumnIndex := Column.Index;
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.

View File

@ -0,0 +1,378 @@
object FileSearchForm: TFileSearchForm
Left = 267
Top = 302
Width = 787
Height = 509
VertScrollBar.Range = 252
HorzScrollBar.Range = 378
ActiveControl = StartBtn
AutoScroll = False
Caption = 'File Search Demo (TJclFileEnumerator)'
Color = clButton
Constraints.MinHeight = 279
Constraints.MinWidth = 647
Font.Color = clBlack
Font.Height = 12
Font.Name = 'MS Sans Serif'
Font.Pitch = fpVariable
Font.Style = []
Font.Weight = 40
ParentFont = False
Position = poDefaultPosOnly
Scaled = False
OnCreate = FormCreate
OnDestroy = FormDestroy
PixelsPerInch = 96
object StatusBar: TStatusBar
Left = 0
Top = 488
Width = 787
Height = 21
Panels = <
item
Alignment = taRightJustify
Width = 100
end
item
Alignment = taRightJustify
Width = 100
end
item
end>
end
object FileList: TListView
Left = 0
Top = 181
Width = 787
Height = 307
Align = alClient
Columns = <
item
Caption = 'File'
Tag = 0
Width = 360
end
item
Alignment = taRightJustify
AutoSize = True
Caption = 'Size'
Tag = 0
Width = 50
end
item
Alignment = taCenter
AutoSize = True
Caption = 'Time'
Tag = 0
Width = 50
end
item
Caption = 'Attr.'
Tag = 0
Width = 60
end
item
Caption = 'Owner'
Tag = 0
Width = 100
end
item
Caption = 'Group'
Tag = 0
Width = 50
end>
ReadOnly = True
ShowColumnSortIndicators = True
Sorted = True
TabOrder = 1
ViewStyle = vsReport
OnColumnClick = FileListColumnClick
end
object Panel1: TPanel
Left = 0
Top = 0
Width = 787
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 = 47
Height = 25
Caption = 'Start'
TabOrder = 2
OnClick = StartBtnClick
end
object StopBtn: TButton
Left = 576
Top = 10
Width = 47
Height = 25
Caption = 'Stop'
Enabled = False
TabOrder = 3
OnClick = StopBtnClick
end
object DetailsBtn: TButton
Left = 692
Top = 10
Width = 77
Height = 25
Caption = 'More >>'
TabOrder = 5
OnClick = DetailsBtnClick
end
object FileMaskInput: TEdit
Left = 40
Top = 10
Width = 169
Height = 21
TabOrder = 0
Text = '*'
end
object SaveBtn: TButton
Left = 628
Top = 10
Width = 47
Height = 25
Caption = 'Save...'
Enabled = False
TabOrder = 4
OnClick = SaveBtnClick
end
end
object DetailsPanel: TPanel
Left = 0
Top = 49
Width = 787
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'
Checked = True
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'
Checked = True
State = cbGrayed
TabOrder = 4
OnClick = cbFileAttributeClick
end
object cbNormal: TCheckBox
Tag = 128
Left = 136
Top = 88
Width = 89
Height = 21
AllowGrayed = True
Caption = 'Normal'
Checked = True
State = cbGrayed
TabOrder = 6
OnClick = cbFileAttributeClick
end
object cbArchive: TCheckBox
Tag = 32
Left = 136
Top = 16
Width = 89
Height = 21
AllowGrayed = True
Caption = 'Archive'
Checked = True
State = cbGrayed
TabOrder = 5
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'
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
FilterIndex = 0
Height = 0
Title = 'Save'
Width = 0
Left = 740
Top = 36
end
end

View File

@ -0,0 +1,4 @@
[Directories]
OutputDir=../../../bin
Conditionals=VisualCLX;MATH_SINGLE_PRECISION

View File

@ -0,0 +1,15 @@
program QClipLineDemo;
{%ToDo 'ClipLineDemo.todo'}
uses
QStyle,
QForms,
QClipLineDemoMain in 'QClipLineDemoMain.pas' {Form1};
{$R *.res}
begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.

View 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

View File

@ -0,0 +1,94 @@
unit QClipLineDemoMain;
{$I jcl.inc}
interface
uses
SysUtils, Types, Classes,
{$IFDEF MSWINDOWS}
Windows,
{$ENDIF}
{$IFDEF VisualCLX}
Qt, QGraphics, QControls, QForms, QStdCtrls, QExtCtrls, QTypes, JclQGraphUtils,
{$ENDIF VisualCLX}
{$IFDEF VCL}
Graphics, ExtCtrls, Forms, JclGraphUtils,
{$ENDIF VCL}
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
{$IFDEF VisualCLX}
{$R *.xfm}
{$ELSE}
{$R *.dfm}
{$ENDIF}
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.

View File

@ -0,0 +1,19 @@
object Form1: TForm1
Left = 198
Top = 147
Width = 400
Height = 400
Caption = 'ClipLine Demo'
Color = 15790320
OnCreate = FormCreate
OnPaint = FormPaint
PixelsPerInch = 96
TextHeight = 13
TextWidth = 6
object Timer1: TTimer
Interval = 3000
OnTimer = Timer1Timer
Left = 32
Top = 24
end
end

View File

@ -0,0 +1,218 @@
object StretchDemoForm: TStretchDemoForm
Left = 255
Top = 208
Width = 788
Height = 609
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
Scaled = False
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

View File

@ -0,0 +1,510 @@
//
// 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}
{$IFDEF VCL}
Graphics, Controls, Forms,
Dialogs, ComCtrls, StdCtrls, Menus, ExtCtrls, ExtDlgs,
JclGraphics,
{$ENDIF VCL}
{$IFDEF VisualCLX}
Qt, QGraphics, QMenus, QTypes, QExtCtrls, QComCtrls, QStdCtrls,
QControls, QForms, QDialogs,
JclQGraphics,
{$ENDIF VisualCLX}
{$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.

View File

@ -0,0 +1,3 @@
[Directories]
OutputDir=..\..\..\bin

View File

@ -0,0 +1,13 @@
program StretchGraphicExample;
uses
Forms,
StretchGraphicDemoMain in 'StretchGraphicDemoMain.pas' {StretchDemoForm};
{$R *.res}
begin
Application.Initialize;
Application.CreateForm(TStretchDemoForm, StretchDemoForm);
Application.Run;
end.

View File

@ -0,0 +1,3 @@
[Directories]
OutputDir=..\..\..\bin

View File

@ -0,0 +1,15 @@
program MidiOutExample;
uses
Forms,
MidiOutExampleMain in 'MidiOutExampleMain.pas' {Keyboard},
MidiOutExampleTuningDlg in 'MidiOutExampleTuningDlg.pas' {TuningDialog};
{$R *.RES}
begin
Application.Initialize;
Application.CreateForm(TKeyboard, Keyboard);
Application.CreateForm(TTuningDialog, TuningDialog);
Application.Run;
end.

View File

@ -0,0 +1,489 @@
object Keyboard: TKeyboard
Left = 145
Top = 347
Width = 528
Height = 243
HorzScrollBar.Range = 517
VertScrollBar.Range = 209
ActiveControl = MidiProgramNum
AutoScroll = False
Caption = 'MIDI 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
Scaled = False
ShowHint = True
OnCreate = FormCreate
PixelsPerInch = 96
TextHeight = 13
object Key48: TSpeedButton
Tag = 48
Left = 4
Top = 36
Width = 21
Height = 97
AllowAllUp = True
GroupIndex = 48
OnMouseDown = KeyMouseDown
end
object Key50: TSpeedButton
Tag = 50
Left = 24
Top = 36
Width = 21
Height = 97
AllowAllUp = True
GroupIndex = 50
OnMouseDown = KeyMouseDown
end
object Key52: TSpeedButton
Tag = 52
Left = 44
Top = 36
Width = 21
Height = 97
AllowAllUp = True
GroupIndex = 52
OnMouseDown = KeyMouseDown
end
object Key53: TSpeedButton
Tag = 53
Left = 64
Top = 36
Width = 21
Height = 97
AllowAllUp = True
GroupIndex = 53
OnMouseDown = KeyMouseDown
end
object Key49: TSpeedButton
Tag = 49
Left = 18
Top = 36
Width = 13
Height = 61
AllowAllUp = True
GroupIndex = 49
OnMouseDown = KeyMouseDown
end
object Key51: TSpeedButton
Tag = 51
Left = 38
Top = 36
Width = 13
Height = 61
AllowAllUp = True
GroupIndex = 51
OnMouseDown = KeyMouseDown
end
object Key55: TSpeedButton
Tag = 55
Left = 84
Top = 36
Width = 21
Height = 97
AllowAllUp = True
GroupIndex = 55
OnMouseDown = KeyMouseDown
end
object Key57: TSpeedButton
Tag = 57
Left = 104
Top = 36
Width = 21
Height = 97
AllowAllUp = True
GroupIndex = 57
OnMouseDown = KeyMouseDown
end
object Key59: TSpeedButton
Tag = 59
Left = 124
Top = 36
Width = 21
Height = 97
AllowAllUp = True
GroupIndex = 59
OnMouseDown = KeyMouseDown
end
object Key54: TSpeedButton
Tag = 54
Left = 78
Top = 36
Width = 13
Height = 61
AllowAllUp = True
GroupIndex = 54
OnMouseDown = KeyMouseDown
end
object Key56: TSpeedButton
Tag = 56
Left = 98
Top = 36
Width = 13
Height = 61
AllowAllUp = True
GroupIndex = 56
OnMouseDown = KeyMouseDown
end
object Key58: TSpeedButton
Tag = 58
Left = 118
Top = 36
Width = 13
Height = 61
AllowAllUp = True
GroupIndex = 58
OnMouseDown = KeyMouseDown
end
object Key60: TSpeedButton
Tag = 60
Left = 144
Top = 36
Width = 21
Height = 97
AllowAllUp = True
GroupIndex = 60
OnMouseDown = KeyMouseDown
end
object Key62: TSpeedButton
Tag = 62
Left = 164
Top = 36
Width = 21
Height = 97
AllowAllUp = True
GroupIndex = 62
OnMouseDown = KeyMouseDown
end
object Key64: TSpeedButton
Tag = 64
Left = 184
Top = 36
Width = 21
Height = 97
AllowAllUp = True
GroupIndex = 64
OnMouseDown = KeyMouseDown
end
object Key65: TSpeedButton
Tag = 65
Left = 204
Top = 36
Width = 21
Height = 97
AllowAllUp = True
GroupIndex = 65
OnMouseDown = KeyMouseDown
end
object Key61: TSpeedButton
Tag = 61
Left = 158
Top = 36
Width = 13
Height = 61
AllowAllUp = True
GroupIndex = 61
OnMouseDown = KeyMouseDown
end
object Key63: TSpeedButton
Tag = 63
Left = 178
Top = 36
Width = 13
Height = 61
AllowAllUp = True
GroupIndex = 63
OnMouseDown = KeyMouseDown
end
object Key67: TSpeedButton
Tag = 67
Left = 224
Top = 36
Width = 21
Height = 97
AllowAllUp = True
GroupIndex = 67
OnMouseDown = KeyMouseDown
end
object Key69: TSpeedButton
Tag = 69
Left = 244
Top = 36
Width = 21
Height = 97
AllowAllUp = True
GroupIndex = 69
OnMouseDown = KeyMouseDown
end
object Key71: TSpeedButton
Tag = 71
Left = 264
Top = 36
Width = 21
Height = 97
AllowAllUp = True
GroupIndex = 71
OnMouseDown = KeyMouseDown
end
object Key66: TSpeedButton
Tag = 66
Left = 218
Top = 36
Width = 13
Height = 61
AllowAllUp = True
GroupIndex = 66
OnMouseDown = KeyMouseDown
end
object Key68: TSpeedButton
Tag = 68
Left = 238
Top = 36
Width = 13
Height = 61
AllowAllUp = True
GroupIndex = 68
OnMouseDown = KeyMouseDown
end
object Key70: TSpeedButton
Tag = 70
Left = 258
Top = 36
Width = 13
Height = 61
AllowAllUp = True
GroupIndex = 70
OnMouseDown = KeyMouseDown
end
object Key72: TSpeedButton
Tag = 72
Left = 284
Top = 36
Width = 21
Height = 97
AllowAllUp = True
GroupIndex = 72
OnMouseDown = KeyMouseDown
end
object Key74: TSpeedButton
Tag = 74
Left = 304
Top = 36
Width = 21
Height = 97
AllowAllUp = True
GroupIndex = 74
OnMouseDown = KeyMouseDown
end
object Key76: TSpeedButton
Tag = 76
Left = 324
Top = 36
Width = 21
Height = 97
AllowAllUp = True
GroupIndex = 76
OnMouseDown = KeyMouseDown
end
object Key77: TSpeedButton
Tag = 77
Left = 344
Top = 36
Width = 21
Height = 97
AllowAllUp = True
GroupIndex = 77
OnMouseDown = KeyMouseDown
end
object Key73: TSpeedButton
Tag = 73
Left = 298
Top = 36
Width = 13
Height = 61
AllowAllUp = True
GroupIndex = 73
OnMouseDown = KeyMouseDown
end
object Key75: TSpeedButton
Tag = 75
Left = 318
Top = 36
Width = 13
Height = 61
AllowAllUp = True
GroupIndex = 75
OnMouseDown = KeyMouseDown
end
object Key79: TSpeedButton
Tag = 79
Left = 364
Top = 36
Width = 21
Height = 97
AllowAllUp = True
GroupIndex = 79
OnMouseDown = KeyMouseDown
end
object Key81: TSpeedButton
Tag = 81
Left = 384
Top = 36
Width = 21
Height = 97
AllowAllUp = True
GroupIndex = 81
OnMouseDown = KeyMouseDown
end
object Key83: TSpeedButton
Tag = 83
Left = 404
Top = 36
Width = 21
Height = 97
AllowAllUp = True
GroupIndex = 83
OnMouseDown = KeyMouseDown
end
object Key78: TSpeedButton
Tag = 78
Left = 358
Top = 36
Width = 13
Height = 61
AllowAllUp = True
GroupIndex = 78
OnMouseDown = KeyMouseDown
end
object Key80: TSpeedButton
Tag = 80
Left = 378
Top = 36
Width = 13
Height = 61
AllowAllUp = True
GroupIndex = 80
OnMouseDown = KeyMouseDown
end
object Key82: TSpeedButton
Tag = 82
Left = 398
Top = 36
Width = 13
Height = 61
AllowAllUp = True
GroupIndex = 82
OnMouseDown = KeyMouseDown
end
object Label1: TLabel
Left = 440
Top = 36
Width = 75
Height = 13
Caption = 'MIDI Program #'
end
object Label2: TLabel
Left = 8
Top = 12
Width = 43
Height = 13
Caption = 'MIDI Out'
end
object Label3: TLabel
Left = 8
Top = 144
Width = 58
Height = 13
Caption = 'Pitch Wheel'
FocusControl = PitchBender
end
object Label4: TLabel
Left = 8
Top = 184
Width = 58
Height = 13
Caption = 'Mod. Wheel'
FocusControl = ModWheel
end
object MidiProgramNum: TSpinEdit
Left = 440
Top = 60
Width = 77
Height = 22
MaxValue = 127
MinValue = 0
TabOrder = 0
Value = 0
OnChange = MidiProgramNumChange
end
object PitchBender: TTrackBar
Left = 72
Top = 136
Width = 441
Height = 33
Hint = 'Pitch bender'
Max = 8191
Min = -8192
Orientation = trHorizontal
PageSize = 256
Frequency = 2048
Position = 0
SelEnd = 0
SelStart = 0
TabOrder = 1
TickMarks = tmBottomRight
TickStyle = tsAuto
OnChange = PitchBenderChange
end
object btnAllNotesOff: TButton
Left = 440
Top = 104
Width = 75
Height = 25
Caption = '&All Notes Off'
TabOrder = 2
OnClick = btnAllNotesOffClick
end
object cbMidiOutSelect: TComboBox
Left = 68
Top = 8
Width = 253
Height = 21
Style = csDropDownList
ItemHeight = 13
TabOrder = 3
OnChange = cbMidiOutSelectChange
end
object ModWheel: TTrackBar
Left = 73
Top = 176
Width = 440
Height = 33
Hint = 'Pitch bender'
Max = 16383
Orientation = trHorizontal
PageSize = 256
Frequency = 2048
Position = 0
SelEnd = 0
SelStart = 0
TabOrder = 4
TickMarks = tmBottomRight
TickStyle = tsAuto
OnChange = ModWheelChange
end
object KeyMenu: TPopupMenu
Left = 336
Top = 8
object TuningItem: TMenuItem
Caption = 'Tuning...'
OnClick = TuningItemClick
end
end
end

View File

@ -0,0 +1,194 @@
//
// by Robert Rossmair, June 5 2002
//
unit MidiOutExampleMain;
interface
uses
SysUtils, Classes, Controls, Forms, Menus, StdCtrls, ComCtrls, Buttons, Spin,
JclMIDI;
type
TKeyboard = class(TForm)
Key48: TSpeedButton;
Key49: TSpeedButton;
Key51: TSpeedButton;
Key50: TSpeedButton;
Key55: TSpeedButton;
Key54: TSpeedButton;
Key53: TSpeedButton;
Key52: TSpeedButton;
Key58: TSpeedButton;
Key56: TSpeedButton;
Key59: TSpeedButton;
Key57: TSpeedButton;
MidiProgramNum: TSpinEdit;
Label1: TLabel;
KeyMenu: TPopupMenu;
TuningItem: TMenuItem;
Key72: TSpeedButton;
Key74: TSpeedButton;
Key76: TSpeedButton;
Key77: TSpeedButton;
Key73: TSpeedButton;
Key75: TSpeedButton;
Key79: TSpeedButton;
Key81: TSpeedButton;
Key83: TSpeedButton;
Key78: TSpeedButton;
Key80: TSpeedButton;
Key82: TSpeedButton;
Key60: TSpeedButton;
Key62: TSpeedButton;
Key64: TSpeedButton;
Key65: TSpeedButton;
Key61: TSpeedButton;
Key63: TSpeedButton;
Key67: TSpeedButton;
Key69: TSpeedButton;
Key71: TSpeedButton;
Key66: TSpeedButton;
Key68: TSpeedButton;
Key70: TSpeedButton;
PitchBender: TTrackBar;
btnAllNotesOff: TButton;
cbMidiOutSelect: TComboBox;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
ModWheel: TTrackBar;
procedure FormCreate(Sender: TObject);
procedure KeyMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure KeyMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure MidiProgramNumChange(Sender: TObject);
procedure TuningItemClick(Sender: TObject);
procedure PitchBenderChange(Sender: TObject);
procedure KeyClick(Sender: TObject);
procedure btnAllNotesOffClick(Sender: TObject);
procedure cbMidiOutSelectChange(Sender: TObject);
procedure ModWheelChange(Sender: TObject);
private
FMidiOut: IJclMidiOut;
FChannel: TMidiChannel;
Keys: array[TMidiNote] of TSpeedButton;
procedure InitKeyboard;
procedure AllNotesOff;
end;
var
Keyboard: TKeyboard;
implementation
uses MidiOutExampleTuningDlg;
{$R *.dfm}
procedure TKeyboard.FormCreate(Sender: TObject);
begin
FChannel := 1;
GetMidiOutputs(cbMidiOutSelect.Items);
cbMidiOutSelect.ItemIndex := 0;
cbMidiOutSelectChange(Self);
InitKeyboard;
end;
procedure TKeyboard.InitKeyboard;
var
Note: TMidiNote;
begin
for Note := Low(Keys) to High(Keys) do
begin
Keys[Note] := FindComponent(Format('Key%d', [Note])) as TSpeedButton;
if Keys[Note] <> nil then
with Keys[Note] do
begin
PopupMenu := KeyMenu;
Hint := Format('MIDI Note #%d'#13#10'%s', [Tag, MidiNoteToStr(Tag)]);
end;
end;
end;
procedure TKeyboard.AllNotesOff;
var
Note: TMidiNote;
begin
if Assigned(FMidiOut) then
FMidiOut.SwitchAllNotesOff(FChannel);
for Note := Low(Note) to High(Note) do
if Assigned(Keys[Note]) then
Keys[Note].Down := False;
end;
procedure TKeyboard.KeyMouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
if Button = mbLeft then
if (Sender as TSpeedButton).Down then
FMidiOut.SendNoteOff(FChannel, TComponent(Sender).Tag, 127)
else
FMidiOut.SendNoteOn(FChannel, TComponent(Sender).Tag, 127);
end;
procedure TKeyboard.KeyMouseUp(
Sender: TObject;
Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if Button = mbLeft then
FMidiOut.SendNoteOff(FChannel, TComponent(Sender).Tag, 127);
end;
procedure TKeyboard.MidiProgramNumChange(Sender: TObject);
begin
FMidiOut.SendProgramChange(FChannel, MidiProgramNum.Value);
end;
procedure TKeyboard.TuningItemClick(Sender: TObject);
begin
with TuningDialog do
begin
MIDIKey.Value := KeyMenu.PopupComponent.Tag;
if ShowModal = mrOK then
FMidiOut.SendSingleNoteTuningChange(0, 0, [MidiSingleNoteTuningData(MIDIKey.Value, MIDIFrequency)]);
end;
end;
procedure TKeyboard.PitchBenderChange(Sender: TObject);
begin
FMidiOut.SendPitchWheelChange(FChannel, PitchBender.Position + MidiPitchWheelCenter);
end;
procedure TKeyboard.ModWheelChange(Sender: TObject);
begin
FMidiOut.SendModulationWheelChangeHR(FChannel, ModWheel.Position);
end;
procedure TKeyboard.KeyClick(Sender: TObject);
begin
with Sender as TSpeedButton do
begin
if Down then
FMidiOut.SendNoteOn(FChannel, TComponent(Sender).Tag, 127)
else
FMidiOut.SendNoteOff(FChannel, TComponent(Sender).Tag, 127);
end;
end;
procedure TKeyboard.btnAllNotesOffClick(Sender: TObject);
begin
AllNotesOff;
end;
procedure TKeyboard.cbMidiOutSelectChange(Sender: TObject);
begin
AllNotesOff;
FMidiOut := MidiOut(cbMidiOutSelect.ItemIndex);
FMidiOut.SendProgramChange(FChannel, MidiProgramNum.Value);
end;
end.

View File

@ -0,0 +1,102 @@
object TuningDialog: TTuningDialog
Left = 245
Top = 108
BorderStyle = bsDialog
Caption = 'Tuning'
ClientHeight = 177
ClientWidth = 313
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
OldCreateOrder = True
Position = poScreenCenter
PixelsPerInch = 96
TextHeight = 13
object Bevel1: TBevel
Left = 8
Top = 8
Width = 297
Height = 117
Shape = bsFrame
end
object MIDIFreqLabel: TLabel
Left = 36
Top = 56
Width = 110
Height = 13
Caption = '&MIDI relative frequency'
end
object FreqLabel: TLabel
Left = 36
Top = 84
Width = 84
Height = 13
Caption = 'Frequency [Hertz]'
end
object MIDIKeyLabel: TLabel
Left = 36
Top = 28
Width = 81
Height = 13
Caption = 'MIDI key number'
end
object NoteLabel: TLabel
Left = 224
Top = 28
Width = 49
Height = 13
Caption = 'NoteLabel'
end
object OKBtn: TButton
Left = 79
Top = 140
Width = 75
Height = 25
Caption = 'OK'
Default = True
ModalResult = 1
TabOrder = 0
end
object CancelBtn: TButton
Left = 159
Top = 140
Width = 75
Height = 25
Cancel = True
Caption = 'Cancel'
ModalResult = 2
TabOrder = 1
end
object MIDIFreq: TEdit
Left = 156
Top = 52
Width = 121
Height = 21
TabOrder = 2
OnChange = MIDIFreqChange
OnExit = MIDIFreqExit
end
object FreqHertz: TEdit
Left = 156
Top = 80
Width = 121
Height = 21
TabOrder = 3
OnChange = FreqHertzChange
OnExit = FreqHertzExit
end
object MIDIKey: TSpinEdit
Left = 156
Top = 24
Width = 53
Height = 22
MaxValue = 127
MinValue = 0
TabOrder = 4
Value = 0
OnChange = MIDIKeyChange
end
end

View File

@ -0,0 +1,170 @@
//
// Robert Rossmair, 2002
//
unit MidiOutExampleTuningDlg;
{$I jcl.inc}
interface
uses
Windows, SysUtils, Classes, Graphics, Forms, Controls, StdCtrls,
Buttons, ExtCtrls, Spin,
JclMath, JclMidi;
type
TTuningDialog = class(TForm)
OKBtn: TButton;
CancelBtn: TButton;
Bevel1: TBevel;
MIDIFreq: TEdit;
FreqHertz: TEdit;
MIDIFreqLabel: TLabel;
FreqLabel: TLabel;
MIDIKey: TSpinEdit;
MIDIKeyLabel: TLabel;
NoteLabel: TLabel;
procedure MIDIKeyChange(Sender: TObject);
procedure MIDIFreqChange(Sender: TObject);
procedure FreqHertzChange(Sender: TObject);
procedure MIDIFreqExit(Sender: TObject);
procedure FreqHertzExit(Sender: TObject);
private
FInMIDIFreqChange: Boolean;
FInFreqHertzChange: Boolean;
FChangingFrequency: Boolean;
FChangingMidiFrequency: Boolean;
FFrequency: Single;
FMidiFrequency: Single;
procedure SetFrequency(Value: Single);
procedure SetMidiFrequency(Value: Single);
public
property Frequency: Single read FFrequency write SetFrequency; // Hertz
property MidiFrequency: Single read FMidiFrequency write SetMidiFrequency;
end;
var
TuningDialog: TTuningDialog;
implementation
{$R *.dfm}
const
HalftonesPerOctave = 12;
MiddleA = 440.0; // Hertz
MidiMiddleA = 69; // A3 = 440 Hertz
Digits = 6;
MIDIFreqMax = 127.99993896;
FreqHertzMin = 8.17579892;
FreqHertzMax = 13289.70346552;
function Hertz(MIDINote: Extended): Extended;
begin
Hertz := TwoToY((MIDINote - MidiMiddleA) / HalftonesPerOctave) * MiddleA;
end;
function MIDINote(Hertz: Extended): Extended;
begin
if Hertz < 1.0 then
MIDINote := Low(Integer)
else
MIDINote := LogBase2(Hertz / MiddleA) * HalftonesPerOctave + MidiMiddleA;
end;
procedure TTuningDialog.MIDIKeyChange(Sender: TObject);
begin
MIDIFrequency := MIDIKey.Value;
NoteLabel.Caption := MidiNoteToStr(MIDIKey.Value);
end;
procedure TTuningDialog.MIDIFreqChange(Sender: TObject);
var
F: Extended;
begin
if FInFreqHertzChange or (MIDIFreq.Text = '') then
Exit;
FInMIDIFreqChange := True;
try
{$IFDEF COMPILER6_UP}
if TryStrToFloat(MidiFreq.Text, F) then
{$ELSE}
if TextToFloat(PChar(MidiFreq.Text), F, fvExtended) then
{$ENDIF COMPILER6_UP}
MidiFrequency := F;
finally
FInMIDIFreqChange := False;
end;
end;
procedure TTuningDialog.FreqHertzChange(Sender: TObject);
var
F: Extended;
begin
if FInMIDIFreqChange or (FreqHertz.Text = '') then
Exit;
FInFreqHertzChange := True;
try
{$IFDEF COMPILER6_UP}
if TryStrToFloat(FreqHertz.Text, F) then
{$ELSE}
if TextToFloat(PChar(FreqHertz.Text), F, fvExtended) then
{$ENDIF COMPILER6_UP}
Frequency := F;
finally
FInFreqHertzChange := False;
end;
end;
procedure TTuningDialog.SetFrequency(Value: Single);
begin
if FChangingFrequency or (Value = Frequency) then
Exit;
FChangingFrequency := True;
try
if Value < FreqHertzMin then
Value := FreqHertzMin
else
if Value > FreqHertzMax then
Value := FreqHertzMax;
FFrequency := Value;
if not FInFreqHertzChange then
FreqHertz.Text := FloatToStrF(Value, ffFixed, 9, Digits);
MidiFrequency := MIDINote(Value);
finally
FChangingFrequency := False;
end;
end;
procedure TTuningDialog.SetMidiFrequency(Value: Single);
begin
if FChangingMidiFrequency then
// or (Value = MidiFrequency) then
Exit;
if Value < 0 then
Value := 0
else
if Value > MidiFreqMax then
Value := MidiFreqMax;
FChangingMidiFrequency := True;
try
FMidiFrequency := Value;
if not FInMidiFreqChange then
MIDIFreq.Text := FloatToStrF(Value, ffFixed, 9, Digits);
Frequency := Hertz(Value);
finally
FChangingMidiFrequency := False;
end;
end;
procedure TTuningDialog.MIDIFreqExit(Sender: TObject);
begin
MIDIFreq.Text := FloatToStrF(MidiFrequency, ffFixed, 9, Digits);
end;
procedure TTuningDialog.FreqHertzExit(Sender: TObject);
begin
FreqHertz.Text := FloatToStrF(Frequency, ffFixed, 9, Digits);
end;
end.

View File

@ -0,0 +1,2 @@
[Directories]
OutputDir=../../../bin

View File

@ -0,0 +1,13 @@
program QNumFormatExample;
uses
QForms,
QNumFormatExampleMain in 'QNumFormatExampleMain.pas' {MainForm};
{$R *.res}
begin
Application.Initialize;
Application.CreateForm(TMainForm, MainForm);
Application.Run;
end.

Some files were not shown because too many files have changed in this diff Show More