home *** CD-ROM | disk | FTP | other *** search
/ BUG 4 / BUGCD1997_05.BIN / aplic / clip4win / clip4win.exe / C4W30E.HUF / C4W30UPD.TXT next >
Text File  |  1996-07-03  |  15KB  |  440 lines

  1.  
  2.         Clip-4-Win Update 
  3.         =================
  4.  
  5.  
  6. Thank you for trying Clip-4-Win.  I hope you like it.
  7.  
  8. This file contains information that has come to light since the
  9. current version of Clip-4-Win was released.  Also some advertising...
  10. I know it's probably boring - but please read all of it!
  11.  
  12. You might like to copy this file after you have installed Clip-4-Win.
  13.  
  14. NOTE: Some parts may not apply to the Evaluation Version of Clip-4-Win,
  15.       as they are about the full product.  Please buy it!
  16.  
  17.  
  18. Installing Clip-4-Win
  19. ---------------------
  20.  
  21. You should use Windows to install Clip-4-Win.  Run d:SETUP.EXE, where
  22. d: is the drive containing Disk 1.  You need about 2MB free on your
  23. Windows partition and about 13MB free to install Clip-4-Win.  Some of
  24. that space is recovered after the install.
  25.  
  26.  
  27. Clip-4-Win Toolkit
  28. ------------------
  29.  
  30. This is a GUI screen designer/editor AND a Windows linker.
  31. You can easily design dialogs, bitmaps, icons, menus, cursors, and
  32. other resources.
  33.  
  34. Note: the time you save designing dialogs (forms) is easily worth
  35. the price!  If you don't have a Windows linker already, get the
  36. Clip-4-Win Toolkit.
  37.  
  38.  
  39. WBrowse(T)
  40. ----------
  41.  
  42. If you'd like a really impressive, high-quality browser that handles
  43. TrueType fonts, bitmaps, colours, optional 3-D effects, etc., then
  44. WBrowse(T) is the product for you.  You use it almost the same as
  45. TBrowse, but it's even more configurable and really takes advantage
  46. of Windows.  
  47.  
  48. A TopClass version is now included with Clip-4-Win!  Various small
  49. samples use it, e.g. SOURCE\MDIWBROW.PRG.  A comprehensive demo is
  50. SOURCE\WBTDEMO.ZIP.
  51.  
  52. A Class(y) version, WBrowseY, is included in WBOTY.ZIP in the Clipper
  53. forum libraries on CompuServe (also included is a Class(y) version of
  54. the tabbed dialog class, oTab).  For any other versions, please see
  55. the contact information in the Windows Help file HLP\WBROWSET.HLP.
  56.  
  57.  
  58. New Debugger
  59. ------------
  60.  
  61. Please contact Skelton Software about the availability of a new
  62. debugger.  Mr Debug-4-Win is now shipping!!
  63.  
  64.  
  65. Address List Manager (ADDMGR)
  66. -----------------------------
  67.  
  68. The QUICK.TXT file is mainly there to help you check you have Clip-4-Win
  69. properly installed, so it doesn't mention the large amounts of sample
  70. source code that is included with Clip-4-Win.  In particular, in
  71. SOURCE\ADDMGR there is a complete sample application.  Because it's a
  72. complete application, it's not small and simple.  So, if you're new to
  73. event-driven programming and Windows, this is probably not the place to
  74. start.  Once you feel comfortable with event-driven programming, expect
  75. to find AddMgr really useful.
  76.  
  77.  
  78. MAKELIBS Problem
  79. ----------------
  80.  
  81. If MAKELIBS fails with "Valid version of source file was not found",
  82. please check that your CLIPPER.LIB actually is the version you think
  83. it is.  A number of people have discovered that one or more Clipper
  84. upgrades have failed, leaving them with a version of CLIPPER.LIB
  85. that's not the same as their compiler (CLIPPER.EXE).  Please ask CA
  86. for help if you think this has happened to you.  You should look at
  87. the timestamps on CLIPPER.EXE and CLIPPER.LIB.  Normally they are the
  88. same.  CLIPPER.LIB's time shows the version (e.g. 5:25 is 5.2e).
  89.  
  90.  
  91. Using OS/2 2.11
  92. ---------------
  93.  
  94. The shipping version of OS/2 2.11 causes a Clipper Internal Error
  95. (5300).  IBM have a fix (called an APAR), PJ13282, for which the
  96. reference code is XR_F039 (non-USA) or XR0F039 (USA).
  97.  
  98.  
  99. Using OS/2 WARP
  100. ---------------
  101.  
  102. The original version of WARP that was shipped needs a patch (available
  103. from IBM).  The fix pack is XRUW005 (XR0W005 for USA).  If you want a
  104. quick fix, the only file you appear to need is WINOS2.COM (size: 31KB).
  105.  
  106. This should not apply to the "fullpack", as IBM say the fix is already
  107. included.
  108.  
  109.  
  110. Training
  111. --------
  112.  
  113. If you're interested in a training course on Windows programming with
  114. Clip-4-Win, please contact Dipl.-Ing. Siegbert Roessler, tel. +49 6222
  115. 9206 52, fax +49 6222 75337.  Warning: only expert tuition available!
  116.  
  117. For on-site hands-on training in England, please contact Skelton
  118. Software directly and we'll put you in touch with someone to help you.
  119.  
  120.  
  121. Consultants / Developers / Trainers
  122. -----------------------------------
  123.  
  124. If you're available "for hire" by others, tell us the relevant details
  125. so we can pass them on to anyone who asks.
  126.  
  127.  
  128. Books
  129. -----
  130.  
  131. Please see the topic "Windows Books" and/or "Object Orientation - Books"
  132. in the HLP or NG file.
  133.  
  134.  
  135. Show Off Your App!
  136. ------------------
  137.  
  138. If you're pleased with your application, please send us a copy we can
  139. show to other Clipper developers.  (Check you include any data your
  140. app needs, and that it's not proprietary.)
  141.  
  142.  
  143. "Bug" in SetCursor()
  144. --------------------
  145.  
  146. As mentioned in changes.txt, trying to control both the Windows cursor
  147. and the Clipper cursor [which Windows calls a caret, see SetCaret()]
  148. is a problem.  Clip-4-Win 2.0 fixed a bug in SetCursor() to make it
  149. more like the Windows function.  That means a cursor only remains set
  150. until the next WM_MOUSEMOVE message.  If you want just a single cursor
  151. in a window, specify it to RegisterClass().  WINSETUP.PRG uses this
  152. function, which is also used by the CURSOR clause of the CREATE WINDOW
  153. command.  Or, see classes such as WWindow or WFrameWindow.  If you
  154. want to change the cursor in a window from time to time, handle the
  155. WM_MOUSEMOVE message, e.g. by using SubClassWindow().  The fix added
  156. in 2.0 is also in 3.0.
  157.  
  158.  
  159. Documentation Error: RegisterClass()
  160. ------------------------------------
  161.  
  162. Some documentation (printed and online) incorrectly states that NIL or
  163. zero (0) have the same effect for various parameters.  Actually, NIL
  164. means "the default" and zero means "none specified here", which often
  165. reduces to "none".  E.g. if hCursor is NIL, IDC_ARROW is used, whereas
  166. zero means that no cursor is shown.
  167.  
  168.  
  169. Easy Way to Use /NOE with LINK.EXE
  170. ----------------------------------
  171. In case you haven't seen this yet:
  172.  
  173. Some versions of MS LINK need /NOE.  The easiest way to specify this
  174. is using a DOS environment variable:
  175.     SET LINK=/NOE
  176. then you don't need to change the RMK (etc.) files supplied with
  177. Clip-4-Win.
  178.  
  179.  
  180. Using 4DOS
  181. ----------
  182. It's possible to really foul things up using aliases.  E.g. You can
  183. alias COPY so that part of MAKELIBS.BAT fails.  For that matter, you
  184. could alias CLIPPER to be FORMAT, I suppose.  Expect trouble if you
  185. do this kind of thing and then run *any* product's BAT or RMK files.
  186. Warning: I have seen 4DOS COPY aliased such that the append command
  187.     COPY /B file1+file2 newfile
  188. was skipped (file1 & file2 existed, newfile did not).  If the reason
  189. really was that the date/time stamps of file1 and file2 caused the
  190. command to be skipped, it would be a bug in 4DOS.
  191.  
  192.  
  193. Bug and Work-Around in TrackPopupMenu()
  194. ---------------------------------------
  195.  
  196. The hWnd parameter is supposed to default, but doesn't.  Specify it!
  197. Also, when TrackPopupMenu() returns the code block has not yet been run
  198. (the menu event is queued).  So, don't call DestroyMenu() until later.
  199. You can call it as soon as you've seen EVENT_NONE from ChkEvent(), or
  200. at any later time that's convenient.
  201.  
  202. To access the Windows API function, use _TrackPopupMenu() or use the
  203. function in SOURCE\WINAPI\MENU.PRG or use the _DLL command in DLL.CH.
  204.  
  205.  
  206. Documentation Error: PrintDlg()
  207. -------------------------------
  208.  
  209. In some editions of the manual, the page for PrintDlg() shows an
  210. example which needs an addition.
  211. Add:
  212.     EndDoc( aPrintDlg[ PD_hDC ] )
  213. immediately before the Call to DeleteDC().
  214.  
  215.  
  216. Documentation Error: WODBC:Skip()
  217. ---------------------------------
  218.  
  219. Contrary to the documentation, this method returns a logical
  220. indicating whether the skip succeeded.  To get the documented
  221. behaviour use:
  222.     CLASS MyODBC INHERIT WODBC
  223.         METHOD Skip(n)    INLINE    super:Skip(n), ::nPos
  224.     ENDCLASS
  225.  
  226.  
  227. Performance of OO Programs
  228. --------------------------
  229.  
  230. On some systems, the first time you start a browse or a dialog
  231. you may experience a delay that doesn't occur when you start it
  232. on subsequent occasions.  This is usually because a number of
  233. classes are being set up on the first use.  If you would prefer
  234. to "hide" this, you can set up the classes during your app's
  235. initialisation.  Just create an object of each class, even if
  236. all you do is to discard it.  If you don't want to invoke the
  237. Init() method for a class, you can cheat and use:
  238.     LOCAL o := MyClass()    // Note: "()" with no params
  239. This is not a good habit, so only do this if you must!
  240.  
  241.  
  242. BListBox(), WBrowseDB() & WBColumnNew() - Where did they go?
  243. ------------------------------------------------------------
  244.  
  245. If you feel you're missing these functions (from WBrowse 2.0),
  246. get the file WBROLD.ZIP from Disk 1.  Change oB:SetTitleBar() to
  247. the new oB:tbXXX properties, and oB:SetFont(hFont) to
  248. oB:ColFont := hFont.
  249.  
  250.  
  251. AXS - Advantage Xbase Server
  252. ----------------------------
  253.  
  254. AXS is now compatible with Clip-4-Win.
  255.  
  256.  
  257. Debugging Output to a window
  258. ----------------------------
  259.  
  260. Using SOURCE\WINAPI\OUTDEBUG.PRG and the $ and $$ commands (see
  261. WINDOWS.CH; they are similar to Clipper's ? and ?? commands), your
  262. application can output tracing information as it runs.  By default,
  263. Windows outputs to AUX:, which is usually COM1: and not what you
  264. want.  In SYSTEM.INI put (without the tabs):
  265.     [debug]
  266.     OutputTo=NUL
  267. The output can still be fetched by e.g. DBWIN.EXE to display in a
  268. window and/or log to a file - check your WINDOWS directory to see
  269. if you have DBWIN.
  270.  
  271.  
  272. BLINKER Bugs and Work Arounds
  273. -----------------------------
  274.  
  275. (a) Some versions of Blinker 3 wrongly give errors about Missing Externals
  276. which are in fact in CLIP4WIN.LIB.  You need to upgrade your Blinker.
  277.  
  278. (b) With Clipper 5.3 and Blinker 3 you must use the following, in this
  279. order, in your linker script:
  280.  
  281.     BLINKER INCREMENTAL OFF
  282.     BLINKER CLIPPER SYMBOL OFF
  283.  
  284.  
  285. Non-OO Tutorial: Simple Data Entry Application
  286. ----------------------------------------------
  287.  
  288. This does not say clearly that SOURCE\USERSRES\ contains the resource
  289. version, which requires a resource compiler to build properly, and
  290. that SOURCE\USERS\ contains the non-resource (dynamic) version.
  291.  
  292. The HLP file, NG file, and manual (section 5.3) all contain the same
  293. information.
  294.  
  295. Also, to build the samples use C4WBUILD <name> (not RMAKE).
  296.  
  297.  
  298. GET Variables After a Dialog Ends
  299. ---------------------------------
  300.  
  301. The intention is that you use the values entered before you end the
  302. dialog.  If you want to keep the values longer, one way is to copy
  303. the variables just before ending the dialog.  An alternative if
  304. you're using WGET objects (e.g. with @ ID ... GET), is to change
  305. source\oo\classes\wget.prg so that method OnDestroy()'s IF is:
  306.  
  307.     IF ::oGet:HasFocus .and. ::oGet:ExitState == GE_NOEXIT
  308.  
  309.  
  310. Missing External "__opx" with 5.3 (e.g. in ODBCBROW)
  311. ----------------------------------------------------
  312.  
  313. Please also link OPX.OBJ (Disk 1), but only with Clipper 5.3.
  314.  
  315.  
  316. Using "@ ID ... ICON"
  317. ---------------------
  318.  
  319. The documentation says to use "RESOURCE <cName>", but should say to
  320. use either "RESOURCE NAME <cName>" or "RESNAME <cName>".  Windows
  321. does not allow a numeric ID in this case.
  322.  
  323.  
  324. Using Class(y) Instead of TopClass
  325. ----------------------------------
  326.  
  327. Files to allow Clip-4-Win's Application Classes to be re-compiled
  328. for use with Class(y) are being tested.  Please contact me if you
  329. are interested in this.  You need at least Class(y) version 2.4a.
  330.  
  331.  
  332. Using the User's Choice of Background Colour
  333. --------------------------------------------
  334.  
  335. The user's colour settings (e.g. in Control Panel) are available
  336. through the COLOR_* values defined in WINDOWS.CH.  Some can be used
  337. extremely easily, e.g. the background colour of a window can be set
  338. when RegisterClass() is called by specifying the hBrush as
  339. COLOR_WINDOW + 1 (you have to add 1 to any of the constants when
  340. used with RegisterClass).  Note: just use COLOR_WINDOW + 1, don't in
  341. this case use GetStockObject().
  342.  
  343. To use the user's background colour in a non-OO application using
  344. CREATE WINDOW, specify the clause BRUSH COLOR_WINDOW + 1.
  345.  
  346. To use the user's background colour with the Application Classes,
  347. e.g. with an SDI frame window:
  348.  
  349.    CLASS MyFrame INHERIT WSDIWindow
  350.       METHOD RegisterClass(hInst, hIcon, hCursor, hBrush, cnMenuId)  ;
  351.       INLINE super:RegisterClass(hInst, hIcon, hCursor,              ;
  352.                                  iif(hBrush == nil, COLOR_WINDOW + 1,;
  353.                                      hBrush), cnMenuId)
  354.    ENDCLASS
  355.  
  356. To use the user's background colour in an application using WinSetup()
  357. you need to edit a copy of SOURCE\WINSETUP.PRG, as the code expects a
  358. stock (pre-defined) brush to be used.
  359.  
  360.  
  361. FillRect() Documentation Error
  362. ------------------------------
  363.  
  364. This function returns nothing useful.
  365.  
  366.  
  367. Bug in WProgressDialog
  368. ----------------------
  369.  
  370. As shipped, the ASSIGNs for Max and Min need " := n" appending!
  371.  
  372.  
  373. UK Post Codes
  374. -------------
  375.  
  376. Please contact me if you want some sample code for AFD (a very affordable
  377. postcode system).
  378.  
  379.  
  380. Documentation Error: CreateWindow()
  381. -----------------------------------
  382.  
  383. If you want no parent window, use zero (0), not NIL.
  384.  
  385.  
  386. Useful New Feature!
  387. -------------------
  388.  
  389. You can use dynamically-created dialogs by supplying an aDlg instead of
  390. a cnId to any of the following:
  391.         DialogBox()
  392.         CreateDialog()    [the 4-param version, for a modeless dialog]
  393.         MDICreateDialog()
  394.  
  395. The aDlg should have been created by CREATE DIALOG or CreateDialog()
  396. and AppendDialog().
  397.  
  398. This feature is mentioned in CHANGES.TXT and in the documentation for
  399. the WDialog class, but is omitted from the documentation for the
  400. functions.  Several samples rely on it, e.g. SOURCE\OO\USERS\USERS.PRG
  401. and SOURCE\OO\USERS\USERSCMD.PRG.
  402.  
  403. It's particularly useful for data-driven applications.
  404.  
  405.  
  406. Documentation Error: CreateCursor() & CreateIcon()
  407. --------------------------------------------------
  408.  
  409. Some of the documentation says these return lSuccess, which would be
  410. silly!  They return the hCursor/hIcon (or zero if it fails).
  411.  
  412.  
  413. WBROWSE Undocumented Feature
  414. ----------------------------
  415.  
  416. Method GetColWidth( nCol ) returns the width of column nCol.  If nCol
  417. is zero, the nub width (WBrowse:NubWidth) is returned.
  418.  
  419.  
  420. WGet:OnKillFocus() Improvement for VALID
  421. ----------------------------------------
  422.  
  423. You can improve the handling of VALIDs by SOURCE\OO\CLASSES\WGET.PRG if
  424. you change:
  425.    if ::Valid
  426.       ::oGet:ExitState = GE_DOWN    // a reasonable guess
  427.       ::oParent:WantFocus(self, .f.)
  428.    ...
  429. to:
  430.    if ::Valid
  431.       if ::oGet:ExitState != nil    // had focus
  432.          ::oGet:ExitState = GE_DOWN    // a reasonable guess
  433.       endif
  434.       SendMessage(::hWnd, WM_SETTEXT, 0, ::oGet:Buffer)
  435.       ::oParent:WantFocus(self, .f.)
  436.    ...
  437.  
  438.  
  439. John Skelton.
  440.