home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
BUG 4
/
BUGCD1997_05.BIN
/
aplic
/
clip4win
/
clip4win.exe
/
C4W30E.HUF
/
C4W30UPD.TXT
next >
Wrap
Text File
|
1996-07-03
|
15KB
|
440 lines
Clip-4-Win Update
=================
Thank you for trying Clip-4-Win. I hope you like it.
This file contains information that has come to light since the
current version of Clip-4-Win was released. Also some advertising...
I know it's probably boring - but please read all of it!
You might like to copy this file after you have installed Clip-4-Win.
NOTE: Some parts may not apply to the Evaluation Version of Clip-4-Win,
as they are about the full product. Please buy it!
Installing Clip-4-Win
---------------------
You should use Windows to install Clip-4-Win. Run d:SETUP.EXE, where
d: is the drive containing Disk 1. You need about 2MB free on your
Windows partition and about 13MB free to install Clip-4-Win. Some of
that space is recovered after the install.
Clip-4-Win Toolkit
------------------
This is a GUI screen designer/editor AND a Windows linker.
You can easily design dialogs, bitmaps, icons, menus, cursors, and
other resources.
Note: the time you save designing dialogs (forms) is easily worth
the price! If you don't have a Windows linker already, get the
Clip-4-Win Toolkit.
WBrowse(T)
----------
If you'd like a really impressive, high-quality browser that handles
TrueType fonts, bitmaps, colours, optional 3-D effects, etc., then
WBrowse(T) is the product for you. You use it almost the same as
TBrowse, but it's even more configurable and really takes advantage
of Windows.
A TopClass version is now included with Clip-4-Win! Various small
samples use it, e.g. SOURCE\MDIWBROW.PRG. A comprehensive demo is
SOURCE\WBTDEMO.ZIP.
A Class(y) version, WBrowseY, is included in WBOTY.ZIP in the Clipper
forum libraries on CompuServe (also included is a Class(y) version of
the tabbed dialog class, oTab). For any other versions, please see
the contact information in the Windows Help file HLP\WBROWSET.HLP.
New Debugger
------------
Please contact Skelton Software about the availability of a new
debugger. Mr Debug-4-Win is now shipping!!
Address List Manager (ADDMGR)
-----------------------------
The QUICK.TXT file is mainly there to help you check you have Clip-4-Win
properly installed, so it doesn't mention the large amounts of sample
source code that is included with Clip-4-Win. In particular, in
SOURCE\ADDMGR there is a complete sample application. Because it's a
complete application, it's not small and simple. So, if you're new to
event-driven programming and Windows, this is probably not the place to
start. Once you feel comfortable with event-driven programming, expect
to find AddMgr really useful.
MAKELIBS Problem
----------------
If MAKELIBS fails with "Valid version of source file was not found",
please check that your CLIPPER.LIB actually is the version you think
it is. A number of people have discovered that one or more Clipper
upgrades have failed, leaving them with a version of CLIPPER.LIB
that's not the same as their compiler (CLIPPER.EXE). Please ask CA
for help if you think this has happened to you. You should look at
the timestamps on CLIPPER.EXE and CLIPPER.LIB. Normally they are the
same. CLIPPER.LIB's time shows the version (e.g. 5:25 is 5.2e).
Using OS/2 2.11
---------------
The shipping version of OS/2 2.11 causes a Clipper Internal Error
(5300). IBM have a fix (called an APAR), PJ13282, for which the
reference code is XR_F039 (non-USA) or XR0F039 (USA).
Using OS/2 WARP
---------------
The original version of WARP that was shipped needs a patch (available
from IBM). The fix pack is XRUW005 (XR0W005 for USA). If you want a
quick fix, the only file you appear to need is WINOS2.COM (size: 31KB).
This should not apply to the "fullpack", as IBM say the fix is already
included.
Training
--------
If you're interested in a training course on Windows programming with
Clip-4-Win, please contact Dipl.-Ing. Siegbert Roessler, tel. +49 6222
9206 52, fax +49 6222 75337. Warning: only expert tuition available!
For on-site hands-on training in England, please contact Skelton
Software directly and we'll put you in touch with someone to help you.
Consultants / Developers / Trainers
-----------------------------------
If you're available "for hire" by others, tell us the relevant details
so we can pass them on to anyone who asks.
Books
-----
Please see the topic "Windows Books" and/or "Object Orientation - Books"
in the HLP or NG file.
Show Off Your App!
------------------
If you're pleased with your application, please send us a copy we can
show to other Clipper developers. (Check you include any data your
app needs, and that it's not proprietary.)
"Bug" in SetCursor()
--------------------
As mentioned in changes.txt, trying to control both the Windows cursor
and the Clipper cursor [which Windows calls a caret, see SetCaret()]
is a problem. Clip-4-Win 2.0 fixed a bug in SetCursor() to make it
more like the Windows function. That means a cursor only remains set
until the next WM_MOUSEMOVE message. If you want just a single cursor
in a window, specify it to RegisterClass(). WINSETUP.PRG uses this
function, which is also used by the CURSOR clause of the CREATE WINDOW
command. Or, see classes such as WWindow or WFrameWindow. If you
want to change the cursor in a window from time to time, handle the
WM_MOUSEMOVE message, e.g. by using SubClassWindow(). The fix added
in 2.0 is also in 3.0.
Documentation Error: RegisterClass()
------------------------------------
Some documentation (printed and online) incorrectly states that NIL or
zero (0) have the same effect for various parameters. Actually, NIL
means "the default" and zero means "none specified here", which often
reduces to "none". E.g. if hCursor is NIL, IDC_ARROW is used, whereas
zero means that no cursor is shown.
Easy Way to Use /NOE with LINK.EXE
----------------------------------
In case you haven't seen this yet:
Some versions of MS LINK need /NOE. The easiest way to specify this
is using a DOS environment variable:
SET LINK=/NOE
then you don't need to change the RMK (etc.) files supplied with
Clip-4-Win.
Using 4DOS
----------
It's possible to really foul things up using aliases. E.g. You can
alias COPY so that part of MAKELIBS.BAT fails. For that matter, you
could alias CLIPPER to be FORMAT, I suppose. Expect trouble if you
do this kind of thing and then run *any* product's BAT or RMK files.
Warning: I have seen 4DOS COPY aliased such that the append command
COPY /B file1+file2 newfile
was skipped (file1 & file2 existed, newfile did not). If the reason
really was that the date/time stamps of file1 and file2 caused the
command to be skipped, it would be a bug in 4DOS.
Bug and Work-Around in TrackPopupMenu()
---------------------------------------
The hWnd parameter is supposed to default, but doesn't. Specify it!
Also, when TrackPopupMenu() returns the code block has not yet been run
(the menu event is queued). So, don't call DestroyMenu() until later.
You can call it as soon as you've seen EVENT_NONE from ChkEvent(), or
at any later time that's convenient.
To access the Windows API function, use _TrackPopupMenu() or use the
function in SOURCE\WINAPI\MENU.PRG or use the _DLL command in DLL.CH.
Documentation Error: PrintDlg()
-------------------------------
In some editions of the manual, the page for PrintDlg() shows an
example which needs an addition.
Add:
EndDoc( aPrintDlg[ PD_hDC ] )
immediately before the Call to DeleteDC().
Documentation Error: WODBC:Skip()
---------------------------------
Contrary to the documentation, this method returns a logical
indicating whether the skip succeeded. To get the documented
behaviour use:
CLASS MyODBC INHERIT WODBC
METHOD Skip(n) INLINE super:Skip(n), ::nPos
ENDCLASS
Performance of OO Programs
--------------------------
On some systems, the first time you start a browse or a dialog
you may experience a delay that doesn't occur when you start it
on subsequent occasions. This is usually because a number of
classes are being set up on the first use. If you would prefer
to "hide" this, you can set up the classes during your app's
initialisation. Just create an object of each class, even if
all you do is to discard it. If you don't want to invoke the
Init() method for a class, you can cheat and use:
LOCAL o := MyClass() // Note: "()" with no params
This is not a good habit, so only do this if you must!
BListBox(), WBrowseDB() & WBColumnNew() - Where did they go?
------------------------------------------------------------
If you feel you're missing these functions (from WBrowse 2.0),
get the file WBROLD.ZIP from Disk 1. Change oB:SetTitleBar() to
the new oB:tbXXX properties, and oB:SetFont(hFont) to
oB:ColFont := hFont.
AXS - Advantage Xbase Server
----------------------------
AXS is now compatible with Clip-4-Win.
Debugging Output to a window
----------------------------
Using SOURCE\WINAPI\OUTDEBUG.PRG and the $ and $$ commands (see
WINDOWS.CH; they are similar to Clipper's ? and ?? commands), your
application can output tracing information as it runs. By default,
Windows outputs to AUX:, which is usually COM1: and not what you
want. In SYSTEM.INI put (without the tabs):
[debug]
OutputTo=NUL
The output can still be fetched by e.g. DBWIN.EXE to display in a
window and/or log to a file - check your WINDOWS directory to see
if you have DBWIN.
BLINKER Bugs and Work Arounds
-----------------------------
(a) Some versions of Blinker 3 wrongly give errors about Missing Externals
which are in fact in CLIP4WIN.LIB. You need to upgrade your Blinker.
(b) With Clipper 5.3 and Blinker 3 you must use the following, in this
order, in your linker script:
BLINKER INCREMENTAL OFF
BLINKER CLIPPER SYMBOL OFF
Non-OO Tutorial: Simple Data Entry Application
----------------------------------------------
This does not say clearly that SOURCE\USERSRES\ contains the resource
version, which requires a resource compiler to build properly, and
that SOURCE\USERS\ contains the non-resource (dynamic) version.
The HLP file, NG file, and manual (section 5.3) all contain the same
information.
Also, to build the samples use C4WBUILD <name> (not RMAKE).
GET Variables After a Dialog Ends
---------------------------------
The intention is that you use the values entered before you end the
dialog. If you want to keep the values longer, one way is to copy
the variables just before ending the dialog. An alternative if
you're using WGET objects (e.g. with @ ID ... GET), is to change
source\oo\classes\wget.prg so that method OnDestroy()'s IF is:
IF ::oGet:HasFocus .and. ::oGet:ExitState == GE_NOEXIT
Missing External "__opx" with 5.3 (e.g. in ODBCBROW)
----------------------------------------------------
Please also link OPX.OBJ (Disk 1), but only with Clipper 5.3.
Using "@ ID ... ICON"
---------------------
The documentation says to use "RESOURCE <cName>", but should say to
use either "RESOURCE NAME <cName>" or "RESNAME <cName>". Windows
does not allow a numeric ID in this case.
Using Class(y) Instead of TopClass
----------------------------------
Files to allow Clip-4-Win's Application Classes to be re-compiled
for use with Class(y) are being tested. Please contact me if you
are interested in this. You need at least Class(y) version 2.4a.
Using the User's Choice of Background Colour
--------------------------------------------
The user's colour settings (e.g. in Control Panel) are available
through the COLOR_* values defined in WINDOWS.CH. Some can be used
extremely easily, e.g. the background colour of a window can be set
when RegisterClass() is called by specifying the hBrush as
COLOR_WINDOW + 1 (you have to add 1 to any of the constants when
used with RegisterClass). Note: just use COLOR_WINDOW + 1, don't in
this case use GetStockObject().
To use the user's background colour in a non-OO application using
CREATE WINDOW, specify the clause BRUSH COLOR_WINDOW + 1.
To use the user's background colour with the Application Classes,
e.g. with an SDI frame window:
CLASS MyFrame INHERIT WSDIWindow
METHOD RegisterClass(hInst, hIcon, hCursor, hBrush, cnMenuId) ;
INLINE super:RegisterClass(hInst, hIcon, hCursor, ;
iif(hBrush == nil, COLOR_WINDOW + 1,;
hBrush), cnMenuId)
ENDCLASS
To use the user's background colour in an application using WinSetup()
you need to edit a copy of SOURCE\WINSETUP.PRG, as the code expects a
stock (pre-defined) brush to be used.
FillRect() Documentation Error
------------------------------
This function returns nothing useful.
Bug in WProgressDialog
----------------------
As shipped, the ASSIGNs for Max and Min need " := n" appending!
UK Post Codes
-------------
Please contact me if you want some sample code for AFD (a very affordable
postcode system).
Documentation Error: CreateWindow()
-----------------------------------
If you want no parent window, use zero (0), not NIL.
Useful New Feature!
-------------------
You can use dynamically-created dialogs by supplying an aDlg instead of
a cnId to any of the following:
DialogBox()
CreateDialog() [the 4-param version, for a modeless dialog]
MDICreateDialog()
The aDlg should have been created by CREATE DIALOG or CreateDialog()
and AppendDialog().
This feature is mentioned in CHANGES.TXT and in the documentation for
the WDialog class, but is omitted from the documentation for the
functions. Several samples rely on it, e.g. SOURCE\OO\USERS\USERS.PRG
and SOURCE\OO\USERS\USERSCMD.PRG.
It's particularly useful for data-driven applications.
Documentation Error: CreateCursor() & CreateIcon()
--------------------------------------------------
Some of the documentation says these return lSuccess, which would be
silly! They return the hCursor/hIcon (or zero if it fails).
WBROWSE Undocumented Feature
----------------------------
Method GetColWidth( nCol ) returns the width of column nCol. If nCol
is zero, the nub width (WBrowse:NubWidth) is returned.
WGet:OnKillFocus() Improvement for VALID
----------------------------------------
You can improve the handling of VALIDs by SOURCE\OO\CLASSES\WGET.PRG if
you change:
if ::Valid
::oGet:ExitState = GE_DOWN // a reasonable guess
::oParent:WantFocus(self, .f.)
...
to:
if ::Valid
if ::oGet:ExitState != nil // had focus
::oGet:ExitState = GE_DOWN // a reasonable guess
endif
SendMessage(::hWnd, WM_SETTEXT, 0, ::oGet:Buffer)
::oParent:WantFocus(self, .f.)
...
John Skelton.