20070107 release of Orpheus - initial commit to SVN.
git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@44 8e941d3f-bd1b-0410-a28a-d453659cc2b4
BIN
components/orpheus/ORBLUEDOT.bmp
Normal file
After Width: | Height: | Size: 318 B |
BIN
components/orpheus/ORBTNCLC.bmp
Normal file
After Width: | Height: | Size: 206 B |
BIN
components/orpheus/ORCOLUMNMOVECURSOR.cur
Normal file
After Width: | Height: | Size: 326 B |
BIN
components/orpheus/ORREDDOT.bmp
Normal file
After Width: | Height: | Size: 318 B |
BIN
components/orpheus/ORROWMOVECURSOR.cur
Normal file
After Width: | Height: | Size: 326 B |
BIN
components/orpheus/ORTCCHECKGLYPHS.bmp
Normal file
After Width: | Height: | Size: 454 B |
BIN
components/orpheus/ORTCCOMBOARROW.bmp
Normal file
After Width: | Height: | Size: 162 B |
570
components/orpheus/OrphStatus.html
Normal file
@ -0,0 +1,570 @@
|
|||||||
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
|
||||||
|
<!--Copyright 2006 Phil Hess-->
|
||||||
|
<HTML>
|
||||||
|
|
||||||
|
<HEAD>
|
||||||
|
|
||||||
|
<TITLE>Status of Orpheus Port</TITLE>
|
||||||
|
|
||||||
|
<META NAME="AUTHOR" CONTENT="Phil Hess">
|
||||||
|
</HEAD>
|
||||||
|
|
||||||
|
<BODY>
|
||||||
|
|
||||||
|
<CENTER>
|
||||||
|
<H1>Status of Orpheus Port</H1>
|
||||||
|
</CENTER>
|
||||||
|
|
||||||
|
<HR>
|
||||||
|
<H3>Contents</H3>
|
||||||
|
<A HREF="#Whats_New">What's New</A><BR>
|
||||||
|
<A HREF="#Introduction">Introduction</A><BR>
|
||||||
|
<A HREF="#Installation">Installation</A><BR>
|
||||||
|
<A HREF="#Platforms_Tested">Platforms Tested</A><BR>
|
||||||
|
<A HREF="#Examples">Examples</A><BR>
|
||||||
|
<A HREF="#Porting_Philosophy">Porting Philosophy</A><BR>
|
||||||
|
<A HREF="#Usage_Notes">Usage Notes</A><BR>
|
||||||
|
<A HREF="#Limitations">Limitations</A><BR>
|
||||||
|
<A HREF="#Status_Controls">Status of Individual Controls</A><BR>
|
||||||
|
<A HREF="#To_Do">To Do</A><BR>
|
||||||
|
<A HREF="#Other_Resources">Other Resources</A><P>
|
||||||
|
|
||||||
|
<HR>
|
||||||
|
<A name="Whats_New"></A><H3>What's New</H3>
|
||||||
|
|
||||||
|
<UL>
|
||||||
|
<LI>20070107 release
|
||||||
|
<UL>
|
||||||
|
<LI>TOvcVirtualListBox control added.
|
||||||
|
<LI>Installation no longer registers TOvcSimpleField and TOvcTCSimpleField
|
||||||
|
controls (see myovcreg.pas) on non-Windows platforms since these two controls
|
||||||
|
don't work on other platforms and crash Lazarus IDE if added to a form on
|
||||||
|
those platforms.
|
||||||
|
</UL>
|
||||||
|
</UL>
|
||||||
|
|
||||||
|
<HR>
|
||||||
|
<A name="Introduction"></A><H3>Introduction</H3>
|
||||||
|
|
||||||
|
These notes describe the status of the OrphPort Project, an attempt to
|
||||||
|
port a subset of TurboPower's Orpheus controls to <A HREF="http://www.lazarus.freepascal.org">Lazarus</A>
|
||||||
|
and <A HREF="http://www.freepascal.org">Free Pascal</A>. At this time,
|
||||||
|
several <B>enhanced label controls</B> and most of the <B>table (grid) controls</B>
|
||||||
|
have been ported. Some of the controls
|
||||||
|
work quite well on multiple platforms; others need more work or
|
||||||
|
await better support by the Lazarus LCL or by specific widgetsets before
|
||||||
|
they are fully functional. The table below gives the status of individual
|
||||||
|
controls. You are encouraged to work on improving these controls
|
||||||
|
(see <A HREF="#To_Do">To Do list</A>). Please send your bug reports, suggestions
|
||||||
|
and patches to:<P>
|
||||||
|
|
||||||
|
MacPgmr (at) fastermac (dot) net<P>
|
||||||
|
|
||||||
|
<I>Note:</I> You can also post to the "Ported from Delphi/Kylix" section of the Lazarus
|
||||||
|
forum if you want your bug reports and suggestions to be seen by the entire
|
||||||
|
Lazarus community.<P>
|
||||||
|
|
||||||
|
The ported source code is here: <A HREF="http://web.fastermac.net/~MacPgmr/OrphPort/downloads">http://web.fastermac.net/~MacPgmr/OrphPort/downloads</A><P>
|
||||||
|
|
||||||
|
The original Orpheus 4.06 source code that this port was based on is here:
|
||||||
|
|
||||||
|
<A HREF="http://sourceforge.net/projects/tporpheus">http://sourceforge.net/projects/tporpheus</A>
|
||||||
|
(although you don't need this for Lazarus)<p>
|
||||||
|
|
||||||
|
TurboPower's 1,392-page Orpheus User's Manual is also available from the Source Forge site.<P>
|
||||||
|
|
||||||
|
Note that the ported source remains under the original MPL 1.1 license.
|
||||||
|
|
||||||
|
<HR>
|
||||||
|
<A name="Installation"></A><H3>Installation</H3>
|
||||||
|
|
||||||
|
<OL>
|
||||||
|
<LI>Unzip the ported source files into their own folder.
|
||||||
|
<LI>Start Lazarus.
|
||||||
|
<LI>Optionally, choose File | New | Application to make sure Lazarus doesn't
|
||||||
|
mess up the currently open project.
|
||||||
|
<LI>Choose Component | Open package file and select orpheus.lpk.
|
||||||
|
<LI>Click Compile to make sure your version of Lazarus can compile the
|
||||||
|
Orpheus units.
|
||||||
|
<LI>Click Install and click Yes when prompted to rebuild the Lazarus IDE.
|
||||||
|
<LI>After rebuilding is finished, restart Lazarus if it didn't restart
|
||||||
|
automatically. The installed Orpheus controls will be on the Orpheus tab
|
||||||
|
of the component palette.
|
||||||
|
</OL>
|
||||||
|
|
||||||
|
<I>Important!</I> If you don't have write access to the folder where Lazarus
|
||||||
|
is installed, you may have problems rebuilding the Lazarus IDE with older
|
||||||
|
versions of Lazarus. However, if you have a relatively new version of Lazarus,
|
||||||
|
it will compile itself to the ~/.lazarus/bin folder if you don't have write
|
||||||
|
access to the Lazarus install folder. After rebuilding, be sure to start
|
||||||
|
~/.lazarus/bin/lazarus, not the installed Lazarus.<P>
|
||||||
|
|
||||||
|
<HR>
|
||||||
|
<A name="Platforms_Tested"></A><H3>Platforms Tested</H3>
|
||||||
|
|
||||||
|
<TABLE BORDER=1 CELLPADDING=3>
|
||||||
|
|
||||||
|
<TR VALIGN=TOP>
|
||||||
|
<TH>Platform</TH>
|
||||||
|
<TH>OS Version</TH>
|
||||||
|
<TH>Library Versions</TH>
|
||||||
|
<TH>Widgetsets Tested</TH>
|
||||||
|
<TH>Lazarus Version Tested</TH>
|
||||||
|
</TR>
|
||||||
|
|
||||||
|
<TR VALIGN=TOP>
|
||||||
|
<TD>Windows</TD>
|
||||||
|
<TD>XP SP2</TD>
|
||||||
|
<TD> </TD>
|
||||||
|
<TD>win32</TD>
|
||||||
|
<TD>20070105 snapshot of 0.9.21 with FPC 2.1.1</TD>
|
||||||
|
</TR>
|
||||||
|
|
||||||
|
<TR VALIGN=TOP>
|
||||||
|
<TD>OS X</TD>
|
||||||
|
<TD>10.3.9 (Panther) on PowerPC</TD>
|
||||||
|
<TD>gtk: 1.2.0.9.1<BR>qt: 4.1.4</TD>
|
||||||
|
<TD>gtk, carbon, qt</TD>
|
||||||
|
<TD>20070105 snapshot of 0.9.21 with FPC 2.0.4</TD>
|
||||||
|
</TR>
|
||||||
|
|
||||||
|
<TR VALIGN=TOP>
|
||||||
|
<TD>Linux</TD>
|
||||||
|
<TD>SUSE 10.1</TD>
|
||||||
|
<TD>gtk: 1.2.10-907</TD>
|
||||||
|
<TD>gtk</TD>
|
||||||
|
<TD>Stable 0.9.20 with FPC 2.0.4</TD>
|
||||||
|
</TR>
|
||||||
|
|
||||||
|
</TABLE><BR>
|
||||||
|
|
||||||
|
<HR>
|
||||||
|
<A name="Examples"></A><H3>Examples</H3>
|
||||||
|
|
||||||
|
The source for several small test applications is included which demonstrates
|
||||||
|
most of the ported controls. Open each test app's .lpi file and compile it once
|
||||||
|
Orpheus has been installed in Lazarus. Folders for the test apps are located
|
||||||
|
in the <I>tests</I> folder in your Orpheus folder, as follows:
|
||||||
|
<UL>
|
||||||
|
<LI>TestTable - demos TOvcTable and various table cell controls (column
|
||||||
|
headers, row labels, string, memo, check box, combo box, bitmap).
|
||||||
|
<LI>TestURL - demos TOvcURL
|
||||||
|
<LI>TestRLbl - demos TOvcRotatedLabel
|
||||||
|
<LI>TestLabel - demos TOvcLabel
|
||||||
|
<LI>TestVLB - demos TOvcVirtualListBox
|
||||||
|
</UL>
|
||||||
|
|
||||||
|
To see the TOvcSpinner control in action, try out the table's Rows and Columns
|
||||||
|
property editors with the TestTable app.<P>
|
||||||
|
|
||||||
|
<I>Note:</I> The TestTable app uses the included .bmp files to demo the
|
||||||
|
TOvcTCBitMap control. These bitmap files are not needed to rebuild the Lazarus
|
||||||
|
IDE since they're in the ovcreg.lrs resource file, but they are
|
||||||
|
included for completeness.<p>
|
||||||
|
|
||||||
|
<I>Tip:</I> The necessary files for compiling the test apps with Delphi are
|
||||||
|
also included (.dof, .dfm, .bdsproj). If you have Delphi you can compile
|
||||||
|
the apps to see exactly how the Orpheus controls are supposed to look and
|
||||||
|
behave. Note that with the free Turbo Delphi Explorer you can't install
|
||||||
|
Orpheus (a limitation of the free version). However, you can still compile
|
||||||
|
the test apps, as follows:
|
||||||
|
<UL>
|
||||||
|
<LI>Start Turbo Delphi Explorer and open the test app's .bdsproj file.
|
||||||
|
<LI>Click Ignore All to proceed when Delphi encounters the unrecognized
|
||||||
|
Orpheus controls.
|
||||||
|
<LI>Choose File | Close and click Cancel to close the main form.
|
||||||
|
<LI>Choose Project | Options and make sure the Search path in
|
||||||
|
Directories/Conditionals points to your Orpheus folder.
|
||||||
|
<LI>Choose Project | Compile to compile the test app.
|
||||||
|
</UL>
|
||||||
|
|
||||||
|
<HR>
|
||||||
|
<A name="Porting_Philosophy"></A><H3>Porting Philosophy</H3>
|
||||||
|
|
||||||
|
<UL>
|
||||||
|
<LI>All changes to the original source code were made via conditional
|
||||||
|
compiling (IFDEF's). Thus the ported source retains full Delphi compatibility.
|
||||||
|
An added benefit is that you can see what the original code was, something
|
||||||
|
that is often lost with ported code.
|
||||||
|
<LI>A compatibility unit, <I>MyMisc</I>, was added to fill in gaps in the
|
||||||
|
Lazarus LCL and provide other compatibility routines.
|
||||||
|
<LI>Orpheus functions written in assembly were "Pascal-ized" so the ported code could
|
||||||
|
be compiled on non-Intel platforms.
|
||||||
|
<LI>For now, the Lazarus package (orpheus.lpk) compiles the source with range,
|
||||||
|
overflow and stack checking turned on. This revealed several apparently harmless
|
||||||
|
bugs in the TurboPower code, which have been fixed. To find these and other
|
||||||
|
minor bugs, grep the source for "TurboPower bug".
|
||||||
|
<LI>In general, no other significant changes or "improvements" were made to
|
||||||
|
the source. An exception is the o32tcflx unit, where a few additions were
|
||||||
|
made to correct apparent omissions or inconsistencies.
|
||||||
|
<LI>A note on comments: Comments added to the ported source are generally
|
||||||
|
marked with "//". However, the "o32" units (developed later than other units
|
||||||
|
by TurboPower) already included some "//" comments. With these units, you can
|
||||||
|
tell the added comments by their context (near IFDEF's, for example).
|
||||||
|
</UL>
|
||||||
|
|
||||||
|
<HR>
|
||||||
|
<A name="Usage_Notes"></A><H3>Usage Notes</H3>
|
||||||
|
|
||||||
|
<OL>
|
||||||
|
<LI>When you first add an Orpheus control to a form, Lazarus will add
|
||||||
|
the Orpheus unit to the uses section of your main source file (.lpr).
|
||||||
|
This pulls in a great deal of code that you don't need. Delete the Orpheus unit
|
||||||
|
from the uses section to reduce the size of your executable file.<P>
|
||||||
|
<LI>Several of the ported controls are not supported by the GTK widgetset
|
||||||
|
(see table below). Don't use these controls in cross-platform applications.
|
||||||
|
Just opening a form that has a TOvcSimpleField or TOvcTCSimpleField control
|
||||||
|
on it will likely crash the Lazarus IDE with GTK. Use the
|
||||||
|
TO32FlexEdit and TO32TCFlexEdit controls in place of TOvcSimpleField and
|
||||||
|
TOvcTCSimpleField controls in cross-platform applications.<P>
|
||||||
|
<LI>To display the TOvcLabel's Style Manager property editor in the Lazarus
|
||||||
|
IDE, right-click on the TOvcLabel control (Apple key+click on Mac). You can
|
||||||
|
also change Style Manager properties via the CustomSettings in the
|
||||||
|
Object Inspector. Also, with GTK, the default clNone Color displays a black
|
||||||
|
background, so be sure to set ParentColor to True or select a different
|
||||||
|
Color.<P>
|
||||||
|
<LI>An added benefit of the Orpheus TOvcSpinner control is that it is
|
||||||
|
available for Delphi too, unlike the LCL TSpinEdit, which has no equivalent
|
||||||
|
in the Delphi VCL.
|
||||||
|
</OL>
|
||||||
|
|
||||||
|
<HR>
|
||||||
|
<A name="Limitations"></A><H3>Limitations</H3>
|
||||||
|
|
||||||
|
<OL>
|
||||||
|
<LI>The TO32FlexEdit and TO32TCFlexEdit controls include code for displaying
|
||||||
|
an optional button within the text editing area. However, this TBitBtn-within-
|
||||||
|
a-TEdit is not supported by the LCL, so the code has been IFDEF'd out for now.
|
||||||
|
If this is ever supported by the LCL, defining ButtonOkay in o32flxed.pas
|
||||||
|
is all that's needed to enable the button code.<P>
|
||||||
|
<LI>Widgetsets generally implement LCL controls by creating native controls
|
||||||
|
that correspond to the LCL controls (text edit, check box, etc.). However,
|
||||||
|
Orpheus builds its TOvcSimpleField control from TCustomControl, rather than
|
||||||
|
descending from an existing edit control such as TCustomEdit. This sort of
|
||||||
|
edit control does not appear to be supported by the GTK widgetset.<P>
|
||||||
|
<LI>The GTK and Carbon widgetsets do not support TOvcRotatedLabel, apparently
|
||||||
|
because the GetTextMetrics function is not fully implemented on those
|
||||||
|
widgetsets.
|
||||||
|
</OL>
|
||||||
|
|
||||||
|
<HR>
|
||||||
|
<A name="Status_Controls"></A><H3>Status of Individual Controls</H3>
|
||||||
|
|
||||||
|
<TABLE BORDER=1 CELLPADDING=3>
|
||||||
|
|
||||||
|
<TR VALIGN=TOP>
|
||||||
|
<TH>Control</TH>
|
||||||
|
<TH>VCL / LCL ancestor</TH>
|
||||||
|
<TH>Description</TH>
|
||||||
|
<TH>Issues / To-do</TH>
|
||||||
|
<TH>win32</TH>
|
||||||
|
<TH>gtk</TH>
|
||||||
|
<TH>carbon</TH>
|
||||||
|
<TH>qt</TH>
|
||||||
|
</TR>
|
||||||
|
|
||||||
|
<TR VALIGN=TOP>
|
||||||
|
<TD>TOvcRotatedLabel<BR><IMG SRC="TOVCROTATEDLABEL.bmp"></TD>
|
||||||
|
<TD>TGraphicControl</TD>
|
||||||
|
<TD>Rotated text</TD>
|
||||||
|
<TD>gtk and carbon don't support</TD>
|
||||||
|
<TD>Working</TD>
|
||||||
|
<TD>Not working</TD>
|
||||||
|
<TD>Not working</TD>
|
||||||
|
<TD>Working</TD>
|
||||||
|
</TR>
|
||||||
|
|
||||||
|
<TR VALIGN=TOP>
|
||||||
|
<TD>TOvcLabel<BR><IMG SRC="TOVCLABEL.bmp"></TD>
|
||||||
|
<TD>TGraphicControl</TD>
|
||||||
|
<TD>Fancy shading, color and highlighting</TD>
|
||||||
|
<TD>Property editor still needs work</TD>
|
||||||
|
<TD>Working</TD>
|
||||||
|
<TD>Working</TD>
|
||||||
|
<TD>Not working</TD>
|
||||||
|
<TD>Crashes</TD>
|
||||||
|
</TR>
|
||||||
|
|
||||||
|
<TR VALIGN=TOP>
|
||||||
|
<TD>TOvcURL<BR><IMG SRC="TOVCURL.bmp"></TD>
|
||||||
|
<TD>TCustomLabel</TD>
|
||||||
|
<TD>Looks and acts like HTML hyperlink</TD>
|
||||||
|
<TD>No TLabel yet on carbon</TD>
|
||||||
|
<TD>Working</TD>
|
||||||
|
<TD>Working</TD>
|
||||||
|
<TD>Not working</TD>
|
||||||
|
<TD>Partial</TD>
|
||||||
|
</TR>
|
||||||
|
|
||||||
|
<TR VALIGN=TOP>
|
||||||
|
<TD>TOvcSpinner<BR><IMG SRC="TOVCSPINNER.bmp"></TD>
|
||||||
|
<TD>TCustomControl</TD>
|
||||||
|
<TD>Can associate with a TEdit; 8 different styles</TD>
|
||||||
|
<TD> </TD>
|
||||||
|
<TD>Working</TD>
|
||||||
|
<TD>Working</TD>
|
||||||
|
<TD>Crashes</TD>
|
||||||
|
<TD>Crashes</TD>
|
||||||
|
</TR>
|
||||||
|
|
||||||
|
<TR VALIGN=TOP>
|
||||||
|
<TD>TOvcVirtualListBox<BR><IMG SRC="TOVCVIRTUALLISTBOX.bmp"></TD>
|
||||||
|
<TD>TCustomControl</TD>
|
||||||
|
<TD>Tabs, header, huge number of rows</TD>
|
||||||
|
<TD>Scrolling problems</TD>
|
||||||
|
<TD>Partial</TD>
|
||||||
|
<TD>Partial</TD>
|
||||||
|
<TD>?</TD>
|
||||||
|
<TD>Not working</TD>
|
||||||
|
</TR>
|
||||||
|
|
||||||
|
<TR VALIGN=TOP>
|
||||||
|
<TD>TOvcSimpleField<BR><IMG SRC="TOVCSIMPLEFIELD.bmp"></TD>
|
||||||
|
<TD>TCustomControl</TD>
|
||||||
|
<TD>Edit control with validation</TD>
|
||||||
|
<TD>gtk doesn't support</TD>
|
||||||
|
<TD>Working</TD>
|
||||||
|
<TD>Crashes</TD>
|
||||||
|
<TD>?</TD>
|
||||||
|
<TD>Crashes</TD>
|
||||||
|
</TR>
|
||||||
|
|
||||||
|
<TR VALIGN=TOP>
|
||||||
|
<TD>TO32FlexEdit<BR><IMG SRC="TO32FLEXEDIT.bmp"></TD>
|
||||||
|
<TD>TCustomEdit</TD>
|
||||||
|
<TD>Edit control with validation</TD>
|
||||||
|
<TD>See "To Do" list</TD>
|
||||||
|
<TD>Working</TD>
|
||||||
|
<TD>Working</TD>
|
||||||
|
<TD>Crashes</TD>
|
||||||
|
<TD>Working</TD>
|
||||||
|
</TR>
|
||||||
|
|
||||||
|
<TR VALIGN=TOP>
|
||||||
|
<TD>TOvcTable<BR><IMG SRC="TOVCTABLE.bmp"></TD>
|
||||||
|
<TD>TCustomControl</TD>
|
||||||
|
<TD>Full-featured grid control</TD>
|
||||||
|
<TD>See "To Do" list</TD>
|
||||||
|
<TD>Working</TD>
|
||||||
|
<TD>Working</TD>
|
||||||
|
<TD>?</TD>
|
||||||
|
<TD>?</TD>
|
||||||
|
</TR>
|
||||||
|
|
||||||
|
<TR VALIGN=TOP>
|
||||||
|
<TD>TOvcTCColHead<BR><IMG SRC="TOVCTCCOLHEAD.bmp"></TD>
|
||||||
|
<TD>TComponent</TD>
|
||||||
|
<TD>Table column headings</TD>
|
||||||
|
<TD> </TD>
|
||||||
|
<TD>Working</TD>
|
||||||
|
<TD>Working</TD>
|
||||||
|
<TD>?</TD>
|
||||||
|
<TD>?</TD>
|
||||||
|
</TR>
|
||||||
|
|
||||||
|
<TR VALIGN=TOP>
|
||||||
|
<TD>TOvcTCRowHead<BR><IMG SRC="TOVCTCROWHEAD.bmp"></TD>
|
||||||
|
<TD>TComponent</TD>
|
||||||
|
<TD>Table row headings</TD>
|
||||||
|
<TD> </TD>
|
||||||
|
<TD>Working</TD>
|
||||||
|
<TD>Working</TD>
|
||||||
|
<TD>?</TD>
|
||||||
|
<TD>?</TD>
|
||||||
|
</TR>
|
||||||
|
|
||||||
|
<TR VALIGN=TOP>
|
||||||
|
<TD>TOvcTCString<BR><IMG SRC="TOVCTCSTRING.bmp"></TD>
|
||||||
|
<TD>TComponent<BR>(edits with TEdit)</TD>
|
||||||
|
<TD>Table cell for editing strings</TD>
|
||||||
|
<TD> </TD>
|
||||||
|
<TD>Working</TD>
|
||||||
|
<TD>Working</TD>
|
||||||
|
<TD>?</TD>
|
||||||
|
<TD>?</TD>
|
||||||
|
</TR>
|
||||||
|
|
||||||
|
<TR VALIGN=TOP>
|
||||||
|
<TD>TOvcTCSimpleField<BR><IMG SRC="TOVCTCSIMPLEFIELD.bmp"></TD>
|
||||||
|
<TD>TComponent<BR>(edits with TOvcSimpleField)</TD>
|
||||||
|
<TD>Table cell for editing strings, with validation</TD>
|
||||||
|
<TD>gtk doesn't support</TD>
|
||||||
|
<TD>Working</TD>
|
||||||
|
<TD>Crashes</TD>
|
||||||
|
<TD>?</TD>
|
||||||
|
<TD>?</TD>
|
||||||
|
</TR>
|
||||||
|
|
||||||
|
<TR VALIGN=TOP>
|
||||||
|
<TD>TOvcTCMemo<BR><IMG SRC="TOVCTCMEMO.bmp"></TD>
|
||||||
|
<TD>TComponent<BR>(edits with TMemo)</TD>
|
||||||
|
<TD>Table cell for editing memo text</TD>
|
||||||
|
<TD> </TD>
|
||||||
|
<TD>Working</TD>
|
||||||
|
<TD>Working</TD>
|
||||||
|
<TD>?</TD>
|
||||||
|
<TD>?</TD>
|
||||||
|
</TR>
|
||||||
|
|
||||||
|
<TR VALIGN=TOP>
|
||||||
|
<TD>TOvcTCCheckBox<BR><IMG SRC="TOVCTCCHECKBOX.bmp"></TD>
|
||||||
|
<TD>TComponent<BR>(edits with TCustomControl)</TD>
|
||||||
|
<TD>Table cell for check box</TD>
|
||||||
|
<TD> </TD>
|
||||||
|
<TD>Working</TD>
|
||||||
|
<TD>Working</TD>
|
||||||
|
<TD>?</TD>
|
||||||
|
<TD>?</TD>
|
||||||
|
</TR>
|
||||||
|
|
||||||
|
<TR VALIGN=TOP>
|
||||||
|
<TD>TOvcTCComboBox<BR><IMG SRC="TOVCTCCOMBOBOX.bmp"></TD>
|
||||||
|
<TD>TComponent<BR>(edits with TComboBox)</TD>
|
||||||
|
<TD>Table cell for combo box</TD>
|
||||||
|
<TD>Dropdown problem w/o XP manifest</TD>
|
||||||
|
<TD>Working</TD>
|
||||||
|
<TD>Working</TD>
|
||||||
|
<TD>?</TD>
|
||||||
|
<TD>?</TD>
|
||||||
|
</TR>
|
||||||
|
|
||||||
|
<TR VALIGN=TOP>
|
||||||
|
<TD>TOvcTCBitmap<BR><IMG SRC="TOVCTCBITMAP.bmp"></TD>
|
||||||
|
<TD>TComponent</TD>
|
||||||
|
<TD>Table cell for displaying bitmap</TD>
|
||||||
|
<TD> </TD>
|
||||||
|
<TD>Working</TD>
|
||||||
|
<TD>Working</TD>
|
||||||
|
<TD>?</TD>
|
||||||
|
<TD>?</TD>
|
||||||
|
</TR>
|
||||||
|
|
||||||
|
<TR VALIGN=TOP>
|
||||||
|
<TD>TOvcTCGlyph<BR><IMG SRC="TOVCTCGLYPH.bmp"></TD>
|
||||||
|
<TD>TComponent</TD>
|
||||||
|
<TD>Table cell for cycling thru glyphs</TD>
|
||||||
|
<TD> </TD>
|
||||||
|
<TD>Working?</TD>
|
||||||
|
<TD>Working?</TD>
|
||||||
|
<TD>?</TD>
|
||||||
|
<TD>?</TD>
|
||||||
|
</TR>
|
||||||
|
|
||||||
|
<TR VALIGN=TOP>
|
||||||
|
<TD>TOvcTCIcon<BR><IMG SRC="TOVCTCICON.bmp"></TD>
|
||||||
|
<TD>TComponent</TD>
|
||||||
|
<TD>Table cell for displaying icon</TD>
|
||||||
|
<TD> </TD>
|
||||||
|
<TD>Working?</TD>
|
||||||
|
<TD>Working?</TD>
|
||||||
|
<TD>?</TD>
|
||||||
|
<TD>?</TD>
|
||||||
|
</TR>
|
||||||
|
|
||||||
|
<TR VALIGN=TOP>
|
||||||
|
<TD>TO32TCFlexEdit<BR><IMG SRC="TO32TCFLEXEDIT.bmp"></TD>
|
||||||
|
<TD>TComponent<BR>(edits with TO32FlexEdit)</TD>
|
||||||
|
<TD>Table cell for editing strings, with validation</TD>
|
||||||
|
<TD> </TD>
|
||||||
|
<TD>Working</TD>
|
||||||
|
<TD>Working</TD>
|
||||||
|
<TD>?</TD>
|
||||||
|
<TD>?</TD>
|
||||||
|
</TR>
|
||||||
|
|
||||||
|
<TR VALIGN=TOP>
|
||||||
|
<TD>TOvcController<BR><IMG SRC="TOVCCONTROLLER.bmp"></TD>
|
||||||
|
<TD>TComponent</TD>
|
||||||
|
<TD>Key-to-command translator</TD>
|
||||||
|
<TD>Property editor uses TTabSet</TD>
|
||||||
|
<TD>?</TD>
|
||||||
|
<TD>?</TD>
|
||||||
|
<TD>?</TD>
|
||||||
|
<TD>?</TD>
|
||||||
|
</TR>
|
||||||
|
|
||||||
|
</TABLE>
|
||||||
|
<BR>
|
||||||
|
|
||||||
|
Notes:<BR>
|
||||||
|
(1) "Working" means control is basically functional. "Partial" means
|
||||||
|
control compiles, installs in IDE and displays at run-time, but doesn't function
|
||||||
|
correctly. "Not working" means control compiles and installs in IDE but
|
||||||
|
doesn't display correctly. "Widgetset doesn't support" means the widgetset
|
||||||
|
currently does not provide the support needed for the control.<BR>
|
||||||
|
(2) TOvcSimpleField and TOvcTable require a TOvcController on form.
|
||||||
|
However, TO32FlexEdit doesn't need TOvcController.<P>
|
||||||
|
|
||||||
|
<HR>
|
||||||
|
<A name="To_Do"></A><H3>To Do</H3>
|
||||||
|
<UL>
|
||||||
|
<LI>TOvcLabel
|
||||||
|
<UL>
|
||||||
|
<LI>Figure out why TOvcColorComboBox controls in Style Manager property editor
|
||||||
|
don't work.
|
||||||
|
<LI>Figure out why Color's default value (clNone) displays black
|
||||||
|
background with GTK. Workaround for now is to set TOvcLabel's
|
||||||
|
ParentColor to True in Object Inspector or select a different Color.
|
||||||
|
</UL>
|
||||||
|
<LI>TOvcVirtualListBox
|
||||||
|
<UL>
|
||||||
|
<LI>Fix scrolling problems on both Windows and GTK.
|
||||||
|
<LI>Figure out why double-click doesn't work on GTK.
|
||||||
|
</UL>
|
||||||
|
<LI>TO32FlexEdit
|
||||||
|
<UL>
|
||||||
|
<LI>Figure out why, on Windows, presence of XP manifest prevents setting Text.
|
||||||
|
<LI>Come up with workaround for LCL's lack of MakeObjectInstance for making
|
||||||
|
callback function from method. Without this, control's validation is not
|
||||||
|
performed. (See LclEditWindowProc in ovctccbx.pas for example
|
||||||
|
of a workaround approach that currently doesn't work.)
|
||||||
|
<LI>Can't tab out of control on Windows.
|
||||||
|
</UL>
|
||||||
|
<LI>TOvcTable
|
||||||
|
<UL>
|
||||||
|
<LI>Custom cursors not visible when sizing and moving columns and rows.
|
||||||
|
Determine whether this is an LCL limitation.
|
||||||
|
<LI>Sizing and moving columns and rows doesn't work at all with GTK.
|
||||||
|
Determine whether this is a GTK limitation.
|
||||||
|
<LI>Table scroll bar "thumb" extends entire length of scrollbar with GTK
|
||||||
|
(same problem with TScrollBar on GTK). Determine if this is a GTK limitation.
|
||||||
|
<LI>Figure out how to move edit cell to stay with its row when scrolling
|
||||||
|
table (GTK only).
|
||||||
|
</UL>
|
||||||
|
<LI>TOvcTCComboBox
|
||||||
|
<UL>
|
||||||
|
<LI>Figure out why, on Windows, won't drop down without presence of
|
||||||
|
XP manifest.
|
||||||
|
</UL>
|
||||||
|
<LI>TO32TCFlexEdit
|
||||||
|
<UL>
|
||||||
|
<LI>Need a way of setting OnValidationError handler (an apparent
|
||||||
|
omission since TO32FlexEdit has it).
|
||||||
|
</UL>
|
||||||
|
<LI>TOvcController
|
||||||
|
<UL>
|
||||||
|
<LI>Rewrite ovccmdp0.pas property editor to use TTabControl instead of
|
||||||
|
TTabSet (not part of LCL).
|
||||||
|
</UL>
|
||||||
|
</UL>
|
||||||
|
|
||||||
|
<HR>
|
||||||
|
<A name="Other_Resources"></A><H3>Other Resources</H3>
|
||||||
|
|
||||||
|
Qt widgetset status:<P>
|
||||||
|
<A HREF="http://wiki.lazarus.freepascal.org/Qt_Interface">http://wiki.lazarus.freepascal.org/Qt_Interface</A><P>
|
||||||
|
|
||||||
|
Carbon widgetset status:<P>
|
||||||
|
<A HREF="http://wiki.lazarus.freepascal.org/Carbon_Interface">http://wiki.lazarus.freepascal.org/Carbon_Interface</A><P>
|
||||||
|
|
||||||
|
OS X tips for Lazarus:<P>
|
||||||
|
<A HREF="http://wiki.lazarus.freepascal.org/OS_X_Programming_Tips">http://wiki.lazarus.freepascal.org/OS_X_Programming_Tips</A><P>
|
||||||
|
|
||||||
|
<P>
|
||||||
|
<HR>
|
||||||
|
Last updated: Jan. 07, 2007
|
||||||
|
<P>
|
||||||
|
|
||||||
|
</BODY>
|
||||||
|
|
||||||
|
</HTML>
|
5
components/orpheus/README.txt
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
|
||||||
|
This is the Lazarus port of a subset of Orpheus controls.
|
||||||
|
|
||||||
|
See OrphStatus.html for more information.
|
||||||
|
|
BIN
components/orpheus/TO32FLEXEDIT.bmp
Normal file
After Width: | Height: | Size: 1.7 KiB |
BIN
components/orpheus/TO32TCFLEXEDIT.bmp
Normal file
After Width: | Height: | Size: 1.7 KiB |
BIN
components/orpheus/TOVCCONTROLLER.bmp
Normal file
After Width: | Height: | Size: 1.7 KiB |
BIN
components/orpheus/TOVCLABEL.bmp
Normal file
After Width: | Height: | Size: 1.7 KiB |
BIN
components/orpheus/TOVCROTATEDLABEL.bmp
Normal file
After Width: | Height: | Size: 1.7 KiB |
BIN
components/orpheus/TOVCSIMPLEFIELD.bmp
Normal file
After Width: | Height: | Size: 1.7 KiB |
BIN
components/orpheus/TOVCSPINNER.bmp
Normal file
After Width: | Height: | Size: 1.7 KiB |
BIN
components/orpheus/TOVCTABLE.bmp
Normal file
After Width: | Height: | Size: 1.7 KiB |
BIN
components/orpheus/TOVCTCBITMAP.bmp
Normal file
After Width: | Height: | Size: 1.7 KiB |
BIN
components/orpheus/TOVCTCCHECKBOX.bmp
Normal file
After Width: | Height: | Size: 1.7 KiB |
BIN
components/orpheus/TOVCTCCOLHEAD.bmp
Normal file
After Width: | Height: | Size: 1.7 KiB |
BIN
components/orpheus/TOVCTCCOMBOBOX.bmp
Normal file
After Width: | Height: | Size: 1.7 KiB |
BIN
components/orpheus/TOVCTCGLYPH.bmp
Normal file
After Width: | Height: | Size: 1.7 KiB |
BIN
components/orpheus/TOVCTCICON.bmp
Normal file
After Width: | Height: | Size: 1.7 KiB |
BIN
components/orpheus/TOVCTCMEMO.bmp
Normal file
After Width: | Height: | Size: 1.7 KiB |
BIN
components/orpheus/TOVCTCROWHEAD.bmp
Normal file
After Width: | Height: | Size: 1.7 KiB |
BIN
components/orpheus/TOVCTCSIMPLEFIELD.bmp
Normal file
After Width: | Height: | Size: 1.7 KiB |
BIN
components/orpheus/TOVCTCSTRING.bmp
Normal file
After Width: | Height: | Size: 1.7 KiB |
BIN
components/orpheus/TOVCURL.bmp
Normal file
After Width: | Height: | Size: 1.7 KiB |
BIN
components/orpheus/TOVCVIRTUALLISTBOX.bmp
Normal file
After Width: | Height: | Size: 1.7 KiB |
36
components/orpheus/mymin.pas
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
unit MyMin;
|
||||||
|
|
||||||
|
{Minimum uses to compile all ported runtime and property
|
||||||
|
editor (design) units.
|
||||||
|
|
||||||
|
Note: Doesn't compile orpheus.pas.}
|
||||||
|
|
||||||
|
interface
|
||||||
|
|
||||||
|
uses
|
||||||
|
ovctcsim,
|
||||||
|
ovctcedt,
|
||||||
|
ovctccbx,
|
||||||
|
ovctcbox,
|
||||||
|
ovctcico,
|
||||||
|
ovctable,
|
||||||
|
o32tcflx,
|
||||||
|
o32vpool,
|
||||||
|
ovcrlbl,
|
||||||
|
ovcurl,
|
||||||
|
ovclabel,
|
||||||
|
ovcsc,
|
||||||
|
ovcvlb,
|
||||||
|
ovcclrcb
|
||||||
|
{$IFDEF FPC}, {These already installed in Delphi}
|
||||||
|
ovcabot0,
|
||||||
|
ovclbl0,
|
||||||
|
ovclbl1,
|
||||||
|
myovctbpe1,
|
||||||
|
myovctbpe2,
|
||||||
|
myovcreg
|
||||||
|
{$ENDIF};
|
||||||
|
|
||||||
|
implementation
|
||||||
|
|
||||||
|
end.
|
917
components/orpheus/mymisc.pas
Normal file
@ -0,0 +1,917 @@
|
|||||||
|
{*********************************************************}
|
||||||
|
{* mymisc.pas *}
|
||||||
|
{*********************************************************}
|
||||||
|
|
||||||
|
{* ***** BEGIN LICENSE BLOCK ***** *}
|
||||||
|
{* Version: MPL 1.1 *}
|
||||||
|
{* *}
|
||||||
|
{* The contents of this file are subject to the Mozilla Public License *}
|
||||||
|
{* Version 1.1 (the "License"); you may not use this file except in *}
|
||||||
|
{* compliance with the License. You may obtain a copy of the License at *}
|
||||||
|
{* http://www.mozilla.org/MPL/ *}
|
||||||
|
{* *}
|
||||||
|
{* Software distributed under the License is distributed on an "AS IS" basis, *}
|
||||||
|
{* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License *}
|
||||||
|
{* for the specific language governing rights and limitations under the *}
|
||||||
|
{* License. *}
|
||||||
|
{* *}
|
||||||
|
{* The Original Code is Orpheus for Lazarus Additional Units. *}
|
||||||
|
{* *}
|
||||||
|
{* The Initial Developer of the Original Code is Phil Hess. *}
|
||||||
|
{* *}
|
||||||
|
{* Portions created by Phil Hess are Copyright (C) 2006 Phil Hess. *}
|
||||||
|
{* All Rights Reserved. *}
|
||||||
|
{* *}
|
||||||
|
{* Contributor(s): *}
|
||||||
|
{* *}
|
||||||
|
{* ***** END LICENSE BLOCK ***** *}
|
||||||
|
|
||||||
|
unit MyMisc;
|
||||||
|
|
||||||
|
{
|
||||||
|
This unit provides types, constants, and functions that fill
|
||||||
|
in some gaps in the Lazarus LCL for compiling the ported
|
||||||
|
Orpheus controls.
|
||||||
|
|
||||||
|
Declarations that have been commented out in the interface
|
||||||
|
section are no longer needed. It is expected that over time
|
||||||
|
more of these can be eliminated as the LCL evolves.
|
||||||
|
|
||||||
|
Several of these functions are only used by Orpheus units
|
||||||
|
that have not yet been ported to Lazarus. For now, these
|
||||||
|
functions are just stubs on non-Windows platforms, as
|
||||||
|
indicated in the function comments.
|
||||||
|
}
|
||||||
|
|
||||||
|
{$I ovc.inc}
|
||||||
|
|
||||||
|
interface
|
||||||
|
|
||||||
|
uses
|
||||||
|
{$IFDEF MSWINDOWS} Windows, {$ELSE} Types, {$ENDIF}
|
||||||
|
LclIntf, LMessages, LclType,
|
||||||
|
{$IFDEF LINUX} FileUtil, {$ENDIF}
|
||||||
|
GraphType, Graphics, Controls, SysUtils;
|
||||||
|
|
||||||
|
type
|
||||||
|
TButtonStyle = (bsAutoDetect, bsWin31, bsNew);
|
||||||
|
|
||||||
|
TWMMouse = TLMMouse;
|
||||||
|
TWMKeyDown = TLMKeyDown;
|
||||||
|
TWMNCHitTest = TLMNCHitTest;
|
||||||
|
TWMSetText = TLMSetText;
|
||||||
|
TCMDesignHitTest = TWMMouse;
|
||||||
|
TWMChar = TLMChar;
|
||||||
|
TWMClear = TLMNoParams;
|
||||||
|
TWMCopy = TLMNoParams;
|
||||||
|
TWMCut = TLMNoParams;
|
||||||
|
TWMLButtonDblClk = TLMLButtonDblClk;
|
||||||
|
TWMLButtonDown = TLMLButtonDown;
|
||||||
|
TWMLButtonUp = TLMLButtonUp;
|
||||||
|
TWMRButtonDown = TLMRButtonDown;
|
||||||
|
TWMSysKeyDown = TLMSysKeyDown;
|
||||||
|
TWMMouseActivate = packed record
|
||||||
|
Msg: Cardinal;
|
||||||
|
TopLevel: HWND;
|
||||||
|
HitTestCode: Word;
|
||||||
|
MouseMsg: Word;
|
||||||
|
Result: Longint;
|
||||||
|
end;
|
||||||
|
TWMMouseMove = TLMMouseMove;
|
||||||
|
TWMPaste = TLMNoParams;
|
||||||
|
TMessage = TLMessage;
|
||||||
|
TWMEraseBkgnd = TLMEraseBkgnd;
|
||||||
|
TWMGetText = TLMGetText;
|
||||||
|
TWMGetTextLength = TLMGetTextLength;
|
||||||
|
TWMKillFocus = TLMKillFocus;
|
||||||
|
TWMSetCursor = packed record
|
||||||
|
Msg: Cardinal;
|
||||||
|
CursorWnd: HWND;
|
||||||
|
HitTest: Word;
|
||||||
|
MouseMsg: Word;
|
||||||
|
Result: Longint;
|
||||||
|
end;
|
||||||
|
TWMSetFocus = TLMSetFocus;
|
||||||
|
TWMGetDlgCode = TLMNoParams;
|
||||||
|
TWMSize = TLMSize;
|
||||||
|
TWMSetFont = packed record
|
||||||
|
Msg: Cardinal;
|
||||||
|
Font: HFONT;
|
||||||
|
Redraw: WordBool;
|
||||||
|
Unused: Word;
|
||||||
|
Result: Longint;
|
||||||
|
end;
|
||||||
|
TWMCommand = TLMCommand;
|
||||||
|
TWMDrawItem = TLMDrawItems;
|
||||||
|
LPDWORD = PDWORD;
|
||||||
|
TFNWndEnumProc = TFarProc;
|
||||||
|
TNonClientMetrics = packed record
|
||||||
|
cbSize: UINT;
|
||||||
|
iBorderWidth: Integer;
|
||||||
|
iScrollWidth: Integer;
|
||||||
|
iScrollHeight: Integer;
|
||||||
|
iCaptionWidth: Integer;
|
||||||
|
iCaptionHeight: Integer;
|
||||||
|
lfCaptionFont: TLogFontA;
|
||||||
|
iSmCaptionWidth: Integer;
|
||||||
|
iSmCaptionHeight: Integer;
|
||||||
|
lfSmCaptionFont: TLogFontA;
|
||||||
|
iMenuWidth: Integer;
|
||||||
|
iMenuHeight: Integer;
|
||||||
|
lfMenuFont: TLogFontA;
|
||||||
|
lfStatusFont: TLogFontA;
|
||||||
|
lfMessageFont: TLogFontA;
|
||||||
|
end;
|
||||||
|
TWMKey = TLMKey;
|
||||||
|
TWMScroll = TLMScroll;
|
||||||
|
TWMNoParams = TLMNoParams;
|
||||||
|
TWMPaint = TLMPaint;
|
||||||
|
TWMNCPaint = packed record
|
||||||
|
Msg: Cardinal;
|
||||||
|
RGN: HRGN;
|
||||||
|
Unused: Longint;
|
||||||
|
Result: Longint;
|
||||||
|
end;
|
||||||
|
TWMHScroll = TLMHScroll;
|
||||||
|
TWMVScroll = TLMVScroll;
|
||||||
|
|
||||||
|
const
|
||||||
|
WM_WININICHANGE = CM_WININICHANGE;
|
||||||
|
WM_CANCELMODE = LM_CANCELMODE;
|
||||||
|
WM_ERASEBKGND = LM_ERASEBKGND;
|
||||||
|
WM_GETTEXTLENGTH = LM_GETTEXTLENGTH;
|
||||||
|
WM_KEYDOWN = LM_KEYDOWN;
|
||||||
|
WM_KILLFOCUS = LM_KILLFOCUS;
|
||||||
|
WM_LBUTTONDOWN = LM_LBUTTONDOWN;
|
||||||
|
WM_LBUTTONUP = LM_LBUTTONUP;
|
||||||
|
WM_MOUSEMOVE = LM_MOUSEMOVE;
|
||||||
|
WM_NCHITTEST = LM_NCHITTEST;
|
||||||
|
WM_SETCURSOR = LM_SETCURSOR;
|
||||||
|
WM_SETTEXT = $000C;
|
||||||
|
WM_GETTEXT = $000D;
|
||||||
|
WM_SETFOCUS = LM_SETFOCUS;
|
||||||
|
WM_CHAR = LM_CHAR;
|
||||||
|
WM_CLEAR = LM_CLEARSEL;
|
||||||
|
WM_COPY = LM_COPYTOCLIP;
|
||||||
|
WM_CUT = LM_CUTTOCLIP;
|
||||||
|
WM_PASTE = LM_PASTEFROMCLIP;
|
||||||
|
WM_GETDLGCODE = LM_GETDLGCODE;
|
||||||
|
WM_SIZE = LM_SIZE;
|
||||||
|
WM_SETFONT = LM_SETFONT;
|
||||||
|
WM_SYSKEYDOWN = LM_SYSKEYDOWN;
|
||||||
|
WM_RBUTTONUP = LM_RBUTTONUP;
|
||||||
|
WM_MOUSEACTIVATE = $0021;
|
||||||
|
WM_LBUTTONDBLCLK = LM_LBUTTONDBLCLK;
|
||||||
|
WM_SETREDRAW = $000B;
|
||||||
|
WM_NEXTDLGCTL = $0028;
|
||||||
|
WM_MOUSEWHEEL = LM_MOUSEWHEEL;
|
||||||
|
WM_PAINT = LM_PAINT;
|
||||||
|
WM_VSCROLL = LM_VSCROLL;
|
||||||
|
WM_HSCROLL = LM_HSCROLL;
|
||||||
|
WM_NCPAINT = LM_NCPAINT;
|
||||||
|
WM_MEASUREITEM = LM_MEASUREITEM;
|
||||||
|
|
||||||
|
EM_GETMODIFY = $00B8;
|
||||||
|
EM_SETMODIFY = $00B9;
|
||||||
|
EM_GETSEL = $00B0;
|
||||||
|
EM_SETSEL = $00B1;
|
||||||
|
EM_GETLINECOUNT = $00BA;
|
||||||
|
EM_LINELENGTH = $00C1;
|
||||||
|
EM_LINEINDEX = $00BB;
|
||||||
|
EM_GETLINE = $00C4;
|
||||||
|
EM_REPLACESEL = $00C2;
|
||||||
|
|
||||||
|
CS_SAVEBITS = $800;
|
||||||
|
CS_DBLCLKS = 8;
|
||||||
|
SPI_GETWORKAREA = 48;
|
||||||
|
SPI_GETNONCLIENTMETRICS = 41;
|
||||||
|
DLGC_STATIC = $100;
|
||||||
|
GW_HWNDLAST = 1;
|
||||||
|
GW_HWNDNEXT = 2;
|
||||||
|
GW_HWNDPREV = 3;
|
||||||
|
GW_CHILD = 5;
|
||||||
|
DT_EXPANDTABS = $40;
|
||||||
|
DT_END_ELLIPSIS = $8000;
|
||||||
|
DT_MODIFYSTRING = $10000;
|
||||||
|
GHND = 66;
|
||||||
|
TMPF_TRUETYPE = 4;
|
||||||
|
SWP_HIDEWINDOW = $80;
|
||||||
|
SWP_SHOWWINDOW = $40;
|
||||||
|
RDW_INVALIDATE = 1;
|
||||||
|
RDW_UPDATENOW = $100;
|
||||||
|
RDW_FRAME = $400;
|
||||||
|
LANG_JAPANESE = $11;
|
||||||
|
ES_PASSWORD = $20;
|
||||||
|
ES_LEFT = 0;
|
||||||
|
ES_RIGHT = 2;
|
||||||
|
ES_CENTER = 1;
|
||||||
|
ES_AUTOHSCROLL = $80;
|
||||||
|
ES_MULTILINE = 4;
|
||||||
|
ODS_COMBOBOXEDIT = $1000;
|
||||||
|
CB_FINDSTRING = $014C;
|
||||||
|
CB_SETITEMHEIGHT = $0153;
|
||||||
|
CB_FINDSTRINGEXACT = $0158;
|
||||||
|
CB_SETDROPPEDWIDTH = 352;
|
||||||
|
CBS_DROPDOWN = 2;
|
||||||
|
CBS_DROPDOWNLIST = 3;
|
||||||
|
CBS_OWNERDRAWVARIABLE = $20;
|
||||||
|
CBS_AUTOHSCROLL = $40;
|
||||||
|
CBS_HASSTRINGS = $200;
|
||||||
|
WHEEL_DELTA = 120;
|
||||||
|
LB_GETCARETINDEX = $019F;
|
||||||
|
LB_GETCOUNT = $018B;
|
||||||
|
LB_GETCURSEL = $0188;
|
||||||
|
LB_GETITEMHEIGHT = $01A1;
|
||||||
|
LB_GETITEMRECT = $0198;
|
||||||
|
LB_GETSEL = $0187;
|
||||||
|
LB_GETTOPINDEX = $018E;
|
||||||
|
LB_RESETCONTENT = $0184;
|
||||||
|
LB_SELITEMRANGE = $019B;
|
||||||
|
LB_SETCURSEL = $0186;
|
||||||
|
LB_SETSEL = $0185;
|
||||||
|
LB_SETTABSTOPS = $0192;
|
||||||
|
LB_SETTOPINDEX = $0197;
|
||||||
|
LB_ERR = -1;
|
||||||
|
MA_ACTIVATE = 1;
|
||||||
|
MA_NOACTIVATEANDEAT = 4;
|
||||||
|
|
||||||
|
|
||||||
|
{These belong in LclIntf unit}
|
||||||
|
function IsCharAlpha(c : Char) : Boolean;
|
||||||
|
function DefWindowProc(hWnd: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM): LRESULT;
|
||||||
|
function GetProfileInt(lpAppName, lpKeyName: PChar; nDefault: Integer): UINT;
|
||||||
|
function GetProfileString(lpAppName, lpKeyName, lpDefault: PChar;
|
||||||
|
lpReturnedString: PChar; nSize: DWORD): DWORD;
|
||||||
|
function GetTickCount : DWORD;
|
||||||
|
//function SetTimer(hWnd: HWND; nIDEvent, uElapse: UINT;
|
||||||
|
// lpTimerFunc: TFNTimerProc): UINT;
|
||||||
|
//function KillTimer(hWnd: HWND; uIDEvent: UINT): BOOL;
|
||||||
|
function GetCaretBlinkTime: UINT;
|
||||||
|
function SetCaretBlinkTime(uMSeconds: UINT): BOOL;
|
||||||
|
//function DestroyCaret: BOOL;
|
||||||
|
function MessageBeep(uType: UINT): BOOL;
|
||||||
|
function SystemParametersInfo(uiAction, uiParam: UINT;
|
||||||
|
pvParam: Pointer; fWinIni: UINT): BOOL;
|
||||||
|
{$IFNDEF MSWINDOWS}
|
||||||
|
function GetSystemMetrics(nIndex: Integer): Integer;
|
||||||
|
{$ENDIF}
|
||||||
|
function MoveWindow(hWnd: HWND; X, Y, nWidth, nHeight: Integer; bRepaint: BOOL): BOOL;
|
||||||
|
function SetWindowPos(hWnd: HWND; hWndInsertAfter: HWND;
|
||||||
|
X, Y, cx, cy: Integer; uFlags: UINT): BOOL;
|
||||||
|
function ValidateRect(hWnd: HWND; lpRect: PRect): BOOL;
|
||||||
|
function InvalidateRect(hWnd: HWND; lpRect: PRect; bErase: BOOL): BOOL;
|
||||||
|
function InvalidateRgn(hWnd: HWND; hRgn: HRGN; bErase: BOOL): BOOL;
|
||||||
|
function GetRgnBox(RGN : HRGN; lpRect : PRect) : Longint;
|
||||||
|
function PtInRegion(RGN: HRGN; X, Y: Integer) : Boolean;
|
||||||
|
function SetWindowText(hWnd: HWND; lpString: PChar): BOOL;
|
||||||
|
function GetBkColor(hDC: HDC): COLORREF;
|
||||||
|
function GetBkMode(hDC: HDC): Integer;
|
||||||
|
function GetWindow(hWnd: HWND; uCmd: UINT): HWND;
|
||||||
|
function GetNextWindow(hWnd: HWND; uCmd: UINT): HWND;
|
||||||
|
function RedrawWindow(hWnd: HWND; lprcUpdate: PRect; hrgnUpdate: HRGN; flags: UINT): BOOL;
|
||||||
|
function GetWindowDC(hWnd: HWND): HDC;
|
||||||
|
function ScrollDC(DC: HDC; DX, DY: Integer; var Scroll, Clip: TRect; Rgn: HRGN;
|
||||||
|
Update: PRect): BOOL;
|
||||||
|
function SetScrollRange(hWnd: HWND; nBar, nMinPos, nMaxPos: Integer; bRedraw: BOOL): BOOL;
|
||||||
|
function GetTabbedTextExtent(hDC: HDC; lpString: PChar;
|
||||||
|
nCount, nTabPositions: Integer;
|
||||||
|
var lpnTabStopPositions): DWORD;
|
||||||
|
function TabbedTextOut(hDC: HDC; X, Y: Integer; lpString: PChar;
|
||||||
|
nCount, nTabPositions: Integer;
|
||||||
|
var lpnTabStopPositions; nTabOrigin: Integer): Longint;
|
||||||
|
//function LoadBitmap(hInstance: HINST; lpBitmapName: PAnsiChar): HBITMAP;
|
||||||
|
function LoadCursor(hInstance: HINST; lpCursorName: PAnsiChar): HCURSOR;
|
||||||
|
function EnumThreadWindows(dwThreadId: DWORD; lpfn: TFNWndEnumProc; lParam: LPARAM): BOOL;
|
||||||
|
procedure OutputDebugString(lpOutputString: PChar);
|
||||||
|
function SetViewportOrgEx(DC: HDC; X, Y: Integer; Point: PPoint): BOOL;
|
||||||
|
function GlobalAlloc(uFlags: UINT; dwBytes: DWORD): HGLOBAL;
|
||||||
|
function GlobalLock(hMem: HGLOBAL): Pointer;
|
||||||
|
function GlobalUnlock(hMem: HGLOBAL): BOOL;
|
||||||
|
//function DestroyCursor(hCursor: HICON): BOOL;
|
||||||
|
{$IFDEF MSWINDOWS} //Shouldn't be needed with GTK widgetset.
|
||||||
|
function PostMessage(hWnd: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM): BOOL;
|
||||||
|
function SendMessage(hWnd: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM): LRESULT;
|
||||||
|
{$ENDIF}
|
||||||
|
procedure RecreateWnd(const AWinControl:TWinControl);
|
||||||
|
|
||||||
|
{These belong in Classes unit}
|
||||||
|
//function MakeObjectInstance(Method: TWndMethod): Pointer;
|
||||||
|
//procedure FreeObjectInstance(ObjectInstance: Pointer);
|
||||||
|
//function AllocateHWnd(Method: TWndMethod): HWND;
|
||||||
|
//procedure DeallocateHWnd(Wnd: HWND);
|
||||||
|
|
||||||
|
{This belongs in System unit}
|
||||||
|
function FindClassHInstance(ClassType: TClass): LongWord;
|
||||||
|
|
||||||
|
{This belongs in ExtCtrls unit}
|
||||||
|
procedure Frame3D(Canvas: TCanvas; var Rect: TRect;
|
||||||
|
TopColor, BottomColor: TColor; Width: Integer);
|
||||||
|
|
||||||
|
{This should be a TCanvas method}
|
||||||
|
procedure BrushCopy(DestCanvas: TCanvas; const Dest: TRect; Bitmap: TBitmap;
|
||||||
|
const Source: TRect; Color: TColor);
|
||||||
|
|
||||||
|
{This belongs in Buttons unit}
|
||||||
|
function DrawButtonFace(Canvas: TCanvas; const Client: TRect;
|
||||||
|
BevelWidth: Integer; Style: TButtonStyle;
|
||||||
|
IsRounded, IsDown, IsFocused: Boolean): TRect;
|
||||||
|
|
||||||
|
{Additional routines}
|
||||||
|
{$IFDEF LINUX}
|
||||||
|
function GetBrowserPath : string;
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
|
||||||
|
implementation
|
||||||
|
|
||||||
|
{These functions belong in LclIntf unit}
|
||||||
|
|
||||||
|
function IsCharAlpha(c : Char) : Boolean;
|
||||||
|
// Doesn't handle upper-ANSI chars, but then LCL IsCharAlphaNumeric
|
||||||
|
// function doesn't either.
|
||||||
|
begin
|
||||||
|
Result := ((Ord(c) >= 65) and (Ord(c) <= 90)) or
|
||||||
|
((Ord(c) >= 97) and (Ord(c) <= 122));
|
||||||
|
end;
|
||||||
|
|
||||||
|
function DefWindowProc(hWnd: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM): LRESULT;
|
||||||
|
// DefWindowProc is a Win API function for handling any window message
|
||||||
|
// that the application doesn't handle.
|
||||||
|
// Can't find equivalent in LCL.
|
||||||
|
begin
|
||||||
|
{$IFDEF MSWINDOWS}
|
||||||
|
Result := Windows.DefWindowProc(hWnd, Msg, wParam, lParam);
|
||||||
|
{$ELSE}
|
||||||
|
Result := 0;
|
||||||
|
{$ENDIF}
|
||||||
|
end;
|
||||||
|
|
||||||
|
function GetProfileInt(lpAppName, lpKeyName: PChar; nDefault: Integer): UINT;
|
||||||
|
// Return the integer value for the key name in the lpAppName section
|
||||||
|
// of the WIN.INI file, which on Win32 maps to the corresponding
|
||||||
|
// section of the Windows registry.
|
||||||
|
begin
|
||||||
|
{$IFDEF MSWINDOWS}
|
||||||
|
Result := Windows.GetProfileInt(lpAppName, lpKeyName, nDefault);
|
||||||
|
{$ELSE} //Just return default for now.
|
||||||
|
Result := nDefault;
|
||||||
|
{$ENDIF}
|
||||||
|
end;
|
||||||
|
|
||||||
|
function GetProfileString(lpAppName, lpKeyName, lpDefault: PChar;
|
||||||
|
lpReturnedString: PChar; nSize: DWORD): DWORD;
|
||||||
|
// Return the string value for the key name in the lpAppName section
|
||||||
|
// of the WIN.INI file, which on Win32 maps to the corresponding
|
||||||
|
// section of the Windows registry.
|
||||||
|
begin
|
||||||
|
{$IFDEF MSWINDOWS}
|
||||||
|
Result := Windows.GetProfileString(lpAppName, lpKeyName, lpDefault,
|
||||||
|
lpReturnedString, nSize);
|
||||||
|
{$ELSE} //Just return default for now.
|
||||||
|
StrLCopy(lpReturnedString, lpDefault, Pred(nSize));
|
||||||
|
{$ENDIF}
|
||||||
|
end;
|
||||||
|
|
||||||
|
function GetTickCount : DWORD;
|
||||||
|
{On Windows, this is number of milliseconds since Windows was
|
||||||
|
started. On non-Windows platforms, LCL returns number of
|
||||||
|
milliseconds since Dec. 30, 1899, wrapped by size of DWORD.
|
||||||
|
This value can overflow LongInt variable when checks turned on,
|
||||||
|
so "wrap" value here so it fits within LongInt.
|
||||||
|
Also, since same thing could happen with Windows that has been
|
||||||
|
running for at least approx. 25 days, override it too.}
|
||||||
|
begin
|
||||||
|
{$IFDEF MSWINDOWS}
|
||||||
|
Result := Windows.GetTickCount mod High(LongInt);
|
||||||
|
{$ELSE}
|
||||||
|
Result := LclIntf.GetTickCount mod High(LongInt);
|
||||||
|
{$ENDIF}
|
||||||
|
end;
|
||||||
|
|
||||||
|
function SetTimer(hWnd: HWND; nIDEvent, uElapse: UINT;
|
||||||
|
lpTimerFunc: TFNTimerProc): UINT;
|
||||||
|
begin
|
||||||
|
{$IFDEF MSWINDOWS}
|
||||||
|
Result := {Windows.}SetTimer(hWnd, nIDEvent, uElapse, lpTimerFunc);
|
||||||
|
{$ENDIF}
|
||||||
|
end;
|
||||||
|
|
||||||
|
function KillTimer(hWnd: HWND; uIDEvent: UINT): BOOL;
|
||||||
|
begin
|
||||||
|
{$IFDEF MSWINDOWS}
|
||||||
|
Result := Windows.KillTimer(hWnd, UIDEvent);
|
||||||
|
{$ENDIF}
|
||||||
|
end;
|
||||||
|
|
||||||
|
function GetCaretBlinkTime: UINT;
|
||||||
|
// This function and SetCaretBlinkTime are only used in OvcCaret unit's
|
||||||
|
// TOvcSingleCaret.SetLinked, which is used to write Linked property.
|
||||||
|
begin
|
||||||
|
{$IFDEF MSWINDOWS}
|
||||||
|
Result := Windows.GetCaretBlinkTime;
|
||||||
|
{$ELSE}
|
||||||
|
Result := 530; //Default on Win XP, so use as reasonable value
|
||||||
|
{$ENDIF}
|
||||||
|
end;
|
||||||
|
|
||||||
|
function SetCaretBlinkTime(uMSeconds: UINT): BOOL;
|
||||||
|
begin
|
||||||
|
{$IFDEF MSWINDOWS}
|
||||||
|
Result := Windows.SetCaretBlinkTime(uMSeconds);
|
||||||
|
{$ENDIF}
|
||||||
|
end;
|
||||||
|
|
||||||
|
function DestroyCaret: BOOL;
|
||||||
|
begin
|
||||||
|
{$IFDEF MSWINDOWS}
|
||||||
|
Result := Windows.DestroyCaret;
|
||||||
|
{$ENDIF}
|
||||||
|
end;
|
||||||
|
|
||||||
|
function MessageBeep(uType: UINT): BOOL;
|
||||||
|
begin
|
||||||
|
{$IFDEF MSWINDOWS}
|
||||||
|
Result := Windows.MessageBeep(uType);
|
||||||
|
{$ELSE}
|
||||||
|
Beep; //Most calls pass 0 as uType (MB_OK), which is system default sound}
|
||||||
|
{$ENDIF}
|
||||||
|
end;
|
||||||
|
|
||||||
|
function SystemParametersInfo(uiAction, uiParam: UINT;
|
||||||
|
pvParam: Pointer; fWinIni: UINT): BOOL;
|
||||||
|
// Only used in:
|
||||||
|
// OvcMisc: PathEllipsis, which is only used in ovcmru (not yet ported).
|
||||||
|
// OvcEdClc: TOvcCustomNumberEdit.PopupOpen.
|
||||||
|
// OvcEdCal: TOvcCustomDateEdit.PopupOpen.
|
||||||
|
// OvcEdSld (not yet ported).
|
||||||
|
begin
|
||||||
|
{$IFDEF MSWINDOWS}
|
||||||
|
Result := Windows.SystemParametersInfo(uiAction, uiParam, pvParam,
|
||||||
|
fWinIni);
|
||||||
|
{$ENDIF}
|
||||||
|
end;
|
||||||
|
|
||||||
|
{$IFNDEF MSWINDOWS}
|
||||||
|
function GetSystemMetrics(nIndex: Integer): Integer;
|
||||||
|
// SM_CYBORDER, etc. not implemented yet in GTK widgetset.
|
||||||
|
begin
|
||||||
|
if nIndex = SM_SWAPBUTTON then
|
||||||
|
Result := 0 {Not implemented on GTK, so assume buttons not swapped}
|
||||||
|
else
|
||||||
|
begin
|
||||||
|
if nIndex = SM_CYBORDER then
|
||||||
|
nIndex := SM_CYEDGE; //Substitute for now so returned value is valid.
|
||||||
|
Result := LclIntf.GetSystemMetrics(nIndex);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
function MoveWindow(hWnd: HWND; X, Y, nWidth, nHeight: Integer; bRepaint: BOOL): BOOL;
|
||||||
|
// Only used in:
|
||||||
|
// OvcEdClc: TOvcCustomNumberEdit.PopupOpen.
|
||||||
|
// OvcEdCal: TOvcCustomDateEdit.PopupOpen.
|
||||||
|
// OvcEdSld (not yet ported).
|
||||||
|
begin
|
||||||
|
{$IFDEF MSWINDOWS}
|
||||||
|
Result := Windows.MoveWindow(hWnd, X, Y, nWidth, nHeight, bRepaint);
|
||||||
|
{$ENDIF}
|
||||||
|
end;
|
||||||
|
|
||||||
|
function SetWindowPos(hWnd: HWND; hWndInsertAfter: HWND;
|
||||||
|
X, Y, cx, cy: Integer; uFlags: UINT): BOOL;
|
||||||
|
begin
|
||||||
|
{$IFDEF MSWINDOWS}
|
||||||
|
Result := Windows.SetWindowPos(hWnd, hWndInsertAfter, X, Y, cx, cy, uFlags);
|
||||||
|
{$ELSE} //Doesn't do much with GTK, but call it anyway.
|
||||||
|
Result := LclIntf.SetWindowPos(hWnd, hWndInsertAfter, X, Y, cx, cy, uFlags);
|
||||||
|
if (uFlags and SWP_HIDEWINDOW) <> 0 then
|
||||||
|
FindControl(hWnd).Visible := False
|
||||||
|
else if (uFlags and SWP_SHOWWINDOW) <> 0 then
|
||||||
|
FindControl(hWnd).Visible := True;
|
||||||
|
{$ENDIF}
|
||||||
|
end;
|
||||||
|
|
||||||
|
function ValidateRect(hWnd: HWND; lpRect: PRect): BOOL;
|
||||||
|
// Since LCL InvalidateRect redraws window, shouldn't need this function,
|
||||||
|
// so leave it as stub for now.
|
||||||
|
begin
|
||||||
|
{$IFDEF MSWINDOWS}
|
||||||
|
// Result := Windows.ValidateRect(hWnd, lpRect);
|
||||||
|
{$ENDIF}
|
||||||
|
Result := True;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function InvalidateRect(hWnd: HWND; lpRect: PRect; bErase: BOOL): BOOL;
|
||||||
|
{InvalidateRect crashes if lpRect is nil with some versions of LCL.}
|
||||||
|
begin
|
||||||
|
{$IFDEF MSWINDOWS}
|
||||||
|
if Assigned(lpRect) then
|
||||||
|
Result := LclIntf.InvalidateRect(hWnd, lpRect, bErase)
|
||||||
|
else
|
||||||
|
Result := Windows.InvalidateRect(hWnd, lpRect, bErase);
|
||||||
|
{$ELSE}
|
||||||
|
if Assigned(lpRect) then
|
||||||
|
Result := LclIntf.InvalidateRect(hWnd, lpRect, bErase)
|
||||||
|
else
|
||||||
|
Result := True;
|
||||||
|
//For now just ignore if nil since no alternative as with Windows.
|
||||||
|
{$ENDIF}
|
||||||
|
end;
|
||||||
|
|
||||||
|
function InvalidateRgn(hWnd: HWND; hRgn: HRGN; bErase: BOOL): BOOL;
|
||||||
|
{$IFDEF MSWINDOWS}
|
||||||
|
begin
|
||||||
|
Result := Windows.InvalidateRgn(hWnd, hRgn, bErase);
|
||||||
|
{$ELSE}
|
||||||
|
var
|
||||||
|
ARect : TRect;
|
||||||
|
begin
|
||||||
|
GetRgnBox(hRgn, @ARect);
|
||||||
|
Result := InvalidateRect(hWnd, @ARect, bErase);
|
||||||
|
{$ENDIF}
|
||||||
|
end;
|
||||||
|
|
||||||
|
function GetRgnBox(RGN : HRGN; lpRect : PRect) : Longint;
|
||||||
|
begin
|
||||||
|
{$IFDEF MSWINDOWS}
|
||||||
|
Result := Windows.GetRgnBox(RGN, lpRect);
|
||||||
|
{$ELSE}
|
||||||
|
Result := LclIntf.GetRgnBox(RGN, lpRect);
|
||||||
|
{$ENDIF}
|
||||||
|
end;
|
||||||
|
|
||||||
|
function PtInRegion(RGN: HRGN; X, Y: Integer) : Boolean;
|
||||||
|
{$IFDEF MSWINDOWS}
|
||||||
|
begin
|
||||||
|
Result := Windows.PtInRegion(RGN, X, Y);
|
||||||
|
{$ELSE}
|
||||||
|
var
|
||||||
|
ARect : TRect;
|
||||||
|
APt : TPoint;
|
||||||
|
begin
|
||||||
|
GetRgnBox(RGN, @ARect);
|
||||||
|
APt.X := X;
|
||||||
|
APt.Y := Y;
|
||||||
|
Result := LclIntf.PtInRect(ARect, APt);
|
||||||
|
{$ENDIF}
|
||||||
|
end;
|
||||||
|
|
||||||
|
function SetWindowText(hWnd: HWND; lpString: PChar): BOOL;
|
||||||
|
begin
|
||||||
|
{$IFDEF MSWINDOWS}
|
||||||
|
Result := Windows.SetWindowText(hWnd, lpString);
|
||||||
|
{$ELSE}
|
||||||
|
// Use FindControl, then assign to control's Text property?
|
||||||
|
{$ENDIF}
|
||||||
|
end;
|
||||||
|
|
||||||
|
function GetBkColor(hDC: HDC): COLORREF;
|
||||||
|
// Only used in:
|
||||||
|
// OvcEF: TOvcBaseEntryField.efPaintPrim.
|
||||||
|
// OvcLkOut (not yet ported).
|
||||||
|
// O32LkOut (not yet ported).
|
||||||
|
begin
|
||||||
|
{$IFDEF MSWINDOWS}
|
||||||
|
Result := Windows.GetBkColor(hDC);
|
||||||
|
{$ELSE} // Since SetBkColor returns previous color, use it to get color.
|
||||||
|
Result := SetBkColor(hDC, 0); //Set background color to black.
|
||||||
|
SetBkColor(hDC, Result); //Restore background color
|
||||||
|
{$ENDIF}
|
||||||
|
end;
|
||||||
|
|
||||||
|
function GetBkMode(hDC: HDC): Integer;
|
||||||
|
begin
|
||||||
|
{$IFDEF MSWINDOWS}
|
||||||
|
Result := Windows.GetBkMode(hDC);
|
||||||
|
{$ELSE}
|
||||||
|
Result := TRANSPARENT; //For now
|
||||||
|
// Result := SetBkMode(hDC, TRANSPARENT); //Use when widgetsets support it
|
||||||
|
// SetBkMode(hDC, Result);
|
||||||
|
{$ENDIF}
|
||||||
|
end;
|
||||||
|
|
||||||
|
function GetWindow(hWnd: HWND; uCmd: UINT): HWND;
|
||||||
|
{$IFDEF MSWINDOWS}
|
||||||
|
begin
|
||||||
|
Result := Windows.GetWindow(hWnd, uCmd);
|
||||||
|
{$ELSE}
|
||||||
|
var
|
||||||
|
AWinControl : TWinControl;
|
||||||
|
begin
|
||||||
|
Result := 0;
|
||||||
|
AWinControl := FindControl(hWnd);
|
||||||
|
if AWinControl <> nil then
|
||||||
|
begin
|
||||||
|
case uCmd of
|
||||||
|
GW_HWNDNEXT :
|
||||||
|
begin
|
||||||
|
// FindNextControl is declared in protected section, so can't use it.
|
||||||
|
// AWinControl := AWinControl.FindNextControl(AWinControl, True, False, False);
|
||||||
|
// if AWinControl <> nil then
|
||||||
|
// Result := AWinControl.Handle;
|
||||||
|
end;
|
||||||
|
GW_CHILD :
|
||||||
|
begin
|
||||||
|
if AWinControl.ControlCount > 0 then
|
||||||
|
Result := TWinControl(AWinControl.Controls[0]).Handle;
|
||||||
|
end;
|
||||||
|
GW_HWNDLAST :
|
||||||
|
begin
|
||||||
|
if AWinControl.Parent <> nil then
|
||||||
|
Result := TWinControl(AWinControl.Parent.Controls[Pred(AWinControl.Parent.ControlCount)]).Handle;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
{$ENDIF}
|
||||||
|
end;
|
||||||
|
|
||||||
|
function GetNextWindow(hWnd: HWND; uCmd: UINT): HWND;
|
||||||
|
begin
|
||||||
|
{$IFDEF MSWINDOWS}
|
||||||
|
Result := Windows.GetNextWindow(hWnd, uCmd);
|
||||||
|
{$ELSE}
|
||||||
|
Result := GetWindow(hWnd, uCmd);
|
||||||
|
{$ENDIF}
|
||||||
|
end;
|
||||||
|
|
||||||
|
function RedrawWindow(hWnd: HWND; lprcUpdate: PRect; hrgnUpdate: HRGN; flags: UINT): BOOL;
|
||||||
|
begin
|
||||||
|
{$IFDEF MSWINDOWS}
|
||||||
|
Result := Windows.RedrawWindow(hWnd, lprcUpdate, hrgnUpdate, flags);
|
||||||
|
{$ELSE}
|
||||||
|
{$ENDIF}
|
||||||
|
end;
|
||||||
|
|
||||||
|
function GetWindowDC(hWnd: HWND): HDC;
|
||||||
|
begin
|
||||||
|
{$IFDEF MSWINDOWS}
|
||||||
|
Result := Windows.GetWindowDC(hWnd);
|
||||||
|
{$ELSE}
|
||||||
|
{$ENDIF}
|
||||||
|
end;
|
||||||
|
|
||||||
|
function ScrollDC(DC: HDC; DX, DY: Integer; var Scroll, Clip: TRect; Rgn: HRGN;
|
||||||
|
Update: PRect): BOOL;
|
||||||
|
begin
|
||||||
|
{$IFDEF MSWINDOWS}
|
||||||
|
Result := Windows.ScrollDC(DC, DX, DY, Scroll, Clip, Rgn, Update);
|
||||||
|
{$ELSE}
|
||||||
|
{$ENDIF}
|
||||||
|
end;
|
||||||
|
|
||||||
|
function SetScrollRange(hWnd: HWND; nBar, nMinPos, nMaxPos: Integer; bRedraw: BOOL): BOOL;
|
||||||
|
{$IFDEF MSWINDOWS}
|
||||||
|
begin
|
||||||
|
Result := Windows.SetScrollRange(hWnd, nBar, nMinPos, nMaxPos, bRedraw);
|
||||||
|
end;
|
||||||
|
{$ELSE} //GTK needs more information, so use SetScrollInfo
|
||||||
|
var
|
||||||
|
ScrInfo : TScrollInfo;
|
||||||
|
begin
|
||||||
|
ScrInfo.fMask := SIF_RANGE or SIF_UPDATEPOLICY;
|
||||||
|
ScrInfo.nTrackPos := SB_POLICY_CONTINUOUS;
|
||||||
|
ScrInfo.nMin := nMinPos;
|
||||||
|
ScrInfo.nMax := nMaxPos;
|
||||||
|
LclIntf.SetScrollInfo(hWnd, nBar, ScrInfo, True);
|
||||||
|
Result := True;
|
||||||
|
end;
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
function GetTabbedTextExtent(hDC: HDC; lpString: PChar;
|
||||||
|
nCount, nTabPositions: Integer;
|
||||||
|
var lpnTabStopPositions): DWORD;
|
||||||
|
begin
|
||||||
|
{$IFDEF MSWINDOWS}
|
||||||
|
Result := Windows.GetTabbedTextExtent(hDC, lpString, nCount, nTabPositions,
|
||||||
|
lpnTabStopPositions);
|
||||||
|
{$ELSE}
|
||||||
|
{$ENDIF}
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TabbedTextOut(hDC: HDC; X, Y: Integer; lpString: PChar;
|
||||||
|
nCount, nTabPositions: Integer;
|
||||||
|
var lpnTabStopPositions; nTabOrigin: Integer): Longint;
|
||||||
|
begin
|
||||||
|
{$IFDEF MSWINDOWS}
|
||||||
|
Result := Windows.TabbedTextOut(hDC, X, Y, lpString, nCount, nTabPositions,
|
||||||
|
lpnTabStopPositions, nTabOrigin);
|
||||||
|
{$ELSE}
|
||||||
|
{$ENDIF}
|
||||||
|
end;
|
||||||
|
|
||||||
|
function LoadBitmap(hInstance: HINST; lpBitmapName: PAnsiChar): HBITMAP;
|
||||||
|
begin
|
||||||
|
{$IFDEF MSWINDOWS}
|
||||||
|
Result := Windows.LoadBitmap(hInstance, lpBitmapName);
|
||||||
|
{$ENDIF}
|
||||||
|
end;
|
||||||
|
|
||||||
|
function LoadCursor(hInstance: HINST; lpCursorName: PAnsiChar): HCURSOR;
|
||||||
|
begin
|
||||||
|
{$IFDEF MSWINDOWS}
|
||||||
|
Result := Windows.LoadCursor(hInstance, lpCursorName);
|
||||||
|
{$ENDIF}
|
||||||
|
end;
|
||||||
|
|
||||||
|
function EnumThreadWindows(dwThreadId: DWORD; lpfn: TFNWndEnumProc; lParam: LPARAM): BOOL;
|
||||||
|
// Only used in OvcMisc IsForegroundTask function, which is only
|
||||||
|
// used in OvcSpeed (not yet ported).
|
||||||
|
begin
|
||||||
|
{$IFDEF MSWINDOWS}
|
||||||
|
Result := Windows.EnumThreadWindows(dwThreadId, lpfn, lParam);
|
||||||
|
{$ENDIF}
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure OutputDebugString(lpOutputString: PChar);
|
||||||
|
begin
|
||||||
|
{$IFDEF MSWINDOWS}
|
||||||
|
Windows.OutputDebugString(lpOutputString);
|
||||||
|
{$ENDIF}
|
||||||
|
end;
|
||||||
|
|
||||||
|
function SetViewportOrgEx(DC: HDC; X, Y: Integer; Point: PPoint): BOOL;
|
||||||
|
// Only used in OvcMisc CopyParentImage procedure, which is only
|
||||||
|
// used by TOvcCustomSpeedButton.Paint in OvcSpeed (not yet ported).
|
||||||
|
begin
|
||||||
|
{$IFDEF MSWINDOWS}
|
||||||
|
Result := Windows.SetViewportOrgEx(DC, X, Y, Point);
|
||||||
|
{$ENDIF}
|
||||||
|
end;
|
||||||
|
|
||||||
|
function GlobalAlloc(uFlags: UINT; dwBytes: DWORD): HGLOBAL;
|
||||||
|
// GlobalAlloc, GlobalLock, and GlobalUnlock are only used in:
|
||||||
|
// OvcEF: TOvcBaseEntryField.efCopyPrim and TOvcBaseEntryField.WMPaste.
|
||||||
|
// OvcEdit (not yet ported).
|
||||||
|
// OvcViewr (not yet ported).
|
||||||
|
// Replace code in those units with calls to standard Clipboard methods?
|
||||||
|
begin
|
||||||
|
{$IFDEF MSWINDOWS}
|
||||||
|
Result := Windows.GlobalAlloc(uFlags, dwBytes);
|
||||||
|
{$ELSE}
|
||||||
|
Result := THandle(GetMem(dwBytes));
|
||||||
|
{$ENDIF}
|
||||||
|
end;
|
||||||
|
|
||||||
|
function GlobalLock(hMem: HGLOBAL): Pointer;
|
||||||
|
begin
|
||||||
|
{$IFDEF MSWINDOWS}
|
||||||
|
Result := Windows.GlobalLock(hMem);
|
||||||
|
{$ELSE}
|
||||||
|
Result := PAnsiChar(hMem);
|
||||||
|
{$ENDIF}
|
||||||
|
end;
|
||||||
|
|
||||||
|
function GlobalUnlock(hMem: HGLOBAL): BOOL;
|
||||||
|
begin
|
||||||
|
{$IFDEF MSWINDOWS}
|
||||||
|
Result := Windows.GlobalUnlock(hMem);
|
||||||
|
{$ELSE}
|
||||||
|
FreeMem(Pointer(hMem));
|
||||||
|
Result := True;
|
||||||
|
{$ENDIF}
|
||||||
|
end;
|
||||||
|
|
||||||
|
function DestroyCursor(hCursor: HICON): BOOL;
|
||||||
|
begin
|
||||||
|
{$IFDEF MSWINDOWS}
|
||||||
|
Result := Windows.DestroyCursor(hCursor);
|
||||||
|
{$ENDIF}
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
function PostMessage(hWnd: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM): BOOL;
|
||||||
|
{Use control's Perform method to force it to respond to message}
|
||||||
|
var
|
||||||
|
AWinControl : TWinControl;
|
||||||
|
begin
|
||||||
|
// Result := LclIntf.PostMessage(hWnd, Msg, wParam, lParam); {Doesn't work}
|
||||||
|
Assert(hWnd <> 0, 'Window handle not assigned on entry to PostMessage');
|
||||||
|
AWinControl := FindOwnerControl(hWnd);
|
||||||
|
// Assert(AWinControl <> nil,
|
||||||
|
// 'Owner control not found in PostMessage ($' + IntToHex(Msg, 4) + ') ');
|
||||||
|
if AWinControl <> nil then
|
||||||
|
AWinControl.Perform(Msg, wParam, lParam);
|
||||||
|
Result := True;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function SendMessage(hWnd: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM): LRESULT;
|
||||||
|
{Use control's Perform method to force it to respond to message}
|
||||||
|
var
|
||||||
|
AWinControl : TWinControl;
|
||||||
|
begin
|
||||||
|
// Result := LclIntf.SendMessage(hWnd, Msg, wParam, lParam); {Doesn't work}
|
||||||
|
Assert(hWnd <> 0, 'Window handle not assigned on entry to SendMessage');
|
||||||
|
AWinControl := FindOwnerControl(hWnd);
|
||||||
|
// Assert(AWinControl <> nil,
|
||||||
|
// 'Owner control not found in SendMessage ($' + IntToHex(Msg, 4) + ') ');
|
||||||
|
if AWinControl <> nil then
|
||||||
|
Result := AWinControl.Perform(Msg, wParam, lParam);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure RecreateWnd(const AWinControl:TWinControl);
|
||||||
|
// Calls to Controls.RecreateWnd shouldn't be needed with GTK widgetset,
|
||||||
|
// so just ignore them.
|
||||||
|
begin
|
||||||
|
{$IFDEF MSWINDOWS}
|
||||||
|
Controls.RecreateWnd(AWinControl);
|
||||||
|
{$ENDIF}
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
{These belong in Classes unit}
|
||||||
|
function MakeObjectInstance(Method: TWndMethod): Pointer;
|
||||||
|
begin
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure FreeObjectInstance(ObjectInstance: Pointer);
|
||||||
|
begin
|
||||||
|
end;
|
||||||
|
|
||||||
|
function AllocateHWnd(Method: TWndMethod): HWND;
|
||||||
|
begin
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure DeallocateHWnd(Wnd: HWND);
|
||||||
|
begin
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
{This belongs in System unit}
|
||||||
|
function FindClassHInstance(ClassType: TClass): LongWord;
|
||||||
|
begin
|
||||||
|
(*
|
||||||
|
Result := System.MainInstance;
|
||||||
|
*)
|
||||||
|
Result := System.HInstance;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
{This belongs in ExtCtrls unit}
|
||||||
|
procedure Frame3D(Canvas: TCanvas; var Rect: TRect;
|
||||||
|
TopColor, BottomColor: TColor; Width: Integer);
|
||||||
|
begin
|
||||||
|
Canvas.Frame3D(Rect, Width, bvLowered);
|
||||||
|
{Need a way of determining whether to pass bvNone, bvLowered,
|
||||||
|
bvRaised, or bvSpace based on TopColor and BottomColor.
|
||||||
|
See Delphi help for Frame3D.}
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
{This should be a TCanvas method}
|
||||||
|
procedure BrushCopy(DestCanvas: TCanvas; const Dest: TRect; Bitmap: TBitmap;
|
||||||
|
const Source: TRect; Color: TColor);
|
||||||
|
begin
|
||||||
|
StretchBlt(DestCanvas.Handle, Dest.Left, Dest.Top,
|
||||||
|
Dest.Right - Dest.Left, Dest.Bottom - Dest.Top,
|
||||||
|
Bitmap.Canvas.Handle, Source.Left, Source.Top,
|
||||||
|
Source.Right - Source.Left, Source.Bottom - Source.Top, SrcCopy);
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
{This belongs in Buttons unit}
|
||||||
|
function DrawButtonFace(Canvas: TCanvas; const Client: TRect;
|
||||||
|
BevelWidth: Integer; Style: TButtonStyle;
|
||||||
|
IsRounded, IsDown, IsFocused: Boolean): TRect;
|
||||||
|
{Draw a push button.
|
||||||
|
Style, IsRounded and IsFocused params appear to be left over
|
||||||
|
from Win 3.1, so ignore them.}
|
||||||
|
var
|
||||||
|
ARect : TRect;
|
||||||
|
begin
|
||||||
|
ARect := Client;
|
||||||
|
{The way LCL TCustomSpeedButton draws a button}
|
||||||
|
if IsDown then
|
||||||
|
Canvas.Frame3D(ARect, BevelWidth, bvLowered)
|
||||||
|
else
|
||||||
|
Canvas.Frame3D(ARect, BevelWidth, bvRaised);
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
{Additional routines}
|
||||||
|
{$IFDEF LINUX}
|
||||||
|
function SearchForBrowser(const BrowserFileName : string) : string;
|
||||||
|
{Search path for specified browser file name, returning
|
||||||
|
its expanded file name that includes path to it.}
|
||||||
|
begin
|
||||||
|
Result :=
|
||||||
|
SearchFileInPath(BrowserFileName, '', GetEnvironmentVariable('PATH'),
|
||||||
|
PathSeparator, [sffDontSearchInBasePath]);
|
||||||
|
end;
|
||||||
|
|
||||||
|
function GetBrowserPath : string;
|
||||||
|
{Return path to first browser found.}
|
||||||
|
begin
|
||||||
|
Result := SearchForBrowser('firefox');
|
||||||
|
if Result = '' then
|
||||||
|
Result := SearchForBrowser('konqueror'); {KDE browser}
|
||||||
|
if Result = '' then
|
||||||
|
Result := SearchForBrowser('epiphany'); {GNOME browser}
|
||||||
|
if Result = '' then
|
||||||
|
Result := SearchForBrowser('mozilla');
|
||||||
|
if Result = '' then
|
||||||
|
Result := SearchForBrowser('opera');
|
||||||
|
end;
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
|
||||||
|
end.
|
234
components/orpheus/myovcreg.pas
Normal file
@ -0,0 +1,234 @@
|
|||||||
|
{*********************************************************}
|
||||||
|
{* myovcreg.pas *}
|
||||||
|
{*********************************************************}
|
||||||
|
|
||||||
|
{* ***** BEGIN LICENSE BLOCK ***** *}
|
||||||
|
{* Version: MPL 1.1 *}
|
||||||
|
{* *}
|
||||||
|
{* The contents of this file are subject to the Mozilla Public License *}
|
||||||
|
{* Version 1.1 (the "License"); you may not use this file except in *}
|
||||||
|
{* compliance with the License. You may obtain a copy of the License at *}
|
||||||
|
{* http://www.mozilla.org/MPL/ *}
|
||||||
|
{* *}
|
||||||
|
{* Software distributed under the License is distributed on an "AS IS" basis, *}
|
||||||
|
{* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License *}
|
||||||
|
{* for the specific language governing rights and limitations under the *}
|
||||||
|
{* License. *}
|
||||||
|
{* *}
|
||||||
|
{* The Original Code is TurboPower Orpheus *}
|
||||||
|
{* *}
|
||||||
|
{* The Initial Developer of the Original Code is TurboPower Software *}
|
||||||
|
{* *}
|
||||||
|
{* Portions created by TurboPower Software Inc. are Copyright (C)1995-2002 *}
|
||||||
|
{* TurboPower Software Inc. All Rights Reserved. *}
|
||||||
|
{* *}
|
||||||
|
{* Contributor(s): *}
|
||||||
|
{* *}
|
||||||
|
{* Phil Hess - adapted ovcreg.pas to register only ported controls. *}
|
||||||
|
{* *}
|
||||||
|
{* ***** END LICENSE BLOCK ***** *}
|
||||||
|
|
||||||
|
unit MyOvcReg;
|
||||||
|
|
||||||
|
{
|
||||||
|
Registration unit for the ported Orpheus components.
|
||||||
|
}
|
||||||
|
|
||||||
|
interface
|
||||||
|
|
||||||
|
uses
|
||||||
|
Classes,
|
||||||
|
Forms,
|
||||||
|
LResources,
|
||||||
|
PropEdits,
|
||||||
|
ComponentEditors,
|
||||||
|
ovcabot0, {Property editors}
|
||||||
|
ovclbl0,
|
||||||
|
myovctbpe1,
|
||||||
|
myovctbpe2,
|
||||||
|
ovcbase, {Controls}
|
||||||
|
ovctcedt,
|
||||||
|
ovctchdr,
|
||||||
|
ovctccbx,
|
||||||
|
ovctcsim,
|
||||||
|
ovctcbox,
|
||||||
|
ovctcbmp,
|
||||||
|
ovctcgly,
|
||||||
|
ovctcico,
|
||||||
|
ovctbcls,
|
||||||
|
ovctbrws,
|
||||||
|
ovctable,
|
||||||
|
ovcurl,
|
||||||
|
ovcrlbl,
|
||||||
|
ovclabel,
|
||||||
|
ovcsf,
|
||||||
|
o32flxed,
|
||||||
|
o32tcflx,
|
||||||
|
// ovccalc,
|
||||||
|
// ovcclrcb,
|
||||||
|
ovcsc,
|
||||||
|
ovcvlb;
|
||||||
|
|
||||||
|
procedure Register;
|
||||||
|
|
||||||
|
|
||||||
|
implementation
|
||||||
|
|
||||||
|
type
|
||||||
|
TOvcHeaderProperty = class(TCaptionProperty);
|
||||||
|
|
||||||
|
{component editor for the table}
|
||||||
|
TOvcTableEditor = class(TDefaultComponentEditor)
|
||||||
|
public
|
||||||
|
procedure ExecuteVerb(Index : Integer);
|
||||||
|
override;
|
||||||
|
function GetVerb(Index : Integer) : AnsiString;
|
||||||
|
override;
|
||||||
|
function GetVerbCount : Integer;
|
||||||
|
override;
|
||||||
|
end;
|
||||||
|
|
||||||
|
{*** TOvcTableEditor ***}
|
||||||
|
|
||||||
|
const
|
||||||
|
TableVerbs : array[0..1] of PAnsiChar =
|
||||||
|
('Columns Editor', 'Rows Editor');
|
||||||
|
|
||||||
|
procedure TOvcTableEditor.ExecuteVerb(Index : Integer);
|
||||||
|
var
|
||||||
|
Table : TOvcTable;
|
||||||
|
C : TOvcfrmColEditor;
|
||||||
|
R : TOvcfrmRowEditor;
|
||||||
|
begin
|
||||||
|
Table := TOvcTable(Component);
|
||||||
|
if Index = 0 then begin
|
||||||
|
C := TOvcfrmColEditor.Create(Application);
|
||||||
|
try
|
||||||
|
C.Editor := Self;
|
||||||
|
C.SetCols(TOvcTableColumns(Table.Columns));
|
||||||
|
C.ShowModal;
|
||||||
|
Designer.Modified;
|
||||||
|
finally
|
||||||
|
C.Free;
|
||||||
|
end;
|
||||||
|
end else if Index = 1 then begin
|
||||||
|
R := TOvcfrmRowEditor.Create(Application);
|
||||||
|
try
|
||||||
|
R.SetRows(TOvcTableRows(Table.Rows));
|
||||||
|
R.ShowModal;
|
||||||
|
Designer.Modified;
|
||||||
|
finally
|
||||||
|
R.Free;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TOvcTableEditor.GetVerb(Index : Integer) : AnsiString;
|
||||||
|
begin
|
||||||
|
Result := StrPas(TableVerbs[Index]);
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TOvcTableEditor.GetVerbCount : Integer;
|
||||||
|
begin
|
||||||
|
Result := High(TableVerbs) + 1;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
procedure Register;
|
||||||
|
begin
|
||||||
|
RegisterPropertyEditor(TypeInfo(string), TOvcURL, 'Caption', TOvcHeaderProperty);
|
||||||
|
RegisterPropertyEditor(TypeInfo(string), TOvcURL, 'URL', TOvcHeaderProperty);
|
||||||
|
|
||||||
|
RegisterPropertyEditor(TypeInfo(string), TOvcRotatedLabel, 'About', TOvcAboutProperty);
|
||||||
|
RegisterPropertyEditor(TypeInfo(string), TOvcLabel, 'About', TOvcAboutProperty);
|
||||||
|
RegisterPropertyEditor(TypeInfo(string), TOvcURL, 'About', TOvcAboutProperty);
|
||||||
|
RegisterPropertyEditor(TypeInfo(string), TOvcSpinner, 'About', TOvcAboutProperty);
|
||||||
|
RegisterPropertyEditor(TypeInfo(string), TOvcVirtualListBox, 'About', TOvcAboutProperty);
|
||||||
|
{$IFDEF MSWINDOWS}
|
||||||
|
RegisterPropertyEditor(TypeInfo(string), TOvcSimpleField, 'About', TOvcAboutProperty);
|
||||||
|
{$ENDIF}
|
||||||
|
RegisterPropertyEditor(TypeInfo(string), TO32FlexEdit, 'About', TOvcAboutProperty);
|
||||||
|
// RegisterPropertyEditor(TypeInfo(string), TOvcCalculator, 'About', TOvcAboutProperty);
|
||||||
|
// RegisterPropertyEditor(TypeInfo(string), TOvcColorComboBox, 'About', TOvcAboutProperty);
|
||||||
|
RegisterPropertyEditor(TypeInfo(string), TOvcTable, 'About', TOvcAboutProperty);
|
||||||
|
RegisterPropertyEditor(TypeInfo(string), TOvcTCColHead, 'About', TOvcAboutProperty);
|
||||||
|
RegisterPropertyEditor(TypeInfo(string), TOvcTCRowHead, 'About', TOvcAboutProperty);
|
||||||
|
RegisterPropertyEditor(TypeInfo(string), TOvcTCString, 'About', TOvcAboutProperty);
|
||||||
|
{$IFDEF MSWINDOWS}
|
||||||
|
RegisterPropertyEditor(TypeInfo(string), TOvcTCSimpleField, 'About', TOvcAboutProperty);
|
||||||
|
{$ENDIF}
|
||||||
|
RegisterPropertyEditor(TypeInfo(string), TOvcTCMemo, 'About', TOvcAboutProperty);
|
||||||
|
RegisterPropertyEditor(TypeInfo(string), TOvcTCCheckBox, 'About', TOvcAboutProperty);
|
||||||
|
RegisterPropertyEditor(TypeInfo(string), TOvcTCComboBox, 'About', TOvcAboutProperty);
|
||||||
|
RegisterPropertyEditor(TypeInfo(string), TOvcTCBitMap, 'About', TOvcAboutProperty);
|
||||||
|
RegisterPropertyEditor(TypeInfo(string), TOvcTCGlyph, 'About', TOvcAboutProperty);
|
||||||
|
RegisterPropertyEditor(TypeInfo(string), TOvcTCIcon, 'About', TOvcAboutProperty);
|
||||||
|
RegisterPropertyEditor(TypeInfo(string), TO32TCFlexEdit, 'About', TOvcAboutProperty);
|
||||||
|
RegisterPropertyEditor(TypeInfo(string), TOvcController, 'About', TOvcAboutProperty);
|
||||||
|
|
||||||
|
{register label component editor}
|
||||||
|
RegisterComponentEditor(TOvcCustomLabel, TOvcLabelEditor);
|
||||||
|
|
||||||
|
{register property editors for the entry fields}
|
||||||
|
(*
|
||||||
|
RegisterPropertyEditor(
|
||||||
|
TypeInfo(Char), TOvcSimpleField, 'PictureMask', TSimpleMaskProperty);
|
||||||
|
RegisterPropertyEditor(
|
||||||
|
TypeInfo(string), TOvcPictureField, 'PictureMask', TPictureMaskProperty);
|
||||||
|
RegisterPropertyEditor(
|
||||||
|
TypeInfo(string), TOvcNumericField, 'PictureMask', TNumericMaskProperty);
|
||||||
|
RegisterPropertyEditor(
|
||||||
|
TypeInfo(string), TOvcSimpleField, 'RangeHi', OvcEfPe.TEfRangeProperty);
|
||||||
|
RegisterPropertyEditor(
|
||||||
|
TypeInfo(string), TOvcSimpleField, 'RangeLo', OvcEfPe.TEfRangeProperty);
|
||||||
|
RegisterPropertyEditor(
|
||||||
|
TypeInfo(string), TOvcPictureField, 'RangeHi', OvcEfPe.TEfRangeProperty);
|
||||||
|
RegisterPropertyEditor(
|
||||||
|
TypeInfo(string), TOvcPictureField, 'RangeLo', OvcEfPe.TEfRangeProperty);
|
||||||
|
RegisterPropertyEditor(
|
||||||
|
TypeInfo(string), TOvcNumericField, 'RangeHi', OvcEfPe.TEfRangeProperty);
|
||||||
|
RegisterPropertyEditor(
|
||||||
|
TypeInfo(string), TOvcNumericField, 'RangeLo', OvcEfPe.TEfRangeProperty);
|
||||||
|
RegisterPropertyEditor(
|
||||||
|
TypeInfo(string), TOvcPictureLabel, 'PictureMask', TPictureMaskProperty);
|
||||||
|
*)
|
||||||
|
|
||||||
|
RegisterPropertyEditor(TypeInfo(TOvcTableRows), TOvcTable, '', TOvcTableRowProperty);
|
||||||
|
RegisterPropertyEditor(TypeInfo(TOvcTableColumns), TOvcTable, '', TOvcTableColumnProperty);
|
||||||
|
|
||||||
|
{register component editor for the table}
|
||||||
|
RegisterComponentEditor(TOvcTable, TOvcTableEditor);
|
||||||
|
|
||||||
|
RegisterComponents('Orpheus', [TOvcRotatedLabel]);
|
||||||
|
RegisterComponents('Orpheus', [TOvcLabel]);
|
||||||
|
RegisterComponents('Orpheus', [TOvcURL]);
|
||||||
|
RegisterComponents('Orpheus', [TOvcSpinner]);
|
||||||
|
RegisterComponents('Orpheus', [TOvcVirtualListBox]);
|
||||||
|
{$IFDEF MSWINDOWS} //If used, crashes IDE with GTK, so only register if Windows
|
||||||
|
RegisterComponents('Orpheus', [TOvcSimpleField]);
|
||||||
|
{$ENDIF}
|
||||||
|
RegisterComponents('Orpheus', [TO32FlexEdit]);
|
||||||
|
// RegisterComponents('Orpheus', [TOvcCalculator]);
|
||||||
|
// RegisterComponents('Orpheus', [TOvcColorComboBox]);
|
||||||
|
RegisterComponents('Orpheus', [TOvcTable]);
|
||||||
|
RegisterComponents('Orpheus', [TOvcTCColHead]);
|
||||||
|
RegisterComponents('Orpheus', [TOvcTCRowHead]);
|
||||||
|
RegisterComponents('Orpheus', [TOvcTCString]);
|
||||||
|
{$IFDEF MSWINDOWS} //If used, crashes IDE with GTK, so only register if Windows
|
||||||
|
RegisterComponents('Orpheus', [TOvcTCSimpleField]);
|
||||||
|
{$ENDIF}
|
||||||
|
RegisterComponents('Orpheus', [TOvcTCMemo]);
|
||||||
|
RegisterComponents('Orpheus', [TOvcTCCheckBox]);
|
||||||
|
RegisterComponents('Orpheus', [TOvcTCComboBox]);
|
||||||
|
RegisterComponents('Orpheus', [TOvcTCBitMap]);
|
||||||
|
RegisterComponents('Orpheus', [TOvcTCGlyph]);
|
||||||
|
RegisterComponents('Orpheus', [TOvcTCIcon]);
|
||||||
|
RegisterComponents('Orpheus', [TO32TCFlexEdit]);
|
||||||
|
RegisterComponents('Orpheus', [TOvcController]);
|
||||||
|
end; {Register}
|
||||||
|
|
||||||
|
initialization
|
||||||
|
{$I ovcreg.lrs}
|
||||||
|
|
||||||
|
end.
|
||||||
|
|
342
components/orpheus/myovctbpe1.lfm
Normal file
@ -0,0 +1,342 @@
|
|||||||
|
object OvcfrmRowEditor: TOvcfrmRowEditor
|
||||||
|
Left = 387
|
||||||
|
Top = 266
|
||||||
|
BorderIcons = [biSystemMenu]
|
||||||
|
BorderStyle = bsDialog
|
||||||
|
Caption = 'Rows Editor'
|
||||||
|
ClientHeight = 280
|
||||||
|
Height = 280
|
||||||
|
ClientWidth = 401
|
||||||
|
Width = 401
|
||||||
|
Color = clBtnFace
|
||||||
|
Font.Charset = DEFAULT_CHARSET
|
||||||
|
Font.Color = clWindowText
|
||||||
|
Font.Height = -11
|
||||||
|
Font.Style = []
|
||||||
|
Position = poScreenCenter
|
||||||
|
OnShow = FormShow
|
||||||
|
PixelsPerInch = 96
|
||||||
|
TextHeight = 13
|
||||||
|
object DoneButton: TBitBtn
|
||||||
|
Left = 307
|
||||||
|
Top = 248
|
||||||
|
Width = 75
|
||||||
|
Height = 25
|
||||||
|
Caption = 'Done'
|
||||||
|
ModalResult = 1
|
||||||
|
TabOrder = 5
|
||||||
|
OnClick = DoneButtonClick
|
||||||
|
NumGlyphs = 2
|
||||||
|
end
|
||||||
|
object Panel1: TPanel
|
||||||
|
Left = 0
|
||||||
|
Top = 0
|
||||||
|
Width = 401
|
||||||
|
Height = 41
|
||||||
|
Align = alTop
|
||||||
|
Alignment = taLeftJustify
|
||||||
|
BevelInner = bvLowered
|
||||||
|
TabOrder = 0
|
||||||
|
object SpeedButton1: TSpeedButton
|
||||||
|
Left = 8
|
||||||
|
Top = 8
|
||||||
|
Width = 25
|
||||||
|
Height = 25
|
||||||
|
Hint = 'Previous row'
|
||||||
|
Glyph.Data = {
|
||||||
|
76010000424D7601000000000000760000002800000020000000100000000100
|
||||||
|
0400000000000001000000000000000000001000000010000000000000000000
|
||||||
|
80000080000000808000800000008000800080800000C0C0C000808080000000
|
||||||
|
FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00BBBBBBBBBBBB
|
||||||
|
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB0000
|
||||||
|
BBBBBBBBBBBB777BBBBBBBBBBBB00CC0BBBBBBBBBBB7777BBBBBBBBBBB00CCC0
|
||||||
|
BBBBBBBBBB77777BBBBBBBBBB00CCCC0BBBBBBBBB777777BBBBBBBBB00CCCCC0
|
||||||
|
BBBBBBBB7777777BBBBBBBBF0CCCCCC0BBBBBBB77777777BBBBBBBBF0CCCCCC0
|
||||||
|
BBBBBBB77777777BBBBBBBBBFCCCCCC0BBBBBBBB7777777BBBBBBBBBBFCCCCC0
|
||||||
|
BBBBBBBBB777777BBBBBBBBBBBFCCCC0BBBBBBBBBB77777BBBBBBBBBBBBFCCC0
|
||||||
|
BBBBBBBBBBB7777BBBBBBBBBBBBBFFFFBBBBBBBBBBBB777BBBBBBBBBBBBBBBBB
|
||||||
|
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB}
|
||||||
|
NumGlyphs = 2
|
||||||
|
ParentShowHint = False
|
||||||
|
ShowHint = True
|
||||||
|
OnClick = SpeedButton1Click
|
||||||
|
end
|
||||||
|
object SpeedButton2: TSpeedButton
|
||||||
|
Left = 32
|
||||||
|
Top = 8
|
||||||
|
Width = 25
|
||||||
|
Height = 25
|
||||||
|
Hint = 'Next row'
|
||||||
|
Glyph.Data = {
|
||||||
|
76010000424D7601000000000000760000002800000020000000100000000100
|
||||||
|
0400000000000001000000000000000000001000000010000000000000000000
|
||||||
|
80000080000000808000800000008000800080800000C0C0C000808080000000
|
||||||
|
FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00BBBBBBBBBBBB
|
||||||
|
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBF000BBBBB
|
||||||
|
BBBBBBBFFFFBBBBBBBBBBBBF0000BBBBBBBBBBBFFFFFBBBBBBBBBBBFCCC00BBB
|
||||||
|
BBBBBBBFFFFFFBBBBBBBBBBFCCCC00BBBBBBBBBFFFFFFFBBBBBBBBBFCCCCC00B
|
||||||
|
BBBBBBBFFFFFFFFBBBBBBBBFCCCCCC00BBBBBBBFFFFFFFFFBBBBBBBFCCCCCC0F
|
||||||
|
BBBBBBBFFFFFFFFFBBBBBBBFCCCCCCFBBBBBBBBFFFFFFFFBBBBBBBBFCCCCCFBB
|
||||||
|
BBBBBBBFFFFFFFBBBBBBBBBFCCCCFBBBBBBBBBBFFFFFFBBBBBBBBBBFCCCFBBBB
|
||||||
|
BBBBBBBFFFFFBBBBBBBBBBBFFFFBBBBBBBBBBBBFFFFBBBBBBBBBBBBBBBBBBBBB
|
||||||
|
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB}
|
||||||
|
NumGlyphs = 2
|
||||||
|
ParentShowHint = False
|
||||||
|
ShowHint = True
|
||||||
|
OnClick = SpeedButton2Click
|
||||||
|
end
|
||||||
|
object SpeedButton3: TSpeedButton
|
||||||
|
Left = 72
|
||||||
|
Top = 8
|
||||||
|
Width = 25
|
||||||
|
Height = 25
|
||||||
|
Hint = 'First row'
|
||||||
|
Glyph.Data = {
|
||||||
|
76010000424D7601000000000000760000002800000020000000100000000100
|
||||||
|
0400000000000001000000000000000000001000000010000000000000000000
|
||||||
|
80000080000000808000800000008000800080800000C0C0C000808080000000
|
||||||
|
FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00BBBBBBBBBBBB
|
||||||
|
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB00BBBBBB00
|
||||||
|
BBBBBBFFBBBBBBFFBBBBBB00BBBBB000BBBBBBFFBBBBBFFFBBBBBB00BBBB00C0
|
||||||
|
BBBBBBFFBBBBFFFFBBBBBB00BBB00CC0BBBBBBFFBBBFFFFFBBBBBB00BB00CCC0
|
||||||
|
BBBBBBFFBBFFFFFFBBBBBB00B00CCCC0BBBBBBFFBFFFFFFFBBBBBB00BFCCCCC0
|
||||||
|
BBBBBBFFBFFFFFFFBBBBBB00BBFCCCC0BBBBBBFFBBFFFFFFBBBBBB00BBBFCCC0
|
||||||
|
BBBBBBFFBBBFFFFFBBBBBB00BBBBFCC0BBBBBBFFBBBBFFFFBBBBBB00BBBBBFC0
|
||||||
|
BBBBBBFFBBBBBFFFBBBBBB00BBBBBBFFBBBBBBFFBBBBBBFFBBBBBBBBBBBBBBBB
|
||||||
|
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB}
|
||||||
|
NumGlyphs = 2
|
||||||
|
ParentShowHint = False
|
||||||
|
ShowHint = True
|
||||||
|
OnClick = SpeedButton3Click
|
||||||
|
end
|
||||||
|
object SpeedButton4: TSpeedButton
|
||||||
|
Left = 96
|
||||||
|
Top = 8
|
||||||
|
Width = 25
|
||||||
|
Height = 25
|
||||||
|
Hint = 'Last row'
|
||||||
|
Glyph.Data = {
|
||||||
|
76010000424D7601000000000000760000002800000020000000100000000100
|
||||||
|
0400000000000001000000000000000000001000000010000000000000000000
|
||||||
|
80000080000000808000800000008000800080800000C0C0C000808080000000
|
||||||
|
FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00BBBBBBBBBBBB
|
||||||
|
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB00BBBBBB
|
||||||
|
00BBBBBB77BBBBBB77BBBBBB000BBBBB00BBBBBB777BBBBB77BBBBBB0C00BBBB
|
||||||
|
00BBBBBB7777BBBB77BBBBBB0CC00BBB00BBBBBB77777BBB77BBBBBB0CCC00BB
|
||||||
|
00BBBBBB777777BB77BBBBBB0CCCC00B00BBBBBB7777777B77BBBBBB0CCCCCFB
|
||||||
|
00BBBBBB7777777B77BBBBBB0CCCCFBB00BBBBBB777777BB77BBBBBB0CCCFBBB
|
||||||
|
00BBBBBB77777BBB77BBBBBB0CCFBBBB00BBBBBB7777BBBB77BBBBBB0CFBBBBB
|
||||||
|
00BBBBBB777BBBBB77BBBBBBFFBBBBBB00BBBBBB77BBBBBB77BBBBBBBBBBBBBB
|
||||||
|
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB}
|
||||||
|
NumGlyphs = 2
|
||||||
|
ParentShowHint = False
|
||||||
|
ShowHint = True
|
||||||
|
OnClick = SpeedButton4Click
|
||||||
|
end
|
||||||
|
object SpeedButton5: TSpeedButton
|
||||||
|
Left = 136
|
||||||
|
Top = 8
|
||||||
|
Width = 25
|
||||||
|
Height = 25
|
||||||
|
Hint = 'Insert row'
|
||||||
|
Glyph.Data = {
|
||||||
|
76010000424D7601000000000000760000002800000020000000100000000100
|
||||||
|
0400000000000001000000000000000000001000000010000000000000000000
|
||||||
|
80000080000000808000800000008000800080800000C0C0C000808080000000
|
||||||
|
FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00BBBBBBBBBBBB
|
||||||
|
BBBBBBBBBBBBBBBBBBBBBBBBBBF000BBBBBBBBBBBBF777BBBBBBBBBBBBFCC0BB
|
||||||
|
BBBBBBBBBBFBB7BBBBBBBBBBBBFCC0BBBBBBBBBBBBFBB7BBBBBBBBBBBBFCC0BB
|
||||||
|
BBBBBBBBBBFBB7BBBBBBBBBBBBFCC0BBBBBBBBBBBBFBB7BBBBBBB000000CC000
|
||||||
|
000BB777777BB777777BBFCCCCCCCCCCCC0BBFBBBBBBBBBBBB7BBFCCCCCCCCCC
|
||||||
|
CC0BBFBBBBBBBBBBBB7BBFFFFFFCC0FFFFFBBFFFFFFBB7FFFFFBBBBBBBFCC0BB
|
||||||
|
BBBBBBBBBBFBB7BBBBBBBBBBBBFCC0BBBBBBBBBBBBFBB7BBBBBBBBBBBBFCC0BB
|
||||||
|
BBBBBBBBBBFBB7BBBBBBBBBBBBFCC0BBBBBBBBBBBBFBB7BBBBBBBBBBBBFFF0BB
|
||||||
|
BBBBBBBBBBFFF7BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB}
|
||||||
|
NumGlyphs = 2
|
||||||
|
ParentShowHint = False
|
||||||
|
ShowHint = True
|
||||||
|
OnClick = SpeedButton5Click
|
||||||
|
end
|
||||||
|
object SpeedButton6: TSpeedButton
|
||||||
|
Left = 160
|
||||||
|
Top = 8
|
||||||
|
Width = 25
|
||||||
|
Height = 25
|
||||||
|
Hint = 'Delete Row'
|
||||||
|
Glyph.Data = {
|
||||||
|
76010000424D7601000000000000760000002800000020000000100000000100
|
||||||
|
0400000000000001000000000000000000001000000010000000000000000000
|
||||||
|
80000080000000808000800000008000800080800000C0C0C000808080000000
|
||||||
|
FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00BBBBBBBBBBBB
|
||||||
|
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
|
||||||
|
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
|
||||||
|
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB00000000000
|
||||||
|
000BB77777777777777BBFCCCCCCCCCCCC0BBFBBBBBBBBBBBB7BBFCCCCCCCCCC
|
||||||
|
CC0BBFBBBBBBBBBBBB7BBFFFFFFFFFFFFFFBBFFFFFFFFFFFFFFBBBBBBBBBBBBB
|
||||||
|
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
|
||||||
|
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
|
||||||
|
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB}
|
||||||
|
NumGlyphs = 2
|
||||||
|
ParentShowHint = False
|
||||||
|
ShowHint = True
|
||||||
|
OnClick = SpeedButton6Click
|
||||||
|
end
|
||||||
|
object Label1: TLabel
|
||||||
|
Left = 208
|
||||||
|
Top = 13
|
||||||
|
Width = 89
|
||||||
|
Height = 16
|
||||||
|
AutoSize = False
|
||||||
|
Caption = '&Row number'
|
||||||
|
end
|
||||||
|
object OvcSpinner1: TOvcSpinner
|
||||||
|
Left = 369
|
||||||
|
Top = 12
|
||||||
|
Width = 16
|
||||||
|
Height = 21
|
||||||
|
AutoRepeat = True
|
||||||
|
Delta = 1.000000000000000000
|
||||||
|
FocusedControl = ctlRowNumber
|
||||||
|
end
|
||||||
|
object ctlRowNumber: TEdit
|
||||||
|
Left = 296
|
||||||
|
Top = 12
|
||||||
|
Width = 73
|
||||||
|
Height = 21
|
||||||
|
MaxLength = 8
|
||||||
|
TabOrder = 0
|
||||||
|
OnChange = ctlRowNumberChange
|
||||||
|
OnExit = ctlRowNumberExit
|
||||||
|
end
|
||||||
|
end
|
||||||
|
object GroupBox1: TGroupBox
|
||||||
|
Left = 8
|
||||||
|
Top = 48
|
||||||
|
Width = 273
|
||||||
|
Height = 113
|
||||||
|
Caption = 'Selected row details'
|
||||||
|
TabOrder = 1
|
||||||
|
object ctlHidden: TCheckBox
|
||||||
|
Left = 16
|
||||||
|
Top = 8
|
||||||
|
Width = 89
|
||||||
|
Height = 17
|
||||||
|
Caption = 'Hidde&n'
|
||||||
|
TabOrder = 0
|
||||||
|
end
|
||||||
|
object ctlUseDefHeight: TRadioButton
|
||||||
|
Left = 16
|
||||||
|
Top = 40
|
||||||
|
Width = 145
|
||||||
|
Height = 25
|
||||||
|
Caption = 'Use &default height'
|
||||||
|
TabOrder = 1
|
||||||
|
TabStop = True
|
||||||
|
OnClick = ctlUseDefHeightClick
|
||||||
|
end
|
||||||
|
object ctlUseCustHeight: TRadioButton
|
||||||
|
Left = 16
|
||||||
|
Top = 64
|
||||||
|
Width = 145
|
||||||
|
Height = 25
|
||||||
|
Caption = 'Use &custom height'
|
||||||
|
TabOrder = 2
|
||||||
|
OnClick = ctlUseCustHeightClick
|
||||||
|
end
|
||||||
|
object OvcSpinner2: TOvcSpinner
|
||||||
|
Left = 217
|
||||||
|
Top = 67
|
||||||
|
Width = 16
|
||||||
|
Height = 21
|
||||||
|
AutoRepeat = True
|
||||||
|
Delta = 1.000000000000000000
|
||||||
|
FocusedControl = ctlHeight
|
||||||
|
end
|
||||||
|
object ctlHeight: TEdit
|
||||||
|
Left = 168
|
||||||
|
Top = 68
|
||||||
|
Width = 49
|
||||||
|
Height = 21
|
||||||
|
MaxLength = 5
|
||||||
|
TabOrder = 3
|
||||||
|
end
|
||||||
|
end
|
||||||
|
object GroupBox2: TGroupBox
|
||||||
|
Left = 8
|
||||||
|
Top = 168
|
||||||
|
Width = 273
|
||||||
|
Height = 105
|
||||||
|
Caption = 'Overall row details'
|
||||||
|
TabOrder = 2
|
||||||
|
object Label2: TLabel
|
||||||
|
Left = 16
|
||||||
|
Top = 17
|
||||||
|
Width = 121
|
||||||
|
Height = 16
|
||||||
|
AutoSize = False
|
||||||
|
Caption = 'De&fault row height'
|
||||||
|
end
|
||||||
|
object Label3: TLabel
|
||||||
|
Left = 16
|
||||||
|
Top = 53
|
||||||
|
Width = 121
|
||||||
|
Height = 16
|
||||||
|
AutoSize = False
|
||||||
|
Caption = 'Ma&ximum rows'
|
||||||
|
end
|
||||||
|
object OvcSpinner3: TOvcSpinner
|
||||||
|
Left = 193
|
||||||
|
Top = 17
|
||||||
|
Width = 16
|
||||||
|
Height = 21
|
||||||
|
AutoRepeat = True
|
||||||
|
Delta = 1.000000000000000000
|
||||||
|
FocusedControl = ctlDefaultHeight
|
||||||
|
end
|
||||||
|
object OvcSpinner4: TOvcSpinner
|
||||||
|
Left = 217
|
||||||
|
Top = 53
|
||||||
|
Width = 16
|
||||||
|
Height = 21
|
||||||
|
AutoRepeat = True
|
||||||
|
Delta = 1.000000000000000000
|
||||||
|
FocusedControl = ctlRowLimit
|
||||||
|
end
|
||||||
|
object ctlRowLimit: TEdit
|
||||||
|
Left = 144
|
||||||
|
Top = 52
|
||||||
|
Width = 73
|
||||||
|
Height = 21
|
||||||
|
TabOrder = 1
|
||||||
|
end
|
||||||
|
object ctlDefaultHeight: TEdit
|
||||||
|
Left = 144
|
||||||
|
Top = 17
|
||||||
|
Width = 49
|
||||||
|
Height = 21
|
||||||
|
MaxLength = 5
|
||||||
|
TabOrder = 0
|
||||||
|
end
|
||||||
|
end
|
||||||
|
object Reset: TBitBtn
|
||||||
|
Left = 307
|
||||||
|
Top = 88
|
||||||
|
Width = 75
|
||||||
|
Height = 25
|
||||||
|
Caption = 'Re&set'
|
||||||
|
TabOrder = 4
|
||||||
|
OnClick = ResetClick
|
||||||
|
NumGlyphs = 2
|
||||||
|
end
|
||||||
|
object ApplyButton: TBitBtn
|
||||||
|
Left = 307
|
||||||
|
Top = 56
|
||||||
|
Width = 75
|
||||||
|
Height = 25
|
||||||
|
Caption = '&Apply'
|
||||||
|
Default = True
|
||||||
|
TabOrder = 3
|
||||||
|
OnClick = ApplyButtonClick
|
||||||
|
NumGlyphs = 2
|
||||||
|
end
|
||||||
|
end
|
170
components/orpheus/myovctbpe1.lrs
Normal file
@ -0,0 +1,170 @@
|
|||||||
|
LazarusResources.Add('TOvcfrmRowEditor','FORMDATA',[
|
||||||
|
'TPF0'#16'TOvcfrmRowEditor'#15'OvcfrmRowEditor'#4'Left'#3#131#1#3'Top'#3#10#1
|
||||||
|
+#11'BorderIcons'#11#12'biSystemMenu'#0#11'BorderStyle'#7#8'bsDialog'#7'Capti'
|
||||||
|
+'on'#6#11'Rows Editor'#12'ClientHeight'#3#24#1#6'Height'#3#24#1#11'ClientWid'
|
||||||
|
+'th'#3#145#1#5'Width'#3#145#1#5'Color'#7#9'clBtnFace'#12'Font.Charset'#7#15
|
||||||
|
+'DEFAULT_CHARSET'#10'Font.Color'#7#12'clWindowText'#11'Font.Height'#2#245#10
|
||||||
|
+'Font.Style'#11#0#8'Position'#7#14'poScreenCenter'#6'OnShow'#7#8'FormShow'#13
|
||||||
|
+'PixelsPerInch'#2'`'#10'TextHeight'#2#13#0#7'TBitBtn'#10'DoneButton'#4'Left'
|
||||||
|
+#3'3'#1#3'Top'#3#248#0#5'Width'#2'K'#6'Height'#2#25#7'Caption'#6#4'Done'#11
|
||||||
|
+'ModalResult'#2#1#8'TabOrder'#2#5#7'OnClick'#7#15'DoneButtonClick'#9'NumGlyp'
|
||||||
|
+'hs'#2#2#0#0#6'TPanel'#6'Panel1'#4'Left'#2#0#3'Top'#2#0#5'Width'#3#145#1#6'H'
|
||||||
|
+'eight'#2')'#5'Align'#7#5'alTop'#9'Alignment'#7#13'taLeftJustify'#10'BevelIn'
|
||||||
|
+'ner'#7#9'bvLowered'#8'TabOrder'#2#0#0#12'TSpeedButton'#12'SpeedButton1'#4'L'
|
||||||
|
+'eft'#2#8#3'Top'#2#8#5'Width'#2#25#6'Height'#2#25#4'Hint'#6#12'Previous row'
|
||||||
|
+#10'Glyph.Data'#10'z'#1#0#0'v'#1#0#0'BMv'#1#0#0#0#0#0#0'v'#0#0#0'('#0#0#0' '
|
||||||
|
+#0#0#0#16#0#0#0#1#0#4#0#0#0#0#0#0#1#0#0#0#0#0#0#0#0#0#0#16#0#0#0#16#0#0#0#0#0
|
||||||
|
+#0#0#0#0#128#0#0#128#0#0#0#128#128#0#128#0#0#0#128#0#128#0#128#128#0#0#192
|
||||||
|
+#192#192#0#128#128#128#0#0#0#255#0#0#255#0#0#0#255#255#0#255#0#0#0#255#0#255
|
||||||
|
+#0#255#255#0#0#255#255#255#0#187#187#187#187#187#187#187#187#187#187#187#187
|
||||||
|
+#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187
|
||||||
|
+#187#187#187#187#187#0#0#187#187#187#187#187#187'w{'#187#187#187#187#187#176
|
||||||
|
+#12#192#187#187#187#187#187#183'w{'#187#187#187#187#187#0#204#192#187#187#187
|
||||||
|
+#187#187'ww{'#187#187#187#187#176#12#204#192#187#187#187#187#183'ww{'#187#187
|
||||||
|
+#187#187#0#204#204#192#187#187#187#187'www{'#187#187#187#191#12#204#204#192
|
||||||
|
+#187#187#187#183'www{'#187#187#187#191#12#204#204#192#187#187#187#183'www{'
|
||||||
|
+#187#187#187#187#252#204#204#192#187#187#187#187'www{'#187#187#187#187#191
|
||||||
|
+#204#204#192#187#187#187#187#183'ww{'#187#187#187#187#187#252#204#192#187#187
|
||||||
|
+#187#187#187'ww{'#187#187#187#187#187#191#204#192#187#187#187#187#187#183'w{'
|
||||||
|
+#187#187#187#187#187#187#255#255#187#187#187#187#187#187'w{'#187#187#187#187
|
||||||
|
+#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187
|
||||||
|
+#187#187#187#187#187#187#187#187#187#187#187#9'NumGlyphs'#2#2#14'ParentShowH'
|
||||||
|
+'int'#8#8'ShowHint'#9#7'OnClick'#7#17'SpeedButton1Click'#0#0#12'TSpeedButton'
|
||||||
|
+#12'SpeedButton2'#4'Left'#2' '#3'Top'#2#8#5'Width'#2#25#6'Height'#2#25#4'Hin'
|
||||||
|
+'t'#6#8'Next row'#10'Glyph.Data'#10'z'#1#0#0'v'#1#0#0'BMv'#1#0#0#0#0#0#0'v'#0
|
||||||
|
+#0#0'('#0#0#0' '#0#0#0#16#0#0#0#1#0#4#0#0#0#0#0#0#1#0#0#0#0#0#0#0#0#0#0#16#0
|
||||||
|
+#0#0#16#0#0#0#0#0#0#0#0#0#128#0#0#128#0#0#0#128#128#0#128#0#0#0#128#0#128#0
|
||||||
|
+#128#128#0#0#192#192#192#0#128#128#128#0#0#0#255#0#0#255#0#0#0#255#255#0#255
|
||||||
|
+#0#0#0#255#0#255#0#255#255#0#0#255#255#255#0#187#187#187#187#187#187#187#187
|
||||||
|
+#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187
|
||||||
|
+#187#187#187#187#187#187#191#0#11#187#187#187#187#187#191#255#251#187#187#187
|
||||||
|
+#187#187#191#0#0#187#187#187#187#187#191#255#255#187#187#187#187#187#191#204
|
||||||
|
+#192#11#187#187#187#187#191#255#255#251#187#187#187#187#191#204#204#0#187#187
|
||||||
|
+#187#187#191#255#255#255#187#187#187#187#191#204#204#192#11#187#187#187#191
|
||||||
|
+#255#255#255#251#187#187#187#191#204#204#204#0#187#187#187#191#255#255#255
|
||||||
|
+#255#187#187#187#191#204#204#204#15#187#187#187#191#255#255#255#255#187#187
|
||||||
|
+#187#191#204#204#204#251#187#187#187#191#255#255#255#251#187#187#187#191#204
|
||||||
|
+#204#207#187#187#187#187#191#255#255#255#187#187#187#187#191#204#204#251#187
|
||||||
|
+#187#187#187#191#255#255#251#187#187#187#187#191#204#207#187#187#187#187#187
|
||||||
|
+#191#255#255#187#187#187#187#187#191#255#251#187#187#187#187#187#191#255#251
|
||||||
|
+#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187
|
||||||
|
+#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187#9'NumGl'
|
||||||
|
+'yphs'#2#2#14'ParentShowHint'#8#8'ShowHint'#9#7'OnClick'#7#17'SpeedButton2Cl'
|
||||||
|
+'ick'#0#0#12'TSpeedButton'#12'SpeedButton3'#4'Left'#2'H'#3'Top'#2#8#5'Width'
|
||||||
|
+#2#25#6'Height'#2#25#4'Hint'#6#9'First row'#10'Glyph.Data'#10'z'#1#0#0'v'#1#0
|
||||||
|
+#0'BMv'#1#0#0#0#0#0#0'v'#0#0#0'('#0#0#0' '#0#0#0#16#0#0#0#1#0#4#0#0#0#0#0#0#1
|
||||||
|
+#0#0#0#0#0#0#0#0#0#0#16#0#0#0#16#0#0#0#0#0#0#0#0#0#128#0#0#128#0#0#0#128#128
|
||||||
|
+#0#128#0#0#0#128#0#128#0#128#128#0#0#192#192#192#0#128#128#128#0#0#0#255#0#0
|
||||||
|
+#255#0#0#0#255#255#0#255#0#0#0#255#0#255#0#255#255#0#0#255#255#255#0#187#187
|
||||||
|
+#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187
|
||||||
|
+#187#187#187#187#187#187#187#187#187#187#187#187#0#187#187#187#0#187#187#187
|
||||||
|
+#255#187#187#187#255#187#187#187#0#187#187#176#0#187#187#187#255#187#187#191
|
||||||
|
+#255#187#187#187#0#187#187#0#192#187#187#187#255#187#187#255#255#187#187#187
|
||||||
|
+#0#187#176#12#192#187#187#187#255#187#191#255#255#187#187#187#0#187#0#204#192
|
||||||
|
+#187#187#187#255#187#255#255#255#187#187#187#0#176#12#204#192#187#187#187#255
|
||||||
|
+#191#255#255#255#187#187#187#0#191#204#204#192#187#187#187#255#191#255#255
|
||||||
|
,#255#187#187#187#0#187#252#204#192#187#187#187#255#187#255#255#255#187#187
|
||||||
|
+#187#0#187#191#204#192#187#187#187#255#187#191#255#255#187#187#187#0#187#187
|
||||||
|
+#252#192#187#187#187#255#187#187#255#255#187#187#187#0#187#187#191#192#187
|
||||||
|
+#187#187#255#187#187#191#255#187#187#187#0#187#187#187#255#187#187#187#255
|
||||||
|
+#187#187#187#255#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187
|
||||||
|
+#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187
|
||||||
|
+#9'NumGlyphs'#2#2#14'ParentShowHint'#8#8'ShowHint'#9#7'OnClick'#7#17'SpeedBu'
|
||||||
|
+'tton3Click'#0#0#12'TSpeedButton'#12'SpeedButton4'#4'Left'#2'`'#3'Top'#2#8#5
|
||||||
|
+'Width'#2#25#6'Height'#2#25#4'Hint'#6#8'Last row'#10'Glyph.Data'#10'z'#1#0#0
|
||||||
|
+'v'#1#0#0'BMv'#1#0#0#0#0#0#0'v'#0#0#0'('#0#0#0' '#0#0#0#16#0#0#0#1#0#4#0#0#0
|
||||||
|
+#0#0#0#1#0#0#0#0#0#0#0#0#0#0#16#0#0#0#16#0#0#0#0#0#0#0#0#0#128#0#0#128#0#0#0
|
||||||
|
+#128#128#0#128#0#0#0#128#0#128#0#128#128#0#0#192#192#192#0#128#128#128#0#0#0
|
||||||
|
+#255#0#0#255#0#0#0#255#255#0#255#0#0#0#255#0#255#0#255#255#0#0#255#255#255#0
|
||||||
|
+#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187
|
||||||
|
+#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187#0#187#187#187#0
|
||||||
|
+#187#187#187'w'#187#187#187'w'#187#187#187#0#11#187#187#0#187#187#187'w{'#187
|
||||||
|
+#187'w'#187#187#187#12#0#187#187#0#187#187#187'ww'#187#187'w'#187#187#187#12
|
||||||
|
+#192#11#187#0#187#187#187'ww{'#187'w'#187#187#187#12#204#0#187#0#187#187#187
|
||||||
|
+'www'#187'w'#187#187#187#12#204#192#11#0#187#187#187'www{w'#187#187#187#12
|
||||||
|
+#204#204#251#0#187#187#187'www{w'#187#187#187#12#204#207#187#0#187#187#187'w'
|
||||||
|
+'ww'#187'w'#187#187#187#12#204#251#187#0#187#187#187'ww{'#187'w'#187#187#187
|
||||||
|
+#12#207#187#187#0#187#187#187'ww'#187#187'w'#187#187#187#12#251#187#187#0#187
|
||||||
|
+#187#187'w{'#187#187'w'#187#187#187#255#187#187#187#0#187#187#187'w'#187#187
|
||||||
|
+#187'w'#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187
|
||||||
|
+#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187#9'NumGlyphs'
|
||||||
|
+#2#2#14'ParentShowHint'#8#8'ShowHint'#9#7'OnClick'#7#17'SpeedButton4Click'#0
|
||||||
|
+#0#12'TSpeedButton'#12'SpeedButton5'#4'Left'#3#136#0#3'Top'#2#8#5'Width'#2#25
|
||||||
|
+#6'Height'#2#25#4'Hint'#6#10'Insert row'#10'Glyph.Data'#10'z'#1#0#0'v'#1#0#0
|
||||||
|
+'BMv'#1#0#0#0#0#0#0'v'#0#0#0'('#0#0#0' '#0#0#0#16#0#0#0#1#0#4#0#0#0#0#0#0#1#0
|
||||||
|
+#0#0#0#0#0#0#0#0#0#16#0#0#0#16#0#0#0#0#0#0#0#0#0#128#0#0#128#0#0#0#128#128#0
|
||||||
|
+#128#0#0#0#128#0#128#0#128#128#0#0#192#192#192#0#128#128#128#0#0#0#255#0#0
|
||||||
|
+#255#0#0#0#255#255#0#255#0#0#0#255#0#255#0#255#255#0#0#255#255#255#0#187#187
|
||||||
|
+#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187#240#0
|
||||||
|
+#187#187#187#187#187#187#247'w'#187#187#187#187#187#187#252#192#187#187#187
|
||||||
|
+#187#187#187#251#183#187#187#187#187#187#187#252#192#187#187#187#187#187#187
|
||||||
|
+#251#183#187#187#187#187#187#187#252#192#187#187#187#187#187#187#251#183#187
|
||||||
|
+#187#187#187#187#187#252#192#187#187#187#187#187#187#251#183#187#187#187#176
|
||||||
|
+#0#0#12#192#0#0#11#183'ww{'#183'ww{'#191#204#204#204#204#204#204#11#191#187
|
||||||
|
+#187#187#187#187#187'{'#191#204#204#204#204#204#204#11#191#187#187#187#187
|
||||||
|
+#187#187'{'#191#255#255#252#192#255#255#251#191#255#255#251#183#255#255#251
|
||||||
|
+#187#187#187#252#192#187#187#187#187#187#187#251#183#187#187#187#187#187#187
|
||||||
|
+#252#192#187#187#187#187#187#187#251#183#187#187#187#187#187#187#252#192#187
|
||||||
|
+#187#187#187#187#187#251#183#187#187#187#187#187#187#252#192#187#187#187#187
|
||||||
|
+#187#187#251#183#187#187#187#187#187#187#255#240#187#187#187#187#187#187#255
|
||||||
|
+#247#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187
|
||||||
|
+#187#9'NumGlyphs'#2#2#14'ParentShowHint'#8#8'ShowHint'#9#7'OnClick'#7#17'Spe'
|
||||||
|
+'edButton5Click'#0#0#12'TSpeedButton'#12'SpeedButton6'#4'Left'#3#160#0#3'Top'
|
||||||
|
+#2#8#5'Width'#2#25#6'Height'#2#25#4'Hint'#6#10'Delete Row'#10'Glyph.Data'#10
|
||||||
|
+'z'#1#0#0'v'#1#0#0'BMv'#1#0#0#0#0#0#0'v'#0#0#0'('#0#0#0' '#0#0#0#16#0#0#0#1#0
|
||||||
|
+#4#0#0#0#0#0#0#1#0#0#0#0#0#0#0#0#0#0#16#0#0#0#16#0#0#0#0#0#0#0#0#0#128#0#0
|
||||||
|
+#128#0#0#0#128#128#0#128#0#0#0#128#0#128#0#128#128#0#0#192#192#192#0#128#128
|
||||||
|
+#128#0#0#0#255#0#0#255#0#0#0#255#255#0#255#0#0#0#255#0#255#0#255#255#0#0#255
|
||||||
|
+#255#255#0#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187
|
||||||
|
+#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187
|
||||||
|
+#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187
|
||||||
|
+#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187
|
||||||
|
+#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187
|
||||||
|
+#187#187#187#187#176#0#0#0#0#0#0#11#183'wwwwww{'#191#204#204#204#204#204#204
|
||||||
|
+#11#191#187#187#187#187#187#187'{'#191#204#204#204#204#204#204#11#191#187#187
|
||||||
|
+#187#187#187#187'{'#191#255#255#255#255#255#255#251#191#255#255#255#255#255
|
||||||
|
+#255#251#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187
|
||||||
|
+#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187
|
||||||
|
+#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187
|
||||||
|
+#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187
|
||||||
|
,#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187
|
||||||
|
+#187#187#187#9'NumGlyphs'#2#2#14'ParentShowHint'#8#8'ShowHint'#9#7'OnClick'#7
|
||||||
|
+#17'SpeedButton6Click'#0#0#6'TLabel'#6'Label1'#4'Left'#3#208#0#3'Top'#2#13#5
|
||||||
|
+'Width'#2'Y'#6'Height'#2#16#8'AutoSize'#8#7'Caption'#6#11'&Row number'#0#0#11
|
||||||
|
+'TOvcSpinner'#11'OvcSpinner1'#4'Left'#3'q'#1#3'Top'#2#12#5'Width'#2#16#6'Hei'
|
||||||
|
+'ght'#2#21#10'AutoRepeat'#9#5'Delta'#5#0#0#0#0#0#0#0#128#255'?'#14'FocusedCo'
|
||||||
|
+'ntrol'#7#12'ctlRowNumber'#0#0#5'TEdit'#12'ctlRowNumber'#4'Left'#3'('#1#3'To'
|
||||||
|
+'p'#2#12#5'Width'#2'I'#6'Height'#2#21#9'MaxLength'#2#8#8'TabOrder'#2#0#8'OnC'
|
||||||
|
+'hange'#7#18'ctlRowNumberChange'#6'OnExit'#7#16'ctlRowNumberExit'#0#0#0#9'TG'
|
||||||
|
+'roupBox'#9'GroupBox1'#4'Left'#2#8#3'Top'#2'0'#5'Width'#3#17#1#6'Height'#2'q'
|
||||||
|
+#7'Caption'#6#20'Selected row details'#8'TabOrder'#2#1#0#9'TCheckBox'#9'ctlH'
|
||||||
|
+'idden'#4'Left'#2#16#3'Top'#2#8#5'Width'#2'Y'#6'Height'#2#17#7'Caption'#6#7
|
||||||
|
+'Hidde&n'#8'TabOrder'#2#0#0#0#12'TRadioButton'#15'ctlUseDefHeight'#4'Left'#2
|
||||||
|
+#16#3'Top'#2'('#5'Width'#3#145#0#6'Height'#2#25#7'Caption'#6#19'Use &default'
|
||||||
|
+' height'#8'TabOrder'#2#1#7'TabStop'#9#7'OnClick'#7#20'ctlUseDefHeightClick'
|
||||||
|
+#0#0#12'TRadioButton'#16'ctlUseCustHeight'#4'Left'#2#16#3'Top'#2'@'#5'Width'
|
||||||
|
+#3#145#0#6'Height'#2#25#7'Caption'#6#18'Use &custom height'#8'TabOrder'#2#2#7
|
||||||
|
+'OnClick'#7#21'ctlUseCustHeightClick'#0#0#11'TOvcSpinner'#11'OvcSpinner2'#4
|
||||||
|
+'Left'#3#217#0#3'Top'#2'C'#5'Width'#2#16#6'Height'#2#21#10'AutoRepeat'#9#5'D'
|
||||||
|
+'elta'#5#0#0#0#0#0#0#0#128#255'?'#14'FocusedControl'#7#9'ctlHeight'#0#0#5'TE'
|
||||||
|
+'dit'#9'ctlHeight'#4'Left'#3#168#0#3'Top'#2'D'#5'Width'#2'1'#6'Height'#2#21#9
|
||||||
|
+'MaxLength'#2#5#8'TabOrder'#2#3#0#0#0#9'TGroupBox'#9'GroupBox2'#4'Left'#2#8#3
|
||||||
|
+'Top'#3#168#0#5'Width'#3#17#1#6'Height'#2'i'#7'Caption'#6#19'Overall row det'
|
||||||
|
+'ails'#8'TabOrder'#2#2#0#6'TLabel'#6'Label2'#4'Left'#2#16#3'Top'#2#17#5'Widt'
|
||||||
|
+'h'#2'y'#6'Height'#2#16#8'AutoSize'#8#7'Caption'#6#19'De&fault row height'#0
|
||||||
|
+#0#6'TLabel'#6'Label3'#4'Left'#2#16#3'Top'#2'5'#5'Width'#2'y'#6'Height'#2#16
|
||||||
|
+#8'AutoSize'#8#7'Caption'#6#13'Ma&ximum rows'#0#0#11'TOvcSpinner'#11'OvcSpin'
|
||||||
|
+'ner3'#4'Left'#3#193#0#3'Top'#2#17#5'Width'#2#16#6'Height'#2#21#10'AutoRepea'
|
||||||
|
+'t'#9#5'Delta'#5#0#0#0#0#0#0#0#128#255'?'#14'FocusedControl'#7#16'ctlDefault'
|
||||||
|
+'Height'#0#0#11'TOvcSpinner'#11'OvcSpinner4'#4'Left'#3#217#0#3'Top'#2'5'#5'W'
|
||||||
|
+'idth'#2#16#6'Height'#2#21#10'AutoRepeat'#9#5'Delta'#5#0#0#0#0#0#0#0#128#255
|
||||||
|
+'?'#14'FocusedControl'#7#11'ctlRowLimit'#0#0#5'TEdit'#11'ctlRowLimit'#4'Left'
|
||||||
|
+#3#144#0#3'Top'#2'4'#5'Width'#2'I'#6'Height'#2#21#8'TabOrder'#2#1#0#0#5'TEdi'
|
||||||
|
+'t'#16'ctlDefaultHeight'#4'Left'#3#144#0#3'Top'#2#17#5'Width'#2'1'#6'Height'
|
||||||
|
+#2#21#9'MaxLength'#2#5#8'TabOrder'#2#0#0#0#0#7'TBitBtn'#5'Reset'#4'Left'#3'3'
|
||||||
|
+#1#3'Top'#2'X'#5'Width'#2'K'#6'Height'#2#25#7'Caption'#6#6'Re&set'#8'TabOrde'
|
||||||
|
+'r'#2#4#7'OnClick'#7#10'ResetClick'#9'NumGlyphs'#2#2#0#0#7'TBitBtn'#11'Apply'
|
||||||
|
+'Button'#4'Left'#3'3'#1#3'Top'#2'8'#5'Width'#2'K'#6'Height'#2#25#7'Caption'#6
|
||||||
|
+#6'&Apply'#7'Default'#9#8'TabOrder'#2#3#7'OnClick'#7#16'ApplyButtonClick'#9
|
||||||
|
+'NumGlyphs'#2#2#0#0#0
|
||||||
|
]);
|
342
components/orpheus/myovctbpe1.pas
Normal file
@ -0,0 +1,342 @@
|
|||||||
|
{*********************************************************}
|
||||||
|
{* myovctbpe1.pas *}
|
||||||
|
{*********************************************************}
|
||||||
|
|
||||||
|
{* ***** BEGIN LICENSE BLOCK ***** *}
|
||||||
|
{* Version: MPL 1.1 *}
|
||||||
|
{* *}
|
||||||
|
{* The contents of this file are subject to the Mozilla Public License *}
|
||||||
|
{* Version 1.1 (the "License"); you may not use this file except in *}
|
||||||
|
{* compliance with the License. You may obtain a copy of the License at *}
|
||||||
|
{* http://www.mozilla.org/MPL/ *}
|
||||||
|
{* *}
|
||||||
|
{* Software distributed under the License is distributed on an "AS IS" basis, *}
|
||||||
|
{* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License *}
|
||||||
|
{* for the specific language governing rights and limitations under the *}
|
||||||
|
{* License. *}
|
||||||
|
{* *}
|
||||||
|
{* The Original Code is TurboPower Orpheus *}
|
||||||
|
{* *}
|
||||||
|
{* The Initial Developer of the Original Code is TurboPower Software *}
|
||||||
|
{* *}
|
||||||
|
{* Portions created by TurboPower Software Inc. are Copyright (C)1995-2002 *}
|
||||||
|
{* TurboPower Software Inc. All Rights Reserved. *}
|
||||||
|
{* *}
|
||||||
|
{* Contributor(s): *}
|
||||||
|
{* *}
|
||||||
|
{* Phil Hess - adapted ovctbpe1.pas to eliminate TOvcSimpleField. *}
|
||||||
|
{* *}
|
||||||
|
{* ***** END LICENSE BLOCK ***** *}
|
||||||
|
|
||||||
|
{$I OVC.INC}
|
||||||
|
|
||||||
|
{$B-} {Complete Boolean Evaluation}
|
||||||
|
{$I+} {Input/Output-Checking}
|
||||||
|
{$P+} {Open Parameters}
|
||||||
|
{$T-} {Typed @ Operator}
|
||||||
|
{.W-} {Windows Stack Frame}
|
||||||
|
{$X+} {Extended Syntax}
|
||||||
|
|
||||||
|
unit MyOvcTbPE1;
|
||||||
|
{Lazarus-specific Rows property editor for the table component.}
|
||||||
|
|
||||||
|
interface
|
||||||
|
|
||||||
|
uses
|
||||||
|
{$IFNDEF LCL} Windows, Messages, {$ELSE} LclIntf, LMessages, LclType, LResources, {$ENDIF}
|
||||||
|
Classes, Graphics, Controls,
|
||||||
|
{$IFNDEF LCL} {$IFDEF VERSION6} DesignIntf, DesignEditors, {$ELSE} DsgnIntf, {$ENDIF} {$ELSE} PropEdits, {$ENDIF}
|
||||||
|
SysUtils, Forms, Dialogs, StdCtrls, Buttons, ExtCtrls,
|
||||||
|
OvcBase, OvcTCmmn, OvcTable, OvcTbRws, OvcSc;
|
||||||
|
|
||||||
|
type
|
||||||
|
TOvcfrmRowEditor = class(TForm)
|
||||||
|
ctlHidden: TCheckBox;
|
||||||
|
ctlUseDefHeight: TRadioButton;
|
||||||
|
ctlUseCustHeight: TRadioButton;
|
||||||
|
DoneButton: TBitBtn;
|
||||||
|
Panel1: TPanel;
|
||||||
|
SpeedButton1: TSpeedButton;
|
||||||
|
SpeedButton2: TSpeedButton;
|
||||||
|
SpeedButton3: TSpeedButton;
|
||||||
|
SpeedButton4: TSpeedButton;
|
||||||
|
SpeedButton5: TSpeedButton;
|
||||||
|
SpeedButton6: TSpeedButton;
|
||||||
|
Label1: TLabel;
|
||||||
|
GroupBox1: TGroupBox;
|
||||||
|
GroupBox2: TGroupBox;
|
||||||
|
Label2: TLabel;
|
||||||
|
Label3: TLabel;
|
||||||
|
Reset: TBitBtn;
|
||||||
|
ctlHeight: TEdit;
|
||||||
|
ctlDefaultHeight: TEdit;
|
||||||
|
ctlRowLimit: TEdit;
|
||||||
|
ctlRowNumber: TEdit;
|
||||||
|
ApplyButton: TBitBtn;
|
||||||
|
OvcSpinner1: TOvcSpinner;
|
||||||
|
OvcSpinner2: TOvcSpinner;
|
||||||
|
OvcSpinner3: TOvcSpinner;
|
||||||
|
OvcSpinner4: TOvcSpinner;
|
||||||
|
procedure ctlUseDefHeightClick(Sender: TObject);
|
||||||
|
procedure ctlUseCustHeightClick(Sender: TObject);
|
||||||
|
procedure SpeedButton1Click(Sender: TObject);
|
||||||
|
procedure SpeedButton2Click(Sender: TObject);
|
||||||
|
procedure SpeedButton3Click(Sender: TObject);
|
||||||
|
procedure SpeedButton4Click(Sender: TObject);
|
||||||
|
procedure SpeedButton5Click(Sender: TObject);
|
||||||
|
procedure SpeedButton6Click(Sender: TObject);
|
||||||
|
procedure ctlRowNumberExit(Sender: TObject);
|
||||||
|
procedure FormShow(Sender: TObject);
|
||||||
|
procedure ResetClick(Sender: TObject);
|
||||||
|
procedure ApplyButtonClick(Sender: TObject);
|
||||||
|
procedure DoneButtonClick(Sender: TObject);
|
||||||
|
procedure ctlRowNumberChange(Sender: TObject);
|
||||||
|
private
|
||||||
|
{ Private declarations }
|
||||||
|
FRows : TOvcTableRows;
|
||||||
|
FRowNum : TRowNum;
|
||||||
|
CurDefHt : boolean;
|
||||||
|
|
||||||
|
protected
|
||||||
|
procedure RefreshRowData;
|
||||||
|
procedure SetRowNum(R : TRowNum);
|
||||||
|
|
||||||
|
public
|
||||||
|
{ Public declarations }
|
||||||
|
procedure SetRows(RS : TOvcTableRows);
|
||||||
|
|
||||||
|
property Rows : TOvcTableRows
|
||||||
|
read FRows
|
||||||
|
write SetRows;
|
||||||
|
|
||||||
|
property RowNum : TRowNum
|
||||||
|
read FRowNum
|
||||||
|
write SetRowNum;
|
||||||
|
|
||||||
|
end;
|
||||||
|
|
||||||
|
{-A table row property editor}
|
||||||
|
TOvcTableRowProperty = class(TClassProperty)
|
||||||
|
public
|
||||||
|
procedure Edit; override;
|
||||||
|
function GetAttributes: TPropertyAttributes; override;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
implementation
|
||||||
|
|
||||||
|
{$IFNDEF LCL}
|
||||||
|
{$R *.DFM}
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
{===TOvcTableRowProperty=============================================}
|
||||||
|
procedure TOvcTableRowProperty.Edit;
|
||||||
|
var
|
||||||
|
RowEditor : TOvcfrmRowEditor;
|
||||||
|
begin
|
||||||
|
RowEditor := TOvcfrmRowEditor.Create(Application);
|
||||||
|
try
|
||||||
|
RowEditor.SetRows(TOvcTableRows(GetOrdValue));
|
||||||
|
RowEditor.ShowModal;
|
||||||
|
{$IFNDEF LCL}
|
||||||
|
Designer.Modified;
|
||||||
|
{$ELSE}
|
||||||
|
Modified;
|
||||||
|
{$ENDIF}
|
||||||
|
finally
|
||||||
|
RowEditor.Free;
|
||||||
|
end;{try..finally}
|
||||||
|
end;
|
||||||
|
{--------}
|
||||||
|
function TOvcTableRowProperty.GetAttributes: TPropertyAttributes;
|
||||||
|
begin
|
||||||
|
Result := [paMultiSelect, paDialog, paReadOnly];
|
||||||
|
end;
|
||||||
|
{====================================================================}
|
||||||
|
|
||||||
|
|
||||||
|
{===TRowEditor=======================================================}
|
||||||
|
procedure TOvcfrmRowEditor.ApplyButtonClick(Sender: TObject);
|
||||||
|
var
|
||||||
|
NewRowLimit : Integer;
|
||||||
|
NewDefHeight : Integer;
|
||||||
|
NewHeight : Integer;
|
||||||
|
RS : TRowStyle;
|
||||||
|
begin
|
||||||
|
NewRowLimit := StrToIntDef(ctlRowLimit.Text, FRows.Limit);
|
||||||
|
if (NewRowLimit < 1) or (NewRowLimit > MaxInt) then {Out of range?}
|
||||||
|
NewRowLimit := FRows.Limit; {Restore previous row limit}
|
||||||
|
FRows.Limit := NewRowLimit;
|
||||||
|
ctlRowLimit.Text := IntToStr(NewRowLimit);
|
||||||
|
if FRowNum >= FRows.Limit then
|
||||||
|
RowNum := pred(FRows.Limit);
|
||||||
|
|
||||||
|
NewDefHeight := StrToIntDef(ctlDefaultHeight.Text, FRows.DefaultHeight);
|
||||||
|
if (NewDefHeight < 5) or (NewDefHeight > 32767) then {Out of range?}
|
||||||
|
NewDefHeight := FRows.DefaultHeight; {Restore previous default height}
|
||||||
|
FRows.DefaultHeight := NewDefHeight;
|
||||||
|
ctlDefaultHeight.Text := IntToStr(NewDefHeight);
|
||||||
|
|
||||||
|
with RS do
|
||||||
|
begin
|
||||||
|
if ctlUseDefHeight.Checked then
|
||||||
|
Height := StrToIntDef(ctlDefaultHeight.Text, Height)
|
||||||
|
else
|
||||||
|
begin
|
||||||
|
NewHeight := StrToIntDef(ctlHeight.Text, Height);
|
||||||
|
if (NewHeight < 5) or (NewHeight > 32767) then {Out of range?}
|
||||||
|
NewHeight := Height; {Restore previous row height}
|
||||||
|
Height := NewHeight;
|
||||||
|
ctlHeight.Text := IntToStr(NewHeight);
|
||||||
|
if (Height = FRows.DefaultHeight) then
|
||||||
|
ctlUseDefHeight.Checked := true;
|
||||||
|
end;
|
||||||
|
Hidden := ctlHidden.Checked;
|
||||||
|
FRows[RowNum] := RS;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
{--------}
|
||||||
|
procedure TOvcfrmRowEditor.ctlRowNumberExit(Sender: TObject);
|
||||||
|
begin
|
||||||
|
RowNum := StrToInt(ctlRowNumber.Text);
|
||||||
|
end;
|
||||||
|
{--------}
|
||||||
|
procedure TOvcfrmRowEditor.ctlUseCustHeightClick(Sender: TObject);
|
||||||
|
begin
|
||||||
|
CurDefHt := false;
|
||||||
|
ctlHeight.Enabled := true;
|
||||||
|
end;
|
||||||
|
{--------}
|
||||||
|
procedure TOvcfrmRowEditor.ctlUseDefHeightClick(Sender: TObject);
|
||||||
|
begin
|
||||||
|
CurDefHt := true;
|
||||||
|
ctlHeight.Text := IntToStr(FRows.DefaultHeight);
|
||||||
|
ctlHeight.Enabled := false;
|
||||||
|
end;
|
||||||
|
{--------}
|
||||||
|
procedure TOvcfrmRowEditor.FormShow(Sender: TObject);
|
||||||
|
begin
|
||||||
|
ctlDefaultHeight.Text := IntToStr(FRows.DefaultHeight);
|
||||||
|
ctlRowLimit.Text := IntToStr(FRows.Limit);
|
||||||
|
RefreshRowData;
|
||||||
|
end;
|
||||||
|
{--------}
|
||||||
|
procedure TOvcfrmRowEditor.RefreshRowData;
|
||||||
|
begin
|
||||||
|
CurDefHt := FRows.Height[RowNum] = FRows.DefaultHeight;
|
||||||
|
|
||||||
|
ctlHidden.Checked := FRows.Hidden[RowNum];
|
||||||
|
ctlHeight.Text := IntToStr(FRows.Height[RowNum]);
|
||||||
|
if CurDefHt then
|
||||||
|
begin
|
||||||
|
ctlUseDefHeight.Checked := true;
|
||||||
|
ctlHeight.Enabled := false;
|
||||||
|
end
|
||||||
|
else
|
||||||
|
begin
|
||||||
|
ctlUseCustHeight.Checked := true;
|
||||||
|
ctlHeight.Enabled := true;
|
||||||
|
end;
|
||||||
|
|
||||||
|
ctlRowLimit.Text := IntToStr(FRows.Limit);
|
||||||
|
end;
|
||||||
|
{--------}
|
||||||
|
procedure TOvcfrmRowEditor.ResetClick(Sender: TObject);
|
||||||
|
begin
|
||||||
|
FRows.Clear;
|
||||||
|
ctlDefaultHeight.Text := IntToStr(FRows.DefaultHeight);
|
||||||
|
RefreshRowData;
|
||||||
|
end;
|
||||||
|
{--------}
|
||||||
|
procedure TOvcfrmRowEditor.SetRowNum(R : TRowNum);
|
||||||
|
begin
|
||||||
|
if (FRowNum <> R) then
|
||||||
|
begin
|
||||||
|
FRowNum := R;
|
||||||
|
RefreshRowData;
|
||||||
|
ctlRowNumber.Text := IntToStr(R); //Do this after refresh
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
{--------}
|
||||||
|
procedure TOvcfrmRowEditor.SetRows(RS : TOvcTableRows);
|
||||||
|
begin
|
||||||
|
if Assigned(FRows) then
|
||||||
|
FRows.Free;
|
||||||
|
FRows := RS;
|
||||||
|
FRowNum := 0;
|
||||||
|
ctlRowNumber.Text := '0';
|
||||||
|
CurDefHt := FRows.Height[RowNum] = FRows.DefaultHeight;
|
||||||
|
end;
|
||||||
|
{--------}
|
||||||
|
procedure TOvcfrmRowEditor.SpeedButton1Click(Sender: TObject);
|
||||||
|
begin
|
||||||
|
ApplyButtonClick(Self);
|
||||||
|
if (RowNum > 0) then
|
||||||
|
RowNum := RowNum - 1;
|
||||||
|
end;
|
||||||
|
{--------}
|
||||||
|
procedure TOvcfrmRowEditor.SpeedButton2Click(Sender: TObject);
|
||||||
|
begin
|
||||||
|
ApplyButtonClick(Self);
|
||||||
|
if (RowNum < pred(FRows.Limit)) then
|
||||||
|
RowNum := RowNum + 1;
|
||||||
|
end;
|
||||||
|
{--------}
|
||||||
|
procedure TOvcfrmRowEditor.SpeedButton3Click(Sender: TObject);
|
||||||
|
begin
|
||||||
|
ApplyButtonClick(Self);
|
||||||
|
RowNum := 0;
|
||||||
|
end;
|
||||||
|
{--------}
|
||||||
|
procedure TOvcfrmRowEditor.SpeedButton4Click(Sender: TObject);
|
||||||
|
begin
|
||||||
|
ApplyButtonClick(Self);
|
||||||
|
RowNum := pred(FRows.Limit);
|
||||||
|
end;
|
||||||
|
{--------}
|
||||||
|
procedure TOvcfrmRowEditor.SpeedButton5Click(Sender: TObject);
|
||||||
|
var
|
||||||
|
RS : TRowStyle;
|
||||||
|
begin
|
||||||
|
RS.Hidden := false;
|
||||||
|
RS.Height := FRows.DefaultHeight;
|
||||||
|
FRows.Insert(FRowNum, RS);
|
||||||
|
RefreshRowData;
|
||||||
|
end;
|
||||||
|
{--------}
|
||||||
|
procedure TOvcfrmRowEditor.SpeedButton6Click(Sender: TObject);
|
||||||
|
begin
|
||||||
|
FRows.Delete(FRowNum);
|
||||||
|
RefreshRowData;
|
||||||
|
end;
|
||||||
|
{====================================================================}
|
||||||
|
|
||||||
|
procedure TOvcfrmRowEditor.DoneButtonClick(Sender: TObject);
|
||||||
|
begin
|
||||||
|
ApplyButtonClick(Self);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TOvcfrmRowEditor.ctlRowNumberChange(Sender: TObject);
|
||||||
|
var
|
||||||
|
NewRowNum : Integer;
|
||||||
|
begin
|
||||||
|
ApplyButtonClick(Self);
|
||||||
|
if not TryStrToInt(ctlRowNumber.Text, NewRowNum) then {Invalid?}
|
||||||
|
ctlRowNumber.Text := IntToStr(RowNum) {Restore previous row number}
|
||||||
|
else if NewRowNum = -1 then {Wrap around to last row?}
|
||||||
|
ctlRowNumber.Text := IntToStr(Pred(FRows.Limit))
|
||||||
|
else if NewRowNum = FRows.Limit then {Wrap around to first row?}
|
||||||
|
ctlRowNumber.Text := '0'
|
||||||
|
else if not (NewRowNum in [0..Pred(FRows.Limit)]) then {Out of range?}
|
||||||
|
ctlRowNumber.Text := IntToStr(RowNum); {Restore previous row number}
|
||||||
|
RowNum := StrToInt(ctlRowNumber.Text);
|
||||||
|
end;
|
||||||
|
|
||||||
|
initialization
|
||||||
|
{$IFDEF LCL}
|
||||||
|
{$I myovctbpe1.lrs} {Include form's resource file}
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
end.
|
290
components/orpheus/myovctbpe2.lfm
Normal file
@ -0,0 +1,290 @@
|
|||||||
|
object OvcfrmColEditor: TOvcfrmColEditor
|
||||||
|
Left = 353
|
||||||
|
Top = 207
|
||||||
|
BorderIcons = [biSystemMenu]
|
||||||
|
BorderStyle = bsDialog
|
||||||
|
Caption = 'Columns Editor'
|
||||||
|
ClientHeight = 190
|
||||||
|
Height = 190
|
||||||
|
ClientWidth = 386
|
||||||
|
Width = 386
|
||||||
|
Color = clBtnFace
|
||||||
|
Font.Charset = DEFAULT_CHARSET
|
||||||
|
Font.Color = clWindowText
|
||||||
|
Font.Height = -11
|
||||||
|
Font.Style = []
|
||||||
|
Position = poScreenCenter
|
||||||
|
OnShow = FormShow
|
||||||
|
PixelsPerInch = 96
|
||||||
|
TextHeight = 13
|
||||||
|
object Panel1: TPanel
|
||||||
|
Left = 0
|
||||||
|
Top = 0
|
||||||
|
Width = 386
|
||||||
|
Height = 41
|
||||||
|
Align = alTop
|
||||||
|
Alignment = taLeftJustify
|
||||||
|
BevelInner = bvLowered
|
||||||
|
TabOrder = 0
|
||||||
|
object SpeedButton1: TSpeedButton
|
||||||
|
Left = 8
|
||||||
|
Top = 8
|
||||||
|
Width = 25
|
||||||
|
Height = 25
|
||||||
|
Hint = 'Previous column'
|
||||||
|
Glyph.Data = {
|
||||||
|
76010000424D7601000000000000760000002800000020000000100000000100
|
||||||
|
0400000000000001000000000000000000001000000010000000000000000000
|
||||||
|
80000080000000808000800000008000800080800000C0C0C000808080000000
|
||||||
|
FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00BBBBBBBBBBBB
|
||||||
|
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB0000
|
||||||
|
BBBBBBBBBBBB777BBBBBBBBBBBB00CC0BBBBBBBBBBB7777BBBBBBBBBBB00CCC0
|
||||||
|
BBBBBBBBBB77777BBBBBBBBBB00CCCC0BBBBBBBBB777777BBBBBBBBB00CCCCC0
|
||||||
|
BBBBBBBB7777777BBBBBBBBF0CCCCCC0BBBBBBB77777777BBBBBBBBF0CCCCCC0
|
||||||
|
BBBBBBB77777777BBBBBBBBBFCCCCCC0BBBBBBBB7777777BBBBBBBBBBFCCCCC0
|
||||||
|
BBBBBBBBB777777BBBBBBBBBBBFCCCC0BBBBBBBBBB77777BBBBBBBBBBBBFCCC0
|
||||||
|
BBBBBBBBBBB7777BBBBBBBBBBBBBFFFFBBBBBBBBBBBB777BBBBBBBBBBBBBBBBB
|
||||||
|
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB}
|
||||||
|
NumGlyphs = 2
|
||||||
|
ParentShowHint = False
|
||||||
|
ShowHint = True
|
||||||
|
OnClick = SpeedButton1Click
|
||||||
|
end
|
||||||
|
object SpeedButton2: TSpeedButton
|
||||||
|
Left = 32
|
||||||
|
Top = 8
|
||||||
|
Width = 25
|
||||||
|
Height = 25
|
||||||
|
Hint = 'Next column'
|
||||||
|
Glyph.Data = {
|
||||||
|
76010000424D7601000000000000760000002800000020000000100000000100
|
||||||
|
0400000000000001000000000000000000001000000010000000000000000000
|
||||||
|
80000080000000808000800000008000800080800000C0C0C000808080000000
|
||||||
|
FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00BBBBBBBBBBBB
|
||||||
|
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBF000BBBBB
|
||||||
|
BBBBBBBFFFFBBBBBBBBBBBBF0000BBBBBBBBBBBFFFFFBBBBBBBBBBBFCCC00BBB
|
||||||
|
BBBBBBBFFFFFFBBBBBBBBBBFCCCC00BBBBBBBBBFFFFFFFBBBBBBBBBFCCCCC00B
|
||||||
|
BBBBBBBFFFFFFFFBBBBBBBBFCCCCCC00BBBBBBBFFFFFFFFFBBBBBBBFCCCCCC0F
|
||||||
|
BBBBBBBFFFFFFFFFBBBBBBBFCCCCCCFBBBBBBBBFFFFFFFFBBBBBBBBFCCCCCFBB
|
||||||
|
BBBBBBBFFFFFFFBBBBBBBBBFCCCCFBBBBBBBBBBFFFFFFBBBBBBBBBBFCCCFBBBB
|
||||||
|
BBBBBBBFFFFFBBBBBBBBBBBFFFFBBBBBBBBBBBBFFFFBBBBBBBBBBBBBBBBBBBBB
|
||||||
|
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB}
|
||||||
|
NumGlyphs = 2
|
||||||
|
ParentShowHint = False
|
||||||
|
ShowHint = True
|
||||||
|
OnClick = SpeedButton2Click
|
||||||
|
end
|
||||||
|
object SpeedButton3: TSpeedButton
|
||||||
|
Left = 72
|
||||||
|
Top = 8
|
||||||
|
Width = 25
|
||||||
|
Height = 25
|
||||||
|
Hint = 'First column'
|
||||||
|
Glyph.Data = {
|
||||||
|
76010000424D7601000000000000760000002800000020000000100000000100
|
||||||
|
0400000000000001000000000000000000001000000010000000000000000000
|
||||||
|
80000080000000808000800000008000800080800000C0C0C000808080000000
|
||||||
|
FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00BBBBBBBBBBBB
|
||||||
|
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB00BBBBBB00
|
||||||
|
BBBBBBFFBBBBBBFFBBBBBB00BBBBB000BBBBBBFFBBBBBFFFBBBBBB00BBBB00C0
|
||||||
|
BBBBBBFFBBBBFFFFBBBBBB00BBB00CC0BBBBBBFFBBBFFFFFBBBBBB00BB00CCC0
|
||||||
|
BBBBBBFFBBFFFFFFBBBBBB00B00CCCC0BBBBBBFFBFFFFFFFBBBBBB00BFCCCCC0
|
||||||
|
BBBBBBFFBFFFFFFFBBBBBB00BBFCCCC0BBBBBBFFBBFFFFFFBBBBBB00BBBFCCC0
|
||||||
|
BBBBBBFFBBBFFFFFBBBBBB00BBBBFCC0BBBBBBFFBBBBFFFFBBBBBB00BBBBBFC0
|
||||||
|
BBBBBBFFBBBBBFFFBBBBBB00BBBBBBFFBBBBBBFFBBBBBBFFBBBBBBBBBBBBBBBB
|
||||||
|
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB}
|
||||||
|
NumGlyphs = 2
|
||||||
|
ParentShowHint = False
|
||||||
|
ShowHint = True
|
||||||
|
OnClick = SpeedButton3Click
|
||||||
|
end
|
||||||
|
object SpeedButton4: TSpeedButton
|
||||||
|
Left = 96
|
||||||
|
Top = 8
|
||||||
|
Width = 25
|
||||||
|
Height = 25
|
||||||
|
Hint = 'Last column'
|
||||||
|
Glyph.Data = {
|
||||||
|
76010000424D7601000000000000760000002800000020000000100000000100
|
||||||
|
0400000000000001000000000000000000001000000010000000000000000000
|
||||||
|
80000080000000808000800000008000800080800000C0C0C000808080000000
|
||||||
|
FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00BBBBBBBBBBBB
|
||||||
|
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB00BBBBBB
|
||||||
|
00BBBBBB77BBBBBB77BBBBBB000BBBBB00BBBBBB777BBBBB77BBBBBB0C00BBBB
|
||||||
|
00BBBBBB7777BBBB77BBBBBB0CC00BBB00BBBBBB77777BBB77BBBBBB0CCC00BB
|
||||||
|
00BBBBBB777777BB77BBBBBB0CCCC00B00BBBBBB7777777B77BBBBBB0CCCCCFB
|
||||||
|
00BBBBBB7777777B77BBBBBB0CCCCFBB00BBBBBB777777BB77BBBBBB0CCCFBBB
|
||||||
|
00BBBBBB77777BBB77BBBBBB0CCFBBBB00BBBBBB7777BBBB77BBBBBB0CFBBBBB
|
||||||
|
00BBBBBB777BBBBB77BBBBBBFFBBBBBB00BBBBBB77BBBBBB77BBBBBBBBBBBBBB
|
||||||
|
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB}
|
||||||
|
NumGlyphs = 2
|
||||||
|
ParentShowHint = False
|
||||||
|
ShowHint = True
|
||||||
|
OnClick = SpeedButton4Click
|
||||||
|
end
|
||||||
|
object SpeedButton5: TSpeedButton
|
||||||
|
Left = 136
|
||||||
|
Top = 8
|
||||||
|
Width = 25
|
||||||
|
Height = 25
|
||||||
|
Hint = 'Insert column'
|
||||||
|
Glyph.Data = {
|
||||||
|
76010000424D7601000000000000760000002800000020000000100000000100
|
||||||
|
0400000000000001000000000000000000001000000010000000000000000000
|
||||||
|
80000080000000808000800000008000800080800000C0C0C000808080000000
|
||||||
|
FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00BBBBBBBBBBBB
|
||||||
|
BBBBBBBBBBBBBBBBBBBBBBBBBBF000BBBBBBBBBBBBF777BBBBBBBBBBBBFCC0BB
|
||||||
|
BBBBBBBBBBFBB7BBBBBBBBBBBBFCC0BBBBBBBBBBBBFBB7BBBBBBBBBBBBFCC0BB
|
||||||
|
BBBBBBBBBBFBB7BBBBBBBBBBBBFCC0BBBBBBBBBBBBFBB7BBBBBBB000000CC000
|
||||||
|
000BB777777BB777777BBFCCCCCCCCCCCC0BBFBBBBBBBBBBBB7BBFCCCCCCCCCC
|
||||||
|
CC0BBFBBBBBBBBBBBB7BBFFFFFFCC0FFFFFBBFFFFFFBB7FFFFFBBBBBBBFCC0BB
|
||||||
|
BBBBBBBBBBFBB7BBBBBBBBBBBBFCC0BBBBBBBBBBBBFBB7BBBBBBBBBBBBFCC0BB
|
||||||
|
BBBBBBBBBBFBB7BBBBBBBBBBBBFCC0BBBBBBBBBBBBFBB7BBBBBBBBBBBBFFF0BB
|
||||||
|
BBBBBBBBBBFFF7BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB}
|
||||||
|
NumGlyphs = 2
|
||||||
|
ParentShowHint = False
|
||||||
|
ShowHint = True
|
||||||
|
OnClick = SpeedButton5Click
|
||||||
|
end
|
||||||
|
object SpeedButton6: TSpeedButton
|
||||||
|
Left = 160
|
||||||
|
Top = 8
|
||||||
|
Width = 25
|
||||||
|
Height = 25
|
||||||
|
Hint = 'Delete column'
|
||||||
|
Glyph.Data = {
|
||||||
|
76010000424D7601000000000000760000002800000020000000100000000100
|
||||||
|
0400000000000001000000000000000000001000000010000000000000000000
|
||||||
|
80000080000000808000800000008000800080800000C0C0C000808080000000
|
||||||
|
FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00BBBBBBBBBBBB
|
||||||
|
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
|
||||||
|
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
|
||||||
|
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB00000000000
|
||||||
|
000BB77777777777777BBFCCCCCCCCCCCC0BBFBBBBBBBBBBBB7BBFCCCCCCCCCC
|
||||||
|
CC0BBFBBBBBBBBBBBB7BBFFFFFFFFFFFFFFBBFFFFFFFFFFFFFFBBBBBBBBBBBBB
|
||||||
|
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
|
||||||
|
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
|
||||||
|
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB}
|
||||||
|
NumGlyphs = 2
|
||||||
|
ParentShowHint = False
|
||||||
|
ShowHint = True
|
||||||
|
OnClick = SpeedButton6Click
|
||||||
|
end
|
||||||
|
object Label1: TLabel
|
||||||
|
Left = 200
|
||||||
|
Top = 12
|
||||||
|
Width = 105
|
||||||
|
Height = 16
|
||||||
|
AutoSize = False
|
||||||
|
Caption = 'Column &number'
|
||||||
|
end
|
||||||
|
object OvcSpinner2: TOvcSpinner
|
||||||
|
Left = 361
|
||||||
|
Top = 11
|
||||||
|
Width = 16
|
||||||
|
Height = 21
|
||||||
|
AutoRepeat = True
|
||||||
|
Delta = 1.000000000000000000
|
||||||
|
FocusedControl = ctlColNumber
|
||||||
|
end
|
||||||
|
object ctlColNumber: TEdit
|
||||||
|
Left = 312
|
||||||
|
Top = 11
|
||||||
|
Width = 49
|
||||||
|
Height = 21
|
||||||
|
MaxLength = 5
|
||||||
|
TabOrder = 0
|
||||||
|
OnChange = ctlColNumberChange
|
||||||
|
OnExit = ctlColNumberExit
|
||||||
|
end
|
||||||
|
end
|
||||||
|
object GroupBox1: TGroupBox
|
||||||
|
Left = 8
|
||||||
|
Top = 48
|
||||||
|
Width = 273
|
||||||
|
Height = 137
|
||||||
|
Caption = 'Column details'
|
||||||
|
TabOrder = 1
|
||||||
|
object Label2: TLabel
|
||||||
|
Left = 8
|
||||||
|
Top = 4
|
||||||
|
Width = 75
|
||||||
|
Height = 16
|
||||||
|
AutoSize = False
|
||||||
|
Caption = 'De&fault Cell'
|
||||||
|
FocusControl = ctlDefaultCell
|
||||||
|
end
|
||||||
|
object Label3: TLabel
|
||||||
|
Left = 8
|
||||||
|
Top = 92
|
||||||
|
Width = 75
|
||||||
|
Height = 16
|
||||||
|
AutoSize = False
|
||||||
|
Caption = '&Width'
|
||||||
|
end
|
||||||
|
object Label4: TLabel
|
||||||
|
Left = 8
|
||||||
|
Top = 56
|
||||||
|
Width = 34
|
||||||
|
Height = 13
|
||||||
|
Caption = '&Hidden'
|
||||||
|
FocusControl = ctlHidden
|
||||||
|
end
|
||||||
|
object ctlDefaultCell: TComboBox
|
||||||
|
Left = 8
|
||||||
|
Top = 24
|
||||||
|
Width = 257
|
||||||
|
Height = 21
|
||||||
|
Style = csDropDownList
|
||||||
|
DropDownCount = 16
|
||||||
|
ItemHeight = 13
|
||||||
|
TabOrder = 0
|
||||||
|
end
|
||||||
|
object ctlHidden: TCheckBox
|
||||||
|
Left = 96
|
||||||
|
Top = 56
|
||||||
|
Width = 17
|
||||||
|
Height = 17
|
||||||
|
TabOrder = 1
|
||||||
|
end
|
||||||
|
object OvcSpinner1: TOvcSpinner
|
||||||
|
Left = 145
|
||||||
|
Top = 90
|
||||||
|
Width = 16
|
||||||
|
Height = 21
|
||||||
|
AutoRepeat = True
|
||||||
|
Delta = 1.000000000000000000
|
||||||
|
FocusedControl = ctlWidth
|
||||||
|
end
|
||||||
|
object ctlWidth: TEdit
|
||||||
|
Left = 96
|
||||||
|
Top = 90
|
||||||
|
Width = 49
|
||||||
|
Height = 21
|
||||||
|
MaxLength = 5
|
||||||
|
TabOrder = 2
|
||||||
|
end
|
||||||
|
end
|
||||||
|
object DoneButton: TBitBtn
|
||||||
|
Left = 304
|
||||||
|
Top = 160
|
||||||
|
Width = 75
|
||||||
|
Height = 25
|
||||||
|
Caption = '&Done'
|
||||||
|
ModalResult = 1
|
||||||
|
TabOrder = 3
|
||||||
|
OnClick = DoneButtonClick
|
||||||
|
NumGlyphs = 2
|
||||||
|
end
|
||||||
|
object ApplyButton: TBitBtn
|
||||||
|
Left = 304
|
||||||
|
Top = 56
|
||||||
|
Width = 75
|
||||||
|
Height = 25
|
||||||
|
Caption = '&Apply'
|
||||||
|
Default = True
|
||||||
|
TabOrder = 2
|
||||||
|
OnClick = ApplyButtonClick
|
||||||
|
NumGlyphs = 2
|
||||||
|
end
|
||||||
|
end
|
157
components/orpheus/myovctbpe2.lrs
Normal file
@ -0,0 +1,157 @@
|
|||||||
|
LazarusResources.Add('TOvcfrmColEditor','FORMDATA',[
|
||||||
|
'TPF0'#16'TOvcfrmColEditor'#15'OvcfrmColEditor'#4'Left'#3'a'#1#3'Top'#3#207#0
|
||||||
|
+#11'BorderIcons'#11#12'biSystemMenu'#0#11'BorderStyle'#7#8'bsDialog'#7'Capti'
|
||||||
|
+'on'#6#14'Columns Editor'#12'ClientHeight'#3#190#0#6'Height'#3#190#0#11'Clie'
|
||||||
|
+'ntWidth'#3#130#1#5'Width'#3#130#1#5'Color'#7#9'clBtnFace'#12'Font.Charset'#7
|
||||||
|
+#15'DEFAULT_CHARSET'#10'Font.Color'#7#12'clWindowText'#11'Font.Height'#2#245
|
||||||
|
+#10'Font.Style'#11#0#8'Position'#7#14'poScreenCenter'#6'OnShow'#7#8'FormShow'
|
||||||
|
+#13'PixelsPerInch'#2'`'#10'TextHeight'#2#13#0#6'TPanel'#6'Panel1'#4'Left'#2#0
|
||||||
|
+#3'Top'#2#0#5'Width'#3#130#1#6'Height'#2')'#5'Align'#7#5'alTop'#9'Alignment'
|
||||||
|
+#7#13'taLeftJustify'#10'BevelInner'#7#9'bvLowered'#8'TabOrder'#2#0#0#12'TSpe'
|
||||||
|
+'edButton'#12'SpeedButton1'#4'Left'#2#8#3'Top'#2#8#5'Width'#2#25#6'Height'#2
|
||||||
|
+#25#4'Hint'#6#15'Previous column'#10'Glyph.Data'#10'z'#1#0#0'v'#1#0#0'BMv'#1
|
||||||
|
+#0#0#0#0#0#0'v'#0#0#0'('#0#0#0' '#0#0#0#16#0#0#0#1#0#4#0#0#0#0#0#0#1#0#0#0#0
|
||||||
|
+#0#0#0#0#0#0#16#0#0#0#16#0#0#0#0#0#0#0#0#0#128#0#0#128#0#0#0#128#128#0#128#0
|
||||||
|
+#0#0#128#0#128#0#128#128#0#0#192#192#192#0#128#128#128#0#0#0#255#0#0#255#0#0
|
||||||
|
+#0#255#255#0#255#0#0#0#255#0#255#0#255#255#0#0#255#255#255#0#187#187#187#187
|
||||||
|
+#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187
|
||||||
|
+#187#187#187#187#187#187#187#187#187#187#187#187#187#0#0#187#187#187#187#187
|
||||||
|
+#187'w{'#187#187#187#187#187#176#12#192#187#187#187#187#187#183'w{'#187#187
|
||||||
|
+#187#187#187#0#204#192#187#187#187#187#187'ww{'#187#187#187#187#176#12#204
|
||||||
|
+#192#187#187#187#187#183'ww{'#187#187#187#187#0#204#204#192#187#187#187#187
|
||||||
|
+'www{'#187#187#187#191#12#204#204#192#187#187#187#183'www{'#187#187#187#191
|
||||||
|
+#12#204#204#192#187#187#187#183'www{'#187#187#187#187#252#204#204#192#187#187
|
||||||
|
+#187#187'www{'#187#187#187#187#191#204#204#192#187#187#187#187#183'ww{'#187
|
||||||
|
+#187#187#187#187#252#204#192#187#187#187#187#187'ww{'#187#187#187#187#187#191
|
||||||
|
+#204#192#187#187#187#187#187#183'w{'#187#187#187#187#187#187#255#255#187#187
|
||||||
|
+#187#187#187#187'w{'#187#187#187#187#187#187#187#187#187#187#187#187#187#187
|
||||||
|
+#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187
|
||||||
|
+#187#9'NumGlyphs'#2#2#14'ParentShowHint'#8#8'ShowHint'#9#7'OnClick'#7#17'Spe'
|
||||||
|
+'edButton1Click'#0#0#12'TSpeedButton'#12'SpeedButton2'#4'Left'#2' '#3'Top'#2
|
||||||
|
+#8#5'Width'#2#25#6'Height'#2#25#4'Hint'#6#11'Next column'#10'Glyph.Data'#10
|
||||||
|
+'z'#1#0#0'v'#1#0#0'BMv'#1#0#0#0#0#0#0'v'#0#0#0'('#0#0#0' '#0#0#0#16#0#0#0#1#0
|
||||||
|
+#4#0#0#0#0#0#0#1#0#0#0#0#0#0#0#0#0#0#16#0#0#0#16#0#0#0#0#0#0#0#0#0#128#0#0
|
||||||
|
+#128#0#0#0#128#128#0#128#0#0#0#128#0#128#0#128#128#0#0#192#192#192#0#128#128
|
||||||
|
+#128#0#0#0#255#0#0#255#0#0#0#255#255#0#255#0#0#0#255#0#255#0#255#255#0#0#255
|
||||||
|
+#255#255#0#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187
|
||||||
|
+#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187#191#0#11
|
||||||
|
+#187#187#187#187#187#191#255#251#187#187#187#187#187#191#0#0#187#187#187#187
|
||||||
|
+#187#191#255#255#187#187#187#187#187#191#204#192#11#187#187#187#187#191#255
|
||||||
|
+#255#251#187#187#187#187#191#204#204#0#187#187#187#187#191#255#255#255#187
|
||||||
|
+#187#187#187#191#204#204#192#11#187#187#187#191#255#255#255#251#187#187#187
|
||||||
|
+#191#204#204#204#0#187#187#187#191#255#255#255#255#187#187#187#191#204#204
|
||||||
|
+#204#15#187#187#187#191#255#255#255#255#187#187#187#191#204#204#204#251#187
|
||||||
|
+#187#187#191#255#255#255#251#187#187#187#191#204#204#207#187#187#187#187#191
|
||||||
|
+#255#255#255#187#187#187#187#191#204#204#251#187#187#187#187#191#255#255#251
|
||||||
|
+#187#187#187#187#191#204#207#187#187#187#187#187#191#255#255#187#187#187#187
|
||||||
|
+#187#191#255#251#187#187#187#187#187#191#255#251#187#187#187#187#187#187#187
|
||||||
|
+#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187
|
||||||
|
+#187#187#187#187#187#187#187#187#187#187#9'NumGlyphs'#2#2#14'ParentShowHint'
|
||||||
|
+#8#8'ShowHint'#9#7'OnClick'#7#17'SpeedButton2Click'#0#0#12'TSpeedButton'#12
|
||||||
|
+'SpeedButton3'#4'Left'#2'H'#3'Top'#2#8#5'Width'#2#25#6'Height'#2#25#4'Hint'#6
|
||||||
|
+#12'First column'#10'Glyph.Data'#10'z'#1#0#0'v'#1#0#0'BMv'#1#0#0#0#0#0#0'v'#0
|
||||||
|
+#0#0'('#0#0#0' '#0#0#0#16#0#0#0#1#0#4#0#0#0#0#0#0#1#0#0#0#0#0#0#0#0#0#0#16#0
|
||||||
|
+#0#0#16#0#0#0#0#0#0#0#0#0#128#0#0#128#0#0#0#128#128#0#128#0#0#0#128#0#128#0
|
||||||
|
+#128#128#0#0#192#192#192#0#128#128#128#0#0#0#255#0#0#255#0#0#0#255#255#0#255
|
||||||
|
+#0#0#0#255#0#255#0#255#255#0#0#255#255#255#0#187#187#187#187#187#187#187#187
|
||||||
|
+#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187
|
||||||
|
+#187#187#187#187#187#187#0#187#187#187#0#187#187#187#255#187#187#187#255#187
|
||||||
|
+#187#187#0#187#187#176#0#187#187#187#255#187#187#191#255#187#187#187#0#187
|
||||||
|
+#187#0#192#187#187#187#255#187#187#255#255#187#187#187#0#187#176#12#192#187
|
||||||
|
+#187#187#255#187#191#255#255#187#187#187#0#187#0#204#192#187#187#187#255#187
|
||||||
|
+#255#255#255#187#187#187#0#176#12#204#192#187#187#187#255#191#255#255#255#187
|
||||||
|
+#187#187#0#191#204#204#192#187#187#187#255#191#255#255#255#187#187#187#0#187
|
||||||
|
+#252#204#192#187#187#187#255#187#255#255#255#187#187#187#0#187#191#204#192
|
||||||
|
+#187#187#187#255#187#191#255#255#187#187#187#0#187#187#252#192#187#187#187
|
||||||
|
,#255#187#187#255#255#187#187#187#0#187#187#191#192#187#187#187#255#187#187
|
||||||
|
+#191#255#187#187#187#0#187#187#187#255#187#187#187#255#187#187#187#255#187
|
||||||
|
+#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187
|
||||||
|
+#187#187#187#187#187#187#187#187#187#187#187#187#187#187#9'NumGlyphs'#2#2#14
|
||||||
|
+'ParentShowHint'#8#8'ShowHint'#9#7'OnClick'#7#17'SpeedButton3Click'#0#0#12'T'
|
||||||
|
+'SpeedButton'#12'SpeedButton4'#4'Left'#2'`'#3'Top'#2#8#5'Width'#2#25#6'Heigh'
|
||||||
|
+'t'#2#25#4'Hint'#6#11'Last column'#10'Glyph.Data'#10'z'#1#0#0'v'#1#0#0'BMv'#1
|
||||||
|
+#0#0#0#0#0#0'v'#0#0#0'('#0#0#0' '#0#0#0#16#0#0#0#1#0#4#0#0#0#0#0#0#1#0#0#0#0
|
||||||
|
+#0#0#0#0#0#0#16#0#0#0#16#0#0#0#0#0#0#0#0#0#128#0#0#128#0#0#0#128#128#0#128#0
|
||||||
|
+#0#0#128#0#128#0#128#128#0#0#192#192#192#0#128#128#128#0#0#0#255#0#0#255#0#0
|
||||||
|
+#0#255#255#0#255#0#0#0#255#0#255#0#255#255#0#0#255#255#255#0#187#187#187#187
|
||||||
|
+#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187
|
||||||
|
+#187#187#187#187#187#187#187#187#187#187#187#0#187#187#187#0#187#187#187'w'
|
||||||
|
+#187#187#187'w'#187#187#187#0#11#187#187#0#187#187#187'w{'#187#187'w'#187#187
|
||||||
|
+#187#12#0#187#187#0#187#187#187'ww'#187#187'w'#187#187#187#12#192#11#187#0
|
||||||
|
+#187#187#187'ww{'#187'w'#187#187#187#12#204#0#187#0#187#187#187'www'#187'w'
|
||||||
|
+#187#187#187#12#204#192#11#0#187#187#187'www{w'#187#187#187#12#204#204#251#0
|
||||||
|
+#187#187#187'www{w'#187#187#187#12#204#207#187#0#187#187#187'www'#187'w'#187
|
||||||
|
+#187#187#12#204#251#187#0#187#187#187'ww{'#187'w'#187#187#187#12#207#187#187
|
||||||
|
+#0#187#187#187'ww'#187#187'w'#187#187#187#12#251#187#187#0#187#187#187'w{'
|
||||||
|
+#187#187'w'#187#187#187#255#187#187#187#0#187#187#187'w'#187#187#187'w'#187
|
||||||
|
+#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187
|
||||||
|
+#187#187#187#187#187#187#187#187#187#187#187#187#187#9'NumGlyphs'#2#2#14'Par'
|
||||||
|
+'entShowHint'#8#8'ShowHint'#9#7'OnClick'#7#17'SpeedButton4Click'#0#0#12'TSpe'
|
||||||
|
+'edButton'#12'SpeedButton5'#4'Left'#3#136#0#3'Top'#2#8#5'Width'#2#25#6'Heigh'
|
||||||
|
+'t'#2#25#4'Hint'#6#13'Insert column'#10'Glyph.Data'#10'z'#1#0#0'v'#1#0#0'BMv'
|
||||||
|
+#1#0#0#0#0#0#0'v'#0#0#0'('#0#0#0' '#0#0#0#16#0#0#0#1#0#4#0#0#0#0#0#0#1#0#0#0
|
||||||
|
+#0#0#0#0#0#0#0#16#0#0#0#16#0#0#0#0#0#0#0#0#0#128#0#0#128#0#0#0#128#128#0#128
|
||||||
|
+#0#0#0#128#0#128#0#128#128#0#0#192#192#192#0#128#128#128#0#0#0#255#0#0#255#0
|
||||||
|
+#0#0#255#255#0#255#0#0#0#255#0#255#0#255#255#0#0#255#255#255#0#187#187#187
|
||||||
|
+#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187#240#0#187
|
||||||
|
+#187#187#187#187#187#247'w'#187#187#187#187#187#187#252#192#187#187#187#187
|
||||||
|
+#187#187#251#183#187#187#187#187#187#187#252#192#187#187#187#187#187#187#251
|
||||||
|
+#183#187#187#187#187#187#187#252#192#187#187#187#187#187#187#251#183#187#187
|
||||||
|
+#187#187#187#187#252#192#187#187#187#187#187#187#251#183#187#187#187#176#0#0
|
||||||
|
+#12#192#0#0#11#183'ww{'#183'ww{'#191#204#204#204#204#204#204#11#191#187#187
|
||||||
|
+#187#187#187#187'{'#191#204#204#204#204#204#204#11#191#187#187#187#187#187
|
||||||
|
+#187'{'#191#255#255#252#192#255#255#251#191#255#255#251#183#255#255#251#187
|
||||||
|
+#187#187#252#192#187#187#187#187#187#187#251#183#187#187#187#187#187#187#252
|
||||||
|
+#192#187#187#187#187#187#187#251#183#187#187#187#187#187#187#252#192#187#187
|
||||||
|
+#187#187#187#187#251#183#187#187#187#187#187#187#252#192#187#187#187#187#187
|
||||||
|
+#187#251#183#187#187#187#187#187#187#255#240#187#187#187#187#187#187#255#247
|
||||||
|
+#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187
|
||||||
|
+#9'NumGlyphs'#2#2#14'ParentShowHint'#8#8'ShowHint'#9#7'OnClick'#7#17'SpeedBu'
|
||||||
|
+'tton5Click'#0#0#12'TSpeedButton'#12'SpeedButton6'#4'Left'#3#160#0#3'Top'#2#8
|
||||||
|
+#5'Width'#2#25#6'Height'#2#25#4'Hint'#6#13'Delete column'#10'Glyph.Data'#10
|
||||||
|
+'z'#1#0#0'v'#1#0#0'BMv'#1#0#0#0#0#0#0'v'#0#0#0'('#0#0#0' '#0#0#0#16#0#0#0#1#0
|
||||||
|
+#4#0#0#0#0#0#0#1#0#0#0#0#0#0#0#0#0#0#16#0#0#0#16#0#0#0#0#0#0#0#0#0#128#0#0
|
||||||
|
+#128#0#0#0#128#128#0#128#0#0#0#128#0#128#0#128#128#0#0#192#192#192#0#128#128
|
||||||
|
+#128#0#0#0#255#0#0#255#0#0#0#255#255#0#255#0#0#0#255#0#255#0#255#255#0#0#255
|
||||||
|
+#255#255#0#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187
|
||||||
|
+#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187
|
||||||
|
+#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187
|
||||||
|
+#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187
|
||||||
|
+#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187
|
||||||
|
+#187#187#187#187#176#0#0#0#0#0#0#11#183'wwwwww{'#191#204#204#204#204#204#204
|
||||||
|
+#11#191#187#187#187#187#187#187'{'#191#204#204#204#204#204#204#11#191#187#187
|
||||||
|
+#187#187#187#187'{'#191#255#255#255#255#255#255#251#191#255#255#255#255#255
|
||||||
|
+#255#251#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187
|
||||||
|
+#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187
|
||||||
|
+#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187
|
||||||
|
+#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187
|
||||||
|
+#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187#187
|
||||||
|
+#187#187#187#9'NumGlyphs'#2#2#14'ParentShowHint'#8#8'ShowHint'#9#7'OnClick'#7
|
||||||
|
,#17'SpeedButton6Click'#0#0#6'TLabel'#6'Label1'#4'Left'#3#200#0#3'Top'#2#12#5
|
||||||
|
+'Width'#2'i'#6'Height'#2#16#8'AutoSize'#8#7'Caption'#6#14'Column &number'#0#0
|
||||||
|
+#11'TOvcSpinner'#11'OvcSpinner2'#4'Left'#3'i'#1#3'Top'#2#11#5'Width'#2#16#6
|
||||||
|
+'Height'#2#21#10'AutoRepeat'#9#5'Delta'#5#0#0#0#0#0#0#0#128#255'?'#14'Focuse'
|
||||||
|
+'dControl'#7#12'ctlColNumber'#0#0#5'TEdit'#12'ctlColNumber'#4'Left'#3'8'#1#3
|
||||||
|
+'Top'#2#11#5'Width'#2'1'#6'Height'#2#21#9'MaxLength'#2#5#8'TabOrder'#2#0#8'O'
|
||||||
|
+'nChange'#7#18'ctlColNumberChange'#6'OnExit'#7#16'ctlColNumberExit'#0#0#0#9
|
||||||
|
+'TGroupBox'#9'GroupBox1'#4'Left'#2#8#3'Top'#2'0'#5'Width'#3#17#1#6'Height'#3
|
||||||
|
+#137#0#7'Caption'#6#14'Column details'#8'TabOrder'#2#1#0#6'TLabel'#6'Label2'
|
||||||
|
+#4'Left'#2#8#3'Top'#2#4#5'Width'#2'K'#6'Height'#2#16#8'AutoSize'#8#7'Caption'
|
||||||
|
+#6#13'De&fault Cell'#12'FocusControl'#7#14'ctlDefaultCell'#0#0#6'TLabel'#6'L'
|
||||||
|
+'abel3'#4'Left'#2#8#3'Top'#2'\'#5'Width'#2'K'#6'Height'#2#16#8'AutoSize'#8#7
|
||||||
|
+'Caption'#6#6'&Width'#0#0#6'TLabel'#6'Label4'#4'Left'#2#8#3'Top'#2'8'#5'Widt'
|
||||||
|
+'h'#2'"'#6'Height'#2#13#7'Caption'#6#7'&Hidden'#12'FocusControl'#7#9'ctlHidd'
|
||||||
|
+'en'#0#0#9'TComboBox'#14'ctlDefaultCell'#4'Left'#2#8#3'Top'#2#24#5'Width'#3#1
|
||||||
|
+#1#6'Height'#2#21#5'Style'#7#14'csDropDownList'#13'DropDownCount'#2#16#10'It'
|
||||||
|
+'emHeight'#2#13#8'TabOrder'#2#0#0#0#9'TCheckBox'#9'ctlHidden'#4'Left'#2'`'#3
|
||||||
|
+'Top'#2'8'#5'Width'#2#17#6'Height'#2#17#8'TabOrder'#2#1#0#0#11'TOvcSpinner'
|
||||||
|
+#11'OvcSpinner1'#4'Left'#3#145#0#3'Top'#2'Z'#5'Width'#2#16#6'Height'#2#21#10
|
||||||
|
+'AutoRepeat'#9#5'Delta'#5#0#0#0#0#0#0#0#128#255'?'#14'FocusedControl'#7#8'ct'
|
||||||
|
+'lWidth'#0#0#5'TEdit'#8'ctlWidth'#4'Left'#2'`'#3'Top'#2'Z'#5'Width'#2'1'#6'H'
|
||||||
|
+'eight'#2#21#9'MaxLength'#2#5#8'TabOrder'#2#2#0#0#0#7'TBitBtn'#10'DoneButton'
|
||||||
|
+#4'Left'#3'0'#1#3'Top'#3#160#0#5'Width'#2'K'#6'Height'#2#25#7'Caption'#6#5'&'
|
||||||
|
+'Done'#11'ModalResult'#2#1#8'TabOrder'#2#3#7'OnClick'#7#15'DoneButtonClick'#9
|
||||||
|
+'NumGlyphs'#2#2#0#0#7'TBitBtn'#11'ApplyButton'#4'Left'#3'0'#1#3'Top'#2'8'#5
|
||||||
|
+'Width'#2'K'#6'Height'#2#25#7'Caption'#6#6'&Apply'#7'Default'#9#8'TabOrder'#2
|
||||||
|
+#2#7'OnClick'#7#16'ApplyButtonClick'#9'NumGlyphs'#2#2#0#0#0
|
||||||
|
]);
|
345
components/orpheus/myovctbpe2.pas
Normal file
@ -0,0 +1,345 @@
|
|||||||
|
{*********************************************************}
|
||||||
|
{* myovctbpe2.pas *}
|
||||||
|
{*********************************************************}
|
||||||
|
|
||||||
|
{* ***** BEGIN LICENSE BLOCK ***** *}
|
||||||
|
{* Version: MPL 1.1 *}
|
||||||
|
{* *}
|
||||||
|
{* The contents of this file are subject to the Mozilla Public License *}
|
||||||
|
{* Version 1.1 (the "License"); you may not use this file except in *}
|
||||||
|
{* compliance with the License. You may obtain a copy of the License at *}
|
||||||
|
{* http://www.mozilla.org/MPL/ *}
|
||||||
|
{* *}
|
||||||
|
{* Software distributed under the License is distributed on an "AS IS" basis, *}
|
||||||
|
{* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License *}
|
||||||
|
{* for the specific language governing rights and limitations under the *}
|
||||||
|
{* License. *}
|
||||||
|
{* *}
|
||||||
|
{* The Original Code is TurboPower Orpheus *}
|
||||||
|
{* *}
|
||||||
|
{* The Initial Developer of the Original Code is TurboPower Software *}
|
||||||
|
{* *}
|
||||||
|
{* Portions created by TurboPower Software Inc. are Copyright (C)1995-2002 *}
|
||||||
|
{* TurboPower Software Inc. All Rights Reserved. *}
|
||||||
|
{* *}
|
||||||
|
{* Contributor(s): *}
|
||||||
|
{* *}
|
||||||
|
{* Phil Hess - adapted ovctbpe2.pas to eliminate TOvcSimpleField. *}
|
||||||
|
{* *}
|
||||||
|
{* ***** END LICENSE BLOCK ***** *}
|
||||||
|
|
||||||
|
{$I OVC.INC}
|
||||||
|
|
||||||
|
{$B-} {Complete Boolean Evaluation}
|
||||||
|
{$I+} {Input/Output-Checking}
|
||||||
|
{$P+} {Open Parameters}
|
||||||
|
{$T-} {Typed @ Operator}
|
||||||
|
{.W-} {Windows Stack Frame}
|
||||||
|
{$X+} {Extended Syntax}
|
||||||
|
|
||||||
|
unit MyOvcTbPE2;
|
||||||
|
{Lazarus-specific Columns property editor for the table component}
|
||||||
|
|
||||||
|
interface
|
||||||
|
|
||||||
|
uses
|
||||||
|
{$IFNDEF LCL} Windows, Messages, {$ELSE} LclIntf, LMessages, LclType, LResources, {$ENDIF}
|
||||||
|
SysUtils, Classes, Graphics, Controls,
|
||||||
|
{$IFNDEF LCL} {$IFDEF VERSION6} DesignIntf, DesignEditors, {$ELSE} DsgnIntf, {$ENDIF} {$ELSE} PropEdits, ComponentEditors, {$ENDIF}
|
||||||
|
TypInfo, Forms, Dialogs, StdCtrls, Buttons, ExtCtrls,
|
||||||
|
OvcBase, OvcTCmmn, OvcTCell, OvcTbCls, OvcTable, OvcSc;
|
||||||
|
|
||||||
|
type
|
||||||
|
TOvcfrmColEditor = class(TForm)
|
||||||
|
ctlColNumber: TEdit;
|
||||||
|
ctlDefaultCell: TComboBox;
|
||||||
|
ctlHidden: TCheckBox;
|
||||||
|
ctlWidth: TEdit;
|
||||||
|
Panel1: TPanel;
|
||||||
|
SpeedButton1: TSpeedButton;
|
||||||
|
SpeedButton2: TSpeedButton;
|
||||||
|
SpeedButton3: TSpeedButton;
|
||||||
|
SpeedButton4: TSpeedButton;
|
||||||
|
SpeedButton5: TSpeedButton;
|
||||||
|
SpeedButton6: TSpeedButton;
|
||||||
|
Label1: TLabel;
|
||||||
|
Label2: TLabel;
|
||||||
|
Label3: TLabel;
|
||||||
|
Label4: TLabel;
|
||||||
|
GroupBox1: TGroupBox;
|
||||||
|
DoneButton: TBitBtn;
|
||||||
|
ApplyButton: TBitBtn;
|
||||||
|
OvcSpinner1: TOvcSpinner;
|
||||||
|
OvcSpinner2: TOvcSpinner;
|
||||||
|
procedure ctlColNumberExit(Sender: TObject);
|
||||||
|
procedure ApplyButtonClick(Sender: TObject);
|
||||||
|
procedure SpeedButton1Click(Sender: TObject);
|
||||||
|
procedure SpeedButton2Click(Sender: TObject);
|
||||||
|
procedure SpeedButton3Click(Sender: TObject);
|
||||||
|
procedure SpeedButton4Click(Sender: TObject);
|
||||||
|
procedure SpeedButton5Click(Sender: TObject);
|
||||||
|
procedure SpeedButton6Click(Sender: TObject);
|
||||||
|
procedure FormShow(Sender: TObject);
|
||||||
|
procedure DoneButtonClick(Sender: TObject);
|
||||||
|
procedure ctlColNumberChange(Sender: TObject);
|
||||||
|
private
|
||||||
|
{ Private declarations }
|
||||||
|
FCols : TOvcTableColumns;
|
||||||
|
FColNum : TColNum;
|
||||||
|
CurCellIndex : integer;
|
||||||
|
Cells : TStringList;
|
||||||
|
|
||||||
|
protected
|
||||||
|
procedure GetCells;
|
||||||
|
procedure RefreshColData;
|
||||||
|
procedure SetColNum(C : TColNum);
|
||||||
|
|
||||||
|
procedure AddCellComponentName(const S : string);
|
||||||
|
|
||||||
|
public
|
||||||
|
{ Public declarations }
|
||||||
|
Editor : TObject;
|
||||||
|
procedure SetCols(CS : TOvcTableColumns);
|
||||||
|
|
||||||
|
property Cols : TOvcTableColumns
|
||||||
|
read FCols
|
||||||
|
write SetCols;
|
||||||
|
|
||||||
|
property ColNum : TColNum
|
||||||
|
read FColNum
|
||||||
|
write SetColNum;
|
||||||
|
|
||||||
|
end;
|
||||||
|
|
||||||
|
{-A table column property editor}
|
||||||
|
TOvcTableColumnProperty = class(TClassProperty)
|
||||||
|
public
|
||||||
|
procedure Edit; override;
|
||||||
|
function GetAttributes: TPropertyAttributes; override;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
implementation
|
||||||
|
|
||||||
|
{$IFNDEF LCL}
|
||||||
|
{$R *.DFM}
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
{===TOvcTableColumnProperty==========================================}
|
||||||
|
procedure TOvcTableColumnProperty.Edit;
|
||||||
|
var
|
||||||
|
ColEditor : TOvcfrmColEditor;
|
||||||
|
begin
|
||||||
|
ColEditor := TOvcfrmColEditor.Create(Application);
|
||||||
|
try
|
||||||
|
ColEditor.Editor := Self;
|
||||||
|
ColEditor.SetCols(TOvcTableColumns(GetOrdValue));
|
||||||
|
ColEditor.ShowModal;
|
||||||
|
{$IFNDEF LCL}
|
||||||
|
Designer.Modified;
|
||||||
|
{$ELSE}
|
||||||
|
Modified;
|
||||||
|
{$ENDIF}
|
||||||
|
finally
|
||||||
|
ColEditor.Free;
|
||||||
|
end;{try..finally}
|
||||||
|
end;
|
||||||
|
{--------}
|
||||||
|
function TOvcTableColumnProperty.GetAttributes: TPropertyAttributes;
|
||||||
|
begin
|
||||||
|
Result := [paMultiSelect, paDialog, paReadOnly];
|
||||||
|
end;
|
||||||
|
{====================================================================}
|
||||||
|
|
||||||
|
|
||||||
|
{===TColEditor=======================================================}
|
||||||
|
procedure TOvcfrmColEditor.AddCellComponentName(const S : string);
|
||||||
|
begin
|
||||||
|
Cells.Add(S);
|
||||||
|
end;
|
||||||
|
{--------}
|
||||||
|
procedure TOvcfrmColEditor.ApplyButtonClick(Sender: TObject);
|
||||||
|
var
|
||||||
|
NewColWidth : Integer;
|
||||||
|
begin
|
||||||
|
FCols[ColNum].Hidden := ctlHidden.Checked;
|
||||||
|
NewColWidth := StrToIntDef(ctlWidth.Text, FCols[ColNum].Width);
|
||||||
|
if (NewColWidth < 5) or (NewColWidth > 32767) then {Out of range?}
|
||||||
|
NewColWidth := FCols[ColNum].Width; {Restore previous column width}
|
||||||
|
FCols[ColNum].Width := NewColWidth;
|
||||||
|
ctlWidth.Text := IntToStr(NewColWidth);
|
||||||
|
if (ctlDefaultCell.ItemIndex <> CurCellIndex) then
|
||||||
|
begin
|
||||||
|
CurCellIndex := ctlDefaultCell.ItemIndex;
|
||||||
|
FCols[FColNum].DefaultCell := TOvcBaseTableCell(Cells.Objects[CurCellIndex]);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
{--------}
|
||||||
|
procedure TOvcfrmColEditor.ctlColNumberExit(Sender: TObject);
|
||||||
|
begin
|
||||||
|
ApplyButtonClick(Self);
|
||||||
|
ColNum := StrToInt(ctlColNumber.Text);
|
||||||
|
end;
|
||||||
|
{--------}
|
||||||
|
procedure TOvcfrmColEditor.DoneButtonClick(Sender: TObject);
|
||||||
|
begin
|
||||||
|
ApplyButtonClick(Self);
|
||||||
|
Cells.Free;
|
||||||
|
end;
|
||||||
|
{--------}
|
||||||
|
procedure TOvcfrmColEditor.FormShow(Sender: TObject);
|
||||||
|
begin
|
||||||
|
if not Assigned(Cells) then
|
||||||
|
begin
|
||||||
|
Cells := TStringList.Create;
|
||||||
|
GetCells;
|
||||||
|
end;
|
||||||
|
RefreshColData;
|
||||||
|
end;
|
||||||
|
{--------}
|
||||||
|
procedure TOvcfrmColEditor.GetCells;
|
||||||
|
var
|
||||||
|
{$IFDEF VERSION4}
|
||||||
|
{$IFDEF VERSION6}
|
||||||
|
{$IFNDEF LCL}
|
||||||
|
Designer : IDesigner;
|
||||||
|
{$ENDIF}
|
||||||
|
{$ELSE}
|
||||||
|
Designer : IFormDesigner;
|
||||||
|
{$ENDIF}
|
||||||
|
{$ELSE}
|
||||||
|
Designer : TFormDesigner;
|
||||||
|
{$ENDIF}
|
||||||
|
TI : PTypeInfo;
|
||||||
|
Index: Integer;
|
||||||
|
C : TComponent;
|
||||||
|
Cell : TOvcBaseTableCell absolute C;
|
||||||
|
begin
|
||||||
|
Cells.Sorted := true;
|
||||||
|
Cells.AddObject('(None)', nil);
|
||||||
|
TI := TOvcBaseTableCell.ClassInfo;
|
||||||
|
{$IFNDEF LCL}
|
||||||
|
if (Editor is TClassProperty) then
|
||||||
|
Designer := TClassProperty(Editor).Designer
|
||||||
|
else {the editor is a TDefaultEditor}
|
||||||
|
Designer := TDefaultEditor(Editor).Designer;
|
||||||
|
Designer.GetComponentNames(GetTypeData(TI), AddCellComponentName);
|
||||||
|
for Index := 1 to pred(Cells.Count) do
|
||||||
|
Cells.Objects[Index] := Designer.GetComponent(Cells[Index]);
|
||||||
|
{$ELSE}
|
||||||
|
if (Editor is TClassProperty) then
|
||||||
|
begin
|
||||||
|
TClassProperty(Editor).PropertyHook.GetComponentNames(GetTypeData(TI), AddCellComponentName);
|
||||||
|
for Index := 1 to pred(Cells.Count) do
|
||||||
|
Cells.Objects[Index] := TClassProperty(Editor).PropertyHook.GetComponent(Cells[Index]);
|
||||||
|
end
|
||||||
|
else {the editor is a TDefaultComponentEditor}
|
||||||
|
begin
|
||||||
|
TDefaultComponentEditor(Editor).Designer.PropertyEditorHook.GetComponentNames(GetTypeData(TI), AddCellComponentName);
|
||||||
|
for Index := 1 to pred(Cells.Count) do
|
||||||
|
Cells.Objects[Index] := TDefaultComponentEditor(Editor).Designer.PropertyEditorHook.GetComponent(Cells[Index]);
|
||||||
|
end;
|
||||||
|
{$ENDIF}
|
||||||
|
ctlDefaultCell.Items := Cells;
|
||||||
|
end;
|
||||||
|
{--------}
|
||||||
|
procedure TOvcfrmColEditor.RefreshColData;
|
||||||
|
begin
|
||||||
|
CurCellIndex := Cells.IndexOfObject(FCols[ColNum].DefaultCell);
|
||||||
|
|
||||||
|
ctlHidden.Checked := FCols[ColNum].Hidden;
|
||||||
|
ctlWidth.Text := IntToStr(FCols[ColNum].Width);
|
||||||
|
ctlDefaultCell.ItemIndex := CurCellIndex;
|
||||||
|
end;
|
||||||
|
{--------}
|
||||||
|
procedure TOvcfrmColEditor.SetColNum(C : TColNum);
|
||||||
|
begin
|
||||||
|
if (FColNum <> C) then
|
||||||
|
begin
|
||||||
|
FColNum := C;
|
||||||
|
RefreshColData;
|
||||||
|
ctlColNumber.Text := IntToStr(C); //Do this after refresh
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
{--------}
|
||||||
|
procedure TOvcfrmColEditor.SetCols(CS : TOvcTableColumns);
|
||||||
|
begin
|
||||||
|
if Assigned(FCols) then
|
||||||
|
FCols.Free;
|
||||||
|
FCols := CS;
|
||||||
|
FColNum := 0;
|
||||||
|
ctlColNumber.Text := '0';
|
||||||
|
end;
|
||||||
|
{--------}
|
||||||
|
procedure TOvcfrmColEditor.SpeedButton1Click(Sender: TObject);
|
||||||
|
begin
|
||||||
|
ApplyButtonClick(Self);
|
||||||
|
if (ColNum > 0) then
|
||||||
|
ColNum := ColNum - 1;
|
||||||
|
end;
|
||||||
|
{--------}
|
||||||
|
procedure TOvcfrmColEditor.SpeedButton2Click(Sender: TObject);
|
||||||
|
begin
|
||||||
|
ApplyButtonClick(Self);
|
||||||
|
if (ColNum < pred(FCols.Count)) then
|
||||||
|
ColNum := ColNum + 1;
|
||||||
|
end;
|
||||||
|
{--------}
|
||||||
|
procedure TOvcfrmColEditor.SpeedButton3Click(Sender: TObject);
|
||||||
|
begin
|
||||||
|
ApplyButtonClick(Self);
|
||||||
|
ColNum := 0;
|
||||||
|
end;
|
||||||
|
{--------}
|
||||||
|
procedure TOvcfrmColEditor.SpeedButton4Click(Sender: TObject);
|
||||||
|
begin
|
||||||
|
ApplyButtonClick(Self);
|
||||||
|
ColNum := pred(FCols.Count);
|
||||||
|
end;
|
||||||
|
{--------}
|
||||||
|
procedure TOvcfrmColEditor.SpeedButton5Click(Sender: TObject);
|
||||||
|
var
|
||||||
|
C : TOvcTableColumn;
|
||||||
|
begin
|
||||||
|
C := TOvcTableColumn.Create(FCols.Table);
|
||||||
|
FCols.Insert(FColNum, C);
|
||||||
|
RefreshColData;
|
||||||
|
end;
|
||||||
|
{--------}
|
||||||
|
procedure TOvcfrmColEditor.SpeedButton6Click(Sender: TObject);
|
||||||
|
begin
|
||||||
|
if (FCols.Count > 1) then
|
||||||
|
begin
|
||||||
|
FCols.Delete(FColNum);
|
||||||
|
if (FColNum = FCols.Count) then
|
||||||
|
ColNum := pred(FColNum)
|
||||||
|
else RefreshColData;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
{====================================================================}
|
||||||
|
|
||||||
|
|
||||||
|
procedure TOvcfrmColEditor.ctlColNumberChange(Sender: TObject);
|
||||||
|
var
|
||||||
|
NewColNum : Integer;
|
||||||
|
begin
|
||||||
|
ApplyButtonClick(Self);
|
||||||
|
if not TryStrToInt(ctlColNumber.Text, NewColNum) then {Invalid?}
|
||||||
|
ctlColNumber.Text := IntToStr(ColNum) {Restore previous column number}
|
||||||
|
else if NewColNum = -1 then {Wrap around to last column?}
|
||||||
|
ctlColNumber.Text := IntToStr(Pred(FCols.Count))
|
||||||
|
else if NewColNum = FCols.Count then {Wrap around to first column?}
|
||||||
|
ctlColNumber.Text := '0'
|
||||||
|
else if not (NewColNum in [0..Pred(FCols.Count)]) then {Out of range?}
|
||||||
|
ctlColNumber.Text := IntToStr(ColNum); {Restore previous column number}
|
||||||
|
ColNum := StrToInt(ctlColNumber.Text);
|
||||||
|
end;
|
||||||
|
|
||||||
|
initialization
|
||||||
|
{$IFDEF LCL}
|
||||||
|
{$I myovctbpe2.lrs} {Include form's resource file}
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
end.
|
450
components/orpheus/o32bordr.pas
Normal file
@ -0,0 +1,450 @@
|
|||||||
|
{*********************************************************}
|
||||||
|
{* O32BORDR.PAS 4.06 *}
|
||||||
|
{*********************************************************}
|
||||||
|
|
||||||
|
{* ***** BEGIN LICENSE BLOCK ***** *}
|
||||||
|
{* Version: MPL 1.1 *}
|
||||||
|
{* *}
|
||||||
|
{* The contents of this file are subject to the Mozilla Public License *}
|
||||||
|
{* Version 1.1 (the "License"); you may not use this file except in *}
|
||||||
|
{* compliance with the License. You may obtain a copy of the License at *}
|
||||||
|
{* http://www.mozilla.org/MPL/ *}
|
||||||
|
{* *}
|
||||||
|
{* Software distributed under the License is distributed on an "AS IS" basis, *}
|
||||||
|
{* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License *}
|
||||||
|
{* for the specific language governing rights and limitations under the *}
|
||||||
|
{* License. *}
|
||||||
|
{* *}
|
||||||
|
{* The Original Code is TurboPower Orpheus *}
|
||||||
|
{* *}
|
||||||
|
{* The Initial Developer of the Original Code is TurboPower Software *}
|
||||||
|
{* *}
|
||||||
|
{* Portions created by TurboPower Software Inc. are Copyright (C)1995-2002 *}
|
||||||
|
{* TurboPower Software Inc. All Rights Reserved. *}
|
||||||
|
{* *}
|
||||||
|
{* Contributor(s): *}
|
||||||
|
{* *}
|
||||||
|
{* ***** END LICENSE BLOCK ***** *}
|
||||||
|
|
||||||
|
{$I OVC.INC}
|
||||||
|
|
||||||
|
{$B-} {Complete Boolean Evaluation}
|
||||||
|
{$I+} {Input/Output-Checking}
|
||||||
|
{$P+} {Open Parameters}
|
||||||
|
{$T-} {Typed @ Operator}
|
||||||
|
{.W-} {Windows Stack Frame}
|
||||||
|
{$X+} {Extended Syntax}
|
||||||
|
|
||||||
|
unit o32bordr;
|
||||||
|
{New Style Border control for Orpheus 4 components.}
|
||||||
|
|
||||||
|
interface
|
||||||
|
|
||||||
|
uses
|
||||||
|
{$IFNDEF LCL} Windows, {$ELSE} LclIntf, MyMisc, {$ENDIF}
|
||||||
|
Classes, Controls, Graphics;
|
||||||
|
|
||||||
|
type
|
||||||
|
TO32BorderStyle = (bstyNone, bstyRaised, bstyLowered, bstyFlat, bstyChannel,
|
||||||
|
bstyRidge);
|
||||||
|
|
||||||
|
const
|
||||||
|
THiliteColor: array[TO32BorderStyle] of TColor = (clWindow, clBtnHighlight,
|
||||||
|
clBtnShadow, clWindowFrame, clBtnShadow, clBtnHighlight);
|
||||||
|
|
||||||
|
TBaseColor: array[TO32BorderStyle] of TColor = (clWindow, clBtnShadow,
|
||||||
|
clBtnHighlight, clWindowFrame, clBtnHighlight, clBtnShadow);
|
||||||
|
|
||||||
|
type
|
||||||
|
TO32BorderSide = (bsidLeft, bsidRight, bsidTop, bsidBottom);
|
||||||
|
|
||||||
|
TSides = (left, right, top, bottom);
|
||||||
|
|
||||||
|
TO32Borders = class;
|
||||||
|
|
||||||
|
TO32BorderSet = class(TPersistent)
|
||||||
|
protected {private}
|
||||||
|
FOwner : TPersistent;
|
||||||
|
FLeft : Boolean;
|
||||||
|
FTop : Boolean;
|
||||||
|
FRight : Boolean;
|
||||||
|
FBottom : Boolean;
|
||||||
|
procedure SetLeft(Value: Boolean);
|
||||||
|
procedure SetRight(Value: Boolean);
|
||||||
|
procedure SetBottom(Value: Boolean);
|
||||||
|
procedure SetTop(Value: Boolean);
|
||||||
|
public
|
||||||
|
constructor Create(AOwner: TPersistent);
|
||||||
|
published
|
||||||
|
property ShowLeft : Boolean read FLeft write SetLeft
|
||||||
|
default True;
|
||||||
|
property ShowRight : Boolean read FRight write SetRight
|
||||||
|
default True;
|
||||||
|
property ShowTop : Boolean read FTop write SetTop
|
||||||
|
default True;
|
||||||
|
property ShowBottom : Boolean read FBottom write SetBottom
|
||||||
|
default True;
|
||||||
|
end;
|
||||||
|
|
||||||
|
TO32Borders = class(TPersistent)
|
||||||
|
protected {private}
|
||||||
|
Creating : Boolean;
|
||||||
|
FControl : TWinControl;
|
||||||
|
FBorderSet : TO32BorderSet;
|
||||||
|
FActive : Boolean;
|
||||||
|
FFlatColor : TColor;
|
||||||
|
FBorderWidth : Integer;
|
||||||
|
FBorderStyle : TO32BorderStyle;
|
||||||
|
procedure SetActive (Value : Boolean);
|
||||||
|
procedure SetBorderStyle (Value : TO32BorderStyle);
|
||||||
|
procedure SetFlatColor (Value : TColor);
|
||||||
|
|
||||||
|
procedure Draw3dBox(Canvas: TCanvas; Rct: TRect; Hilite,
|
||||||
|
Base: TColor; DrawAllSides: Boolean);
|
||||||
|
procedure DrawFlatBorder(Canvas: TControlCanvas; Rct: TRect;
|
||||||
|
Color: TColor{; DrawAllSides: Boolean}); {!!!}
|
||||||
|
procedure DrawBevel(Canvas: TControlCanvas; Rct: TRect; HiliteColor,
|
||||||
|
BaseColor: TColor);
|
||||||
|
procedure Draw3dBorders(Canvas: TControlCanvas; Rct: TRect);
|
||||||
|
procedure EraseBorder(Canvas: TControlCanvas; Rct: TRect;
|
||||||
|
Color: TColor; AllSides: Boolean);
|
||||||
|
procedure DrawSingleSolidBorder(Canvas: TControlCanvas; Rct: TRect;
|
||||||
|
Color: TColor; Side: TSides; Width: Integer);
|
||||||
|
public
|
||||||
|
constructor Create(Control: TWinControl);
|
||||||
|
destructor Destroy; override;
|
||||||
|
procedure Changed;
|
||||||
|
procedure BordersChanged;
|
||||||
|
property Control: TWinControl read FControl;
|
||||||
|
procedure DrawBorders(var Canvas: TControlCanvas; Color: TColor);
|
||||||
|
procedure RedrawControl;
|
||||||
|
published
|
||||||
|
property Active : Boolean read FActive write SetActive
|
||||||
|
default False;
|
||||||
|
property BorderSet : TO32BorderSet
|
||||||
|
read FBorderSet write FBorderSet;
|
||||||
|
property BorderStyle: TO32BorderStyle read FBorderStyle write SetBorderStyle
|
||||||
|
default bstyRidge;
|
||||||
|
property FlatColor: TColor read FFlatColor write SetFlatColor
|
||||||
|
default clLime;
|
||||||
|
end;
|
||||||
|
|
||||||
|
implementation
|
||||||
|
|
||||||
|
{===== TO32BorderSet =================================================}
|
||||||
|
constructor TO32BorderSet.Create(AOwner: TPersistent);
|
||||||
|
begin
|
||||||
|
inherited Create;
|
||||||
|
FOwner := AOwner;
|
||||||
|
end;
|
||||||
|
{=====}
|
||||||
|
|
||||||
|
procedure TO32BorderSet.SetLeft(Value: Boolean);
|
||||||
|
begin
|
||||||
|
if Value <> FLeft then begin
|
||||||
|
FLeft := Value;
|
||||||
|
TO32Borders(FOwner).BordersChanged;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
{=====}
|
||||||
|
|
||||||
|
procedure TO32BorderSet.SetRight(Value: Boolean);
|
||||||
|
begin
|
||||||
|
if Value <> FRight then begin
|
||||||
|
FRight := Value;
|
||||||
|
TO32Borders(FOwner).BordersChanged;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
{=====}
|
||||||
|
|
||||||
|
procedure TO32BorderSet.SetBottom(Value: Boolean);
|
||||||
|
begin
|
||||||
|
if Value <> FBottom then begin
|
||||||
|
FBottom := Value;
|
||||||
|
TO32Borders(FOwner).BordersChanged;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
{=====}
|
||||||
|
|
||||||
|
procedure TO32BorderSet.SetTop(Value: Boolean);
|
||||||
|
begin
|
||||||
|
if Value <> FTop then begin
|
||||||
|
FTop := Value;
|
||||||
|
TO32Borders(FOwner).BordersChanged;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
{===== TO32BorderSet - End =====}
|
||||||
|
|
||||||
|
|
||||||
|
{===== TO32Borders =================================================}
|
||||||
|
constructor TO32Borders.Create(Control: TWinControl);
|
||||||
|
begin
|
||||||
|
Creating := True;
|
||||||
|
inherited Create;
|
||||||
|
FControl := Control;
|
||||||
|
FBorderSet := TO32BorderSet.Create(self);
|
||||||
|
FActive := false;
|
||||||
|
FBorderWidth := 2;
|
||||||
|
FBorderStyle := bstyRidge;
|
||||||
|
FFlatColor := clLime;
|
||||||
|
FBorderSet.ShowBottom := true;
|
||||||
|
FBorderSet.ShowLeft := true;
|
||||||
|
FBorderSet.ShowRight := true;
|
||||||
|
FBorderSet.ShowTop := true;
|
||||||
|
Creating := False;
|
||||||
|
end;
|
||||||
|
{=====}
|
||||||
|
|
||||||
|
destructor TO32Borders.Destroy;
|
||||||
|
begin
|
||||||
|
FBorderSet.Free;
|
||||||
|
inherited Destroy;
|
||||||
|
end;
|
||||||
|
{=====}
|
||||||
|
|
||||||
|
procedure TO32Borders.SetActive(Value: Boolean);
|
||||||
|
begin
|
||||||
|
if FActive <> Value then begin
|
||||||
|
FActive := Value;
|
||||||
|
Changed;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
{=====}
|
||||||
|
|
||||||
|
procedure TO32Borders.SetBorderStyle(Value: TO32BorderStyle);
|
||||||
|
begin
|
||||||
|
if Value <> FBorderStyle then begin
|
||||||
|
FBorderStyle := Value;
|
||||||
|
Changed;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
{=====}
|
||||||
|
|
||||||
|
procedure TO32Borders.SetFlatColor(Value: TColor);
|
||||||
|
begin
|
||||||
|
if Value <> FFlatColor then begin
|
||||||
|
FFlatColor := Value;
|
||||||
|
if FBorderStyle = bstyFlat then
|
||||||
|
Changed;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
{=====}
|
||||||
|
|
||||||
|
procedure TO32Borders.DrawBorders(var Canvas: TControlCanvas; Color: TColor);
|
||||||
|
var
|
||||||
|
Rct : TRect;
|
||||||
|
begin
|
||||||
|
if not FActive then exit;
|
||||||
|
|
||||||
|
Rct := Rect(0, 0, FControl.Width, FControl.Height);
|
||||||
|
|
||||||
|
{Erase the existing border.}
|
||||||
|
EraseBorder(Canvas, Rct, Color, true);
|
||||||
|
|
||||||
|
{If the border style is bstyNone then don't do anything else.}
|
||||||
|
if FBorderStyle = bstyNone then exit;
|
||||||
|
|
||||||
|
{otherwise, draw the border.}
|
||||||
|
if FBorderStyle = bstyFlat then
|
||||||
|
DrawFlatBorder(Canvas, Rct, FFlatColor{, false})
|
||||||
|
else Draw3dBorders(Canvas, Rct);
|
||||||
|
end;
|
||||||
|
{=====}
|
||||||
|
|
||||||
|
procedure TO32Borders.Draw3dBorders(Canvas: TControlCanvas; Rct: TRect);
|
||||||
|
var
|
||||||
|
Hilite, Base: TColor;
|
||||||
|
R: TRect;
|
||||||
|
begin
|
||||||
|
Hilite := THiliteColor[FBorderStyle];
|
||||||
|
Base := TBaseColor[FBorderStyle];
|
||||||
|
|
||||||
|
if FBorderStyle in [bstyLowered, bstyRaised ] then
|
||||||
|
DrawBevel(Canvas, Rct, Hilite, Base)
|
||||||
|
|
||||||
|
else with FBorderSet do begin
|
||||||
|
R := Rct;
|
||||||
|
{Patch the border edges}
|
||||||
|
|
||||||
|
if ShowRight then
|
||||||
|
Canvas.Pixels[R.Right - 1, R.Top] := Base;
|
||||||
|
if ShowTop and not ShowRight then
|
||||||
|
Canvas.Pixels[R.Right - 1, R.Top] := Hilite;
|
||||||
|
if ShowBottom then
|
||||||
|
Canvas.Pixels[R.Left, R.Bottom - 1] := Base;
|
||||||
|
if ShowLeft and not ShowBottom then
|
||||||
|
Canvas.Pixels[R.Left, R.Bottom - 1] := Hilite;
|
||||||
|
if ShowTop and not ShowLeft then
|
||||||
|
Canvas.Pixels[R.Left, R.Top + 1] := Base;
|
||||||
|
if not ShowTop and ShowLeft then
|
||||||
|
Canvas.Pixels[R.Left + 1, R.Top] := Base;
|
||||||
|
if ShowBottom and not ShowRight then
|
||||||
|
Canvas.Pixels[R.Right - 1, R.Bottom - 2] := Hilite;
|
||||||
|
if not ShowBottom and ShowRight then
|
||||||
|
Canvas.Pixels[R.Right - 2, R.Bottom - 1] := Hilite;
|
||||||
|
|
||||||
|
Inc( R.Left );
|
||||||
|
Inc( R.Top );
|
||||||
|
Draw3dBox(Canvas, R, Base, Base, false);
|
||||||
|
OffsetRect(R, -1, -1);
|
||||||
|
Draw3dBox(Canvas, R, Hilite, Hilite, false);
|
||||||
|
|
||||||
|
{ - dead code}
|
||||||
|
// if ShowLeft then Inc(Rct.Left, 2);
|
||||||
|
// if ShowTop then Inc(Rct.Top, 2);
|
||||||
|
// if ShowRight then Dec(Rct.Right, 2);
|
||||||
|
// if ShowBottom then Dec(Rct.Bottom, 2);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
{=====}
|
||||||
|
|
||||||
|
procedure TO32Borders.DrawSingleSolidBorder(Canvas: TControlCanvas; Rct: TRect;
|
||||||
|
Color: TColor; Side: TSides; Width: Integer);
|
||||||
|
var
|
||||||
|
i: Integer;
|
||||||
|
begin
|
||||||
|
with Canvas, FBorderSet do begin
|
||||||
|
Pen.Width := 1;
|
||||||
|
Pen.Color := Color;
|
||||||
|
|
||||||
|
if Side = left then
|
||||||
|
for i := 0 to Width do begin
|
||||||
|
MoveTo(Rct.Left - 1, Rct.Top);
|
||||||
|
LineTo(Rct.Left - 1, Rct.Bottom);
|
||||||
|
Inc(Rct.Left);
|
||||||
|
end
|
||||||
|
else if Side = right then
|
||||||
|
for i := 0 to Width do begin
|
||||||
|
MoveTo(Rct.Right , Rct.Top);
|
||||||
|
LineTo(Rct.Right , Rct.Bottom);
|
||||||
|
Dec(Rct.Right);
|
||||||
|
end
|
||||||
|
else if Side = top then
|
||||||
|
for i := 0 to Width do begin
|
||||||
|
MoveTo(Rct.Left, Rct.Top - 1);
|
||||||
|
LineTo(Rct.Right, Rct.Top - 1);
|
||||||
|
Inc(Rct.Top);
|
||||||
|
end
|
||||||
|
else if Side = bottom then
|
||||||
|
for i := 0 to Width do begin
|
||||||
|
MoveTo(Rct.Left, Rct.Bottom);
|
||||||
|
LineTo(Rct.Right, Rct.Bottom);
|
||||||
|
Dec(Rct.Bottom);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
{=====}
|
||||||
|
|
||||||
|
procedure TO32Borders.Draw3dBox(Canvas: TCanvas; Rct: TRect; Hilite,
|
||||||
|
Base: TColor; DrawAllSides: Boolean);
|
||||||
|
begin
|
||||||
|
with Canvas, Rct, FBorderSet do begin
|
||||||
|
Pen.Width := 1;
|
||||||
|
Pen.Color := Hilite;
|
||||||
|
if ShowLeft or DrawAllSides then begin
|
||||||
|
MoveTo( Left, Top );
|
||||||
|
LineTo( Left, Bottom );
|
||||||
|
end;
|
||||||
|
|
||||||
|
if ShowTop or DrawAllSides then begin
|
||||||
|
MoveTo( Left, Top );
|
||||||
|
LineTo( Right, Top );
|
||||||
|
end;
|
||||||
|
|
||||||
|
Pen.Color := Base;
|
||||||
|
if ShowRight or DrawAllSides then begin
|
||||||
|
MoveTo( Right - 1, Top );
|
||||||
|
LineTo( Right - 1, Bottom );
|
||||||
|
end;
|
||||||
|
|
||||||
|
if ShowBottom or DrawAllSides then begin
|
||||||
|
MoveTo( Left, Bottom - 1 );
|
||||||
|
LineTo( Right, Bottom - 1 );
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
{=====}
|
||||||
|
|
||||||
|
procedure TO32Borders.DrawBevel(Canvas: TControlCanvas; Rct: TRect; HiliteColor,
|
||||||
|
BaseColor: TColor);
|
||||||
|
var
|
||||||
|
I: Integer;
|
||||||
|
begin
|
||||||
|
Canvas.Pen.Width := 1;
|
||||||
|
for I := 1 to FBorderWidth do
|
||||||
|
begin
|
||||||
|
Draw3dBox(Canvas, Rct, HiliteColor, BaseColor, False);
|
||||||
|
Inc(Rct.Left);
|
||||||
|
Inc(Rct.Top);
|
||||||
|
Dec(Rct.Right);
|
||||||
|
Dec(Rct.Bottom);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
{=====}
|
||||||
|
|
||||||
|
procedure TO32Borders.DrawFlatBorder(Canvas: TControlCanvas; Rct: TRect;
|
||||||
|
Color: TColor{; DrawAllSides: Boolean});
|
||||||
|
begin
|
||||||
|
Canvas.Pen.Color := Color;
|
||||||
|
with BorderSet do begin
|
||||||
|
if ShowLeft then
|
||||||
|
DrawSingleSolidBorder(Canvas, Rct, Color, left, FBorderWidth);
|
||||||
|
if ShowRight then
|
||||||
|
DrawSingleSolidBorder(Canvas, Rct, Color, right, FBorderWidth);
|
||||||
|
if ShowTop then
|
||||||
|
DrawSingleSolidBorder(Canvas, Rct, Color, top, FBorderWidth);
|
||||||
|
if ShowBottom then
|
||||||
|
DrawSingleSolidBorder(Canvas, Rct, Color, bottom, FBorderWidth);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
{=====}
|
||||||
|
|
||||||
|
procedure TO32Borders.EraseBorder(Canvas: TControlCanvas; Rct: TRect;
|
||||||
|
Color: TColor; AllSides: Boolean);
|
||||||
|
var
|
||||||
|
i: Integer;
|
||||||
|
begin
|
||||||
|
Canvas.Pen.Color := Color;
|
||||||
|
with BorderSet do begin
|
||||||
|
for i := 1 to FBorderWidth do begin
|
||||||
|
Draw3dBox(Canvas, Rct, Color, Color, AllSides);
|
||||||
|
Inc(Rct.Left);
|
||||||
|
Inc(Rct.Top);
|
||||||
|
Dec(Rct.Right);
|
||||||
|
Dec(Rct.Bottom);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
{=====}
|
||||||
|
|
||||||
|
procedure TO32Borders.BordersChanged;
|
||||||
|
begin
|
||||||
|
if FActive then Changed;
|
||||||
|
end;
|
||||||
|
{=====}
|
||||||
|
|
||||||
|
procedure TO32Borders.RedrawControl;
|
||||||
|
var
|
||||||
|
Rct: TRect;
|
||||||
|
begin
|
||||||
|
if not Creating then begin
|
||||||
|
Rct := FControl.ClientRect;
|
||||||
|
RedrawWindow(FControl.Handle, @Rct, 0,
|
||||||
|
rdw_Invalidate or rdw_UpdateNow or rdw_Frame );
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
{=====}
|
||||||
|
|
||||||
|
procedure TO32Borders.Changed;
|
||||||
|
begin
|
||||||
|
FControl.Invalidate;
|
||||||
|
RedrawControl;
|
||||||
|
end;
|
||||||
|
|
||||||
|
{===== TO32Borders - End =====}
|
||||||
|
|
||||||
|
end.
|
||||||
|
|
||||||
|
|
||||||
|
|
377
components/orpheus/o32editf.pas
Normal file
@ -0,0 +1,377 @@
|
|||||||
|
{*********************************************************}
|
||||||
|
{* O32EDITF.PAS 4.06 *}
|
||||||
|
{*********************************************************}
|
||||||
|
|
||||||
|
{* ***** BEGIN LICENSE BLOCK ***** *}
|
||||||
|
{* Version: MPL 1.1 *}
|
||||||
|
{* *}
|
||||||
|
{* The contents of this file are subject to the Mozilla Public License *}
|
||||||
|
{* Version 1.1 (the "License"); you may not use this file except in *}
|
||||||
|
{* compliance with the License. You may obtain a copy of the License at *}
|
||||||
|
{* http://www.mozilla.org/MPL/ *}
|
||||||
|
{* *}
|
||||||
|
{* Software distributed under the License is distributed on an "AS IS" basis, *}
|
||||||
|
{* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License *}
|
||||||
|
{* for the specific language governing rights and limitations under the *}
|
||||||
|
{* License. *}
|
||||||
|
{* *}
|
||||||
|
{* The Original Code is TurboPower Orpheus *}
|
||||||
|
{* *}
|
||||||
|
{* The Initial Developer of the Original Code is TurboPower Software *}
|
||||||
|
{* *}
|
||||||
|
{* Portions created by TurboPower Software Inc. are Copyright (C)1995-2002 *}
|
||||||
|
{* TurboPower Software Inc. All Rights Reserved. *}
|
||||||
|
{* *}
|
||||||
|
{* Contributor(s): *}
|
||||||
|
{* *}
|
||||||
|
{* ***** END LICENSE BLOCK ***** *}
|
||||||
|
|
||||||
|
{$I OVC.INC}
|
||||||
|
|
||||||
|
{$B-} {Complete Boolean Evaluation}
|
||||||
|
{$I+} {Input/Output-Checking}
|
||||||
|
{$P+} {Open Parameters}
|
||||||
|
{$T-} {Typed @ Operator}
|
||||||
|
{.W-} {Windows Stack Frame}
|
||||||
|
{$X+} {Extended Syntax}
|
||||||
|
{$J+} {Writable constants}
|
||||||
|
|
||||||
|
unit o32editf;
|
||||||
|
{-base FlexEdit field class w/ attached label}
|
||||||
|
|
||||||
|
interface
|
||||||
|
|
||||||
|
uses
|
||||||
|
{$IFNDEF LCL} Windows, Messages, {$ELSE} LclIntf, LMessages, Types, LclType, MyMisc, {$ENDIF}
|
||||||
|
Buttons, Classes, Controls, ExtCtrls, Forms, Graphics, Menus,
|
||||||
|
StdCtrls, SysUtils, OvcBase, OvcConst, OvcData, OvcVer,
|
||||||
|
OvcMisc;
|
||||||
|
|
||||||
|
type
|
||||||
|
{base class for non-OvcController dependent edit fields...}
|
||||||
|
TO32CustomEdit = class(TCustomEdit)
|
||||||
|
protected {private}
|
||||||
|
{property variables}
|
||||||
|
FLabelInfo : TOvcLabelInfo;
|
||||||
|
{property methods}
|
||||||
|
function GetAbout : string;
|
||||||
|
function GetAttachedLabel : TOvcAttachedLabel;
|
||||||
|
procedure SetAbout(const Value : string);
|
||||||
|
{internal methods}
|
||||||
|
procedure LabelChange(Sender : TObject);
|
||||||
|
procedure LabelAttach(Sender : TObject; Value : Boolean);
|
||||||
|
procedure PositionLabel;
|
||||||
|
{VCL message methods}
|
||||||
|
procedure CMVisibleChanged(var Msg : TMessage); message CM_VISIBLECHANGED;
|
||||||
|
procedure OrAssignLabel(var Msg : TMessage); message OM_ASSIGNLABEL;
|
||||||
|
procedure OrPositionLabel(var Msg : TMessage); message OM_POSITIONLABEL;
|
||||||
|
procedure OrRecordLabelPosition(var Msg : TMessage);
|
||||||
|
message OM_RECORDLABELPOSITION;
|
||||||
|
protected
|
||||||
|
{descendants can set the value of this variable after calling inherited }
|
||||||
|
{create to set the default location and point-of-reference (POR) for the}
|
||||||
|
{attached label. if dlpTopLeft, the default location and POR will be at }
|
||||||
|
{the top left of the control. if dlpBottomLeft, the default location and}
|
||||||
|
{POR will be at the bottom left}
|
||||||
|
DefaultLabelPosition : TOvcLabelPosition;
|
||||||
|
procedure CreateWnd; override;
|
||||||
|
procedure Notification(AComponent : TComponent; Operation: TOperation);
|
||||||
|
override;
|
||||||
|
property About : string read GetAbout write SetAbout stored False;
|
||||||
|
property LabelInfo : TOvcLabelInfo read FLabelInfo write FLabelInfo;
|
||||||
|
public
|
||||||
|
constructor Create(AOwner : TComponent); override;
|
||||||
|
destructor Destroy; override;
|
||||||
|
procedure SetBounds(ALeft, ATop, AWidth, AHeight: Integer); override;
|
||||||
|
property AttachedLabel : TOvcAttachedLabel read GetAttachedLabel;
|
||||||
|
end;
|
||||||
|
|
||||||
|
TO32Edit = class(TO32CustomEdit)
|
||||||
|
published
|
||||||
|
{properties}
|
||||||
|
{$IFDEF VERSION4}
|
||||||
|
property Anchors;
|
||||||
|
{$IFNDEF LCL}
|
||||||
|
property BiDiMode;
|
||||||
|
property ParentBiDiMode;
|
||||||
|
{$ENDIF}
|
||||||
|
property Constraints;
|
||||||
|
property DragKind;
|
||||||
|
{$ENDIF}
|
||||||
|
property About;
|
||||||
|
{$IFNDEF LCL}
|
||||||
|
property AutoSelect; // Added recently to LCL, but leave out for now
|
||||||
|
{$ENDIF}
|
||||||
|
property AutoSize;
|
||||||
|
property BorderStyle;
|
||||||
|
property CharCase;
|
||||||
|
property Color;
|
||||||
|
property Ctl3D;
|
||||||
|
property Cursor;
|
||||||
|
property DragCursor;
|
||||||
|
property DragMode;
|
||||||
|
property Enabled;
|
||||||
|
property Font;
|
||||||
|
{$IFNDEF LCL}
|
||||||
|
property HideSelection;
|
||||||
|
property ImeMode;
|
||||||
|
property ImeName;
|
||||||
|
{$ENDIF}
|
||||||
|
property LabelInfo;
|
||||||
|
property MaxLength;
|
||||||
|
{$IFNDEF LCL}
|
||||||
|
property OEMConvert;
|
||||||
|
{$ENDIF}
|
||||||
|
property ParentColor;
|
||||||
|
property ParentCtl3D;
|
||||||
|
property ParentFont;
|
||||||
|
property ParentShowHint;
|
||||||
|
property PasswordChar;
|
||||||
|
property PopupMenu;
|
||||||
|
property ReadOnly;
|
||||||
|
property ShowHint;
|
||||||
|
property TabOrder;
|
||||||
|
property TabStop;
|
||||||
|
property Text;
|
||||||
|
property Visible;
|
||||||
|
{events}
|
||||||
|
property OnChange;
|
||||||
|
property OnClick;
|
||||||
|
property OnDblClick;
|
||||||
|
property OnDragDrop;
|
||||||
|
property OnDragOver;
|
||||||
|
{$IFDEF VERSION4}
|
||||||
|
property OnEndDock;
|
||||||
|
property OnStartDock;
|
||||||
|
{$ENDIF}
|
||||||
|
property OnEndDrag;
|
||||||
|
property OnEnter;
|
||||||
|
property OnExit;
|
||||||
|
property OnKeyDown;
|
||||||
|
property OnKeyPress;
|
||||||
|
property OnKeyUp;
|
||||||
|
property OnMouseDown;
|
||||||
|
property OnMouseMove;
|
||||||
|
property OnMouseUp;
|
||||||
|
property OnStartDrag;
|
||||||
|
end;
|
||||||
|
|
||||||
|
implementation
|
||||||
|
|
||||||
|
{===== TO32CustomEdit ==============================================}
|
||||||
|
procedure TO32CustomEdit.CMVisibleChanged(var Msg : TMessage);
|
||||||
|
begin
|
||||||
|
inherited;
|
||||||
|
|
||||||
|
if csLoading in ComponentState then
|
||||||
|
Exit;
|
||||||
|
|
||||||
|
if LabelInfo.Visible then
|
||||||
|
AttachedLabel.Visible := Visible;
|
||||||
|
end;
|
||||||
|
{=====}
|
||||||
|
|
||||||
|
constructor TO32CustomEdit.Create(AOwner : TComponent);
|
||||||
|
begin
|
||||||
|
inherited Create(AOwner);
|
||||||
|
|
||||||
|
ControlStyle := ControlStyle - [csSetCaption];
|
||||||
|
|
||||||
|
{set default position and reference point}
|
||||||
|
DefaultLabelPosition := lpTopLeft;
|
||||||
|
|
||||||
|
FLabelInfo := TOvcLabelInfo.Create;
|
||||||
|
FLabelInfo.OnChange := LabelChange;
|
||||||
|
FLabelInfo.OnAttach := LabelAttach;
|
||||||
|
end;
|
||||||
|
{=====}
|
||||||
|
|
||||||
|
procedure TO32CustomEdit.CreateWnd;
|
||||||
|
// OurForm : TWinControl;
|
||||||
|
begin
|
||||||
|
// OurForm := GetImmediateParentForm(Self);
|
||||||
|
inherited CreateWnd;
|
||||||
|
end;
|
||||||
|
{=====}
|
||||||
|
|
||||||
|
destructor TO32CustomEdit.Destroy;
|
||||||
|
begin
|
||||||
|
{detatch and destroy label, if any}
|
||||||
|
FLabelInfo.Visible := False;
|
||||||
|
|
||||||
|
{destroy label info}
|
||||||
|
FLabelInfo.Free;
|
||||||
|
FLabelInfo := nil;
|
||||||
|
|
||||||
|
inherited Destroy;
|
||||||
|
end;
|
||||||
|
{=====}
|
||||||
|
|
||||||
|
function TO32CustomEdit.GetAttachedLabel : TOvcAttachedLabel;
|
||||||
|
begin
|
||||||
|
if not FLabelInfo.Visible then
|
||||||
|
raise Exception.Create(GetOrphStr(SCLabelNotAttached));
|
||||||
|
|
||||||
|
Result := FLabelInfo.ALabel;
|
||||||
|
end;
|
||||||
|
{=====}
|
||||||
|
|
||||||
|
function TO32CustomEdit.GetAbout : string;
|
||||||
|
begin
|
||||||
|
Result := OrVersionStr;
|
||||||
|
end;
|
||||||
|
{=====}
|
||||||
|
|
||||||
|
procedure TO32CustomEdit.LabelAttach(Sender : TObject; Value : Boolean);
|
||||||
|
var
|
||||||
|
{$IFDEF VERSION5}
|
||||||
|
PF : TWinControl;
|
||||||
|
{$ELSE}
|
||||||
|
PF : TForm;
|
||||||
|
{$ENDIF}
|
||||||
|
S :string;
|
||||||
|
begin
|
||||||
|
if csLoading in ComponentState then
|
||||||
|
Exit;
|
||||||
|
|
||||||
|
{$IFDEF VERSION5}
|
||||||
|
PF := GetImmediateParentForm(Self);
|
||||||
|
{$ELSE}
|
||||||
|
PF := TForm(GetParentForm(Self));
|
||||||
|
{$ENDIF}
|
||||||
|
if Value then begin
|
||||||
|
if Assigned(PF) then begin
|
||||||
|
FLabelInfo.ALabel.Free;
|
||||||
|
FLabelInfo.ALabel := TOvcAttachedLabel.CreateEx(PF, Self);
|
||||||
|
FLabelInfo.ALabel.Parent := Parent;
|
||||||
|
|
||||||
|
S := GenerateComponentName(PF, Name + 'Label');
|
||||||
|
FLabelInfo.ALabel.Name := S;
|
||||||
|
FLabelInfo.ALabel.Caption := S;
|
||||||
|
|
||||||
|
FLabelInfo.SetOffsets(0, 0);
|
||||||
|
PositionLabel;
|
||||||
|
FLabelInfo.ALabel.BringToFront;
|
||||||
|
{turn off auto size}
|
||||||
|
TLabel(FLabelInfo.ALabel).AutoSize := False;
|
||||||
|
end;
|
||||||
|
end else begin
|
||||||
|
if Assigned(PF) then begin
|
||||||
|
FLabelInfo.ALabel.Free;
|
||||||
|
FLabelInfo.ALabel := nil;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
{=====}
|
||||||
|
|
||||||
|
procedure TO32CustomEdit.LabelChange(Sender : TObject);
|
||||||
|
begin
|
||||||
|
if not (csLoading in ComponentState) then
|
||||||
|
PositionLabel;
|
||||||
|
end;
|
||||||
|
{=====}
|
||||||
|
|
||||||
|
procedure TO32CustomEdit.Notification(AComponent : TComponent; Operation: TOperation);
|
||||||
|
var
|
||||||
|
{$IFDEF VERSION5}
|
||||||
|
PF : TWinControl;
|
||||||
|
{$ELSE}
|
||||||
|
PF : TForm;
|
||||||
|
{$ENDIF}
|
||||||
|
begin
|
||||||
|
inherited Notification(AComponent, Operation);
|
||||||
|
|
||||||
|
if Operation = opRemove then
|
||||||
|
if Assigned(FLabelInfo) and (AComponent = FLabelInfo.ALabel) then begin
|
||||||
|
{$IFDEF VERSION5}
|
||||||
|
PF := GetImmediateParentForm(Self);
|
||||||
|
{$ELSE}
|
||||||
|
PF := TForm(GetParentForm(Self));
|
||||||
|
{$ENDIF}
|
||||||
|
if Assigned(PF) and not (csDestroying in PF.ComponentState) then begin
|
||||||
|
FLabelInfo.FVisible := False;
|
||||||
|
FLabelInfo.ALabel := nil;
|
||||||
|
end
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
{=====}
|
||||||
|
|
||||||
|
procedure TO32CustomEdit.OrAssignLabel(var Msg : TMessage);
|
||||||
|
begin
|
||||||
|
FLabelInfo.ALabel := TOvcAttachedLabel(Msg.lParam);
|
||||||
|
end;
|
||||||
|
{=====}
|
||||||
|
|
||||||
|
procedure TO32CustomEdit.OrPositionLabel(var Msg : TMessage);
|
||||||
|
const
|
||||||
|
DX : Integer = 0;
|
||||||
|
DY : Integer = 0;
|
||||||
|
begin
|
||||||
|
if FLabelInfo.Visible and Assigned(FLabelInfo.ALabel) and
|
||||||
|
(FLabelInfo.ALabel.Parent <> nil) and
|
||||||
|
not (csLoading in ComponentState) then begin
|
||||||
|
if DefaultLabelPosition = lpTopLeft then begin
|
||||||
|
DX := FLabelInfo.ALabel.Left - Left;
|
||||||
|
DY := FLabelInfo.ALabel.Top + FLabelInfo.ALabel.Height - Top;
|
||||||
|
end else begin
|
||||||
|
DX := FLabelInfo.ALabel.Left - Left;
|
||||||
|
DY := FLabelInfo.ALabel.Top - Top - Height;
|
||||||
|
end;
|
||||||
|
if (DX <> FLabelInfo.OffsetX) or (DY <> FLabelInfo.OffsetY) then
|
||||||
|
PositionLabel;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
{=====}
|
||||||
|
|
||||||
|
procedure TO32CustomEdit.OrRecordLabelPosition(var Msg : TMessage);
|
||||||
|
begin
|
||||||
|
if Assigned(FLabelInfo.ALabel) and (FLabelInfo.ALabel.Parent <> nil) then begin
|
||||||
|
{if the label was cut and then pasted, this will complete the reattachment}
|
||||||
|
FLabelInfo.FVisible := True;
|
||||||
|
|
||||||
|
if DefaultLabelPosition = lpTopLeft then
|
||||||
|
FLabelInfo.SetOffsets(FLabelInfo.ALabel.Left - Left,
|
||||||
|
FLabelInfo.ALabel.Top + FLabelInfo.ALabel.Height - Top)
|
||||||
|
else
|
||||||
|
FLabelInfo.SetOffsets(FLabelInfo.ALabel.Left - Left,
|
||||||
|
FLabelInfo.ALabel.Top - Top - Height);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
{=====}
|
||||||
|
|
||||||
|
procedure TO32CustomEdit.PositionLabel;
|
||||||
|
begin
|
||||||
|
if FLabelInfo.Visible and Assigned(FLabelInfo.ALabel) and
|
||||||
|
(FLabelInfo.ALabel.Parent <> nil) and
|
||||||
|
not (csLoading in ComponentState) then begin
|
||||||
|
|
||||||
|
if DefaultLabelPosition = lpTopLeft then begin
|
||||||
|
FLabelInfo.ALabel.SetBounds(Left + FLabelInfo.OffsetX,
|
||||||
|
FLabelInfo.OffsetY - FLabelInfo.ALabel.Height + Top,
|
||||||
|
FLabelInfo.ALabel.Width, FLabelInfo.ALabel.Height);
|
||||||
|
end else begin
|
||||||
|
FLabelInfo.ALabel.SetBounds(Left + FLabelInfo.OffsetX,
|
||||||
|
FLabelInfo.OffsetY + Top + Height,
|
||||||
|
FLabelInfo.ALabel.Width, FLabelInfo.ALabel.Height);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
{=====}
|
||||||
|
|
||||||
|
procedure TO32CustomEdit.SetBounds(ALeft, ATop, AWidth, AHeight : Integer);
|
||||||
|
begin
|
||||||
|
inherited SetBounds(ALeft, ATop, AWidth, AHeight);
|
||||||
|
|
||||||
|
if not HandleAllocated then
|
||||||
|
Exit;
|
||||||
|
|
||||||
|
if HandleAllocated then
|
||||||
|
PostMessage(Handle, OM_POSITIONLABEL, 0, 0);
|
||||||
|
end;
|
||||||
|
{=====}
|
||||||
|
|
||||||
|
procedure TO32CustomEdit.SetAbout(const Value : string);
|
||||||
|
begin
|
||||||
|
end;
|
||||||
|
|
||||||
|
end.
|
1584
components/orpheus/o32flxed.pas
Normal file
146
components/orpheus/o32intdeq.pas
Normal file
@ -0,0 +1,146 @@
|
|||||||
|
{*********************************************************}
|
||||||
|
{* O32INTDEQ.PAS 4.06 *}
|
||||||
|
{*********************************************************}
|
||||||
|
|
||||||
|
{* ***** BEGIN LICENSE BLOCK ***** *}
|
||||||
|
{* Version: MPL 1.1 *}
|
||||||
|
{* *}
|
||||||
|
{* The contents of this file are subject to the Mozilla Public License *}
|
||||||
|
{* Version 1.1 (the "License"); you may not use this file except in *}
|
||||||
|
{* compliance with the License. You may obtain a copy of the License at *}
|
||||||
|
{* http://www.mozilla.org/MPL/ *}
|
||||||
|
{* *}
|
||||||
|
{* Software distributed under the License is distributed on an "AS IS" basis, *}
|
||||||
|
{* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License *}
|
||||||
|
{* for the specific language governing rights and limitations under the *}
|
||||||
|
{* License. *}
|
||||||
|
{* *}
|
||||||
|
{* The Original Code is TurboPower Orpheus *}
|
||||||
|
{* *}
|
||||||
|
{* The Initial Developer of the Original Code is TurboPower Software *}
|
||||||
|
{* *}
|
||||||
|
{* Portions created by TurboPower Software Inc. are Copyright (C)1995-2002 *}
|
||||||
|
{* TurboPower Software Inc. All Rights Reserved. *}
|
||||||
|
{* *}
|
||||||
|
{* Contributor(s): *}
|
||||||
|
{* *}
|
||||||
|
{* ***** END LICENSE BLOCK ***** *}
|
||||||
|
|
||||||
|
{The following is a modified version of deque code, which was originally written
|
||||||
|
for Algorithms Alfresco. It is copyright(c)2001 by Julian M. Bucknall and is
|
||||||
|
used here with permission.}
|
||||||
|
|
||||||
|
{$I OVC.INC}
|
||||||
|
|
||||||
|
{$B-} {Complete Boolean Evaluation}
|
||||||
|
{$I+} {Input/Output-Checking}
|
||||||
|
{$P+} {Open Parameters}
|
||||||
|
{$T-} {Typed @ Operator}
|
||||||
|
{.W-} {Windows Stack Frame}
|
||||||
|
{$X+} {Extended Syntax}
|
||||||
|
|
||||||
|
unit o32intdeq;
|
||||||
|
{A simple deque class for Orpheus}
|
||||||
|
|
||||||
|
interface
|
||||||
|
|
||||||
|
uses
|
||||||
|
Classes;
|
||||||
|
|
||||||
|
type
|
||||||
|
TO32IntDeque = class
|
||||||
|
protected {private}
|
||||||
|
FList : TList;
|
||||||
|
FHead : integer;
|
||||||
|
FTail : integer;
|
||||||
|
procedure idGrow;
|
||||||
|
public
|
||||||
|
constructor Create(aCapacity : integer);
|
||||||
|
destructor Destroy; override;
|
||||||
|
function IsEmpty : boolean;
|
||||||
|
procedure Enqueue(aValue: integer);
|
||||||
|
procedure Push(aValue: integer);
|
||||||
|
function Pop: integer;
|
||||||
|
end;
|
||||||
|
|
||||||
|
implementation
|
||||||
|
|
||||||
|
uses
|
||||||
|
SysUtils;
|
||||||
|
|
||||||
|
{=== TO32IntDeque ====================================================}
|
||||||
|
constructor TO32IntDeque.Create(aCapacity : integer);
|
||||||
|
begin
|
||||||
|
inherited Create;
|
||||||
|
FList := TList.Create;
|
||||||
|
FList.Count := aCapacity;
|
||||||
|
{let's help out the user of the deque by putting the head and tail
|
||||||
|
pointers in the middle: it's probably more efficient}
|
||||||
|
FHead := aCapacity div 2;
|
||||||
|
FTail := FHead;
|
||||||
|
end;
|
||||||
|
{--------}
|
||||||
|
destructor TO32IntDeque.Destroy;
|
||||||
|
begin
|
||||||
|
FList.Free;
|
||||||
|
inherited Destroy;
|
||||||
|
end;
|
||||||
|
{--------}
|
||||||
|
procedure TO32IntDeque.Enqueue(aValue : integer);
|
||||||
|
begin
|
||||||
|
FList.List^[FTail] := pointer(aValue);
|
||||||
|
inc(FTail);
|
||||||
|
if (FTail = FList.Count) then
|
||||||
|
FTail := 0;
|
||||||
|
if (FTail = FHead) then
|
||||||
|
idGrow;
|
||||||
|
end;
|
||||||
|
{--------}
|
||||||
|
procedure TO32IntDeque.idGrow;
|
||||||
|
var
|
||||||
|
OldCount : integer;
|
||||||
|
i, j : integer;
|
||||||
|
begin
|
||||||
|
{grow the list by 50%}
|
||||||
|
OldCount := FList.Count;
|
||||||
|
FList.Count := (OldCount * 3) div 2;
|
||||||
|
{expand the data into the increased space, maintaining the deque}
|
||||||
|
if (FHead = 0) then
|
||||||
|
FTail := OldCount
|
||||||
|
else begin
|
||||||
|
j := FList.Count;
|
||||||
|
for i := pred(OldCount) downto FHead do begin
|
||||||
|
dec(j);
|
||||||
|
FList.List^[j] := FList.List^[i]
|
||||||
|
end;
|
||||||
|
FHead := j;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
{--------}
|
||||||
|
function TO32IntDeque.IsEmpty : boolean;
|
||||||
|
begin
|
||||||
|
Result := FHead = FTail;
|
||||||
|
end;
|
||||||
|
{--------}
|
||||||
|
procedure TO32IntDeque.Push(aValue : integer);
|
||||||
|
begin
|
||||||
|
if (FHead = 0) then
|
||||||
|
FHead := FList.Count;
|
||||||
|
dec(FHead);
|
||||||
|
FList.List^[FHead] := pointer(aValue);
|
||||||
|
if (FTail = FHead) then
|
||||||
|
idGrow;
|
||||||
|
end;
|
||||||
|
{--------}
|
||||||
|
function TO32IntDeque.Pop : integer;
|
||||||
|
begin
|
||||||
|
if FHead = FTail then
|
||||||
|
raise Exception.Create('Integer deque is empty: cannot pop');
|
||||||
|
Result := integer(FList.List^[FHead]);
|
||||||
|
inc(FHead);
|
||||||
|
if (FHead = FList.Count) then
|
||||||
|
FHead := 0;
|
||||||
|
end;
|
||||||
|
{=== TO32IntDeque - end ==============================================}
|
||||||
|
|
||||||
|
end.
|
195
components/orpheus/o32intlst.pas
Normal file
@ -0,0 +1,195 @@
|
|||||||
|
{*********************************************************}
|
||||||
|
{* O32INTLST.PAS 4.06 *}
|
||||||
|
{*********************************************************}
|
||||||
|
|
||||||
|
{* ***** BEGIN LICENSE BLOCK ***** *}
|
||||||
|
{* Version: MPL 1.1 *}
|
||||||
|
{* *}
|
||||||
|
{* The contents of this file are subject to the Mozilla Public License *}
|
||||||
|
{* Version 1.1 (the "License"); you may not use this file except in *}
|
||||||
|
{* compliance with the License. You may obtain a copy of the License at *}
|
||||||
|
{* http://www.mozilla.org/MPL/ *}
|
||||||
|
{* *}
|
||||||
|
{* Software distributed under the License is distributed on an "AS IS" basis, *}
|
||||||
|
{* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License *}
|
||||||
|
{* for the specific language governing rights and limitations under the *}
|
||||||
|
{* License. *}
|
||||||
|
{* *}
|
||||||
|
{* The Original Code is TurboPower Orpheus *}
|
||||||
|
{* *}
|
||||||
|
{* The Initial Developer of the Original Code is TurboPower Software *}
|
||||||
|
{* *}
|
||||||
|
{* Portions created by TurboPower Software Inc. are Copyright (C)1995-2002 *}
|
||||||
|
{* TurboPower Software Inc. All Rights Reserved. *}
|
||||||
|
{* *}
|
||||||
|
{* Contributor(s): *}
|
||||||
|
{* *}
|
||||||
|
{* ***** END LICENSE BLOCK ***** *}
|
||||||
|
|
||||||
|
//{$APPTYPE GUI}
|
||||||
|
//{$A+,B-,C+,D+,E-,F-,G+,H+,I+,J+,K-,L+,M-,N+,O+,P+,Q-,R-,S-,T-,U-,V+,W-,X+,Y+,Z1}
|
||||||
|
//{$MINSTACKSIZE $00004000}
|
||||||
|
//{$MAXSTACKSIZE $00100000}
|
||||||
|
//{$IMAGEBASE $00400000}
|
||||||
|
|
||||||
|
{The following is a modified version of stack code, which was originally written
|
||||||
|
for Algorithms Alfresco. It is copyright(c)2001 by Julian M. Bucknall and is
|
||||||
|
used here with permission.}
|
||||||
|
|
||||||
|
{$I OVC.INC}
|
||||||
|
|
||||||
|
{$B-} {Complete Boolean Evaluation}
|
||||||
|
{$I+} {Input/Output-Checking}
|
||||||
|
{$P+} {Open Parameters}
|
||||||
|
{$T-} {Typed @ Operator}
|
||||||
|
{.W-} {Windows Stack Frame}
|
||||||
|
{$X+} {Extended Syntax}
|
||||||
|
|
||||||
|
unit o32intlst;
|
||||||
|
{Integer List class for Orpheus.}
|
||||||
|
|
||||||
|
interface
|
||||||
|
|
||||||
|
uses
|
||||||
|
Classes;
|
||||||
|
|
||||||
|
type
|
||||||
|
TO32IntList = class
|
||||||
|
protected {private}
|
||||||
|
FAllowDups : boolean;
|
||||||
|
FCount : integer;
|
||||||
|
FIsSorted : boolean;
|
||||||
|
FList : TList;
|
||||||
|
function ilGetCapacity : integer;
|
||||||
|
function ilGetItem(aInx : integer) : integer;
|
||||||
|
procedure ilSetCapacity(aValue : integer);
|
||||||
|
procedure ilSetCount(aValue : integer);
|
||||||
|
procedure ilSetIsSorted(aValue : boolean);
|
||||||
|
procedure ilSetItem(aInx : integer; aValue : integer);
|
||||||
|
procedure ilSort;
|
||||||
|
public
|
||||||
|
constructor Create;
|
||||||
|
destructor Destroy; override;
|
||||||
|
function Add(aItem : integer) : integer;
|
||||||
|
procedure Clear;
|
||||||
|
procedure Insert(aInx : Integer; aItem : Pointer);
|
||||||
|
property AllowDups : boolean
|
||||||
|
read FAllowDups write FAllowDups;
|
||||||
|
property Capacity : integer
|
||||||
|
read ilGetCapacity write ilSetCapacity;
|
||||||
|
property Count : integer
|
||||||
|
read FCount write ilSetCount;
|
||||||
|
property IsSorted : boolean
|
||||||
|
read FIsSorted write ilSetIsSorted;
|
||||||
|
property Items[aInx : integer] : integer
|
||||||
|
read ilGetItem write ilSetItem; default;
|
||||||
|
end;
|
||||||
|
|
||||||
|
implementation
|
||||||
|
|
||||||
|
uses
|
||||||
|
SysUtils;
|
||||||
|
|
||||||
|
{===== TO32IntList ===================================================}
|
||||||
|
constructor TO32IntList.Create;
|
||||||
|
begin
|
||||||
|
inherited Create;
|
||||||
|
FList := TList.Create;
|
||||||
|
FIsSorted := true;
|
||||||
|
FAllowDups := false;
|
||||||
|
end;
|
||||||
|
{--------}
|
||||||
|
destructor TO32IntList.Destroy;
|
||||||
|
begin
|
||||||
|
FList.Free;
|
||||||
|
inherited Destroy;
|
||||||
|
end;
|
||||||
|
{--------}
|
||||||
|
function TO32IntList.Add(aItem : integer) : integer;
|
||||||
|
var
|
||||||
|
L, R, M : integer;
|
||||||
|
begin
|
||||||
|
if (not IsSorted) or (Count = 0) then
|
||||||
|
Result := FList.Add(pointer(aItem))
|
||||||
|
else begin
|
||||||
|
Result := -1;
|
||||||
|
L := 0;
|
||||||
|
R := pred(Count);
|
||||||
|
while (L <= R) do begin
|
||||||
|
M := (L + R) div 2;
|
||||||
|
if (integer(FList.List^[M]) = aItem) then begin
|
||||||
|
if AllowDups then begin
|
||||||
|
FList.Insert(M, pointer(aItem));
|
||||||
|
Result := M;
|
||||||
|
end;
|
||||||
|
Exit;
|
||||||
|
end;
|
||||||
|
if (integer(FList.List^[M]) < aItem) then
|
||||||
|
L := M + 1
|
||||||
|
else
|
||||||
|
R := M - 1;
|
||||||
|
end;
|
||||||
|
FList.Insert(L, pointer(aItem));
|
||||||
|
Result := L;
|
||||||
|
end;
|
||||||
|
inc(FCount);
|
||||||
|
end;
|
||||||
|
{--------}
|
||||||
|
procedure TO32IntList.Clear;
|
||||||
|
begin
|
||||||
|
FList.Clear;
|
||||||
|
FCount := 0;
|
||||||
|
FIsSorted := true;
|
||||||
|
end;
|
||||||
|
{--------}
|
||||||
|
function TO32IntList.ilGetCapacity : integer;
|
||||||
|
begin
|
||||||
|
Result := FList.Capacity;
|
||||||
|
end;
|
||||||
|
{--------}
|
||||||
|
function TO32IntList.ilGetItem(aInx : integer) : integer;
|
||||||
|
begin
|
||||||
|
Assert((0 <= aInx) and (aInx < Count), 'Index out of bounds');
|
||||||
|
Result := integer(FList.List^[aInx]);
|
||||||
|
end;
|
||||||
|
{--------}
|
||||||
|
procedure TO32IntList.ilSetCapacity(aValue : integer);
|
||||||
|
begin
|
||||||
|
FList.Capacity := aValue;
|
||||||
|
end;
|
||||||
|
{--------}
|
||||||
|
procedure TO32IntList.ilSetCount(aValue : integer);
|
||||||
|
begin
|
||||||
|
FList.Count := aValue;
|
||||||
|
FCount := FList.Count;
|
||||||
|
end;
|
||||||
|
{--------}
|
||||||
|
procedure TO32IntList.ilSetIsSorted(aValue : boolean);
|
||||||
|
begin
|
||||||
|
if (aValue <> FIsSorted) then begin
|
||||||
|
FIsSOrted := aValue;
|
||||||
|
if FIsSorted then
|
||||||
|
ilSort;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
{--------}
|
||||||
|
procedure TO32IntList.ilSetItem(aInx : integer; aValue : integer);
|
||||||
|
begin
|
||||||
|
Assert((0 <= aInx) and (aInx < Count), 'Index out of bounds');
|
||||||
|
FList.List^[aInx] := pointer(aValue);
|
||||||
|
end;
|
||||||
|
{--------}
|
||||||
|
procedure TO32IntList.ilSort;
|
||||||
|
begin
|
||||||
|
Assert(false, 'TO32IntList.ilSort has not been implemented yet');
|
||||||
|
end;
|
||||||
|
{--------}
|
||||||
|
procedure TO32IntList.Insert(aInx : Integer; aItem : Pointer);
|
||||||
|
begin
|
||||||
|
FIsSorted := false;
|
||||||
|
FList.Insert(aInx, pointer(aItem));
|
||||||
|
inc(FCount);
|
||||||
|
end;
|
||||||
|
{===== TO32IntList - end =============================================}
|
||||||
|
|
||||||
|
end.
|
365
components/orpheus/o32ovldr.pas
Normal file
@ -0,0 +1,365 @@
|
|||||||
|
{*********************************************************}
|
||||||
|
{* O32OVLDR.PAS 4.06 *}
|
||||||
|
{*********************************************************}
|
||||||
|
|
||||||
|
{* ***** BEGIN LICENSE BLOCK ***** *}
|
||||||
|
{* Version: MPL 1.1 *}
|
||||||
|
{* *}
|
||||||
|
{* The contents of this file are subject to the Mozilla Public License *}
|
||||||
|
{* Version 1.1 (the "License"); you may not use this file except in *}
|
||||||
|
{* compliance with the License. You may obtain a copy of the License at *}
|
||||||
|
{* http://www.mozilla.org/MPL/ *}
|
||||||
|
{* *}
|
||||||
|
{* Software distributed under the License is distributed on an "AS IS" basis, *}
|
||||||
|
{* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License *}
|
||||||
|
{* for the specific language governing rights and limitations under the *}
|
||||||
|
{* License. *}
|
||||||
|
{* *}
|
||||||
|
{* The Original Code is TurboPower Orpheus *}
|
||||||
|
{* *}
|
||||||
|
{* The Initial Developer of the Original Code is TurboPower Software *}
|
||||||
|
{* *}
|
||||||
|
{* Portions created by TurboPower Software Inc. are Copyright (C)1995-2002 *}
|
||||||
|
{* TurboPower Software Inc. All Rights Reserved. *}
|
||||||
|
{* *}
|
||||||
|
{* Contributor(s): *}
|
||||||
|
{* *}
|
||||||
|
{* ***** END LICENSE BLOCK ***** *}
|
||||||
|
|
||||||
|
unit o32ovldr;
|
||||||
|
{Orpheus Mask Validator}
|
||||||
|
|
||||||
|
interface
|
||||||
|
|
||||||
|
uses
|
||||||
|
Classes, O32VlDtr;
|
||||||
|
|
||||||
|
const
|
||||||
|
OrpheusMaskCount = 17;
|
||||||
|
OrpheusMaskLength = 11;
|
||||||
|
|
||||||
|
{ Sample Orpheus Masks }
|
||||||
|
OrpheusMaskLookup : array [1..OrpheusMaskCount] of string =
|
||||||
|
('XXXXXXXXXX any character',
|
||||||
|
'!!!!!!!!!! any char (upper)',
|
||||||
|
'LLLLLLLLLL any char (lower)',
|
||||||
|
'xxxxxxxxxx any char (mixed)',
|
||||||
|
'aaaaaaaaaa alphas only',
|
||||||
|
'AAAAAAAAAA alphas (upper)',
|
||||||
|
'llllllllll alphas (lower)',
|
||||||
|
'9999999999 0-9',
|
||||||
|
'iiiiiiiiii 0-9, -',
|
||||||
|
'########## 0-9, -, .',
|
||||||
|
'EEEEEEEEEE 0-9, E, -, .',
|
||||||
|
'KKKK Hexadecimal (1F3E) Allows 0-9, A-F, uppercase Alpha characters',
|
||||||
|
'KK Hexadecimal (FF) Allows 0-9, A-F, uppercase Alpha characters',
|
||||||
|
'OOOOOOOOOO 0-7 (octal)',
|
||||||
|
'bbbbbbbbbb 0, 1 (binary)',
|
||||||
|
'B T or F (upper)',
|
||||||
|
'Y Y or N (upper)');
|
||||||
|
|
||||||
|
|
||||||
|
{Validation Error Codes}
|
||||||
|
vecNotAnyOrUpperChar = 1;
|
||||||
|
vecNotAnyOrLowerChar = 2;
|
||||||
|
vecNotAlphaChar = 3;
|
||||||
|
vecNotUpperAlpha = 4;
|
||||||
|
vecNotLowerAlpha = 5;
|
||||||
|
vecNotDS = 6;
|
||||||
|
vecNotDSM = 9;
|
||||||
|
vecNotDSMP = 10;
|
||||||
|
vecNotDSMPE = 11;
|
||||||
|
vecNotHexadecimal = 12;
|
||||||
|
vecNotBinary = 13;
|
||||||
|
vecNotOctal = 14;
|
||||||
|
vecNotTrueFalse = 15;
|
||||||
|
vecNotYesNo = 16;
|
||||||
|
|
||||||
|
type
|
||||||
|
{class - TO32OrMaskValidator}
|
||||||
|
TO32OrMaskValidator = class(TO32BaseValidator)
|
||||||
|
protected {private}
|
||||||
|
FMaskBlank: Char;
|
||||||
|
|
||||||
|
procedure SetInput(const Value: string); override;
|
||||||
|
procedure SetMask(const Value: string); override;
|
||||||
|
function GetValid: Boolean; override;
|
||||||
|
function GetSampleMasks: TStringList; override;
|
||||||
|
function Validate(const Value: string; var ErrorPos: Integer): Boolean;
|
||||||
|
public
|
||||||
|
function IsValid: Boolean; override;
|
||||||
|
property Valid;
|
||||||
|
property Input;
|
||||||
|
published
|
||||||
|
{Properties}
|
||||||
|
property Mask;
|
||||||
|
{Events}
|
||||||
|
property BeforeValidation;
|
||||||
|
property AfterValidation;
|
||||||
|
property OnValidationError;
|
||||||
|
end;
|
||||||
|
|
||||||
|
implementation
|
||||||
|
|
||||||
|
uses
|
||||||
|
SysUtils, OvcData, O32VlReg;
|
||||||
|
|
||||||
|
|
||||||
|
{===== TO32OrMaskValidator ===========================================}
|
||||||
|
|
||||||
|
function TO32OrMaskValidator.GetSampleMasks: TStringList;
|
||||||
|
var
|
||||||
|
I : Integer;
|
||||||
|
begin
|
||||||
|
{ Set the length of the mask portion of the string }
|
||||||
|
FSampleMaskLength := OrpheusMaskLength;
|
||||||
|
|
||||||
|
FSampleMasks.Clear;
|
||||||
|
|
||||||
|
{ Load the string list }
|
||||||
|
for I := 1 to OrpheusMaskCount do
|
||||||
|
FSampleMasks.Add(OrpheusMaskLookup[I]);
|
||||||
|
result := FSampleMasks;
|
||||||
|
end;
|
||||||
|
{=====}
|
||||||
|
|
||||||
|
function TO32OrMaskValidator.GetValid: Boolean;
|
||||||
|
begin
|
||||||
|
result := IsValid;
|
||||||
|
end;
|
||||||
|
{=====}
|
||||||
|
|
||||||
|
function TO32OrMaskValidator.IsValid: Boolean;
|
||||||
|
var
|
||||||
|
ErrorStr: string;
|
||||||
|
ErrorPos: Integer;
|
||||||
|
begin
|
||||||
|
DoBeforeValidation;
|
||||||
|
|
||||||
|
{assume the worst}
|
||||||
|
FValid := false;
|
||||||
|
|
||||||
|
{Set up validation and execute it against the input}
|
||||||
|
FValid := Validate(FInput, ErrorPos);
|
||||||
|
|
||||||
|
DoAfterValidation;
|
||||||
|
|
||||||
|
if not FValid then begin
|
||||||
|
case FErrorCode of
|
||||||
|
vecNotAnyOrUpperChar :
|
||||||
|
ErrorStr := 'Lowercase characters not allowed in position '
|
||||||
|
+ IntToStr(ErrorPos) + '.';
|
||||||
|
vecNotAnyOrLowerChar :
|
||||||
|
ErrorStr := 'Uppercase characters not allowed in position '
|
||||||
|
+ IntToStr(ErrorPos) + '.';
|
||||||
|
vecNotAlphaChar :
|
||||||
|
ErrorStr := 'Non-Alpha characters not allowed in position '
|
||||||
|
+ IntToStr(ErrorPos) + '.';
|
||||||
|
vecNotUpperAlpha :
|
||||||
|
ErrorStr := 'Non-Uppercase Alpha characters not allowed in position '
|
||||||
|
+ IntToStr(ErrorPos) + '.';
|
||||||
|
vecNotLowerAlpha :
|
||||||
|
ErrorStr := 'Non-Lowercase Alpha characters not allowed in position '
|
||||||
|
+ IntToStr(ErrorPos) + '.';
|
||||||
|
vecNotDS :
|
||||||
|
ErrorStr := 'Digits and spaces only allowed in position '
|
||||||
|
+ IntToStr(ErrorPos) + '.';
|
||||||
|
vecNotDSM :
|
||||||
|
ErrorStr := 'Digits, spaces and ''-'' only allowed in position '
|
||||||
|
+ IntToStr(ErrorPos) + '.';
|
||||||
|
vecNotDSMP :
|
||||||
|
ErrorStr := 'Digits, spaces ''-'', and ''.'' only allowed in position '
|
||||||
|
+ IntToStr(ErrorPos) + '.';
|
||||||
|
vecNotDSMPE :
|
||||||
|
ErrorStr := 'Digits, spaces ''-'', ''.'', and ''e/E'' only allowed '
|
||||||
|
+ 'in position ' + IntToStr(ErrorPos) + '.';
|
||||||
|
vecNotHexadecimal :
|
||||||
|
ErrorStr := 'Hexadecimal characters only (0-F) allowed in position '
|
||||||
|
+ IntToStr(ErrorPos) + '.';
|
||||||
|
vecNotBinary :
|
||||||
|
ErrorStr := 'Binary characters only (0, 1, and space) allowed in '
|
||||||
|
+ 'position ' + IntToStr(ErrorPos) + '.';
|
||||||
|
vecNotOctal :
|
||||||
|
ErrorStr := 'Octal characters only (0-7) allowed in position '
|
||||||
|
+ IntToStr(ErrorPos) + '.';
|
||||||
|
vecNotTrueFalse :
|
||||||
|
ErrorStr := 'Only True/false characters (T, t, F, f) allowed in '
|
||||||
|
+ 'position ' + IntToStr(ErrorPos) + '.';
|
||||||
|
vecNotYesNo :
|
||||||
|
ErrorStr := 'Only Yes/No characters (Y, y, N, n) allowed in position '
|
||||||
|
+ IntToStr(ErrorPos) + '.';
|
||||||
|
end;
|
||||||
|
DoOnError(self, 'Invalid match at character position ' + IntToStr(ErrorPos));
|
||||||
|
end;
|
||||||
|
result := FValid;
|
||||||
|
end;
|
||||||
|
{=====}
|
||||||
|
|
||||||
|
procedure TO32OrMaskValidator.SetInput(const Value: string);
|
||||||
|
begin
|
||||||
|
if FInput <> Value then
|
||||||
|
FInput := Value;
|
||||||
|
end;
|
||||||
|
{=====}
|
||||||
|
|
||||||
|
procedure TO32OrMaskValidator.SetMask(const Value: string);
|
||||||
|
begin
|
||||||
|
if FMask <> Value then
|
||||||
|
FMask := Value;
|
||||||
|
end;
|
||||||
|
{=====}
|
||||||
|
|
||||||
|
function TO32OrMaskValidator.Validate(const Value: string;
|
||||||
|
var ErrorPos: Integer): Boolean;
|
||||||
|
var
|
||||||
|
I: Integer;
|
||||||
|
begin
|
||||||
|
ErrorPos := 0;
|
||||||
|
result := true;
|
||||||
|
if Length(Input) > Length(FMask) then begin
|
||||||
|
result := false;
|
||||||
|
ErrorPos := Length(FMask) + 1;
|
||||||
|
exit;
|
||||||
|
end;
|
||||||
|
|
||||||
|
for I := 1 to Length(Input) do begin
|
||||||
|
case FMask[I] of
|
||||||
|
{pmAnyChar : 'X' allows any character}
|
||||||
|
{ do nothing here - All entry is OK.}
|
||||||
|
|
||||||
|
pmForceUpper : {'!' allows any uppercase character}
|
||||||
|
if (ord(Input[I]) in [97..122]{lowercase characters}) then begin
|
||||||
|
result := false;
|
||||||
|
ErrorPos := I;
|
||||||
|
FErrorCode := vecNotAnyOrUpperChar;
|
||||||
|
exit;
|
||||||
|
end;
|
||||||
|
|
||||||
|
pmForceLower : {'L' allows any lowercase character}
|
||||||
|
if (ord(Input[I]) in [65..90]{uppercase characters}) then begin
|
||||||
|
result := false;
|
||||||
|
ErrorPos := I;
|
||||||
|
FErrorCode := vecNotAnyOrLowerChar;
|
||||||
|
exit;
|
||||||
|
end;
|
||||||
|
|
||||||
|
{pmForceMixed : 'x' allows any character. Just like 'X'}
|
||||||
|
{ do nothing here - All entry is ok, no way to force mixed case without }
|
||||||
|
{ back tracking }
|
||||||
|
|
||||||
|
pmAlpha : {'a' allows alphas only}
|
||||||
|
if not (ord(Input[I]) in [65..90, 97..122]{any alpha}) then begin
|
||||||
|
result := false;
|
||||||
|
ErrorPos := I;
|
||||||
|
FErrorCode := vecNotAlphaChar;
|
||||||
|
exit;
|
||||||
|
end;
|
||||||
|
|
||||||
|
pmUpperAlpha : {'A' allows uppercase alphas only}
|
||||||
|
if not (ord(Input[I]) in [65..90]{uppercase alpha}) then begin
|
||||||
|
result := false;
|
||||||
|
ErrorPos := I;
|
||||||
|
FErrorCode := vecNotUpperAlpha;
|
||||||
|
exit;
|
||||||
|
end;
|
||||||
|
|
||||||
|
pmLowerAlpha : {'l' allows lowercase alphas only}
|
||||||
|
if not (ord(Input[I]) in [97..122]{lowercase alpha}) then begin
|
||||||
|
result := false;
|
||||||
|
ErrorPos := I;
|
||||||
|
FErrorCode := vecNotLowerAlpha;
|
||||||
|
exit;
|
||||||
|
end;
|
||||||
|
|
||||||
|
pmPositive : {'9' allows numbers and spaces only}
|
||||||
|
if not (ord(Input[I]) in [48..57, 32]) then begin
|
||||||
|
result := false;
|
||||||
|
ErrorPos := I;
|
||||||
|
FErrorCode := vecNotDS;
|
||||||
|
exit;
|
||||||
|
end;
|
||||||
|
|
||||||
|
pmWhole : {'i' allows numbers, spaces, minus}
|
||||||
|
if not (ord(Input[I]) in [48..57, 32, 45]) then
|
||||||
|
begin
|
||||||
|
result := false;
|
||||||
|
ErrorPos := I;
|
||||||
|
FErrorCode := vecNotDSM;
|
||||||
|
exit;
|
||||||
|
end;
|
||||||
|
|
||||||
|
pmDecimal : {'#' allows numbers, spaces, minus, period}
|
||||||
|
if not (ord(Input[I]) in [48..57, 32, 45, 46])
|
||||||
|
then begin
|
||||||
|
result := false;
|
||||||
|
ErrorPos := I;
|
||||||
|
FErrorCode := vecNotDSMP;
|
||||||
|
exit;
|
||||||
|
end;
|
||||||
|
|
||||||
|
pmScientific : {'E' allows numbers, spaces, minus, period, 'e'}
|
||||||
|
if not (ord(Input[I]) in [48..57, 32, 45, 46, 101, 69])
|
||||||
|
then begin
|
||||||
|
result := false;
|
||||||
|
ErrorPos := I;
|
||||||
|
FErrorCode := vecNotDSMPE;
|
||||||
|
exit;
|
||||||
|
end;
|
||||||
|
|
||||||
|
pmHexadecimal : {'K' allows 0-9 and uppercase A-F}
|
||||||
|
if not (ord(Input[I]) in [48..57, 65..70])
|
||||||
|
then begin
|
||||||
|
result := false;
|
||||||
|
ErrorPos := I;
|
||||||
|
FErrorCode := vecNotHexadecimal;
|
||||||
|
exit;
|
||||||
|
end;
|
||||||
|
|
||||||
|
pmBinary : {'b' allows 0-1, space}
|
||||||
|
if not (ord(Input[I]) in [48, 49, 32])
|
||||||
|
then begin
|
||||||
|
result := false;
|
||||||
|
ErrorPos := I;
|
||||||
|
FErrorCode := vecNotBinary;
|
||||||
|
exit;
|
||||||
|
end;
|
||||||
|
|
||||||
|
pmOctal : {'O' allows 0-7, space}
|
||||||
|
if not (ord(Input[I]) in [48..55, 32])
|
||||||
|
then begin
|
||||||
|
result := false;
|
||||||
|
ErrorPos := I;
|
||||||
|
FErrorCode := vecNotOctal;
|
||||||
|
exit;
|
||||||
|
end;
|
||||||
|
|
||||||
|
pmTrueFalse : {'B' allows T, t, F, f}
|
||||||
|
if not (ord(Input[I]) in [84, 116, 70, 102])
|
||||||
|
then begin
|
||||||
|
result := false;
|
||||||
|
ErrorPos := I;
|
||||||
|
FErrorCode := vecNotTrueFalse;
|
||||||
|
exit;
|
||||||
|
end;
|
||||||
|
|
||||||
|
pmYesNo : {'Y' allows Y, y, N, n}
|
||||||
|
if not (ord(Input[I]) in [89, 121, 78, 110])
|
||||||
|
then begin
|
||||||
|
result := false;
|
||||||
|
ErrorPos := I;
|
||||||
|
FErrorCode := vecNotYesNo;
|
||||||
|
exit;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
initialization
|
||||||
|
RegisterValidator(TO32OrMaskValidator);
|
||||||
|
|
||||||
|
finalization
|
||||||
|
UnRegisterValidator(TO32OrMaskValidator);
|
||||||
|
|
||||||
|
end.
|
||||||
|
|
446
components/orpheus/o32pvldr.pas
Normal file
@ -0,0 +1,446 @@
|
|||||||
|
{*********************************************************}
|
||||||
|
{* O32PVLDR.PAS 4.06 *}
|
||||||
|
{*********************************************************}
|
||||||
|
|
||||||
|
{* ***** BEGIN LICENSE BLOCK ***** *}
|
||||||
|
{* Version: MPL 1.1 *}
|
||||||
|
{* *}
|
||||||
|
{* The contents of this file are subject to the Mozilla Public License *}
|
||||||
|
{* Version 1.1 (the "License"); you may not use this file except in *}
|
||||||
|
{* compliance with the License. You may obtain a copy of the License at *}
|
||||||
|
{* http://www.mozilla.org/MPL/ *}
|
||||||
|
{* *}
|
||||||
|
{* Software distributed under the License is distributed on an "AS IS" basis, *}
|
||||||
|
{* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License *}
|
||||||
|
{* for the specific language governing rights and limitations under the *}
|
||||||
|
{* License. *}
|
||||||
|
{* *}
|
||||||
|
{* The Original Code is TurboPower Orpheus *}
|
||||||
|
{* *}
|
||||||
|
{* The Initial Developer of the Original Code is TurboPower Software *}
|
||||||
|
{* *}
|
||||||
|
{* Portions created by TurboPower Software Inc. are Copyright (C)1995-2002 *}
|
||||||
|
{* TurboPower Software Inc. All Rights Reserved. *}
|
||||||
|
{* *}
|
||||||
|
{* Contributor(s): *}
|
||||||
|
{* *}
|
||||||
|
{* ***** END LICENSE BLOCK ***** *}
|
||||||
|
|
||||||
|
{$I OVC.INC} {-Defines}
|
||||||
|
|
||||||
|
unit o32pvldr;
|
||||||
|
{Paradox Mask Validator}
|
||||||
|
|
||||||
|
interface
|
||||||
|
|
||||||
|
uses
|
||||||
|
{$IFNDEF LCL} Windows, {$ELSE} LclIntf, MyMisc, {$ENDIF} O32Vldtr, Classes;
|
||||||
|
|
||||||
|
const
|
||||||
|
ParadoxMaskCount = 8;
|
||||||
|
ParadoxMaskLength = 25;
|
||||||
|
|
||||||
|
{Sample Paradox Masks}
|
||||||
|
ParadoxMaskLookup : array [1..ParadoxMaskCount] of string =
|
||||||
|
('!\(999\)000-0000;1;_ Phone (415)555-1212',
|
||||||
|
'!99999;1;_ Extension 15450',
|
||||||
|
'000\-00\-0000;1;_ Social Security 555-55-5555',
|
||||||
|
'00000;1;_ Short Zip Code 90504',
|
||||||
|
'00000\-9999;1;_ Long Zip Code 90504-0000',
|
||||||
|
'!99/99/00;1;_ Date 06/27/01',
|
||||||
|
'!90:00:00>LL;1;_ Long Time 09:05:15PM',
|
||||||
|
'!90:00;1;_ Short Time 13:45');
|
||||||
|
|
||||||
|
type
|
||||||
|
{class - TO32ParadoxValidator}
|
||||||
|
TO32ParadoxValidator = class(TO32BaseValidator)
|
||||||
|
protected {private}
|
||||||
|
FMaskBlank: Char;
|
||||||
|
|
||||||
|
procedure SetInput(const Value: string); override;
|
||||||
|
procedure SetMask(const Value: string); override;
|
||||||
|
function GetValid: Boolean; override;
|
||||||
|
function GetSampleMasks: TStringList; override;
|
||||||
|
function Validate(const Value: string; var Pos: Integer): Boolean;
|
||||||
|
function DoValidateChar(NewChar: Char;
|
||||||
|
MaskOffset: Integer): Boolean;
|
||||||
|
function ValidateChar(NewChar: Char;
|
||||||
|
Offset: Integer): Boolean;
|
||||||
|
function FindLiteralChar(MaskOffset: Integer; InChar: Char): Integer;
|
||||||
|
public
|
||||||
|
constructor Create(AOwner: TComponent); override;
|
||||||
|
function IsValid: Boolean; override;
|
||||||
|
property Valid;
|
||||||
|
property Input;
|
||||||
|
published
|
||||||
|
{Properties}
|
||||||
|
property Mask;
|
||||||
|
{Events}
|
||||||
|
property BeforeValidation;
|
||||||
|
property AfterValidation;
|
||||||
|
property OnValidationError;
|
||||||
|
end;
|
||||||
|
|
||||||
|
implementation
|
||||||
|
|
||||||
|
uses
|
||||||
|
{$IFNDEF LCL} Mask, {$IFDEF VERSION6} MaskUtils, {$ENDIF} {$ELSE} MaskEdit, {$ENDIF}
|
||||||
|
SysUtils, O32VlReg;
|
||||||
|
|
||||||
|
// Note commented out IFNDEF in order to use these functions with LCL.
|
||||||
|
// This means this unit can't be compiled by Delphi 5 and earlier.
|
||||||
|
//{$IFNDEF VERSION6}
|
||||||
|
{ These are declared in the implementation section of the VCL unit Mask.pas, }
|
||||||
|
{ so I had to copy them here so that I could use it. Delphi 6 has made them }
|
||||||
|
{ available by moving them to MaskUtils.pas and making them globally }
|
||||||
|
{ available }
|
||||||
|
function MaskGetCharType(const EditMask: string;
|
||||||
|
MaskOffset: Integer): TMaskCharType;
|
||||||
|
var
|
||||||
|
MaskChar: Char;
|
||||||
|
begin
|
||||||
|
Result := mcLiteral;
|
||||||
|
MaskChar := #0;
|
||||||
|
if MaskOffset <= Length(EditMask) then
|
||||||
|
MaskChar := EditMask[MaskOffset];
|
||||||
|
if MaskOffset > Length(EditMask) then
|
||||||
|
Result := mcNone
|
||||||
|
|
||||||
|
else if ByteType(EditMask, MaskOffset) <> mbSingleByte then
|
||||||
|
Result := mcLiteral
|
||||||
|
|
||||||
|
else if (MaskOffset > 1) and (EditMask[MaskOffset - 1] = mDirLiteral) and
|
||||||
|
(ByteType(EditMask, MaskOffset - 1) = mbSingleByte) and
|
||||||
|
not ((MaskOffset > 2) and (EditMask[MaskOffset - 2] = mDirLiteral) and
|
||||||
|
(ByteType(EditMask, MaskOffset - 2) = mbSingleByte)) then
|
||||||
|
Result := mcLiteral
|
||||||
|
|
||||||
|
else if (MaskChar = MaskFieldSeparator) and
|
||||||
|
(Length(EditMask) >= 4) and
|
||||||
|
(MaskOffset > Length(EditMask) - 4) then
|
||||||
|
Result := mcFieldSeparator
|
||||||
|
|
||||||
|
else if (Length(EditMask) >= 4) and
|
||||||
|
(MaskOffset > (Length(EditMask) - 4)) and
|
||||||
|
(EditMask[MaskOffset - 1] = MaskFieldSeparator) and
|
||||||
|
not ((MaskOffset > 2) and (EditMask[MaskOffset - 2] = mDirLiteral) and
|
||||||
|
(ByteType(EditMask, MaskOffset - 2) <> mbTrailByte)) then
|
||||||
|
Result := mcField
|
||||||
|
|
||||||
|
else if MaskChar in [mMskTimeSeparator, mMskDateSeparator] then
|
||||||
|
Result := mcIntlLiteral
|
||||||
|
|
||||||
|
else if MaskChar in [mDirReverse, mDirUpperCase, mDirLowerCase,
|
||||||
|
mDirLiteral] then
|
||||||
|
Result := mcDirective
|
||||||
|
|
||||||
|
else if MaskChar in [mMskAlphaOpt, mMskAlphaNumOpt, mMskAsciiOpt,
|
||||||
|
mMskNumSymOpt, mMskNumericOpt] then
|
||||||
|
Result := mcMaskOpt
|
||||||
|
|
||||||
|
else if MaskChar in [mMskAlpha, mMskAlphaNum, mMskAscii, mMskNumeric] then
|
||||||
|
Result := mcMask;
|
||||||
|
end;
|
||||||
|
{=====}
|
||||||
|
|
||||||
|
function MaskOffsetToOffset(const EditMask: String; MaskOffset: Integer): Integer;
|
||||||
|
var
|
||||||
|
I: Integer;
|
||||||
|
CType: TMaskCharType;
|
||||||
|
begin
|
||||||
|
Result := 0;
|
||||||
|
for I := 1 to MaskOffset do
|
||||||
|
begin
|
||||||
|
CType := MaskGetCharType(EditMask, I);
|
||||||
|
if not (CType in [mcDirective, mcField, mcFieldSeparator]) then
|
||||||
|
Inc(Result);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
{=====}
|
||||||
|
|
||||||
|
function OffsetToMaskOffset(const EditMask: string; Offset: Integer): Integer;
|
||||||
|
var
|
||||||
|
I: Integer;
|
||||||
|
Count: Integer;
|
||||||
|
MaxChars: Integer;
|
||||||
|
begin
|
||||||
|
MaxChars := MaskOffsetToOffset(EditMask, Length(EditMask));
|
||||||
|
if Offset > MaxChars then
|
||||||
|
begin
|
||||||
|
Result := -1;
|
||||||
|
Exit;
|
||||||
|
end;
|
||||||
|
|
||||||
|
Result := 0;
|
||||||
|
Count := Offset;
|
||||||
|
for I := 1 to Length(EditMask) do
|
||||||
|
begin
|
||||||
|
if not (mcDirective = MaskGetCharType(EditMask, I)) then begin
|
||||||
|
Dec(Count);
|
||||||
|
if Count < 0 then
|
||||||
|
Exit;
|
||||||
|
end;
|
||||||
|
Inc(Result);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
{=====}
|
||||||
|
|
||||||
|
function MaskIntlLiteralToChar(IChar: Char): Char;
|
||||||
|
begin
|
||||||
|
Result := IChar;
|
||||||
|
case IChar of
|
||||||
|
mMskTimeSeparator: Result := TimeSeparator;
|
||||||
|
mMskDateSeparator: Result := DateSeparator;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
{=====}
|
||||||
|
|
||||||
|
function MaskGetCurrentDirectives(const EditMask: string;
|
||||||
|
MaskOffset: Integer): TMaskDirectives;
|
||||||
|
var
|
||||||
|
I: Integer;
|
||||||
|
MaskChar: Char;
|
||||||
|
begin
|
||||||
|
Result := [];
|
||||||
|
for I := 1 to Length(EditMask) do
|
||||||
|
begin
|
||||||
|
MaskChar := EditMask[I];
|
||||||
|
if (MaskChar = mDirReverse) then
|
||||||
|
Include(Result, mdReverseDir)
|
||||||
|
else if (MaskChar = mDirUpperCase) and (I < MaskOffset) then
|
||||||
|
begin
|
||||||
|
Exclude(Result, mdLowerCase);
|
||||||
|
if not ((I > 1) and (EditMask[I-1] = mDirLowerCase)) then
|
||||||
|
Include(Result, mdUpperCase);
|
||||||
|
end
|
||||||
|
else if (MaskChar = mDirLowerCase) and (I < MaskOffset) then
|
||||||
|
begin
|
||||||
|
Exclude(Result, mdUpperCase);
|
||||||
|
Include(Result, mdLowerCase);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
if MaskGetCharType(EditMask, MaskOffset) = mcLiteral then
|
||||||
|
Include(Result, mdLiteralChar);
|
||||||
|
end;
|
||||||
|
//{$ENDIF}
|
||||||
|
|
||||||
|
{===== TO32ParadoxValidator ==========================================}
|
||||||
|
|
||||||
|
constructor TO32ParadoxValidator.Create(AOwner: TComponent);
|
||||||
|
begin
|
||||||
|
inherited;
|
||||||
|
FMaskBlank := DefaultBlank;
|
||||||
|
end;
|
||||||
|
{=====}
|
||||||
|
|
||||||
|
function TO32ParadoxValidator.GetValid: Boolean;
|
||||||
|
begin
|
||||||
|
result := IsValid;
|
||||||
|
end;
|
||||||
|
{=====}
|
||||||
|
|
||||||
|
function TO32ParadoxValidator.GetSampleMasks: TStringList;
|
||||||
|
var
|
||||||
|
I : Integer;
|
||||||
|
begin
|
||||||
|
{ Set the length of the mask portion of the string }
|
||||||
|
FSampleMaskLength := ParadoxMaskLength;
|
||||||
|
|
||||||
|
FSampleMasks.Clear;
|
||||||
|
|
||||||
|
{ Load the string list }
|
||||||
|
for I := 1 to ParadoxMaskCount do
|
||||||
|
FSampleMasks.Add(ParadoxMaskLookup[I]);
|
||||||
|
result := FSampleMasks;
|
||||||
|
end;
|
||||||
|
{=====}
|
||||||
|
|
||||||
|
function TO32ParadoxValidator.IsValid: Boolean;
|
||||||
|
var
|
||||||
|
ErrorPos: Integer;
|
||||||
|
begin
|
||||||
|
DoBeforeValidation;
|
||||||
|
|
||||||
|
{assume the worst}
|
||||||
|
FValid := false;
|
||||||
|
|
||||||
|
{Set up validation and execute it against the input}
|
||||||
|
FValid := Validate(FInput, ErrorPos);
|
||||||
|
|
||||||
|
DoAfterValidation;
|
||||||
|
|
||||||
|
if not FValid then begin
|
||||||
|
DoOnError(self, 'Validation Error Encountered at string position '
|
||||||
|
+ IntToStr(ErrorPos));
|
||||||
|
end;
|
||||||
|
|
||||||
|
result := FValid;
|
||||||
|
end;
|
||||||
|
{=====}
|
||||||
|
|
||||||
|
procedure TO32ParadoxValidator.SetInput(const Value: string);
|
||||||
|
begin
|
||||||
|
if FInput <> Value then
|
||||||
|
FInput := Value;
|
||||||
|
end;
|
||||||
|
{=====}
|
||||||
|
|
||||||
|
procedure TO32ParadoxValidator.SetMask(const Value: string);
|
||||||
|
begin
|
||||||
|
if FMask <> Value then
|
||||||
|
FMask := Value;
|
||||||
|
end;
|
||||||
|
{=====}
|
||||||
|
|
||||||
|
function TO32ParadoxValidator.Validate(const Value: string; var Pos: Integer): Boolean;
|
||||||
|
var
|
||||||
|
I : Integer;
|
||||||
|
begin
|
||||||
|
result := true;
|
||||||
|
Pos := 0;
|
||||||
|
for I := 1 to Length(Value) do begin
|
||||||
|
if not ValidateChar(Value[I], I) then begin
|
||||||
|
result := false;
|
||||||
|
Pos := I;
|
||||||
|
Exit;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
{=====}
|
||||||
|
|
||||||
|
function TO32ParadoxValidator.ValidateChar(NewChar: Char;
|
||||||
|
Offset: Integer): Boolean;
|
||||||
|
var
|
||||||
|
MaskOffset: Integer;
|
||||||
|
begin
|
||||||
|
Result := True;
|
||||||
|
if FMask <> '' then
|
||||||
|
begin
|
||||||
|
Result := False;
|
||||||
|
MaskOffset := OffsetToMaskOffset(FMask, Offset);
|
||||||
|
if MaskOffset >= 0 then
|
||||||
|
begin
|
||||||
|
Result := DoValidateChar(NewChar, MaskOffset);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
{=====}
|
||||||
|
|
||||||
|
function TO32ParadoxValidator.FindLiteralChar(MaskOffset: Integer;
|
||||||
|
InChar: Char): Integer;
|
||||||
|
var
|
||||||
|
CType: TMaskCharType;
|
||||||
|
LitChar: Char;
|
||||||
|
begin
|
||||||
|
Result := -1;
|
||||||
|
while MaskOffset < Length(Mask) do
|
||||||
|
begin
|
||||||
|
Inc(MaskOffset);
|
||||||
|
CType := MaskGetCharType(Mask, MaskOffset);
|
||||||
|
if CType in [mcLiteral, mcIntlLiteral] then
|
||||||
|
begin
|
||||||
|
LitChar := Mask[MaskOffset];
|
||||||
|
if CType = mcIntlLiteral then
|
||||||
|
LitChar := MaskIntlLiteralToChar(LitChar);
|
||||||
|
if LitChar = InChar then
|
||||||
|
Result := MaskOffset;
|
||||||
|
Exit;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
{=====}
|
||||||
|
|
||||||
|
function TO32ParadoxValidator.DoValidateChar(NewChar: Char;
|
||||||
|
MaskOffset: Integer): Boolean;
|
||||||
|
var
|
||||||
|
Dir: TMaskDirectives;
|
||||||
|
Str: string;
|
||||||
|
CType: TMaskCharType;
|
||||||
|
|
||||||
|
function IsKatakana(const Chr: Byte): Boolean;
|
||||||
|
begin
|
||||||
|
Result := (SysLocale.PriLangID = LANG_JAPANESE) and (Chr in [$A1..$DF]);
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TestChar(NewChar: Char): Boolean;
|
||||||
|
var
|
||||||
|
Offset: Integer;
|
||||||
|
begin
|
||||||
|
Offset := MaskOffsetToOffset(FMask, MaskOffset);
|
||||||
|
Result := not ((MaskOffset < Length(FMask)) and
|
||||||
|
(UpCase(FMask[MaskOffset]) = UpCase(Mask[MaskOffset+1]))) or
|
||||||
|
(ByteType(FMask, Offset) = mbTrailByte) or
|
||||||
|
(ByteType(FMask, Offset+1) = mbLeadByte);
|
||||||
|
end;
|
||||||
|
|
||||||
|
begin
|
||||||
|
Result := True;
|
||||||
|
CType := MaskGetCharType(FMask, MaskOffset);
|
||||||
|
if not (CType in [mcLiteral, mcIntlLiteral]) then begin
|
||||||
|
Dir := MaskGetCurrentDirectives(FMask, MaskOffset);
|
||||||
|
case FMask[MaskOffset] of
|
||||||
|
mMskNumeric, mMskNumericOpt:
|
||||||
|
begin
|
||||||
|
if not ((NewChar >= '0') and (NewChar <= '9')) then
|
||||||
|
Result := False;
|
||||||
|
end;
|
||||||
|
mMskNumSymOpt:
|
||||||
|
begin
|
||||||
|
if not (((NewChar >= '0') and (NewChar <= '9')) or
|
||||||
|
(NewChar = ' ') or(NewChar = '+') or(NewChar = '-')) then
|
||||||
|
Result := False;
|
||||||
|
end;
|
||||||
|
mMskAscii, mMskAsciiOpt:
|
||||||
|
begin
|
||||||
|
if (NewChar in LeadBytes) and TestChar(NewChar) then
|
||||||
|
begin
|
||||||
|
Result := False;
|
||||||
|
Exit;
|
||||||
|
end;
|
||||||
|
if IsCharAlpha(NewChar) then
|
||||||
|
begin
|
||||||
|
Str := ' ';
|
||||||
|
Str[1] := NewChar;
|
||||||
|
if (mdUpperCase in Dir) then
|
||||||
|
Str := AnsiUpperCase(Str)
|
||||||
|
else if mdLowerCase in Dir then
|
||||||
|
Str := AnsiLowerCase(Str);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
mMskAlpha, mMskAlphaOpt, mMskAlphaNum, mMskAlphaNumOpt:
|
||||||
|
begin
|
||||||
|
if (NewChar in LeadBytes) then
|
||||||
|
begin
|
||||||
|
if TestChar(NewChar) then
|
||||||
|
Result := False;
|
||||||
|
Exit;
|
||||||
|
end;
|
||||||
|
Str := ' ';
|
||||||
|
Str[1] := NewChar;
|
||||||
|
if IsKatakana(Byte(NewChar)) then
|
||||||
|
Exit;
|
||||||
|
if not IsCharAlpha(NewChar) then
|
||||||
|
begin
|
||||||
|
Result := False;
|
||||||
|
if ((FMask[MaskOffset] = mMskAlphaNum) or
|
||||||
|
(FMask[MaskOffset] = mMskAlphaNumOpt)) and
|
||||||
|
(IsCharAlphaNumeric(NewChar)) then
|
||||||
|
Result := True;
|
||||||
|
end
|
||||||
|
else if mdUpperCase in Dir then
|
||||||
|
Str := AnsiUpperCase(Str)
|
||||||
|
else if mdLowerCase in Dir then
|
||||||
|
Str := AnsiLowerCase(Str);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
initialization
|
||||||
|
RegisterValidator(TO32ParadoxValidator);
|
||||||
|
|
||||||
|
finalization
|
||||||
|
UnRegisterValidator(TO32ParadoxValidator);
|
||||||
|
|
||||||
|
end.
|
||||||
|
|
1063
components/orpheus/o32rxngn.pas
Normal file
294
components/orpheus/o32rxvld.pas
Normal file
@ -0,0 +1,294 @@
|
|||||||
|
{*********************************************************}
|
||||||
|
{* O32RXVLD.PAS 4.06 *}
|
||||||
|
{*********************************************************}
|
||||||
|
|
||||||
|
{* ***** BEGIN LICENSE BLOCK ***** *}
|
||||||
|
{* Version: MPL 1.1 *}
|
||||||
|
{* *}
|
||||||
|
{* The contents of this file are subject to the Mozilla Public License *}
|
||||||
|
{* Version 1.1 (the "License"); you may not use this file except in *}
|
||||||
|
{* compliance with the License. You may obtain a copy of the License at *}
|
||||||
|
{* http://www.mozilla.org/MPL/ *}
|
||||||
|
{* *}
|
||||||
|
{* Software distributed under the License is distributed on an "AS IS" basis, *}
|
||||||
|
{* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License *}
|
||||||
|
{* for the specific language governing rights and limitations under the *}
|
||||||
|
{* License. *}
|
||||||
|
{* *}
|
||||||
|
{* The Original Code is TurboPower Orpheus *}
|
||||||
|
{* *}
|
||||||
|
{* The Initial Developer of the Original Code is TurboPower Software *}
|
||||||
|
{* *}
|
||||||
|
{* Portions created by TurboPower Software Inc. are Copyright (C)1995-2002 *}
|
||||||
|
{* TurboPower Software Inc. All Rights Reserved. *}
|
||||||
|
{* *}
|
||||||
|
{* Contributor(s): *}
|
||||||
|
{* *}
|
||||||
|
{* ***** END LICENSE BLOCK ***** *}
|
||||||
|
|
||||||
|
{$I OVC.INC}
|
||||||
|
|
||||||
|
{$B-} {Complete Boolean Evaluation}
|
||||||
|
{$I+} {Input/Output-Checking}
|
||||||
|
{$P+} {Open Parameters}
|
||||||
|
{$T-} {Typed @ Operator}
|
||||||
|
{.W-} {Windows Stack Frame}
|
||||||
|
{$X+} {Extended Syntax}
|
||||||
|
|
||||||
|
unit o32rxvld;
|
||||||
|
{Unit for the Orpheus RegEx Validator}
|
||||||
|
|
||||||
|
interface
|
||||||
|
|
||||||
|
uses Classes, O32Vldtr, O32RxNgn, SysUtils;
|
||||||
|
|
||||||
|
const
|
||||||
|
RXMaskCount = 13;
|
||||||
|
RXMaskLength = 80;
|
||||||
|
|
||||||
|
{Sample Regular Expressions for the Regex validator Property editor...}
|
||||||
|
RXMaskLookup : array [1..RXMaskCount] of string =
|
||||||
|
('.+ 1 or more of any characters allowed. Minimum of 1 character required. Note: This is the default behavior. No expression is needed.',
|
||||||
|
'.* Any number of any character allowed. Note: Although This expression allows an empty string, The RegexEngine will fail an empty string.',
|
||||||
|
'(1[012]|[1-9]):[0-5][0-9] (am|pm) Time of day: Standard AM/PM time display (9:17 am) or (12:30 pm)',
|
||||||
|
'(1[012]|[1-9]):[0-5][0-9]:[0-5][0-9] (am|pm) Time of day: Standard AM/PM time diplay with seconds. (9:17:22 am)',
|
||||||
|
'(([01]?[0-9])|(2[0-3])):[0-5][0-9] Time of day: 24 hour clock (15:22).',
|
||||||
|
'(([01]?[0-9])|(2[0-3])):[0-5][0-9]:[0-5][0-9] Time of day: 24 hour clock with seconds (15:22:07).',
|
||||||
|
'(\(?[1-9][0-9][0-9]\)? )?[1-9][0-9][0-9]\-[0-9][0-9][0-9][0-9] Telephone Number: Optional area-code with optional parenthesis',
|
||||||
|
'(0?[1-9]|1[012])(\\|/|\-)([012]?[1-9]|[123]0|31)(\\|/|\-)([123][0-9])?[0-9][0-9] Date: (mm\dd\yy) or (mm\dd\yyyy) formats. Also accepts / and - separators. Note: Only covers years from 1000-3999',
|
||||||
|
'(y(es)?)|(no?) Boolean: Y, y, N, n, Yes, yes, No or no',
|
||||||
|
'(t(rue)?)|(f(alse)?) Boolean: T, t, F, f, True, False, true or false',
|
||||||
|
'([0-9]|[A-F])+ Hexadecimal: Allows any number of characters in the range 0-9 and A-F',
|
||||||
|
'[0-7]+ Octal: Allows any number of characters in the range 0-7.',
|
||||||
|
'[01]+ Binary:Allows any number of binary characters (0 and 1).');
|
||||||
|
|
||||||
|
{Error Codes}
|
||||||
|
EC_NO_ERROR = 0;
|
||||||
|
EC_INVALID_EXPR = 1;
|
||||||
|
EC_INVALID_INPUT = 2;
|
||||||
|
EC_NO_MATCH = 3;
|
||||||
|
|
||||||
|
type
|
||||||
|
{class - TO32RegExValidator}
|
||||||
|
TO32RegExValidator = class(TO32BaseValidator)
|
||||||
|
protected {private}
|
||||||
|
FLogging : Boolean; {Log validator parsing?}
|
||||||
|
FLogFile : String; {Logging file name}
|
||||||
|
FRegexEngine : TO32RegExEngine; {Regex engine used by the validator}
|
||||||
|
FExprErrorPos : Integer; {Error position in the Regex string}
|
||||||
|
FExprErrorCode : TO32RegexError; {Regex string error code}
|
||||||
|
FIgnoreCase : Boolean; {Case sensitive matching}
|
||||||
|
procedure SetIgnoreCase(const Value: Boolean);
|
||||||
|
procedure SetLogging(const Value: Boolean);
|
||||||
|
procedure SetLogFile(const Value: String);
|
||||||
|
procedure SetMask(const Value: String); override;
|
||||||
|
function GetValid: Boolean; override;
|
||||||
|
function GetSampleMasks: TStringList; override;
|
||||||
|
procedure SetInput(const Value: string); override;
|
||||||
|
function CheckExpression(var ErrorPos: Integer): Boolean;
|
||||||
|
public
|
||||||
|
constructor Create(AOwner: TComponent); override;
|
||||||
|
destructor Destroy; override;
|
||||||
|
function IsValid: Boolean; override;
|
||||||
|
function GetExprError: String;
|
||||||
|
property Valid;
|
||||||
|
property ExprErrorPos: Integer read FExprErrorPos write FExprErrorPos;
|
||||||
|
published
|
||||||
|
property Input;
|
||||||
|
{ Surfaced the Mask property as "Expression" for the Regex validator
|
||||||
|
Left Mask exposed as public for automated use such as the ValidatorPool}
|
||||||
|
property Expression: string read FMask write SetMask stored true;
|
||||||
|
property Logging: Boolean read FLogging write SetLogging
|
||||||
|
default False;
|
||||||
|
property LogFile: String read FLogFile write SetLogFile;
|
||||||
|
property IgnoreCase: Boolean read FIgnoreCase write SetIgnoreCase stored true
|
||||||
|
default True;
|
||||||
|
{Events}
|
||||||
|
property BeforeValidation;
|
||||||
|
property AfterValidation;
|
||||||
|
property OnValidationError;
|
||||||
|
end;
|
||||||
|
|
||||||
|
implementation
|
||||||
|
|
||||||
|
uses
|
||||||
|
O32VlReg;
|
||||||
|
|
||||||
|
{=== TO32RegExValidator ==============================================}
|
||||||
|
constructor TO32RegExValidator.Create(AOwner: TComponent);
|
||||||
|
begin
|
||||||
|
inherited Create(AOwner);
|
||||||
|
|
||||||
|
FLogging := false;
|
||||||
|
FLogFile := 'parse.log';
|
||||||
|
FIgnoreCase := true;
|
||||||
|
|
||||||
|
FRegexEngine := TO32RegExEngine.Create('');
|
||||||
|
FRegexEngine.Logging := FLogging;
|
||||||
|
FRegexEngine.LogFile := FLogFile;
|
||||||
|
FRegexEngine.IgnoreCase := FIgnoreCase;
|
||||||
|
end;
|
||||||
|
{=====}
|
||||||
|
|
||||||
|
destructor TO32RegExValidator.Destroy;
|
||||||
|
begin
|
||||||
|
FRegexEngine.Free;
|
||||||
|
inherited Destroy;
|
||||||
|
end;
|
||||||
|
{=====}
|
||||||
|
|
||||||
|
function TO32RegExValidator.GetSampleMasks: TStringList;
|
||||||
|
var
|
||||||
|
I : Integer;
|
||||||
|
begin
|
||||||
|
{ Set the length of the mask portion of the string }
|
||||||
|
FSampleMaskLength := RXMaskLength;
|
||||||
|
|
||||||
|
FSampleMasks.Clear;
|
||||||
|
|
||||||
|
{ Load the string list }
|
||||||
|
for I := 1 to RXMaskCount do
|
||||||
|
FSampleMasks.Add(RXMaskLookup[I]);
|
||||||
|
result := FSampleMasks;
|
||||||
|
end;
|
||||||
|
{=====}
|
||||||
|
|
||||||
|
procedure TO32RegExValidator.SetMask(const Value: String);
|
||||||
|
var
|
||||||
|
OldExpression: String;
|
||||||
|
begin
|
||||||
|
OldExpression := FMask;
|
||||||
|
FMask := Value;
|
||||||
|
if not CheckExpression(FExprErrorPos) then
|
||||||
|
FMask := OldExpression;
|
||||||
|
end;
|
||||||
|
{=====}
|
||||||
|
|
||||||
|
procedure TO32RegExValidator.SetInput(const Value: string);
|
||||||
|
begin
|
||||||
|
if FInput <> Value then
|
||||||
|
FInput := Value;
|
||||||
|
end;
|
||||||
|
{=====}
|
||||||
|
|
||||||
|
function TO32RegExValidator.CheckExpression(var ErrorPos: Integer): Boolean;
|
||||||
|
begin
|
||||||
|
if (FMask <> '') then begin
|
||||||
|
FRegexEngine.RegexString := FMask;
|
||||||
|
if not FRegexEngine.Parse(FExprErrorPos, FExprErrorCode) then begin
|
||||||
|
result := false;
|
||||||
|
FErrorCode := EC_INVALID_EXPR;
|
||||||
|
DoOnError(self, GetExprError);
|
||||||
|
end else
|
||||||
|
result := true;
|
||||||
|
end else begin
|
||||||
|
{Allow the user to initialize the Validator with an empty string}
|
||||||
|
result := true;
|
||||||
|
ErrorPos := 0;
|
||||||
|
FExprErrorPos := 0;
|
||||||
|
FErrorCode := EC_NO_ERROR;
|
||||||
|
FExprErrorCode := recNone;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
{=====}
|
||||||
|
|
||||||
|
function TO32RegExValidator.GetValid: Boolean;
|
||||||
|
begin
|
||||||
|
result := IsValid;
|
||||||
|
end;
|
||||||
|
{=====}
|
||||||
|
|
||||||
|
function TO32RegExValidator.IsValid: Boolean;
|
||||||
|
var
|
||||||
|
RegExStr: String;
|
||||||
|
begin
|
||||||
|
DoBeforeValidation;
|
||||||
|
|
||||||
|
{assume the worst}
|
||||||
|
FValid := false;
|
||||||
|
|
||||||
|
{Create a copy of the Expression and then enclose it in anchor operators so
|
||||||
|
that the RegexEngine only matches the whole string...}
|
||||||
|
RegExStr := FMask;
|
||||||
|
{Check for Anchor operator ^}
|
||||||
|
if (Pos('^', RegExStr) <> 1) then
|
||||||
|
Insert('^', RegExStr, 1);
|
||||||
|
{Check for Anchor operator $}
|
||||||
|
if (Pos('$', RegExStr) <> Length(RegExStr)) then
|
||||||
|
RegexStr := RegExStr + '$';
|
||||||
|
|
||||||
|
{Pass the RegexStr into the RegexEngine}
|
||||||
|
FRegexEngine.RegexString := RegExStr;
|
||||||
|
|
||||||
|
if (RegExStr = '') then begin
|
||||||
|
FErrorCode := EC_INVALID_EXPR;
|
||||||
|
FValid := false;
|
||||||
|
end else if (FInput = '') then begin
|
||||||
|
FErrorCode := EC_INVALID_INPUT;
|
||||||
|
FValid := false;
|
||||||
|
end else begin
|
||||||
|
if (FRegexEngine.MatchString(FInput) = 1) then begin
|
||||||
|
FValid := true;
|
||||||
|
FErrorCode := 0;
|
||||||
|
end else begin
|
||||||
|
FValid := false;
|
||||||
|
FErrorCode := EC_NO_MATCH;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
result := FValid;
|
||||||
|
|
||||||
|
DoAfterValidation
|
||||||
|
end;
|
||||||
|
{=====}
|
||||||
|
|
||||||
|
procedure TO32RegExValidator.SetLogging(const Value: Boolean);
|
||||||
|
begin
|
||||||
|
if (FLogging <> Value) then begin
|
||||||
|
FLogging := Value;
|
||||||
|
FRegexEngine.Logging := FLogging;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
{=====}
|
||||||
|
|
||||||
|
procedure TO32RegExValidator.SetIgnoreCase(const Value: Boolean);
|
||||||
|
begin
|
||||||
|
if (FIgnoreCase <> Value) then begin
|
||||||
|
FIgnoreCase := Value;
|
||||||
|
FRegexEngine.IgnoreCase := FIgnoreCase;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
{=====}
|
||||||
|
|
||||||
|
procedure TO32RegExValidator.SetLogFile(const Value: String);
|
||||||
|
begin
|
||||||
|
if (FLogFile <> Value) then begin
|
||||||
|
FLogFile := Value;
|
||||||
|
FRegexEngine.LogFile := FLogFile;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
{=====}
|
||||||
|
|
||||||
|
function TO32RegExValidator.GetExprError: String;
|
||||||
|
begin
|
||||||
|
case FExprErrorCode of
|
||||||
|
recNone : result := '';
|
||||||
|
recSuddenEnd : result := 'Incomplete Expression';
|
||||||
|
recMetaChar : result := 'Read a metacharacter where there should have'
|
||||||
|
+ ' been a normal character';
|
||||||
|
recNoCloseParen : result := 'Missing closing parenthesis';
|
||||||
|
recExtraChars : result := 'Unrecognizable text at the end of the'
|
||||||
|
+ ' expression';
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
{=====}
|
||||||
|
|
||||||
|
initialization
|
||||||
|
|
||||||
|
RegisterValidator(TO32RegexValidator);
|
||||||
|
|
||||||
|
finalization
|
||||||
|
|
||||||
|
UnRegisterValidator(TO32RegexValidator);
|
||||||
|
|
||||||
|
end.
|
253
components/orpheus/o32sr.inc
Normal file
@ -0,0 +1,253 @@
|
|||||||
|
{*********************************************************}
|
||||||
|
{* O32SR.INC *}
|
||||||
|
{*********************************************************}
|
||||||
|
|
||||||
|
{* ***** BEGIN LICENSE BLOCK ***** *}
|
||||||
|
{* Version: MPL 1.1 *}
|
||||||
|
{* *}
|
||||||
|
{* The contents of this file are subject to the Mozilla Public License *}
|
||||||
|
{* Version 1.1 (the "License"); you may not use this file except in *}
|
||||||
|
{* compliance with the License. You may obtain a copy of the License at *}
|
||||||
|
{* http://www.mozilla.org/MPL/ *}
|
||||||
|
{* *}
|
||||||
|
{* Software distributed under the License is distributed on an "AS IS" basis, *}
|
||||||
|
{* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License *}
|
||||||
|
{* for the specific language governing rights and limitations under the *}
|
||||||
|
{* License. *}
|
||||||
|
{* *}
|
||||||
|
{* The Original Code is TurboPower Orpheus *}
|
||||||
|
{* *}
|
||||||
|
{* The Initial Developer of the Original Code is TurboPower Software *}
|
||||||
|
{* *}
|
||||||
|
{* Portions created by TurboPower Software Inc. are Copyright (C)1995-2002 *}
|
||||||
|
{* TurboPower Software Inc. All Rights Reserved. *}
|
||||||
|
{* *}
|
||||||
|
{* Contributor(s): *}
|
||||||
|
{* *}
|
||||||
|
{* ***** END LICENSE BLOCK ***** *}
|
||||||
|
|
||||||
|
{Orhpheus String Resources - To create language specific versions of Orpheus
|
||||||
|
controls, translate these strings to the desired language and re-compile.}
|
||||||
|
|
||||||
|
resourcestring
|
||||||
|
RSNoneStr = '(None)';
|
||||||
|
RSccUser = 'ccUser';
|
||||||
|
RSccUserNum = 'ccUser%d';
|
||||||
|
RSDeleteTable = 'Delete the %s table?';
|
||||||
|
RSRenameTable = 'Rename Table';
|
||||||
|
RSEnterTableName = 'Enter new table name for %s:';
|
||||||
|
RSNewTable = 'NewTable';
|
||||||
|
RSDefaultTableName = 'Default';
|
||||||
|
RSWordStarTableName = 'WordStar';
|
||||||
|
RSGridTableName = 'Grid';
|
||||||
|
RSUnknownTable = '(Unknown)';
|
||||||
|
RSDefaultEntryErrorText = 'Entry Error';
|
||||||
|
RSGotItemWarning = '%d. *** Warning *** OnGetItem not assigned!';
|
||||||
|
RSSampleListItem = '%d. - Sample virtual list box item';
|
||||||
|
RSAlphaString = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
|
||||||
|
RSTallLowChars = 'Wy';
|
||||||
|
RSDefault = 'Default';
|
||||||
|
RSYes = 'Y';
|
||||||
|
RSNo = 'N';
|
||||||
|
RSTrue = 'T';
|
||||||
|
RSFalse = 'F';
|
||||||
|
RSDescending = ' - Desc';
|
||||||
|
RSDefaultIndex = '(Default)';
|
||||||
|
RSDuplicateCommand = 'Duplicate command found while adding a new command to the table';
|
||||||
|
RSTableNotFound = 'Command table not found or command table index out of range';
|
||||||
|
RSNotDoneYet = 'This feature is not implemented at this time';
|
||||||
|
RSNoControllerAssigned = 'No Controller assigned';
|
||||||
|
RSCantCreateCommandTable = 'Unable to create command table';
|
||||||
|
RSCantDelete = 'Can''t delete this table. Must have at least one command table defined';
|
||||||
|
RSInvalidKeySequence = 'Invalid or no key sequence entered';
|
||||||
|
RSNotWordStarCommands = 'Keys entered are not WordStar style commands';
|
||||||
|
RSNoCommandSelected = 'No command selected';
|
||||||
|
RSDuplicateKeySequence = 'Duplicate key sequence';
|
||||||
|
RSRangeError = 'Value is not within required range';
|
||||||
|
RSInvalidNumber = 'Value is not valid for this field type';
|
||||||
|
RSRequiredField = 'A value is required in this field';
|
||||||
|
RSInvalidDate = 'Value is not a valid date';
|
||||||
|
RSInvalidTime = 'Value is not a valid time';
|
||||||
|
RSBlanksInField = 'This field should contain no blanks';
|
||||||
|
RSPartialEntry = 'This field should be either empty or completely full';
|
||||||
|
RSRegionTooLarge = 'Region is too large (> 64K)';
|
||||||
|
RSOutOfMemoryForCopy = 'Could not allocate memory for clipboard copy';
|
||||||
|
RSInvalidParamValue = 'Parameter value is invalid';
|
||||||
|
RSNoTimersAvail = 'No Window''s timers are available';
|
||||||
|
RSTooManyEvents = 'Too many trigger events';
|
||||||
|
RSBadTriggerHandle = 'Invalid trigger handle';
|
||||||
|
RSOnSelectNotAssigned = 'OnSelect event is not assigned';
|
||||||
|
RSInvalidPageIndex = 'Invalid page index value';
|
||||||
|
RSInvalidDataType = 'Invalid data type for this field';
|
||||||
|
RSInvalidTabFont = 'Invalid font. Non toTop oriented tabs require a True-Type font';
|
||||||
|
RSInvalidLabelFont = 'Invalid font. Rotated text requires a True-Type font';
|
||||||
|
RSOutOfMemory = 'insufficient memory for requested operation';
|
||||||
|
RSTooManyParas = 'Current operation will exceed the maximum number of allowed paragraphs';
|
||||||
|
RSCannotJoin = 'Cannot join paragraphs. New paragraph size exceeds maximum paragraph size';
|
||||||
|
RSTooManyBytes = 'Current operation will exceed the maximum text size';
|
||||||
|
RSParaTooLong = 'Current operation will exceed the maximum paragraph size';
|
||||||
|
RSUnknownError = 'Unknown Error condition';
|
||||||
|
RSInvalidPictureMask = 'Invalid picture mask: %s';
|
||||||
|
RSInvalidRange = 'Invalid range. Enter a value between (%d) and (%d)';
|
||||||
|
RSInvalidRealRange = 'Invalid range. Enter a value between (-1.7e+38) and (+1.7e+38)';
|
||||||
|
RSInvalidExtendedRange = 'Invalid range. Enter a value between (-1.1e+4932) and (+1.1e+4932)';
|
||||||
|
RSInvalidDoubleRange = 'Invalid range. Enter a value between (-1.7e+308) and (+1.7e+308)';
|
||||||
|
RSInvalidSingleRange = 'Invalid range. Enter a value between (-3.4e+38) and (+3.4e+38)';
|
||||||
|
RSInvalidCompRange = 'Invalid range. Enter a value between (-9.2e+18) and (+9.2e+18)';
|
||||||
|
RSInvalidDateRange = 'Invalid date range. Enter a value using ''%s'' as the format';
|
||||||
|
RSInvalidTimeRange = 'Invalid time range. Enter a value using ''%s'' as the format';
|
||||||
|
RSInvalidRangeValue = 'Invalid range value';
|
||||||
|
RSInvalidMinMaxValue = 'Invalid value - Maximum must always be greater than Minimum';
|
||||||
|
RSRangeNotSupported = 'Range limits for the currently selected data type are not supported';
|
||||||
|
RSInvalidLineOrParaIndex = 'Invalid line or paragraph index';
|
||||||
|
RSNonFixedFont = 'Invalid font assignment. Font must be a fixed font';
|
||||||
|
RSInvalidFontParam = 'Invalid font assignemnt. Font must be a TFont or TOvcFixedFont';
|
||||||
|
RSInvalidLineOrColumn = 'Invalid line or column';
|
||||||
|
RSSAEGeneral = 'Unknown sparse array error';
|
||||||
|
RSSAEAtMaxSize = 'Sparse array is at the maximum size';
|
||||||
|
RSInvalidXMLFile = 'Invalid XMLStore File Format';
|
||||||
|
RSUnterminatedElement = 'Improperly terminated element';
|
||||||
|
RSBadColorConstant = 'Invalid color constant';
|
||||||
|
RSBadColorValue = 'Invalid color value';
|
||||||
|
RSSAEOutOfBounds = 'Index is out of bounds for sparse array';
|
||||||
|
RSInvalidFieldType = 'Requested field type is not supported';
|
||||||
|
RSBadAlarmHandle = 'Invalid alarm handle';
|
||||||
|
RSOnIsSelectedNotAssigned = 'OnIsSelected event is not assigned';
|
||||||
|
RSInvalidDateForMask = 'Invalid date value for picture mask. (Year is outside the Epoch range)';
|
||||||
|
RSViewerIOError = 'Viewer triggered I/O error %d';
|
||||||
|
RSViewerFileNotFound = 'Viewer: file not found';
|
||||||
|
RSViewerPathNotFound = 'Viewer: path not found or invalid file name';
|
||||||
|
RSViewerTooManyOpenFiles = 'Viewer: too many open files';
|
||||||
|
RSViewerFileAccessDenied = 'Viewer: file access denied';
|
||||||
|
RSControlAttached = 'This control is already attached to %s';
|
||||||
|
RSCantEdit = 'Could not enter edit mode';
|
||||||
|
RSChildTableError = 'Data Source can not be a child table. Component %s has a MasterSource defined';
|
||||||
|
RSNoTableAttached = 'DataSource must be attached to a TTable (or compatible) source';
|
||||||
|
RSNoCollection = 'No collection exists in the owner component';
|
||||||
|
RSNotOvcDescendant = 'Owner must be a TOvcComponent or TOvcCustomComponent descendant';
|
||||||
|
RSItemIncompatible = 'Item incompatible with collection';
|
||||||
|
RSLabelNotAttached = 'Label not attached';
|
||||||
|
RSClassNotSet = 'Item class not set';
|
||||||
|
RSCollectionNotFound = 'No collection found for this type';
|
||||||
|
RSDayConvertError = 'Error converting day';
|
||||||
|
RSMonthConvertError = 'Error converting month';
|
||||||
|
RSMonthNameConvertError = 'Error converting month name';
|
||||||
|
RSYearConvertError = 'Error converting year';
|
||||||
|
RSInvalidDay = 'Invalid day';
|
||||||
|
RSInvalidMonth = 'Invalid month';
|
||||||
|
RSInvalidMonthName = 'Invalid month name';
|
||||||
|
RSInvalidYear = 'Invalid year';
|
||||||
|
RSDayRequired = 'Day is required';
|
||||||
|
RSMonthRequired = 'Month is required';
|
||||||
|
RSYearRequired = 'Year is required';
|
||||||
|
RSOwnerMustBeForm = 'Owner must be a TForm or descendant';
|
||||||
|
RSTimeConvertError = 'Error converting time value';
|
||||||
|
RSCancelQuery = 'Cancel and lose changes?';
|
||||||
|
RSNoPagesAssigned = 'No notebook pages assigned';
|
||||||
|
RSRestoreMI = '&Restore';
|
||||||
|
RSCutMI = 'Cu&t';
|
||||||
|
RSCopyMI = '&Copy';
|
||||||
|
RSPasteMI = '&Paste';
|
||||||
|
RSDeleteMI = '&Delete';
|
||||||
|
RSSelectAllMI = 'Select &All';
|
||||||
|
RSTableRowOutOfBounds = 'Table row out of bounds';
|
||||||
|
RSTableMaxRows = 'Table max rows error';
|
||||||
|
RSTableMaxColumns = 'Table max columns error';
|
||||||
|
RSTableGeneral = 'Table general error';
|
||||||
|
RSTableToManyColumns = 'Too many columns';
|
||||||
|
RSTableInvalidFieldIndex = 'Invalid field index';
|
||||||
|
RSTableHeaderNotAssigned = 'Header not assigned';
|
||||||
|
RSTableInvalidHeaderCell = 'Invalid header cell';
|
||||||
|
RSCalcBack = 'Back';
|
||||||
|
RSCalcMC = 'MC';
|
||||||
|
RSCalcMR = 'MR';
|
||||||
|
RSCalcMS = 'MS';
|
||||||
|
RSCalcMPlus = 'M+';
|
||||||
|
RSCalcMMinus = 'M-';
|
||||||
|
RSCalcCT = 'CT';
|
||||||
|
RSCalcCE = 'CE';
|
||||||
|
RSCalcC = 'C';
|
||||||
|
RSCalcSqrt = 'Sqrt';
|
||||||
|
RSCalNext = 'NEXT';
|
||||||
|
RSCalLast = 'LAST';
|
||||||
|
RSCalPrev = 'PREV';
|
||||||
|
RSCalFirst = 'FIRST';
|
||||||
|
RSCal1st = '1ST';
|
||||||
|
RSCalSecond = 'SECOND';
|
||||||
|
RSCal2nd = '2ND';
|
||||||
|
RSCalThird = 'THIRD';
|
||||||
|
RSCal3rd = '3RD';
|
||||||
|
RSCalFourth = 'FOURTH';
|
||||||
|
RSCal4th = '4TH';
|
||||||
|
RSCalFinal = 'FINAL';
|
||||||
|
RSCalBOM = 'BOM';
|
||||||
|
RSCalBegin = 'BEGIN';
|
||||||
|
RSCalEOM = 'EOM';
|
||||||
|
RSCalEnd = 'END';
|
||||||
|
RSCalYesterday = 'YESTERDAY';
|
||||||
|
RSCalToday = 'TODAY';
|
||||||
|
RSCalTomorrow = 'TOMORROW';
|
||||||
|
RSEditingSections = 'Header Sections Editor';
|
||||||
|
RSEditingItems = 'Folder Items Editor';
|
||||||
|
RSEditingFolders = 'Folder Editor';
|
||||||
|
RSEditingPages = 'Tab Pages Editor';
|
||||||
|
RSEditingImages = 'Image List Editor';
|
||||||
|
RSSectionBaseName = 'Section';
|
||||||
|
RSItemBaseName = 'Item';
|
||||||
|
RSFolderBaseName = 'Folder';
|
||||||
|
RSPageBaseName = 'Page';
|
||||||
|
RSImageBaseName = 'Image';
|
||||||
|
RSHoursName = 'Hours';
|
||||||
|
RSMinutesName = 'Minutes';
|
||||||
|
RSSecondsName = 'Seconds';
|
||||||
|
RSCloseCaption = 'Close';
|
||||||
|
RSViewFieldNotFound = 'The view field %s was not found';
|
||||||
|
RSCantResolveField = 'Unable to resolve view field %s';
|
||||||
|
RSItemAlreadyExists = 'Can''t add item %p - it already exists in the index';
|
||||||
|
RSAlreadyInTempMode = 'The view is already in temporary index mode';
|
||||||
|
RSItemNotFound = 'Specified report view data item %p was not found';
|
||||||
|
RSUpdatePending = 'This report view operation is invalid while updates are pending';
|
||||||
|
RSOnCompareNotAssigned = 'OnCompareFields not assigned';
|
||||||
|
RSOnFilterNotAssigned = 'OnFilter not assigned';
|
||||||
|
RSGetAsFloatNotAssigned = 'GetAsFloat not assigned';
|
||||||
|
RSNotInTempMode = 'Report view is not in temporary index mode';
|
||||||
|
RSItemNotInIndex = 'The specified data item (%p) is not in the index';
|
||||||
|
RSNoActiveView = 'No active view';
|
||||||
|
RSItemIsNotGroup = 'Item at line %d is not a group';
|
||||||
|
RSNotMultiSelect = 'This report view operation is only allowed when multiselect is enabled';
|
||||||
|
RSLineNoOutOfRange = 'Invalid index %d';
|
||||||
|
RSUnknownView = 'Unknown view: %s';
|
||||||
|
RSOnKeySearchNotAssigned = 'The OnKeySearch event is not assigned';
|
||||||
|
RSOnEnumNotAssigned = 'The OnEnum event is not assigned';
|
||||||
|
RSOnEnumSelectedNA = 'OnEnumSelected not assigned';
|
||||||
|
RSNoMenuAssigned = 'No menu item assigned';
|
||||||
|
RSNoAnchorAssigned = 'No anchor item assigned';
|
||||||
|
RSInvalidParameter = 'Invalid parameter: mpAnchor';
|
||||||
|
RSInvalidOperation = 'Invalid operation: Call AddSplit for split menus';
|
||||||
|
RSFormUseOnly = 'This component can only be used on forms';
|
||||||
|
RSColorBlack = 'Black';
|
||||||
|
RSColorMaroon = 'Maroon';
|
||||||
|
RSColorGreen = 'Green';
|
||||||
|
RSColorOlive = 'Olive';
|
||||||
|
RSColorNavy = 'Navy';
|
||||||
|
RSColorPurple = 'Purple';
|
||||||
|
RSColorTeal = 'Teal';
|
||||||
|
RSColorGray = 'Gray';
|
||||||
|
RSColorSilver = 'Silver';
|
||||||
|
RSColorRed = 'Red';
|
||||||
|
RSColorLime = 'Lime';
|
||||||
|
RSColorYellow = 'Yellow';
|
||||||
|
RSColorBlue = 'Blue';
|
||||||
|
RSColorFuchsia = 'Fuchsia';
|
||||||
|
RSColorAqua = 'Aqua';
|
||||||
|
RSColorWhite = 'White';
|
||||||
|
RSColorLightGray = 'Light Gray';
|
||||||
|
RSColorMediumGray = 'Medium Gray';
|
||||||
|
RSColorDarkGray = 'Dark Gray';
|
||||||
|
RSColorMoneyGreen = 'Money Green';
|
||||||
|
RSColorSkyBlue = 'Sky Blue';
|
||||||
|
RSColorCream = 'Cream';
|
||||||
|
|
||||||
|
{end - Index based resource strings}
|
||||||
|
|
||||||
|
|
661
components/orpheus/o32sr.pas
Normal file
@ -0,0 +1,661 @@
|
|||||||
|
{*********************************************************}
|
||||||
|
{* O32SR.PAS 4.06 *}
|
||||||
|
{*********************************************************}
|
||||||
|
|
||||||
|
{* ***** BEGIN LICENSE BLOCK ***** *}
|
||||||
|
{* Version: MPL 1.1 *}
|
||||||
|
{* *}
|
||||||
|
{* The contents of this file are subject to the Mozilla Public License *}
|
||||||
|
{* Version 1.1 (the "License"); you may not use this file except in *}
|
||||||
|
{* compliance with the License. You may obtain a copy of the License at *}
|
||||||
|
{* http://www.mozilla.org/MPL/ *}
|
||||||
|
{* *}
|
||||||
|
{* Software distributed under the License is distributed on an "AS IS" basis, *}
|
||||||
|
{* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License *}
|
||||||
|
{* for the specific language governing rights and limitations under the *}
|
||||||
|
{* License. *}
|
||||||
|
{* *}
|
||||||
|
{* The Original Code is TurboPower Orpheus *}
|
||||||
|
{* *}
|
||||||
|
{* The Initial Developer of the Original Code is TurboPower Software *}
|
||||||
|
{* *}
|
||||||
|
{* Portions created by TurboPower Software Inc. are Copyright (C)1995-2002 *}
|
||||||
|
{* TurboPower Software Inc. All Rights Reserved. *}
|
||||||
|
{* *}
|
||||||
|
{* Contributor(s): *}
|
||||||
|
{* *}
|
||||||
|
{* ***** END LICENSE BLOCK ***** *}
|
||||||
|
|
||||||
|
(* Replaces the old String Resource Manager from Orpheus versions 3.x and
|
||||||
|
below. The string resource is broken into 3 parts.
|
||||||
|
Part 1: The actual string resources contained in O32***RS.inc
|
||||||
|
(O32ENGRS.inc for English). (Translate these strings and define the
|
||||||
|
language below to create new language versions of Orpheus.)
|
||||||
|
Part 2: The index constants defined in OvcConst.pas.
|
||||||
|
Part 3: The cross reference array (SrMsgNumLookup) used to convert an
|
||||||
|
index into the corresponding string.
|
||||||
|
It is very important that the cross reference array be kept in numerical
|
||||||
|
order. The lookup is performed by a binary search and if any of the items
|
||||||
|
are out of order, the lookup will fail some or all strings. *)
|
||||||
|
|
||||||
|
{$I OVC.INC}
|
||||||
|
|
||||||
|
{$B-} {Complete Boolean Evaluation}
|
||||||
|
{$I+} {Input/Output-Checking}
|
||||||
|
{$P+} {Open Parameters}
|
||||||
|
{$T-} {Typed @ Operator}
|
||||||
|
{.W-} {Windows Stack Frame}
|
||||||
|
{$X+} {Extended Syntax}
|
||||||
|
|
||||||
|
unit o32sr;
|
||||||
|
{- Orpheus String Resources
|
||||||
|
Replaces the String Resource Manager from the olden days...}
|
||||||
|
|
||||||
|
interface
|
||||||
|
|
||||||
|
uses
|
||||||
|
ovcconst;
|
||||||
|
|
||||||
|
{$I O32SR.inc}
|
||||||
|
|
||||||
|
resourcestring
|
||||||
|
|
||||||
|
{Orpheus Internal and Design-time resource strings...}
|
||||||
|
|
||||||
|
{!!!! - These should not be translated as they are used internally - !!!!}
|
||||||
|
{!!!! - See O32SR.INC for the user visible resource strings - !!!!}
|
||||||
|
|
||||||
|
{Navigation Commands}
|
||||||
|
ccNoneStr = 'ccNone';
|
||||||
|
ccBackStr = 'ccBack';
|
||||||
|
ccBotOfPageStr = 'ccBotOfPage';
|
||||||
|
ccBotRightCellStr = 'ccBotRightCell';
|
||||||
|
ccCompleteDateStr = 'ccCompleteDate';
|
||||||
|
ccCompleteTimeStr = 'ccCompleteTime';
|
||||||
|
ccCopyStr = 'ccCopy';
|
||||||
|
ccCtrlCharStr = 'ccCtrlChar';
|
||||||
|
ccCutStr = 'ccCut';
|
||||||
|
ccDecStr = 'ccDec';
|
||||||
|
ccDelStr = 'ccDel';
|
||||||
|
ccDelBolStr = 'ccDelBol';
|
||||||
|
ccDelEolStr = 'ccDelEol';
|
||||||
|
ccDelLineStr = 'ccDelLine';
|
||||||
|
ccDelWordStr = 'ccDelWord';
|
||||||
|
ccDownStr = 'ccDown';
|
||||||
|
ccEndStr = 'ccEnd';
|
||||||
|
ccExtendDownStr = 'ccExtendDown';
|
||||||
|
ccExtendEndStr = 'ccExtendEnd';
|
||||||
|
ccExtendHomeStr = 'ccExtendHome';
|
||||||
|
ccExtendLeftStr = 'ccExtendLeft';
|
||||||
|
ccExtendPgDnStr = 'ccExtendPgDn';
|
||||||
|
ccExtendPgUpStr = 'ccExtendPgUp';
|
||||||
|
ccExtendRightStr = 'ccExtendRight';
|
||||||
|
ccExtendUpStr = 'ccExtendUp';
|
||||||
|
ccExtBotOfPageStr = 'ccExtBotOfPage';
|
||||||
|
ccExtFirstPageStr = 'ccExtFirstPage';
|
||||||
|
ccExtLastPageStr = 'ccExtLastPage';
|
||||||
|
ccExtTopOfPageStr = 'ccExtTopOfPage';
|
||||||
|
ccExtWordLeftStr = 'ccExtWordLeft';
|
||||||
|
ccExtWordRightStr = 'ccExtWordRight';
|
||||||
|
ccFirstPageStr = 'ccFirstPage';
|
||||||
|
ccGotoMarker0Str = 'ccGotoMarker0';
|
||||||
|
ccGotoMarker1Str = 'ccGotoMarker1';
|
||||||
|
ccGotoMarker2Str = 'ccGotoMarker2';
|
||||||
|
ccGotoMarker3Str = 'ccGotoMarker3';
|
||||||
|
ccGotoMarker4Str = 'ccGotoMarker4';
|
||||||
|
ccGotoMarker5Str = 'ccGotoMarker5';
|
||||||
|
ccGotoMarker6Str = 'ccGotoMarker6';
|
||||||
|
ccGotoMarker7Str = 'ccGotoMarker7';
|
||||||
|
ccGotoMarker8Str = 'ccGotoMarker8';
|
||||||
|
ccGotoMarker9Str = 'ccGotoMarker9';
|
||||||
|
ccHomeStr = 'ccHome';
|
||||||
|
ccIncStr = 'ccInc';
|
||||||
|
ccInsStr = 'ccIns';
|
||||||
|
ccLastPageStr = 'ccLastPage';
|
||||||
|
ccLeftStr = 'ccLeft';
|
||||||
|
ccNewLineStr = 'ccNewLine';
|
||||||
|
ccNextPageStr = 'ccNextPage';
|
||||||
|
ccPageLeftStr = 'ccPageLeft';
|
||||||
|
ccPageRightStr = 'ccPageRight';
|
||||||
|
ccPasteStr = 'ccPaste';
|
||||||
|
ccPrevPageStr = 'ccPrevPage';
|
||||||
|
ccRedoStr = 'ccRedo';
|
||||||
|
ccRestoreStr = 'ccRestore';
|
||||||
|
ccRightStr = 'ccRight';
|
||||||
|
ccScrollDownStr = 'ccScrollDown';
|
||||||
|
ccScrollUpStr = 'ccScrollUp';
|
||||||
|
ccSetMarker0Str = 'ccSetMarker0';
|
||||||
|
ccSetMarker1Str = 'ccSetMarker1';
|
||||||
|
ccSetMarker2Str = 'ccSetMarker2';
|
||||||
|
ccSetMarker3Str = 'ccSetMarker3';
|
||||||
|
ccSetMarker4Str = 'ccSetMarker4';
|
||||||
|
ccSetMarker5Str = 'ccSetMarker5';
|
||||||
|
ccSetMarker6Str = 'ccSetMarker6';
|
||||||
|
ccSetMarker7Str = 'ccSetMarker7';
|
||||||
|
ccSetMarker8Str = 'ccSetMarker8';
|
||||||
|
ccSetMarker9Str = 'ccSetMarker9';
|
||||||
|
ccTabStr = 'ccTab';
|
||||||
|
ccTableEditStr = 'ccTableEdit';
|
||||||
|
ccTopLeftCellStr = 'ccTopLeftCell';
|
||||||
|
ccTopOfPageStr = 'ccTopOfPage';
|
||||||
|
ccUndoStr = 'ccUndo';
|
||||||
|
ccUpStr = 'ccUp';
|
||||||
|
ccWordLeftStr = 'ccWordLeft';
|
||||||
|
ccWordRightStr = 'ccWordRight';
|
||||||
|
|
||||||
|
{DataType strings}
|
||||||
|
StringStr = 'String';
|
||||||
|
CharStr = 'Char';
|
||||||
|
BooleanStr = 'Boolean';
|
||||||
|
YesNoStr = 'YesNo';
|
||||||
|
LongIntStr = 'LongInt';
|
||||||
|
WordStr = 'Word';
|
||||||
|
SmallIntStr = 'SmallInt';
|
||||||
|
ByteStr = 'Byte';
|
||||||
|
ShortIntStr = 'ShortInt';
|
||||||
|
RealStr = 'Real';
|
||||||
|
ExtendedStr = 'Extended';
|
||||||
|
DoubleStr = 'Double';
|
||||||
|
SingleStr = 'Single';
|
||||||
|
CompStr = 'Comp';
|
||||||
|
DateStr = 'Date';
|
||||||
|
TimeStr = 'Time';
|
||||||
|
|
||||||
|
{Sample masks for the EditField's property editors}
|
||||||
|
CharMask1Str = 'X any character';
|
||||||
|
CharMask2Str = '! any char (upper)';
|
||||||
|
CharMask3Str = 'L any char (lower)';
|
||||||
|
CharMask4Str = 'x any char (mixed)';
|
||||||
|
CharMask5Str = 'a alphas only';
|
||||||
|
CharMask6Str = 'A alphas (upper)';
|
||||||
|
CharMask7Str = 'l alphas (lower)';
|
||||||
|
CharMask8Str = '9 0-9';
|
||||||
|
CharMask9Str = 'i 0-9, -';
|
||||||
|
CharMask10Str = '# 0-9, -, .';
|
||||||
|
CharMask11Str = 'E 0-9, E, -, .';
|
||||||
|
CharMask12Str = 'K 0-9, A-F (hex)';
|
||||||
|
CharMask14Str = 'O 0-7 (octal)';
|
||||||
|
CharMask15Str = 'b 0, 1 (binary)';
|
||||||
|
CharMask16Str = 'B T or F (upper)';
|
||||||
|
CharMask17Str = 'Y Y or N (upper)';
|
||||||
|
CharMask18Str = '1 User 1';
|
||||||
|
CharMask19Str = '2 User 2';
|
||||||
|
CharMask20Str = '3 User 3';
|
||||||
|
CharMask21Str = '4 User 4';
|
||||||
|
CharMask22Str = '5 User 5';
|
||||||
|
CharMask23Str = '6 User 6';
|
||||||
|
CharMask24Str = '7 User 7';
|
||||||
|
CharMask25Str = '8 User 8';
|
||||||
|
|
||||||
|
FieldMask1Str = '$##,###.## Allows entry of 0 through 9, space, minus, and period Uses floating currency symbol';
|
||||||
|
FieldMask2Str = '9999999999 Allows entry of 0 through 9, and space';
|
||||||
|
FieldMask3Str = 'iiiiiiiiii Allows entry of 0 through 9, space, and minus';
|
||||||
|
FieldMask4Str = 'ii,iii,iii Allows entry of 0 through 9, space, and minus Displays number separators as needed';
|
||||||
|
FieldMask5Str = '$iiiiiiiii Allows entry of 0 through 9, space, and minus Uses floating currency symbol';
|
||||||
|
FieldMask6Str = '########## Allows entry of 0 through 9, space, minus, and period';
|
||||||
|
FieldMask7Str = '#######.## Allows entry of 0 through 9, space, minus, and period Fixed decimal position';
|
||||||
|
FieldMask8Str = '###,###.## Allows entry of 0 through 9, space, minus, and period Displays number separators as needed';
|
||||||
|
FieldMask9Str = '$######.## Allows entry of 0 through 9, space, minus, and period Fixed decimal position Uses floating currency symbol';
|
||||||
|
FieldMask10Str = '##########p Allows entry of 0 through 9, space, minus, and period Negative amounts use ()';
|
||||||
|
FieldMask11Str = '###,###.##C Allows entry of 0 through 9, space, minus, and period Currency symbol at right';
|
||||||
|
FieldMask12Str = 'KKKKKKKK Hexadecimal (E4401F3E) Allows entry of 0 through 9 and A through F Force upper case';
|
||||||
|
FieldMask13Str = 'KKKK Hexadecimal (1F3E) Allows entry of 0 through 9 and A through F Force upper case';
|
||||||
|
FieldMask14Str = 'KK Hexadecimal (3E) Allows entry of 0 through 9 and A through F Force upper case';
|
||||||
|
FieldMask15Str = 'OOOOOOOO Octal (45135677) Allows entry of 0 through 7 ';
|
||||||
|
FieldMask16Str = 'OOOO Octal (5677) Allows entry of 0 through 7 ';
|
||||||
|
FieldMask17Str = 'bbbbbbbbbbbbbbbb Binary (0101001010010100) Allows entry of 0 and 1';
|
||||||
|
FieldMask18Str = 'bbbbbbbb Binary (10010100) Allows entry of 0 and 1';
|
||||||
|
FieldMask19Str = 'XXXXXXXXXX Any character can be entered';
|
||||||
|
FieldMask20Str = '!!!!!!!!!! Any character can be entered Alphabetic characters are forced to upper case';
|
||||||
|
FieldMask21Str = 'LLLLLLLLLL Any character can be entered Alphabetic characters are forced to lower case';
|
||||||
|
FieldMask22Str = 'xxxxxxxxxx Any character can be entered Uses mixed case';
|
||||||
|
FieldMask23Str = 'aaaaaaaaaa Alphabetic characters plus space, minus, period, and comma';
|
||||||
|
FieldMask24Str = 'AAAAAAAAAA Alphabetic characters plus space, minus, period, and comma Alphabetic characters are forced to upper case';
|
||||||
|
FieldMask25Str = 'llllllllll Alphabetic characters plus space, minus, period, and comma Alphabetic characters are forced to lower case';
|
||||||
|
FieldMask26Str = '(999) 999-9999 Phone number mask Allows 0 through 9 and space';
|
||||||
|
FieldMask27Str = '999-999-9999 Phone number mask Allows 0 through 9 and space';
|
||||||
|
FieldMask28Str = '99999-9999 US Zip Code mask Allows 0 through 9 and space';
|
||||||
|
FieldMask29Str = 'B Boolean mask Allows T, t, F, f Forces input to upper case';
|
||||||
|
FieldMask30Str = 'Y Boolean mask Allows Y, y, N, n Forces input to upper case';
|
||||||
|
FieldMask31Str = 'mm/dd/yy Date mask (01/05/96) Allows entry of 0 through 9 plus space Month and Day are padded with zeros';
|
||||||
|
FieldMask32Str = 'mm/dd/yyyy Date mask (01/05/1996) Allows entry of 0 through 9 plus space Month and Day are padded with zeros';
|
||||||
|
FieldMask33Str = 'dd nnn yyyy Date mask (05 Jan 1996) Allows entry of 0 through 9 plus space Day is padded with zeros';
|
||||||
|
FieldMask34Str = 'MM/DD/yy Date mask ( 1/ 5/96) Allows entry of 0 through 9 plus space Month and Day are padded with spaces';
|
||||||
|
FieldMask35Str = 'MM/DD/yyyy Date mask ( 1/ 5/1996) Allows entry of 0 through 9 plus space Month and Day are padded with spaces';
|
||||||
|
FieldMask36Str = 'DD nnn yyyy Date mask ( 5 Jan 1996) Allows entry of 0 through 9 plus space Day is padded with spaces';
|
||||||
|
FieldMask37Str = 'hh:mm Time mask (03:25) Allows entry of 0 through 9 plus space Hours and minutes are padded with zeros (24 hour clock)';
|
||||||
|
FieldMask38Str = 'hh:mm tt Time mask (03:25 pm) Allows entry of 0 through 9 plus space Hours and minutes are padded with zeros';
|
||||||
|
FieldMask39Str = 'hh:mm:ss Time mask (03:25:07) Allows entry of 0 through 9 plus space Hours, minutes, and seconds are padded with zeros';
|
||||||
|
FieldMask40Str = 'HH:MM Time mask ( 3:25) Allows entry of 0 through 9 plus space Hours and minutes are padded with spaces (24 hour clock)';
|
||||||
|
FieldMask41Str = 'HH:MM tt Time mask ( 3:25 pm) Allows entry of 0 through 9 plus space Hours and minutes are padded with spaces';
|
||||||
|
FieldMask42Str = 'HH:MM:SS Time mask ( 3:25: 7) Allows entry of 0 through 9 plus space Hours, minutes, and seconds are padded with spaces';
|
||||||
|
|
||||||
|
const
|
||||||
|
{Change this when new strings are added.}
|
||||||
|
SrMaxMessages = 375;
|
||||||
|
|
||||||
|
type
|
||||||
|
SrMsgNumLookupRec = record
|
||||||
|
MessageNum : integer;
|
||||||
|
MessageStr : string;
|
||||||
|
end;
|
||||||
|
|
||||||
|
const
|
||||||
|
{Matches the index numbers to their associated Strings}
|
||||||
|
|
||||||
|
{WARNING! When adding to or deleting from this array, make sure you keep the
|
||||||
|
items in ascending numerical order by the value of the MessageNum constants.
|
||||||
|
Otherwise, the Lookup will fail some or all strings...}
|
||||||
|
|
||||||
|
SrMsgNumLookup : array [1..SrMaxMessages] of SrMsgNumLookupRec =
|
||||||
|
{External Resource String Mapping. External resource strings are contained in
|
||||||
|
O32SR.INC...}
|
||||||
|
((MessageNum : SCUnknownError; MessageStr : RSUnknownError),
|
||||||
|
(MessageNum : SCDuplicateCommand; MessageStr : RSDuplicateCommand),
|
||||||
|
(MessageNum : SCTableNotFound; MessageStr : RSTableNotFound),
|
||||||
|
(MessageNum : SCNotDoneYet; MessageStr : RSNotDoneYet),
|
||||||
|
(MessageNum : SCNoControllerAssigned; MessageStr : RSNoControllerAssigned),
|
||||||
|
(MessageNum : SCCantCreateCommandTable; MessageStr : RSCantCreateCommandTable),
|
||||||
|
(MessageNum : SCCantDelete; MessageStr : RSCantDelete),
|
||||||
|
(MessageNum : SCInvalidKeySequence; MessageStr : RSInvalidKeySequence),
|
||||||
|
(MessageNum : SCNotWordStarCommands; MessageStr : RSNotWordStarCommands),
|
||||||
|
(MessageNum : SCNoCommandSelected; MessageStr : RSNoCommandSelected),
|
||||||
|
(MessageNum : SCDuplicateKeySequence; MessageStr : RSDuplicateKeySequence),
|
||||||
|
(MessageNum : SCRangeError; MessageStr : RSRangeError),
|
||||||
|
(MessageNum : SCInvalidNumber; MessageStr : RSInvalidNumber),
|
||||||
|
(MessageNum : SCRequiredField; MessageStr : RSRequiredField),
|
||||||
|
(MessageNum : SCInvalidDate; MessageStr : RSInvalidDate),
|
||||||
|
(MessageNum : SCInvalidTime; MessageStr : RSInvalidTime),
|
||||||
|
(MessageNum : SCBlanksInField; MessageStr : RSBlanksInField),
|
||||||
|
(MessageNum : SCPartialEntry; MessageStr : RSPartialEntry),
|
||||||
|
(MessageNum : SCRegionTooLarge; MessageStr : RSRegionTooLarge),
|
||||||
|
(MessageNum : SCOutOfMemoryForCopy; MessageStr : RSOutOfMemoryForCopy),
|
||||||
|
(MessageNum : SCInvalidParamValue; MessageStr : RSInvalidParamValue),
|
||||||
|
(MessageNum : SCNoTimersAvail; MessageStr : RSNoTimersAvail),
|
||||||
|
(MessageNum : SCTooManyEvents; MessageStr : RSTooManyEvents),
|
||||||
|
(MessageNum : SCBadTriggerHandle; MessageStr : RSBadTriggerHandle),
|
||||||
|
(MessageNum : SCOnSelectNotAssigned; MessageStr : RSOnSelectNotAssigned),
|
||||||
|
(MessageNum : SCInvalidPageIndex; MessageStr : RSInvalidPageIndex),
|
||||||
|
(MessageNum : SCInvalidDataType; MessageStr : RSInvalidDataType),
|
||||||
|
(MessageNum : SCInvalidTabFont; MessageStr : RSInvalidTabFont),
|
||||||
|
(MessageNum : SCInvalidLabelFont; MessageStr : RSInvalidLabelFont),
|
||||||
|
(MessageNum : SCOutOfMemory; MessageStr : RSOutOfMemory),
|
||||||
|
(MessageNum : SCTooManyParas; MessageStr : RSTooManyParas),
|
||||||
|
(MessageNum : SCCannotJoin; MessageStr : RSCannotJoin),
|
||||||
|
(MessageNum : SCTooManyBytes; MessageStr : RSTooManyBytes),
|
||||||
|
(MessageNum : SCParaTooLong; MessageStr : RSParaTooLong),
|
||||||
|
(MessageNum : SCInvalidPictureMask; MessageStr : RSInvalidPictureMask),
|
||||||
|
(MessageNum : SCInvalidRange; MessageStr : RSInvalidRange),
|
||||||
|
(MessageNum : SCInvalidRealRange; MessageStr : RSInvalidRealRange),
|
||||||
|
(MessageNum : SCInvalidExtendedRange; MessageStr : RSInvalidExtendedRange),
|
||||||
|
(MessageNum : SCInvalidDoubleRange; MessageStr : RSInvalidDoubleRange),
|
||||||
|
(MessageNum : SCInvalidSingleRange; MessageStr : RSInvalidSingleRange),
|
||||||
|
(MessageNum : SCInvalidCompRange; MessageStr : RSInvalidCompRange),
|
||||||
|
(MessageNum : SCInvalidDateRange; MessageStr : RSInvalidDateRange),
|
||||||
|
(MessageNum : SCInvalidTimeRange; MessageStr : RSInvalidTimeRange),
|
||||||
|
(MessageNum : SCInvalidRangeValue; MessageStr : RSInvalidRangeValue),
|
||||||
|
(MessageNum : SCRangeNotSupported; MessageStr : RSRangeNotSupported),
|
||||||
|
(MessageNum : SCInvalidLineOrParaIndex; MessageStr : RSInvalidLineOrParaIndex),
|
||||||
|
(MessageNum : SCNonFixedFont; MessageStr : RSNonFixedFont),
|
||||||
|
(MessageNum : SCInvalidFontParam; MessageStr : RSInvalidFontParam),
|
||||||
|
(MessageNum : SCInvalidLineOrColumn; MessageStr : RSInvalidLineOrColumn),
|
||||||
|
(MessageNum : SCSAEGeneral; MessageStr : RSSAEGeneral),
|
||||||
|
(MessageNum : SCSAEAtMaxSize; MessageStr : RSSAEAtMaxSize),
|
||||||
|
(MessageNum : SCInvalidXMLFile; MessageStr : RSInvalidXMLFile),
|
||||||
|
(MessageNum : SCUnterminatedElement; MessageStr : RSUnterminatedElement),
|
||||||
|
(MessageNum : SCBadColorConst; MessageStr : RSBadColorConstant),
|
||||||
|
(MessageNum : SCBadColorValue; MessageStr : RSBadColorValue),
|
||||||
|
(MessageNum : SCSAEOutOfBounds; MessageStr : RSSAEOutOfBounds),
|
||||||
|
(MessageNum : SCInvalidFieldType; MessageStr : RSInvalidFieldType),
|
||||||
|
(MessageNum : SCBadAlarmHandle; MessageStr : RSBadAlarmHandle),
|
||||||
|
(MessageNum : SCOnIsSelectedNotAssigned; MessageStr : RSOnIsSelectedNotAssigned),
|
||||||
|
(MessageNum : SCInvalidDateForMask; MessageStr : RSInvalidDateForMask),
|
||||||
|
(MessageNum : SCNoTableAttached; MessageStr : RSNoTableAttached),
|
||||||
|
(MessageNum : SCViewerIOError; MessageStr : RSViewerIOError),
|
||||||
|
(MessageNum : SCViewerFileNotFound; MessageStr : RSViewerFileNotFound),
|
||||||
|
(MessageNum : SCViewerPathNotFound; MessageStr : RSViewerPathNotFound),
|
||||||
|
(MessageNum : SCViewerTooManyOpenFiles; MessageStr : RSViewerTooManyOpenFiles),
|
||||||
|
(MessageNum : SCViewerFileAccessDenied; MessageStr : RSViewerFileAccessDenied),
|
||||||
|
(MessageNum : SCControlAttached; MessageStr : RSControlAttached),
|
||||||
|
(MessageNum : SCCantEdit; MessageStr : RSCantEdit),
|
||||||
|
(MessageNum : SCChildTableError; MessageStr : RSChildTableError),
|
||||||
|
(MessageNum : SCNoCollection; MessageStr : RSNoCollection),
|
||||||
|
(MessageNum : SCNotOvcDescendant; MessageStr : RSNotOvcDescendant),
|
||||||
|
(MessageNum : SCItemIncompatible; MessageStr : RSItemIncompatible),
|
||||||
|
(MessageNum : SCLabelNotAttached; MessageStr : RSLabelNotAttached),
|
||||||
|
(MessageNum : SCClassNotSet; MessageStr : RSClassNotSet),
|
||||||
|
(MessageNum : SCCollectionNotFound; MessageStr : RSCollectionNotFound),
|
||||||
|
(MessageNum : SCDayConvertError; MessageStr : RSDayConvertError),
|
||||||
|
(MessageNum : SCMonthConvertError; MessageStr : RSMonthConvertError),
|
||||||
|
(MessageNum : SCMonthNameConvertError; MessageStr : RSMonthNameConvertError),
|
||||||
|
(MessageNum : SCYearConvertError; MessageStr : RSYearConvertError),
|
||||||
|
(MessageNum : SCDayRequired; MessageStr : RSDayRequired),
|
||||||
|
(MessageNum : SCMonthRequired; MessageStr : RSMonthRequired),
|
||||||
|
(MessageNum : SCYearRequired; MessageStr : RSYearRequired),
|
||||||
|
(MessageNum : SCInvalidDay; MessageStr : RSInvalidDay),
|
||||||
|
(MessageNum : SCInvalidMonth; MessageStr : RSInvalidMonth),
|
||||||
|
(MessageNum : SCInvalidMonthName; MessageStr : RSInvalidMonthName),
|
||||||
|
(MessageNum : SCInvalidYear; MessageStr : RSInvalidYear),
|
||||||
|
(MessageNum : SCTableRowOutOfBounds; MessageStr : RSTableRowOutOfBounds),
|
||||||
|
(MessageNum : SCTableMaxRows; MessageStr : RSTableMaxRows),
|
||||||
|
(MessageNum : SCTableMaxColumns; MessageStr : RSTableMaxColumns),
|
||||||
|
(MessageNum : SCTableGeneral; MessageStr : RSTableGeneral),
|
||||||
|
(MessageNum : SCTableToManyColumns; MessageStr : RSTableToManyColumns),
|
||||||
|
(MessageNum : SCTableInvalidFieldIndex; MessageStr : RSTableInvalidFieldIndex),
|
||||||
|
(MessageNum : SCTableHeaderNotAssigned; MessageStr : RSTableHeaderNotAssigned),
|
||||||
|
(MessageNum : SCTableInvalidHeaderCell; MessageStr : RSTableInvalidHeaderCell),
|
||||||
|
(MessageNum : SCGridTableName; MessageStr : RSGridTableName),
|
||||||
|
(MessageNum : SCNoneStr; MessageStr : RSNoneStr),
|
||||||
|
(MessageNum : SCccUser; MessageStr : RSccUser),
|
||||||
|
(MessageNum : SCccUserNum; MessageStr : RSccUserNum),
|
||||||
|
(MessageNum : SCDeleteTable; MessageStr : RSDeleteTable),
|
||||||
|
(MessageNum : SCRenameTable; MessageStr : RSRenameTable),
|
||||||
|
(MessageNum : SCEnterTableName; MessageStr : RSEnterTableName),
|
||||||
|
(MessageNum : SCNewTable; MessageStr : RSNewTable),
|
||||||
|
(MessageNum : SCDefaultTableName; MessageStr : RSDefaultTableName),
|
||||||
|
(MessageNum : SCWordStarTableName; MessageStr : RSWordStarTableName ),
|
||||||
|
(MessageNum : SCUnknownTable; MessageStr : RSUnknownTable),
|
||||||
|
(MessageNum : SCDefaultEntryErrorText; MessageStr : RSDefaultEntryErrorText),
|
||||||
|
(MessageNum : SCGotItemWarning; MessageStr : RSGotItemWarning),
|
||||||
|
(MessageNum : SCSampleListItem; MessageStr : RSSampleListItem),
|
||||||
|
(MessageNum : SCAlphaString; MessageStr : RSAlphaString),
|
||||||
|
(MessageNum : SCTallLowChars; MessageStr : RSTallLowChars),
|
||||||
|
(MessageNum : SCDefault; MessageStr : RSDefault),
|
||||||
|
(MessageNum : SCDescending; MessageStr : RSDescending),
|
||||||
|
(MessageNum : SCDefaultIndex; MessageStr : RSDefaultIndex),
|
||||||
|
(MessageNum : SCRestoreMI; MessageStr : RSRestoreMI),
|
||||||
|
(MessageNum : SCCutMI; MessageStr : RSCutMI),
|
||||||
|
(MessageNum : SCCopyMI; MessageStr : RSCopyMI),
|
||||||
|
(MessageNum : SCPasteMI; MessageStr : RSPasteMI),
|
||||||
|
(MessageNum : SCDeleteMI; MessageStr : RSDeleteMI),
|
||||||
|
(MessageNum : SCSelectAllMI; MessageStr : RSSelectAllMI),
|
||||||
|
(MessageNum : SCCalcBack; MessageStr : RSCalcBack),
|
||||||
|
(MessageNum : SCCalcMC; MessageStr : RSCalcMC),
|
||||||
|
(MessageNum : SCCalcMR; MessageStr : RSCalcMR),
|
||||||
|
(MessageNum : SCCalcMS; MessageStr : RSCalcMS),
|
||||||
|
(MessageNum : SCCalcMPlus; MessageStr : RSCalcMPlus),
|
||||||
|
(MessageNum : SCCalcMMinus; MessageStr : RSCalcMMinus),
|
||||||
|
(MessageNum : SCCalcCT; MessageStr : RSCalcCT),
|
||||||
|
(MessageNum : SCCalcCE; MessageStr : RSCalcCE),
|
||||||
|
(MessageNum : SCCalcC; MessageStr : RSCalcC),
|
||||||
|
(MessageNum : SCCalcSqrt; MessageStr : RSCalcSqrt),
|
||||||
|
(MessageNum : SCCalNext; MessageStr : RSCalNext),
|
||||||
|
(MessageNum : SCCalLast; MessageStr : RSCalLast),
|
||||||
|
(MessageNum : SCCalFirst; MessageStr : RSCalFirst),
|
||||||
|
(MessageNum : SCCal1st; MessageStr : RSCal1st),
|
||||||
|
(MessageNum : SCCalSecond; MessageStr : RSCalSecond),
|
||||||
|
(MessageNum : SCCal2nd; MessageStr : RSCal2nd),
|
||||||
|
(MessageNum : SCCalThird; MessageStr : RSCalThird),
|
||||||
|
(MessageNum : SCCal3rd; MessageStr : RSCal3rd),
|
||||||
|
(MessageNum : SCCalFourth; MessageStr : RSCalFourth),
|
||||||
|
(MessageNum : SCCal4th; MessageStr : RSCal4th),
|
||||||
|
(MessageNum : SCCalFinal; MessageStr : RSCalFinal),
|
||||||
|
(MessageNum : SCCalBOM; MessageStr : RSCalBOM),
|
||||||
|
(MessageNum : SCCalEnd; MessageStr : RSCalEnd),
|
||||||
|
(MessageNum : SCCalEOM; MessageStr : RSCalEOM),
|
||||||
|
(MessageNum : SCCalYesterday; MessageStr : RSCalYesterday),
|
||||||
|
(MessageNum : SCCalToday; MessageStr : RSCalToday),
|
||||||
|
(MessageNum : SCCalTomorrow; MessageStr : RSCalTomorrow),
|
||||||
|
(MessageNum : SCEditingSections; MessageStr : RSEditingSections),
|
||||||
|
(MessageNum : SCEditingItems; MessageStr : RSEditingItems),
|
||||||
|
(MessageNum : SCEditingFolders; MessageStr : RSEditingFolders),
|
||||||
|
(MessageNum : SCEditingPages; MessageStr : RSEditingPages),
|
||||||
|
(MessageNum : SCEditingImages; MessageStr : RSEditingImages),
|
||||||
|
(MessageNum : SCSectionBaseName; MessageStr : RSSectionBaseName),
|
||||||
|
(MessageNum : SCItemBaseName; MessageStr : RSItemBaseName),
|
||||||
|
(MessageNum : SCFolderBaseName; MessageStr : RSFolderBaseName),
|
||||||
|
(MessageNum : SCPageBaseName; MessageStr : RSPageBaseName),
|
||||||
|
(MessageNum : SCImageBaseName; MessageStr : RSImageBaseName),
|
||||||
|
(MessageNum : SCOwnerMustBeForm; MessageStr : RSOwnerMustBeForm),
|
||||||
|
(MessageNum : SCTimeConvertError; MessageStr : RSTimeConvertError),
|
||||||
|
(MessageNum : SCCancelQuery; MessageStr : RSCancelQuery),
|
||||||
|
(MessageNum : SCNoPagesAssigned; MessageStr : RSNoPagesAssigned),
|
||||||
|
(MessageNum : SCCalPrev; MessageStr : RSCalPrev),
|
||||||
|
(MessageNum : SCCalBegin; MessageStr : RSCalBegin),
|
||||||
|
(MessageNum : SCInvalidMinMaxValue; MessageStr : RSInvalidMinMaxValue),
|
||||||
|
(MessageNum : SCFormUseOnly; MessageStr : RSFormUseOnly),
|
||||||
|
(MessageNum : SCYes; MessageStr : RSYes),
|
||||||
|
(MessageNum : SCNo; MessageStr : RSNo),
|
||||||
|
(MessageNum : SCTrue; MessageStr : RSTrue),
|
||||||
|
(MessageNum : SCFalse; MessageStr : RSFalse),
|
||||||
|
(MessageNum : SCHoursName; MessageStr : RSHoursName),
|
||||||
|
(MessageNum : SCMinutesName; MessageStr : RSMinutesName),
|
||||||
|
(MessageNum : SCSecondsName; MessageStr : RSSecondsName),
|
||||||
|
(MessageNum : SCCloseCaption; MessageStr : RSCloseCaption),
|
||||||
|
(MessageNum : SCViewFieldNotFound; MessageStr : RSViewFieldNotFound),
|
||||||
|
(MessageNum : SCCantResolveField; MessageStr : RSCantResolveField),
|
||||||
|
(MessageNum : SCItemAlreadyExists; MessageStr : RSItemAlreadyExists),
|
||||||
|
(MessageNum : SCAlreadyInTempMode; MessageStr : RSAlreadyInTempMode),
|
||||||
|
(MessageNum : SCItemNotFound; MessageStr : RSItemNotFound),
|
||||||
|
(MessageNum : SCUpdatePending; MessageStr : RSUpdatePending),
|
||||||
|
(MessageNum : SCOnCompareNotAssigned; MessageStr : RSOnCompareNotAssigned),
|
||||||
|
(MessageNum : SCOnFilterNotAssigned; MessageStr : RSOnFilterNotAssigned),
|
||||||
|
(MessageNum : SCGetAsFloatNotAssigned; MessageStr : RSGetAsFloatNotAssigned),
|
||||||
|
(MessageNum : SCNotInTempMode; MessageStr : RSNotInTempMode),
|
||||||
|
(MessageNum : SCItemNotInIndex; MessageStr : RSItemNotInIndex),
|
||||||
|
(MessageNum : SCNoActiveView; MessageStr : RSNoActiveView),
|
||||||
|
(MessageNum : SCItemIsNotGroup; MessageStr : RSItemIsNotGroup),
|
||||||
|
(MessageNum : SCNotMultiSelect; MessageStr : RSNotMultiSelect),
|
||||||
|
(MessageNum : SCLineNoOutOfRange; MessageStr : RSLineNoOutOfRange),
|
||||||
|
(MessageNum : SCUnknownView; MessageStr : RSUnknownView),
|
||||||
|
(MessageNum : SCOnKeySearchNotAssigned; MessageStr : RSOnKeySearchNotAssigned),
|
||||||
|
(MessageNum : SCOnEnumNotAssigned; MessageStr : RSOnEnumNotAssigned),
|
||||||
|
(MessageNum : SCOnEnumSelectedNA; MessageStr : RSOnEnumSelectedNA),
|
||||||
|
(MessageNum : SCNoMenuAssigned; MessageStr : RSNoMenuAssigned),
|
||||||
|
(MessageNum : SCNoAnchorAssigned; MessageStr : RSNoAnchorAssigned),
|
||||||
|
(MessageNum : SCInvalidParameter; MessageStr : RSInvalidParameter),
|
||||||
|
(MessageNum : SCInvalidOperation; MessageStr : RSInvalidOperation),
|
||||||
|
(MessageNum : SCColorBlack; MessageStr : RSColorBlack),
|
||||||
|
(MessageNum : SCColorMaroon; MessageStr : RSColorMaroon),
|
||||||
|
(MessageNum : SCColorGreen; MessageStr : RSColorGreen),
|
||||||
|
(MessageNum : SCColorOlive; MessageStr : RSColorOlive),
|
||||||
|
(MessageNum : SCColorNavy; MessageStr : RSColorNavy),
|
||||||
|
(MessageNum : SCColorPurple; MessageStr : RSColorPurple),
|
||||||
|
(MessageNum : SCColorTeal; MessageStr : RSColorTeal),
|
||||||
|
(MessageNum : SCColorGray; MessageStr : RSColorGray),
|
||||||
|
(MessageNum : SCColorSilver; MessageStr : RSColorSilver),
|
||||||
|
(MessageNum : SCColorRed; MessageStr : RSColorRed),
|
||||||
|
(MessageNum : SCColorLime; MessageStr : RSColorLime),
|
||||||
|
(MessageNum : SCColorYellow; MessageStr : RSColorYellow),
|
||||||
|
(MessageNum : SCColorBlue; MessageStr : RSColorBlue),
|
||||||
|
(MessageNum : SCColorFuchsia; MessageStr : RSColorFuchsia),
|
||||||
|
(MessageNum : SCColorAqua; MessageStr : RSColorAqua),
|
||||||
|
(MessageNum : SCColorWhite; MessageStr : RSColorWhite),
|
||||||
|
(MessageNum : SCColorLightGray; MessageStr : RSColorLightGray),
|
||||||
|
(MessageNum : SCColorMediumGray; MessageStr : RSColorMediumGray),
|
||||||
|
(MessageNum : SCColorDarkGray; MessageStr : RSColorDarkGray),
|
||||||
|
(MessageNum : SCColorMoneyGreen; MessageStr : RSColorMoneyGreen),
|
||||||
|
(MessageNum : SCColorSkyBlue; MessageStr : RSColorSkyBlue),
|
||||||
|
(MessageNum : SCColorCream; MessageStr : RSColorCream),
|
||||||
|
|
||||||
|
{End - Resource String Mapping...}
|
||||||
|
|
||||||
|
{Internal Strings}
|
||||||
|
(MessageNum : IccNone; MessageStr : ccNoneStr),
|
||||||
|
(MessageNum : IccBack; MessageStr : ccBackStr),
|
||||||
|
(MessageNum : IccBotOfPage; MessageStr : ccBotOfPageStr),
|
||||||
|
(MessageNum : IccBotRightCell; MessageStr : ccBotRightCellStr),
|
||||||
|
(MessageNum : IccCompleteDate; MessageStr : ccCompleteDateStr),
|
||||||
|
(MessageNum : IccCompleteTime; MessageStr : ccCompleteTimeStr),
|
||||||
|
(MessageNum : IccCopy; MessageStr : ccCopyStr),
|
||||||
|
(MessageNum : IccCtrlChar; MessageStr : ccCtrlCharStr),
|
||||||
|
(MessageNum : IccCut; MessageStr : ccCutStr),
|
||||||
|
(MessageNum : IccDec; MessageStr : ccDecStr),
|
||||||
|
(MessageNum : IccDel; MessageStr : ccDelStr),
|
||||||
|
(MessageNum : IccDelBol; MessageStr : ccDelBolStr),
|
||||||
|
(MessageNum : IccDelEol; MessageStr : ccDelEolStr),
|
||||||
|
(MessageNum : IccDelLine; MessageStr : ccDelLineStr),
|
||||||
|
(MessageNum : IccDelWord; MessageStr : ccDelWordStr),
|
||||||
|
(MessageNum : IccDown; MessageStr : ccDownStr),
|
||||||
|
(MessageNum : IccEnd; MessageStr : ccEndStr),
|
||||||
|
(MessageNum : IccExtendDown; MessageStr : ccExtendDownStr),
|
||||||
|
(MessageNum : IccExtendEnd; MessageStr : ccExtendEndStr),
|
||||||
|
(MessageNum : IccExtendHome; MessageStr : ccExtendHomeStr),
|
||||||
|
(MessageNum : IccExtendLeft; MessageStr : ccExtendLeftStr),
|
||||||
|
(MessageNum : IccExtendPgDn; MessageStr : ccExtendPgDnStr),
|
||||||
|
(MessageNum : IccExtendPgUp; MessageStr : ccExtendPgUpStr),
|
||||||
|
(MessageNum : IccExtendRight; MessageStr : ccExtendRightStr),
|
||||||
|
(MessageNum : IccExtendUp; MessageStr : ccExtendUpStr),
|
||||||
|
(MessageNum : IccExtBotOfPage; MessageStr : ccExtBotOfPageStr),
|
||||||
|
(MessageNum : IccExtFirstPage; MessageStr : ccExtFirstPageStr),
|
||||||
|
(MessageNum : IccExtLastPage; MessageStr : ccExtLastPageStr),
|
||||||
|
(MessageNum : IccExtTopOfPage; MessageStr : ccExtTopOfPageStr),
|
||||||
|
(MessageNum : IccExtWordLeft; MessageStr : ccExtWordLeftStr),
|
||||||
|
(MessageNum : IccExtWordRight; MessageStr : ccExtWordRightStr),
|
||||||
|
(MessageNum : IccFirstPage; MessageStr : ccFirstPageStr),
|
||||||
|
(MessageNum : IccGotoMarker0; MessageStr : ccGotoMarker0Str),
|
||||||
|
(MessageNum : IccGotoMarker1; MessageStr : ccGotoMarker1Str),
|
||||||
|
(MessageNum : IccGotoMarker2; MessageStr : ccGotoMarker2Str),
|
||||||
|
(MessageNum : IccGotoMarker3; MessageStr : ccGotoMarker3Str),
|
||||||
|
(MessageNum : IccGotoMarker4; MessageStr : ccGotoMarker4Str),
|
||||||
|
(MessageNum : IccGotoMarker5; MessageStr : ccGotoMarker5Str),
|
||||||
|
(MessageNum : IccGotoMarker6; MessageStr : ccGotoMarker6Str),
|
||||||
|
(MessageNum : IccGotoMarker7; MessageStr : ccGotoMarker7Str),
|
||||||
|
(MessageNum : IccGotoMarker8; MessageStr : ccGotoMarker8Str),
|
||||||
|
(MessageNum : IccGotoMarker9; MessageStr : ccGotoMarker9Str),
|
||||||
|
(MessageNum : IccHome; MessageStr : ccHomeStr),
|
||||||
|
(MessageNum : IccInc; MessageStr : ccIncStr),
|
||||||
|
(MessageNum : IccIns; MessageStr : ccInsStr),
|
||||||
|
(MessageNum : IccLastPage; MessageStr : ccLastPageStr),
|
||||||
|
(MessageNum : IccLeft; MessageStr : ccLeftStr),
|
||||||
|
(MessageNum : IccNewLine; MessageStr : ccNewLineStr),
|
||||||
|
(MessageNum : IccNextPage; MessageStr : ccNextPageStr),
|
||||||
|
(MessageNum : IccPageLeft; MessageStr : ccPageLeftStr),
|
||||||
|
(MessageNum : IccPageRight; MessageStr : ccPageRightStr),
|
||||||
|
(MessageNum : IccPaste; MessageStr : ccPasteStr),
|
||||||
|
(MessageNum : IccPrevPage; MessageStr : ccPrevPageStr),
|
||||||
|
(MessageNum : IccRedo; MessageStr : ccRedoStr),
|
||||||
|
(MessageNum : IccRestore; MessageStr : ccRestoreStr),
|
||||||
|
(MessageNum : IccRight; MessageStr : ccRightStr),
|
||||||
|
(MessageNum : IccScrollDown; MessageStr : ccScrollDownStr),
|
||||||
|
(MessageNum : IccScrollUp; MessageStr : ccScrollUpStr),
|
||||||
|
(MessageNum : IccSetMarker0; MessageStr : ccSetMarker0Str),
|
||||||
|
(MessageNum : IccSetMarker1; MessageStr : ccSetMarker1Str),
|
||||||
|
(MessageNum : IccSetMarker2; MessageStr : ccSetMarker2Str),
|
||||||
|
(MessageNum : IccSetMarker3; MessageStr : ccSetMarker3Str),
|
||||||
|
(MessageNum : IccSetMarker4; MessageStr : ccSetMarker4Str),
|
||||||
|
(MessageNum : IccSetMarker5; MessageStr : ccSetMarker5Str),
|
||||||
|
(MessageNum : IccSetMarker6; MessageStr : ccSetMarker6Str),
|
||||||
|
(MessageNum : IccSetMarker7; MessageStr : ccSetMarker7Str),
|
||||||
|
(MessageNum : IccSetMarker8; MessageStr : ccSetMarker8Str),
|
||||||
|
(MessageNum : IccSetMarker9; MessageStr : ccSetMarker9Str),
|
||||||
|
(MessageNum : IccTab; MessageStr : ccTabStr),
|
||||||
|
(MessageNum : IccTableEdit; MessageStr : ccTableEditStr),
|
||||||
|
(MessageNum : IccTopLeftCell; MessageStr : ccTopLeftCellStr),
|
||||||
|
(MessageNum : IccTopOfPage; MessageStr : ccTopOfPageStr),
|
||||||
|
(MessageNum : IccUndo; MessageStr : ccUndoStr),
|
||||||
|
(MessageNum : IccUp; MessageStr : ccUpStr),
|
||||||
|
(MessageNum : IccWordLeft; MessageStr : ccWordLeftStr),
|
||||||
|
(MessageNum : IccWordRight; MessageStr : ccWordRightStr),
|
||||||
|
(MessageNum : IString; MessageStr : StringStr),
|
||||||
|
(MessageNum : IChar; MessageStr : CharStr),
|
||||||
|
(MessageNum : IBoolean; MessageStr : BooleanStr),
|
||||||
|
(MessageNum : IYesNo; MessageStr : YesNoStr),
|
||||||
|
(MessageNum : ILongInt; MessageStr : LongIntStr),
|
||||||
|
(MessageNum : IWord; MessageStr : WordStr),
|
||||||
|
(MessageNum : ISmallInt; MessageStr : SmallIntStr),
|
||||||
|
(MessageNum : IByte; MessageStr : ByteStr),
|
||||||
|
(MessageNum : IShortInt; MessageStr : ShortIntStr),
|
||||||
|
(MessageNum : IReal; MessageStr : RealStr),
|
||||||
|
(MessageNum : IExtended; MessageStr : ExtendedStr),
|
||||||
|
(MessageNum : IDouble; MessageStr : DoubleStr),
|
||||||
|
(MessageNum : ISingle; MessageStr : SingleStr),
|
||||||
|
(MessageNum : IComp; MessageStr : CompStr),
|
||||||
|
(MessageNum : IDate; MessageStr : DateStr),
|
||||||
|
(MessageNum : ITime; MessageStr : TimeStr),
|
||||||
|
(MessageNum : ICharMask1; MessageStr : CharMask1Str),
|
||||||
|
(MessageNum : ICharMask2; MessageStr : CharMask2Str),
|
||||||
|
(MessageNum : ICharMask3; MessageStr : CharMask3Str),
|
||||||
|
(MessageNum : ICharMask4; MessageStr : CharMask4Str),
|
||||||
|
(MessageNum : ICharMask5; MessageStr : CharMask5Str),
|
||||||
|
(MessageNum : ICharMask6; MessageStr : CharMask6Str),
|
||||||
|
(MessageNum : ICharMask7; MessageStr : CharMask7Str),
|
||||||
|
(MessageNum : ICharMask8; MessageStr : CharMask8Str),
|
||||||
|
(MessageNum : ICharMask9; MessageStr : CharMask9Str),
|
||||||
|
(MessageNum : ICharMask10; MessageStr : CharMask10Str),
|
||||||
|
(MessageNum : ICharMask11; MessageStr : CharMask11Str),
|
||||||
|
(MessageNum : ICharMask12; MessageStr : CharMask12Str),
|
||||||
|
(MessageNum : ICharMask13; MessageStr : CharMask14Str),
|
||||||
|
(MessageNum : ICharMask14; MessageStr : CharMask15Str),
|
||||||
|
(MessageNum : ICharMask15; MessageStr : CharMask16Str),
|
||||||
|
(MessageNum : ICharMask16; MessageStr : CharMask17Str),
|
||||||
|
(MessageNum : ICharMask17; MessageStr : CharMask18Str),
|
||||||
|
(MessageNum : ICharMask18; MessageStr : CharMask19Str),
|
||||||
|
(MessageNum : ICharMask19; MessageStr : CharMask20Str),
|
||||||
|
(MessageNum : ICharMask20; MessageStr : CharMask21Str),
|
||||||
|
(MessageNum : ICharMask21; MessageStr : CharMask22Str),
|
||||||
|
(MessageNum : ICharMask22; MessageStr : CharMask23Str),
|
||||||
|
(MessageNum : ICharMask23; MessageStr : CharMask24Str),
|
||||||
|
(MessageNum : ICharMask24; MessageStr : CharMask25Str),
|
||||||
|
(MessageNum : IFieldMask1; MessageStr : FieldMask1Str),
|
||||||
|
(MessageNum : IFieldMask2; MessageStr : FieldMask2Str),
|
||||||
|
(MessageNum : IFieldMask3; MessageStr : FieldMask3Str),
|
||||||
|
(MessageNum : IFieldMask4; MessageStr : FieldMask4Str),
|
||||||
|
(MessageNum : IFieldMask5; MessageStr : FieldMask5Str),
|
||||||
|
(MessageNum : IFieldMask6; MessageStr : FieldMask6Str),
|
||||||
|
(MessageNum : IFieldMask7; MessageStr : FieldMask7Str),
|
||||||
|
(MessageNum : IFieldMask8; MessageStr : FieldMask8Str),
|
||||||
|
(MessageNum : IFieldMask9; MessageStr : FieldMask9Str),
|
||||||
|
(MessageNum : IFieldMask10; MessageStr : FieldMask10Str),
|
||||||
|
(MessageNum : IFieldMask11; MessageStr : FieldMask11Str),
|
||||||
|
(MessageNum : IFieldMask12; MessageStr : FieldMask12Str),
|
||||||
|
(MessageNum : IFieldMask13; MessageStr : FieldMask13Str),
|
||||||
|
(MessageNum : IFieldMask14; MessageStr : FieldMask14Str),
|
||||||
|
(MessageNum : IFieldMask15; MessageStr : FieldMask15Str),
|
||||||
|
(MessageNum : IFieldMask16; MessageStr : FieldMask16Str),
|
||||||
|
(MessageNum : IFieldMask17; MessageStr : FieldMask17Str),
|
||||||
|
(MessageNum : IFieldMask18; MessageStr : FieldMask18Str),
|
||||||
|
(MessageNum : IFieldMask19; MessageStr : FieldMask19Str),
|
||||||
|
(MessageNum : IFieldMask20; MessageStr : FieldMask20Str),
|
||||||
|
(MessageNum : IFieldMask21; MessageStr : FieldMask21Str),
|
||||||
|
(MessageNum : IFieldMask22; MessageStr : FieldMask22Str),
|
||||||
|
(MessageNum : IFieldMask23; MessageStr : FieldMask23Str),
|
||||||
|
(MessageNum : IFieldMask24; MessageStr : FieldMask24Str),
|
||||||
|
(MessageNum : IFieldMask25; MessageStr : FieldMask25Str),
|
||||||
|
(MessageNum : IFieldMask26; MessageStr : FieldMask26Str),
|
||||||
|
(MessageNum : IFieldMask27; MessageStr : FieldMask27Str),
|
||||||
|
(MessageNum : IFieldMask28; MessageStr : FieldMask28Str),
|
||||||
|
(MessageNum : IFieldMask29; MessageStr : FieldMask29Str),
|
||||||
|
(MessageNum : IFieldMask30; MessageStr : FieldMask30Str),
|
||||||
|
(MessageNum : IFieldMask31; MessageStr : FieldMask31Str),
|
||||||
|
(MessageNum : IFieldMask32; MessageStr : FieldMask32Str),
|
||||||
|
(MessageNum : IFieldMask33; MessageStr : FieldMask33Str),
|
||||||
|
(MessageNum : IFieldMask34; MessageStr : FieldMask34Str),
|
||||||
|
(MessageNum : IFieldMask35; MessageStr : FieldMask35Str),
|
||||||
|
(MessageNum : IFieldMask36; MessageStr : FieldMask36Str),
|
||||||
|
(MessageNum : IFieldMask37; MessageStr : FieldMask37Str),
|
||||||
|
(MessageNum : IFieldMask38; MessageStr : FieldMask38Str),
|
||||||
|
(MessageNum : IFieldMask39; MessageStr : FieldMask39Str),
|
||||||
|
(MessageNum : IFieldMask40; MessageStr : FieldMask40Str),
|
||||||
|
(MessageNum : IFieldMask41; MessageStr : FieldMask41Str),
|
||||||
|
(MessageNum : IFieldMask42; MessageStr : FieldMask42Str));
|
||||||
|
|
||||||
|
{End - Internal Strings...}
|
||||||
|
|
||||||
|
function ResourceStrByNumber(Num: Word): String;
|
||||||
|
|
||||||
|
implementation
|
||||||
|
|
||||||
|
function ResourceStrByNumber(Num: Word): String;
|
||||||
|
{Implements a simple binary search through the SrMsgNumLookup array.
|
||||||
|
Returns an empty string is a match isn't found.}
|
||||||
|
var
|
||||||
|
Mid, Min, Max : integer;
|
||||||
|
begin
|
||||||
|
result := '';
|
||||||
|
Min := 0;
|
||||||
|
Max := SrMaxMessages;
|
||||||
|
while (Min <= Max) do begin
|
||||||
|
Mid := (Min + Max) div 2;
|
||||||
|
if SrMsgNumLookup[Mid].MessageNum = Num then begin
|
||||||
|
result := SrMsgNumLookup[Mid].MessageStr;
|
||||||
|
exit;
|
||||||
|
end else begin
|
||||||
|
if Num < SrMsgNumLookup[Mid].MessageNum
|
||||||
|
then Max := Mid - 1
|
||||||
|
else Min := Mid + 1;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
end.
|
708
components/orpheus/o32tcflx.pas
Normal file
@ -0,0 +1,708 @@
|
|||||||
|
{*********************************************************}
|
||||||
|
{* OVCTCFLX.PAS 4.06 *}
|
||||||
|
{*********************************************************}
|
||||||
|
|
||||||
|
{* ***** BEGIN LICENSE BLOCK ***** *}
|
||||||
|
{* Version: MPL 1.1 *}
|
||||||
|
{* *}
|
||||||
|
{* The contents of this file are subject to the Mozilla Public License *}
|
||||||
|
{* Version 1.1 (the "License"); you may not use this file except in *}
|
||||||
|
{* compliance with the License. You may obtain a copy of the License at *}
|
||||||
|
{* http://www.mozilla.org/MPL/ *}
|
||||||
|
{* *}
|
||||||
|
{* Software distributed under the License is distributed on an "AS IS" basis, *}
|
||||||
|
{* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License *}
|
||||||
|
{* for the specific language governing rights and limitations under the *}
|
||||||
|
{* License. *}
|
||||||
|
{* *}
|
||||||
|
{* The Original Code is TurboPower Orpheus *}
|
||||||
|
{* *}
|
||||||
|
{* The Initial Developer of the Original Code is TurboPower Software *}
|
||||||
|
{* *}
|
||||||
|
{* Portions created by TurboPower Software Inc. are Copyright (C)1995-2002 *}
|
||||||
|
{* TurboPower Software Inc. All Rights Reserved. *}
|
||||||
|
{* *}
|
||||||
|
{* Contributor(s): *}
|
||||||
|
{* *}
|
||||||
|
{* ***** END LICENSE BLOCK ***** *}
|
||||||
|
|
||||||
|
{$I OVC.INC}
|
||||||
|
|
||||||
|
{$B-} {Complete Boolean Evaluation}
|
||||||
|
{$I+} {Input/Output-Checking}
|
||||||
|
{$P+} {Open Parameters}
|
||||||
|
{$T-} {Typed @ Operator}
|
||||||
|
{.W-} {Windows Stack Frame}
|
||||||
|
{$X+} {Extended Syntax}
|
||||||
|
|
||||||
|
unit o32tcflx;
|
||||||
|
{Orpheus Table Cell version of the FlexEdit}
|
||||||
|
|
||||||
|
interface
|
||||||
|
|
||||||
|
uses
|
||||||
|
{$IFNDEF LCL} Windows, Messages, {$ELSE} LclIntf, LMessages, Types, LclType, MyMisc, {$ENDIF}
|
||||||
|
SysUtils, Graphics, Classes, Controls, Forms, StdCtrls,
|
||||||
|
Menus, OvcTCmmn, OvcTCell,
|
||||||
|
OvcTCStr, O32FlxEd, O32bordr, OvcEf, OvcCmd, O32VlOp1, O32Vldtr;
|
||||||
|
|
||||||
|
type
|
||||||
|
|
||||||
|
{ Event for the TCFlexEdit User Validation }
|
||||||
|
TTCFEUserValidationEvent =
|
||||||
|
procedure(Sender : TObject; Value: string;
|
||||||
|
var ValidEntry : Boolean) of object;
|
||||||
|
|
||||||
|
|
||||||
|
{Class for storing the validation properties. These properties will be
|
||||||
|
loaded dynamically when the editor is created.}
|
||||||
|
TO32TCValidatorOptions = class(TPersistent)
|
||||||
|
protected {private}
|
||||||
|
FValidationType : TValidationType;
|
||||||
|
FValidatorType : String;
|
||||||
|
FValidatorClass : TValidatorClass;
|
||||||
|
FMask : String;
|
||||||
|
FLastValid : Boolean;
|
||||||
|
FLastErrorCode : Word;
|
||||||
|
FBeepOnError : Boolean;
|
||||||
|
FInputRequired : Boolean;
|
||||||
|
|
||||||
|
procedure SetValidatorType(const VType: String);
|
||||||
|
procedure AssignValidator;
|
||||||
|
public
|
||||||
|
constructor Create; dynamic;
|
||||||
|
property LastValid: Boolean
|
||||||
|
read FLastValid write FLastValid;
|
||||||
|
property LastErrorCode: Word
|
||||||
|
read FLastErrorCode write FLastErrorCode;
|
||||||
|
|
||||||
|
{ - Moved from published}
|
||||||
|
property ValidatorClass: TValidatorClass
|
||||||
|
read FValidatorClass write FValidatorClass stored true;
|
||||||
|
published
|
||||||
|
property BeepOnError: Boolean
|
||||||
|
read FBeepOnError write FBeepOnError stored true;
|
||||||
|
property InputRequired: Boolean
|
||||||
|
read FInputRequired write FInputRequired stored true;
|
||||||
|
property ValidatorType : string
|
||||||
|
read FValidatorType write SetValidatorType stored true;
|
||||||
|
property ValidationType: TValidationType
|
||||||
|
read FValidationType write FValidationType stored true;
|
||||||
|
property Mask: String
|
||||||
|
read FMask write FMask stored true;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
TO32TCFlexEditEditor = class(TO32CustomFlexEdit)
|
||||||
|
protected {private}
|
||||||
|
FCell : TOvcBaseTableCell;
|
||||||
|
procedure WMChar(var Msg : TWMKey); message WM_CHAR;
|
||||||
|
{$IFNDEF LCL}
|
||||||
|
procedure WMGetDlgCode(var Msg : TMessage); message WM_GETDLGCODE;
|
||||||
|
{$ELSE}
|
||||||
|
procedure WMGetDlgCode(var Msg : TWMGetDlgCode); message WM_GETDLGCODE;
|
||||||
|
{$ENDIF}
|
||||||
|
procedure WMKeyDown(var Msg : TWMKey); message WM_KEYDOWN;
|
||||||
|
procedure WMKillFocus(var Msg : TWMKillFocus); message WM_KILLFOCUS;
|
||||||
|
procedure WMSetFocus(var Msg : TWMSetFocus); message WM_SETFOCUS;
|
||||||
|
|
||||||
|
function ValidateSelf: Boolean; override;
|
||||||
|
|
||||||
|
// TurboPower bug? CellOwner property wasn't published.
|
||||||
|
published //Added
|
||||||
|
property CellOwner : TOvcBaseTableCell read FCell write FCell; //Moved to here
|
||||||
|
end;
|
||||||
|
|
||||||
|
TO32TCBorderProperties = class(TPersistent)
|
||||||
|
protected {private}
|
||||||
|
FActive : Boolean;
|
||||||
|
FFlatColor : TColor;
|
||||||
|
FBorderStyle : TO32BorderStyle;
|
||||||
|
public
|
||||||
|
constructor Create; virtual;
|
||||||
|
published
|
||||||
|
property Active: Boolean read FActive write FActive;
|
||||||
|
property FlatColor: TColor read FFlatColor write FFlatColor;
|
||||||
|
property BorderStyle: TO32BorderStyle read FBorderStyle write FBorderStyle;
|
||||||
|
end;
|
||||||
|
|
||||||
|
TO32TCEditorProperties = class(TPersistent)
|
||||||
|
protected
|
||||||
|
FAlignment : TAlignment;
|
||||||
|
FBorders : TO32Borders;
|
||||||
|
FButtonGlyph : TBitmap;
|
||||||
|
FColor : TColor;
|
||||||
|
FCursor : TCursor;
|
||||||
|
FMaxLines : Integer;
|
||||||
|
FShowButton : Boolean;
|
||||||
|
FPasswordChar : Char;
|
||||||
|
FReadOnly : Boolean;
|
||||||
|
procedure SetButtonGlyph(Value :TBitmap);
|
||||||
|
function GetButtonGlyph :TBitmap;
|
||||||
|
public
|
||||||
|
constructor Create; virtual;
|
||||||
|
destructor Destroy; override;
|
||||||
|
|
||||||
|
property Borders: TO32Borders read FBorders write FBorders;
|
||||||
|
|
||||||
|
published
|
||||||
|
{$IFDEF VERSION4}
|
||||||
|
property Alignment: TAlignment read FAlignment write FAlignment;
|
||||||
|
{$ENDIF}
|
||||||
|
property ButtonGlyph: TBitmap
|
||||||
|
read GetButtonGlyph write SetButtonGlyph;
|
||||||
|
|
||||||
|
property Color: TColor Read FColor write FColor;
|
||||||
|
property Cursor: TCursor read FCursor write FCursor;
|
||||||
|
property MaxLines: Integer read FMaxLines write FMaxLines;
|
||||||
|
property PasswordChar: Char read FPasswordChar write FPasswordChar;
|
||||||
|
property ReadOnly: Boolean Read FReadOnly write FReadOnly;
|
||||||
|
property ShowButton: Boolean read FShowButton write FShowButton;
|
||||||
|
end;
|
||||||
|
|
||||||
|
TO32TCCustomFlexEdit = class(TOvcTCBaseString)
|
||||||
|
protected {private}
|
||||||
|
FBorderProps : TO32TCBorderProperties;
|
||||||
|
FEdit : TO32TCFlexEditEditor;
|
||||||
|
FEditorOptions : TO32TCEditorProperties;
|
||||||
|
FMaxLength : word;
|
||||||
|
FValidation : TO32TCValidatorOptions;
|
||||||
|
FWantReturns : Boolean;
|
||||||
|
FWantTabs : Boolean;
|
||||||
|
FWordWrap : Boolean;
|
||||||
|
|
||||||
|
FOnError : TValidationErrorEvent;
|
||||||
|
FOnUserCommand : TUserCommandEvent;
|
||||||
|
FOnUserValidation : TTCFEUserValidationEvent;
|
||||||
|
|
||||||
|
FOnButtonClick : TO32feButtonClickEvent;
|
||||||
|
|
||||||
|
protected
|
||||||
|
function GetCellEditor : TControl; override;
|
||||||
|
function GetModified : boolean;
|
||||||
|
|
||||||
|
property MaxLength : word
|
||||||
|
read FMaxLength write FMaxLength stored true;
|
||||||
|
property WantReturns : boolean
|
||||||
|
read FWantReturns write FWantReturns stored true;
|
||||||
|
property WantTabs : boolean
|
||||||
|
read FWantTabs write FWantTabs stored true;
|
||||||
|
property WordWrap: Boolean
|
||||||
|
read FWordWrap write FWordWrap stored true;
|
||||||
|
property EditorBorders: TO32TCBorderProperties
|
||||||
|
read FBorderProps write FBorderProps;
|
||||||
|
property OnButtonClick: TO32feButtonClickEvent
|
||||||
|
read FOnButtonClick write FOnButtonClick;
|
||||||
|
property Validation: TO32TCValidatorOptions
|
||||||
|
read FValidation write FValidation;
|
||||||
|
public
|
||||||
|
constructor Create(AOwner : TComponent); override;
|
||||||
|
destructor Destroy; override;
|
||||||
|
function CreateEditControl(AOwner : TComponent) : TO32TCFlexEditEditor; virtual;
|
||||||
|
function EditHandle : THandle; override;
|
||||||
|
procedure EditHide; override;
|
||||||
|
procedure EditMove(CellRect : TRect); override;
|
||||||
|
|
||||||
|
function CanSaveEditedData(SaveValue : boolean) : boolean; override;
|
||||||
|
procedure SaveEditedData(Data : pointer); override;
|
||||||
|
function ValidateEntry: Boolean;
|
||||||
|
procedure StartEditing(RowNum : TRowNum; ColNum : TColNum;
|
||||||
|
CellRect : TRect;
|
||||||
|
const CellAttr : TOvcCellAttributes;
|
||||||
|
CellStyle: TOvcTblEditorStyle;
|
||||||
|
Data : pointer); override;
|
||||||
|
procedure StopEditing(SaveValue : boolean;
|
||||||
|
Data : pointer); override;
|
||||||
|
property Modified : boolean
|
||||||
|
read GetModified;
|
||||||
|
property EditorOptions: TO32TCEditorProperties
|
||||||
|
read FEditorOptions write FEditorOptions;
|
||||||
|
property OnUserValidation: TTCFEUserValidationEvent
|
||||||
|
read FOnUserValidation write FOnUserValidation;
|
||||||
|
end;
|
||||||
|
|
||||||
|
TO32TCFlexEdit = class(TO32TCCustomFlexEdit)
|
||||||
|
published
|
||||||
|
{properties inherited from custom ancestor}
|
||||||
|
property Access default otxDefault;
|
||||||
|
property Adjust default otaDefault;
|
||||||
|
property EditorBorders;
|
||||||
|
property Color;
|
||||||
|
property EditorOptions;
|
||||||
|
property Font;
|
||||||
|
property Hint;
|
||||||
|
property Margin default 4;
|
||||||
|
property MaxLength default 255;
|
||||||
|
property ShowHint default False;
|
||||||
|
property Table;
|
||||||
|
property TableColor default True;
|
||||||
|
property TableFont default True;
|
||||||
|
property TextHiColor default clBtnHighlight;
|
||||||
|
property TextStyle default tsFlat;
|
||||||
|
property Validation;
|
||||||
|
property WantReturns default False;
|
||||||
|
property WantTabs default False;
|
||||||
|
property WordWrap default False;
|
||||||
|
{events inherited from custom ancestor}
|
||||||
|
property OnButtonClick;
|
||||||
|
property OnChange;
|
||||||
|
property OnClick;
|
||||||
|
property OnDblClick;
|
||||||
|
property OnDragDrop;
|
||||||
|
property OnDragOver;
|
||||||
|
property OnEndDrag;
|
||||||
|
property OnEnter;
|
||||||
|
property OnExit;
|
||||||
|
property OnKeyDown;
|
||||||
|
property OnKeyPress;
|
||||||
|
property OnKeyUp;
|
||||||
|
property OnMouseDown;
|
||||||
|
property OnMouseMove;
|
||||||
|
property OnMouseUp;
|
||||||
|
property OnOwnerDraw;
|
||||||
|
property OnUserValidation;
|
||||||
|
end;
|
||||||
|
|
||||||
|
implementation
|
||||||
|
|
||||||
|
{===== TO32TCValidatorOptions ========================================}
|
||||||
|
|
||||||
|
constructor TO32TCValidatorOptions.Create;
|
||||||
|
begin
|
||||||
|
inherited Create;
|
||||||
|
FValidationType := vtNone;
|
||||||
|
FValidatorType := 'None';
|
||||||
|
FValidatorClass := nil;
|
||||||
|
FMask := '';
|
||||||
|
FLastValid := false;
|
||||||
|
FLastErrorCode := 0;
|
||||||
|
FBeepOnError := true;
|
||||||
|
FInputRequired := false;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TO32TCValidatorOptions.AssignValidator;
|
||||||
|
begin
|
||||||
|
if (FValidatorType = 'None') or (FValidatorType = '')then
|
||||||
|
FValidatorClass := nil
|
||||||
|
else try
|
||||||
|
FValidatorClass := TValidatorClass(FindClass(FValidatorType));
|
||||||
|
except
|
||||||
|
FValidatorClass := nil;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
{=====}
|
||||||
|
|
||||||
|
procedure TO32TCValidatorOptions.SetValidatorType(const VType: String);
|
||||||
|
begin
|
||||||
|
if FValidatorType <> VType then begin
|
||||||
|
FValidatorType := VType;
|
||||||
|
AssignValidator;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
{===== TO32TCFlexEditEditor ==========================================}
|
||||||
|
|
||||||
|
procedure TO32TCFlexEditEditor.WMChar(var Msg : TWMKey);
|
||||||
|
begin
|
||||||
|
if (not CellOwner.TableWantsTab) or (Msg.CharCode <> 9) then
|
||||||
|
inherited;
|
||||||
|
end;
|
||||||
|
{=====}
|
||||||
|
|
||||||
|
{$IFNDEF LCL}
|
||||||
|
procedure TO32TCFlexEditEditor.WMGetDlgCode(var Msg : TMessage);
|
||||||
|
{$ELSE}
|
||||||
|
procedure TO32TCFlexEditEditor.WMGetDlgCode(var Msg : TWMGetDlgCode);
|
||||||
|
{$ENDIF}
|
||||||
|
begin
|
||||||
|
inherited;
|
||||||
|
if CellOwner.TableWantsTab then
|
||||||
|
Msg.Result := Msg.Result or DLGC_WANTTAB;
|
||||||
|
end;
|
||||||
|
{=====}
|
||||||
|
|
||||||
|
procedure TO32TCFlexEditEditor.WMKeyDown(var Msg : TWMKey);
|
||||||
|
{Local Method}
|
||||||
|
procedure GetSelection(var S, E : word);
|
||||||
|
type
|
||||||
|
LH = packed record L, H : word; end;
|
||||||
|
var
|
||||||
|
GetSel : longint;
|
||||||
|
begin
|
||||||
|
GetSel := SendMessage(Handle, EM_GETSEL, 0, 0);
|
||||||
|
S := LH(GetSel).L;
|
||||||
|
E := LH(GetSel).H;
|
||||||
|
end;
|
||||||
|
var
|
||||||
|
GridReply : TOvcTblKeyNeeds;
|
||||||
|
GridUsedIt : boolean;
|
||||||
|
SStart, SEnd : word;
|
||||||
|
begin
|
||||||
|
GridUsedIt := false;
|
||||||
|
GridReply := otkDontCare;
|
||||||
|
if (CellOwner <> nil) then
|
||||||
|
GridReply := CellOwner.FilterTableKey(Msg);
|
||||||
|
case GridReply of
|
||||||
|
otkMustHave :
|
||||||
|
begin
|
||||||
|
CellOwner.SendKeyToTable(Msg);
|
||||||
|
GridUsedIt := true;
|
||||||
|
end;
|
||||||
|
otkWouldLike :
|
||||||
|
case Msg.CharCode of
|
||||||
|
VK_RETURN :
|
||||||
|
if not WantReturns then
|
||||||
|
begin
|
||||||
|
CellOwner.SendKeyToTable(Msg);
|
||||||
|
GridUsedIt := true;
|
||||||
|
end;
|
||||||
|
VK_LEFT :
|
||||||
|
begin
|
||||||
|
GetSelection(SStart, SEnd);
|
||||||
|
if (SStart = SEnd) and (SStart = 0) then
|
||||||
|
begin
|
||||||
|
CellOwner.SendKeyToTable(Msg);
|
||||||
|
GridUsedIt := true;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
VK_RIGHT :
|
||||||
|
begin
|
||||||
|
GetSelection(SStart, SEnd);
|
||||||
|
if ((SStart = SEnd) or (SStart = 0)) and (SEnd = GetTextLen) then
|
||||||
|
begin
|
||||||
|
CellOwner.SendKeyToTable(Msg);
|
||||||
|
GridUsedIt := true;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
VK_UP, VK_DOWN, VK_PRIOR, VK_NEXT : //TurboPower bug? left out this case
|
||||||
|
begin
|
||||||
|
CellOwner.SendKeyToTable(Msg);
|
||||||
|
GridUsedIt := true;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;{case}
|
||||||
|
|
||||||
|
if not GridUsedIt then
|
||||||
|
inherited;
|
||||||
|
end;
|
||||||
|
{=====}
|
||||||
|
|
||||||
|
procedure TO32TCFlexEditEditor.WMKillFocus(var Msg : TWMKillFocus);
|
||||||
|
begin
|
||||||
|
{$IFNDEF LCL}
|
||||||
|
inherited;
|
||||||
|
{$ELSE}
|
||||||
|
inherited WMKillFocus(Msg);
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
// Apparent TurboPower bug: change of focus with tab or mouse doesn't
|
||||||
|
// trigger validation, so do it here and don't change focus if invalid.
|
||||||
|
if not TO32TCCustomFlexEdit(CellOwner).ValidateEntry then //These lines added
|
||||||
|
begin
|
||||||
|
{$IFNDEF LCL}
|
||||||
|
SetFocus;
|
||||||
|
{$ENDIF}
|
||||||
|
Exit;
|
||||||
|
end;
|
||||||
|
|
||||||
|
CellOwner.PostMessageToTable(ctim_KillFocus, Msg.FocusedWnd, 0);
|
||||||
|
end;
|
||||||
|
{=====}
|
||||||
|
|
||||||
|
procedure TO32TCFlexEditEditor.WMSetFocus(var Msg : TWMSetFocus);
|
||||||
|
begin
|
||||||
|
{$IFNDEF LCL}
|
||||||
|
inherited;
|
||||||
|
{$ELSE}
|
||||||
|
inherited WMSetFocus(Msg);
|
||||||
|
{$ENDIF}
|
||||||
|
CellOwner.PostMessageToTable(ctim_SetFocus, Msg.FocusedWnd, 0);
|
||||||
|
end;
|
||||||
|
{=====}
|
||||||
|
|
||||||
|
function TO32TCFlexEditEditor.ValidateSelf;
|
||||||
|
begin
|
||||||
|
result := inherited ValidateSelf;
|
||||||
|
end;
|
||||||
|
|
||||||
|
{===== TO32TCBorderProperties ========================================}
|
||||||
|
constructor TO32TCBorderProperties.Create;
|
||||||
|
begin
|
||||||
|
inherited;
|
||||||
|
FActive := False;
|
||||||
|
FFlatColor := clBlack;
|
||||||
|
FBorderStyle := bstyRaised;
|
||||||
|
end;
|
||||||
|
|
||||||
|
{===== TO32TCEditorProperties ========================================}
|
||||||
|
constructor TO32TCEditorProperties.Create;
|
||||||
|
begin
|
||||||
|
inherited Create;
|
||||||
|
FAlignment := taLeftJustify;
|
||||||
|
FButtonGlyph := TBitmap.Create;
|
||||||
|
FColor := clWindow;
|
||||||
|
FCursor := crDefault;
|
||||||
|
FMaxLines := 3;
|
||||||
|
FShowButton := false;
|
||||||
|
// TurboPower bug: No default efoPasswordMode=False like TOvcTCSimpleField,
|
||||||
|
// so '*' means TO32TCFlexEdit would be in password mode by default.
|
||||||
|
// FPasswordChar := '*';
|
||||||
|
FPasswordChar := #0; //Fixed
|
||||||
|
FReadOnly := false;
|
||||||
|
end;
|
||||||
|
{=====}
|
||||||
|
|
||||||
|
destructor TO32TCEditorProperties.Destroy;
|
||||||
|
begin
|
||||||
|
FButtonGlyph.Free;
|
||||||
|
inherited Destroy;
|
||||||
|
end;
|
||||||
|
{=====}
|
||||||
|
|
||||||
|
{ - begin}
|
||||||
|
procedure TO32TCEditorProperties.SetButtonGlyph(Value :TBitmap);
|
||||||
|
begin
|
||||||
|
FButtonGlyph.Assign(Value);
|
||||||
|
end;
|
||||||
|
{=====}
|
||||||
|
|
||||||
|
function TO32TCEditorProperties.GetButtonGlyph :TBitmap;
|
||||||
|
begin
|
||||||
|
Result := FButtonGlyph;
|
||||||
|
end;
|
||||||
|
{=====}
|
||||||
|
{ - end}
|
||||||
|
|
||||||
|
{===== TO32TCCustomFlexEdit ==========================================}
|
||||||
|
constructor TO32TCCustomFlexEdit.Create(AOwner : TComponent);
|
||||||
|
begin
|
||||||
|
inherited Create(AOwner);
|
||||||
|
UseASCIIZStrings := true;
|
||||||
|
UseWordWrap := true;
|
||||||
|
FEditorOptions := TO32TCEditorProperties.Create;
|
||||||
|
FBorderProps := TO32TCBorderProperties.Create;
|
||||||
|
FValidation := TO32TCValidatorOptions.Create;
|
||||||
|
MaxLength := 255;
|
||||||
|
end;
|
||||||
|
{=====}
|
||||||
|
|
||||||
|
destructor TO32TCCustomFlexEdit.Destroy;
|
||||||
|
begin
|
||||||
|
FEditorOptions.Free;
|
||||||
|
FBorderProps.Free;
|
||||||
|
FValidation.Free;
|
||||||
|
inherited;
|
||||||
|
end;
|
||||||
|
{=====}
|
||||||
|
|
||||||
|
function TO32TCCustomFlexEdit.GetCellEditor : TControl;
|
||||||
|
begin
|
||||||
|
Result := FEdit;
|
||||||
|
FEditorOptions.Free;
|
||||||
|
end;
|
||||||
|
{=====}
|
||||||
|
|
||||||
|
function TO32TCCustomFlexEdit.GetModified : boolean;
|
||||||
|
begin
|
||||||
|
if Assigned(FEdit) then
|
||||||
|
Result := FEdit.Modified
|
||||||
|
else
|
||||||
|
Result := false;
|
||||||
|
end ;
|
||||||
|
{=====}
|
||||||
|
|
||||||
|
function TO32TCCustomFlexEdit.CreateEditControl(AOwner : TComponent):
|
||||||
|
TO32TCFlexEditEditor;
|
||||||
|
begin
|
||||||
|
Result := TO32TCFlexEditEditor.Create(AOwner);
|
||||||
|
end;
|
||||||
|
{=====}
|
||||||
|
|
||||||
|
function TO32TCCustomFlexEdit.EditHandle : THandle;
|
||||||
|
begin
|
||||||
|
if Assigned(FEdit) then
|
||||||
|
Result := FEdit.Handle
|
||||||
|
else
|
||||||
|
Result := 0;
|
||||||
|
end;
|
||||||
|
{=====}
|
||||||
|
|
||||||
|
procedure TO32TCCustomFlexEdit.EditHide;
|
||||||
|
begin
|
||||||
|
if Assigned(FEdit) then
|
||||||
|
// with FEdit do
|
||||||
|
SetWindowPos(FEdit.Handle, HWND_TOP, 0, 0, 0, 0, SWP_HIDEWINDOW
|
||||||
|
or SWP_NOREDRAW or SWP_NOZORDER);
|
||||||
|
end;
|
||||||
|
{=====}
|
||||||
|
|
||||||
|
procedure TO32TCCustomFlexEdit.EditMove(CellRect : TRect);
|
||||||
|
begin
|
||||||
|
if Assigned(FEdit) then
|
||||||
|
begin
|
||||||
|
with CellRect do
|
||||||
|
SetWindowPos(FEdit.Handle, HWND_TOP,
|
||||||
|
Left, Top, Right-Left, Bottom-Top,
|
||||||
|
SWP_SHOWWINDOW or SWP_NOREDRAW or SWP_NOZORDER);
|
||||||
|
InvalidateRect(FEdit.Handle, nil, false);
|
||||||
|
UpdateWindow(FEdit.Handle);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
{=====}
|
||||||
|
|
||||||
|
function TO32TCCustomFlexEdit.CanSaveEditedData(SaveValue : boolean) : boolean;
|
||||||
|
begin
|
||||||
|
Result := true;
|
||||||
|
if Validation.InputRequired and (FEdit.Text = '') then begin
|
||||||
|
result := false;
|
||||||
|
FEdit.Restore;
|
||||||
|
end
|
||||||
|
|
||||||
|
else if (Validation.FValidationType <> vtNone) then
|
||||||
|
if Assigned(FEdit) then
|
||||||
|
if SaveValue then
|
||||||
|
Result := ValidateEntry
|
||||||
|
else begin
|
||||||
|
FEdit.Restore;
|
||||||
|
result := false;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
{=====}
|
||||||
|
|
||||||
|
function TO32TCCustomFlexEdit.ValidateEntry: Boolean;
|
||||||
|
begin
|
||||||
|
if Assigned(FOnUserValidation) then begin
|
||||||
|
FOnUserValidation(FEdit, FEdit.Text, result);
|
||||||
|
// if Validation.BeepOnError then MessageBeep(0); <== TurboPower bug? not checking result
|
||||||
|
if (not result) and Validation.BeepOnError then MessageBeep(0); //Fixed
|
||||||
|
exit;
|
||||||
|
end;
|
||||||
|
|
||||||
|
result := FEdit.ValidateSelf;
|
||||||
|
Validation.LastValid := FEdit.Validation.LastValid;
|
||||||
|
Validation.LastErrorCode := FEdit.Validation.LastErrorCode;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TO32TCCustomFlexEdit.SaveEditedData(Data : pointer);
|
||||||
|
begin
|
||||||
|
{Abstract method does nothing.
|
||||||
|
It is stubbed out so that BCB doesn't think this as an abstract class}
|
||||||
|
end;
|
||||||
|
{=====}
|
||||||
|
|
||||||
|
procedure TO32TCCustomFlexEdit.StartEditing(RowNum : TRowNum; ColNum : TColNum;
|
||||||
|
CellRect : TRect;
|
||||||
|
const CellAttr : TOvcCellAttributes;
|
||||||
|
CellStyle: TOvcTblEditorStyle;
|
||||||
|
Data : pointer);
|
||||||
|
{var
|
||||||
|
Str: String;}
|
||||||
|
begin
|
||||||
|
FEdit := TO32TCFlexEditEditor.Create(FTable);
|
||||||
|
|
||||||
|
FEdit.Validation.EnableHooking := false;
|
||||||
|
FEdit.Validation.InputRequired := Validation.InputRequired;
|
||||||
|
FEdit.Validation.ValidationType := Validation.ValidationType;
|
||||||
|
FEdit.Validation.ValidatorType := Validation.ValidatorType;
|
||||||
|
FEdit.Validation.ValidatorClass := Validation.ValidatorClass;
|
||||||
|
FEdit.Validation.Mask := Validation.Mask;
|
||||||
|
FEdit.Validation.BeepOnError := Validation.BeepOnError;
|
||||||
|
FEdit.Validation.InputRequired := Validation.InputRequired;
|
||||||
|
FEdit.Validation.ValidationEvent := veOnExit;
|
||||||
|
|
||||||
|
|
||||||
|
FEdit.ShowButton := FEditorOptions.ShowButton;
|
||||||
|
if FEdit.ShowButton then begin
|
||||||
|
FEdit.ButtonGlyph := FEditorOptions.ButtonGlyph;
|
||||||
|
if Assigned(OnButtonClick) then
|
||||||
|
FEdit.OnButtonClick := OnButtonClick;
|
||||||
|
end;
|
||||||
|
|
||||||
|
with FEdit do begin
|
||||||
|
Parent := FTable;
|
||||||
|
|
||||||
|
Borders.Active := FBorderProps.FActive;
|
||||||
|
|
||||||
|
if Borders.Active then begin
|
||||||
|
Borders.BorderStyle := FBorderProps.FBorderStyle;
|
||||||
|
Borders.FlatColor := FBorderProps.FFlatColor;
|
||||||
|
BorderStyle := bsSingle;
|
||||||
|
Ctl3D := true;
|
||||||
|
end else begin
|
||||||
|
BorderStyle := bsNone;
|
||||||
|
Ctl3D := false;
|
||||||
|
case CellStyle of
|
||||||
|
tesBorder : BorderStyle := bsSingle;
|
||||||
|
tes3D : Ctl3D := true;
|
||||||
|
end;{case}
|
||||||
|
end;
|
||||||
|
|
||||||
|
Color := FEditorOptions.Color;
|
||||||
|
Font := CellAttr.caFont;
|
||||||
|
Font.Color := CellAttr.caFontColor;
|
||||||
|
MaxLength := Self.MaxLength;
|
||||||
|
WantReturns := Self.WantReturns;
|
||||||
|
WantTabs := Self.WantTabs;
|
||||||
|
WordWrap := Self.WordWrap;
|
||||||
|
EditLines.MaxLines := FEditorOptions.MaxLines;
|
||||||
|
EditLines.DefaultLines := 1;
|
||||||
|
EditLines.FocusedLines := 3;
|
||||||
|
EditLines.MouseOverLines := 3;
|
||||||
|
Cursor := FEditorOptions.Cursor;
|
||||||
|
PasswordChar := FEditorOptions.PasswordChar;
|
||||||
|
ReadOnly := FEditorOptions.ReadOnly;
|
||||||
|
Left := CellRect.Left;
|
||||||
|
Top := CellRect.Top;
|
||||||
|
Width := CellRect.Right - CellRect.Left;
|
||||||
|
Height := CellRect.Bottom - CellRect.Top;
|
||||||
|
Visible := true;
|
||||||
|
TabStop := false;
|
||||||
|
CellOwner := Self;
|
||||||
|
Hint := Self.Hint;
|
||||||
|
ShowHint := Self.ShowHint;
|
||||||
|
|
||||||
|
{Str := PAnsiChar(Data);} {!!!}
|
||||||
|
if (Data = nil) then
|
||||||
|
SetTextBuf('')
|
||||||
|
else begin
|
||||||
|
SetTextBuf(PAnsiChar(Data));
|
||||||
|
end;
|
||||||
|
|
||||||
|
OnChange := Self.OnChange;
|
||||||
|
OnClick := Self.OnClick;
|
||||||
|
OnDblClick := Self.OnDblClick;
|
||||||
|
OnDragDrop := Self.OnDragDrop;
|
||||||
|
OnDragOver := Self.OnDragOver;
|
||||||
|
OnEndDrag := Self.OnEndDrag;
|
||||||
|
OnEnter := Self.OnEnter;
|
||||||
|
OnExit := Self.OnExit;
|
||||||
|
OnKeyDown := Self.OnKeyDown;
|
||||||
|
OnKeyPress := Self.OnKeyPress;
|
||||||
|
OnKeyUp := Self.OnKeyUp;
|
||||||
|
OnMouseDown := Self.OnMouseDown;
|
||||||
|
OnMouseMove := Self.OnMouseMove;
|
||||||
|
OnMouseUp := Self.OnMouseUp;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
{=====}
|
||||||
|
|
||||||
|
procedure TO32TCCustomFlexEdit.StopEditing(SaveValue : boolean;
|
||||||
|
Data : pointer);
|
||||||
|
{var
|
||||||
|
Str: String;}
|
||||||
|
begin
|
||||||
|
try
|
||||||
|
if SaveValue and Assigned(Data) then begin
|
||||||
|
FEdit.GetTextBuf(PAnsiChar(Data), MaxLength);
|
||||||
|
{Str := PAnsiChar(Data);} {!!!}
|
||||||
|
end;
|
||||||
|
finally
|
||||||
|
FEdit.Free;
|
||||||
|
FEdit := nil;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
{=====}
|
||||||
|
|
||||||
|
|
||||||
|
end.
|
193
components/orpheus/o32vldtr.pas
Normal file
@ -0,0 +1,193 @@
|
|||||||
|
{*********************************************************}
|
||||||
|
{* O32VLDTR.PAS 4.06 *}
|
||||||
|
{*********************************************************}
|
||||||
|
|
||||||
|
{* ***** BEGIN LICENSE BLOCK ***** *}
|
||||||
|
{* Version: MPL 1.1 *}
|
||||||
|
{* *}
|
||||||
|
{* The contents of this file are subject to the Mozilla Public License *}
|
||||||
|
{* Version 1.1 (the "License"); you may not use this file except in *}
|
||||||
|
{* compliance with the License. You may obtain a copy of the License at *}
|
||||||
|
{* http://www.mozilla.org/MPL/ *}
|
||||||
|
{* *}
|
||||||
|
{* Software distributed under the License is distributed on an "AS IS" basis, *}
|
||||||
|
{* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License *}
|
||||||
|
{* for the specific language governing rights and limitations under the *}
|
||||||
|
{* License. *}
|
||||||
|
{* *}
|
||||||
|
{* The Original Code is TurboPower Orpheus *}
|
||||||
|
{* *}
|
||||||
|
{* The Initial Developer of the Original Code is TurboPower Software *}
|
||||||
|
{* *}
|
||||||
|
{* Portions created by TurboPower Software Inc. are Copyright (C)1995-2002 *}
|
||||||
|
{* TurboPower Software Inc. All Rights Reserved. *}
|
||||||
|
{* *}
|
||||||
|
{* Contributor(s): *}
|
||||||
|
{* *}
|
||||||
|
{* ***** END LICENSE BLOCK ***** *}
|
||||||
|
|
||||||
|
{$I OVC.INC}
|
||||||
|
|
||||||
|
{$B-} {Complete Boolean Evaluation}
|
||||||
|
{$I+} {Input/Output-Checking}
|
||||||
|
{$P+} {Open Parameters}
|
||||||
|
{$T-} {Typed @ Operator}
|
||||||
|
{.W-} {Windows Stack Frame}
|
||||||
|
{$X+} {Extended Syntax}
|
||||||
|
|
||||||
|
unit o32vldtr;
|
||||||
|
{-Base classes for the TO32Validator and descendant components}
|
||||||
|
|
||||||
|
{
|
||||||
|
TO32BaseValidator is the abstract ancestor for all Orpheus Validator components
|
||||||
|
Descendants must override SetInput, SetMask, GetValid and IsValid plus define
|
||||||
|
the validation to provide full functionality.
|
||||||
|
|
||||||
|
Descendant classes which call the RegisterValidator and UnRegisterValidator
|
||||||
|
procedures in their unit's Initialization and Finalization sections will be
|
||||||
|
available as a selection in the ValidatorType property of components that use
|
||||||
|
validators internally.
|
||||||
|
}
|
||||||
|
|
||||||
|
interface
|
||||||
|
|
||||||
|
uses
|
||||||
|
{$IFNDEF LCL} Windows, {$ELSE} LclIntf, MyMisc, {$ENDIF} Classes, OvcBase;
|
||||||
|
|
||||||
|
type
|
||||||
|
TValidationEvent = (veOnChange, veOnEnter, veOnExit);
|
||||||
|
|
||||||
|
TValidatorErrorEvent =
|
||||||
|
procedure(Sender: TObject; const ErrorMsg: string) of object;
|
||||||
|
|
||||||
|
TValidatorClass = class of TO32BaseValidator;
|
||||||
|
|
||||||
|
TO32BaseValidator = class(TO32Component)
|
||||||
|
protected {private}
|
||||||
|
{property variables}
|
||||||
|
FBeforeValidation : TNotifyEvent;
|
||||||
|
FAfterValidation : TNotifyEvent;
|
||||||
|
FOnUserValidation : TNotifyEvent;
|
||||||
|
FOnErrorEvent : TValidatorErrorEvent;
|
||||||
|
|
||||||
|
FInput : string;
|
||||||
|
FMask : string;
|
||||||
|
FValid : boolean ;
|
||||||
|
FErrorCode : Word;
|
||||||
|
FSampleMaskLength : Word;
|
||||||
|
FSampleMasks : TStringList;
|
||||||
|
|
||||||
|
procedure SetAbout(const Value: string);
|
||||||
|
procedure SetInput(const Value: string); virtual; abstract;
|
||||||
|
procedure SetMask(const Value: string); virtual; abstract;
|
||||||
|
procedure SetValid(Value: boolean);
|
||||||
|
function GetAbout: string;
|
||||||
|
function GetValid: Boolean; virtual; abstract;
|
||||||
|
function GetSampleMasks: TStringList; virtual; abstract;
|
||||||
|
procedure DoOnUserValidation;
|
||||||
|
procedure DoBeforeValidation;
|
||||||
|
procedure DoAfterValidation;
|
||||||
|
procedure DoOnError(Sender: TObject; const ErrorMsg: string);
|
||||||
|
public
|
||||||
|
constructor Create(AOwner: TComponent); override;
|
||||||
|
destructor Destroy; override;
|
||||||
|
|
||||||
|
{Public Methods}
|
||||||
|
function IsValid: Boolean; virtual; abstract;
|
||||||
|
function SampleMaskLength: integer;
|
||||||
|
|
||||||
|
{Public Properties}
|
||||||
|
property Input : string read FInput
|
||||||
|
write SetInput;
|
||||||
|
property Mask : string read FMask write SetMask;
|
||||||
|
property Valid : boolean read GetValid;
|
||||||
|
property ErrorCode: Word read FErrorCode;
|
||||||
|
property SampleMasks: TStringList read GetSampleMasks;
|
||||||
|
|
||||||
|
{Public Events}
|
||||||
|
property BeforeValidation : TNotifyEvent
|
||||||
|
read FBeforeValidation write FBeforeValidation;
|
||||||
|
property AfterValidation : TNotifyEvent
|
||||||
|
read FAfterValidation write FAfterValidation;
|
||||||
|
property OnValidationError : TValidatorErrorEvent
|
||||||
|
read FOnErrorEvent write FOnErrorEvent;
|
||||||
|
|
||||||
|
published
|
||||||
|
property About : string read GetAbout write SetAbout
|
||||||
|
stored False;
|
||||||
|
end;
|
||||||
|
|
||||||
|
implementation
|
||||||
|
|
||||||
|
uses
|
||||||
|
OvcVer;
|
||||||
|
|
||||||
|
{===== TO32BaseValidator ===========================================}
|
||||||
|
constructor TO32BaseValidator.Create(AOwner: TComponent);
|
||||||
|
begin
|
||||||
|
inherited Create(AOwner);
|
||||||
|
FSampleMaskLength := 0;
|
||||||
|
FSampleMasks := TStringList.Create;
|
||||||
|
end;
|
||||||
|
{=====}
|
||||||
|
|
||||||
|
destructor TO32BaseValidator.Destroy;
|
||||||
|
begin
|
||||||
|
FSampleMasks.Clear;
|
||||||
|
FSampleMasks.Free;
|
||||||
|
inherited Destroy;
|
||||||
|
end;
|
||||||
|
{=====}
|
||||||
|
|
||||||
|
function TO32BaseValidator.SampleMaskLength: integer;
|
||||||
|
begin
|
||||||
|
result := FSampleMaskLength;
|
||||||
|
end;
|
||||||
|
{=====}
|
||||||
|
|
||||||
|
function TO32BaseValidator.GetAbout : string;
|
||||||
|
begin
|
||||||
|
Result := OrVersionStr;
|
||||||
|
end;
|
||||||
|
{=====}
|
||||||
|
|
||||||
|
procedure TO32BaseValidator.SetAbout(const Value : string);
|
||||||
|
begin
|
||||||
|
end;
|
||||||
|
{=====}
|
||||||
|
|
||||||
|
procedure TO32BaseValidator.SetValid(Value: boolean);
|
||||||
|
begin
|
||||||
|
if FValid <> Value then
|
||||||
|
FValid := Value;
|
||||||
|
end;
|
||||||
|
{=====}
|
||||||
|
|
||||||
|
procedure TO32BaseValidator.DoOnUserValidation;
|
||||||
|
begin
|
||||||
|
if Assigned(FOnUserValidation) then
|
||||||
|
FOnUserValidation(Self);
|
||||||
|
end;
|
||||||
|
{=====}
|
||||||
|
|
||||||
|
procedure TO32BaseValidator.DoBeforeValidation;
|
||||||
|
begin
|
||||||
|
if Assigned(FBeforeValidation) then
|
||||||
|
FBeforeValidation(Self);
|
||||||
|
end;
|
||||||
|
{=====}
|
||||||
|
|
||||||
|
procedure TO32BaseValidator.DoAfterValidation;
|
||||||
|
begin
|
||||||
|
if Assigned(FAfterValidation) then
|
||||||
|
FAfterValidation(Self);
|
||||||
|
end;
|
||||||
|
{=====}
|
||||||
|
|
||||||
|
procedure TO32BaseValidator.DoOnError(Sender: TObject; const ErrorMsg: string);
|
||||||
|
begin
|
||||||
|
if Assigned(FOnErrorEvent) then
|
||||||
|
FOnErrorEvent(Self, ErrorMsg);
|
||||||
|
end;
|
||||||
|
|
||||||
|
end.
|
339
components/orpheus/o32vlop1.pas
Normal file
@ -0,0 +1,339 @@
|
|||||||
|
{*********************************************************}
|
||||||
|
{* O32VLOP1.PAS 4.06 *}
|
||||||
|
{*********************************************************}
|
||||||
|
|
||||||
|
{* ***** BEGIN LICENSE BLOCK ***** *}
|
||||||
|
{* Version: MPL 1.1 *}
|
||||||
|
{* *}
|
||||||
|
{* The contents of this file are subject to the Mozilla Public License *}
|
||||||
|
{* Version 1.1 (the "License"); you may not use this file except in *}
|
||||||
|
{* compliance with the License. You may obtain a copy of the License at *}
|
||||||
|
{* http://www.mozilla.org/MPL/ *}
|
||||||
|
{* *}
|
||||||
|
{* Software distributed under the License is distributed on an "AS IS" basis, *}
|
||||||
|
{* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License *}
|
||||||
|
{* for the specific language governing rights and limitations under the *}
|
||||||
|
{* License. *}
|
||||||
|
{* *}
|
||||||
|
{* The Original Code is TurboPower Orpheus *}
|
||||||
|
{* *}
|
||||||
|
{* The Initial Developer of the Original Code is TurboPower Software *}
|
||||||
|
{* *}
|
||||||
|
{* Portions created by TurboPower Software Inc. are Copyright (C)1995-2002 *}
|
||||||
|
{* TurboPower Software Inc. All Rights Reserved. *}
|
||||||
|
{* *}
|
||||||
|
{* Contributor(s): *}
|
||||||
|
{* *}
|
||||||
|
{* ***** END LICENSE BLOCK ***** *}
|
||||||
|
|
||||||
|
{$I OVC.INC}
|
||||||
|
|
||||||
|
{$B-} {Complete Boolean Evaluation}
|
||||||
|
{$I+} {Input/Output-Checking}
|
||||||
|
{$P+} {Open Parameters}
|
||||||
|
{$T-} {Typed @ Operator}
|
||||||
|
{.W-} {Windows Stack Frame}
|
||||||
|
{$X+} {Extended Syntax}
|
||||||
|
|
||||||
|
unit o32vlop1;
|
||||||
|
{-ValidatorOptions class for use in components and classes which contain
|
||||||
|
their own validator objects, like the ValidatorPool, FlexEdit, Etc...}
|
||||||
|
|
||||||
|
interface
|
||||||
|
|
||||||
|
|
||||||
|
uses
|
||||||
|
{$IFNDEF LCL} Windows, Messages, {$ELSE} LclIntf, LMessages, Types, LclType, MyMisc, {$ENDIF}
|
||||||
|
Controls, Classes, Forms, SysUtils,
|
||||||
|
O32Vldtr, OvcData, OvcExcpt, OvcConst;
|
||||||
|
|
||||||
|
type
|
||||||
|
TValidationType = (vtNone, vtUser, vtValidator);
|
||||||
|
|
||||||
|
TProtectedControl = class(TWinControl);
|
||||||
|
|
||||||
|
TValidatorOptions = class(TPersistent)
|
||||||
|
protected {private}
|
||||||
|
FOwner : TWinControl;
|
||||||
|
FHookedControl : TWinControl;
|
||||||
|
FValidationType : TValidationType;
|
||||||
|
FValidatorType : String;
|
||||||
|
FValidatorClass : TValidatorClass;
|
||||||
|
FSoftValidation : Boolean;
|
||||||
|
FMask : String;
|
||||||
|
FLastValid : Boolean;
|
||||||
|
FLastErrorCode : Word;
|
||||||
|
FBeepOnError : Boolean;
|
||||||
|
FInputRequired : Boolean;
|
||||||
|
FEnableHooking : Boolean;
|
||||||
|
FUpdating : Integer;
|
||||||
|
|
||||||
|
{Event for which this object will execute a validation}
|
||||||
|
FEvent : TValidationEvent;
|
||||||
|
|
||||||
|
{WndProc Pointers}
|
||||||
|
NewWndProc : Pointer;
|
||||||
|
PrevWndProc : Pointer;
|
||||||
|
|
||||||
|
procedure HookControl;
|
||||||
|
procedure UnHookControl;
|
||||||
|
procedure voWndProc(var Msg : TMessage);
|
||||||
|
|
||||||
|
procedure RecreateHookedWnd;
|
||||||
|
function Validate: Boolean;
|
||||||
|
|
||||||
|
procedure AssignValidator;
|
||||||
|
procedure SetValidatorType(const VType: String);
|
||||||
|
procedure SetEvent(Event: TValidationEvent);
|
||||||
|
procedure SetEnableHooking(Value: Boolean);
|
||||||
|
|
||||||
|
property InputRequired: Boolean read FInputRequired write FInputRequired;
|
||||||
|
|
||||||
|
public
|
||||||
|
constructor Create(AOwner: TWinControl); dynamic;
|
||||||
|
destructor Destroy; override;
|
||||||
|
|
||||||
|
procedure AttachTo(Value : TWinControl);
|
||||||
|
procedure SetLastErrorCode(Code: Word);
|
||||||
|
procedure SetLastValid(Valid: Boolean);
|
||||||
|
|
||||||
|
procedure BeginUpdate;
|
||||||
|
procedure EndUpdate;
|
||||||
|
|
||||||
|
property LastValid: Boolean read FLastValid;
|
||||||
|
property LastErrorCode: Word read FLastErrorCode;
|
||||||
|
property EnableHooking: Boolean read FEnableHooking write SetEnableHooking;
|
||||||
|
property ValidatorClass: TValidatorClass read FValidatorClass
|
||||||
|
write FValidatorClass;
|
||||||
|
published
|
||||||
|
property BeepOnError: Boolean read FBeepOnError write FBeepOnError;
|
||||||
|
|
||||||
|
|
||||||
|
property SoftValidation: Boolean read FSoftValidation write FSoftValidation;
|
||||||
|
|
||||||
|
property ValidationEvent: TValidationEvent read FEvent write SetEvent
|
||||||
|
stored true;
|
||||||
|
property ValidatorType : string
|
||||||
|
read FValidatorType write SetValidatorType stored true;
|
||||||
|
property ValidationType: TValidationType
|
||||||
|
read FValidationType write FValidationType stored true;
|
||||||
|
property Mask: String read FMask write FMask stored true;
|
||||||
|
end;
|
||||||
|
|
||||||
|
implementation
|
||||||
|
|
||||||
|
{===== TValidatorOptions =============================================}
|
||||||
|
constructor TValidatorOptions.Create(AOwner: TWinControl);
|
||||||
|
begin
|
||||||
|
inherited Create;
|
||||||
|
|
||||||
|
FOwner := AOwner;
|
||||||
|
|
||||||
|
{$IFNDEF LCL}
|
||||||
|
{create a callable window proc pointer}
|
||||||
|
{$IFDEF VERSION6}
|
||||||
|
NewWndProc := Classes.MakeObjectInstance(voWndProc);
|
||||||
|
{$ELSE}
|
||||||
|
NewWndProc := MakeObjectInstance(voWndProc);
|
||||||
|
{$ENDIF}
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
ValidatorType := 'None';
|
||||||
|
FSoftValidation := false;
|
||||||
|
ValidationType := vtNone;
|
||||||
|
ValidationEvent := veOnExit;
|
||||||
|
FInputRequired := false;
|
||||||
|
FEnableHooking := true;
|
||||||
|
BeepOnError := true;
|
||||||
|
FValidatorClass := nil;
|
||||||
|
FMask := '';
|
||||||
|
FLastValid := false;
|
||||||
|
FLastErrorCode := 0;
|
||||||
|
end;
|
||||||
|
{=====}
|
||||||
|
|
||||||
|
destructor TValidatorOptions.Destroy;
|
||||||
|
begin
|
||||||
|
UnhookControl;
|
||||||
|
FValidatorClass := nil;
|
||||||
|
inherited destroy;
|
||||||
|
end;
|
||||||
|
{=====}
|
||||||
|
|
||||||
|
procedure TValidatorOptions.HookControl;
|
||||||
|
var
|
||||||
|
P : Pointer;
|
||||||
|
begin
|
||||||
|
if not FEnableHooking then exit;
|
||||||
|
{hook into owner's window procedure}
|
||||||
|
if (FHookedControl <> nil) then begin
|
||||||
|
if not FHookedControl.HandleAllocated then FHookedControl.HandleNeeded;
|
||||||
|
{save original window procedure if not already saved}
|
||||||
|
P := Pointer(GetWindowLong(FHookedControl.Handle, GWL_WNDPROC));
|
||||||
|
if (P <> NewWndProc) then begin
|
||||||
|
PrevWndProc := P;
|
||||||
|
{redirect message handling to ours}
|
||||||
|
SetWindowLong(FHookedControl.Handle, GWL_WNDPROC, LongInt(NewWndProc));
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
{=====}
|
||||||
|
|
||||||
|
procedure TValidatorOptions.UnHookControl;
|
||||||
|
begin
|
||||||
|
if (FHookedControl <> nil) then begin
|
||||||
|
if Assigned(PrevWndProc) and FHookedControl.HandleAllocated then
|
||||||
|
SetWindowLong(FHookedControl.Handle, GWL_WNDPROC, LongInt(PrevWndProc));
|
||||||
|
end;
|
||||||
|
PrevWndProc := nil;
|
||||||
|
end;
|
||||||
|
{=====}
|
||||||
|
|
||||||
|
procedure TValidatorOptions.AttachTo(Value : TWinControl);
|
||||||
|
var
|
||||||
|
WC : TWinControl;
|
||||||
|
begin
|
||||||
|
if not FEnableHooking then Exit;
|
||||||
|
|
||||||
|
FHookedControl := Value;
|
||||||
|
|
||||||
|
{unhook from attached control's window procedure}
|
||||||
|
UnHookControl;
|
||||||
|
|
||||||
|
{insure that we are the only one to hook to this control}
|
||||||
|
if not (csLoading in FOwner.ComponentState) and Assigned(Value) then begin
|
||||||
|
{send message asking if this control is attached to anything}
|
||||||
|
{the control itself won't be able to respond unless it is attached}
|
||||||
|
{in which case, it will be our hook into the window procedure that}
|
||||||
|
{is actually responding}
|
||||||
|
|
||||||
|
if not Value.HandleAllocated then
|
||||||
|
Value.HandleNeeded;
|
||||||
|
|
||||||
|
if Value.HandleAllocated then begin
|
||||||
|
WC := TWinControl(SendMessage(Value.Handle, OM_ISATTACHED, 0, 0));
|
||||||
|
if Assigned(WC) then
|
||||||
|
raise EOvcException.CreateFmt(GetOrphStr(SCControlAttached),
|
||||||
|
[WC.Name])
|
||||||
|
else
|
||||||
|
HookControl;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
{=====}
|
||||||
|
|
||||||
|
procedure TValidatorOptions.SetEvent(Event: TValidationEvent);
|
||||||
|
begin
|
||||||
|
if Event <> FEvent then
|
||||||
|
FEvent := Event;
|
||||||
|
end;
|
||||||
|
{=====}
|
||||||
|
|
||||||
|
procedure TValidatorOptions.SetEnableHooking(Value: Boolean);
|
||||||
|
begin
|
||||||
|
if FEnableHooking <> Value then begin
|
||||||
|
FEnableHooking := Value;
|
||||||
|
if FEnableHooking and (FHookedControl <> nil) then
|
||||||
|
AttachTo(FHookedControl);
|
||||||
|
end else
|
||||||
|
UnHookControl;
|
||||||
|
end;
|
||||||
|
{=====}
|
||||||
|
|
||||||
|
procedure TValidatorOptions.RecreateHookedWnd;
|
||||||
|
begin
|
||||||
|
if not (csDestroying in FHookedControl.ComponentState) then
|
||||||
|
PostMessage(FHookedControl.Handle, OM_RECREATEWND, 0, 0);
|
||||||
|
end;
|
||||||
|
{=====}
|
||||||
|
|
||||||
|
procedure TValidatorOptions.voWndProc(var Msg : TMessage);
|
||||||
|
begin
|
||||||
|
with Msg do begin
|
||||||
|
case FEvent of
|
||||||
|
veOnEnter : if Msg = CM_ENTER then
|
||||||
|
Validate;
|
||||||
|
|
||||||
|
veOnExit : if Msg = CM_EXIT then
|
||||||
|
if (not Validate) and (not FSoftValidation) then
|
||||||
|
FHookedControl.SetFocus;
|
||||||
|
|
||||||
|
{TextChanged}
|
||||||
|
veOnChange : if Msg = 48435 then
|
||||||
|
Validate;
|
||||||
|
|
||||||
|
end;
|
||||||
|
|
||||||
|
{Pass the message on...}
|
||||||
|
if PrevWndProc <> nil then
|
||||||
|
Result := CallWindowProc(PrevWndProc, FHookedControl.Handle, Msg,
|
||||||
|
WParam, LParam)
|
||||||
|
else
|
||||||
|
Result := CallWindowProc(TProtectedControl(FHookedControl).DefWndProc,
|
||||||
|
FHookedControl.Handle, Msg, wParam, lParam);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
{=====}
|
||||||
|
|
||||||
|
procedure TValidatorOptions.AssignValidator;
|
||||||
|
begin
|
||||||
|
if (FValidatorType = 'None') or (FValidatorType = '')then
|
||||||
|
FValidatorClass := nil
|
||||||
|
else try
|
||||||
|
FValidatorClass := TValidatorClass(FindClass(FValidatorType));
|
||||||
|
except
|
||||||
|
FValidatorClass := nil;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
{=====}
|
||||||
|
|
||||||
|
procedure TValidatorOptions.SetLastErrorCode(Code: Word);
|
||||||
|
begin
|
||||||
|
FLastErrorCode := Code;
|
||||||
|
end;
|
||||||
|
{=====}
|
||||||
|
|
||||||
|
function TValidatorOptions.Validate: Boolean;
|
||||||
|
begin
|
||||||
|
{Don't validate if we're in the middle of updates.}
|
||||||
|
if FUpdating > 0 then begin
|
||||||
|
result := true;
|
||||||
|
exit;
|
||||||
|
end;
|
||||||
|
|
||||||
|
{Send a Validate message to the Owner}
|
||||||
|
SetLastErrorCode(SendMessage(FOwner.Handle, OM_VALIDATE, 0, 0));
|
||||||
|
SetLastValid(FLastErrorCode = 0);
|
||||||
|
result := FLastValid;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TValidatorOptions.SetLastValid(Valid: Boolean);
|
||||||
|
begin
|
||||||
|
FLastValid := Valid;
|
||||||
|
end;
|
||||||
|
{=====}
|
||||||
|
|
||||||
|
procedure TValidatorOptions.BeginUpdate;
|
||||||
|
begin
|
||||||
|
Inc(FUpdating);
|
||||||
|
end;
|
||||||
|
{=====}
|
||||||
|
|
||||||
|
procedure TValidatorOptions.EndUpdate;
|
||||||
|
begin
|
||||||
|
Dec(FUpdating);
|
||||||
|
if FUpdating < 0 then
|
||||||
|
FUpdating := 0;
|
||||||
|
end;
|
||||||
|
{=====}
|
||||||
|
|
||||||
|
procedure TValidatorOptions.SetValidatorType(const VType: String);
|
||||||
|
begin
|
||||||
|
if FValidatorType <> VType then begin
|
||||||
|
FValidatorType := VType;
|
||||||
|
AssignValidator;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
end.
|
99
components/orpheus/o32vlreg.pas
Normal file
@ -0,0 +1,99 @@
|
|||||||
|
{*********************************************************}
|
||||||
|
{* O32VLREG.PAS 4.06 *}
|
||||||
|
{*********************************************************}
|
||||||
|
|
||||||
|
{* ***** BEGIN LICENSE BLOCK ***** *}
|
||||||
|
{* Version: MPL 1.1 *}
|
||||||
|
{* *}
|
||||||
|
{* The contents of this file are subject to the Mozilla Public License *}
|
||||||
|
{* Version 1.1 (the "License"); you may not use this file except in *}
|
||||||
|
{* compliance with the License. You may obtain a copy of the License at *}
|
||||||
|
{* http://www.mozilla.org/MPL/ *}
|
||||||
|
{* *}
|
||||||
|
{* Software distributed under the License is distributed on an "AS IS" basis, *}
|
||||||
|
{* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License *}
|
||||||
|
{* for the specific language governing rights and limitations under the *}
|
||||||
|
{* License. *}
|
||||||
|
{* *}
|
||||||
|
{* The Original Code is TurboPower Orpheus *}
|
||||||
|
{* *}
|
||||||
|
{* The Initial Developer of the Original Code is TurboPower Software *}
|
||||||
|
{* *}
|
||||||
|
{* Portions created by TurboPower Software Inc. are Copyright (C)1995-2002 *}
|
||||||
|
{* TurboPower Software Inc. All Rights Reserved. *}
|
||||||
|
{* *}
|
||||||
|
{* Contributor(s): *}
|
||||||
|
{* *}
|
||||||
|
{* ***** END LICENSE BLOCK ***** *}
|
||||||
|
|
||||||
|
{$I OVC.INC}
|
||||||
|
|
||||||
|
{$B-} {Complete Boolean Evaluation}
|
||||||
|
{$I+} {Input/Output-Checking}
|
||||||
|
{$P+} {Open Parameters}
|
||||||
|
{$T-} {Typed @ Operator}
|
||||||
|
{.W-} {Windows Stack Frame}
|
||||||
|
{$X+} {Extended Syntax}
|
||||||
|
|
||||||
|
unit o32vlreg;
|
||||||
|
{Registration unit for the Orpheus Validator components.}
|
||||||
|
|
||||||
|
interface
|
||||||
|
|
||||||
|
uses
|
||||||
|
Classes, O32Vldtr;
|
||||||
|
|
||||||
|
var
|
||||||
|
ValidatorList: TStrings;
|
||||||
|
|
||||||
|
procedure RegisterValidator(ValidatorClass: TValidatorClass);
|
||||||
|
procedure UnRegisterValidator(ValidatorClass: TValidatorClass);
|
||||||
|
procedure GetRegisteredValidators(aList: TStrings);
|
||||||
|
|
||||||
|
implementation
|
||||||
|
|
||||||
|
procedure RegisterValidator(ValidatorClass: TValidatorClass);
|
||||||
|
begin
|
||||||
|
if ValidatorClass.InheritsFrom(TO32BaseValidator) then begin
|
||||||
|
if ValidatorList.IndexOf(ValidatorClass.ClassName) = -1 then begin
|
||||||
|
RegisterClass(TPersistentClass(ValidatorClass));
|
||||||
|
ValidatorList.Add(ValidatorClass.ClassName);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
{=====}
|
||||||
|
|
||||||
|
procedure UnRegisterValidator(ValidatorClass: TValidatorClass);
|
||||||
|
var
|
||||||
|
i: Integer;
|
||||||
|
begin
|
||||||
|
i := ValidatorList.IndexOf(ValidatorClass.ClassName);
|
||||||
|
if i > -1 then begin
|
||||||
|
ValidatorList.Delete(i);
|
||||||
|
UnRegisterClass(TPersistentClass(ValidatorClass));
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
{=====}
|
||||||
|
|
||||||
|
procedure GetRegisteredValidators(aList: TStrings);
|
||||||
|
begin
|
||||||
|
Assert(Assigned(ValidatorList));
|
||||||
|
Assert(Assigned(aList));
|
||||||
|
|
||||||
|
aList.Clear;
|
||||||
|
aList.BeginUpdate;
|
||||||
|
aList.Assign(ValidatorList);
|
||||||
|
aList.EndUpdate;
|
||||||
|
end;
|
||||||
|
|
||||||
|
initialization
|
||||||
|
|
||||||
|
ValidatorList := TStringList.Create;
|
||||||
|
ValidatorList.Add('None');
|
||||||
|
|
||||||
|
|
||||||
|
finalization
|
||||||
|
|
||||||
|
ValidatorList.Free;
|
||||||
|
|
||||||
|
end.
|
312
components/orpheus/o32vpool.pas
Normal file
@ -0,0 +1,312 @@
|
|||||||
|
{*********************************************************}
|
||||||
|
{* O32VPOOL.PAS 4.06 *}
|
||||||
|
{*********************************************************}
|
||||||
|
|
||||||
|
{* ***** BEGIN LICENSE BLOCK ***** *}
|
||||||
|
{* Version: MPL 1.1 *}
|
||||||
|
{* *}
|
||||||
|
{* The contents of this file are subject to the Mozilla Public License *}
|
||||||
|
{* Version 1.1 (the "License"); you may not use this file except in *}
|
||||||
|
{* compliance with the License. You may obtain a copy of the License at *}
|
||||||
|
{* http://www.mozilla.org/MPL/ *}
|
||||||
|
{* *}
|
||||||
|
{* Software distributed under the License is distributed on an "AS IS" basis, *}
|
||||||
|
{* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License *}
|
||||||
|
{* for the specific language governing rights and limitations under the *}
|
||||||
|
{* License. *}
|
||||||
|
{* *}
|
||||||
|
{* The Original Code is TurboPower Orpheus *}
|
||||||
|
{* *}
|
||||||
|
{* The Initial Developer of the Original Code is TurboPower Software *}
|
||||||
|
{* *}
|
||||||
|
{* Portions created by TurboPower Software Inc. are Copyright (C)1995-2002 *}
|
||||||
|
{* TurboPower Software Inc. All Rights Reserved. *}
|
||||||
|
{* *}
|
||||||
|
{* Contributor(s): *}
|
||||||
|
{* *}
|
||||||
|
{* ***** END LICENSE BLOCK ***** *}
|
||||||
|
|
||||||
|
{$I OVC.INC}
|
||||||
|
|
||||||
|
{$B-} {Complete Boolean Evaluation}
|
||||||
|
{$I+} {Input/Output-Checking}
|
||||||
|
{$P+} {Open Parameters}
|
||||||
|
{$T-} {Typed @ Operator}
|
||||||
|
{.W-} {Windows Stack Frame}
|
||||||
|
{$X+} {Extended Syntax}
|
||||||
|
|
||||||
|
unit o32vpool;
|
||||||
|
{O32ValidatorPool component classes}
|
||||||
|
|
||||||
|
interface
|
||||||
|
|
||||||
|
uses
|
||||||
|
OvcBase, Classes, Graphics, stdctrls, O32Vldtr, o32ovldr, o32pvldr, o32rxvld;
|
||||||
|
|
||||||
|
type
|
||||||
|
TO32ValidatorPool = class;
|
||||||
|
|
||||||
|
TVPoolNotifyEvent =
|
||||||
|
procedure (Sender: TObject; ValidatorItem: Integer) of object;
|
||||||
|
|
||||||
|
|
||||||
|
{ - TO32ValidatorItem - }
|
||||||
|
TO32ValidatorItem = class(TO32CollectionItem)
|
||||||
|
protected {private}
|
||||||
|
FValidator : TO32BaseValidator;
|
||||||
|
FValidationEvent : String;
|
||||||
|
FValidatorClass : TValidatorClass;
|
||||||
|
FValidatorType : String;
|
||||||
|
FBeepOnError : Boolean;
|
||||||
|
FMask : String;
|
||||||
|
|
||||||
|
{Component for which this item will validate}
|
||||||
|
FComponent : TCustomEdit;
|
||||||
|
FComponentColor : TColor;
|
||||||
|
FErrorColor : TColor;
|
||||||
|
{Event for which this object will execute a validation}
|
||||||
|
FEvent : TValidationEvent;
|
||||||
|
|
||||||
|
procedure DoValidation(Sender: TObject);
|
||||||
|
procedure SetComponent(Value: TCustomEdit);
|
||||||
|
procedure SetValidatorType(const Value: String);
|
||||||
|
procedure AssignValidator;
|
||||||
|
procedure SetEvent(Event: TValidationEvent);
|
||||||
|
procedure AssignEvent;
|
||||||
|
function ValidatorPool: TO32ValidatorPool;
|
||||||
|
public
|
||||||
|
constructor Create(Collection: TCollection); override;
|
||||||
|
property Validator: TO32BaseValidator
|
||||||
|
read FValidator write FValidator;
|
||||||
|
property ValidatorClass: TValidatorClass read FValidatorClass
|
||||||
|
write FValidatorClass;
|
||||||
|
published
|
||||||
|
property BeepOnError: Boolean
|
||||||
|
read FBeepOnError write FBeepOnError;
|
||||||
|
property Name;
|
||||||
|
property ErrorColor: TCOlor
|
||||||
|
read FErrorColor write FErrorColor;
|
||||||
|
property Component: TCustomEdit
|
||||||
|
read FComponent write SetComponent;
|
||||||
|
property Mask: String
|
||||||
|
read FMask write FMask;
|
||||||
|
property ValidationEvent: TValidationEvent
|
||||||
|
read FEvent write SetEvent;
|
||||||
|
property ValidatorType : string
|
||||||
|
read FValidatorType write SetValidatorType stored true;
|
||||||
|
end;
|
||||||
|
|
||||||
|
TO32Validators = class(TO32Collection)
|
||||||
|
protected {private}
|
||||||
|
FValidatorPool : TO32ValidatorPool;
|
||||||
|
function GetItem(Index: Integer): TO32ValidatorItem;
|
||||||
|
public
|
||||||
|
constructor Create(AOwner : TPersistent;
|
||||||
|
ItemClass : TCollectionItemClass); override;
|
||||||
|
function AddItem(ValidatorClass: TValidatorClass): TCollectionItem;
|
||||||
|
procedure Delete(Index: Integer);
|
||||||
|
procedure DeleteByName(const Name: String);
|
||||||
|
function GetValidatorByName(const Name: String): TO32BaseValidator;
|
||||||
|
property ValidatorPool: TO32ValidatorPool
|
||||||
|
read FValidatorPool;
|
||||||
|
property Items[index: Integer]: TO32ValidatorItem
|
||||||
|
read GetItem;
|
||||||
|
end;
|
||||||
|
|
||||||
|
{ - TO32ValidatorPool - }
|
||||||
|
TO32ValidatorPool = class(TO32Component)
|
||||||
|
protected {private}
|
||||||
|
FValidators: TO32Validators;
|
||||||
|
public
|
||||||
|
constructor Create(AOwner: TComponent); override;
|
||||||
|
destructor Destroy; override;
|
||||||
|
published
|
||||||
|
property Name;
|
||||||
|
property Validators: TO32Validators
|
||||||
|
read FValidators
|
||||||
|
write FValidators;
|
||||||
|
end;
|
||||||
|
|
||||||
|
implementation
|
||||||
|
|
||||||
|
uses
|
||||||
|
{$IFNDEF LCL} Windows, {$ELSE} LclIntf, MyMisc, {$ENDIF} SysUtils, Controls, Dialogs;
|
||||||
|
|
||||||
|
{===== TO32ValidatorPool =============================================}
|
||||||
|
|
||||||
|
constructor TO32ValidatorPool.Create(AOwner: TComponent);
|
||||||
|
begin
|
||||||
|
inherited Create(AOwner);
|
||||||
|
FValidators := TO32Validators.Create(self, TO32ValidatorItem);
|
||||||
|
end;
|
||||||
|
{=====}
|
||||||
|
|
||||||
|
destructor TO32ValidatorPool.Destroy;
|
||||||
|
begin
|
||||||
|
FValidators.Free;
|
||||||
|
inherited Destroy;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
{===== TO32Validators ================================================}
|
||||||
|
constructor TO32Validators.Create(AOwner : TPersistent;
|
||||||
|
ItemClass : TCollectionItemClass);
|
||||||
|
begin
|
||||||
|
inherited;
|
||||||
|
FValidatorPool := TO32ValidatorPool(AOwner);
|
||||||
|
end;
|
||||||
|
{=====}
|
||||||
|
|
||||||
|
function TO32Validators.GetValidatorByName(const Name: String): TO32BaseValidator;
|
||||||
|
var
|
||||||
|
i: Integer;
|
||||||
|
begin
|
||||||
|
for i := 0 to Count - 1 do begin
|
||||||
|
if TO32ValidatorItem(Items[i]).Name = Name then begin
|
||||||
|
result := TO32ValidatorItem(Items[i]).Validator;
|
||||||
|
exit;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
result := nil;
|
||||||
|
end;
|
||||||
|
{=====}
|
||||||
|
|
||||||
|
function TO32Validators.AddItem(ValidatorClass: TValidatorClass):
|
||||||
|
TCollectionItem;
|
||||||
|
var
|
||||||
|
NewItem: TO32ValidatorItem;
|
||||||
|
begin
|
||||||
|
NewItem := TO32ValidatorItem(inherited Add);
|
||||||
|
NewItem.ValidatorClass := ValidatorClass;
|
||||||
|
NewItem.Validator := ValidatorClass.Create(FValidatorPool);
|
||||||
|
result := NewItem;
|
||||||
|
end;
|
||||||
|
{=====}
|
||||||
|
|
||||||
|
procedure TO32Validators.Delete(Index: Integer);
|
||||||
|
begin
|
||||||
|
TO32ValidatorItem(Items[Index]).Validator.Free;
|
||||||
|
{$IFDEF VERSION5}
|
||||||
|
inherited Delete(Index);
|
||||||
|
{$ENDIF}
|
||||||
|
end;
|
||||||
|
{=====}
|
||||||
|
|
||||||
|
procedure TO32Validators.DeleteByName(const Name: String);
|
||||||
|
var
|
||||||
|
i: Integer;
|
||||||
|
begin
|
||||||
|
for i := 0 to Count - 1 do begin
|
||||||
|
if TO32ValidatorItem(Items[i]).Name = Name then begin
|
||||||
|
TO32ValidatorItem(Items[i]).Validator.Free;
|
||||||
|
{$IFDEF VERSION5}
|
||||||
|
inherited Delete(i);
|
||||||
|
{$ENDIF}
|
||||||
|
exit;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
{=====}
|
||||||
|
|
||||||
|
function TO32Validators.GetItem(Index : LongInt) : TO32ValidatorItem;
|
||||||
|
begin
|
||||||
|
result := TO32ValidatorItem(inherited GetItem(Index));
|
||||||
|
end;
|
||||||
|
|
||||||
|
{===== TO32ValidatorItem =============================================}
|
||||||
|
type
|
||||||
|
TProtectedCustomEdit = class(TCustomEdit);
|
||||||
|
TProtectedWinControl = class(TWinControl);
|
||||||
|
|
||||||
|
constructor TO32ValidatorItem.Create(Collection: TCollection);
|
||||||
|
begin
|
||||||
|
inherited;
|
||||||
|
SetName('ValidatorItem' + IntToStr(Collection.Count));
|
||||||
|
FErrorColor := clRed;
|
||||||
|
FBeepOnError := true;
|
||||||
|
end;
|
||||||
|
{=====}
|
||||||
|
|
||||||
|
procedure TO32ValidatorItem.DoValidation(Sender: TObject);
|
||||||
|
begin
|
||||||
|
if not (csDesigning in ValidatorPool.ComponentState)
|
||||||
|
and (FValidator <> nil) then begin
|
||||||
|
{ set the validator's values }
|
||||||
|
FValidator.Mask := FMask;
|
||||||
|
FValidator.Input := FComponent.Text;
|
||||||
|
{ execute validation }
|
||||||
|
if not FValidator.IsValid then begin
|
||||||
|
{ beep or not }
|
||||||
|
if BeepOnError then MessageBeep(0);
|
||||||
|
TProtectedCustomEdit(FComponent).Color := FErrorColor;
|
||||||
|
FComponent.SetFocus;
|
||||||
|
end
|
||||||
|
else
|
||||||
|
if (FComponent is TCustomEdit) then
|
||||||
|
TProtectedCustomEdit(FComponent).Color := FComponentColor;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TO32ValidatorItem.SetComponent(Value: TCustomEdit);
|
||||||
|
begin
|
||||||
|
if (Value is TCustomEdit) and (FComponent <> Value) then begin
|
||||||
|
FComponent := Value;
|
||||||
|
FComponentColor := TProtectedCustomEdit(FComponent).Color;
|
||||||
|
AssignEvent;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
{=====}
|
||||||
|
|
||||||
|
procedure TO32ValidatorItem.SetEvent(Event: TValidationEvent);
|
||||||
|
begin
|
||||||
|
FEvent := Event;
|
||||||
|
AssignEvent;
|
||||||
|
end;
|
||||||
|
{=====}
|
||||||
|
|
||||||
|
procedure TO32ValidatorItem.AssignEvent;
|
||||||
|
begin
|
||||||
|
if (FComponent <> nil) then
|
||||||
|
case FEvent of
|
||||||
|
veOnChange:
|
||||||
|
TProtectedCustomEdit(FComponent).OnChange := DoValidation;
|
||||||
|
veOnEnter :
|
||||||
|
TProtectedCustomEdit(FComponent).OnEnter := DoValidation;
|
||||||
|
veOnExit :
|
||||||
|
TProtectedCustomEdit(FComponent).OnExit := DoValidation;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
{=====}
|
||||||
|
|
||||||
|
procedure TO32ValidatorItem.SetValidatorType(const Value: string);
|
||||||
|
begin
|
||||||
|
if FValidatorType <> Value then begin
|
||||||
|
FValidatorType := Value;
|
||||||
|
AssignValidator;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
{=====}
|
||||||
|
|
||||||
|
procedure TO32ValidatorItem.AssignValidator;
|
||||||
|
begin
|
||||||
|
if (FValidatorType = 'None') or (FValidatorType = '')then
|
||||||
|
FValidatorClass := nil
|
||||||
|
else try
|
||||||
|
FValidatorClass := TValidatorClass(FindClass(FValidatorType));
|
||||||
|
except
|
||||||
|
FValidatorClass := nil;
|
||||||
|
end;
|
||||||
|
|
||||||
|
if FValidatorClass <> nil then
|
||||||
|
FValidator
|
||||||
|
:= FValidatorClass.Create((Collection as TO32Validators).FValidatorPool);
|
||||||
|
end;
|
||||||
|
{=====}
|
||||||
|
|
||||||
|
function TO32ValidatorItem.ValidatorPool: TO32ValidatorPool;
|
||||||
|
begin
|
||||||
|
Result := TO32Validators(Collection).FValidatorPool;
|
||||||
|
end;
|
||||||
|
{=====}
|
||||||
|
|
||||||
|
end.
|
59
components/orpheus/orpheus.lpk
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
<?xml version="1.0"?>
|
||||||
|
<CONFIG>
|
||||||
|
<Package Version="2">
|
||||||
|
<PathDelim Value="\"/>
|
||||||
|
<Name Value="Orpheus"/>
|
||||||
|
<Author Value="Delphi version by TurboPower; ported to Lazarus by Phil Hess"/>
|
||||||
|
<CompilerOptions>
|
||||||
|
<Version Value="5"/>
|
||||||
|
<PathDelim Value="\"/>
|
||||||
|
<SearchPaths>
|
||||||
|
<UnitOutputDirectory Value="units\$(TargetCPU)-$(TargetOS)"/>
|
||||||
|
</SearchPaths>
|
||||||
|
<Parsing>
|
||||||
|
<SyntaxOptions>
|
||||||
|
<D2Extensions Value="False"/>
|
||||||
|
<CStyleOperator Value="False"/>
|
||||||
|
<IncludeAssertionCode Value="True"/>
|
||||||
|
<AllowLabel Value="False"/>
|
||||||
|
<CPPInline Value="False"/>
|
||||||
|
<DelphiCompat Value="True"/>
|
||||||
|
</SyntaxOptions>
|
||||||
|
</Parsing>
|
||||||
|
<Other>
|
||||||
|
<WriteFPCLogo Value="False"/>
|
||||||
|
<CustomOptions Value="-dOrphChecksOn -dNoAsm
|
||||||
|
"/>
|
||||||
|
<CompilerPath Value="$(CompPath)"/>
|
||||||
|
</Other>
|
||||||
|
</CompilerOptions>
|
||||||
|
<Description Value="Orpheus for Lazarus
|
||||||
|
"/>
|
||||||
|
<License Value="MPL 1.1
|
||||||
|
"/>
|
||||||
|
<Version Minor="1" Release="1"/>
|
||||||
|
<Files Count="1">
|
||||||
|
<Item1>
|
||||||
|
<Filename Value="myovcreg.pas"/>
|
||||||
|
<HasRegisterProc Value="True"/>
|
||||||
|
<UnitName Value="MyOvcReg"/>
|
||||||
|
</Item1>
|
||||||
|
</Files>
|
||||||
|
<Type Value="RunAndDesignTime"/>
|
||||||
|
<RequiredPkgs Count="2">
|
||||||
|
<Item1>
|
||||||
|
<PackageName Value="LCL"/>
|
||||||
|
</Item1>
|
||||||
|
<Item2>
|
||||||
|
<PackageName Value="IDEIntf"/>
|
||||||
|
</Item2>
|
||||||
|
</RequiredPkgs>
|
||||||
|
<UsageOptions>
|
||||||
|
<UnitPath Value="$(PkgOutDir)\"/>
|
||||||
|
</UsageOptions>
|
||||||
|
<PublishOptions>
|
||||||
|
<Version Value="2"/>
|
||||||
|
<IgnoreBinaries Value="False"/>
|
||||||
|
</PublishOptions>
|
||||||
|
</Package>
|
||||||
|
</CONFIG>
|
21
components/orpheus/orpheus.pas
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
{ This file was automatically created by Lazarus. Do not edit!
|
||||||
|
This source is only used to compile and install the package.
|
||||||
|
}
|
||||||
|
|
||||||
|
unit Orpheus;
|
||||||
|
|
||||||
|
interface
|
||||||
|
|
||||||
|
uses
|
||||||
|
MyOvcReg, LazarusPackageIntf;
|
||||||
|
|
||||||
|
implementation
|
||||||
|
|
||||||
|
procedure Register;
|
||||||
|
begin
|
||||||
|
RegisterUnit('MyOvcReg', @MyOvcReg.Register);
|
||||||
|
end;
|
||||||
|
|
||||||
|
initialization
|
||||||
|
RegisterPackage('Orpheus', @Register);
|
||||||
|
end.
|
189
components/orpheus/ovc.inc
Normal file
@ -0,0 +1,189 @@
|
|||||||
|
{*********************************************************}
|
||||||
|
{* OVC.INC *}
|
||||||
|
{*********************************************************}
|
||||||
|
|
||||||
|
{* ***** BEGIN LICENSE BLOCK ***** *}
|
||||||
|
{* Version: MPL 1.1 *}
|
||||||
|
{* *}
|
||||||
|
{* The contents of this file are subject to the Mozilla Public License *}
|
||||||
|
{* Version 1.1 (the "License"); you may not use this file except in *}
|
||||||
|
{* compliance with the License. You may obtain a copy of the License at *}
|
||||||
|
{* http://www.mozilla.org/MPL/ *}
|
||||||
|
{* *}
|
||||||
|
{* Software distributed under the License is distributed on an "AS IS" basis, *}
|
||||||
|
{* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License *}
|
||||||
|
{* for the specific language governing rights and limitations under the *}
|
||||||
|
{* License. *}
|
||||||
|
{* *}
|
||||||
|
{* The Original Code is TurboPower Orpheus *}
|
||||||
|
{* *}
|
||||||
|
{* The Initial Developer of the Original Code is TurboPower Software *}
|
||||||
|
{* *}
|
||||||
|
{* Portions created by TurboPower Software Inc. are Copyright (C)1995-2002 *}
|
||||||
|
{* TurboPower Software Inc. All Rights Reserved. *}
|
||||||
|
{* *}
|
||||||
|
{* Contributor(s): *}
|
||||||
|
{* *}
|
||||||
|
{* ***** END LICENSE BLOCK ***** *}
|
||||||
|
|
||||||
|
{Conditional defines that affect compilation}
|
||||||
|
|
||||||
|
(*
|
||||||
|
{$Q-} {Overflow Checking}
|
||||||
|
{$R-} {Range-Checking}
|
||||||
|
{$S-} {Stack-Overflow Checking}
|
||||||
|
*)
|
||||||
|
|
||||||
|
{$IFDEF OrphChecksOn}
|
||||||
|
{$Q+,R+,S+}
|
||||||
|
{$ELSE}
|
||||||
|
{$IFDEF OrphChecksOff}
|
||||||
|
{$Q-,R-,S-}
|
||||||
|
{$ELSE}
|
||||||
|
{$IFOPT Q+}
|
||||||
|
{$Q+}
|
||||||
|
{$ELSE}
|
||||||
|
{$Q-}
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
{$IFOPT R+}
|
||||||
|
{$R+}
|
||||||
|
{$ELSE}
|
||||||
|
{$R-}
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
{$IFOPT S+}
|
||||||
|
{$S+}
|
||||||
|
{$ELSE}
|
||||||
|
{$S-}
|
||||||
|
{$ENDIF}
|
||||||
|
{$ENDIF}
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
{$V-} {Var-String Checking}
|
||||||
|
{$T-} {No type-checked pointers}
|
||||||
|
{$X+} {Extended syntax}
|
||||||
|
{$P-} {No open string parameters}
|
||||||
|
{$B-} {Incomplete Boolean evaluation}
|
||||||
|
{$J+} {Writable constants}
|
||||||
|
{$H+} {Huge strings}
|
||||||
|
|
||||||
|
{General define indicating use under C++ Builder}
|
||||||
|
{$IFDEF VER93}
|
||||||
|
{$DEFINE CBuilder}
|
||||||
|
{$ENDIF}
|
||||||
|
{$IFDEF VER110}
|
||||||
|
{$DEFINE CBuilder}
|
||||||
|
{$ObjExportAll On}
|
||||||
|
{$ENDIF}
|
||||||
|
{$IFDEF VER125}
|
||||||
|
{$DEFINE CBuilder}
|
||||||
|
{$ObjExportAll On}
|
||||||
|
{$ENDIF}
|
||||||
|
{$IFDEF VER130}
|
||||||
|
{$IFDEF BCB}
|
||||||
|
{$DEFINE CBuilder}
|
||||||
|
{$ObjExportAll On}
|
||||||
|
{$ENDIF}
|
||||||
|
{$ENDIF}
|
||||||
|
{$IFDEF VER140} {!!.04}
|
||||||
|
{$IFDEF BCB} {!!.04}
|
||||||
|
{$DEFINE CBuilder} {!!.04}
|
||||||
|
{$ObjExportAll On} {!!.04}
|
||||||
|
{$ENDIF} {!!.04}
|
||||||
|
{$ENDIF} {!!.04}
|
||||||
|
|
||||||
|
{$IFNDEF VER80} {Delphi 1.0}
|
||||||
|
{$DEFINE VERSION2} {Delphi 2.0 and BCB 1 or higher}
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
{$IFDEF VERSION2}
|
||||||
|
{$IFNDEF VER90} {Delphi 2.0}
|
||||||
|
{$IFNDEF VER93} {BCB 1.0}
|
||||||
|
{$DEFINE VERSION3} {Delphi 3.0 or BCB 3.0}
|
||||||
|
{$ENDIF}
|
||||||
|
{$ENDIF}
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
{$IFDEF VERSION3}
|
||||||
|
{$IFNDEF VER100} {Delphi 3}
|
||||||
|
{$IFNDEF VER110} {BCB 3}
|
||||||
|
{$DEFINE VERSION4} {Delphi 4.0 or higher}
|
||||||
|
{$ENDIF}
|
||||||
|
{$ENDIF}
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
{$IFDEF VERSION4}
|
||||||
|
{$IFNDEF VER120} {Delphi 4}
|
||||||
|
{$IFNDEF VER125} {BCB 4}
|
||||||
|
{$DEFINE VERSION5} {Delphi 5.0 or higher}
|
||||||
|
{$ENDIF}
|
||||||
|
{$ENDIF}
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
{$IFDEF VERSION5}
|
||||||
|
{$IFNDEF VER130} {Delphi 5}
|
||||||
|
{$IFNDEF VER135} {BCB 5}
|
||||||
|
{$DEFINE VERSION6} {Delphi 6.0 or higher}
|
||||||
|
{$ENDIF}
|
||||||
|
{$ENDIF}
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
{$IFDEF VERSION6}
|
||||||
|
{$IFNDEF VER140} {Delphi 6}
|
||||||
|
{$IFNDEF VER145} {BCB 6}
|
||||||
|
{$DEFINE VERSION7} {Delphi 7.0 or higher}
|
||||||
|
{$ENDIF}
|
||||||
|
{$ENDIF}
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
{$IFDEF VERSION2}
|
||||||
|
{$IFNDEF VERSION3}
|
||||||
|
{$DEFINE VERSION2ONLY}
|
||||||
|
{$ENDIF}
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
{$IFDEF VERSION3}
|
||||||
|
{$IFNDEF VERSION4}
|
||||||
|
{$DEFINE VERSION3ONLY}
|
||||||
|
{$ENDIF}
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
{$IFDEF Win32}
|
||||||
|
{$A+} {Word Align Data}
|
||||||
|
{$ELSE}
|
||||||
|
{$A-} {Byte Align Data}
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
{$IFDEF VERSION6}
|
||||||
|
{$IFNDEF FPC}
|
||||||
|
{$WARN SYMBOL_PLATFORM OFF}
|
||||||
|
{$ENDIF}
|
||||||
|
{$IFDEF VERSION7}
|
||||||
|
{$B- Incomplete boolean evaluation}
|
||||||
|
{$H+ Long string support}
|
||||||
|
{$J+ Writeable typed constants}
|
||||||
|
{$P- No open string parameters}
|
||||||
|
{$T- No type-checked pointers}
|
||||||
|
{$V- No var string checking}
|
||||||
|
{$X+ Extended syntax}
|
||||||
|
{$Z1 Enumerations are word sized}
|
||||||
|
{$IFNDEF FPC}
|
||||||
|
{$WARN UNIT_PLATFORM OFF}
|
||||||
|
{$WARN UNSAFE_CODE OFF}
|
||||||
|
{$WARN UNSAFE_TYPE OFF}
|
||||||
|
{$WARN UNSAFE_CAST OFF}
|
||||||
|
{$WARN UNIT_DEPRECATED OFF}
|
||||||
|
{$ENDIF}
|
||||||
|
{$ENDIF}
|
||||||
|
{$ENDIF}
|
||||||
|
{ This define turns off all platform warnings in Delphi 6. Delphi 6 }
|
||||||
|
{ is cross-platform compatible with Kylix and all of Orpheus' Win32 }
|
||||||
|
{ only stuff causes the compiler to throw a truckload of platform }
|
||||||
|
{ warnings when rebuilding packages. }
|
||||||
|
|
||||||
|
{.$DEFINE ZeroDateAsNull}
|
||||||
|
{This define enables special handling for a zero date. If defined, }
|
||||||
|
{assigning 0 to a date field is treated the same as assigning the }
|
||||||
|
{constant "BadDate" (see manual) using the AsDateTime property. }
|
||||||
|
{Otherwise, 0 is treated as a valid date. (32-bit only) }
|
1291
components/orpheus/ovcabot0.lfm
Normal file
1323
components/orpheus/ovcabot0.lrs
Normal file
197
components/orpheus/ovcabot0.pas
Normal file
@ -0,0 +1,197 @@
|
|||||||
|
{*********************************************************}
|
||||||
|
{* OVCABOT0.PAS 4.06 *}
|
||||||
|
{*********************************************************}
|
||||||
|
|
||||||
|
{* ***** BEGIN LICENSE BLOCK ***** *}
|
||||||
|
{* Version: MPL 1.1 *}
|
||||||
|
{* *}
|
||||||
|
{* The contents of this file are subject to the Mozilla Public License *}
|
||||||
|
{* Version 1.1 (the "License"); you may not use this file except in *}
|
||||||
|
{* compliance with the License. You may obtain a copy of the License at *}
|
||||||
|
{* http://www.mozilla.org/MPL/ *}
|
||||||
|
{* *}
|
||||||
|
{* Software distributed under the License is distributed on an "AS IS" basis, *}
|
||||||
|
{* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License *}
|
||||||
|
{* for the specific language governing rights and limitations under the *}
|
||||||
|
{* License. *}
|
||||||
|
{* *}
|
||||||
|
{* The Original Code is TurboPower Orpheus *}
|
||||||
|
{* *}
|
||||||
|
{* The Initial Developer of the Original Code is TurboPower Software *}
|
||||||
|
{* *}
|
||||||
|
{* Portions created by TurboPower Software Inc. are Copyright (C)1995-2002 *}
|
||||||
|
{* TurboPower Software Inc. All Rights Reserved. *}
|
||||||
|
{* *}
|
||||||
|
{* Contributor(s): *}
|
||||||
|
{* *}
|
||||||
|
{* ***** END LICENSE BLOCK ***** *}
|
||||||
|
|
||||||
|
{$I OVC.INC}
|
||||||
|
|
||||||
|
{$B-} {Complete Boolean Evaluation}
|
||||||
|
{$I+} {Input/Output-Checking}
|
||||||
|
{$P+} {Open Parameters}
|
||||||
|
{$T-} {Typed @ Operator}
|
||||||
|
{.W-} {Windows Stack Frame}
|
||||||
|
{$X+} {Extended Syntax}
|
||||||
|
|
||||||
|
unit Ovcabot0;
|
||||||
|
|
||||||
|
interface
|
||||||
|
|
||||||
|
uses
|
||||||
|
{$IFNDEF LCL} Windows, Messages, {$ELSE} LclIntf, LMessages, LclType, LResources, MyMisc, Buttons, {$ENDIF}
|
||||||
|
SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls,
|
||||||
|
{$IFNDEF LCL} {$IFDEF VERSION6} DesignIntf, DesignEditors, {$ELSE} DsgnIntf, {$ENDIF} {$ELSE} PropEdits, {$ENDIF}
|
||||||
|
ExtCtrls, OvcVer, OvcURL, {$IFDEF MSWINDOWS} ShellAPI; {$ELSE} Unix; {$ENDIF}
|
||||||
|
|
||||||
|
type
|
||||||
|
TOvcfrmAboutForm = class(TForm)
|
||||||
|
Panel1: TPanel;
|
||||||
|
Image1: TImage;
|
||||||
|
btnOK: TButton;
|
||||||
|
Label1: TLabel;
|
||||||
|
VisitUsLabel: TLabel;
|
||||||
|
lblTurboLink: TLabel;
|
||||||
|
Bevel3: TBevel;
|
||||||
|
GeneralNewsgroupsLabel: TLabel;
|
||||||
|
lblHelp: TLabel;
|
||||||
|
lblGeneralDiscussion: TLabel;
|
||||||
|
Label3: TLabel;
|
||||||
|
Label2: TLabel;
|
||||||
|
procedure btnOKClick(Sender: TObject);
|
||||||
|
procedure FormCreate(Sender: TObject);
|
||||||
|
procedure lblTurboLinkClick(Sender: TObject);
|
||||||
|
procedure lblHelpClick(Sender: TObject);
|
||||||
|
procedure lblGeneralDiscussionClick(Sender: TObject);
|
||||||
|
private
|
||||||
|
{ Private declarations }
|
||||||
|
public
|
||||||
|
{ Public declarations }
|
||||||
|
end;
|
||||||
|
|
||||||
|
TOvcAboutProperty = class(TStringProperty)
|
||||||
|
public
|
||||||
|
function GetAttributes: TPropertyAttributes;
|
||||||
|
override;
|
||||||
|
procedure Edit;
|
||||||
|
override;
|
||||||
|
end;
|
||||||
|
|
||||||
|
implementation
|
||||||
|
{$IFNDEF LCL}
|
||||||
|
{$R *.DFM}
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
|
||||||
|
{*** TOrAboutProperty ***}
|
||||||
|
|
||||||
|
function TOvcAboutProperty.GetAttributes: TPropertyAttributes;
|
||||||
|
begin
|
||||||
|
Result := [paDialog, paReadOnly];
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TOvcAboutProperty.Edit;
|
||||||
|
begin
|
||||||
|
with TOvcfrmAboutForm.Create(Application) do begin
|
||||||
|
try
|
||||||
|
ShowModal;
|
||||||
|
finally
|
||||||
|
Free;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
{*** TEsAboutForm ***}
|
||||||
|
|
||||||
|
procedure TOvcfrmAboutForm.btnOKClick(Sender: TObject);
|
||||||
|
begin
|
||||||
|
Close;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TOvcfrmAboutForm.FormCreate(Sender: TObject);
|
||||||
|
begin
|
||||||
|
Top := (Screen.Height - Height) div 3;
|
||||||
|
Left := (Screen.Width - Width) div 2;
|
||||||
|
|
||||||
|
lblTurboLink.Cursor := crHandPoint;
|
||||||
|
lblHelp.Cursor := crHandPoint;
|
||||||
|
lblGeneralDiscussion.Cursor := crHandPoint;
|
||||||
|
|
||||||
|
{$IFDEF LCL}
|
||||||
|
Image1.Transparent := False; //Default is True with Laz, False with Delphi
|
||||||
|
{$ENDIF}
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TOvcfrmAboutForm.lblTurboLinkClick(Sender: TObject);
|
||||||
|
begin
|
||||||
|
{$IFDEF MSWINDOWS}
|
||||||
|
{$IFNDEF LCL}
|
||||||
|
if ShellExecute(0, 'open', 'http://sourceforge.net/projects/tporpheus/',
|
||||||
|
{$ELSE}
|
||||||
|
if ShellExecute(0, 'open', PChar('http://sourceforge.net/projects/tporpheus/'),
|
||||||
|
{$ENDIF}
|
||||||
|
'', '', SW_SHOWNORMAL) <= 32
|
||||||
|
{$ELSE}
|
||||||
|
{$IFDEF DARWIN}
|
||||||
|
if Shell('Open http://sourceforge.net/projects/tporpheus/') = 127
|
||||||
|
{$ELSE}
|
||||||
|
if (GetBrowserPath = '') or
|
||||||
|
(Shell(GetBrowserPath + ' http://sourceforge.net/projects/tporpheus/') = 127)
|
||||||
|
{$ENDIF}
|
||||||
|
{$ENDIF}
|
||||||
|
then
|
||||||
|
ShowMessage('Error launching browser.');
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TOvcfrmAboutForm.lblHelpClick(Sender: TObject);
|
||||||
|
begin
|
||||||
|
{$IFDEF MSWINDOWS}
|
||||||
|
if ShellExecute(0, 'open',
|
||||||
|
{$IFNDEF LCL}
|
||||||
|
'http://sourceforge.net/forum/forum.php?forum_id=241874', '', '',
|
||||||
|
{$ELSE}
|
||||||
|
PChar('http://sourceforge.net/forum/forum.php?forum_id=241874'), '', '',
|
||||||
|
{$ENDIF}
|
||||||
|
SW_SHOWNORMAL) <= 32
|
||||||
|
{$ELSE}
|
||||||
|
{$IFDEF DARWIN}
|
||||||
|
if Shell('Open http://sourceforge.net/forum/forum.php?forum_id=241874') = 127
|
||||||
|
{$ELSE}
|
||||||
|
if (GetBrowserPath = '') or
|
||||||
|
(Shell(GetBrowserPath + ' http://sourceforge.net/forum/forum.php?forum_id=241874') = 127)
|
||||||
|
{$ENDIF}
|
||||||
|
{$ENDIF}
|
||||||
|
then
|
||||||
|
ShowMessage('Error launching browser.');
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TOvcfrmAboutForm.lblGeneralDiscussionClick(Sender: TObject);
|
||||||
|
begin
|
||||||
|
{$IFDEF MSWINDOWS}
|
||||||
|
if ShellExecute(0, 'open',
|
||||||
|
{$IFNDEF LCL}
|
||||||
|
'http://sourceforge.net/forum/forum.php?forum_id=241873', '', '',
|
||||||
|
{$ELSE}
|
||||||
|
PChar('http://sourceforge.net/forum/forum.php?forum_id=241873'), '', '',
|
||||||
|
{$ENDIF}
|
||||||
|
SW_SHOWNORMAL) <= 32
|
||||||
|
{$ELSE}
|
||||||
|
{$IFDEF DARWIN}
|
||||||
|
if Shell('Open http://sourceforge.net/forum/forum.php?forum_id=241873') = 127
|
||||||
|
{$ELSE}
|
||||||
|
if (GetBrowserPath = '') or
|
||||||
|
(Shell(GetBrowserPath + ' http://sourceforge.net/forum/forum.php?forum_id=241873') = 127)
|
||||||
|
{$ENDIF}
|
||||||
|
{$ENDIF}
|
||||||
|
then
|
||||||
|
ShowMessage('Error launching browser.');
|
||||||
|
end;
|
||||||
|
|
||||||
|
initialization
|
||||||
|
{$IFDEF LCL}
|
||||||
|
{$I Ovcabot0.lrs} {Include form's resource file}
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
end.
|
||||||
|
|
66
components/orpheus/ovcbase.lrs
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
LazarusResources.Add('ORTCCOMBOARROW','BMP',[
|
||||||
|
'BM'#162#0#0#0#0#0#0#0'v'#0#0#0'('#0#0#0#7#0#0#0#11#0#0#0#1#0#4#0#0#0#0#0','#0
|
||||||
|
+#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#128#0#0#128#0#0#0#128#128#0
|
||||||
|
+#128#0#0#0#128#0#128#0#128#128#0#0#128#128#128#0#192#192#192#0#0#0#255#0#0
|
||||||
|
+#255#0#0#0#255#255#0#255#0#0#0#255#0#255#0#255#255#0#0#255#255#255#0#136#136
|
||||||
|
+#136#128#136#136#136#128#136#136#136#128#136#128#136#128#136#0#8#128#128#0#0
|
||||||
|
+#128#0#0#0#0#136#136#136#128#136#136#136#128#136#136#136#128#136#136#136#128
|
||||||
|
]);
|
||||||
|
LazarusResources.Add('ORTCCHECKGLYPHS','BMP',[
|
||||||
|
'BM'#198#1#0#0#0#0#0#0'v'#0#0#0'('#0#0#0'*'#0#0#0#14#0#0#0#1#0#4#0#0#0#0#0'P'
|
||||||
|
+#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#128#0#0#128#0#0#0#128#128
|
||||||
|
+#0#128#0#0#0#128#0#128#0#128#128#0#0#128#128#128#0#192#192#192#0#0#0#255#0#0
|
||||||
|
+#255#0#0#0#255#255#0#255#0#0#0#255#0#255#0#255#255#0#0#255#255#255#0#215'www'
|
||||||
|
+'www'#215'wwwwww'#215'wwwwww'#0#0#0#15#255#255#255#255#255#247#15#255#255#255
|
||||||
|
+#255#255#247#15#255#255#255#255#255#247#0#0#0#7#136#136#136#136#136#247#7#136
|
||||||
|
+#136#136#136#136#247#7#8#128#8#128#8#247#0#0#0#7#136#136#136#136#136#247#7
|
||||||
|
+#128#8#136#128#8#247#7#128#8#128#8#128#247#0#0#0#7#136#136#136#136#136#247#7
|
||||||
|
+#128#0#136#0#8#247#7#128#8#128#8#128#247#0#0#0#7#136#136#136#136#136#247#7
|
||||||
|
+#136#0#0#0#136#247#7#8#128#8#128#8#247#0#0#0#7#136#136#136#136#136#247#7#136
|
||||||
|
+#128#0#8#136#247#7#8#128#8#128#8#247#0#0#0#7#136#136#136#136#136#247#7#136
|
||||||
|
+#128#0#8#136#247#7#128#8#128#8#128#247#0#0#0#7#136#136#136#136#136#247#7#136
|
||||||
|
+#0#0#0#136#247#7#128#8#128#8#128#247#0#0#0#7#136#136#136#136#136#247#7#128#0
|
||||||
|
+#136#0#8#247#7#8#128#8#128#8#247#0#0#0#7#136#136#136#136#136#247#7#128#8#136
|
||||||
|
+#128#8#247#7#8#128#8#128#8#247#0#0#0#7#136#136#136#136#136#247#7#136#136#136
|
||||||
|
+#136#136#247#7#128#8#128#8#128#247#0#0#0#7'wwwww'#247#7'wwwww'#247#7'wwwww'
|
||||||
|
+#247#0#0#0#0#0#0#0#0#0#7#0#0#0#0#0#0#7#0#0#0#0#0#0#7#0#0#0
|
||||||
|
]);
|
||||||
|
LazarusResources.Add('ORBTNCLC','BMP',[
|
||||||
|
'BM'#206#0#0#0#0#0#0#0'v'#0#0#0'('#0#0#0#11#0#0#0#11#0#0#0#1#0#4#0#0#0#0#0'X'
|
||||||
|
+#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#128#0#0#128#0#0#0#128#128
|
||||||
|
+#0#128#0#0#0#128#0#128#0#128#128#0#0#128#128#128#0#192#192#192#0#0#0#255#0#0
|
||||||
|
+#255#0#0#0#255#255#0#255#0#0#0#255#0#255#0#255#255#0#0#255#255#255#0'0'#0#0#0
|
||||||
|
+#0'0'#0#0#8#136#136#136#136#0#0#0#8#8#8#153#152#0#0#0#8#136#136#136#136#0#0#0
|
||||||
|
+#8#8#8#8#8#0#0#0#8#136#136#136#136#0#0#0#8#0#0#0#8#0#0#0#8#0#14#14#8#0#0#0#8
|
||||||
|
+#0#0#0#8#0#0#0#8#136#136#136#136#0#0#0'0'#0#0#0#0'0'#0#0
|
||||||
|
]);
|
||||||
|
LazarusResources.Add('ORCOLUMNMOVECURSOR','CUR',[
|
||||||
|
#0#0#2#0#1#0' '#0#0#0#0#0#0'0'#1#0#0#22#0#0#0'('#0#0#0' '#0#0#0'@'#0#0#0#1#0
|
||||||
|
+#1#0#0#0#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#255#255#255#0#0
|
||||||
|
+#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#31#224#0#0#31#224#0#0#31#224
|
||||||
|
+#0#0#31#224#0#0#31#224#0#0'_'#224#0#0#223#224#0#0#223#224#0#1#159#224#0#1#159
|
||||||
|
+#224#0#3#0#0#0#3#31#224#0'F'#31#224#0'f'#0#0#0'|'#0#0#0'|'#0#0#0''#192#0#0
|
||||||
|
+''#128#0#0''#0#0#0'~'#0#0#0'|'#0#0#0'x'#0#0#0'p'#0#0#0'`'#0#0#0'@'#0#0#0#0
|
||||||
|
+#0#0#0#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255
|
||||||
|
+#255#255#255#255#192#15#255#255#223#239#255#255#223#239#255#255#223#239#255
|
||||||
|
+#255#223#239#255#255#159#239#255#255#31#239#255#254#31#239#255#254#31#239#255
|
||||||
|
+#252#31#239#255#252#31#239#255#248'@'#15#255'8@'#15#255#16#192#15#255#0#192
|
||||||
|
+#15#255#1#255#255#255#0#31#255#255#0#31#255#255#0'?'#255#255#0''#255#255#0
|
||||||
|
+#255#255#255#1#255#255#255#3#255#255#255#7#255#255#255#15#255#255#255#31#255
|
||||||
|
+#255#255'?'#255#255#255
|
||||||
|
]);
|
||||||
|
LazarusResources.Add('ORROWMOVECURSOR','CUR',[
|
||||||
|
#0#0#2#0#1#0' '#0#0#0#0#0#0'0'#1#0#0#22#0#0#0'('#0#0#0' '#0#0#0'@'#0#0#0#1#0
|
||||||
|
+#1#0#0#0#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#255#255#255#0#0
|
||||||
|
+#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#29#255#240#0
|
||||||
|
+#29#255#240#0#29#255#240#0#0#0#0#0#0#192#0#0#0#192#0#0#1#128#0#0#1#128#0#0#3
|
||||||
|
+#0#0#0#3#0#0#0'F'#0#0#0'f'#0#0#0'|'#0#0#0'|'#0#0#0''#192#0#0''#128#0#0''#0
|
||||||
|
+#0#0'~'#0#0#0'|'#0#0#0'x'#0#0#0'p'#0#0#0'`'#0#0#0'@'#0#0#0#0#0#0#0#255#255
|
||||||
|
+#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255
|
||||||
|
+#255#255#255#255#255#255#255#192#0#7#255#193#255#247#255#193#255#247#255#193
|
||||||
|
+#255#247#255#192#0#7#255#254#31#255#255#254#31#255#255#252'?'#255#255#252'?'
|
||||||
|
+#255#255#248''#255#255'8'#255#255#16#255#255#255#0#255#255#255#1#255#255
|
||||||
|
+#255#0#31#255#255#0#31#255#255#0'?'#255#255#0''#255#255#0#255#255#255#1#255
|
||||||
|
+#255#255#3#255#255#255#7#255#255#255#15#255#255#255#31#255#255#255'?'#255#255
|
||||||
|
+#255
|
||||||
|
]);
|
2747
components/orpheus/ovcbase.pas
Normal file
BIN
components/orpheus/ovcbase.res
Normal file
1510
components/orpheus/ovcbcalc.pas
Normal file
735
components/orpheus/ovcbordr.pas
Normal file
@ -0,0 +1,735 @@
|
|||||||
|
{*********************************************************}
|
||||||
|
{* OVCBORDR.PAS 4.06 *}
|
||||||
|
{*********************************************************}
|
||||||
|
|
||||||
|
{* ***** BEGIN LICENSE BLOCK ***** *}
|
||||||
|
{* Version: MPL 1.1 *}
|
||||||
|
{* *}
|
||||||
|
{* The contents of this file are subject to the Mozilla Public License *}
|
||||||
|
{* Version 1.1 (the "License"); you may not use this file except in *}
|
||||||
|
{* compliance with the License. You may obtain a copy of the License at *}
|
||||||
|
{* http://www.mozilla.org/MPL/ *}
|
||||||
|
{* *}
|
||||||
|
{* Software distributed under the License is distributed on an "AS IS" basis, *}
|
||||||
|
{* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License *}
|
||||||
|
{* for the specific language governing rights and limitations under the *}
|
||||||
|
{* License. *}
|
||||||
|
{* *}
|
||||||
|
{* The Original Code is TurboPower Orpheus *}
|
||||||
|
{* *}
|
||||||
|
{* The Initial Developer of the Original Code is TurboPower Software *}
|
||||||
|
{* *}
|
||||||
|
{* Portions created by TurboPower Software Inc. are Copyright (C)1995-2002 *}
|
||||||
|
{* TurboPower Software Inc. All Rights Reserved. *}
|
||||||
|
{* *}
|
||||||
|
{* Contributor(s): *}
|
||||||
|
{* *}
|
||||||
|
{* ***** END LICENSE BLOCK ***** *}
|
||||||
|
|
||||||
|
{$I OVC.INC}
|
||||||
|
|
||||||
|
{$B-} {Complete Boolean Evaluation}
|
||||||
|
{$I+} {Input/Output-Checking}
|
||||||
|
{$P+} {Open Parameters}
|
||||||
|
{$T-} {Typed @ Operator}
|
||||||
|
{.W-} {Windows Stack Frame}
|
||||||
|
{$X+} {Extended Syntax}
|
||||||
|
|
||||||
|
unit ovcbordr;
|
||||||
|
{Old style, To be deprecated - simple, single, solid borders for entry
|
||||||
|
controls}
|
||||||
|
|
||||||
|
interface
|
||||||
|
|
||||||
|
uses
|
||||||
|
{$IFNDEF LCL} Windows, Messages, {$ELSE} LclIntf, LMessages, MyMisc, {$ENDIF}
|
||||||
|
Buttons, Classes, Controls, ExtCtrls, Forms, Graphics, Menus,
|
||||||
|
StdCtrls, SysUtils, OvcBase, OvcConst, OvcData,
|
||||||
|
OvcMisc, OvcEditF;
|
||||||
|
|
||||||
|
type
|
||||||
|
TOvcBorderStyle = (bpsSolid);
|
||||||
|
|
||||||
|
TOvcBorderEdButton = class(TBitBtn)
|
||||||
|
public
|
||||||
|
procedure Click; override;
|
||||||
|
end;
|
||||||
|
|
||||||
|
TOvcBorder = class(TPersistent)
|
||||||
|
protected {private}
|
||||||
|
FEnabled : Boolean; {is border used}
|
||||||
|
FBorderStyle : TOvcBorderStyle; {bpsSolid only for now}
|
||||||
|
FPenColor : TColor; {color of pen}
|
||||||
|
FPenStyle : TPenStyle; {Windows pen style}
|
||||||
|
FPenWidth : integer; {width of pen}
|
||||||
|
|
||||||
|
FOnChange : TNotifyEvent; {notify owner of changes}
|
||||||
|
|
||||||
|
protected
|
||||||
|
procedure DoOnChange;
|
||||||
|
procedure SetDefaults;
|
||||||
|
|
||||||
|
procedure SetEnabled(Value : Boolean);
|
||||||
|
procedure SetBorderStyle(Value : TOvcBorderStyle);
|
||||||
|
procedure SetPenColor(Value : TColor);
|
||||||
|
procedure SetPenStyle(Value : TPenStyle);
|
||||||
|
procedure SetPenWidth(Value : integer);
|
||||||
|
|
||||||
|
public
|
||||||
|
procedure Assign(Value : TPersistent); override;
|
||||||
|
constructor Create;
|
||||||
|
|
||||||
|
published
|
||||||
|
property BorderStyle : TOvcBorderStyle
|
||||||
|
read FBorderStyle
|
||||||
|
write SetBorderStyle
|
||||||
|
stored FEnabled
|
||||||
|
default bpsSolid;
|
||||||
|
|
||||||
|
property Enabled : Boolean
|
||||||
|
read FEnabled
|
||||||
|
write SetEnabled
|
||||||
|
default False;
|
||||||
|
|
||||||
|
property OnChange : TNotifyEvent
|
||||||
|
read FOnChange
|
||||||
|
write FOnChange;
|
||||||
|
|
||||||
|
property PenColor : TColor
|
||||||
|
read FPenColor
|
||||||
|
write SetPenColor
|
||||||
|
stored FEnabled
|
||||||
|
default clBlack;
|
||||||
|
|
||||||
|
property PenStyle : TPenStyle
|
||||||
|
read FPenStyle
|
||||||
|
write SetPenStyle
|
||||||
|
stored FEnabled
|
||||||
|
default psSolid;
|
||||||
|
|
||||||
|
property PenWidth : integer
|
||||||
|
read FPenWidth
|
||||||
|
write SetPenWidth
|
||||||
|
stored FEnabled
|
||||||
|
default 2;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
TOvcBorders = class(TPersistent)
|
||||||
|
protected {private}
|
||||||
|
FLeftBorder : TOvcBorder;
|
||||||
|
FRightBorder : TOvcBorder;
|
||||||
|
FTopBorder : TOvcBorder;
|
||||||
|
FBottomBorder : TOvcBorder;
|
||||||
|
|
||||||
|
public
|
||||||
|
procedure Assign(Source : TPersistent); override;
|
||||||
|
constructor Create;
|
||||||
|
destructor Destroy; override;
|
||||||
|
|
||||||
|
published
|
||||||
|
property BottomBorder : TOvcBorder
|
||||||
|
read FBottomBorder
|
||||||
|
write FBottomBorder;
|
||||||
|
|
||||||
|
property LeftBorder : TOvcBorder
|
||||||
|
read FLeftBorder
|
||||||
|
write FLeftBorder;
|
||||||
|
|
||||||
|
property RightBorder : TOvcBorder
|
||||||
|
read FRightBorder
|
||||||
|
write FRightBorder;
|
||||||
|
|
||||||
|
property TopBorder : TOvcBorder
|
||||||
|
read FTopBorder
|
||||||
|
write FTopBorder;
|
||||||
|
end;
|
||||||
|
|
||||||
|
TOvcBorderParent = class(TOvcCustomControl)
|
||||||
|
{.Z+}
|
||||||
|
protected {private}
|
||||||
|
{property variables}
|
||||||
|
FBorders : TOvcBorders;
|
||||||
|
FEdit : TOvcCustomEdit;
|
||||||
|
FLabelInfo : TOvcLabelInfo;
|
||||||
|
|
||||||
|
FOrgHeight : integer;
|
||||||
|
|
||||||
|
protected
|
||||||
|
DefaultLabelPosition : TOvcLabelPosition;
|
||||||
|
DoingBorders : Boolean;
|
||||||
|
|
||||||
|
procedure BorderChanged(ABorder : TObject);
|
||||||
|
function GetAttachedLabel : TOvcAttachedLabel;
|
||||||
|
procedure Paint; override;
|
||||||
|
procedure PaintBorders; virtual;
|
||||||
|
|
||||||
|
procedure WMSetFocus(var Msg : TWMSetFocus);
|
||||||
|
message WM_SETFOCUS;
|
||||||
|
procedure WMKillFocus(var Msg : TWMKillFocus);
|
||||||
|
message WM_KillFOCUS;
|
||||||
|
|
||||||
|
{internal methods}
|
||||||
|
procedure LabelChange(Sender : TObject);
|
||||||
|
procedure LabelAttach(Sender : TObject; Value : Boolean);
|
||||||
|
procedure PositionLabel;
|
||||||
|
|
||||||
|
{VCL message methods}
|
||||||
|
procedure CMVisibleChanged(var Msg : TMessage);
|
||||||
|
message CM_VISIBLECHANGED;
|
||||||
|
|
||||||
|
procedure OrAssignLabel(var Msg : TMessage);
|
||||||
|
message OM_ASSIGNLABEL;
|
||||||
|
procedure OrPositionLabel(var Msg : TMessage);
|
||||||
|
message OM_POSITIONLABEL;
|
||||||
|
procedure OrRecordLabelPosition(var Msg : TMessage);
|
||||||
|
message OM_RECORDLABELPOSITION;
|
||||||
|
|
||||||
|
|
||||||
|
procedure CreateWnd;
|
||||||
|
override;
|
||||||
|
procedure Notification(AComponent : TComponent; Operation: TOperation);
|
||||||
|
override;
|
||||||
|
|
||||||
|
public
|
||||||
|
ButtonWidth : integer;
|
||||||
|
DoShowButton : Boolean;
|
||||||
|
|
||||||
|
constructor Create(AOwner : TComponent);
|
||||||
|
override;
|
||||||
|
destructor Destroy;
|
||||||
|
override;
|
||||||
|
procedure SetBounds(ALeft, ATop, AWidth, AHeight: Integer);
|
||||||
|
override;
|
||||||
|
procedure SetEditControl(EC : TOvcCustomEdit); virtual;
|
||||||
|
|
||||||
|
property AttachedLabel : TOvcAttachedLabel
|
||||||
|
read GetAttachedLabel;
|
||||||
|
|
||||||
|
property Canvas;
|
||||||
|
|
||||||
|
property EditControl : TOvcCustomEdit
|
||||||
|
read FEdit
|
||||||
|
write FEdit;
|
||||||
|
|
||||||
|
published
|
||||||
|
property Borders : TOvcBorders
|
||||||
|
read FBorders
|
||||||
|
write FBorders;
|
||||||
|
|
||||||
|
property LabelInfo : TOvcLabelInfo
|
||||||
|
read FLabelInfo
|
||||||
|
write FLabelInfo;
|
||||||
|
end;
|
||||||
|
|
||||||
|
implementation
|
||||||
|
|
||||||
|
uses
|
||||||
|
OvcBCalc;
|
||||||
|
|
||||||
|
procedure TOvcBorderEdButton.Click;
|
||||||
|
begin
|
||||||
|
TOvcBorderEdPopup(Parent).PopupOpen;
|
||||||
|
end;
|
||||||
|
|
||||||
|
{******************************************************************************}
|
||||||
|
{ TOvcBorder }
|
||||||
|
{******************************************************************************}
|
||||||
|
constructor TOvcBorder.Create;
|
||||||
|
begin
|
||||||
|
inherited Create;
|
||||||
|
SetDefaults;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
procedure TOvcBorder.Assign(Value : TPersistent);
|
||||||
|
var
|
||||||
|
B : TOvcBorder absolute Value;
|
||||||
|
begin
|
||||||
|
if (Value <> nil) and (Value is TOvcBorder) then begin
|
||||||
|
Enabled := B.Enabled;
|
||||||
|
PenColor := B.PenColor;
|
||||||
|
PenStyle := B.PenStyle;
|
||||||
|
PenWidth := B.PenWidth;
|
||||||
|
end else
|
||||||
|
inherited Assign(Value);
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
procedure TOvcBorder.DoOnChange;
|
||||||
|
begin
|
||||||
|
if (Assigned(FOnChange)) then
|
||||||
|
FOnChange(Self);
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
procedure TOvcBorder.SetDefaults;
|
||||||
|
begin
|
||||||
|
FEnabled := False;
|
||||||
|
FPenColor := clBlack;
|
||||||
|
FPenStyle := psSolid;
|
||||||
|
FPenWidth := 2;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TOvcBorder.SetBorderStyle(Value : TOvcBorderStyle);
|
||||||
|
begin
|
||||||
|
if (FBorderStyle <> Value) then begin
|
||||||
|
FBorderStyle := Value;
|
||||||
|
DoOnChange;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
procedure TOvcBorder.SetEnabled(Value : Boolean);
|
||||||
|
begin
|
||||||
|
if (FEnabled <> Value) then begin
|
||||||
|
FEnabled := Value;
|
||||||
|
DoOnChange;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
procedure TOvcBorder.SetPenColor(Value : TColor);
|
||||||
|
begin
|
||||||
|
if (FPenColor <> Value) then begin
|
||||||
|
FPenColor := Value;
|
||||||
|
DoOnChange;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
procedure TOvcBorder.SetPenStyle(Value : TPenStyle);
|
||||||
|
begin
|
||||||
|
if (FPenStyle <> Value) then begin
|
||||||
|
FPenStyle := Value;
|
||||||
|
DoOnChange;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
procedure TOvcBorder.SetPenWidth(Value : integer);
|
||||||
|
begin
|
||||||
|
if (FPenWidth <> Value) and (Value > 0) then begin
|
||||||
|
FPenWidth := Value;
|
||||||
|
DoOnChange;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
{******************************************************************************}
|
||||||
|
{ TOvcBorders }
|
||||||
|
{******************************************************************************}
|
||||||
|
|
||||||
|
constructor TOvcBorders.Create;
|
||||||
|
begin
|
||||||
|
inherited Create;
|
||||||
|
|
||||||
|
FBottomBorder := TOvcBorder.Create;
|
||||||
|
FLeftBorder := TOvcBorder.Create;
|
||||||
|
FRightBorder := TOvcBorder.Create;
|
||||||
|
FTopBorder := TOvcBorder.Create;
|
||||||
|
end;
|
||||||
|
|
||||||
|
destructor TOvcBorders.Destroy;
|
||||||
|
begin
|
||||||
|
FBottomBorder.Free;
|
||||||
|
FBottomBorder := nil;
|
||||||
|
|
||||||
|
FLeftBorder.Free;
|
||||||
|
FLeftBorder := nil;
|
||||||
|
|
||||||
|
FRightBorder.Free;
|
||||||
|
FRightBorder := nil;
|
||||||
|
|
||||||
|
FTopBorder.Free;
|
||||||
|
FTopBorder := nil;
|
||||||
|
|
||||||
|
inherited Destroy;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TOvcBorders.Assign(Source : TPersistent);
|
||||||
|
var
|
||||||
|
B : TOvcBorders absolute Source;
|
||||||
|
begin
|
||||||
|
if (Source <> nil) and (Source is TOvcBorders) then begin
|
||||||
|
FBottomBorder.Assign(B.BottomBorder);
|
||||||
|
FLeftBorder.Assign(B.LeftBorder);
|
||||||
|
FRightBorder.Assign(B.RightBorder);
|
||||||
|
FTopBorder.Assign(B.TopBorder);
|
||||||
|
end else
|
||||||
|
inherited Assign(Source);
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
{******************************************************************************}
|
||||||
|
{ TOvcBorderParent }
|
||||||
|
{******************************************************************************}
|
||||||
|
|
||||||
|
procedure TOvcBorderParent.BorderChanged(ABorder : TObject);
|
||||||
|
begin
|
||||||
|
PaintBorders;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
procedure TOvcBorderParent.CMVisibleChanged(var Msg : TMessage);
|
||||||
|
begin
|
||||||
|
inherited;
|
||||||
|
|
||||||
|
if csLoading in ComponentState then
|
||||||
|
Exit;
|
||||||
|
|
||||||
|
if LabelInfo.Visible then
|
||||||
|
AttachedLabel.Visible := Visible;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
constructor TOvcBorderParent.Create(AOwner : TComponent);
|
||||||
|
begin
|
||||||
|
inherited Create(AOwner);
|
||||||
|
|
||||||
|
Parent := TWinControl(AOwner);
|
||||||
|
|
||||||
|
Height := 21;
|
||||||
|
Width := 121;
|
||||||
|
|
||||||
|
FOrgHeight := 21;
|
||||||
|
|
||||||
|
ControlStyle := ControlStyle - [csSetCaption];
|
||||||
|
|
||||||
|
ParentColor := True;
|
||||||
|
Ctl3D := False;
|
||||||
|
|
||||||
|
|
||||||
|
{set default position and reference point}
|
||||||
|
DefaultLabelPosition := lpTopLeft;
|
||||||
|
|
||||||
|
FLabelInfo := TOvcLabelInfo.Create;
|
||||||
|
FLabelInfo.OnChange := LabelChange;
|
||||||
|
FLabelInfo.OnAttach := LabelAttach;
|
||||||
|
|
||||||
|
{create borders class and assign notifications}
|
||||||
|
FBorders := TOvcBorders.Create;
|
||||||
|
|
||||||
|
FBorders.LeftBorder.OnChange := BorderChanged;
|
||||||
|
FBorders.RightBorder.OnChange := BorderChanged;
|
||||||
|
FBorders.TopBorder.OnChange := BorderChanged;
|
||||||
|
FBorders.BottomBorder.OnChange := BorderChanged;
|
||||||
|
end;
|
||||||
|
|
||||||
|
destructor TOvcBorderParent.Destroy;
|
||||||
|
begin
|
||||||
|
{detatch and destroy label, if any}
|
||||||
|
FLabelInfo.Visible := False;
|
||||||
|
|
||||||
|
{dispose the borders object}
|
||||||
|
FBorders.Free;
|
||||||
|
FLabelInfo.Free;
|
||||||
|
FBorders := nil;
|
||||||
|
FLabelInfo := nil;
|
||||||
|
|
||||||
|
inherited Destroy;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TOvcBorderParent.GetAttachedLabel : TOvcAttachedLabel;
|
||||||
|
begin
|
||||||
|
if not FLabelInfo.Visible then
|
||||||
|
raise Exception.Create(GetOrphStr(SCLabelNotAttached));
|
||||||
|
|
||||||
|
Result := FLabelInfo.ALabel;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
procedure TOvcBorderParent.WMSetFocus(var Msg : TWMSetFocus);
|
||||||
|
begin
|
||||||
|
inherited;
|
||||||
|
if (Assigned(FEdit)) then
|
||||||
|
FEdit.SetFocus;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TOvcBorderParent.WMKillFocus(var Msg : TWMKillFocus);
|
||||||
|
begin
|
||||||
|
inherited;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TOvcBorderParent.LabelAttach(Sender : TObject; Value : Boolean);
|
||||||
|
var
|
||||||
|
{$IFDEF VERSION5}
|
||||||
|
PF : TWinControl;
|
||||||
|
{$ELSE}
|
||||||
|
PF : TForm;
|
||||||
|
{$ENDIF}
|
||||||
|
S :string;
|
||||||
|
begin
|
||||||
|
if csLoading in ComponentState then
|
||||||
|
Exit;
|
||||||
|
|
||||||
|
{$IFDEF VERSION5}
|
||||||
|
PF := GetImmediateParentForm(Self);
|
||||||
|
{$ELSE}
|
||||||
|
PF := TForm(GetParentForm(Self));
|
||||||
|
{$ENDIF}
|
||||||
|
if Value then begin
|
||||||
|
if Assigned(PF) then begin
|
||||||
|
FLabelInfo.ALabel.Free;
|
||||||
|
FLabelInfo.ALabel := TOvcAttachedLabel.CreateEx(PF, Self);
|
||||||
|
FLabelInfo.ALabel.Parent := Parent;
|
||||||
|
|
||||||
|
S := GenerateComponentName(PF, Name + 'Label');
|
||||||
|
FLabelInfo.ALabel.Name := S;
|
||||||
|
FLabelInfo.ALabel.Caption := S;
|
||||||
|
|
||||||
|
FLabelInfo.SetOffsets(0, 0);
|
||||||
|
PositionLabel;
|
||||||
|
FLabelInfo.ALabel.BringToFront;
|
||||||
|
{turn off auto size}
|
||||||
|
TLabel(FLabelInfo.ALabel).AutoSize := False;
|
||||||
|
end;
|
||||||
|
end else begin
|
||||||
|
if Assigned(PF) then begin
|
||||||
|
FLabelInfo.ALabel.Free;
|
||||||
|
FLabelInfo.ALabel := nil;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
procedure TOvcBorderParent.LabelChange(Sender : TObject);
|
||||||
|
begin
|
||||||
|
if not (csLoading in ComponentState) then
|
||||||
|
PositionLabel;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
procedure TOvcBorderParent.CreateWnd;
|
||||||
|
begin
|
||||||
|
inherited CreateWnd;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TOvcBorderParent.Notification(AComponent : TComponent; Operation: TOperation);
|
||||||
|
var
|
||||||
|
{$IFDEF VERSION5}
|
||||||
|
PF : TWinControl;
|
||||||
|
{$ELSE}
|
||||||
|
PF : TForm;
|
||||||
|
{$ENDIF}
|
||||||
|
begin
|
||||||
|
inherited Notification(AComponent, Operation);
|
||||||
|
|
||||||
|
if Operation = opRemove then begin
|
||||||
|
if Assigned(FLabelInfo) and (AComponent = FLabelInfo.ALabel) then begin
|
||||||
|
{$IFDEF VERSION5}
|
||||||
|
PF := GetImmediateParentForm(Self);
|
||||||
|
{$ELSE}
|
||||||
|
PF := TForm(GetParentForm(Self));
|
||||||
|
{$ENDIF}
|
||||||
|
if Assigned(PF) and not (csDestroying in PF.ComponentState) then begin
|
||||||
|
FLabelInfo.FVisible := False;
|
||||||
|
FLabelInfo.ALabel := nil;
|
||||||
|
end
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
procedure TOvcBorderParent.OrAssignLabel(var Msg : TMessage);
|
||||||
|
begin
|
||||||
|
FLabelInfo.ALabel := TOvcAttachedLabel(Msg.lParam);
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
procedure TOvcBorderParent.OrPositionLabel(var Msg : TMessage);
|
||||||
|
const
|
||||||
|
DX : Integer = 0;
|
||||||
|
DY : Integer = 0;
|
||||||
|
begin
|
||||||
|
if FLabelInfo.Visible and Assigned(FLabelInfo.ALabel) and
|
||||||
|
(FLabelInfo.ALabel.Parent <> nil) and
|
||||||
|
not (csLoading in ComponentState) then begin
|
||||||
|
if DefaultLabelPosition = lpTopLeft then begin
|
||||||
|
DX := FLabelInfo.ALabel.Left - Left;
|
||||||
|
DY := FLabelInfo.ALabel.Top + FLabelInfo.ALabel.Height - Top;
|
||||||
|
end else begin
|
||||||
|
DX := FLabelInfo.ALabel.Left - Left;
|
||||||
|
DY := FLabelInfo.ALabel.Top - Top - Height;
|
||||||
|
end;
|
||||||
|
if (DX <> FLabelInfo.OffsetX) or (DY <> FLabelInfo.OffsetY) then
|
||||||
|
PositionLabel;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
procedure TOvcBorderParent.OrRecordLabelPosition(var Msg : TMessage);
|
||||||
|
begin
|
||||||
|
if Assigned(FLabelInfo.ALabel) and (FLabelInfo.ALabel.Parent <> nil) then begin
|
||||||
|
{if the label was cut and then pasted, this will complete the reattachment}
|
||||||
|
FLabelInfo.FVisible := True;
|
||||||
|
|
||||||
|
if DefaultLabelPosition = lpTopLeft then
|
||||||
|
FLabelInfo.SetOffsets(FLabelInfo.ALabel.Left - Left,
|
||||||
|
FLabelInfo.ALabel.Top + FLabelInfo.ALabel.Height - Top)
|
||||||
|
else
|
||||||
|
FLabelInfo.SetOffsets(FLabelInfo.ALabel.Left - Left,
|
||||||
|
FLabelInfo.ALabel.Top - Top - Height);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
procedure TOvcBorderParent.PositionLabel;
|
||||||
|
begin
|
||||||
|
if FLabelInfo.Visible and Assigned(FLabelInfo.ALabel) and
|
||||||
|
(FLabelInfo.ALabel.Parent <> nil) and
|
||||||
|
not (csLoading in ComponentState) then begin
|
||||||
|
|
||||||
|
if DefaultLabelPosition = lpTopLeft then begin
|
||||||
|
FLabelInfo.ALabel.SetBounds(Left + FLabelInfo.OffsetX,
|
||||||
|
FLabelInfo.OffsetY - FLabelInfo.ALabel.Height + Top,
|
||||||
|
FLabelInfo.ALabel.Width, FLabelInfo.ALabel.Height);
|
||||||
|
end else begin
|
||||||
|
FLabelInfo.ALabel.SetBounds(Left + FLabelInfo.OffsetX,
|
||||||
|
FLabelInfo.OffsetY + Top + Height,
|
||||||
|
FLabelInfo.ALabel.Width, FLabelInfo.ALabel.Height);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
procedure TOvcBorderParent.SetBounds(ALeft, ATop, AWidth, AHeight : Integer);
|
||||||
|
begin
|
||||||
|
inherited SetBounds(ALeft, ATop, AWidth, AHeight);
|
||||||
|
|
||||||
|
if not HandleAllocated then
|
||||||
|
Exit;
|
||||||
|
|
||||||
|
if HandleAllocated then
|
||||||
|
PostMessage(Handle, OM_POSITIONLABEL, 0, 0);
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
procedure TOvcBorderParent.SetEditControl(EC : TOvcCustomEdit);
|
||||||
|
begin
|
||||||
|
FEdit := EC;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
procedure TOvcBorderParent.Paint;
|
||||||
|
begin
|
||||||
|
PaintBorders;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TOvcBorderParent.PaintBorders;
|
||||||
|
var
|
||||||
|
R : TRect;
|
||||||
|
C : TCanvas;
|
||||||
|
W : integer;
|
||||||
|
BW : integer;
|
||||||
|
begin
|
||||||
|
Height := FOrgHeight;
|
||||||
|
|
||||||
|
|
||||||
|
C := Canvas;
|
||||||
|
if DoShowButton then
|
||||||
|
W := ButtonWidth + 4
|
||||||
|
else
|
||||||
|
W := 0;
|
||||||
|
|
||||||
|
if (FBorders.LeftBorder.Enabled) then
|
||||||
|
FEdit.Left := FBorders.LeftBorder.PenWidth
|
||||||
|
else
|
||||||
|
FEdit.Left := 0;
|
||||||
|
|
||||||
|
if (FBorders.TopBorder.Enabled) then
|
||||||
|
FEdit.Top := FBorders.TopBorder.PenWidth
|
||||||
|
else
|
||||||
|
FEdit.Top := 0;
|
||||||
|
|
||||||
|
if (not (FBorders.LeftBorder.Enabled or FBorders.RightBorder.Enabled)) then
|
||||||
|
FEdit.Width := Width
|
||||||
|
else begin
|
||||||
|
BW := W;
|
||||||
|
if (FBorders.LeftBorder.Enabled) then
|
||||||
|
BW := FBorders.LeftBorder.PenWidth;
|
||||||
|
if (FBorders.RightBorder.Enabled) then
|
||||||
|
BW := BW + FBorders.RightBorder.PenWidth;
|
||||||
|
FEdit.Width := Width - BW;
|
||||||
|
end;
|
||||||
|
|
||||||
|
if (not (FBorders.TopBorder.Enabled or FBorders.BottomBorder.Enabled)) then
|
||||||
|
{ Height := FEdit.Height}
|
||||||
|
FEdit.Height := Height
|
||||||
|
else begin
|
||||||
|
BW := 0;
|
||||||
|
if (FBorders.TopBorder.Enabled) then
|
||||||
|
BW := FBorders.TopBorder.PenWidth;
|
||||||
|
if (FBorders.BottomBorder.Enabled) then
|
||||||
|
BW := BW + FBorders.BottomBorder.PenWidth;
|
||||||
|
|
||||||
|
FEdit.Height := Height - BW;
|
||||||
|
end;
|
||||||
|
|
||||||
|
R.Left := 0;
|
||||||
|
R.Top := 0;
|
||||||
|
R.Right := Width;
|
||||||
|
R.Bottom := Height;
|
||||||
|
|
||||||
|
if (Assigned(FBorders.FLeftBorder)) then begin
|
||||||
|
if (FBorders.LeftBorder.Enabled) then begin
|
||||||
|
C.Pen.Color := FBorders.LeftBorder.PenColor;
|
||||||
|
C.Pen.Width := FBorders.LeftBorder.PenWidth;
|
||||||
|
C.Pen.Style := FBorders.LeftBorder.PenStyle;
|
||||||
|
|
||||||
|
C.MoveTo(R.Left + (FBorders.LeftBorder.PenWidth div 2), R.Top);
|
||||||
|
C.LineTo(R.Left + (FBorders.LeftBorder.PenWidth div 2), R.Bottom);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
if (Assigned(FBorders.FRightBorder)) then begin
|
||||||
|
if (FBorders.RightBorder.Enabled) then begin
|
||||||
|
C.Pen.Color := FBorders.RightBorder.PenColor;
|
||||||
|
C.Pen.Width := FBorders.RightBorder.PenWidth;
|
||||||
|
C.Pen.Style := FBorders.RightBorder.PenStyle;
|
||||||
|
|
||||||
|
if ((FBorders.RightBorder.PenWidth mod 2) = 0) then begin
|
||||||
|
C.MoveTo(R.Right - (FBorders.RightBorder.PenWidth div 2), R.Top);
|
||||||
|
C.LineTo(R.Right - (FBorders.RightBorder.PenWidth div 2), R.Bottom);
|
||||||
|
end else begin
|
||||||
|
C.MoveTo(R.Right - (FBorders.RightBorder.PenWidth div 2) - 1, R.Top);
|
||||||
|
C.LineTo(R.Right - (FBorders.RightBorder.PenWidth div 2) - 1, R.Bottom);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
if (Assigned(FBorders.FTopBorder)) then begin
|
||||||
|
if (FBorders.TopBorder.Enabled) then begin
|
||||||
|
C.Pen.Color := FBorders.TopBorder.PenColor;
|
||||||
|
C.Pen.Width := FBorders.TopBorder.PenWidth;
|
||||||
|
C.Pen.Style := FBorders.TopBorder.PenStyle;
|
||||||
|
|
||||||
|
C.MoveTo(R.Left, R.Top + (FBorders.TopBorder.PenWidth div 2));
|
||||||
|
C.LineTo(R.Right, R.Top + (FBorders.TopBorder.PenWidth div 2));
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
if (Assigned(FBorders.FBottomBorder)) then begin
|
||||||
|
if (FBorders.BottomBorder.Enabled) then begin
|
||||||
|
C.Pen.Color := FBorders.BottomBorder.PenColor;
|
||||||
|
C.Pen.Width := FBorders.BottomBorder.PenWidth;
|
||||||
|
C.Pen.Style := FBorders.BottomBorder.PenStyle;
|
||||||
|
|
||||||
|
if ((FBorders.BottomBorder.PenWidth mod 2) = 0) then begin
|
||||||
|
C.MoveTo(R.Left, R.Bottom - (FBorders.BottomBorder.PenWidth div 2));
|
||||||
|
C.LineTo(R.Right - (FBorders.BottomBorder.PenWidth div 2),
|
||||||
|
R.Bottom - (FBorders.BottomBorder.PenWidth div 2));
|
||||||
|
end else begin
|
||||||
|
C.MoveTo(R.Left, R.Bottom - (FBorders.BottomBorder.PenWidth div 2) - 1);
|
||||||
|
C.LineTo(R.Right, R.Bottom - (FBorders.BottomBorder.PenWidth div 2) - 1);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
if (Assigned(FEdit)) then
|
||||||
|
FEdit.Refresh;
|
||||||
|
ValidateRect(Handle, @R);
|
||||||
|
end;
|
||||||
|
|
||||||
|
end.
|
||||||
|
|
||||||
|
|
||||||
|
|
1758
components/orpheus/ovccal.pas
Normal file
2685
components/orpheus/ovccalc.pas
Normal file
690
components/orpheus/ovccaret.pas
Normal file
@ -0,0 +1,690 @@
|
|||||||
|
{*********************************************************}
|
||||||
|
{* OVCCARET.PAS 4.06 *}
|
||||||
|
{*********************************************************}
|
||||||
|
|
||||||
|
{* ***** BEGIN LICENSE BLOCK ***** *}
|
||||||
|
{* Version: MPL 1.1 *}
|
||||||
|
{* *}
|
||||||
|
{* The contents of this file are subject to the Mozilla Public License *}
|
||||||
|
{* Version 1.1 (the "License"); you may not use this file except in *}
|
||||||
|
{* compliance with the License. You may obtain a copy of the License at *}
|
||||||
|
{* http://www.mozilla.org/MPL/ *}
|
||||||
|
{* *}
|
||||||
|
{* Software distributed under the License is distributed on an "AS IS" basis, *}
|
||||||
|
{* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License *}
|
||||||
|
{* for the specific language governing rights and limitations under the *}
|
||||||
|
{* License. *}
|
||||||
|
{* *}
|
||||||
|
{* The Original Code is TurboPower Orpheus *}
|
||||||
|
{* *}
|
||||||
|
{* The Initial Developer of the Original Code is TurboPower Software *}
|
||||||
|
{* *}
|
||||||
|
{* Portions created by TurboPower Software Inc. are Copyright (C)1995-2002 *}
|
||||||
|
{* TurboPower Software Inc. All Rights Reserved. *}
|
||||||
|
{* *}
|
||||||
|
{* Contributor(s): *}
|
||||||
|
{* *}
|
||||||
|
{* ***** END LICENSE BLOCK ***** *}
|
||||||
|
|
||||||
|
{$I OVC.INC}
|
||||||
|
|
||||||
|
{$B-} {Short-circuit Boolean Evaluation}
|
||||||
|
{$I+} {Input/Output-Checking}
|
||||||
|
{$P+} {Open Parameters}
|
||||||
|
{$T-} {Typed @ Operator}
|
||||||
|
{.W-} {Windows Stack Frame}
|
||||||
|
{$X+} {Extended Syntax}
|
||||||
|
|
||||||
|
unit ovccaret;
|
||||||
|
{-Caret handling class}
|
||||||
|
|
||||||
|
interface
|
||||||
|
|
||||||
|
uses
|
||||||
|
{$IFNDEF LCL} Windows, {$ELSE} LclIntf, MyMisc, {$ENDIF}
|
||||||
|
Graphics, Classes, Controls, Forms;
|
||||||
|
|
||||||
|
type
|
||||||
|
TOvcCaretShape = ( {Predefined caret shapes..}
|
||||||
|
csBlock, {..block over whole cell}
|
||||||
|
csHalfBlock, {..block over bottom part of cell}
|
||||||
|
csVertLine, {..vertical line to left of cell}
|
||||||
|
csHorzLine, {..horizontal line on bottom of cell}
|
||||||
|
csCustom, {..custom width/height}
|
||||||
|
csBitmap); {..bitmap caret, custom width/height}
|
||||||
|
|
||||||
|
TOvcCaretAlign = ( {Alignment of caret in cell..}
|
||||||
|
caLeft, {..left side, centered vertically}
|
||||||
|
caTop, {..top side, centered horizontally}
|
||||||
|
caRight, {..right side, centered vertically}
|
||||||
|
caBottom, {..bottom side, centered horizontally}
|
||||||
|
caCenter); {..centered vertically and horizontally}
|
||||||
|
|
||||||
|
type
|
||||||
|
{Class defining a caret shape}
|
||||||
|
TOvcCaret = class(TPersistent)
|
||||||
|
{.Z+}
|
||||||
|
protected
|
||||||
|
{property fields}
|
||||||
|
FAlign : TOvcCaretAlign; {Caret alignment in cell}
|
||||||
|
FBitmap : TBitmap; {Bitmap for a bitmapped caret}
|
||||||
|
FBitmapX : Integer; {Bitmap's hotspot X}
|
||||||
|
FBitmapY : Integer; {Bitmap's hotspot Y}
|
||||||
|
FBlinkTime : word; {Blink time}
|
||||||
|
FCaretHt : Integer; {Height: autosized for some shapes}
|
||||||
|
FCaretWd : Integer; {Width: autosized for some shapes}
|
||||||
|
FIsGray : boolean; {True if a 'gray' caret}
|
||||||
|
FShape : TOvcCaretShape; {Shape}
|
||||||
|
|
||||||
|
FOnChange : TNotifyEvent; {Owner's change notification}
|
||||||
|
|
||||||
|
{internal fields}
|
||||||
|
RefCount : word; {Reference count}
|
||||||
|
|
||||||
|
{property access methods}
|
||||||
|
procedure SetAlign(A : TOvcCaretAlign);
|
||||||
|
procedure SetBitmap(BM : TBitMap);
|
||||||
|
procedure SetBitmapX(X : Integer);
|
||||||
|
procedure SetBitmapY(Y : Integer);
|
||||||
|
procedure SetBlinkTime(BT : word);
|
||||||
|
procedure SetCaretHeight(CH : Integer);
|
||||||
|
procedure SetCaretWidth(CW : Integer);
|
||||||
|
procedure SetIsGray(IG : boolean);
|
||||||
|
procedure SetShape(S : TOvcCaretShape);
|
||||||
|
|
||||||
|
{general methods}
|
||||||
|
procedure NotifyChange;
|
||||||
|
|
||||||
|
public
|
||||||
|
{VCL methods}
|
||||||
|
constructor Create;
|
||||||
|
destructor Destroy; override;
|
||||||
|
|
||||||
|
{other methods}
|
||||||
|
procedure Register;
|
||||||
|
procedure Deregister;
|
||||||
|
|
||||||
|
{properties}
|
||||||
|
property OnChange : TNotifyEvent
|
||||||
|
read FOnChange
|
||||||
|
write FOnChange;
|
||||||
|
{.Z-}
|
||||||
|
|
||||||
|
published
|
||||||
|
{properties}
|
||||||
|
property Bitmap : TBitmap
|
||||||
|
read FBitmap write SetBitmap;
|
||||||
|
property BitmapHotSpotX : Integer
|
||||||
|
read FBitmapX write SetBitmapX
|
||||||
|
default 0;
|
||||||
|
property BitmapHotSpotY : Integer
|
||||||
|
read FBitmapY write SetBitmapY
|
||||||
|
default 0;
|
||||||
|
property Shape : TOvcCaretShape
|
||||||
|
read FShape write SetShape
|
||||||
|
default csVertLine;
|
||||||
|
property Align : TOvcCaretAlign
|
||||||
|
read FAlign write SetAlign
|
||||||
|
default caLeft;
|
||||||
|
property BlinkTime : word
|
||||||
|
read FBlinkTime write SetBlinkTime
|
||||||
|
default 0;
|
||||||
|
property CaretHeight : Integer
|
||||||
|
read FCaretHt write SetCaretHeight
|
||||||
|
default 10;
|
||||||
|
property CaretWidth : Integer
|
||||||
|
read FCaretWd write SetCaretWidth
|
||||||
|
default 2;
|
||||||
|
property IsGray : boolean
|
||||||
|
read FIsGray write SetIsGray
|
||||||
|
default False;
|
||||||
|
end;
|
||||||
|
|
||||||
|
{.Z+}
|
||||||
|
type
|
||||||
|
TOvcSingleCaret = class(TPersistent)
|
||||||
|
{Class defining a Single caret}
|
||||||
|
protected
|
||||||
|
{property fields}
|
||||||
|
FCaretType : TOvcCaret; {Current caret type}
|
||||||
|
FHeight : Integer; {Cell height}
|
||||||
|
FLinked : boolean; {True if linked to owner}
|
||||||
|
FPos : TPoint; {Position within owner}
|
||||||
|
FVisible : boolean; {True if visible}
|
||||||
|
FWidth : Integer; {Cell width}
|
||||||
|
|
||||||
|
{other fields}
|
||||||
|
OrigBlinkTime : word; {Blink time before linking}
|
||||||
|
Owner : TWinControl; {Owning control}
|
||||||
|
XOffset : Integer; {X Offset of caret in cell}
|
||||||
|
YOffset : Integer; {Y Offset of caret in cell}
|
||||||
|
|
||||||
|
{property access methods}
|
||||||
|
procedure SetCaretType(CT : TOvcCaret);
|
||||||
|
procedure SetCellHeight(CH : Integer);
|
||||||
|
procedure SetCellWidth(CW : Integer);
|
||||||
|
procedure SetLinked(L : boolean);
|
||||||
|
procedure SetPos(P : TPoint);
|
||||||
|
procedure SetVisible(V : boolean);
|
||||||
|
|
||||||
|
{general methods}
|
||||||
|
procedure MakeShape;
|
||||||
|
procedure Reinit;
|
||||||
|
procedure ResetPos;
|
||||||
|
|
||||||
|
public
|
||||||
|
{VCL methods}
|
||||||
|
constructor Create(AOwner : TWinControl);
|
||||||
|
destructor Destroy; override;
|
||||||
|
|
||||||
|
{general methods}
|
||||||
|
procedure CaretTypeHasChanged(Sender : TObject);
|
||||||
|
|
||||||
|
{properties}
|
||||||
|
property CaretType : TOvcCaret
|
||||||
|
read FCaretType
|
||||||
|
write SetCaretType;
|
||||||
|
|
||||||
|
property CellHeight : Integer
|
||||||
|
read FHeight
|
||||||
|
write SetCellHeight;
|
||||||
|
|
||||||
|
property CellWidth : Integer
|
||||||
|
read FWidth
|
||||||
|
write SetCellWidth;
|
||||||
|
|
||||||
|
property Linked : boolean
|
||||||
|
read FLinked
|
||||||
|
write SetLinked
|
||||||
|
stored false;
|
||||||
|
|
||||||
|
property Position : TPoint
|
||||||
|
read FPos
|
||||||
|
write SetPos;
|
||||||
|
|
||||||
|
property Visible : boolean
|
||||||
|
read FVisible
|
||||||
|
write SetVisible;
|
||||||
|
end;
|
||||||
|
|
||||||
|
type
|
||||||
|
TOvcCaretPair = class(TOvcSingleCaret)
|
||||||
|
{Class defining a pair of carets, one each for insert/overwrite modes}
|
||||||
|
protected
|
||||||
|
{property fields}
|
||||||
|
FInsMode : boolean;
|
||||||
|
FInsCaretType : TOvcCaret;
|
||||||
|
FOvrCaretType : TOvcCaret;
|
||||||
|
|
||||||
|
{property access methods}
|
||||||
|
procedure SetInsMode(IM : boolean);
|
||||||
|
procedure SetInsCaretType(ICT : TOvcCaret);
|
||||||
|
procedure SetOvrCaretType(OCT : TOvcCaret);
|
||||||
|
|
||||||
|
public
|
||||||
|
{VCL methods}
|
||||||
|
constructor Create(AOwner : TWinControl);
|
||||||
|
destructor Destroy; override;
|
||||||
|
|
||||||
|
{properties}
|
||||||
|
property InsertMode : boolean
|
||||||
|
read FInsMode
|
||||||
|
write SetInsMode;
|
||||||
|
|
||||||
|
property InsCaretType : TOvcCaret
|
||||||
|
read FInsCaretType
|
||||||
|
write SetInsCaretType;
|
||||||
|
|
||||||
|
property OvrCaretType : TOvcCaret
|
||||||
|
read FOvrCaretType
|
||||||
|
write SetOvrCaretType;
|
||||||
|
end;
|
||||||
|
{.Z-}
|
||||||
|
|
||||||
|
|
||||||
|
implementation
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
{---TOvcCaret----------------------------------------------------}
|
||||||
|
constructor TOvcCaret.Create;
|
||||||
|
begin
|
||||||
|
inherited Create;
|
||||||
|
|
||||||
|
FShape := csVertLine;
|
||||||
|
FAlign := caLeft;
|
||||||
|
FBlinkTime := 0;
|
||||||
|
FIsGray := False;
|
||||||
|
FBitMap := TBitMap.Create;
|
||||||
|
FCaretHt := 10;
|
||||||
|
FCaretWd := 2;
|
||||||
|
end;
|
||||||
|
{--------}
|
||||||
|
destructor TOvcCaret.Destroy;
|
||||||
|
begin
|
||||||
|
FBitMap.Free;
|
||||||
|
inherited Destroy;
|
||||||
|
end;
|
||||||
|
{--------}
|
||||||
|
procedure TOvcCaret.Deregister;
|
||||||
|
begin
|
||||||
|
{decrement the reference count, if no one references us
|
||||||
|
any more, kill ourselves}
|
||||||
|
dec(RefCount);
|
||||||
|
if (RefCount = 0) then
|
||||||
|
Free;
|
||||||
|
end;
|
||||||
|
{--------}
|
||||||
|
procedure TOvcCaret.NotifyChange;
|
||||||
|
begin
|
||||||
|
if Assigned(FOnChange) then
|
||||||
|
FOnChange(Self);
|
||||||
|
end;
|
||||||
|
{--------}
|
||||||
|
procedure TOvcCaret.Register;
|
||||||
|
begin
|
||||||
|
inc(RefCount);
|
||||||
|
end;
|
||||||
|
{--------}
|
||||||
|
procedure TOvcCaret.SetAlign(A : TOvcCaretAlign);
|
||||||
|
begin
|
||||||
|
if (A <> FAlign) then
|
||||||
|
begin
|
||||||
|
FAlign := A;
|
||||||
|
NotifyChange;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
{--------}
|
||||||
|
procedure TOvcCaret.SetBitmap(BM : TBitmap);
|
||||||
|
begin
|
||||||
|
if not Assigned(BM) then
|
||||||
|
Exit;
|
||||||
|
FBitMap.Assign(BM);
|
||||||
|
NotifyChange;
|
||||||
|
end;
|
||||||
|
{--------}
|
||||||
|
procedure TOvcCaret.SetBitmapX(X : Integer);
|
||||||
|
begin
|
||||||
|
if (X <> FBitMapX) then
|
||||||
|
begin
|
||||||
|
FBitMapX := X;
|
||||||
|
if (Shape = csBitMap) then
|
||||||
|
NotifyChange;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
{--------}
|
||||||
|
procedure TOvcCaret.SetBitmapY(Y : Integer);
|
||||||
|
begin
|
||||||
|
if (Y <> FBitMapY) then
|
||||||
|
begin
|
||||||
|
FBitMapY := Y;
|
||||||
|
if (Shape = csBitMap) then
|
||||||
|
NotifyChange;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
{--------}
|
||||||
|
procedure TOvcCaret.SetBlinkTime(BT : word);
|
||||||
|
begin
|
||||||
|
if (BT <> FBlinkTime) then
|
||||||
|
begin
|
||||||
|
FBlinkTime := BT;
|
||||||
|
NotifyChange;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
{--------}
|
||||||
|
procedure TOvcCaret.SetCaretHeight(CH : Integer);
|
||||||
|
begin
|
||||||
|
if (CH <> FCaretHt) and (CH > 0) then
|
||||||
|
begin
|
||||||
|
FCaretHt := CH;
|
||||||
|
NotifyChange;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
{--------}
|
||||||
|
procedure TOvcCaret.SetCaretWidth(CW : Integer);
|
||||||
|
begin
|
||||||
|
if (CW <> FCaretWd) and (CW > 0) then
|
||||||
|
begin
|
||||||
|
FCaretWd := CW;
|
||||||
|
NotifyChange;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
{--------}
|
||||||
|
procedure TOvcCaret.SetIsGray(IG : boolean);
|
||||||
|
begin
|
||||||
|
if (IG <> FIsGray) then
|
||||||
|
begin
|
||||||
|
FIsGray := IG;
|
||||||
|
NotifyChange;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
{--------}
|
||||||
|
procedure TOvcCaret.SetShape(S : TOvcCaretShape);
|
||||||
|
begin
|
||||||
|
if (S <> FShape) then
|
||||||
|
begin
|
||||||
|
FShape := S;
|
||||||
|
case FShape of
|
||||||
|
csBlock:
|
||||||
|
FAlign := caLeft;
|
||||||
|
csVertLine :
|
||||||
|
begin
|
||||||
|
FAlign := caLeft;
|
||||||
|
FCaretWd := 2;
|
||||||
|
end;
|
||||||
|
csHalfBlock:
|
||||||
|
FAlign := caBottom;
|
||||||
|
csHorzLine :
|
||||||
|
begin
|
||||||
|
FAlign := caBottom;
|
||||||
|
FCaretHt := 2;
|
||||||
|
end;
|
||||||
|
csBitmap :
|
||||||
|
begin
|
||||||
|
FCaretHt := FBitMap.Height;
|
||||||
|
FCaretWd := FBitMap.Width;
|
||||||
|
end;
|
||||||
|
end;{case}
|
||||||
|
NotifyChange;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
{--------------------------------------------------------------------}
|
||||||
|
|
||||||
|
|
||||||
|
{---TOvcSingleCaret--------------------------------------------------}
|
||||||
|
constructor TOvcSingleCaret.Create(AOwner : TWinControl);
|
||||||
|
begin
|
||||||
|
inherited Create;
|
||||||
|
Owner := AOwner;
|
||||||
|
|
||||||
|
FHeight := 10;
|
||||||
|
FWidth := 10;
|
||||||
|
|
||||||
|
{make our default caret type}
|
||||||
|
FCaretType := TOvcCaret.Create;
|
||||||
|
FCaretType.Register;
|
||||||
|
Reinit;
|
||||||
|
end;
|
||||||
|
{--------}
|
||||||
|
destructor TOvcSingleCaret.Destroy;
|
||||||
|
begin
|
||||||
|
Visible := false;
|
||||||
|
Linked := false;
|
||||||
|
FCaretType.Deregister;
|
||||||
|
|
||||||
|
inherited Destroy;
|
||||||
|
end;
|
||||||
|
{--------}
|
||||||
|
procedure TOvcSingleCaret.CaretTypeHasChanged(Sender : TObject);
|
||||||
|
var
|
||||||
|
WasLinked : boolean;
|
||||||
|
begin
|
||||||
|
{if something has changed about the caret, unlink from
|
||||||
|
our owner, recalc our values, relink}
|
||||||
|
WasLinked := Linked;
|
||||||
|
Linked := false;
|
||||||
|
Reinit;
|
||||||
|
Linked := WasLinked;
|
||||||
|
end;
|
||||||
|
{--------}
|
||||||
|
procedure TOvcSingleCaret.MakeShape;
|
||||||
|
begin
|
||||||
|
{don't bother if we aren't linked to anything or if we
|
||||||
|
don't have a caret type}
|
||||||
|
if (not Linked) or (not Assigned(FCaretType)) then
|
||||||
|
Exit;
|
||||||
|
|
||||||
|
{create the caret, and if necessary show it}
|
||||||
|
with FCaretType do
|
||||||
|
if (Shape = csBitmap) then
|
||||||
|
CreateCaret(Owner.Handle, Bitmap.Handle, 0, 0)
|
||||||
|
else CreateCaret(Owner.Handle, ord(IsGray), CaretWidth, CaretHeight);
|
||||||
|
if Visible then
|
||||||
|
ShowCaret(Owner.Handle);
|
||||||
|
end;
|
||||||
|
{--------}
|
||||||
|
procedure TOvcSingleCaret.Reinit;
|
||||||
|
var
|
||||||
|
NewXOfs : Integer;
|
||||||
|
NewYOfs : Integer;
|
||||||
|
begin
|
||||||
|
{don't bother if we don't have a caret type}
|
||||||
|
if (not Assigned(FCaretType)) then
|
||||||
|
Exit;
|
||||||
|
|
||||||
|
{inits}
|
||||||
|
NewXOfs := 0;
|
||||||
|
NewYOfs := 0;
|
||||||
|
|
||||||
|
with FCaretType do
|
||||||
|
begin
|
||||||
|
{stop recursion}
|
||||||
|
OnChange := nil;
|
||||||
|
|
||||||
|
{recalc the caret type's height and width}
|
||||||
|
if (Shape <> csBitmap) and (Shape <> csCustom) then
|
||||||
|
begin
|
||||||
|
case Shape of
|
||||||
|
csBlock :
|
||||||
|
begin
|
||||||
|
CaretHeight := FHeight;
|
||||||
|
CaretWidth := FWidth;
|
||||||
|
end;
|
||||||
|
csHalfBlock:
|
||||||
|
begin
|
||||||
|
CaretHeight := FHeight div 2;
|
||||||
|
CaretWidth := FWidth;
|
||||||
|
end;
|
||||||
|
csVertLine : CaretHeight := FHeight;
|
||||||
|
csHorzLine : CaretWidth := FWidth;
|
||||||
|
end;{case}
|
||||||
|
end;
|
||||||
|
|
||||||
|
{allow changes to percolate through again}
|
||||||
|
OnChange := CaretTypeHasChanged;
|
||||||
|
|
||||||
|
{recalc the X and Y offsets}
|
||||||
|
case Align of
|
||||||
|
caLeft : begin
|
||||||
|
NewXOfs := 0;
|
||||||
|
NewYOfs := (FHeight - CaretHeight) div 2;
|
||||||
|
end;
|
||||||
|
caTop : begin
|
||||||
|
NewXOfs := (FWidth - CaretWidth) div 2;
|
||||||
|
NewYOfs := 0;
|
||||||
|
end;
|
||||||
|
caRight : begin
|
||||||
|
NewXOfs := FWidth - CaretWidth;
|
||||||
|
NewYOfs := (FHeight - CaretHeight) div 2;;
|
||||||
|
end;
|
||||||
|
caBottom : begin
|
||||||
|
NewXOfs := (FWidth - CaretWidth) div 2;
|
||||||
|
NewYOfs := FHeight - CaretHeight;
|
||||||
|
end;
|
||||||
|
caCenter : begin
|
||||||
|
NewXOfs := (FWidth - CaretWidth) div 2;
|
||||||
|
NewYOfs := (FHeight - CaretHeight) div 2;
|
||||||
|
end;
|
||||||
|
end;{case}
|
||||||
|
if (Shape = csBitMap) then
|
||||||
|
begin
|
||||||
|
dec(NewXOfs, BitMapHotSpotX);
|
||||||
|
dec(NewYOfs, BitMapHotSpotY);
|
||||||
|
end;
|
||||||
|
if (NewXOfs <> XOffset) or (NewYOfs <> YOffset) then
|
||||||
|
begin
|
||||||
|
XOffset := NewXOfs;
|
||||||
|
YOffset := NewYOfs;
|
||||||
|
if Linked then
|
||||||
|
ResetPos;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
{--------}
|
||||||
|
procedure TOvcSingleCaret.ResetPos;
|
||||||
|
var
|
||||||
|
NewX, NewY : Integer;
|
||||||
|
begin
|
||||||
|
if (FPos.X = MaxInt) then
|
||||||
|
NewX := MaxInt
|
||||||
|
else NewX := FPos.X + XOffset;
|
||||||
|
if (FPos.Y = MaxInt) then
|
||||||
|
NewY := MaxInt
|
||||||
|
else NewY := FPos.Y + YOffset;
|
||||||
|
SetCaretPos(NewX, NewY);
|
||||||
|
end;
|
||||||
|
{--------}
|
||||||
|
procedure TOvcSingleCaret.SetCaretType(CT : TOvcCaret);
|
||||||
|
begin
|
||||||
|
if (CT <> FCaretType) then
|
||||||
|
begin
|
||||||
|
FCaretType.Deregister;
|
||||||
|
FCaretType := CT;
|
||||||
|
FCaretType.Register;
|
||||||
|
FCaretType.OnChange := CaretTypeHasChanged;
|
||||||
|
CaretTypeHasChanged(Self);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
{--------}
|
||||||
|
procedure TOvcSingleCaret.SetCellHeight(CH : Integer);
|
||||||
|
begin
|
||||||
|
if (CH <> FHeight) and (CH > 0) then
|
||||||
|
begin
|
||||||
|
FHeight := CH;
|
||||||
|
CaretTypeHasChanged(Self);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
{--------}
|
||||||
|
procedure TOvcSingleCaret.SetCellWidth(CW : Integer);
|
||||||
|
begin
|
||||||
|
if (CW <> FWidth) and (CW > 0) then
|
||||||
|
begin
|
||||||
|
FWidth := CW;
|
||||||
|
CaretTypeHasChanged(Self);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
{--------}
|
||||||
|
procedure TOvcSingleCaret.SetLinked(L : boolean);
|
||||||
|
begin
|
||||||
|
if (L <> FLinked) then
|
||||||
|
begin
|
||||||
|
FLinked := L;
|
||||||
|
if Assigned(Owner) and Owner.HandleAllocated then
|
||||||
|
if FLinked then
|
||||||
|
begin
|
||||||
|
OrigBlinkTime := GetCaretBlinkTime;
|
||||||
|
MakeShape;
|
||||||
|
ResetPos;
|
||||||
|
if (OrigBlinkTime <> CaretType.BlinkTime) then
|
||||||
|
if (CaretType.BlinkTime <> 0) then
|
||||||
|
SetCaretBlinkTime(CaretType.BlinkTime);
|
||||||
|
end
|
||||||
|
else
|
||||||
|
begin
|
||||||
|
SetCaretBlinkTime(OrigBlinkTime);
|
||||||
|
{$IFNDEF LCL}
|
||||||
|
DestroyCaret;
|
||||||
|
{$ELSE}
|
||||||
|
DestroyCaret(Owner.Handle);
|
||||||
|
{$ENDIF}
|
||||||
|
end
|
||||||
|
else
|
||||||
|
FLinked := false;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
{--------}
|
||||||
|
procedure TOvcSingleCaret.SetPos(P : TPoint);
|
||||||
|
begin
|
||||||
|
if (P.X < 0) then
|
||||||
|
P.X := MaxInt;
|
||||||
|
if (P.Y < 0) then
|
||||||
|
P.Y := MaxInt;
|
||||||
|
if (P.X <> FPos.X) or (P.Y <> FPos.Y) then
|
||||||
|
begin
|
||||||
|
FPos := P;
|
||||||
|
if Linked then
|
||||||
|
ResetPos;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
{--------}
|
||||||
|
procedure TOvcSingleCaret.SetVisible(V : boolean);
|
||||||
|
begin
|
||||||
|
if (V <> FVisible) then
|
||||||
|
begin
|
||||||
|
FVisible := V;
|
||||||
|
if Linked then
|
||||||
|
if Owner.HandleAllocated then
|
||||||
|
if FVisible then
|
||||||
|
ShowCaret(Owner.Handle)
|
||||||
|
else
|
||||||
|
HideCaret(Owner.Handle);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
{---TOvcCaretPair----------------------------------------------------}
|
||||||
|
constructor TOvcCaretPair.Create(AOwner : TWinControl);
|
||||||
|
begin
|
||||||
|
inherited Create(AOwner);
|
||||||
|
|
||||||
|
FInsCaretType := TOvcCaret.Create;
|
||||||
|
FInsCaretType.Register;
|
||||||
|
|
||||||
|
FOvrCaretType := TOvcCaret.Create;
|
||||||
|
FOvrCaretType.Register;
|
||||||
|
FOvrCaretType.Shape := csBlock;
|
||||||
|
|
||||||
|
FInsMode := True;
|
||||||
|
|
||||||
|
if FInsMode then
|
||||||
|
CaretType := FInsCaretType
|
||||||
|
else
|
||||||
|
CaretType := FOvrCaretType
|
||||||
|
end;
|
||||||
|
|
||||||
|
destructor TOvcCaretPair.Destroy;
|
||||||
|
begin
|
||||||
|
FInsCaretType.Deregister;
|
||||||
|
FOvrCaretType.Deregister;
|
||||||
|
|
||||||
|
inherited Destroy;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TOvcCaretPair.SetInsMode(IM : boolean);
|
||||||
|
begin
|
||||||
|
if (IM <> FInsMode) then
|
||||||
|
begin
|
||||||
|
FInsMode := IM;
|
||||||
|
if FInsMode then
|
||||||
|
CaretType := FInsCaretType
|
||||||
|
else CaretType := FOvrCaretType;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
{--------}
|
||||||
|
procedure TOvcCaretPair.SetInsCaretType(ICT : TOvcCaret);
|
||||||
|
begin
|
||||||
|
if (ICT <> FInsCaretType) then
|
||||||
|
begin
|
||||||
|
FInsCaretType.Deregister;
|
||||||
|
FInsCaretType := ICT;
|
||||||
|
FInsCaretType.Register;
|
||||||
|
if InsertMode then
|
||||||
|
CaretType := FInsCaretType;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
{--------}
|
||||||
|
procedure TOvcCaretPair.SetOvrCaretType(OCT : TOvcCaret);
|
||||||
|
begin
|
||||||
|
if (OCT <> FOvrCaretType) then
|
||||||
|
begin
|
||||||
|
FOvrCaretType.Deregister;
|
||||||
|
FOvrCaretType := OCT;
|
||||||
|
FOvrCaretType.Register;
|
||||||
|
if not InsertMode then
|
||||||
|
CaretType := FOvrCaretType;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
{--------------------------------------------------------------------}
|
||||||
|
|
||||||
|
|
||||||
|
end.
|
330
components/orpheus/ovcclrcb.pas
Normal file
@ -0,0 +1,330 @@
|
|||||||
|
{*********************************************************}
|
||||||
|
{* OVCCLRCB.PAS 4.06 *}
|
||||||
|
{*********************************************************}
|
||||||
|
|
||||||
|
{* ***** BEGIN LICENSE BLOCK ***** *}
|
||||||
|
{* Version: MPL 1.1 *}
|
||||||
|
{* *}
|
||||||
|
{* The contents of this file are subject to the Mozilla Public License *}
|
||||||
|
{* Version 1.1 (the "License"); you may not use this file except in *}
|
||||||
|
{* compliance with the License. You may obtain a copy of the License at *}
|
||||||
|
{* http://www.mozilla.org/MPL/ *}
|
||||||
|
{* *}
|
||||||
|
{* Software distributed under the License is distributed on an "AS IS" basis, *}
|
||||||
|
{* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License *}
|
||||||
|
{* for the specific language governing rights and limitations under the *}
|
||||||
|
{* License. *}
|
||||||
|
{* *}
|
||||||
|
{* The Original Code is TurboPower Orpheus *}
|
||||||
|
{* *}
|
||||||
|
{* The Initial Developer of the Original Code is TurboPower Software *}
|
||||||
|
{* *}
|
||||||
|
{* Portions created by TurboPower Software Inc. are Copyright (C)1995-2002 *}
|
||||||
|
{* TurboPower Software Inc. All Rights Reserved. *}
|
||||||
|
{* *}
|
||||||
|
{* Contributor(s): *}
|
||||||
|
{* *}
|
||||||
|
{* ***** END LICENSE BLOCK ***** *}
|
||||||
|
|
||||||
|
{$I OVC.INC}
|
||||||
|
|
||||||
|
{$B-} {Complete Boolean Evaluation}
|
||||||
|
{$I+} {Input/Output-Checking}
|
||||||
|
{$P+} {Open Parameters}
|
||||||
|
{$T-} {Typed @ Operator}
|
||||||
|
{.W-} {Windows Stack Frame}
|
||||||
|
{$X+} {Extended Syntax}
|
||||||
|
|
||||||
|
unit ovcclrcb;
|
||||||
|
{-color ComboBox selector}
|
||||||
|
|
||||||
|
interface
|
||||||
|
|
||||||
|
uses
|
||||||
|
{$IFNDEF LCL} Windows, Messages, {$ELSE} LclIntf, LMessages, LclType, LResources, MyMisc, {$ENDIF}
|
||||||
|
Classes, Controls, Forms, Graphics, Menus, StdCtrls,
|
||||||
|
OvcCmbx, OvcConst, OvcData;
|
||||||
|
|
||||||
|
type
|
||||||
|
TOvcCustomColorComboBox = class(TOvcBaseComboBox)
|
||||||
|
protected {private}
|
||||||
|
{property Variables}
|
||||||
|
FShowColorNames : Boolean;
|
||||||
|
|
||||||
|
{internal variables}
|
||||||
|
BoxWidth : Integer;
|
||||||
|
|
||||||
|
{property methods}
|
||||||
|
function GetSelectedColor : TColor;
|
||||||
|
procedure SetSelectedColor(Value : TColor);
|
||||||
|
procedure SetShowColorNames(Value : Boolean);
|
||||||
|
function ColorFromString(Str: string): TColor;
|
||||||
|
|
||||||
|
{internal methods}
|
||||||
|
procedure CalculateBoxWidth;
|
||||||
|
|
||||||
|
{message methods}
|
||||||
|
procedure CMFontChanged(var Message : TMessage);
|
||||||
|
message CM_FONTCHANGED;
|
||||||
|
|
||||||
|
procedure CreateWnd; override;
|
||||||
|
|
||||||
|
property SelectedColor : TColor
|
||||||
|
read GetSelectedColor write SetSelectedColor;
|
||||||
|
property ShowColorNames : Boolean
|
||||||
|
read FShowColorNames write SetShowColorNames default True;
|
||||||
|
|
||||||
|
public
|
||||||
|
constructor Create(AOwner : TComponent); override;
|
||||||
|
destructor Destroy; override;
|
||||||
|
procedure DrawItem(Index : Integer; Rect : TRect; State : TOwnerDrawState);
|
||||||
|
override;
|
||||||
|
procedure SetBounds(ALeft, ATop, AWidth, AHeight : Integer);
|
||||||
|
override;
|
||||||
|
end;
|
||||||
|
|
||||||
|
TOvcColorComboBox = class(TOvcCustomColorComboBox)
|
||||||
|
published
|
||||||
|
{$IFDEF VERSION4}
|
||||||
|
property Anchors;
|
||||||
|
property Constraints;
|
||||||
|
property DragKind;
|
||||||
|
{$ENDIF}
|
||||||
|
property About;
|
||||||
|
property Color;
|
||||||
|
property Ctl3D;
|
||||||
|
property Cursor;
|
||||||
|
property DragCursor;
|
||||||
|
property DragMode;
|
||||||
|
property DropDownCount;
|
||||||
|
property Enabled;
|
||||||
|
property Font;
|
||||||
|
property HotTrack;
|
||||||
|
// property Items;
|
||||||
|
property ItemHeight;
|
||||||
|
property LabelInfo;
|
||||||
|
property ParentColor;
|
||||||
|
property ParentCtl3D;
|
||||||
|
property ParentFont;
|
||||||
|
property ParentShowHint;
|
||||||
|
property PopupMenu;
|
||||||
|
property SelectedColor default clBlack;
|
||||||
|
property ShowColorNames;
|
||||||
|
property ShowHint;
|
||||||
|
property TabOrder;
|
||||||
|
property TabStop;
|
||||||
|
property Text;
|
||||||
|
property Visible;
|
||||||
|
|
||||||
|
{events}
|
||||||
|
property AfterEnter;
|
||||||
|
property AfterExit;
|
||||||
|
property OnChange;
|
||||||
|
property OnClick;
|
||||||
|
property OnDblClick;
|
||||||
|
property OnDragDrop;
|
||||||
|
property OnDragOver;
|
||||||
|
property OnDropDown;
|
||||||
|
property OnEndDrag;
|
||||||
|
property OnEnter;
|
||||||
|
property OnExit;
|
||||||
|
property OnKeyDown;
|
||||||
|
property OnKeyPress;
|
||||||
|
property OnKeyUp;
|
||||||
|
property OnMouseDown;
|
||||||
|
property OnMouseMove;
|
||||||
|
property OnMouseUp;
|
||||||
|
property OnSelectionChange;
|
||||||
|
property OnStartDrag;
|
||||||
|
property OnMouseWheel;
|
||||||
|
end;
|
||||||
|
|
||||||
|
implementation
|
||||||
|
|
||||||
|
procedure TOvcCustomColorComboBox.CalculateBoxWidth;
|
||||||
|
var
|
||||||
|
I : Integer;
|
||||||
|
X : Integer;
|
||||||
|
T : Integer;
|
||||||
|
begin
|
||||||
|
if not HandleAllocated or (BoxWidth > 0) then
|
||||||
|
Exit;
|
||||||
|
|
||||||
|
if not FShowColorNames then begin
|
||||||
|
BoxWidth := ClientWidth - 1;
|
||||||
|
Exit;
|
||||||
|
end;
|
||||||
|
|
||||||
|
Canvas.Font := Font;
|
||||||
|
BoxWidth := 0;
|
||||||
|
T := 0;
|
||||||
|
|
||||||
|
{calculate width of the color box}
|
||||||
|
for I := 0 to pred(Items.Count) do begin
|
||||||
|
X := Canvas.TextWidth(Items[I]+'X');
|
||||||
|
if X > T then
|
||||||
|
T := X;
|
||||||
|
end;
|
||||||
|
|
||||||
|
BoxWidth := ClientWidth - T;
|
||||||
|
if BoxWidth < 25 then
|
||||||
|
BoxWidth := 25;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TOvcCustomColorComboBox.CMFontChanged(var Message : TMessage);
|
||||||
|
begin
|
||||||
|
inherited;
|
||||||
|
|
||||||
|
BoxWidth := 0;
|
||||||
|
Invalidate;
|
||||||
|
end;
|
||||||
|
|
||||||
|
constructor TOvcCustomColorComboBox.Create(AOwner : TComponent);
|
||||||
|
begin
|
||||||
|
inherited Create(AOwner);
|
||||||
|
|
||||||
|
{disable MRU list}
|
||||||
|
FMRUList.MaxItems := 0;
|
||||||
|
|
||||||
|
Style := ocsDropDownList;
|
||||||
|
|
||||||
|
FShowColorNames := True;
|
||||||
|
end;
|
||||||
|
|
||||||
|
destructor TOvcCustomColorComboBox.Destroy;
|
||||||
|
begin
|
||||||
|
inherited;
|
||||||
|
end;
|
||||||
|
|
||||||
|
{ - modified}
|
||||||
|
procedure TOvcCustomColorComboBox.CreateWnd;
|
||||||
|
begin
|
||||||
|
inherited CreateWnd;
|
||||||
|
|
||||||
|
Text := '';
|
||||||
|
Items.Clear;
|
||||||
|
Items.Add(GetOrphStr(SCColorBlack));
|
||||||
|
Items.Add(GetOrphStr(SCColorMaroon));
|
||||||
|
Items.Add(GetOrphStr(SCColorGreen));
|
||||||
|
Items.Add(GetOrphStr(SCColorOlive));
|
||||||
|
Items.Add(GetOrphStr(SCColorNavy));
|
||||||
|
Items.Add(GetOrphStr(SCColorPurple));
|
||||||
|
Items.Add(GetOrphStr(SCColorTeal));
|
||||||
|
Items.Add(GetOrphStr(SCColorGray));
|
||||||
|
Items.Add(GetOrphStr(SCColorSilver));
|
||||||
|
Items.Add(GetOrphStr(SCColorRed));
|
||||||
|
Items.Add(GetOrphStr(SCColorLime));
|
||||||
|
Items.Add(GetOrphStr(SCColorYellow));
|
||||||
|
Items.Add(GetOrphStr(SCColorBlue));
|
||||||
|
Items.Add(GetOrphStr(SCColorFuchsia));
|
||||||
|
Items.Add(GetOrphStr(SCColorAqua));
|
||||||
|
Items.Add(GetOrphStr(SCColorLightGray));
|
||||||
|
Items.Add(GetOrphStr(SCColorMediumGray));
|
||||||
|
Items.Add(GetOrphStr(SCColorDarkGray));
|
||||||
|
Items.Add(GetOrphStr(SCColorWhite));
|
||||||
|
Items.Add(GetOrphStr(SCColorMoneyGreen));
|
||||||
|
Items.Add(GetOrphStr(SCColorSkyBlue));
|
||||||
|
Items.Add(GetOrphStr(SCColorCream));
|
||||||
|
|
||||||
|
ItemIndex := 0;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TOvcCustomColorComboBox.DrawItem(Index : Integer; Rect : TRect;
|
||||||
|
State : TOwnerDrawState);
|
||||||
|
var
|
||||||
|
BC : TColor;
|
||||||
|
S : string;
|
||||||
|
begin
|
||||||
|
{get selected color and text to display}
|
||||||
|
if Index > -1 then begin
|
||||||
|
S := Items[Index];
|
||||||
|
BC := ColorFromString(S);
|
||||||
|
end else begin
|
||||||
|
S := GetOrphStr(SCColorBlack);
|
||||||
|
BC := clBlack;
|
||||||
|
end;
|
||||||
|
|
||||||
|
CalculateBoxWidth;
|
||||||
|
|
||||||
|
Canvas.Font.Color := Font.Color;
|
||||||
|
Canvas.Brush.Color := Color;
|
||||||
|
|
||||||
|
if FShowColorNames then begin
|
||||||
|
Canvas.Pen.Color := Canvas.Brush.Color;
|
||||||
|
Canvas.Rectangle(Rect.Left, Rect.Top, Rect.Right, Rect.Bottom);
|
||||||
|
Inc(Rect.Left);
|
||||||
|
DrawText(Canvas.Handle, @S[1], Length(S), Rect,
|
||||||
|
DT_LEFT or DT_VCENTER or DT_SINGLELINE);
|
||||||
|
end;
|
||||||
|
|
||||||
|
Canvas.Pen.Color := Font.Color;
|
||||||
|
Canvas.Brush.Color := BC;
|
||||||
|
Canvas.Rectangle(ClientWidth - BoxWidth, Rect.Top + 1, Rect.Right -1,
|
||||||
|
Rect.Bottom - 1);
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TOvcCustomColorComboBox.GetSelectedColor : TColor;
|
||||||
|
begin
|
||||||
|
if ItemIndex > -1 then
|
||||||
|
Result := ColorFromString(Items[ItemIndex])
|
||||||
|
else
|
||||||
|
Result := clBlack;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TOvcCustomColorComboBox.SetBounds(ALeft, ATop, AWidth, AHeight : Integer);
|
||||||
|
begin
|
||||||
|
inherited SetBounds(ALeft, ATop, AWidth, AHeight);
|
||||||
|
BoxWidth := 0;
|
||||||
|
Invalidate;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TOvcCustomColorComboBox.SetSelectedColor(Value : TColor);
|
||||||
|
var
|
||||||
|
I : Integer;
|
||||||
|
begin
|
||||||
|
for I := 0 to Pred(Items.Count) do
|
||||||
|
if Value = ColorFromString(Items[I]) then begin
|
||||||
|
ItemIndex := I;
|
||||||
|
Change;
|
||||||
|
Break;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
{ - New}
|
||||||
|
function TOvcCustomColorComboBox.ColorFromString(Str: string):TColor;
|
||||||
|
begin
|
||||||
|
if Str = GetOrphStr(SCColorBlack) then result := clBlack
|
||||||
|
else if Str = GetOrphStr(SCColorMaroon) then result := clMaroon
|
||||||
|
else if Str = GetOrphStr(SCColorGreen) then result := clGreen
|
||||||
|
else if Str = GetOrphStr(SCColorOlive) then result := clOlive
|
||||||
|
else if Str = GetOrphStr(SCColorNavy) then result := clNavy
|
||||||
|
else if Str = GetOrphStr(SCColorPurple) then result := clPurple
|
||||||
|
else if Str = GetOrphStr(SCColorTeal) then result := clTeal
|
||||||
|
else if Str = GetOrphStr(SCColorGray) then result := clGray
|
||||||
|
else if Str = GetOrphStr(SCColorSilver) then result := clSilver
|
||||||
|
else if Str = GetOrphStr(SCColorRed) then result := clRed
|
||||||
|
else if Str = GetOrphStr(SCColorLime) then result := clLime
|
||||||
|
else if Str = GetOrphStr(SCColorYellow) then result := clYellow
|
||||||
|
else if Str = GetOrphStr(SCColorBlue) then result := clBlue
|
||||||
|
else if Str = GetOrphStr(SCColorFuchsia) then result := clFuchsia
|
||||||
|
else if Str = GetOrphStr(SCColorAqua) then result := clAqua
|
||||||
|
else if Str = GetOrphStr(SCColorLightGray) then result := TColor($C0C0C0)
|
||||||
|
else if Str = GetOrphStr(SCColorMediumGray) then result := TColor($A4A0A0)
|
||||||
|
else if Str = GetOrphStr(SCColorDarkGray) then result := TColor($808080)
|
||||||
|
else if Str = GetOrphStr(SCColorWhite) then result := clWhite
|
||||||
|
else if Str = GetOrphStr(SCColorMoneyGreen) then result := TColor($C0DCC0)
|
||||||
|
else if Str = GetOrphStr(SCColorSkyBlue) then result := TColor($F0CAA6)
|
||||||
|
else if Str = GetOrphStr(SCColorCream) then result := TColor($F0FBFF)
|
||||||
|
else result := clBlack;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TOvcCustomColorComboBox.SetShowColorNames(Value : Boolean);
|
||||||
|
begin
|
||||||
|
if Value <> FShowColorNames then begin
|
||||||
|
FShowColorNames := Value;
|
||||||
|
BoxWidth := 0;
|
||||||
|
Invalidate;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
end.
|
1701
components/orpheus/ovccmbx.pas
Normal file
1494
components/orpheus/ovccmd.pas
Normal file
200
components/orpheus/ovccolor.pas
Normal file
@ -0,0 +1,200 @@
|
|||||||
|
{*********************************************************}
|
||||||
|
{* OVCCOLOR.PAS 4.06 *}
|
||||||
|
{*********************************************************}
|
||||||
|
|
||||||
|
{* ***** BEGIN LICENSE BLOCK ***** *}
|
||||||
|
{* Version: MPL 1.1 *}
|
||||||
|
{* *}
|
||||||
|
{* The contents of this file are subject to the Mozilla Public License *}
|
||||||
|
{* Version 1.1 (the "License"); you may not use this file except in *}
|
||||||
|
{* compliance with the License. You may obtain a copy of the License at *}
|
||||||
|
{* http://www.mozilla.org/MPL/ *}
|
||||||
|
{* *}
|
||||||
|
{* Software distributed under the License is distributed on an "AS IS" basis, *}
|
||||||
|
{* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License *}
|
||||||
|
{* for the specific language governing rights and limitations under the *}
|
||||||
|
{* License. *}
|
||||||
|
{* *}
|
||||||
|
{* The Original Code is TurboPower Orpheus *}
|
||||||
|
{* *}
|
||||||
|
{* The Initial Developer of the Original Code is TurboPower Software *}
|
||||||
|
{* *}
|
||||||
|
{* Portions created by TurboPower Software Inc. are Copyright (C)1995-2002 *}
|
||||||
|
{* TurboPower Software Inc. All Rights Reserved. *}
|
||||||
|
{* *}
|
||||||
|
{* Contributor(s): *}
|
||||||
|
{* *}
|
||||||
|
{* ***** END LICENSE BLOCK ***** *}
|
||||||
|
|
||||||
|
{$I OVC.INC}
|
||||||
|
|
||||||
|
{$B-} {Complete Boolean Evaluation}
|
||||||
|
{$I+} {Input/Output-Checking}
|
||||||
|
{$P+} {Open Parameters}
|
||||||
|
{$T-} {Typed @ Operator}
|
||||||
|
{.W-} {Windows Stack Frame}
|
||||||
|
{$X+} {Extended Syntax}
|
||||||
|
|
||||||
|
unit ovccolor;
|
||||||
|
{-Color selection class}
|
||||||
|
|
||||||
|
interface
|
||||||
|
|
||||||
|
uses
|
||||||
|
{$IFNDEF LCL} Windows, {$ELSE} LclIntf, {$ENDIF} Classes, Graphics;
|
||||||
|
|
||||||
|
type
|
||||||
|
TOvcColors = class(TPersistent)
|
||||||
|
{.Z+}
|
||||||
|
protected {private}
|
||||||
|
{property variables}
|
||||||
|
FBackColor : TColor; {background color}
|
||||||
|
FTextColor : TColor; {text or font color}
|
||||||
|
FUseDefault : Boolean; {true to use defaults}
|
||||||
|
|
||||||
|
{event variables}
|
||||||
|
FOnColorChange : TNotifyEvent;
|
||||||
|
|
||||||
|
{internal variables}
|
||||||
|
cDefBackColor : TColor; {default background}
|
||||||
|
cDefTextColor : TColor; {default text color}
|
||||||
|
|
||||||
|
{property methods}
|
||||||
|
procedure SetBackColor(Value: TColor);
|
||||||
|
{-set the color used for the background}
|
||||||
|
procedure SetTextColor(Value: TColor);
|
||||||
|
{-set the color used for the foreground}
|
||||||
|
procedure SetUseDefault(Value: Boolean);
|
||||||
|
{-set the flag to reset colors to parent default values}
|
||||||
|
|
||||||
|
procedure ReadUseDefault(Reader : TReader);
|
||||||
|
{-read the UseDefault property. for backward compatibility only}
|
||||||
|
|
||||||
|
protected
|
||||||
|
procedure DefineProperties(Filer : TFiler);
|
||||||
|
override;
|
||||||
|
|
||||||
|
procedure DoOnColorChange;
|
||||||
|
{-notify onwing object that a color has changed}
|
||||||
|
dynamic;
|
||||||
|
|
||||||
|
procedure ResetToDefaultColors;
|
||||||
|
{-assign default color values}
|
||||||
|
dynamic;
|
||||||
|
|
||||||
|
public
|
||||||
|
procedure Assign(Source : TPersistent);
|
||||||
|
override;
|
||||||
|
constructor Create(FG, BG : TColor);
|
||||||
|
virtual;
|
||||||
|
{.Z-}
|
||||||
|
|
||||||
|
property OnColorChange : TNotifyEvent
|
||||||
|
read FOnColorChange
|
||||||
|
write FOnColorChange;
|
||||||
|
|
||||||
|
published
|
||||||
|
property BackColor : TColor
|
||||||
|
read FBackColor
|
||||||
|
write SetBackColor;
|
||||||
|
|
||||||
|
property TextColor : TColor
|
||||||
|
read FTextColor
|
||||||
|
write SetTextColor;
|
||||||
|
|
||||||
|
property UseDefault : Boolean
|
||||||
|
read FUseDefault
|
||||||
|
write SetUseDefault
|
||||||
|
stored False;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
implementation
|
||||||
|
|
||||||
|
|
||||||
|
{*** TOvcColors ***}
|
||||||
|
|
||||||
|
procedure TOvcColors.Assign(Source : TPersistent);
|
||||||
|
var
|
||||||
|
C : TOvcColors absolute Source;
|
||||||
|
begin
|
||||||
|
if (Source <> nil) and (Source is TOvcColors) then begin
|
||||||
|
BackColor := C.BackColor;
|
||||||
|
TextColor := C.TextColor;
|
||||||
|
end else
|
||||||
|
inherited Assign(Source);
|
||||||
|
end;
|
||||||
|
|
||||||
|
constructor TOvcColors.Create(FG, BG : TColor);
|
||||||
|
begin
|
||||||
|
inherited Create;
|
||||||
|
|
||||||
|
cDefBackColor := BG;
|
||||||
|
cDefTextColor := FG;
|
||||||
|
FUseDefault := True;
|
||||||
|
|
||||||
|
{initialize to these colors}
|
||||||
|
ResetToDefaultColors;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TOvcColors.DefineProperties(Filer : TFiler);
|
||||||
|
begin
|
||||||
|
inherited DefineProperties(Filer);
|
||||||
|
{define a UseDefault property for compatibility with eariler versions}
|
||||||
|
Filer.DefineProperty('UseDefault', ReadUseDefault, nil, False);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TOvcColors.DoOnColorChange;
|
||||||
|
{-notify onwing object that a color has changed}
|
||||||
|
begin
|
||||||
|
if Assigned(FOnColorChange) then
|
||||||
|
FOnColorChange(Self);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TOvcColors.ReadUseDefault(Reader : TReader);
|
||||||
|
begin
|
||||||
|
{read property and discard it}
|
||||||
|
Reader.ReadBoolean;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TOvcColors.ResetToDefaultColors;
|
||||||
|
{-obtain default color values}
|
||||||
|
begin
|
||||||
|
FBackColor := cDefBackColor;
|
||||||
|
FTextColor := cDefTextColor;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TOvcColors.SetBackColor(Value: TColor);
|
||||||
|
{-set the color used for the background}
|
||||||
|
begin
|
||||||
|
if Value <> FBackColor then begin
|
||||||
|
if Value <> cDefBackColor then
|
||||||
|
FUseDefault := False;
|
||||||
|
FBackColor := Value;
|
||||||
|
DoOnColorChange;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TOvcColors.SetTextColor(Value: TColor);
|
||||||
|
{-set the color used for the foreground}
|
||||||
|
begin
|
||||||
|
if Value <> FTextColor then begin
|
||||||
|
if Value <> cDefTextColor then
|
||||||
|
FUseDefault := False;
|
||||||
|
FTextColor := Value;
|
||||||
|
DoOnColorChange;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TOvcColors.SetUseDefault(Value: Boolean);
|
||||||
|
{-set the flag to reset colors to parent default values}
|
||||||
|
begin
|
||||||
|
FUseDefault := Value;
|
||||||
|
if FUseDefault then begin
|
||||||
|
ResetToDefaultColors; {assign default values}
|
||||||
|
DoOnColorChange;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
end.
|
604
components/orpheus/ovcconst.pas
Normal file
@ -0,0 +1,604 @@
|
|||||||
|
{*********************************************************}
|
||||||
|
{* OVCCONST.PAS 4.06 *}
|
||||||
|
{*********************************************************}
|
||||||
|
|
||||||
|
{* ***** BEGIN LICENSE BLOCK ***** *}
|
||||||
|
{* Version: MPL 1.1 *}
|
||||||
|
{* *}
|
||||||
|
{* The contents of this file are subject to the Mozilla Public License *}
|
||||||
|
{* Version 1.1 (the "License"); you may not use this file except in *}
|
||||||
|
{* compliance with the License. You may obtain a copy of the License at *}
|
||||||
|
{* http://www.mozilla.org/MPL/ *}
|
||||||
|
{* *}
|
||||||
|
{* Software distributed under the License is distributed on an "AS IS" basis, *}
|
||||||
|
{* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License *}
|
||||||
|
{* for the specific language governing rights and limitations under the *}
|
||||||
|
{* License. *}
|
||||||
|
{* *}
|
||||||
|
{* The Original Code is TurboPower Orpheus *}
|
||||||
|
{* *}
|
||||||
|
{* The Initial Developer of the Original Code is TurboPower Software *}
|
||||||
|
{* *}
|
||||||
|
{* Portions created by TurboPower Software Inc. are Copyright (C)1995-2002 *}
|
||||||
|
{* TurboPower Software Inc. All Rights Reserved. *}
|
||||||
|
{* *}
|
||||||
|
{* Contributor(s): *}
|
||||||
|
{* *}
|
||||||
|
{* ***** END LICENSE BLOCK ***** *}
|
||||||
|
|
||||||
|
{$I OVC.INC}
|
||||||
|
|
||||||
|
{$B-} {Complete Boolean Evaluation}
|
||||||
|
{$I+} {Input/Output-Checking}
|
||||||
|
{$P+} {Open Parameters}
|
||||||
|
{$T-} {Typed @ Operator}
|
||||||
|
{.W-} {Windows Stack Frame}
|
||||||
|
{$X+} {Extended Syntax}
|
||||||
|
|
||||||
|
unit ovcconst;
|
||||||
|
{-Command and resource constants}
|
||||||
|
|
||||||
|
interface
|
||||||
|
|
||||||
|
const
|
||||||
|
{value used to offset string resource id's}
|
||||||
|
BaseOffset = 32768; {***}
|
||||||
|
|
||||||
|
const
|
||||||
|
{constants for exception messages}
|
||||||
|
SCUnknownError = 30168;
|
||||||
|
SCDuplicateCommand = 30169;
|
||||||
|
SCTableNotFound = 30170;
|
||||||
|
SCNotDoneYet = 30171;
|
||||||
|
SCNoControllerAssigned = 30172;
|
||||||
|
SCCantCreateCommandTable = 30173;
|
||||||
|
SCCantDelete = 30174;
|
||||||
|
SCInvalidKeySequence = 30175;
|
||||||
|
SCNotWordStarCommands = 30176;
|
||||||
|
SCNoCommandSelected = 30177;
|
||||||
|
SCDuplicateKeySequence = 30178;
|
||||||
|
SCRangeError = 30179;
|
||||||
|
SCInvalidNumber = 30180;
|
||||||
|
SCRequiredField = 30181;
|
||||||
|
SCInvalidDate = 30182;
|
||||||
|
SCInvalidTime = 30183;
|
||||||
|
SCBlanksInField = 30184;
|
||||||
|
SCPartialEntry = 30185;
|
||||||
|
SCRegionTooLarge = 30186;
|
||||||
|
SCOutOfMemoryForCopy = 30187;
|
||||||
|
SCInvalidParamValue = 30188;
|
||||||
|
SCNoTimersAvail = 30189;
|
||||||
|
SCTooManyEvents = 30190;
|
||||||
|
SCBadTriggerHandle = 30191;
|
||||||
|
SCOnSelectNotAssigned = 30192;
|
||||||
|
SCInvalidPageIndex = 30193;
|
||||||
|
SCInvalidDataType = 30194;
|
||||||
|
SCInvalidTabFont = 30195;
|
||||||
|
SCInvalidLabelFont = 30196;
|
||||||
|
SCOutOfMemory = 30197;
|
||||||
|
SCTooManyParas = 30198;
|
||||||
|
SCCannotJoin = 30199;
|
||||||
|
SCTooManyBytes = 30200;
|
||||||
|
SCParaTooLong = 30201;
|
||||||
|
SCInvalidPictureMask = 30202;
|
||||||
|
SCInvalidRange = 30203;
|
||||||
|
SCInvalidRealRange = 30204;
|
||||||
|
SCInvalidExtendedRange = 30205;
|
||||||
|
SCInvalidDoubleRange = 30206;
|
||||||
|
SCInvalidSingleRange = 30207;
|
||||||
|
SCInvalidCompRange = 30208;
|
||||||
|
SCInvalidDateRange = 30209;
|
||||||
|
SCInvalidTimeRange = 30210;
|
||||||
|
SCInvalidRangeValue = 30211;
|
||||||
|
SCRangeNotSupported = 30212;
|
||||||
|
SCInvalidLineOrParaIndex = 30213;
|
||||||
|
SCNonFixedFont = 30214;
|
||||||
|
SCInvalidFontParam = 30215;
|
||||||
|
SCInvalidLineOrColumn = 30216;
|
||||||
|
SCSAEGeneral = 30217;
|
||||||
|
SCSAEAtMaxSize = 30218;
|
||||||
|
SCSAEOutOfBounds = 30219;
|
||||||
|
SCInvalidXMLFile = 30220;
|
||||||
|
SCUnterminatedElement = 30221;
|
||||||
|
SCBadColorConst = 30222;
|
||||||
|
SCBadColorValue = 30223;
|
||||||
|
SCInvalidFieldType = 30224;
|
||||||
|
SCBadAlarmHandle = 30225;
|
||||||
|
SCOnIsSelectedNotAssigned= 30226;
|
||||||
|
SCInvalidDateForMask = 30227;
|
||||||
|
SCNoTableAttached = 30228;
|
||||||
|
SCViewerIOError = 30232;
|
||||||
|
SCViewerFileNotFound = 30233;
|
||||||
|
SCViewerPathNotFound = 30234;
|
||||||
|
SCViewerTooManyOpenFiles = 30235;
|
||||||
|
SCViewerFileAccessDenied = 30236;
|
||||||
|
SCControlAttached = 30237;
|
||||||
|
SCCantEdit = 30238;
|
||||||
|
SCChildTableError = 30239;
|
||||||
|
SCNoCollection = 30241;
|
||||||
|
SCNotOvcDescendant = 30242;
|
||||||
|
SCItemIncompatible = 30243;
|
||||||
|
SCLabelNotAttached = 30244;
|
||||||
|
SCClassNotSet = 30245;
|
||||||
|
SCCollectionNotFound = 30246;
|
||||||
|
SCDayConvertError = 30247;
|
||||||
|
SCMonthConvertError = 30248;
|
||||||
|
SCMonthNameConvertError = 30249;
|
||||||
|
SCYearConvertError = 30250;
|
||||||
|
SCDayRequired = 30251;
|
||||||
|
SCMonthRequired = 30252;
|
||||||
|
SCYearRequired = 30253;
|
||||||
|
SCInvalidDay = 30254;
|
||||||
|
SCInvalidMonth = 30255;
|
||||||
|
SCInvalidMonthName = 30256;
|
||||||
|
SCInvalidYear = 30257;
|
||||||
|
SCTableRowOutOfBounds = 30258;
|
||||||
|
SCTableMaxRows = 30259;
|
||||||
|
SCTableMaxColumns = 30260;
|
||||||
|
SCTableGeneral = 30261;
|
||||||
|
SCTableToManyColumns = 30262;
|
||||||
|
SCTableInvalidFieldIndex = 30263;
|
||||||
|
SCTableHeaderNotAssigned = 30264;
|
||||||
|
SCTableInvalidHeaderCell = 30265;
|
||||||
|
SCGridTableName = 30266;
|
||||||
|
{general constants for string table resource entries}
|
||||||
|
SCNoneStr = 30268;
|
||||||
|
SCccUser = 30269;
|
||||||
|
SCccUserNum = 30270;
|
||||||
|
SCDeleteTable = 30271;
|
||||||
|
SCRenameTable = 30272;
|
||||||
|
SCEnterTableName = 30273;
|
||||||
|
SCNewTable = 30274;
|
||||||
|
SCDefaultTableName = 30275;
|
||||||
|
SCWordStarTableName = 30276;
|
||||||
|
SCUnknownTable = 30277;
|
||||||
|
SCDefaultEntryErrorText = 30278;
|
||||||
|
SCGotItemWarning = 30279;
|
||||||
|
SCSampleListItem = 30280;
|
||||||
|
SCAlphaString = 30281;
|
||||||
|
SCTallLowChars = 30282;
|
||||||
|
SCDefault = 30283;
|
||||||
|
SCDescending = 30285;
|
||||||
|
SCDefaultIndex = 30286;
|
||||||
|
SCRestoreMI = 30287;
|
||||||
|
SCCutMI = 30288;
|
||||||
|
SCCopyMI = 30289;
|
||||||
|
SCPasteMI = 30290;
|
||||||
|
SCDeleteMI = 30291;
|
||||||
|
SCSelectAllMI = 30292;
|
||||||
|
SCCalcBack = 30293;
|
||||||
|
SCCalcMC = 30294;
|
||||||
|
SCCalcMR = 30295;
|
||||||
|
SCCalcMS = 30296;
|
||||||
|
SCCalcMPlus = 30297;
|
||||||
|
SCCalcMMinus = 30298;
|
||||||
|
SCCalcCT = 30299;
|
||||||
|
SCCalcCE = 30300;
|
||||||
|
SCCalcC = 30301;
|
||||||
|
SCCalcSqrt = 30302;
|
||||||
|
SCCalNext = 30303;
|
||||||
|
SCCalLast = 30304;
|
||||||
|
SCCalFirst = 30305;
|
||||||
|
SCCal1st = 30306;
|
||||||
|
SCCalSecond = 30307;
|
||||||
|
SCCal2nd = 30308;
|
||||||
|
SCCalThird = 30309;
|
||||||
|
SCCal3rd = 30310;
|
||||||
|
SCCalFourth = 30311;
|
||||||
|
SCCal4th = 30312;
|
||||||
|
SCCalFinal = 30313;
|
||||||
|
SCCalBOM = 30314;
|
||||||
|
SCCalEnd = 30315;
|
||||||
|
SCCalEOM = 30316;
|
||||||
|
SCCalYesterday = 30317;
|
||||||
|
SCCalToday = 30318;
|
||||||
|
SCCalTomorrow = 30319;
|
||||||
|
SCEditingSections = 30320;
|
||||||
|
SCEditingItems = 30321;
|
||||||
|
SCEditingFolders = 30322;
|
||||||
|
SCEditingPages = 30323;
|
||||||
|
SCEditingImages = 30324;
|
||||||
|
SCSectionBaseName = 30325;
|
||||||
|
SCItemBaseName = 30326;
|
||||||
|
SCFolderBaseName = 30327;
|
||||||
|
SCPageBaseName = 30328;
|
||||||
|
SCImageBaseName = 30329;
|
||||||
|
SCOwnerMustBeForm = 30330;
|
||||||
|
SCTimeConvertError = 30331;
|
||||||
|
SCCancelQuery = 30332;
|
||||||
|
SCNoPagesAssigned = 30333;
|
||||||
|
SCCalPrev = 30334;
|
||||||
|
SCCalBegin = 30335;
|
||||||
|
SCInvalidMinMaxValue = 30336;
|
||||||
|
SCFormUseOnly = 30337;
|
||||||
|
|
||||||
|
{misc constant values}
|
||||||
|
SCYes = 30368;
|
||||||
|
SCNo = 30369;
|
||||||
|
SCTrue = 30370;
|
||||||
|
SCFalse = 30371;
|
||||||
|
SCHoursName = 30372;
|
||||||
|
SCMinutesName = 30373;
|
||||||
|
SCSecondsName = 30374;
|
||||||
|
SCCloseCaption = 30375;
|
||||||
|
|
||||||
|
{report view exceptions}
|
||||||
|
SCViewFieldNotFound = 30376;
|
||||||
|
SCCantResolveField = 30377;
|
||||||
|
SCItemAlreadyExists = 30378;
|
||||||
|
SCAlreadyInTempMode = 30379;
|
||||||
|
SCItemNotFound = 30380;
|
||||||
|
SCUpdatePending = 30381;
|
||||||
|
SCOnCompareNotAssigned = 30382;
|
||||||
|
SCOnFilterNotAssigned = 30383;
|
||||||
|
SCGetAsFloatNotAssigned = 30384;
|
||||||
|
SCNotInTempMode = 30385;
|
||||||
|
SCItemNotInIndex = 30387;
|
||||||
|
SCNoActiveView = 30388;
|
||||||
|
SCItemIsNotGroup = 30389;
|
||||||
|
SCNotMultiSelect = 30390;
|
||||||
|
SCLineNoOutOfRange = 30391;
|
||||||
|
SCUnknownView = 30392;
|
||||||
|
SCOnKeySearchNotAssigned = 30393;
|
||||||
|
SCOnEnumNotAssigned = 30394;
|
||||||
|
SCOnEnumSelectedNA = 30395;
|
||||||
|
|
||||||
|
{MRU list exceptions }
|
||||||
|
SCNoMenuAssigned = 30400;
|
||||||
|
SCNoAnchorAssigned = 30401;
|
||||||
|
SCInvalidParameter = 30402;
|
||||||
|
SCInvalidOperation = 30403;
|
||||||
|
|
||||||
|
SCColorBlack = 30500;
|
||||||
|
SCColorMaroon = 30501;
|
||||||
|
SCColorGreen = 30502;
|
||||||
|
SCColorOlive = 30503;
|
||||||
|
SCColorNavy = 30504;
|
||||||
|
SCColorPurple = 30505;
|
||||||
|
SCColorTeal = 30506;
|
||||||
|
SCColorGray = 30507;
|
||||||
|
SCColorSilver = 30508;
|
||||||
|
SCColorRed = 30509;
|
||||||
|
SCColorLime = 30510;
|
||||||
|
SCColorYellow = 30511;
|
||||||
|
SCColorBlue = 30512;
|
||||||
|
SCColorFuchsia = 30513;
|
||||||
|
SCColorAqua = 30514;
|
||||||
|
SCColorWhite = 30515;
|
||||||
|
SCColorLightGray = 30516;
|
||||||
|
SCColorMediumGray = 30517;
|
||||||
|
SCColorDarkGray = 30518;
|
||||||
|
SCColorMoneyGreen = 30519;
|
||||||
|
SCColorSkyBlue = 30520;
|
||||||
|
SCColorCream = 30521;
|
||||||
|
|
||||||
|
const
|
||||||
|
cHotKeyChar = '&'; {hotkey prefix character}
|
||||||
|
|
||||||
|
const
|
||||||
|
{offset for resource id's}
|
||||||
|
CommandResOfs = BaseOffset + 1000; {***}
|
||||||
|
|
||||||
|
{command codes - corresponding text offset by CommandOfs, stored in rc file}
|
||||||
|
{*** must be contiguous ***}
|
||||||
|
ccFirstCmd = 0; {first defined command}
|
||||||
|
ccNone = 0; {no command or not a known command}
|
||||||
|
ccBack = 1; {backspace one character}
|
||||||
|
ccBotOfPage = 2; {move caret to end of last page}
|
||||||
|
ccBotRightCell = 3; {move to the bottom right hand cell in a table}
|
||||||
|
ccCompleteDate = 4; {use default date for current date sub field}
|
||||||
|
ccCompleteTime = 5; {use default time for current time sub field}
|
||||||
|
ccCopy = 6; {copy highlighted text to clipboard}
|
||||||
|
ccCtrlChar = 7; {accept control character}
|
||||||
|
ccCut = 8; {copy highlighted text to clipboard and delete it}
|
||||||
|
ccDec = 9; {decrement the current entry field value}
|
||||||
|
ccDel = 10; {delete current character}
|
||||||
|
ccDelBol = 11; {delete from caret to beginning of line}
|
||||||
|
ccDelEol = 12; {delete from caret to end of line}
|
||||||
|
ccDelLine = 13; {delete entire line}
|
||||||
|
ccDelWord = 14; {delete word to right of caret}
|
||||||
|
ccDown = 15; {cursor down}
|
||||||
|
ccEnd = 16; {caret to end of line}
|
||||||
|
ccExtendDown = 17; {extend selection down one line}
|
||||||
|
ccExtendEnd = 18; {extend highlight to end of field}
|
||||||
|
ccExtendHome = 19; {extend highlight to start of field}
|
||||||
|
ccExtendLeft = 20; {extend highlight left one character}
|
||||||
|
ccExtendPgDn = 21; {extend selection down one page}
|
||||||
|
ccExtendPgUp = 22; {extend selection up one page}
|
||||||
|
ccExtendRight = 23; {extend highlight right one character}
|
||||||
|
ccExtendUp = 24; {extend selection up one line}
|
||||||
|
ccExtBotOfPage = 25; {extend selection to bottom of page}
|
||||||
|
ccExtFirstPage = 26; {extend selection to first page}
|
||||||
|
ccExtLastPage = 27; {extend selection to last page}
|
||||||
|
ccExtTopOfPage = 28; {extend selection to top of page}
|
||||||
|
ccExtWordLeft = 29; {extend highlight left one word}
|
||||||
|
ccExtWordRight = 30; {extend highlight right one word}
|
||||||
|
ccFirstPage = 31; {first page in table}
|
||||||
|
ccGotoMarker0 = 32; {editor & viewer, go to a position marker}
|
||||||
|
ccGotoMarker1 = 33; {editor & viewer, go to a position marker}
|
||||||
|
ccGotoMarker2 = 34; {editor & viewer, go to a position marker}
|
||||||
|
ccGotoMarker3 = 35; {editor & viewer, go to a position marker}
|
||||||
|
ccGotoMarker4 = 36; {editor & viewer, go to a position marker}
|
||||||
|
ccGotoMarker5 = 37; {editor & viewer, go to a position marker}
|
||||||
|
ccGotoMarker6 = 38; {editor & viewer, go to a position marker}
|
||||||
|
ccGotoMarker7 = 39; {editor & viewer, go to a position marker}
|
||||||
|
ccGotoMarker8 = 40; {editor & viewer, go to a position marker}
|
||||||
|
ccGotoMarker9 = 41; {editor & viewer, go to a position marker}
|
||||||
|
ccHome = 42; {caret to beginning of line}
|
||||||
|
ccInc = 43; {increment the current entry field value}
|
||||||
|
ccIns = 44; {toggle insert mode}
|
||||||
|
ccLastPage = 45; {last page in table}
|
||||||
|
ccLeft = 46; {caret left by one character}
|
||||||
|
ccNewLine = 47; {editor, create a new line}
|
||||||
|
ccNextPage = 48; {next page in table}
|
||||||
|
ccPageLeft = 49; {move left a page in the table}
|
||||||
|
ccPageRight = 50; {move right a page in the table}
|
||||||
|
ccPaste = 51; {paste text from clipboard}
|
||||||
|
ccPrevPage = 52; {previous page in table}
|
||||||
|
ccRedo = 53; {re-do the last undone operation}
|
||||||
|
ccRestore = 54; {restore default and continue}
|
||||||
|
ccRight = 55; {caret right by one character}
|
||||||
|
ccScrollDown = 56; {editor, scroll page up one line}
|
||||||
|
ccScrollUp = 57; {editor, scroll page down one line}
|
||||||
|
ccSetMarker0 = 58; {editor & viewer, set a position marker}
|
||||||
|
ccSetMarker1 = 59; {editor & viewer, set a position marker}
|
||||||
|
ccSetMarker2 = 60; {editor & viewer, set a position marker}
|
||||||
|
ccSetMarker3 = 61; {editor & viewer, set a position marker}
|
||||||
|
ccSetMarker4 = 62; {editor & viewer, set a position marker}
|
||||||
|
ccSetMarker5 = 63; {editor & viewer, set a position marker}
|
||||||
|
ccSetMarker6 = 64; {editor & viewer, set a position marker}
|
||||||
|
ccSetMarker7 = 65; {editor & viewer, set a position marker}
|
||||||
|
ccSetMarker8 = 66; {editor & viewer, set a position marker}
|
||||||
|
ccSetMarker9 = 67; {editor & viewer, set a position marker}
|
||||||
|
ccTab = 68; {editor, for tab entry}
|
||||||
|
ccTableEdit = 69; {enter/exit table edit mode}
|
||||||
|
ccTopLeftCell = 70; {move to the top left cell in a table}
|
||||||
|
ccTopOfPage = 71; {move caret to beginning of first page}
|
||||||
|
ccUndo = 72; {undo last operation}
|
||||||
|
ccUp = 73; {cursor up}
|
||||||
|
ccWordLeft = 74; {caret left one word}
|
||||||
|
ccWordRight = 75; {caret right one word}
|
||||||
|
|
||||||
|
ccLastCmd = 75; {***} {last interfaced command}
|
||||||
|
|
||||||
|
{internal}
|
||||||
|
ccChar = 249; {regular character; generated internally}
|
||||||
|
ccMouse = 250; {mouse selection; generated internally}
|
||||||
|
ccMouseMove = 251; {mouse move; generated internally}
|
||||||
|
ccAccept = 252; {accept next key; internal}
|
||||||
|
ccDblClk = 253; {mouse double click; generated internally}
|
||||||
|
ccSuppress = 254; {suppress next key; internal}
|
||||||
|
ccPartial = 255; {partial command; internal}
|
||||||
|
|
||||||
|
{user defined commands start here}
|
||||||
|
ccUserFirst = 256;
|
||||||
|
ccUser0 = ccUserFirst + 0;
|
||||||
|
ccUser1 = ccUserFirst + 1;
|
||||||
|
ccUser2 = ccUserFirst + 2;
|
||||||
|
ccUser3 = ccUserFirst + 3;
|
||||||
|
ccUser4 = ccUserFirst + 4;
|
||||||
|
ccUser5 = ccUserFirst + 5;
|
||||||
|
ccUser6 = ccUserFirst + 6;
|
||||||
|
ccUser7 = ccUserFirst + 7;
|
||||||
|
ccUser8 = ccUserFirst + 8;
|
||||||
|
ccUser9 = ccUserFirst + 9;
|
||||||
|
{... = ccUserFirst + 65535 - ccUserFirst}
|
||||||
|
|
||||||
|
|
||||||
|
{data type base offset}
|
||||||
|
const
|
||||||
|
DataTypeOfs = BaseOffset + 1300; {***}
|
||||||
|
|
||||||
|
{entry field data type sub codes}
|
||||||
|
const
|
||||||
|
fsubString = 0; {field subclass codes}
|
||||||
|
fsubChar = 1;
|
||||||
|
fsubBoolean = 2;
|
||||||
|
fsubYesNo = 3;
|
||||||
|
fsubLongInt = 4;
|
||||||
|
fsubWord = 5;
|
||||||
|
fsubInteger = 6;
|
||||||
|
fsubByte = 7;
|
||||||
|
fsubShortInt = 8;
|
||||||
|
fsubReal = 9;
|
||||||
|
fsubExtended = 10;
|
||||||
|
fsubDouble = 11;
|
||||||
|
fsubSingle = 12;
|
||||||
|
fsubComp = 13;
|
||||||
|
fsubDate = 14;
|
||||||
|
fsubTime = 15;
|
||||||
|
|
||||||
|
|
||||||
|
{constants for simple, picture, and numeric picture}
|
||||||
|
{mask samples used in the property editors}
|
||||||
|
const
|
||||||
|
PictureMaskOfs = BaseOffset + 1700; {***}
|
||||||
|
|
||||||
|
{simple field mask characters}
|
||||||
|
stsmFirst = 34468;
|
||||||
|
stsmLast = 34468 + 23;
|
||||||
|
|
||||||
|
{numeric field picture masks}
|
||||||
|
stnmFirst = 34493;
|
||||||
|
stnmLast = 34493 + 17;
|
||||||
|
|
||||||
|
{picture field picture masks}
|
||||||
|
stpmFirst = 34518;
|
||||||
|
stpmLast = 34518 + 23;
|
||||||
|
|
||||||
|
const
|
||||||
|
{String Resource Constants...}
|
||||||
|
|
||||||
|
{Note: These should stay in numerical order. It's not as important here as it
|
||||||
|
is in the O32SR.pas file's Lookup Array, but you should still keep it in
|
||||||
|
mind when editing these values...}
|
||||||
|
|
||||||
|
{String Resource Index Constants}
|
||||||
|
IccNone = 33768;
|
||||||
|
IccBack = 33769;
|
||||||
|
IccBotOfPage = 33770;
|
||||||
|
IccBotRightCell = 33771;
|
||||||
|
IccCompleteDate = 33772;
|
||||||
|
IccCompleteTime = 33773;
|
||||||
|
IccCopy = 33774;
|
||||||
|
IccCtrlChar = 33775;
|
||||||
|
IccCut = 33776;
|
||||||
|
IccDec = 33777;
|
||||||
|
IccDel = 33778;
|
||||||
|
IccDelBol = 33779;
|
||||||
|
IccDelEol = 33780;
|
||||||
|
IccDelLine = 33781;
|
||||||
|
IccDelWord = 33782;
|
||||||
|
IccDown = 33783;
|
||||||
|
IccEnd = 33784;
|
||||||
|
IccExtendDown = 33785;
|
||||||
|
IccExtendEnd = 33786;
|
||||||
|
IccExtendHome = 33787;
|
||||||
|
IccExtendLeft = 33788;
|
||||||
|
IccExtendPgDn = 33789;
|
||||||
|
IccExtendPgUp = 33790;
|
||||||
|
IccExtendRight = 33791;
|
||||||
|
IccExtendUp = 33792;
|
||||||
|
IccExtBotOfPage = 33793;
|
||||||
|
IccExtFirstPage = 33794;
|
||||||
|
IccExtLastPage = 33795;
|
||||||
|
IccExtTopOfPage = 33796;
|
||||||
|
IccExtWordLeft = 33797;
|
||||||
|
IccExtWordRight = 33798;
|
||||||
|
IccFirstPage = 33799;
|
||||||
|
IccGotoMarker0 = 33800;
|
||||||
|
IccGotoMarker1 = 33801;
|
||||||
|
IccGotoMarker2 = 33802;
|
||||||
|
IccGotoMarker3 = 33803;
|
||||||
|
IccGotoMarker4 = 33804;
|
||||||
|
IccGotoMarker5 = 33805;
|
||||||
|
IccGotoMarker6 = 33806;
|
||||||
|
IccGotoMarker7 = 33807;
|
||||||
|
IccGotoMarker8 = 33808;
|
||||||
|
IccGotoMarker9 = 33809;
|
||||||
|
IccHome = 33810;
|
||||||
|
IccInc = 33811;
|
||||||
|
IccIns = 33812;
|
||||||
|
IccLastPage = 33813;
|
||||||
|
IccLeft = 33814;
|
||||||
|
IccNewLine = 33815;
|
||||||
|
IccNextPage = 33816;
|
||||||
|
IccPageLeft = 33817;
|
||||||
|
IccPageRight = 33818;
|
||||||
|
IccPaste = 33819;
|
||||||
|
IccPrevPage = 33820;
|
||||||
|
IccRedo = 33821;
|
||||||
|
IccRestore = 33822;
|
||||||
|
IccRight = 33823;
|
||||||
|
IccScrollDown = 33824;
|
||||||
|
IccScrollUp = 33825;
|
||||||
|
IccSetMarker0 = 33826;
|
||||||
|
IccSetMarker1 = 33827;
|
||||||
|
IccSetMarker2 = 33828;
|
||||||
|
IccSetMarker3 = 33829;
|
||||||
|
IccSetMarker4 = 33830;
|
||||||
|
IccSetMarker5 = 33831;
|
||||||
|
IccSetMarker6 = 33832;
|
||||||
|
IccSetMarker7 = 33833;
|
||||||
|
IccSetMarker8 = 33834;
|
||||||
|
IccSetMarker9 = 33835;
|
||||||
|
IccTab = 33836;
|
||||||
|
IccTableEdit = 33837;
|
||||||
|
IccTopLeftCell = 33838;
|
||||||
|
IccTopOfPage = 33839;
|
||||||
|
IccUndo = 33840;
|
||||||
|
IccUp = 33841;
|
||||||
|
IccWordLeft = 33842;
|
||||||
|
IccWordRight = 33843;
|
||||||
|
|
||||||
|
IString = 34068;
|
||||||
|
IChar = 34069;
|
||||||
|
IBoolean = 34070;
|
||||||
|
IYesNo = 34071;
|
||||||
|
ILongInt = 34072;
|
||||||
|
IWord = 34073;
|
||||||
|
ISmallInt = 34074;
|
||||||
|
IByte = 34075;
|
||||||
|
IShortInt = 34076;
|
||||||
|
IReal = 34077;
|
||||||
|
IExtended = 34078;
|
||||||
|
IDouble = 34079;
|
||||||
|
ISingle = 34080;
|
||||||
|
IComp = 34081;
|
||||||
|
IDate = 34082;
|
||||||
|
ITime = 34083;
|
||||||
|
|
||||||
|
{Character Masks}
|
||||||
|
ICharMask1 = 34468;
|
||||||
|
ICharMask2 = 34469;
|
||||||
|
ICharMask3 = 34470;
|
||||||
|
ICharMask4 = 34471;
|
||||||
|
ICharMask5 = 34472;
|
||||||
|
ICharMask6 = 34473;
|
||||||
|
ICharMask7 = 34474;
|
||||||
|
ICharMask8 = 34475;
|
||||||
|
ICharMask9 = 34476;
|
||||||
|
ICharMask10 = 34477;
|
||||||
|
ICharMask11 = 34478;
|
||||||
|
ICharMask12 = 34479;
|
||||||
|
ICharMask13 = 34480;
|
||||||
|
ICharMask14 = 34481;
|
||||||
|
ICharMask15 = 34482;
|
||||||
|
ICharMask16 = 34483;
|
||||||
|
ICharMask17 = 34484;
|
||||||
|
ICharMask18 = 34485;
|
||||||
|
ICharMask19 = 34486;
|
||||||
|
ICharMask20 = 34487;
|
||||||
|
ICharMask21 = 34488;
|
||||||
|
ICharMask22 = 34489;
|
||||||
|
ICharMask23 = 34490;
|
||||||
|
ICharMask24 = 34491;
|
||||||
|
|
||||||
|
{Sample Field Masks }
|
||||||
|
IFieldMask1 = 34493;
|
||||||
|
IFieldMask2 = 34494;
|
||||||
|
IFieldMask3 = 34495;
|
||||||
|
IFieldMask4 = 34496;
|
||||||
|
IFieldMask5 = 34497;
|
||||||
|
IFieldMask6 = 34498;
|
||||||
|
IFieldMask7 = 34499;
|
||||||
|
IFieldMask8 = 34500;
|
||||||
|
IFieldMask9 = 34501;
|
||||||
|
IFieldMask10 = 34502;
|
||||||
|
IFieldMask11 = 34503;
|
||||||
|
IFieldMask12 = 34504;
|
||||||
|
IFieldMask13 = 34505;
|
||||||
|
IFieldMask14 = 34506;
|
||||||
|
IFieldMask15 = 34507;
|
||||||
|
IFieldMask16 = 34508;
|
||||||
|
IFieldMask17 = 34509;
|
||||||
|
IFieldMask18 = 34510;
|
||||||
|
|
||||||
|
IFieldMask19 = 34518;
|
||||||
|
IFieldMask20 = 34519;
|
||||||
|
IFieldMask21 = 34520;
|
||||||
|
IFieldMask22 = 34521;
|
||||||
|
IFieldMask23 = 34522;
|
||||||
|
IFieldMask24 = 34523;
|
||||||
|
IFieldMask25 = 34524;
|
||||||
|
IFieldMask26 = 34525;
|
||||||
|
IFieldMask27 = 34526;
|
||||||
|
IFieldMask28 = 34527;
|
||||||
|
IFieldMask29 = 34528;
|
||||||
|
IFieldMask30 = 34529;
|
||||||
|
IFieldMask31 = 34530;
|
||||||
|
IFieldMask32 = 34531;
|
||||||
|
IFieldMask33 = 34532;
|
||||||
|
IFieldMask34 = 34533;
|
||||||
|
IFieldMask35 = 34534;
|
||||||
|
IFieldMask36 = 34535;
|
||||||
|
IFieldMask37 = 34536;
|
||||||
|
IFieldMask38 = 34537;
|
||||||
|
IFieldMask39 = 34538;
|
||||||
|
IFieldMask40 = 34539;
|
||||||
|
IFieldMask41 = 34540;
|
||||||
|
IFieldMask42 = 34541;
|
||||||
|
|
||||||
|
implementation
|
||||||
|
|
||||||
|
end.
|
624
components/orpheus/ovcdata.pas
Normal file
@ -0,0 +1,624 @@
|
|||||||
|
{*********************************************************}
|
||||||
|
{* OVCDATA.PAS 4.06 *}
|
||||||
|
{*********************************************************}
|
||||||
|
|
||||||
|
{* ***** BEGIN LICENSE BLOCK ***** *}
|
||||||
|
{* Version: MPL 1.1 *}
|
||||||
|
{* *}
|
||||||
|
{* The contents of this file are subject to the Mozilla Public License *}
|
||||||
|
{* Version 1.1 (the "License"); you may not use this file except in *}
|
||||||
|
{* compliance with the License. You may obtain a copy of the License at *}
|
||||||
|
{* http://www.mozilla.org/MPL/ *}
|
||||||
|
{* *}
|
||||||
|
{* Software distributed under the License is distributed on an "AS IS" basis, *}
|
||||||
|
{* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License *}
|
||||||
|
{* for the specific language governing rights and limitations under the *}
|
||||||
|
{* License. *}
|
||||||
|
{* *}
|
||||||
|
{* The Original Code is TurboPower Orpheus *}
|
||||||
|
{* *}
|
||||||
|
{* The Initial Developer of the Original Code is TurboPower Software *}
|
||||||
|
{* *}
|
||||||
|
{* Portions created by TurboPower Software Inc. are Copyright (C)1995-2002 *}
|
||||||
|
{* TurboPower Software Inc. All Rights Reserved. *}
|
||||||
|
{* *}
|
||||||
|
{* Contributor(s): *}
|
||||||
|
{* *}
|
||||||
|
{* ***** END LICENSE BLOCK ***** *}
|
||||||
|
|
||||||
|
{$I OVC.INC}
|
||||||
|
|
||||||
|
{$B-} {Complete Boolean Evaluation}
|
||||||
|
{$I+} {Input/Output-Checking}
|
||||||
|
{$P+} {Open Parameters}
|
||||||
|
{$T-} {Typed @ Operator}
|
||||||
|
{.W-} {Windows Stack Frame}
|
||||||
|
{$X+} {Extended Syntax}
|
||||||
|
|
||||||
|
unit ovcdata;
|
||||||
|
{-Miscellaneous type and constant declarations}
|
||||||
|
|
||||||
|
interface
|
||||||
|
|
||||||
|
uses
|
||||||
|
{$IFNDEF LCL} Windows, Messages, {$ELSE} LclIntf, LMessages, LclType, MyMisc, {$ENDIF}
|
||||||
|
Controls, Forms, Graphics, StdCtrls, SysUtils, OvcConst, OvcDate, O32SR;
|
||||||
|
|
||||||
|
const
|
||||||
|
BorderStyles : array[TBorderStyle] of LongInt =
|
||||||
|
(0, WS_BORDER);
|
||||||
|
ScrollBarStyles : array [TScrollStyle] of LongInt =
|
||||||
|
(0, WS_HSCROLL, WS_VSCROLL, WS_HSCROLL or WS_VSCROLL
|
||||||
|
{$IFDEF LCL}
|
||||||
|
,WS_HSCROLL, WS_VSCROLL, WS_HSCROLL or WS_VSCROLL
|
||||||
|
{$ENDIF}
|
||||||
|
);
|
||||||
|
|
||||||
|
{$IFNDEF VERSION4}
|
||||||
|
type
|
||||||
|
PDateTime = ^TDateTime;
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
{some colors that are not defined by Delphi}
|
||||||
|
const
|
||||||
|
clCream = TColor($A6CAF0);
|
||||||
|
clMoneyGreen = TColor($C0DCC0);
|
||||||
|
clSkyBlue = TColor($FFFBF0);
|
||||||
|
|
||||||
|
type
|
||||||
|
TCharSet = set of AnsiChar; {a Pascal set of characters}
|
||||||
|
|
||||||
|
type
|
||||||
|
PPointer = ^Pointer;
|
||||||
|
|
||||||
|
type
|
||||||
|
{secondary field options--internal}
|
||||||
|
TsefOption = (
|
||||||
|
sefValPending, {field needs validation}
|
||||||
|
sefInvalid, {field is invalid}
|
||||||
|
sefNoHighlight, {Don't highlight field initially}
|
||||||
|
sefIgnoreFocus, {We're ignoring the focus}
|
||||||
|
sefValidating, {We're validating a field}
|
||||||
|
sefModified, {Field recently modified}
|
||||||
|
sefEverModified, {Field has been modified after last data transfer}
|
||||||
|
sefFixSemiLits, {Semi-literals were stripped}
|
||||||
|
sefHexadecimal, {Field's value is shown in hex}
|
||||||
|
sefOctal, {Field's value is shown in octal}
|
||||||
|
sefBinary, {Field's value is shown in binary}
|
||||||
|
sefNumeric, {Edit from right to left--for numbers only}
|
||||||
|
sefRealVar, {Field is of a real/8087 type}
|
||||||
|
sefNoLiterals, {Picture mask has no literals}
|
||||||
|
sefHaveFocus, {Control has the focus}
|
||||||
|
sefRetainPos, {Retain caret position}
|
||||||
|
sefErrorPending, {Error pending?}
|
||||||
|
sefInsert, {Insert mode on}
|
||||||
|
sefLiteral, {Next char is literal}
|
||||||
|
sefAcceptChar, {Accept next character}
|
||||||
|
sefCharOK, {OK to add a character}
|
||||||
|
sefUpdating, {field is being updated}
|
||||||
|
sefGettingValue, {field contents are being retrieved}
|
||||||
|
sefUserValidating, {user validation in progress}
|
||||||
|
sefNoUserValidate); {don't perform user validation}
|
||||||
|
|
||||||
|
{Set of current secondary options for entry fields}
|
||||||
|
TsefOptionSet = set of TsefOption;
|
||||||
|
|
||||||
|
const
|
||||||
|
{default secondary field options}
|
||||||
|
sefDefOptions : TsefOptionSet = [sefCharOK, sefInsert];
|
||||||
|
|
||||||
|
const
|
||||||
|
DefPadChar = ' '; {Default character used to pad the end of a display string}
|
||||||
|
MaxEditLen = 255; {Maximum length of edit string}
|
||||||
|
MaxPicture = 255; {Maximum length of a picture mask}
|
||||||
|
|
||||||
|
{*** Picture masks ***}
|
||||||
|
const
|
||||||
|
{the following characters are meaningful in Picture masks}
|
||||||
|
pmAnyChar = 'X'; {allows any character}
|
||||||
|
pmForceUpper = '!'; {allows any character, forces upper case}
|
||||||
|
pmForceLower = 'L'; {allows any character, forces lower case}
|
||||||
|
pmForceMixed = 'x'; {allows any character, forces mixed case}
|
||||||
|
pmAlpha = 'a'; {allows alphas only}
|
||||||
|
pmUpperAlpha = 'A'; {allows alphas only, forces upper case}
|
||||||
|
pmLowerAlpha = 'l'; {allows alphas only, forces lower case}
|
||||||
|
pmPositive = '9'; {allows numbers and spaces only}
|
||||||
|
pmWhole = 'i'; {allows numbers, spaces, minus}
|
||||||
|
pmDecimal = '#'; {allows numbers, spaces, minus, period}
|
||||||
|
pmScientific = 'E'; {allows numbers, spaces, minus, period, 'e'}
|
||||||
|
pmHexadecimal = 'K'; {allows 0-9, A-F, and space forces upper case}
|
||||||
|
pmOctal = 'O'; {allows 0-7, space}
|
||||||
|
pmBinary = 'b'; {allows 0-1, space}
|
||||||
|
pmTrueFalse = 'B'; {allows T, t, F, f}
|
||||||
|
pmYesNo = 'Y'; {allows Y, y, N, n}
|
||||||
|
|
||||||
|
pmUser1 = '1'; {User-defined picture mask characters}
|
||||||
|
pmUser2 = '2';
|
||||||
|
pmUser3 = '3';
|
||||||
|
pmUser4 = '4';
|
||||||
|
pmUser5 = '5';
|
||||||
|
pmUser6 = '6';
|
||||||
|
pmUser7 = '7';
|
||||||
|
pmUser8 = '8';
|
||||||
|
|
||||||
|
Subst1 = #241; {User-defined substitution characters}
|
||||||
|
Subst2 = #242;
|
||||||
|
Subst3 = #243;
|
||||||
|
Subst4 = #244;
|
||||||
|
Subst5 = #245;
|
||||||
|
Subst6 = #246;
|
||||||
|
Subst7 = #247;
|
||||||
|
Subst8 = #248;
|
||||||
|
|
||||||
|
const
|
||||||
|
{Other special characters allowed in Picture strings}
|
||||||
|
pmDecimalPt = '.'; {insert decimal point}
|
||||||
|
pmComma = ','; {character used to separate numbers}
|
||||||
|
pmFloatDollar = '$'; {floating dollar sign}
|
||||||
|
pmCurrencyLt = 'c'; {currency to left of the amount}
|
||||||
|
pmCurrencyRt = 'C'; {currency to right of the amount}
|
||||||
|
pmNegParens = 'p'; {indicates () should be used for negative #'s}
|
||||||
|
pmNegHere = 'g'; {placeholder for minus sign}
|
||||||
|
{NOTE: Comma and FloatDollar are allowed only in fields containing fixed
|
||||||
|
decimal points and/or numeric fields. NegParens and NegHere should be used
|
||||||
|
only in numeric fields.}
|
||||||
|
|
||||||
|
const
|
||||||
|
{the following characters are meaningful in date Picture masks}
|
||||||
|
pmMonth = 'm'; {formatting character for a date string picture mask}
|
||||||
|
pmMonthU = 'M'; {formatting character for a date string picture mask.
|
||||||
|
Uppercase means pad with ' ' rather than '0'}
|
||||||
|
pmDay = 'd'; {formatting character for a date string picture mask}
|
||||||
|
pmDayU = 'D'; {formatting character for a date string picture mask.
|
||||||
|
Uppercase means pad with ' ' rather then '0'}
|
||||||
|
pmYear = 'y'; {formatting character for a date string picture mask}
|
||||||
|
pmDateSlash = '/'; {formatting character for a date string picture mask}
|
||||||
|
|
||||||
|
{'n'/'N' may be used in place of 'm'/'M' when the name of the month is
|
||||||
|
desired instead of its number. E.g., 'dd/nnn/yyyy' -\> '01-Jan-1980'.
|
||||||
|
'dd/NNN/yyyy' -\> '01-JAN-1980' (if SlashChar = '-'). The abbreviation used
|
||||||
|
is based on the width of the subfield (3 in the example) and the current
|
||||||
|
contents of the MonthString array.}
|
||||||
|
pmMonthName = 'n'; {formatting character for a date string picture mask}
|
||||||
|
pmMonthNameU = 'N'; {formatting character for a date string picture mask.
|
||||||
|
Uppercase causes the output to be in uppercase}
|
||||||
|
|
||||||
|
{'w'/'W' may be used to include the day of the week in a date string. E.g.,
|
||||||
|
'www dd nnn yyyy' -\> 'Mon 01 Jan 1989'. The abbreviation used is based on
|
||||||
|
the width of the subfield (3 in the example) and the current contents of the
|
||||||
|
DayString array. Note that entry field will not allow the user to enter
|
||||||
|
text into a subfield containing 'w' or 'W'. The day of the week will be
|
||||||
|
supplied automatically when a valid date is entered.}
|
||||||
|
pmWeekDay = 'w'; {formatting character for a date string picture mask}
|
||||||
|
pmWeekDayU = 'W'; {formatting character for a date string picture mask.
|
||||||
|
Uppercase causes the output to be in uppercase}
|
||||||
|
|
||||||
|
pmLongDateSub1 = 'f'; {mask character used with Window's long date format}
|
||||||
|
pmLongDateSub2 = 'g'; {mask character used with Window's long date format}
|
||||||
|
pmLongDateSub3 = 'h'; {mask character used with Window's long date format}
|
||||||
|
|
||||||
|
const
|
||||||
|
{if uppercase letters are used, numbers are padded with ' ' rather than '0'}
|
||||||
|
pmHour = 'h'; {formatting character for a time string picture mask}
|
||||||
|
pmHourU = 'H'; {formatting character for a time string picture mask}
|
||||||
|
pmMinute = 'm'; {formatting character for a time string picture mask}
|
||||||
|
pmMinuteU = 'M'; {formatting character for a time string picture mask}
|
||||||
|
pmSecond = 's'; {formatting character for a time string picture mask}
|
||||||
|
pmSecondU = 'S'; {formatting character for a time string picture mask}
|
||||||
|
{'hh:mm:ss tt' -\> '12:00:00 pm', 'hh:mmt' -\> '12:00p'}
|
||||||
|
pmAmPm = 't'; {formatting character for a time string picture mask.
|
||||||
|
This generates 'AM' or 'PM'}
|
||||||
|
pmTimeColon = ':'; {formatting character for a time string picture mask}
|
||||||
|
|
||||||
|
const
|
||||||
|
PictureChars : TCharSet = [
|
||||||
|
pmAnyChar, pmForceUpper, pmForceLower, pmForceMixed,
|
||||||
|
pmAlpha, pmUpperAlpha, pmLowerAlpha,
|
||||||
|
pmPositive, pmWhole, pmDecimal, pmScientific,
|
||||||
|
pmHexadecimal, pmOctal, pmBinary,
|
||||||
|
pmTrueFalse, pmYesNo,
|
||||||
|
pmMonthName, pmMonthNameU, pmMonth,
|
||||||
|
pmMonthU, pmDay, pmDayU, pmYear, pmHour, pmHourU, {$IFNDEF FPC} pmMinute,
|
||||||
|
pmMinuteU, {$ENDIF} pmSecond, pmSecondU, pmAmPm, pmUser1..pmUser8];
|
||||||
|
|
||||||
|
const
|
||||||
|
{set of allowable picture characters for simple fields}
|
||||||
|
SimplePictureChars : TCharSet = [
|
||||||
|
pmAnyChar, pmForceUpper, pmForceLower, pmForceMixed,
|
||||||
|
pmAlpha, pmUpperAlpha, pmLowerAlpha,
|
||||||
|
pmPositive, pmWhole, pmDecimal, pmScientific,
|
||||||
|
pmHexadecimal, pmOctal, pmBinary,
|
||||||
|
pmTrueFalse, pmYesNo,
|
||||||
|
pmUser1..pmUser8];
|
||||||
|
|
||||||
|
type
|
||||||
|
{types of case change operations associated with a picture mask character}
|
||||||
|
TCaseChange = (mcNoChange, mcUpperCase, mcLowerCase, mcMixedCase);
|
||||||
|
|
||||||
|
type
|
||||||
|
TUserSetRange = pmUser1..pmUser8;
|
||||||
|
TForceCaseRange = pmUser1..pmUser8;
|
||||||
|
TSubstCharRange = Subst1..Subst8;
|
||||||
|
|
||||||
|
TUserCharSets = array[TUserSetRange] of TCharSet;
|
||||||
|
TForceCase = array[TForceCaseRange] of TCaseChange;
|
||||||
|
TSubstChars = array[TSubstCharRange] of AnsiChar;
|
||||||
|
|
||||||
|
const
|
||||||
|
MaxDateLen = 40; {maximum length of date picture strings}
|
||||||
|
MaxMonthName = 15; {maximum length for month names}
|
||||||
|
MaxDayName = 15; {maximum length for day names}
|
||||||
|
|
||||||
|
const
|
||||||
|
otf_SizeData = 0; {These three constants are used in data transfers to}
|
||||||
|
otf_GetData = 1; {specify the type of transfer operation being requested}
|
||||||
|
otf_SetData = 2;
|
||||||
|
|
||||||
|
type
|
||||||
|
TEditString = array[0..MaxEditLen] of AnsiChar;
|
||||||
|
TPictureMask = array[0..MaxPicture] of AnsiChar;
|
||||||
|
|
||||||
|
{An array of flags that indicate the type of mask character at a given
|
||||||
|
location in a picture mask}
|
||||||
|
TPictureFlags = array[0..MaxEditLen+1] of Byte;
|
||||||
|
|
||||||
|
{Each entry field maintains two data structures of this type, one to store
|
||||||
|
the lower limit of a field's value, and another to store the upper limit}
|
||||||
|
PRangeType = ^TRangeType;
|
||||||
|
TRangeType = packed record
|
||||||
|
case Byte of {size}
|
||||||
|
00 : (rtChar : AnsiChar); {01}
|
||||||
|
01 : (rtByte : Byte); {01}
|
||||||
|
02 : (rtSht : ShortInt); {01}
|
||||||
|
03 : (rtInt : SmallInt); {02}
|
||||||
|
04 : (rtWord : Word); {02}
|
||||||
|
05 : (rtLong : LongInt); {04}
|
||||||
|
06 : (rtSgl : Single); {04}
|
||||||
|
07 : (rtPtr : Pointer); {04}
|
||||||
|
{$IFDEF CBuilder}
|
||||||
|
08 : (rtReal : Double); {06}
|
||||||
|
{$ELSE}
|
||||||
|
08 : (rtReal : Real); {06}
|
||||||
|
{$ENDIF CBuilder}
|
||||||
|
09 : (rtDbl : Double); {08}
|
||||||
|
{$IFDEF CBuilder}
|
||||||
|
10 : (rtComp : Double); {08}
|
||||||
|
{$ELSE}
|
||||||
|
{$IFNDEF FPC} {Delphi}
|
||||||
|
10 : (rtComp : Comp); {08}
|
||||||
|
{$ELSE} {FPC}
|
||||||
|
{$IFDEF CPU86}
|
||||||
|
10 : (rtComp : Comp); {08}
|
||||||
|
{$ELSE} {Comp is true integer with non-Intel}
|
||||||
|
10 : (rtComp : Double); {08}
|
||||||
|
{$ENDIF}
|
||||||
|
{$ENDIF}
|
||||||
|
{$ENDIF CBuilder}
|
||||||
|
11 : (rtExt : Extended); {10}
|
||||||
|
12 : (rtDate : LongInt); {04}
|
||||||
|
13 : (rtTime : LongInt); {04}
|
||||||
|
14 : (rt10 : array[1..10] of Byte); {10} {forces structure to size of 10 bytes}
|
||||||
|
end;
|
||||||
|
|
||||||
|
const
|
||||||
|
BlankRange : TRangeType = (rt10 : (0, 0, 0, 0, 0, 0, 0, 0, 0, 0));
|
||||||
|
|
||||||
|
{*** Date/Time declarations ***}
|
||||||
|
type
|
||||||
|
TOvcDate = TStDate;
|
||||||
|
TOvcTime = TStTime;
|
||||||
|
TDayType = TStDayType;
|
||||||
|
|
||||||
|
type
|
||||||
|
{states for data aware entry fields}
|
||||||
|
TDbEntryFieldStates = (esFocused, esSelected, esReset);
|
||||||
|
TDbEntryFieldState = set of TDbEntryFieldStates;
|
||||||
|
|
||||||
|
type
|
||||||
|
{Search option flags for editor and viewer}
|
||||||
|
TSearchOptions = (
|
||||||
|
soFind, {find (this option is assumed) }
|
||||||
|
soBackward, {search backwards }
|
||||||
|
soMatchCase, {don't ignore case when searching }
|
||||||
|
soGlobal, {search globally }
|
||||||
|
soReplace, {find and replace (editor only)}
|
||||||
|
soReplaceAll, {find and replace all (editor only)}
|
||||||
|
soWholeWord, {match on whole word only (editor only)}
|
||||||
|
soSelText); {search in selected text (editor only)}
|
||||||
|
TSearchOptionSet = set of TSearchOptions;
|
||||||
|
|
||||||
|
const
|
||||||
|
{maximum length of a search/replacement string}
|
||||||
|
MaxSearchString = 255;
|
||||||
|
|
||||||
|
type
|
||||||
|
{types of tabs supported in the editor}
|
||||||
|
TTabType = (ttReal, ttFixed, ttSmart);
|
||||||
|
|
||||||
|
{entry field flag for display of number field with zero value}
|
||||||
|
TZeroDisplay = (zdShow, zdHide, zdHideUntilModified);
|
||||||
|
|
||||||
|
type
|
||||||
|
{structrue of the commands stored in the command table}
|
||||||
|
POvcCmdRec = ^TOvcCmdRec;
|
||||||
|
TOvcCmdRec = packed record
|
||||||
|
case Byte of
|
||||||
|
0 : (Key1 : Byte; {first keys' virtual key code}
|
||||||
|
SS1 : Byte; {shift state of first key}
|
||||||
|
Key2 : Byte; {second keys' virtual key code, if any}
|
||||||
|
SS2 : Byte; {shift state of second key}
|
||||||
|
Cmd : Word); {command to return for this entry}
|
||||||
|
1 : (Keys : LongInt); {used for sorting, searching, and storing}
|
||||||
|
end;
|
||||||
|
|
||||||
|
const
|
||||||
|
{shift state flags for command processors}
|
||||||
|
ss_None = $00; {no shift key is pressed}
|
||||||
|
ss_Shift = $02; {the shift key is pressed}
|
||||||
|
ss_Ctrl = $04; {the control key is pressed}
|
||||||
|
ss_Alt = $08; {the alt key is pressed}
|
||||||
|
ss_Wordstar = $80; {2nd key of a twokey wordstar command: ss_Ctrl or ss_None}
|
||||||
|
{the second key of a two-key wordstar command is accepted if}
|
||||||
|
{pressed by itself of with the ctrl key. case is ignored}
|
||||||
|
|
||||||
|
const
|
||||||
|
{virtual key constants not already defined}
|
||||||
|
VK_NONE = 0;
|
||||||
|
VK_ALT = VK_MENU;
|
||||||
|
VK_A = Ord('A'); VK_B = Ord('B'); VK_C = Ord('C'); VK_D = Ord('D');
|
||||||
|
VK_E = Ord('E'); VK_F = Ord('F'); VK_G = Ord('G'); VK_H = Ord('H');
|
||||||
|
VK_I = Ord('I'); VK_J = Ord('J'); VK_K = Ord('K'); VK_L = Ord('L');
|
||||||
|
VK_M = Ord('M'); VK_N = Ord('N'); VK_O = Ord('O'); VK_P = Ord('P');
|
||||||
|
VK_Q = Ord('Q'); VK_R = Ord('R'); VK_S = Ord('S'); VK_T = Ord('T');
|
||||||
|
VK_U = Ord('U'); VK_V = Ord('V'); VK_W = Ord('W'); VK_X = Ord('X');
|
||||||
|
VK_Y = Ord('Y'); VK_Z = Ord('Z'); VK_0 = Ord('0'); VK_1 = Ord('1');
|
||||||
|
VK_2 = Ord('2'); VK_3 = Ord('3'); VK_4 = Ord('4'); VK_5 = Ord('5');
|
||||||
|
VK_6 = Ord('6'); VK_7 = Ord('7'); VK_8 = Ord('8'); VK_9 = Ord('9');
|
||||||
|
|
||||||
|
var
|
||||||
|
AlphaCharSet : TCharSet;
|
||||||
|
|
||||||
|
const
|
||||||
|
IntegerCharSet: TCharSet = ['0'..'9', ' '];
|
||||||
|
RealCharSet : TCharSet = ['0'..'9', ' ', '-', '.'];
|
||||||
|
|
||||||
|
const
|
||||||
|
{Picture flag values for elements in a TPictureFlags array}
|
||||||
|
pflagLiteral = 0; {Corresponding char in the mask is a literal}
|
||||||
|
pflagFormat = 1; {Corresponding char in the mask is a formatting character}
|
||||||
|
pflagSemiLit = 2; {Corresponding char in the mask is a semi-literal character}
|
||||||
|
|
||||||
|
const
|
||||||
|
{------------------- Windows messages -----------------------}
|
||||||
|
{Not a message code. Value of the first of the message codes used}
|
||||||
|
OM_FIRST = $7F00; {***}
|
||||||
|
|
||||||
|
{entry field error}
|
||||||
|
OM_REPORTERROR = OM_FIRST + 0;
|
||||||
|
{messages for/from viewer/editor controls}
|
||||||
|
OM_SETFOCUS = OM_FIRST + 1;
|
||||||
|
{sent by an entry field to the controller to request return of the
|
||||||
|
focus. lParam is pointer of the object to return the focus to}
|
||||||
|
OM_SHOWSTATUS = OM_FIRST + 2;
|
||||||
|
{sent by a viewer or editor control to itself when the caret moves, or
|
||||||
|
when text is inserted or deleted. wParam is the current column (an
|
||||||
|
effective column number), and lParam is the current line}
|
||||||
|
OM_GETDATASIZE = OM_FIRST + 3;
|
||||||
|
{sent to an entry field to obtain its data size}
|
||||||
|
OM_RECREATEWND = OM_FIRST + 5;
|
||||||
|
{sent to force a call to RecreateWnd}
|
||||||
|
OM_PREEDIT = OM_FIRST + 6;
|
||||||
|
{sent to preform pre-edit notification for entry fields}
|
||||||
|
OM_POSTEDIT = OM_FIRST + 7;
|
||||||
|
{sent to preform post-edit notification for entry fields}
|
||||||
|
OM_AFTERENTER = OM_FIRST + 8;
|
||||||
|
{sent to preform after-enter notification}
|
||||||
|
OM_AFTEREXIT = OM_FIRST + 9;
|
||||||
|
{sent to preform after-exit notification}
|
||||||
|
OM_DELAYNOTIFY = OM_FIRST + 10;
|
||||||
|
{sent to preform delayed notification}
|
||||||
|
OM_POSITIONLABEL = OM_FIRST + 11;
|
||||||
|
{sent to cause the label to be repositioned}
|
||||||
|
OM_RECORDLABELPOSITION = OM_FIRST + 12;
|
||||||
|
{sent to cause the current position of the label to be recorded}
|
||||||
|
OM_ASSIGNLABEL = OM_FIRST + 13;
|
||||||
|
{sent to assign a albel to a control}
|
||||||
|
OM_FONTUPDATEPREVIEW = OM_FIRST + 14;
|
||||||
|
{sent to postpone the font change of the preview control}
|
||||||
|
OM_DESTROYHOOK = OM_FIRST + 15;
|
||||||
|
{send to cause the window hook to be destroyed}
|
||||||
|
OM_PROPCHANGE = OM_FIRST + 16;
|
||||||
|
{sent by a collection to its property editor when a property is changed}
|
||||||
|
OM_ISATTACHED = OM_FIRST + 17;
|
||||||
|
{sent to other controls to see if they are attached. Used by attached
|
||||||
|
button components and components that use an internal validator.
|
||||||
|
Result is LongInt(Self) if true}
|
||||||
|
OM_VALIDATE = OM_FIRST + 18;
|
||||||
|
{Sent to the FlexEdit as a call for it to Validate Itself}
|
||||||
|
|
||||||
|
{message crackers for the above Orpheus messages}
|
||||||
|
|
||||||
|
type
|
||||||
|
TOMReportError = packed record
|
||||||
|
Msg : Cardinal;
|
||||||
|
Error : Word;
|
||||||
|
Unused : Word;
|
||||||
|
lParam : LongInt;
|
||||||
|
Result : LongInt;
|
||||||
|
end;
|
||||||
|
|
||||||
|
TOMSetFocus = packed record
|
||||||
|
Msg : Cardinal;
|
||||||
|
wParam : Integer;
|
||||||
|
Control: TWinControl;
|
||||||
|
Result : LongInt;
|
||||||
|
end;
|
||||||
|
|
||||||
|
TOMShowStatus = packed record
|
||||||
|
Msg : Cardinal;
|
||||||
|
Column : Integer;
|
||||||
|
Line : LongInt;
|
||||||
|
Result : LongInt;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
type
|
||||||
|
TShowStatusEvent =
|
||||||
|
procedure(Sender : TObject; LineNum : LongInt; ColNum : Integer)
|
||||||
|
of object;
|
||||||
|
{-event to notify of a viewer or editor caret position change}
|
||||||
|
|
||||||
|
TTopLineChangedEvent =
|
||||||
|
procedure(Sender : TObject; Line : LongInt)
|
||||||
|
of object;
|
||||||
|
{-event to notify when the top line changes for the editor or viewer}
|
||||||
|
|
||||||
|
const
|
||||||
|
{*** Error message codes ***}
|
||||||
|
oeFirst = 256;
|
||||||
|
|
||||||
|
oeRangeError = oeFirst + 0;
|
||||||
|
{This error occurs when a user enters a value that is not within the
|
||||||
|
accepted range of values for the field}
|
||||||
|
oeInvalidNumber = oeFirst + 1;
|
||||||
|
{This error is reported if the user enters a string that does not represent
|
||||||
|
a number in a field that should contain a numeric value}
|
||||||
|
oeRequiredField = oeFirst + 2;
|
||||||
|
{This error occurs when the user leaves blank a field that is marked as
|
||||||
|
required}
|
||||||
|
oeInvalidDate = oeFirst + 3;
|
||||||
|
{This error occurs when the user enters a value in a date field that does
|
||||||
|
not represent a valid date}
|
||||||
|
oeInvalidTime = oeFirst + 4;
|
||||||
|
{This error occurs when the user enters a value in a time field that does
|
||||||
|
not represent a valid time of day}
|
||||||
|
oeBlanksInField = oeFirst + 5;
|
||||||
|
{This error is reported only by the validation helper routines
|
||||||
|
ValidateNoBlanks and ValidateSubfields. It indicates that a blank was left
|
||||||
|
in a field or subfield in which no blanks are allowed}
|
||||||
|
oePartialEntry = oeFirst + 6;
|
||||||
|
{This error is reported only by the validation helper routines
|
||||||
|
ValidateNotPartial and ValidateSubfields in OODEWCC. It indicates that a
|
||||||
|
partial entry was given in a field or subfield in which the field/subfield
|
||||||
|
must be either entirely empty or entirely full}
|
||||||
|
oeOutOfMemory = oeFirst + 7;
|
||||||
|
{This error is reported by a viewer or editor control when there is
|
||||||
|
insufficient memory to perform the requested operation. A viewer control
|
||||||
|
reports this error only when copying selected text to the clipboard}
|
||||||
|
oeRegionSize = oeFirst + 8;
|
||||||
|
{This error is reported by an editor control when the user asks to
|
||||||
|
copy selected text to the clipboard, and the selected region exceeds
|
||||||
|
64K in size}
|
||||||
|
oeTooManyParas = oeFirst + 9;
|
||||||
|
{This error is reported by an editor control when the limit on the number
|
||||||
|
of paragraphs is reached, and the requested operation would cause it to be
|
||||||
|
exceeded}
|
||||||
|
oeCannotJoin = oeFirst + 10;
|
||||||
|
{This error is reported by an editor control when the user attempts to join
|
||||||
|
two paragraphs that cannot be joined. Typically this occurs when joining
|
||||||
|
the two paragraphs would cause the new paragraph to exceed its size limit}
|
||||||
|
oeTooManyBytes = oeFirst + 11;
|
||||||
|
{This error is reported by an editor control when the limit on the total
|
||||||
|
number of bytes is reached, and the requested operation would cause it to
|
||||||
|
be exceeded}
|
||||||
|
oeParaTooLong = oeFirst + 12;
|
||||||
|
{This error is reported by an editor control when the limit on the length
|
||||||
|
of an individual paragraph is reached, and the requested operation would
|
||||||
|
cause it to be exceeded}
|
||||||
|
oeCustomError = 32768;
|
||||||
|
{the first error code reserved for user applications. All }
|
||||||
|
{error values less than this value are reserved for use by}
|
||||||
|
{Orpheus}
|
||||||
|
|
||||||
|
{*** Field class and type constant id's ***}
|
||||||
|
|
||||||
|
const
|
||||||
|
{Field class codes}
|
||||||
|
fcSimple = 0;
|
||||||
|
fcPicture = 1;
|
||||||
|
fcNumeric = 2;
|
||||||
|
|
||||||
|
{Field class divisor}
|
||||||
|
fcpDivisor = $40;
|
||||||
|
|
||||||
|
{Field class prefixes}
|
||||||
|
fcpSimple = fcpDivisor*fcSimple;
|
||||||
|
fcpPicture = fcpDivisor*fcPicture;
|
||||||
|
fcpNumeric = fcpDivisor*fcNumeric;
|
||||||
|
|
||||||
|
{Field type IDs for simple fields}
|
||||||
|
fidSimpleString = fcpSimple+fsubString;
|
||||||
|
fidSimpleChar = fcpSimple+fsubChar;
|
||||||
|
fidSimpleBoolean = fcpSimple+fsubBoolean;
|
||||||
|
fidSimpleYesNo = fcpSimple+fsubYesNo;
|
||||||
|
fidSimpleLongInt = fcpSimple+fsubLongInt;
|
||||||
|
fidSimpleWord = fcpSimple+fsubWord;
|
||||||
|
fidSimpleInteger = fcpSimple+fsubInteger;
|
||||||
|
fidSimpleByte = fcpSimple+fsubByte;
|
||||||
|
fidSimpleShortInt = fcpSimple+fsubShortInt;
|
||||||
|
fidSimpleReal = fcpSimple+fsubReal;
|
||||||
|
fidSimpleExtended = fcpSimple+fsubExtended;
|
||||||
|
fidSimpleDouble = fcpSimple+fsubDouble;
|
||||||
|
fidSimpleSingle = fcpSimple+fsubSingle;
|
||||||
|
fidSimpleComp = fcpSimple+fsubComp;
|
||||||
|
|
||||||
|
{Field type IDs for picture fields}
|
||||||
|
fidPictureString = fcpPicture+fsubString;
|
||||||
|
fidPictureChar = fcpPicture+fsubChar;
|
||||||
|
fidPictureBoolean = fcpPicture+fsubBoolean;
|
||||||
|
fidPictureYesNo = fcpPicture+fsubYesNo;
|
||||||
|
fidPictureLongInt = fcpPicture+fsubLongInt;
|
||||||
|
fidPictureWord = fcpPicture+fsubWord;
|
||||||
|
fidPictureInteger = fcpPicture+fsubInteger;
|
||||||
|
fidPictureByte = fcpPicture+fsubByte;
|
||||||
|
fidPictureShortInt = fcpPicture+fsubShortInt;
|
||||||
|
fidPictureReal = fcpPicture+fsubReal;
|
||||||
|
fidPictureExtended = fcpPicture+fsubExtended;
|
||||||
|
fidPictureDouble = fcpPicture+fsubDouble;
|
||||||
|
fidPictureSingle = fcpPicture+fsubSingle;
|
||||||
|
fidPictureComp = fcpPicture+fsubComp;
|
||||||
|
fidPictureDate = fcpPicture+fsubDate;
|
||||||
|
fidPictureTime = fcpPicture+fsubTime;
|
||||||
|
|
||||||
|
{Field type IDs for numeric fields}
|
||||||
|
fidNumericLongInt = fcpNumeric+fsubLongInt;
|
||||||
|
fidNumericWord = fcpNumeric+fsubWord;
|
||||||
|
fidNumericInteger = fcpNumeric+fsubInteger;
|
||||||
|
fidNumericByte = fcpNumeric+fsubByte;
|
||||||
|
fidNumericShortInt = fcpNumeric+fsubShortInt;
|
||||||
|
fidNumericReal = fcpNumeric+fsubReal;
|
||||||
|
fidNumericExtended = fcpNumeric+fsubExtended;
|
||||||
|
fidNumericDouble = fcpNumeric+fsubDouble;
|
||||||
|
fidNumericSingle = fcpNumeric+fsubSingle;
|
||||||
|
fidNumericComp = fcpNumeric+fsubComp;
|
||||||
|
|
||||||
|
|
||||||
|
function GetOrphStr(Index : Word) : string;
|
||||||
|
{-return a string from our RCDATA string resource}
|
||||||
|
|
||||||
|
implementation
|
||||||
|
|
||||||
|
function GetOrphStr(Index : Word) : string;
|
||||||
|
begin
|
||||||
|
Result := ResourceStrByNumber(Index);
|
||||||
|
if Result = '' then
|
||||||
|
Result := 'Unknown';
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
procedure InitAlphaCharSet;
|
||||||
|
{-Initialize AlphaOnlySet}
|
||||||
|
var
|
||||||
|
C : AnsiChar;
|
||||||
|
begin
|
||||||
|
AlphaCharSet := ['A'..'Z', 'a'..'z', ' ', '-', '.', ','];
|
||||||
|
for C := #128 to #255 do
|
||||||
|
{ask windows what other characters are considered alphas}
|
||||||
|
if IsCharAlpha(C) then
|
||||||
|
AlphaCharSet := AlphaCharSet + [C];
|
||||||
|
end;
|
||||||
|
|
||||||
|
initialization
|
||||||
|
InitAlphaCharSet;
|
||||||
|
|
||||||
|
end.
|
996
components/orpheus/ovcdate.pas
Normal file
@ -0,0 +1,996 @@
|
|||||||
|
{*********************************************************}
|
||||||
|
{* OVCDATE.PAS 4.06 *}
|
||||||
|
{*********************************************************}
|
||||||
|
|
||||||
|
{* ***** BEGIN LICENSE BLOCK ***** *}
|
||||||
|
{* Version: MPL 1.1 *}
|
||||||
|
{* *}
|
||||||
|
{* The contents of this file are subject to the Mozilla Public License *}
|
||||||
|
{* Version 1.1 (the "License"); you may not use this file except in *}
|
||||||
|
{* compliance with the License. You may obtain a copy of the License at *}
|
||||||
|
{* http://www.mozilla.org/MPL/ *}
|
||||||
|
{* *}
|
||||||
|
{* Software distributed under the License is distributed on an "AS IS" basis, *}
|
||||||
|
{* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License *}
|
||||||
|
{* for the specific language governing rights and limitations under the *}
|
||||||
|
{* License. *}
|
||||||
|
{* *}
|
||||||
|
{* The Original Code is TurboPower Orpheus *}
|
||||||
|
{* *}
|
||||||
|
{* The Initial Developer of the Original Code is TurboPower Software *}
|
||||||
|
{* *}
|
||||||
|
{* Portions created by TurboPower Software Inc. are Copyright (C)1995-2002 *}
|
||||||
|
{* TurboPower Software Inc. All Rights Reserved. *}
|
||||||
|
{* *}
|
||||||
|
{* Contributor(s): *}
|
||||||
|
{* *}
|
||||||
|
{* ***** END LICENSE BLOCK ***** *}
|
||||||
|
|
||||||
|
{$I OVC.INC}
|
||||||
|
|
||||||
|
{$IFDEF VERSION7}
|
||||||
|
{$IFNDEF FPC}
|
||||||
|
{$WARN UNSAFE_CODE OFF}
|
||||||
|
{$WARN UNSAFE_TYPE OFF}
|
||||||
|
{$WARN UNSAFE_CAST OFF}
|
||||||
|
{$ENDIF}
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
{For BCB 3.0 package support.}
|
||||||
|
{$IFDEF VER110}
|
||||||
|
{$ObjExportAll On}
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
|
||||||
|
{---Global compiler defines for Delphi 2.0---}
|
||||||
|
{$A+} {Word Align Data}
|
||||||
|
{$H+} {Huge string support}
|
||||||
|
{$Q-} {Overflow check}
|
||||||
|
{$R-} {Range check}
|
||||||
|
{$S-} {Stack check}
|
||||||
|
{$T-} {Typed @ check}
|
||||||
|
{$V-} {Var strings}
|
||||||
|
|
||||||
|
unit ovcdate; {formerly StDate}
|
||||||
|
{-Date and time manipulation}
|
||||||
|
|
||||||
|
interface
|
||||||
|
|
||||||
|
uses
|
||||||
|
{$IFNDEF LCL} Windows, {$ELSE} LclIntf, {$ENDIF} SysUtils;
|
||||||
|
|
||||||
|
type
|
||||||
|
TStDate = LongInt;
|
||||||
|
{In STDATE, dates are stored in long integer format as the number of days
|
||||||
|
since January 1, 1600}
|
||||||
|
|
||||||
|
TDateArray = array[0..(MaxLongInt div SizeOf(TStDate))-1] of TStDate;
|
||||||
|
{Type for StDate open array}
|
||||||
|
|
||||||
|
TStDayType = (Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday);
|
||||||
|
{An enumerated type used when representing a day of the week}
|
||||||
|
|
||||||
|
TStBondDateType = (bdtActual, bdt30E360, bdt30360, bdt30360psa);
|
||||||
|
{An enumerated type used for calculating bond date differences}
|
||||||
|
|
||||||
|
TStTime = LongInt;
|
||||||
|
{STDATE handles time in a manner similar to dates, representing a given
|
||||||
|
time of day as the number of seconds since midnight}
|
||||||
|
|
||||||
|
TStDateTimeRec =
|
||||||
|
record
|
||||||
|
{This record type simply combines the two basic date types defined by
|
||||||
|
STDATE, Date and Time}
|
||||||
|
D : TStDate;
|
||||||
|
T : TStTime;
|
||||||
|
end;
|
||||||
|
|
||||||
|
const
|
||||||
|
MinYear = 1600; {Minimum valid year for a date variable}
|
||||||
|
MaxYear = 3999; {Maximum valid year for a date variable}
|
||||||
|
Mindate = $00000000; {Minimum valid date for a date variable - 01/01/1600}
|
||||||
|
Maxdate = $000D6025; {Maximum valid date for a date variable - 12/31/3999}
|
||||||
|
Date1900 = $0001AC05; {This constant contains the Julian date for 01/01/1900}
|
||||||
|
Date1980 = $00021E28; {This constant contains the Julian date for 01/01/1980}
|
||||||
|
Date2000 = $00023AB1; {This constant contains the Julian date for 01/01/2000}
|
||||||
|
{This value is used to represent an invalid date, such as 12/32/1992}
|
||||||
|
BadDate = LongInt($FFFFFFFF);
|
||||||
|
|
||||||
|
DeltaJD = $00232DA8; {Days between 1/1/-4173 and 1/1/1600}
|
||||||
|
|
||||||
|
MinTime = 0; {Minimum valid time for a time variable - 00:00:00 am}
|
||||||
|
MaxTime = 86399; {Maximum valid time for a time variable - 23:59:59 pm}
|
||||||
|
{This value is used to represent an invalid time of day, such as 12:61:00}
|
||||||
|
BadTime = LongInt($FFFFFFFF);
|
||||||
|
|
||||||
|
SecondsInDay = 86400; {Number of seconds in a day}
|
||||||
|
SecondsInHour = 3600; {Number of seconds in an hour}
|
||||||
|
SecondsInMinute = 60; {Number of seconds in a minute}
|
||||||
|
HoursInDay = 24; {Number of hours in a day}
|
||||||
|
MinutesInHour = 60; {Number of minutes in an hour}
|
||||||
|
MinutesInDay = 1440; {Number of minutes in a day}
|
||||||
|
|
||||||
|
var
|
||||||
|
DefaultYear : Integer; {default year--used by DateStringToDMY}
|
||||||
|
DefaultMonth : ShortInt; {default month}
|
||||||
|
|
||||||
|
{-------julian date routines---------------}
|
||||||
|
|
||||||
|
function CurrentDate : TStDate;
|
||||||
|
{-returns today's date as a Julian date}
|
||||||
|
|
||||||
|
function ValidDate(Day, Month, Year, Epoch : Integer) : Boolean;
|
||||||
|
{-Verify that day, month, year is a valid date}
|
||||||
|
|
||||||
|
function DMYtoStDate(Day, Month, Year, Epoch : Integer) : TStDate;
|
||||||
|
{-Convert from day, month, year to a Julian date}
|
||||||
|
|
||||||
|
procedure StDateToDMY(Julian : TStDate; var Day, Month, Year : Integer);
|
||||||
|
{-Convert from a Julian date to day, month, year}
|
||||||
|
|
||||||
|
function IncDate(Julian : TStDate; Days, Months, Years : Integer) : TStDate;
|
||||||
|
{-Add (or subtract) the number of days, months, and years to a date}
|
||||||
|
|
||||||
|
function IncDateTrunc(Julian : TStDate; Months, Years : Integer) : TStDate;
|
||||||
|
{-Add (or subtract) the specified number of months and years to a date}
|
||||||
|
|
||||||
|
procedure DateDiff(Date1, Date2 : TStDate;
|
||||||
|
var Days, Months, Years : Integer);
|
||||||
|
{-Return the difference in days, months, and years between two valid Julian
|
||||||
|
dates}
|
||||||
|
|
||||||
|
function BondDateDiff(Date1, Date2 : TStDate; DayBasis : TStBondDateType) : TStDate;
|
||||||
|
{-Return the difference in days between two valid Julian
|
||||||
|
dates using a specific financial basis}
|
||||||
|
|
||||||
|
function WeekOfYear(Julian : TStDate) : Byte;
|
||||||
|
{-Returns the week number of the year given the Julian Date}
|
||||||
|
|
||||||
|
function AstJulianDate(Julian : TStDate) : Double;
|
||||||
|
{-Returns the Astronomical Julian Date from a TStDate}
|
||||||
|
|
||||||
|
function AstJulianDatetoStDate(AstJulian : Double; Truncate : Boolean) : TStDate;
|
||||||
|
{-Returns a TStDate from an Astronomical Julian Date.
|
||||||
|
Truncate TRUE Converts to appropriate 0 hours then truncates
|
||||||
|
FALSE Converts to appropriate 0 hours, then rounds to
|
||||||
|
nearest;}
|
||||||
|
|
||||||
|
function AstJulianDatePrim(Year, Month, Date : Integer; UT : TStTime) : Double;
|
||||||
|
{-Returns an Astronomical Julian Date for any year, even those outside
|
||||||
|
MinYear..MaxYear}
|
||||||
|
|
||||||
|
function DayOfWeek(Julian : TStDate) : TStDayType;
|
||||||
|
{-Return the day of the week for a Julian date}
|
||||||
|
|
||||||
|
function DayOfWeekDMY(Day, Month, Year, Epoch : Integer) : TStDayType;
|
||||||
|
{-Return the day of the week for the day, month, year}
|
||||||
|
|
||||||
|
function IsLeapYear(Year : Integer) : Boolean;
|
||||||
|
{-Return True if Year is a leap year}
|
||||||
|
|
||||||
|
function DaysInMonth(Month : Integer; Year, Epoch : Integer) : Integer;
|
||||||
|
{-Return the number of days in the specified month of a given year}
|
||||||
|
|
||||||
|
function ResolveEpoch(Year, Epoch : Integer) : Integer;
|
||||||
|
{-Convert 2 digit year to 4 digit year according to Epoch}
|
||||||
|
|
||||||
|
|
||||||
|
{-------time routines---------------}
|
||||||
|
|
||||||
|
function ValidTime(Hours, Minutes, Seconds : Integer) : Boolean;
|
||||||
|
{-Return True if Hours:Minutes:Seconds is a valid time}
|
||||||
|
|
||||||
|
procedure StTimeToHMS(T : TStTime;
|
||||||
|
var Hours, Minutes, Seconds : Byte);
|
||||||
|
{-Convert a time variable to hours, minutes, seconds}
|
||||||
|
|
||||||
|
function HMStoStTime(Hours, Minutes, Seconds : Byte) : TStTime;
|
||||||
|
{-Convert hours, minutes, seconds to a time variable}
|
||||||
|
|
||||||
|
function CurrentTime : TStTime;
|
||||||
|
{-Return the current time in seconds since midnight}
|
||||||
|
|
||||||
|
procedure TimeDiff(Time1, Time2 : TStTime;
|
||||||
|
var Hours, Minutes, Seconds : Byte);
|
||||||
|
{-Return the difference in hours, minutes, and seconds between two times}
|
||||||
|
|
||||||
|
function IncTime(T : TStTime; Hours, Minutes, Seconds : Byte) : TStTime;
|
||||||
|
{-Add the specified hours, minutes, and seconds to a given time of day}
|
||||||
|
|
||||||
|
function DecTime(T : TStTime; Hours, Minutes, Seconds : Byte) : TStTime;
|
||||||
|
{-Subtract the specified hours, minutes, and seconds from a given time of day}
|
||||||
|
|
||||||
|
function RoundToNearestHour(T : TStTime; Truncate : Boolean) : TStTime;
|
||||||
|
{-Given a time, round it to the nearest hour, or truncate minutes and
|
||||||
|
seconds}
|
||||||
|
|
||||||
|
function RoundToNearestMinute(const T : TStTime; Truncate : Boolean) : TStTime;
|
||||||
|
{-Given a time, round it to the nearest minute, or truncate seconds}
|
||||||
|
|
||||||
|
{-------- routines for DateTimeRec records ---------}
|
||||||
|
|
||||||
|
procedure DateTimeDiff(DT1 : TStDateTimeRec; var DT2 : TStDateTimeRec;
|
||||||
|
var Days : LongInt; var Secs : LongInt);
|
||||||
|
{-Return the difference in days and seconds between two points in time}
|
||||||
|
|
||||||
|
procedure IncDateTime(DT1 : TStDateTimeRec; var DT2 : TStDateTimeRec;
|
||||||
|
Days : Integer; Secs : LongInt);
|
||||||
|
{-Increment (or decrement) a date and time by the specified number of days
|
||||||
|
and seconds}
|
||||||
|
|
||||||
|
function DateTimeToStDate(DT : TDateTime) : TStDate;
|
||||||
|
{-Convert Delphi TDateTime to TStDate}
|
||||||
|
|
||||||
|
function DateTimeToStTime(DT : TDateTime) : TStTime;
|
||||||
|
{-Convert Delphi TDateTime to TStTime}
|
||||||
|
|
||||||
|
function StDateToDateTime(D : TStDate) : TDateTime;
|
||||||
|
{-Convert TStDate to TDateTime}
|
||||||
|
|
||||||
|
function StTimeToDateTime(T : TStTime) : TDateTime;
|
||||||
|
{-Convert TStTime to TDateTime}
|
||||||
|
|
||||||
|
function Convert2ByteDate(TwoByteDate : Word) : TStDate;
|
||||||
|
{-Convert an Object Professional two byte date into a SysTools date}
|
||||||
|
|
||||||
|
function Convert4ByteDate(FourByteDate : TStDate) : Word;
|
||||||
|
{-Convert a SysTools date into an Object Professional two byte date}
|
||||||
|
|
||||||
|
|
||||||
|
implementation
|
||||||
|
|
||||||
|
const
|
||||||
|
First2Months = 59; {1600 was a leap year}
|
||||||
|
FirstDayOfWeek = Saturday; {01/01/1600 was a Saturday}
|
||||||
|
DateLen = 40; {maximum length of Picture strings}
|
||||||
|
MaxMonthName = 15;
|
||||||
|
MaxDayName = 15;
|
||||||
|
|
||||||
|
|
||||||
|
type
|
||||||
|
{ DateString = string[DateLen];}
|
||||||
|
SString = string[255];
|
||||||
|
|
||||||
|
function IsLeapYear(Year : Integer) : Boolean;
|
||||||
|
{-Return True if Year is a leap year}
|
||||||
|
begin
|
||||||
|
Result := (Year mod 4 = 0) and (Year mod 4000 <> 0) and
|
||||||
|
((Year mod 100 <> 0) or (Year mod 400 = 0));
|
||||||
|
end;
|
||||||
|
|
||||||
|
function IsLastDayofMonth(Day, Month, Year : Integer) : Boolean;
|
||||||
|
{-Return True if date is the last day in month}
|
||||||
|
var
|
||||||
|
Epoch : Integer;
|
||||||
|
begin
|
||||||
|
Epoch := (Year div 100) * 100;
|
||||||
|
if ValidDate(Day + 1, Month, Year, Epoch) then
|
||||||
|
Result := false
|
||||||
|
else
|
||||||
|
Result := true;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function IsLastDayofFeb(Date : TStDate) : Boolean;
|
||||||
|
{-Return True if date is the last day in February}
|
||||||
|
var
|
||||||
|
Day, Month, Year : Integer;
|
||||||
|
begin
|
||||||
|
StDateToDMY(Date, Day, Month, Year);
|
||||||
|
if (Month = 2) and IsLastDayOfMonth(Day, Month, Year) then
|
||||||
|
Result := true
|
||||||
|
else
|
||||||
|
Result := false;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
{$IFDEF NoAsm}
|
||||||
|
procedure ExchangeLongInts(var I, J : LongInt);
|
||||||
|
var
|
||||||
|
Temp : LongInt;
|
||||||
|
begin
|
||||||
|
Temp := I;
|
||||||
|
I := J;
|
||||||
|
J := Temp;
|
||||||
|
end;
|
||||||
|
|
||||||
|
// ExchangeStructs not needed - see the one place where called below.
|
||||||
|
|
||||||
|
{$ELSE}
|
||||||
|
procedure ExchangeLongInts(var I, J : LongInt);
|
||||||
|
register;
|
||||||
|
asm
|
||||||
|
mov ecx, [eax]
|
||||||
|
push ecx
|
||||||
|
mov ecx, [edx]
|
||||||
|
mov [eax], ecx
|
||||||
|
pop ecx
|
||||||
|
mov [edx], ecx
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure ExchangeStructs(var I, J; Size : Cardinal);
|
||||||
|
register;
|
||||||
|
asm
|
||||||
|
push edi
|
||||||
|
push ebx
|
||||||
|
push ecx
|
||||||
|
shr ecx, 2
|
||||||
|
jz @@LessThanFour
|
||||||
|
|
||||||
|
@@AgainDWords:
|
||||||
|
mov ebx, [eax]
|
||||||
|
mov edi, [edx]
|
||||||
|
mov [edx], ebx
|
||||||
|
mov [eax], edi
|
||||||
|
add eax, 4
|
||||||
|
add edx, 4
|
||||||
|
dec ecx
|
||||||
|
jnz @@AgainDWords
|
||||||
|
|
||||||
|
@@LessThanFour:
|
||||||
|
pop ecx
|
||||||
|
and ecx, $3
|
||||||
|
jz @@Done
|
||||||
|
mov bl, [eax]
|
||||||
|
mov bh, [edx]
|
||||||
|
mov [edx], bl
|
||||||
|
mov [eax], bh
|
||||||
|
inc eax
|
||||||
|
inc edx
|
||||||
|
dec ecx
|
||||||
|
jz @@Done
|
||||||
|
|
||||||
|
mov bl, [eax]
|
||||||
|
mov bh, [edx]
|
||||||
|
mov [edx], bl
|
||||||
|
mov [eax], bh
|
||||||
|
inc eax
|
||||||
|
inc edx
|
||||||
|
dec ecx
|
||||||
|
jz @@Done
|
||||||
|
|
||||||
|
mov bl, [eax]
|
||||||
|
mov bh, [edx]
|
||||||
|
mov [edx], bl
|
||||||
|
mov [eax], bh
|
||||||
|
|
||||||
|
@@Done:
|
||||||
|
pop ebx
|
||||||
|
pop edi
|
||||||
|
end;
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
function ResolveEpoch(Year, Epoch : Integer) : Integer;
|
||||||
|
{-Convert 2-digit year to 4-digit year according to Epoch}
|
||||||
|
var
|
||||||
|
EpochYear,
|
||||||
|
EpochCent : Integer;
|
||||||
|
begin
|
||||||
|
if Word(Year) < 100 then begin
|
||||||
|
EpochYear := Epoch mod 100;
|
||||||
|
EpochCent := (Epoch div 100) * 100;
|
||||||
|
if (Year < EpochYear) then
|
||||||
|
Inc(Year,EpochCent+100)
|
||||||
|
else
|
||||||
|
Inc(Year,EpochCent);
|
||||||
|
end;
|
||||||
|
Result := Year;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function CurrentDate : TStDate;
|
||||||
|
{-Returns today's date as a julian}
|
||||||
|
var
|
||||||
|
Year, Month, Date : Word;
|
||||||
|
begin
|
||||||
|
DecodeDate(Now,Year,Month,Date);
|
||||||
|
Result := DMYToStDate(Date,Month,Year,0);
|
||||||
|
end;
|
||||||
|
|
||||||
|
function DaysInMonth(Month : integer; Year, Epoch : Integer) : Integer;
|
||||||
|
{-Return the number of days in the specified month of a given year}
|
||||||
|
begin
|
||||||
|
Year := ResolveEpoch(Year, Epoch);
|
||||||
|
|
||||||
|
if (Year < MinYear) OR (Year > MaxYear) then
|
||||||
|
begin
|
||||||
|
Result := 0;
|
||||||
|
Exit;
|
||||||
|
end;
|
||||||
|
|
||||||
|
case Month of
|
||||||
|
1, 3, 5, 7, 8, 10, 12 :
|
||||||
|
Result := 31;
|
||||||
|
4, 6, 9, 11 :
|
||||||
|
Result := 30;
|
||||||
|
2 :
|
||||||
|
Result := 28+Ord(IsLeapYear(Year));
|
||||||
|
else
|
||||||
|
Result := 0;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function ValidDate(Day, Month, Year, Epoch : Integer) : Boolean;
|
||||||
|
{-Verify that day, month, year is a valid date}
|
||||||
|
begin
|
||||||
|
Year := ResolveEpoch(Year, Epoch);
|
||||||
|
|
||||||
|
if (Day < 1) or (Year < MinYear) or (Year > MaxYear) then
|
||||||
|
Result := False
|
||||||
|
else case Month of
|
||||||
|
1..12 :
|
||||||
|
Result := Day <= DaysInMonth(Month, Year, Epoch);
|
||||||
|
else
|
||||||
|
Result := False;
|
||||||
|
end
|
||||||
|
end;
|
||||||
|
|
||||||
|
function DMYtoStDate(Day, Month, Year, Epoch : Integer) : TStDate;
|
||||||
|
{-Convert from day, month, year to a julian date}
|
||||||
|
begin
|
||||||
|
Year := ResolveEpoch(Year, Epoch);
|
||||||
|
|
||||||
|
if not ValidDate(Day, Month, Year, Epoch) then
|
||||||
|
Result := BadDate
|
||||||
|
else if (Year = MinYear) and (Month < 3) then
|
||||||
|
if Month = 1 then
|
||||||
|
Result := Pred(Day)
|
||||||
|
else
|
||||||
|
Result := Day+30
|
||||||
|
else begin
|
||||||
|
if Month > 2 then
|
||||||
|
Dec(Month, 3)
|
||||||
|
else begin
|
||||||
|
Inc(Month, 9);
|
||||||
|
Dec(Year);
|
||||||
|
end;
|
||||||
|
Dec(Year, MinYear);
|
||||||
|
Result :=
|
||||||
|
((LongInt(Year div 100)*146097) div 4)+
|
||||||
|
((LongInt(Year mod 100)*1461) div 4)+
|
||||||
|
(((153*Month)+2) div 5)+Day+First2Months;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function WeekOfYear(Julian : TStDate) : Byte;
|
||||||
|
{-Returns the week number of the year given the Julian Date}
|
||||||
|
var
|
||||||
|
Day, Month, Year : Integer;
|
||||||
|
FirstJulian : TStDate;
|
||||||
|
begin
|
||||||
|
if (Julian < MinDate) or (Julian > MaxDate) then
|
||||||
|
begin
|
||||||
|
Result := 0;
|
||||||
|
Exit;
|
||||||
|
end;
|
||||||
|
|
||||||
|
Julian := Julian + 3 - ((6 + Ord(DayOfWeek(Julian))) mod 7);
|
||||||
|
StDateToDMY(Julian,Day,Month,Year);
|
||||||
|
FirstJulian := DMYToStDate(1,1,Year,0);
|
||||||
|
Result := 1 + (Julian - FirstJulian) div 7;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function AstJulianDate(Julian : TStDate) : Double;
|
||||||
|
{-Returns the Astronomical Julian Date from a TStDate}
|
||||||
|
begin
|
||||||
|
{Subtract 0.5d since Astronomical JD starts at noon
|
||||||
|
while TStDate (with implied .0) starts at midnight}
|
||||||
|
Result := Julian - 0.5 + DeltaJD;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
function AstJulianDatePrim(Year, Month, Date : Integer; UT : TStTime) : Double;
|
||||||
|
var
|
||||||
|
A, B : integer;
|
||||||
|
LY,
|
||||||
|
GC : Boolean;
|
||||||
|
|
||||||
|
begin
|
||||||
|
Result := -MaxLongInt;
|
||||||
|
if (not (Month in [1..12])) or (Date < 1) then
|
||||||
|
Exit
|
||||||
|
else if (Month in [1, 3, 5, 7, 8, 10, 12]) and (Date > 31) then
|
||||||
|
Exit
|
||||||
|
else if (Month in [4, 6, 9, 11]) and (Date > 30) then
|
||||||
|
Exit
|
||||||
|
else if (Month = 2) then begin
|
||||||
|
LY := IsLeapYear(Year);
|
||||||
|
if ((LY) and (Date > 29)) or (not (LY) and (Date > 28)) then
|
||||||
|
Exit;
|
||||||
|
end else if ((UT < 0) or (UT >= SecondsInDay)) then
|
||||||
|
Exit;
|
||||||
|
|
||||||
|
if (Month <= 2) then begin
|
||||||
|
Year := Year - 1;
|
||||||
|
Month := Month + 12;
|
||||||
|
end;
|
||||||
|
A := abs(Year div 100);
|
||||||
|
|
||||||
|
if (Year > 1582) then
|
||||||
|
GC := True
|
||||||
|
else if (Year = 1582) then begin
|
||||||
|
if (Month > 10) then
|
||||||
|
GC := True
|
||||||
|
else if (Month < 10) then
|
||||||
|
GC := False
|
||||||
|
else begin
|
||||||
|
if (Date >= 15) then
|
||||||
|
GC := True
|
||||||
|
else
|
||||||
|
GC := False;
|
||||||
|
end;
|
||||||
|
end else
|
||||||
|
GC := False;
|
||||||
|
if (GC) then
|
||||||
|
B := 2 - A + abs(A div 4)
|
||||||
|
else
|
||||||
|
B := 0;
|
||||||
|
|
||||||
|
Result := Trunc(365.25 * (Year + 4716))
|
||||||
|
+ Trunc(30.6001 * (Month + 1))
|
||||||
|
+ Date + B - 1524.5
|
||||||
|
+ UT / SecondsInDay;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
function AstJulianDatetoStDate(AstJulian : Double; Truncate : Boolean) : TStDate;
|
||||||
|
{-Returns a TStDate from an Astronomical Julian Date.
|
||||||
|
Truncate TRUE Converts to appropriate 0 hours then truncates
|
||||||
|
FALSE Converts to appropriate 0 hours, then rounds to
|
||||||
|
nearest;}
|
||||||
|
begin
|
||||||
|
{Convert to TStDate, adding 0.5d for implied .0d of TStDate}
|
||||||
|
AstJulian := AstJulian + 0.5 - DeltaJD;
|
||||||
|
if (AstJulian < MinDate) OR (AstJulian > MaxDate) then
|
||||||
|
begin
|
||||||
|
Result := BadDate;
|
||||||
|
Exit;
|
||||||
|
end;
|
||||||
|
|
||||||
|
if Truncate then
|
||||||
|
Result := Trunc(AstJulian)
|
||||||
|
else
|
||||||
|
Result := Trunc(AstJulian + 0.5);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure StDateToDMY(Julian : TStDate; var Day, Month, Year : Integer);
|
||||||
|
{-Convert from a julian date to month, day, year}
|
||||||
|
var
|
||||||
|
I, J : LongInt;
|
||||||
|
begin
|
||||||
|
if Julian = BadDate then begin
|
||||||
|
Day := 0;
|
||||||
|
Month := 0;
|
||||||
|
Year := 0;
|
||||||
|
end else if Julian <= First2Months then begin
|
||||||
|
Year := MinYear;
|
||||||
|
if Julian <= 30 then begin
|
||||||
|
Month := 1;
|
||||||
|
Day := Succ(Julian);
|
||||||
|
end else begin
|
||||||
|
Month := 2;
|
||||||
|
Day := Julian-30;
|
||||||
|
end;
|
||||||
|
end else begin
|
||||||
|
I := (4*LongInt(Julian-First2Months))-1;
|
||||||
|
|
||||||
|
J := (4*((I mod 146097) div 4))+3;
|
||||||
|
Year := (100*(I div 146097))+(J div 1461);
|
||||||
|
I := (5*(((J mod 1461)+4) div 4))-3;
|
||||||
|
Day := ((I mod 153)+5) div 5;
|
||||||
|
|
||||||
|
Month := I div 153;
|
||||||
|
if Month < 10 then
|
||||||
|
Inc(Month, 3)
|
||||||
|
else begin
|
||||||
|
Dec(Month, 9);
|
||||||
|
Inc(Year);
|
||||||
|
end;
|
||||||
|
Inc(Year, MinYear);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function IncDate(Julian : TStDate; Days, Months, Years : Integer) : TStDate;
|
||||||
|
{-Add (or subtract) the number of months, days, and years to a date.
|
||||||
|
Months and years are added before days. No overflow/underflow
|
||||||
|
checks are made}
|
||||||
|
var
|
||||||
|
Day, Month, Year, Day28Delta : Integer;
|
||||||
|
begin
|
||||||
|
StDateToDMY(Julian, Day, Month, Year);
|
||||||
|
Day28Delta := Day-28;
|
||||||
|
if Day28Delta < 0 then
|
||||||
|
Day28Delta := 0
|
||||||
|
else
|
||||||
|
Day := 28;
|
||||||
|
|
||||||
|
Inc(Year, Years);
|
||||||
|
Inc(Year, Months div 12);
|
||||||
|
Inc(Month, Months mod 12);
|
||||||
|
if Month < 1 then begin
|
||||||
|
Inc(Month, 12);
|
||||||
|
Dec(Year);
|
||||||
|
end
|
||||||
|
else if Month > 12 then begin
|
||||||
|
Dec(Month, 12);
|
||||||
|
Inc(Year);
|
||||||
|
end;
|
||||||
|
|
||||||
|
Julian := DMYtoStDate(Day, Month, Year,0);
|
||||||
|
if Julian <> BadDate then begin
|
||||||
|
Inc(Julian, Days);
|
||||||
|
Inc(Julian, Day28Delta);
|
||||||
|
end;
|
||||||
|
Result := Julian;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function IncDateTrunc(Julian : TStDate; Months, Years : Integer) : TStDate;
|
||||||
|
{-Add (or subtract) the specified number of months and years to a date}
|
||||||
|
var
|
||||||
|
Day, Month, Year : Integer;
|
||||||
|
MaxDay, Day28Delta : Integer;
|
||||||
|
begin
|
||||||
|
StDateToDMY(Julian, Day, Month, Year);
|
||||||
|
Day28Delta := Day-28;
|
||||||
|
if Day28Delta < 0 then
|
||||||
|
Day28Delta := 0
|
||||||
|
else
|
||||||
|
Day := 28;
|
||||||
|
|
||||||
|
Inc(Year, Years);
|
||||||
|
Inc(Year, Months div 12);
|
||||||
|
Inc(Month, Months mod 12);
|
||||||
|
if Month < 1 then begin
|
||||||
|
Inc(Month, 12);
|
||||||
|
Dec(Year);
|
||||||
|
end
|
||||||
|
else if Month > 12 then begin
|
||||||
|
Dec(Month, 12);
|
||||||
|
Inc(Year);
|
||||||
|
end;
|
||||||
|
|
||||||
|
Julian := DMYtoStDate(Day, Month, Year,0);
|
||||||
|
if Julian <> BadDate then begin
|
||||||
|
MaxDay := DaysInMonth(Month, Year,0);
|
||||||
|
if Day+Day28Delta > MaxDay then
|
||||||
|
Inc(Julian, MaxDay-Day)
|
||||||
|
else
|
||||||
|
Inc(Julian, Day28Delta);
|
||||||
|
end;
|
||||||
|
Result := Julian;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure DateDiff(Date1, Date2 : TStDate; var Days, Months, Years : Integer);
|
||||||
|
{-Return the difference in days,months,years between two valid julian dates}
|
||||||
|
var
|
||||||
|
Day1, Day2, Month1, Month2, Year1, Year2 : Integer;
|
||||||
|
begin
|
||||||
|
{we want Date2 > Date1}
|
||||||
|
if Date1 > Date2 then
|
||||||
|
ExchangeLongInts(Date1, Date2);
|
||||||
|
|
||||||
|
{convert dates to day,month,year}
|
||||||
|
StDateToDMY(Date1, Day1, Month1, Year1);
|
||||||
|
StDateToDMY(Date2, Day2, Month2, Year2);
|
||||||
|
|
||||||
|
{days first}
|
||||||
|
if (Day1 = DaysInMonth(Month1, Year1, 0)) then begin
|
||||||
|
Day1 := 0;
|
||||||
|
Inc(Month1); {OK if Month1 > 12}
|
||||||
|
end;
|
||||||
|
if (Day2 = DaysInMonth(Month2, Year2, 0)) then begin
|
||||||
|
Day2 := 0;
|
||||||
|
Inc(Month2); {OK if Month2 > 12}
|
||||||
|
end;
|
||||||
|
if (Day2 < Day1) then begin
|
||||||
|
Dec(Month2);
|
||||||
|
if Month2 = 0 then begin
|
||||||
|
Month2 := 12;
|
||||||
|
Dec(Year2);
|
||||||
|
end;
|
||||||
|
Days := Day2 + DaysInMonth(Month1, Year1, 0) - Day1;
|
||||||
|
end else
|
||||||
|
Days := Day2-Day1;
|
||||||
|
|
||||||
|
{now months and years}
|
||||||
|
if Month2 < Month1 then begin
|
||||||
|
Inc(Month2, 12);
|
||||||
|
Dec(Year2);
|
||||||
|
end;
|
||||||
|
Months := Month2-Month1;
|
||||||
|
Years := Year2-Year1;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function BondDateDiff(Date1, Date2 : TStDate; DayBasis : TStBondDateType) : TStDate;
|
||||||
|
{-Return the difference in days between two valid Julian
|
||||||
|
dates using one a specific accrual method}
|
||||||
|
var
|
||||||
|
Day1,
|
||||||
|
Month1,
|
||||||
|
Year1,
|
||||||
|
Day2,
|
||||||
|
Month2,
|
||||||
|
Year2 : Integer;
|
||||||
|
IY : LongInt;
|
||||||
|
begin
|
||||||
|
{we want Date2 > Date1}
|
||||||
|
if Date1 > Date2 then
|
||||||
|
ExchangeLongInts(Date1, Date2);
|
||||||
|
|
||||||
|
if (DayBasis = bdtActual) then
|
||||||
|
Result := Date2-Date1
|
||||||
|
else
|
||||||
|
begin
|
||||||
|
StDateToDMY(Date1, Day1, Month1, Year1);
|
||||||
|
StDateToDMY(Date2, Day2, Month2, Year2);
|
||||||
|
|
||||||
|
if ((DayBasis = bdt30360PSA) and IsLastDayofFeb(Date1)) or (Day1 = 31) then
|
||||||
|
Day1 := 30;
|
||||||
|
if (DayBasis = bdt30E360) then
|
||||||
|
begin
|
||||||
|
if (Day2 = 31) then
|
||||||
|
Day2 := 30
|
||||||
|
end else
|
||||||
|
if (Day2 = 31) and (Day1 >= 30) then
|
||||||
|
Day2 := 30;
|
||||||
|
|
||||||
|
IY := 360 * (Year2 - Year1);
|
||||||
|
Result := IY + 30 * (Month2 - Month1) + (Day2 - Day1);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function DayOfWeek(Julian : TStDate) : TStDayType;
|
||||||
|
{-Return the day of the week for the date. Returns TStDayType(7) if Julian =
|
||||||
|
BadDate.}
|
||||||
|
var
|
||||||
|
B : Byte;
|
||||||
|
begin
|
||||||
|
if Julian = BadDate then begin
|
||||||
|
B := 7;
|
||||||
|
Result := TStDayType(B);
|
||||||
|
end else
|
||||||
|
Result := TStDayType( (Julian+Ord(FirstDayOfWeek)) mod 7 );
|
||||||
|
end;
|
||||||
|
|
||||||
|
function DayOfWeekDMY(Day, Month, Year, Epoch : Integer) : TStDayType;
|
||||||
|
{-Return the day of the week for the day, month, year}
|
||||||
|
begin
|
||||||
|
Result := DayOfWeek( DMYtoStDate(Day, Month, Year, Epoch) );
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure StTimeToHMS(T : TStTime; var Hours, Minutes, Seconds : Byte);
|
||||||
|
{-Convert a Time variable to Hours, Minutes, Seconds}
|
||||||
|
begin
|
||||||
|
if T = BadTime then begin
|
||||||
|
Hours := 0;
|
||||||
|
Minutes := 0;
|
||||||
|
Seconds := 0;
|
||||||
|
end
|
||||||
|
else begin
|
||||||
|
Hours := T div SecondsInHour;
|
||||||
|
Dec(T, LongInt(Hours)*SecondsInHour);
|
||||||
|
Minutes := T div SecondsInMinute;
|
||||||
|
Dec(T, LongInt(Minutes)*SecondsInMinute);
|
||||||
|
Seconds := T;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function HMStoStTime(Hours, Minutes, Seconds : Byte) : TStTime;
|
||||||
|
{-Convert Hours, Minutes, Seconds to a Time variable}
|
||||||
|
var
|
||||||
|
T : TStTime;
|
||||||
|
begin
|
||||||
|
Hours := Hours mod HoursInDay;
|
||||||
|
T := (LongInt(Hours)*SecondsInHour)+(LongInt(Minutes)*SecondsInMinute)+Seconds;
|
||||||
|
Result := T mod SecondsInDay;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function ValidTime(Hours, Minutes, Seconds : Integer) : Boolean;
|
||||||
|
{-Return true if Hours:Minutes:Seconds is a valid time}
|
||||||
|
begin
|
||||||
|
if (Hours < 0) or (Hours > 23) or
|
||||||
|
(Minutes < 0) or (Minutes >= 60) or
|
||||||
|
(Seconds < 0) or (Seconds >= 60) then
|
||||||
|
Result := False
|
||||||
|
else
|
||||||
|
Result := True;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function CurrentTime : TStTime;
|
||||||
|
{-Returns current time in seconds since midnight}
|
||||||
|
begin
|
||||||
|
Result := Trunc(SysUtils.Time * SecondsInDay);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TimeDiff(Time1, Time2 : TStTime; var Hours, Minutes, Seconds : Byte);
|
||||||
|
{-Return the difference in hours,minutes,seconds between two times}
|
||||||
|
begin
|
||||||
|
StTimeToHMS(Abs(Time1-Time2), Hours, Minutes, Seconds);
|
||||||
|
end;
|
||||||
|
|
||||||
|
function IncTime(T : TStTime; Hours, Minutes, Seconds : Byte) : TStTime;
|
||||||
|
{-Add the specified hours,minutes,seconds to T and return the result}
|
||||||
|
begin
|
||||||
|
Inc(T, HMStoStTime(Hours, Minutes, Seconds));
|
||||||
|
Result := T mod SecondsInDay;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function DecTime(T : TStTime; Hours, Minutes, Seconds : Byte) : TStTime;
|
||||||
|
{-Subtract the specified hours,minutes,seconds from T and return the result}
|
||||||
|
begin
|
||||||
|
Hours := Hours mod HoursInDay;
|
||||||
|
Dec(T, HMStoStTime(Hours, Minutes, Seconds));
|
||||||
|
if T < 0 then
|
||||||
|
Result := T+SecondsInDay
|
||||||
|
else
|
||||||
|
Result := T;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function RoundToNearestHour(T : TStTime; Truncate : Boolean) : TStTime;
|
||||||
|
{-Round T to the nearest hour, or Truncate minutes and seconds from T}
|
||||||
|
var
|
||||||
|
Hours, Minutes, Seconds : Byte;
|
||||||
|
begin
|
||||||
|
StTimeToHMS(T, Hours, Minutes, Seconds);
|
||||||
|
Seconds := 0;
|
||||||
|
if not Truncate then
|
||||||
|
if Minutes >= (MinutesInHour div 2) then
|
||||||
|
Inc(Hours);
|
||||||
|
Minutes := 0;
|
||||||
|
Result := HMStoStTime(Hours, Minutes, Seconds);
|
||||||
|
end;
|
||||||
|
|
||||||
|
function RoundToNearestMinute(const T : TStTime; Truncate : Boolean) : TStTime;
|
||||||
|
{-Round T to the nearest minute, or Truncate seconds from T}
|
||||||
|
var
|
||||||
|
Hours, Minutes, Seconds : Byte;
|
||||||
|
begin
|
||||||
|
StTimeToHMS(T, Hours, Minutes, Seconds);
|
||||||
|
if not Truncate then
|
||||||
|
if Seconds >= (SecondsInMinute div 2) then
|
||||||
|
Inc(Minutes);
|
||||||
|
Seconds := 0;
|
||||||
|
Result := HMStoStTime(Hours, Minutes, Seconds);
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
procedure DateTimeDiff(DT1 : TStDateTimeRec; var DT2 : TStDateTimeRec;
|
||||||
|
var Days : LongInt; var Secs : LongInt);
|
||||||
|
{-Return the difference in days and seconds between two points in time}
|
||||||
|
var
|
||||||
|
tDT1, tDT2 : TStDateTimeRec;
|
||||||
|
{$IFDEF NoAsm}
|
||||||
|
Temp : TStDateTimeRec;
|
||||||
|
{$ENDIF}
|
||||||
|
begin
|
||||||
|
tDT1 := DT1;
|
||||||
|
tDT2 := DT2;
|
||||||
|
{swap if tDT1 later than tDT2}
|
||||||
|
if (tDT1.D > tDT2.D) or ((tDT1.D = tDT2.D) and (tDT1.T > tDT2.T)) then
|
||||||
|
{$IFDEF NoAsm}
|
||||||
|
begin
|
||||||
|
Temp := tDT1;
|
||||||
|
tDT1 := tDT2;
|
||||||
|
tDT2 := Temp;
|
||||||
|
end;
|
||||||
|
{$ELSE}
|
||||||
|
ExchangeStructs(tDT1, tDT2,sizeof(TStDateTimeRec));
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
{the difference in days is easy}
|
||||||
|
Days := tDT2.D-tDT1.D;
|
||||||
|
|
||||||
|
{difference in seconds}
|
||||||
|
if tDT2.T < tDT1.T then begin
|
||||||
|
{subtract one day, add 24 hours}
|
||||||
|
Dec(Days);
|
||||||
|
Inc(tDT2.T, SecondsInDay);
|
||||||
|
end;
|
||||||
|
Secs := tDT2.T-tDT1.T;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function DateTimeToStDate(DT : TDateTime) : TStDate;
|
||||||
|
{-Convert Delphi TDateTime to TStDate}
|
||||||
|
var
|
||||||
|
Day, Month, Year : Word;
|
||||||
|
begin
|
||||||
|
DecodeDate(DT, Year, Month, Day);
|
||||||
|
Result := DMYToStDate(Day, Month, Year, 0);
|
||||||
|
end;
|
||||||
|
|
||||||
|
function DateTimeToStTime(DT : TDateTime) : TStTime;
|
||||||
|
{-Convert Delphi TDateTime to TStTime}
|
||||||
|
var
|
||||||
|
Hour, Min, Sec, MSec : Word;
|
||||||
|
begin
|
||||||
|
DecodeTime(DT, Hour, Min, Sec, MSec);
|
||||||
|
Result := HMSToStTime(Hour, Min, Sec);
|
||||||
|
end;
|
||||||
|
|
||||||
|
function StDateToDateTime(D : TStDate) : TDateTime;
|
||||||
|
{-Convert TStDate to TDateTime}
|
||||||
|
var
|
||||||
|
Day, Month, Year : Integer;
|
||||||
|
begin
|
||||||
|
Result := 0;
|
||||||
|
if D <> BadDate then begin
|
||||||
|
StDateToDMY(D, Day, Month, Year);
|
||||||
|
Result := EncodeDate(Year, Month, Day);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function StTimeToDateTime(T : TStTime) : TDateTime;
|
||||||
|
{-Convert TStTime to TDateTime}
|
||||||
|
var
|
||||||
|
Hour, Min, Sec : Byte;
|
||||||
|
begin
|
||||||
|
Result := 0;
|
||||||
|
if T <> BadTime then begin
|
||||||
|
StTimeToHMS(T, Hour, Min, Sec);
|
||||||
|
Result := EncodeTime(Hour, Min, Sec, 0);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure IncDateTime(DT1 : TStDateTimeRec; var DT2 : TStDateTimeRec; Days : Integer; Secs : LongInt);
|
||||||
|
{-Increment (or decrement) DT1 by the specified number of days and seconds
|
||||||
|
and put the result in DT2}
|
||||||
|
begin
|
||||||
|
DT2 := DT1;
|
||||||
|
|
||||||
|
{date first}
|
||||||
|
Inc(DT2.D, LongInt(Days));
|
||||||
|
|
||||||
|
if Secs < 0 then begin
|
||||||
|
{change the sign}
|
||||||
|
Secs := -Secs;
|
||||||
|
|
||||||
|
{adjust the date}
|
||||||
|
Dec(DT2.D, Secs div SecondsInDay);
|
||||||
|
Secs := Secs mod SecondsInDay;
|
||||||
|
|
||||||
|
if Secs > DT2.T then begin
|
||||||
|
{subtract a day from DT2.D and add a day's worth of seconds to DT2.T}
|
||||||
|
Dec(DT2.D);
|
||||||
|
Inc(DT2.T, SecondsInDay);
|
||||||
|
end;
|
||||||
|
|
||||||
|
{now subtract the seconds}
|
||||||
|
Dec(DT2.T, Secs);
|
||||||
|
end
|
||||||
|
else begin
|
||||||
|
{increment the seconds}
|
||||||
|
Inc(DT2.T, Secs);
|
||||||
|
|
||||||
|
{adjust date if necessary}
|
||||||
|
Inc(DT2.D, DT2.T div SecondsInDay);
|
||||||
|
|
||||||
|
{force time to 0..SecondsInDay-1 range}
|
||||||
|
DT2.T := DT2.T mod SecondsInDay;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function Convert2ByteDate(TwoByteDate : Word) : TStDate;
|
||||||
|
begin
|
||||||
|
Result := LongInt(TwoByteDate) + Date1900;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function Convert4ByteDate(FourByteDate : TStDate) : Word;
|
||||||
|
begin
|
||||||
|
Result := Word(FourByteDate - Date1900);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure SetDefaultYear;
|
||||||
|
{-Initialize DefaultYear and DefaultMonth}
|
||||||
|
var
|
||||||
|
Month, Day, Year : Word;
|
||||||
|
T : TDateTime;
|
||||||
|
begin
|
||||||
|
T := Now;
|
||||||
|
DecodeDate(T, Year, Month, Day);
|
||||||
|
DefaultYear := Year;
|
||||||
|
DefaultMonth := Month;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
initialization
|
||||||
|
{initialize DefaultYear and DefaultMonth}
|
||||||
|
SetDefaultYear;
|
||||||
|
end.
|
272
components/orpheus/ovcdrag.pas
Normal file
@ -0,0 +1,272 @@
|
|||||||
|
{*********************************************************}
|
||||||
|
{* OVCDRAG.PAS 4.06 *}
|
||||||
|
{*********************************************************}
|
||||||
|
|
||||||
|
{* ***** BEGIN LICENSE BLOCK ***** *}
|
||||||
|
{* Version: MPL 1.1 *}
|
||||||
|
{* *}
|
||||||
|
{* The contents of this file are subject to the Mozilla Public License *}
|
||||||
|
{* Version 1.1 (the "License"); you may not use this file except in *}
|
||||||
|
{* compliance with the License. You may obtain a copy of the License at *}
|
||||||
|
{* http://www.mozilla.org/MPL/ *}
|
||||||
|
{* *}
|
||||||
|
{* Software distributed under the License is distributed on an "AS IS" basis, *}
|
||||||
|
{* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License *}
|
||||||
|
{* for the specific language governing rights and limitations under the *}
|
||||||
|
{* License. *}
|
||||||
|
{* *}
|
||||||
|
{* The Original Code is TurboPower Orpheus *}
|
||||||
|
{* *}
|
||||||
|
{* The Initial Developer of the Original Code is TurboPower Software *}
|
||||||
|
{* *}
|
||||||
|
{* Portions created by TurboPower Software Inc. are Copyright (C)1995-2002 *}
|
||||||
|
{* TurboPower Software Inc. All Rights Reserved. *}
|
||||||
|
{* *}
|
||||||
|
{* Contributor(s): *}
|
||||||
|
{* *}
|
||||||
|
{* ***** END LICENSE BLOCK ***** *}
|
||||||
|
|
||||||
|
{$I OVC.INC}
|
||||||
|
|
||||||
|
{$B-} {Complete Boolean Evaluation}
|
||||||
|
{$I+} {Input/Output-Checking}
|
||||||
|
{$P+} {Open Parameters}
|
||||||
|
{$T-} {Typed @ Operator}
|
||||||
|
{.W-} {Windows Stack Frame}
|
||||||
|
{$X+} {Extended Syntax}
|
||||||
|
|
||||||
|
unit ovcdrag;
|
||||||
|
|
||||||
|
interface
|
||||||
|
|
||||||
|
uses
|
||||||
|
{$IFNDEF LCL} Windows, {$ELSE} LclIntf, LclType, MyMisc, {$ENDIF}
|
||||||
|
Classes, Graphics;
|
||||||
|
|
||||||
|
type
|
||||||
|
TOvcDragShow = class(TObject)
|
||||||
|
{.Z+}
|
||||||
|
protected
|
||||||
|
dStretchBltMode : Integer;
|
||||||
|
dMemDC,dSMemDC,
|
||||||
|
dDstDC,dSaveDC : hDC;
|
||||||
|
dSaveBmp, dMemBmp,
|
||||||
|
dSMemBmp : hBITMAP;
|
||||||
|
dcrText, dcrBack : TColorRef;
|
||||||
|
dRect : TRect;
|
||||||
|
dSize : TPoint;
|
||||||
|
dSystemPalette16 : hPalette;
|
||||||
|
dOldPal : hPalette;
|
||||||
|
Bitmap,dMask : TBitmap;
|
||||||
|
DeltaX, DeltaY : Integer;
|
||||||
|
dDragging,
|
||||||
|
dHaveOriginal : Boolean;
|
||||||
|
|
||||||
|
procedure ilDragDraw;
|
||||||
|
procedure ilRestoreOriginal;
|
||||||
|
procedure ilSaveOriginal;
|
||||||
|
|
||||||
|
public
|
||||||
|
constructor Create(X, Y : Integer; SourceRect : TRect; TransColor : TColor);
|
||||||
|
destructor Destroy;
|
||||||
|
override;
|
||||||
|
procedure DragMove(X, Y : Integer);
|
||||||
|
procedure HideDragImage;
|
||||||
|
procedure ShowDragImage;
|
||||||
|
{.Z+}
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
implementation
|
||||||
|
|
||||||
|
|
||||||
|
{*** TOvcDragShow ***}
|
||||||
|
|
||||||
|
constructor TOvcDragShow.Create(X, Y : Integer; SourceRect : TRect; TransColor : TColor);
|
||||||
|
var
|
||||||
|
dMaskDC : HDC;
|
||||||
|
SrcDC : HDC;
|
||||||
|
begin
|
||||||
|
dHaveOriginal := False;
|
||||||
|
dDstDC := GetDC(0);
|
||||||
|
DeltaX := X - SourceRect.Left;
|
||||||
|
DeltaY := Y - SourceRect.Top;
|
||||||
|
dec(X, DeltaX);
|
||||||
|
dec(Y, DeltaY);
|
||||||
|
dRect.Left := X;
|
||||||
|
dRect.Top := Y;
|
||||||
|
Bitmap := nil;
|
||||||
|
dMask := nil;
|
||||||
|
try
|
||||||
|
Bitmap := TBitmap.Create;
|
||||||
|
Bitmap.Width := SourceRect.Right - SourceRect.Left + 1;
|
||||||
|
Bitmap.Height := SourceRect.Bottom - SourceRect.Top + 1;
|
||||||
|
|
||||||
|
dMask := TBitmap.Create;
|
||||||
|
dMask.Width := SourceRect.Right - SourceRect.Left + 1;
|
||||||
|
dMask.Height := SourceRect.Bottom - SourceRect.Top + 1;
|
||||||
|
|
||||||
|
BitBlt(Bitmap.Canvas.Handle, 0, 0, Bitmap.Width, Bitmap.Height, dDstDC, SourceRect.Left,
|
||||||
|
SourceRect.Top, SRCCOPY);
|
||||||
|
{$IFNDEF LCL}
|
||||||
|
dMask.Canvas.BrushCopy(Rect(0, 0, dMask.Width - 1, dMask.Height - 1), Bitmap,
|
||||||
|
Rect(0, 0, dMask.Width - 1, dMask.Height - 1), TransColor);
|
||||||
|
{$ELSE}
|
||||||
|
BrushCopy(dMask.Canvas, Rect(0, 0, dMask.Width - 1, dMask.Height - 1), Bitmap,
|
||||||
|
Rect(0, 0, dMask.Width - 1, dMask.Height - 1), TransColor);
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
dMemDC := CreateCompatibleDC(0);
|
||||||
|
dSaveDC := CreateCompatibleDC(0);
|
||||||
|
dDragging := True;
|
||||||
|
dStretchBltMode := SetStretchBltMode(dDstDC, BLACKONWHITE);
|
||||||
|
dSize.X := Bitmap.Width;
|
||||||
|
dSize.Y := Bitmap.Height;
|
||||||
|
dRect.Right := dRect.Left + dSize.X - 1;
|
||||||
|
dRect.Bottom := dRect.Top + dSize.Y - 1;
|
||||||
|
SrcDC := Bitmap.Canvas.Handle;
|
||||||
|
dMaskDC := dMask.Canvas.Handle;
|
||||||
|
dSMemDC := CreateCompatibleDC(dMaskDC);
|
||||||
|
dMemBmp := CreateCompatibleBitmap(SrcDC, dSize.X, dSize.Y);
|
||||||
|
SelectObject(dMemDC, dMemBmp);
|
||||||
|
dSMemBmp := CreateCompatibleBitmap(dMaskDC, dSize.X, dSize.Y);
|
||||||
|
SelectObject(dSMemDC, dSMemBmp);
|
||||||
|
dSaveBmp := CreateCompatibleBitmap(SrcDC, dSize.X, dSize.Y);
|
||||||
|
SelectObject(dSaveDC, dSaveBmp);
|
||||||
|
dSystemPalette16 := GetStockObject(DEFAULT_PALETTE);
|
||||||
|
dOldPal := SelectPalette(SrcDC, dSystemPalette16, False);
|
||||||
|
SelectPalette(SrcDC, dOldPal, False);
|
||||||
|
if dOldPal <> 0 then begin
|
||||||
|
SelectPalette(dMemDC, dOldPal, True);
|
||||||
|
SelectPalette(dSaveDC, dOldPal, True);
|
||||||
|
end else begin
|
||||||
|
SelectPalette(dMemDC, dSystemPalette16, True);
|
||||||
|
SelectPalette(dSaveDC, dSystemPalette16, True);
|
||||||
|
end;
|
||||||
|
RealizePalette(dMemDC);
|
||||||
|
RealizePalette(dSaveDC);
|
||||||
|
|
||||||
|
BitBlt(dSMemDC, 0, 0, dSize.X, dSize.Y, dMaskDC, 0, 0, SrcCopy);
|
||||||
|
BitBlt(dMemDC, 0, 0, dSize.X, dSize.Y, dMaskDC, 0, 0, SrcCopy);
|
||||||
|
BitBlt(dMemDC, 0, 0, dSize.X, dSize.Y, SrcDC, 0, 0, SrcErase);
|
||||||
|
dcrText := SetTextColor(dDstDC, $0);
|
||||||
|
dcrBack := SetBkColor(dDstDC, $FFFFFF);
|
||||||
|
ilSaveOriginal;
|
||||||
|
ilDragDraw;
|
||||||
|
except
|
||||||
|
Bitmap.Free;
|
||||||
|
dMask.Free;
|
||||||
|
raise;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
destructor TOvcDragShow.Destroy;
|
||||||
|
begin
|
||||||
|
ilRestoreOriginal;
|
||||||
|
SetTextColor(dDstDC, dcrText);
|
||||||
|
SetBkColor(dDstDC, dcrBack);
|
||||||
|
DeleteObject(dMemBmp);
|
||||||
|
DeleteObject(dSaveBmp);
|
||||||
|
DeleteObject(dSMemBmp);
|
||||||
|
DeleteDC(dMemDC);
|
||||||
|
DeleteDC(dSMemDC);
|
||||||
|
DeleteDC(dSaveDC);
|
||||||
|
SetStretchBltMode(dDstDC, dStretchBltMode);
|
||||||
|
ReleaseDC(0,dDstDC);
|
||||||
|
dDragging := False;
|
||||||
|
Bitmap.Free;
|
||||||
|
dMask.Free;
|
||||||
|
inherited Destroy;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TOvcDragShow.DragMove(X, Y: Integer);
|
||||||
|
var
|
||||||
|
NewRect, Union : TRect;
|
||||||
|
UnionSize : TPoint;
|
||||||
|
WorkDC : hDC;
|
||||||
|
WorkBM : hBitmap;
|
||||||
|
begin
|
||||||
|
if not dDragging then exit;
|
||||||
|
dec(X, DeltaX);
|
||||||
|
dec(Y, DeltaY);
|
||||||
|
{if we didn't move, get out}
|
||||||
|
if (X = dRect.Left) and (Y = dRect.Top) then exit;
|
||||||
|
{let's see where we're going}
|
||||||
|
NewRect := Rect(X, Y, X + dSize.X - 1, Y + dSize.Y - 1);
|
||||||
|
{if drag image not currently shown, just update next draw position and exit}
|
||||||
|
if not dHaveOriginal then begin
|
||||||
|
dRect := NewRect;
|
||||||
|
exit;
|
||||||
|
end;
|
||||||
|
{do the old and new positions overlap?}
|
||||||
|
if ord(IntersectRect(Union, dRect, NewRect)) <> 0 then begin
|
||||||
|
{rect old and new combined:}
|
||||||
|
UnionRect(Union, NewRect, dRect);
|
||||||
|
{size of union:}
|
||||||
|
UnionSize.X := Union.Right - Union.Left + 1;
|
||||||
|
UnionSize.Y := Union.Bottom - Union.Top + 1;
|
||||||
|
{create combination buffer}
|
||||||
|
WorkDC := CreateCompatibleDC(0);
|
||||||
|
WorkBM := CreateCompatibleBitmap(dDstDC, UnionSize.X, UnionSize.Y);
|
||||||
|
SelectObject(WorkDC, WorkBM);
|
||||||
|
if dOldPal <> 0 then
|
||||||
|
SelectPalette(WorkDC, dOldPal, True)
|
||||||
|
else
|
||||||
|
SelectPalette(WorkDC, dSystemPalette16, True);
|
||||||
|
RealizePalette(WorkDC);
|
||||||
|
{copy screen section (including old image) to local buffer}
|
||||||
|
BitBlt(WorkDC, 0, 0, UnionSize.X, UnionSize.Y, dDstDC, Union.Left, Union.Top, SRCCOPY);
|
||||||
|
{"repair" by restoring background for old image}
|
||||||
|
BitBlt(WorkDC, dRect.Left - Union.Left, dRect.Top - Union.Top,
|
||||||
|
dSize.X, dSize.Y, dSaveDC, 0, 0, SRCCOPY);
|
||||||
|
{save background so we can do the same next time}
|
||||||
|
BitBlt(dSaveDC, 0, 0, dSize.X, dSize.Y, WorkDC, NewRect.Left - Union.Left, NewRect.Top - Union.Top, SrcCopy);
|
||||||
|
{write image at new position into local buffer}
|
||||||
|
BitBlt(WorkDC, NewRect.Left - Union.Left, NewRect.Top - Union.Top, dSize.X, dSize.Y, dSMemDC, 0, 0, SrcAnd);
|
||||||
|
BitBlt(WorkDC, NewRect.Left - Union.Left, NewRect.Top - Union.Top, dSize.X, dSize.Y, dMemDC, 0, 0, SrcInvert);
|
||||||
|
{copy combined image to screen}
|
||||||
|
BitBlt(dDstDC, Union.Left, Union.Top, UnionSize.X, UnionSize.Y, WorkDC, 0, 0, SRCCOPY);
|
||||||
|
dRect := NewRect;
|
||||||
|
DeleteDC(WorkDC);
|
||||||
|
DeleteObject(WorkBM);
|
||||||
|
end else begin
|
||||||
|
{images dont overlap, so we might as well do the draw in two steps}
|
||||||
|
ilRestoreOriginal;
|
||||||
|
dRect := NewRect;
|
||||||
|
ilSaveOriginal;
|
||||||
|
ilDragDraw;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TOvcDragShow.HideDragImage;
|
||||||
|
begin
|
||||||
|
ilRestoreOriginal;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TOvcDragShow.ilDragDraw;
|
||||||
|
begin
|
||||||
|
BitBlt(dDstDC, dRect.Left, dRect.Top, dSize.X, dSize.Y, dSMemDC, 0, 0, SrcAnd);
|
||||||
|
BitBlt(dDstDC, dRect.Left, dRect.Top, dSize.X, dSize.Y, dMemDC, 0, 0, SrcInvert);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TOvcDragShow.ilRestoreOriginal;
|
||||||
|
begin
|
||||||
|
if not dHaveOriginal then exit;
|
||||||
|
BitBlt(dDstDC, dRect.Left, dRect.Top, dSize.X, dSize.Y, dSaveDC, 0, 0, SrcCopy);
|
||||||
|
dHaveOriginal := False;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TOvcDragShow.ilSaveOriginal;
|
||||||
|
begin
|
||||||
|
BitBlt(dSaveDC, 0, 0, dSize.X, dSize.Y, dDstDC, dRect.Left, dRect.Top, SrcCopy);
|
||||||
|
dHaveOriginal := True;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TOvcDragShow.ShowDragImage;
|
||||||
|
begin
|
||||||
|
ilSaveOriginal;
|
||||||
|
ilDragDraw;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
end.
|
1124
components/orpheus/ovcedcal.pas
Normal file
599
components/orpheus/ovcedclc.pas
Normal file
@ -0,0 +1,599 @@
|
|||||||
|
{*********************************************************}
|
||||||
|
{* OVCEDCLC.PAS 4.06 *}
|
||||||
|
{*********************************************************}
|
||||||
|
|
||||||
|
{* ***** BEGIN LICENSE BLOCK ***** *}
|
||||||
|
{* Version: MPL 1.1 *}
|
||||||
|
{* *}
|
||||||
|
{* The contents of this file are subject to the Mozilla Public License *}
|
||||||
|
{* Version 1.1 (the "License"); you may not use this file except in *}
|
||||||
|
{* compliance with the License. You may obtain a copy of the License at *}
|
||||||
|
{* http://www.mozilla.org/MPL/ *}
|
||||||
|
{* *}
|
||||||
|
{* Software distributed under the License is distributed on an "AS IS" basis, *}
|
||||||
|
{* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License *}
|
||||||
|
{* for the specific language governing rights and limitations under the *}
|
||||||
|
{* License. *}
|
||||||
|
{* *}
|
||||||
|
{* The Original Code is TurboPower Orpheus *}
|
||||||
|
{* *}
|
||||||
|
{* The Initial Developer of the Original Code is TurboPower Software *}
|
||||||
|
{* *}
|
||||||
|
{* Portions created by TurboPower Software Inc. are Copyright (C)1995-2002 *}
|
||||||
|
{* TurboPower Software Inc. All Rights Reserved. *}
|
||||||
|
{* *}
|
||||||
|
{* Contributor(s): *}
|
||||||
|
{* *}
|
||||||
|
{* ***** END LICENSE BLOCK ***** *}
|
||||||
|
|
||||||
|
{$I OVC.INC}
|
||||||
|
|
||||||
|
{$B-} {Complete Boolean Evaluation}
|
||||||
|
{$I+} {Input/Output-Checking}
|
||||||
|
{$P+} {Open Parameters}
|
||||||
|
{$T-} {Typed @ Operator}
|
||||||
|
{.W-} {Windows Stack Frame}
|
||||||
|
{$X+} {Extended Syntax}
|
||||||
|
|
||||||
|
unit ovcedclc;
|
||||||
|
{-numeric edit field with popup calculator}
|
||||||
|
|
||||||
|
interface
|
||||||
|
|
||||||
|
uses
|
||||||
|
{$IFNDEF LCL} Windows, Messages, {$ELSE} LclIntf, LMessages, LclType, MyMisc, {$ENDIF}
|
||||||
|
Buttons, Classes, Controls, Forms, Graphics, Menus,
|
||||||
|
StdCtrls, SysUtils, {$IFDEF VERSION4}{$IFNDEF LCL} MultiMon, {$ENDIF}{$ENDIF}
|
||||||
|
OvcBase, OvcCalc, OvcEdPop, OvcMisc;
|
||||||
|
|
||||||
|
type
|
||||||
|
TOvcCustomNumberEdit = class(TOvcEdPopup)
|
||||||
|
{.Z+}
|
||||||
|
protected {private}
|
||||||
|
FAllowIncDec : Boolean;
|
||||||
|
FCalculator : TOvcCalculator;
|
||||||
|
|
||||||
|
{internal variables}
|
||||||
|
PopupClosing : Boolean;
|
||||||
|
HoldCursor : TCursor;
|
||||||
|
WasAutoScroll : Boolean;
|
||||||
|
|
||||||
|
{property methods}
|
||||||
|
function GetAsFloat : Double;
|
||||||
|
function GetAsInteger : LongInt;
|
||||||
|
function GetAsString : string;
|
||||||
|
function GetPopupColors : TOvcCalcColors;
|
||||||
|
function GetPopupDecimals : Integer;
|
||||||
|
function GetPopupFont : TFont;
|
||||||
|
function GetPopupHeight : Integer;
|
||||||
|
function GetPopupWidth : Integer;
|
||||||
|
function GetReadOnly : Boolean;
|
||||||
|
procedure SetAsFloat(Value : Double);
|
||||||
|
procedure SetAsInteger(Value : LongInt);
|
||||||
|
procedure SetAsString(const Value : string);
|
||||||
|
procedure SetPopupColors(Value : TOvcCalcColors);
|
||||||
|
procedure SetPopupDecimals(Value : Integer);
|
||||||
|
procedure SetPopupFont(Value : TFont);
|
||||||
|
procedure SetPopupHeight(Value : Integer);
|
||||||
|
procedure SetPopupWidth(Value : Integer);
|
||||||
|
procedure SetReadOnly(Value : Boolean);
|
||||||
|
|
||||||
|
{internal methods}
|
||||||
|
procedure PopupButtonPressed(Sender : TObject; Button : TOvcCalculatorButton);
|
||||||
|
procedure PopupKeyDown(Sender : TObject; var Key : Word; Shift : TShiftState);
|
||||||
|
procedure PopupKeyPress(Sender : TObject; var Key : Char);
|
||||||
|
procedure PopupMouseDown(Sender : TObject; Button : TMouseButton; Shift : TShiftState; X, Y : Integer);
|
||||||
|
|
||||||
|
protected
|
||||||
|
procedure DoExit;
|
||||||
|
override;
|
||||||
|
procedure GlyphChanged;
|
||||||
|
override;
|
||||||
|
procedure KeyDown(var Key : Word; Shift : TShiftState);
|
||||||
|
override;
|
||||||
|
procedure KeyPress(var Key : Char);
|
||||||
|
override;
|
||||||
|
{.Z-}
|
||||||
|
|
||||||
|
property AllowIncDec : Boolean
|
||||||
|
read FAllowIncDec write FAllowIncDec;
|
||||||
|
property PopupColors : TOvcCalcColors
|
||||||
|
read GetPopupColors write SetPopupColors;
|
||||||
|
property PopupDecimals : Integer
|
||||||
|
read GetPopupDecimals write SetPopupDecimals;
|
||||||
|
property PopupFont : TFont
|
||||||
|
read GetPopupFont write SetPopupFont;
|
||||||
|
property PopupHeight : Integer
|
||||||
|
read GetPopupHeight write SetPopupHeight;
|
||||||
|
property PopupWidth : Integer
|
||||||
|
read GetPopupWidth write SetPopupWidth;
|
||||||
|
property ReadOnly : Boolean
|
||||||
|
read GetReadOnly write SetReadOnly;
|
||||||
|
|
||||||
|
public
|
||||||
|
{.Z+}
|
||||||
|
constructor Create(AOwner : TComponent);
|
||||||
|
override;
|
||||||
|
{.Z-}
|
||||||
|
|
||||||
|
procedure PopupClose(Sender : TObject);
|
||||||
|
override;
|
||||||
|
procedure PopupOpen;
|
||||||
|
override;
|
||||||
|
|
||||||
|
property AsInteger : LongInt
|
||||||
|
read GetAsInteger
|
||||||
|
write SetAsInteger;
|
||||||
|
|
||||||
|
{public properties}
|
||||||
|
property Calculator : TOvcCalculator
|
||||||
|
read FCalculator;
|
||||||
|
property AsFloat : Double
|
||||||
|
read GetAsFloat write SetAsFloat;
|
||||||
|
property AsString : string
|
||||||
|
read GetAsString write SetAsString;
|
||||||
|
end;
|
||||||
|
|
||||||
|
TOvcNumberEdit = class(TOvcCustomNumberEdit)
|
||||||
|
published
|
||||||
|
{properties}
|
||||||
|
{$IFDEF VERSION4}
|
||||||
|
property Anchors;
|
||||||
|
property Constraints;
|
||||||
|
property DragKind;
|
||||||
|
{$ENDIF}
|
||||||
|
property About;
|
||||||
|
property AllowIncDec;
|
||||||
|
{$IFNDEF LCL}
|
||||||
|
property AutoSelect;
|
||||||
|
{$ENDIF}
|
||||||
|
property AutoSize;
|
||||||
|
property BorderStyle;
|
||||||
|
property ButtonGlyph;
|
||||||
|
property Color;
|
||||||
|
property Ctl3D;
|
||||||
|
property Cursor;
|
||||||
|
property DragCursor;
|
||||||
|
property DragMode;
|
||||||
|
property Enabled;
|
||||||
|
property Font;
|
||||||
|
{$IFNDEF LCL}
|
||||||
|
property HideSelection;
|
||||||
|
{$ENDIF}
|
||||||
|
property LabelInfo;
|
||||||
|
property ParentColor;
|
||||||
|
property ParentCtl3D;
|
||||||
|
property ParentFont;
|
||||||
|
property ParentShowHint;
|
||||||
|
property PopupAnchor;
|
||||||
|
property PopupColors;
|
||||||
|
property PopupDecimals;
|
||||||
|
property PopupFont;
|
||||||
|
property PopupHeight;
|
||||||
|
property PopupWidth;
|
||||||
|
property PopupMenu;
|
||||||
|
property ReadOnly;
|
||||||
|
property ShowHint;
|
||||||
|
property ShowButton;
|
||||||
|
property TabOrder;
|
||||||
|
property TabStop;
|
||||||
|
property Visible;
|
||||||
|
|
||||||
|
{events}
|
||||||
|
property OnChange;
|
||||||
|
property OnClick;
|
||||||
|
property OnDblClick;
|
||||||
|
property OnDragDrop;
|
||||||
|
property OnDragOver;
|
||||||
|
property OnEndDrag;
|
||||||
|
property OnEnter;
|
||||||
|
property OnExit;
|
||||||
|
property OnKeyDown;
|
||||||
|
property OnKeyPress;
|
||||||
|
property OnKeyUp;
|
||||||
|
property OnMouseDown;
|
||||||
|
property OnMouseMove;
|
||||||
|
property OnMouseUp;
|
||||||
|
property OnPopupClose;
|
||||||
|
property OnPopupOpen;
|
||||||
|
property OnStartDrag;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
implementation
|
||||||
|
|
||||||
|
|
||||||
|
{*** TOvcCustomNumberEdit ***}
|
||||||
|
|
||||||
|
constructor TOvcCustomNumberEdit.Create(AOwner : TComponent);
|
||||||
|
begin
|
||||||
|
inherited Create(AOwner);
|
||||||
|
|
||||||
|
ControlStyle := ControlStyle - [csSetCaption];
|
||||||
|
|
||||||
|
FAllowIncDec := False;
|
||||||
|
|
||||||
|
{load button glyph}
|
||||||
|
{$IFNDEF LCL}
|
||||||
|
FButtonGlyph.Handle := LoadBaseBitmap('ORBTNCLC');
|
||||||
|
{$ELSE}
|
||||||
|
FButtonGlyph.LoadFromLazarusResource('ORBTNCLC');
|
||||||
|
{$ENDIF}
|
||||||
|
FButton.Glyph.Assign(FButtonGlyph);
|
||||||
|
|
||||||
|
FCalculator := TOvcCalculator.CreateEx(Self, True);
|
||||||
|
FCalculator.OnButtonPressed := PopupButtonPressed;
|
||||||
|
FCalculator.OnExit := PopupClose;
|
||||||
|
FCalculator.OnKeyDown := PopupKeyDown;
|
||||||
|
FCalculator.OnKeyPress := PopupKeyPress;
|
||||||
|
FCalculator.OnMouseDown := PopupMouseDown;
|
||||||
|
FCalculator.Visible := False; {to avoid flash at 0,0}
|
||||||
|
FCalculator.Options := [coShowItemCount];
|
||||||
|
FCalculator.BorderStyle := bsSingle;
|
||||||
|
FCalculator.ParentFont := False;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TOvcCustomNumberEdit.DoExit;
|
||||||
|
begin
|
||||||
|
if not PopupActive then
|
||||||
|
inherited DoExit;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TOvcCustomNumberEdit.GetAsFloat : Double;
|
||||||
|
var
|
||||||
|
I : Integer;
|
||||||
|
S : string;
|
||||||
|
begin
|
||||||
|
S := Text;
|
||||||
|
for I := Length(S) downto 1 do
|
||||||
|
if not (S[I] in ['0'..'9', '+', '-', DecimalSeparator]) then
|
||||||
|
Delete(S, I, 1);
|
||||||
|
Result := StrToFloat(S);
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TOvcCustomNumberEdit.GetAsInteger : LongInt;
|
||||||
|
begin
|
||||||
|
Result := Round(GetAsFloat);
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TOvcCustomNumberEdit.GetAsString : string;
|
||||||
|
begin
|
||||||
|
Result := Text;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TOvcCustomNumberEdit.GetPopupColors : TOvcCalcColors;
|
||||||
|
begin
|
||||||
|
Result := FCalculator.Colors;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TOvcCustomNumberEdit.GetPopupDecimals : Integer;
|
||||||
|
begin
|
||||||
|
Result := FCalculator.Decimals;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TOvcCustomNumberEdit.GetPopupFont : TFont;
|
||||||
|
begin
|
||||||
|
Result := FCalculator.Font;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TOvcCustomNumberEdit.GetPopupHeight : Integer;
|
||||||
|
begin
|
||||||
|
Result := FCalculator.Height;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TOvcCustomNumberEdit.GetPopupWidth : Integer;
|
||||||
|
begin
|
||||||
|
Result := FCalculator.Width;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TOvcCustomNumberEdit.GetReadOnly : Boolean;
|
||||||
|
begin
|
||||||
|
Result := inherited ReadOnly;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TOvcCustomNumberEdit.GlyphChanged;
|
||||||
|
begin
|
||||||
|
inherited GlyphChanged;
|
||||||
|
|
||||||
|
if FButtonGlyph.Empty then
|
||||||
|
{$IFNDEF LCL}
|
||||||
|
FButtonGlyph.Handle := LoadBaseBitmap('ORBTNCLC');
|
||||||
|
{$ELSE}
|
||||||
|
FButtonGlyph.LoadFromLazarusResource('ORBTNCLC');
|
||||||
|
{$ENDIF}
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TOvcCustomNumberEdit.KeyDown(var Key : Word; Shift : TShiftState);
|
||||||
|
begin
|
||||||
|
inherited KeyDown(Key, Shift);
|
||||||
|
|
||||||
|
if (Key = VK_DOWN) and (ssAlt in Shift) then
|
||||||
|
PopupOpen;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TOvcCustomNumberEdit.KeyPress(var Key : Char);
|
||||||
|
var
|
||||||
|
D : Double;
|
||||||
|
X : Integer;
|
||||||
|
L : Integer;
|
||||||
|
begin
|
||||||
|
inherited KeyPress(Key);
|
||||||
|
|
||||||
|
if not ((Key = #22) or (Key = #3) or (Key = #24)) then begin
|
||||||
|
if not (Key in [#27, '0'..'9', '.', DecimalSeparator,
|
||||||
|
#8, '+', '-', '*', '/']) then begin
|
||||||
|
Key := #0;
|
||||||
|
{$IFNDEF LCL}
|
||||||
|
MessageBeep(0);
|
||||||
|
{$ENDIF}
|
||||||
|
Exit;
|
||||||
|
end;
|
||||||
|
|
||||||
|
{Disallow more than one DecimalSeparator in the number}
|
||||||
|
if (SelLength <> Length(Text))
|
||||||
|
and (Key = DecimalSeparator) and (Pos(DecimalSeparator, Text) > 0)
|
||||||
|
then begin
|
||||||
|
Key := #0;
|
||||||
|
{$IFNDEF LCL}
|
||||||
|
MessageBeep(0);
|
||||||
|
{$ENDIF}
|
||||||
|
Exit;
|
||||||
|
end;
|
||||||
|
|
||||||
|
if FAllowIncDec and (Key in ['+', '-']) then begin
|
||||||
|
if Text = '' then
|
||||||
|
Text := '0';
|
||||||
|
D := StrToFloat(Text);
|
||||||
|
X := SelStart;
|
||||||
|
L := SelLength;
|
||||||
|
|
||||||
|
if Key = '+' then
|
||||||
|
Text := FloatToStr(D+1)
|
||||||
|
else {'-'}
|
||||||
|
Text := FloatToStr(D-1);
|
||||||
|
|
||||||
|
SelStart := X;
|
||||||
|
SelLength := L;
|
||||||
|
|
||||||
|
Key := #0; {clear key}
|
||||||
|
end;
|
||||||
|
|
||||||
|
if (Key in ['+', '*', '/']) then begin
|
||||||
|
PopUpOpen;
|
||||||
|
FCalculator.KeyPress(Key);
|
||||||
|
Key := #0; {clear key}
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TOvcCustomNumberEdit.PopupButtonPressed(Sender : TObject;
|
||||||
|
Button : TOvcCalculatorButton);
|
||||||
|
begin
|
||||||
|
case Button of
|
||||||
|
cbEqual :
|
||||||
|
begin
|
||||||
|
{get the current value}
|
||||||
|
Text := FloatToStr(FCalculator.DisplayValue);
|
||||||
|
Modified := True;
|
||||||
|
|
||||||
|
{hide the calculator}
|
||||||
|
PopupClose(Sender);
|
||||||
|
SetFocus;
|
||||||
|
SelStart := Length(Text);
|
||||||
|
SelLength := 0;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TOvcCustomNumberEdit.PopupClose(Sender : TObject);
|
||||||
|
begin
|
||||||
|
if not FCalculator.Visible then
|
||||||
|
Exit; {already closed, exit}
|
||||||
|
|
||||||
|
if PopupClosing then
|
||||||
|
Exit;
|
||||||
|
|
||||||
|
PopupClosing := True; {avoid recursion}
|
||||||
|
try
|
||||||
|
inherited PopupClose(Sender);
|
||||||
|
|
||||||
|
if GetCapture = FCalculator.Handle then
|
||||||
|
ReleaseCapture;
|
||||||
|
|
||||||
|
SetFocus;
|
||||||
|
FCalculator.Hide; {hide the calculator}
|
||||||
|
TForm(FCalculator.Parent).AutoScroll := WasAutoScroll;
|
||||||
|
Cursor := HoldCursor;
|
||||||
|
|
||||||
|
{change parentage so that we control the window handle destruction}
|
||||||
|
FCalculator.Parent := Self;
|
||||||
|
finally
|
||||||
|
PopupClosing := False;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TOvcCustomNumberEdit.PopupKeyDown(Sender : TObject; var Key : Word; Shift : TShiftState);
|
||||||
|
var
|
||||||
|
X : Integer;
|
||||||
|
begin
|
||||||
|
case Key of
|
||||||
|
|
||||||
|
VK_TAB :
|
||||||
|
begin
|
||||||
|
if Shift = [ssShift] then begin
|
||||||
|
PopupClose(Sender);
|
||||||
|
PostMessage(Handle, WM_KeyDown, VK_TAB, Integer(ssShift));
|
||||||
|
end else if Shift = [] then begin
|
||||||
|
PopupClose(Sender);
|
||||||
|
PostMessage(Handle, WM_KeyDown, VK_TAB, 0);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
VK_UP : if Shift = [ssAlt] then begin
|
||||||
|
PopupClose(Sender);
|
||||||
|
X := SelStart;
|
||||||
|
SetFocus;
|
||||||
|
SelStart := X;
|
||||||
|
SelLength := 0;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TOvcCustomNumberEdit.PopupKeyPress(Sender : TObject; var Key : Char);
|
||||||
|
var
|
||||||
|
X : Integer;
|
||||||
|
begin
|
||||||
|
case Key of
|
||||||
|
#27 :
|
||||||
|
begin
|
||||||
|
PopupClose(Sender);
|
||||||
|
X := SelStart;
|
||||||
|
SetFocus;
|
||||||
|
SelStart := X;
|
||||||
|
SelLength := 0;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TOvcCustomNumberEdit.PopupMouseDown(Sender : TObject; Button : TMouseButton; Shift : TShiftState; X, Y : Integer);
|
||||||
|
var
|
||||||
|
P : TPoint;
|
||||||
|
I : Integer;
|
||||||
|
begin
|
||||||
|
P := Point(X,Y);
|
||||||
|
if not PtInRect(FCalculator.ClientRect, P) then
|
||||||
|
PopUpClose(Sender);
|
||||||
|
|
||||||
|
{convert to our coordinate system}
|
||||||
|
P := ScreenToClient(FCalculator.ClientToScreen(P));
|
||||||
|
|
||||||
|
if PtInRect(ClientRect, P) then begin
|
||||||
|
I := SelStart;
|
||||||
|
SetFocus;
|
||||||
|
SelStart := I;
|
||||||
|
SelLength := 0;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TOvcCustomNumberEdit.PopupOpen;
|
||||||
|
var
|
||||||
|
P : TPoint;
|
||||||
|
R : TRect;
|
||||||
|
{$IFDEF VERSION4}
|
||||||
|
{$IFNDEF LCL}
|
||||||
|
F : TCustomForm;
|
||||||
|
MonInfo : TMonitorInfo;
|
||||||
|
{$ENDIF}
|
||||||
|
{$ENDIF}
|
||||||
|
begin
|
||||||
|
if FCalculator.Visible then
|
||||||
|
Exit; {already popped up, exit}
|
||||||
|
|
||||||
|
inherited PopupOpen;
|
||||||
|
|
||||||
|
FCalculator.Parent := GetImmediateParentForm(Self);
|
||||||
|
if FCalculator.Parent is TForm then begin
|
||||||
|
WasAutoScroll := TForm(FCalculator.Parent).AutoScroll;
|
||||||
|
TForm(FCalculator.Parent).AutoScroll := False;
|
||||||
|
end;
|
||||||
|
|
||||||
|
{set 3d to be the same as our own}
|
||||||
|
FCalculator.ParentCtl3D := False;
|
||||||
|
FCalculator.Ctl3D := False;
|
||||||
|
|
||||||
|
{determine the proper position}
|
||||||
|
SystemParametersInfo(SPI_GETWORKAREA, 0, @R, 0);
|
||||||
|
{$IFDEF VERSION4}
|
||||||
|
{$IFNDEF LCL}
|
||||||
|
F := GetParentForm(Self);
|
||||||
|
if Assigned(F) then begin
|
||||||
|
FillChar(MonInfo, SizeOf(MonInfo), #0);
|
||||||
|
MonInfo.cbSize := SizeOf(MonInfo);
|
||||||
|
GetMonitorInfo(F.Monitor.Handle, @MonInfo);
|
||||||
|
R := MonInfo.rcWork;
|
||||||
|
end;
|
||||||
|
{$ENDIF}
|
||||||
|
{$ENDIF}
|
||||||
|
if FPopupAnchor = paLeft then
|
||||||
|
P := ClientToScreen(Point(-3, Height-4))
|
||||||
|
else {paRight}
|
||||||
|
P := ClientToScreen(Point(Width-FCalculator.Width-1, Height-2));
|
||||||
|
if not Ctl3D then begin
|
||||||
|
Inc(P.X, 3);
|
||||||
|
Inc(P.Y, 3);
|
||||||
|
end;
|
||||||
|
if P.Y + FCalculator.Height >= R.Bottom then
|
||||||
|
P.Y := P.Y - FCalculator.Height - Height;
|
||||||
|
if P.X + FCalculator.Width >= R.Right then
|
||||||
|
P.X := R.Right - FCalculator.Width - 1;
|
||||||
|
if P.X <= R.Left then
|
||||||
|
P.X := R.Left + 1;
|
||||||
|
|
||||||
|
{$IFNDEF LCL}
|
||||||
|
MoveWindow(FCalculator.Handle, P.X, P.Y, FCalculator.Width, FCalculator.Height, False);
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
HoldCursor := Cursor;
|
||||||
|
Cursor := crArrow;
|
||||||
|
FCalculator.PressButton(cbClear);
|
||||||
|
FCalculator.Show;
|
||||||
|
FCalculator.Visible := True;
|
||||||
|
if Text <> '' then
|
||||||
|
FCalculator.PushOperand(AsFloat)
|
||||||
|
else
|
||||||
|
FCalculator.PushOperand(0);
|
||||||
|
FCalculator.SetFocus;
|
||||||
|
|
||||||
|
SetCapture(FCalculator.Handle);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TOvcCustomNumberEdit.SetAsFloat(Value : Double);
|
||||||
|
begin
|
||||||
|
Text := FloatToStr(Value);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TOvcCustomNumberEdit.SetAsInteger(Value : LongInt);
|
||||||
|
begin
|
||||||
|
Text := IntToStr(Value);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TOvcCustomNumberEdit.SetAsString(const Value : string);
|
||||||
|
begin
|
||||||
|
Text := Value;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TOvcCustomNumberEdit.SetPopupColors(Value : TOvcCalcColors);
|
||||||
|
begin
|
||||||
|
FCalculator.Colors := Value;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TOvcCustomNumberEdit.SetPopupDecimals(Value : Integer);
|
||||||
|
begin
|
||||||
|
FCalculator.Decimals := Value;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TOvcCustomNumberEdit.SetPopupFont(Value : TFont);
|
||||||
|
begin
|
||||||
|
if Assigned(Value) then
|
||||||
|
FCalculator.Font.Assign(Value);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TOvcCustomNumberEdit.SetPopupHeight(Value : Integer);
|
||||||
|
begin
|
||||||
|
FCalculator.Height := Value;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TOvcCustomNumberEdit.SetPopupWidth(Value : Integer);
|
||||||
|
begin
|
||||||
|
FCalculator.Width := Value;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TOvcCustomNumberEdit.SetReadOnly(Value : Boolean);
|
||||||
|
begin
|
||||||
|
inherited ReadOnly := Value;
|
||||||
|
|
||||||
|
FButton.Enabled := not ReadOnly;
|
||||||
|
end;
|
||||||
|
|
||||||
|
end.
|
418
components/orpheus/ovceditf.pas
Normal file
@ -0,0 +1,418 @@
|
|||||||
|
{*********************************************************}
|
||||||
|
{* OVCEDITF.PAS 4.06 *}
|
||||||
|
{*********************************************************}
|
||||||
|
|
||||||
|
{* ***** BEGIN LICENSE BLOCK ***** *}
|
||||||
|
{* Version: MPL 1.1 *}
|
||||||
|
{* *}
|
||||||
|
{* The contents of this file are subject to the Mozilla Public License *}
|
||||||
|
{* Version 1.1 (the "License"); you may not use this file except in *}
|
||||||
|
{* compliance with the License. You may obtain a copy of the License at *}
|
||||||
|
{* http://www.mozilla.org/MPL/ *}
|
||||||
|
{* *}
|
||||||
|
{* Software distributed under the License is distributed on an "AS IS" basis, *}
|
||||||
|
{* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License *}
|
||||||
|
{* for the specific language governing rights and limitations under the *}
|
||||||
|
{* License. *}
|
||||||
|
{* *}
|
||||||
|
{* The Original Code is TurboPower Orpheus *}
|
||||||
|
{* *}
|
||||||
|
{* The Initial Developer of the Original Code is TurboPower Software *}
|
||||||
|
{* *}
|
||||||
|
{* Portions created by TurboPower Software Inc. are Copyright (C)1995-2002 *}
|
||||||
|
{* TurboPower Software Inc. All Rights Reserved. *}
|
||||||
|
{* *}
|
||||||
|
{* Contributor(s): *}
|
||||||
|
{* *}
|
||||||
|
{* ***** END LICENSE BLOCK ***** *}
|
||||||
|
|
||||||
|
{$I OVC.INC}
|
||||||
|
|
||||||
|
{$B-} {Complete Boolean Evaluation}
|
||||||
|
{$I+} {Input/Output-Checking}
|
||||||
|
{$P+} {Open Parameters}
|
||||||
|
{$T-} {Typed @ Operator}
|
||||||
|
{.W-} {Windows Stack Frame}
|
||||||
|
{$X+} {Extended Syntax}
|
||||||
|
{$J+} {Writable constants}
|
||||||
|
|
||||||
|
unit ovceditf;
|
||||||
|
{-old style base edit field class w/ attached label}
|
||||||
|
{to be deprecated in a future release}
|
||||||
|
|
||||||
|
interface
|
||||||
|
|
||||||
|
uses
|
||||||
|
{$IFNDEF LCL} Windows, Messages, {$ELSE} LclIntf, LMessages, MyMisc, {$ENDIF}
|
||||||
|
Buttons, Classes, Controls, ExtCtrls, Forms, Graphics, Menus,
|
||||||
|
StdCtrls, SysUtils, OvcBase, OvcConst, OvcData, OvcExcpt, OvcVer, OvcMisc;
|
||||||
|
|
||||||
|
type
|
||||||
|
TOvcCustomEdit = class(TCustomEdit)
|
||||||
|
protected {private}
|
||||||
|
{property variables}
|
||||||
|
FController : TOvcController;
|
||||||
|
FLabelInfo : TOvcLabelInfo;
|
||||||
|
{property methods}
|
||||||
|
function GetAbout : string;
|
||||||
|
function GetAttachedLabel : TOvcAttachedLabel;
|
||||||
|
procedure SetAbout(const Value : string);
|
||||||
|
procedure SetController(Value : TOvcController);
|
||||||
|
{internal methods}
|
||||||
|
procedure LabelChange(Sender : TObject);
|
||||||
|
procedure LabelAttach(Sender : TObject; Value : Boolean);
|
||||||
|
procedure PositionLabel;
|
||||||
|
{VCL message methods}
|
||||||
|
procedure CMVisibleChanged(var Msg : TMessage); message CM_VISIBLECHANGED;
|
||||||
|
procedure OrAssignLabel(var Msg : TMessage); message OM_ASSIGNLABEL;
|
||||||
|
procedure OrPositionLabel(var Msg : TMessage); message OM_POSITIONLABEL;
|
||||||
|
procedure OrRecordLabelPosition(var Msg : TMessage);
|
||||||
|
message OM_RECORDLABELPOSITION;
|
||||||
|
protected
|
||||||
|
{descendants can set the value of this variable after calling inherited }
|
||||||
|
{create to set the default location and point-of-reference (POR) for the}
|
||||||
|
{attached label. if dlpTopLeft, the default location and POR will be at }
|
||||||
|
{the top left of the control. if dlpBottomLeft, the default location and}
|
||||||
|
{POR will be at the bottom left}
|
||||||
|
DefaultLabelPosition : TOvcLabelPosition;
|
||||||
|
procedure CreateWnd; override;
|
||||||
|
procedure Notification(AComponent : TComponent; Operation: TOperation);
|
||||||
|
override;
|
||||||
|
function ControllerAssigned : Boolean;
|
||||||
|
property About : string read GetAbout write SetAbout stored False;
|
||||||
|
property LabelInfo : TOvcLabelInfo read FLabelInfo write FLabelInfo;
|
||||||
|
public
|
||||||
|
constructor Create(AOwner : TComponent); override;
|
||||||
|
destructor Destroy; override;
|
||||||
|
procedure SetBounds(ALeft, ATop, AWidth, AHeight: Integer); override;
|
||||||
|
property AttachedLabel : TOvcAttachedLabel read GetAttachedLabel;
|
||||||
|
property Controller : TOvcController read FController write SetController;
|
||||||
|
end;
|
||||||
|
|
||||||
|
TOvcEdit = class(TOvcCustomEdit)
|
||||||
|
published
|
||||||
|
{properties}
|
||||||
|
{$IFDEF VERSION4}
|
||||||
|
property Anchors;
|
||||||
|
{$IFNDEF LCL}
|
||||||
|
property BiDiMode;
|
||||||
|
property ParentBiDiMode;
|
||||||
|
{$ENDIF}
|
||||||
|
property Constraints;
|
||||||
|
property DragKind;
|
||||||
|
{$ENDIF}
|
||||||
|
property About;
|
||||||
|
{$IFNDEF LCL}
|
||||||
|
property AutoSelect;
|
||||||
|
{$ENDIF}
|
||||||
|
property AutoSize;
|
||||||
|
property BorderStyle;
|
||||||
|
property CharCase;
|
||||||
|
property Color;
|
||||||
|
property Controller;
|
||||||
|
property Ctl3D;
|
||||||
|
property Cursor;
|
||||||
|
property DragCursor;
|
||||||
|
property DragMode;
|
||||||
|
property Enabled;
|
||||||
|
property Font;
|
||||||
|
{$IFNDEF LCL}
|
||||||
|
property HideSelection;
|
||||||
|
property ImeMode;
|
||||||
|
property ImeName;
|
||||||
|
{$ENDIF}
|
||||||
|
property LabelInfo;
|
||||||
|
property MaxLength;
|
||||||
|
{$IFNDEF LCL}
|
||||||
|
property OEMConvert;
|
||||||
|
{$ENDIF}
|
||||||
|
property ParentColor;
|
||||||
|
property ParentCtl3D;
|
||||||
|
property ParentFont;
|
||||||
|
property ParentShowHint;
|
||||||
|
property PasswordChar;
|
||||||
|
property PopupMenu;
|
||||||
|
property ReadOnly;
|
||||||
|
property ShowHint;
|
||||||
|
property TabOrder;
|
||||||
|
property TabStop;
|
||||||
|
property Text;
|
||||||
|
property Visible;
|
||||||
|
{events}
|
||||||
|
property OnChange;
|
||||||
|
property OnClick;
|
||||||
|
property OnDblClick;
|
||||||
|
property OnDragDrop;
|
||||||
|
property OnDragOver;
|
||||||
|
{$IFDEF VERSION4}
|
||||||
|
property OnEndDock;
|
||||||
|
property OnStartDock;
|
||||||
|
{$ENDIF}
|
||||||
|
property OnEndDrag;
|
||||||
|
property OnEnter;
|
||||||
|
property OnExit;
|
||||||
|
property OnKeyDown;
|
||||||
|
property OnKeyPress;
|
||||||
|
property OnKeyUp;
|
||||||
|
property OnMouseDown;
|
||||||
|
property OnMouseMove;
|
||||||
|
property OnMouseUp;
|
||||||
|
property OnStartDrag;
|
||||||
|
end;
|
||||||
|
|
||||||
|
implementation
|
||||||
|
|
||||||
|
{===== TOvcCustomEdit ================================================}
|
||||||
|
|
||||||
|
procedure TOvcCustomEdit.CMVisibleChanged(var Msg : TMessage);
|
||||||
|
begin
|
||||||
|
inherited;
|
||||||
|
|
||||||
|
if csLoading in ComponentState then
|
||||||
|
Exit;
|
||||||
|
|
||||||
|
if LabelInfo.Visible then
|
||||||
|
AttachedLabel.Visible := Visible;
|
||||||
|
end;
|
||||||
|
{=====}
|
||||||
|
|
||||||
|
function TOvcCustomEdit.ControllerAssigned : Boolean;
|
||||||
|
begin
|
||||||
|
Result := Assigned(FController);
|
||||||
|
end;
|
||||||
|
{=====}
|
||||||
|
|
||||||
|
constructor TOvcCustomEdit.Create(AOwner : TComponent);
|
||||||
|
begin
|
||||||
|
inherited Create(AOwner);
|
||||||
|
|
||||||
|
ControlStyle := ControlStyle - [csSetCaption];
|
||||||
|
|
||||||
|
{set default position and reference point}
|
||||||
|
DefaultLabelPosition := lpTopLeft;
|
||||||
|
|
||||||
|
FLabelInfo := TOvcLabelInfo.Create;
|
||||||
|
FLabelInfo.OnChange := LabelChange;
|
||||||
|
FLabelInfo.OnAttach := LabelAttach;
|
||||||
|
end;
|
||||||
|
{=====}
|
||||||
|
|
||||||
|
procedure TOvcCustomEdit.CreateWnd;
|
||||||
|
var
|
||||||
|
OurForm : TWinControl;
|
||||||
|
begin
|
||||||
|
OurForm := GetImmediateParentForm(Self);
|
||||||
|
|
||||||
|
{do this only when the component is first dropped on the form, not during loading}
|
||||||
|
if (csDesigning in ComponentState) and not (csLoading in ComponentState) then
|
||||||
|
ResolveController(OurForm, FController);
|
||||||
|
|
||||||
|
if not Assigned(FController) and not (csLoading in ComponentState) then begin
|
||||||
|
{try to find a controller on this form that we can use}
|
||||||
|
FController := FindController(OurForm);
|
||||||
|
|
||||||
|
{if not found and we are not designing, use default controller}
|
||||||
|
if not Assigned(FController) and not (csDesigning in ComponentState) then
|
||||||
|
FController := DefaultController;
|
||||||
|
end;
|
||||||
|
|
||||||
|
inherited CreateWnd;
|
||||||
|
end;
|
||||||
|
{=====}
|
||||||
|
|
||||||
|
destructor TOvcCustomEdit.Destroy;
|
||||||
|
begin
|
||||||
|
{detatch and destroy label, if any}
|
||||||
|
FLabelInfo.Visible := False;
|
||||||
|
|
||||||
|
{destroy label info}
|
||||||
|
FLabelInfo.Free;
|
||||||
|
FLabelInfo := nil;
|
||||||
|
|
||||||
|
inherited Destroy;
|
||||||
|
end;
|
||||||
|
{=====}
|
||||||
|
|
||||||
|
function TOvcCustomEdit.GetAttachedLabel : TOvcAttachedLabel;
|
||||||
|
begin
|
||||||
|
if not FLabelInfo.Visible then
|
||||||
|
raise Exception.Create(GetOrphStr(SCLabelNotAttached));
|
||||||
|
|
||||||
|
Result := FLabelInfo.ALabel;
|
||||||
|
end;
|
||||||
|
{=====}
|
||||||
|
|
||||||
|
function TOvcCustomEdit.GetAbout : string;
|
||||||
|
begin
|
||||||
|
Result := OrVersionStr;
|
||||||
|
end;
|
||||||
|
{=====}
|
||||||
|
|
||||||
|
procedure TOvcCustomEdit.LabelAttach(Sender : TObject; Value : Boolean);
|
||||||
|
var
|
||||||
|
{$IFDEF VERSION5}
|
||||||
|
PF : TWinControl;
|
||||||
|
{$ELSE}
|
||||||
|
PF : TForm;
|
||||||
|
{$ENDIF}
|
||||||
|
S :string;
|
||||||
|
begin
|
||||||
|
if csLoading in ComponentState then
|
||||||
|
Exit;
|
||||||
|
|
||||||
|
{$IFDEF VERSION5}
|
||||||
|
PF := GetImmediateParentForm(Self);
|
||||||
|
{$ELSE}
|
||||||
|
PF := TForm(GetParentForm(Self));
|
||||||
|
{$ENDIF}
|
||||||
|
if Value then begin
|
||||||
|
if Assigned(PF) then begin
|
||||||
|
FLabelInfo.ALabel.Free;
|
||||||
|
FLabelInfo.ALabel := TOvcAttachedLabel.CreateEx(PF, Self);
|
||||||
|
FLabelInfo.ALabel.Parent := Parent;
|
||||||
|
|
||||||
|
S := GenerateComponentName(PF, Name + 'Label');
|
||||||
|
FLabelInfo.ALabel.Name := S;
|
||||||
|
FLabelInfo.ALabel.Caption := S;
|
||||||
|
|
||||||
|
FLabelInfo.SetOffsets(0, 0);
|
||||||
|
PositionLabel;
|
||||||
|
FLabelInfo.ALabel.BringToFront;
|
||||||
|
{turn off auto size}
|
||||||
|
TLabel(FLabelInfo.ALabel).AutoSize := False;
|
||||||
|
end;
|
||||||
|
end else begin
|
||||||
|
if Assigned(PF) then begin
|
||||||
|
FLabelInfo.ALabel.Free;
|
||||||
|
FLabelInfo.ALabel := nil;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
{=====}
|
||||||
|
|
||||||
|
procedure TOvcCustomEdit.LabelChange(Sender : TObject);
|
||||||
|
begin
|
||||||
|
if not (csLoading in ComponentState) then
|
||||||
|
PositionLabel;
|
||||||
|
end;
|
||||||
|
{=====}
|
||||||
|
|
||||||
|
procedure TOvcCustomEdit.Notification(AComponent : TComponent; Operation: TOperation);
|
||||||
|
var
|
||||||
|
{$IFDEF VERSION5}
|
||||||
|
PF : TWinControl;
|
||||||
|
{$ELSE}
|
||||||
|
PF : TForm;
|
||||||
|
{$ENDIF}
|
||||||
|
begin
|
||||||
|
inherited Notification(AComponent, Operation);
|
||||||
|
|
||||||
|
if Operation = opRemove then
|
||||||
|
if Assigned(FLabelInfo) and (AComponent = FLabelInfo.ALabel) then begin
|
||||||
|
{$IFDEF VERSION5}
|
||||||
|
PF := GetImmediateParentForm(Self);
|
||||||
|
{$ELSE}
|
||||||
|
PF := TForm(GetParentForm(Self));
|
||||||
|
{$ENDIF}
|
||||||
|
if Assigned(PF) and not (csDestroying in PF.ComponentState) then begin
|
||||||
|
FLabelInfo.FVisible := False;
|
||||||
|
FLabelInfo.ALabel := nil;
|
||||||
|
end
|
||||||
|
end;
|
||||||
|
|
||||||
|
if (AComponent = FController) and (Operation = opRemove) then
|
||||||
|
FController := nil
|
||||||
|
else if (Operation = opInsert) and (FController = nil) then begin
|
||||||
|
if (AComponent is TOvcController) then
|
||||||
|
FController := TOvcController(AComponent);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
{=====}
|
||||||
|
|
||||||
|
procedure TOvcCustomEdit.OrAssignLabel(var Msg : TMessage);
|
||||||
|
begin
|
||||||
|
FLabelInfo.ALabel := TOvcAttachedLabel(Msg.lParam);
|
||||||
|
end;
|
||||||
|
{=====}
|
||||||
|
|
||||||
|
procedure TOvcCustomEdit.OrPositionLabel(var Msg : TMessage);
|
||||||
|
const
|
||||||
|
DX : Integer = 0;
|
||||||
|
DY : Integer = 0;
|
||||||
|
begin
|
||||||
|
if FLabelInfo.Visible and Assigned(FLabelInfo.ALabel) and
|
||||||
|
(FLabelInfo.ALabel.Parent <> nil) and
|
||||||
|
not (csLoading in ComponentState) then begin
|
||||||
|
if DefaultLabelPosition = lpTopLeft then begin
|
||||||
|
DX := FLabelInfo.ALabel.Left - Left;
|
||||||
|
DY := FLabelInfo.ALabel.Top + FLabelInfo.ALabel.Height - Top;
|
||||||
|
end else begin
|
||||||
|
DX := FLabelInfo.ALabel.Left - Left;
|
||||||
|
DY := FLabelInfo.ALabel.Top - Top - Height;
|
||||||
|
end;
|
||||||
|
if (DX <> FLabelInfo.OffsetX) or (DY <> FLabelInfo.OffsetY) then
|
||||||
|
PositionLabel;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
{=====}
|
||||||
|
|
||||||
|
procedure TOvcCustomEdit.OrRecordLabelPosition(var Msg : TMessage);
|
||||||
|
begin
|
||||||
|
if Assigned(FLabelInfo.ALabel) and (FLabelInfo.ALabel.Parent <> nil) then begin
|
||||||
|
{if the label was cut and then pasted, this will complete the reattachment}
|
||||||
|
FLabelInfo.FVisible := True;
|
||||||
|
|
||||||
|
if DefaultLabelPosition = lpTopLeft then
|
||||||
|
FLabelInfo.SetOffsets(FLabelInfo.ALabel.Left - Left,
|
||||||
|
FLabelInfo.ALabel.Top + FLabelInfo.ALabel.Height - Top)
|
||||||
|
else
|
||||||
|
FLabelInfo.SetOffsets(FLabelInfo.ALabel.Left - Left,
|
||||||
|
FLabelInfo.ALabel.Top - Top - Height);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
{=====}
|
||||||
|
|
||||||
|
procedure TOvcCustomEdit.PositionLabel;
|
||||||
|
begin
|
||||||
|
if FLabelInfo.Visible and Assigned(FLabelInfo.ALabel) and
|
||||||
|
(FLabelInfo.ALabel.Parent <> nil) and
|
||||||
|
not (csLoading in ComponentState) then begin
|
||||||
|
|
||||||
|
if DefaultLabelPosition = lpTopLeft then begin
|
||||||
|
FLabelInfo.ALabel.SetBounds(Left + FLabelInfo.OffsetX,
|
||||||
|
FLabelInfo.OffsetY - FLabelInfo.ALabel.Height + Top,
|
||||||
|
FLabelInfo.ALabel.Width, FLabelInfo.ALabel.Height);
|
||||||
|
end else begin
|
||||||
|
FLabelInfo.ALabel.SetBounds(Left + FLabelInfo.OffsetX,
|
||||||
|
FLabelInfo.OffsetY + Top + Height,
|
||||||
|
FLabelInfo.ALabel.Width, FLabelInfo.ALabel.Height);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
{=====}
|
||||||
|
|
||||||
|
procedure TOvcCustomEdit.SetBounds(ALeft, ATop, AWidth, AHeight : Integer);
|
||||||
|
begin
|
||||||
|
inherited SetBounds(ALeft, ATop, AWidth, AHeight);
|
||||||
|
|
||||||
|
if not HandleAllocated then
|
||||||
|
Exit;
|
||||||
|
|
||||||
|
if HandleAllocated then
|
||||||
|
PostMessage(Handle, OM_POSITIONLABEL, 0, 0);
|
||||||
|
end;
|
||||||
|
{=====}
|
||||||
|
|
||||||
|
procedure TOvcCustomEdit.SetController(Value : TOvcController);
|
||||||
|
begin
|
||||||
|
FController := Value;
|
||||||
|
if Value <> nil then
|
||||||
|
Value.FreeNotification(Self);
|
||||||
|
end;
|
||||||
|
{=====}
|
||||||
|
|
||||||
|
procedure TOvcCustomEdit.SetAbout(const Value : string);
|
||||||
|
begin
|
||||||
|
end;
|
||||||
|
|
||||||
|
end.
|
341
components/orpheus/ovcedpop.pas
Normal file
@ -0,0 +1,341 @@
|
|||||||
|
{*********************************************************}
|
||||||
|
{* OVCEDPOP.PAS 4.06 *}
|
||||||
|
{*********************************************************}
|
||||||
|
|
||||||
|
{* ***** BEGIN LICENSE BLOCK ***** *}
|
||||||
|
{* Version: MPL 1.1 *}
|
||||||
|
{* *}
|
||||||
|
{* The contents of this file are subject to the Mozilla Public License *}
|
||||||
|
{* Version 1.1 (the "License"); you may not use this file except in *}
|
||||||
|
{* compliance with the License. You may obtain a copy of the License at *}
|
||||||
|
{* http://www.mozilla.org/MPL/ *}
|
||||||
|
{* *}
|
||||||
|
{* Software distributed under the License is distributed on an "AS IS" basis, *}
|
||||||
|
{* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License *}
|
||||||
|
{* for the specific language governing rights and limitations under the *}
|
||||||
|
{* License. *}
|
||||||
|
{* *}
|
||||||
|
{* The Original Code is TurboPower Orpheus *}
|
||||||
|
{* *}
|
||||||
|
{* The Initial Developer of the Original Code is TurboPower Software *}
|
||||||
|
{* *}
|
||||||
|
{* Portions created by TurboPower Software Inc. are Copyright (C)1995-2002 *}
|
||||||
|
{* TurboPower Software Inc. All Rights Reserved. *}
|
||||||
|
{* *}
|
||||||
|
{* Contributor(s): *}
|
||||||
|
{* *}
|
||||||
|
{* ***** END LICENSE BLOCK ***** *}
|
||||||
|
|
||||||
|
{$I OVC.INC}
|
||||||
|
|
||||||
|
{$B-} {Complete Boolean Evaluation}
|
||||||
|
{$I+} {Input/Output-Checking}
|
||||||
|
{$P+} {Open Parameters}
|
||||||
|
{$T-} {Typed @ Operator}
|
||||||
|
{.W-} {Windows Stack Frame}
|
||||||
|
{$X+} {Extended Syntax}
|
||||||
|
{$J+} {Writable constants}
|
||||||
|
|
||||||
|
unit ovcedpop;
|
||||||
|
{-base popup edit field class}
|
||||||
|
|
||||||
|
interface
|
||||||
|
|
||||||
|
uses
|
||||||
|
{$IFNDEF LCL} Windows, Messages, {$ELSE} LclIntf, LMessages, LclType, MyMisc, {$ENDIF}
|
||||||
|
Buttons, Classes, Controls, ExtCtrls, Forms, Graphics, Menus,
|
||||||
|
StdCtrls, SysUtils, OvcEditF;
|
||||||
|
|
||||||
|
const
|
||||||
|
MsgClose = WM_USER+100;
|
||||||
|
MsgOpen = WM_USER+101;
|
||||||
|
|
||||||
|
type
|
||||||
|
TOvcEdButton = class(TBitBtn)
|
||||||
|
public
|
||||||
|
procedure Click;
|
||||||
|
override;
|
||||||
|
end;
|
||||||
|
|
||||||
|
TOvcPopupEvent =
|
||||||
|
procedure(Sender : TObject) of object;
|
||||||
|
|
||||||
|
TOvcPopupAnchor = (paLeft, paRight);
|
||||||
|
|
||||||
|
TOvcEdPopup = class(TOvcCustomEdit)
|
||||||
|
protected {private}
|
||||||
|
{property variables}
|
||||||
|
FButton : TOvcEdButton;
|
||||||
|
FButtonGlyph : TBitmap;
|
||||||
|
FPopupActive : Boolean;
|
||||||
|
FPopupAnchor : TOvcPopupAnchor;
|
||||||
|
FOnPopupClose : TOvcPopupEvent;
|
||||||
|
FOnPopupOpen : TOvcPopupEvent;
|
||||||
|
FShowButton : Boolean;
|
||||||
|
|
||||||
|
{property methods}
|
||||||
|
function GetButtonGlyph : TBitmap;
|
||||||
|
procedure SetButtonGlyph(Value : TBitmap);
|
||||||
|
procedure SetShowButton(Value : Boolean);
|
||||||
|
|
||||||
|
{internal methods}
|
||||||
|
function GetButtonWidth : Integer;
|
||||||
|
|
||||||
|
{$IFDEF VERSION4}
|
||||||
|
procedure CMDialogKey(var Msg : TCMDialogKey);
|
||||||
|
message CM_DIALOGKEY;
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
protected
|
||||||
|
procedure CreateParams(var Params : TCreateParams);
|
||||||
|
override;
|
||||||
|
procedure CreateWnd;
|
||||||
|
override;
|
||||||
|
function GetButtonEnabled : Boolean;
|
||||||
|
dynamic;
|
||||||
|
procedure GlyphChanged;
|
||||||
|
dynamic;
|
||||||
|
procedure Loaded;
|
||||||
|
override;
|
||||||
|
|
||||||
|
procedure OnMsgClose(var M : TMessage);
|
||||||
|
message MsgClose;
|
||||||
|
procedure OnMsgOpen(var M : TMessage);
|
||||||
|
message MsgOpen;
|
||||||
|
|
||||||
|
property PopupAnchor : TOvcPopupAnchor
|
||||||
|
read FPopupAnchor write FPopupAnchor;
|
||||||
|
property ShowButton : Boolean
|
||||||
|
read FShowButton write SetShowButton;
|
||||||
|
|
||||||
|
public
|
||||||
|
constructor Create(AOwner : TComponent);
|
||||||
|
override;
|
||||||
|
destructor Destroy;
|
||||||
|
override;
|
||||||
|
procedure SetBounds(ALeft, ATop, AWidth, AHeight: Integer);
|
||||||
|
override;
|
||||||
|
|
||||||
|
property ButtonGlyph : TBitmap
|
||||||
|
read GetButtonGlyph
|
||||||
|
write SetButtonGlyph;
|
||||||
|
|
||||||
|
procedure PopupClose(Sender : TObject);
|
||||||
|
dynamic;
|
||||||
|
procedure PopupOpen;
|
||||||
|
dynamic;
|
||||||
|
|
||||||
|
property OnPopupClose : TOvcPopupEvent
|
||||||
|
read FOnPopupClose
|
||||||
|
write FOnPopupClose;
|
||||||
|
|
||||||
|
property OnPopupOpen : TOvcPopupEvent
|
||||||
|
read FOnPopupOpen
|
||||||
|
write FOnPopupOpen;
|
||||||
|
|
||||||
|
property PopupActive : Boolean
|
||||||
|
read FPopupActive;
|
||||||
|
|
||||||
|
property Controller;
|
||||||
|
end;
|
||||||
|
|
||||||
|
implementation
|
||||||
|
|
||||||
|
{*** TOvcEdButton ***}
|
||||||
|
|
||||||
|
procedure TOvcEdButton.Click;
|
||||||
|
begin
|
||||||
|
TOvcEdPopup(Parent).PopupOpen;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
{*** TOvcEdPopup ***}
|
||||||
|
|
||||||
|
constructor TOvcEdPopup.Create(AOwner : TComponent);
|
||||||
|
begin
|
||||||
|
inherited Create(AOwner);
|
||||||
|
|
||||||
|
ControlStyle := ControlStyle - [csSetCaption];
|
||||||
|
|
||||||
|
FShowButton := True;
|
||||||
|
FButton := TOvcEdButton.Create(Self);
|
||||||
|
FButton.Visible := True;
|
||||||
|
FButton.Parent := Self;
|
||||||
|
FButton.Caption := '';
|
||||||
|
FButton.TabStop := False;
|
||||||
|
{$IFNDEF LCL}
|
||||||
|
FButton.Style := bsNew;
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
FButtonGlyph := TBitmap.Create;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TOvcEdPopup.CreateParams(var Params : TCreateParams);
|
||||||
|
begin
|
||||||
|
inherited CreateParams(Params);
|
||||||
|
|
||||||
|
Params.Style := Params.Style or WS_CLIPCHILDREN;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TOvcEdPopup.CreateWnd;
|
||||||
|
begin
|
||||||
|
inherited CreateWnd;
|
||||||
|
|
||||||
|
{force button placement}
|
||||||
|
SetBounds(Left, Top, Width, Height);
|
||||||
|
|
||||||
|
FButton.Enabled := GetButtonEnabled;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
destructor TOvcEdPopup.Destroy;
|
||||||
|
begin
|
||||||
|
{destroy button}
|
||||||
|
FButton.Free;
|
||||||
|
FButton := nil;
|
||||||
|
|
||||||
|
{destroy button glyph}
|
||||||
|
FButtonGlyph.Free;
|
||||||
|
FButtonGlyph := nil;
|
||||||
|
|
||||||
|
inherited Destroy;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TOvcEdPopup.GetButtonEnabled : Boolean;
|
||||||
|
begin
|
||||||
|
Result := not ReadOnly;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TOvcEdPopup.GetButtonWidth : Integer;
|
||||||
|
begin
|
||||||
|
if FShowButton then begin
|
||||||
|
Result := GetSystemMetrics(SM_CXHSCROLL);
|
||||||
|
if Assigned(FButtonGlyph) and not FButtonGlyph.Empty then
|
||||||
|
if FButtonGlyph.Width + 4 > Result then
|
||||||
|
Result := FButtonGlyph.Width + 4;
|
||||||
|
end else
|
||||||
|
Result := 0;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TOvcEdPopup.GetButtonGlyph : TBitmap;
|
||||||
|
begin
|
||||||
|
if not Assigned(FButtonGlyph) then
|
||||||
|
FButtonGlyph := TBitmap.Create;
|
||||||
|
|
||||||
|
Result := FButtonGlyph
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TOvcEdPopup.GlyphChanged;
|
||||||
|
begin
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TOvcEdPopup.Loaded;
|
||||||
|
begin
|
||||||
|
inherited Loaded;
|
||||||
|
|
||||||
|
if Assigned(FButtonGlyph) then
|
||||||
|
FButton.Glyph.Assign(FButtonGlyph);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TOvcEdPopup.OnMsgClose(var M : TMessage);
|
||||||
|
begin
|
||||||
|
if (Assigned(FOnPopupClose)) then
|
||||||
|
FOnPopupClose(Self);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TOvcEdPopup.OnMsgOpen(var M : TMessage);
|
||||||
|
begin
|
||||||
|
if (Assigned(FOnPopupOpen)) then
|
||||||
|
FOnPopupOpen(Self);
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
procedure TOvcEdPopup.PopupClose;
|
||||||
|
begin
|
||||||
|
FPopupActive := False;
|
||||||
|
PostMessage(Handle, MsgClose, 0, 0);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TOvcEdPopup.PopupOpen;
|
||||||
|
begin
|
||||||
|
FPopupActive := True;
|
||||||
|
PostMessage(Handle, MsgOpen, 0, 0);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TOvcEdPopup.SetBounds(ALeft, ATop, AWidth, AHeight : Integer);
|
||||||
|
var
|
||||||
|
H : Integer;
|
||||||
|
begin
|
||||||
|
inherited SetBounds(ALeft, ATop, AWidth, AHeight);
|
||||||
|
|
||||||
|
if not HandleAllocated then
|
||||||
|
Exit;
|
||||||
|
|
||||||
|
if not FShowButton then begin
|
||||||
|
FButton.Height := 0;
|
||||||
|
FButton.Width := 0;
|
||||||
|
Exit;
|
||||||
|
end;
|
||||||
|
|
||||||
|
H := ClientHeight;
|
||||||
|
if BorderStyle = bsNone then begin
|
||||||
|
FButton.Height := H;
|
||||||
|
FButton.Width := GetButtonWidth;
|
||||||
|
FButton.Left := Width - FButton.Width;
|
||||||
|
FButton.Top := 0;
|
||||||
|
end else if Ctl3D then begin
|
||||||
|
FButton.Height := H;
|
||||||
|
FButton.Width := GetButtonWidth;
|
||||||
|
FButton.Left := Width - FButton.Width - 4;
|
||||||
|
FButton.Top := 0;
|
||||||
|
end else begin
|
||||||
|
FButton.Height := H - 2;
|
||||||
|
FButton.Width := GetButtonWidth;
|
||||||
|
FButton.Left := Width - FButton.Width - 1;
|
||||||
|
FButton.Top := 1;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TOvcEdPopup.SetButtonGlyph(Value : TBitmap);
|
||||||
|
begin
|
||||||
|
if not Assigned(FButtonGlyph) then
|
||||||
|
FButtonGlyph := TBitmap.Create;
|
||||||
|
|
||||||
|
if not Assigned(Value) then begin
|
||||||
|
FButtonGlyph.Free;
|
||||||
|
FButtonGlyph := TBitmap.Create;
|
||||||
|
end else
|
||||||
|
FButtonGlyph.Assign(Value);
|
||||||
|
|
||||||
|
GlyphChanged;
|
||||||
|
|
||||||
|
FButton.Glyph.Assign(FButtonGlyph);
|
||||||
|
SetBounds(Left, Top, Width, Height);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TOvcEdPopup.SetShowButton(Value : Boolean);
|
||||||
|
begin
|
||||||
|
if Value <> FShowButton then begin
|
||||||
|
FShowButton := Value;
|
||||||
|
{force resize and redisplay of button}
|
||||||
|
SetBounds(Left, Top, Width, Height);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
{$IFDEF VERSION4}
|
||||||
|
procedure TOvcEdPopup.CMDialogKey(var Msg : TCMDialogKey);
|
||||||
|
begin
|
||||||
|
if PopupActive then begin
|
||||||
|
with Msg do begin
|
||||||
|
if ((CharCode = VK_RETURN) or (CHarCode = VK_ESCAPE)) then begin
|
||||||
|
PopupClose(Self);
|
||||||
|
Result := 1;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end else
|
||||||
|
inherited;
|
||||||
|
end;
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
|
||||||
|
end.
|
706
components/orpheus/ovcedtim.pas
Normal file
@ -0,0 +1,706 @@
|
|||||||
|
{*********************************************************}
|
||||||
|
{* OVCEDTIM.PAS 4.06 *}
|
||||||
|
{*********************************************************}
|
||||||
|
|
||||||
|
{* ***** BEGIN LICENSE BLOCK ***** *}
|
||||||
|
{* Version: MPL 1.1 *}
|
||||||
|
{* *}
|
||||||
|
{* The contents of this file are subject to the Mozilla Public License *}
|
||||||
|
{* Version 1.1 (the "License"); you may not use this file except in *}
|
||||||
|
{* compliance with the License. You may obtain a copy of the License at *}
|
||||||
|
{* http://www.mozilla.org/MPL/ *}
|
||||||
|
{* *}
|
||||||
|
{* Software distributed under the License is distributed on an "AS IS" basis, *}
|
||||||
|
{* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License *}
|
||||||
|
{* for the specific language governing rights and limitations under the *}
|
||||||
|
{* License. *}
|
||||||
|
{* *}
|
||||||
|
{* The Original Code is TurboPower Orpheus *}
|
||||||
|
{* *}
|
||||||
|
{* The Initial Developer of the Original Code is TurboPower Software *}
|
||||||
|
{* *}
|
||||||
|
{* Portions created by TurboPower Software Inc. are Copyright (C)1995-2002 *}
|
||||||
|
{* TurboPower Software Inc. All Rights Reserved. *}
|
||||||
|
{* *}
|
||||||
|
{* Contributor(s): *}
|
||||||
|
{* *}
|
||||||
|
{* ***** END LICENSE BLOCK ***** *}
|
||||||
|
|
||||||
|
{$I OVC.INC}
|
||||||
|
|
||||||
|
{$B-} {Complete Boolean Evaluation}
|
||||||
|
{$I+} {Input/Output-Checking}
|
||||||
|
{$P+} {Open Parameters}
|
||||||
|
{$T-} {Typed @ Operator}
|
||||||
|
{.W-} {Windows Stack Frame}
|
||||||
|
{$X+} {Extended Syntax}
|
||||||
|
|
||||||
|
unit ovcedtim;
|
||||||
|
{-time edit field}
|
||||||
|
|
||||||
|
interface
|
||||||
|
|
||||||
|
uses
|
||||||
|
{$IFNDEF LCL} Windows, Messages, {$ELSE} LclIntf, LMessages, LclType, MyMisc, {$ENDIF}
|
||||||
|
Buttons, Classes, Controls, Forms, Graphics, Menus,
|
||||||
|
StdCtrls, SysUtils, OvcConst, OvcData, OvcExcpt, OvcIntl, OvcMisc,
|
||||||
|
OvcEditF, OvcDate;
|
||||||
|
|
||||||
|
type
|
||||||
|
TOvcTimeField = (tfHours, tfMinutes, tfSeconds);
|
||||||
|
TOvcTimeMode = (tmClock, tmDuration);
|
||||||
|
TOvcDurationDisplay = (ddHMS, ddHM, ddMS, ddHHH, ddMMM, ddSSS);
|
||||||
|
|
||||||
|
TOvcGetTimeEvent = procedure(Sender : TObject; var Value : string)
|
||||||
|
of object;
|
||||||
|
TOvcPreParseTimeEvent = procedure(Sender : TObject; var Value : string)
|
||||||
|
of object;
|
||||||
|
|
||||||
|
TOvcCustomTimeEdit = class(TOvcCustomEdit)
|
||||||
|
{.Z+}
|
||||||
|
protected {private}
|
||||||
|
{property variables}
|
||||||
|
FDurationDisplay : TOvcDurationDisplay;
|
||||||
|
FNowString : string;
|
||||||
|
FDefaultToPM : Boolean;
|
||||||
|
FPrimaryField : TOvcTimeField;
|
||||||
|
FShowSeconds : Boolean;
|
||||||
|
FShowUnits : Boolean;
|
||||||
|
FTime : TDateTime;
|
||||||
|
FTimeMode : TOvcTimeMode;
|
||||||
|
FUnitsLength : Integer;
|
||||||
|
|
||||||
|
{event variables}
|
||||||
|
FOnGetTime : TOvcGetTimeEvent;
|
||||||
|
FOnPreParseTime : TOvcPreParseTimeEvent;
|
||||||
|
FOnSetTime : TNotifyEvent;
|
||||||
|
|
||||||
|
{property methods}
|
||||||
|
function GetAsHours : LongInt;
|
||||||
|
function GetAsMinutes : LongInt;
|
||||||
|
function GetAsSeconds : LongInt;
|
||||||
|
function GetTime : TDateTime;
|
||||||
|
procedure SetAsHours(Value : LongInt);
|
||||||
|
procedure SetAsMinutes(Value : LongInt);
|
||||||
|
procedure SetAsSeconds(Value : LongInt);
|
||||||
|
procedure SetDurationDisplay(Value : TOvcDurationDisplay);
|
||||||
|
procedure SetShowSeconds(Value : Boolean);
|
||||||
|
procedure SetShowUnits(Value : Boolean);
|
||||||
|
procedure SetTimeMode(Value : TOvcTimeMode);
|
||||||
|
procedure SetUnitsLength(Value : Integer);
|
||||||
|
|
||||||
|
{internal methods}
|
||||||
|
procedure ParseFields(const Value : string; S : TStringList);
|
||||||
|
|
||||||
|
protected
|
||||||
|
procedure DoExit;
|
||||||
|
override;
|
||||||
|
procedure SetTime(Value : TDateTime);
|
||||||
|
procedure SetTimeText(Value : string);
|
||||||
|
dynamic;
|
||||||
|
{.Z-}
|
||||||
|
|
||||||
|
{protected properties}
|
||||||
|
property DefaultToPM : Boolean
|
||||||
|
read FDefaultToPM write FDefaultToPM;
|
||||||
|
property DurationDisplay : TOvcDurationDisplay
|
||||||
|
read FDurationDisplay write SetDurationDisplay;
|
||||||
|
property NowString : string
|
||||||
|
read FNowString write FNowString;
|
||||||
|
property PrimaryField : TOvcTimeField
|
||||||
|
read FPrimaryField write FPrimaryField;
|
||||||
|
property ShowSeconds : Boolean
|
||||||
|
read FShowSeconds write SetShowSeconds;
|
||||||
|
property ShowUnits : Boolean
|
||||||
|
read FShowUnits write SetShowUnits;
|
||||||
|
property TimeMode : TOvcTimeMode
|
||||||
|
read FTimeMode write SetTimeMode;
|
||||||
|
property UnitsLength : Integer
|
||||||
|
read FUnitsLength write SetUnitsLength;
|
||||||
|
|
||||||
|
{protected events}
|
||||||
|
property OnGetTime : TOvcGetTimeEvent
|
||||||
|
read FOnGetTime write FOnGetTime;
|
||||||
|
property OnPreParseTime : TOvcPreParseTimeEvent
|
||||||
|
read FOnPreParseTime write FOnPreParseTime;
|
||||||
|
property OnSetTime : TNotifyEvent
|
||||||
|
read FOnSetTime write FOnSetTime;
|
||||||
|
|
||||||
|
public
|
||||||
|
{.Z+}
|
||||||
|
constructor Create(AOwner : TComponent);
|
||||||
|
override;
|
||||||
|
{.Z-}
|
||||||
|
|
||||||
|
function FormatTime(Value : TDateTime) : string;
|
||||||
|
dynamic;
|
||||||
|
|
||||||
|
{public properties}
|
||||||
|
property AsDateTime : TDateTime
|
||||||
|
read GetTime write SetTime;
|
||||||
|
property AsHours : LongInt
|
||||||
|
read GetAsHours write SetAsHours;
|
||||||
|
property AsMinutes : LongInt
|
||||||
|
read GetAsMinutes write SetAsMinutes;
|
||||||
|
property AsSeconds : LongInt
|
||||||
|
read GetAsSeconds write SetAsSeconds;
|
||||||
|
end;
|
||||||
|
|
||||||
|
TOvcTimeEdit = class(TOvcCustomTimeEdit)
|
||||||
|
published
|
||||||
|
{properties}
|
||||||
|
{$IFDEF VERSION4}
|
||||||
|
property Anchors;
|
||||||
|
property Constraints;
|
||||||
|
property DragKind;
|
||||||
|
{$ENDIF}
|
||||||
|
property About;
|
||||||
|
{$IFNDEF LCL}
|
||||||
|
property AutoSelect;
|
||||||
|
{$ENDIF}
|
||||||
|
property AutoSize;
|
||||||
|
property BorderStyle;
|
||||||
|
property CharCase;
|
||||||
|
property Color;
|
||||||
|
property Controller;
|
||||||
|
property Ctl3D;
|
||||||
|
property Cursor;
|
||||||
|
property DefaultToPM;
|
||||||
|
property DragCursor;
|
||||||
|
property DragMode;
|
||||||
|
property DurationDisplay;
|
||||||
|
property Enabled;
|
||||||
|
property Font;
|
||||||
|
{$IFNDEF LCL}
|
||||||
|
property HideSelection;
|
||||||
|
property ImeMode;
|
||||||
|
property ImeName;
|
||||||
|
{$ENDIF}
|
||||||
|
property LabelInfo;
|
||||||
|
property MaxLength;
|
||||||
|
property NowString;
|
||||||
|
{$IFNDEF LCL}
|
||||||
|
property OEMConvert;
|
||||||
|
{$IFDEF VERSION4}
|
||||||
|
property ParentBiDiMode;
|
||||||
|
{$ENDIF}
|
||||||
|
{$ENDIF}
|
||||||
|
property ParentColor;
|
||||||
|
property ParentCtl3D;
|
||||||
|
property ParentFont;
|
||||||
|
property ParentShowHint;
|
||||||
|
property PopupMenu;
|
||||||
|
property PrimaryField;
|
||||||
|
property ReadOnly;
|
||||||
|
property ShowHint;
|
||||||
|
property ShowSeconds;
|
||||||
|
property ShowUnits;
|
||||||
|
property TabOrder;
|
||||||
|
property TabStop;
|
||||||
|
property TimeMode;
|
||||||
|
property UnitsLength;
|
||||||
|
property Visible;
|
||||||
|
|
||||||
|
{inherited events}
|
||||||
|
property OnChange;
|
||||||
|
property OnClick;
|
||||||
|
property OnDblClick;
|
||||||
|
property OnDragDrop;
|
||||||
|
property OnDragOver;
|
||||||
|
{$IFDEF VERSION4}
|
||||||
|
property OnEndDock;
|
||||||
|
{$ENDIF}
|
||||||
|
property OnEndDrag;
|
||||||
|
property OnEnter;
|
||||||
|
property OnExit;
|
||||||
|
property OnGetTime;
|
||||||
|
property OnKeyDown;
|
||||||
|
property OnKeyPress;
|
||||||
|
property OnKeyUp;
|
||||||
|
property OnMouseDown;
|
||||||
|
property OnMouseMove;
|
||||||
|
property OnMouseUp;
|
||||||
|
property OnPreParseTime;
|
||||||
|
property OnSetTime;
|
||||||
|
property OnStartDrag;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
implementation
|
||||||
|
|
||||||
|
|
||||||
|
procedure DateTimeToHMS(D : TDateTime; var H, M, S : LongInt);
|
||||||
|
var
|
||||||
|
HS, Days : Double;
|
||||||
|
begin
|
||||||
|
HS := 1 / 86400 / 2; {half second portion of a day}
|
||||||
|
Days := Trunc(D);
|
||||||
|
D := (D-Days) * 24;
|
||||||
|
H := Trunc(D + HS);
|
||||||
|
D := (D - H) * 60;
|
||||||
|
M := Trunc(D + HS);
|
||||||
|
S := Trunc((D - M + HS) * 60);
|
||||||
|
H := Trunc(H + Days * 24);
|
||||||
|
end;
|
||||||
|
|
||||||
|
function HMSToDateTime(H, M, S : LongInt) : TDateTime;
|
||||||
|
var
|
||||||
|
HID, MID, SID : Double;
|
||||||
|
begin
|
||||||
|
HID := 24;
|
||||||
|
MID := 24*60;
|
||||||
|
SID := 24*60*60;
|
||||||
|
Result := H / HID + M / MID + S / SID;
|
||||||
|
end;
|
||||||
|
|
||||||
|
{*** TOvcCustomTimeEdit ***}
|
||||||
|
|
||||||
|
constructor TOvcCustomTimeEdit.Create(AOwner : TComponent);
|
||||||
|
begin
|
||||||
|
inherited Create(AOwner);
|
||||||
|
|
||||||
|
ControlStyle := ControlStyle - [csSetCaption];
|
||||||
|
|
||||||
|
FDurationDisplay := ddHMS;
|
||||||
|
FPrimaryField := tfHours;
|
||||||
|
FNowString := TimeSeparator;
|
||||||
|
FShowSeconds := False;
|
||||||
|
FTime := SysUtils.Time;
|
||||||
|
FTimeMode := tmClock;
|
||||||
|
FUnitsLength := 1;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TOvcCustomTimeEdit.DoExit;
|
||||||
|
begin
|
||||||
|
try
|
||||||
|
SetTimeText(Text);
|
||||||
|
except
|
||||||
|
SetFocus;
|
||||||
|
raise;
|
||||||
|
end;
|
||||||
|
inherited DoExit;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TOvcCustomTimeEdit.FormatTime(Value : TDateTime) : string;
|
||||||
|
var
|
||||||
|
H, M, S : LongInt;
|
||||||
|
TimeMask : string;
|
||||||
|
begin
|
||||||
|
TimeMask := OvcIntlSup.InternationalTime(FShowSeconds);
|
||||||
|
|
||||||
|
if FTimeMode = tmClock then
|
||||||
|
Result := OvcIntlSup.TimeToTimeString(TimeMask, DateTimeToSTTime(Value), False)
|
||||||
|
else begin
|
||||||
|
DateTimeToHMS(Value, H, M, S);
|
||||||
|
if FShowUnits then begin
|
||||||
|
case FDurationDisplay of
|
||||||
|
ddHMS : Result :=
|
||||||
|
IntToStr(H) + ' ' + Copy(GetOrphStr(SCHoursName), 1, FUnitsLength) + ' ' +
|
||||||
|
InttoStr(M) + ' ' + Copy(GetOrphStr(SCMinutesName), 1, FUnitsLength) + ' ' +
|
||||||
|
InttoStr(S) + ' ' + Copy(GetOrphStr(SCSecondsName), 1, FUnitsLength);
|
||||||
|
ddHM : Result :=
|
||||||
|
IntToStr(H) + ' ' + Copy(GetOrphStr(SCHoursName), 1, FUnitsLength) + ' ' +
|
||||||
|
InttoStr(M) + ' ' + Copy(GetOrphStr(SCMinutesName), 1, FUnitsLength);
|
||||||
|
ddMS : Result :=
|
||||||
|
InttoStr(H*60+M) + ' ' + Copy(GetOrphStr(SCMinutesName), 1, FUnitsLength) + ' ' +
|
||||||
|
InttoStr(S) + ' ' + Copy(GetOrphStr(SCSecondsName), 1, FUnitsLength);
|
||||||
|
ddHHH : Result :=
|
||||||
|
IntToStr(H) + ' ' + Copy(GetOrphStr(SCHoursName), 1, FUnitsLength);
|
||||||
|
ddMMM : Result :=
|
||||||
|
InttoStr(H*60+M) + ' ' + Copy(GetOrphStr(SCMinutesName), 1, FUnitsLength);
|
||||||
|
ddSSS : Result :=
|
||||||
|
InttoStr((H*60+M)*60+S) + ' ' + Copy(GetOrphStr(SCSecondsName), 1, FUnitsLength);
|
||||||
|
end;
|
||||||
|
end else begin
|
||||||
|
case FDurationDisplay of
|
||||||
|
ddHMS : Result := IntToStr(H) + TimeSeparator + InttoStr(M) + TimeSeparator + InttoStr(S);
|
||||||
|
ddHM : Result := IntToStr(H) + TimeSeparator + InttoStr(M);
|
||||||
|
ddMS : Result := IntToStr(H*60+M) + TimeSeparator + InttoStr(S);
|
||||||
|
ddHHH : Result := IntToStr(H);
|
||||||
|
ddMMM : Result := IntToStr(H*60+M);
|
||||||
|
ddSSS : Result := IntToStr((H*60+M)*60+S);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TOvcCustomTimeEdit.GetAsHours : LongInt;
|
||||||
|
var
|
||||||
|
H, M, S : LongInt;
|
||||||
|
begin
|
||||||
|
DateTimeToHMS(FTime, H, M, S);
|
||||||
|
Result := H;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TOvcCustomTimeEdit.GetAsMinutes : LongInt;
|
||||||
|
var
|
||||||
|
H, M, S : LongInt;
|
||||||
|
begin
|
||||||
|
DateTimeToHMS(FTime, H, M, S);
|
||||||
|
Result := H*60+M;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TOvcCustomTimeEdit.GetAsSeconds : LongInt;
|
||||||
|
var
|
||||||
|
H, M, S : LongInt;
|
||||||
|
begin
|
||||||
|
DateTimeToHMS(FTime, H, M, S);
|
||||||
|
Result := (H*60+M)*60+S;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TOvcCustomTimeEdit.GetTime : TDateTime;
|
||||||
|
begin
|
||||||
|
SetTimeText(Text);
|
||||||
|
Result := FTime;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TOvcCustomTimeEdit.SetAsHours(Value : LongInt);
|
||||||
|
var
|
||||||
|
D, H : Integer;
|
||||||
|
begin
|
||||||
|
H := Value;
|
||||||
|
D := H div 24;
|
||||||
|
H := H - D * 24;
|
||||||
|
SetTime(D + EncodeTime(H, 0, 0, 0));
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TOvcCustomTimeEdit.SetAsMinutes(Value : LongInt);
|
||||||
|
var
|
||||||
|
D, H, M : Integer;
|
||||||
|
begin
|
||||||
|
M := Value;
|
||||||
|
D := M div (24 * 60);
|
||||||
|
M := M - D * (24 * 60);
|
||||||
|
H := M div 60;
|
||||||
|
M := M - H * 60;
|
||||||
|
SetTime(D + EncodeTime(H, M, 0, 0));
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TOvcCustomTimeEdit.SetAsSeconds(Value : LongInt);
|
||||||
|
var
|
||||||
|
D, H, M, S : Integer;
|
||||||
|
begin
|
||||||
|
S := Value;
|
||||||
|
D := S div (24 * 60 * 60);
|
||||||
|
S := S - D * (24 * 60 * 60);
|
||||||
|
H := S div (60 * 60);
|
||||||
|
S := S - H * (60 * 60);
|
||||||
|
M := S div 60;
|
||||||
|
S := S - M * 60;
|
||||||
|
SetTime(D + EncodeTime(H, M, S, 0));
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TOvcCustomTimeEdit.SetDurationDisplay(Value : TOvcDurationDisplay);
|
||||||
|
begin
|
||||||
|
if Value <> FDurationDisplay then begin
|
||||||
|
FDurationDisplay := Value;
|
||||||
|
if not (csLoading in ComponentState) then
|
||||||
|
SetTime(FTime); {force redisplay with current options}
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TOvcCustomTimeEdit.SetShowSeconds(Value : Boolean);
|
||||||
|
begin
|
||||||
|
if Value <> FShowSeconds then begin
|
||||||
|
FShowSeconds := Value;
|
||||||
|
if not (csLoading in ComponentState) then
|
||||||
|
SetTime(FTime); {force redisplay with current options}
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TOvcCustomTimeEdit.SetShowUnits(Value : Boolean);
|
||||||
|
begin
|
||||||
|
if Value <> FShowUnits then begin
|
||||||
|
FShowUnits := Value;
|
||||||
|
if not (csLoading in ComponentState) then
|
||||||
|
SetTime(FTime); {force redisplay with current options}
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TOvcCustomTimeEdit.SetTime(Value : TDateTime);
|
||||||
|
begin
|
||||||
|
FTime := Value;
|
||||||
|
Modified := True;
|
||||||
|
|
||||||
|
if FTime < 0 then
|
||||||
|
Text := ''
|
||||||
|
else
|
||||||
|
Text := FormatTime(FTime);
|
||||||
|
|
||||||
|
if Assigned(FOnSetTime) then
|
||||||
|
FOnSetTime(Self);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TOvcCustomTimeEdit.SetTimeMode(Value : TOvcTimeMode);
|
||||||
|
begin
|
||||||
|
if Value <> FTimeMode then begin
|
||||||
|
FTimeMode := Value;
|
||||||
|
if not (csLoading in ComponentState) then
|
||||||
|
SetTime(FTime); {force redisplay with current options}
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TOvcCustomTimeEdit.ParseFields(const Value : string; S : TStringList);
|
||||||
|
var
|
||||||
|
I : Integer;
|
||||||
|
I1 : Integer;
|
||||||
|
I2 : Integer;
|
||||||
|
T : string;
|
||||||
|
begin
|
||||||
|
{parse the string into subfields using a string list to hold the parts}
|
||||||
|
I1 := 1;
|
||||||
|
while (I1 <= Length(Value)) and not (Value[I1] in ['0'..'9', 'A'..'Z']) do
|
||||||
|
Inc(I1);
|
||||||
|
while I1 <= Length(Value) do begin
|
||||||
|
I2 := I1;
|
||||||
|
while (I2 <= Length(Value)) and (Value[I2] in ['0'..'9', 'A'..'Z']) do
|
||||||
|
Inc(I2);
|
||||||
|
|
||||||
|
T := Copy(Value, I1, I2-I1);
|
||||||
|
{if this is a combination of numbers and letters without sperators}
|
||||||
|
{representing multiple fields, split them up}
|
||||||
|
while Length(T) > 0 do begin
|
||||||
|
I := 1;
|
||||||
|
case T[1] of
|
||||||
|
'A'..'Z' : while T[I] in ['A'..'Z'] do Inc(I);
|
||||||
|
'0'..'9' : while T[I] in ['0'..'9'] do Inc(I);
|
||||||
|
end;
|
||||||
|
S.Add(Copy(T, 1, I-1));
|
||||||
|
Delete(T, 1, I-1);
|
||||||
|
end;
|
||||||
|
|
||||||
|
while (I2 <= Length(Value)) and not (Value[I2] in ['0'..'9', 'A'..'Z']) do
|
||||||
|
Inc(I2);
|
||||||
|
I1 := I2;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TOvcCustomTimeEdit.SetTimeText(Value : string);
|
||||||
|
var
|
||||||
|
Field : Integer;
|
||||||
|
Error : Integer;
|
||||||
|
Hours : Integer;
|
||||||
|
Minutes : Integer;
|
||||||
|
Seconds : Integer;
|
||||||
|
FieldList : TStringList;
|
||||||
|
S : string;
|
||||||
|
FieldCount : Integer;
|
||||||
|
Am, Pm, AmPm : string[1];
|
||||||
|
FoundUnits : Boolean;
|
||||||
|
V : Integer;
|
||||||
|
begin
|
||||||
|
if Assigned(FOnPreParseTime) then
|
||||||
|
FOnPreParseTime(Self, Value);
|
||||||
|
|
||||||
|
if Assigned(FOnGetTime) then
|
||||||
|
FOnGetTime(Self, Value);
|
||||||
|
|
||||||
|
if (Value = '') then begin
|
||||||
|
FTime := 0;
|
||||||
|
Text := '';
|
||||||
|
Exit;
|
||||||
|
end;
|
||||||
|
|
||||||
|
if AnsiCompareText(Value, NowString) = 0 then begin
|
||||||
|
SetTime(SysUtils.Time);
|
||||||
|
Text := FormatTime(FTime);
|
||||||
|
end else begin
|
||||||
|
Value := AnsiUpperCase(Value);
|
||||||
|
FieldList := TStringList.Create;
|
||||||
|
try
|
||||||
|
{break entry into fields}
|
||||||
|
ParseFields(Value, FieldList);
|
||||||
|
|
||||||
|
Hours := -1;
|
||||||
|
Minutes := -1;
|
||||||
|
Seconds := -1;
|
||||||
|
if FTimeMode = tmDuration then begin
|
||||||
|
{if a single field entered, assume primary field}
|
||||||
|
if FieldList.Count = 1 then begin
|
||||||
|
case FPrimaryField of
|
||||||
|
tfHours : Hours := StrToIntDef(FieldList[0], -1);
|
||||||
|
tfMinutes : Minutes := StrToIntDef(FieldList[0], -1);
|
||||||
|
tfSeconds : Seconds := StrToIntDef(FieldList[0], -1);
|
||||||
|
end;
|
||||||
|
end else begin
|
||||||
|
FieldCount := FieldList.Count;
|
||||||
|
FoundUnits := False;
|
||||||
|
for Field := 1 to FieldCount do begin
|
||||||
|
if FoundUnits then begin
|
||||||
|
FoundUnits := False;
|
||||||
|
Continue; {skip this field - it is a unit field}
|
||||||
|
end;
|
||||||
|
S := FieldList[Field-1];
|
||||||
|
V := StrToIntDef(S, -1);
|
||||||
|
{if more fields, see if next field is units for this one}
|
||||||
|
if Field < FieldCount then begin
|
||||||
|
S := FieldList[Field]; {get next field value}
|
||||||
|
if not (S[1] in ['0'..'9']) then begin
|
||||||
|
if PartialCompare(S, GetOrphStr(SCHoursName)) then begin
|
||||||
|
Hours := V;
|
||||||
|
FoundUnits := True;
|
||||||
|
end else if PartialCompare(S, GetOrphStr(SCMinutesName)) then begin
|
||||||
|
Minutes := V;
|
||||||
|
FoundUnits := True;
|
||||||
|
end else if PartialCompare(S, GetOrphStr(SCSecondsName)) then begin
|
||||||
|
Seconds := V;
|
||||||
|
FoundUnits := True;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
{uses "logical" units for the time field based on prior fields}
|
||||||
|
if not FoundUnits then begin
|
||||||
|
if Hours = -1 then
|
||||||
|
Hours := V
|
||||||
|
else if Minutes = -1 then
|
||||||
|
Minutes := V
|
||||||
|
else if Seconds = -1 then
|
||||||
|
Seconds := V;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
{if a value assigned, set time and exit}
|
||||||
|
if (Hours > -1) or (Minutes > -1) or (Seconds > -1) then begin
|
||||||
|
if Hours = -1 then
|
||||||
|
Hours := 0;
|
||||||
|
if Minutes = -1 then
|
||||||
|
Minutes := 0;
|
||||||
|
if Seconds = -1 then
|
||||||
|
Seconds := 0;
|
||||||
|
SetTime(HMSToDateTime(Hours, Minutes, Seconds));
|
||||||
|
Exit;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
{handle as "normal" time -- "hh:mm:ss tt" format or variations}
|
||||||
|
Hours := 0;
|
||||||
|
Minutes := 0;
|
||||||
|
Seconds := 0;
|
||||||
|
Error := 0;
|
||||||
|
|
||||||
|
{set default am/pm}
|
||||||
|
{in case user has deleted these window settings}
|
||||||
|
if (TimeAmString > '') and (TimePmString > '') then begin
|
||||||
|
Am := AnsiUpperCase(TimeAmString[1]);
|
||||||
|
Pm := AnsiUpperCase(TimePmString[1]);
|
||||||
|
end else begin
|
||||||
|
Am := 'A';
|
||||||
|
Pm := 'P'
|
||||||
|
end;
|
||||||
|
if FDefaultToPM then
|
||||||
|
AmPm := Pm
|
||||||
|
else
|
||||||
|
AmPm := Am;
|
||||||
|
|
||||||
|
{see if we're using a 24 hour time format}
|
||||||
|
if (Pos(Am, ShortTimeFormat) = 0) and
|
||||||
|
(Pos(Pm, ShortTimeFormat) = 0) then
|
||||||
|
AmPm := '';
|
||||||
|
|
||||||
|
FieldCount := FieldList.Count;
|
||||||
|
for Field := FieldCount-1 downto 0 do begin
|
||||||
|
S := AnsiUpperCase(FieldList[Field]);
|
||||||
|
if Pos(Am, S) > 0 then begin
|
||||||
|
AmPm := Am;
|
||||||
|
FieldList.Delete(Field);
|
||||||
|
Continue;
|
||||||
|
end;
|
||||||
|
if Pos(Pm, S) > 0 then begin
|
||||||
|
AmPm := Pm;
|
||||||
|
FieldList.Delete(Field);
|
||||||
|
Continue;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
FieldCount := FieldList.Count;
|
||||||
|
for Field := 1 to FieldCount do begin
|
||||||
|
S := FieldList[Field-1];
|
||||||
|
case Field of
|
||||||
|
1 :
|
||||||
|
begin
|
||||||
|
if (S = '') or (S[1] in ['0'..'9']) then begin
|
||||||
|
V := StrToIntDef(S, 0);
|
||||||
|
if FTimeMode = tmDuration then begin
|
||||||
|
case FPrimaryField of
|
||||||
|
tfHours : Hours := V;
|
||||||
|
tfMinutes : Minutes := V;
|
||||||
|
tfSeconds : Seconds := V;
|
||||||
|
end;
|
||||||
|
end else begin
|
||||||
|
Hours := V;
|
||||||
|
if (Hours < 12) and (AmPm = Pm) then
|
||||||
|
Inc(Hours, 12);
|
||||||
|
if not (Hours in [0..23]) then
|
||||||
|
Error := SCTimeConvertError;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
if Error > 0 then
|
||||||
|
Break;
|
||||||
|
end;
|
||||||
|
2 :
|
||||||
|
begin
|
||||||
|
if (S = '') or (S[1] in ['0'..'9']) then begin
|
||||||
|
V := StrToIntDef(S, 0);
|
||||||
|
if FTimeMode = tmDuration then begin
|
||||||
|
case FPrimaryField of
|
||||||
|
tfHours : Minutes := V;
|
||||||
|
tfMinutes : Seconds := V;
|
||||||
|
end;
|
||||||
|
end else begin
|
||||||
|
Minutes := V;
|
||||||
|
if not (Minutes in [0..59]) then
|
||||||
|
Error := SCTimeConvertError;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
if Error > 0 then
|
||||||
|
Break;
|
||||||
|
end;
|
||||||
|
3 :
|
||||||
|
begin
|
||||||
|
if (S = '') or (S[1] in ['0'..'9']) then begin
|
||||||
|
V := StrToIntDef(S, 0);
|
||||||
|
if FTimeMode = tmDuration then begin
|
||||||
|
case FPrimaryField of
|
||||||
|
tfHours : Seconds := V;
|
||||||
|
end;
|
||||||
|
end else begin
|
||||||
|
Seconds := V;
|
||||||
|
if not (Seconds in [0..59]) then
|
||||||
|
Error := SCTimeConvertError;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
if Error > 0 then
|
||||||
|
Break;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
{special handling for times at or just after midnight}
|
||||||
|
if (AmPm = Am) then
|
||||||
|
if (Hours = 12) or (Hours = 24) then
|
||||||
|
Hours := 0;
|
||||||
|
|
||||||
|
if Error > 0 then
|
||||||
|
raise EOvcException.Create(GetOrphStr(Error) + ' "' + Value + '"');
|
||||||
|
|
||||||
|
SetTime(HMSToDateTime(Hours, Minutes, Seconds));
|
||||||
|
|
||||||
|
finally
|
||||||
|
FieldList.Free;
|
||||||
|
end;
|
||||||
|
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TOvcCustomTimeEdit.SetUnitsLength(Value : Integer);
|
||||||
|
begin
|
||||||
|
if Value <> FUnitsLength then begin
|
||||||
|
FUnitsLength := Value;
|
||||||
|
if not (csLoading in ComponentState) then
|
||||||
|
SetTime(FTime); {force redisplay with current options}
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
end.
|
4743
components/orpheus/ovcef.pas
Normal file
372
components/orpheus/ovcexcpt.pas
Normal file
@ -0,0 +1,372 @@
|
|||||||
|
{*********************************************************}
|
||||||
|
{* OVCEXCPT.PAS 4.06 *}
|
||||||
|
{*********************************************************}
|
||||||
|
|
||||||
|
{* ***** BEGIN LICENSE BLOCK ***** *}
|
||||||
|
{* Version: MPL 1.1 *}
|
||||||
|
{* *}
|
||||||
|
{* The contents of this file are subject to the Mozilla Public License *}
|
||||||
|
{* Version 1.1 (the "License"); you may not use this file except in *}
|
||||||
|
{* compliance with the License. You may obtain a copy of the License at *}
|
||||||
|
{* http://www.mozilla.org/MPL/ *}
|
||||||
|
{* *}
|
||||||
|
{* Software distributed under the License is distributed on an "AS IS" basis, *}
|
||||||
|
{* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License *}
|
||||||
|
{* for the specific language governing rights and limitations under the *}
|
||||||
|
{* License. *}
|
||||||
|
{* *}
|
||||||
|
{* The Original Code is TurboPower Orpheus *}
|
||||||
|
{* *}
|
||||||
|
{* The Initial Developer of the Original Code is TurboPower Software *}
|
||||||
|
{* *}
|
||||||
|
{* Portions created by TurboPower Software Inc. are Copyright (C)1995-2002 *}
|
||||||
|
{* TurboPower Software Inc. All Rights Reserved. *}
|
||||||
|
{* *}
|
||||||
|
{* Contributor(s): *}
|
||||||
|
{* *}
|
||||||
|
{* ***** END LICENSE BLOCK ***** *}
|
||||||
|
|
||||||
|
{$I OVC.INC}
|
||||||
|
|
||||||
|
{$B-} {Complete Boolean Evaluation}
|
||||||
|
{$I+} {Input/Output-Checking}
|
||||||
|
{$P+} {Open Parameters}
|
||||||
|
{$T-} {Typed @ Operator}
|
||||||
|
{.W-} {Windows Stack Frame}
|
||||||
|
{$X+} {Extended Syntax}
|
||||||
|
|
||||||
|
unit ovcexcpt;
|
||||||
|
{-Exceptions unit}
|
||||||
|
|
||||||
|
interface
|
||||||
|
|
||||||
|
uses
|
||||||
|
{$IFNDEF LCL} Windows, {$ELSE} LclIntf, {$ENDIF}
|
||||||
|
Classes, SysUtils, OvcData, OvcConst, OvcIntl;
|
||||||
|
|
||||||
|
type
|
||||||
|
{*** Base Orpheus exeption class ***}
|
||||||
|
EOvcException = class(Exception)
|
||||||
|
public
|
||||||
|
ErrorCode : LongInt;
|
||||||
|
end;
|
||||||
|
|
||||||
|
{*** General ***}
|
||||||
|
ENoTimersAvailable = class(EOvcException)
|
||||||
|
public
|
||||||
|
constructor Create;
|
||||||
|
end;
|
||||||
|
|
||||||
|
{*** Controller ***}
|
||||||
|
EControllerError = class(EOvcException);
|
||||||
|
ENoControllerAssigned = class(EControllerError)
|
||||||
|
public
|
||||||
|
constructor Create;
|
||||||
|
end;
|
||||||
|
|
||||||
|
{*** Command Processor ***}
|
||||||
|
ECmdProcessorError = class(EOvcException);
|
||||||
|
EDuplicateCommand = class(ECmdProcessorError)
|
||||||
|
public
|
||||||
|
constructor Create;
|
||||||
|
end;
|
||||||
|
|
||||||
|
ETableNotFound = class(ECmdProcessorError)
|
||||||
|
public
|
||||||
|
constructor Create;
|
||||||
|
end;
|
||||||
|
|
||||||
|
{*** Entry Fields ***}
|
||||||
|
EEntryFieldError = class(EOvcException);
|
||||||
|
EInvalidDataType = class(EEntryFieldError)
|
||||||
|
public
|
||||||
|
constructor Create;
|
||||||
|
end;
|
||||||
|
|
||||||
|
EInvalidPictureMask = class(EEntryFieldError)
|
||||||
|
public
|
||||||
|
constructor Create(const Mask : string);
|
||||||
|
end;
|
||||||
|
|
||||||
|
EInvalidRangeValue = class(EEntryFieldError)
|
||||||
|
public
|
||||||
|
constructor Create(DataType : Byte);
|
||||||
|
end;
|
||||||
|
|
||||||
|
EInvalidDateForMask = class(EEntryFieldError)
|
||||||
|
public
|
||||||
|
constructor Create;
|
||||||
|
end;
|
||||||
|
|
||||||
|
{*** Editors ***}
|
||||||
|
EEditorError = class(EOvcException)
|
||||||
|
public
|
||||||
|
constructor Create(const Msg : string; Error : Cardinal);
|
||||||
|
end;
|
||||||
|
|
||||||
|
EInvalidLineOrCol = class(EEditorError)
|
||||||
|
public
|
||||||
|
constructor Create;
|
||||||
|
end;
|
||||||
|
|
||||||
|
EInvalidLineOrPara = class(EEditorError)
|
||||||
|
public
|
||||||
|
constructor Create;
|
||||||
|
end;
|
||||||
|
|
||||||
|
{*** Viewers ***}
|
||||||
|
EViewerError = class(EOvcException);
|
||||||
|
ERegionTooLarge = class(EViewerError)
|
||||||
|
public
|
||||||
|
constructor Create;
|
||||||
|
end;
|
||||||
|
|
||||||
|
{*** Notebook ***}
|
||||||
|
ENotebookError = class(EOvcException);
|
||||||
|
EInvalidPageIndex = class(ENotebookError)
|
||||||
|
public
|
||||||
|
constructor Create;
|
||||||
|
end;
|
||||||
|
|
||||||
|
EInvalidTabFont = class(ENotebookError)
|
||||||
|
public
|
||||||
|
constructor Create;
|
||||||
|
end;
|
||||||
|
|
||||||
|
{*** Rotated Label ***}
|
||||||
|
ERotatedLabelError = class(EOvcException);
|
||||||
|
EInvalidLabelFont = class(ERotatedLabelError)
|
||||||
|
public
|
||||||
|
constructor Create;
|
||||||
|
end;
|
||||||
|
|
||||||
|
{*** Timer Pool ***}
|
||||||
|
ETimerPoolError = class(EOvcException);
|
||||||
|
EInvalidTriggerHandle = class(ETimerPoolError)
|
||||||
|
public
|
||||||
|
constructor Create;
|
||||||
|
end;
|
||||||
|
|
||||||
|
{*** Virtual ListBox ***}
|
||||||
|
EVirtualListBoxError = class(EOvcException);
|
||||||
|
EOnSelectNotAssigned = class(EVirtualListBoxError)
|
||||||
|
public
|
||||||
|
constructor Create;
|
||||||
|
end;
|
||||||
|
|
||||||
|
EOnIsSelectedNotAssigned = class(EVirtualListBoxError)
|
||||||
|
public
|
||||||
|
constructor Create;
|
||||||
|
end;
|
||||||
|
|
||||||
|
{*** Report View ***}
|
||||||
|
EReportViewError = class(EOvcException) { generic report view exception}
|
||||||
|
constructor Create(ErrorCode : Integer; Dummy : Byte);
|
||||||
|
constructor CreateFmt(ErrorCode : Integer; const Args : array of const; Dummy : Byte);
|
||||||
|
end;
|
||||||
|
EUnknownView = class(EReportViewError); { unknown view name }
|
||||||
|
EItemNotFound = class(EReportViewError); { attempt to change/remove nonexistent item}
|
||||||
|
EItemAlreadyAdded = class(EReportViewError); { attempt to re-add existing item }
|
||||||
|
EUpdatePending = class(EReportViewError); { operation is invalid while updates are pending }
|
||||||
|
EItemIsNotGroup = class(EReportViewError); { item at specified line is not a group (IsGroup = False) }
|
||||||
|
ELineNoOutOfRange = class(EReportViewError); { specified line is invalid (out of range) }
|
||||||
|
ENotMultiSelect = class(EReportViewError); { operation is invalid while MultiSelect is false }
|
||||||
|
EItemNotInIndex = class(EReportViewError); { specified data item is not in index }
|
||||||
|
ENoActiveView = class(EReportViewError); { no active view }
|
||||||
|
EOnCompareNotAsgnd = class(EReportViewError); { unassigned OnCompareFields }
|
||||||
|
EGetAsFloatNotAsg = class(EReportViewError); { unassigned OnGetFieldAsFloat }
|
||||||
|
EOnFilterNotAsgnd = class(EReportViewError); { unassigned OnFilter }
|
||||||
|
|
||||||
|
{*** Sparse Array ***}
|
||||||
|
ESparseArrayError = class(EOvcException);
|
||||||
|
ESAEAtMaxSize = class(ESparseArrayError);
|
||||||
|
ESAEOutOfBounds = class(ESparseArrayError);
|
||||||
|
|
||||||
|
{*** Fixed Font ***}
|
||||||
|
EFixedFontError = class(EOvcException);
|
||||||
|
EInvalidFixedFont = class(EFixedFontError)
|
||||||
|
public
|
||||||
|
constructor Create;
|
||||||
|
end;
|
||||||
|
|
||||||
|
EInvalidFontParam = class(EFixedFontError)
|
||||||
|
public
|
||||||
|
constructor Create;
|
||||||
|
end;
|
||||||
|
|
||||||
|
{*** MRU List ***}
|
||||||
|
EMenuMRUError = class(EOvcException);
|
||||||
|
|
||||||
|
implementation
|
||||||
|
|
||||||
|
|
||||||
|
{*** General ***}
|
||||||
|
|
||||||
|
constructor ENoTimersAvailable.Create;
|
||||||
|
begin
|
||||||
|
inherited Create(GetOrphStr(SCNoTimersAvail));
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
{*** Controller ***}
|
||||||
|
|
||||||
|
constructor ENoControllerAssigned.Create;
|
||||||
|
begin
|
||||||
|
inherited Create(GetOrphStr(SCNoControllerAssigned));
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
{*** Command Processor ***}
|
||||||
|
|
||||||
|
constructor ETableNotFound.Create;
|
||||||
|
begin
|
||||||
|
inherited Create(GetOrphStr(SCTableNotFound));
|
||||||
|
end;
|
||||||
|
|
||||||
|
constructor EDuplicateCommand.Create;
|
||||||
|
begin
|
||||||
|
inherited Create(GetOrphStr(SCDuplicateCommand));
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
{*** Entry Fields ***}
|
||||||
|
|
||||||
|
constructor EInvalidDataType.Create;
|
||||||
|
begin
|
||||||
|
inherited Create(GetOrphStr(SCInvalidDataType));
|
||||||
|
end;
|
||||||
|
|
||||||
|
constructor EInvalidPictureMask.Create(const Mask : string);
|
||||||
|
begin
|
||||||
|
inherited CreateFmt(GetOrphStr(SCInvalidPictureMask), [Mask]);
|
||||||
|
end;
|
||||||
|
|
||||||
|
constructor EInvalidRangeValue.Create(DataType : Byte);
|
||||||
|
var
|
||||||
|
S : string;
|
||||||
|
begin
|
||||||
|
case DataType of
|
||||||
|
fsubLongInt : inherited CreateFmt(GetOrphStr(SCInvalidRange), [Low(LongInt), High(LongInt)]);
|
||||||
|
fsubWord : inherited CreateFmt(GetOrphStr(SCInvalidRange), [Low(Word), High(Word)]);
|
||||||
|
fsubInteger : inherited CreateFmt(GetOrphStr(SCInvalidRange), [Low(SmallInt), High(SmallInt)]);
|
||||||
|
fsubByte : inherited CreateFmt(GetOrphStr(SCInvalidRange), [Low(Byte), High(Byte)]);
|
||||||
|
fsubShortInt : inherited CreateFmt(GetOrphStr(SCInvalidRange), [Low(ShortInt), High(ShortInt)]);
|
||||||
|
fsubReal : inherited Create(GetOrphStr(SCInvalidRealRange));
|
||||||
|
fsubExtended : inherited Create(GetOrphStr(SCInvalidExtendedRange));
|
||||||
|
fsubDouble : inherited Create(GetOrphStr(SCInvalidDoubleRange));
|
||||||
|
fsubSingle : inherited Create(GetOrphStr(SCInvalidSingleRange));
|
||||||
|
fsubComp : inherited Create(GetOrphStr(SCInvalidCompRange));
|
||||||
|
fsubDate :
|
||||||
|
begin
|
||||||
|
S := OvcIntlSup.InternationalDate(True);
|
||||||
|
inherited CreateFmt(GetOrphStr(SCInvalidDateRange), [S]);
|
||||||
|
end;
|
||||||
|
fsubTime :
|
||||||
|
begin
|
||||||
|
S := OvcIntlSup.InternationalTime(False);
|
||||||
|
inherited CreateFmt(GetOrphStr(SCInvalidTimeRange), [S]);
|
||||||
|
end;
|
||||||
|
else
|
||||||
|
inherited Create(GetOrphStr(SCInvalidRangeValue));
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
constructor EInvalidDateForMask.Create;
|
||||||
|
begin
|
||||||
|
inherited Create(GetOrphStr(SCInvalidDateForMask));
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
{*** Editors ***}
|
||||||
|
|
||||||
|
constructor EEditorError.Create(const Msg : string; Error : Cardinal);
|
||||||
|
begin
|
||||||
|
ErrorCode := Error;
|
||||||
|
inherited Create(Msg);
|
||||||
|
end;
|
||||||
|
|
||||||
|
constructor EInvalidLineOrCol.Create;
|
||||||
|
begin
|
||||||
|
inherited Create(GetOrphStr(SCInvalidLineOrColumn), 0);
|
||||||
|
end;
|
||||||
|
|
||||||
|
constructor EInvalidLineOrPara.Create;
|
||||||
|
begin
|
||||||
|
inherited Create(GetOrphStr(SCInvalidLineOrParaIndex), 0);
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
{*** Viewers ***}
|
||||||
|
|
||||||
|
constructor ERegionTooLarge.Create;
|
||||||
|
begin
|
||||||
|
inherited Create(GetOrphStr(SCRegionTooLarge));
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
{*** Notebook ***}
|
||||||
|
|
||||||
|
constructor EInvalidPageIndex.Create;
|
||||||
|
begin
|
||||||
|
inherited Create(GetOrphStr(SCInvalidPageIndex));
|
||||||
|
end;
|
||||||
|
|
||||||
|
constructor EInvalidTabFont.Create;
|
||||||
|
begin
|
||||||
|
inherited Create(GetOrphStr(SCInvalidTabFont));
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
{*** Rotated Label ***}
|
||||||
|
|
||||||
|
constructor EInvalidLabelFont.Create;
|
||||||
|
begin
|
||||||
|
inherited Create(GetOrphStr(SCInvalidLabelFont));
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
{*** Timer Pool ***}
|
||||||
|
|
||||||
|
constructor EInvalidTriggerHandle.Create;
|
||||||
|
begin
|
||||||
|
inherited Create(GetOrphStr(SCBadTriggerHandle));
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
{*** Virtual ListBox ***}
|
||||||
|
|
||||||
|
constructor EOnSelectNotAssigned.Create;
|
||||||
|
begin
|
||||||
|
inherited Create(GetOrphStr(SCOnSelectNotAssigned));
|
||||||
|
end;
|
||||||
|
|
||||||
|
constructor EOnIsSelectedNotAssigned.Create;
|
||||||
|
begin
|
||||||
|
inherited Create(GetOrphStr(SCOnIsSelectedNotAssigned));
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
{*** Fixed Font ***}
|
||||||
|
|
||||||
|
constructor EInvalidFixedFont.Create;
|
||||||
|
begin
|
||||||
|
inherited Create(GetOrphStr(SCNonFixedFont));
|
||||||
|
end;
|
||||||
|
|
||||||
|
constructor EInvalidFontParam.Create;
|
||||||
|
begin
|
||||||
|
inherited Create(GetOrphStr(SCInvalidFontParam));
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
constructor EReportViewError.Create(ErrorCode : Integer; Dummy : Byte);
|
||||||
|
begin
|
||||||
|
inherited Create(GetOrphStr(ErrorCode));
|
||||||
|
end;
|
||||||
|
|
||||||
|
constructor EReportViewError.CreateFmt(ErrorCode : Integer; const Args : array of const; Dummy : Byte);
|
||||||
|
begin
|
||||||
|
inherited CreateFmt(GetOrphStr(ErrorCode),Args);
|
||||||
|
end;
|
||||||
|
|
||||||
|
end.
|
1651
components/orpheus/ovcintl.pas
Normal file
839
components/orpheus/ovclabel.pas
Normal file
@ -0,0 +1,839 @@
|
|||||||
|
{*********************************************************}
|
||||||
|
{* OVCLABEL.PAS 4.06 *}
|
||||||
|
{*********************************************************}
|
||||||
|
|
||||||
|
{* ***** BEGIN LICENSE BLOCK ***** *}
|
||||||
|
{* Version: MPL 1.1 *}
|
||||||
|
{* *}
|
||||||
|
{* The contents of this file are subject to the Mozilla Public License *}
|
||||||
|
{* Version 1.1 (the "License"); you may not use this file except in *}
|
||||||
|
{* compliance with the License. You may obtain a copy of the License at *}
|
||||||
|
{* http://www.mozilla.org/MPL/ *}
|
||||||
|
{* *}
|
||||||
|
{* Software distributed under the License is distributed on an "AS IS" basis, *}
|
||||||
|
{* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License *}
|
||||||
|
{* for the specific language governing rights and limitations under the *}
|
||||||
|
{* License. *}
|
||||||
|
{* *}
|
||||||
|
{* The Original Code is TurboPower Orpheus *}
|
||||||
|
{* *}
|
||||||
|
{* The Initial Developer of the Original Code is TurboPower Software *}
|
||||||
|
{* *}
|
||||||
|
{* Portions created by TurboPower Software Inc. are Copyright (C)1995-2002 *}
|
||||||
|
{* TurboPower Software Inc. All Rights Reserved. *}
|
||||||
|
{* *}
|
||||||
|
{* Contributor(s): *}
|
||||||
|
{* *}
|
||||||
|
{* ***** END LICENSE BLOCK ***** *}
|
||||||
|
|
||||||
|
{$I OVC.INC}
|
||||||
|
|
||||||
|
{$B-} {Complete Boolean Evaluation}
|
||||||
|
{$I+} {Input/Output-Checking}
|
||||||
|
{$P+} {Open Parameters}
|
||||||
|
{$T-} {Typed @ Operator}
|
||||||
|
{.W-} {Windows Stack Frame}
|
||||||
|
{$X+} {Extended Syntax}
|
||||||
|
|
||||||
|
unit ovclabel;
|
||||||
|
{-label component}
|
||||||
|
|
||||||
|
interface
|
||||||
|
|
||||||
|
uses
|
||||||
|
{$IFNDEF LCL} Windows, Messages, {$ELSE} LclIntf, LMessages, LclType, MyMisc, {$ENDIF}
|
||||||
|
Classes, Controls, Graphics, StdCtrls, SysUtils,
|
||||||
|
OvcMisc, OvcVer;
|
||||||
|
|
||||||
|
type
|
||||||
|
{preset "looks"}
|
||||||
|
TOvcAppearance = (apNone, apCustom, apFlying, apRaised, apSunken, apShadow);
|
||||||
|
{preset color schemes}
|
||||||
|
TOvcColorScheme = (csCustom, csText, csWindows, csEmbossed, csGold, csSteel);
|
||||||
|
{options for varying the shadow/highlight for the label}
|
||||||
|
TOvcGraduateStyle = (gsNone, gsHorizontal, gsVertical);
|
||||||
|
{directions for shading (highlights and shadows)}
|
||||||
|
TOvcShadeDirection = (sdNone, sdUp, sdUpRight, sdRight, sdDownRight, sdDown,
|
||||||
|
sdDownLeft, sdLeft, sdUpLeft);
|
||||||
|
{options for varying the text of the label}
|
||||||
|
TOvcShadeStyle = (ssPlain, ssExtrude, ssGraduated);
|
||||||
|
|
||||||
|
TOvcDepth = 0..255;
|
||||||
|
|
||||||
|
const
|
||||||
|
lblDefAppearance = apRaised;
|
||||||
|
lblDefAutoSize = False;
|
||||||
|
lblDefColorScheme = csWindows;
|
||||||
|
{$IFNDEF LCL}
|
||||||
|
lblDefFontName = 'Times New Roman';
|
||||||
|
{$ELSE}
|
||||||
|
lblDefFontName = 'default';
|
||||||
|
{$ENDIF}
|
||||||
|
lblDefFontSize = 20;
|
||||||
|
lblDefGraduateFromColor = clGray;
|
||||||
|
lblDefGraduateStyle = gsNone;
|
||||||
|
lblDefHighlightColor = clWhite;
|
||||||
|
lblDefHighlightDepth = 1;
|
||||||
|
lblDefHighlightDirection = sdUpLeft;
|
||||||
|
lblDefHighlightStyle = ssPlain;
|
||||||
|
lblDefShadowColor = clBlack;
|
||||||
|
lblDefShadowDepth = 1;
|
||||||
|
lblDefShadowDirection = sdDownRight;
|
||||||
|
lblDefShadowStyle = ssPlain;
|
||||||
|
lblDefTransparent = True;
|
||||||
|
lblDefWordWrap = True;
|
||||||
|
|
||||||
|
type
|
||||||
|
TOvcCustomSettings = class(TPersistent)
|
||||||
|
private
|
||||||
|
{.Z+}
|
||||||
|
{property variables}
|
||||||
|
FGraduateFromColor : TColor;
|
||||||
|
FGraduateStyle : TOvcGraduateStyle;
|
||||||
|
FHighlightColor : TColor;
|
||||||
|
FHighlightDepth : TOvcDepth;
|
||||||
|
FHighlightDirection : TOvcShadeDirection;
|
||||||
|
FHighlightStyle : TOvcShadeStyle;
|
||||||
|
FShadowColor : TColor;
|
||||||
|
FShadowDepth : TOvcDepth;
|
||||||
|
FShadowDirection : TOvcShadeDirection;
|
||||||
|
FShadowStyle : TOvcShadeStyle;
|
||||||
|
|
||||||
|
{event variables}
|
||||||
|
FOnColorChange : TNotifyEvent;
|
||||||
|
FOnStyleChange : TNotifyEvent;
|
||||||
|
|
||||||
|
{internal variables}
|
||||||
|
FUpdating : Boolean;
|
||||||
|
|
||||||
|
{internal methods}
|
||||||
|
procedure DoOnColorChange;
|
||||||
|
procedure DoOnStyleChange;
|
||||||
|
|
||||||
|
{property methods}
|
||||||
|
procedure SetGraduateFromColor(Value : TColor);
|
||||||
|
procedure SetGraduateStyle(Value : TOvcGraduateStyle);
|
||||||
|
procedure SetHighlightColor(Value : TColor);
|
||||||
|
procedure SetHighlightDepth(Value : TOvcDepth);
|
||||||
|
procedure SetHighlightDirection(Value : TOvcShadeDirection);
|
||||||
|
procedure SetHighlightStyle(Value : TOvcShadeStyle);
|
||||||
|
procedure SetShadowColor(Value : TColor);
|
||||||
|
procedure SetShadowDepth(Value : TOvcDepth);
|
||||||
|
procedure SetShadowDirection(Value : TOvcShadeDirection);
|
||||||
|
procedure SetShadowStyle(Value : TOvcShadeStyle);
|
||||||
|
{.Z-}
|
||||||
|
public
|
||||||
|
procedure Assign(Source : TPersistent);
|
||||||
|
override;
|
||||||
|
|
||||||
|
procedure BeginUpdate;
|
||||||
|
procedure EndUpdate;
|
||||||
|
|
||||||
|
{.Z+}
|
||||||
|
property OnColorChange : TNotifyEvent
|
||||||
|
read FOnColorChange write FOnColorChange;
|
||||||
|
property OnStyleChange : TNotifyEvent
|
||||||
|
read FOnStyleChange write FOnStyleChange;
|
||||||
|
{.Z-}
|
||||||
|
|
||||||
|
published
|
||||||
|
property GraduateFromColor : TColor
|
||||||
|
read FGraduateFromColor write SetGraduateFromColor default lblDefGraduateFromColor;
|
||||||
|
property GraduateStyle : TOvcGraduateStyle
|
||||||
|
read FGraduateStyle write SetGraduateStyle default lblDefGraduateStyle;
|
||||||
|
property HighlightColor : TColor
|
||||||
|
read FHighlightColor write SetHighlightColor default lblDefHighlightColor;
|
||||||
|
property HighlightDepth : TOvcDepth
|
||||||
|
read FHighlightDepth write SetHighlightDepth default lblDefHighlightDepth;
|
||||||
|
property HighlightDirection : TOvcShadeDirection
|
||||||
|
read FHighlightDirection write SetHighlightDirection default lblDefHighlightDirection;
|
||||||
|
property HighlightStyle : TOvcShadeStyle
|
||||||
|
read FHighlightStyle write SetHighlightStyle default lblDefHighlightStyle;
|
||||||
|
property ShadowColor : TColor
|
||||||
|
read FShadowColor write SetShadowColor default lblDefShadowColor;
|
||||||
|
property ShadowDepth : TOvcDepth
|
||||||
|
read FShadowDepth write SetShadowDepth default lblDefShadowDepth;
|
||||||
|
property ShadowDirection : TOvcShadeDirection
|
||||||
|
read FShadowDirection write SetShadowDirection default lblDefShadowDirection;
|
||||||
|
property ShadowStyle : TOvcShadeStyle
|
||||||
|
read FShadowStyle write SetShadowStyle default lblDefShadowStyle;
|
||||||
|
end;
|
||||||
|
|
||||||
|
TOvcCustomLabel = class(TCustomLabel)
|
||||||
|
{.Z+}
|
||||||
|
protected {private}
|
||||||
|
{property variables}
|
||||||
|
FAppearance : TOvcAppearance;
|
||||||
|
FColorScheme : TOvcColorScheme;
|
||||||
|
FCustomSettings : TOvcCustomSettings;
|
||||||
|
|
||||||
|
{interal variables}
|
||||||
|
eslSchemes : array [TOvcColorScheme, (cpHighlight, cpShadow, cpFace)] of TColor;
|
||||||
|
SettingColorScheme : Boolean;
|
||||||
|
SettingAppearance : Boolean;
|
||||||
|
|
||||||
|
{property methods}
|
||||||
|
function GetAbout : string;
|
||||||
|
function GetWordWrap : Boolean;
|
||||||
|
procedure SetAppearance(Value : TOvcAppearance);
|
||||||
|
procedure SetColorScheme(Value : TOvcColorScheme);
|
||||||
|
procedure SetWordWrap(Value : Boolean);
|
||||||
|
procedure SetAbout(const Value : string);
|
||||||
|
|
||||||
|
{internal methods}
|
||||||
|
procedure PaintPrim(CR : TRect; Flags : Word);
|
||||||
|
procedure ColorChanged(Sender : TObject);
|
||||||
|
procedure StyleChanged(Sender : TObject);
|
||||||
|
|
||||||
|
protected
|
||||||
|
procedure Paint;
|
||||||
|
override;
|
||||||
|
{.Z-}
|
||||||
|
|
||||||
|
{protected properties} {can be published by descendants}
|
||||||
|
property About : string
|
||||||
|
read GetAbout write SetAbout stored False;
|
||||||
|
property Appearance : TOvcAppearance
|
||||||
|
read FAppearance write SetAppearance default lblDefAppearance;
|
||||||
|
property ColorScheme : TOvcColorScheme
|
||||||
|
read FColorScheme write SetColorScheme default lblDefColorScheme;
|
||||||
|
property CustomSettings : TOvcCustomSettings
|
||||||
|
read FCustomSettings write FCustomSettings;
|
||||||
|
property WordWrap : Boolean
|
||||||
|
read GetWordWrap write SetWordWrap default lblDefWordWrap;
|
||||||
|
public
|
||||||
|
{.Z+}
|
||||||
|
constructor Create(AOwner : TComponent);
|
||||||
|
override;
|
||||||
|
destructor Destroy;
|
||||||
|
override;
|
||||||
|
|
||||||
|
{ - Hdc changed to TOvcHdc for BCB Compatibility }
|
||||||
|
procedure PaintTo(DC : TOvcHdc{Hdc}; CR : TRect; Flags : Word);
|
||||||
|
|
||||||
|
property AutoSize;
|
||||||
|
{.Z-}
|
||||||
|
end;
|
||||||
|
|
||||||
|
TOvcLabel = class(TOvcCustomLabel)
|
||||||
|
published
|
||||||
|
{properties}
|
||||||
|
property About;
|
||||||
|
property Align;
|
||||||
|
property Alignment;
|
||||||
|
{$IFDEF VERSION 4}
|
||||||
|
property Anchors;
|
||||||
|
{$ENDIF}
|
||||||
|
property Appearance;
|
||||||
|
property Caption;
|
||||||
|
property Color;
|
||||||
|
property ColorScheme;
|
||||||
|
property Cursor;
|
||||||
|
property CustomSettings;
|
||||||
|
property DragCursor;
|
||||||
|
property DragMode;
|
||||||
|
property Enabled;
|
||||||
|
property FocusControl;
|
||||||
|
property Font;
|
||||||
|
property ParentColor;
|
||||||
|
property ParentFont default False;
|
||||||
|
property ParentShowHint;
|
||||||
|
property ShowAccelChar;
|
||||||
|
property ShowHint;
|
||||||
|
property Transparent
|
||||||
|
default lblDefTransparent;
|
||||||
|
property Visible;
|
||||||
|
property WordWrap;
|
||||||
|
|
||||||
|
{events}
|
||||||
|
property OnClick;
|
||||||
|
property OnDblClick;
|
||||||
|
property OnDragDrop;
|
||||||
|
property OnDragOver;
|
||||||
|
property OnEndDrag;
|
||||||
|
property OnMouseDown;
|
||||||
|
property OnMouseMove;
|
||||||
|
property OnMouseUp;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
implementation
|
||||||
|
|
||||||
|
{*** TOvcCustomSettings ***}
|
||||||
|
|
||||||
|
procedure TOvcCustomSettings.Assign(Source : TPersistent);
|
||||||
|
var
|
||||||
|
LS : TOvcCustomSettings absolute Source;
|
||||||
|
begin
|
||||||
|
if Assigned(Source) and (Source is TOvcCustomSettings) then begin
|
||||||
|
FGraduateFromColor := LS.GraduateFromColor;
|
||||||
|
FGraduateStyle := LS.GraduateStyle;
|
||||||
|
FHighlightColor := LS.HighlightColor;
|
||||||
|
FHighlightDepth := LS.HighlightDepth;
|
||||||
|
FHighlightDirection := LS.HighlightDirection;
|
||||||
|
FHighlightStyle := LS.HighlightStyle;
|
||||||
|
FShadowColor := LS.ShadowColor;
|
||||||
|
FShadowDepth := LS.ShadowDepth;
|
||||||
|
FShadowDirection := LS.ShadowDirection;
|
||||||
|
FShadowStyle := LS.ShadowStyle;
|
||||||
|
end else
|
||||||
|
inherited Assign(Source);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TOvcCustomSettings.BeginUpdate;
|
||||||
|
begin
|
||||||
|
FUpdating := True;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TOvcCustomSettings.EndUpdate;
|
||||||
|
begin
|
||||||
|
FUpdating := False;
|
||||||
|
DoOnColorChange;
|
||||||
|
DoOnStyleChange;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TOvcCustomSettings.DoOnColorChange;
|
||||||
|
begin
|
||||||
|
if not FUpdating and Assigned(FOnColorChange) then
|
||||||
|
FOnColorChange(Self);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TOvcCustomSettings.DoOnStyleChange;
|
||||||
|
begin
|
||||||
|
if not FUpdating and Assigned(FOnStyleChange) then
|
||||||
|
FOnStyleChange(Self);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TOvcCustomSettings.SetGraduateFromColor(Value : TColor);
|
||||||
|
begin
|
||||||
|
if Value <> FGraduateFromColor then begin
|
||||||
|
FGraduateFromColor := Value;
|
||||||
|
DoOnColorChange;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TOvcCustomSettings.SetGraduateStyle(Value : TOvcGraduateStyle);
|
||||||
|
begin
|
||||||
|
if Value <> FGraduateStyle then begin
|
||||||
|
FGraduateStyle := Value;
|
||||||
|
DoOnStyleChange;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TOvcCustomSettings.SetHighlightColor(Value : TColor);
|
||||||
|
begin
|
||||||
|
if Value <> FHighlightColor then begin
|
||||||
|
FHighlightColor := Value;
|
||||||
|
DoOnColorChange;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TOvcCustomSettings.SetHighlightDepth(Value : TOvcDepth);
|
||||||
|
begin
|
||||||
|
if Value <> FHighlightDepth then begin
|
||||||
|
FHighlightDepth := Value;
|
||||||
|
DoOnStyleChange;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TOvcCustomSettings.SetHighlightDirection(Value : TOvcShadeDirection);
|
||||||
|
begin
|
||||||
|
if Value <> FHighlightDirection then begin
|
||||||
|
FHighlightDirection := Value;
|
||||||
|
DoOnStyleChange;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TOvcCustomSettings.SetHighlightStyle(Value : TOvcShadeStyle);
|
||||||
|
begin
|
||||||
|
if Value <> FHighlightStyle then begin
|
||||||
|
FHighlightStyle := Value;
|
||||||
|
DoOnStyleChange;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TOvcCustomSettings.SetShadowColor(Value : TColor);
|
||||||
|
begin
|
||||||
|
if Value <> FShadowColor then begin
|
||||||
|
FShadowColor := Value;
|
||||||
|
DoOnColorChange;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TOvcCustomSettings.SetShadowDepth(Value : TOvcDepth);
|
||||||
|
begin
|
||||||
|
if Value <> FShadowDepth then begin
|
||||||
|
FShadowDepth := Value;
|
||||||
|
DoOnStyleChange;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TOvcCustomSettings.SetShadowDirection(Value : TOvcShadeDirection);
|
||||||
|
begin
|
||||||
|
if Value <> FShadowDirection then begin
|
||||||
|
FShadowDirection := Value;
|
||||||
|
DoOnStyleChange;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TOvcCustomSettings.SetShadowStyle(Value : TOvcShadeStyle);
|
||||||
|
begin
|
||||||
|
if Value <> FShadowStyle then begin
|
||||||
|
FShadowStyle := Value;
|
||||||
|
DoOnStyleChange;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
{*** TOvcCustomLabel ***}
|
||||||
|
|
||||||
|
constructor TOvcCustomLabel.Create(AOwner : TComponent);
|
||||||
|
begin
|
||||||
|
inherited Create(AOwner);
|
||||||
|
|
||||||
|
eslSchemes[csWindows, cpHighlight] := lblDefHighlightColor;
|
||||||
|
eslSchemes[csWindows, cpFace] := clGray;
|
||||||
|
eslSchemes[csWindows, cpShadow] := lblDefShadowColor;
|
||||||
|
|
||||||
|
eslSchemes[csText, cpHighlight] := clWhite;
|
||||||
|
eslSchemes[csText, cpFace] := clBlack;
|
||||||
|
eslSchemes[csText, cpShadow] := clGray;
|
||||||
|
|
||||||
|
eslSchemes[csEmbossed, cpHighlight] := clWhite;
|
||||||
|
eslSchemes[csEmbossed, cpFace] := clSilver;
|
||||||
|
eslSchemes[csEmbossed, cpShadow] := clBlack;
|
||||||
|
|
||||||
|
eslSchemes[csGold, cpHighlight] := clYellow;
|
||||||
|
eslSchemes[csGold, cpFace] := clOlive;
|
||||||
|
eslSchemes[csGold, cpShadow] := clBlack;
|
||||||
|
|
||||||
|
eslSchemes[csSteel, cpHighlight] := clAqua;
|
||||||
|
eslSchemes[csSteel, cpFace] := clTeal;
|
||||||
|
eslSchemes[csSteel, cpShadow] := clNavy;
|
||||||
|
|
||||||
|
eslSchemes[csCustom, cpHighlight] := eslSchemes[csWindows,cpHighlight];
|
||||||
|
eslSchemes[csCustom, cpFace] := eslSchemes[csWindows,cpFace];
|
||||||
|
eslSchemes[csCustom, cpShadow] := eslSchemes[csWindows,cpShadow];
|
||||||
|
|
||||||
|
{initialize defaults}
|
||||||
|
FAppearance := lblDefAppearance;
|
||||||
|
FColorScheme := lblDefColorScheme;
|
||||||
|
FCustomSettings := TOvcCustomSettings.Create;
|
||||||
|
FCustomSettings.FGraduateFromColor := lblDefGraduateFromColor;
|
||||||
|
FCustomSettings.FGraduateStyle := lblDefGraduateStyle;
|
||||||
|
FCustomSettings.FHighlightColor := eslSchemes[csWindows, cpHighlight];
|
||||||
|
FCustomSettings.FHighlightDepth := lblDefHighlightDepth;
|
||||||
|
FCustomSettings.FHighlightDirection := lblDefHighlightDirection;
|
||||||
|
FCustomSettings.FHighlightStyle := lblDefHighlightStyle;
|
||||||
|
FCustomSettings.FShadowColor := eslSchemes[csWindows, cpShadow];
|
||||||
|
FCustomSettings.FShadowDepth := lblDefShadowDepth;
|
||||||
|
FCustomSettings.FShadowDirection := lblDefShadowDirection;
|
||||||
|
FCustomSettings.FShadowStyle := lblDefShadowStyle;
|
||||||
|
FCustomSettings.OnColorChange := ColorChanged;
|
||||||
|
FCustomSettings.OnStyleChange := StyleChanged;
|
||||||
|
|
||||||
|
AutoSize := lblDefAutoSize;
|
||||||
|
Height := 35;
|
||||||
|
Width := 150;
|
||||||
|
Transparent := lblDefTransparent;
|
||||||
|
Font.Name := lblDefFontName;
|
||||||
|
Font.Size := lblDefFontSize;
|
||||||
|
Font.Color := eslSchemes[FColorScheme, cpFace];
|
||||||
|
WordWrap := lblDefWordWrap;
|
||||||
|
|
||||||
|
SettingColorScheme := False;
|
||||||
|
SettingAppearance := False;
|
||||||
|
end;
|
||||||
|
|
||||||
|
destructor TOvcCustomLabel.Destroy;
|
||||||
|
begin
|
||||||
|
FCustomSettings.Free;
|
||||||
|
FCustomSettings := nil;
|
||||||
|
|
||||||
|
inherited Destroy;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TOvcCustomLabel.GetAbout : string;
|
||||||
|
begin
|
||||||
|
Result := OrVersionStr;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TOvcCustomLabel.GetWordWrap : Boolean;
|
||||||
|
begin
|
||||||
|
Result := inherited WordWrap;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TOvcCustomLabel.Paint;
|
||||||
|
const
|
||||||
|
Alignments : array [TAlignment] of Word = (DT_LEFT, DT_RIGHT, DT_CENTER);
|
||||||
|
Wrap : array[Boolean] of Word = (0, DT_WORDBREAK);
|
||||||
|
Prefix : array[Boolean] of Word = (DT_NOPREFIX, 0);
|
||||||
|
begin
|
||||||
|
PaintPrim(ClientRect, Wrap[WordWrap] or DT_EXPANDTABS or
|
||||||
|
Alignments[Alignment] or Prefix[ShowAccelChar]);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TOvcCustomLabel.PaintPrim(CR : TRect; Flags : Word);
|
||||||
|
const
|
||||||
|
DrawingOffset : array [TOvcShadeDirection, (ioX, ioY)] of -1..1 =
|
||||||
|
((0,0),(0,-1),(+1,-1),(+1,0),(+1,+1),(0,+1),(-1,+1),(-1,0),(-1,-1));
|
||||||
|
BandCount = 16;
|
||||||
|
var
|
||||||
|
I : Integer;
|
||||||
|
MinOffset : Integer;
|
||||||
|
MaxOffset : Integer;
|
||||||
|
IX, IY : Integer;
|
||||||
|
IU, IV : Integer;
|
||||||
|
Limit : Integer;
|
||||||
|
Adjustment : Integer;
|
||||||
|
AdjustR : Double;
|
||||||
|
AdjustG : Double;
|
||||||
|
AdjustB : Double;
|
||||||
|
Step : Double;
|
||||||
|
RctTemp : TRect;
|
||||||
|
FromR : Byte;
|
||||||
|
FromG : Byte;
|
||||||
|
FromB : Byte;
|
||||||
|
ToR : Byte;
|
||||||
|
ToG : Byte;
|
||||||
|
ToB : Byte;
|
||||||
|
BmpTemp : TBitmap;
|
||||||
|
BmpWork : TBitmap;
|
||||||
|
CnvWork : TCanvas;
|
||||||
|
Buf : PChar;
|
||||||
|
begin
|
||||||
|
if not Assigned(FCustomSettings) then
|
||||||
|
Exit;
|
||||||
|
|
||||||
|
{get offsets based on shadow and highlight directions and depths}
|
||||||
|
MinOffset := MinI(MinI(MinI(MinI(DrawingOffset[FCustomSettings.HighlightDirection, ioX] * FCustomSettings.HighlightDepth,
|
||||||
|
DrawingOffset[FCustomSettings.ShadowDirection, ioX] * FCustomSettings.ShadowDepth),
|
||||||
|
DrawingOffset[FCustomSettings.HighlightDirection, ioY] * FCustomSettings.HighlightDepth),
|
||||||
|
DrawingOffset[FCustomSettings.ShadowDirection, ioY] * FCustomSettings.ShadowDepth), 0);
|
||||||
|
MaxOffset := MaxI(MaxI(MaxI(MaxI(DrawingOffset[FCustomSettings.HighlightDirection, ioX] * FCustomSettings.HighlightDepth,
|
||||||
|
DrawingOffset[FCustomSettings.ShadowDirection, ioX] * FCustomSettings.ShadowDepth),
|
||||||
|
DrawingOffset[FCustomSettings.HighlightDirection, ioY] * FCustomSettings.HighlightDepth),
|
||||||
|
DrawingOffset[FCustomSettings.ShadowDirection, ioY] * FCustomSettings.ShadowDepth), 0);
|
||||||
|
|
||||||
|
if Flags and DT_CENTER <> 0 then
|
||||||
|
Adjustment := (MaxOffset - MinOffset) div 2
|
||||||
|
else if Flags and DT_RIGHT <> 0 then
|
||||||
|
Adjustment := MaxOffset - MinOffset
|
||||||
|
else
|
||||||
|
Adjustment := 0;
|
||||||
|
|
||||||
|
{create temporary drawing surfaces}
|
||||||
|
BmpTemp := TBitmap.Create;
|
||||||
|
BmpWork := TBitmap.Create;
|
||||||
|
try
|
||||||
|
BmpTemp.Height := CR.Bottom-CR.Top;
|
||||||
|
BmpTemp.Width := CR.Right-CR.Left;
|
||||||
|
BmpTemp.Canvas.Font := Self.Font;
|
||||||
|
|
||||||
|
BmpWork.Height := CR.Bottom-CR.Top;
|
||||||
|
BmpWork.Width := CR.Right-CR.Left;
|
||||||
|
BmpWork.Canvas.Font := Self.Font;
|
||||||
|
|
||||||
|
{get copy of our canvas}
|
||||||
|
BmpWork.Canvas.CopyRect(CR, Self.Canvas, CR);
|
||||||
|
|
||||||
|
{set starting point for text - IX, IY}
|
||||||
|
IX := 0; IY := 0;
|
||||||
|
if not Transparent then begin
|
||||||
|
BmpWork.Canvas.Brush.Color := Self.Color;
|
||||||
|
BmpWork.Canvas.Brush.Style := bsSolid;
|
||||||
|
BmpWork.Canvas.FillRect(CR);
|
||||||
|
end;
|
||||||
|
BmpWork.Canvas.Brush.Style := bsClear;
|
||||||
|
|
||||||
|
Buf := StrAlloc(GetTextLen+1);
|
||||||
|
try
|
||||||
|
{get label's caption}
|
||||||
|
GetTextBuf(Buf, GetTextLen+1);
|
||||||
|
|
||||||
|
{prepare for extruding shadow, if requested}
|
||||||
|
GetRGB(FCustomSettings.ShadowColor, FromR, FromG, FromB);
|
||||||
|
AdjustR := 0;
|
||||||
|
AdjustG := 0;
|
||||||
|
AdjustB := 0;
|
||||||
|
Limit := FCustomSettings.ShadowDepth;
|
||||||
|
if (FCustomSettings.ShadowStyle <> ssPlain) and (FCustomSettings.ShadowDepth > 1) then begin
|
||||||
|
Limit := 1;
|
||||||
|
{find changes in RGB colors}
|
||||||
|
if FCustomSettings.ShadowStyle = ssGraduated then begin
|
||||||
|
GetRGB(Font.Color, ToR, ToG, ToB);
|
||||||
|
AdjustR := (ToR - FromR) / (FCustomSettings.ShadowDepth - 1);
|
||||||
|
AdjustG := (ToG - FromG) / (FCustomSettings.ShadowDepth - 1);
|
||||||
|
AdjustB := (ToB - FromB) / (FCustomSettings.ShadowDepth - 1);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
CnvWork := BmpWork.Canvas;
|
||||||
|
|
||||||
|
{process for each copy of the shadow}
|
||||||
|
for I := FCustomSettings.ShadowDepth downto Limit do begin
|
||||||
|
CnvWork.Font.Color :=
|
||||||
|
RGB(FromR + Round(AdjustR * (FCustomSettings.ShadowDepth - I)),
|
||||||
|
FromG + Round(AdjustG * (FCustomSettings.ShadowDepth - I)),
|
||||||
|
FromB + Round(AdjustB * (FCustomSettings.ShadowDepth - I)));
|
||||||
|
{create a rect that is offset for the shadow}
|
||||||
|
RctTemp:= Rect(
|
||||||
|
CR.Left - MinOffset -Adjustment + DrawingOffset[FCustomSettings.ShadowDirection, ioX] * I,
|
||||||
|
CR.Top - MinOffset + DrawingOffset[FCustomSettings.ShadowDirection, ioY] * I,
|
||||||
|
CR.Right - MinOffset - Adjustment + DrawingOffset[FCustomSettings.ShadowDirection, ioX] * I,
|
||||||
|
CR.Bottom - MinOffset + DrawingOffset[FCustomSettings.ShadowDirection, ioY] * I);
|
||||||
|
{draw shadow text with alignment}
|
||||||
|
DrawText(CnvWork.Handle, Buf, StrLen(Buf), RctTemp, Flags);
|
||||||
|
end;
|
||||||
|
|
||||||
|
{prepare for extruding highlight, if requested}
|
||||||
|
GetRGB(FCustomSettings.HighlightColor, FromR, FromG, FromB);
|
||||||
|
AdjustR := 0;
|
||||||
|
AdjustG := 0;
|
||||||
|
AdjustB := 0;
|
||||||
|
Limit := FCustomSettings.HighlightDepth;
|
||||||
|
if (FCustomSettings.HighlightStyle <> ssPlain) and (FCustomSettings.HighlightDepth > 1) then begin
|
||||||
|
Limit := 1;
|
||||||
|
if FCustomSettings.HighlightStyle = ssGraduated then begin {find changes in RGB Colors}
|
||||||
|
GetRGB(Font.Color, ToR, ToG, ToB);
|
||||||
|
AdjustR := (ToR - FromR) / (FCustomSettings.HighlightDepth - 1);
|
||||||
|
AdjustG := (ToG - FromG) / (FCustomSettings.HighlightDepth - 1);
|
||||||
|
AdjustB := (ToB - FromB) / (FCustomSettings.HighlightDepth - 1);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
CnvWork := BmpWork.Canvas;
|
||||||
|
|
||||||
|
{process for each copy of the highlight}
|
||||||
|
for I := FCustomSettings.HighlightDepth downto Limit do begin
|
||||||
|
CnvWork.Font.Color :=
|
||||||
|
RGB(FromR + Round(AdjustR * (FCustomSettings.HighlightDepth - I)),
|
||||||
|
FromG + Round(AdjustG * (FCustomSettings.HighlightDepth - I)),
|
||||||
|
FromB + Round(AdjustB * (FCustomSettings.HighlightDepth - I)));
|
||||||
|
{create a rect that is offset for the highlight}
|
||||||
|
RctTemp:= Rect(
|
||||||
|
CR.Left - MinOffset - Adjustment + DrawingOffset[FCustomSettings.HighlightDirection, ioX] * I,
|
||||||
|
CR.Top - MinOffset + DrawingOffset[FCustomSettings.HighlightDirection, ioY] * I,
|
||||||
|
CR.Right - MinOffset - Adjustment + DrawingOffset[FCustomSettings.HighlightDirection, ioX] * I,
|
||||||
|
CR.Bottom - MinOffset + DrawingOffset[FCustomSettings.HighlightDirection, ioY] * I);
|
||||||
|
{draw highlight text with alignment}
|
||||||
|
DrawText(CnvWork.Handle, Buf, StrLen(Buf), RctTemp, Flags);
|
||||||
|
end;
|
||||||
|
|
||||||
|
if FCustomSettings.GraduateStyle <> gsNone then begin
|
||||||
|
{copy original canvas to work area}
|
||||||
|
BmpTemp.Canvas.CopyRect(CR, BmpWork.Canvas, CR);
|
||||||
|
{choose an unusual color}
|
||||||
|
BmpTemp.Canvas.Font.Color := $00FE09F1;
|
||||||
|
BmpTemp.Canvas.Brush.Style := bsClear;
|
||||||
|
CnvWork := BmpTemp.Canvas;
|
||||||
|
end else begin
|
||||||
|
BmpWork.Canvas.Font.Color := Font.Color; {restore original font Color}
|
||||||
|
CnvWork := BmpWork.Canvas;
|
||||||
|
end;
|
||||||
|
|
||||||
|
{create a rect that is offset for the original text}
|
||||||
|
RctTemp:= Rect(CR.Left - MinOffset - Adjustment,
|
||||||
|
CR.Top - MinOffset,
|
||||||
|
CR.Right - MinOffset - Adjustment,
|
||||||
|
CR.Bottom - MinOffset);
|
||||||
|
|
||||||
|
{draw original text with alignment}
|
||||||
|
DrawText(CnvWork.Handle, Buf, StrLen(Buf), RctTemp, Flags);
|
||||||
|
finally
|
||||||
|
StrDispose(Buf);
|
||||||
|
end;
|
||||||
|
|
||||||
|
if FCustomSettings.GraduateStyle <> gsNone then begin
|
||||||
|
{transfer graduations from temporary canvas}
|
||||||
|
{calculate start point and extent}
|
||||||
|
Limit := BmpWork.Canvas.TextWidth(Caption);
|
||||||
|
IV := IY - MinOffset;
|
||||||
|
|
||||||
|
if Flags and DT_CENTER <> 0 then
|
||||||
|
IU := (CR.Right-CR.Left - Limit) div 2 - MinOffset - Adjustment
|
||||||
|
else if Flags and DT_RIGHT <> 0 then
|
||||||
|
IU := CR.Bottom-CR.Top - MaxOffset - Limit
|
||||||
|
else
|
||||||
|
IU := IX - MinOffset;
|
||||||
|
|
||||||
|
if FCustomSettings.GraduateStyle = gsVertical then
|
||||||
|
Limit := CR.Bottom-CR.Top-1
|
||||||
|
else
|
||||||
|
Dec(Limit);
|
||||||
|
|
||||||
|
{calculate change in color at each step}
|
||||||
|
GetRGB(FCustomSettings.GraduateFromColor, FromR, FromG, FromB);
|
||||||
|
GetRGB(Font.Color, ToR, ToG, ToB);
|
||||||
|
AdjustR := (ToR - FromR) / Pred(BandCount);
|
||||||
|
AdjustG := (ToG - FromG) / Pred(BandCount);
|
||||||
|
AdjustB := (ToB - FromB) / Pred(BandCount);
|
||||||
|
|
||||||
|
Step := Limit / Pred(BandCount);
|
||||||
|
|
||||||
|
{and draw it onto the canvas}
|
||||||
|
BmpWork.Canvas.Brush.Style := bsSolid;
|
||||||
|
for I := 0 to Pred(BandCount) do begin
|
||||||
|
BmpWork.Canvas.Brush.Color := RGB(FromR + Round(AdjustR * I),
|
||||||
|
FromG + Round(AdjustG * I),
|
||||||
|
FromB + Round(AdjustB * I));
|
||||||
|
if FCustomSettings.GraduateStyle = gsVertical then
|
||||||
|
RctTemp := Rect(0, IV + Round(I*Step), CR.Right-CR.Left, IV + Round((I+1)*Step))
|
||||||
|
else
|
||||||
|
RctTemp := Rect(IU + Round(I*Step), 0, IU + Round((I+1)*Step), CR.Bottom-CR.Top);
|
||||||
|
{$IFNDEF LCL}
|
||||||
|
BmpWork.Canvas.BrushCopy(RctTemp, BmpTemp, RctTemp, BmpTemp.Canvas.Font.Color);
|
||||||
|
{$ELSE}
|
||||||
|
BrushCopy(BmpWork.Canvas, RctTemp, BmpTemp, RctTemp, BmpTemp.Canvas.Font.Color);
|
||||||
|
{$ENDIF}
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
Canvas.CopyRect(CR, BmpWork.Canvas, CR);
|
||||||
|
finally
|
||||||
|
BmpTemp.Free;
|
||||||
|
BmpWork.Free;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
{ - Hdc changed to TOvcHdc for BCB compatibility}
|
||||||
|
procedure TOvcCustomLabel.PaintTo(DC : TOvcHdc {Hdc}; CR : TRect; Flags : Word);
|
||||||
|
begin
|
||||||
|
Canvas.Handle := DC;
|
||||||
|
try
|
||||||
|
if not Transparent then begin
|
||||||
|
Canvas.Brush.Color := Self.Color;
|
||||||
|
Canvas.Brush.Style := bsSolid;
|
||||||
|
{clear complete client area}
|
||||||
|
Canvas.FillRect(Rect(0, 0, CR.Right, CR.Bottom));
|
||||||
|
end;
|
||||||
|
Canvas.Brush.Style := bsClear;
|
||||||
|
PaintPrim(CR, Flags)
|
||||||
|
finally
|
||||||
|
Canvas.Handle := 0;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TOvcCustomLabel.SetAppearance(Value : TOvcAppearance);
|
||||||
|
begin
|
||||||
|
if FAppearance <> Value then begin
|
||||||
|
SettingAppearance := True;
|
||||||
|
try
|
||||||
|
FAppearance := Value;
|
||||||
|
FCustomSettings.BeginUpdate;
|
||||||
|
try
|
||||||
|
FCustomSettings.HighlightColor := eslSchemes[ColorScheme,cpHighlight];
|
||||||
|
case FAppearance of
|
||||||
|
apRaised:
|
||||||
|
begin
|
||||||
|
FCustomSettings.HighlightDirection := sdUpLeft;
|
||||||
|
FCustomSettings.ShadowDirection := sdDownRight;
|
||||||
|
FCustomSettings.HighlightDepth := 1;
|
||||||
|
FCustomSettings.ShadowDepth := 1;
|
||||||
|
end;
|
||||||
|
apSunken:
|
||||||
|
begin
|
||||||
|
FCustomSettings.HighlightDirection := sdDownRight;
|
||||||
|
FCustomSettings.ShadowDirection := sdUpLeft;
|
||||||
|
FCustomSettings.HighlightDepth := 1;
|
||||||
|
FCustomSettings.ShadowDepth := 1;
|
||||||
|
end;
|
||||||
|
apShadow:
|
||||||
|
begin
|
||||||
|
FCustomSettings.HighlightDirection := sdNone;
|
||||||
|
FCustomSettings.ShadowDirection := sdDownRight;
|
||||||
|
FCustomSettings.HighlightDepth := 0;
|
||||||
|
FCustomSettings.ShadowDepth := 2;
|
||||||
|
end;
|
||||||
|
apFlying:
|
||||||
|
begin
|
||||||
|
FCustomSettings.HighlightDirection := sdDownRight;
|
||||||
|
FCustomSettings.ShadowDirection := sdDownRight;
|
||||||
|
FCustomSettings.HighlightDepth :=1;
|
||||||
|
FCustomSettings.ShadowDepth :=5;
|
||||||
|
{flying has two shadows}
|
||||||
|
FCustomSettings.HighlightColor := eslSchemes[ColorScheme, cpShadow];
|
||||||
|
end;
|
||||||
|
apNone:
|
||||||
|
begin
|
||||||
|
FCustomSettings.HighlightDirection := sdNone;
|
||||||
|
FCustomSettings.ShadowDirection := sdNone;
|
||||||
|
FCustomSettings.HighlightDepth :=0;
|
||||||
|
FCustomSettings.ShadowDepth :=0;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
finally
|
||||||
|
FCustomSettings.EndUpdate;
|
||||||
|
end;
|
||||||
|
finally
|
||||||
|
SettingAppearance := False;
|
||||||
|
Perform(CM_TEXTCHANGED, 0, 0);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TOvcCustomLabel.SetColorScheme(Value : TOvcColorScheme);
|
||||||
|
begin
|
||||||
|
if FColorScheme <> Value then begin
|
||||||
|
SettingColorScheme := True;
|
||||||
|
try
|
||||||
|
FColorScheme := Value;
|
||||||
|
FCustomSettings.BeginUpdate;
|
||||||
|
try
|
||||||
|
FCustomSettings.HighlightColor := eslSchemes[FColorScheme, cpHighlight];
|
||||||
|
Font.Color := eslSchemes[FColorScheme, cpFace];
|
||||||
|
FCustomSettings.ShadowColor := eslSchemes[FColorScheme, cpShadow];
|
||||||
|
if FColorScheme <> csCustom then begin
|
||||||
|
eslSchemes[csCustom, cpHighlight] := eslSchemes[FColorScheme, cpHighlight];
|
||||||
|
eslSchemes[csCustom, cpFace] := eslSchemes[FColorScheme, cpFace];
|
||||||
|
eslSchemes[csCustom, cpShadow] := eslSchemes[FColorScheme, cpShadow];
|
||||||
|
end;
|
||||||
|
finally
|
||||||
|
FCustomSettings.EndUpdate;
|
||||||
|
end;
|
||||||
|
finally
|
||||||
|
SettingColorScheme := False;
|
||||||
|
Perform(CM_TEXTCHANGED, 0, 0);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TOvcCustomLabel.ColorChanged(Sender : TObject);
|
||||||
|
begin
|
||||||
|
if csLoading in ComponentState then
|
||||||
|
Exit;
|
||||||
|
|
||||||
|
Invalidate;
|
||||||
|
|
||||||
|
if not SettingColorScheme then
|
||||||
|
FColorScheme := csCustom;
|
||||||
|
|
||||||
|
if not SettingColorScheme then
|
||||||
|
Perform(CM_COLORCHANGED, 0, 0);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TOvcCustomLabel.StyleChanged(Sender : TObject);
|
||||||
|
begin
|
||||||
|
if csLoading in ComponentState then
|
||||||
|
Exit;
|
||||||
|
|
||||||
|
Invalidate;
|
||||||
|
|
||||||
|
if not SettingAppearance then begin
|
||||||
|
FAppearance := apCustom;
|
||||||
|
Perform(CM_TEXTCHANGED, 0, 0);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TOvcCustomLabel.SetAbout(const Value : string);
|
||||||
|
begin
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TOvcCustomLabel.SetWordWrap(Value : Boolean);
|
||||||
|
begin
|
||||||
|
if Value <> WordWrap then begin
|
||||||
|
inherited WordWrap := Value;
|
||||||
|
Invalidate;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
end.
|
382
components/orpheus/ovclbl0.lfm
Normal file
@ -0,0 +1,382 @@
|
|||||||
|
object frmOvcLabel: TfrmOvcLabel
|
||||||
|
Left = 328
|
||||||
|
Top = 198
|
||||||
|
BorderStyle = bsDialog
|
||||||
|
Caption = 'Style Manager'
|
||||||
|
ClientHeight = 456
|
||||||
|
Height = 456
|
||||||
|
ClientWidth = 577
|
||||||
|
Width = 577
|
||||||
|
Font.Charset = DEFAULT_CHARSET
|
||||||
|
Font.Color = clWindowText
|
||||||
|
Font.Height = -11
|
||||||
|
Font.Style = []
|
||||||
|
OnCreate = FormCreate
|
||||||
|
PixelsPerInch = 96
|
||||||
|
TextHeight = 13
|
||||||
|
object Panel1: TPanel
|
||||||
|
Left = 0
|
||||||
|
Top = 0
|
||||||
|
Width = 577
|
||||||
|
Height = 97
|
||||||
|
Align = alTop
|
||||||
|
Font.Charset = DEFAULT_CHARSET
|
||||||
|
Font.Color = clWindowText
|
||||||
|
Font.Height = -11
|
||||||
|
Font.Style = []
|
||||||
|
ParentFont = False
|
||||||
|
TabOrder = 0
|
||||||
|
object OvcLabel: TOvcLabel
|
||||||
|
Left = 1
|
||||||
|
Top = 1
|
||||||
|
Width = 575
|
||||||
|
Height = 95
|
||||||
|
Align = alClient
|
||||||
|
Alignment = taCenter
|
||||||
|
Appearance = apCustom
|
||||||
|
Caption = 'Orpheus Labels'
|
||||||
|
ColorScheme = csCustom
|
||||||
|
Font.Charset = DEFAULT_CHARSET
|
||||||
|
Font.Color = clGray
|
||||||
|
Font.Height = -27
|
||||||
|
Font.Style = []
|
||||||
|
ParentFont = False
|
||||||
|
end
|
||||||
|
end
|
||||||
|
object Button1: TButton
|
||||||
|
Left = 418
|
||||||
|
Top = 427
|
||||||
|
Width = 75
|
||||||
|
Height = 25
|
||||||
|
Caption = 'OK'
|
||||||
|
Default = True
|
||||||
|
ModalResult = 1
|
||||||
|
TabOrder = 4
|
||||||
|
end
|
||||||
|
object Button2: TButton
|
||||||
|
Left = 500
|
||||||
|
Top = 427
|
||||||
|
Width = 75
|
||||||
|
Height = 25
|
||||||
|
Cancel = True
|
||||||
|
Caption = 'Cancel'
|
||||||
|
ModalResult = 2
|
||||||
|
TabOrder = 5
|
||||||
|
end
|
||||||
|
object Panel2: TPanel
|
||||||
|
Left = 0
|
||||||
|
Top = 364
|
||||||
|
Width = 393
|
||||||
|
Height = 91
|
||||||
|
TabOrder = 3
|
||||||
|
object Label1: TLabel
|
||||||
|
Left = 4
|
||||||
|
Top = 4
|
||||||
|
Width = 57
|
||||||
|
Height = 13
|
||||||
|
Caption = 'Style Name:'
|
||||||
|
end
|
||||||
|
object Label2: TLabel
|
||||||
|
Left = 256
|
||||||
|
Top = 5
|
||||||
|
Width = 61
|
||||||
|
Height = 13
|
||||||
|
Caption = 'Appearance:'
|
||||||
|
end
|
||||||
|
object Label3: TLabel
|
||||||
|
Left = 256
|
||||||
|
Top = 48
|
||||||
|
Width = 69
|
||||||
|
Height = 13
|
||||||
|
Caption = 'Color Scheme:'
|
||||||
|
end
|
||||||
|
object SchemeCb: TComboBox
|
||||||
|
Left = 4
|
||||||
|
Top = 20
|
||||||
|
Width = 233
|
||||||
|
Height = 21
|
||||||
|
Style = csDropDownList
|
||||||
|
ItemHeight = 13
|
||||||
|
Items.Strings = (
|
||||||
|
'one'
|
||||||
|
'two')
|
||||||
|
MaxLength = 255
|
||||||
|
Sorted = True
|
||||||
|
TabOrder = 0
|
||||||
|
OnChange = SchemeCbChange
|
||||||
|
end
|
||||||
|
object SaveAsBtn: TButton
|
||||||
|
Left = 4
|
||||||
|
Top = 55
|
||||||
|
Width = 75
|
||||||
|
Height = 25
|
||||||
|
Caption = 'Save &As...'
|
||||||
|
TabOrder = 1
|
||||||
|
OnClick = SaveAsBtnClick
|
||||||
|
end
|
||||||
|
object DeleteBtn: TButton
|
||||||
|
Left = 161
|
||||||
|
Top = 55
|
||||||
|
Width = 75
|
||||||
|
Height = 25
|
||||||
|
Caption = '&Delete'
|
||||||
|
TabOrder = 2
|
||||||
|
OnClick = DeleteBtnClick
|
||||||
|
end
|
||||||
|
object AppearanceCb: TComboBox
|
||||||
|
Left = 256
|
||||||
|
Top = 20
|
||||||
|
Width = 126
|
||||||
|
Height = 21
|
||||||
|
ItemHeight = 13
|
||||||
|
TabOrder = 3
|
||||||
|
OnChange = AppearanceCbChange
|
||||||
|
end
|
||||||
|
object ColorSchemeCb: TComboBox
|
||||||
|
Left = 256
|
||||||
|
Top = 62
|
||||||
|
Width = 126
|
||||||
|
Height = 21
|
||||||
|
ItemHeight = 13
|
||||||
|
TabOrder = 4
|
||||||
|
OnChange = ColorSchemeCbChange
|
||||||
|
end
|
||||||
|
end
|
||||||
|
object Panel3: TPanel
|
||||||
|
Left = 0
|
||||||
|
Top = 97
|
||||||
|
Width = 577
|
||||||
|
Height = 189
|
||||||
|
TabOrder = 1
|
||||||
|
object Label4: TLabel
|
||||||
|
Left = 152
|
||||||
|
Top = 83
|
||||||
|
Width = 70
|
||||||
|
Height = 13
|
||||||
|
Caption = 'Gradient Color:'
|
||||||
|
end
|
||||||
|
object Label5: TLabel
|
||||||
|
Left = 294
|
||||||
|
Top = 83
|
||||||
|
Width = 71
|
||||||
|
Height = 13
|
||||||
|
Caption = 'Highlight Color:'
|
||||||
|
end
|
||||||
|
object Label6: TLabel
|
||||||
|
Left = 437
|
||||||
|
Top = 83
|
||||||
|
Width = 69
|
||||||
|
Height = 13
|
||||||
|
Caption = 'Shadow Color:'
|
||||||
|
end
|
||||||
|
object HighlightDirectionLbl: TLabel
|
||||||
|
Left = 304
|
||||||
|
Top = 128
|
||||||
|
Width = 50
|
||||||
|
Height = 32
|
||||||
|
AutoSize = False
|
||||||
|
Caption = 'Highlight Direction:'
|
||||||
|
WordWrap = True
|
||||||
|
end
|
||||||
|
object ShadowDirectionLbl: TLabel
|
||||||
|
Left = 447
|
||||||
|
Top = 128
|
||||||
|
Width = 50
|
||||||
|
Height = 32
|
||||||
|
AutoSize = False
|
||||||
|
Caption = 'Shadow Direction:'
|
||||||
|
WordWrap = True
|
||||||
|
end
|
||||||
|
object Label7: TLabel
|
||||||
|
Left = 8
|
||||||
|
Top = 65
|
||||||
|
Width = 53
|
||||||
|
Height = 13
|
||||||
|
Caption = 'Text Color/'
|
||||||
|
end
|
||||||
|
object Label8: TLabel
|
||||||
|
Left = 8
|
||||||
|
Top = 78
|
||||||
|
Width = 86
|
||||||
|
Height = 13
|
||||||
|
Caption = 'Gradient To Color:'
|
||||||
|
end
|
||||||
|
object GraduateRg: TRadioGroup
|
||||||
|
Left = 150
|
||||||
|
Top = 3
|
||||||
|
Width = 137
|
||||||
|
Height = 73
|
||||||
|
Caption = 'Text &Gradient Style'
|
||||||
|
ItemIndex = 0
|
||||||
|
Items.Strings = (
|
||||||
|
'None'
|
||||||
|
'Horizontal'
|
||||||
|
'Vertical')
|
||||||
|
OnClick = GraduateRgClick
|
||||||
|
end
|
||||||
|
object ShadowRg: TRadioGroup
|
||||||
|
Left = 436
|
||||||
|
Top = 3
|
||||||
|
Width = 137
|
||||||
|
Height = 73
|
||||||
|
Caption = '&Shadow Style'
|
||||||
|
ItemIndex = 0
|
||||||
|
Items.Strings = (
|
||||||
|
'Plain'
|
||||||
|
'Extrude'
|
||||||
|
'Graduate')
|
||||||
|
OnClick = ShadowRgClick
|
||||||
|
end
|
||||||
|
object HighlightRg: TRadioGroup
|
||||||
|
Left = 293
|
||||||
|
Top = 3
|
||||||
|
Width = 137
|
||||||
|
Height = 73
|
||||||
|
Caption = '&Highlight Style'
|
||||||
|
ItemIndex = 0
|
||||||
|
Items.Strings = (
|
||||||
|
'Plain'
|
||||||
|
'Extrude'
|
||||||
|
'Graduate')
|
||||||
|
OnClick = HighlightRgClick
|
||||||
|
end
|
||||||
|
object FromColorCcb: TOvcColorComboBox
|
||||||
|
Left = 151
|
||||||
|
Top = 99
|
||||||
|
Width = 137
|
||||||
|
Height = 22
|
||||||
|
ItemHeight = 12
|
||||||
|
SelectedColor = clBlack
|
||||||
|
TabOrder = 4
|
||||||
|
Text = 'Black'
|
||||||
|
OnChange = FromColorCcbChange
|
||||||
|
end
|
||||||
|
object HighlightColorCcb: TOvcColorComboBox
|
||||||
|
Left = 293
|
||||||
|
Top = 99
|
||||||
|
Width = 137
|
||||||
|
Height = 22
|
||||||
|
ItemHeight = 12
|
||||||
|
SelectedColor = clBlack
|
||||||
|
TabOrder = 5
|
||||||
|
Text = 'Black'
|
||||||
|
OnChange = HighlightColorCcbChange
|
||||||
|
end
|
||||||
|
object ShadowColorCcb: TOvcColorComboBox
|
||||||
|
Left = 436
|
||||||
|
Top = 99
|
||||||
|
Width = 137
|
||||||
|
Height = 22
|
||||||
|
ItemHeight = 12
|
||||||
|
SelectedColor = clBlack
|
||||||
|
TabOrder = 6
|
||||||
|
Text = 'Black'
|
||||||
|
OnChange = ShadowColorCcbChange
|
||||||
|
end
|
||||||
|
object FontColorCcb: TOvcColorComboBox
|
||||||
|
Left = 7
|
||||||
|
Top = 99
|
||||||
|
Width = 137
|
||||||
|
Height = 22
|
||||||
|
ItemHeight = 12
|
||||||
|
SelectedColor = clBlack
|
||||||
|
TabOrder = 0
|
||||||
|
Text = 'Black'
|
||||||
|
OnChange = FontColorCcbChange
|
||||||
|
end
|
||||||
|
end
|
||||||
|
object Panel4: TPanel
|
||||||
|
Left = 0
|
||||||
|
Top = 286
|
||||||
|
Width = 577
|
||||||
|
Height = 78
|
||||||
|
TabOrder = 2
|
||||||
|
object Label9: TLabel
|
||||||
|
Left = 20
|
||||||
|
Top = 8
|
||||||
|
Width = 105
|
||||||
|
Height = 13
|
||||||
|
Alignment = taRightJustify
|
||||||
|
AutoSize = False
|
||||||
|
Caption = 'Font Size: '
|
||||||
|
end
|
||||||
|
object FontSizeLbl: TLabel
|
||||||
|
Left = 500
|
||||||
|
Top = 8
|
||||||
|
Width = 6
|
||||||
|
Height = 13
|
||||||
|
Caption = '0'
|
||||||
|
end
|
||||||
|
object HighlightDepthLbl: TLabel
|
||||||
|
Left = 500
|
||||||
|
Top = 32
|
||||||
|
Width = 6
|
||||||
|
Height = 13
|
||||||
|
Caption = '0'
|
||||||
|
end
|
||||||
|
object ShadowDepthLbl: TLabel
|
||||||
|
Left = 500
|
||||||
|
Top = 56
|
||||||
|
Width = 6
|
||||||
|
Height = 13
|
||||||
|
Caption = '0'
|
||||||
|
end
|
||||||
|
object Label10: TLabel
|
||||||
|
Left = 20
|
||||||
|
Top = 32
|
||||||
|
Width = 105
|
||||||
|
Height = 13
|
||||||
|
Alignment = taRightJustify
|
||||||
|
AutoSize = False
|
||||||
|
Caption = 'Highlight Depth: '
|
||||||
|
end
|
||||||
|
object Label11: TLabel
|
||||||
|
Left = 20
|
||||||
|
Top = 56
|
||||||
|
Width = 105
|
||||||
|
Height = 13
|
||||||
|
Alignment = taRightJustify
|
||||||
|
AutoSize = False
|
||||||
|
Caption = 'Shadow Depth: '
|
||||||
|
end
|
||||||
|
object FontSizeSb: TScrollBar
|
||||||
|
Left = 132
|
||||||
|
Top = 8
|
||||||
|
Width = 357
|
||||||
|
Height = 14
|
||||||
|
TabOrder = 0
|
||||||
|
OnChange = FontSizeSbChange
|
||||||
|
end
|
||||||
|
object ShadowDepthSb: TScrollBar
|
||||||
|
Left = 132
|
||||||
|
Top = 56
|
||||||
|
Width = 357
|
||||||
|
Height = 14
|
||||||
|
Max = 50
|
||||||
|
TabOrder = 2
|
||||||
|
OnChange = ShadowDepthSbChange
|
||||||
|
end
|
||||||
|
object HighlightDepthSb: TScrollBar
|
||||||
|
Left = 132
|
||||||
|
Top = 32
|
||||||
|
Width = 357
|
||||||
|
Height = 14
|
||||||
|
Max = 50
|
||||||
|
TabOrder = 1
|
||||||
|
OnChange = HighlightDepthSbChange
|
||||||
|
end
|
||||||
|
end
|
||||||
|
object OvcController1: TOvcController
|
||||||
|
EntryCommands.TableList = (
|
||||||
|
'Default'
|
||||||
|
True
|
||||||
|
()
|
||||||
|
'WordStar'
|
||||||
|
False
|
||||||
|
()
|
||||||
|
'Grid'
|
||||||
|
False
|
||||||
|
())
|
||||||
|
Epoch = 1900
|
||||||
|
end
|
||||||
|
end
|
92
components/orpheus/ovclbl0.lrs
Normal file
@ -0,0 +1,92 @@
|
|||||||
|
LazarusResources.Add('TfrmOvcLabel','FORMDATA',[
|
||||||
|
'TPF0'#12'TfrmOvcLabel'#11'frmOvcLabel'#4'Left'#3'H'#1#3'Top'#3#198#0#11'Bord'
|
||||||
|
+'erStyle'#7#8'bsDialog'#7'Caption'#6#13'Style Manager'#12'ClientHeight'#3#200
|
||||||
|
+#1#6'Height'#3#200#1#11'ClientWidth'#3'A'#2#5'Width'#3'A'#2#12'Font.Charset'
|
||||||
|
+#7#15'DEFAULT_CHARSET'#10'Font.Color'#7#12'clWindowText'#11'Font.Height'#2
|
||||||
|
+#245#10'Font.Style'#11#0#8'OnCreate'#7#10'FormCreate'#13'PixelsPerInch'#2'`'
|
||||||
|
+#10'TextHeight'#2#13#0#6'TPanel'#6'Panel1'#4'Left'#2#0#3'Top'#2#0#5'Width'#3
|
||||||
|
+'A'#2#6'Height'#2'a'#5'Align'#7#5'alTop'#12'Font.Charset'#7#15'DEFAULT_CHARS'
|
||||||
|
+'ET'#10'Font.Color'#7#12'clWindowText'#11'Font.Height'#2#245#10'Font.Style'
|
||||||
|
+#11#0#10'ParentFont'#8#8'TabOrder'#2#0#0#9'TOvcLabel'#8'OvcLabel'#4'Left'#2#1
|
||||||
|
+#3'Top'#2#1#5'Width'#3'?'#2#6'Height'#2'_'#5'Align'#7#8'alClient'#9'Alignmen'
|
||||||
|
+'t'#7#8'taCenter'#10'Appearance'#7#8'apCustom'#7'Caption'#6#14'Orpheus Label'
|
||||||
|
+'s'#11'ColorScheme'#7#8'csCustom'#12'Font.Charset'#7#15'DEFAULT_CHARSET'#10
|
||||||
|
+'Font.Color'#7#6'clGray'#11'Font.Height'#2#229#10'Font.Style'#11#0#10'Parent'
|
||||||
|
+'Font'#8#0#0#0#7'TButton'#7'Button1'#4'Left'#3#162#1#3'Top'#3#171#1#5'Width'
|
||||||
|
+#2'K'#6'Height'#2#25#7'Caption'#6#2'OK'#7'Default'#9#11'ModalResult'#2#1#8'T'
|
||||||
|
+'abOrder'#2#4#0#0#7'TButton'#7'Button2'#4'Left'#3#244#1#3'Top'#3#171#1#5'Wid'
|
||||||
|
+'th'#2'K'#6'Height'#2#25#6'Cancel'#9#7'Caption'#6#6'Cancel'#11'ModalResult'#2
|
||||||
|
+#2#8'TabOrder'#2#5#0#0#6'TPanel'#6'Panel2'#4'Left'#2#0#3'Top'#3'l'#1#5'Width'
|
||||||
|
+#3#137#1#6'Height'#2'['#8'TabOrder'#2#3#0#6'TLabel'#6'Label1'#4'Left'#2#4#3
|
||||||
|
+'Top'#2#4#5'Width'#2'9'#6'Height'#2#13#7'Caption'#6#11'Style Name:'#0#0#6'TL'
|
||||||
|
+'abel'#6'Label2'#4'Left'#3#0#1#3'Top'#2#5#5'Width'#2'='#6'Height'#2#13#7'Cap'
|
||||||
|
+'tion'#6#11'Appearance:'#0#0#6'TLabel'#6'Label3'#4'Left'#3#0#1#3'Top'#2'0'#5
|
||||||
|
+'Width'#2'E'#6'Height'#2#13#7'Caption'#6#13'Color Scheme:'#0#0#9'TComboBox'#8
|
||||||
|
+'SchemeCb'#4'Left'#2#4#3'Top'#2#20#5'Width'#3#233#0#6'Height'#2#21#5'Style'#7
|
||||||
|
+#14'csDropDownList'#10'ItemHeight'#2#13#13'Items.Strings'#1#6#3'one'#6#3'two'
|
||||||
|
+#0#9'MaxLength'#3#255#0#6'Sorted'#9#8'TabOrder'#2#0#8'OnChange'#7#14'SchemeC'
|
||||||
|
+'bChange'#0#0#7'TButton'#9'SaveAsBtn'#4'Left'#2#4#3'Top'#2'7'#5'Width'#2'K'#6
|
||||||
|
+'Height'#2#25#7'Caption'#6#11'Save &As...'#8'TabOrder'#2#1#7'OnClick'#7#14'S'
|
||||||
|
+'aveAsBtnClick'#0#0#7'TButton'#9'DeleteBtn'#4'Left'#3#161#0#3'Top'#2'7'#5'Wi'
|
||||||
|
+'dth'#2'K'#6'Height'#2#25#7'Caption'#6#7'&Delete'#8'TabOrder'#2#2#7'OnClick'
|
||||||
|
+#7#14'DeleteBtnClick'#0#0#9'TComboBox'#12'AppearanceCb'#4'Left'#3#0#1#3'Top'
|
||||||
|
+#2#20#5'Width'#2'~'#6'Height'#2#21#10'ItemHeight'#2#13#8'TabOrder'#2#3#8'OnC'
|
||||||
|
+'hange'#7#18'AppearanceCbChange'#0#0#9'TComboBox'#13'ColorSchemeCb'#4'Left'#3
|
||||||
|
+#0#1#3'Top'#2'>'#5'Width'#2'~'#6'Height'#2#21#10'ItemHeight'#2#13#8'TabOrder'
|
||||||
|
+#2#4#8'OnChange'#7#19'ColorSchemeCbChange'#0#0#0#6'TPanel'#6'Panel3'#4'Left'
|
||||||
|
+#2#0#3'Top'#2'a'#5'Width'#3'A'#2#6'Height'#3#189#0#8'TabOrder'#2#1#0#6'TLabe'
|
||||||
|
+'l'#6'Label4'#4'Left'#3#152#0#3'Top'#2'S'#5'Width'#2'F'#6'Height'#2#13#7'Cap'
|
||||||
|
+'tion'#6#15'Gradient Color:'#0#0#6'TLabel'#6'Label5'#4'Left'#3'&'#1#3'Top'#2
|
||||||
|
+'S'#5'Width'#2'G'#6'Height'#2#13#7'Caption'#6#16'Highlight Color:'#0#0#6'TLa'
|
||||||
|
+'bel'#6'Label6'#4'Left'#3#181#1#3'Top'#2'S'#5'Width'#2'E'#6'Height'#2#13#7'C'
|
||||||
|
+'aption'#6#13'Shadow Color:'#0#0#6'TLabel'#21'HighlightDirectionLbl'#4'Left'
|
||||||
|
+#3'0'#1#3'Top'#3#128#0#5'Width'#2'2'#6'Height'#2' '#8'AutoSize'#8#7'Caption'
|
||||||
|
+#6#20'Highlight Direction:'#8'WordWrap'#9#0#0#6'TLabel'#18'ShadowDirectionLb'
|
||||||
|
+'l'#4'Left'#3#191#1#3'Top'#3#128#0#5'Width'#2'2'#6'Height'#2' '#8'AutoSize'#8
|
||||||
|
+#7'Caption'#6#17'Shadow Direction:'#8'WordWrap'#9#0#0#6'TLabel'#6'Label7'#4
|
||||||
|
+'Left'#2#8#3'Top'#2'A'#5'Width'#2'5'#6'Height'#2#13#7'Caption'#6#11'Text Col'
|
||||||
|
+'or/'#0#0#6'TLabel'#6'Label8'#4'Left'#2#8#3'Top'#2'N'#5'Width'#2'V'#6'Height'
|
||||||
|
+#2#13#7'Caption'#6#18'Gradient To Color:'#0#0#11'TRadioGroup'#10'GraduateRg'
|
||||||
|
+#4'Left'#3#150#0#3'Top'#2#3#5'Width'#3#137#0#6'Height'#2'I'#7'Caption'#6#20
|
||||||
|
+'Text &Gradient Style'#9'ItemIndex'#2#0#13'Items.Strings'#1#6#4'None'#6#10'H'
|
||||||
|
+'orizontal'#6#8'Vertical'#0#7'OnClick'#7#15'GraduateRgClick'#0#0#11'TRadioGr'
|
||||||
|
+'oup'#8'ShadowRg'#4'Left'#3#180#1#3'Top'#2#3#5'Width'#3#137#0#6'Height'#2'I'
|
||||||
|
+#7'Caption'#6#13'&Shadow Style'#9'ItemIndex'#2#0#13'Items.Strings'#1#6#5'Pla'
|
||||||
|
+'in'#6#7'Extrude'#6#8'Graduate'#0#7'OnClick'#7#13'ShadowRgClick'#0#0#11'TRad'
|
||||||
|
+'ioGroup'#11'HighlightRg'#4'Left'#3'%'#1#3'Top'#2#3#5'Width'#3#137#0#6'Heigh'
|
||||||
|
+'t'#2'I'#7'Caption'#6#16'&Highlight Style'#9'ItemIndex'#2#0#13'Items.Strings'
|
||||||
|
+#1#6#5'Plain'#6#7'Extrude'#6#8'Graduate'#0#7'OnClick'#7#16'HighlightRgClick'
|
||||||
|
+#0#0#17'TOvcColorComboBox'#12'FromColorCcb'#4'Left'#3#151#0#3'Top'#2'c'#5'Wi'
|
||||||
|
+'dth'#3#137#0#6'Height'#2#22#10'ItemHeight'#2#12#13'SelectedColor'#7#7'clBla'
|
||||||
|
+'ck'#8'TabOrder'#2#4#4'Text'#6#5'Black'#8'OnChange'#7#18'FromColorCcbChange'
|
||||||
|
+#0#0#17'TOvcColorComboBox'#17'HighlightColorCcb'#4'Left'#3'%'#1#3'Top'#2'c'#5
|
||||||
|
+'Width'#3#137#0#6'Height'#2#22#10'ItemHeight'#2#12#13'SelectedColor'#7#7'clB'
|
||||||
|
+'lack'#8'TabOrder'#2#5#4'Text'#6#5'Black'#8'OnChange'#7#23'HighlightColorCcb'
|
||||||
|
+'Change'#0#0#17'TOvcColorComboBox'#14'ShadowColorCcb'#4'Left'#3#180#1#3'Top'
|
||||||
|
,#2'c'#5'Width'#3#137#0#6'Height'#2#22#10'ItemHeight'#2#12#13'SelectedColor'#7
|
||||||
|
+#7'clBlack'#8'TabOrder'#2#6#4'Text'#6#5'Black'#8'OnChange'#7#20'ShadowColorC'
|
||||||
|
+'cbChange'#0#0#17'TOvcColorComboBox'#12'FontColorCcb'#4'Left'#2#7#3'Top'#2'c'
|
||||||
|
+#5'Width'#3#137#0#6'Height'#2#22#10'ItemHeight'#2#12#13'SelectedColor'#7#7'c'
|
||||||
|
+'lBlack'#8'TabOrder'#2#0#4'Text'#6#5'Black'#8'OnChange'#7#18'FontColorCcbCha'
|
||||||
|
+'nge'#0#0#0#6'TPanel'#6'Panel4'#4'Left'#2#0#3'Top'#3#30#1#5'Width'#3'A'#2#6
|
||||||
|
+'Height'#2'N'#8'TabOrder'#2#2#0#6'TLabel'#6'Label9'#4'Left'#2#20#3'Top'#2#8#5
|
||||||
|
+'Width'#2'i'#6'Height'#2#13#9'Alignment'#7#14'taRightJustify'#8'AutoSize'#8#7
|
||||||
|
+'Caption'#6#11'Font Size: '#0#0#6'TLabel'#11'FontSizeLbl'#4'Left'#3#244#1#3
|
||||||
|
+'Top'#2#8#5'Width'#2#6#6'Height'#2#13#7'Caption'#6#1'0'#0#0#6'TLabel'#17'Hig'
|
||||||
|
+'hlightDepthLbl'#4'Left'#3#244#1#3'Top'#2' '#5'Width'#2#6#6'Height'#2#13#7'C'
|
||||||
|
+'aption'#6#1'0'#0#0#6'TLabel'#14'ShadowDepthLbl'#4'Left'#3#244#1#3'Top'#2'8'
|
||||||
|
+#5'Width'#2#6#6'Height'#2#13#7'Caption'#6#1'0'#0#0#6'TLabel'#7'Label10'#4'Le'
|
||||||
|
+'ft'#2#20#3'Top'#2' '#5'Width'#2'i'#6'Height'#2#13#9'Alignment'#7#14'taRight'
|
||||||
|
+'Justify'#8'AutoSize'#8#7'Caption'#6#17'Highlight Depth: '#0#0#6'TLabel'#7'L'
|
||||||
|
+'abel11'#4'Left'#2#20#3'Top'#2'8'#5'Width'#2'i'#6'Height'#2#13#9'Alignment'#7
|
||||||
|
+#14'taRightJustify'#8'AutoSize'#8#7'Caption'#6#14'Shadow Depth: '#0#0#10'TSc'
|
||||||
|
+'rollBar'#10'FontSizeSb'#4'Left'#3#132#0#3'Top'#2#8#5'Width'#3'e'#1#6'Height'
|
||||||
|
+#2#14#8'TabOrder'#2#0#8'OnChange'#7#16'FontSizeSbChange'#0#0#10'TScrollBar'
|
||||||
|
+#13'ShadowDepthSb'#4'Left'#3#132#0#3'Top'#2'8'#5'Width'#3'e'#1#6'Height'#2#14
|
||||||
|
+#3'Max'#2'2'#8'TabOrder'#2#2#8'OnChange'#7#19'ShadowDepthSbChange'#0#0#10'TS'
|
||||||
|
+'crollBar'#16'HighlightDepthSb'#4'Left'#3#132#0#3'Top'#2' '#5'Width'#3'e'#1#6
|
||||||
|
+'Height'#2#14#3'Max'#2'2'#8'TabOrder'#2#1#8'OnChange'#7#22'HighlightDepthSbC'
|
||||||
|
+'hange'#0#0#0#14'TOvcController'#14'OvcController1'#23'EntryCommands.TableLi'
|
||||||
|
+'st'#1#6#7'Default'#9#1#0#6#8'WordStar'#8#1#0#6#4'Grid'#8#1#0#0#5'Epoch'#3'l'
|
||||||
|
+#7#0#0#0
|
||||||
|
]);
|
610
components/orpheus/ovclbl0.pas
Normal file
@ -0,0 +1,610 @@
|
|||||||
|
{*********************************************************}
|
||||||
|
{* OVCLBL0.PAS 4.06 *}
|
||||||
|
{*********************************************************}
|
||||||
|
|
||||||
|
{* ***** BEGIN LICENSE BLOCK ***** *}
|
||||||
|
{* Version: MPL 1.1 *}
|
||||||
|
{* *}
|
||||||
|
{* The contents of this file are subject to the Mozilla Public License *}
|
||||||
|
{* Version 1.1 (the "License"); you may not use this file except in *}
|
||||||
|
{* compliance with the License. You may obtain a copy of the License at *}
|
||||||
|
{* http://www.mozilla.org/MPL/ *}
|
||||||
|
{* *}
|
||||||
|
{* Software distributed under the License is distributed on an "AS IS" basis, *}
|
||||||
|
{* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License *}
|
||||||
|
{* for the specific language governing rights and limitations under the *}
|
||||||
|
{* License. *}
|
||||||
|
{* *}
|
||||||
|
{* The Original Code is TurboPower Orpheus *}
|
||||||
|
{* *}
|
||||||
|
{* The Initial Developer of the Original Code is TurboPower Software *}
|
||||||
|
{* *}
|
||||||
|
{* Portions created by TurboPower Software Inc. are Copyright (C)1995-2002 *}
|
||||||
|
{* TurboPower Software Inc. All Rights Reserved. *}
|
||||||
|
{* *}
|
||||||
|
{* Contributor(s): *}
|
||||||
|
{* *}
|
||||||
|
{* ***** END LICENSE BLOCK ***** *}
|
||||||
|
|
||||||
|
{$I OVC.INC}
|
||||||
|
|
||||||
|
{$B-} {Complete Boolean Evaluation}
|
||||||
|
{$I+} {Input/Output-Checking}
|
||||||
|
{$P+} {Open Parameters}
|
||||||
|
{$T-} {Typed @ Operator}
|
||||||
|
{.W-} {Windows Stack Frame}
|
||||||
|
{$X+} {Extended Syntax}
|
||||||
|
|
||||||
|
unit ovclbl0;
|
||||||
|
|
||||||
|
interface
|
||||||
|
|
||||||
|
uses
|
||||||
|
{$IFNDEF LCL} Windows, Messages, {$ELSE} LclIntf, LMessages, LclType, LResources, Buttons, {$ENDIF}
|
||||||
|
SysUtils, Classes, Graphics, Controls, Forms,
|
||||||
|
Dialogs, StdCtrls, ExtCtrls,
|
||||||
|
{$IFNDEF LCL} {$IFDEF VERSION6} DesignIntf, DesignEditors, {$ELSE} DsgnIntf, {$ENDIF} {$ELSE} PropEdits, ComponentEditors, {$ENDIF}
|
||||||
|
Menus, IniFiles, OvcLbl2, TypInfo, OvcCmbx, OvcClrCb, OvcLabel, OvcBase,
|
||||||
|
OvcData;
|
||||||
|
|
||||||
|
type
|
||||||
|
TfrmOvcLabel = class(TForm)
|
||||||
|
Panel1: TPanel;
|
||||||
|
OvcLabel: TOvcLabel;
|
||||||
|
Button1: TButton;
|
||||||
|
Button2: TButton;
|
||||||
|
Panel2: TPanel;
|
||||||
|
Label1: TLabel;
|
||||||
|
Label2: TLabel;
|
||||||
|
Label3: TLabel;
|
||||||
|
SchemeCb: TComboBox;
|
||||||
|
SaveAsBtn: TButton;
|
||||||
|
DeleteBtn: TButton;
|
||||||
|
Panel3: TPanel;
|
||||||
|
Label4: TLabel;
|
||||||
|
Label5: TLabel;
|
||||||
|
Label6: TLabel;
|
||||||
|
Label7: TLabel;
|
||||||
|
Label8: TLabel;
|
||||||
|
GraduateRg: TRadioGroup;
|
||||||
|
ShadowRg: TRadioGroup;
|
||||||
|
HighlightRg: TRadioGroup;
|
||||||
|
FromColorCcb: TOvcColorComboBox;
|
||||||
|
HighlightColorCcb: TOvcColorComboBox;
|
||||||
|
ShadowColorCcb: TOvcColorComboBox;
|
||||||
|
HighlightDirectionLbl: TLabel;
|
||||||
|
ShadowDirectionLbl: TLabel;
|
||||||
|
FontColorCcb: TOvcColorComboBox;
|
||||||
|
Panel4: TPanel;
|
||||||
|
Label9: TLabel;
|
||||||
|
Label10: TLabel;
|
||||||
|
Label11: TLabel;
|
||||||
|
FontSizeSb: TScrollBar;
|
||||||
|
FontSizeLbl: TLabel;
|
||||||
|
HighlightDepthLbl: TLabel;
|
||||||
|
ShadowDepthLbl: TLabel;
|
||||||
|
ShadowDepthSb: TScrollBar;
|
||||||
|
HighlightDepthSb: TScrollBar;
|
||||||
|
AppearanceCb: TComboBox;
|
||||||
|
ColorSchemeCb: TComboBox;
|
||||||
|
OvcController1: TOvcController;
|
||||||
|
procedure FontSizeSbChange(Sender: TObject);
|
||||||
|
procedure HighlightDepthSbChange(Sender: TObject);
|
||||||
|
procedure ShadowDepthSbChange(Sender: TObject);
|
||||||
|
procedure GraduateRgClick(Sender: TObject);
|
||||||
|
procedure HighlightRgClick(Sender: TObject);
|
||||||
|
procedure ShadowRgClick(Sender: TObject);
|
||||||
|
procedure FromColorCcbChange(Sender: TObject);
|
||||||
|
procedure HighlightColorCcbChange(Sender: TObject);
|
||||||
|
procedure ShadowColorCcbChange(Sender: TObject);
|
||||||
|
procedure FontColorCcbChange(Sender: TObject);
|
||||||
|
procedure FormCreate(Sender: TObject);
|
||||||
|
procedure SaveAsBtnClick(Sender: TObject);
|
||||||
|
procedure DeleteBtnClick(Sender: TObject);
|
||||||
|
procedure SchemeCbChange(Sender: TObject);
|
||||||
|
procedure AppearanceCbChange(Sender: TObject);
|
||||||
|
procedure ColorSchemeCbChange(Sender: TObject);
|
||||||
|
private
|
||||||
|
public
|
||||||
|
HighlightDirectionDp : TOvcDirectionPicker;
|
||||||
|
ShadowDirectionDp : TOvcDirectionPicker;
|
||||||
|
SettingScheme : Boolean;
|
||||||
|
SettingCb : Boolean;
|
||||||
|
|
||||||
|
procedure DeleteScheme(const S : string);
|
||||||
|
procedure HighlightDirectionChange(Sender: TObject);
|
||||||
|
procedure ShadowDirectionChange(Sender: TObject);
|
||||||
|
procedure SchemeChange;
|
||||||
|
end;
|
||||||
|
|
||||||
|
type
|
||||||
|
{component editor for the notebook pages}
|
||||||
|
{$IFNDEF LCL}
|
||||||
|
TOvcLabelEditor = class(TDefaultEditor)
|
||||||
|
{$ELSE}
|
||||||
|
TOvcLabelEditor = class(TDefaultComponentEditor)
|
||||||
|
{$ENDIF}
|
||||||
|
public
|
||||||
|
procedure ExecuteVerb(Index : Integer);
|
||||||
|
override;
|
||||||
|
function GetVerb(Index : Integer) : AnsiString;
|
||||||
|
override;
|
||||||
|
function GetVerbCount : Integer;
|
||||||
|
override;
|
||||||
|
end;
|
||||||
|
|
||||||
|
{property editor for the special settings class}
|
||||||
|
TOvcCustomSettingsProperty = class(TClassProperty)
|
||||||
|
public
|
||||||
|
procedure Edit;
|
||||||
|
override;
|
||||||
|
function GetAttributes : TPropertyAttributes;
|
||||||
|
override;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function EditOvcLabel(L : TOvcLabel) : Boolean;
|
||||||
|
|
||||||
|
|
||||||
|
implementation
|
||||||
|
|
||||||
|
uses
|
||||||
|
OvcLbl1;
|
||||||
|
|
||||||
|
{$IFNDEF LCL}
|
||||||
|
{$R *.DFM}
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
const
|
||||||
|
IniFileName = 'orpheus.ini';
|
||||||
|
// Note: Location of this file needs to consider platform differences.
|
||||||
|
// Currently creates it in Lazarus folder (Windows) or root folder (OS X).
|
||||||
|
|
||||||
|
function EditOvcLabel(L : TOvcLabel) : Boolean;
|
||||||
|
var
|
||||||
|
D : TfrmOvcLabel;
|
||||||
|
begin
|
||||||
|
Result := False;
|
||||||
|
D := TfrmOvcLabel.Create(Application);
|
||||||
|
try
|
||||||
|
D.OvcLabel.Font.Assign(L.Font);
|
||||||
|
D.OvcLabel.CustomSettings.Assign(L.CustomSettings);
|
||||||
|
|
||||||
|
D.FontSizeSb.Position := L.Font.Size;
|
||||||
|
D.HighlightDepthSB.Position := L.CustomSettings.HighlightDepth;
|
||||||
|
D.ShadowDepthSB.Position := L.CustomSettings.ShadowDepth;
|
||||||
|
|
||||||
|
D.GraduateRg.ItemIndex := Ord(L.CustomSettings.GraduateStyle);
|
||||||
|
D.HighlightRg.ItemIndex := Ord(L.CustomSettings.HighlightStyle);
|
||||||
|
D.ShadowRg.ItemIndex := Ord(L.CustomSettings.ShadowStyle);
|
||||||
|
|
||||||
|
D.FontColorCcb.SelectedColor := L.Font.Color;
|
||||||
|
D.FromColorCcb.SelectedColor := L.CustomSettings.GraduateFromColor;
|
||||||
|
D.HighlightColorCcb.SelectedColor := L.CustomSettings.HighlightColor;
|
||||||
|
D.ShadowColorCcb.SelectedColor := L.CustomSettings.ShadowColor;
|
||||||
|
|
||||||
|
D.HighlightDirectionDp.Direction := Ord(L.CustomSettings.HighlightDirection)-1;
|
||||||
|
D.ShadowDirectionDp.Direction := Ord(L.CustomSettings.ShadowDirection)-1;
|
||||||
|
|
||||||
|
if D.ShowModal = mrOK then begin
|
||||||
|
L.CustomSettings.BeginUpdate;
|
||||||
|
try
|
||||||
|
L.Font.Assign(D.OvcLabel.Font);
|
||||||
|
L.CustomSettings.Assign(D.OvcLabel.CustomSettings);
|
||||||
|
finally
|
||||||
|
L.CustomSettings.EndUpdate;
|
||||||
|
end;
|
||||||
|
Result := True;
|
||||||
|
end;
|
||||||
|
finally
|
||||||
|
D.Free;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
{*** TOvcLabelEditor ***}
|
||||||
|
|
||||||
|
procedure TOvcLabelEditor.ExecuteVerb(Index : Integer);
|
||||||
|
begin
|
||||||
|
if EditOvcLabel(TOvcLabel(Component)) then
|
||||||
|
{$IFNDEF LCL}
|
||||||
|
Designer.Modified;
|
||||||
|
{$ELSE}
|
||||||
|
Modified;
|
||||||
|
{$ENDIF}
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TOvcLabelEditor.GetVerb(Index : Integer) : AnsiString;
|
||||||
|
begin
|
||||||
|
Result := 'Style Manager...';
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TOvcLabelEditor.GetVerbCount : Integer;
|
||||||
|
begin
|
||||||
|
Result := 1;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
{*** TOvcCustomSettingsProperty ***}
|
||||||
|
|
||||||
|
procedure TOvcCustomSettingsProperty.Edit;
|
||||||
|
var
|
||||||
|
I : Integer;
|
||||||
|
C : TComponent;
|
||||||
|
L : TOvcLabel;
|
||||||
|
M : TOvcLabel;
|
||||||
|
begin
|
||||||
|
C := TComponent(GetComponent(0));
|
||||||
|
if C is TOvcCustomLabel then begin
|
||||||
|
L := TOvcLabel(C);
|
||||||
|
if EditOvcLabel(L) then begin
|
||||||
|
{if more than one component selected, apply changes to others}
|
||||||
|
for I := 2 to PropCount do begin
|
||||||
|
M := TOvcLabel(GetComponent(Pred(I)));
|
||||||
|
M.CustomSettings.BeginUpdate;
|
||||||
|
try
|
||||||
|
M.Font.Assign(L.Font);
|
||||||
|
M.CustomSettings.Assign(L.CustomSettings);
|
||||||
|
finally
|
||||||
|
M.CustomSettings.EndUpdate;
|
||||||
|
end;
|
||||||
|
M.Invalidate;
|
||||||
|
end;
|
||||||
|
{$IFNDEF LCL}
|
||||||
|
Designer.Modified;
|
||||||
|
{$ELSE}
|
||||||
|
Modified;
|
||||||
|
{$ENDIF}
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TOvcCustomSettingsProperty.GetAttributes: TPropertyAttributes;
|
||||||
|
begin
|
||||||
|
Result := [paSubProperties, paMultiSelect, paDialog, paReadOnly]
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
{*** TOvcLabelFrm ***}
|
||||||
|
|
||||||
|
procedure TfrmOvcLabel.FontSizeSbChange(Sender: TObject);
|
||||||
|
begin
|
||||||
|
OvcLabel.Font.Size := FontSizeSb.Position;
|
||||||
|
FontSizeLbl.Caption := IntToStr(OvcLabel.Font.Size);
|
||||||
|
SchemeChange;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TfrmOvcLabel.HighlightDepthSbChange(Sender: TObject);
|
||||||
|
begin
|
||||||
|
OvcLabel.CustomSettings.HighlightDepth := HighlightDepthSb.Position;
|
||||||
|
HighlightDepthLbl.Caption := IntToStr(OvcLabel.CustomSettings.HighlightDepth);
|
||||||
|
SchemeChange;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TfrmOvcLabel.ShadowDepthSbChange(Sender: TObject);
|
||||||
|
begin
|
||||||
|
OvcLabel.CustomSettings.ShadowDepth := ShadowDepthSb.Position;
|
||||||
|
ShadowDepthLbl.Caption := IntToStr(OvcLabel.CustomSettings.ShadowDepth);
|
||||||
|
SchemeChange;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TfrmOvcLabel.GraduateRgClick(Sender: TObject);
|
||||||
|
begin
|
||||||
|
case GraduateRg.ItemIndex of
|
||||||
|
0 : OvcLabel.CustomSettings.GraduateStyle := gsNone;
|
||||||
|
1 : OvcLabel.CustomSettings.GraduateStyle := gsHorizontal;
|
||||||
|
2 : OvcLabel.CustomSettings.GraduateStyle := gsVertical;
|
||||||
|
end;
|
||||||
|
SchemeChange;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TfrmOvcLabel.HighlightRgClick(Sender: TObject);
|
||||||
|
begin
|
||||||
|
case HighlightRg.ItemIndex of
|
||||||
|
0 : OvcLabel.CustomSettings.HighlightStyle := ssPlain;
|
||||||
|
1 : OvcLabel.CustomSettings.HighlightStyle := ssExtrude;
|
||||||
|
2 : OvcLabel.CustomSettings.HighlightStyle := ssGraduated;
|
||||||
|
end;
|
||||||
|
SchemeChange;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TfrmOvcLabel.ShadowRgClick(Sender: TObject);
|
||||||
|
begin
|
||||||
|
case ShadowRg.ItemIndex of
|
||||||
|
0 : OvcLabel.CustomSettings.ShadowStyle := ssPlain;
|
||||||
|
1 : OvcLabel.CustomSettings.ShadowStyle := ssExtrude;
|
||||||
|
2 : OvcLabel.CustomSettings.ShadowStyle := ssGraduated;
|
||||||
|
end;
|
||||||
|
SchemeChange;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TfrmOvcLabel.FromColorCcbChange(Sender: TObject);
|
||||||
|
begin
|
||||||
|
OvcLabel.CustomSettings.GraduateFromColor := FromColorCcb.SelectedColor;
|
||||||
|
SchemeChange;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TfrmOvcLabel.HighlightColorCcbChange(Sender: TObject);
|
||||||
|
begin
|
||||||
|
OvcLabel.CustomSettings.HighlightColor := HighlightColorCcb.SelectedColor;
|
||||||
|
SchemeChange;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TfrmOvcLabel.ShadowColorCcbChange(Sender: TObject);
|
||||||
|
begin
|
||||||
|
OvcLabel.CustomSettings.ShadowColor := ShadowColorCcb.SelectedColor;
|
||||||
|
SchemeChange;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TfrmOvcLabel.FontColorCcbChange(Sender: TObject);
|
||||||
|
begin
|
||||||
|
OvcLabel.Font.Color := FontColorCcb.SelectedColor;
|
||||||
|
SchemeChange;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TfrmOvcLabel.FormCreate(Sender: TObject);
|
||||||
|
var
|
||||||
|
Ini : TIniFile;
|
||||||
|
A : TOvcAppearance;
|
||||||
|
C : TOvcColorScheme;
|
||||||
|
begin
|
||||||
|
Top := (Screen.Height - Height) div 3;
|
||||||
|
Left := (Screen.Width - Width) div 2;
|
||||||
|
|
||||||
|
{load scheme names into combo box}
|
||||||
|
Ini := TIniFile.Create(IniFileName);
|
||||||
|
try
|
||||||
|
SchemeCb.Items.Clear;
|
||||||
|
Ini.ReadSection('Schemes', SchemeCb.Items);
|
||||||
|
finally
|
||||||
|
Ini.Free;
|
||||||
|
end;
|
||||||
|
|
||||||
|
{create direction pickers}
|
||||||
|
HighlightDirectionDp := TOvcDirectionPicker.Create(Self);
|
||||||
|
HighlightDirectionDp.Top := HighlightDirectionLbl.Top;
|
||||||
|
HighlightDirectionDp.Left := HighlightDirectionLbl.Left + HighlightDirectionLbl.Width;
|
||||||
|
HighlightDirectionDp.Width := 50;
|
||||||
|
HighlightDirectionDp.Height := 50;
|
||||||
|
HighlightDirectionDp.NumDirections := 8;
|
||||||
|
HighlightDirectionDp.OnChange := HighlightDirectionChange;
|
||||||
|
HighlightDirectionDp.Parent := HighlightDirectionLbl.Parent;
|
||||||
|
HighlightDirectionDp.Visible := True;
|
||||||
|
|
||||||
|
ShadowDirectionDp := TOvcDirectionPicker.Create(Self);
|
||||||
|
ShadowDirectionDp.Top := ShadowDirectionLbl.Top;
|
||||||
|
ShadowDirectionDp.Left := ShadowDirectionLbl.Left + ShadowDirectionLbl.Width;
|
||||||
|
ShadowDirectionDp.Width := 50;
|
||||||
|
ShadowDirectionDp.Height := 50;
|
||||||
|
ShadowDirectionDp.NumDirections := 8;
|
||||||
|
ShadowDirectionDp.OnChange := ShadowDirectionChange;
|
||||||
|
ShadowDirectionDp.Parent := ShadowDirectionLbl.Parent;
|
||||||
|
ShadowDirectionDp.Visible := True;
|
||||||
|
|
||||||
|
{initialize appearance and color scheme ComboBoxes using rtti}
|
||||||
|
for A := Low(TOvcAppearance) to High(TOvcAppearance) do
|
||||||
|
AppearanceCb.Items.Add(GetEnumName(TypeInfo(TOvcAppearance), Ord(A)));
|
||||||
|
for C := Low(TOvcColorScheme) to High(TOvcColorScheme) do
|
||||||
|
ColorSchemeCb.Items.Add(GetEnumName(TypeInfo(TOvcColorScheme), Ord(C)));
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TfrmOvcLabel.SaveAsBtnClick(Sender: TObject);
|
||||||
|
var
|
||||||
|
Ini : TIniFile;
|
||||||
|
S : string;
|
||||||
|
begin
|
||||||
|
with TfrmSaveScheme.Create(Self) do begin
|
||||||
|
if (ShowModal = mrOK) and (SchemeNameEd.Text > '') then begin
|
||||||
|
S := SchemeNameEd.Text;
|
||||||
|
Ini := TIniFile.Create(IniFileName);
|
||||||
|
try
|
||||||
|
{delete scheme}
|
||||||
|
DeleteScheme(S);
|
||||||
|
|
||||||
|
{add scheme name to list of schemes}
|
||||||
|
Ini.WriteInteger('Schemes', S, 0);
|
||||||
|
|
||||||
|
{create new scheme section and add values}
|
||||||
|
Ini.WriteInteger(S, 'GraduateStyle', Ord(OvcLabel.CustomSettings.GraduateStyle));
|
||||||
|
Ini.WriteInteger(S, 'HighlightStyle', Ord(OvcLabel.CustomSettings.HighlightStyle));
|
||||||
|
Ini.WriteInteger(S, 'ShadowStyle', Ord(OvcLabel.CustomSettings.ShadowStyle));
|
||||||
|
Ini.WriteString(S, 'GraduateFromColor', ColorToString(OvcLabel.CustomSettings.GraduateFromColor));
|
||||||
|
Ini.WriteString(S, 'HighlightColor', ColorToString(OvcLabel.CustomSettings.HighlightColor));
|
||||||
|
Ini.WriteString(S, 'ShadowColor', ColorToString(OvcLabel.CustomSettings.ShadowColor));
|
||||||
|
Ini.WriteInteger(S, 'HighlightDirection', Ord(OvcLabel.CustomSettings.HighlightDirection));
|
||||||
|
Ini.WriteInteger(S, 'ShadowDirection', Ord(OvcLabel.CustomSettings.ShadowDirection));
|
||||||
|
Ini.WriteString(S, 'FontColor', ColorToString(OvcLabel.Font.Color));
|
||||||
|
Ini.WriteString(S, 'FontName', OvcLabel.Font.Name);
|
||||||
|
Ini.WriteInteger(S, 'FontPitch', Ord(OvcLabel.Font.Pitch));
|
||||||
|
Ini.WriteInteger(S, 'FontSize', OvcLabel.Font.Size);
|
||||||
|
Ini.WriteBool(S, 'FontBold', fsBold in OvcLabel.Font.Style);
|
||||||
|
Ini.WriteBool(S, 'FontItalic', fsItalic in OvcLabel.Font.Style);
|
||||||
|
Ini.WriteBool(S, 'FontUnderline', fsUnderline in OvcLabel.Font.Style);
|
||||||
|
Ini.WriteBool(S, 'FontStrikeOut', fsStrikeOut in OvcLabel.Font.Style);
|
||||||
|
Ini.WriteInteger(S, 'HighlightDepth', OvcLabel.CustomSettings.HighlightDepth);
|
||||||
|
Ini.WriteInteger(S, 'ShadowDepth', OvcLabel.CustomSettings.ShadowDepth);
|
||||||
|
finally
|
||||||
|
Ini.Free;
|
||||||
|
end;
|
||||||
|
|
||||||
|
{add item to the ComboBox, if its not there already}
|
||||||
|
if SchemeCb.Items.IndexOf(S) < 0 then
|
||||||
|
SchemeCb.Items.Add(S);
|
||||||
|
end;
|
||||||
|
Free;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TfrmOvcLabel.DeleteBtnClick(Sender: TObject);
|
||||||
|
var
|
||||||
|
I : Integer;
|
||||||
|
begin
|
||||||
|
I := SchemeCb.ItemIndex;
|
||||||
|
if I > -1 then begin
|
||||||
|
DeleteScheme(SchemeCb.Items[I]);
|
||||||
|
{delete the entry from the combo box}
|
||||||
|
SchemeCb.Items.Delete(I);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TfrmOvcLabel.DeleteScheme(const S : string);
|
||||||
|
var
|
||||||
|
Ini : TIniFile;
|
||||||
|
begin
|
||||||
|
{delete the scheme entry from the ini file}
|
||||||
|
Ini := TIniFile.Create(IniFileName);
|
||||||
|
try
|
||||||
|
{delete the section}
|
||||||
|
Ini.EraseSection(S);
|
||||||
|
{delete the scheme name}
|
||||||
|
Ini.DeleteKey('Schemes', S);
|
||||||
|
finally
|
||||||
|
Ini.Free;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TfrmOvcLabel.SchemeCbChange(Sender: TObject);
|
||||||
|
var
|
||||||
|
I : Integer;
|
||||||
|
Ini : TIniFile;
|
||||||
|
S : string;
|
||||||
|
begin
|
||||||
|
I := SchemeCb.ItemIndex;
|
||||||
|
if I > -1 then begin
|
||||||
|
S := SchemeCb.Items[I];
|
||||||
|
Ini := TIniFile.Create(IniFileName);
|
||||||
|
SettingScheme := True;
|
||||||
|
try
|
||||||
|
OvcLabel.CustomSettings.GraduateStyle := TOvcGraduateStyle(Ini.ReadInteger(S, 'GraduateStyle', 0));
|
||||||
|
OvcLabel.CustomSettings.HighlightStyle := TOvcShadeStyle(Ini.ReadInteger(S, 'HighlightStyle', 0));
|
||||||
|
OvcLabel.CustomSettings.ShadowStyle := TOvcShadeStyle(Ini.ReadInteger(S, 'ShadowStyle', 0));
|
||||||
|
OvcLabel.CustomSettings.GraduateFromColor := StringToColor(Ini.ReadString(S, 'GraduateFromColor', '0'));
|
||||||
|
OvcLabel.CustomSettings.HighlightColor := StringToColor(Ini.ReadString(S, 'HighlightColor', '0'));
|
||||||
|
OvcLabel.CustomSettings.ShadowColor := StringToColor(Ini.ReadString(S, 'ShadowColor', '0'));
|
||||||
|
OvcLabel.CustomSettings.HighlightDirection := TOvcShadeDirection(Ini.ReadInteger(S, 'HighlightDirection', 0));
|
||||||
|
OvcLabel.CustomSettings.ShadowDirection := TOvcShadeDirection(Ini.ReadInteger(S, 'ShadowDirection', 0));
|
||||||
|
OvcLabel.CustomSettings.HighlightDepth := Ini.ReadInteger(S, 'HighlightDepth', 1);
|
||||||
|
OvcLabel.CustomSettings.ShadowDepth := Ini.ReadInteger(S, 'ShadowDepth', 1);
|
||||||
|
|
||||||
|
OvcLabel.Font.Color := StringToColor(Ini.ReadString(S, 'FontColor', '0'));
|
||||||
|
{$IFNDEF LCL}
|
||||||
|
OvcLabel.Font.Name := Ini.ReadString(S, 'FontName', 'Times New Roman');
|
||||||
|
{$ELSE}
|
||||||
|
OvcLabel.Font.Name := Ini.ReadString(S, 'FontName', 'default');
|
||||||
|
{$ENDIF}
|
||||||
|
OvcLabel.Font.Pitch := TFontPitch(Ini.ReadInteger(S, 'FontPitch', 0));
|
||||||
|
OvcLabel.Font.Size := Ini.ReadInteger(S, 'FontSize', 10);
|
||||||
|
OvcLabel.Font.Style := [];
|
||||||
|
if Ini.ReadBool(S, 'FontBold', False) then
|
||||||
|
OvcLabel.Font.Style := OvcLabel.Font.Style + [fsBold];
|
||||||
|
if Ini.ReadBool(S, 'FontItalic', False) then
|
||||||
|
OvcLabel.Font.Style := OvcLabel.Font.Style + [fsItalic];
|
||||||
|
if Ini.ReadBool(S, 'FontUnderline', False) then
|
||||||
|
OvcLabel.Font.Style := OvcLabel.Font.Style + [fsUnderline];
|
||||||
|
if Ini.ReadBool(S, 'FontStrikeOut', False) then
|
||||||
|
OvcLabel.Font.Style := OvcLabel.Font.Style + [fsStrikeOut];
|
||||||
|
|
||||||
|
FontSizeSb.Position := OvcLabel.Font.Size;
|
||||||
|
HighlightDepthSB.Position := OvcLabel.CustomSettings.HighlightDepth;
|
||||||
|
ShadowDepthSB.Position := OvcLabel.CustomSettings.ShadowDepth;
|
||||||
|
GraduateRg.ItemIndex := Ord(OvcLabel.CustomSettings.GraduateStyle);
|
||||||
|
HighlightRg.ItemIndex := Ord(OvcLabel.CustomSettings.HighlightStyle);
|
||||||
|
ShadowRg.ItemIndex := Ord(OvcLabel.CustomSettings.ShadowStyle);
|
||||||
|
FontColorCcb.SelectedColor := OvcLabel.Font.Color;
|
||||||
|
FromColorCcb.SelectedColor := OvcLabel.CustomSettings.GraduateFromColor;
|
||||||
|
HighlightColorCcb.SelectedColor := OvcLabel.CustomSettings.HighlightColor;
|
||||||
|
ShadowColorCcb.SelectedColor := OvcLabel.CustomSettings.ShadowColor;
|
||||||
|
HighlightDirectionDp.Direction := Ord(OvcLabel.CustomSettings.HighlightDirection)-1;
|
||||||
|
ShadowDirectionDp.Direction := Ord(OvcLabel.CustomSettings.ShadowDirection)-1;
|
||||||
|
finally
|
||||||
|
SettingScheme := False;
|
||||||
|
Ini.Free;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TfrmOvcLabel.HighlightDirectionChange(Sender: TObject);
|
||||||
|
begin
|
||||||
|
OvcLabel.CustomSettings.HighlightDirection :=
|
||||||
|
TOvcShadeDirection(HighlightDirectionDp.Direction+1);
|
||||||
|
SchemeChange;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TfrmOvcLabel.ShadowDirectionChange(Sender: TObject);
|
||||||
|
begin
|
||||||
|
OvcLabel.CustomSettings.ShadowDirection :=
|
||||||
|
TOvcShadeDirection(ShadowDirectionDp.Direction+1);
|
||||||
|
SchemeChange;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TfrmOvcLabel.SchemeChange;
|
||||||
|
begin
|
||||||
|
if not SettingScheme then
|
||||||
|
SchemeCb.ItemIndex := -1;
|
||||||
|
|
||||||
|
if not SettingCb then begin
|
||||||
|
AppearanceCb.ItemIndex := -1;
|
||||||
|
ColorSchemeCb.ItemIndex := -1;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
procedure TfrmOvcLabel.AppearanceCbChange(Sender: TObject);
|
||||||
|
begin
|
||||||
|
if AppearanceCb.ItemIndex > -1 then begin
|
||||||
|
SettingScheme := True;
|
||||||
|
SettingCb := True;
|
||||||
|
try
|
||||||
|
OvcLabel.Appearance := TOvcAppearance(AppearanceCb.ItemIndex);
|
||||||
|
|
||||||
|
FontSizeSb.Position := OvcLabel.Font.Size;
|
||||||
|
HighlightDepthSB.Position := OvcLabel.CustomSettings.HighlightDepth;
|
||||||
|
ShadowDepthSB.Position := OvcLabel.CustomSettings.ShadowDepth;
|
||||||
|
GraduateRg.ItemIndex := Ord(OvcLabel.CustomSettings.GraduateStyle);
|
||||||
|
HighlightRg.ItemIndex := Ord(OvcLabel.CustomSettings.HighlightStyle);
|
||||||
|
ShadowRg.ItemIndex := Ord(OvcLabel.CustomSettings.ShadowStyle);
|
||||||
|
FontColorCcb.SelectedColor := OvcLabel.Font.Color;
|
||||||
|
FromColorCcb.SelectedColor := OvcLabel.CustomSettings.GraduateFromColor;
|
||||||
|
HighlightColorCcb.SelectedColor := OvcLabel.CustomSettings.HighlightColor;
|
||||||
|
ShadowColorCcb.SelectedColor := OvcLabel.CustomSettings.ShadowColor;
|
||||||
|
HighlightDirectionDp.Direction := Ord(OvcLabel.CustomSettings.HighlightDirection)-1;
|
||||||
|
ShadowDirectionDp.Direction := Ord(OvcLabel.CustomSettings.ShadowDirection)-1;
|
||||||
|
finally
|
||||||
|
SettingCb := False;
|
||||||
|
SettingScheme := False;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TfrmOvcLabel.ColorSchemeCbChange(Sender: TObject);
|
||||||
|
begin
|
||||||
|
if ColorSchemeCb.ItemIndex > -1 then begin
|
||||||
|
SettingScheme := True;
|
||||||
|
SettingCb := True;
|
||||||
|
try
|
||||||
|
OvcLabel.ColorScheme := TOvcColorScheme(ColorSchemeCb.ItemIndex);
|
||||||
|
|
||||||
|
FontSizeSb.Position := OvcLabel.Font.Size;
|
||||||
|
HighlightDepthSB.Position := OvcLabel.CustomSettings.HighlightDepth;
|
||||||
|
ShadowDepthSB.Position := OvcLabel.CustomSettings.ShadowDepth;
|
||||||
|
GraduateRg.ItemIndex := Ord(OvcLabel.CustomSettings.GraduateStyle);
|
||||||
|
HighlightRg.ItemIndex := Ord(OvcLabel.CustomSettings.HighlightStyle);
|
||||||
|
ShadowRg.ItemIndex := Ord(OvcLabel.CustomSettings.ShadowStyle);
|
||||||
|
FontColorCcb.SelectedColor := OvcLabel.Font.Color;
|
||||||
|
FromColorCcb.SelectedColor := OvcLabel.CustomSettings.GraduateFromColor;
|
||||||
|
HighlightColorCcb.SelectedColor := OvcLabel.CustomSettings.HighlightColor;
|
||||||
|
ShadowColorCcb.SelectedColor := OvcLabel.CustomSettings.ShadowColor;
|
||||||
|
HighlightDirectionDp.Direction := Ord(OvcLabel.CustomSettings.HighlightDirection)-1;
|
||||||
|
ShadowDirectionDp.Direction := Ord(OvcLabel.CustomSettings.ShadowDirection)-1;
|
||||||
|
finally
|
||||||
|
SettingCb := False;
|
||||||
|
SettingScheme := False;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
initialization
|
||||||
|
{$IFDEF LCL}
|
||||||
|
{$I ovclbl0.lrs} {Include form's resource file}
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
end.
|
52
components/orpheus/ovclbl1.lfm
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
object frmSaveScheme: TfrmSaveScheme
|
||||||
|
Left = 347
|
||||||
|
Top = 298
|
||||||
|
BorderStyle = bsDialog
|
||||||
|
Caption = 'Save Style'
|
||||||
|
ClientHeight = 85
|
||||||
|
Height = 85
|
||||||
|
ClientWidth = 348
|
||||||
|
Width = 348
|
||||||
|
Font.Charset = DEFAULT_CHARSET
|
||||||
|
Font.Color = clWindowText
|
||||||
|
Font.Height = -11
|
||||||
|
Font.Style = []
|
||||||
|
OnCreate = FormCreate
|
||||||
|
PixelsPerInch = 96
|
||||||
|
TextHeight = 13
|
||||||
|
object Label1: TLabel
|
||||||
|
Left = 4
|
||||||
|
Top = 8
|
||||||
|
Width = 85
|
||||||
|
Height = 13
|
||||||
|
Caption = 'Save this style as:'
|
||||||
|
end
|
||||||
|
object SchemeNameEd: TEdit
|
||||||
|
Left = 4
|
||||||
|
Top = 24
|
||||||
|
Width = 341
|
||||||
|
Height = 21
|
||||||
|
MaxLength = 255
|
||||||
|
TabOrder = 0
|
||||||
|
end
|
||||||
|
object OkBtn: TButton
|
||||||
|
Left = 192
|
||||||
|
Top = 56
|
||||||
|
Width = 75
|
||||||
|
Height = 25
|
||||||
|
Caption = 'OK'
|
||||||
|
Default = True
|
||||||
|
ModalResult = 1
|
||||||
|
TabOrder = 1
|
||||||
|
end
|
||||||
|
object CancelBtn: TButton
|
||||||
|
Left = 272
|
||||||
|
Top = 56
|
||||||
|
Width = 75
|
||||||
|
Height = 25
|
||||||
|
Cancel = True
|
||||||
|
Caption = 'Cancel'
|
||||||
|
ModalResult = 2
|
||||||
|
TabOrder = 2
|
||||||
|
end
|
||||||
|
end
|
15
components/orpheus/ovclbl1.lrs
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
LazarusResources.Add('TfrmSaveScheme','FORMDATA',[
|
||||||
|
'TPF0'#14'TfrmSaveScheme'#13'frmSaveScheme'#4'Left'#3'['#1#3'Top'#3'*'#1#11'B'
|
||||||
|
+'orderStyle'#7#8'bsDialog'#7'Caption'#6#10'Save Style'#12'ClientHeight'#2'U'
|
||||||
|
+#6'Height'#2'U'#11'ClientWidth'#3'\'#1#5'Width'#3'\'#1#12'Font.Charset'#7#15
|
||||||
|
+'DEFAULT_CHARSET'#10'Font.Color'#7#12'clWindowText'#11'Font.Height'#2#245#10
|
||||||
|
+'Font.Style'#11#0#8'OnCreate'#7#10'FormCreate'#13'PixelsPerInch'#2'`'#10'Tex'
|
||||||
|
+'tHeight'#2#13#0#6'TLabel'#6'Label1'#4'Left'#2#4#3'Top'#2#8#5'Width'#2'U'#6
|
||||||
|
+'Height'#2#13#7'Caption'#6#19'Save this style as:'#0#0#5'TEdit'#12'SchemeNam'
|
||||||
|
+'eEd'#4'Left'#2#4#3'Top'#2#24#5'Width'#3'U'#1#6'Height'#2#21#9'MaxLength'#3
|
||||||
|
+#255#0#8'TabOrder'#2#0#0#0#7'TButton'#5'OkBtn'#4'Left'#3#192#0#3'Top'#2'8'#5
|
||||||
|
+'Width'#2'K'#6'Height'#2#25#7'Caption'#6#2'OK'#7'Default'#9#11'ModalResult'#2
|
||||||
|
+#1#8'TabOrder'#2#1#0#0#7'TButton'#9'CancelBtn'#4'Left'#3#16#1#3'Top'#2'8'#5
|
||||||
|
+'Width'#2'K'#6'Height'#2#25#6'Cancel'#9#7'Caption'#6#6'Cancel'#11'ModalResul'
|
||||||
|
+'t'#2#2#8'TabOrder'#2#2#0#0#0
|
||||||
|
]);
|
77
components/orpheus/ovclbl1.pas
Normal file
@ -0,0 +1,77 @@
|
|||||||
|
{*********************************************************}
|
||||||
|
{* OVCLBL1.PAS 4.06 *}
|
||||||
|
{*********************************************************}
|
||||||
|
|
||||||
|
{* ***** BEGIN LICENSE BLOCK ***** *}
|
||||||
|
{* Version: MPL 1.1 *}
|
||||||
|
{* *}
|
||||||
|
{* The contents of this file are subject to the Mozilla Public License *}
|
||||||
|
{* Version 1.1 (the "License"); you may not use this file except in *}
|
||||||
|
{* compliance with the License. You may obtain a copy of the License at *}
|
||||||
|
{* http://www.mozilla.org/MPL/ *}
|
||||||
|
{* *}
|
||||||
|
{* Software distributed under the License is distributed on an "AS IS" basis, *}
|
||||||
|
{* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License *}
|
||||||
|
{* for the specific language governing rights and limitations under the *}
|
||||||
|
{* License. *}
|
||||||
|
{* *}
|
||||||
|
{* The Original Code is TurboPower Orpheus *}
|
||||||
|
{* *}
|
||||||
|
{* The Initial Developer of the Original Code is TurboPower Software *}
|
||||||
|
{* *}
|
||||||
|
{* Portions created by TurboPower Software Inc. are Copyright (C)1995-2002 *}
|
||||||
|
{* TurboPower Software Inc. All Rights Reserved. *}
|
||||||
|
{* *}
|
||||||
|
{* Contributor(s): *}
|
||||||
|
{* *}
|
||||||
|
{* ***** END LICENSE BLOCK ***** *}
|
||||||
|
|
||||||
|
{$I OVC.INC}
|
||||||
|
|
||||||
|
{$B-} {Complete Boolean Evaluation}
|
||||||
|
{$I+} {Input/Output-Checking}
|
||||||
|
{$P+} {Open Parameters}
|
||||||
|
{$T-} {Typed @ Operator}
|
||||||
|
{.W-} {Windows Stack Frame}
|
||||||
|
{$X+} {Extended Syntax}
|
||||||
|
|
||||||
|
unit ovclbl1;
|
||||||
|
|
||||||
|
interface
|
||||||
|
|
||||||
|
uses
|
||||||
|
{$IFNDEF LCL} Windows, Messages, {$ELSE} LclIntf, LMessages, LclType, LResources, Buttons, {$ENDIF}
|
||||||
|
SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
|
||||||
|
StdCtrls;
|
||||||
|
|
||||||
|
type
|
||||||
|
TfrmSaveScheme = class(TForm)
|
||||||
|
Label1: TLabel;
|
||||||
|
SchemeNameEd: TEdit;
|
||||||
|
OkBtn: TButton;
|
||||||
|
CancelBtn: TButton;
|
||||||
|
procedure FormCreate(Sender: TObject);
|
||||||
|
private
|
||||||
|
{ Private declarations }
|
||||||
|
public
|
||||||
|
{ Public declarations }
|
||||||
|
end;
|
||||||
|
|
||||||
|
implementation
|
||||||
|
|
||||||
|
{$IFNDEF LCL}
|
||||||
|
{$R *.DFM}
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
procedure TfrmSaveScheme.FormCreate(Sender: TObject);
|
||||||
|
begin
|
||||||
|
Top := (Screen.Height - Height) div 3;
|
||||||
|
Left := (Screen.Width - Width) div 2;
|
||||||
|
end;
|
||||||
|
|
||||||
|
initialization
|
||||||
|
{$IFDEF LCL}
|
||||||
|
{$I ovclbl1.lrs} {Include form's resource file}
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
end.
|
290
components/orpheus/ovclbl2.pas
Normal file
@ -0,0 +1,290 @@
|
|||||||
|
{*********************************************************}
|
||||||
|
{* OVCLABEL.PAS 4.06 *}
|
||||||
|
{*********************************************************}
|
||||||
|
|
||||||
|
{* ***** BEGIN LICENSE BLOCK ***** *}
|
||||||
|
{* Version: MPL 1.1 *}
|
||||||
|
{* *}
|
||||||
|
{* The contents of this file are subject to the Mozilla Public License *}
|
||||||
|
{* Version 1.1 (the "License"); you may not use this file except in *}
|
||||||
|
{* compliance with the License. You may obtain a copy of the License at *}
|
||||||
|
{* http://www.mozilla.org/MPL/ *}
|
||||||
|
{* *}
|
||||||
|
{* Software distributed under the License is distributed on an "AS IS" basis, *}
|
||||||
|
{* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License *}
|
||||||
|
{* for the specific language governing rights and limitations under the *}
|
||||||
|
{* License. *}
|
||||||
|
{* *}
|
||||||
|
{* The Original Code is TurboPower Orpheus *}
|
||||||
|
{* *}
|
||||||
|
{* The Initial Developer of the Original Code is TurboPower Software *}
|
||||||
|
{* *}
|
||||||
|
{* Portions created by TurboPower Software Inc. are Copyright (C)1995-2002 *}
|
||||||
|
{* TurboPower Software Inc. All Rights Reserved. *}
|
||||||
|
{* *}
|
||||||
|
{* Contributor(s): *}
|
||||||
|
{* *}
|
||||||
|
{* ***** END LICENSE BLOCK ***** *}
|
||||||
|
|
||||||
|
{$I OVC.INC}
|
||||||
|
|
||||||
|
{$B-} {Complete Boolean Evaluation}
|
||||||
|
{$I+} {Input/Output-Checking}
|
||||||
|
{$P+} {Open Parameters}
|
||||||
|
{$T-} {Typed @ Operator}
|
||||||
|
{.W-} {Windows Stack Frame}
|
||||||
|
{$X+} {Extended Syntax}
|
||||||
|
|
||||||
|
unit ovclbl2;
|
||||||
|
{-direction picker component}
|
||||||
|
|
||||||
|
interface
|
||||||
|
|
||||||
|
uses
|
||||||
|
{$IFNDEF LCL} Windows, Messages, {$ELSE} LclIntf, LMessages, LclType, LResources, {$ENDIF}
|
||||||
|
Classes, Controls, Graphics, OvcBase, OvcData, OvcMisc;
|
||||||
|
|
||||||
|
type
|
||||||
|
TOvcCustomDirectionPicker = class(TOvcGraphicControl)
|
||||||
|
protected {private}
|
||||||
|
{property variables}
|
||||||
|
FDirection : Integer;
|
||||||
|
FNumDirections : Integer;
|
||||||
|
FSelectedBitmap : TBitmap;
|
||||||
|
FShowCenter : Boolean;
|
||||||
|
FDirectionBitmap : TBitmap;
|
||||||
|
|
||||||
|
{event variables}
|
||||||
|
FOnChange : TNotifyEvent;
|
||||||
|
|
||||||
|
{property methods}
|
||||||
|
procedure SetDirection(Value : Integer);
|
||||||
|
procedure SetSelectedBitmap(Value : TBitmap);
|
||||||
|
procedure SetNumDirections(Value : Integer);
|
||||||
|
procedure SetShowCenter(Value : Boolean);
|
||||||
|
procedure SetDirectionBitmap(Value : TBitmap);
|
||||||
|
|
||||||
|
protected
|
||||||
|
procedure MouseDown(Button : TMouseButton; Shift : TShiftState; X, Y : Integer);
|
||||||
|
override;
|
||||||
|
procedure Paint;
|
||||||
|
override;
|
||||||
|
|
||||||
|
property Direction : Integer
|
||||||
|
read FDirection write SetDirection default 0;
|
||||||
|
property NumDirections : Integer
|
||||||
|
read FNumDirections write SetNumDirections default 8;
|
||||||
|
property SelectedBitmap : TBitmap
|
||||||
|
read FSelectedBitmap write SetSelectedBitmap;
|
||||||
|
property ShowCenter : Boolean
|
||||||
|
read FShowCenter write SetShowCenter default True;
|
||||||
|
property DirectionBitmap : TBitmap
|
||||||
|
read FDirectionBitmap write SetDirectionBitmap;
|
||||||
|
|
||||||
|
property OnChange : TNotifyEvent
|
||||||
|
read FOnChange write FOnChange;
|
||||||
|
|
||||||
|
public
|
||||||
|
constructor Create(AComponent : TComponent);
|
||||||
|
override;
|
||||||
|
destructor Destroy;
|
||||||
|
override;
|
||||||
|
end;
|
||||||
|
|
||||||
|
TOvcDirectionPicker = class(TOvcCustomDirectionPicker)
|
||||||
|
published
|
||||||
|
property Direction;
|
||||||
|
property Enabled;
|
||||||
|
property SelectedBitmap;
|
||||||
|
property NumDirections;
|
||||||
|
property ShowCenter;
|
||||||
|
property DirectionBitmap;
|
||||||
|
|
||||||
|
property OnChange;
|
||||||
|
property OnClick;
|
||||||
|
property OnDblClick;
|
||||||
|
property OnMouseDown;
|
||||||
|
property OnMouseMove;
|
||||||
|
property OnMouseUp;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
implementation
|
||||||
|
|
||||||
|
|
||||||
|
const
|
||||||
|
DToR = Pi / 180;
|
||||||
|
|
||||||
|
constructor TOvcCustomDirectionPicker.Create(AComponent : TComponent);
|
||||||
|
begin
|
||||||
|
inherited Create(AComponent);
|
||||||
|
|
||||||
|
ControlStyle := [csClickEvents, csDoubleClicks];
|
||||||
|
|
||||||
|
Width := 50;
|
||||||
|
Height := 50;
|
||||||
|
|
||||||
|
FDirection := -1;
|
||||||
|
FNumDirections := 8;
|
||||||
|
FShowCenter := True;
|
||||||
|
|
||||||
|
{create and load the bitmap images}
|
||||||
|
{resource are in ovcreg.rc}
|
||||||
|
FDirectionBitmap := TBitmap.Create;
|
||||||
|
{$IFNDEF LCL}
|
||||||
|
FDirectionBitmap.Handle := LoadBitmap(HInstance, 'ORBLUEDOT');
|
||||||
|
{$ELSE}
|
||||||
|
FDirectionBitmap.LoadFromLazarusResource('ORBLUEDOT');
|
||||||
|
{$ENDIF}
|
||||||
|
FSelectedBitmap := TBitmap.Create;
|
||||||
|
{$IFNDEF LCL}
|
||||||
|
FSelectedBitmap.Handle := LoadBitmap(HInstance, 'ORREDDOT');
|
||||||
|
{$ELSE}
|
||||||
|
FSelectedBitmap.LoadFromLazarusResource('ORREDDOT');
|
||||||
|
{$ENDIF}
|
||||||
|
end;
|
||||||
|
|
||||||
|
destructor TOvcCustomDirectionPicker.Destroy;
|
||||||
|
begin
|
||||||
|
{destroy bitmaps}
|
||||||
|
FDirectionBitmap.Free;
|
||||||
|
FDirectionBitmap := nil;
|
||||||
|
FSelectedBitmap.Free;
|
||||||
|
FSelectedBitmap := nil;
|
||||||
|
|
||||||
|
inherited Destroy;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TOvcCustomDirectionPicker.MouseDown(Button : TMouseButton; Shift : TShiftState; X, Y : Integer);
|
||||||
|
var
|
||||||
|
I : Integer;
|
||||||
|
BW : Integer;
|
||||||
|
Angle : Extended;
|
||||||
|
Diameter : Integer;
|
||||||
|
Radius : Integer;
|
||||||
|
X1, Y1 : Integer;
|
||||||
|
Distance : Integer;
|
||||||
|
BestDirection : Integer;
|
||||||
|
BestDistance : Integer;
|
||||||
|
begin
|
||||||
|
inherited MouseDown(Button, Shift, X, Y);
|
||||||
|
|
||||||
|
if (Button = mbLeft) and Enabled then begin
|
||||||
|
BW := MaxI(FDirectionBitmap.Width, FDirectionBitmap.Height);
|
||||||
|
Diameter := MinI(Height, Width)-2*BW;
|
||||||
|
Radius := Diameter div 2;
|
||||||
|
|
||||||
|
if FShowCenter then begin
|
||||||
|
{initialize at center (-1)}
|
||||||
|
BestDistance := Round(Sqrt(Sqr(Radius+BW-X) + Sqr(Radius+BW-Y)));
|
||||||
|
BestDirection := -1;
|
||||||
|
end else begin
|
||||||
|
BestDistance := Width*2;
|
||||||
|
BestDirection := FDirection;
|
||||||
|
end;
|
||||||
|
|
||||||
|
for I := 0 to Pred(FNumDirections) do begin
|
||||||
|
Angle := (I * (360/FNumDirections) + 90) * DToR;
|
||||||
|
X1 := Round(Radius * (1-Cos(Angle))) + BW;
|
||||||
|
Y1 := Round(Radius * (1-Sin(Angle))) + BW;
|
||||||
|
Distance := Round(Sqrt(Sqr(X1-X) + Sqr(Y1-Y)));
|
||||||
|
if Distance < BestDistance then begin
|
||||||
|
BestDistance := Distance;
|
||||||
|
BestDirection := I;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
Direction := BestDirection;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TOvcCustomDirectionPicker.Paint;
|
||||||
|
var
|
||||||
|
I : Integer;
|
||||||
|
BW : Integer;
|
||||||
|
BW2 : Integer;
|
||||||
|
Angle : Extended;
|
||||||
|
Diameter : Integer;
|
||||||
|
Radius : Integer;
|
||||||
|
X, Y : Integer;
|
||||||
|
begin
|
||||||
|
BW := MaxI(FDirectionBitmap.Width, FDirectionBitmap.Height);
|
||||||
|
Diameter := MinI(Height, Width)-2*BW;
|
||||||
|
Radius := Diameter div 2;
|
||||||
|
|
||||||
|
if FShowCenter then
|
||||||
|
Canvas.Draw(Radius+BW, Radius+BW, FDirectionBitmap);
|
||||||
|
for I := 0 to Pred(FNumDirections) do begin
|
||||||
|
Angle := (I * (360/FNumDirections) + 90) * DToR;
|
||||||
|
X := Round(Radius * (1-Cos(Angle)));
|
||||||
|
Y := Round(Radius * (1-Sin(Angle)));
|
||||||
|
Canvas.Draw(X+BW, Y+BW, FDirectionBitmap);
|
||||||
|
end;
|
||||||
|
|
||||||
|
{draw the dot for the selected direction}
|
||||||
|
BW2 := (MaxI(FSelectedBitmap.Width, FSelectedBitmap.Height)-BW) div 2; {adjustment for larger bitmap}
|
||||||
|
if FDirection = -1 then begin
|
||||||
|
if FShowCenter then
|
||||||
|
Canvas.Draw(Radius+BW-BW2, Radius+BW-BW2, FSelectedBitmap)
|
||||||
|
end else begin
|
||||||
|
Angle := (FDirection * (360/FNumDirections) + 90) * DToR;
|
||||||
|
X := Round(Radius * (1-Cos(Angle)));
|
||||||
|
Y := Round(Radius * (1-Sin(Angle)));
|
||||||
|
Canvas.Draw(X+BW-BW2, Y+BW-BW2, FSelectedBitmap);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TOvcCustomDirectionPicker.SetDirection(Value : Integer);
|
||||||
|
begin
|
||||||
|
if csLoading in ComponentState then begin
|
||||||
|
FDirection := Value;
|
||||||
|
Exit;
|
||||||
|
end;
|
||||||
|
|
||||||
|
if (Value <> FDirection) and (Value >= -1) and (Value < FNumDirections) then begin
|
||||||
|
FDirection := Value;
|
||||||
|
Invalidate;
|
||||||
|
if Assigned(FOnChange) then
|
||||||
|
FOnChange(Self);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TOvcCustomDirectionPicker.SetSelectedBitmap(Value : TBitmap);
|
||||||
|
begin
|
||||||
|
if Assigned(Value) then
|
||||||
|
FSelectedBitmap.Assign(Value)
|
||||||
|
else
|
||||||
|
FSelectedBitmap.ReleaseHandle;
|
||||||
|
Invalidate;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TOvcCustomDirectionPicker.SetNumDirections(Value : Integer);
|
||||||
|
begin
|
||||||
|
if (Value <> FNumDirections) and (Value >= 2) then begin
|
||||||
|
FNumDirections := Value;
|
||||||
|
Invalidate;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TOvcCustomDirectionPicker.SetShowCenter(Value : Boolean);
|
||||||
|
begin
|
||||||
|
if Value <> FShowCenter then begin
|
||||||
|
FShowCenter := Value;
|
||||||
|
Invalidate;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TOvcCustomDirectionPicker.SetDirectionBitmap(Value : TBitmap);
|
||||||
|
begin
|
||||||
|
if Assigned(Value) then
|
||||||
|
FDirectionBitmap.Assign(Value)
|
||||||
|
else
|
||||||
|
FDirectionBitmap.ReleaseHandle;
|
||||||
|
Invalidate;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
initialization
|
||||||
|
if Classes.GetClass(TOvcDirectionPicker.ClassName) = nil then
|
||||||
|
Classes.RegisterClass(TOvcDirectionPicker);
|
||||||
|
end.
|
1115
components/orpheus/ovcmisc.pas
Normal file
1808
components/orpheus/ovcnf.pas
Normal file
1006
components/orpheus/ovcpb.pas
Normal file
1599
components/orpheus/ovcreg.lrs
Normal file
514
components/orpheus/ovcrlbl.pas
Normal file
@ -0,0 +1,514 @@
|
|||||||
|
{*********************************************************}
|
||||||
|
{* OVCRLBL.PAS 4.06 *}
|
||||||
|
{*********************************************************}
|
||||||
|
|
||||||
|
{* ***** BEGIN LICENSE BLOCK ***** *}
|
||||||
|
{* Version: MPL 1.1 *}
|
||||||
|
{* *}
|
||||||
|
{* The contents of this file are subject to the Mozilla Public License *}
|
||||||
|
{* Version 1.1 (the "License"); you may not use this file except in *}
|
||||||
|
{* compliance with the License. You may obtain a copy of the License at *}
|
||||||
|
{* http://www.mozilla.org/MPL/ *}
|
||||||
|
{* *}
|
||||||
|
{* Software distributed under the License is distributed on an "AS IS" basis, *}
|
||||||
|
{* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License *}
|
||||||
|
{* for the specific language governing rights and limitations under the *}
|
||||||
|
{* License. *}
|
||||||
|
{* *}
|
||||||
|
{* The Original Code is TurboPower Orpheus *}
|
||||||
|
{* *}
|
||||||
|
{* The Initial Developer of the Original Code is TurboPower Software *}
|
||||||
|
{* *}
|
||||||
|
{* Portions created by TurboPower Software Inc. are Copyright (C)1995-2002 *}
|
||||||
|
{* TurboPower Software Inc. All Rights Reserved. *}
|
||||||
|
{* *}
|
||||||
|
{* Contributor(s): *}
|
||||||
|
{* *}
|
||||||
|
{* ***** END LICENSE BLOCK ***** *}
|
||||||
|
|
||||||
|
{$I OVC.INC}
|
||||||
|
|
||||||
|
{$B-} {Complete Boolean Evaluation}
|
||||||
|
{$I+} {Input/Output-Checking}
|
||||||
|
{$P+} {Open Parameters}
|
||||||
|
{$T-} {Typed @ Operator}
|
||||||
|
{.W-} {Windows Stack Frame}
|
||||||
|
{$X+} {Extended Syntax}
|
||||||
|
|
||||||
|
unit ovcrlbl;
|
||||||
|
{-Rotated label component}
|
||||||
|
|
||||||
|
interface
|
||||||
|
|
||||||
|
uses
|
||||||
|
{$IFNDEF LCL} Windows, Messages, {$ELSE} LclIntf, LMessages, LclType, MyMisc, {$ENDIF}
|
||||||
|
Classes, Controls, Graphics, SysUtils,
|
||||||
|
OvcBase, OvcMisc;
|
||||||
|
|
||||||
|
type
|
||||||
|
TOvcCustomRotatedLabel = class(TOvcGraphicControl)
|
||||||
|
{.Z+}
|
||||||
|
protected {private}
|
||||||
|
{property instance variables}
|
||||||
|
FAlignment : TAlignment;
|
||||||
|
FAutoSize : Boolean;
|
||||||
|
FCaption : string;
|
||||||
|
FFontAngle : Integer;
|
||||||
|
FOriginX : Integer;
|
||||||
|
FOriginY : Integer;
|
||||||
|
FShadowColor : TColor; {color for text shadowing}
|
||||||
|
FShadowedText : Boolean; {true to draw shadowed text}
|
||||||
|
|
||||||
|
{internal variables}
|
||||||
|
rlBusy : Boolean;
|
||||||
|
|
||||||
|
{property methods}
|
||||||
|
function GetTransparent : Boolean;
|
||||||
|
procedure SetAlignment(Value : TAlignment);
|
||||||
|
procedure SetAutoSize(Value : Boolean); {$IFDEF VERSION6}{$IFNDEF LCL} override;{$ENDIF}{$ENDIF}
|
||||||
|
procedure SetCaption(const Value : string);
|
||||||
|
procedure SetOriginX(Value : Integer);
|
||||||
|
procedure SetOriginY(Value : Integer);
|
||||||
|
procedure SetShadowColor(const Value : TColor);
|
||||||
|
procedure SetShadowedText(Value : Boolean);
|
||||||
|
procedure SetTransparent(Value : Boolean);
|
||||||
|
procedure SetFontAngle(Value : Integer);
|
||||||
|
|
||||||
|
{internal methods}
|
||||||
|
procedure lblAdjustSize;
|
||||||
|
{-adjust horizontal and/or vertical size of control}
|
||||||
|
procedure lblDrawText(var R : TRect; Flags : Word);
|
||||||
|
{-draw the label text}
|
||||||
|
|
||||||
|
{VCL message handling methods}
|
||||||
|
procedure CMFontChanged(var Msg : TMessage);
|
||||||
|
message CM_FONTCHANGED;
|
||||||
|
procedure CMTextChanged(var Mes : TMessage);
|
||||||
|
message CM_TEXTCHANGED;
|
||||||
|
|
||||||
|
protected
|
||||||
|
procedure Loaded;
|
||||||
|
override;
|
||||||
|
procedure Paint;
|
||||||
|
override;
|
||||||
|
procedure SetName(const NewName : TComponentName);
|
||||||
|
override;
|
||||||
|
{.Z-}
|
||||||
|
|
||||||
|
property Alignment : TAlignment
|
||||||
|
read FAlignment write SetAlignment;
|
||||||
|
property AutoSize : Boolean
|
||||||
|
read FAutoSize write SetAutoSize;
|
||||||
|
property Caption : string
|
||||||
|
read FCaption write SetCaption;
|
||||||
|
property FontAngle : Integer
|
||||||
|
read FFontAngle write SetFontAngle;
|
||||||
|
property OriginX : Integer
|
||||||
|
read FOriginX write SetOriginX;
|
||||||
|
property OriginY : Integer
|
||||||
|
read FOriginY write SetOriginY;
|
||||||
|
property ShadowColor : TColor
|
||||||
|
read FShadowColor write SetShadowColor;
|
||||||
|
property ShadowedText : Boolean
|
||||||
|
read FShadowedText write SetShadowedText;
|
||||||
|
property Transparent : Boolean
|
||||||
|
read GetTransparent write SetTransparent;
|
||||||
|
|
||||||
|
public
|
||||||
|
{.Z+}
|
||||||
|
constructor Create(AOwner: TComponent);
|
||||||
|
override;
|
||||||
|
{.Z-}
|
||||||
|
|
||||||
|
{public properties}
|
||||||
|
property Canvas;
|
||||||
|
end;
|
||||||
|
|
||||||
|
TOvcRotatedLabel = class(TOvcCustomRotatedLabel)
|
||||||
|
published
|
||||||
|
{$IFDEF VERSION4}
|
||||||
|
property Anchors;
|
||||||
|
property Constraints;
|
||||||
|
property DragKind;
|
||||||
|
{$ENDIF}
|
||||||
|
property Align;
|
||||||
|
property Alignment default taLeftJustify;
|
||||||
|
property AutoSize;
|
||||||
|
property Caption;
|
||||||
|
property Color;
|
||||||
|
property DragCursor;
|
||||||
|
property DragMode;
|
||||||
|
property Enabled;
|
||||||
|
property Font;
|
||||||
|
property FontAngle default 0;
|
||||||
|
property Height default 20;
|
||||||
|
property OriginX default 0;
|
||||||
|
property OriginY default 0;
|
||||||
|
property ParentColor;
|
||||||
|
{property ParentFont;}
|
||||||
|
property ParentShowHint;
|
||||||
|
property PopupMenu;
|
||||||
|
property ShadowColor default clBtnShadow;
|
||||||
|
property ShadowedText;
|
||||||
|
property ShowHint;
|
||||||
|
property Transparent default False;
|
||||||
|
property Visible;
|
||||||
|
|
||||||
|
{events}
|
||||||
|
property OnClick;
|
||||||
|
property OnDblClick;
|
||||||
|
property OnDragDrop;
|
||||||
|
property OnDragOver;
|
||||||
|
property OnEndDrag;
|
||||||
|
property OnMouseDown;
|
||||||
|
property OnMouseMove;
|
||||||
|
property OnMouseUp;
|
||||||
|
property OnStartDrag;
|
||||||
|
end;
|
||||||
|
|
||||||
|
implementation
|
||||||
|
|
||||||
|
{*** TOvcCustomRotatedLabel ***}
|
||||||
|
|
||||||
|
procedure TOvcCustomRotatedLabel.CMFontChanged(var Msg : TMessage);
|
||||||
|
var
|
||||||
|
TM : TTextMetric;
|
||||||
|
begin
|
||||||
|
inherited;
|
||||||
|
|
||||||
|
if csLoading in ComponentState then
|
||||||
|
Exit;
|
||||||
|
|
||||||
|
if FFontAngle <> 0 then begin
|
||||||
|
{check if the current font can be rotated}
|
||||||
|
Canvas.Font := Self.Font;
|
||||||
|
GetTextMetrics(Canvas.Handle, TM);
|
||||||
|
if (TM.tmPitchAndFamily and TMPF_TRUETYPE) = 0 then
|
||||||
|
{force zero font angle}
|
||||||
|
FontAngle := 0;
|
||||||
|
end;
|
||||||
|
lblAdjustSize;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TOvcCustomRotatedLabel.CMTextChanged(var Mes : TMessage);
|
||||||
|
begin
|
||||||
|
lblAdjustSize;
|
||||||
|
end;
|
||||||
|
|
||||||
|
constructor TOvcCustomRotatedLabel.Create(AOwner : TComponent);
|
||||||
|
begin
|
||||||
|
inherited Create(AOwner);
|
||||||
|
|
||||||
|
ControlStyle := ControlStyle + [csReplicatable, csOpaque];
|
||||||
|
|
||||||
|
{default property values}
|
||||||
|
FAlignment := taLeftJustify;
|
||||||
|
FFontAngle := 0;
|
||||||
|
FOriginX := 0;
|
||||||
|
FOriginY := 0;
|
||||||
|
FShadowColor := clBtnShadow;
|
||||||
|
FShadowedText := False;
|
||||||
|
|
||||||
|
Font.Name := 'Arial';
|
||||||
|
Height := 20;
|
||||||
|
Width := 130;
|
||||||
|
|
||||||
|
if csDesigning in ComponentState then
|
||||||
|
lblAdjustSize;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TOvcCustomRotatedLabel.GetTransparent : Boolean;
|
||||||
|
begin
|
||||||
|
Result := not (csOpaque in ControlStyle);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TOvcCustomRotatedLabel.lblAdjustSize;
|
||||||
|
{-adjust horizontal and/or vertical size of control}
|
||||||
|
var
|
||||||
|
R : TRect;
|
||||||
|
W, H, X, Y : Integer;
|
||||||
|
begin
|
||||||
|
if rlBusy then {avoid reentrance}
|
||||||
|
Exit;
|
||||||
|
|
||||||
|
rlBusy := True;
|
||||||
|
try
|
||||||
|
if not (csLoading in ComponentState) and AutoSize then begin
|
||||||
|
R := ClientRect;
|
||||||
|
Canvas.Font := Font;
|
||||||
|
W := Canvas.TextWidth(Caption);
|
||||||
|
H := Canvas.TextHeight(Caption);
|
||||||
|
if FFontAngle <> 0 then begin
|
||||||
|
{adjust height and width as necessary}
|
||||||
|
{width (X) of text at new angle}
|
||||||
|
X := Round(W * Cos(FFontAngle*Pi/180));
|
||||||
|
{height (y) of text at new angle}
|
||||||
|
Y := Round(W * Sin(FFontAngle*Pi/180));
|
||||||
|
R.Bottom := Abs(Y) + 2*H;
|
||||||
|
R.Right := Abs(X) + 2*H;
|
||||||
|
if X < 0 then
|
||||||
|
FOriginX := R.Right-H
|
||||||
|
else
|
||||||
|
FOriginX := H;
|
||||||
|
if Y < 0 then
|
||||||
|
FOriginY := H
|
||||||
|
else begin
|
||||||
|
if X < 0 then
|
||||||
|
FOriginY := R.Bottom - H
|
||||||
|
else
|
||||||
|
FOriginY := R.Bottom - H - H div 2;
|
||||||
|
end;
|
||||||
|
end else begin
|
||||||
|
FOriginX := 0;
|
||||||
|
FOriginY := 0;
|
||||||
|
R.Right := W;
|
||||||
|
R.Bottom := H;
|
||||||
|
end;
|
||||||
|
|
||||||
|
SetBounds(Left, Top, R.Right, R.Bottom);
|
||||||
|
end;
|
||||||
|
finally
|
||||||
|
rlBusy := False;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TOvcCustomRotatedLabel.lblDrawText(var R : TRect; Flags : Word);
|
||||||
|
{-paint the controls display or calculate a TRect to fit text}
|
||||||
|
var
|
||||||
|
HoldColor : TColor;
|
||||||
|
T : string;
|
||||||
|
XO, YO : Integer;
|
||||||
|
A : Integer;
|
||||||
|
Buf : array[0..255] of Char;
|
||||||
|
{$IFDEF LCL}
|
||||||
|
FontHand : hFont;
|
||||||
|
{$ENDIF}
|
||||||
|
begin
|
||||||
|
T := Caption;
|
||||||
|
if (Flags and DT_CALCRECT <> 0) and (T = '') then
|
||||||
|
T := ' ';
|
||||||
|
|
||||||
|
Flags := Flags or DT_NOPREFIX;
|
||||||
|
|
||||||
|
{use our font}
|
||||||
|
Canvas.Font := Font;
|
||||||
|
|
||||||
|
{create the rotated font}
|
||||||
|
if FFontAngle <> 0 then
|
||||||
|
{$IFNDEF LCL}
|
||||||
|
Canvas.Font.Handle := CreateRotatedFont(Font, FFontAngle);
|
||||||
|
{$ELSE} //Workaround for now - Qt widgetset not setting Handle?
|
||||||
|
FontHand := CreateRotatedFont(Font, FFontAngle);
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
{force disabled text color, if not enabled}
|
||||||
|
if not Enabled then
|
||||||
|
Canvas.Font.Color := clGrayText;
|
||||||
|
|
||||||
|
{draw the text}
|
||||||
|
StrPLCopy(Buf, T, 255);
|
||||||
|
if FFontAngle = 0 then begin
|
||||||
|
{draw shadow first, if selected}
|
||||||
|
if FShadowedText then begin
|
||||||
|
HoldColor := Canvas.Font.Color;
|
||||||
|
Canvas.Font.Color := FShadowColor;
|
||||||
|
if not Transparent then begin
|
||||||
|
SetBkMode(Canvas.Handle, OPAQUE);
|
||||||
|
Canvas.Brush.Color := Color;
|
||||||
|
end;
|
||||||
|
OffsetRect(R, +2, +1);
|
||||||
|
DrawText(Canvas.Handle, @Buf, -1, R, Flags);
|
||||||
|
Canvas.Font.Color := HoldColor;
|
||||||
|
{$IFNDEF LCL}
|
||||||
|
SetBkMode(Canvas.Handle, Windows.TRANSPARENT);
|
||||||
|
{$ELSE}
|
||||||
|
SetBkMode(Canvas.Handle, LclType.TRANSPARENT);
|
||||||
|
{$ENDIF}
|
||||||
|
OffsetRect(R, -2, -1);
|
||||||
|
DrawText(Canvas.Handle, @Buf, -1, R, Flags);
|
||||||
|
end else begin
|
||||||
|
DrawText(Canvas.Handle, @Buf, -1, R, Flags)
|
||||||
|
end;
|
||||||
|
end else begin
|
||||||
|
if FShadowedText then begin
|
||||||
|
HoldColor := Canvas.Font.Color;
|
||||||
|
Canvas.Font.Color := FShadowColor;
|
||||||
|
if not Transparent then begin
|
||||||
|
{$IFNDEF LCL}
|
||||||
|
SetBkMode(Canvas.Handle, Windows.OPAQUE);
|
||||||
|
{$ELSE}
|
||||||
|
SetBkMode(Canvas.Handle, LclType.OPAQUE);
|
||||||
|
{$ENDIF}
|
||||||
|
Canvas.Brush.Color := Color;
|
||||||
|
end;
|
||||||
|
{calculate the shadow offset based on the quadrant the text is in}
|
||||||
|
{ | } { 1 -- X+2, Y+1}
|
||||||
|
{ 2 | 1 } { 2 -- X-1, Y-2}
|
||||||
|
{ -------+--------- } { 3 -- X+2, Y+1}
|
||||||
|
{ 3 | 4 } { 4 -- X-1, Y-2}
|
||||||
|
{ | }
|
||||||
|
A := FFontAngle;
|
||||||
|
if A < 0 then A := 360 + A;
|
||||||
|
if A >= 270 then begin
|
||||||
|
XO := 2; YO := 1; {Quad=4}
|
||||||
|
end else if A >= 180 then begin
|
||||||
|
XO := 2; YO := 1; {Quad=3}
|
||||||
|
end else if A >= 90 then begin
|
||||||
|
XO := 2; YO := 1; {Quad=2}
|
||||||
|
end else begin
|
||||||
|
XO := 2; YO := 1; {Quad=1}
|
||||||
|
end;
|
||||||
|
{$IFDEF LCL}
|
||||||
|
SelectObject(Canvas.Handle, FontHand);
|
||||||
|
{$ENDIF}
|
||||||
|
ExtTextOut(Canvas.Handle, OriginX+XO, OriginY+YO, ETO_CLIPPED,
|
||||||
|
@R, Buf, StrLen(Buf), nil);
|
||||||
|
Canvas.Font.Color := HoldColor;
|
||||||
|
{$IFNDEF LCL}
|
||||||
|
SetBkMode(Canvas.Handle, Windows.TRANSPARENT);
|
||||||
|
{$ELSE}
|
||||||
|
SetBkMode(Canvas.Handle, LclType.TRANSPARENT);
|
||||||
|
{$ENDIF}
|
||||||
|
{$IFDEF LCL}
|
||||||
|
SelectObject(Canvas.Handle, FontHand);
|
||||||
|
{$ENDIF}
|
||||||
|
ExtTextOut(Canvas.Handle, OriginX, OriginY, ETO_CLIPPED,
|
||||||
|
@R, Buf, StrLen(Buf), nil);
|
||||||
|
end else begin
|
||||||
|
{$IFDEF LCL}
|
||||||
|
SelectObject(Canvas.Handle, FontHand);
|
||||||
|
{$ENDIF}
|
||||||
|
ExtTextOut(Canvas.Handle, OriginX, OriginY, ETO_CLIPPED,
|
||||||
|
@R, Buf, StrLen(Buf), nil);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TOvcCustomRotatedLabel.Loaded;
|
||||||
|
begin
|
||||||
|
inherited Loaded;
|
||||||
|
|
||||||
|
lblAdjustSize;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TOvcCustomRotatedLabel.Paint;
|
||||||
|
const
|
||||||
|
Alignments: array[TAlignment] of Word = (DT_LEFT, DT_RIGHT, DT_CENTER);
|
||||||
|
var
|
||||||
|
R : TRect;
|
||||||
|
begin
|
||||||
|
R := ClientRect;
|
||||||
|
with Canvas do begin
|
||||||
|
if not Transparent then begin
|
||||||
|
Brush.Color := Self.Color;
|
||||||
|
Brush.Style := bsSolid;
|
||||||
|
FillRect(R);
|
||||||
|
end;
|
||||||
|
Brush.Style := bsClear;
|
||||||
|
lblDrawText(R, Alignments[FAlignment])
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TOvcCustomRotatedLabel.SetAlignment(Value : TAlignment);
|
||||||
|
begin
|
||||||
|
if FAlignment <> Value then begin
|
||||||
|
FAlignment := Value;
|
||||||
|
Invalidate;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TOvcCustomRotatedLabel.SetAutoSize(Value : Boolean);
|
||||||
|
begin
|
||||||
|
if Value <> FAutoSize then begin
|
||||||
|
FAutoSize := Value;
|
||||||
|
lblAdjustSize;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TOvcCustomRotatedLabel.SetCaption(const Value : string);
|
||||||
|
begin
|
||||||
|
if Value <> FCaption then begin
|
||||||
|
FCaption := Value;
|
||||||
|
lblAdjustSize;
|
||||||
|
Repaint;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TOvcCustomRotatedLabel.SetOriginX(Value : Integer);
|
||||||
|
begin
|
||||||
|
if Value <> FOriginX then begin
|
||||||
|
FOriginX := Value;
|
||||||
|
Invalidate;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TOvcCustomRotatedLabel.SetOriginY(Value : Integer);
|
||||||
|
begin
|
||||||
|
if Value <> FOriginY then begin
|
||||||
|
FOriginY := Value;
|
||||||
|
Invalidate;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TOvcCustomRotatedLabel.SetShadowColor(const Value : TColor);
|
||||||
|
begin
|
||||||
|
if Value <> FShadowColor then begin
|
||||||
|
FShadowColor := Value;
|
||||||
|
invalidate;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TOvcCustomRotatedLabel.SetShadowedText(Value : Boolean);
|
||||||
|
begin
|
||||||
|
if Value <> FShadowedText then begin
|
||||||
|
FShadowedText := Value;
|
||||||
|
Invalidate;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TOvcCustomRotatedLabel.SetTransparent(Value : Boolean);
|
||||||
|
begin
|
||||||
|
if Transparent <> Value then begin
|
||||||
|
if Value then
|
||||||
|
ControlStyle := ControlStyle - [csOpaque]
|
||||||
|
else
|
||||||
|
ControlStyle := ControlStyle + [csOpaque];
|
||||||
|
Invalidate;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TOvcCustomRotatedLabel.SetFontAngle(Value : Integer);
|
||||||
|
var
|
||||||
|
Neg : Integer;
|
||||||
|
TM : TTextMetric;
|
||||||
|
begin
|
||||||
|
if Value <> FFontAngle then begin
|
||||||
|
{check if the current font can be rotated}
|
||||||
|
if not (csLoading in ComponentState) then begin
|
||||||
|
if Value <> 0 then begin
|
||||||
|
Canvas.Font := Font;
|
||||||
|
GetTextMetrics(Canvas.Handle, TM);
|
||||||
|
if (TM.tmPitchAndFamily and TMPF_TRUETYPE) = 0 then
|
||||||
|
{force true-type font}
|
||||||
|
Font.Name := 'Arial';
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
if Value < 0 then Neg := -1 else Neg := 1;
|
||||||
|
FFontAngle := (Abs(Value) mod 360) * Neg;
|
||||||
|
|
||||||
|
lblAdjustSize;
|
||||||
|
|
||||||
|
{repaint with new font}
|
||||||
|
Invalidate;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TOvcCustomRotatedLabel.SetName(const NewName : TComponentName);
|
||||||
|
begin
|
||||||
|
inherited SetName(NewName);
|
||||||
|
if (csDesigning in ComponentState) and (FCaption = '') then
|
||||||
|
FCaption := Self.Name;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
end.
|
1717
components/orpheus/ovcsc.pas
Normal file
2046
components/orpheus/ovcsf.pas
Normal file
698
components/orpheus/ovcspary.pas
Normal file
@ -0,0 +1,698 @@
|
|||||||
|
{*********************************************************}
|
||||||
|
{* OVCSPARY.PAS 4.06 *}
|
||||||
|
{*********************************************************}
|
||||||
|
|
||||||
|
{* ***** BEGIN LICENSE BLOCK ***** *}
|
||||||
|
{* Version: MPL 1.1 *}
|
||||||
|
{* *}
|
||||||
|
{* The contents of this file are subject to the Mozilla Public License *}
|
||||||
|
{* Version 1.1 (the "License"); you may not use this file except in *}
|
||||||
|
{* compliance with the License. You may obtain a copy of the License at *}
|
||||||
|
{* http://www.mozilla.org/MPL/ *}
|
||||||
|
{* *}
|
||||||
|
{* Software distributed under the License is distributed on an "AS IS" basis, *}
|
||||||
|
{* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License *}
|
||||||
|
{* for the specific language governing rights and limitations under the *}
|
||||||
|
{* License. *}
|
||||||
|
{* *}
|
||||||
|
{* The Original Code is TurboPower Orpheus *}
|
||||||
|
{* *}
|
||||||
|
{* The Initial Developer of the Original Code is TurboPower Software *}
|
||||||
|
{* *}
|
||||||
|
{* Portions created by TurboPower Software Inc. are Copyright (C)1995-2002 *}
|
||||||
|
{* TurboPower Software Inc. All Rights Reserved. *}
|
||||||
|
{* *}
|
||||||
|
{* Contributor(s): *}
|
||||||
|
{* *}
|
||||||
|
{* ***** END LICENSE BLOCK ***** *}
|
||||||
|
|
||||||
|
{$I OVC.INC}
|
||||||
|
|
||||||
|
{$B-} {Complete Boolean Evaluation}
|
||||||
|
{$I+} {Input/Output-Checking}
|
||||||
|
{$P+} {Open Parameters}
|
||||||
|
{$T-} {Typed @ Operator}
|
||||||
|
{.W-} {Windows Stack Frame}
|
||||||
|
{$X+} {Extended Syntax}
|
||||||
|
|
||||||
|
unit ovcspary;
|
||||||
|
{-Orpheus - sparse array implementation}
|
||||||
|
|
||||||
|
interface
|
||||||
|
|
||||||
|
uses
|
||||||
|
{$IFNDEF LCL} Windows, {$ELSE} LclIntf, {$ENDIF}
|
||||||
|
SysUtils, OvcExcpt, OvcConst, OvcData;
|
||||||
|
|
||||||
|
const
|
||||||
|
MaxSparseArrayItems = 320000; {maximum items in a sparse array}
|
||||||
|
|
||||||
|
type
|
||||||
|
TSparseArrayFunc = function (Index : longint; Item : pointer;
|
||||||
|
ExtraData : pointer) : boolean;
|
||||||
|
{-Sparse array's iterator type. Should return true to continue iterating,
|
||||||
|
false otherwise.}
|
||||||
|
|
||||||
|
{The sparse array class}
|
||||||
|
TOvcSparseArray = class
|
||||||
|
protected {private}
|
||||||
|
FCount : longint; {Fake count of the items}
|
||||||
|
FArray : pointer; {Sparse array}
|
||||||
|
|
||||||
|
ChunkCount : word; {Number of chunks}
|
||||||
|
ChunkArraySize : word; {Size of FArray}
|
||||||
|
|
||||||
|
procedure RecalcCount;
|
||||||
|
|
||||||
|
protected
|
||||||
|
function GetActiveCount : longint;
|
||||||
|
function GetItem(Index : longint) : pointer;
|
||||||
|
procedure PutItem(Index : longint; Item : pointer);
|
||||||
|
|
||||||
|
public
|
||||||
|
constructor Create;
|
||||||
|
destructor Destroy; override;
|
||||||
|
|
||||||
|
function Add(Item : pointer) : longint;
|
||||||
|
{-Add Item to end of array}
|
||||||
|
procedure Clear;
|
||||||
|
{-Clear array}
|
||||||
|
procedure Delete(Index : longint);
|
||||||
|
{-Delete item at Index, all items below move up one}
|
||||||
|
procedure Exchange(Index1, Index2 : longint);
|
||||||
|
{-Swap the items at Index1 and Index2}
|
||||||
|
function First : pointer;
|
||||||
|
{-Return First item}
|
||||||
|
function ForAll(Action : TSparseArrayFunc;
|
||||||
|
Backwards : boolean;
|
||||||
|
ExtraData : pointer) : longint;
|
||||||
|
{-Iterate through all active items, maybe backwards}
|
||||||
|
function IndexOf(Item : pointer) : longint;
|
||||||
|
{-Get the index of Item}
|
||||||
|
procedure Insert(Index : longint; Item : pointer);
|
||||||
|
{-Insert Item at Index, it and all items below move down one}
|
||||||
|
function Last : pointer;
|
||||||
|
{-Return Last item}
|
||||||
|
procedure Squeeze;
|
||||||
|
{-Pack the sparse array}
|
||||||
|
|
||||||
|
property Count : longint
|
||||||
|
{-Logical count of the number of items (=IndexOf(Last)+1)}
|
||||||
|
read FCount;
|
||||||
|
property ActiveCount : longint
|
||||||
|
{-Count of non-nil items}
|
||||||
|
read GetActiveCount;
|
||||||
|
property Items[Index : longint] : pointer
|
||||||
|
{-Items array}
|
||||||
|
read GetItem write PutItem;
|
||||||
|
default;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
implementation
|
||||||
|
|
||||||
|
|
||||||
|
{Notes: the sparse array is implemented as an array of chunks, each
|
||||||
|
chunk contains 32 items (2^5). The array of chunks consists
|
||||||
|
of a set of elements, each with chunk index and a pointer to
|
||||||
|
the chunk. To find the item for a given index you do two
|
||||||
|
things: calculate the chunk index (divide by 32) and the
|
||||||
|
index into the chunk (the remainder once divided by 32).
|
||||||
|
For example: where is item 100? 100 = 3*32 + 4, so you try
|
||||||
|
and find chunk index 3 in the chunk array (the array is sorted
|
||||||
|
by chunk index, hence you do a binary search), and if found
|
||||||
|
return the 5th element (zero based arrays). If not found then
|
||||||
|
the item does not exist.
|
||||||
|
Thus setting item 10000 in a sparse array will allocate only
|
||||||
|
one chunk, the 9999 previous items are all assumed nil.
|
||||||
|
The sparse array can only accomodate pointers. An unused item
|
||||||
|
will be nil. A nil pointer will indicate an unused item. Hence
|
||||||
|
you cannot really use a sparse array for longints say, unless
|
||||||
|
you can guarantee that all your values will be non-nil.
|
||||||
|
|
||||||
|
Sizing stuff: maximum number of pointers that can be stored is
|
||||||
|
just less than 350,000. For various reasons the maximum index
|
||||||
|
that is allowed for the sparse array is 319,999 meaning that a
|
||||||
|
sparse array could hold up to 320,000 pointers. To increase this
|
||||||
|
you could hold 64 or 128 pointers per chunk instead.
|
||||||
|
The minimum heap the sparse array will take is 896 bytes.
|
||||||
|
|
||||||
|
Sparse arrays cannot really be used for keeping sorted items:
|
||||||
|
obviously all the items will appear at the start of the array,
|
||||||
|
there can be no holes.
|
||||||
|
}
|
||||||
|
|
||||||
|
const
|
||||||
|
ShiftValue = 5;
|
||||||
|
ChunkElements = 1 shl ShiftValue; {Number of elements in a chunk: 32}
|
||||||
|
ChunkMask = pred(ChunkElements); {Mask used for the item in a chunk: $1F}
|
||||||
|
|
||||||
|
type
|
||||||
|
PChunk = ^TChunk; {Definition of a chunk}
|
||||||
|
TChunk = array [0..pred(ChunkElements)] of pointer;
|
||||||
|
|
||||||
|
TChunkArrayElement = packed record {Definition of a chunk array element}
|
||||||
|
ChunkIndex : word; {..index of the chunk}
|
||||||
|
Chunk : PChunk; {..the chunk itself}
|
||||||
|
end;
|
||||||
|
|
||||||
|
const
|
||||||
|
DefChunkArrayElements = 4; {Initial size of the chunk array}
|
||||||
|
MaxChunkArrayElements = ($10000 div sizeof(TChunkArrayElement)) - 1;
|
||||||
|
{Absolute maximum of chunk array elements}
|
||||||
|
|
||||||
|
type
|
||||||
|
PChunkArray = ^TChunkArray; {Definition of a chunk array}
|
||||||
|
TChunkArray = array [0..pred(MaxChunkArrayElements)] of TChunkArrayElement;
|
||||||
|
|
||||||
|
{===Helper routines==================================================}
|
||||||
|
procedure RaiseException(ClassType : integer);
|
||||||
|
begin
|
||||||
|
case ClassType of
|
||||||
|
1 : raise ESAEAtMaxSize.Create(GetOrphStr(SCSAEAtMaxSize));
|
||||||
|
2 : raise ESAEOutOfBounds.Create(GetOrphStr(SCSAEOutOfBounds));
|
||||||
|
else
|
||||||
|
raise ESparseArrayError.Create(GetOrphStr(SCSAEGeneral));
|
||||||
|
end;{case}
|
||||||
|
end;
|
||||||
|
{--------}
|
||||||
|
function GrowChunkArray(A : PChunkArray; var CurSize : word) : PChunkArray;
|
||||||
|
{-Grow the chunk array, return the new size and the new pointer}
|
||||||
|
var
|
||||||
|
NewSize : longint;
|
||||||
|
NewSizeAdj : word;
|
||||||
|
begin
|
||||||
|
NewSize := longint(CurSize) +
|
||||||
|
(DefChunkArrayElements * sizeof(TChunkArrayElement));
|
||||||
|
NewSizeAdj := MaxChunkArrayElements * sizeof(TChunkArrayElement);
|
||||||
|
if (NewSize < NewSizeAdj) then
|
||||||
|
NewSizeAdj := NewSize;
|
||||||
|
GetMem(Result, NewSizeAdj);
|
||||||
|
{$IFOPT D+}
|
||||||
|
FillChar(Result^, NewSizeAdj, $CC);
|
||||||
|
{$ENDIF}
|
||||||
|
if (CurSize <> 0) then
|
||||||
|
begin
|
||||||
|
Move(A^, Result^, CurSize);
|
||||||
|
FreeMem(A, CurSize);
|
||||||
|
end;
|
||||||
|
CurSize := NewSizeAdj;
|
||||||
|
end;
|
||||||
|
{--------}
|
||||||
|
function GetChunk(A : PChunkArray;
|
||||||
|
CI : word; NumChunks : word) : integer;
|
||||||
|
{-Find a chunk array element given the chunk index CI and the number of
|
||||||
|
chunks. Return the index into the chunk array, or -1 if not found.}
|
||||||
|
var
|
||||||
|
L, R : integer;
|
||||||
|
MsInx : word;
|
||||||
|
begin
|
||||||
|
L := 0;
|
||||||
|
R := pred(NumChunks);
|
||||||
|
repeat
|
||||||
|
Result := (L + R) div 2;
|
||||||
|
MsInx := A^[Result].ChunkIndex;
|
||||||
|
if (CI = MsInx) then
|
||||||
|
Exit
|
||||||
|
else if (CI < MsInx) then
|
||||||
|
R := pred(Result)
|
||||||
|
else
|
||||||
|
L := succ(Result);
|
||||||
|
until (L > R);
|
||||||
|
Result := -1;
|
||||||
|
end;
|
||||||
|
{--------}
|
||||||
|
function EnsureChunk(var A : PChunkArray; CI : word;
|
||||||
|
var NumChunks, Size : word;
|
||||||
|
DontCreate : boolean) : integer;
|
||||||
|
{-Makes sure that chunk CI is available for use. If it does not yet
|
||||||
|
exist and DontCreate is false, creates a new chunk, inserts it into
|
||||||
|
the chunk array (possibly growing the array). Return the index of
|
||||||
|
the chunk in the array.}
|
||||||
|
var
|
||||||
|
NumElements : word;
|
||||||
|
L, R, M : integer;
|
||||||
|
MsInx : word;
|
||||||
|
begin
|
||||||
|
L := 0;
|
||||||
|
if (NumChunks > 0) then
|
||||||
|
begin
|
||||||
|
R := pred(NumChunks);
|
||||||
|
repeat
|
||||||
|
M := (L + R) div 2;
|
||||||
|
MsInx := A^[M].ChunkIndex;
|
||||||
|
if (CI = MsInx) then
|
||||||
|
begin
|
||||||
|
Result := M;
|
||||||
|
Exit;
|
||||||
|
end
|
||||||
|
else if (CI < MsInx) then
|
||||||
|
R := pred(M)
|
||||||
|
else
|
||||||
|
L := succ(M);
|
||||||
|
until (L > R);
|
||||||
|
end;
|
||||||
|
|
||||||
|
if DontCreate then
|
||||||
|
begin
|
||||||
|
Result := -1;
|
||||||
|
Exit;
|
||||||
|
end;
|
||||||
|
|
||||||
|
Result := L;
|
||||||
|
|
||||||
|
NumElements := Size div sizeof(TChunkArrayElement);
|
||||||
|
if (NumChunks = NumElements) then
|
||||||
|
A := GrowChunkArray(A, Size);
|
||||||
|
|
||||||
|
if (Result < NumChunks) then
|
||||||
|
Move(A^[Result], A^[succ(Result)],
|
||||||
|
(NumChunks - Result) * sizeof(TChunkArrayElement));
|
||||||
|
|
||||||
|
with A^[Result] do
|
||||||
|
begin
|
||||||
|
ChunkIndex := CI;
|
||||||
|
Chunk := New(PChunk);
|
||||||
|
FillChar(Chunk^, sizeof(TChunk), 0);
|
||||||
|
end;
|
||||||
|
|
||||||
|
inc(NumChunks);
|
||||||
|
end;
|
||||||
|
{--------}
|
||||||
|
function ChunkIsBlank(A : PChunkArray; ArrayInx : word) : boolean;
|
||||||
|
{-Return true if the chunk has no items (all pointers are nil).}
|
||||||
|
const
|
||||||
|
ChunkSizeInWords = sizeof(TChunk) div 2;
|
||||||
|
ChunkSizeInDWords = sizeof(TChunk) div 4;
|
||||||
|
var
|
||||||
|
Chunk : PChunk;
|
||||||
|
{$IFDEF NoAsm}
|
||||||
|
ItemNum : Integer;
|
||||||
|
{$ENDIF}
|
||||||
|
begin
|
||||||
|
Chunk := A^[ArrayInx].Chunk;
|
||||||
|
{$IFDEF NoAsm}
|
||||||
|
for ItemNum := 0 to Pred(ChunkElements) do
|
||||||
|
begin
|
||||||
|
if Chunk^[ItemNum] <> nil then
|
||||||
|
begin
|
||||||
|
Result := False;
|
||||||
|
Exit;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
Result := True;
|
||||||
|
{$ELSE}
|
||||||
|
asm
|
||||||
|
push edi
|
||||||
|
{$IFDEF VERSION6} { Delphi 6 codegen bug }
|
||||||
|
push ecx
|
||||||
|
{$ENDIF}
|
||||||
|
lea eax, Chunk
|
||||||
|
mov edi, [eax]
|
||||||
|
xor eax, eax
|
||||||
|
mov edx, eax
|
||||||
|
mov ecx, ChunkSizeInDWords
|
||||||
|
repe scasd
|
||||||
|
jne @@Exit
|
||||||
|
inc edx
|
||||||
|
@@Exit:
|
||||||
|
{$IFDEF VERSION6} { Delphi 6 codegen bug }
|
||||||
|
pop ecx
|
||||||
|
{$ENDIF}
|
||||||
|
mov @Result, dl
|
||||||
|
pop edi
|
||||||
|
end;
|
||||||
|
{$ENDIF}
|
||||||
|
end;
|
||||||
|
{--------}
|
||||||
|
procedure DeleteChunk(A : PChunkArray; ArrayInx : word; var NumChunks : word);
|
||||||
|
{-Delete a chunk, moving chunks below up one.}
|
||||||
|
begin
|
||||||
|
Dispose(A^[ArrayInx].Chunk);
|
||||||
|
if ArrayInx < pred(NumChunks) then
|
||||||
|
Move(A^[succ(ArrayInx)], A^[ArrayInx],
|
||||||
|
(NumChunks - ArrayInx) * sizeof(TChunkArrayElement));
|
||||||
|
dec(NumChunks);
|
||||||
|
{$IFOPT D+}
|
||||||
|
FillChar(A^[NumChunks], sizeof(TChunkArrayElement), $CC);
|
||||||
|
{$ENDIF}
|
||||||
|
end;
|
||||||
|
|
||||||
|
{===TOvcSparseArray ForAll routines=====================================}
|
||||||
|
function CountActiveElements(Index : longint;
|
||||||
|
Item : pointer;
|
||||||
|
ExtraData : pointer) : boolean; far;
|
||||||
|
var
|
||||||
|
ED : ^longint absolute ExtraData;
|
||||||
|
begin
|
||||||
|
Result := True;
|
||||||
|
inc(ED^);
|
||||||
|
end;
|
||||||
|
{=====}
|
||||||
|
|
||||||
|
function Find1stOrLastElement(Index : longint;
|
||||||
|
Item : pointer;
|
||||||
|
ExtraData : pointer) : boolean; far;
|
||||||
|
var
|
||||||
|
ED : ^pointer absolute ExtraData;
|
||||||
|
begin
|
||||||
|
Find1stOrLastElement := false;
|
||||||
|
ED^ := Item;
|
||||||
|
end;
|
||||||
|
{=====}
|
||||||
|
|
||||||
|
function FindSpecificElement(Index : longint;
|
||||||
|
Item : pointer;
|
||||||
|
ExtraData : pointer) : boolean; far;
|
||||||
|
begin
|
||||||
|
{continue looking if this Item is NOT the one we want}
|
||||||
|
FindSpecificElement := Item <> ExtraData;
|
||||||
|
end;
|
||||||
|
{=====}
|
||||||
|
|
||||||
|
constructor TOvcSparseArray.Create;
|
||||||
|
begin
|
||||||
|
FArray := GrowChunkArray(FArray, ChunkArraySize);
|
||||||
|
end;
|
||||||
|
{=====}
|
||||||
|
|
||||||
|
destructor TOvcSparseArray.Destroy;
|
||||||
|
begin
|
||||||
|
if Assigned(FArray) then
|
||||||
|
begin
|
||||||
|
Clear;
|
||||||
|
FreeMem(FArray, ChunkArraySize);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
{=====}
|
||||||
|
|
||||||
|
procedure TOvcSparseArray.RecalcCount;
|
||||||
|
var
|
||||||
|
Dummy : pointer;
|
||||||
|
begin
|
||||||
|
FCount := succ(ForAll(Find1stOrLastElement, true, @Dummy));
|
||||||
|
end;
|
||||||
|
{--------}
|
||||||
|
procedure TOvcSparseArray.Squeeze;
|
||||||
|
var
|
||||||
|
ArrayInx : word;
|
||||||
|
begin
|
||||||
|
ArrayInx := 0;
|
||||||
|
while ArrayInx <> ChunkCount do
|
||||||
|
if ChunkIsBlank(FArray, ArrayInx) then
|
||||||
|
DeleteChunk(FArray, ArrayInx, ChunkCount)
|
||||||
|
else
|
||||||
|
inc(ArrayInx);
|
||||||
|
end;
|
||||||
|
{=======================================================================}
|
||||||
|
|
||||||
|
|
||||||
|
{===TOvcSparseArray property access=====================================}
|
||||||
|
function TOvcSparseArray.GetActiveCount : longint;
|
||||||
|
begin
|
||||||
|
Result := 0;
|
||||||
|
ForAll(CountActiveElements, true, @Result);
|
||||||
|
end;
|
||||||
|
{--------}
|
||||||
|
function TOvcSparseArray.GetItem(Index : longint) : pointer;
|
||||||
|
var
|
||||||
|
ChunkIndex : word;
|
||||||
|
ChunkNum : integer;
|
||||||
|
begin
|
||||||
|
if (Index < 0) or (Index >= MaxSparseArrayItems) then
|
||||||
|
begin
|
||||||
|
RaiseException(2);
|
||||||
|
end;
|
||||||
|
|
||||||
|
Result := nil;
|
||||||
|
if (ChunkCount > 0) then
|
||||||
|
begin
|
||||||
|
ChunkIndex := Index shr ShiftValue;
|
||||||
|
ChunkNum := GetChunk(FArray, ChunkIndex, ChunkCount);
|
||||||
|
if (ChunkNum <> -1) then
|
||||||
|
Result := PChunkArray(FArray)^[ChunkNum].Chunk^[Index and ChunkMask];
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
{--------}
|
||||||
|
procedure TOvcSparseArray.PutItem(Index : longint; Item : pointer);
|
||||||
|
var
|
||||||
|
ChunkIndex : word;
|
||||||
|
ChunkNum : integer;
|
||||||
|
begin
|
||||||
|
if (Index < 0) or (Index >= MaxSparseArrayItems) then
|
||||||
|
begin
|
||||||
|
RaiseException(2);
|
||||||
|
end;
|
||||||
|
|
||||||
|
ChunkIndex := Index shr ShiftValue;
|
||||||
|
ChunkNum := EnsureChunk(PChunkArray(FArray),
|
||||||
|
ChunkIndex, ChunkCount, ChunkArraySize,
|
||||||
|
(Item = nil));
|
||||||
|
|
||||||
|
if (ChunkNum <> -1) then
|
||||||
|
begin
|
||||||
|
PChunkArray(FArray)^[ChunkNum].Chunk^[Index and ChunkMask] := Item;
|
||||||
|
if (Item = nil) then
|
||||||
|
Squeeze;
|
||||||
|
RecalcCount;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
{====================================================================}
|
||||||
|
|
||||||
|
|
||||||
|
{===TOvcSparseArray item maintenance====================================}
|
||||||
|
function TOvcSparseArray.Add(Item : pointer) : longint;
|
||||||
|
begin
|
||||||
|
if (FCount = MaxSparseArrayItems) then
|
||||||
|
RaiseException(1);
|
||||||
|
|
||||||
|
Result := FCount;
|
||||||
|
PutItem(Result, Item);
|
||||||
|
end;
|
||||||
|
{--------}
|
||||||
|
procedure TOvcSparseArray.Clear;
|
||||||
|
var
|
||||||
|
i : integer;
|
||||||
|
begin
|
||||||
|
if (ChunkCount > 0) then
|
||||||
|
begin
|
||||||
|
for i := 0 to pred(ChunkCount) do
|
||||||
|
Dispose(PChunkArray(FArray)^[i].Chunk);
|
||||||
|
{$IFOPT D+}
|
||||||
|
FillChar(FArray^, ChunkArraySize, $CC);
|
||||||
|
{$ENDIF}
|
||||||
|
end;
|
||||||
|
ChunkCount := 0;
|
||||||
|
FCount := 0;
|
||||||
|
end;
|
||||||
|
{--------}
|
||||||
|
procedure TOvcSparseArray.Delete(Index : longint);
|
||||||
|
const
|
||||||
|
LastPos = pred(ChunkElements);
|
||||||
|
var
|
||||||
|
MajorInx : word;
|
||||||
|
ChunkNum, Dummy : integer;
|
||||||
|
StartPos : word;
|
||||||
|
OurChunk : PChunk;
|
||||||
|
Transferred : boolean;
|
||||||
|
begin
|
||||||
|
if (Index < 0) or (Index >= MaxSparseArrayItems) then
|
||||||
|
begin
|
||||||
|
RaiseException(2);
|
||||||
|
end;
|
||||||
|
|
||||||
|
if (Index >= FCount) then
|
||||||
|
Exit;
|
||||||
|
|
||||||
|
MajorInx := Index shr ShiftValue;
|
||||||
|
ChunkNum := EnsureChunk(PChunkArray(FArray),
|
||||||
|
MajorInx, ChunkCount, ChunkArraySize,
|
||||||
|
false);
|
||||||
|
|
||||||
|
StartPos := Index and ChunkMask;
|
||||||
|
OurChunk := PChunkArray(FArray)^[ChunkNum].Chunk;
|
||||||
|
if (StartPos <> LastPos) then
|
||||||
|
Move(OurChunk^[succ(StartPos)], OurChunk^[StartPos],
|
||||||
|
(LastPos-StartPos)*sizeof(Pointer));
|
||||||
|
|
||||||
|
inc(ChunkNum);
|
||||||
|
while (ChunkNum <> ChunkCount) do
|
||||||
|
begin
|
||||||
|
with PChunkArray(FArray)^[ChunkNum] do
|
||||||
|
begin
|
||||||
|
if (ChunkIndex = MajorInx+1) then
|
||||||
|
begin
|
||||||
|
Transferred := true;
|
||||||
|
OurChunk^[LastPos] := Chunk^[0];
|
||||||
|
end
|
||||||
|
else
|
||||||
|
begin
|
||||||
|
Transferred := false;
|
||||||
|
OurChunk^[LastPos] := nil;
|
||||||
|
end;
|
||||||
|
MajorInx := ChunkIndex;
|
||||||
|
OurChunk := Chunk;
|
||||||
|
end;
|
||||||
|
if (OurChunk^[0] <> nil) and (not Transferred) then
|
||||||
|
begin
|
||||||
|
Dummy := EnsureChunk(PChunkArray(FArray),
|
||||||
|
MajorInx-1, ChunkCount, ChunkArraySize,
|
||||||
|
true);
|
||||||
|
PChunkArray(FArray)^[Dummy].Chunk^[LastPos] :=
|
||||||
|
OurChunk^[0];
|
||||||
|
end;
|
||||||
|
Move(OurChunk^[1], OurChunk^[0], LastPos*sizeof(Pointer));
|
||||||
|
inc(ChunkNum);
|
||||||
|
end;
|
||||||
|
|
||||||
|
OurChunk^[LastPos] := nil;
|
||||||
|
Squeeze;
|
||||||
|
RecalcCount;
|
||||||
|
end;
|
||||||
|
{--------}
|
||||||
|
procedure TOvcSparseArray.Exchange(Index1, Index2 : longint);
|
||||||
|
var
|
||||||
|
Item1, Item2 : pointer;
|
||||||
|
begin
|
||||||
|
if (Index1 = Index2) then
|
||||||
|
Exit;
|
||||||
|
|
||||||
|
if (Index1 < 0) or (Index1 >= MaxSparseArrayItems) then
|
||||||
|
begin
|
||||||
|
RaiseException(2);
|
||||||
|
end;
|
||||||
|
if (Index2 < 0) or (Index2 >= MaxSparseArrayItems) then
|
||||||
|
begin
|
||||||
|
RaiseException(2);
|
||||||
|
end;
|
||||||
|
|
||||||
|
Item1 := GetItem(Index1);
|
||||||
|
Item2 := GetItem(Index2);
|
||||||
|
PutItem(Index2, Item1);
|
||||||
|
PutItem(Index1, Item2);
|
||||||
|
end;
|
||||||
|
{--------}
|
||||||
|
function TOvcSparseArray.First : pointer;
|
||||||
|
begin
|
||||||
|
Result := nil;
|
||||||
|
ForAll(Find1stOrLastElement, false, @Result);
|
||||||
|
end;
|
||||||
|
{--------}
|
||||||
|
function TOvcSparseArray.ForAll(Action : TSparseArrayFunc;
|
||||||
|
Backwards : boolean;
|
||||||
|
ExtraData : pointer) : longint;
|
||||||
|
var
|
||||||
|
MajorInx : word;
|
||||||
|
MinorInx : word;
|
||||||
|
MajorStub : longint;
|
||||||
|
label
|
||||||
|
ExitLoopsReverse, ExitLoopsForwards;
|
||||||
|
begin
|
||||||
|
if (ChunkCount = 0) then
|
||||||
|
Result := -1
|
||||||
|
else if Backwards then
|
||||||
|
begin
|
||||||
|
for MajorInx := pred(ChunkCount) downto 0 do
|
||||||
|
with PChunkArray(FArray)^[MajorInx] do
|
||||||
|
begin
|
||||||
|
MajorStub := longint(ChunkIndex) shl ShiftValue;
|
||||||
|
for MinorInx := pred(ChunkElements) downto 0 do
|
||||||
|
if (Chunk^[MinorInx] <> nil) then
|
||||||
|
begin
|
||||||
|
Result := MajorStub + MinorInx;
|
||||||
|
if not Action(Result,
|
||||||
|
Chunk^[MinorInx],
|
||||||
|
ExtraData) then
|
||||||
|
Goto ExitLoopsReverse;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
Result := -1;
|
||||||
|
ExitLoopsReverse:
|
||||||
|
end
|
||||||
|
else
|
||||||
|
begin
|
||||||
|
for MajorInx := 0 to pred(ChunkCount) do
|
||||||
|
with PChunkArray(FArray)^[MajorInx] do
|
||||||
|
begin
|
||||||
|
MajorStub := longint(ChunkIndex) shl ShiftValue;
|
||||||
|
for MinorInx := 0 to pred(ChunkElements) do
|
||||||
|
if (Chunk^[MinorInx] <> nil) then
|
||||||
|
begin
|
||||||
|
Result := MajorStub + MinorInx;
|
||||||
|
if not Action(Result,
|
||||||
|
Chunk^[MinorInx],
|
||||||
|
ExtraData) then
|
||||||
|
Goto ExitLoopsForwards;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
Result := -1;
|
||||||
|
ExitLoopsForwards:
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
{--------}
|
||||||
|
function TOvcSparseArray.IndexOf(Item : pointer) : longint;
|
||||||
|
begin
|
||||||
|
Result := ForAll(FindSpecificElement, true, Item);
|
||||||
|
end;
|
||||||
|
{--------}
|
||||||
|
procedure TOvcSparseArray.Insert(Index : longint; Item : pointer);
|
||||||
|
const
|
||||||
|
LastPos = pred(ChunkElements);
|
||||||
|
var
|
||||||
|
MajorInx : word;
|
||||||
|
ChunkNum : integer;
|
||||||
|
CarryItem, NewCarryItem : pointer;
|
||||||
|
StartPos : word;
|
||||||
|
begin
|
||||||
|
if (Index < 0) or (Index >= MaxSparseArrayItems) then
|
||||||
|
begin
|
||||||
|
RaiseException(2);
|
||||||
|
end;
|
||||||
|
|
||||||
|
if (FCount = MaxSparseArrayItems) then
|
||||||
|
RaiseException(1);
|
||||||
|
|
||||||
|
if (Index >= FCount) then
|
||||||
|
begin
|
||||||
|
PutItem(Index, Item);
|
||||||
|
Exit;
|
||||||
|
end;
|
||||||
|
|
||||||
|
MajorInx := Index shr ShiftValue;
|
||||||
|
ChunkNum := EnsureChunk(PChunkArray(FArray),
|
||||||
|
MajorInx, ChunkCount, ChunkArraySize,
|
||||||
|
false);
|
||||||
|
|
||||||
|
CarryItem := Item;
|
||||||
|
StartPos := Index and ChunkMask;
|
||||||
|
repeat
|
||||||
|
with PChunkArray(FArray)^[ChunkNum] do
|
||||||
|
begin
|
||||||
|
MajorInx := ChunkIndex;
|
||||||
|
NewCarryItem := Chunk^[LastPos];
|
||||||
|
if (StartPos <> LastPos) then
|
||||||
|
Move(Chunk^[StartPos], Chunk^[succ(StartPos)],
|
||||||
|
(LastPos-StartPos)*sizeof(Pointer));
|
||||||
|
Chunk^[StartPos] := CarryItem;
|
||||||
|
CarryItem := NewCarryItem;
|
||||||
|
StartPos := 0;
|
||||||
|
end;
|
||||||
|
inc(ChunkNum);
|
||||||
|
if (CarryItem <> nil) then
|
||||||
|
if (ChunkNum = ChunkCount) or
|
||||||
|
(PChunkArray(FArray)^[ChunkNum].ChunkIndex <> MajorInx+1) then
|
||||||
|
ChunkNum := EnsureChunk(PChunkArray(FArray),
|
||||||
|
MajorInx+1, ChunkCount, ChunkArraySize,
|
||||||
|
false);
|
||||||
|
until (ChunkNum = ChunkCount);
|
||||||
|
inc(FCount);
|
||||||
|
end;
|
||||||
|
{--------}
|
||||||
|
function TOvcSparseArray.Last : pointer;
|
||||||
|
begin
|
||||||
|
Result := nil;
|
||||||
|
ForAll(Find1stOrLastElement, true, @Result);
|
||||||
|
end;
|
||||||
|
{====================================================================}
|
||||||
|
|
||||||
|
end.
|