git-svn-id: https://192.168.0.254/svn/Componentes.Terceros.jcl@4 c37d764d-f447-7644-a108-883140d013fb
This commit is contained in:
parent
ea4bfc54d6
commit
837cb736e0
13
official/1.96/Install.bat
Normal file
13
official/1.96/Install.bat
Normal 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
70
official/1.96/Install.txt
Normal 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
|
||||
13
official/1.96/QInstall.bat
Normal file
13
official/1.96/QInstall.bat
Normal 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 ..\..
|
||||
557
official/1.96/bin/Borland Developer Studio 2006.log
Normal file
557
official/1.96/bin/Borland Developer Studio 2006.log
Normal 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.
|
||||
|
||||
426
official/1.96/bin/Delphi 7.log
Normal file
426
official/1.96/bin/Delphi 7.log
Normal 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
|
||||
|
||||
377
official/1.96/bin/JCL-install.ini
Normal file
377
official/1.96/bin/JCL-install.ini
Normal 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
|
||||
|
||||
BIN
official/1.96/bin/JediInstaller.exe
Normal file
BIN
official/1.96/bin/JediInstaller.exe
Normal file
Binary file not shown.
1
official/1.96/bin/dirinfo.txt
Normal file
1
official/1.96/bin/dirinfo.txt
Normal file
@ -0,0 +1 @@
|
||||
This directory is intended as a common place for sample application's EXE files
|
||||
16
official/1.96/clean.bat
Normal file
16
official/1.96/clean.bat
Normal file
@ -0,0 +1,16 @@
|
||||
@echo cleaning...
|
||||
@REM do not delete precompiled installer
|
||||
@for %%f in (bin\*.exe) do @if not %%f==bin\JediInstaller.exe if not %%f==bin\QJediInstaller.exe (del %%f)
|
||||
@del /f /s *.~* *.bk bin\*.dll *.a *.bpi *.dcp *.dcu *.dpu *.hpp *.jdbg *.map *.o
|
||||
@cd lib
|
||||
@del /f /s *.obj *.res *.lib *.bpi
|
||||
@cd ..
|
||||
@cd examples
|
||||
@del /f /s *.cfg
|
||||
@cd ..
|
||||
@cd experts
|
||||
@del /f /s *.cfg
|
||||
@cd ..
|
||||
@cd packages
|
||||
@del /f /s *.cfg
|
||||
@cd..
|
||||
12
official/1.96/clean.sh
Normal file
12
official/1.96/clean.sh
Normal file
@ -0,0 +1,12 @@
|
||||
#!/bin/bash
|
||||
|
||||
rm -f `find -name \*~`
|
||||
rm -f `find -name *.~*`
|
||||
rm -f `find -name *.a`
|
||||
rm -f `find -name *.bpi`
|
||||
rm -f `find -name *.dcp`
|
||||
rm -f `find -name *.dcu`
|
||||
rm -f `find -name *.dpu`
|
||||
rm -f `find -name *.hpp`
|
||||
rm -f `find -name *.o`
|
||||
rm -f packages/k?/*.mak
|
||||
BIN
official/1.96/devtools/jpp
Normal file
BIN
official/1.96/devtools/jpp
Normal file
Binary file not shown.
BIN
official/1.96/devtools/jpp.exe
Normal file
BIN
official/1.96/devtools/jpp.exe
Normal file
Binary file not shown.
BIN
official/1.96/devtools/pgEdit.exe
Normal file
BIN
official/1.96/devtools/pgEdit.exe
Normal file
Binary file not shown.
127
official/1.96/devtools/pgEdit.xml
Normal file
127
official/1.96/devtools/pgEdit.xml
Normal 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>
|
||||
42
official/1.96/dist-excludes
Normal file
42
official/1.96/dist-excludes
Normal 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
|
||||
35
official/1.96/docs/Contacting authors.htm
Normal file
35
official/1.96/docs/Contacting authors.htm
Normal 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>
|
||||
199
official/1.96/docs/Contributors.htm
Normal file
199
official/1.96/docs/Contributors.htm
Normal 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>
|
||||
115
official/1.96/docs/Contributors.txt
Normal file
115
official/1.96/docs/Contributors.txt
Normal 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
|
||||
131
official/1.96/docs/MPL FAQ.htm
Normal file
131
official/1.96/docs/MPL FAQ.htm
Normal file
@ -0,0 +1,131 @@
|
||||
<HTML>
|
||||
<HEAD>
|
||||
<LINK REL="stylesheet" HREF="..\DclStyle.css">
|
||||
<TITLE>MPL FAQ</TITLE>
|
||||
</HEAD>
|
||||
<BODY>
|
||||
<P ALIGN=CENTER>
|
||||
<FONT SIZE="+2"><B>Mozilla Public License FAQ</B></FONT><BR>
|
||||
<B>Draft 1.0, 4/10/2000</B>
|
||||
</P>
|
||||
<P><HR WIDTH="20%"><P>
|
||||
Please email Comments to <A HREF="mailto:mbeck@bigfoot.com">Michael Beck</A><BR>
|
||||
For additional information, please also check the <A HREF="http://www.mozilla.com/MPL/FAQ.html">Official FAQ from Mozilla</A>
|
||||
|
||||
<H3>Author perspective</H3>
|
||||
<OL>
|
||||
<LI><B>Q:</B> Do I retain copyright once I publish source under the MPL?<BR>
|
||||
<B>A:</B> Absolutely. You still retain all your copyrights.
|
||||
<LI><B>Q:</B> Can I release the code under a different (possibly commercial type) license?<BR>
|
||||
<B>A:</B> Yes. Since you have the original copyright, you can do it, but you can do
|
||||
it only for your own code, and not for any contributions from others.
|
||||
<LI><B>Q:</B> In two years Acme, Inc. comes with a great new license, which I would love
|
||||
to use. Am I always bound to MPL for my released code?<BR>
|
||||
<B>A:</B> You can use a Dual License approach, i.e. you keep the code under MPL, and
|
||||
you add another license, e.g. GPL. The user will have then the option to use
|
||||
the one s/he prefers.<BR>
|
||||
Or, as the Initial Contributor, with the original copyright, you can release
|
||||
it under the other license. Please note: even if you release the code under
|
||||
new license, users of your original MPL-released code can continue to use
|
||||
under MPL as before.
|
||||
<LI><B>Q:</B> I think, JEDI could benefit from having cryptographic functions. I would
|
||||
like to donate some (DES, Tripple DES etc.), which are covered by patent
|
||||
rights (RSA, for example)? How should I do it?<BR>
|
||||
<B>A:</B> All contributions are "Subject to third party intellectual property (IP)
|
||||
claims." Thus, if you are aware of any patents infringements, before
|
||||
submitting make sure that you:
|
||||
<UL>
|
||||
<LI> secure the rights to use the IP in your contribution (e.g. by paying
|
||||
a fee)
|
||||
<LI> modify the code so it doesn't infringe (in our case, provide other,
|
||||
non-patented cryptographic functions)
|
||||
<LI> in a worst case scenario, if the two above are not possible, do not
|
||||
submit the code
|
||||
</UL>
|
||||
Please note: different countries may have different patents laws. Therefore
|
||||
in some countries it could be legal to use patented IP (e.g. because the
|
||||
patent expired), while in others not. Check with your local Patent Office.
|
||||
</OL>
|
||||
|
||||
<H3>User perspective</H3>
|
||||
<OL>
|
||||
<LI><B>Q:</B> Can I use the MPL code in commercial software? If yes, am I obligated to
|
||||
credit the author?<BR>
|
||||
<B>A:</B> Yes, you can use the MPL code in any commercial software. Since you have
|
||||
to include the MPL code, the credit is included in the license header.
|
||||
While not required, it is also customary to credit the author in "AboutBox".
|
||||
<LI><B>Q:</B> Must I release the source code of used components?<BR>
|
||||
<B>A:</B> Only of those covered by MPL, together with any modifications to them.
|
||||
<LI><B>Q:</B> Must I publish my apps under MPL if I used MPL licensed code (the viral aspect) ?<BR>
|
||||
<B>A:</B> No. That's the big advantage over GPL - you can use different code, mix MPL
|
||||
and commercial code, but you don't have to release either the application,
|
||||
nor the non-MPL code under MPL. Basically, what is MPL, will stay MPL,
|
||||
but it doesn't have any impact on the non-MPL code.
|
||||
<LI><B>Q:</B> If a bug in MPL licensed code renders my clients machine unbootable, who
|
||||
can I hold responsible for that?<BR>
|
||||
<B>A:</B> Nobody. You use MPL licensed code at your own risk. Since it is provided
|
||||
to you in a source code form, you can inspect it, test it, making sure that
|
||||
it does, what you want it to do.
|
||||
<LI><B>Q:</B> Must I publish modifications to MPL licensed code?<BR>
|
||||
<B>A:</B> Yes. This is one of the MPL requirements. You are getting a free source
|
||||
code, but you have to publish all modifications to the code, unless you
|
||||
have done the changes for your internal use.
|
||||
<LI><B>Q:</B> Must I publish code based on MPL licensed code under MPL?<BR>
|
||||
<B>A:</B> Yes. You cannot change the license terms. Only the Initial Developer can
|
||||
add an additional license (see dual license)
|
||||
<LI><B>Q:</B> If I subclass the MPL code, do I still have to publish the new code? After
|
||||
all I didn't modify the code at all!<BR>
|
||||
<B>A:</B> That's a tricky one. By the letter of the law, since you didn't touch the
|
||||
original code, you might claim that it is a "new" code, therefore no need
|
||||
for MPL. However, by the 'spirit of the law', Inheritance (or subclassing)
|
||||
is a modification of the functionality of a given class, and as such a
|
||||
"derived work", so even if you didn't touch the original code, you are
|
||||
still making changes.
|
||||
<LI><B>Q:</B> I am proposing a modification to a JEDI-VCL component, which has a dual
|
||||
license (MPL and GPL). This new file also needs to include a new class.
|
||||
Should the source files for the new class be put in JEDI-VCL using MPL
|
||||
with GPL dual-license or can it be put in another location and use only
|
||||
the MPL?<BR>
|
||||
<B>A:</B> The license of a file can't be changed without the consent of the copyright
|
||||
owner. And a new file derived from an existing file inherits the licensing
|
||||
from the existing file. In the case of this component, it has to stay MPL/GPL.
|
||||
<LI> I am considering using an XML parser that has being covered by the MPL v1.1
|
||||
(or alternatively the GPL) in a commercial product. I will simply use the
|
||||
DLL libraries without modification, including the necessary header files
|
||||
in my own code. When I distribute (sell) my own product I would, of course,
|
||||
need to distribute the DLL libraries as well. My questions are:
|
||||
<OL>
|
||||
<LI><B>Q1:</B> Am I correct in assuming that simply including unmodified header
|
||||
files and linking with a library covered by the MPL does not
|
||||
place any legal restrictions or obligations on my commercial
|
||||
product and its source code?<BR>
|
||||
<B>A1:</B> It places no obligations on the code YOU wrote, but there are
|
||||
still obligations for the code you included. These include
|
||||
source distribution (for included MPL code, not YOUR code),
|
||||
and some notification requirements.
|
||||
<LI><B>Q2:</B> Am I obligated to distribute the (unmodified) source code that
|
||||
produced the libraries with which I link?<BR>
|
||||
<B>A2:</B> Yes. Since you are shipping the DLL libraries with your product,
|
||||
you have to make source available for the MPL code you ship.<BR>
|
||||
<I>Note that the license also allows you to meet the distribution requirement
|
||||
by making the source available via electronic means rather than having to
|
||||
physically ship them with your product (as long as you tell your users
|
||||
where to get it). If you are using unmodified source code you could probably
|
||||
just point at the code author's server. If you did that you'd have to
|
||||
specify how users could get the exact version of the source you used,
|
||||
such as a CVS date stamp or something.<BR>
|
||||
This might be tricky -- you are responsible to make sure the source is
|
||||
available for 12 months after you ship, and there's no way of knowing
|
||||
how long the author will keep old versions around. The CVS repository
|
||||
is more of a sure bet. You could, of course, host the source on your
|
||||
own servers to be sure it'll stick around.</I>
|
||||
|
||||
<LI><B>Q3:</B> Am I obligated to make my use of the particular libraries known
|
||||
to users of my product?<BR>
|
||||
<B>A3:</B> Yes, it's spelled out in the license. You need to credit the
|
||||
source of copyrighted code that is not yours in both the product
|
||||
and its documentation.
|
||||
</OL>
|
||||
</OL>
|
||||
</BODY>
|
||||
</HTML>
|
||||
470
official/1.96/docs/MPL-1.1.txt
Normal file
470
official/1.96/docs/MPL-1.1.txt
Normal file
@ -0,0 +1,470 @@
|
||||
MOZILLA PUBLIC LICENSE
|
||||
Version 1.1
|
||||
|
||||
---------------
|
||||
|
||||
1. Definitions.
|
||||
|
||||
1.0.1. "Commercial Use" means distribution or otherwise making the
|
||||
Covered Code available to a third party.
|
||||
|
||||
1.1. "Contributor" means each entity that creates or contributes to
|
||||
the creation of Modifications.
|
||||
|
||||
1.2. "Contributor Version" means the combination of the Original
|
||||
Code, prior Modifications used by a Contributor, and the Modifications
|
||||
made by that particular Contributor.
|
||||
|
||||
1.3. "Covered Code" means the Original Code or Modifications or the
|
||||
combination of the Original Code and Modifications, in each case
|
||||
including portions thereof.
|
||||
|
||||
1.4. "Electronic Distribution Mechanism" means a mechanism generally
|
||||
accepted in the software development community for the electronic
|
||||
transfer of data.
|
||||
|
||||
1.5. "Executable" means Covered Code in any form other than Source
|
||||
Code.
|
||||
|
||||
1.6. "Initial Developer" means the individual or entity identified
|
||||
as the Initial Developer in the Source Code notice required by Exhibit
|
||||
A.
|
||||
|
||||
1.7. "Larger Work" means a work which combines Covered Code or
|
||||
portions thereof with code not governed by the terms of this License.
|
||||
|
||||
1.8. "License" means this document.
|
||||
|
||||
1.8.1. "Licensable" means having the right to grant, to the maximum
|
||||
extent possible, whether at the time of the initial grant or
|
||||
subsequently acquired, any and all of the rights conveyed herein.
|
||||
|
||||
1.9. "Modifications" means any addition to or deletion from the
|
||||
substance or structure of either the Original Code or any previous
|
||||
Modifications. When Covered Code is released as a series of files, a
|
||||
Modification is:
|
||||
A. Any addition to or deletion from the contents of a file
|
||||
containing Original Code or previous Modifications.
|
||||
|
||||
B. Any new file that contains any part of the Original Code or
|
||||
previous Modifications.
|
||||
|
||||
1.10. "Original Code" means Source Code of computer software code
|
||||
which is described in the Source Code notice required by Exhibit A as
|
||||
Original Code, and which, at the time of its release under this
|
||||
License is not already Covered Code governed by this License.
|
||||
|
||||
1.10.1. "Patent Claims" means any patent claim(s), now owned or
|
||||
hereafter acquired, including without limitation, method, process,
|
||||
and apparatus claims, in any patent Licensable by grantor.
|
||||
|
||||
1.11. "Source Code" means the preferred form of the Covered Code for
|
||||
making modifications to it, including all modules it contains, plus
|
||||
any associated interface definition files, scripts used to control
|
||||
compilation and installation of an Executable, or source code
|
||||
differential comparisons against either the Original Code or another
|
||||
well known, available Covered Code of the Contributor's choice. The
|
||||
Source Code can be in a compressed or archival form, provided the
|
||||
appropriate decompression or de-archiving software is widely available
|
||||
for no charge.
|
||||
|
||||
1.12. "You" (or "Your") means an individual or a legal entity
|
||||
exercising rights under, and complying with all of the terms of, this
|
||||
License or a future version of this License issued under Section 6.1.
|
||||
For legal entities, "You" includes any entity which controls, is
|
||||
controlled by, or is under common control with You. For purposes of
|
||||
this definition, "control" means (a) the power, direct or indirect,
|
||||
to cause the direction or management of such entity, whether by
|
||||
contract or otherwise, or (b) ownership of more than fifty percent
|
||||
(50%) of the outstanding shares or beneficial ownership of such
|
||||
entity.
|
||||
|
||||
2. Source Code License.
|
||||
|
||||
2.1. The Initial Developer Grant.
|
||||
The Initial Developer hereby grants You a world-wide, royalty-free,
|
||||
non-exclusive license, subject to third party intellectual property
|
||||
claims:
|
||||
(a) under intellectual property rights (other than patent or
|
||||
trademark) Licensable by Initial Developer to use, reproduce,
|
||||
modify, display, perform, sublicense and distribute the Original
|
||||
Code (or portions thereof) with or without Modifications, and/or
|
||||
as part of a Larger Work; and
|
||||
|
||||
(b) under Patents Claims infringed by the making, using or
|
||||
selling of Original Code, to make, have made, use, practice,
|
||||
sell, and offer for sale, and/or otherwise dispose of the
|
||||
Original Code (or portions thereof).
|
||||
|
||||
(c) the licenses granted in this Section 2.1(a) and (b) are
|
||||
effective on the date Initial Developer first distributes
|
||||
Original Code under the terms of this License.
|
||||
|
||||
(d) Notwithstanding Section 2.1(b) above, no patent license is
|
||||
granted: 1) for code that You delete from the Original Code; 2)
|
||||
separate from the Original Code; or 3) for infringements caused
|
||||
by: i) the modification of the Original Code or ii) the
|
||||
combination of the Original Code with other software or devices.
|
||||
|
||||
2.2. Contributor Grant.
|
||||
Subject to third party intellectual property claims, each Contributor
|
||||
hereby grants You a world-wide, royalty-free, non-exclusive license
|
||||
|
||||
(a) under intellectual property rights (other than patent or
|
||||
trademark) Licensable by Contributor, to use, reproduce, modify,
|
||||
display, perform, sublicense and distribute the Modifications
|
||||
created by such Contributor (or portions thereof) either on an
|
||||
unmodified basis, with other Modifications, as Covered Code
|
||||
and/or as part of a Larger Work; and
|
||||
|
||||
(b) under Patent Claims infringed by the making, using, or
|
||||
selling of Modifications made by that Contributor either alone
|
||||
and/or in combination with its Contributor Version (or portions
|
||||
of such combination), to make, use, sell, offer for sale, have
|
||||
made, and/or otherwise dispose of: 1) Modifications made by that
|
||||
Contributor (or portions thereof); and 2) the combination of
|
||||
Modifications made by that Contributor with its Contributor
|
||||
Version (or portions of such combination).
|
||||
|
||||
(c) the licenses granted in Sections 2.2(a) and 2.2(b) are
|
||||
effective on the date Contributor first makes Commercial Use of
|
||||
the Covered Code.
|
||||
|
||||
(d) Notwithstanding Section 2.2(b) above, no patent license is
|
||||
granted: 1) for any code that Contributor has deleted from the
|
||||
Contributor Version; 2) separate from the Contributor Version;
|
||||
3) for infringements caused by: i) third party modifications of
|
||||
Contributor Version or ii) the combination of Modifications made
|
||||
by that Contributor with other software (except as part of the
|
||||
Contributor Version) or other devices; or 4) under Patent Claims
|
||||
infringed by Covered Code in the absence of Modifications made by
|
||||
that Contributor.
|
||||
|
||||
3. Distribution Obligations.
|
||||
|
||||
3.1. Application of License.
|
||||
The Modifications which You create or to which You contribute are
|
||||
governed by the terms of this License, including without limitation
|
||||
Section 2.2. The Source Code version of Covered Code may be
|
||||
distributed only under the terms of this License or a future version
|
||||
of this License released under Section 6.1, and You must include a
|
||||
copy of this License with every copy of the Source Code You
|
||||
distribute. You may not offer or impose any terms on any Source Code
|
||||
version that alters or restricts the applicable version of this
|
||||
License or the recipients' rights hereunder. However, You may include
|
||||
an additional document offering the additional rights described in
|
||||
Section 3.5.
|
||||
|
||||
3.2. Availability of Source Code.
|
||||
Any Modification which You create or to which You contribute must be
|
||||
made available in Source Code form under the terms of this License
|
||||
either on the same media as an Executable version or via an accepted
|
||||
Electronic Distribution Mechanism to anyone to whom you made an
|
||||
Executable version available; and if made available via Electronic
|
||||
Distribution Mechanism, must remain available for at least twelve (12)
|
||||
months after the date it initially became available, or at least six
|
||||
(6) months after a subsequent version of that particular Modification
|
||||
has been made available to such recipients. You are responsible for
|
||||
ensuring that the Source Code version remains available even if the
|
||||
Electronic Distribution Mechanism is maintained by a third party.
|
||||
|
||||
3.3. Description of Modifications.
|
||||
You must cause all Covered Code to which You contribute to contain a
|
||||
file documenting the changes You made to create that Covered Code and
|
||||
the date of any change. You must include a prominent statement that
|
||||
the Modification is derived, directly or indirectly, from Original
|
||||
Code provided by the Initial Developer and including the name of the
|
||||
Initial Developer in (a) the Source Code, and (b) in any notice in an
|
||||
Executable version or related documentation in which You describe the
|
||||
origin or ownership of the Covered Code.
|
||||
|
||||
3.4. Intellectual Property Matters
|
||||
(a) Third Party Claims.
|
||||
If Contributor has knowledge that a license under a third party's
|
||||
intellectual property rights is required to exercise the rights
|
||||
granted by such Contributor under Sections 2.1 or 2.2,
|
||||
Contributor must include a text file with the Source Code
|
||||
distribution titled "LEGAL" which describes the claim and the
|
||||
party making the claim in sufficient detail that a recipient will
|
||||
know whom to contact. If Contributor obtains such knowledge after
|
||||
the Modification is made available as described in Section 3.2,
|
||||
Contributor shall promptly modify the LEGAL file in all copies
|
||||
Contributor makes available thereafter and shall take other steps
|
||||
(such as notifying appropriate mailing lists or newsgroups)
|
||||
reasonably calculated to inform those who received the Covered
|
||||
Code that new knowledge has been obtained.
|
||||
|
||||
(b) Contributor APIs.
|
||||
If Contributor's Modifications include an application programming
|
||||
interface and Contributor has knowledge of patent licenses which
|
||||
are reasonably necessary to implement that API, Contributor must
|
||||
also include this information in the LEGAL file.
|
||||
|
||||
(c) Representations.
|
||||
Contributor represents that, except as disclosed pursuant to
|
||||
Section 3.4(a) above, Contributor believes that Contributor's
|
||||
Modifications are Contributor's original creation(s) and/or
|
||||
Contributor has sufficient rights to grant the rights conveyed by
|
||||
this License.
|
||||
|
||||
3.5. Required Notices.
|
||||
You must duplicate the notice in Exhibit A in each file of the Source
|
||||
Code. If it is not possible to put such notice in a particular Source
|
||||
Code file due to its structure, then You must include such notice in a
|
||||
location (such as a relevant directory) where a user would be likely
|
||||
to look for such a notice. If You created one or more Modification(s)
|
||||
You may add your name as a Contributor to the notice described in
|
||||
Exhibit A. You must also duplicate this License in any documentation
|
||||
for the Source Code where You describe recipients' rights or ownership
|
||||
rights relating to Covered Code. You may choose to offer, and to
|
||||
charge a fee for, warranty, support, indemnity or liability
|
||||
obligations to one or more recipients of Covered Code. However, You
|
||||
may do so only on Your own behalf, and not on behalf of the Initial
|
||||
Developer or any Contributor. You must make it absolutely clear than
|
||||
any such warranty, support, indemnity or liability obligation is
|
||||
offered by You alone, and You hereby agree to indemnify the Initial
|
||||
Developer and every Contributor for any liability incurred by the
|
||||
Initial Developer or such Contributor as a result of warranty,
|
||||
support, indemnity or liability terms You offer.
|
||||
|
||||
3.6. Distribution of Executable Versions.
|
||||
You may distribute Covered Code in Executable form only if the
|
||||
requirements of Section 3.1-3.5 have been met for that Covered Code,
|
||||
and if You include a notice stating that the Source Code version of
|
||||
the Covered Code is available under the terms of this License,
|
||||
including a description of how and where You have fulfilled the
|
||||
obligations of Section 3.2. The notice must be conspicuously included
|
||||
in any notice in an Executable version, related documentation or
|
||||
collateral in which You describe recipients' rights relating to the
|
||||
Covered Code. You may distribute the Executable version of Covered
|
||||
Code or ownership rights under a license of Your choice, which may
|
||||
contain terms different from this License, provided that You are in
|
||||
compliance with the terms of this License and that the license for the
|
||||
Executable version does not attempt to limit or alter the recipient's
|
||||
rights in the Source Code version from the rights set forth in this
|
||||
License. If You distribute the Executable version under a different
|
||||
license You must make it absolutely clear that any terms which differ
|
||||
from this License are offered by You alone, not by the Initial
|
||||
Developer or any Contributor. You hereby agree to indemnify the
|
||||
Initial Developer and every Contributor for any liability incurred by
|
||||
the Initial Developer or such Contributor as a result of any such
|
||||
terms You offer.
|
||||
|
||||
3.7. Larger Works.
|
||||
You may create a Larger Work by combining Covered Code with other code
|
||||
not governed by the terms of this License and distribute the Larger
|
||||
Work as a single product. In such a case, You must make sure the
|
||||
requirements of this License are fulfilled for the Covered Code.
|
||||
|
||||
4. Inability to Comply Due to Statute or Regulation.
|
||||
|
||||
If it is impossible for You to comply with any of the terms of this
|
||||
License with respect to some or all of the Covered Code due to
|
||||
statute, judicial order, or regulation then You must: (a) comply with
|
||||
the terms of this License to the maximum extent possible; and (b)
|
||||
describe the limitations and the code they affect. Such description
|
||||
must be included in the LEGAL file described in Section 3.4 and must
|
||||
be included with all distributions of the Source Code. Except to the
|
||||
extent prohibited by statute or regulation, such description must be
|
||||
sufficiently detailed for a recipient of ordinary skill to be able to
|
||||
understand it.
|
||||
|
||||
5. Application of this License.
|
||||
|
||||
This License applies to code to which the Initial Developer has
|
||||
attached the notice in Exhibit A and to related Covered Code.
|
||||
|
||||
6. Versions of the License.
|
||||
|
||||
6.1. New Versions.
|
||||
Netscape Communications Corporation ("Netscape") may publish revised
|
||||
and/or new versions of the License from time to time. Each version
|
||||
will be given a distinguishing version number.
|
||||
|
||||
6.2. Effect of New Versions.
|
||||
Once Covered Code has been published under a particular version of the
|
||||
License, You may always continue to use it under the terms of that
|
||||
version. You may also choose to use such Covered Code under the terms
|
||||
of any subsequent version of the License published by Netscape. No one
|
||||
other than Netscape has the right to modify the terms applicable to
|
||||
Covered Code created under this License.
|
||||
|
||||
6.3. Derivative Works.
|
||||
If You create or use a modified version of this License (which you may
|
||||
only do in order to apply it to code which is not already Covered Code
|
||||
governed by this License), You must (a) rename Your license so that
|
||||
the phrases "Mozilla", "MOZILLAPL", "MOZPL", "Netscape",
|
||||
"MPL", "NPL" or any confusingly similar phrase do not appear in your
|
||||
license (except to note that your license differs from this License)
|
||||
and (b) otherwise make it clear that Your version of the license
|
||||
contains terms which differ from the Mozilla Public License and
|
||||
Netscape Public License. (Filling in the name of the Initial
|
||||
Developer, Original Code or Contributor in the notice described in
|
||||
Exhibit A shall not of themselves be deemed to be modifications of
|
||||
this License.)
|
||||
|
||||
7. DISCLAIMER OF WARRANTY.
|
||||
|
||||
COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS,
|
||||
WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
|
||||
WITHOUT LIMITATION, WARRANTIES THAT THE COVERED CODE IS FREE OF
|
||||
DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING.
|
||||
THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED CODE
|
||||
IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT,
|
||||
YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE
|
||||
COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER
|
||||
OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF
|
||||
ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER.
|
||||
|
||||
8. TERMINATION.
|
||||
|
||||
8.1. This License and the rights granted hereunder will terminate
|
||||
automatically if You fail to comply with terms herein and fail to cure
|
||||
such breach within 30 days of becoming aware of the breach. All
|
||||
sublicenses to the Covered Code which are properly granted shall
|
||||
survive any termination of this License. Provisions which, by their
|
||||
nature, must remain in effect beyond the termination of this License
|
||||
shall survive.
|
||||
|
||||
8.2. If You initiate litigation by asserting a patent infringement
|
||||
claim (excluding declatory judgment actions) against Initial Developer
|
||||
or a Contributor (the Initial Developer or Contributor against whom
|
||||
You file such action is referred to as "Participant") alleging that:
|
||||
|
||||
(a) such Participant's Contributor Version directly or indirectly
|
||||
infringes any patent, then any and all rights granted by such
|
||||
Participant to You under Sections 2.1 and/or 2.2 of this License
|
||||
shall, upon 60 days notice from Participant terminate prospectively,
|
||||
unless if within 60 days after receipt of notice You either: (i)
|
||||
agree in writing to pay Participant a mutually agreeable reasonable
|
||||
royalty for Your past and future use of Modifications made by such
|
||||
Participant, or (ii) withdraw Your litigation claim with respect to
|
||||
the Contributor Version against such Participant. If within 60 days
|
||||
of notice, a reasonable royalty and payment arrangement are not
|
||||
mutually agreed upon in writing by the parties or the litigation claim
|
||||
is not withdrawn, the rights granted by Participant to You under
|
||||
Sections 2.1 and/or 2.2 automatically terminate at the expiration of
|
||||
the 60 day notice period specified above.
|
||||
|
||||
(b) any software, hardware, or device, other than such Participant's
|
||||
Contributor Version, directly or indirectly infringes any patent, then
|
||||
any rights granted to You by such Participant under Sections 2.1(b)
|
||||
and 2.2(b) are revoked effective as of the date You first made, used,
|
||||
sold, distributed, or had made, Modifications made by that
|
||||
Participant.
|
||||
|
||||
8.3. If You assert a patent infringement claim against Participant
|
||||
alleging that such Participant's Contributor Version directly or
|
||||
indirectly infringes any patent where such claim is resolved (such as
|
||||
by license or settlement) prior to the initiation of patent
|
||||
infringement litigation, then the reasonable value of the licenses
|
||||
granted by such Participant under Sections 2.1 or 2.2 shall be taken
|
||||
into account in determining the amount or value of any payment or
|
||||
license.
|
||||
|
||||
8.4. In the event of termination under Sections 8.1 or 8.2 above,
|
||||
all end user license agreements (excluding distributors and resellers)
|
||||
which have been validly granted by You or any distributor hereunder
|
||||
prior to termination shall survive termination.
|
||||
|
||||
9. LIMITATION OF LIABILITY.
|
||||
|
||||
UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT
|
||||
(INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL
|
||||
DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED CODE,
|
||||
OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR
|
||||
ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY
|
||||
CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL,
|
||||
WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER
|
||||
COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN
|
||||
INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF
|
||||
LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY
|
||||
RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW
|
||||
PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE
|
||||
EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO
|
||||
THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU.
|
||||
|
||||
10. U.S. GOVERNMENT END USERS.
|
||||
|
||||
The Covered Code is a "commercial item," as that term is defined in
|
||||
48 C.F.R. 2.101 (Oct. 1995), consisting of "commercial computer
|
||||
software" and "commercial computer software documentation," as such
|
||||
terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48
|
||||
C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995),
|
||||
all U.S. Government End Users acquire Covered Code with only those
|
||||
rights set forth herein.
|
||||
|
||||
11. MISCELLANEOUS.
|
||||
|
||||
This License represents the complete agreement concerning subject
|
||||
matter hereof. If any provision of this License is held to be
|
||||
unenforceable, such provision shall be reformed only to the extent
|
||||
necessary to make it enforceable. This License shall be governed by
|
||||
California law provisions (except to the extent applicable law, if
|
||||
any, provides otherwise), excluding its conflict-of-law provisions.
|
||||
With respect to disputes in which at least one party is a citizen of,
|
||||
or an entity chartered or registered to do business in the United
|
||||
States of America, any litigation relating to this License shall be
|
||||
subject to the jurisdiction of the Federal Courts of the Northern
|
||||
District of California, with venue lying in Santa Clara County,
|
||||
California, with the losing party responsible for costs, including
|
||||
without limitation, court costs and reasonable attorneys' fees and
|
||||
expenses. The application of the United Nations Convention on
|
||||
Contracts for the International Sale of Goods is expressly excluded.
|
||||
Any law or regulation which provides that the language of a contract
|
||||
shall be construed against the drafter shall not apply to this
|
||||
License.
|
||||
|
||||
12. RESPONSIBILITY FOR CLAIMS.
|
||||
|
||||
As between Initial Developer and the Contributors, each party is
|
||||
responsible for claims and damages arising, directly or indirectly,
|
||||
out of its utilization of rights under this License and You agree to
|
||||
work with Initial Developer and Contributors to distribute such
|
||||
responsibility on an equitable basis. Nothing herein is intended or
|
||||
shall be deemed to constitute any admission of liability.
|
||||
|
||||
13. MULTIPLE-LICENSED CODE.
|
||||
|
||||
Initial Developer may designate portions of the Covered Code as
|
||||
"Multiple-Licensed". "Multiple-Licensed" means that the Initial
|
||||
Developer permits you to utilize portions of the Covered Code under
|
||||
Your choice of the NPL or the alternative licenses, if any, specified
|
||||
by the Initial Developer in the file described in Exhibit A.
|
||||
|
||||
EXHIBIT A -Mozilla Public License.
|
||||
|
||||
``The contents of this file are subject to the Mozilla Public License
|
||||
Version 1.1 (the "License"); you may not use this file except in
|
||||
compliance with the License. You may obtain a copy of the License at
|
||||
http://www.mozilla.org/MPL/
|
||||
|
||||
Software distributed under the License is distributed on an "AS IS"
|
||||
basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
|
||||
License for the specific language governing rights and limitations
|
||||
under the License.
|
||||
|
||||
The Original Code is ______________________________________.
|
||||
|
||||
The Initial Developer of the Original Code is ________________________.
|
||||
Portions created by ______________________ are Copyright (C) ______
|
||||
_______________________. All Rights Reserved.
|
||||
|
||||
Contributor(s): ______________________________________.
|
||||
|
||||
Alternatively, the contents of this file may be used under the terms
|
||||
of the _____ license (the "[___] License"), in which case the
|
||||
provisions of [______] License are applicable instead of those
|
||||
above. If you wish to allow use of your version of this file only
|
||||
under the terms of the [____] License and not to allow others to use
|
||||
your version of this file under the MPL, indicate your decision by
|
||||
deleting the provisions above and replace them with the notice and
|
||||
other provisions required by the [___] License. If you do not delete
|
||||
the provisions above, a recipient may use your version of this file
|
||||
under either the MPL or the [___] License."
|
||||
|
||||
[NOTE: The text of this Exhibit A may differ slightly from the text of
|
||||
the notices in the Source Code files of the Original Code. You should
|
||||
use the text of this Exhibit A rather than the text found in the
|
||||
Original Code Source Code for Your Modifications.]
|
||||
|
||||
347
official/1.96/docs/Readme.html
Normal file
347
official/1.96/docs/Readme.html
Normal 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) Installation options:</span></p>
|
||||
<p>Packages compiled by the JCL installer don't contain any debug
|
||||
informations to keep their size as small as possible.</p>
|
||||
<p>The Jedi Code Library packages are required by some 3rd party packages
|
||||
(including the Jedi Visual Component Library - JVCL), the installer generates
|
||||
them if the "Packages" node is checked.</p>
|
||||
<p>The installer can generate MAP informations for each package. These informations
|
||||
can be linked into binaries to become JCL debug data. 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
|
||||
& 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 time support (only experts):</span></p>
|
||||
<ul>
|
||||
<li>C#Builder 1 (refer to 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 & 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> (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.</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>)
|
||||
the native compiler to be installed in Delphi 8.
|
||||
The item (<a href="http://codecentral.borland.com/Download.aspx?id=21334">21334</a>)
|
||||
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 <a href="news://forums.talkto.net/jedi.jcl">news://forums.talkto.net/jedi.jcl</a>.
|
||||
</li>
|
||||
<li>Write to <a href="mailto:jcl@delphi-jedi.org">jcl@delphi-jedi.org</a>
|
||||
or to <a href="mailto:jcl-testing@delphi-jedi.org">jcl-testing@delphi-jedi.org</a>
|
||||
This email account should not be used for support requests. If you need
|
||||
support please use either the newsgroups or the mailing list.</li>
|
||||
<li>If you want to keep up to date about JCL then you can join the
|
||||
JCL mailing list by going to <a href="http://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
|
||||
<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 -> 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 -> 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>
|
||||
and <a href="http://tortoisesvn.sourceforge.net/">TortoiseSVN</a> commands in
|
||||
actions that can be placed on IDE toolbars and in IDE menu.</p>
|
||||
<p>This expert requires <a href="http://tortoisecvs.sourceforge.net/">TortoiseCVS</a>
|
||||
or/and <a href="http://tortoisesvn.sourceforge.net/">TortoiseSVN</a> installed on the
|
||||
system to 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:
|
||||
<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
|
||||
<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 <a href="http://sourceforge.net/docs/E04/">CVS instruction page</a>.
|
||||
You can also access the CVS repository via the <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>
|
||||
322
official/1.96/docs/Readme.txt
Normal file
322
official/1.96/docs/Readme.txt
Normal 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
655
official/1.96/docs/cps.html
Normal file
@ -0,0 +1,655 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
|
||||
<html>
|
||||
<head>
|
||||
<link rel="stylesheet" href="cps_files/test.css" type="text/css">
|
||||
<title>Jedi Code Library - Cross Platform Strategy</title>
|
||||
</head>
|
||||
<body>
|
||||
<h1>Jedi Code Library - Cross Platform Strategy</h1>
|
||||
<p>
|
||||
This paper presents the JCL teams strategy for cross platform
|
||||
compliance of the
|
||||
Jedi Code Library. It is based up on the discussions within the JCL
|
||||
newsgroup
|
||||
and JCL developer mailing lists. This document is currently <b>work in
|
||||
progress</b>
|
||||
and subject to changes with or without notice.
|
||||
</p>
|
||||
<p>
|
||||
Version history: <br>
|
||||
0.1 Initial release
|
||||
</p>
|
||||
<p>
|
||||
</p>
|
||||
<h3>Background</h3>
|
||||
<p>
|
||||
The main objective is to make the Jedi Code Library VisualCLX (Kylix
|
||||
for Delphi/Delphi) and Delphi.NET compatible. For a detailed
|
||||
explanation of the currently used terminology, see the following
|
||||
article <a href="http://bdn.borland.com/article/0,1410,29460,00.html">
|
||||
Overview of the VCL for .NET</a>. </p>
|
||||
<p>
|
||||
We have to cope with nearly all aspects of cross platform progamming,
|
||||
like different APIs, different operating system concepts etc. Since we
|
||||
want to be as crossplatform compatible as possible interface
|
||||
compatability is the most important
|
||||
issue for us. Jedi Code Library users should have to opportunity the
|
||||
use the JCL
|
||||
on whatever platform they like. Figure 1 shows the three basic layers
|
||||
we have to deal with:
|
||||
</p>
|
||||
<ul>
|
||||
<li>Platform independent layer: Units which are not (or only very
|
||||
minor)
|
||||
platform specific and do not depend on a specific component set. This
|
||||
doesn't mean that units in this layer have to consist of no platform
|
||||
dependent code, but they have to
|
||||
be nearly 100% interface compatible and all functionality must have
|
||||
been ported to all
|
||||
supported platforms. </li>
|
||||
<li>Platform dependent layer: Units which depend on a specific
|
||||
platform (e.g. JclCLI) </li>
|
||||
<li>Component set dependent layer: Units which depend on a specific
|
||||
component set</li>
|
||||
</ul>
|
||||
<p>
|
||||
<img src="cps_files/strucv1.jpg" border="1"><br>
|
||||
<i>Fig 1: The Jedi Code Library crossplatform layer structure</i>
|
||||
</p>
|
||||
<p>
|
||||
The Jedi Code Library currently targets the following platforms:
|
||||
</p>
|
||||
<ul>
|
||||
<li>Kylix for Delphi (Kylix 3) / Linux</li>
|
||||
<li>Delphi (Version 5,6,7) / Microsoft Windows</li>
|
||||
</ul>
|
||||
and is trying to support the following platforms as soon as possible:
|
||||
<ul>
|
||||
<li>Delphi .NET / .NET (Micrsoft Windows) </li>
|
||||
</ul>
|
||||
<p>
|
||||
As a mid or long term perspective we are hoping to get the JCL
|
||||
FreePascal compatible.
|
||||
This involves the possibilty to have the JCL running on DOS, OS/2,
|
||||
FreeBSD and
|
||||
AmigaOS. </p>
|
||||
<h3>Common platform independent layer</h3>
|
||||
<p>
|
||||
This layer consists of all files which are not platform dependent or
|
||||
need only very minor adjustations. Furthermore all units in this layer
|
||||
do not depend on a
|
||||
specific component set. Examples for common platform independent units
|
||||
are JclBase, JclDateTime, JclFileUtils and JclMath. The units have been
|
||||
ported to all platforms and are the crossplatform "core" of the Jedi
|
||||
Code Library. As a general rule a unit in this layer should have no
|
||||
platform specific ifdefs in its
|
||||
interface section.
|
||||
</p>
|
||||
<h3>Platform dependent layer</h3>
|
||||
<p>
|
||||
Furthermore we do not have to differentiate between VCL and VisualCLX
|
||||
units only (the so called component set dependent layer), but also
|
||||
between UNIX, Windows and .NET dependent units. The platform dependent
|
||||
units doesn't need to be interface compatible (if there is an
|
||||
equivalent in one of the other suported platforms at all!).
|
||||
An example for a platform dependent unit is JclCLI. Nonetheless if
|
||||
there are equivalents in all other supported platforms as well it might
|
||||
be considerable to write a more general class and include that unit
|
||||
into the common platform indepedant layer.
|
||||
</p>
|
||||
<h3>Component set dependent layer</h3>
|
||||
<p>
|
||||
When it comes to sharing code between VCL and VisualCLX-applications,
|
||||
some facts need to be stated:
|
||||
</p>
|
||||
<p>
|
||||
</p>
|
||||
<li>A unit is called <i>VCL-dependent</i>, when it uses some
|
||||
VCL-unit(s), e.g. Graphics.
|
||||
</li>
|
||||
<li>A unit is called <i>VisualCLX-dependent</i>, when it uses some
|
||||
VisualCLX-unit(s), e.g. QGraphics.</li>
|
||||
<p>
|
||||
When a unit contains neither VCL- nor VisualCLX-specific code, there is
|
||||
no problem: It can be used by either type of application.
|
||||
</p>
|
||||
<p>
|
||||
While it is basically possible to create VCL-dependent and
|
||||
VisualCLX-dependent
|
||||
variants of the same unit by means of conditional compilation - and use
|
||||
them in
|
||||
VCL- and VisualCLX-applications respectively -, this method fails at
|
||||
design time:
|
||||
One and the same unit cannot be installed twice in the IDE, not even as
|
||||
part of
|
||||
different packages. We would have to rename one of the variants,
|
||||
effectively
|
||||
creating a new unit. Therefor we will use a preprocessor to resolve the
|
||||
conditional compilation symbols related to VCL/VisualCLX-specific code
|
||||
and create
|
||||
VCL/VisualCLX units from a common codebase.
|
||||
</p>
|
||||
<p>
|
||||
Component dependent units should be largely "interface compatible" -
|
||||
interface
|
||||
adjustments for specific component sets are unavoidable - nonetheless
|
||||
similar
|
||||
interfaces are desirable.
|
||||
</p>
|
||||
<h3>Preprocessor</h3>
|
||||
<p>
|
||||
The preprocessor jpp is a modified version of Barry Kelly's ppp tool.
|
||||
In contrast to ppp, which resolves all conditional compilation
|
||||
directives without exception, with jpp symbols not only can be defined
|
||||
but also undefined. Those symbols which are neither defined nor
|
||||
explicitely undefined are considered
|
||||
as of unknown status and it and its related source code remains
|
||||
untouched.
|
||||
</p>
|
||||
<p>
|
||||
The usage of jpp is not too hard. It is called via
|
||||
</p>
|
||||
<pre>jpp [options] <input files>...<br></pre>
|
||||
Possible options are
|
||||
<pre> -i Process includes<br> -c Process conditional directives<br> -C Strip comments<br> -pxxx Add xxx to include path<br> -dxxx Define xxx as a preprocessor conditional symbol<br> -uxxx Assume preprocessor conditional symbol xxx as not defined<br> -x[n:]yyy Strip first n characters from file name; precede filename by prefix yyy<br></pre>
|
||||
<p>
|
||||
The example command line below generates a file JclQGraphics.pas in
|
||||
subdirectory
|
||||
CLX from file Graphics.cb located in the current directory. Symbols
|
||||
"VisualCLX"
|
||||
and "COMPILER6_UP" are specified as defined, "Bitmap32" and "VCL" as
|
||||
undefined.
|
||||
</p>
|
||||
<pre> jpp -c -dVisualCLX -dCOMPILER6_UP -uBitmap32 -uVCL -xCLX\JclQ Graphics.cb<br></pre>
|
||||
<h3>Generating Jcl[Q]Graphics.pas and Jcl[Q]GraphUtils.pas</h3>
|
||||
<p>
|
||||
First compile Preprocessor\jpp.exe from Preprocessor\jpp.dpr.
|
||||
Then change to the "Source" directory and type "make" at the command
|
||||
line.
|
||||
This will create the units <br>
|
||||
VCL\JclGraphics.pas <br>
|
||||
VCL\JclGraphUtils.pas <br>
|
||||
CLX\JclQGraphics.pas <br>
|
||||
CLX\JclQGraphUtils.pas <br>
|
||||
</p>
|
||||
<p>
|
||||
from their prototypes _Graphics.pas and _GraphUtils.pas.
|
||||
</p>
|
||||
<h3>Minimizing VCL dependencies</h3>
|
||||
<p>
|
||||
To reduce VCL dependencies in JCL, the following changes have been
|
||||
made:
|
||||
</p>
|
||||
<menu>
|
||||
<dl>
|
||||
<dt>JclFileUtils</dt>
|
||||
<dd>PathCompactPath is an overloaded function. The variant which
|
||||
takes a TCanvas as argument (and thus creates a dependency on VCL unit
|
||||
Graphics) has been removed. </dd>
|
||||
</dl>
|
||||
<br>
|
||||
<dl>
|
||||
<dt>JclShell</dt>
|
||||
<dd> ShellLinkGetIcon has been removed. It could get part of some
|
||||
genuine VCL-dependent unit (e.g. JclGraphUtils), but for now it is left
|
||||
out. </dd>
|
||||
</dl>
|
||||
<br>
|
||||
<dl>
|
||||
<dt>JclPEImage</dt>
|
||||
<dd>
|
||||
<pre> Replace "uses Consts," by<br><br> uses<br> {$IFDEF COMPILER6_UP}<br> RtlConsts, // VisualCLX-package compatible (part of rtlxx.bpl)<br> {$ELSE}<br> Consts, // not VisualCLX-package compatible (part of vclxx.bpl)<br> {$ENDIF COMPILER6_UP} </pre>
|
||||
</dd>
|
||||
</dl>
|
||||
</menu>
|
||||
<p>
|
||||
Note that the first two changes have enormous impact, since many JCL
|
||||
units use JclFileUtils and JclSysInfo (which both use JclShell). This
|
||||
leaves JclGraphics and JclGraphUtils as sole units with genuine
|
||||
VCL/VisualCLX-dependencies.
|
||||
JclPrint is the only remaining pure VCL-dependent units. </p>
|
||||
<h3>New directory structure</h3>
|
||||
<p>
|
||||
With the new JCL release we introduce a more appropriate source file
|
||||
directory
|
||||
structure. The files are now grouped according their respective layers.
|
||||
</p>
|
||||
<pre>Source/<br> Common<br> DotNet<br> Unix<br> VCL<br> VisCLX<br> Windows <br></pre>
|
||||
<h3>Status - Platforms</h3>
|
||||
<p>
|
||||
This table gives a short overview of which units are already working
|
||||
under four different Delphi language compilers/platforms. There are
|
||||
four status levels possible:
|
||||
</p>
|
||||
<p>
|
||||
<table>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td
|
||||
style="text-align: center; background-color: rgb(238, 238, 238);"><span
|
||||
style="font-weight: bold;">+</span><br>
|
||||
</td>
|
||||
<td> the unit has been ported to that platform</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td
|
||||
style="text-align: center; background-color: rgb(238, 238, 238);">-</td>
|
||||
<td> the unit has not been ported to that platform</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td
|
||||
style="text-align: center; background-color: rgb(238, 238, 238);"> (+)
|
||||
<br>
|
||||
</td>
|
||||
<td> the unit compiles, but not all of its functionality
|
||||
has been ported to that platform.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td
|
||||
style="text-align: center; background-color: rgb(238, 238, 238);"> platform
|
||||
<br>
|
||||
</td>
|
||||
<td> the unit is platform dependent and will not be ported.</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</p>
|
||||
<table>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td style="background-color: rgb(238, 238, 238);"><b>Name</b></td>
|
||||
<td
|
||||
style="text-align: center; background-color: rgb(238, 238, 238);"><b>Delphi
|
||||
(Windows)</b></td>
|
||||
<td
|
||||
style="text-align: center; background-color: rgb(238, 238, 238);"><b>Kylix
|
||||
for Delphi</b></td>
|
||||
<td
|
||||
style="text-align: center; background-color: rgb(238, 238, 238);"><b>Delphi.NET</b></td>
|
||||
<td
|
||||
style="text-align: center; background-color: rgb(238, 238, 238);"><b>Free
|
||||
Pascal</b></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Jcl8087</td>
|
||||
<td style="text-align: center;"><b>+</b></td>
|
||||
<td style="text-align: center;"><b>+</b></td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">?</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>JclAppInst</td>
|
||||
<td style="text-align: center;"><b>+</b></td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">?</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>JclCil</td>
|
||||
<td style="text-align: center;"><b>+</b></td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">?</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>JclClr</td>
|
||||
<td style="text-align: center;"><b>+</b></td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">?</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>JclCom</td>
|
||||
<td style="text-align: center;"><b>+</b></td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">?</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>JclComplex</td>
|
||||
<td style="text-align: center;"><b>+</b></td>
|
||||
<td style="text-align: center;"><b>+</b></td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">?</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>JclConsole</td>
|
||||
<td style="text-align: center;"><b>+</b></td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">?</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>JclCounter</td>
|
||||
<td style="text-align: center;"><b>+</b></td>
|
||||
<td style="text-align: center;"><b>+</b></td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">?</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>JclDateTime</td>
|
||||
<td style="text-align: center;"><b>+</b></td>
|
||||
<td style="text-align: center;">(+)</td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">?</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>JclDebug</td>
|
||||
<td style="text-align: center;"><b>+</b></td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">? </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>JclDotNet</td>
|
||||
<td style="text-align: center;"><b>+</b></td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">? </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>JclEDI</td>
|
||||
<td style="text-align: center;"><b>+</b></td>
|
||||
<td style="text-align: center;"><b>+</b></td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">? </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>JclEDISEF</td>
|
||||
<td style="text-align: center;"><b>+</b></td>
|
||||
<td style="text-align: center;"><b>+</b></td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">? </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>JclEDIXML</td>
|
||||
<td style="text-align: center;"><b>+</b></td>
|
||||
<td style="text-align: center;"><b>+</b></td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">? </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>JclEDI_ANSIX12</td>
|
||||
<td style="text-align: center;"><b>+</b></td>
|
||||
<td style="text-align: center;"><b>+</b></td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">? </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>JclEDI_UNEDIFACT</td>
|
||||
<td style="text-align: center;"><b>+</b></td>
|
||||
<td style="text-align: center;"><b>+</b></td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">? </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>JclFileUtils</td>
|
||||
<td style="text-align: center;"><b>+</b></td>
|
||||
<td style="text-align: center;">(+)</td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">? </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>JclExprEval</td>
|
||||
<td style="text-align: center;"><b>+</b></td>
|
||||
<td style="text-align: center;"><b>+</b><br>
|
||||
</td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">? </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>JclHookExcept</td>
|
||||
<td style="text-align: center;"><b>+</b></td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">? </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>JclIniFiles</td>
|
||||
<td style="text-align: center;"><b>+</b></td>
|
||||
<td style="text-align: center;"><b>+</b><br>
|
||||
</td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">? </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>JclLanMan</td>
|
||||
<td style="text-align: center;"><b>+</b></td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">? </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>JclLocales</td>
|
||||
<td style="text-align: center;"><b>+</b></td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">? </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>JclLogic</td>
|
||||
<td style="text-align: center;"><b>+</b></td>
|
||||
<td style="text-align: center;"><b>+</b></td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">? </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>JclMapi</td>
|
||||
<td style="text-align: center;"><b>+</b></td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">? </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>JclMath</td>
|
||||
<td style="text-align: center;"><b>+</b></td>
|
||||
<td style="text-align: center;"><b>+</b></td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">? </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>JclMetaData</td>
|
||||
<td style="text-align: center;"><b>+</b></td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">? </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>JclMidi</td>
|
||||
<td style="text-align: center;"><b>+</b></td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">? </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>JclMime</td>
|
||||
<td style="text-align: center;"><b>+</b></td>
|
||||
<td style="text-align: center;"><b>+</b></td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">? </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>JclMiscel</td>
|
||||
<td style="text-align: center;"><b>+</b></td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">? </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>JclMultimedia</td>
|
||||
<td style="text-align: center;"><b>+</b></td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">? </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>JclNTFS</td>
|
||||
<td style="text-align: center;"><b>+</b></td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">? </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>JclPEImage</td>
|
||||
<td style="text-align: center;"><b>+</b></td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">? </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>JclPrint</td>
|
||||
<td style="text-align: center;"><b>+</b></td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">? </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>JclStrHashMap</td>
|
||||
<td style="text-align: center;"><b>+</b></td>
|
||||
<td style="text-align: center;"><b>+</b><br>
|
||||
</td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">? </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>JclStatistics</td>
|
||||
<td style="text-align: center;"><b>+</b></td>
|
||||
<td style="text-align: center;"><b>+</b></td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">? </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>JclShell</td>
|
||||
<td style="text-align: center;"><b>+</b></td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">? </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>JclSecurity</td>
|
||||
<td style="text-align: center;"><b>+</b></td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">? </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>JclSchedule</td>
|
||||
<td style="text-align: center;"><b>+</b></td>
|
||||
<td style="text-align: center;"><b>+</b></td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">? </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>JclRTTI</td>
|
||||
<td style="text-align: center;"><b>+</b></td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">? </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>JclResources</td>
|
||||
<td style="text-align: center;"><b>+</b></td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">? </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>JclRegistry</td>
|
||||
<td style="text-align: center;"><b>+</b></td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">? </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>JclStrings</td>
|
||||
<td style="text-align: center;"><b>+</b></td>
|
||||
<td style="text-align: center;"><b>+</b></td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">? </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Jclsvcctrl</td>
|
||||
<td style="text-align: center;"><b>+</b></td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">? </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Jclsynch</td>
|
||||
<td style="text-align: center;"><b>+</b></td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">? </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>JclTask</td>
|
||||
<td style="text-align: center;">platform</td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">? </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>JclSysUtils</td>
|
||||
<td style="text-align: center;"><b>+</b></td>
|
||||
<td style="text-align: center;">(+)<br>
|
||||
</td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">? </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>JclSysInfo</td>
|
||||
<td style="text-align: center;"><b>+</b></td>
|
||||
<td style="text-align: center;">(+)<br>
|
||||
</td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">? </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>JclTD32</td>
|
||||
<td style="text-align: center;"><b>+</b></td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">? </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>JclUnicode</td>
|
||||
<td style="text-align: center;"><b>+</b></td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">? </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>JclUnitConv</td>
|
||||
<td style="text-align: center;"><b>+</b></td>
|
||||
<td style="text-align: center;"><b>+</b></td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">? </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>JclWin32</td>
|
||||
<td style="text-align: center;">platform </td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">? </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>JclWinMidi</td>
|
||||
<td style="text-align: center;">platform </td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">-</td>
|
||||
<td style="text-align: center;">? </td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<h3>Assembler</h3>
|
||||
<p>
|
||||
For crossplatform compatability it is absolutely necessary to reduce
|
||||
the amount
|
||||
of inline assembler code used. Therefore as a general rule every line
|
||||
of assembler
|
||||
<b>must have a pure pascal pendant</b>. Please use assembler only if it
|
||||
really has a noticeable impact on the libraries performance. </p>
|
||||
<pre>{$IFNDEF PUREPASCAL}<br> // assembler code here<br>{$ELSE}<br> // Delphi equivalent here<br>{$ENDIF} <br></pre>
|
||||
<h3>Packages</h3>
|
||||
</body>
|
||||
</html>
|
||||
BIN
official/1.96/docs/cps_files/strucv1.jpg
Normal file
BIN
official/1.96/docs/cps_files/strucv1.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 33 KiB |
793
official/1.96/docs/cps_files/test.css
Normal file
793
official/1.96/docs/cps_files/test.css
Normal file
@ -0,0 +1,793 @@
|
||||
TD {
|
||||
font-family : "Arial", "Helvetica", Sans-serif;
|
||||
}
|
||||
|
||||
PRE.SourceCode2 {
|
||||
background-color : #e0ffff;
|
||||
border-width : medium;
|
||||
border-style : outset;
|
||||
border-color : silver;
|
||||
white-space : pre;
|
||||
}
|
||||
|
||||
PRE.SourceCode EM {
|
||||
font-style : normal;
|
||||
color : #9933cc;
|
||||
white-space : pre;
|
||||
}
|
||||
|
||||
PRE.SourceCode {
|
||||
font-family : "Courier", monospace;
|
||||
background-color : white;
|
||||
margin-right : 20px;
|
||||
margin-left : 20px;
|
||||
padding : 5px 20px;
|
||||
border-width : medium;
|
||||
border-style : outset;
|
||||
border-color : silver;
|
||||
white-space : pre;
|
||||
}
|
||||
|
||||
P.chatuser {
|
||||
font-weight : bold;
|
||||
color : #3366cc;
|
||||
vertical-align : top;
|
||||
}
|
||||
|
||||
P.chatquestionpresented {
|
||||
font-weight : bold;
|
||||
background-color : #dddddd;
|
||||
vertical-align : top;
|
||||
}
|
||||
|
||||
P.chatpublicmsg {
|
||||
font-weight : normal;
|
||||
vertical-align : top;
|
||||
padding : 0 0 20px;
|
||||
}
|
||||
|
||||
P.chateditor {
|
||||
color : red;
|
||||
padding : 0 0 10px;
|
||||
}
|
||||
|
||||
P.chataction {
|
||||
font-style : italic;
|
||||
vertical-align : top;
|
||||
}
|
||||
|
||||
P.TechNote {
|
||||
font-weight : normal;
|
||||
background-color : #e0ffff;
|
||||
padding : 2px 5px;
|
||||
border-width : medium;
|
||||
border-style : outset;
|
||||
border-color : silver;
|
||||
}
|
||||
|
||||
H3 {
|
||||
font-weight : bold;
|
||||
font-size : 11pt;
|
||||
font-family : "Arial", "Helvetica", Sans-serif;
|
||||
color : #000000;
|
||||
text-decoration : none;
|
||||
}
|
||||
|
||||
H2 {
|
||||
font-weight : bold;
|
||||
font-size : 14pt;
|
||||
font-family : "Arial", "Helvetica", Sans-serif;
|
||||
color : #000000;
|
||||
text-decoration : none;
|
||||
}
|
||||
|
||||
H1 {
|
||||
font-weight : bold;
|
||||
font-size : 18pt;
|
||||
line-height : 18pt;
|
||||
font-family : "Arial", "Helvetica", Sans-serif;
|
||||
color : #000000;
|
||||
text-decoration : none;
|
||||
padding : 10px 0 0;
|
||||
}
|
||||
|
||||
BODY {
|
||||
background : #ffffff;
|
||||
margin-left : 20 px;
|
||||
margin-right : 20 px;}
|
||||
|
||||
B.Help {
|
||||
color : white;
|
||||
background-color : gray;
|
||||
}
|
||||
|
||||
A:hover {
|
||||
color : #cc3300;
|
||||
}
|
||||
|
||||
.webDirectoryLink {
|
||||
font-size : 0.8em;
|
||||
font-family : "Arial", "Helvetica", Sans-serif;
|
||||
color : #3366cc;
|
||||
text-decoration : underline;
|
||||
}
|
||||
|
||||
.webDirectoryCategoryLink {
|
||||
font-size : 0.8em;
|
||||
font-family : "Arial", "Helvetica", Sans-serif;
|
||||
color : #000000;
|
||||
text-decoration : none;
|
||||
}
|
||||
|
||||
.webDirectoryCatHead {
|
||||
font-size : 0.9em;
|
||||
font-family : "Arial", "Helvetica", Sans-serif;
|
||||
color : #ffffff;
|
||||
text-decoration : none;
|
||||
}
|
||||
|
||||
.vspace5 {
|
||||
padding : 5px 0 0;
|
||||
}
|
||||
|
||||
.visibility {
|
||||
font-weight : bold;
|
||||
font-size : 0.8em;
|
||||
font-family : "Arial", "Helvetica", Sans-serif;
|
||||
color : #ff0000;
|
||||
text-decoration : none;
|
||||
}
|
||||
|
||||
.tuser {
|
||||
color : blue;
|
||||
background-color : white;
|
||||
}
|
||||
|
||||
.ttitle {
|
||||
font-weight : bold;
|
||||
color : black;
|
||||
background-color : #dddddd;
|
||||
}
|
||||
|
||||
.tthis {
|
||||
font-weight : bold;
|
||||
line-height : 1;
|
||||
color : white;
|
||||
background-color : red;
|
||||
vertical-align : top;
|
||||
}
|
||||
|
||||
.tother {
|
||||
font-weight : bold;
|
||||
line-height : 1;
|
||||
color : white;
|
||||
background-color : blue;
|
||||
vertical-align : top;
|
||||
}
|
||||
|
||||
.tmine {
|
||||
font-weight : bold;
|
||||
color : black;
|
||||
background-color : #c71585;
|
||||
}
|
||||
|
||||
.title3 {
|
||||
font-weight : bold;
|
||||
font-size : 12pt;
|
||||
font-family : "Arial", "Helvetica", Sans-serif;
|
||||
color : #000000;
|
||||
text-decoration : none;
|
||||
}
|
||||
|
||||
.thi {
|
||||
background-color : #dddddd;
|
||||
}
|
||||
|
||||
.textAdLink {
|
||||
font-weight : bold;
|
||||
color : #ffffff;
|
||||
text-decoration : none;
|
||||
}
|
||||
|
||||
.textAdCell {
|
||||
font-size : 0.8em;
|
||||
}
|
||||
|
||||
.searchCell {
|
||||
font-weight : bold;
|
||||
font-size : 11px;
|
||||
}
|
||||
|
||||
.rightSidebarLink {
|
||||
color : #000000;
|
||||
text-decoration : none;
|
||||
}
|
||||
|
||||
.rightSidebarHeading {
|
||||
font-weight : bold;
|
||||
font-size : 10pt;
|
||||
color : #ffffff;
|
||||
background : #3366cc;
|
||||
}
|
||||
|
||||
.rightSidebarCell {
|
||||
font-weight : bold;
|
||||
font-size : 10pt;
|
||||
color : #000000;
|
||||
background : #dddddd;
|
||||
}
|
||||
|
||||
.presentLocation {
|
||||
font-weight : bold;
|
||||
color : #000000;
|
||||
text-decoration : none;
|
||||
}
|
||||
|
||||
.logoCell {
|
||||
background : #000000;
|
||||
}
|
||||
|
||||
.logoBar {
|
||||
background : #000000;
|
||||
}
|
||||
|
||||
.loginLinkCell {
|
||||
font-weight : bold;
|
||||
font-size : 0.8em;
|
||||
background : #3366cc;
|
||||
}
|
||||
|
||||
.loginLink {
|
||||
color : #ffffff;
|
||||
text-decoration : none;
|
||||
}
|
||||
|
||||
.loginStd {
|
||||
text-align : right;
|
||||
}
|
||||
|
||||
.loginReq {
|
||||
text-align : right;
|
||||
font-weight : bold;
|
||||
color : blue;
|
||||
}
|
||||
|
||||
.login_std {
|
||||
text-align : right;
|
||||
}
|
||||
|
||||
.login_req {
|
||||
text-align : right;
|
||||
font-weight : bold;
|
||||
color : blue;
|
||||
}
|
||||
|
||||
.locationLink {
|
||||
color : #000000;
|
||||
text-decoration : underline;
|
||||
}
|
||||
|
||||
.localLinkCell {
|
||||
font-size : 9pt;
|
||||
color : #ffffff;
|
||||
background : #3366cc;
|
||||
}
|
||||
|
||||
.localLink {
|
||||
font-weight : bold;
|
||||
color : #ffffff;
|
||||
text-decoration : none;
|
||||
}
|
||||
|
||||
.leftSidebarText {
|
||||
font-weight : normal;
|
||||
font-size : 9pt;
|
||||
color : #000000;
|
||||
}
|
||||
|
||||
.leftSidebarSoapboxLink {
|
||||
font-weight : normal;
|
||||
font-size : 10pt;
|
||||
color : #0000cc;
|
||||
font-style : italic;
|
||||
text-decoration : none
|
||||
|
||||
}
|
||||
|
||||
.leftSidebarSoapboxLink:hover {
|
||||
COLOR: #6666cc;
|
||||
font-weight : normal;
|
||||
font-size : 10pt;
|
||||
font-style : italic;
|
||||
text-decoration : none
|
||||
|
||||
}
|
||||
|
||||
|
||||
.leftSidebarHeading {
|
||||
font-weight : bold;
|
||||
font-size : 12pt;
|
||||
color : #3366cc;
|
||||
}
|
||||
|
||||
.leftSidebarCell {
|
||||
font-size : 0.8em;
|
||||
background : #dddddd;
|
||||
}
|
||||
|
||||
.heading3 {
|
||||
font-weight : bold;
|
||||
font-size : 11pt;
|
||||
font-family : "Arial", "Helvetica", Sans-serif;
|
||||
color : #000000;
|
||||
text-decoration : none;
|
||||
vertical-align: baseline;
|
||||
}
|
||||
|
||||
.heading2 {
|
||||
font-weight : bold;
|
||||
font-size : 14pt;
|
||||
font-family : "Arial", "Helvetica", Sans-serif;
|
||||
color : #000000;
|
||||
text-decoration : none;
|
||||
}
|
||||
|
||||
.heading1 {
|
||||
font-weight : bold;
|
||||
font-size : 18pt;
|
||||
font-family : "Arial", "Helvetica", Sans-serif;
|
||||
color : #000000;
|
||||
text-decoration : none;
|
||||
padding : 10px 0 0;
|
||||
}
|
||||
|
||||
.globalNavBar {
|
||||
background : #dddddd;
|
||||
}
|
||||
|
||||
.globalLinkCell {
|
||||
font-size : 0.8em;
|
||||
background : #dddddd;
|
||||
}
|
||||
|
||||
.globalLink {
|
||||
font-weight : bold;
|
||||
color : #000000;
|
||||
text-decoration : none;
|
||||
}
|
||||
|
||||
.fineprint {
|
||||
font-weight : normal;
|
||||
font-size : 8pt;
|
||||
font-family : "Arial", "Helvetica", Sans-serif;
|
||||
color : #000000;
|
||||
text-decoration : none;
|
||||
}
|
||||
|
||||
.directoryStuff {
|
||||
font-size : 0.8em;
|
||||
font-family : "Arial", "Helvetica", Sans-serif;
|
||||
color : #000000;
|
||||
}
|
||||
|
||||
.directoryLink {
|
||||
font-size : 9pt;
|
||||
font-family : "Arial", "Helvetica", Sans-serif;
|
||||
color : #000000;
|
||||
text-decoration : none;
|
||||
}
|
||||
|
||||
.directoryCategory {
|
||||
font-size : 10pt;
|
||||
font-family : "Arial", "Helvetica", Sans-serif;
|
||||
color : #000000;
|
||||
text-decoration : underline;
|
||||
}
|
||||
|
||||
.date3 {
|
||||
font-weight : normal;
|
||||
font-size : 9pt;
|
||||
font-family : "Arial", "Helvetica", Sans-serif;
|
||||
color : #000000;
|
||||
text-decoration : none;
|
||||
vertical-align: baseline ;
|
||||
|
||||
}
|
||||
|
||||
.copyrightLink {
|
||||
color : #000000;
|
||||
text-decoration : none;
|
||||
}
|
||||
|
||||
.copyrightCell {
|
||||
font-size : 7pt;
|
||||
background : #dddddd;
|
||||
}
|
||||
|
||||
.contentshortDescription {
|
||||
font-weight : normal;
|
||||
font-size : 9pt;
|
||||
color : #000000;
|
||||
}
|
||||
|
||||
.contentTableCell {
|
||||
font-size : 0.8em;
|
||||
background : #ffffff;
|
||||
}
|
||||
|
||||
.contentTable {
|
||||
background : #ffffff;
|
||||
}
|
||||
|
||||
.contentStoryLink {
|
||||
color : #3366cc;
|
||||
}
|
||||
|
||||
.contentStoryHeadingCell {
|
||||
background : #dddddd;
|
||||
}
|
||||
|
||||
.contentStoryHeading {
|
||||
font-weight : normal;
|
||||
font-size : 11pt;
|
||||
color : #000000;
|
||||
text-decoration : none;
|
||||
}
|
||||
|
||||
.contentStoryByline {
|
||||
font-style : italic;
|
||||
font-weight : normal;
|
||||
font-size : 9pt;
|
||||
color : #000000;
|
||||
}
|
||||
|
||||
.contentSectionHeading {
|
||||
font-weight : bold;
|
||||
font-size : 12pt;
|
||||
color : #000000;
|
||||
text-decoration : none;
|
||||
}
|
||||
|
||||
.contentRule {
|
||||
background : #3366cc;
|
||||
}
|
||||
|
||||
.contentMoreLink {
|
||||
font-weight : bold;
|
||||
color : #3366cc;
|
||||
}
|
||||
|
||||
.contentHat {
|
||||
font-weight : bold;
|
||||
font-size : 10pt;
|
||||
color : #000000;
|
||||
text-decoration : none;
|
||||
}
|
||||
|
||||
.contentDevNewsStoryHeading {
|
||||
font-weight : normal;
|
||||
font-size : 10pt;
|
||||
font-family : "Arial", "Helvetica", Sans-serif;
|
||||
color : #000000;
|
||||
text-decoration : none;
|
||||
}
|
||||
|
||||
.contentArticleTypeIndex {
|
||||
font-size : 0.7em;
|
||||
color : #3366cc;
|
||||
}
|
||||
|
||||
.body3, blb, bottomlink {
|
||||
font-weight : normal;
|
||||
font-size : 11pt;
|
||||
font-family : "Arial", "Helvetica", Sans-serif;
|
||||
color : #000000;
|
||||
text-decoration : none;
|
||||
}
|
||||
|
||||
.blueHeading2 {
|
||||
font-weight : bold;
|
||||
font-size : 12pt;
|
||||
font-family : "Arial", "Helvetica", Sans-serif;
|
||||
color : #003399;
|
||||
text-decoration : none;
|
||||
}
|
||||
|
||||
.bigBlue {
|
||||
font-weight : bold;
|
||||
font-size : 14pt;
|
||||
color : #013399;
|
||||
text-decoration : none;
|
||||
}
|
||||
|
||||
.abstract {
|
||||
font-style : italic;
|
||||
font-weight : normal;
|
||||
font-size : 10pt;
|
||||
line-height : 11pt;
|
||||
font-family : "Arial", "Helvetica", Sans-serif;
|
||||
color : #000000;
|
||||
text-decoration : none;
|
||||
padding : 10px;
|
||||
}
|
||||
/* new classes - added 01/11/01 rare medium */
|
||||
|
||||
.whiteLink { font-size : 10pt; text-decoration : none; color : #ffffff; }
|
||||
|
||||
.whiteLinkB { font-size : 10pt; font-weight : bold; text-decoration : none; color : #ffffff; }
|
||||
|
||||
.whiteLinkSmall { font-size : 9pt; text-decoration : none; color : #ffffff; }
|
||||
.yellowLinkSmall { font-size : 9pt; font-weight : bold; text-decoration : none; color : #ffdf00; }
|
||||
.whiteLinkVerySmall { font-size : 8pt; text-decoration : none; color : #ffffff; }
|
||||
|
||||
.newBody { font-weight : normal; font-size : 9pt; font-family : "Arial", "Helvetica", Sans-serif; color : #000000; text-decoration : none; }
|
||||
|
||||
.newTitle { font-weight : bold; font-size : 11pt; font-family : "Arial", "Helvetica", Sans-serif; color : #000000; text-decoration : none; }
|
||||
|
||||
.newDate { font-weight : normal; font-size : 8pt; font-family : "Arial", "Helvetica", Sans-serif; color : #000000; text-decoration : none; margin-top : 3pt; }
|
||||
|
||||
.newHeading { font-weight : bold; font-size : 9pt; font-family : "Arial", "Helvetica", Sans-serif; color : #000000; text-decoration : none; }
|
||||
|
||||
.bigBlack { font-weight : bold; font-size : 14pt; font-family : "Arial", "Helvetica", Sans-serif; color : #000000; text-decoration : none; }
|
||||
|
||||
BODY
|
||||
{
|
||||
MARGINLEFT: 18px
|
||||
}
|
||||
/* Changed font size from 12px to 14 px here due to complaints 2002/5/20 Tom Lam */
|
||||
TR, TD, P, LAYER {
|
||||
FONT-SIZE: 14px;
|
||||
COLOR: #000000;
|
||||
FONT-FAMILY: arial, helvetica, sans-serif;
|
||||
TEXT-DECORATION: none;
|
||||
}
|
||||
|
||||
.newsItem {
|
||||
FONT-SIZE: 11px;
|
||||
COLOR: #000000;
|
||||
FONT-FAMILY: arial, helvetica, sans-serif;
|
||||
TEXT-DECORATION: none;
|
||||
}
|
||||
|
||||
A {
|
||||
COLOR: #0000cc;
|
||||
TEXT-DECORATION: none;
|
||||
}
|
||||
|
||||
A: hover {
|
||||
COLOR: #6666cc;
|
||||
TEXT-DECORATION: none;
|
||||
}
|
||||
|
||||
.divider
|
||||
{
|
||||
BACKGROUND: #999999
|
||||
}
|
||||
|
||||
.lightBG
|
||||
{
|
||||
BACKGROUND: #cccccc;
|
||||
}
|
||||
|
||||
.intTopnav {
|
||||
FONT-SIZE: 12px;
|
||||
FONT-WEIGHT: bold;
|
||||
COLOR: #666666;
|
||||
}
|
||||
|
||||
.intTopnav A {
|
||||
FONT-SIZE: 12px;
|
||||
FONT-WEIGHT: bold;
|
||||
COLOR: #000000;
|
||||
TEXT-DECORATION: none;
|
||||
}
|
||||
|
||||
.intTopnav A:hover {
|
||||
FONT-SIZE: 12px;
|
||||
FONT-WEIGHT: bold;
|
||||
COLOR: #666666;
|
||||
TEXT-DECORATION: underline;
|
||||
}
|
||||
|
||||
.leftNavTop {
|
||||
FONT-SIZE: 14px;
|
||||
FONT-WEIGHT: bold;
|
||||
}
|
||||
|
||||
.leftNavTop A {
|
||||
FONT-SIZE: 14px;
|
||||
FONT-WEIGHT: bold;
|
||||
COLOR: #0000cc;
|
||||
TEXT-DECORATION: underline;
|
||||
}
|
||||
|
||||
.leftNavTop A:hover {
|
||||
FONT-SIZE: 14px;
|
||||
FONT-WEIGHT: bold;
|
||||
COLOR: #6666cc;
|
||||
}
|
||||
|
||||
.leftNav {
|
||||
FONT-SIZE: 12px;
|
||||
COLOR: #666666;
|
||||
FONT-WEIGHT: bold;
|
||||
}
|
||||
|
||||
.leftNav A {
|
||||
FONT-SIZE: 12px;
|
||||
COLOR: #0000cc;
|
||||
FONT-WEIGHT: normal;
|
||||
TEXT-DECORATION: underline;
|
||||
}
|
||||
|
||||
.leftNav A:hover {
|
||||
FONT-SIZE: 12px;
|
||||
COLOR: #6666cc;
|
||||
FONT-WEIGHT: normal;
|
||||
}
|
||||
|
||||
.prodList {
|
||||
FONT-SIZE: 13px;
|
||||
FONT-WEIGHT: bold;
|
||||
COLOR: #666666;
|
||||
TEXT-DECORATION: none;
|
||||
MARGIN-TOP: -6px;
|
||||
}
|
||||
|
||||
.prodList A {
|
||||
COLOR: #666666;
|
||||
TEXT-DECORATION: none;
|
||||
}
|
||||
|
||||
.prodList A:hover {
|
||||
COLOR: #6666cc;
|
||||
TEXT-DECORATION: underline;
|
||||
}
|
||||
|
||||
.contentHeader {
|
||||
FONT-FAMILY: arial, helvetica, sans-serif;
|
||||
FONT-SIZE: 20px;
|
||||
FONT-WEIGHT: bold;
|
||||
}
|
||||
|
||||
.contentHeader A {
|
||||
COLOR: #000000;
|
||||
TEXT-DECORATION: underline;
|
||||
}
|
||||
|
||||
.contentHeader A: hover {
|
||||
COLOR: #666666;
|
||||
TEXT-DECORATION: underline;
|
||||
}
|
||||
|
||||
.contentSubHeader {
|
||||
FONT-FAMILY: arial, helvetica, sans-serif;
|
||||
FONT-SIZE: 16px;
|
||||
FONT-WEIGHT: bold;
|
||||
MARGIN-BOTTOM: -8px;
|
||||
}
|
||||
|
||||
.subHeader {
|
||||
FONT-FAMILY: arial, helvetica, sans-serif;
|
||||
FONT-SIZE: 16px;
|
||||
FONT-WEIGHT: bold;
|
||||
}
|
||||
|
||||
.pressSubHead {
|
||||
FONT-WEIGHT: bold;
|
||||
COLOR: #003366;
|
||||
}
|
||||
|
||||
.bodyLight {
|
||||
COLOR: #666666;
|
||||
}
|
||||
|
||||
A.bodyNav1 {
|
||||
COLOR: #0000cc;
|
||||
TEXT-DECORATION: underline;
|
||||
}
|
||||
|
||||
A.bodyNav1:hover {
|
||||
COLOR: #6666cc;
|
||||
TEXT-DECORATION: underline;
|
||||
}
|
||||
|
||||
A.bodyNav2 {
|
||||
COLOR: #333333;
|
||||
TEXT-DECORATION: underline;
|
||||
}
|
||||
|
||||
A.bodyNav2:hover {
|
||||
COLOR: #003366;
|
||||
TEXT-DECORATION: underline;
|
||||
}
|
||||
|
||||
INPUT.TEXT {
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
.tableHeader {
|
||||
FONT-SIZE: 11px;
|
||||
COLOR: #333333;
|
||||
}
|
||||
|
||||
.footer {
|
||||
font-size: 11px;
|
||||
COLOR: #666666;
|
||||
MARGIN-BOTTOM: 0px;
|
||||
}
|
||||
|
||||
.footer A {
|
||||
COLOR: #003366;
|
||||
}
|
||||
|
||||
.footer A:hover {
|
||||
COLOR: #006699;
|
||||
}
|
||||
|
||||
.Menu
|
||||
{
|
||||
VISIBILITY: hidden;
|
||||
POSITION: absolute;
|
||||
TOP: 93px;
|
||||
}
|
||||
|
||||
.Menu TD
|
||||
{
|
||||
FONT-SIZE: 11px;
|
||||
COLOR: #ffffff;
|
||||
FONT-FAMILY: arial, helvetica, sans-serif;
|
||||
TEXT-DECORATION: none;
|
||||
}
|
||||
|
||||
.Menu A
|
||||
{
|
||||
FONT-SIZE: 11px;
|
||||
COLOR: #ffffff;
|
||||
FONT-FAMILY: arial, helvetica, sans-serif;
|
||||
TEXT-DECORATION: none;
|
||||
}
|
||||
|
||||
.Menu A:hover
|
||||
{
|
||||
FONT-SIZE: 11px;
|
||||
COLOR: #cccccc;
|
||||
FONT-FAMILY: arial, helvetica, sans-serif;
|
||||
TEXT-DECORATION: none;
|
||||
}
|
||||
|
||||
.Trigger
|
||||
{
|
||||
POSITION: relative;
|
||||
TOP: 0px;
|
||||
LEFT: 0px;
|
||||
}
|
||||
|
||||
select {
|
||||
FONT-SIZE: 10px;
|
||||
COLOR: #000000;
|
||||
FONT-FAMILY: arial, helvetica, sans-serif;
|
||||
}
|
||||
|
||||
INPUT.TEXT.srchBox {
|
||||
FONT-SIZE: 12px;
|
||||
WIDTH: 116px;
|
||||
}
|
||||
A.leftLink {
|
||||
COLOR: #0000cc;
|
||||
TEXT-DECORATION: none;
|
||||
}
|
||||
|
||||
A.leftLink:hover {
|
||||
COLOR: #6666cc;
|
||||
TEXT-DECORATION: none;
|
||||
}
|
||||
|
||||
A.leftLinkB {
|
||||
COLOR: #000000;
|
||||
TEXT-DECORATION: none;
|
||||
FONT-WEIGHT: bold;
|
||||
}
|
||||
|
||||
.topLinkB {
|
||||
|
||||
34
official/1.96/docs/styles/default.css
Normal file
34
official/1.96/docs/styles/default.css
Normal file
@ -0,0 +1,34 @@
|
||||
body {padding: 0px 0px 0px 26px;background: #ffffff; color: #000000;font-family: Verdana, Arial, Helvetica, sans-serif;font-size: 9pt;}
|
||||
h1, h2, h3, h4 {font-family: Verdana, Arial, Helvetica, sans-serif;margin-left: -6px;margin-top: .5em;margin-bottom: .5em; }
|
||||
h1 {font-size: 160%;}
|
||||
h2 {font-size: 145%;}
|
||||
h3 {font-size: 130%;}
|
||||
h4 {font-size: 115%;}
|
||||
h5 {font-size: 105%;}
|
||||
hr {align:"right";color:"#000080";noshade;}
|
||||
ul p, ol p, dl p {margin-left: 0em;}
|
||||
p {margin-top: .6em;margin-bottom:.6em;}
|
||||
dl {margin-top: 0em;}
|
||||
dd {margin-bottom: 0em;margin-left: 1.9em;}
|
||||
dt {margin-top: .6em; }
|
||||
ul, ol {margin-top: .6em;margin-bottom: 0em;}
|
||||
ol {margin-left: 1.9em; }
|
||||
ul {list-style-type: disc;margin-left: 1.9em; }
|
||||
li {margin-bottom: .6em;}
|
||||
ul ol, ol ol {list-style-type: lower-alpha;}
|
||||
pre {margin-top: .6em;margin-bottom: .6em; }
|
||||
pre,code {font-family: Courier New, Courier, mono;color: #660000;}
|
||||
table {background: #999999;margin-top: .6em;margin-bottom: .3em;}
|
||||
th {padding: 4px 8px;background: #cccccc;text-align: left;font-size: 70%;vertical-align: bottom;height: 25px;}
|
||||
td {padding: 4px 8px;background: #ffffff;vertical-align: top;font-size: 70%;height: 25px;}
|
||||
blockquote {margin-left: 3.8em;margin-right: 3.8em;margin-top: .6em;margin-bottom: .6em;}
|
||||
sup {text-decoration: none;font-size: smaller; }
|
||||
a:link {color: #0066ff;}
|
||||
a:visited {color: #0066ff;}
|
||||
a:hover {color: #cc9900;}
|
||||
.select {margin-bottom:-4px;border-width: 1px;border-style: solid;width: 400px;}
|
||||
.input, .textarea {margin-bottom:-4px;border-width: 1px;border-style: solid;width: 400px;}
|
||||
.submit {background-color: #CCCCCC;border-width: 1px;border-style: solid;}
|
||||
.reset {background-color: #CCCCCC;border-width: 1px;border-style: solid;}
|
||||
.button {background-color: #CCCCCC;border-width: 1px;border-style: solid;}
|
||||
.InfoField {border: 2px solid #AAAAAA;padding: 4px 4px;background: #EFEFEF;}
|
||||
4
official/1.96/examples/C10.exc
Normal file
4
official/1.96/examples/C10.exc
Normal file
@ -0,0 +1,4 @@
|
||||
common\containers\performance\ContainerPerformance.dpr
|
||||
windows\clr\ClrDemo.dpr
|
||||
windows\tasks\TaskDemo.dpr
|
||||
visclx.exc
|
||||
2
official/1.96/examples/C5.exc
Normal file
2
official/1.96/examples/C5.exc
Normal file
@ -0,0 +1,2 @@
|
||||
windows\clr\ClrDemo.dpr
|
||||
visclx.exc
|
||||
3
official/1.96/examples/C6.exc
Normal file
3
official/1.96/examples/C6.exc
Normal file
@ -0,0 +1,3 @@
|
||||
windows\clr\ClrDemo.dpr
|
||||
common\filesearch\QFileSearchDemo.dpr
|
||||
visclx.exc=STD
|
||||
4
official/1.96/examples/D10.exc
Normal file
4
official/1.96/examples/D10.exc
Normal file
@ -0,0 +1,4 @@
|
||||
common\containers\performance\ContainerPerformance.dpr
|
||||
windows\clr\ClrDemo.dpr
|
||||
windows\tasks\TaskDemo.dpr
|
||||
visclx.exc
|
||||
3
official/1.96/examples/D5.exc
Normal file
3
official/1.96/examples/D5.exc
Normal file
@ -0,0 +1,3 @@
|
||||
common\containers\performance\ContainerPerformance.dpr
|
||||
windows\clr\ClrDemo.dpr
|
||||
visclx.exc
|
||||
4
official/1.96/examples/D6.exc
Normal file
4
official/1.96/examples/D6.exc
Normal file
@ -0,0 +1,4 @@
|
||||
common\containers\performance\ContainerPerformance.dpr
|
||||
common\filesearch\QFileSearchDemo.dpr
|
||||
windows\clr\ClrDemo.dpr
|
||||
visclx.exc=STD
|
||||
4
official/1.96/examples/D7.exc
Normal file
4
official/1.96/examples/D7.exc
Normal file
@ -0,0 +1,4 @@
|
||||
common\containers\performance\ContainerPerformance.dpr
|
||||
common\filesearch\QFileSearchDemo.dpr
|
||||
windows\clr\ClrDemo.dpr
|
||||
visclx.exc=STD
|
||||
4
official/1.96/examples/D9.exc
Normal file
4
official/1.96/examples/D9.exc
Normal file
@ -0,0 +1,4 @@
|
||||
common\containers\performance\ContainerPerformance.dpr
|
||||
windows\clr\ClrDemo.dpr
|
||||
windows\tasks\TaskDemo.dpr
|
||||
visclx.exc
|
||||
23
official/1.96/examples/JclDebugExamples.bdsgroup
Normal file
23
official/1.96/examples/JclDebugExamples.bdsgroup
Normal file
@ -0,0 +1,23 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<BorlandProject>
|
||||
<PersonalityInfo>
|
||||
<Option>
|
||||
<Option Name="Personality">Default.Personality</Option>
|
||||
<Option Name="ProjectType"></Option>
|
||||
<Option Name="Version">1.0</Option>
|
||||
<Option Name="GUID">{DA6232CE-74D4-4FD2-95D5-44C5C155C336}</Option>
|
||||
</Option>
|
||||
</PersonalityInfo>
|
||||
<Default.Personality>
|
||||
|
||||
<Projects>
|
||||
<Projects Name="StackTrackDLLsExample.exe">windows\debug\stacktrack\StackTrackDLLsExample.bdsproj</Projects>
|
||||
<Projects Name="StackTrackDLLsStaticLibrary.dll">windows\debug\stacktrack\StackTrackDLLsStaticLibrary.bdsproj</Projects>
|
||||
<Projects Name="StackTrackDLLsDynamicLibrary.dll">windows\debug\stacktrack\StackTrackDLLsDynamicLibrary.bdsproj</Projects>
|
||||
<Projects Name="StackTrackDLLsComLibrary.dll">windows\debug\stacktrack\StackTrackDLLsComLibrary.bdsproj</Projects>
|
||||
<Projects Name="StackTrackExample.exe">windows\debug\stacktrack\StackTrackExample.bdsproj</Projects>
|
||||
<Projects Name="Targets">StackTrackDLLsExample.exe StackTrackDLLsStaticLibrary.dll StackTrackDLLsDynamicLibrary.dll StackTrackDLLsComLibrary.dll StackTrackExample.exe</Projects>
|
||||
</Projects>
|
||||
<Dependencies/>
|
||||
</Default.Personality>
|
||||
</BorlandProject>
|
||||
33
official/1.96/examples/JclDebugExamples.bpg
Normal file
33
official/1.96/examples/JclDebugExamples.bpg
Normal file
@ -0,0 +1,33 @@
|
||||
#------------------------------------------------------------------------------
|
||||
VERSION = BWS.01
|
||||
#------------------------------------------------------------------------------
|
||||
!ifndef ROOT
|
||||
ROOT = $(MAKEDIR)\..
|
||||
!endif
|
||||
#------------------------------------------------------------------------------
|
||||
MAKE = $(ROOT)\bin\make.exe -$(MAKEFLAGS) -f$**
|
||||
DCC = $(ROOT)\bin\dcc32.exe $**
|
||||
BRCC = $(ROOT)\bin\brcc32.exe $**
|
||||
#------------------------------------------------------------------------------
|
||||
PROJECTS = StackTrackDLLsExample.exe StackTrackDLLsStaticLibrary.dll \
|
||||
StackTrackDLLsDynamicLibrary.dll StackTrackDLLsComLibrary.dll StackTrackExample.exe
|
||||
#------------------------------------------------------------------------------
|
||||
default: $(PROJECTS)
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
StackTrackDLLsExample.exe: windows\debug\stacktrack\StackTrackDLLsExample.dpr
|
||||
$(DCC)
|
||||
|
||||
StackTrackDLLsStaticLibrary.dll: windows\debug\stacktrack\StackTrackDLLsStaticLibrary.dpr
|
||||
$(DCC)
|
||||
|
||||
StackTrackDLLsDynamicLibrary.dll: windows\debug\stacktrack\StackTrackDLLsDynamicLibrary.dpr
|
||||
$(DCC)
|
||||
|
||||
StackTrackDLLsComLibrary.dll: windows\debug\stacktrack\StackTrackDLLsComLibrary.dpr
|
||||
$(DCC)
|
||||
|
||||
StackTrackExample.exe: windows\debug\stacktrack\StackTrackExample.dpr
|
||||
$(DCC)
|
||||
|
||||
|
||||
@ -0,0 +1,2 @@
|
||||
[Directories]
|
||||
OutputDir=..\..\..\..\bin
|
||||
@ -0,0 +1,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.
|
||||
Binary file not shown.
@ -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
|
||||
@ -0,0 +1,246 @@
|
||||
unit AlgorithmsExampleMain;
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
{$IFDEF WIN32}
|
||||
Windows, Messages, Forms, ComCtrls, Graphics, Controls,
|
||||
Dialogs, StdCtrls,
|
||||
{$ENDIF}
|
||||
{$IFDEF LINUX}
|
||||
QForms, QStdCtrls, QControls, QComCtrls,
|
||||
{$ENDIF}
|
||||
SysUtils, Classes,
|
||||
JclContainerIntf, JclArrayLists, JclLinkedLists;
|
||||
|
||||
type
|
||||
TMainForm = class(TForm)
|
||||
PageControl1: TPageControl;
|
||||
tbsApply: TTabSheet;
|
||||
tbsFind: TTabSheet;
|
||||
tbsCountObject: TTabSheet;
|
||||
tbsCopy: TTabSheet;
|
||||
tbsReverse: TTabSheet;
|
||||
tbsSort: TTabSheet;
|
||||
btnApplyGenerate: TButton;
|
||||
btnApply: TButton;
|
||||
lbxApply: TListBox;
|
||||
btnFindGenerate: TButton;
|
||||
btnFind: TButton;
|
||||
lbxFind: TListBox;
|
||||
edtFind: TEdit;
|
||||
btnCountGenerate: TButton;
|
||||
btnCount: TButton;
|
||||
lbxCount: TListBox;
|
||||
edtCount: TEdit;
|
||||
btnCopyGenerate: TButton;
|
||||
btnCopy: TButton;
|
||||
lbxCopySrc: TListBox;
|
||||
lbxCopyDes: TListBox;
|
||||
btnReverseGenerate: TButton;
|
||||
btnReverse: TButton;
|
||||
lbxReverse: TListBox;
|
||||
btnSortGenerate: TButton;
|
||||
btnSort: TButton;
|
||||
lbxSort: TListBox;
|
||||
lblFound: TLabel;
|
||||
lblCount: TLabel;
|
||||
edtApply: TEdit;
|
||||
procedure btnApplyGenerateClick(Sender: TObject);
|
||||
procedure FormCreate(Sender: TObject);
|
||||
procedure btnApplyClick(Sender: TObject);
|
||||
procedure btnFindGenerateClick(Sender: TObject);
|
||||
procedure btnFindClick(Sender: TObject);
|
||||
procedure btnCountGenerateClick(Sender: TObject);
|
||||
procedure btnCountClick(Sender: TObject);
|
||||
procedure btnCopyGenerateClick(Sender: TObject);
|
||||
procedure btnCopyClick(Sender: TObject);
|
||||
procedure btnReverseGenerateClick(Sender: TObject);
|
||||
procedure btnReverseClick(Sender: TObject);
|
||||
procedure btnSortGenerateClick(Sender: TObject);
|
||||
procedure btnSortClick(Sender: TObject);
|
||||
private
|
||||
public
|
||||
List: IJclList;
|
||||
end;
|
||||
|
||||
var
|
||||
MainForm: TMainForm;
|
||||
|
||||
implementation
|
||||
|
||||
{$R *.dfm}
|
||||
|
||||
uses JclAlgorithms;
|
||||
|
||||
procedure TMainForm.btnApplyGenerateClick(Sender: TObject);
|
||||
var
|
||||
I: Integer;
|
||||
It: IJclIterator;
|
||||
begin
|
||||
List.Clear;
|
||||
for I := 1 to 10 do
|
||||
List.Add(TObject(I));
|
||||
lbxApply.Items.Clear;
|
||||
It := List.First;
|
||||
while It.HasNext do
|
||||
lbxApply.Items.Add(IntToStr(Integer(It.Next)));
|
||||
end;
|
||||
|
||||
procedure TMainForm.FormCreate(Sender: TObject);
|
||||
begin
|
||||
List := TJclArrayList.Create(16, False);
|
||||
end;
|
||||
|
||||
function Add2(AObject: TObject): TObject;
|
||||
begin
|
||||
Result := TObject(Integer(AObject) + 2);
|
||||
end;
|
||||
|
||||
procedure TMainForm.btnApplyClick(Sender: TObject);
|
||||
var
|
||||
It: IJclIterator;
|
||||
Value: Integer;
|
||||
begin
|
||||
Value := StrToIntDef(edtApply.Text, 0);
|
||||
JclAlgorithms.Apply(List.First, Value, Add2);
|
||||
lbxApply.Items.Clear;
|
||||
It := List.First;
|
||||
while It.HasNext do
|
||||
lbxApply.Items.Add(IntToStr(Integer(It.Next)));
|
||||
end;
|
||||
|
||||
procedure TMainForm.btnFindGenerateClick(Sender: TObject);
|
||||
var
|
||||
I: Integer;
|
||||
It: IJclIterator;
|
||||
begin
|
||||
List.Clear;
|
||||
for I := 1 to 10 do
|
||||
List.Add(TObject(I));
|
||||
lbxFind.Items.Clear;
|
||||
It := List.First;
|
||||
while It.HasNext do
|
||||
lbxFind.Items.Add(IntToStr(Integer(It.Next)));
|
||||
end;
|
||||
|
||||
procedure TMainForm.btnFindClick(Sender: TObject);
|
||||
var
|
||||
It: IJclIterator;
|
||||
Value: Integer;
|
||||
begin
|
||||
Value := StrToIntDef(edtFind.Text, 0);
|
||||
It := JclAlgorithms.Find(List.First, List.Size, TObject(Value), SimpleCompare);
|
||||
if It = nil then
|
||||
lblFound.Caption := 'Not found'
|
||||
else
|
||||
lblFound.Caption := 'Found';
|
||||
end;
|
||||
|
||||
procedure TMainForm.btnCountGenerateClick(Sender: TObject);
|
||||
var
|
||||
I: Integer;
|
||||
It: IJclIterator;
|
||||
begin
|
||||
Randomize;
|
||||
List.Clear;
|
||||
for I := 1 to 10 do
|
||||
List.Add(TObject(Random(10) + 1));
|
||||
lbxCount.Items.Clear;
|
||||
It := List.First;
|
||||
while It.HasNext do
|
||||
lbxCount.Items.Add(IntToStr(Integer(It.Next)));
|
||||
end;
|
||||
|
||||
procedure TMainForm.btnCountClick(Sender: TObject);
|
||||
var
|
||||
Count: Integer;
|
||||
Value: Integer;
|
||||
begin
|
||||
Value := StrToIntDef(edtCount.Text, 0);
|
||||
Count := JclAlgorithms.CountObject(List.First, List.Size, TObject(Value), SimpleCompare);
|
||||
lblCount.Caption := IntToStr(Count);
|
||||
end;
|
||||
|
||||
procedure TMainForm.btnCopyGenerateClick(Sender: TObject);
|
||||
var
|
||||
I: Integer;
|
||||
It: IJclIterator;
|
||||
begin
|
||||
Randomize;
|
||||
List.Clear;
|
||||
for I := 1 to 10 do
|
||||
List.Add(TObject(Random(10) + 1));
|
||||
lbxCopySrc.Items.Clear;
|
||||
It := List.First;
|
||||
while It.HasNext do
|
||||
lbxCopySrc.Items.Add(IntToStr(Integer(It.Next)));
|
||||
end;
|
||||
|
||||
procedure TMainForm.btnCopyClick(Sender: TObject);
|
||||
var
|
||||
AnotherList: IJclList;
|
||||
It: IJclIterator;
|
||||
begin
|
||||
AnotherList := TJclArrayList.Create(16, False);
|
||||
JclAlgorithms.Generate(AnotherList, 10, TObject(0));
|
||||
JclAlgorithms.Copy(List.First, List.Size, AnotherList.First);
|
||||
lbxCopyDes.Items.Clear;
|
||||
It := AnotherList.First;
|
||||
while It.HasNext do
|
||||
lbxCopyDes.Items.Add(IntToStr(Integer(It.Next)));
|
||||
end;
|
||||
|
||||
procedure TMainForm.btnReverseGenerateClick(Sender: TObject);
|
||||
var
|
||||
I: Integer;
|
||||
It: IJclIterator;
|
||||
begin
|
||||
List.Clear;
|
||||
for I := 1 to 10 do
|
||||
List.Add(TObject(I));
|
||||
lbxReverse.Items.Clear;
|
||||
It := List.First;
|
||||
while It.HasNext do
|
||||
lbxReverse.Items.Add(IntToStr(Integer(It.Next)));
|
||||
end;
|
||||
|
||||
procedure TMainForm.btnReverseClick(Sender: TObject);
|
||||
var
|
||||
It: IJclIterator;
|
||||
begin
|
||||
JclAlgorithms.Reverse(List.First, List.Last);
|
||||
lbxReverse.Items.Clear;
|
||||
It := List.First;
|
||||
while It.HasNext do
|
||||
lbxReverse.Items.Add(IntToStr(Integer(It.Next)));
|
||||
end;
|
||||
|
||||
procedure TMainForm.btnSortGenerateClick(Sender: TObject);
|
||||
var
|
||||
I: Integer;
|
||||
It: IJclIterator;
|
||||
begin
|
||||
Randomize;
|
||||
List.Clear;
|
||||
for I := 1 to 10 do
|
||||
List.Add(TObject(Random(10) - 5));
|
||||
lbxSort.Items.Clear;
|
||||
It := List.First;
|
||||
while It.HasNext do
|
||||
lbxSort.Items.Add(IntToStr(Integer(It.Next)));
|
||||
end;
|
||||
|
||||
procedure TMainForm.btnSortClick(Sender: TObject);
|
||||
var
|
||||
It: IJclIterator;
|
||||
begin
|
||||
JclAlgorithms.Sort(List, 0, 9, IntegerCompare);
|
||||
lbxSort.Items.Clear;
|
||||
It := List.First;
|
||||
while It.HasNext do
|
||||
lbxSort.Items.Add(IntToStr(Integer(It.Next)));
|
||||
end;
|
||||
|
||||
end.
|
||||
|
||||
@ -0,0 +1,76 @@
|
||||
[FileVersion]
|
||||
Version=6.0
|
||||
[Compiler]
|
||||
A=8
|
||||
B=0
|
||||
C=1
|
||||
D=1
|
||||
E=0
|
||||
F=0
|
||||
G=1
|
||||
H=1
|
||||
I=1
|
||||
J=0
|
||||
K=0
|
||||
L=1
|
||||
M=0
|
||||
N=1
|
||||
O=1
|
||||
P=1
|
||||
Q=0
|
||||
R=0
|
||||
S=0
|
||||
T=0
|
||||
U=0
|
||||
V=1
|
||||
W=0
|
||||
X=1
|
||||
Y=1
|
||||
Z=1
|
||||
ShowHints=1
|
||||
ShowWarnings=1
|
||||
UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
|
||||
[Linker]
|
||||
MapFile=0
|
||||
OutputObjs=0
|
||||
ConsoleApp=1
|
||||
DebugInfo=0
|
||||
RemoteSymbols=0
|
||||
MinStackSize=16384
|
||||
MaxStackSize=1048576
|
||||
ImageBase=4194304
|
||||
ExeDescription=
|
||||
[Directories]
|
||||
OutputDir=..\..\..\..\bin
|
||||
UnitOutputDir=
|
||||
PackageDLLOutputDir=
|
||||
PackageDCPOutputDir=
|
||||
SearchPath=
|
||||
Packages=
|
||||
Conditionals=
|
||||
DebugSourceDirs=
|
||||
UsePackages=0
|
||||
[Parameters]
|
||||
RunParams=
|
||||
HostApplication=
|
||||
Launcher=
|
||||
UseLauncher=0
|
||||
DebugCWD=
|
||||
[Language]
|
||||
ActiveLang=
|
||||
ProjectLang=
|
||||
RootDir=
|
||||
[Version Info]
|
||||
IncludeVerInfo=0
|
||||
AutoIncBuild=0
|
||||
MajorVer=1
|
||||
MinorVer=0
|
||||
Release=0
|
||||
Build=0
|
||||
Debug=0
|
||||
PreRelease=0
|
||||
Special=0
|
||||
Private=0
|
||||
DLL=0
|
||||
Locale=1031
|
||||
CodePage=1252
|
||||
@ -0,0 +1,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.
|
||||
Binary file not shown.
@ -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
|
||||
@ -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.
|
||||
|
||||
@ -0,0 +1,76 @@
|
||||
[FileVersion]
|
||||
Version=6.0
|
||||
[Compiler]
|
||||
A=8
|
||||
B=0
|
||||
C=1
|
||||
D=1
|
||||
E=0
|
||||
F=0
|
||||
G=1
|
||||
H=1
|
||||
I=1
|
||||
J=0
|
||||
K=0
|
||||
L=1
|
||||
M=0
|
||||
N=1
|
||||
O=1
|
||||
P=1
|
||||
Q=0
|
||||
R=0
|
||||
S=0
|
||||
T=0
|
||||
U=0
|
||||
V=1
|
||||
W=0
|
||||
X=1
|
||||
Y=1
|
||||
Z=1
|
||||
ShowHints=1
|
||||
ShowWarnings=1
|
||||
UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
|
||||
[Linker]
|
||||
MapFile=0
|
||||
OutputObjs=0
|
||||
ConsoleApp=1
|
||||
DebugInfo=0
|
||||
RemoteSymbols=0
|
||||
MinStackSize=16384
|
||||
MaxStackSize=1048576
|
||||
ImageBase=4194304
|
||||
ExeDescription=
|
||||
[Directories]
|
||||
OutputDir=..\..\..\..\bin
|
||||
UnitOutputDir=
|
||||
PackageDLLOutputDir=
|
||||
PackageDCPOutputDir=
|
||||
SearchPath=
|
||||
Packages=
|
||||
Conditionals=
|
||||
DebugSourceDirs=
|
||||
UsePackages=0
|
||||
[Parameters]
|
||||
RunParams=
|
||||
HostApplication=
|
||||
Launcher=
|
||||
UseLauncher=0
|
||||
DebugCWD=
|
||||
[Language]
|
||||
ActiveLang=
|
||||
ProjectLang=
|
||||
RootDir=
|
||||
[Version Info]
|
||||
IncludeVerInfo=0
|
||||
AutoIncBuild=0
|
||||
MajorVer=1
|
||||
MinorVer=0
|
||||
Release=0
|
||||
Build=0
|
||||
Debug=0
|
||||
PreRelease=0
|
||||
Special=0
|
||||
Private=0
|
||||
DLL=0
|
||||
Locale=1031
|
||||
CodePage=1252
|
||||
@ -0,0 +1,21 @@
|
||||
program 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.
|
||||
BIN
official/1.96/examples/common/containers/lists/ListExample.res
Normal file
BIN
official/1.96/examples/common/containers/lists/ListExample.res
Normal file
Binary file not shown.
@ -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
|
||||
@ -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.
|
||||
|
||||
134
official/1.96/examples/common/containers/lists/MyObjectList.pas
Normal file
134
official/1.96/examples/common/containers/lists/MyObjectList.pas
Normal 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.
|
||||
|
||||
@ -0,0 +1,3 @@
|
||||
[Directories]
|
||||
OutputDir=..\..\..\..\bin
|
||||
|
||||
@ -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.
|
||||
Binary file not shown.
@ -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
|
||||
@ -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.
|
||||
|
||||
@ -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.
|
||||
@ -0,0 +1,2 @@
|
||||
[Directories]
|
||||
OutputDir=..\..\..\..\bin
|
||||
@ -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.
|
||||
BIN
official/1.96/examples/common/containers/trees/TreeExample.res
Normal file
BIN
official/1.96/examples/common/containers/trees/TreeExample.res
Normal file
Binary file not shown.
@ -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
|
||||
@ -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.
|
||||
|
||||
@ -0,0 +1,3 @@
|
||||
[Directories]
|
||||
OutputDir=..\..\..\bin
|
||||
|
||||
16
official/1.96/examples/common/expreval/ExprEvalExample.dpr
Normal file
16
official/1.96/examples/common/expreval/ExprEvalExample.dpr
Normal 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.
|
||||
BIN
official/1.96/examples/common/expreval/ExprEvalExample.res
Normal file
BIN
official/1.96/examples/common/expreval/ExprEvalExample.res
Normal file
Binary file not shown.
105
official/1.96/examples/common/expreval/ExprEvalExampleLogic.pas
Normal file
105
official/1.96/examples/common/expreval/ExprEvalExampleLogic.pas
Normal file
@ -0,0 +1,105 @@
|
||||
unit ExprEvalExampleLogic;
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
SysUtils, Classes, JclExprEval;
|
||||
|
||||
procedure Init(Evaluator: TEasyEvaluator; FuncList: TStrings);
|
||||
function ResultAsText(Evaluator: TEvaluator; const Input: string): string;
|
||||
|
||||
implementation
|
||||
|
||||
uses
|
||||
JclMath;
|
||||
|
||||
procedure Init(Evaluator: TEasyEvaluator; FuncList: TStrings);
|
||||
begin
|
||||
with Evaluator do
|
||||
begin
|
||||
// Constants
|
||||
AddConst('Pi', Pi);
|
||||
|
||||
// Functions
|
||||
AddFunc('LogBase10', LogBase10);
|
||||
AddFunc('LogBase2', LogBase2);
|
||||
AddFunc('LogBaseN', LogBaseN);
|
||||
AddFunc('ArcCos', ArcCos);
|
||||
AddFunc('ArcCot', ArcCot);
|
||||
AddFunc('ArcCsc', ArcCsc);
|
||||
AddFunc('ArcSec', ArcSec);
|
||||
AddFunc('ArcSin', ArcSin);
|
||||
AddFunc('ArcTan', ArcTan);
|
||||
AddFunc('ArcTan2', ArcTan2);
|
||||
AddFunc('Cos', Cos);
|
||||
AddFunc('Cot', Cot);
|
||||
AddFunc('Coversine', Coversine);
|
||||
AddFunc('Csc', Csc);
|
||||
AddFunc('Exsecans', Exsecans);
|
||||
AddFunc('Haversine', Haversine);
|
||||
AddFunc('Sec', Sec);
|
||||
AddFunc('Sin', Sin);
|
||||
AddFunc('Tan', Tan);
|
||||
AddFunc('Versine', Versine);
|
||||
AddFunc('ArcCosH', ArcCosH);
|
||||
AddFunc('ArcCotH', ArcCotH);
|
||||
AddFunc('ArcCscH', ArcCscH);
|
||||
AddFunc('ArcSecH', ArcSecH);
|
||||
AddFunc('ArcSinH', ArcSinH);
|
||||
AddFunc('ArcTanH', ArcTanH);
|
||||
AddFunc('CosH', CosH);
|
||||
AddFunc('CotH', CotH);
|
||||
AddFunc('CscH', CscH);
|
||||
AddFunc('SecH', SecH);
|
||||
AddFunc('SinH', SinH);
|
||||
AddFunc('TanH', TanH);
|
||||
end;
|
||||
with FuncList do
|
||||
begin
|
||||
Add('LogBase10');
|
||||
Add('LogBase2');
|
||||
Add('LogBaseN');
|
||||
Add('ArcCos');
|
||||
Add('ArcCot');
|
||||
Add('ArcCsc');
|
||||
Add('ArcSec');
|
||||
Add('ArcSin');
|
||||
Add('ArcTan');
|
||||
Add('ArcTan2');
|
||||
Add('Cos');
|
||||
Add('Cot');
|
||||
Add('Coversine');
|
||||
Add('Csc');
|
||||
Add('Exsecans');
|
||||
Add('Haversine');
|
||||
Add('Sec');
|
||||
Add('Sin');
|
||||
Add('Tan');
|
||||
Add('Versine');
|
||||
Add('ArcCosH');
|
||||
Add('ArcCotH');
|
||||
Add('ArcCscH');
|
||||
Add('ArcSecH');
|
||||
Add('ArcSinH');
|
||||
Add('ArcTanH');
|
||||
Add('CosH');
|
||||
Add('CotH');
|
||||
Add('CscH');
|
||||
Add('SecH');
|
||||
Add('SinH');
|
||||
Add('TanH');
|
||||
end;
|
||||
end;
|
||||
|
||||
function ResultAsText(Evaluator: TEvaluator; const Input: string): string;
|
||||
begin
|
||||
try
|
||||
Result := FloatToStr(Evaluator.Evaluate(Input));
|
||||
except
|
||||
on E: Exception do
|
||||
Result := E.Message;
|
||||
end;
|
||||
end;
|
||||
|
||||
|
||||
end.
|
||||
@ -0,0 +1,71 @@
|
||||
object Form1: TForm1
|
||||
Left = 222
|
||||
Top = 107
|
||||
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
|
||||
@ -0,0 +1,67 @@
|
||||
unit ExprEvalExampleMain;
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
Windows, SysUtils, Classes, Graphics, Controls, Forms, StdCtrls,
|
||||
JclExprEval;
|
||||
|
||||
type
|
||||
TForm1 = class(TForm)
|
||||
ExpressionInput: TEdit;
|
||||
Memo1: TMemo;
|
||||
Label1: TLabel;
|
||||
EnterButton: TButton;
|
||||
FuncList: TComboBox;
|
||||
Label2: TLabel;
|
||||
procedure FormCreate(Sender: TObject);
|
||||
procedure FormDestroy(Sender: TObject);
|
||||
procedure EnterButtonClick(Sender: TObject);
|
||||
procedure FuncListClick(Sender: TObject);
|
||||
private
|
||||
{ Private declarations }
|
||||
FEvaluator: TEasyEvaluator;
|
||||
FX: Extended;
|
||||
FY: Extended;
|
||||
FZ: Extended;
|
||||
public
|
||||
{ Public declarations }
|
||||
end;
|
||||
|
||||
var
|
||||
Form1: TForm1;
|
||||
|
||||
implementation
|
||||
|
||||
{$R *.DFM}
|
||||
|
||||
uses
|
||||
ExprEvalExampleLogic;
|
||||
|
||||
procedure TForm1.FormCreate(Sender: TObject);
|
||||
begin
|
||||
FEvaluator := TEvaluator.Create;
|
||||
FEvaluator.AddVar('X', FX);
|
||||
FEvaluator.AddVar('Y', FY);
|
||||
FEvaluator.AddVar('Z', FZ);
|
||||
Init(FEvaluator, FuncList.Items);
|
||||
end;
|
||||
|
||||
procedure TForm1.FormDestroy(Sender: TObject);
|
||||
begin
|
||||
FEvaluator.Free;
|
||||
end;
|
||||
|
||||
procedure TForm1.EnterButtonClick(Sender: TObject);
|
||||
begin
|
||||
Memo1.Lines.Add(ResultAsText(FEvaluator as TEvaluator, ExpressionInput.Text));
|
||||
end;
|
||||
|
||||
procedure TForm1.FuncListClick(Sender: TObject);
|
||||
begin
|
||||
ExpressionInput.Text := ExpressionInput.Text + FuncList.Text;
|
||||
ActiveControl := ExpressionInput;
|
||||
ExpressionInput.SelStart := Length(ExpressionInput.Text);
|
||||
end;
|
||||
|
||||
end.
|
||||
@ -0,0 +1,2 @@
|
||||
[Directories]
|
||||
OutputDir=..\..\..\bin
|
||||
16
official/1.96/examples/common/expreval/QExprEvalExample.dpr
Normal file
16
official/1.96/examples/common/expreval/QExprEvalExample.dpr
Normal 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.
|
||||
BIN
official/1.96/examples/common/expreval/QExprEvalExample.res
Normal file
BIN
official/1.96/examples/common/expreval/QExprEvalExample.res
Normal file
Binary file not shown.
@ -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.
|
||||
@ -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
|
||||
@ -0,0 +1,2 @@
|
||||
[Directories]
|
||||
OutputDir=../../../bin
|
||||
13
official/1.96/examples/common/filesearch/QFileSearchDemo.dpr
Normal file
13
official/1.96/examples/common/filesearch/QFileSearchDemo.dpr
Normal 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.
|
||||
BIN
official/1.96/examples/common/filesearch/QFileSearchDemo.res
Normal file
BIN
official/1.96/examples/common/filesearch/QFileSearchDemo.res
Normal file
Binary file not shown.
353
official/1.96/examples/common/filesearch/QFileSearchDemoMain.dfm
Normal file
353
official/1.96/examples/common/filesearch/QFileSearchDemoMain.dfm
Normal 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
|
||||
280
official/1.96/examples/common/filesearch/QFileSearchDemoMain.pas
Normal file
280
official/1.96/examples/common/filesearch/QFileSearchDemoMain.pas
Normal 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.
|
||||
|
||||
378
official/1.96/examples/common/filesearch/QFileSearchDemoMain.xfm
Normal file
378
official/1.96/examples/common/filesearch/QFileSearchDemoMain.xfm
Normal 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
|
||||
4
official/1.96/examples/common/graphics/QClipLineDemo.dof
Normal file
4
official/1.96/examples/common/graphics/QClipLineDemo.dof
Normal file
@ -0,0 +1,4 @@
|
||||
[Directories]
|
||||
OutputDir=../../../bin
|
||||
Conditionals=VisualCLX;MATH_SINGLE_PRECISION
|
||||
|
||||
15
official/1.96/examples/common/graphics/QClipLineDemo.dpr
Normal file
15
official/1.96/examples/common/graphics/QClipLineDemo.dpr
Normal 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.
|
||||
BIN
official/1.96/examples/common/graphics/QClipLineDemo.res
Normal file
BIN
official/1.96/examples/common/graphics/QClipLineDemo.res
Normal file
Binary file not shown.
17
official/1.96/examples/common/graphics/QClipLineDemoMain.dfm
Normal file
17
official/1.96/examples/common/graphics/QClipLineDemoMain.dfm
Normal file
@ -0,0 +1,17 @@
|
||||
object Form1: TForm1
|
||||
Left = 198
|
||||
Top = 147
|
||||
Width = 400
|
||||
Height = 400
|
||||
Caption = 'ClipLine Demo'
|
||||
Color = 15790320
|
||||
OnCreate = FormCreate
|
||||
OnPaint = FormPaint
|
||||
PixelsPerInch = 96
|
||||
TextHeight = 13
|
||||
object Timer1: TTimer
|
||||
Enabled = False
|
||||
Left = 32
|
||||
Top = 24
|
||||
end
|
||||
end
|
||||
94
official/1.96/examples/common/graphics/QClipLineDemoMain.pas
Normal file
94
official/1.96/examples/common/graphics/QClipLineDemoMain.pas
Normal 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.
|
||||
|
||||
19
official/1.96/examples/common/graphics/QClipLineDemoMain.xfm
Normal file
19
official/1.96/examples/common/graphics/QClipLineDemoMain.xfm
Normal 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
|
||||
@ -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
|
||||
@ -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.
|
||||
@ -0,0 +1,3 @@
|
||||
[Directories]
|
||||
OutputDir=..\..\..\bin
|
||||
|
||||
@ -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.
|
||||
BIN
official/1.96/examples/common/graphics/StretchGraphicExample.res
Normal file
BIN
official/1.96/examples/common/graphics/StretchGraphicExample.res
Normal file
Binary file not shown.
@ -0,0 +1,3 @@
|
||||
[Directories]
|
||||
OutputDir=..\..\..\bin
|
||||
|
||||
15
official/1.96/examples/common/multimedia/MidiOutExample.dpr
Normal file
15
official/1.96/examples/common/multimedia/MidiOutExample.dpr
Normal 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.
|
||||
BIN
official/1.96/examples/common/multimedia/MidiOutExample.res
Normal file
BIN
official/1.96/examples/common/multimedia/MidiOutExample.res
Normal file
Binary file not shown.
489
official/1.96/examples/common/multimedia/MidiOutExampleMain.dfm
Normal file
489
official/1.96/examples/common/multimedia/MidiOutExampleMain.dfm
Normal 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
|
||||
194
official/1.96/examples/common/multimedia/MidiOutExampleMain.pas
Normal file
194
official/1.96/examples/common/multimedia/MidiOutExampleMain.pas
Normal 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.
|
||||
|
||||
@ -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
|
||||
@ -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.
|
||||
@ -0,0 +1,2 @@
|
||||
[Directories]
|
||||
OutputDir=../../../bin
|
||||
@ -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
Loading…
Reference in New Issue
Block a user