home *** CD-ROM | disk | FTP | other *** search
/ business-86-101-185-173.business.broadband.hu / business-86-101-185-173.business.broadband.hu.zip / business-86-101-185-173.business.broadband.hu / trans / trans_setup.exe / 27 (.txt) < prev    next >
MS Visual FoxPro App  |  2013-09-13  |  4MB  |  76,768 lines

  1. PLATFORM
  2. UNIQUEID
  3. TIMESTAMP
  4. CLASS
  5. CLASSLOC
  6. BASECLASS
  7. OBJNAME
  8. PARENT
  9. PROPERTIES
  10. PROTECTED
  11. METHODS
  12. OBJCODE
  13. RESERVED1
  14. RESERVED2
  15. RESERVED3
  16. RESERVED4
  17. RESERVED5
  18. RESERVED6
  19. RESERVED7
  20. RESERVED8
  21.  COMMENT Class               
  22.  WINDOWS _18P105OTS 956777596^
  23.  COMMENT RESERVED            
  24.  WINDOWS _1DS143BJE1097995440
  25.  COMMENT RESERVED            
  26.  WINDOWS _2FE0JKNKY1117105463
  27.  COMMENT RESERVED            
  28. VERSION =   3.00
  29. pdflistener
  30. registry
  31. hpdf_consts.h
  32. enumregistrykey
  33. enumvalue
  34. Pixels
  35. Provides read and write access to the  System Registry. The Functionality provided is greatly abstracted resulting in using a single method call to set and retrieve values from the registry.
  36. Class
  37. custom
  38. registry
  39. *readregistrystring Lee un Valor String del Registro de Windows
  40. *readregistryint Lee un valor Integer (DWORD)  o Short en el registro de Windows
  41. *writeregistrystring Escribe una valor String en el Registro de Windows
  42. *writeregistryint Escribe una valor num
  43. rico en el Registro de windows
  44. *writeregistrybinary Escribe un valor binario en el registro de Windows
  45. *deleteregistrykey Elimina una llave del registro de Windows
  46. *enumregistrykey Retorna un valor del registro basado en un indice. Permite llamadas desde un ciclo FOR
  47. *enumvalue Retorna el nombre de un valor del registro
  48. *getenumvalues Retorna todos los valores de una llave en un array
  49. *getenumkeys Retorna todas las subclaves de una clave especificada
  50. *examples Ejemplos de Uso de la Clase
  51. ,Height = 19
  52. Width = 35
  53. Name = "registry"
  54. custom
  55. hpdf_consts.h
  56. hpdf_consts.h
  57. nlastpageproccesed
  58. lstarted
  59. npageheight
  60. lunderline
  61. addpdfstandardfonts
  62. findfontfilename
  63. parseunderlinetext
  64. processdynamics
  65. getpicturehandle
  66. Pixels
  67. PDF Listener using HARU Library
  68. Class
  69. fxlistener
  70. pdflistener
  71. reportlistener
  72. pr_reportlistener.vcx
  73. hpdf_consts.h
  74. hpdf_consts.h
  75. pdfasimagelistener
  76. hpdf_consts.h
  77. Pixels
  78. &Listener to Create PDF Files as Images
  79. Class
  80. fxlistener
  81. FkPROCEDURE readregistrystring
  82. ************************************************************************
  83. * Registry :: ReadRegistryString
  84. *********************************
  85. ***  Function: Reads a string value from the registry.
  86. ***      Pass: tnHKEY    -  HKEY value (in CGIServ.h)
  87. ***            tcSubkey  -  The Registry subkey value
  88. ***            tcEntry   -  The actual Key to retrieve
  89. ***    Return: Registry String or .NULL. on error
  90. ************************************************************************
  91. Lparameters tnHKey, tcSubkey, tcEntry
  92. Local lnRegHandle, lnResult, lnSize, lcDataBuffer, tnType
  93. tnHKey=Iif(Type("tnHKey")="N",tnHKey,HKEY_LOCAL_MACHINE)
  94. lnRegHandle=0
  95. *** Open the registry key
  96. lnResult=RegOpenKey(tnHKey,tcSubkey,@lnRegHandle)
  97. If lnResult#ERROR_SUCCESS
  98.     Return .Null.
  99. EndIf
  100. *** Need to define here specifically for Return Type
  101. *** for lpdData parameter or VFP will choke.
  102. *** Here it's STRING.
  103. Declare Integer RegQueryValueEx ;
  104.     IN Win32API As RegQueryString;
  105.     INTEGER nHKey,;
  106.     STRING lpszValueName,;
  107.     INTEGER dwReserved,;
  108.     INTEGER @lpdwType,;
  109.     STRING @lpbData,;
  110.     INTEGER @lpcbData
  111. *** Return buffer to receive value
  112. lcDataBuffer=Space(MAX_INI_BUFFERSIZE)
  113. lnSize=Len(lcDataBuffer)
  114. lnType=0
  115. lnResult=RegQueryString(lnRegHandle,tcEntry,0,@lnType,;
  116.     @lcDataBuffer,@lnSize)
  117. =RegCloseKey(lnRegHandle)
  118. If lnResult#ERROR_SUCCESS
  119.     Return .Null.
  120. EndIf
  121. If lnSize<2
  122.     Return ""
  123. EndIf
  124. *** Return string based on length returned
  125. Return Substr(lcDataBuffer,1,lnSize-1)
  126. ENDPROC
  127. PROCEDURE readregistryint
  128. ************************************************************************
  129. * Registry :: ReadRegistryInt
  130. *********************************
  131. ***  Function: Reads an integer (DWORD) or short (4 byte or less) binary
  132. ***            value from the registry.
  133. ***      Pass: tnHKEY    -  HKEY value (in CGIServ.h)
  134. ***            tcSubkey  -  The Registry subkey value
  135. ***            tcEntry   -  The actual Key to retrieve
  136. ***    Return: Registry String or .NULL. on error
  137. ************************************************************************
  138. Lparameters tnHKey, tcSubkey, tcEntry
  139. Local lnRegHandle, lnResult, lnSize, lcDataBuffer, tnType
  140. tnHKey=Iif(Type("tnHKey")="N",tnHKey,HKEY_LOCAL_MACHINE)
  141. lnRegHandle=0
  142. lnResult=RegOpenKey(tnHKey,tcSubkey,@lnRegHandle)
  143. If lnResult#ERROR_SUCCESS
  144.     Return .Null.
  145. EndIf
  146. *** Need to define here specifically for Return Type
  147. *** for lpdData parameter or VFP will choke.
  148. *** Here's it's an INTEGER
  149. Declare Integer RegQueryValueEx ;
  150.     IN Win32API As RegQueryInt;
  151.     INTEGER nHKey,;
  152.     STRING lpszValueName,;
  153.     INTEGER dwReserved,;
  154.     Integer @lpdwType,;
  155.     INTEGER @lpbData,;
  156.     INTEGER @lpcbData
  157. lnDataBuffer=0
  158. lnSize=4
  159. lnResult=RegQueryInt(lnRegHandle,tcEntry,0,@tnType,;
  160.     @lnDataBuffer,@lnSize)
  161. =RegCloseKey(lnRegHandle)
  162. If lnResult#ERROR_SUCCESS
  163.     Return .Null.
  164. EndIf
  165. Return lnDataBuffer
  166. ENDPROC
  167. PROCEDURE writeregistrystring
  168. ************************************************************************
  169. * Registry :: WriteRegistryString
  170. *********************************
  171. ***  Function: Reads a string value from the registry.
  172. ***      Pass: tnHKEY    -  HKEY value (in CGIServ.h)
  173. ***            tcSubkey  -  The Registry subkey value
  174. ***            tcEntry   -  The actual Key to write to
  175. ***            tcValue   -  Value to write or .NULL. to delete key
  176. ***            tlCreate  -  Create if it doesn't exist
  177. ***    Assume: Use with extreme caution!!! Blowing your registry can
  178. ***            hose your system!
  179. ***    Return: .T. or .NULL. on error
  180. ************************************************************************
  181. Lparameters tnHKey, tcSubkey, tcEntry, tcValue,tlCreate
  182. Local lnRegHandle, lnResult, lnSize, lcDataBuffer, tnType
  183. tnHKey=Iif(Type("tnHKey")="N",tnHKey,HKEY_LOCAL_MACHINE)
  184. lnRegHandle=0
  185. lnResult=RegOpenKey(tnHKey,tcSubkey,@lnRegHandle)
  186. If lnResult#ERROR_SUCCESS
  187.     If !tlCreate
  188.         Return .Null.
  189.     Else
  190.         lnResult=RegCreateKey(tnHKey,tcSubkey,@lnRegHandle)
  191.         If lnResult#ERROR_SUCCESS
  192.             Return .Null.
  193.         EndIf
  194.     EndIf
  195. EndIf
  196. *** Need to define here specifically for Return Type!
  197. *** Here lpbData is STRING.
  198. Declare Integer RegSetValueEx ;
  199.     IN Win32API ;
  200.     INTEGER nHKey,;
  201.     STRING lpszEntry,;
  202.     INTEGER dwReserved,;
  203.     INTEGER fdwType,;
  204.     STRING lpbData,;
  205.     INTEGER cbData
  206. *** Check for .NULL. which means delete key
  207. If !Isnull(tcValue)
  208. *** Nope - write new value
  209.     lnSize=Len(tcValue)
  210.     lnResult=RegSetValueEx(lnRegHandle,tcEntry,0,REG_SZ,;
  211.         tcValue,lnSize)
  212. *** DELETE THE KEY
  213.     lnResult=RegDeleteValue(lnRegHandle,tcEntry)
  214. EndIf
  215. =RegCloseKey(lnRegHandle)
  216. If lnResult#ERROR_SUCCESS
  217.     Return .Null.
  218. EndIf
  219. Return .T.
  220. ENDPROC
  221. PROCEDURE writeregistryint
  222. ************************************************************************
  223. * Registry :: WriteRegistryInt
  224. *********************************
  225. ***  Function: Writes a numeric value to the registry.
  226. ***      Pass: tnHKEY    -  HKEY value (in CGIServ.h)
  227. ***            tcSubkey  -  The Registry subkey value
  228. ***            tcEntry   -  The actual Key to write to
  229. ***            tcValue   -  Value to write or .NULL. to delete key
  230. ***            tlCreate  -  Create if it doesn't exist
  231. ***    Assume: Use with extreme caution!!! Blowing your registry can
  232. ***            hose your system!
  233. ***    Return: .T. or .NULL. on error
  234. ************************************************************************
  235. Lparameters tnHKey, tcSubkey, tcEntry, tnValue,tlCreate
  236. Local lnRegHandle, lnResult, lnSize, lcDataBuffer, tnType
  237. tnHKey=Iif(Type("tnHKey")="N",tnHKey,HKEY_LOCAL_MACHINE)
  238. lnRegHandle=0
  239. lnResult=RegOpenKey(tnHKey,tcSubkey,@lnRegHandle)
  240. If lnResult#ERROR_SUCCESS
  241.     If !tlCreate
  242.         Return .Null.
  243.     Else
  244.         lnResult=RegCreateKey(tnHKey,tcSubkey,@lnRegHandle)
  245.         If lnResult#ERROR_SUCCESS
  246.             Return .Null.
  247.         EndIf
  248.     EndIf
  249. EndIf
  250. *** Need to define here specifically for Return Type!
  251. *** Here lpbData is STRING.
  252. Declare Integer RegSetValueEx ;
  253.     IN Win32API ;
  254.     INTEGER nHKey,;
  255.     STRING lpszEntry,;
  256.     INTEGER dwReserved,;
  257.     INTEGER fdwType,;
  258.     INTEGER @lpbData,;
  259.     INTEGER cbData
  260. *** Check for .NULL. which means delete key
  261. If !Isnull(tnValue)
  262. *** Nope - write new value
  263.     lnSize=4
  264.     lnResult=RegSetValueEx(lnRegHandle,tcEntry,0,REG_DWORD,;
  265.         @tnValue,lnSize)
  266. *** DELETE THE KEY
  267.     lnResult=RegDeleteValue(lnRegHandle,tcEntry)
  268. EndIf
  269. =RegCloseKey(lnRegHandle)
  270. If lnResult#ERROR_SUCCESS
  271.     Return .Null.
  272. EndIf
  273. Return .T.
  274. ENDPROC
  275. PROCEDURE writeregistrybinary
  276. ************************************************************************
  277. * Registry :: WriteRegistryBinary
  278. *********************************
  279. ***  Function: Writes a binary value to the registry.
  280. ***            Binary must be written as character values:
  281. ***            chr(80)+chr(13)  will result in "50 1D"
  282. ***            for example.
  283. ***      Pass: tnHKEY    -  HKEY value (in CGIServ.h)
  284. ***            tcSubkey  -  The Registry subkey value
  285. ***            tcEntry   -  The actual Key to write to
  286. ***            tcValue   -  Value to write or .NULL. to delete key
  287. ***            tnLength  -  you have to supply the length
  288. ***            tlCreate  -  Create if it doesn't exist
  289. ***    Assume: Use with extreme caution!!! Blowing your registry can
  290. ***            hose your system!
  291. ***    Return: .T. or .NULL. on error
  292. ************************************************************************
  293. Lparameters tnHKey, tcSubkey, tcEntry, tcValue,tnLength,tlCreate
  294. Local lnRegHandle, lnResult, lnSize, lcDataBuffer, tnType
  295. tnHKey=Iif(Type("tnHKey")="N",tnHKey,HKEY_LOCAL_MACHINE)
  296. tnLength=Iif(Type("tnLength")="N",tnLength,Len(tcValue))
  297. lnRegHandle=0
  298. lnResult=RegOpenKey(tnHKey,tcSubkey,@lnRegHandle)
  299. If lnResult#ERROR_SUCCESS
  300.     If !tlCreate
  301.         Return .Null.
  302.     Else
  303.         lnResult=RegCreateKey(tnHKey,tcSubkey,@lnRegHandle)
  304.         If lnResult#ERROR_SUCCESS
  305.             Return .Null.
  306.         EndIf
  307.     EndIf
  308. EndIf
  309. *** Need to define here specifically for Return Type!
  310. *** Here lpbData is STRING.
  311. Declare Integer RegSetValueEx ;
  312.     IN Win32API ;
  313.     INTEGER nHKey,;
  314.     STRING lpszEntry,;
  315.     INTEGER dwReserved,;
  316.     INTEGER fdwType,;
  317.     STRING @lpbData,;
  318.     INTEGER cbData
  319. *** Check for .NULL. which means delete key
  320. If !Isnull(tcValue)
  321. *** Nope - write new value
  322.     lnResult=RegSetValueEx(lnRegHandle,tcEntry,0,REG_BINARY,;
  323.         @tcValue,tnLength)
  324. *** DELETE THE KEY
  325.     lnResult=RegDeleteValue(lnRegHandle,tcEntry)
  326. EndIf
  327. =RegCloseKey(lnRegHandle)
  328. If lnResult#ERROR_SUCCESS
  329.     Return .Null.
  330. EndIf
  331. Return .T.
  332. ENDPROC
  333. PROCEDURE deleteregistrykey
  334. ************************************************************************
  335. * Registry :: DeleteRegistryKey
  336. *********************************
  337. ***  Function: Deletes a registry key. Note this does not delete
  338. ***            an entry but the key (ie. a path node).
  339. ***            Use WriteRegistryString/Int with a .NULL. to
  340. ***            Delete an entry.
  341. ***      Pass: tnHKey    -   Registry Root node key
  342. ***            tcSubkey  -   Path to clip
  343. ***    Return: .T. or .NULL.
  344. ************************************************************************
  345. Lparameters tnHKEY,tcSubKey
  346. Local lnResult, lnRegHandle
  347. tnHKEY=Iif(Type("tnHKey")="N",tnHKEY,HKEY_LOCAL_MACHINE)
  348. lnRegHandle=0
  349. lnResult=RegOpenKey(tnHKEY,tcSubKey,@lnRegHandle)
  350. If lnResult#ERROR_SUCCESS
  351. *** Key doesn't exist or can't be opened
  352.     Return .Null.
  353. EndIf
  354. lnResult=RegDeleteKey(tnHKEY,tcSubKey)
  355. =RegCloseKey(lnRegHandle)
  356. If lnResult#ERROR_SUCCESS
  357.     Return .Null.
  358. EndIf
  359. Return .T.
  360. ENDPROC
  361. PROCEDURE enumregistrykey
  362. ************************************************************************
  363. * wwAPI :: EnumRegistryKey
  364. *********************************
  365. ***  Function: Returns a registry key name based on an index
  366. ***            Allows enumeration of keys in a FOR loop. If key
  367. ***            is empty end of list is reached or the key doesn't
  368. ***            exist or is empty.
  369. ***      Pass: tnHKey    -   HKEY_ root key
  370. ***            tcSubkey  -   Subkey string
  371. ***            tnIndex   -   Index of key name to get (0 based)
  372. ***    Return: "" on error - Key name otherwise
  373. ************************************************************************
  374. Lparameters tnHKey, tcSubKey, tnIndex
  375. Local lcSubKey, lcReturn, lnResult, lcDataBuffer
  376. lnRegHandle=0
  377. *** Open the registry key
  378. lnResult=RegOpenKey(tnHKey,tcSubKey,@lnRegHandle)
  379. If lnResult#ERROR_SUCCESS
  380. *** Not Found
  381.     Return .Null.
  382. EndIf
  383. Declare Integer RegEnumKey ;
  384.     IN WIN32API ;
  385.     INTEGER nHKey, ;
  386.     INTEGER nIndex, ;
  387.     STRING @cSubkey, ;
  388.     INTEGER nSize
  389. lcDataBuffer=Space(MAX_INI_BUFFERSIZE)
  390. lnSize=MAX_INI_BUFFERSIZE
  391. lnReturn=RegEnumKey(lnRegHandle, tnIndex, @lcDataBuffer, lnSize)
  392. =RegCloseKey(lnRegHandle)
  393. If lnResult#ERROR_SUCCESS
  394. *** Not Found
  395.     Return .Null.
  396. EndIf
  397. Return Trim(Chrtran(lcDataBuffer,Chr(0),""))
  398. ENDPROC
  399. PROCEDURE enumvalue
  400. ************************************************************************
  401. * Registry :: EnumValue
  402. *********************************
  403. ***  Function: Returns the name of a registry Value key. Note the actual
  404. ***            Value is not returned but just the key. This is done
  405. ***            so you can check the type first and use the appropriate
  406. ***            ReadRegistryX method. The type is returned by ref in the
  407. ***            last parameter.
  408. ***    Assume:
  409. ***      Pass: tnHKey   -   HKEY value
  410. ***            tcSubkey -   The key to enumerate valuekeys for
  411. ***            tnIndex  -   Index of key to work on
  412. ***            @tnType  -   Used to pass back the type of the value
  413. ***    Return: String of ValueKey or .NULL.
  414. ************************************************************************
  415. Lparameters tnHKey, tcSubKey, tnIndex, tnType
  416. Local lcSubKey, lcReturn, lnResult, lcDataBuffer
  417. tnType=Iif(Type("tnType")="N",tnType,0)
  418. lnRegHandle=0
  419. *** Open the registry key
  420. lnResult=RegOpenKey(tnHKey,tcSubKey,@lnRegHandle)
  421. If lnResult#ERROR_SUCCESS
  422. *** Not Found
  423.     Return .Null.
  424. EndIf
  425. *** Need to define here specifically for Return Type
  426. *** for lpdData parameter or VFP will choke.
  427. *** Here it's STRING.
  428. Declare Integer RegEnumValue ;
  429.     IN Win32API ;
  430.     INTEGER nHKey,;
  431.     INTEGER nIndex,;
  432.     STRING @lpszValueName,;
  433.     INTEGER @lpdwSize,;
  434.     INTEGER dwReserved,;
  435.     INTEGER @lpdwType,;
  436.     STRING @lpbData,;
  437.     INTEGER @lpcbData
  438. tcSubKey=Space(MAX_INI_BUFFERSIZE)
  439. tcValue=Space(MAX_INI_BUFFERSIZE)
  440. lnSize=MAX_INI_BUFFERSIZE
  441. lnValSize=MAX_INI_BUFFERSIZE
  442. lnReturn=RegEnumValue(lnRegHandle, tnIndex, @tcSubKey,@lnValSize, 0, @tnType, @tcValue, @lnSize)
  443. =RegCloseKey(lnRegHandle)
  444. If lnResult#ERROR_SUCCESS
  445. *** Not Found
  446.     Return .Null.
  447. EndIf
  448. Return Trim(Chrtran(tcSubKey,Chr(0),""))
  449. ENDPROC
  450. PROCEDURE getenumvalues
  451. ************************************************************************
  452. * Registry :: GetEnumValues
  453. *********************************
  454. ***  Function: Retrieves all Values off a key into an array. The
  455. ***            array is 2D and consists of: Key Name, Value
  456. ***    Assume: Not tested with non-string values
  457. ***      Pass: @taValues     -   Result Array: Pass by Reference
  458. ***            tnHKEY        -   ROOT KEY value
  459. ***            tcSubKey      -   SubKey to work on
  460. ***    Return: Count of Values retrieved
  461. ************************************************************************
  462. Lparameters taValues, tnHKey, tcSubKey
  463. Local x, lcKey
  464. lcKey="x"
  465. Do While !Empty(lcKey) Or Isnull(lcKey)
  466.     lnType=0
  467.     lcKey=This.EnumValue(tnHKey,tcSubKey,x,@lnType)
  468.     If Isnull(lcKey) Or Empty(lcKey)
  469.         Exit
  470.     EndIf
  471.     x=x+1
  472.     Dimension  taValues[x,2]
  473.     Do Case
  474.     Case lnType=REG_SZ Or lnType=REG_BINARY Or lnType=REG_NONE
  475.         lcValue=oRegistry.ReadRegistryString(tnHKey,tcSubKey,lcKey)
  476.         taValues[x,1]=lcKey
  477.         taValues[x,2]=lcValue
  478.     Case lnType=REG_DWORD
  479.         lnValue=oRegistry.ReadRegistryInt(tnHKey,tcSubKey,lcKey)
  480.         taValues[x,1]=lcKey
  481.         taValues[x,2]=lnValue
  482.     Otherwise
  483.         taValues[x,1]=lcKey
  484.         taValues[x,2]=""
  485.     EndCase
  486. EndDo
  487. Return x
  488. ENDPROC
  489. PROCEDURE getenumkeys
  490. ************************************************************************
  491. * Registry :: GetEnumKeys
  492. *********************************
  493. ***  Function: Returns an array of all subkeys for a given key
  494. ***            NOTE: This function does not return Value Keys only
  495. ***                  Tree Keys!!!!
  496. ***      Pass: @taKeys  -   An array that gets filled with key names
  497. ***            tnHKEY   -   Root Key
  498. ***            tcSubkey -   Subkey to enumerate for
  499. ***    Return: Number of keys or 0
  500. ************************************************************************
  501. Lparameters taKeys, tnHKey, tcSubKey
  502. Local x, lcKey
  503. lcKey="x"
  504. Do While !Empty(lcKey) Or Isnull(lcKey)
  505.     lnType=0
  506.     lcKey=This.EnumKey(tnHKey,tcSubKey,x)
  507.     If Isnull(lcKey) Or Empty(lcKey)
  508.         Exit
  509.     EndIf
  510.     x=x+1
  511.     Dimension  taKeys[x]
  512.     taKeys[x]=lcKey
  513. EndDo
  514. Return x
  515. ENDPROC
  516. PROCEDURE examples
  517. *** Create a new Tree
  518. ? oRegistry.WriteRegistryString(HKEY_LOCAL_MACHINE,;
  519.                                "SOFTWARE\West Wind Technologies",;
  520.                                "","",.T.)
  521. *** Now create a a key off the root and add a value                                
  522. ? oRegistry.WriteRegistryString(HKEY_LOCAL_MACHINE,;
  523.                                "SOFTWARE\West Wind Technologies\WebConnection",;
  524.                                "CurrentVersion","1.45",.T.)
  525. *** Add another Value - numeric
  526. ? oRegistry.WriteRegistryInt  (HKEY_LOCAL_MACHINE,;
  527.                                "SOFTWARE\West Wind Technologies\WebConnection",;
  528.                                "Timeout",60,.T.)
  529. *** Now Read the values back
  530. ? oRegistry.ReadRegistryString(HKEY_LOCAL_MACHINE,;
  531.                                "SOFTWARE\West Wind Technologies\WebConnection",;
  532.                                "CurrentVersion")
  533. ? oRegistry.ReadRegistryInt(HKEY_LOCAL_MACHINE,;
  534.                                "SOFTWARE\West Wind Technologies\WebConnection",;
  535.                                "Timeout")
  536. *** Uncomment this code to delete the registry entries again
  537. *-**** Now delete the value entries - Write with a NULL
  538. *-*? oRegistry.WriteRegistryString(HKEY_LOCAL_MACHINE,;
  539. *-*                               "SOFTWARE\West Wind Technologies\WebConection",;
  540. *-*                               "CurrentVersion",.NULL.,.T.)
  541. *-**** And the numeric entry - again with a .NULL.
  542. *-*? oRegistry.WriteRegistryInt  (HKEY_LOCAL_MACHINE,;
  543. *-*                               "SOFTWARE\West Wind Technologies\WebConection",;
  544. *-*                               "Timeout",.NULL.,.T.)
  545. *-**** Get rid of the keys - Web Connection
  546. *-*? oRegistry.DeleteRegistryKey(HKEY_LOCAL_MACHINE,;
  547. *-*                            "SOFTWARE\West Wind Technologies\WebConection")
  548. *-**** Again the West Wind Technologies Key
  549. *-*? oRegistry.DeleteRegistryKey(HKEY_LOCAL_MACHINE,;
  550. *-*                              "SOFTWARE\West Wind Technologies")
  551. *#ENDIF
  552. ENDPROC
  553. PROCEDURE Init
  554. ************************************************************************
  555. * Registry :: Init
  556. *********************************
  557. ***  Function: Loads required DLLs. Note Read and Write DLLs are
  558. ***            not loaded here since they need to be reloaded each
  559. ***            time depending on whether String or Integer values
  560. ***            are required
  561. ************************************************************************
  562. *** Open Registry Key
  563. Declare Integer RegOpenKey ;
  564.     IN Win32API ;
  565.     INTEGER nHKey,;
  566.     STRING cSubKey,;
  567.     INTEGER @nHandle
  568. *** Create a new Key
  569. Declare Integer RegCreateKey ;
  570.     IN Win32API ;
  571.     INTEGER nHKey,;
  572.     STRING cSubKey,;
  573.     INTEGER @nHandle
  574. *** Close an open Key
  575. Declare Integer RegCloseKey ;
  576.     IN Win32API ;
  577.     INTEGER nHKey
  578. *** Delete a key (path)
  579. Declare Integer RegDeleteKey ;
  580.     IN Win32API ;
  581.     INTEGER nHKEY,;
  582.     STRING cSubkey
  583. *** Delete a value from a key
  584. Declare Integer RegDeleteValue ;
  585.     IN Win32API ;
  586.     INTEGER nHKEY,;
  587.     STRING cEntry
  588. ENDPROC
  589. pr_reportlistener.vcx
  590. reportlistener
  591. Xpdfhandle Handle for the Pdf Document To Generate
  592. pageheight Height of The Report Pages
  593. pagewidth Width of Report Pages
  594. encryptdocument Property to Know if the Document Will Be Encrypted
  595. oprogress Property to Store Progress Bar
  596. oregistry
  597. mergedocument
  598. mergedocumentname
  599. opage Property to Store the Page Object
  600. oimagescollection Collection of images files used in the report
  601. cpdfauthor Pdf Author
  602. cuserpassword User Pasword of the Document
  603. lencryptdocument
  604. nencryptionlevel Accepts a Value of 0 Or 1, 0 = Standard 40-bit encryption. 1 = Advanced 128-bit encryption.
  605. npageheight
  606. lcanedit
  607. lcancopy
  608. lcanaddnotes
  609. lcanprint If .T. User will be allowed to print the document, if 0 he won't
  610. lopenviewer If .T. Adobe Reader will be opened
  611. cmasterpassword Master Password of the Pdf Document
  612. ctargetfilename
  613. cpdfcreator Pdf Creator
  614. cpdfkeywords Pdf Keywords
  615. cpdfsubject Pdf Subject
  616. cpdftitle Pdf Title
  617. waitfornextreport
  618. npgcounter
  619. npagemode
  620. lextended
  621. ldefaultmode
  622. npagewidth
  623. lobjtypemode
  624. _stat
  625. lshowerrors
  626. ncurrentpage
  627. lcompletemode
  628. *addblankpage 
  629. *cleardlls 
  630. *encryptpdf Method to Encrypt the Pdf Document
  631. *startpdfdocument Method to start pdf generation
  632. *writepdfinformation Writes Information About the File
  633. *declaredll Method to Start Dll Declarations
  634. *makepdf 
  635. *outputfromdata 
  636. *updateproperties 
  637. *_stat_assign 
  638. *_errorinfo 
  639. pdfasimagelistener
  640. LNWIDTH
  641. LNHEIGHT
  642. LDEFAULTMODE
  643. GETPAGEWIDTH
  644. GETPAGEHEIGHT
  645. NPAGEWIDTH
  646. NPAGEHEIGHT
  647. OPAGE
  648. HPDF_ADDPAGE    
  649. PDFHANDLE
  650. _STAT
  651. HPDF_PAGE_SETWIDTH
  652. HPDF_PAGE_SETHEIGHT
  653. HPDF_New,HPDF_Free
  654. HPDF_SaveToFile
  655. HPDF_SetPageMode
  656. HPDF_AddPage
  657. HPDF_Page_SetWidth
  658. HPDF_Page_SetHeight
  659. HPDF_LoadJpegImageFromFile
  660. HPDF_SetInfoAttr
  661. HPDF_SetPassword
  662. HPDF_SetPermission
  663. HPDF_SetEncryptionMode
  664. HPDF_SetCompressionMode
  665. HPDF_Page_Concat
  666. HPDF_Page_DrawImage
  667. HPDF_LoadPngImageFromFile
  668. HPDF_GetError
  669. HPDF_ResetError
  670. INTEGER
  671. LENCRYPTDOCUMENT
  672. CMASTERPASSWORD
  673. CUSERPASSWORD
  674. _STAT
  675. HPDF_SETPASSWORD    
  676. PDFHANDLE
  677. LNPERMIT    
  678. LCANPRINT
  679. LCANEDIT
  680. LCANCOPY
  681. LCANADDNOTES
  682. HPDF_SETPERMISSION
  683. NENCRIPTIONLEVEL
  684. HPDF_SETENCRYPTIONMODE
  685. Could not load the library LIBHPDF.DLL .C
  686. The process can't continue. Make sure that you have the PDF library available, and that FoxyPreviewer is installed in a folder that has READ/WRITE access.
  687. Error
  688. DECLAREDLL    
  689. PDFHANDLE
  690. HPDF_NEW
  691. CANCELREPORT
  692. _STAT
  693. HPDF_SETCOMPRESSIONMODE
  694. HPDF_SETPAGEMODE    
  695. NPAGEMODE
  696. WRITEPDFINFORMATION
  697. ENCRYPTPDF
  698. ADDBLANKPAGE    
  699. CPDFAUTHOR
  700. _STAT
  701. HPDF_SETINFOATTR    
  702. PDFHANDLE    
  703. CPDFTITLE
  704. CPDFSUBJECT
  705. CPDFKEYWORDS
  706. CPDFCREATOR
  707. HPDF_New
  708. libhpdf.dll
  709. HPDF_Free
  710. libhpdf.dll
  711. HPDF_SaveToFile
  712. libhpdf.dll
  713. HPDF_SetPageMode
  714. libhpdf.dll
  715. HPDF_AddPage
  716. libhpdf.dll
  717. HPDF_Page_SetWidth
  718. libhpdf.dll
  719. HPDF_Page_SetHeight
  720. libhpdf.dll
  721. HPDF_LoadJpegImageFromFile
  722. libhpdf.dll
  723. HPDF_LoadPngImageFromFile
  724. libhpdf.dll
  725. HPDF_SetInfoAttr
  726. libhpdf.dll
  727. HPDF_SetPassword
  728. libhpdf.dll
  729. HPDF_SetPermission
  730. libhpdf.dll
  731. HPDF_SetEncryptionMode
  732. libhpdf.dll
  733. HPDF_SetCompressionMode
  734. libhpdf.dll
  735. HPDF_Page_Concat
  736. libhpdf.dll
  737. HPDF_Page_DrawImage
  738. libhpdf.dll
  739. HPDF_GetError
  740. libhpdf.dll
  741. HPDF_ResetError
  742. libhpdf.dll
  743. HPDF_NEW
  744. LIBHPDF
  745. HPDF_FREE
  746. HPDF_SAVETOFILE
  747. HPDF_SETPAGEMODE
  748. HPDF_ADDPAGE
  749. HPDF_PAGE_SETWIDTH
  750. HPDF_PAGE_SETHEIGHT
  751. HPDF_LOADJPEGIMAGEFROMFILE
  752. HPDF_LOADPNGIMAGEFROMFILE
  753. HPDF_SETINFOATTR
  754. HPDF_SETPASSWORD
  755. HPDF_SETPERMISSION
  756. HPDF_SETENCRYPTIONMODE
  757. HPDF_SETCOMPRESSIONMODE
  758. HPDF_PAGE_CONCAT
  759. HPDF_PAGE_DRAWIMAGE
  760. HPDF_GETERROR
  761. HPDF_RESETERROR&
  762. REPORTLISTENER
  763. Report Listener could not be accessed
  764. %  - 
  765. TEMP5
  766. Internal error loading the page image file from the report.
  767. Error
  768. 100%  - CCC
  769. TOLISTENER
  770. TNWIDTH
  771. TNHEIGHT
  772. LLSHOWTHERM
  773. THIS    
  774. QUIETMODE
  775. LOBJTYPEMODE
  776. LNSECS
  777. DOFOXYTHERM
  778. _GOFP
  779. _INITSTATUSTEXT
  780. LDEFAULTMODE
  781. NPAGEWIDTH
  782. NPAGEHEIGHT
  783. BEFOREREPORT
  784. STARTPDFDOCUMENT
  785. LNPAGECOUNT
  786. LNFILETYPE
  787. LNDEVICETYPE
  788. LNPAGENO
  789. LCFILE
  790. LNHANDLE    
  791. LNPERCENT
  792. LNLASTPERCENT
  793. LNDELAY    
  794. PAGETOTAL
  795. _SECONDSTEXT
  796. _RUNSTATUSTEXT
  797. NCURRENTPAGE
  798. ADDBLANKPAGE
  799. OUTPUTPAGE
  800. HPDF_LOADPNGIMAGEFROMFILE    
  801. PDFHANDLE
  802. _STAT
  803. HPDF_PAGE_DRAWIMAGE
  804. OPAGE
  805. OIMAGESCOLLECTION
  806. AFTERREPORT
  807. UNLOADREPORT]
  808. LOBJTYPEMODE
  809. OFOXYPREVIEWER
  810. COMMANDCLAUSES
  811. LOPENVIEWER
  812. PREVIEW
  813. TOFILE
  814. CTARGETFILENAME    
  815. CDESTFILE
  816. LCDESTFILE
  817. COUTPUTPATH
  818. LCFILE
  819. _REPORTLISTENER
  820. CANCELREPORT    
  821. QUIETMODE
  822. LQUIETMODE    
  823. LCANPRINT
  824. LPDFCANPRINT
  825. LCANEDIT
  826. LPDFCANEDIT
  827. LCANCOPY
  828. LPDFCANCOPY
  829. LCANADDNOTES
  830. LPDFCANADDNOTES
  831. LENCRYPTDOCUMENT
  832. LPDFENCRYPTDOCUMENT
  833. CMASTERPASSWORD
  834. CPDFMASTERPASSWORD
  835. CUSERPASSWORD
  836. CPDFUSERPASSWORD
  837. CPDFAUTHOR    
  838. CPDFTITLE
  839. CPDFSUBJECT
  840. CPDFKEYWORDS
  841. CPDFCREATOR
  842. LNPGMODE
  843. NPDFPAGEMODE    
  844. NPAGEMODE
  845. LDEFAULTMODEM
  846. PDFx error in CC
  847. Error code : 
  848. Description: 
  849. Page: 
  850. Press 'Retry' to debug the application.
  851. Error
  852. PDFx error in CC
  853. Error code  : 
  854. Description : 
  855. Object: 
  856. Error
  857. TNSTATUS
  858. _STAT
  859. LNHPDF_ERR
  860. LCHEX
  861. HPDF_GETERROR    
  862. PDFHANDLE
  863. HPDF_RESETERROR
  864. LSHOWERRORS    
  865. STARTMODE
  866. LNOPTION
  867. _ERRORINFO
  868. NCURRENTPAGE
  869. COBJECTTORENDERC
  870. HPDF_ARRAY_COUNT_ERR                      
  871. HPDF_ARRAY_ITEM_NOT_FOUND                 
  872. HPDF_ARRAY_ITEM_UNEXPECTED_TYPE           
  873. HPDF_BINARY_LENGTH_ERR                    
  874. HPDF_CANNOT_GET_PALLET                    
  875. HPDF_DICT_COUNT_ERR                       
  876. HPDF_DICT_ITEM_NOT_FOUND                  
  877. HPDF_DICT_ITEM_UNEXPECTED_TYPE            
  878. HPDF_DICT_STREAM_LENGTH_NOT_FOUND         
  879. HPDF_DOC_ENCRYPTDICT_NOT_FOUND            
  880. HPDF_DOC_INVALID_OBJECT                   
  881. HPDF_DUPLICATE_REGISTRATION               
  882. HPDF_EXCEED_JWW_CODE_NUM_LIMIT            
  883. HPDF_ENCRYPT_INVALID_PASSWORD             
  884. HPDF_ERR_UNKNOWN_CLASS                    
  885. HPDF_EXCEED_GSTATE_LIMIT                  
  886. HPDF_FAILD_TO_ALLOC_MEM                   
  887. HPDF_FILE_IO_ERROR                        
  888. HPDF_FILE_OPEN_ERROR                      
  889. HPDF_FONT_EXISTS                          
  890. HPDF_FONT_INVALID_WIDTHS_TABLE            
  891. HPDF_INVALID_AFM_HEADER                   
  892. HPDF_INVALID_ANNOTATION                   
  893. HPDF_INVALID_BIT_PER_COMPONENT            
  894. HPDF_INVALID_CHAR_MATRICS_DATA            
  895. HPDF_INVALID_COLOR_SPACE                  
  896. HPDF_INVALID_COMPRESSION_MODE             
  897. HPDF_INVALID_DATE_TIME                    
  898. HPDF_INVALID_DESTINATION                  
  899. HPDF_INVALID_DOCUMENT                     
  900. HPDF_INVALID_DOCUMENT_STATE               
  901. HPDF_INVALID_ENCODER                      
  902. HPDF_INVALID_ENCODER_TYPE                 
  903. HPDF_INVALID_ENCODING_NAME                
  904. HPDF_INVALID_ENCRYPT_KEY_LEN              
  905. HPDF_INVALID_FONTDEF_DATA                 
  906. HPDF_INVALID_FONTDEF_TYPE                 
  907. HPDF_INVALID_FONT_NAME                    
  908. HPDF_INVALID_IMAGE                        
  909. HPDF_INVALID_JPEG_DATA                    
  910. HPDF_INVALID_N_DATA                       
  911. HPDF_INVALID_OBJECT                       
  912. HPDF_INVALID_OBJ_ID                       
  913. HPDF_INVALID_OPERATION                    
  914. HPDF_INVALID_OUTLINE                      
  915. HPDF_INVALID_PAGE                         
  916. HPDF_INVALID_PAGES                        
  917. HPDF_INVALID_PARAMETER                    
  918. HPDF_INVALID_PNG_IMAGE                    
  919. HPDF_INVALID_STREAM                       
  920. HPDF_MISSING_FILE_NAME_ENTRY              
  921. HPDF_INVALID_TTC_FILE                     
  922. HPDF_INVALID_TTC_INDEX                    
  923. HPDF_INVALID_WX_DATA                      
  924. HPDF_ITEM_NOT_FOUND                       
  925. HPDF_LIBPNG_ERROR                         
  926. HPDF_NAME_INVALID_VALUE                   
  927. HPDF_NAME_OUT_OF_RANGE                    
  928. HPDF_PAGE_INVALID_PARAM_COUNT             
  929. HPDF_PAGES_MISSING_KIDS_ENTRY             
  930. HPDF_PAGE_CANNOT_FIND_OBJECT              
  931. HPDF_PAGE_CANNOT_GET_ROOT_PAGES           
  932. HPDF_PAGE_CANNOT_RESTORE_GSTATE           
  933. HPDF_PAGE_CANNOT_SET_PARENT               
  934. HPDF_PAGE_FONT_NOT_FOUND                  
  935. HPDF_PAGE_INVALID_FONT                    
  936. HPDF_PAGE_INVALID_FONT_SIZE               
  937. HPDF_PAGE_INVALID_GMODE                   
  938. HPDF_PAGE_INVALID_INDEX                   
  939. HPDF_PAGE_INVALID_ROTATE_VALUE            
  940. HPDF_PAGE_INVALID_SIZE                    
  941. HPDF_PAGE_INVALID_XOBJECT                 
  942. HPDF_PAGE_OUT_OF_RANGE                    
  943. HPDF_REAL_OUT_OF_RANGE                    
  944. HPDF_STREAM_EOF                           
  945. HPDF_STREAM_READLN_CONTINUE               
  946. HPDF_STRING_OUT_OF_RANGE                  
  947. HPDF_THIS_FUNC_WAS_SKIPPED                
  948. HPDF_TTF_CANNOT_EMBEDDING_FONT            
  949. HPDF_TTF_INVALID_CMAP                     
  950. HPDF_TTF_INVALID_FOMAT                    
  951. HPDF_TTF_MISSING_TABLE                    
  952. HPDF_UNSUPPORTED_FONT_TYPE                
  953. HPDF_UNSUPPORTED_FUNC                     
  954. HPDF_UNSUPPORTED_JPEG_FORMAT              
  955. HPDF_UNSUPPORTED_TYPE1_FONT               
  956. HPDF_XREF_COUNT_ERR                       
  957. HPDF_ZLIB_ERROR                           
  958. HPDF_INVALID_PAGE_INDEX                   
  959. HPDF_INVALID_URI                          
  960. HPDF_PAGE_LAYOUT_OUT_OF_RANGE             
  961. HPDF_PAGE_MODE_OUT_OF_RANGE               
  962. HPDF_PAGE_NUM_STYLE_OUT_OF_RANGE          
  963. HPDF_ANNOT_INVALID_ICON                   
  964. HPDF_ANNOT_INVALID_BORDER_STYLE           
  965. HPDF_PAGE_INVALID_DIRECTION               
  966. HPDF_INVALID_FONT                         
  967. HPDF_PAGE_INSUFFICIENT_SPACE              
  968. HPDF_PAGE_INVALID_DISPLAY_TIME            
  969. HPDF_PAGE_INVALID_TRANSITION_TIME         
  970. HPDF_INVALID_PAGE_SLIDESHOW_TYPE          
  971. HPDF_EXT_GSTATE_OUT_OF_RANGE              
  972. HPDF_INVALID_EXT_GSTATE                   
  973. HPDF_EXT_GSTATE_READ_ONLY                 
  974. Unknown Error
  975. TNSTATUS
  976. THIS    
  977. CLEARDLLSn
  978. INTEGER
  979. STRING
  980. TEMP5
  981. NPAGENO
  982. EDEVICE
  983. NDEVICETYPE
  984. NLEFT
  985. NWIDTH
  986. NHEIGHT    
  987. NCLIPLEFT
  988. NCLIPTOP
  989. NCLIPWIDTH
  990. NCLIPHEIGHT
  991. LNHANDLE
  992. LCFILE
  993. STARTPDFDOCUMENT
  994. ADDBLANKPAGE
  995. OUTPUTPAGE
  996. HPDF_LOADPNGIMAGEFROMFILE    
  997. PDFHANDLE
  998. _STAT
  999. HPDF_PAGE_DRAWIMAGE
  1000. OPAGE
  1001. GETPAGEWIDTH
  1002. GETPAGEHEIGHT
  1003. OIMAGESCOLLECTION
  1004. LDEFAULTMODE
  1005. LOBJTYPEMODE
  1006. OUTPUTFROMDATA
  1007. GETPAGEWIDTH
  1008. GETPAGEHEIGHT
  1009. WAITFORNEXTREPORT
  1010. OFOXYPREVIEWER    
  1011. CDESTFILE
  1012. CTARGETFILENAME
  1013. LCFILE
  1014. _STAT    
  1015. HPDF_FREE    
  1016. PDFHANDLE
  1017. HPDF_SAVETOFILE
  1018. LOPENVIEWER    
  1019. SHELLEXEC
  1020. NPGCOUNTER
  1021. STRING
  1022. LDEFAULTMODE
  1023. WAITFORNEXTREPORT
  1024. OIMAGESCOLLECTION
  1025. LCITEM
  1026. LOEXC 
  1027. Collection
  1028. OIMAGESCOLLECTION
  1029. UPDATEPROPERTIES
  1030. addblankpage,
  1031. cleardlls
  1032. encryptpdf0
  1033. startpdfdocument
  1034. writepdfinformation
  1035. declaredll@    
  1036. outputfromdata
  1037. updateproperties
  1038. _stat_assignL
  1039. _errorinfo?
  1040. Destroy
  1041. OutputPage
  1042. AfterReport];
  1043. UnloadReport
  1044. BeforeReport
  1045. LoadReport!?
  1046. tnHKeyb
  1047. RegQueryValueEx
  1048. Win32APIQ
  1049. RegQueryString
  1050. TNHKEY
  1051. TCSUBKEY
  1052. TCENTRY
  1053. LNREGHANDLE
  1054. LNRESULT
  1055. LNSIZE
  1056. LCDATABUFFER
  1057. TNTYPE
  1058. REGOPENKEY
  1059. REGQUERYVALUEEX
  1060. WIN32API
  1061. REGQUERYSTRING
  1062. LNTYPE
  1063. REGCLOSEKEYI
  1064. tnHKeyb
  1065. RegQueryValueEx
  1066. Win32APIQ
  1067. RegQueryInt
  1068. TNHKEY
  1069. TCSUBKEY
  1070. TCENTRY
  1071. LNREGHANDLE
  1072. LNRESULT
  1073. LNSIZE
  1074. LCDATABUFFER
  1075. TNTYPE
  1076. REGOPENKEY
  1077. REGQUERYVALUEEX
  1078. WIN32API
  1079. REGQUERYINT
  1080. LNDATABUFFER
  1081. REGCLOSEKEY
  1082. tnHKeyb
  1083. RegSetValueEx
  1084. Win32API
  1085. TNHKEY
  1086. TCSUBKEY
  1087. TCENTRY
  1088. TCVALUE
  1089. TLCREATE
  1090. LNREGHANDLE
  1091. LNRESULT
  1092. LNSIZE
  1093. LCDATABUFFER
  1094. TNTYPE
  1095. REGOPENKEY
  1096. REGCREATEKEY
  1097. REGSETVALUEEX
  1098. WIN32API
  1099. REGDELETEVALUE
  1100. REGCLOSEKEY
  1101. tnHKeyb
  1102. RegSetValueEx
  1103. Win32API
  1104. TNHKEY
  1105. TCSUBKEY
  1106. TCENTRY
  1107. TNVALUE
  1108. TLCREATE
  1109. LNREGHANDLE
  1110. LNRESULT
  1111. LNSIZE
  1112. LCDATABUFFER
  1113. TNTYPE
  1114. REGOPENKEY
  1115. REGCREATEKEY
  1116. REGSETVALUEEX
  1117. WIN32API
  1118. REGDELETEVALUE
  1119. REGCLOSEKEY
  1120. tnHKeyb
  1121. tnLengthb
  1122. RegSetValueEx
  1123. Win32API
  1124. TNHKEY
  1125. TCSUBKEY
  1126. TCENTRY
  1127. TCVALUE
  1128. TNLENGTH
  1129. TLCREATE
  1130. LNREGHANDLE
  1131. LNRESULT
  1132. LNSIZE
  1133. LCDATABUFFER
  1134. TNTYPE
  1135. REGOPENKEY
  1136. REGCREATEKEY
  1137. REGSETVALUEEX
  1138. WIN32API
  1139. REGDELETEVALUE
  1140. REGCLOSEKEY
  1141. tnHKeyb
  1142. TNHKEY
  1143. TCSUBKEY
  1144. LNRESULT
  1145. LNREGHANDLE
  1146. REGOPENKEY
  1147. REGDELETEKEY
  1148. REGCLOSEKEY    
  1149. RegEnumKey
  1150. WIN32API
  1151. TNHKEY
  1152. TCSUBKEY
  1153. TNINDEX
  1154. LCSUBKEY
  1155. LCRETURN
  1156. LNRESULT
  1157. LCDATABUFFER
  1158. LNREGHANDLE
  1159. REGOPENKEY
  1160. REGENUMKEY
  1161. WIN32API
  1162. LNSIZE
  1163. LNRETURN
  1164. REGCLOSEKEYp
  1165. tnTypeb
  1166. RegEnumValue
  1167. Win32API
  1168. TNHKEY
  1169. TCSUBKEY
  1170. TNINDEX
  1171. TNTYPE
  1172. LCSUBKEY
  1173. LCRETURN
  1174. LNRESULT
  1175. LCDATABUFFER
  1176. LNREGHANDLE
  1177. REGOPENKEY
  1178. REGENUMVALUE
  1179. WIN32API
  1180. TCVALUE
  1181. LNSIZE    
  1182. LNVALSIZE
  1183. LNRETURN
  1184. REGCLOSEKEY
  1185. TAVALUES
  1186. TNHKEY
  1187. TCSUBKEY
  1188. LCKEY
  1189. LNTYPE
  1190. THIS    
  1191. ENUMVALUE
  1192. LCVALUE    
  1193. OREGISTRY
  1194. READREGISTRYSTRING
  1195. LNVALUE
  1196. READREGISTRYINT
  1197. TAKEYS
  1198. TNHKEY
  1199. TCSUBKEY
  1200. LCKEY
  1201. LNTYPE
  1202. ENUMKEY
  1203. SOFTWARE\West Wind Technologies
  1204. SOFTWARE\West Wind Technologies\WebConnection
  1205. CurrentVersion
  1206. 1.45a
  1207. SOFTWARE\West Wind Technologies\WebConnection
  1208. Timeout
  1209. SOFTWARE\West Wind Technologies\WebConnection
  1210. CurrentVersion
  1211. SOFTWARE\West Wind Technologies\WebConnection
  1212. Timeout
  1213. OREGISTRY
  1214. WRITEREGISTRYSTRING
  1215. WRITEREGISTRYINT
  1216. READREGISTRYSTRING
  1217. READREGISTRYINT
  1218. RegOpenKey
  1219. Win32API
  1220. RegCreateKey
  1221. Win32API
  1222. RegCloseKey
  1223. Win32API
  1224. RegDeleteKey
  1225. Win32API
  1226. RegDeleteValue
  1227. Win32API
  1228. REGOPENKEY
  1229. WIN32API
  1230. REGCREATEKEY
  1231. REGCLOSEKEY
  1232. REGDELETEKEY
  1233. REGDELETEVALUE
  1234. readregistrystring,
  1235. readregistryintT
  1236. writeregistrystring@
  1237. writeregistryint
  1238. writeregistrybinary
  1239. deleteregistrykey
  1240. enumregistrykey
  1241. enumvalueg
  1242. getenumvalues
  1243. getenumkeys
  1244. examples
  1245. Height = 23
  1246. Width = 23
  1247. ListenerType = -1
  1248. FRXDataSession = -1
  1249. SendGDIPlusImage = 1
  1250. pdfhandle = 0
  1251. nlastpageproccesed = 0
  1252. ndivisionfactor = 0
  1253. cpdfauthor = 
  1254. cpdftitle = 
  1255. cpdfsubject = 
  1256. cpdfkeywords = 
  1257. cpdfcreator = 
  1258. lcanprint = .T.
  1259. lcancopy = .T.
  1260. lcanedit = .F.
  1261. lcanaddnotes = .F.
  1262. lencryptdocument = .F.
  1263. cuserpassword = 
  1264. cmasterpassword = 
  1265. nencriptionlevel = 5
  1266. opage = .NULL.
  1267. lstarted = .F.
  1268. ctargetfilename = 
  1269. lopenviewer = .F.
  1270. ofonts = .NULL.
  1271. oregistry = .NULL.
  1272. npageheight = 0
  1273. nspacesfortab = 4
  1274. lembedfont = .T.
  1275. ccodepage = CP1252
  1276. lunderline = .F.
  1277. ctextstyle = 
  1278. odynamics = .NULL.
  1279. waitfornextreport = .F.
  1280. npgcounter = 0
  1281. nglobalpgcounter = 0
  1282. otempimagescollection = .NULL.
  1283. opicturehandles = .NULL.
  1284. _lsetconsole = .F.
  1285. _lsettalk = .F.
  1286. npagemode = 0
  1287. lextended = .T.
  1288. ldefaultmode = .T.
  1289. npagewidth = 0
  1290. _cwinfolder = 
  1291. _ctempfolder = 
  1292. _stat = .F.
  1293. lshowerrors = .F.
  1294. csymbolfontslist = 
  1295. cobjecttorender = 
  1296. _stat2 = 0
  1297. ncurrentpage = 0
  1298. oactivelistener = .NULL.
  1299. cdefaultfont = Helvetica
  1300. lobjtypemode = .F.
  1301. _lschinese = .F.
  1302. lrighttoleft = .F.
  1303. lreplacefonts = .T.
  1304. _ltchinese = .F.
  1305. _lkorean = .F.
  1306. _ljapanese = .F.
  1307. nwmwidthratio = 0
  1308. nwmheightratio = 0
  1309. nwmwidth = 0
  1310. nwmheight = 0
  1311. cwmpicture = 
  1312. hwmpdfhandle = 0
  1313. _cwmpicture = 
  1314. _nwmy = 0
  1315. _nwmx = 0
  1316. _nwmw = 0
  1317. _nwmh = 0
  1318. lusingwatermark = .F.
  1319. nsystemlangid = 0
  1320. lhasuserfld = .F.
  1321. nlineheightratio = 1
  1322. lcompletemode = .T.
  1323. _memberdata = .T.
  1324. Name = "pdflistener"
  1325. PROCEDURE addblankpage
  1326. WITH This
  1327.     LOCAL lnWidth, lnHeight
  1328.     IF This.lDefaultMode 
  1329.         lnWidth  = .GetPageWidth()
  1330.         lnHeight = .GetPageHeight()
  1331.     ELSE
  1332.         lnWidth  = This.nPageWidth
  1333.         lnHeight = This.nPageHeight
  1334.     ENDIF
  1335.     .oPage=HPDF_AddPage(.pdfHandle) &&Add a New Page
  1336.     This._Stat = HPDF_Page_SetWidth(.oPage, (lnWidth/960)*72) &&Establish the Width of the page
  1337.     This._Stat = HPDF_Page_SetHeight(.oPage, (lnHeight/960)*72) &&Establish the Height of the page
  1338. ENDWITH
  1339. ENDPROC
  1340. PROCEDURE cleardlls
  1341. Clear Dlls "HPDF_New,HPDF_Free","HPDF_SaveToFile","HPDF_SetPageMode","HPDF_AddPage","HPDF_Page_SetWidth","HPDF_Page_SetHeight",;
  1342. "HPDF_LoadJpegImageFromFile","HPDF_SetInfoAttr","HPDF_SetPassword","HPDF_SetPermission","HPDF_SetEncryptionMode",;
  1343. "HPDF_SetCompressionMode","HPDF_Page_Concat","HPDF_Page_DrawImage","HPDF_LoadPngImageFromFile", "HPDF_GetError", "HPDF_ResetError"
  1344. ENDPROC
  1345. PROCEDURE encryptpdf
  1346. With This
  1347.     If .lEncryptDocument Then &&Protect the document with password
  1348.         If !Empty(.cMasterPassword) Then
  1349.             If .cMasterPassword!=.cUserPassword Then &&User Password and Master Password can't be the same
  1350.                 This._Stat = HPDF_SetPassword(.pdfHandle, .cMasterPassword, .cUserPassword)
  1351.                 Local lnPermit As Integer
  1352.                 lnPermit=0
  1353.                 &&Establish PDF files permissions
  1354.                 If .lCanPrint Then
  1355.                     lnPermit = lnPermit + HPDF_ENABLE_PRINT
  1356.                 EndIf
  1357.                 If .lCanEdit Then
  1358.                     lnPermit = lnPermit + HPDF_ENABLE_EDIT_ALL
  1359.                 EndIf
  1360.                 If .lCanCopy Then
  1361.                     lnPermit = lnPermit + HPDF_ENABLE_COPY
  1362.                 EndIf
  1363.                 If .lCanAddNotes Then
  1364.                     lnPermit = lnPermit + HPDF_ENABLE_EDIT
  1365.                 EndIf
  1366.                 This._Stat = HPDF_SetPermission(This.pdfHandle, lnPermit)
  1367.                 If .nEncriptionLevel!=5 Then
  1368.                     This._Stat = HPDF_SetEncryptionMode(.pdfHandle, HPDF_ENCRYPT_R3, .nEncriptionLevel)
  1369.                 Else
  1370.                     This._Stat = HPDF_SetEncryptionMode(.pdfHandle, HPDF_ENCRYPT_R2, .nEncriptionLevel)
  1371.                 EndIf
  1372.             EndIf
  1373.         EndIf
  1374.     EndIf
  1375. EndWith
  1376. ENDPROC
  1377. PROCEDURE startpdfdocument
  1378. This.DeclareDll()
  1379. With This
  1380.     .pdfHandle=HPDF_New(0, 0) &&Create a New Document
  1381.     IF .pdfHandle = 0
  1382.         * Check if the library HPDF.DLL is in the disk
  1383.         MESSAGEBOX("Could not load the library LIBHPDF.DLL ." + CHR(13) + ;
  1384.             "The process can't continue. Make sure that you have the PDF library available, and that FoxyPreviewer is installed in a folder that has READ/WRITE access.", 16, "Error")
  1385.         This.CancelReport()
  1386.         RETURN .F.
  1387.     ENDIF
  1388.     This._Stat = HPDF_SetCompressionMode(.pdfHandle, HPDF_COMP_ALL) &&Set Document Compression Method
  1389.     * KHentschel 2010-06-15
  1390.     * Added "nPageMode" property: how Document should be displayed HPDF_PAGE_MODE_USE_OUTLINE
  1391.     * HPDF_SetPageMode(.pdfHandle, HPDF_PAGE_MODE_USE_OUTLINE) &&Set the how Document should be displayed
  1392.     * Available possibilities:
  1393.     * #define    HPDF_PAGE_MODE_USE_NONE        0
  1394.     * #define    HPDF_PAGE_MODE_USE_OUTLINE        1
  1395.     * #define    HPDF_PAGE_MODE_USE_THUMBS        2
  1396.     * #define    HPDF_PAGE_MODE_FULL_SCREEN        3
  1397.     This._Stat = HPDF_SetPageMode(.pdfHandle, .nPageMode)
  1398.     .WritePdfInformation() &&Stablish PDF File Information
  1399.     .EncryptPdf()
  1400.     .AddBlankPage()
  1401. EndWith
  1402. ENDPROC
  1403. PROCEDURE writepdfinformation
  1404. With This
  1405.     If !Empty(.cPdfAuthor) Then
  1406.         This._Stat = HPDF_SetInfoAttr(.pdfHandle, HPDF_INFO_AUTHOR, .cPdfAuthor)
  1407.     EndIf
  1408.     If !Empty(.cPdfTitle) Then
  1409.         This._Stat = HPDF_SetInfoAttr(.pdfHandle, HPDF_INFO_TITLE, .cPdfTitle)
  1410.     EndIf
  1411.     If !Empty(.cPdfSubject) Then
  1412.         This._Stat = HPDF_SetInfoAttr(.pdfHandle, HPDF_INFO_SUBJECT, .cPdfSubject)
  1413.     EndIf
  1414.     If !Empty(.cPdfKeyWords) Then
  1415.         This._Stat = HPDF_SetInfoAttr(.pdfHandle, HPDF_INFO_KEYWORDS, .cPdfKeywords)
  1416.     EndIf
  1417.     If !Empty(.cPdfCreator) Then
  1418.         This._Stat = HPDF_SetInfoAttr(.pdfHandle, HPDF_INFO_CREATOR, .cPdfCreator)
  1419.     EndIf
  1420. EndWith
  1421. ENDPROC
  1422. PROCEDURE declaredll
  1423. *!*    * Check if the library HPDF.DLL is in the disk
  1424. *!*    LOCAL lcPDFFile
  1425. *!*    lcPDFFile = "libhpdf.dll"
  1426. *!*    IF EMPTY(SYS(2000,lcPDFFile))
  1427. *!*        MESSAGEBOX("Could not locate the library LIBHPDF.DLL ." + CHR(13) + ;
  1428. *!*                "The process can't continue. Make sure that you have the PDF library available, and that FoxyPreviewer is installed in a folder that has READ/WRITE access.", 16, "Error")
  1429. *!*        RETURN .F.
  1430. *!*    ENDIF
  1431. Declare Integer HPDF_New In libhpdf.dll Integer, Integer
  1432. Declare Integer HPDF_Free In libhpdf.dll Integer
  1433. Declare Integer HPDF_SaveToFile In libhpdf.dll Integer, String
  1434. Declare Integer HPDF_SetPageMode In libhpdf.dll Integer, Integer
  1435. Declare Integer HPDF_AddPage In libhpdf.dll Integer
  1436. Declare Integer HPDF_Page_SetWidth In libhpdf.dll Integer, Single
  1437. Declare Integer HPDF_Page_SetHeight In libhpdf.dll Integer, Single
  1438. Declare Integer HPDF_LoadJpegImageFromFile In libhpdf.dll Integer, String
  1439. Declare Integer HPDF_LoadPngImageFromFile In libhpdf.dll Integer, String
  1440. Declare Integer HPDF_SetInfoAttr In  libhpdf.dll Integer, Integer, String
  1441. Declare Integer HPDF_SetPassword In  libhpdf.dll Integer, String, String
  1442. Declare Integer HPDF_SetPermission In libhpdf.dll Integer, Integer
  1443. Declare Integer HPDF_SetEncryptionMode In libhpdf.dll Integer, Integer, Integer
  1444. Declare Integer HPDF_SetCompressionMode In libhpdf.dll Integer, Integer
  1445. Declare Integer HPDF_Page_Concat In libhpdf.dll Integer, Single, Single, Single, Single, Single, Single
  1446. Declare Integer HPDF_Page_DrawImage In libhpdf.dll Integer, Integer, Single, Single, Single, Single
  1447. Declare Integer HPDF_GetError In libhpdf.dll Integer
  1448. Declare Integer HPDF_ResetError In libhpdf.dll Integer
  1449. ENDPROC
  1450. PROCEDURE outputfromdata
  1451. LPARAMETERS toListener as ReportListener, tnWidth, tnHeight 
  1452. LOCAL llShowTherm
  1453. llShowTherm = (This.QuietMode = .F.) AND (This.lObjTypeMode = .F.)
  1454. * =DoFoxyTherm(90, "Texto label", "Titulo")
  1455. * =DoFoxyTherm(-1, "Teste2", "Titulo") && Continuo
  1456. * =DoFoxyTherm() && Desliga
  1457. IF llShowTherm
  1458.     LOCAL lnSecs
  1459.     lnSecs = SECONDS()
  1460.     *!*    ._InitStatusText    = .GetLoc("INITSTATUS") + SPACE(1)
  1461.     *!*    ._RunStatusText     = .GetLoc("RUNSTATUS")  + SPACE(1)
  1462.     *!*    ._SecondsText       = .GetLoc("SECONDS")    + SPACE(1)
  1463.     =DoFoxyTherm(1, "0%", _goFP._InitStatusText)
  1464. ENDIF 
  1465. #DEFINE OutputJPEG     102
  1466. #DEFINE OutputPNG     104
  1467. This.lDefaultMode = .F.
  1468. This.nPageWidth   = tnWidth
  1469. This.nPageHeight  = tnHeight
  1470. IF VARTYPE(toListener) <> "O"
  1471.     ERROR "Report Listener could not be accessed"
  1472.     RETURN .F.
  1473. ENDIF
  1474. IF NOT This.lObjTypeMode 
  1475.     This.BeforeReport()
  1476. ENDIF 
  1477. This.StartPdfDocument()
  1478. LOCAL lnPageCount, lnFileType, lnDeviceType, lnPageNo, lcFile, lnDeviceType, lnHandle, lnPercent, lnLastPercent, lnDelay
  1479. lnDeviceType  = OutputPNG
  1480. lnPageCount   = toListener.PageTotal && _goFP.nPageTotal && toListener.PageTotal
  1481. lnLastPercent = 0
  1482. lnDelay       = 5
  1483. FOR lnPageNo = 1 TO lnPageCount
  1484.     IF llShowTherm
  1485.         lnPercent = CEILING(100*lnPageNo/lnPageCount)
  1486.         IF (lnLastPercent > 0 AND ;
  1487.                 lnPercent - lnLastPercent < lnDelay  AND ;
  1488.                 lnPercent <> 100)
  1489.         ELSE 
  1490.             =DoFoxyTherm(lnPercent, ;
  1491.                 ALLTRIM(TRANSFORM(lnPercent)) + "%  - " + TRANSFORM(FLOOR(SECONDS() - lnSecs)) + " " + _goFP._SecondsText , ;
  1492.                 _goFP._RunStatusText)
  1493.         ENDIF 
  1494.     ENDIF
  1495.     This.nCurrentPage = lnPageNo
  1496.     IF lnPageNo > 1
  1497.         This.AddBlankPage()
  1498.     ENDIF
  1499.     lcFile = ADDBS(GETENV("TEMP")) + SYS(2015) + ".PNG"
  1500.     toListener.OutputPage(lnPageNo, lcFile, lnDeviceType)
  1501. *    lnHandle = HPDF_LoadJpegImageFromFile(This.pdfHandle, lcFile)
  1502.     lnHandle = HPDF_LoadPngImageFromFile(This.pdfHandle, lcFile)
  1503.     IF lnHandle = 0
  1504.         MESSAGEBOX("Internal error loading the page image file from the report.", 48, "Error")
  1505.         SET STEP ON
  1506.     ELSE
  1507.         This._Stat = HPDF_Page_DrawImage(This.oPage, lnHandle, 0, 0, (tnWidth/960)*72, (tnHeight/960)*72)
  1508.         This.oImagesCollection.Add(lcFile)
  1509.     ENDIF
  1510. ENDFOR
  1511. IF llShowTherm
  1512.     =DoFoxyTherm(100, ;
  1513.         "100%  - " + TRANSFORM(CEILING(SECONDS() - lnSecs)) + " " + _goFP._SecondsText , ;
  1514.                 _goFP._RunStatusText)
  1515. ENDIF
  1516. IF NOT This.lObjTypeMode 
  1517.     This.AfterReport()
  1518.     This.UnloadReport()
  1519. ENDIF
  1520. IF llShowTherm
  1521.     =DoFoxyTherm()
  1522. ENDIF
  1523. ENDPROC
  1524. PROCEDURE updateproperties
  1525. IF NOT This.lObjTypeMode OR (VARTYPE(_Screen.oFoxyPreviewer) <> "O")
  1526.     RETURN
  1527. ENDIF
  1528. LOCAL loFP
  1529. loFP = _Screen.oFoxyPreviewer
  1530. IF VARTYPE(This.CommandClauses) = "O"
  1531.     *!*    IF This.CommandClauses.Preview
  1532.     *!*        This.lOpenViewer = .T.
  1533.     *!*    ELSE 
  1534.     *!*        This.lOpenViewer = NVL(loFP.lOpenViewer, .T.)
  1535.     *!*    ENDIF
  1536.     This.lOpenViewer = This.CommandClauses.Preview
  1537.     IF NOT EMPTY(This.CommandClauses.ToFile)
  1538.         This.cTargetFileName = This.CommandClauses.ToFile
  1539.     ELSE 
  1540.         IF VARTYPE(_Screen.oFoxyPreviewer) = "O" AND ;
  1541.                 NOT EMPTY(_Screen.oFoxyPreviewer.cDestFile) AND ;
  1542.                 EMPTY(This.cTargetFileName)
  1543.             LOCAL lcDestFile
  1544.             lcDestFile = _Screen.oFoxyPreviewer.cDestFile
  1545.             IF NOT "\" $ lcDestFile
  1546.                 lcDestFile = ALLTRIM(ADDBS(_Screen.oFoxyPreviewer.cOutputPath) + lcDestFile)
  1547.             ENDIF
  1548.             This.cTargetFileName = lcDestFile
  1549.         ELSE
  1550.             LOCAL lcFile
  1551.             lcFile = This.cTargetFileName
  1552.             IF EMPTY(lcFile)
  1553.                 lcFile = PUTFILE("","","pdf")
  1554.             ENDIF
  1555.             IF EMPTY(lcFile)
  1556.                 _ReportListener::CancelReport()
  1557.                 * This.CancelReport()
  1558.                 RETURN .F.
  1559.             ENDIF
  1560.             This.cTargetFileName = lcFile
  1561.         ENDIF
  1562.     ENDIF 
  1563. ENDIF
  1564. This.QUIETMODE        = NVL(loFP.lQuietMode         , .F.)
  1565. *This.lEmbedFont       = NVL(loFP.lPDFEmbedFonts     , .T.)
  1566. This.lCanPrint        = NVL(loFP.lPDFCanPrint       , .T.)
  1567. This.lCanEdit         = NVL(loFP.lPDFCanEdit        , .T.)
  1568. This.lCanCopy         = NVL(loFP.lPDFCanCopy        , .T.)
  1569. This.lCanAddNotes     = NVL(loFP.lPDFCanAddNotes    , .T.)
  1570. This.lEncryptDocument = NVL(loFP.lPDFEncryptDocument, .T.)
  1571. This.cMasterPassword  = NVL(loFP.cPDFMasterPassword , "")
  1572. This.cUserPassword    = NVL(loFP.cPDFUserPassword   , "")
  1573. *This.lShowErrors      = NVL(loFP.lPDFShowErrors     , .F.)
  1574. *This.cSymbolFontsList = NVL(loFP.cPDFSymbolFontsList, "")
  1575. This.cPdfAuthor       = NVL(loFP.cPdfAuthor         , "")
  1576. This.cPdfTitle        = NVL(loFP.cPdfTitle          , "")
  1577. This.cPdfSubject      = NVL(loFP.cPdfSubject        , "")
  1578. This.cPdfKeyWords     = NVL(loFP.cPdfKeyWords       , "")
  1579. This.cPdfCreator      = NVL(loFP.cPdfCreator        , "")
  1580. *This.cDefaultFont     = NVL(loFP.cPDFDefaultFont    , "")
  1581. LOCAL lnPgMode
  1582. lnPgMode = MAX(NVL(loFP.nPDFPageMode, 0) - 1, 0)
  1583. lnPgMode = IIF(lnPgMode = 1, 2, lnPgMode)
  1584. This.nPageMode    = lnPgMode
  1585. This.lDefaultMode = .T.
  1586. This.QuietMode    = .T.
  1587. ENDPROC
  1588. PROCEDURE _stat_assign
  1589. LPARAMETERS tnStatus
  1590. This._Stat = tnStatus
  1591. IF tnStatus != 0
  1592.     * Clear existing the HPDF errors
  1593.     * Here we can see if an error occurred during the rendering process of the 
  1594.     * current field
  1595.     LOCAL lnHPDF_err, lcHex
  1596.     lnHPDF_err = HPDF_GetError(This.pdfHandle)
  1597.     IF lnHPDF_err <> 0
  1598.         lcHex = TRANSFORM(lnHPDF_err, "@0")
  1599.         * SET STEP ON 
  1600.         HPDF_ResetError(This.pdfHandle)
  1601.     ENDIF
  1602.     IF This.lShowErrors = .T. AND tnStatus > 1
  1603.         IF _VFP.StartMode = 0 && Development
  1604.             LOCAL lnOption
  1605.             lnOption = MESSAGEBOX("PDFx error in " + PROGRAM(PROGRAM(-1) - 1) + CHR(13);
  1606.                 + "Error code : " + TRANSFORM(tnStatus) + CHR(13) ;
  1607.                 + "Description: " + This._ErrorInfo(tnStatus) + CHR(13) ;
  1608.                 + "Page: " + TRANSFORM(This.nCurrentPage) + CHR(13) ;
  1609.                 + "Press 'Retry' to debug the application.", 16 + 2, "Error")
  1610.             IF lnOption = 3
  1611.                 CANCEL
  1612.             ENDIF
  1613.             IF lnOption = 4
  1614.                 SUSPEND
  1615.             ENDIF
  1616.         ELSE 
  1617.             MESSAGEBOX("PDFx error in " + PROGRAM(PROGRAM(-1) - 1) + CHR(13);
  1618.                 + "Error code  : " + TRANSFORM(tnStatus) + CHR(13) ;
  1619.                 + "Description : " + This._ErrorInfo(tnStatus) + CHR(13) ;
  1620.                 + "Object: " + This.cObjectToRender, 16, "Error")
  1621.         ENDIF 
  1622.     ENDIF
  1623. ENDIF
  1624. ENDPROC
  1625. PROCEDURE _errorinfo
  1626. LPARAMETERS tnStatus
  1627. DO CASE
  1628.     CASE tnStatus = 0x1001
  1629.         RETURN "HPDF_ARRAY_COUNT_ERR                      "    &&  0x1001
  1630.     CASE tnStatus = 0x1002
  1631.         RETURN "HPDF_ARRAY_ITEM_NOT_FOUND                 "    &&  0x1002
  1632.     CASE tnStatus = 0x1003
  1633.         RETURN "HPDF_ARRAY_ITEM_UNEXPECTED_TYPE           "    &&  0x1003
  1634.     CASE tnStatus = 0x1004
  1635.         RETURN "HPDF_BINARY_LENGTH_ERR                    "    &&  0x1004
  1636.     CASE tnStatus = 0x1005
  1637.         RETURN "HPDF_CANNOT_GET_PALLET                    "    &&  0x1005
  1638.     CASE tnStatus = 0x1007
  1639.         RETURN "HPDF_DICT_COUNT_ERR                       "    &&  0x1007
  1640.     CASE tnStatus = 0x1008
  1641.         RETURN "HPDF_DICT_ITEM_NOT_FOUND                  "    &&  0x1008
  1642.     CASE tnStatus = 0x1009
  1643.         RETURN "HPDF_DICT_ITEM_UNEXPECTED_TYPE            "    &&  0x1009
  1644.     CASE tnStatus = 0x100A
  1645.         RETURN "HPDF_DICT_STREAM_LENGTH_NOT_FOUND         "    &&  0x100A
  1646.     CASE tnStatus = 0x100B
  1647.         RETURN "HPDF_DOC_ENCRYPTDICT_NOT_FOUND            "    &&  0x100B
  1648.     CASE tnStatus = 0x100C
  1649.         RETURN "HPDF_DOC_INVALID_OBJECT                   "    &&  0x100C
  1650.     CASE tnStatus = 0x100E
  1651.         RETURN "HPDF_DUPLICATE_REGISTRATION               "    &&  0x100E
  1652.     CASE tnStatus = 0x100F
  1653.         RETURN "HPDF_EXCEED_JWW_CODE_NUM_LIMIT            "    &&  0x100F
  1654.     CASE tnStatus = 0x10011
  1655.         RETURN "HPDF_ENCRYPT_INVALID_PASSWORD             "    &&  0x1011
  1656.     CASE tnStatus = 0x1013
  1657.         RETURN "HPDF_ERR_UNKNOWN_CLASS                    "    &&  0x1013
  1658.     CASE tnStatus = 0x1014
  1659.         RETURN "HPDF_EXCEED_GSTATE_LIMIT                  "    &&  0x1014
  1660.     CASE tnStatus = 0x1015
  1661.         RETURN "HPDF_FAILD_TO_ALLOC_MEM                   "    &&  0x1015
  1662.     CASE tnStatus = 0x1016
  1663.         RETURN "HPDF_FILE_IO_ERROR                        "    &&  0x1016
  1664.     CASE tnStatus = 0x1017
  1665.         RETURN "HPDF_FILE_OPEN_ERROR                      "    &&  0x1017
  1666.     CASE tnStatus = 0x1019
  1667.         RETURN "HPDF_FONT_EXISTS                          "    &&  0x1019
  1668.     CASE tnStatus = 0x101A
  1669.         RETURN "HPDF_FONT_INVALID_WIDTHS_TABLE            "    &&  0x101A
  1670.     CASE tnStatus = 0x101B
  1671.         RETURN "HPDF_INVALID_AFM_HEADER                   "    &&  0x101B
  1672.     CASE tnStatus = 0x101C
  1673.         RETURN "HPDF_INVALID_ANNOTATION                   "    &&  0x101C
  1674.     CASE tnStatus = 0x101E
  1675.         RETURN "HPDF_INVALID_BIT_PER_COMPONENT            "    &&  0x101E
  1676.     CASE tnStatus = 0x101F
  1677.         RETURN "HPDF_INVALID_CHAR_MATRICS_DATA            "    &&  0x101F
  1678.     CASE tnStatus = 0x1020
  1679.         RETURN "HPDF_INVALID_COLOR_SPACE                  "    &&  0x1020
  1680.     CASE tnStatus = 0x1021
  1681.         RETURN "HPDF_INVALID_COMPRESSION_MODE             "    &&  0x1021
  1682.     CASE tnStatus = 0x1022
  1683.         RETURN "HPDF_INVALID_DATE_TIME                    "    &&  0x1022
  1684.     CASE tnStatus = 0x1023
  1685.         RETURN "HPDF_INVALID_DESTINATION                  "    &&  0x1023
  1686.     CASE tnStatus = 0x1025
  1687.         RETURN "HPDF_INVALID_DOCUMENT                     "    &&  0x1025
  1688.     CASE tnStatus = 0x1026
  1689.         RETURN "HPDF_INVALID_DOCUMENT_STATE               "    &&  0x1026
  1690.     CASE tnStatus = 0x1027
  1691.         RETURN "HPDF_INVALID_ENCODER                      "    &&  0x1027
  1692.     CASE tnStatus = 0x1028
  1693.         RETURN "HPDF_INVALID_ENCODER_TYPE                 "    &&  0x1028
  1694.     CASE tnStatus = 0x102B
  1695.         RETURN "HPDF_INVALID_ENCODING_NAME                "    &&  0x102B
  1696.     CASE tnStatus = 0x102C
  1697.         RETURN "HPDF_INVALID_ENCRYPT_KEY_LEN              "    &&  0x102C
  1698.     CASE tnStatus = 0x102D
  1699.         RETURN "HPDF_INVALID_FONTDEF_DATA                 "    &&  0x102D
  1700.     CASE tnStatus = 0x102E
  1701.         RETURN "HPDF_INVALID_FONTDEF_TYPE                 "    &&  0x102E
  1702.     CASE tnStatus = 0x102F
  1703.         RETURN "HPDF_INVALID_FONT_NAME                    "    &&  0x102F
  1704.     CASE tnStatus = 0x1030
  1705.         RETURN "HPDF_INVALID_IMAGE                        "    &&  0x1030
  1706.     CASE tnStatus = 0x1031
  1707.         RETURN "HPDF_INVALID_JPEG_DATA                    "    &&  0x1031
  1708.     CASE tnStatus = 0x1032
  1709.         RETURN "HPDF_INVALID_N_DATA                       "    &&  0x1032
  1710.     CASE tnStatus = 0x1033
  1711.         RETURN "HPDF_INVALID_OBJECT                       "    &&  0x1033
  1712.     CASE tnStatus = 0x1034
  1713.         RETURN "HPDF_INVALID_OBJ_ID                       "    &&  0x1034
  1714.     CASE tnStatus = 0x1035
  1715.         RETURN "HPDF_INVALID_OPERATION                    "    &&  0x1035
  1716.     CASE tnStatus = 0x1036
  1717.         RETURN "HPDF_INVALID_OUTLINE                      "    &&  0x1036
  1718.     CASE tnStatus = 0x1037
  1719.         RETURN "HPDF_INVALID_PAGE                         "    &&  0x1037
  1720.     CASE tnStatus = 0x1038
  1721.         RETURN "HPDF_INVALID_PAGES                        "    &&  0x1038
  1722.     CASE tnStatus = 0x1039
  1723.         RETURN "HPDF_INVALID_PARAMETER                    "    &&  0x1039
  1724.     CASE tnStatus = 0x103B
  1725.         RETURN "HPDF_INVALID_PNG_IMAGE                    "    &&  0x103B
  1726.     CASE tnStatus = 0x103C
  1727.         RETURN "HPDF_INVALID_STREAM                       "    &&  0x103C
  1728.     CASE tnStatus = 0x103D
  1729.         RETURN "HPDF_MISSING_FILE_NAME_ENTRY              "    &&  0x103D
  1730.     CASE tnStatus = 0x103F
  1731.         RETURN "HPDF_INVALID_TTC_FILE                     "    &&  0x103F
  1732.     CASE tnStatus = 0x1040
  1733.         RETURN "HPDF_INVALID_TTC_INDEX                    "    &&  0x1040
  1734.     CASE tnStatus = 0x1041
  1735.         RETURN "HPDF_INVALID_WX_DATA                      "    &&  0x1041
  1736.     CASE tnStatus = 0x1042
  1737.         RETURN "HPDF_ITEM_NOT_FOUND                       "    &&  0x1042
  1738.     CASE tnStatus = 0x1043
  1739.         RETURN "HPDF_LIBPNG_ERROR                         "    &&  0x1043
  1740.     CASE tnStatus = 0x1044
  1741.         RETURN "HPDF_NAME_INVALID_VALUE                   "    &&  0x1044
  1742.     CASE tnStatus = 0x1045
  1743.         RETURN "HPDF_NAME_OUT_OF_RANGE                    "    &&  0x1045
  1744.     CASE tnStatus = 0x1048
  1745.         RETURN "HPDF_PAGE_INVALID_PARAM_COUNT             "    &&  0x1048
  1746.     CASE tnStatus = 0x1049
  1747.         RETURN "HPDF_PAGES_MISSING_KIDS_ENTRY             "    &&  0x1049
  1748.     CASE tnStatus = 0x104A
  1749.         RETURN "HPDF_PAGE_CANNOT_FIND_OBJECT              "    &&  0x104A
  1750.     CASE tnStatus = 0x104B
  1751.         RETURN "HPDF_PAGE_CANNOT_GET_ROOT_PAGES           "    &&  0x104B
  1752.     CASE tnStatus = 0x104C
  1753.         RETURN "HPDF_PAGE_CANNOT_RESTORE_GSTATE           "    &&  0x104C
  1754.     CASE tnStatus = 0x104D
  1755.         RETURN "HPDF_PAGE_CANNOT_SET_PARENT               "    &&  0x104D
  1756.     CASE tnStatus = 0x104E
  1757.         RETURN "HPDF_PAGE_FONT_NOT_FOUND                  "    &&  0x104E
  1758.     CASE tnStatus = 0x104F
  1759.         RETURN "HPDF_PAGE_INVALID_FONT                    "    &&  0x104F
  1760.     CASE tnStatus = 0x1050
  1761.         RETURN "HPDF_PAGE_INVALID_FONT_SIZE               "    &&  0x1050
  1762.     CASE tnStatus = 0x1051
  1763.         RETURN "HPDF_PAGE_INVALID_GMODE                   "    &&  0x1051
  1764.     CASE tnStatus = 0x1052
  1765.         RETURN "HPDF_PAGE_INVALID_INDEX                   "    &&  0x1052
  1766.     CASE tnStatus = 0x1053
  1767.         RETURN "HPDF_PAGE_INVALID_ROTATE_VALUE            "    &&  0x1053
  1768.     CASE tnStatus = 0x1054
  1769.         RETURN "HPDF_PAGE_INVALID_SIZE                    "    &&  0x1054
  1770.     CASE tnStatus = 0x1055
  1771.         RETURN "HPDF_PAGE_INVALID_XOBJECT                 "    &&  0x1055
  1772.     CASE tnStatus = 0x1056
  1773.         RETURN "HPDF_PAGE_OUT_OF_RANGE                    "    &&  0x1056
  1774.     CASE tnStatus = 0x1057
  1775.         RETURN "HPDF_REAL_OUT_OF_RANGE                    "    &&  0x1057
  1776.     CASE tnStatus = 0x1058
  1777.         RETURN "HPDF_STREAM_EOF                           "    &&  0x1058
  1778.     CASE tnStatus = 0x1059
  1779.         RETURN "HPDF_STREAM_READLN_CONTINUE               "    &&  0x1059
  1780.     CASE tnStatus = 0x105B
  1781.         RETURN "HPDF_STRING_OUT_OF_RANGE                  "    &&  0x105B
  1782.     CASE tnStatus = 0x105C
  1783.         RETURN "HPDF_THIS_FUNC_WAS_SKIPPED                "    &&  0x105C
  1784.     CASE tnStatus = 0x105D
  1785.         RETURN "HPDF_TTF_CANNOT_EMBEDDING_FONT            "    &&  0x105D
  1786.     CASE tnStatus = 0x105E
  1787.         RETURN "HPDF_TTF_INVALID_CMAP                     "    &&  0x105E
  1788.     CASE tnStatus = 0x105F
  1789.         RETURN "HPDF_TTF_INVALID_FOMAT                    "    &&  0x105F
  1790.     CASE tnStatus = 0x1060
  1791.         RETURN "HPDF_TTF_MISSING_TABLE                    "    &&  0x1060
  1792.     CASE tnStatus = 0x1061
  1793.         RETURN "HPDF_UNSUPPORTED_FONT_TYPE                "    &&  0x1061
  1794.     CASE tnStatus = 0x1062
  1795.         RETURN "HPDF_UNSUPPORTED_FUNC                     "    &&  0x1062
  1796.     CASE tnStatus = 0x1063
  1797.         RETURN "HPDF_UNSUPPORTED_JPEG_FORMAT              "    &&  0x1063
  1798.     CASE tnStatus = 0x1064
  1799.         RETURN "HPDF_UNSUPPORTED_TYPE1_FONT               "    &&  0x1064
  1800.     CASE tnStatus = 0x1065
  1801.         RETURN "HPDF_XREF_COUNT_ERR                       "    &&  0x1065
  1802.     CASE tnStatus = 0x1066
  1803.         RETURN "HPDF_ZLIB_ERROR                           "    &&  0x1066
  1804.     CASE tnStatus = 0x1067
  1805.         RETURN "HPDF_INVALID_PAGE_INDEX                   "    &&  0x1067
  1806.     CASE tnStatus = 0x1068
  1807.         RETURN "HPDF_INVALID_URI                          "    &&  0x1068
  1808.     CASE tnStatus = 0x1069
  1809.         RETURN "HPDF_PAGE_LAYOUT_OUT_OF_RANGE             "    &&  0x1069
  1810.     CASE tnStatus = 0x1070
  1811.         RETURN "HPDF_PAGE_MODE_OUT_OF_RANGE               "    &&  0x1070
  1812.     CASE tnStatus = 0x1071
  1813.         RETURN "HPDF_PAGE_NUM_STYLE_OUT_OF_RANGE          "    &&  0x1071
  1814.     CASE tnStatus = 0x1072
  1815.         RETURN "HPDF_ANNOT_INVALID_ICON                   "    &&  0x1072
  1816.     CASE tnStatus = 0x1073
  1817.         RETURN "HPDF_ANNOT_INVALID_BORDER_STYLE           "    &&  0x1073
  1818.     CASE tnStatus = 0x1074
  1819.         RETURN "HPDF_PAGE_INVALID_DIRECTION               "    &&  0x1074
  1820.     CASE tnStatus = 0x1075
  1821.         RETURN "HPDF_INVALID_FONT                         "    &&  0x1075
  1822.     CASE tnStatus = 0x1076
  1823.         RETURN "HPDF_PAGE_INSUFFICIENT_SPACE              "    &&  0x1076
  1824.     CASE tnStatus = 0x1077
  1825.         RETURN "HPDF_PAGE_INVALID_DISPLAY_TIME            "    &&  0x1077
  1826.     CASE tnStatus = 0x1078
  1827.         RETURN "HPDF_PAGE_INVALID_TRANSITION_TIME         "    &&  0x1078
  1828.     CASE tnStatus = 0x1079
  1829.         RETURN "HPDF_INVALID_PAGE_SLIDESHOW_TYPE          "    &&  0x1079
  1830.     CASE tnStatus = 0x1080
  1831.         RETURN "HPDF_EXT_GSTATE_OUT_OF_RANGE              "    &&  0x1080
  1832.     CASE tnStatus = 0x1081
  1833.         RETURN "HPDF_INVALID_EXT_GSTATE                   "    &&  0x1081
  1834.     CASE tnStatus = 0x1082
  1835.         RETURN "HPDF_EXT_GSTATE_READ_ONLY                 "    &&  0x1082
  1836.     OTHERWISE
  1837.         RETURN "Unknown Error"
  1838. ENDCASE
  1839. ENDPROC
  1840. PROCEDURE Destroy
  1841. This.ClearDLLS()
  1842. DODEFAULT()
  1843. ENDPROC
  1844. PROCEDURE OutputPage
  1845. Lparameters nPageNo, eDevice, nDeviceType, nLeft, nTop, nWidth, nHeight, nClipLeft, nClipTop, nClipWidth, nClipHeight
  1846. #Define OutputNothing -1
  1847. #Define OutputTIFF 101
  1848. #Define OutputTIFFAdditive (OutputTIFF+100)
  1849. #Define OutPutJPEG 102
  1850. #Define OutPutPNG  104
  1851. #Define COULDNTCREATE "Could Not Create PDF Document"
  1852. Local lnHandle As Integer, lcFile As String
  1853. With This
  1854.     If (nDeviceType == OutputNothing) Then
  1855.         If nPageNo == 1 Then
  1856.             * nDeviceType = OutputJPEG && Start JPEG Generation Process
  1857.             nDeviceType = OutputPNG && Start PNG Generation Process
  1858.             .StartPdfDocument()
  1859.         Else
  1860.             .AddBlankPage()
  1861.             * nDeviceType = OutputJPEG && Start JPEG Generation Process
  1862.             nDeviceType = OutputPNG && Start PNG Generation Process
  1863.         EndIf
  1864.         * lcFile=GetEnv("TEMP")+"\"+Sys(2015)+".Jpg"
  1865.         lcFile=GetEnv("TEMP")+"\"+Sys(2015)+".Png"
  1866.         .OutputPage(nPageNo, lcFile, nDeviceType)
  1867.         * lnHandle=LoadJpegImageFromFile(.pdfHandle, lcFile)
  1868.         lnHandle=HPDF_LoadPNGImageFromFile(.pdfHandle, lcFile)
  1869.         This._Stat = HPDF_Page_DrawImage(.oPage, lnHandle, 0, 0, (.GetPageWidth()/960)*72, (.GetPageHeight()/960)*72)
  1870.         .oImagesCollection.Add(lcFile)
  1871.         NoDefault
  1872.     EndIf
  1873. EndWith
  1874. ENDPROC
  1875. PROCEDURE AfterReport
  1876. IF This.lDefaultMode
  1877.     DODEFAULT()
  1878. ENDIF 
  1879. IF This.lObjTypeMode 
  1880.     This.OutputFromData(This, This.GetPageWidth(), This.GetPageHeight())
  1881. ENDIF
  1882. WITH This
  1883.     IF NOT .WaitForNextReport
  1884.         IF This.lObjTypeMode AND VARTYPE(_Screen.oFoxyPreviewer) = "O" AND ;
  1885.                 NOT EMPTY(_Screen.oFoxyPreviewer.cDestFile)
  1886.             This.cTargetFileName = _Screen.oFoxyPreviewer.cDestFile
  1887.         ENDIF        
  1888.         LOCAL lcFile
  1889.         lcFile = This.cTargetFileName
  1890.         IF EMPTY(lcFile)
  1891.             lcFile = PUTFILE("","","pdf")
  1892.         ENDIF
  1893.         IF EMPTY(lcFile)
  1894.             This._Stat = HPDF_Free(.pdfHandle)
  1895.             RETURN
  1896.         ELSE
  1897.             This._Stat = HPDF_SaveToFile(.pdfHandle, lcFile)
  1898.             This._Stat = HPDF_Free(.pdfHandle)
  1899.             If .lOpenViewer Then
  1900.                 .ShellExec(lcFile)
  1901.             EndIf
  1902.         ENDIF
  1903.     ENDIF
  1904.     * Reset the report page counter
  1905.     This.nPgCounter = 0
  1906. ENDWITH
  1907. ENDPROC
  1908. PROCEDURE UnloadReport
  1909. IF This.lDefaultMode 
  1910.     DODEFAULT()
  1911. ENDIF 
  1912. With This
  1913.     * CChalom 2010-01-20
  1914.     * Added "WaitForNextReport" property in order to allow merging reports
  1915.     * If another report is expected to come, don't close the objects and handles
  1916.     IF Not .WaitForNextReport 
  1917.         If Vartype(.oImagesCollection)="O" Then &&Cleanup Temporary Images Files
  1918.             Local lcItem As String
  1919.             For Each lcItem In .oImagesCollection FOXOBJECT
  1920.                 TRY
  1921.                     Delete File (lcItem)
  1922.                 CATCH TO loexc
  1923.                     SET STEP ON 
  1924.                 ENDTRY
  1925.             EndFor
  1926.             .oImagesCollection=Null
  1927.         EndIf
  1928.     ENDIF 
  1929. ENDWITH
  1930. ENDPROC
  1931. PROCEDURE BeforeReport
  1932. This.oImagesCollection=CreateObject("Collection")
  1933. ENDPROC
  1934. PROCEDURE LoadReport
  1935. This.UpdateProperties()
  1936. DODEFAULT()
  1937. ENDPROC
  1938. Height = 23
  1939. Width = 23
  1940. ListenerType = 2
  1941. FRXDataSession = -1
  1942. pdfhandle = 0
  1943. pageheight = 0
  1944. pagewidth = 0
  1945. encryptdocument = .F.
  1946. oprogress = .F.
  1947. oregistry = .F.
  1948. mergedocument = .F.
  1949. mergedocumentname = 
  1950. opage = .NULL.
  1951. oimagescollection = .NULL.
  1952. cpdfauthor = 
  1953. cuserpassword = 
  1954. lencryptdocument = .F.
  1955. nencryptionlevel = 5
  1956. npageheight = 0
  1957. lcanedit = .F.
  1958. lcancopy = .T.
  1959. lcanaddnotes = .F.
  1960. lcanprint = .T.
  1961. lopenviewer = .F.
  1962. cmasterpassword = 
  1963. ctargetfilename = 
  1964. cpdfcreator = 
  1965. cpdfkeywords = 
  1966. cpdfsubject = 
  1967. cpdftitle = 
  1968. waitfornextreport = .F.
  1969. npgcounter = 0
  1970. npagemode = 0
  1971. lextended = .T.
  1972. ldefaultmode = .F.
  1973. npagewidth = 0
  1974. lobjtypemode = .F.
  1975. _stat = 0
  1976. lshowerrors = .T.
  1977. ncurrentpage = 0
  1978. _memberdata = 
  1979.     3191<VFPData><memberdata name="pdfhandle" type="property" display="PdfHandle"/><memberdata name="pageheight" type="property" display="PageHeight"/><memberdata name="pagewidth" type="property" display="PageWidth"/><memberdata name="encryptdocument" type="property" display="EncryptDocument"/><memberdata name="oprogress" type="property" display="oProgress"/><memberdata name="oregistry" type="property" display="oRegistry"/><memberdata name="mergedocument" type="property" display="MergeDocument"/><memberdata name="mergedocumentname" type="property" display="MergeDocumentName"/><memberdata name="opage" type="property" display="oPage"/><memberdata name="oimagescollection" type="property" display="oImagesCollection"/><memberdata name="cpdfauthor" type="property" display="cPdfAuthor"/><memberdata name="cuserpassword" type="property" display="cUserPassword"/><memberdata name="lencryptdocument" type="property" display="lEncryptDocument"/><memberdata name="nencryptionlevel" type="property" display="nEncryptionLevel"/><memberdata name="addblankpage" type="method" display="AddBlankPage"/><memberdata name="npageheight" type="property" display="nPageHeight"/><memberdata name="lcanedit" type="property" display="lCanEdit"/><memberdata name="lcancopy" type="property" display="lCanCopy"/><memberdata name="lcanaddnotes" type="property" display="lCanAddNotes"/><memberdata name="lcanprint" type="property" display="lCanPrint"/><memberdata name="cleardlls" type="method" display="ClearDLLS"/><memberdata name="encryptpdf" type="method" display="EncryptPdf"/><memberdata name="shellexec" type="method" display="ShellExec"/><memberdata name="startpdfdocument" type="method" display="StartPdfDocument"/><memberdata name="writepdfinformation" type="method" display="WritePdfInformation"/><memberdata name="lopenviewer" type="property" display="lOpenViewer"/><memberdata name="cmasterpassword" type="property" display="cMasterPassword"/><memberdata name="ctargetfilename" type="property" display="cTargetFileName"/><memberdata name="declaredll" type="method" display="DeclareDll"/><memberdata name="cpdfcreator" type="property" display="cPdfCreator"/><memberdata name="cpdfkeywords" type="property" display="cPdfKeyWords"/><memberdata name="cpdfsubject" type="property" display="cPdfSubject"/><memberdata name="cpdftitle" type="property" display="cPdfTitle"/><memberdata name="previewcontainer" type="property" display="PreviewContainer"/><memberdata name="npagemode" display="nPageMode"/><memberdata name="lextended" display="lExtended"/><memberdata name="makepdf" display="MakePDF"/><memberdata name="outputfromdata" display="OutputFromData"/><memberdata name="ldefaultmode" display="lDefaultMode"/><memberdata name="npagewidth" display="nPageWidth"/><memberdata name="lobjtypemode" display="lObjTypeMode"/><memberdata name="updateproperties" display="UpdateProperties"/><memberdata name="_stat" display="_Stat"/><memberdata name="_stat_assign" display="_Stat_Assign"/><memberdata name="lshowerrors" display="lShowErrors"/><memberdata name="_errorinfo" display="_ErrorInfo"/><memberdata name="ncurrentpage" display="nCurrentPage"/><memberdata name="lcompletemode" display="lCompleteMode"/></VFPData>
  1980. lcompletemode = .T.
  1981. Name = "pdfasimagelistener"
  1982. pdfhandle Handle to the PDF file to create by the DLL
  1983. nlastpageproccesed Number of the last page proccesed by the system
  1984. ndivisionfactor Factor to be used for the conversion between unit of measures
  1985. cpdfauthor Author of the Pdf File
  1986. cpdftitle Title of the PDF Document
  1987. cpdfsubject Subject of the PDF File
  1988. cpdfkeywords Keywords of the PDF Document
  1989. cpdfcreator Name of the Pdf Creator
  1990. lcanprint Property to know if user can print or can't print the document
  1991. lcancopy Property to know if user can copy the document contents
  1992. lcanedit Property to know if user can Edit the contents of the document
  1993. lcanaddnotes Property to know if the user can add or modify annotations
  1994. lencryptdocument Property to know if the document should be Encripted
  1995. cuserpassword User Password for the PDF document
  1996. cmasterpassword Master Password for the PDF document
  1997. nencriptionlevel A Value Between 5(40bit) and 16(128bit) can be specified for length of the key
  1998. opage Current Page object returned by the library
  1999. lstarted Property to know if the conversion procces has started
  2000. ctargetfilename Name of the PDF File to create
  2001. lopenviewer Flag to execute the default PDF reader of the pc
  2002. ofonts Fonts Collection used in the library
  2003. oregistry Property to store the Registry Object, this object will provide access to windows registry
  2004. npageheight Height of the page, used to invert the coordinate system of the pdf library
  2005. nspacesfortab Number of Spaces per TAB character
  2006. lembedfont Property to Know if the font is Embedded into the document, if .T. file size will increase
  2007. ccodepage Code Page to be used by the pdf listener when loading fonts
  2008. lunderline Property to know if the text being draw should use underline style
  2009. ctextstyle Internal to the Class
  2010. odynamics Property to store the object used to store temporary values of the dynamics properties
  2011. waitfornextreport Logical, keep the PDF handles opened, waiting for a new report to be joined.
  2012. npgcounter
  2013. nglobalpgcounter
  2014. otempimagescollection Property to store the collection of temporary Images used in the PDF Generation
  2015. opicturehandles Used to store the handle of pictures used in the PDF generation
  2016. _lsetconsole
  2017. _lsettalk
  2018. npagemode How the document should be displayed - 0 = USE_NONE; 1 = USE_OUTLINE; 2 = USE_THUMBS; 3 = FULL_SCREEN
  2019. lextended
  2020. ldefaultmode
  2021. npagewidth
  2022. _cwinfolder
  2023. _ctempfolder
  2024. _stat
  2025. lshowerrors
  2026. csymbolfontslist
  2027. cobjecttorender
  2028. _stat2
  2029. ncurrentpage
  2030. oactivelistener
  2031. cdefaultfont
  2032. lobjtypemode
  2033. _lschinese
  2034. lrighttoleft
  2035. lreplacefonts Replaces some fonts using some generic fonts that are stored inside the DLL
  2036. _ltchinese
  2037. _lkorean
  2038. _ljapanese
  2039. nwmwidthratio
  2040. nwmheightratio
  2041. nwmwidth
  2042. nwmheight
  2043. cwmpicture
  2044. hwmpdfhandle
  2045. _cwmpicture
  2046. _nwmy
  2047. _nwmx
  2048. _nwmw
  2049. _nwmh
  2050. lusingwatermark
  2051. nsystemlangid
  2052. lhasuserfld
  2053. nlineheightratio
  2054. lcompletemode
  2055. *declaredll Method to Declare all DLL required for the Job
  2056. *writepdfinformation 
  2057. *searchfont 
  2058. *startpdfdocument 
  2059. *cleardlls Method to Clear from Memory all the DLL Calls
  2060. *encryptpdf 
  2061. *addblankpage Method to add a Blank Page to the document
  2062. *addpdfstandardfonts 
  2063. *findfontfilename Method to find the real filename of a True Type Font, it will look in the Registry for it
  2064. *cropimage Method to Crop an Image, uses code from Cesar Chalom Samples
  2065. *parseunderlinetext Method to prepare the text to be drawed as underline
  2066. *processdynamics Method to process the dynamics properties of VFP9 SP2
  2067. *processfields 
  2068. *processshapes 
  2069. *processlabel 
  2070. *processpictures 
  2071. *processlines 
  2072. *getpicturehandle Used to get the picture handle when pictures are not in general fields
  2073. ^aspawnobj[1,1] 
  2074. *ispixelalpha 
  2075. *outputfromdata 
  2076. *getparheight 
  2077. ^afontsreplaced[1,0] 
  2078. *stringtopic 
  2079. *processpictures2 
  2080. ^afontssymbol[1,0] 
  2081. *_stat_assign 
  2082. *_errorinfo 
  2083. *_stat2_assign 
  2084. *getpicturefromlistener 
  2085. *getpageimg 
  2086. ^apagesimgs[1,0] 
  2087. *clearpdferrors 
  2088. *getimgtype 
  2089. *getdefaultfont 
  2090. *updateproperties 
  2091. *filesize Returns the file size
  2092. *getfonthandle 
  2093. *getfontstylename 
  2094. *gettempfile 
  2095. *istempfile 
  2096. *getwatermarkobject 
  2097. *getwatermark 
  2098. *getlanguagefromsystem 
  2099. *deletetempimages 
  2100. *updatecodepage 
  2101. HPDF_New
  2102. libhpdf.dll
  2103. HPDF_Free
  2104. libhpdf.dll
  2105. HPDF_SaveToFile
  2106. libhpdf.dll
  2107. HPDF_GetError
  2108. libhpdf.dll
  2109. HPDF_ResetError
  2110. libhpdf.dll
  2111. HPDF_SetPageMode
  2112. libhpdf.dll
  2113. HPDF_GetCurrentPage
  2114. libhpdf.dll
  2115. HPDF_AddPage
  2116. libhpdf.dll
  2117. HPDF_Page_SetWidth
  2118. libhpdf.dll
  2119. HPDF_Page_SetHeight
  2120. libhpdf.dll
  2121. HPDF_GetFont
  2122. libhpdf.dll
  2123. HPDF_LoadTTFontFromFile
  2124. libhpdf.dll
  2125. HPDF_GetEncoder
  2126. libhpdf.dll
  2127. HPDF_GetCurrentEncoder
  2128. libhpdf.dll
  2129. HPDF_SetCurrentEncoder
  2130. libhpdf.dll
  2131. HPDF_Encoder_GetType
  2132. libhpdf.dll
  2133. HPDF_Encoder_GetByteType
  2134. libhpdf.dll
  2135. HPDF_Encoder_GetUnicode
  2136. libhpdf.dll
  2137. HPDF_Encoder_GetWritingMode
  2138. libhpdf.dll
  2139. HPDF_UseJPEncodings
  2140. libhpdf.dll
  2141. HPDF_UseKREncodings
  2142. libhpdf.dll
  2143. HPDF_UseCNSEncodings
  2144. libhpdf.dll
  2145. HPDF_UseCNTEncodings
  2146. libhpdf.dll
  2147. HPDF_UseJPFonts
  2148. libhpdf.dll
  2149. HPDF_UseKRFonts
  2150. libhpdf.dll
  2151. HPDF_UseCNSFonts
  2152. libhpdf.dll
  2153. HPDF_UseCNTFonts
  2154. libhpdf.dll
  2155. HPDF_LoadPngImageFromFile
  2156. libhpdf.dll
  2157. HPDF_LoadJpegImageFromFile
  2158. libhpdf.dll
  2159. HPDF_Image_GetWidth
  2160. libhpdf.dll
  2161. HPDF_Image_GetHeight
  2162. libhpdf.dll
  2163. HPDF_SetInfoAttr
  2164. libhpdf.dll
  2165. HPDF_SetPassword
  2166. libhpdf.dll
  2167. HPDF_SetPermission
  2168. libhpdf.dll
  2169. HPDF_SetEncryptionMode
  2170. libhpdf.dll
  2171. HPDF_SetCompressionMode
  2172. libhpdf.dll
  2173. HPDF_Font_MeasureText
  2174. libhpdf.dll
  2175. HPDF_Page_GetWidth
  2176. libhpdf.dll
  2177. HPDF_Page_GetHeight
  2178. libhpdf.dll
  2179. HPDF_Page_TextWidth
  2180. libhpdf.dll
  2181. HPDF_Page_GetCurrentFont
  2182. libhpdf.dll
  2183. HPDF_Page_MeasureText
  2184. libhpdf.dll
  2185. HPDF_Page_GetRGBFill
  2186. libhpdf.dll
  2187. HPDF_Page_GetCurrentFont
  2188. libhpdf.dll
  2189. HPDF_Page_GetCurrentFontSize
  2190. libhpdf.dll
  2191. HPDF_Page_SetLineWidth
  2192. libhpdf.dll
  2193. HPDF_Page_SetDash
  2194. libhpdf.dll
  2195. HPDF_Page_MoveTo
  2196. libhpdf.dll
  2197. HPDF_Page_LineTo
  2198. libhpdf.dll
  2199. HPDF_Page_ClosePath
  2200. libhpdf.dll
  2201. HPDF_Page_Rectangle
  2202. libhpdf.dll
  2203. HPDF_Page_Concat
  2204. libhpdf.dll
  2205. HPDF_Page_SetCharSpace
  2206. libhpdf.dll
  2207. HPDF_Page_SetWordSpace
  2208. libhpdf.dll
  2209. HPDF_Page_SetHorizontalScalling
  2210. libhpdf.dll
  2211. HPDF_Page_SetTextLeading
  2212. libhpdf.dll
  2213. HPDF_Page_SetTextRise
  2214. libhpdf.dll
  2215. HPDF_Page_Stroke
  2216. libhpdf.dll
  2217. HPDF_Page_ClosePathStroke
  2218. libhpdf.dll
  2219. HPDF_Page_Fill
  2220. libhpdf.dll
  2221. HPDF_Page_FillStroke
  2222. libhpdf.dll
  2223. HPDF_Page_EndPath
  2224. libhpdf.dll
  2225. HPDF_Page_BeginText
  2226. libhpdf.dll
  2227. HPDF_Page_EndText
  2228. libhpdf.dll
  2229. HPDF_Page_SetFontAndSize
  2230. libhpdf.dll
  2231. HPDF_Page_SetTextRenderingMode
  2232. libhpdf.dll
  2233. HPDF_Page_MoveTextPos
  2234. libhpdf.dll
  2235. HPDF_Page_MoveToNextLine
  2236. libhpdf.dll
  2237. HPDF_Page_SetRGBFill
  2238. libhpdf.dll
  2239. HPDF_Page_SetRGBStroke
  2240. libhpdf.dll
  2241. HPDF_Page_Ellipse
  2242. libhpdf.dll
  2243. HPDF_Page_DrawImage
  2244. libhpdf.dll
  2245. HPDF_Page_TextRect
  2246. libhpdf.dll
  2247. HPDF_Page_TextOut
  2248. libhpdf.dll
  2249. HPDF_Page_SetTextMatrix
  2250. libhpdf.dll
  2251. HPDF_Page_ShowText
  2252. libhpdf.dll
  2253. HPDF_Page_CurveTo
  2254. libhpdf.dll
  2255. GdipCloneBitmapAreaI
  2256. GDIPLUS.DLLQ
  2257. pdfxGdipCloneBitmapAreaI
  2258. _strrev
  2259. msvcrt20.dllQ
  2260. xfcRevertString
  2261. HPDF_NEW
  2262. LIBHPDF
  2263. HPDF_FREE
  2264. HPDF_SAVETOFILE
  2265. HPDF_GETERROR
  2266. HPDF_RESETERROR
  2267. HPDF_SETPAGEMODE
  2268. HPDF_GETCURRENTPAGE
  2269. HPDF_ADDPAGE
  2270. HPDF_PAGE_SETWIDTH
  2271. HPDF_PAGE_SETHEIGHT
  2272. HPDF_GETFONT
  2273. HPDF_LOADTTFONTFROMFILE
  2274. HPDF_GETENCODER
  2275. HPDF_GETCURRENTENCODER
  2276. HPDF_SETCURRENTENCODER
  2277. HPDF_ENCODER_GETTYPE
  2278. HPDF_ENCODER_GETBYTETYPE
  2279. HPDF_ENCODER_GETUNICODE
  2280. HPDF_ENCODER_GETWRITINGMODE
  2281. HPDF_USEJPENCODINGS
  2282. HPDF_USEKRENCODINGS
  2283. HPDF_USECNSENCODINGS
  2284. HPDF_USECNTENCODINGS
  2285. HPDF_USEJPFONTS
  2286. HPDF_USEKRFONTS
  2287. HPDF_USECNSFONTS
  2288. HPDF_USECNTFONTS
  2289. HPDF_LOADPNGIMAGEFROMFILE
  2290. HPDF_LOADJPEGIMAGEFROMFILE
  2291. HPDF_IMAGE_GETWIDTH
  2292. HPDF_IMAGE_GETHEIGHT
  2293. HPDF_SETINFOATTR
  2294. HPDF_SETPASSWORD
  2295. HPDF_SETPERMISSION
  2296. HPDF_SETENCRYPTIONMODE
  2297. HPDF_SETCOMPRESSIONMODE
  2298. HPDF_FONT_MEASURETEXT
  2299. HPDF_PAGE_GETWIDTH
  2300. HPDF_PAGE_GETHEIGHT
  2301. HPDF_PAGE_TEXTWIDTH
  2302. HPDF_PAGE_GETCURRENTFONT
  2303. HPDF_PAGE_MEASURETEXT
  2304. HPDF_PAGE_GETRGBFILL
  2305. HPDF_PAGE_GETCURRENTFONTSIZE
  2306. HPDF_PAGE_SETLINEWIDTH
  2307. HPDF_PAGE_SETDASH
  2308. HPDF_PAGE_MOVETO
  2309. HPDF_PAGE_LINETO
  2310. HPDF_PAGE_CLOSEPATH
  2311. HPDF_PAGE_RECTANGLE
  2312. HPDF_PAGE_CONCAT
  2313. HPDF_PAGE_SETCHARSPACE
  2314. HPDF_PAGE_SETWORDSPACE
  2315. HPDF_PAGE_SETHORIZONTALSCALLING
  2316. HPDF_PAGE_SETTEXTLEADING
  2317. HPDF_PAGE_SETTEXTRISE
  2318. HPDF_PAGE_STROKE
  2319. HPDF_PAGE_CLOSEPATHSTROKE
  2320. HPDF_PAGE_FILL
  2321. HPDF_PAGE_FILLSTROKE
  2322. HPDF_PAGE_ENDPATH
  2323. HPDF_PAGE_BEGINTEXT
  2324. HPDF_PAGE_ENDTEXT
  2325. HPDF_PAGE_SETFONTANDSIZE
  2326. HPDF_PAGE_SETTEXTRENDERINGMODE
  2327. HPDF_PAGE_MOVETEXTPOS
  2328. HPDF_PAGE_MOVETONEXTLINE
  2329. HPDF_PAGE_SETRGBFILL
  2330. HPDF_PAGE_SETRGBSTROKE
  2331. HPDF_PAGE_ELLIPSE
  2332. HPDF_PAGE_DRAWIMAGE
  2333. HPDF_PAGE_TEXTRECT
  2334. HPDF_PAGE_TEXTOUT
  2335. HPDF_PAGE_SETTEXTMATRIX
  2336. HPDF_PAGE_SHOWTEXT
  2337. HPDF_PAGE_CURVETO
  2338. GDIPCLONEBITMAPAREAI
  2339. GDIPLUS
  2340. PDFXGDIPCLONEBITMAPAREAI
  2341. _STRREV
  2342. MSVCRT20
  2343. XFCREVERTSTRING    
  2344. CPDFAUTHOR
  2345. _STAT
  2346. HPDF_SETINFOATTR    
  2347. PDFHANDLE    
  2348. CPDFTITLE
  2349. CPDFSUBJECT
  2350. CPDFKEYWORDS
  2351. CPDFCREATOR
  2352. STRING
  2353. INTEGER
  2354. STRING
  2355. STRING
  2356. STRING
  2357.  Bold
  2358.  Italic
  2359. BOOLEAN
  2360. INTEGER
  2361. STRING
  2362. LCFONTNAME
  2363. LNSTYLE
  2364. LNPOS0
  2365. AFONTSSYMBOL    
  2366. LCRETORNO
  2367. LCFONTREGULAR
  2368. LCFONTSTYLE
  2369. CTEXTSTYLE
  2370. LBRESULT
  2371. OFONTS
  2372. COUNT
  2373. GETKEY
  2374. LNREPLCOUNT
  2375. LNPOS
  2376. AFONTSREPLACED
  2377. LCKEY    
  2378. LCNEWFONT
  2379. FINDFONTFILENAME
  2380. GETDEFAULTFONT
  2381. ITEM=
  2382. Could not load the library LIBHPDF.DLL .C
  2383. The process can't continue. Make sure that you have the PDF library available, and that FoxyPreviewer is installed in a folder that has READ/WRITE access.
  2384. Error
  2385. UPDATECODEPAGE    
  2386. PDFHANDLE
  2387. LSTARTED
  2388. LOBJTYPEMODE
  2389. GETWATERMARK
  2390. LLERROR
  2391. HPDF_NEW
  2392. CANCELREPORT
  2393. _STAT
  2394. HPDF_SETCOMPRESSIONMODE
  2395. HPDF_SETPAGEMODE    
  2396. NPAGEMODE
  2397. WRITEPDFINFORMATION
  2398. ENCRYPTPDF
  2399. CLEARPDFERRORS
  2400. ADDBLANKPAGE
  2401. HPDF_New
  2402. HPDF_Free
  2403. HPDF_SaveToFile
  2404. HPDF_GetError
  2405. HPDF_ResetError
  2406. HPDF_SetPageMode
  2407. HPDF_GetCurrentPage
  2408. HPDF_AddPage
  2409. HPDF_Page_SetWidth
  2410. HPDF_Page_SetHeight
  2411. HPDF_GetFont
  2412. HPDF_LoadTTFontFromFile
  2413. HPDF_GetEncoder
  2414. HPDF_GetCurrentEncoder
  2415. HPDF_SetCurrentEncoder
  2416. HPDF_Encoder_GetType
  2417. HPDF_Encoder_GetByteType
  2418. HPDF_Encoder_GetUnicode
  2419. HPDF_Encoder_GetWritingMode
  2420. HPDF_UseJPEncodings
  2421. HPDF_UseKREncodings
  2422. HPDF_UseCNSEncodings
  2423. HPDF_UseCNTEncodings
  2424. HPDF_LoadPngImageFromFile
  2425. HPDF_LoadJpegImageFromFile
  2426. HPDF_Image_GetWidth
  2427. HPDF_Image_GetHeight
  2428. HPDF_SetInfoAttr
  2429. HPDF_SetPassword
  2430. HPDF_SetPermission
  2431. HPDF_SetEncryptionMode
  2432. HPDF_SetCompressionMode
  2433. HPDF_Font_MeasureText
  2434. HPDF_Page_GetWidth
  2435. HPDF_Page_GetHeight
  2436. HPDF_Page_TextWidth
  2437. HPDF_Page_GetCurrentFont
  2438. HPDF_Page_MeasureText
  2439. HPDF_Page_GetRGBFill
  2440. HPDF_Page_GetCurrentFont
  2441. HPDF_Page_GetCurrentFontSize
  2442. HPDF_Page_SetLineWidth
  2443. HPDF_Page_SetDash
  2444. HPDF_Page_MoveTo
  2445. HPDF_Page_LineTo
  2446. HPDF_Page_ClosePath
  2447. HPDF_Page_Rectangle
  2448. HPDF_Page_Concat
  2449. HPDF_Page_SetCharSpace
  2450. HPDF_Page_SetWordSpace
  2451. HPDF_Page_SetHorizontalScalling
  2452. HPDF_Page_SetTextLeading
  2453. HPDF_Page_SetTextRise
  2454. HPDF_Page_Stroke
  2455. HPDF_Page_ClosePathStroke
  2456. HPDF_Page_Fill
  2457. HPDF_Page_FillStroke
  2458. HPDF_Page_EndPath
  2459. HPDF_Page_BeginText
  2460. HPDF_Page_EndText
  2461. HPDF_Page_SetFontAndSize
  2462. HPDF_Page_SetTextRenderingMode
  2463. HPDF_Page_MoveTextPos
  2464. HPDF_Page_MoveToNextLine
  2465. HPDF_Page_SetRGBFill
  2466. HPDF_Page_SetRGBStroke
  2467. HPDF_Page_Ellipse
  2468. HPDF_Page_DrawImage
  2469. HPDF_Page_TextRect
  2470. HPDF_Page_TextOut
  2471. HPDF_Page_SetTextMatrix
  2472. HPDF_Page_ShowText
  2473. HPDF_Page_CurveTo
  2474. INTEGER
  2475. LENCRYPTDOCUMENT
  2476. CMASTERPASSWORD
  2477. CUSERPASSWORD
  2478. HPDF_SETPASSWORD    
  2479. PDFHANDLE
  2480. LNPERMIT    
  2481. LCANPRINT
  2482. LCANEDIT
  2483. LCANCOPY
  2484. LCANADDNOTES
  2485. _STAT
  2486. HPDF_SETPERMISSION
  2487. NENCRIPTIONLEVEL
  2488. HPDF_SETENCRYPTIONMODE0
  2489. LDEFAULTMODE
  2490. LNWIDTH
  2491. LNHEIGHT
  2492. GETPAGEWIDTH
  2493. GETPAGEHEIGHT
  2494. NPAGEHEIGHT
  2495. NPAGEWIDTH
  2496. OPAGE
  2497. HPDF_ADDPAGE    
  2498. PDFHANDLE
  2499. _STAT
  2500. HPDF_PAGE_SETWIDTH
  2501. HPDF_PAGE_SETHEIGHT
  2502. _CWMPICTURE
  2503. _NWMW
  2504. _NWMH
  2505. PROCESSPICTURES
  2506. _NWMY
  2507. _NWMXo
  2508. Courier
  2509. Courier
  2510. Courier-Bold
  2511. Courier-Bold
  2512. Courier-Oblique
  2513. Courier-Oblique
  2514. Courier-BoldOblique
  2515. Courier-BoldOblique
  2516. Helvetica
  2517. Helvetica
  2518. Helvetica-Bold
  2519. Helvetica-Bold
  2520. Helvetica-Oblique
  2521. Helvetica-Oblique
  2522. Helvetica-BoldOblique
  2523. Helvetica-BoldOblique
  2524. Times-Roman
  2525. Times-Roman
  2526. Times-Bold
  2527. Times-Bold
  2528. Times-Italic
  2529. Times-Italic
  2530. Times-BoldItalic
  2531. Times-BoldItalic
  2532. Symbol
  2533. Symbol
  2534. ZapfDingbats
  2535. ZapfDingbats
  2536. OFONTS
  2537. STRING
  2538. STRING
  2539. STRING
  2540. SOFTWARE\Microsoft\Windows\CurrentVersion\Fonts
  2541. Software\Microsoft\Windows NT\CurrentVersion\Fonts6
  2542. Registry
  2543. Fonts\
  2544.  (TrueType)
  2545. Fonts\
  2546. Negrito
  2547. Italic
  2548. negrita
  2549. Italic
  2550. cursiva
  2551. Italic
  2552. Italique
  2553. Fonts\
  2554.  (TrueType)
  2555. LCFONTNAME
  2556. LCFILENAME
  2557. LCFOLDER
  2558. THIS    
  2559. OREGISTRY
  2560. CLASSLIBRARY
  2561. _CWINFOLDER
  2562. READREGISTRYSTRING
  2563. LNLANGID
  2564. NSYSTEMLANGID
  2565. LURETURN
  2566. HPDF_LOADTTFONTFROMFILE    
  2567. PDFHANDLE
  2568. LEMBEDFONT
  2569. LOEXC
  2570. CLEARPDFERRORS
  2571. STRING
  2572. INTEGER
  2573. INTEGER
  2574. GPBITMAP
  2575. ffc\_gdiplus.vcx
  2576. GpBitmap
  2577. _GdiPlus.vcx
  2578. GPBITMAP
  2579. ffc\_gdiplus.vcx
  2580. GpBitmap
  2581. _GdiPlus.vcx
  2582. image/png
  2583. image/jpeg6
  2584. LCFILE
  2585. TNWIDTH
  2586. TNHEIGHT
  2587. TLFILE
  2588. LOBMP
  2589. CREATEFROMFILE
  2590. IMAGEHEIGHT
  2591. IMAGEWIDTH
  2592. LHBITMAP
  2593. LNSTATUS
  2594. PDFXGDIPCLONEBITMAPAREAI
  2595. PIXELFORMAT    
  2596. GETHANDLE
  2597. LNHANDLE    
  2598. LOCROPPED    
  2599. SETHANDLE
  2600. SETRESOLUTION
  2601. HORIZONTALRESOLUTION
  2602. VERTICALRESOLUTION
  2603. LCEXT    
  2604. LCENCODER
  2605. LCCROPPEDFILE
  2606. GETTEMPFILE
  2607. SAVETOFILE
  2608. HPDF_LOADPNGIMAGEFROMFILE    
  2609. PDFHANDLE
  2610. HPDF_LOADJPEGIMAGEFROMFILE-
  2611. STRING
  2612. NUMBER
  2613. NUMBER
  2614. INTEGER
  2615. STRING
  2616. INTEGER
  2617. STRING
  2618. LCTEXT
  2619. NWIDTH
  2620. LNANCHO
  2621. LCTEMP
  2622. LNLEN    
  2623. LCRETORNO
  2624. HPDF_PAGE_TEXTWIDTH
  2625. OPAGE
  2626. STRING
  2627. STRING
  2628. BOOLEAN
  2629. STRING
  2630. _TempDynamics
  2631. _TempDynamics
  2632. _TempDynamicsN
  2633. Empty
  2634. FIELD
  2635. SHAPE
  2636. PICTURE
  2637. FIELD
  2638. cValue
  2639. cExecWhen
  2640. cFontName
  2641. nFontSizeCC
  2642. nFontStyleCC
  2643. nPenRedCCCC
  2644. nPenGreenCCCC
  2645. nPenBlueCCCC
  2646. nPenRed
  2647. nPenGreen
  2648. nPenBlue
  2649. nFillRedCCCC
  2650. nFillGreenCCCC
  2651. nFillBlueCCCC
  2652. nFillRed
  2653. nFillGreen
  2654. nFillBlue
  2655. SHAPE
  2656. IMAGE
  2657. cExecWhen
  2658. nWidthCC
  2659. nHeightCC
  2660. Microsoft.VFP.Reporting.Builder.Rotate
  2661. nRotationDegreeCC
  2662. LCSTYLE
  2663. LCTYPE
  2664. LBRETURN
  2665. LCCURSOR
  2666. THIS    
  2667. ODYNAMICS
  2668. _TEMPDYNAMICS
  2669. EXECWHEN
  2670. SCRIPT
  2671. FNAME
  2672. FSIZE
  2673. FSTYLE
  2674. PENRGB
  2675. FILLRGB
  2676. WIDTH
  2677. HEIGHT
  2678. EXECUTEd
  2679. STRING
  2680. INTEGER
  2681. NUMBER
  2682. NUMBER
  2683. NUMBER
  2684. NUMBER
  2685. NUMBER
  2686. NUMBER
  2687. NUMBER
  2688. NUMBER
  2689. NUMBER
  2690. STRING
  2691. STRING
  2692. INTEGER
  2693. BOOLEAN
  2694. INTEGER
  2695. NUMBER
  2696. INTEGER
  2697. STRING
  2698. INTEGER
  2699. STRING
  2700. INTEGER
  2701. INTEGER
  2702. INTEGER
  2703. INTEGER
  2704. STRING
  2705. INTEGER
  2706. INTEGER
  2707. FIELD
  2708. cFontName
  2709. nFontSize
  2710. nFontStyle
  2711. cValue
  2712. nPenRed
  2713. nPenBlue
  2714. nPenGreen
  2715. nFillRed
  2716. nFillBlue
  2717. nFillGreen
  2718. nRotationDegree
  2719. NUMBER
  2720. LCFONTFACE
  2721. LIFONTSTYLE
  2722. LNFONTSIZE
  2723. LNPENRED
  2724. LNPENGREEN    
  2725. LNPENBLUE    
  2726. LNFILLRED
  2727. LNFILLGREEN
  2728. LNFILLBLUE
  2729. NLEFT
  2730. LCCONTENTS
  2731. LCFILLCHAR
  2732. LNOFFSET    
  2733. LBSTRETCH
  2734. LNCODEPAGE
  2735. NHEIGHT
  2736. NWIDTH
  2737. LCSTYLE
  2738. LNMODE
  2739. LCUSER
  2740. LCORIGCONTENTS
  2741. LNTIMES    
  2742. LCTABREPL
  2743. LRIGHTTOLEFT
  2744. XFCREVERTSTRING
  2745. LNOCURRENCES
  2746. LNANCHO
  2747. LNFONTHANDLE
  2748. LNALTO
  2749. LCUNDERLINETEXT
  2750. LNROTATE
  2751. LNCHARWIDTH
  2752. LDEFAULTMODE
  2753. _GOFP    
  2754. OLISTENER
  2755. CMAINALIAS
  2756. LCALIAS
  2757. LCMAINALIAS
  2758. LNREC
  2759. DBFRECNO
  2760. PROCESSDYNAMICS    
  2761. ODYNAMICS    
  2762. CFONTNAME    
  2763. NFONTSIZE
  2764. NFONTSTYLE
  2765. CVALUE
  2766. NPENRED
  2767. NPENBLUE    
  2768. NPENGREEN
  2769. NFILLRED    
  2770. NFILLBLUE
  2771. NFILLGREEN
  2772. NROTATIONDEGREE
  2773. LOEXC    
  2774. LNPENSIZE
  2775. LNPENPAT    
  2776. LNFILLPAT
  2777. LNOBJCONTTYPE
  2778. PROCESSSHAPES
  2779. NPAGEHEIGHT
  2780. GETFONTHANDLE
  2781. LCIMAGE
  2782. LNTXTW
  2783. LNTXTH
  2784. STRINGTOPIC
  2785. PROCESSPICTURES2
  2786. _STAT
  2787. HPDF_PAGE_BEGINTEXT
  2788. OPAGE
  2789. HPDF_PAGE_SETFONTANDSIZE
  2790. CTEXTSTYLE
  2791. HPDF_PAGE_TEXTWIDTH
  2792. HPDF_PAGE_GETCURRENTFONTSIZE
  2793. LNFONTHEIGHT2
  2794. PARSEUNDERLINETEXT
  2795. LUNDERLINE
  2796. HPDF_PAGE_SETRGBFILL
  2797. HPDF_PAGE_SETTEXTLEADING
  2798. LNLEN
  2799. LNCHARS
  2800. LNREALWIDTH
  2801. LCCURRTEXT
  2802. LCREMAININGTEXT
  2803. LNLINEHEIGHT
  2804. LNLINESAVAIL
  2805. LNCURRLINE
  2806. GETPARHEIGHT
  2807. NLINEHEIGHTRATIO
  2808. HPDF_FONT_MEASURETEXT
  2809. _STAT2
  2810. HPDF_PAGE_TEXTRECT
  2811. LNRAD
  2812. HPDF_PAGE_SETTEXTMATRIX
  2813. HPDF_PAGE_SHOWTEXT
  2814. HPDF_PAGE_ENDTEXT    
  2815. LLSUCCESS
  2816. INTEGER
  2817. INTEGER
  2818. INTEGER
  2819. INTEGER
  2820. INTEGER
  2821. INTEGER
  2822. NUMBER
  2823. NUMBER
  2824. NUMBER
  2825. NUMBER
  2826. INTEGER
  2827. INTEGER
  2828. INTEGER
  2829. INTEGER
  2830. STRING
  2831. INTEGER
  2832. INTEGER
  2833. lnObjectContinuationTypeb
  2834. STRING
  2835. INTEGER
  2836. BOOLEAN
  2837. BOOLEAN
  2838. BOOLEAN
  2839. BOOLEAN
  2840. BOOLEAN
  2841. INTEGER
  2842. INTEGER
  2843. INTEGER
  2844. SHAPE
  2845. nHeight
  2846. nWidth
  2847. NUMBER
  2848. NUMBER
  2849. NUMBER
  2850. NUMBER
  2851. NUMBER
  2852. NUMBER
  2853. LNFILLRED
  2854. LNFILLGREEN
  2855. LNFILLBLUE
  2856. LNPENRED
  2857. LNPENGREEN    
  2858. LNPENBLUE
  2859. NLEFT
  2860. NWIDTH
  2861. NHEIGHT
  2862. LNOFFSET    
  2863. LNPENSIZE
  2864. LNPENPAT    
  2865. LNFILLPAT
  2866. LCSTYLE
  2867. LNMODE
  2868. LNOBJECTCONTINUATIONTYPE
  2869. TLSKIPBORDER
  2870. LCDASH
  2871. NTOP2
  2872. LDECOMPOSERECT
  2873. LDOTOPLINE
  2874. LDOLEFTLINE
  2875. LDORIGHTLINE
  2876. LDOBOTTOMLINE
  2877. LINE_LNPENRED
  2878. LINE_LNPENGREEN
  2879. LINE_LNPENBLUE
  2880. PROCESSDYNAMICS    
  2881. ODYNAMICS
  2882. NPAGEHEIGHT
  2883. _STAT
  2884. HPDF_PAGE_SETRGBFILL
  2885. OPAGE
  2886. HPDF_PAGE_SETRGBSTROKE
  2887. HPDF_PAGE_SETLINEWIDTH
  2888. HPDF_PAGE_SETDASH
  2889. HPDF_PAGE_RECTANGLE
  2890. HPDF_PAGE_MOVETO
  2891. HPDF_PAGE_LINETO
  2892. HPDF_PAGE_CURVETO
  2893. HPDF_PAGE_ELLIPSE
  2894. HPDF_PAGE_STROKE
  2895. HPDF_PAGE_FILLSTROKE
  2896. PROCESSLINES
  2897. STRING
  2898. INTEGER
  2899. NUMBER
  2900. NUMBER
  2901. NUMBER
  2902. NUMBER
  2903. NUMBER
  2904. NUMBER
  2905. NUMBER
  2906. NUMBER
  2907. NUMBER
  2908. STRING
  2909. STRING
  2910. INTEGER
  2911. INTEGER
  2912. INTEGER
  2913. NUMBER
  2914. STRING
  2915. STRING
  2916. INTEGER
  2917. NUMBER
  2918. STRING
  2919. INTEGER
  2920. STRING
  2921. INTEGER
  2922. INTEGER
  2923. LABEL
  2924. nRotationDegree
  2925. 333333
  2926. NUMBER
  2927. LCFONTFACE
  2928. LIFONTSTYLE
  2929. LNFONTSIZE
  2930. LNPENRED
  2931. LNPENGREEN    
  2932. LNPENBLUE    
  2933. LNFILLRED
  2934. LNFILLGREEN
  2935. LNFILLBLUE
  2936. NLEFT
  2937. LCCONTENTS
  2938. LCFILLCHAR
  2939. LNOFFSET
  2940. NWIDTH
  2941. LNCODEPAGE
  2942. NHEIGHT    
  2943. LCPICTURE
  2944. LCSTYLE
  2945. LNMODE
  2946. LNALTO
  2947. LNTXTWIDTH
  2948. LNFONTHANDLE
  2949. LCUNDERLINETEXT
  2950. LNROTATE
  2951. LNCHARWIDTH
  2952. PROCESSDYNAMICS    
  2953. ODYNAMICS
  2954. NROTATIONDEGREE    
  2955. LNPENSIZE
  2956. LNPENPAT    
  2957. LNFILLPAT
  2958. PROCESSSHAPES
  2959. NPAGEHEIGHT
  2960. GETFONTHANDLE
  2961. LCIMAGE
  2962. LNTXTW
  2963. LNTXTH
  2964. STRINGTOPIC
  2965. PROCESSPICTURES2
  2966. CTEXTSTYLE
  2967. _STAT
  2968. HPDF_PAGE_BEGINTEXT
  2969. OPAGE
  2970. HPDF_PAGE_SETFONTANDSIZE
  2971. HPDF_PAGE_TEXTWIDTH
  2972. HPDF_PAGE_SETRGBSTROKE
  2973. HPDF_PAGE_SETRGBFILL
  2974. LUNDERLINE
  2975. LCORIGCONTENTS
  2976. LNPARAG
  2977. LNPARHEIGHT
  2978. LCPAR
  2979. LNPARTOP
  2980. LNALIGNMODE
  2981. LNPARWIDTH
  2982. GETPARHEIGHT
  2983. HPDF_PAGE_TEXTRECT
  2984. LNRAD
  2985. HPDF_PAGE_SETTEXTMATRIX
  2986. HPDF_PAGE_SHOWTEXT
  2987. HPDF_PAGE_ENDTEXT.
  2988. NUMBER
  2989. NUMBER
  2990. NUMBER
  2991. NUMBER
  2992. STRING
  2993. NUMBER
  2994. INTEGER
  2995. INTEGER
  2996. STRING
  2997. STRING
  2998. STRING
  2999. INTEGER
  3000. GPIMAGE
  3001. FFC\_GdiPlus.vcx
  3002. GpImage
  3003. _GdiPlus.vcx
  3004. image/png
  3005. IMAGE
  3006. Image
  3007. NLEFT
  3008. NWIDTH
  3009. NHEIGHT
  3010. LCCONTENTS
  3011. GDIPLUSIMAGE
  3012. LNOFFSET
  3013. LIPICTUREMODE
  3014. LCSTYLE
  3015. LCFILE
  3016. LCFILE2
  3017. LNHANDLE
  3018. NPAGEHEIGHT
  3019. LNPICWIDTH
  3020. LNPICHEIGHT
  3021. GETTEMPFILE
  3022. LOIMAGE    
  3023. SETHANDLE
  3024. IMAGEWIDTH
  3025. IMAGEHEIGHT
  3026. SAVETOFILE
  3027. HPDF_LOADPNGIMAGEFROMFILE    
  3028. PDFHANDLE
  3029. GETPICTUREHANDLE    
  3030. CROPIMAGE
  3031. _STAT
  3032. HPDF_PAGE_DRAWIMAGE
  3033. OPAGE
  3034. LOVFPIMG
  3035. PICTURE
  3036. WIDTH
  3037. HEIGHT
  3038. LNHORFACTOR
  3039. LNVERTFACTOR
  3040. LNRESIZEFACTOR
  3041. LNISOWIDTH
  3042. LNISOHEIGHTu
  3043. INTEGER
  3044. INTEGER
  3045. INTEGER
  3046. NUMBER
  3047. NUMBER
  3048. NUMBER
  3049. NUMBER
  3050. INTEGER
  3051. NUMBER
  3052. INTEGER
  3053. STRING
  3054. STRING
  3055. LNPENRED
  3056. LNPENGREEN    
  3057. LNPENBLUE
  3058. NLEFT
  3059. NWIDTH
  3060. NHEIGHT    
  3061. LNPENSIZE
  3062. LNOFFSET
  3063. LNPENPAT
  3064. LCSTYLE
  3065. LCDASH
  3066. _STAT
  3067. HPDF_PAGE_SETRGBSTROKE
  3068. OPAGE
  3069. NPAGEHEIGHT
  3070. HPDF_PAGE_SETDASH
  3071. HPDF_PAGE_SETLINEWIDTH
  3072. HPDF_PAGE_MOVETO
  3073. HPDF_PAGE_LINETO
  3074. HPDF_PAGE_STROKEj
  3075. STRING
  3076. STRING
  3077. INTEGER
  3078. INTEGER
  3079. STRING
  3080. INTEGER
  3081. STRING
  3082. Collection
  3083. Image
  3084. GpBitmap
  3085. _GdiPlus.vcx
  3086. image/jpeg
  3087. GPBITMAP
  3088. GpBitmap
  3089. _GdiPlus.vcx
  3090. GPBITMAP
  3091. STRING
  3092. STRING
  3093. GpBitmap
  3094. _GdiPlus.vcx
  3095. GPBITMAP
  3096. \ffc\_Gdiplus.vcx
  3097. GpBitmap
  3098. _GdiPlus.vcx
  3099. GPGRAPHICS
  3100. \ffc\_Gdiplus.vcx
  3101. GpGraphics
  3102. _GdiPlus.vcx
  3103. image/png
  3104. LCINTERNALNAME
  3105. LCEXTERNALNAME
  3106. LNPICWIDTH
  3107. LNPICHEIGHT
  3108. LCFILESTREAM
  3109. LNHANDLE
  3110. LCEXTENSION
  3111. OPICTUREHANDLES
  3112. GETKEY
  3113. LOEXC
  3114. LOVFPIMG
  3115. LCFILE
  3116. PICTURE
  3117. GETTEMPFILE
  3118. LOIMAGE
  3119. CREATEFROMFILE
  3120. SETRESOLUTION
  3121. WIDTH
  3122. HEIGHT
  3123. SAVETOFILE
  3124. FILESIZE
  3125. HPDF_LOADJPEGIMAGEFROMFILE    
  3126. PDFHANDLE
  3127. LOBMPTMP
  3128. IMAGEWIDTH
  3129. IMAGEHEIGHT
  3130. ISPIXELALPHA
  3131. GETPIXEL
  3132. HPDF_LOADPNGIMAGEFROMFILE
  3133. CLEARPDFERRORS
  3134. LOBMP2
  3135. LCFILE2
  3136. LOBMP3
  3137. CREATE
  3138. HORIZONTALRESOLUTION
  3139. VERTICALRESOLUTION
  3140. LOGFX
  3141. CREATEFROMIMAGE
  3142. CLEAR
  3143. DRAWIMAGEAT
  3144. ITEMj
  3145. TNARGB
  3146. TLALPHAISUSEDk
  3147. REPORTLISTENER
  3148. Invalid parameter. Report listener not available
  3149. Error
  3150. GPIMAGE
  3151. \FFC\_Gdiplus.vcx
  3152. image/
  3153. %  - 
  3154. 100%  - CCC
  3155. TOLISTENER
  3156. TCOUTPUTDBF
  3157. TNWIDTH
  3158. TNHEIGHT
  3159. OACTIVELISTENER    
  3160. QUIETMODE
  3161. LNSECS
  3162. DOFOXYTHERM
  3163. _GOFP
  3164. _INITSTATUSTEXT
  3165. LISTENERDATASESSION
  3166. LNSELECT
  3167. LLEXIT
  3168. LDEFAULTMODE
  3169. NPAGEWIDTH
  3170. NPAGEHEIGHT
  3171. LNPGFROM
  3172. LNPGTO
  3173. _CLAUSENRANGEFROM
  3174. _CLAUSENRANGETO
  3175. NLINEHEIGHTRATIO
  3176. NPDFLINEHEIGHTRATIO
  3177. LUSINGWATERMARK
  3178. LCTEMPFILE
  3179. LCTYPE
  3180. LOBMP
  3181. CWATERMARKIMAGE
  3182. GETTEMPFILE
  3183. OWATERMARKBMP
  3184. SAVETOFILE
  3185. _CWMPICTURE
  3186. LNWIDTH
  3187. LNHEIGHT
  3188. NWATERMARKWIDTHRATIO
  3189. NWATERMARKHEIGHTRATIO
  3190. _NWMX
  3191. _NWMY
  3192. _NWMW
  3193. _NWMH
  3194. BEFOREREPORT
  3195. RENDER
  3196. FRXRECNO
  3197. WIDTH
  3198. HEIGHT
  3199. CONTTYPE
  3200. UNCONTENTS    
  3201. LNPERCENT
  3202. LNLASTPERCENT
  3203. LNDELAY    
  3204. LNTOTRECS
  3205. LNREC
  3206. _SECONDSTEXT
  3207. _RUNSTATUSTEXT
  3208. AFTERREPORT
  3209. UNLOADREPORT
  3210. GPRECTANGLE
  3211. \ffc\_Gdiplus.vcx
  3212. GPRectangle
  3213. _Gdiplus.vcx
  3214. GPFont
  3215. _Gdiplus.vcx
  3216. GPGRAPHICS
  3217. \ffc\_Gdiplus.vcx
  3218. GpGraphics
  3219. _Gdiplus.vcx
  3220. 333333
  3221. GPSIZE
  3222. \ffc\_Gdiplus.vcx
  3223. TCTEXT
  3224. TCFONTNAME
  3225. TNSIZE
  3226. TCSTYLE
  3227. TNLEFT
  3228. TNTOP
  3229. TNWIDTH
  3230. TNHEIGHT
  3231. LNFACTOR
  3232. LOFONT
  3233. LNCHARS
  3234. LNLINES
  3235. LNHEIGHT
  3236. LNWIDTH
  3237. LORECT
  3238. CREATE
  3239. LOGFX
  3240. LDEFAULTMODE    
  3241. SETHANDLE
  3242. ISSUCCESSOR
  3243. SHAREDGDIPLUSGRAPHICS
  3244. GDIPLUSGRAPHICS
  3245. CREATEFROMHWND
  3246. PAGEUNIT    
  3247. PAGESCALE
  3248. LOSIZE
  3249. MEASURESTRINGA    
  3250. GDIPRECTF>
  3251. GPRECTANGLE
  3252. \ffc\_Gdiplus.vcx
  3253. GPRectangle
  3254. GPGRAPHICS
  3255. ffc\_gdiplus.vcx
  3256. gpGraphics
  3257. _gdiplus.vcx
  3258. 333333
  3259. GPFONT
  3260. ffc\_gdiplus.vcx
  3261. gpFont
  3262. _gdiplus.vcx
  3263. GPSTRINGFORMAT
  3264. ffc\_gdiplus.vcx
  3265. gpStringFormat
  3266. _gdiplus.vcx
  3267. GPCOLOR
  3268. ffc\_gdiplus.vcx
  3269. gpColor
  3270. _gdiplus.vcx
  3271. GPSOLIDBRUSH
  3272. ffc\_gdiplus.vcx
  3273. gpSolidBrush
  3274. _gdiplus.vcx
  3275. GPSIZE
  3276. ffc\_gdiplus.vcx
  3277. GPBITMAP
  3278. ffc\_gdiplus.vcx
  3279. gpBitmap
  3280. _gdiplus.vcx
  3281. GPGRAPHICS
  3282. ffc\_gdiplus.vcx
  3283. gpGraphics
  3284. _gdiplus.vcx
  3285. 333333
  3286. image/png
  3287. TCSTRING
  3288. TCFONT
  3289. TNSIZE
  3290. TNALIGN
  3291. LNFACTOR
  3292. LORECT
  3293. LOGFX0
  3294. CREATEFROMHWND
  3295. PAGEUNIT    
  3296. PAGESCALE
  3297. LOFONT
  3298. CREATE
  3299. LOSTRFMT
  3300. LOCOLOR
  3301. LOBRUSH
  3302. LOSIZE
  3303. MEASURESTRINGA    
  3304. GDIPRECTF
  3305. LOBMP
  3306. LOGFX
  3307. CREATEFROMIMAGE
  3308. CLEAR
  3309. DRAWSTRINGA
  3310. LCTEMPFILE
  3311. GETTEMPFILE
  3312. SAVETOFILE
  3313. TCFILE
  3314. TNLEFT
  3315. TNTOP
  3316. TNWIDTH
  3317. TNHEIGHT
  3318. LNHANDLE
  3319. HPDF_LOADPNGIMAGEFROMFILE
  3320. THIS    
  3321. PDFHANDLE
  3322. _STAT
  3323. HPDF_PAGE_DRAWIMAGE
  3324. OPAGEa
  3325. PDFx error in CC
  3326. Error code : 
  3327. Description: 
  3328. Page: 
  3329. Object: 
  3330. Press 'Retry' to debug the application.
  3331. Error
  3332. PDFx error in CC
  3333. Error code  : 
  3334. Description : 
  3335. Object: 
  3336. Error
  3337. TNSTATUS
  3338. _STAT
  3339. LNHPDF_ERR
  3340. LCHEX
  3341. HPDF_GETERROR    
  3342. PDFHANDLE
  3343. HPDF_RESETERROR
  3344. LSHOWERRORS    
  3345. STARTMODE
  3346. LNOPTION
  3347. _ERRORINFO
  3348. NCURRENTPAGE
  3349. COBJECTTORENDER
  3350. Internal error. Data consistency was lost.
  3351. Internal error. Data consistency was lost.
  3352. Internal error. Data consistency was lost.
  3353. Data length > HPDF_LIMIT_MAX_STRING_LEN.
  3354. Cannot get pallet data from PNG image.
  3355. Dictionary elements > HPDF_LIMIT_MAX_DICT_ELEMENT
  3356. Internal error. Data consistency was lost.
  3357. Internal error. Data consistency was lost.
  3358. Internal error. Data consistency was lost.
  3359. HPDF_SetEncryptMode() or HPDF_SetPermission() called before password set.
  3360. Internal error. Data consistency was lost.
  3361. Tried to re-register a registered font.
  3362. Cannot register a character to the Japanese word wrap characters list.
  3363. . Tried to set the owner password to NULL. . Owner and user password are the same.
  3364. Internal error. Data consistency was lost.
  3365. Stack depth > HPDF_LIMIT_MAX_GSTATE.
  3366. Memory allocation failed.
  3367. File processing failed. (Detailed code is set.)
  3368. Cannot open a file. (Detailed code is set.)
  3369. Tried to load a font that has been registered.
  3370. . Font-file format is invalid. . Internal error. Data consistency was lost.
  3371. Cannot recognize header of afm file.
  3372. Specified annotation handle is invalid.
  3373. Bit-per-component of a image which was set as mask-image is invalid.
  3374. Cannot recognize char-matrics-data of afm file.
  3375. . Invalid color_space parameter of HPDF_LoadRawImage.  . Color-space of a image which was set as mask-image is invalid.  . Invoked function invalid in present color-space.
  3376. Invalid value set when invoking HPDF_SetCommpressionMode().
  3377. An invalid date-time value was set.
  3378. An invalid destination handle was set.
  3379. An invalid document handle was set.
  3380. Function invalid in the present state was invoked.
  3381. An invalid encoder handle was set.
  3382. Combination between font and encoder is wrong.
  3383. An Invalid encoding name is specified.
  3384. Encryption key length is invalid.
  3385. . An invalid font handle was set.  . Unsupported font format.
  3386. Internal error. Data consistency was lost.
  3387. Font with the specified name is not found.
  3388. Unsupported image format.
  3389. Unsupported image format.
  3390. Cannot read a postscript-name from an afm file.
  3391. . An invalid object is set.  . Internal error. Data consistency was lost.
  3392. Internal error. Data consistency was lost.
  3393. Invoked HPDF_Image_SetColorMask() against the image-object which was set a mask-image.
  3394. An invalid outline-handle was specified.
  3395. An invalid page-handle was specified.
  3396. An invalid pages-handle was specified. (internal error)
  3397. An invalid value is set.
  3398. Invalid PNG image format.
  3399. Internal error. Data consistency was lost.
  3400. Internal error. _FILE_NAME entry for delayed loading is missing.
  3401. Invalid .TTC file format.
  3402. Index parameter > number of included fonts.
  3403. Cannot read a width-data from an afm file.
  3404. Internal error. Data consistency was lost.
  3405. Error returned from PNGLIB while loading image.
  3406. Internal error. Data consistency was lost.
  3407. Internal error. Data consistency was lost.
  3408. Internal error. Data consistency was lost.
  3409. Internal error. Data consistency was lost.
  3410. Internal error. Data consistency was lost.
  3411. There are no graphics-states to be restored.
  3412. Internal error. Data consistency was lost.
  3413. The current font is not set.
  3414. An invalid font-handle was specified.
  3415. An invalid font-size was set.
  3416. See Graphics mode.
  3417. Internal error. Data consistency was lost.
  3418. Specified value is not multiple of .
  3419. An invalid page-size was set.
  3420. An invalid image-handle was set.
  3421. The specified value is out of range.
  3422. The specified value is out of range.
  3423. Unexpected EOF marker was detected.
  3424. Internal error. Data consistency was lost.
  3425. The length of the text is too long.
  3426. Function not executed because of other errors.
  3427. Font cannot be embedded. (license restriction)
  3428. Unsupported ttf format. (cannot find unicode cmap)
  3429. Unsupported ttf format.
  3430. Unsupported ttf format. (cannot find a necessary table)
  3431. Internal error. Data consistency was lost.
  3432. . Library not configured to use PNGLIB.  . Internal error. Data consistency was lost.
  3433. Unsupported JPEG format.
  3434. Failed to parse .PFB file.
  3435. Internal error. Data consistency was lost.
  3436. Error while executing ZLIB function.
  3437. An invalid page index was passed.
  3438. An invalid URI was set.
  3439. An invalid page-layout was set.
  3440. An invalid page-mode was set.
  3441. An invalid page-num-style was set.
  3442. An invalid icon was set.
  3443. An invalid border-style was set.
  3444. An invalid page-direction was set.
  3445. An invalid font-handle was specified.
  3446. HPDF_ARRAY_COUNT_ERR                      
  3447. HPDF_ARRAY_ITEM_NOT_FOUND                 
  3448. HPDF_ARRAY_ITEM_UNEXPECTED_TYPE           
  3449. HPDF_BINARY_LENGTH_ERR                    
  3450. HPDF_CANNOT_GET_PALLET                    
  3451. HPDF_DICT_COUNT_ERR                       
  3452. HPDF_DICT_ITEM_NOT_FOUND                  
  3453. HPDF_DICT_ITEM_UNEXPECTED_TYPE            
  3454. HPDF_DICT_STREAM_LENGTH_NOT_FOUND         
  3455. HPDF_DOC_ENCRYPTDICT_NOT_FOUND            
  3456. HPDF_DOC_INVALID_OBJECT                   
  3457. HPDF_DUPLICATE_REGISTRATION               
  3458. HPDF_EXCEED_JWW_CODE_NUM_LIMIT            
  3459. HPDF_ENCRYPT_INVALID_PASSWORD             
  3460. HPDF_ERR_UNKNOWN_CLASS                    
  3461. HPDF_EXCEED_GSTATE_LIMIT                  
  3462. HPDF_FAILD_TO_ALLOC_MEM                   
  3463. HPDF_FILE_IO_ERROR                        
  3464. HPDF_FILE_OPEN_ERROR                      
  3465. HPDF_FONT_EXISTS                          
  3466. HPDF_FONT_INVALID_WIDTHS_TABLE            
  3467. HPDF_INVALID_AFM_HEADER                   
  3468. HPDF_INVALID_ANNOTATION                   
  3469. HPDF_INVALID_BIT_PER_COMPONENT            
  3470. HPDF_INVALID_CHAR_MATRICS_DATA            
  3471. HPDF_INVALID_COLOR_SPACE                  
  3472. HPDF_INVALID_COMPRESSION_MODE             
  3473. HPDF_INVALID_DATE_TIME                    
  3474. HPDF_INVALID_DESTINATION                  
  3475. HPDF_INVALID_DOCUMENT                     
  3476. HPDF_INVALID_DOCUMENT_STATE               
  3477. HPDF_INVALID_ENCODER                      
  3478. HPDF_INVALID_ENCODER_TYPE                 
  3479. HPDF_INVALID_ENCODING_NAME                
  3480. HPDF_INVALID_ENCRYPT_KEY_LEN              
  3481. HPDF_INVALID_FONTDEF_DATA                 
  3482. HPDF_INVALID_FONTDEF_TYPE                 
  3483. HPDF_INVALID_FONT_NAME                    
  3484. HPDF_INVALID_IMAGE                        
  3485. HPDF_INVALID_JPEG_DATA                    
  3486. HPDF_INVALID_N_DATA                       
  3487. HPDF_INVALID_OBJECT                       
  3488. HPDF_INVALID_OBJ_ID                       
  3489. HPDF_INVALID_OPERATION                    
  3490. HPDF_INVALID_OUTLINE                      
  3491. HPDF_INVALID_PAGE                         
  3492. HPDF_INVALID_PAGES                        
  3493. HPDF_INVALID_PARAMETER                    
  3494. HPDF_INVALID_PNG_IMAGE                    
  3495. HPDF_INVALID_STREAM                       
  3496. HPDF_MISSING_FILE_NAME_ENTRY              
  3497. HPDF_INVALID_TTC_FILE                     
  3498. HPDF_INVALID_TTC_INDEX                    
  3499. HPDF_INVALID_WX_DATA                      
  3500. HPDF_ITEM_NOT_FOUND                       
  3501. HPDF_LIBPNG_ERROR                         
  3502. HPDF_NAME_INVALID_VALUE                   
  3503. HPDF_NAME_OUT_OF_RANGE                    
  3504. HPDF_PAGE_INVALID_PARAM_COUNT             
  3505. HPDF_PAGES_MISSING_KIDS_ENTRY             
  3506. HPDF_PAGE_CANNOT_FIND_OBJECT              
  3507. HPDF_PAGE_CANNOT_GET_ROOT_PAGES           
  3508. HPDF_PAGE_CANNOT_RESTORE_GSTATE           
  3509. HPDF_PAGE_CANNOT_SET_PARENT               
  3510. HPDF_PAGE_FONT_NOT_FOUND                  
  3511. HPDF_PAGE_INVALID_FONT                    
  3512. HPDF_PAGE_INVALID_FONT_SIZE               
  3513. HPDF_PAGE_INVALID_GMODE                   
  3514. HPDF_PAGE_INVALID_INDEX                   
  3515. HPDF_PAGE_INVALID_ROTATE_VALUE            
  3516. HPDF_PAGE_INVALID_SIZE                    
  3517. HPDF_PAGE_INVALID_XOBJECT                 
  3518. HPDF_PAGE_OUT_OF_RANGE                    
  3519. HPDF_REAL_OUT_OF_RANGE                    
  3520. HPDF_STREAM_EOF                           
  3521. HPDF_STREAM_READLN_CONTINUE               
  3522. HPDF_STRING_OUT_OF_RANGE                  
  3523. HPDF_THIS_FUNC_WAS_SKIPPED                
  3524. HPDF_TTF_CANNOT_EMBEDDING_FONT            
  3525. HPDF_TTF_INVALID_CMAP                     
  3526. HPDF_TTF_INVALID_FOMAT                    
  3527. HPDF_TTF_MISSING_TABLE                    
  3528. HPDF_UNSUPPORTED_FONT_TYPE                
  3529. HPDF_UNSUPPORTED_FUNC                     
  3530. HPDF_UNSUPPORTED_JPEG_FORMAT              
  3531. HPDF_UNSUPPORTED_TYPE1_FONT               
  3532. HPDF_XREF_COUNT_ERR                       
  3533. HPDF_ZLIB_ERROR                           
  3534. HPDF_INVALID_PAGE_INDEX                   
  3535. HPDF_INVALID_URI                          
  3536. HPDF_PAGE_LAYOUT_OUT_OF_RANGE             
  3537. HPDF_PAGE_MODE_OUT_OF_RANGE               
  3538. HPDF_PAGE_NUM_STYLE_OUT_OF_RANGE          
  3539. HPDF_ANNOT_INVALID_ICON                   
  3540. HPDF_ANNOT_INVALID_BORDER_STYLE           
  3541. HPDF_PAGE_INVALID_DIRECTION               
  3542. HPDF_INVALID_FONT                         
  3543. HPDF_PAGE_INSUFFICIENT_SPACE              
  3544. HPDF_PAGE_INVALID_DISPLAY_TIME            
  3545. HPDF_PAGE_INVALID_TRANSITION_TIME         
  3546. HPDF_INVALID_PAGE_SLIDESHOW_TYPE          
  3547. HPDF_EXT_GSTATE_OUT_OF_RANGE              
  3548. HPDF_INVALID_EXT_GSTATE                   
  3549. HPDF_EXT_GSTATE_READ_ONLY                 
  3550. Unknown Error
  3551. TNSTATUS
  3552. HPDF_UNSUPPORTED_TYPE_FONT
  3553. HPDF_PAGELAYOUT_OUT_OF_RANGE
  3554. HPDF_PAGEMODE_OUT_OF_RANGE
  3555. HPDF_PAGENUM_STYLE_OUT_OF_RANGE*
  3556. TNSTATUS
  3557. _STAT2
  3558. _STAT
  3559. fffff
  3560. fffff
  3561. TNWIDTH
  3562. TNHEIGHT
  3563. CLEARPDFERRORS
  3564. LCFILE
  3565. GETPAGEIMG
  3566. LNHOR
  3567. LNVERT    
  3568. LCNEWFILE    
  3569. CROPIMAGE
  3570. PROCESSPICTURES-
  3571. REPORTLISTENER
  3572. LOLISTENER
  3573. OACTIVELISTENER
  3574. LNPAGE
  3575. NCURRENTPAGE
  3576. COMMANDCLAUSES    
  3577. RANGEFROM
  3578. APAGESIMGS
  3579. LNDEVICETYPE
  3580. LCFILE
  3581. LNHANDLE
  3582. GETTEMPFILE
  3583. OUTPUTPAGE[
  3584. LNHPDF_ERR
  3585. LCHEX
  3586. HPDF_GETERROR
  3587. THIS    
  3588. PDFHANDLE
  3589. HPDF_RESETERROR
  3590. LCDATA
  3591. LCRETURN
  3592. LCCONTENTS
  3593. LADUMMY
  3594. TCFONTSTYLE    
  3595. LCNEWFONT
  3596. LNPOS
  3597. AFONTSREPLACED
  3598. CDEFAULTFONT
  3599. LOBJTYPEMODE
  3600. OFOXYPREVIEWER
  3601. COMMANDCLAUSES
  3602. LOPENVIEWER
  3603. PREVIEW
  3604. TOFILE
  3605. CTARGETFILENAME    
  3606. CDESTFILE
  3607. LCDESTFILE
  3608. COUTPUTPATH
  3609. LCFILE
  3610. _REPORTLISTENER
  3611. CANCELREPORT    
  3612. QUIETMODE
  3613. LQUIETMODE
  3614. LEMBEDFONT
  3615. LPDFEMBEDFONTS    
  3616. LCANPRINT
  3617. LPDFCANPRINT
  3618. LCANEDIT
  3619. LPDFCANEDIT
  3620. LCANCOPY
  3621. LPDFCANCOPY
  3622. LCANADDNOTES
  3623. LPDFCANADDNOTES
  3624. LENCRYPTDOCUMENT
  3625. LPDFENCRYPTDOCUMENT
  3626. CMASTERPASSWORD
  3627. CPDFMASTERPASSWORD
  3628. CUSERPASSWORD
  3629. CPDFUSERPASSWORD
  3630. LSHOWERRORS
  3631. LPDFSHOWERRORS
  3632. CSYMBOLFONTSLIST
  3633. CPDFSYMBOLFONTSLIST
  3634. CPDFAUTHOR    
  3635. CPDFTITLE
  3636. CPDFSUBJECT
  3637. CPDFKEYWORDS
  3638. CPDFCREATOR
  3639. CDEFAULTFONT
  3640. CPDFDEFAULTFONT
  3641. NLINEHEIGHTRATIO
  3642. NPDFLINEHEIGHTRATIO    
  3643. CCODEPAGE
  3644. LNPGMODE
  3645. NPDFPAGEMODE    
  3646. NPAGEMODE
  3647. GETWATERMARK
  3648. UPDATECODEPAGE0
  3649. LCFILE
  3650. LASIZEARRAY
  3651. LCFONTFACE
  3652. LIFONTSTYLE
  3653. _LSCHINESE
  3654. _LTCHINESE
  3655. _LJAPANESE
  3656. _LKOREAN
  3657. LNFONTHANDLE
  3658. HPDF_GETFONT    
  3659. PDFHANDLE
  3660. CDEFAULTFONT
  3661. GETFONTSTYLENAME    
  3662. CCODEPAGE    
  3663. LCPDFFONT
  3664. SEARCHFONT
  3665. CLEARPDFERRORS
  3666. STRING
  3667. Italic
  3668. TISTYLE
  3669. LCFONTSTYLE
  3670. FP_TMP_
  3671. Collection
  3672. TCTYPE
  3673. LCFILE
  3674. _CTEMPFOLDER
  3675. OTEMPIMAGESCOLLECTION
  3676. FP_TMP_
  3677. TCFILE
  3678. _CTEMPFOLDER
  3679. GPBITMAP
  3680. \ffc\_gdiplus.vcx
  3681. GpBitmap
  3682. COLORMATRIX
  3683. PR_GdiplusHelper.Prg
  3684. GpAttrib
  3685. PR_GdiplusHelper.Prg
  3686. 333333
  3687. 333333
  3688. 333333
  3689. image/
  3690. OFOXYPREVIEWER
  3691. LCWATERMARKIMAGE
  3692. LNWATERMARKTYPE
  3693. LNWATERMARKTRANSPARENCY
  3694. LNWATERMARKWIDTHRATIO
  3695. LNWATERMARKHEIGHTRATIO
  3696. CWATERMARKIMAGE
  3697. NWATERMARKTYPE
  3698. NWATERMARKTRANSPARENCY
  3699. NWATERMARKWIDTHRATIO
  3700. NWATERMARKHEIGHTRATIO
  3701. LUSINGWATERMARK
  3702. LOBMP
  3703. CREATEFROMFILE
  3704. LOATT
  3705. LCMATRIX
  3706. COLORMATRIX
  3707. APPLYCOLORMATRIX
  3708. LCTEMPFILE
  3709. LCTYPE
  3710. GETTEMPFILE
  3711. SAVETOFILE
  3712. _CWMPICTURE
  3713. LNWIDTH
  3714. LNHEIGHT    
  3715. LNPGWIDTH
  3716. LNPGHEIGHT
  3717. GETPAGEWIDTH
  3718. GETPAGEHEIGHT
  3719. NPAGEHEIGHT
  3720. NPAGEWIDTH
  3721. _NWMX
  3722. _NWMY
  3723. _NWMW
  3724. _NWMH2
  3725. GetSystemDefaultLangID
  3726. kernel32
  3727. GETSYSTEMDEFAULTLANGID
  3728. KERNEL32
  3729. LNLANGID
  3730. NSYSTEMLANGID
  3731. STRING
  3732. EXCEPTION
  3733. OTEMPIMAGESCOLLECTION
  3734. LCITEM
  3735. LOEXC
  3736. GB-EUC-H
  3737. GB-EUC-V
  3738. GBK-EUC-H
  3739. GBK-EUC-V
  3740. CP936
  3741. EUC-CN
  3742. SimSun
  3743. GBK-EUC-H
  3744. ETEN-B5-H
  3745. ETEN-B5-V
  3746. CP950
  3747. MingLiU
  3748. ETen-B5-H
  3749. 90MS-RKSJ-H
  3750. 90MS-RKSJ-V
  3751. 90MSP-RKSJ-H
  3752. EUC-H
  3753. EUC-V
  3754. CP932
  3755. MS-Mincyo
  3756. 90ms-RKSJ-H
  3757. EUC-H
  3758. EUC-V
  3759. KSC-EUC-H
  3760. KSC-EUC-V
  3761. KSCMS-UHC-H
  3762. KSCMS-UHC-HW-H
  3763. KSCMS-UHC-HW-V
  3764. CP949
  3765. DotumChe
  3766. KSC-EUC-H
  3767. CP1256
  3768. ISO8859-6
  3769. LCCODEPAGE
  3770. THIS    
  3771. CCODEPAGE
  3772. _LSCHINESE
  3773. CDEFAULTFONT
  3774. _STAT
  3775. HPDF_USECNSFONTS    
  3776. PDFHANDLE
  3777. HPDF_USECNSENCODINGS
  3778. _LTCHINESE
  3779. HPDF_USECNTFONTS
  3780. HPDF_USECNTENCODINGS
  3781. _LJAPANESE
  3782. HPDF_USEJPFONTS
  3783. HPDF_USEJPENCODINGS
  3784. _LKOREAN
  3785. HPDF_USEKRFONTS
  3786. HPDF_USEKRENCODINGS
  3787. LRIGHTTOLEFT
  3788. DATASESSIONv
  3789. FRXDataSession
  3790. FRXDATASESSION
  3791. RESETTODEFAULT
  3792. RESETDATASESSION*
  3793. CURRENTDATASESSION
  3794. Error generating the PDF documentC
  3795. Error code : 
  3796. Description: 
  3797. Error
  3798. LDEFAULTMODE
  3799. LOBJTYPEMODE
  3800. WAITFORNEXTREPORT
  3801. COMMANDCLAUSES
  3802. NOPAGEEJECT
  3803. LCFILE
  3804. CTARGETFILENAME    
  3805. HPDF_FREE    
  3806. PDFHANDLE
  3807. LSTARTED
  3808. _STAT
  3809. HPDF_SAVETOFILE
  3810. _ERRORINFO
  3811. DELETETEMPIMAGES
  3812. NPGCOUNTER
  3813. APAGESIMGS
  3814. CTEXTSTYLE
  3815. NCURRENTPAGE
  3816. NDIVISIONFACTOR
  3817. NGLOBALPGCOUNTER
  3818. NLASTPAGEPROCCESED
  3819. OPICTUREHANDLES    
  3820. ODYNAMICS
  3821. OTEMPIMAGESCOLLECTION
  3822. LLSAVED
  3823. OFOXYPREVIEWER
  3824. LSAVED
  3825. LOPENVIEWER    
  3826. SHELLEXEC
  3827. OACTIVELISTENER
  3828. STRING
  3829. EXCEPTION
  3830. LABEL: 
  3831. FIELD: 
  3832. PICTURE: 
  3833. RECTANGLE
  3834. NFRXRECNO
  3835. NLEFT
  3836. NWIDTH
  3837. NHEIGHT
  3838. NOBJECTCONTINUATIONTYPE
  3839. CCONTENTSTOBERENDERED
  3840. GDIPLUSIMAGE
  3841. TWOPASSPROCESS
  3842. CURRENTPASS
  3843. LDEFAULTMODE
  3844. PAGENO
  3845. NGLOBALPGCOUNTER
  3846. NPGCOUNTER    
  3847. LNRANGETO
  3848. COMMANDCLAUSES
  3849. RANGETO    
  3850. RANGEFROM
  3851. NLEFT0
  3852. NTOP0
  3853. NWIDTH0
  3854. NHEIGHT0
  3855. LCCONTENTS
  3856. LOERROR
  3857. NPDFLEFT
  3858. NPDFTOP    
  3859. NPDFWIDTH
  3860. NPDFHEIGHT
  3861. LNPAGENO
  3862. SETFRXDATASESSION
  3863. NCURRENTPAGE
  3864. LSTARTED
  3865. STARTPDFDOCUMENT
  3866. NLASTPAGEPROCCESED
  3867. ADDBLANKPAGE
  3868. NPAGEWIDTH
  3869. NPAGEHEIGHT
  3870. OFRX    
  3871. LLSUCCESS
  3872. RESETDATASESSION
  3873. OBJTYPE
  3874. RESOID
  3875. COBJECTTORENDER
  3876. PROCESSLABEL
  3877. FONTFACE    
  3878. FONTSTYLE
  3879. FONTSIZE
  3880. PENRED
  3881. PENGREEN
  3882. PENBLUE
  3883. FILLRED    
  3884. FILLGREEN
  3885. FILLBLUE
  3886. FILLCHAR
  3887. OFFSET
  3888. PICTURE
  3889. STYLE
  3890. GETPICTUREFROMLISTENER
  3891. PROCESSFIELDS
  3892. STRETCH
  3893. _STAT2
  3894. LNWORDS
  3895. LNCHARWIDTH
  3896. LNLEN
  3897. LNCHARSALLOWED
  3898. LNCHARSTOINSERT
  3899. LCTEXT
  3900. CTEXTSTYLE
  3901. LNTXTWIDTH
  3902. PROCESSLINES
  3903. PENSIZE
  3904. PENPAT
  3905. PROCESSPICTURES
  3906. GENERAL
  3907. LCPICVAL
  3908. LCTMPIMG
  3909. FOXYGETIMAGE
  3910. _CTEMPFOLDER
  3911. LOEXC
  3912. CLEARPDFERRORS
  3913. PROCESSSHAPES
  3914. FILLPAT
  3915. Collection
  3916. Courier New
  3917. Courier
  3918. Courier New Bold
  3919. Courier-Bold
  3920. Courier New Italic
  3921. Courier-Oblique
  3922. Courier New Bold Italic
  3923. Courier-BoldOblique
  3924. Monotype Sorts
  3925. ZapfDingbats
  3926. Wingdings
  3927. ZapfDingbats
  3928. Arial
  3929. Helvetica
  3930. Arial Bold
  3931. Helvetica-Bold
  3932. Arial Italic
  3933. Helvetica-Oblique
  3934. Arial Bold Italic
  3935. Helvetica-BoldOblique
  3936. Times New Roman
  3937. Times-Roman
  3938. Times New Roman Bold
  3939. Times-Bold
  3940. Times New Roman Italic
  3941. Times-Italic
  3942. Times New Roman Bold Italic
  3943. Times-BoldItalic
  3944. Courier
  3945. Courier
  3946. Courier Bold
  3947. Courier-Bold
  3948. Courier Italic
  3949. Courier-Oblique
  3950. Courier Bold Italic
  3951. Courier-BoldOblique
  3952. Helvetica
  3953. Helvetica
  3954. Helvetica Bold
  3955. Helvetica-Bold
  3956. Helvetica Italic
  3957. Helvetica-Oblique
  3958. Helvetica Bold Italic
  3959. Helvetica-BoldOblique
  3960. Times-Roman
  3961. Times-Roman
  3962. Times-Roman Bold
  3963. Times-Bold
  3964. Times-Roman Italic
  3965. Times-Italic
  3966. Times-Roman Bold Italic
  3967. Times-BoldItalic
  3968. Consolev
  3969. Talkv
  3970. WING-DINGS
  3971. WEBDINGS
  3972. BARRAS BIRO
  3973. PF BARCODE 128
  3974. BARRA25
  3975. BARRA25I
  3976. BARRA39
  3977. BARRAEAN8
  3978. BARRAEAN13
  3979. BARRA128B
  3980. IDAUTOMATIONHC39M
  3981. PF BARCODE 39
  3982. PF EAN P36
  3983. PF EAN P72
  3984. PF INTERLEAVED 2 of 5
  3985. PF INTERLEAVED 2 OF 5 WIDE
  3986. PF INTERLEAVED 2 OF 5 TEXT
  3987. CODE 128AB
  3988. CODE 128AB SHORT
  3989. CODE 128AB TALL
  3990. CODE 128AB HR
  3991. CODE 128AB SHORT
  3992. CODE 128AB TALL HR
  3993. CODE 128C
  3994. CODE 128C SHORT
  3995. CODE 128C TALL
  3996. CODE 128C HR
  3997. CODE 128C HR SHORT
  3998. CODE 128C HR TALL
  3999. CODIGO DE BARRAS CYT
  4000. C39HRP24DHTT
  4001. C39HRP48DHTT
  4002. INTERLEAVED 2OF5 NT
  4003. 3 of 9 Barcode
  4004. windir5
  4005. Courier
  4006. Helvetica
  4007. Times-Roman
  4008. Helvetica
  4009. LDEFAULTMODE
  4010. OACTIVELISTENER
  4011. OFONTS
  4012. AFONTSSYMBOL
  4013. ADDPDFSTANDARDFONTS
  4014. DECLAREDLL    
  4015. CCODEPAGE
  4016. LREPLACEFONTS
  4017. AFONTSREPLACED
  4018. _LSETCONSOLE    
  4019. _LSETTALK
  4020. LNFONTS
  4021. LNFONTSTOADD
  4022. CSYMBOLFONTSLIST
  4023. _CTEMPFOLDER
  4024. _CWINFOLDER
  4025. LCDEFAULTFONT
  4026. CDEFAULTFONT
  4027. _TempDynamics
  4028. _TempDynamics
  4029. SET CONSOLE &llConsole.
  4030. SET TALK &llTalk.
  4031. LDEFAULTMODE
  4032. WAITFORNEXTREPORT    
  4033. ODYNAMICS    
  4034. LLCONSOLE
  4035. LLTALK
  4036. _LSETCONSOLE    
  4037. _LSETTALK
  4038. UPDATEPROPERTIES
  4039. THIS    
  4040. CLEARDLLS
  4041. GETLANGUAGEFROMSYSTEM
  4042. declaredll,
  4043. writepdfinformation[
  4044. searchfont
  4045. startpdfdocument
  4046. cleardlls
  4047. encryptpdf
  4048. addblankpage
  4049. addpdfstandardfonts
  4050. findfontfilename
  4051. cropimage
  4052. parseunderlinetext
  4053. processdynamics
  4054. processfields
  4055. processshapes
  4056. processlabel
  4057. processpictures2s
  4058. processlines
  4059. getpicturehandle
  4060. ispixelalpha
  4061. outputfromdata
  4062. getparheight
  4063. stringtopic&
  4064. processpictures2
  4065. _stat_assign
  4066. _errorinfo
  4067. _stat2_assignL
  4068. getpicturefromlistener
  4069. getpageimg9
  4070. clearpdferrors
  4071. getimgtype
  4072. getdefaultfont
  4073. updateproperties]
  4074. filesize
  4075. getfonthandle!
  4076. getfontstylename
  4077. gettempfile
  4078. istempfile
  4079. getwatermark
  4080. getlanguagefromsystem
  4081. deletetempimages
  4082. updatecodepager
  4083. setfrxdatasession
  4084. resetdatasession]
  4085. AfterReport
  4086. RenderJ
  4087. BeforeReport7
  4088. UnloadReportY
  4089. LoadReport
  4090. Destroy
  4091. PROCEDURE declaredll
  4092. *!*    * Check if the library HPDF.DLL is in the disk
  4093. *!*    LOCAL lcPDFFile
  4094. *!*    lcPDFFile = "libhpdf.dll"
  4095. *!*    IF EMPTY(SYS(2000,lcPDFFile))
  4096. *!*        MESSAGEBOX("Could not locate the library LIBHPDF.DLL ." + CHR(13) + ;
  4097. *!*                "The process can't continue. Make sure that you have the PDF library available, and that FoxyPreviewer is installed in a folder that has READ/WRITE access.", 16, "Error")
  4098. *!*        RETURN .F.
  4099. *!*    ENDIF
  4100. Declare Integer HPDF_New In libhpdf.dll Integer, Integer
  4101. Declare Integer HPDF_Free In libhpdf.dll Integer
  4102. Declare Integer HPDF_SaveToFile In libhpdf.dll Integer, String
  4103. Declare Integer HPDF_GetError In libhpdf.dll Integer
  4104. Declare Integer HPDF_ResetError In libhpdf.dll Integer
  4105. Declare Integer HPDF_SetPageMode In libhpdf.dll Integer, Integer
  4106. Declare Integer HPDF_GetCurrentPage In libhpdf.dll Integer
  4107. Declare Integer HPDF_AddPage In libhpdf.dll Integer
  4108. Declare Integer HPDF_Page_SetWidth In libhpdf.dll Integer, Single
  4109. Declare Integer HPDF_Page_SetHeight In libhpdf.dll Integer, Single
  4110. Declare Integer HPDF_GetFont In libhpdf.dll Integer, String, String
  4111. Declare String  HPDF_LoadTTFontFromFile In libhpdf.dll Integer, String, Integer
  4112. Declare Integer HPDF_GetEncoder In libhpdf.dll Integer, String
  4113. Declare Integer HPDF_GetCurrentEncoder In libhpdf.dll Integer
  4114. Declare Integer HPDF_SetCurrentEncoder In libhpdf.dll Integer, String
  4115. Declare Integer HPDF_Encoder_GetType In libhpdf.dll Integer
  4116. Declare Integer HPDF_Encoder_GetByteType In libhpdf.dll Integer, String, Integer
  4117. Declare String  HPDF_Encoder_GetUnicode In libhpdf.dll Integer, String
  4118. Declare Integer HPDF_Encoder_GetWritingMode In libhpdf.dll Integer
  4119. Declare Integer HPDF_UseJPEncodings In libhpdf.dll Integer
  4120. Declare Integer HPDF_UseKREncodings In libhpdf.dll Integer
  4121. Declare Integer HPDF_UseCNSEncodings In libhpdf.dll Integer
  4122. Declare Integer HPDF_UseCNTEncodings In libhpdf.dll Integer
  4123. Declare Integer HPDF_UseJPFonts In libhpdf.dll Integer
  4124. Declare Integer HPDF_UseKRFonts In libhpdf.dll Integer
  4125. Declare Integer HPDF_UseCNSFonts In libhpdf.dll Integer
  4126. Declare Integer HPDF_UseCNTFonts In libhpdf.dll Integer
  4127. Declare Integer HPDF_LoadPngImageFromFile In libhpdf.dll Integer, String
  4128. Declare Integer HPDF_LoadJpegImageFromFile In libhpdf.dll Integer, String
  4129. Declare Integer HPDF_Image_GetWidth In libhpdf.dll Integer
  4130. Declare Integer HPDF_Image_GetHeight In libhpdf.dll Integer
  4131. Declare Integer HPDF_SetInfoAttr In libhpdf.dll Integer, Integer, String
  4132. Declare Integer HPDF_SetPassword In libhpdf.dll Integer, String, String
  4133. Declare Integer HPDF_SetPermission In libhpdf.dll Integer, Integer
  4134. Declare Integer HPDF_SetEncryptionMode In libhpdf.dll Integer, Integer, Integer
  4135. Declare Integer HPDF_SetCompressionMode In libhpdf.dll Integer, Integer
  4136. Declare Integer HPDF_Font_MeasureText In libhpdf.dll Integer, String, Integer, Single, Single, Single, Single, Integer, Single @
  4137. Declare Single  HPDF_Page_GetWidth In libhpdf.dll Integer
  4138. Declare Single  HPDF_Page_GetHeight In libhpdf.dll Integer
  4139. Declare Single  HPDF_Page_TextWidth In libhpdf.dll Integer, String
  4140. Declare Integer HPDF_Page_GetCurrentFont In libhpdf.dll Integer
  4141. Declare Integer HPDF_Page_MeasureText In libhpdf.dll Integer, String, Single, Integer, Single @
  4142. Declare Integer HPDF_Page_GetRGBFill In libhpdf.dll Integer
  4143. Declare Integer HPDF_Page_GetCurrentFont In libhpdf.dll Integer
  4144. Declare Single  HPDF_Page_GetCurrentFontSize In libhpdf.dll Integer
  4145. Declare Integer HPDF_Page_SetLineWidth In libhpdf.dll Integer, Single
  4146. Declare Integer HPDF_Page_SetDash In libhpdf.dll Integer, String, Integer, Integer
  4147. Declare Integer HPDF_Page_MoveTo In libhpdf.dll Integer, Single, Single
  4148. Declare Integer HPDF_Page_LineTo In libhpdf.dll Integer, Single, Single
  4149. Declare Integer HPDF_Page_ClosePath In libhpdf.dll Integer
  4150. Declare Integer HPDF_Page_Rectangle In libhpdf.dll Integer, Single, Single, Single, Single
  4151. Declare Integer HPDF_Page_Concat In libhpdf.dll Integer, Single, Single, Single, Single, Single, Single
  4152. Declare Integer HPDF_Page_SetCharSpace In libhpdf.dll Integer, Single
  4153. Declare Integer HPDF_Page_SetWordSpace In libhpdf.dll Integer, Single
  4154. Declare Integer HPDF_Page_SetHorizontalScalling In libhpdf.dll Integer, Single
  4155. Declare Integer HPDF_Page_SetTextLeading In libhpdf.dll Integer, Single
  4156. Declare Integer HPDF_Page_SetTextRise In libhpdf.dll Integer, Single
  4157. Declare Integer HPDF_Page_Stroke In libhpdf.dll Integer
  4158. Declare Integer HPDF_Page_ClosePathStroke In libhpdf.dll Integer
  4159. Declare Integer HPDF_Page_Fill In libhpdf.dll Integer
  4160. Declare Integer HPDF_Page_FillStroke In libhpdf.dll Integer
  4161. Declare Integer HPDF_Page_EndPath In libhpdf.dll Integer
  4162. Declare Integer HPDF_Page_BeginText In libhpdf.dll Integer
  4163. Declare Integer HPDF_Page_EndText In libhpdf.dll Integer
  4164. Declare Integer HPDF_Page_SetFontAndSize In libhpdf.dll Integer, Integer, Single
  4165. Declare Integer HPDF_Page_SetTextRenderingMode In libhpdf.dll Integer, Integer
  4166. Declare Integer HPDF_Page_MoveTextPos In libhpdf.dll Integer, Single, Single
  4167. Declare Integer HPDF_Page_MoveToNextLine In libhpdf.dll Integer
  4168. Declare Integer HPDF_Page_SetRGBFill In libhpdf.dll Integer, Single, Single, Single
  4169. Declare Integer HPDF_Page_SetRGBStroke In libhpdf.dll Integer, Single, Single, Single
  4170. Declare Integer HPDF_Page_Ellipse In libhpdf.dll Integer, Single, Single, Single, Single
  4171. Declare Integer HPDF_Page_DrawImage In libhpdf.dll Integer, Integer, Single, Single, Single, Single
  4172. Declare Integer HPDF_Page_TextRect In libhpdf.dll Integer, Single, Single, Single, Single, String, Integer, Integer
  4173. Declare Integer HPDF_Page_TextOut In libhpdf.dll Integer, Single, Single, String
  4174. Declare Integer HPDF_Page_SetTextMatrix In libhpdf.dll Integer ,Single, Single, Single, Single, Single, Single
  4175. Declare Integer HPDF_Page_ShowText In libhpdf.dll Integer, String
  4176. Declare Integer HPDF_Page_CurveTo In libhpdf.dll Integer, Single, Single, Single, Single, Single, Single
  4177. * CChalom 2010-01-17
  4178. * Removed the dependance of having "System.App" from GdiPlusX
  4179. * Now using _Gdiplus.vcx that is already embedded in ReportOutput.App
  4180. * Added a GdiPlus.dll declaration missing in the embedded classes
  4181. * Function used in the CropImage method
  4182. DECLARE Long GdipCloneBitmapAreaI IN GDIPLUS.DLL AS pdfxGdipCloneBitmapAreaI Long x, Long y, Long nWidth, Long Height, Long PixelFormat, Long srcBitmap, Long @dstBitmap
  4183. * Function to revert strings
  4184. DECLARE STRING _strrev IN msvcrt20.dll as xfcRevertString STRING @
  4185. ENDPROC
  4186. PROCEDURE writepdfinformation
  4187. With This
  4188.     If !Empty(.cPdfAuthor) Then
  4189.         This._Stat = HPDF_SetInfoAttr(.pdfHandle, HPDF_INFO_AUTHOR, .cPdfAuthor)
  4190.     EndIf
  4191.     If !Empty(.cPdfTitle) Then
  4192.         This._Stat = HPDF_SetInfoAttr(.pdfHandle, HPDF_INFO_TITLE, .cPdfTitle)
  4193.     EndIf
  4194.     If !Empty(.cPdfSubject) Then
  4195.         This._Stat = HPDF_SetInfoAttr(.pdfHandle, HPDF_INFO_SUBJECT, .cPdfSubject)
  4196.     EndIf
  4197.     If !Empty(.cPdfKeyWords) Then
  4198.         This._Stat = HPDF_SetInfoAttr(.pdfHandle, HPDF_INFO_KEYWORDS, .cPdfKeywords)
  4199.     EndIf
  4200.     If !Empty(.cPdfCreator) Then
  4201.         This._Stat = HPDF_SetInfoAttr(.pdfHandle, HPDF_INFO_CREATOR, .cPdfCreator)
  4202.     EndIf
  4203. EndWith
  4204. ENDPROC
  4205. PROCEDURE searchfont
  4206. LPARAMETERS lcFontName As String, lnStyle As Integer &&, lnCodePage As Integer
  4207. LOCAL lnPos0
  4208. lnPos0 = ASCAN(This.aFontsSymbol, UPPER(lcFontName))
  4209. IF lnPos0 > 0
  4210.     RETURN ""
  4211. ENDIF 
  4212. LOCAL lcRetorno As String, lcFontRegular as String, lcFontStyle as String 
  4213. lcFontRegular = lcFontName
  4214. lcFontStyle   = ""
  4215. WITH This
  4216.     .cTextStyle=""
  4217.     If Bittest(lnStyle, 0) Then &&Bold 
  4218.         lcFontStyle  = lcFontStyle + " Bold"
  4219.         * lcFontName = lcFontName + " Bold"
  4220.         .cTextStyle="B"
  4221.     EndIf
  4222.     If Bittest(lnStyle, 1) Then &&Italic
  4223.         lcFontStyle  = lcFontStyle + " Italic"
  4224.         * lcFontName = lcFontName + " Italic"
  4225.         .cTextStyle = .cTextStyle + "I"
  4226.     EndIf
  4227.     Local lbResult As Boolean, lnI As Integer
  4228.     *!* Look for the font in the current collection
  4229.     lcFontName = lcFontName + lcFontStyle
  4230.     For lnI=1 To .oFonts.Count
  4231.         If This.oFonts.GetKey(lnI)==lcFontName Then
  4232.             lbResult = .T.
  4233.             Exit
  4234.         EndIf
  4235.     EndFor
  4236.     * Check if the font is at the replacement list
  4237.     LOCAL lnReplCount, lnPos
  4238.     lnReplCount = ALEN(This.aFontsReplaced, 1)
  4239.     lnPos       = ASCAN(This.aFontsReplaced, lcFontName)
  4240.     IF lnPos > 0
  4241.         lnPos = (lnPos + 1) / 2
  4242.         lcFontName = This.aFontsReplaced(lnPos, 2)
  4243.         lbResult = .T.
  4244.     ENDIF 
  4245.     IF !lbResult THEN && Font does NOT exist, let's add it to the collection
  4246.         LOCAL lcKey AS String, lcNewFont
  4247.         lcKey = .FindFontFileName(lcFontName)
  4248.         && If it didnt find the full name of the font, with style,
  4249.         && try at least to get the regular font
  4250.         IF EMPTY(lcKey)
  4251.             lcKey = .FindFontFileName(lcFontRegular)
  4252.             lcFontName = lcFontRegular
  4253.         ENDIF
  4254.         && Let's try again with the regular font name
  4255.         FOR lnI=1 TO .oFonts.Count
  4256.             IF This.oFonts.GetKey(lnI)==lcFontName Then
  4257.                 lbResult = .T.
  4258.                 EXIT
  4259.             ENDIF
  4260.         ENDFOR
  4261.     ENDIF 
  4262.     IF NOT lbResult
  4263.         IF !Empty(lcKey) THEN
  4264.             .oFonts.Add(lcKey, lcFontName)
  4265.         ELSE && Can't add fonts
  4266.             lcNewFont  = This.GetDefaultFont(lcFontStyle) && "Times-Roman"
  4267.             DIMENSION This.aFontsReplaced(lnReplCount + 1, 2)
  4268.             This.aFontsReplaced(lnReplCount + 1, 1) = lcFontName
  4269.             This.aFontsReplaced(lnReplCount + 1, 2) = lcNewFont
  4270.             lcFontName = lcNewFont
  4271.         ENDIF
  4272.     ENDIF
  4273.     lcRetorno = .oFonts.Item(.oFonts.GetKey(lcFontName))
  4274. ENDWITH 
  4275. RETURN lcRetorno
  4276. ENDPROC
  4277. PROCEDURE startpdfdocument
  4278. WITH This
  4279.     * CChalom 2010-01-20
  4280.     * Added "lStarted" property in order to allow merging reports
  4281.     SET TALK OFF
  4282.     SET CONSOLE OFF
  4283.     .UpdateCodePage()
  4284.     IF .pdfHandle = 0 AND NOT .lStarted
  4285.         IF This.lObjTypeMode && OR (VARTYPE(_Screen.oFoxyPreviewer) = "O")
  4286.             This.GetWatermark()
  4287.         ENDIF 
  4288.         LOCAL llError
  4289.         TRY
  4290.             .pdfHandle = HPDF_New(0, 0) && Create a New Document
  4291.             llError = .F.
  4292.         CATCH
  4293.             llError = .T.
  4294.         ENDTRY
  4295.         IF .pdfHandle = 0 OR llError
  4296.             * Check if the library HPDF.DLL is in the disk
  4297.             MESSAGEBOX("Could not load the library LIBHPDF.DLL ." + CHR(13) + ;
  4298.                 "The process can't continue. Make sure that you have the PDF library available, and that FoxyPreviewer is installed in a folder that has READ/WRITE access.", 16, "Error")
  4299.             This.CancelReport()
  4300.             RETURN .F.
  4301.         ENDIF
  4302.         This._Stat = HPDF_SetCompressionMode(.pdfHandle, HPDF_COMP_ALL) &&Set Document Compression Method
  4303.         * KHentschel 2010-06-15
  4304.         * Added "nPageMode" property: how Document should be displayed HPDF_PAGE_MODE_USE_OUTLINE
  4305.         * HPDF_SetPageMode(.pdfHandle, HPDF_PAGE_MODE_USE_OUTLINE) &&Set the how Document should be displayed
  4306.         * Available possibilities:
  4307.         * #define    HPDF_PAGE_MODE_USE_NONE        0
  4308.         * #define    HPDF_PAGE_MODE_USE_OUTLINE        1
  4309.         * #define    HPDF_PAGE_MODE_USE_THUMBS        2
  4310.         * #define    HPDF_PAGE_MODE_FULL_SCREEN        3
  4311.         * Make a special call to enable the Chinese characters
  4312.         * http://libharu.sourceforge.net/fonts.html
  4313.         * GB-EUC-H    EUC-CN encoding
  4314.         * GB-EUC-V    Vertical writing virsion of GB-EUC-H
  4315.         * GBK-EUC-H   Microsoft Code Page 936 (lfCharSet 0x86) GBK encoding
  4316.         * GBK-EUC-V   Vertical writing virsion of GBK-EUC-H
  4317.         This._Stat = HPDF_SetPageMode(.pdfHandle, .nPageMode)
  4318.         .WritePdfInformation() &&Stablish PDF File Information
  4319.         .EncryptPdf()
  4320.         * Clear existing HPDF errors
  4321.         This.ClearPDFErrors()
  4322.         .AddBlankPage()
  4323.         * Clear existing HPDF errors
  4324.         This.ClearPDFErrors()
  4325.         .lStarted=.T.
  4326.     ENDIF
  4327. ENDWITH
  4328. ENDPROC
  4329. PROCEDURE cleardlls
  4330. Clear Dlls "HPDF_New","HPDF_Free","HPDF_SaveToFile","HPDF_GetError","HPDF_ResetError","HPDF_SetPageMode",;
  4331. "HPDF_GetCurrentPage","HPDF_AddPage","HPDF_Page_SetWidth","HPDF_Page_SetHeight","HPDF_GetFont","HPDF_LoadTTFontFromFile",;
  4332. "HPDF_GetEncoder","HPDF_GetCurrentEncoder","HPDF_SetCurrentEncoder","HPDF_Encoder_GetType","HPDF_Encoder_GetByteType",;
  4333. "HPDF_Encoder_GetUnicode","HPDF_Encoder_GetWritingMode","HPDF_UseJPEncodings","HPDF_UseKREncodings","HPDF_UseCNSEncodings",;
  4334. "HPDF_UseCNTEncodings","HPDF_LoadPngImageFromFile","HPDF_LoadJpegImageFromFile","HPDF_Image_GetWidth","HPDF_Image_GetHeight",;
  4335. "HPDF_SetInfoAttr","HPDF_SetPassword","HPDF_SetPermission","HPDF_SetEncryptionMode","HPDF_SetCompressionMode",;
  4336. "HPDF_Font_MeasureText","HPDF_Page_GetWidth","HPDF_Page_GetHeight","HPDF_Page_TextWidth","HPDF_Page_GetCurrentFont",;
  4337. "HPDF_Page_MeasureText","HPDF_Page_GetRGBFill","HPDF_Page_GetCurrentFont","HPDF_Page_GetCurrentFontSize","HPDF_Page_SetLineWidth",;
  4338. "HPDF_Page_SetDash","HPDF_Page_MoveTo","HPDF_Page_LineTo","HPDF_Page_ClosePath","HPDF_Page_Rectangle","HPDF_Page_Concat",;
  4339. "HPDF_Page_SetCharSpace","HPDF_Page_SetWordSpace","HPDF_Page_SetHorizontalScalling","HPDF_Page_SetTextLeading",;
  4340. "HPDF_Page_SetTextRise","HPDF_Page_Stroke","HPDF_Page_ClosePathStroke","HPDF_Page_Fill","HPDF_Page_FillStroke",;
  4341. "HPDF_Page_EndPath","HPDF_Page_BeginText","HPDF_Page_EndText","HPDF_Page_SetFontAndSize","HPDF_Page_SetTextRenderingMode",;
  4342. "HPDF_Page_MoveTextPos","HPDF_Page_MoveToNextLine","HPDF_Page_SetRGBFill","HPDF_Page_SetRGBStroke","HPDF_Page_Ellipse",;
  4343. "HPDF_Page_DrawImage","HPDF_Page_TextRect","HPDF_Page_TextOut","HPDF_Page_SetTextMatrix","HPDF_Page_ShowText","HPDF_Page_CurveTo"
  4344. ENDPROC
  4345. PROCEDURE encryptpdf
  4346. WITH This
  4347.     IF .lEncryptDocument Then &&Protect the document with password
  4348.         IF !Empty(.cMasterPassword) Then
  4349.             IF !(ALLTRIM(.cMasterPassword) == ALLTRIM(.cUserPassword)) Then && User Password and Master Password can't be the same
  4350.                 HPDF_SetPassword(.pdfHandle, .cMasterPassword, .cUserPassword)
  4351.                 Local lnPermit As Integer
  4352.                 lnPermit=0
  4353.                 && Establish PDF files permissions
  4354.                 If .lCanPrint Then
  4355.                     lnPermit = lnPermit + HPDF_ENABLE_PRINT
  4356.                 EndIf
  4357.                 If .lCanEdit Then
  4358.                     lnPermit = lnPermit + HPDF_ENABLE_EDIT_ALL
  4359.                 EndIf
  4360.                 If .lCanCopy Then
  4361.                     lnPermit = lnPermit + HPDF_ENABLE_COPY
  4362.                 EndIf
  4363.                 If .lCanAddNotes Then
  4364.                     lnPermit = lnPermit + HPDF_ENABLE_EDIT
  4365.                 EndIf
  4366.                 This._Stat = HPDF_SetPermission(.pdfHandle, lnPermit)
  4367.                 If .nEncriptionLevel!=5 Then
  4368.                     This._Stat = HPDF_SetEncryptionMode(.pdfHandle, HPDF_ENCRYPT_R3, .nEncriptionLevel)
  4369.                 Else
  4370.                     This._Stat = HPDF_SetEncryptionMode(.pdfHandle, HPDF_ENCRYPT_R2, .nEncriptionLevel)
  4371.                 EndIf
  4372.             EndIf
  4373.         EndIf
  4374.     ENDIF
  4375. ENDWITH
  4376. ENDPROC
  4377. PROCEDURE addblankpage
  4378. *!* Change page coordinates and measure system
  4379. WITH This
  4380.     IF .lDefaultMode 
  4381.         LOCAL lnWidth, lnHeight
  4382.         lnWidth = .GetPageWidth()
  4383.         lnHeight = .GetPageHeight()
  4384.         .nPageHeight = (lnHeight / 960) * 72
  4385.         .nPageWidth  = (lnWidth  / 960) * 72
  4386.     ENDIF
  4387.     .oPage = HPDF_AddPage(.pdfHandle) && Add a New Page
  4388.     This._Stat = HPDF_Page_SetWidth(.oPage,  .nPageWidth ) && Establish the Width of the page
  4389.     This._Stat = HPDF_Page_SetHeight(.oPage, .nPageHeight) && Establish the Height of the page
  4390. ENDWITH
  4391. * Draw watermark
  4392. IF NOT EMPTY(This._cWMpicture) AND (This._nWmw > 20) AND (This._nWmh > 20)
  4393.     This.ProcessPictures(This._nwmy, This._nWmx, This._nWmw, This._nWmh, This._cWMpicture,;
  4394.         0, 0, 2, "")
  4395. *Lparameters nTop As Number,nLeft As Number,nWidth As Number,nHeight As Number,lcContents As String,;
  4396. *    GDIPlusImage As Number, lnOffset As Integer, liPictureMode As Integer, lcStyle As String
  4397. ENDIF
  4398. ENDPROC
  4399. PROCEDURE addpdfstandardfonts
  4400. With This.oFonts
  4401.     .Add("Courier", "Courier")
  4402.     .Add("Courier-Bold", "Courier-Bold")
  4403.     .Add("Courier-Oblique", "Courier-Oblique")
  4404.     .Add("Courier-BoldOblique", "Courier-BoldOblique")
  4405.     .Add("Helvetica", "Helvetica")
  4406.     .Add("Helvetica-Bold", "Helvetica-Bold")
  4407.     .Add("Helvetica-Oblique", "Helvetica-Oblique")
  4408.     .Add("Helvetica-BoldOblique", "Helvetica-BoldOblique")
  4409.     .Add("Times-Roman", "Times-Roman")
  4410.     .Add("Times-Bold", "Times-Bold")
  4411.     .Add("Times-Italic", "Times-Italic")
  4412.     .Add("Times-BoldItalic", "Times-BoldItalic")
  4413.     .Add("Symbol", "Symbol")
  4414.     .Add("ZapfDingbats", "ZapfDingbats")
  4415. EndWith
  4416. ENDPROC
  4417. PROCEDURE findfontfilename
  4418. LPARAMETERS lcFontName As String
  4419. Local lcFileName As String, lcFolder As String
  4420. lcFolder = Iif(Os(3) < "5","SOFTWARE\Microsoft\Windows\CurrentVersion\Fonts","Software\Microsoft\Windows NT\CurrentVersion\Fonts")
  4421. IF VARTYPE(This.oRegistry)!="O" THEN
  4422.     This.oRegistry = NewObject("Registry", This.ClassLibrary)
  4423. ENDIF
  4424. lcFileName = This._cWinFolder + "Fonts\" + This.oRegistry.ReadRegistryString(HKEY_LOCAL_MACHINE,lcFolder,ALLTRIM(lcFontName) + " (TrueType)")
  4425. IF ISNULL(lcFileName)
  4426.     lcFileName = This._cWinFolder + "Fonts\" + This.oRegistry.ReadRegistryString(HKEY_LOCAL_MACHINE,lcFolder,ALLTRIM(lcFontName))
  4427.     IF ISNULL(lcFileName)
  4428.         LOCAL lnLangID
  4429.         lnLangID = This.nSystemLangID
  4430.         *!* 1029 Czech
  4431.         *!* 1031 German
  4432.         *!* 1033 English (Default)
  4433.         *!* 1034 Spanish
  4434.         *!* 1036 French
  4435.         *!* 1040 Italian
  4436.         *!* 1045 Polish
  4437.         *!* 1046 Portuguese (Brazilian)
  4438.         * http://www.science.co.il/language/locale-codes.asp
  4439.         DO CASE
  4440.         CASE lnLangID = 1046 && Portuguese
  4441.             lcFontName = STRTRAN(lcFontName, "Bold" , "Negrito")
  4442.             lcFontName = STRTRAN(lcFontName, "Italic", "It
  4443. lico")
  4444.         CASE lnLangID = 1034 && Spanish
  4445.             lcFontName = STRTRAN(lcFontName, "Bold" , "negrita")
  4446.             lcFontName = STRTRAN(lcFontName, "Italic", "cursiva")
  4447.         CASE lnLangID = 1036 && French
  4448.             lcFontName = STRTRAN(lcFontName, "Bold" , "Gras")
  4449.             lcFontName = STRTRAN(lcFontName, "Italic", "Italique")
  4450.         OTHERWISE
  4451.         ENDCASE
  4452.         lcFileName = This._cWinFolder + "Fonts\" + This.oRegistry.ReadRegistryString(HKEY_LOCAL_MACHINE,lcFolder,ALLTRIM(lcFontName) + " (TrueType)")
  4453.     ENDIF
  4454. ENDIF
  4455. LOCAL luReturn
  4456. luReturn = ""
  4457. If !ISNULL(lcFileName) THEN
  4458.         luReturn = HPDF_LoadTTFontFromFile(This.pdfHandle, lcFileName, IIF(This.lEmbedFont,1,0))
  4459.     CATCH TO loExc
  4460.         * SET STEP ON
  4461.     ENDTRY
  4462. ENDIF
  4463. DEBUGOUT lcFontName, lcFileName, luReturn
  4464. This.ClearPDFErrors()
  4465. RETURN luReturn
  4466. *********************************************
  4467. *!*            TRY
  4468. *!*                Declare String  HPDF_LoadType1FontFromFile In libhpdf.dll Integer, String, String
  4469. *!*                luReturn =      HPDF_LoadType1FontFromFile(This.pdfHandle, lcFileName, NULL)
  4470. *!*            CATCH TO loExc2
  4471. *!*                * SET STEP ON
  4472. *!*            ENDTRY
  4473. *********************************************
  4474. *!*    LOCAL lcRegKey
  4475. *!*    lcRegKey = ;
  4476. *!*        "HKEY_LOCAL_MACHINE\" + ;
  4477. *!*        ADDBS(lcFolder) + ;
  4478. *!*        lcFontName + " (TrueType)"
  4479. *!*    LOCAL loWSH AS wscript.shell
  4480. *!*    loWSH = CREATEOBJECT("wscript.shell")
  4481. *!*    lcFileName = loWSH.RegRead(lcRegKey)
  4482. *!*    * ? loWSH.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\ProductId")
  4483. *!*    lcFileName = GETENV("windir") + "\Fonts\" + lcFileName
  4484. ENDPROC
  4485. PROCEDURE cropimage
  4486. LPARAMETERS lcFile As String, tnX, tnY, tnWidth As Integer, tnHeight As Integer, tlFile
  4487. * CChalom 2010-01-17
  4488. * Removed the dependance of having "System.App" from GdiPlusX
  4489. * Now using _Gdiplus.vcx that is already embedded in ReportOutput.App
  4490. *!* Original code
  4491. *!*    If Vartype(_Screen.System)!="O" Then
  4492. *!*        Do System.App &&Initializes GDIPLUSX
  4493. *!*    EndIf
  4494. *!*    With _Screen.System.Drawing
  4495. *!*        .Graphics.PageUnit = .GraphicsUnit.Point 
  4496. *!*        Local loBmp As xfcBitmap
  4497. *!*        loBmp = .Bitmap.FromFile(lcFile)
  4498. *!*        * Crop Image
  4499. *!*        Local loCropped As xfcBitmap, loRect As xfcRectangle
  4500. *!*        loRect = .Rectangle.New(0, 0, tnWidth, tnHeight)
  4501. *!*        loCropped = loBmp.Clone(loRect)
  4502. *!*        lcFile = Substr(lcFile, 1, Len(lcFile)-3)+"Png"
  4503. *!*        loCropped.Save(lcFile, .Imaging.ImageFormat.Png)
  4504. *!*        Return lcFile
  4505. *!*    ENDWITH
  4506. IF NOT FILE(lcFile)
  4507.     RETURN .F.
  4508. ENDIF 
  4509. Local loBmp As gpBitmap OF HOME() + "ffc\_gdiplus.vcx"
  4510. loBmp = NEWOBJECT("GpBitmap", "_GdiPlus.vcx")
  4511. loBmp.CreateFromFile(lcFile)
  4512. tnHeight = MIN(tnHeight, loBmp.ImageHeight)
  4513. tnWidth  = MIN(tnWidth , loBmp.ImageWidth)
  4514. LOCAL lhBitmap, lnStatus
  4515. lhBitmap = 0
  4516. lnStatus = pdfxGdipCloneBitmapAreaI(tnX, tnY, CEILING(tnWidth), CEILING(tnHeight), loBmp.PixelFormat, loBmp.GetHandle(), @lhBitmap)
  4517. IF (lhBitmap = 0) OR (lnStatus <> 0)
  4518.     loBmp = NULL
  4519.     lnHandle = 0
  4520.     RETURN lnHandle
  4521. ENDIF 
  4522. Local loCropped As gpBitmap OF HOME() + "ffc\_gdiplus.vcx"
  4523. loCropped = NEWOBJECT("GpBitmap", "_GdiPlus.vcx")
  4524. loCropped.SetHandle(lhBitmap, .T.)  && Owns handle, please destroy the Bmp object when releasing
  4525. loCropped.SetResolution(loBmp.HorizontalResolution, loBmp.VerticalResolution)
  4526. LOCAL lcEXT, lcEncoder
  4527. lcEXT = UPPER(JUSTEXT(lcFile))
  4528. lcEncoder = IIF(lcEXT = "PNG", "image/png", "image/jpeg")
  4529. LOCAL lcCroppedFile
  4530. lcCroppedFile = This.GetTempFile(lcEXT)
  4531. loCropped.SaveToFile(lcCroppedFile, lcEncoder)
  4532. loCropped = NULL
  4533. loBMP     = NULL
  4534. IF tlFile
  4535.     RETURN lcCroppedFile
  4536. ENDIF 
  4537. IF lcEXT = "PNG"
  4538.     lnHandle = HPDF_LoadPngImageFromFile(This.pdfHandle, lcCroppedFile)
  4539.     lnHandle = HPDF_LoadJpegImageFromFile(This.pdfHandle, lcCroppedFile)
  4540. ENDIF 
  4541. RETURN lnHandle
  4542. ENDPROC
  4543. PROCEDURE parseunderlinetext
  4544. Lparameters lcText As String, nWidth As Number, lnAncho As Number
  4545. Local lnI As Integer, lcTemp As String, lnLen As Integer, lcRetorno As String
  4546. lnLen = Len(lcText)
  4547. lcTemp = ""
  4548. lcRetorno = ""
  4549. For lnI=1 To lnLen
  4550.     If HPDF_Page_TextWidth(This.oPage, lcTemp + Substr(lcText, lnI, 1)) < nWidth Then
  4551.         lcTemp = lcTemp + Substr(lcText, lnI, 1)
  4552.     Else
  4553.         lcRetorno = lcRetorno + lcTemp + " "
  4554.         lcTemp = "" 
  4555.     EndIf
  4556. EndFor
  4557. Return lcRetorno + lcTemp
  4558. ENDPROC
  4559. PROCEDURE processdynamics
  4560. LParameters lcStyle As String, lcType As String
  4561. Local lbReturn As Boolean, lcCursor As String
  4562. lcCursor=Select()
  4563.     XMLToCursor(lcStyle, "_TempDynamics")
  4564. Catch
  4565.     lbReturn = .F.
  4566. EndTry
  4567. This.oDynamics = Null
  4568. * CChalom 2010-06-15
  4569. * Included verification for IF USED("_TempDynamics")
  4570. * for the case of an invalid XML
  4571. IF USED("_TempDynamics") AND Reccount("_TempDynamics") > 0 Then
  4572.     This.oDynamics = CreateObject("Empty")
  4573.     Select _TempDynamics
  4574.     If InList(lcType,"FIELD","SHAPE","PICTURE")
  4575.         Scan For !Empty(_TempDynamics.ExecWhen)
  4576.             Try
  4577.                 If Evaluate(_TempDynamics.ExecWhen)
  4578.                     Do Case
  4579.                         Case lcType="FIELD"
  4580.                             AddProperty(This.oDynamics, "cValue", _TempDynamics.Script) &&Corresponds to the Replace Expression With
  4581.                             AddProperty(This.oDynamics, "cExecWhen", _TempDynamics.ExecWhen) &&Corresponds to the expresion to be evaluate it
  4582.                             AddProperty(This.oDynamics, "cFontName", _TempDynamics.FName) &&Corresponds to the font name applied if expresion is true
  4583.                             AddProperty(This.oDynamics, "nFontSize", Iif(Vartype(_TempDynamics.FSize)="N", _TempDynamics.FSize, 0)) &&Corresponds to the font size applied if expresion is true
  4584.                             AddProperty(This.oDynamics, "nFontStyle",Iif(Vartype(_TempDynamics.FStyle)="N", _TempDynamics.FStyle, 0)) &&Corresponds to the font style applied if expresion is true
  4585.                             If Cast(_TempDynamics.PenRgb As I)!= -1 Then
  4586.                                 *!* This color transformation was taken from samples provided by 
  4587. etin Bas
  4588.                                 AddProperty(This.oDynamics, "nPenRed", Bitrshift(Bitand(Iif(Vartype(_TempDynamics.PenRgb)="C", Int(Val(_TempDynamics.PenRgb)), _TempDynamics.PenRgb), 0x0000FF),0))
  4589.                                 AddProperty(This.oDynamics, "nPenGreen", Bitrshift(Bitand(Iif(Vartype(_TempDynamics.PenRgb)="C", Int(Val(_TempDynamics.PenRgb)), _TempDynamics.PenRgb), 0x00FF00),8))
  4590.                                 AddProperty(This.oDynamics, "nPenBlue", Bitrshift(Bitand(Iif(Vartype(_TempDynamics.PenRgb)="C", Int(Val(_TempDynamics.PenRgb)), _TempDynamics.PenRgb), 0xFF0000),16))
  4591.                             Else
  4592.                                 AddProperty(This.oDynamics, "nPenRed", -1)
  4593.                                 AddProperty(This.oDynamics, "nPenGreen", -1)
  4594.                                 AddProperty(This.oDynamics, "nPenBlue", -1)
  4595.                             EndIf
  4596.                             If Cast(_TempDynamics.FillRgb As I)!= -1 Then
  4597.                                 AddProperty(This.oDynamics, "nFillRed", Bitrshift(Bitand(Iif(Vartype(_TempDynamics.FillRgb)="C", Int(Val(_TempDynamics.FillRgb)), _TempDynamics.FillRgb), 0x0000FF),0))
  4598.                                 AddProperty(This.oDynamics, "nFillGreen", Bitrshift(Bitand(Iif(Vartype(_TempDynamics.FillRgb)="C", Int(Val(_TempDynamics.FillRgb)), _TempDynamics.FillRgb), 0x00FF00),8))
  4599.                                 AddProperty(This.oDynamics, "nFillBlue", Bitrshift(Bitand(Iif(Vartype(_TempDynamics.FillRgb)="C", Int(Val(_TempDynamics.FillRgb)), _TempDynamics.FillRgb), 0xFF0000),16))
  4600.                             Else
  4601.                                 AddProperty(This.oDynamics, "nFillRed", -1)
  4602.                                 AddProperty(This.oDynamics, "nFillGreen", -1)
  4603.                                 AddProperty(This.oDynamics, "nFillBlue", -1)
  4604.                             EndIf
  4605.                             lbReturn = .T.
  4606.                             Exit
  4607.                         Case lcType="SHAPE" Or lcType="IMAGE"
  4608.                             AddProperty(This.oDynamics, "cExecWhen", _TempDynamics.ExecWhen) &&Corresponds to the expresion to be evaluate it
  4609.                             AddProperty(This.oDynamics, "nWidth", Iif(Vartype(_TempDynamics.Width)="C", Int(Val(_TempDynamics.Width)), _TempDynamics.Width)) &&Corresponds to the width assigned
  4610.                             AddProperty(This.oDynamics, "nHeight", Iif(Vartype(_TempDynamics.Height)="C", Int(Val(_TempDynamics.Height)), _TempDynamics.Height)) &&Corresponds to the width assigned
  4611.                             lbReturn = .T.
  4612.                             Exit
  4613.                     EndCase
  4614.                 EndIf
  4615.             Catch
  4616.                 lbReturn = .F.
  4617.             EndTry
  4618.         EndScan
  4619.     EndIf
  4620.     *!* No check for Rotation Values
  4621.     Scan For _TempDynamics.Name="Microsoft.VFP.Reporting.Builder.Rotate"
  4622.         AddProperty(This.oDynamics, "nRotationDegree", Iif(Vartype(_TempDynamics.Execute)="C", Int(Val(_TempDynamics.Execute)), _TempDynamics.Execute))
  4623.         lbReturn = .T.
  4624.     EndScan
  4625.     Select (lcCursor)
  4626.     Return lbReturn
  4627.     lbReturn = .F.
  4628. EndIf
  4629. Select (lcCursor)
  4630. Return lbReturn
  4631. ENDPROC
  4632. PROCEDURE processfields
  4633. LPARAMETERS lcFontFace As String, liFontStyle As Integer, lnFontSize As Number, lnPenRed As Number, lnPenGreen As Number,;
  4634.     lnPenBlue As Number, lnFillRed As Number, lnFillGreen As Number, lnFillBlue As Number, nLeft As Number, nTop As Number,;
  4635.     lcContents As String, lcFillChar As String, lnOffset As Integer, lbStretch As Boolean, lnCodePage As Integer, nHeight As Number, ;
  4636.     nWidth As Integer, lcStyle As String, lnMode As Integer, lcUser As String
  4637. IF EMPTY(lcContents)
  4638.     RETURN .T.
  4639. ENDIF
  4640. LOCAL lcOrigContents, lnTimes, lcTabRepl
  4641. lnTimes        = 8
  4642. lcTabRepl      = REPLICATE(CHR(160),lnTimes)
  4643. lcOrigContents = lcContents
  4644. lcOrigContents = STRTRAN(lcOrigContents,CHR(9), lcTabRepl) && Replaces the <TAB> With a CHR(160) to keep paragraphs
  4645. lcContents     = STRTRAN(lcContents, CHR(9), lcTabRepl)
  4646. IF This.lRightToLeft
  4647.     lcContents = xfcRevertString(lcContents + CHR(0))
  4648. ENDIF
  4649. LOCAL lnOcurrences As Integer, lnAncho As Integer, lnFontHandle As Integer, lnAlto As Integer, lcUnderLineText As String, lnRotate As Integer, lnCharWidth As Integer
  4650. lnRotate = 0
  4651. WITH This
  4652.     *!* Code to handle the Dynamic Options added in SP2
  4653.     IF !Empty(lcStyle) ;
  4654.             AND (This.lDefaultMode OR (VARTYPE(_goFP) = "O" AND USED(_goFP.oListener.cMainAlias)))
  4655.         && AND This.lDefaultMode Then && Dynamic Properties are stored here as xml
  4656.         TRY
  4657.             * Get the current field data
  4658.             IF NOT This.lDefaultMode
  4659.                 LOCAL lcAlias, lcMainAlias, lnRec
  4660.                 lnRec = DBFRECNO
  4661.                 lcAlias = ALIAS()
  4662.                 lcMainAlias = _goFP.oListener.cMainAlias
  4663.                 SELECT(lcMainAlias)
  4664.                 GO (lnRec)
  4665.             ENDIF
  4666.             If .ProcessDynamics(lcStyle, "FIELD") Then
  4667.                 lcFontFace = Iif(PemStatus(.oDynamics, "cFontName", 5), .oDynamics.cFontName, lcFontFace)
  4668.                 lnFontSize = Iif(PemStatus(.oDynamics, "nFontSize",5),  Iif(.oDynamics.nFontSize!=0, .oDynamics.nFontSize, lnFontSize), lnFontSize)
  4669.                 liFontStyle = Iif(PemStatus(.oDynamics, "nFontStyle",5), Iif(.oDynamics.nFontStyle!=0, .oDynamics.nFontStyle, liFontStyle), liFontStyle)
  4670.                 lcContents = Iif(PemStatus(.oDynamics, "cValue",5), Iif(!Empty(.oDynamics.cValue), .oDynamics.cValue, lcContents), lcContents)
  4671.                 lnPenRed = Iif(PemStatus(.oDynamics, "nPenRed",5), .oDynamics.nPenRed, lnPenRed)
  4672.                 lnPenBlue = Iif(PemStatus(.oDynamics, "nPenBlue",5), .oDynamics.nPenBlue, lnPenBlue)
  4673.                 lnPenGreen = Iif(PemStatus(.oDynamics, "nPenGreen",5), .oDynamics.nPenGreen, lnPenGreen)
  4674.                 lnFillRed = Iif(PemStatus(.oDynamics, "nFillRed",5), .oDynamics.nFillRed, lnFillRed)
  4675.                 lnFillBlue = Iif(PemStatus(.oDynamics, "nFillBlue",5), .oDynamics.nFillBlue, lnFillBlue)
  4676.                 lnFillGreen = Iif(PemStatus(.oDynamics, "nFillGreen",5), .oDynamics.nFillGreen, lnFillGreen)
  4677.                 lnRotate = Iif(PemStatus(.oDynamics, "nRotationDegree", 5), .oDynamics.nRotationDegree, 0)
  4678.             EndIf
  4679.             * Restore the driving table
  4680.             IF NOT This.lDefaultMode
  4681.                 SELECT(lcAlias)
  4682.             ENDIF
  4683.         CATCH TO loExc
  4684.             * SET STEP ON
  4685.         ENDTRY
  4686.     ENDIF
  4687.     If lnFillRed=-1 And lnFillBlue=-1 And lnFillGreen=-1 Then &&Default Colors of VFP Report Designer
  4688.         Store 255 To lnFillRed, lnFillBlue, lnFillGreen
  4689.     EndIf
  4690.     * Draw the field background
  4691.     IF lnMode = 0 && Mode: 0 = Opaque background; 1 = Transparent
  4692.         lnPenSize = 0
  4693.         lnPenPat  = 0
  4694.         lnFillPat = 1
  4695.         lcStyle   = ""
  4696.         LOCAL lnObjContType
  4697.         lnObjContType = 0
  4698.         This.ProcessShapes(lnFillRed, lnFillGreen, lnFillBlue, ;
  4699.             lnFillRed, lnFillGreen, lnFillBlue, ;
  4700.             nLeft, nTop, nWidth, nHeight, lnOffset, ;
  4701.             lnPenSize, lnPenPat, lnFillPat, lcStyle, lnMode, lnObjContType, .T.)
  4702.         && Last parameter is to inform 'ProcessShapes' not to draw a line border
  4703.     ENDIF
  4704.     nTop = .nPageHeight - nTop && Change the Top Coordinates Because of the PDF Coordinate System
  4705.     * Get the font Handle
  4706.     * If no font is retrieved, then draw the string as an image
  4707.     lnFontHandle = This.Getfonthandle(lcFontFace, liFontStyle)
  4708.     IF lnFontHandle = 0
  4709.         LOCAL lcImage, lnTxtW, lnTxtH
  4710.         lnTxtW  = nWidth
  4711.         lnTxtH  = nHeight
  4712.         lcImage = This.StringToPic(lcContents, lcFontFace, lnFontSize, ;
  4713.             IIF(lnPenRed   = -1, 0, lnPenRed), ;
  4714.             IIF(lnPenGreen = -1, 0, lnPenGreen), ;
  4715.             IIF(lnPenBlue  = -1, 0, lnPenBlue), ;
  4716.             0, @lnTxtW, @lnTxtH)
  4717.         This.ProcessPictures2(lcImage, nLeft, nTop, lnTxtW, lnTxtH)
  4718.         RETURN
  4719.     ENDIF
  4720.     This._Stat = HPDF_Page_BeginText(.oPage) &&Change to Text Mode
  4721.     This._Stat = HPDF_Page_SetFontAndSize(.oPage, lnFontHandle, lnFontSize) &&Find and choose the font
  4722.     lnCharWidth = FontMetric(7, lcFontFace, lnFontSize, .cTextStyle)
  4723.     IF lnPenRed=-1 And lnPenBlue=-1 And lnPenGreen=-1 Then &&Default Colors of VFP Report Designer
  4724.         STORE 0 TO lnPenBlue, lnPenRed, lnPenGreen
  4725.     ENDIF
  4726.     lnAncho = HPDF_Page_TextWidth(.oPage, lcContents) &&Get the size of the text width
  4727.     lnAlto  = HPDF_Page_GetCurrentFontSize(.oPage) && Get the height of the current font
  4728.     * Not precise at all
  4729.     LOCAL lnFontHeight2
  4730.     lnFontHeight2 = FontMetric(1, lcFontFace, lnFontSize, .cTextStyle)
  4731.     * Process Underline, currently being tested
  4732.     IF BITTEST(liFontStyle, 2) THEN
  4733.         lcUnderLineText = REPLICATE("_", ROUND(lnAncho / HPDF_Page_TextWidth(.oPage, "_"), 0))
  4734.         IF HPDF_Page_TextWidth(.oPage, lcUnderLineText) > nWidth THEN
  4735.             lcUnderLineText = .ParseUnderLineText(lcUnderLineText, nWidth, lnAncho)
  4736.         ENDIF
  4737.         .lUnderline = .T.
  4738.     ELSE
  4739.         .lUnderline = .F.
  4740.     ENDIF
  4741.     This._Stat = HPDF_Page_SetRGBFill(.oPage, lnPenRed / 255, lnPenGreen / 255, lnPenBlue / 255) &&Convert colors to PDF mode
  4742.     This._Stat = HPDF_Page_SetTextLeading(.oPage, lnFontSize) && Space between lines
  4743.     IF lnRotate = 0 THEN && No Text Rotation
  4744.         *!*    HPDF_Font_MeasureText()
  4745.         *!*    HPDF_UINT HPDF_Font_MeasureText (HPDF_Font          font,
  4746.         *!*                                     const HPDF_BYTE   *text,
  4747.         *!*                                     HPDF_UINT          len,
  4748.         *!*                                     HPDF_REAL          width,
  4749.         *!*                                     HPDF_REAL          font_size,
  4750.         *!*                                     HPDF_REAL          char_space,
  4751.         *!*                                     HPDF_REAL          word_space,
  4752.         *!*                                     HPDF_BOOL          wordwrap,
  4753.         *!*                                     HPDF_REAL         *real_width);
  4754.         *!*
  4755.         *!* Declare Integer HPDF_Font_MeasureText In libhpdf.dll
  4756.         *!*         Integer, String, Integer, Single, Single, Single, Single, Integer, Single @
  4757.         *!*
  4758.         *!*    calculates the byte length which can be included within the specified width.
  4759.         *!*
  4760.         *!*    Parameters
  4761.         *!*     font - Specify the handle of a font object.
  4762.         *!*     text - The text to use for calculation.
  4763.         *!*     len - The length of the text.
  4764.         *!*     width - The width of the area to put the text.
  4765.         *!*     font_size  - The size of the font.
  4766.         *!*     char_space - The character spacing.
  4767.         *!*     word_space - The word spacing.
  4768.         *!*     wordwrap - Suppose there are three words: "ABCDE", "FGH", and "IJKL".
  4769.         *!*     Also, suppose the substring until "J" can be included within the width (12 bytes).
  4770.         *!*     If word_wrap is HPDF_FALSE the function returns 12. If word_wrap parameter is HPDF_TRUE, it returns 10 (the end of the previous word).
  4771.         LOCAL lnLen, lnChars, lnRealWidth, lcCurrText, lcRemainingText, lnLineHeight, lnLinesAvail, lnCurrLine
  4772.         STORE "" TO lcCurrText
  4773.         STORE  0 TO lnLen, lnChars, lnRealWidth
  4774.         lcRemainingText = lcOrigContents
  4775.         lnLineHeight = This.GetParHeight("AB", lcFontFace, lnFontSize, liFontStyle, 0, 0, 10000, 10000)
  4776.         lnLinesAvail = ROUND(nHeight / lnLineHeight, 0)
  4777.         lnCurrLine   = 1
  4778. *        lnLineHeight = FLOOR(lnLineHeight)
  4779.         lnLineHeight = (lnLineHeight * 0.74) * This.nLineHeightRatio
  4780.         DO WHILE .T.
  4781.             lnRealWidth = 0
  4782.             lnLen = LEN(lcRemainingText)
  4783.             lnChars = HPDF_Font_MeasureText( lnFontHandle, ;
  4784.                 lcRemainingText, ;
  4785.                 LEN(lcRemainingText), ;
  4786.                 nWidth, ;
  4787.                 lnFontSize, ;
  4788.                 0, ;
  4789.                 0, ;
  4790.                 1, ;
  4791.                 @lnRealWidth)
  4792.             IF lnChars = 0 && it seems that we had one single word, so we'll cut the word in the middle
  4793.                 && Changing the WordWrap parameter to 0
  4794.                 lnChars = HPDF_Font_MeasureText( lnFontHandle, ;
  4795.                     lcRemainingText, ;
  4796.                     LEN(lcRemainingText), ;
  4797.                     nWidth, ;
  4798.                     lnFontSize, ;
  4799.                     0, ;
  4800.                     0, ;
  4801.                     0, ;
  4802.                     @lnRealWidth)
  4803.             ENDIF
  4804.             lcCurrText = LEFT(lcRemainingText, lnChars)
  4805.             IF lnCurrLine = 1
  4806.                 lcRemainingText = RTRIM(SUBSTR(lcRemainingText, lnChars + 1))
  4807.             ELSE
  4808.                 lcRemainingText = ALLTRIM(SUBSTR(lcRemainingText, lnChars + 1))
  4809.             ENDIF
  4810.             IF NOT "<FJ>" $ lcUser
  4811.                 IF lnCurrLine = 1
  4812.                     lcCurrText = RTRIM(lcCurrText)
  4813.                 ELSE
  4814.                     lcCurrText = ALLTRIM(lcCurrText)
  4815.                 ENDIF
  4816.                 * lcCurrText = CHRTRAN(lcCurrText, CHR(10), CHR(13))
  4817.                 lcCurrText = CHRTRAN(lcCurrText, CHR(10), "")
  4818.                 lcCurrText = CHRTRAN(lcCurrText, CHR(13), "")
  4819.             ELSE
  4820.                 IF (CHR(10) $ lcCurrText) OR (EMPTY(lcRemainingText))
  4821.                     lcCurrText = ALLTRIM(lcCurrText)
  4822.                 ELSE
  4823.                     && Trick to force the justification, telling the HPDF engine that we'll have a next line, forcing it to continue justifying
  4824.                     lcCurrText = ALLTRIM(lcCurrText) + CHR(10) + CHR(10)
  4825.                 ENDIF
  4826.             ENDIF
  4827.             lcContents = lcCurrText
  4828.             DO CASE
  4829.             CASE "<FJ>" $ lcUser
  4830.                 This._Stat2 = HPDF_Page_TextRect(.oPage, nLeft, nTop, nLeft + nWidth, nTop - nHeight - lnAlto, lcContents, HPDF_TALIGN_JUSTIFY, 0)
  4831.             CASE lnOffset = 0 && Left Aligned
  4832.                 This._Stat2 = HPDF_Page_TextRect(.oPage, nLeft, nTop, nLeft + nWidth, nTop - nHeight - lnAlto, lcContents, HPDF_TALIGN_LEFT, 0)
  4833.                 IF .lUnderline Then &&Draw fake underline text
  4834.                     This._Stat = HPDF_Page_TextRect(.oPage, nLeft, nTop, nLeft + nWidth , nTop - nHeight - lnAlto, lcUnderLineText, HPDF_TALIGN_LEFT, 0)
  4835.                 ENDIF
  4836.             CASE lnOffset = 1 && Right Aligned
  4837.                 This._Stat2 = HPDF_Page_TextRect(.oPage, nLeft, nTop, nLeft + nWidth, nTop - nHeight - lnAlto, lcContents, HPDF_TALIGN_RIGHT, 0)
  4838.                 If .lUnderline Then &&Draw fake underline text
  4839.                     This._Stat = HPDF_Page_TextRect(.oPage, nLeft, nTop, nLeft + nWidth, nTop - nHeight - lnAlto, lcUnderLineText, HPDF_TALIGN_RIGHT, 0)
  4840.                 EndIf
  4841.             Case lnOffset = 2 && Center Aligned
  4842.                 This._Stat2 = HPDF_Page_TextRect(.oPage, nLeft, nTop, nLeft + nWidth, nTop - nHeight - lnAlto, lcContents, HPDF_TALIGN_CENTER, 0)
  4843.                 If .lUnderline Then &&Draw fake underline text
  4844.                     This._Stat = HPDF_Page_TextRect(.oPage, nLeft, nTop, nLeft + nWidth, nTop - nHeight - lnAlto, lcUnderLineText, HPDF_TALIGN_CENTER, 0)
  4845.                 EndIf
  4846.             EndCase
  4847.             nTop = nTop - lnLineHeight
  4848.             lnCurrLine = lnCurrLine + 1
  4849.             IF (NOT lbStretch) AND (lnCurrLine > lnLinesAvail)
  4850.                 EXIT
  4851.             ENDIF
  4852.             IF (EMPTY(lcRemainingText))
  4853.                 EXIT
  4854.             ENDIF
  4855.         ENDDO
  4856.     Else
  4857.         *!* Let's Draw the rotated text
  4858.         Local lnRad As Number
  4859.         lnRad = ((lnRotate * -1) / 180) * Pi()
  4860.         This._Stat = HPDF_Page_SetTextMatrix(.oPage, Cos(lnRad), Sin(lnRad), -Sin(lnRad), Cos(lnRad), nLeft, nTop)
  4861.         This._Stat2 = HPDF_Page_ShowText(.oPage, lcContents)
  4862.     EndIf
  4863.     This._Stat = HPDF_Page_EndText(.oPage)
  4864. ENDWITH
  4865. LOCAL llSuccess
  4866. llSuccess = This._Stat2 = 0
  4867. RETURN llSuccess
  4868. ENDPROC
  4869. PROCEDURE processshapes
  4870. LPARAMETERS lnFillRed As Integer,lnFillGreen As Integer,lnFillBlue As Integer,lnPenRed As Integer,lnPenGreen As Integer,;
  4871.     lnPenBlue As Integer,nLeft As Number,nTop As Number,nWidth As Number,nHeight As Number,lnOffset As Integer, ;
  4872.     lnPenSize As Integer, lnPenPat As Integer, lnFillPat As Integer, lcStyle As String, lnMode as Integer, lnObjectContinuationType as Integer, ;
  4873.     tlSkipBorder
  4874. *!*    Value    Continuation Type  
  4875. *!*    ------- --------------------------------------------------------------------------
  4876. *!*    0        Complete (no continuation).
  4877. *!*    1        Start of layout element occurrence, will not finish on the current page.
  4878. *!*    2        Mid-element, neither started nor finished on the current page.
  4879. *!*    3        End of element, completed on the current page.
  4880. IF TYPE("lnObjectContinuationType") <> "N"
  4881.     lnObjectContinuationType = 0
  4882. ENDIF
  4883. LOCAL lcDash As String, nTop2 As Integer
  4884. LOCAL lDecomposeRect as Boolean, lDoTopLine as Boolean, lDoLeftLine as Boolean, lDoRightLine as Boolean, ;
  4885.       lDoBottomLine as Boolean, Line_lnPenRed as Integer, Line_lnPenGreen as Integer, Line_lnPenBlue as Integer
  4886. *!* 2010-08-25 - Jacques Parent - Let multiple band shape be printed correctly
  4887. DO CASE
  4888. *    CASE lnOffSet <> 0
  4889.         *!* Other than rectangle...
  4890.         *!* OK, we proceed!
  4891. *        lDecomposeRect = .F.
  4892.     CASE lnObjectContinuationType == 0
  4893.         *!* No continuation
  4894.         *!* OK, we proceed!
  4895.         lDecomposeRect = .F.
  4896.     CASE lnObjectContinuationType == 1
  4897.         *!* Top element
  4898.         *!* OK, we proceed!
  4899.         lDecomposeRect     = .T.
  4900.         lDoTopLine         = .T.
  4901.         lDoLeftLine        = .T.
  4902.         lDoRightLine    = .T.
  4903.         lDoBottomLine    = .F.
  4904.     CASE lnObjectContinuationType == 2
  4905.         *!* Mid element... 
  4906.         lDecomposeRect     = .T.
  4907.         lDoTopLine        = .F.
  4908.         lDoLeftLine        = .T.
  4909.         lDoRightLine    = .T.
  4910.         lDoBottomLine    = .F.
  4911.     CASE lnObjectContinuationType == 3
  4912.         *!* Bottom element
  4913.         *!* OK, we proceed!
  4914.         lDecomposeRect     = .T.
  4915.         lDoTopLine        = .F.
  4916.         lDoLeftLine        = .T.
  4917.         lDoRightLine    = .T.
  4918.         lDoBottomLine    = .T.
  4919. ENDCASE
  4920. With This
  4921.     *!* Code to handle the Dynamic Options added in SP2
  4922.     IF !EMPTY(lcStyle) THEN &&Dynamic Properties are stored here as xml
  4923.         If .ProcessDynamics(lcStyle, "SHAPE") Then
  4924.             nHeight = Iif(PemStatus(.oDynamics, "nHeight",5), Iif(.oDynamics.nHeight!=-1, (.oDynamics.nHeight / 960) * 72, nHeight), nHeight)
  4925.             nWidth = Iif(PemStatus(.oDynamics, "nWidth",5), Iif(.oDynamics.nWidth!=-1, (.oDynamics.nWidth / 960) * 72, nWidth), nWidth)
  4926.         EndIf
  4927.     EndIf
  4928.     nTop2 = nTop
  4929.     nTop = .nPageHeight - nTop
  4930.     If lnFillRed = -1
  4931.         lnFillRed     = 255
  4932.         lnFillGreen = 255
  4933.         lnFillBlue     = 255
  4934.     ENDIF
  4935. *    IF lnMode = 0 OR lnFillPat > 0 && Opaque
  4936.     IF lnFillPat > 0 && Opaque    => 2010-08-25 - Jacques Parent - Let transparent be transparent, not RGB(255,255,255)
  4937.         This._Stat = HPDF_Page_SetRGBFill(This.oPage, lnFillRed / 255, lnFillGreen / 255, lnFillBlue / 255)
  4938.         lnMode = 0
  4939.     ELSE
  4940.         lnMode = 1
  4941.     ENDIF 
  4942.     IF lDecomposeRect
  4943.         *!* The rectangle that will be traced will have border same color as the filling!
  4944.         Line_lnPenRed     = lnPenRed
  4945.         Line_lnPenGreen = lnPenGreen
  4946.         Line_lnPenBlue     = lnPenBlue
  4947.         IF lnMode == 0
  4948.             lnPenRed     = lnFillRed
  4949.             lnPenGreen     = lnFillGreen
  4950.             lnPenBlue     = lnFillBlue
  4951.         ENDIF
  4952.     ELSE
  4953.         If lnPenRed = -1
  4954.             IF lnPenPat = 0
  4955.                 lnPenRed     = 255
  4956.                 lnPenGreen     = 255
  4957.                 lnPenBlue     = 255
  4958.             ELSE 
  4959.                 lnPenRed     = 0
  4960.                 lnPenGreen     = 0
  4961.                 lnPenBlue     = 0
  4962.             ENDIF 
  4963.         ENDIF 
  4964.     ENDIF
  4965. * From CChalom to JParent
  4966. * Jacques,
  4967. * Please check the lines below. I didn't apply any major change cause you did a big
  4968. * refactoring in this method months ago.
  4969. * A "hidden" error was happening if the value lnPenRed, lnPenGreen or lnPenBlue is -1
  4970. * I've included a basic checking, just skipping this line for now
  4971. * Please revise this, the recommended is to change from -1 to 0 or 255,
  4972. * depending on the situation. 
  4973. IF lnPenRed <> -1 && AND lnPenPat <> 0 && None
  4974.     This._Stat = HPDF_Page_SetRGBStroke(.oPage, lnPenRed / 255, lnPenGreen / 255, lnPenBlue / 255)
  4975. ENDIF 
  4976. *!*    * Check if we are done
  4977. *!*    IF tlSkipBorder ;   && Called from ProcessFields
  4978. *!*        OR lnPenPat = 0 && Don't need to draw border
  4979. *!*        RETURN 
  4980. *!*    ENDIF 
  4981.     IF (lnPenSize >= 1) AND (lnPenPat > 0) AND (NOT tlSkipBorder)
  4982.         This._Stat = HPDF_Page_SetLineWidth(.oPage, lnPenSize)
  4983.     ELSE
  4984.         This._Stat = HPDF_Page_SetLineWidth(.oPage, 0)
  4985.     ENDIF
  4986.     DO CASE
  4987.         Case lnPenPat=8 &&Normal Mode
  4988.             This._Stat = HPDF_Page_SetDash(.oPage, Null, 0, 0)
  4989.         Case lnPenPat=1 &&Dotted
  4990.             lcDash=Chr(3) + Chr(0) + Chr(0)
  4991.             This._Stat = HPDF_Page_SetDash(.oPage, lcDash, 1, 1)
  4992.         Case lnPenPat=2 &&Dashed
  4993.             lcDash = Chr(18)+Chr(0)+Chr(6)+Chr(0)+Chr(0)
  4994.             This._Stat = HPDF_Page_SetDash(.oPage, lcDash, 2, 2)
  4995.         Case lnPenPat=3 &&Dash-dot
  4996.             lcDash = Chr(9)+Chr(0)+Chr(6)+Chr(0)+Chr(3)+Chr(0)+Chr(6)+Chr(0)+Chr(0)
  4997.             This._Stat = HPDF_Page_SetDash(.oPage, lcDash, 4, 0)
  4998.         Case lnPenPat=4 &&Dash-dot-dot
  4999.             lcDash = Chr(9)+Chr(0)+Chr(3)+Chr(0)+Chr(3)+Chr(0)+Chr(3)+Chr(0)+Chr(3)+Chr(0)+Chr(3)+Chr(0)+Chr(0)
  5000.             This._Stat = HPDF_Page_SetDash(.oPage, lcDash, 6, 0)        
  5001.     ENDCASE
  5002.     IF NOT lDecomposeRect OR (lnMode==0 AND lDecomposeRect)    && If mode == 1, then there is no reason to draw a rectangle!
  5003.         *!* Draw the rectangle
  5004.         Do Case
  5005.             Case lnOffSet=0 &&Normal Rectangle
  5006.                 This._Stat = HPDF_Page_Rectangle(.oPage, nLeft, nTop - nHeight, nWidth, nHeight)
  5007.             Case Between(lnOffSet, 1, 98) &&Rounded Rectangle
  5008.                 *!* Code to Draw Rounded Rectangle Courtesy of Dorin Vasilescu
  5009.                 Local nRay As Number, nb As Number
  5010.                 nRay = Round(Iif(nWidth > nHeight, Min(lnOffSet, Int(nHeight / 2)), Min(lnOffSet, Int(nWidth / 2))), 0)
  5011.                   nB = .nPageHeight - (nTop2 + nHeight) 
  5012.                 This._Stat = HPDF_Page_MoveTo(.oPage, nLeft + nRay, nB)
  5013.                 This._Stat = HPDF_Page_LineTo(.oPage, (nLeft + nWidth) - nRay, nB)
  5014.                 This._Stat = HPDF_Page_CurveTo(.oPage, (nLeft + nWidth), nB, (nLeft + nWidth), nB, (nLeft + nWidth), nB + nRay) 
  5015.                 This._Stat = HPDF_Page_LineTo(.oPage, (nLeft + nWidth), nTop - nRay)
  5016.                 This._Stat = HPDF_Page_CurveTo(.oPage, (nLeft + nWidth), nTop, (nLeft + nWidth), nTop, (nLeft + nWidth) - nRay, nTop)
  5017.                 This._Stat = HPDF_Page_LineTo(.oPage, nLeft + nRay, nTop)
  5018.                 This._Stat = HPDF_Page_CurveTo(.oPage, nLeft, nTop, nLeft, nTop, nLeft, nTop - nRay)
  5019.                 This._Stat = HPDF_Page_LineTo(.oPage, nLeft , nB + nRay)
  5020.                 This._Stat = HPDF_Page_CurveTo(.oPage, nLeft, nB , nLeft, nB, nLeft + nRay, nB)
  5021.             Case lnOffSet=99 &&Ellipsis
  5022.                 This._Stat = HPDF_Page_Ellipse(.oPage, nLeft + (nWidth / 2), nTop - (nHeight / 2), nWidth / 2, nHeight / 2)
  5023.         EndCase
  5024.         *!* Refresh page
  5025.         * Mode: 0 = Opaque background; 1 = Transparent
  5026.         IF lnMode = 1 && Transparent
  5027.             This._Stat = HPDF_Page_Stroke(.oPage)
  5028.         ELSE && 0 = Opaque
  5029.             This._Stat = HPDF_Page_FillStroke(.oPage)
  5030.         ENDIF 
  5031.     ENDIF
  5032.     IF lDecomposeRect AND Line_lnPenRed <> lnFillRed AND Line_lnPenGreen <> lnFillGreen AND Line_lnPenBlue <> lnFillBlue
  5033.         *!* Draw the necessary lines
  5034.         IF Between(lnOffSet, 1, 98) &&Rounded Rectangle
  5035. *!*                    Local nRay As Number, nb As Number
  5036. *!*                    nRay = Round(Iif(nWidth > nHeight, Min(lnOffSet, Int(nHeight / 2)), Min(lnOffSet, Int(nWidth / 2))), 0)
  5037. *!*                      nB = .nPageHeight - (nTop2 + nHeight) 
  5038. *!*                    This._Stat = HPDF_Page_MoveTo(.oPage, nLeft + nRay, nB)
  5039. *!*                    This._Stat = HPDF_Page_LineTo(.oPage, (nLeft + nWidth) - nRay, nB)
  5040. *!*                    This._Stat = HPDF_Page_CurveTo(.oPage, (nLeft + nWidth), nB, (nLeft + nWidth), nB, (nLeft + nWidth), nB + nRay) 
  5041. *!*                    This._Stat = HPDF_Page_LineTo(.oPage, (nLeft + nWidth), nTop - nRay)
  5042. *!*                    This._Stat = HPDF_Page_CurveTo(.oPage, (nLeft + nWidth), nTop, (nLeft + nWidth), nTop, (nLeft + nWidth) - nRay, nTop)
  5043. *!*                    This._Stat = HPDF_Page_LineTo(.oPage, nLeft + nRay, nTop)
  5044. *!*                    This._Stat = HPDF_Page_CurveTo(.oPage, nLeft, nTop, nLeft, nTop, nLeft, nTop - nRay)
  5045. *!*                    This._Stat = HPDF_Page_LineTo(.oPage, nLeft , nB + nRay)
  5046. *!*                    This._Stat = HPDF_Page_CurveTo(.oPage, nLeft, nB , nLeft, nB, nLeft + nRay, nB)
  5047.             IF lDoTopLine
  5048.                 Local nRay As Number, nb As Number
  5049.                 nRay = Round(Iif(nWidth > nHeight, Min(lnOffSet, Int(nHeight / 1)), Min(lnOffSet, Int(nWidth / 2))), 0) * 1
  5050.                   nB = .nPageHeight - (nTop2 + nHeight) 
  5051.                 This._Stat = HPDF_Page_MoveTo(.oPage, nLeft + nRay, nB)
  5052. ***                This._Stat = HPDF_Page_LineTo(.oPage, (nLeft + nWidth) - nRay, nB)
  5053. *                This._Stat = HPDF_Page_CurveTo(.oPage, (nLeft + nWidth), nB, (nLeft + nWidth), nB, (nLeft + nWidth), nB + nRay) && Inferior
  5054. *                This._Stat = HPDF_Page_LineTo(.oPage, (nLeft + nWidth), nTop - nRay)
  5055.                 This._Stat = HPDF_Page_MoveTo(.oPage, (nLeft + nWidth), nTop - nRay)
  5056.                 This._Stat = HPDF_Page_CurveTo(.oPage, (nLeft + nWidth), nTop, (nLeft + nWidth), nTop, (nLeft + nWidth) - nRay, nTop)
  5057. *                This._Stat = HPDF_Page_LineTo(.oPage, nLeft + nRay, nTop)
  5058.                 This._Stat = HPDF_Page_MoveTo(.oPage, nLeft + nRay, nTop)
  5059.                 This._Stat = HPDF_Page_CurveTo(.oPage, nLeft, nTop, nLeft, nTop, nLeft, nTop - nRay)
  5060. *                This._Stat = HPDF_Page_LineTo(.oPage, nLeft , nB + nRay)
  5061. *                This._Stat = HPDF_Page_CurveTo(.oPage, nLeft, nB , nLeft, nB, nLeft + nRay, nB)
  5062.                 This.ProcessLines(Line_lnPenRed, Line_lnPenGreen, Line_lnPenBlue, nTop2, nLeft-0.5 + nRay, nWidth+0.5 - nRay - nRay,;
  5063.                               0, lnPenSize, 1, lnPenPat, lcStyle)
  5064.             ENDIF
  5065.             IF lDoBottomLine
  5066.                 Local nRay As Number, nb As Number
  5067.                 nRay = Round(Iif(nWidth > nHeight, Min(lnOffSet, Int(nHeight / 1)), Min(lnOffSet, Int(nWidth / 2))), 0) * 1
  5068.                   nB = .nPageHeight - (nTop2 + nHeight) 
  5069.                 This._Stat = HPDF_Page_MoveTo(.oPage, nLeft + nRay, nB)
  5070. *                This._Stat = HPDF_Page_LineTo(.oPage, (nLeft + nWidth) - nRay, nB)
  5071.                 This._Stat = HPDF_Page_MoveTo(.oPage, (nLeft + nWidth) - nRay, nB)
  5072.                 This._Stat = HPDF_Page_CurveTo(.oPage, (nLeft + nWidth), nB, (nLeft + nWidth), nB, (nLeft + nWidth), nB + nRay) && Inferior direito
  5073. *                This._Stat = HPDF_Page_LineTo(.oPage, (nLeft + nWidth), nTop - nRay)
  5074.                 This._Stat = HPDF_Page_MoveTo(.oPage, (nLeft + nWidth), nTop - nRay)
  5075. *                This._Stat = HPDF_Page_CurveTo(.oPage, (nLeft + nWidth), nTop, (nLeft + nWidth), nTop, (nLeft + nWidth) - nRay, nTop) && Superior direito
  5076. ****                This._Stat = HPDF_Page_LineTo(.oPage, nLeft + nRay, nTop)
  5077. *                This._Stat = HPDF_Page_MoveTo(.oPage, nLeft + nRay, nTop)
  5078. *                This._Stat = HPDF_Page_CurveTo(.oPage, nLeft, nTop, nLeft, nTop, nLeft, nTop - nRay)
  5079. *                This._Stat = HPDF_Page_LineTo(.oPage, nLeft , nB + nRay)
  5080.                 This._Stat = HPDF_Page_MoveTo(.oPage, nLeft , nB + nRay)
  5081.                 This._Stat = HPDF_Page_CurveTo(.oPage, nLeft, nB , nLeft, nB, nLeft + nRay, nB)
  5082.                 This.ProcessLines(Line_lnPenRed, Line_lnPenGreen, Line_lnPenBlue, nTop2 + nHeight, nLeft-0.5 + nRay, nWidth+0.5 -nRay -nRay,;
  5083.                               0, lnPenSize, 1, lnPenPat, lcStyle)
  5084.             ENDIF
  5085.             IF lDoLeftLine AND (lDoBottomLine = .F.) AND (lDoTopLine = .F.) && AND (lDoRightLine = .F.)
  5086.                 This.ProcessLines(Line_lnPenRed, Line_lnPenGreen, Line_lnPenBlue, nTop2-0.5, nLeft, 0,;
  5087.                               nHeight+0.5, lnPenSize, 0, lnPenPat, lcStyle)
  5088.                 This.ProcessLines(Line_lnPenRed, Line_lnPenGreen, Line_lnPenBlue, nTop2-0.5, nLeft+nWidth, 0,;
  5089.                               nHeight+0.5, lnPenSize, 0, lnPenPat, lcStyle)
  5090.             ENDIF
  5091. *!*                IF lDoRightLine AND (lDoBottomLine = .F.) AND (lDoTopLine = .F.) AND (lDoLeftLine = .F.)
  5092. *!*                    This.ProcessLines(Line_lnPenRed, Line_lnPenGreen, Line_lnPenBlue, nTop2-0.5, nLeft+nWidth, 0,;
  5093. *!*                                  nHeight+0.5, lnPenSize, 0, lnPenPat, lcStyle)
  5094. *!*                ENDIF
  5095.         ELSE 
  5096.             IF lDoTopLine
  5097.                 This.ProcessLines(Line_lnPenRed, Line_lnPenGreen, Line_lnPenBlue, nTop2, nLeft-0.5, nWidth+0.5,;
  5098.                               0, lnPenSize, 1, lnPenPat, lcStyle)
  5099.             ENDIF
  5100.             IF lDoLeftLine
  5101.                 This.ProcessLines(Line_lnPenRed, Line_lnPenGreen, Line_lnPenBlue, nTop2-0.5, nLeft, 0,;
  5102.                               nHeight+0.5, lnPenSize, 0, lnPenPat, lcStyle)
  5103.             ENDIF
  5104.             IF lDoRightLine
  5105.                 This.ProcessLines(Line_lnPenRed, Line_lnPenGreen, Line_lnPenBlue, nTop2-0.5, nLeft+nWidth, 0,;
  5106.                               nHeight+0.5, lnPenSize, 0, lnPenPat, lcStyle)
  5107.             ENDIF
  5108.             IF lDoBottomLine
  5109.                 This.ProcessLines(Line_lnPenRed, Line_lnPenGreen, Line_lnPenBlue, nTop2 + nHeight, nLeft-0.5, nWidth+0.5,;
  5110.                               0, lnPenSize, 1, lnPenPat, lcStyle)
  5111.             ENDIF
  5112.         ENDIF
  5113.     ENDIF
  5114. ENDWITH
  5115. ENDPROC
  5116. PROCEDURE processlabel
  5117. Lparameters lcFontFace As String, liFontStyle As Integer, lnFontSize As Number, lnPenRed As Number, lnPenGreen As Number,;
  5118.     lnPenBlue As Number, lnFillRed As Number, lnFillGreen As Number, lnFillBlue As Number, nLeft As Number, nTop As Number,;
  5119.     lcContents As String, lcFillChar As String, lnOffset As Integer, nWidth As Integer, lnCodePage As Integer, nHeight As Number,;
  5120.     lcPicture As String, lcStyle As String, lnMode as Integer
  5121. Local lnAlto As Number, lnTxtWidth As String, lnFontHandle As Integer, lcUnderLineText As String, lnRotate As Integer, lnCharWidth As Integer
  5122. lnRotate = 0
  5123. With This
  5124.     If !Empty(lcStyle) Then &&Dynamic Properties are stored here as xml
  5125.         If .ProcessDynamics(lcStyle, "LABEL") Then
  5126.             lnRotate = Iif(PemStatus(.oDynamics, "nRotationDegree", 5),. oDynamics.nRotationDegree, 0)
  5127.         EndIf
  5128.     EndIf
  5129.     If lnPenRed=-1 And lnPenBlue=-1 And lnPenGreen=-1 Then &&Replace the Default forecolor of VFP with Black
  5130.         Store 0 To lnPenBlue, lnPenRed, lnPenGreen
  5131.     EndIf
  5132.     If lnFillRed=-1 And lnFillBlue=-1 And lnFillGreen=-1 Then &&Default Colors of VFP Report Designer
  5133.         Store 255 To lnFillRed, lnFillBlue, lnFillGreen
  5134.     EndIf
  5135.     * Draw the field background
  5136.     IF lnMode = 0 && Mode: 0 = Opaque background; 1 = Transparent
  5137.         lnPenSize = 0
  5138.         lnPenPat = 0
  5139.         lnFillPat = 1
  5140.         lcStyle = ""
  5141.         This.ProcessShapes(lnFillRed, lnFillGreen, lnFillBlue, ;
  5142.                 lnFillRed, lnFillGreen, lnFillBlue, ;
  5143.                 nLeft, nTop, nWidth + 5, nHeight, lnOffset, ;
  5144.                 lnPenSize, lnPenPat, lnFillPat, lcStyle, lnMode)
  5145.     ENDIF
  5146.     nTop = .nPageHeight - nTop &&Change the Top Coordinates Because of the PDF Coordinate System
  5147. * Get the font Handle
  5148. * If no font is retrieved, then draw the string as an image
  5149. lnFontHandle = This.Getfonthandle(lcFontFace, liFontStyle)
  5150. IF lnFontHandle = 0
  5151.     LOCAL lcImage, lnTxtW, lnTxtH
  5152.     lnTxtW  = nWidth
  5153.     lnTxtH  = nHeight
  5154.     lcImage = This.StringToPic(lcContents, lcFontFace, lnFontSize, ;
  5155.         IIF(lnPenRed   = -1, 0, lnPenRed), ;
  5156.         IIF(lnPenGreen = -1, 0, lnPenGreen), ;
  5157.         IIF(lnPenBlue  = -1, 0, lnPenBlue), ;
  5158.         0, @lnTxtW, @lnTxtH)
  5159.     This.ProcessPictures2(lcImage, nLeft, nTop, lnTxtW, lnTxtH)
  5160.     RETURN
  5161. ENDIF
  5162. *    lnFontHandle = HPDF_GetFont(.pdfHandle, .SearchFont(lcFontFace, liFontStyle), Iif(Empty(.cCodePage), NULL, .cCodePage)) &&Find and select the font
  5163.     lnCharWidth = FontMetric(6, lcFontFace, lnFontSize, .cTextStyle)
  5164.     This._Stat = HPDF_Page_BeginText(.oPage) &&Start text proccesing mode
  5165.     This._Stat = HPDF_Page_SetFontAndSize(.oPage, lnFontHandle, lnFontSize) 
  5166.     lnTxtWidth = HPDF_Page_TextWidth(.oPage, lcContents) &&Get the size of the text width
  5167. *    lnAlto = HPDF_Page_GetCurrentFontSize(.oPage)
  5168.     lnAlto = FontMetric(1, lcFontFace, lnFontSize, .cTextStyle)
  5169.     This._Stat = HPDF_Page_SetRGBStroke(.oPage, lnFillRed / 255, lnFillGreen / 255, lnFillBlue / 255) &&Set Forecolor of the text
  5170.     This._Stat = HPDF_Page_SetRGBFill(.oPage, lnPenRed / 255, lnPenGreen / 255, lnPenBlue / 255) &&Set Forecolor of the text
  5171.     If Bittest(liFontStyle, 2) Then
  5172.         lcUnderLineText=Replicate("_", Round(lnTxtWidth/HPDF_Page_TextWidth(.oPage, "_"), 0))
  5173.         .lUnderline= .T.
  5174.     Else
  5175.         .lUnderline= .F.
  5176.     EndIf
  5177.     If lnRotate=0 Then
  5178.         LOCAL lcOrigContents
  5179.         lcOrigContents = lcContents
  5180.         LOCAL lnParag, lnParHeight, n, lcPar, lnParTop, lnAlignMode, lnParWidth
  5181.         lnParTop = 0
  5182.         lnParag  = GETWORDCOUNT(lcContents, CHR(10))
  5183.         DO CASE
  5184.         CASE EMPTY(lcPicture)  && Left aligned
  5185.             lnAlignMode = HPDF_TALIGN_LEFT
  5186.         CASE lcPicture = '"@I"'  && Center aligned
  5187.             lnAlignMode = HPDF_TALIGN_CENTER
  5188.         OTHERWISE && Right aligned
  5189.             lnAlignMode = HPDF_TALIGN_RIGHT
  5190.         ENDCASE
  5191.         FOR m.n = 1 TO lnParag
  5192.             lcPar = GETWORDNUM(lcOrigContents, m.n, CHR(10))
  5193.             IF .lUnderline
  5194.                 lnParWidth = HPDF_Page_TextWidth(.oPage, lcPar) && Get the size of the text width
  5195.                 lcUnderLineText = Replicate("_", Round(lnParWidth/HPDF_Page_TextWidth(.oPage, "_"), 0) + 0.3)
  5196.             ENDIF
  5197.             * Because in labels we don't have a width limit,
  5198.             * here we multiply by 1000 the width, to make sure the text for that line
  5199.             * will fit
  5200.             lnParHeight = This.GetParHeight(lcPar, lcFontFace, lnFontSize, liFontStyle, nLeft, nTop, nWidth * 1000, nHeight)
  5201.             DO CASE
  5202.             CASE lnAlignMode = HPDF_TALIGN_CENTER
  5203.                 This._Stat = HPDF_Page_TextRect(.oPage, nLeft - 20, nTop - lnParTop, nLeft + nWidth + 20, nTop - nHeight - lnAlto, lcPar, lnAlignMode,0)
  5204.                 If .lUnderline Then
  5205.                     This._Stat = HPDF_Page_TextRect(.oPage, nLeft - 20, nTop - lnParTop, nLeft + nWidth + 20, nTop - nHeight - lnAlto, lcUnderLineText, lnAlignMode, 0)
  5206.                 EndIf
  5207.             CASE lnAlignMode = HPDF_TALIGN_RIGHT
  5208.                 This._Stat = HPDF_Page_TextRect(.oPage, nLeft - 20, nTop - lnParTop, nLeft + nWidth, nTop - nHeight - lnAlto, lcPar, lnAlignMode,0)
  5209.                 If .lUnderline Then
  5210.                     This._Stat = HPDF_Page_TextRect(.oPage, nLeft - 20, nTop - lnParTop, nLeft + nWidth, nTop - nHeight - lnAlto, lcUnderLineText, lnAlignMode, 0)
  5211.                 EndIf
  5212.             OTHERWISE
  5213.                 This._Stat = HPDF_Page_TextRect(.oPage, nLeft, nTop - lnParTop, nLeft + lnTxtWidth + lnCharWidth, nTop - nHeight - lnAlto, lcPar, lnAlignMode,0)
  5214.                 If .lUnderline Then
  5215.                     This._Stat = HPDF_Page_TextRect(.oPage, nLeft, nTop - lnParTop, nLeft + lnTxtWidth + lnCharWidth, nTop - nHeight - lnAlto, lcUnderLineText, lnAlignMode, 0)
  5216.                 EndIf
  5217.             ENDCASE
  5218.             lnParTop    = lnParTop + lnParHeight
  5219.         ENDFOR
  5220.     Else
  5221.         *!* Let's Draw the rotated text
  5222.         Local lnRad As Number
  5223.         lnRad = ((lnRotate * -1) / 180) * Pi()
  5224.         This._Stat = HPDF_Page_SetTextMatrix (.oPage, Cos(lnRad), Sin(lnRad), -Sin(lnRad), Cos(lnRad), nLeft, nTop)
  5225.         This._Stat = HPDF_Page_ShowText (.oPage, lcContents)
  5226.     EndIf
  5227.     This._Stat = HPDF_Page_EndText(.oPage)
  5228. ENDWITH
  5229. ENDPROC
  5230. PROCEDURE processpictures
  5231. Lparameters nTop As Number,nLeft As Number,nWidth As Number,nHeight As Number,lcContents As String,;
  5232.     GDIPlusImage As Number, lnOffset As Integer, liPictureMode As Integer, lcStyle As String
  5233. #Define PICTURE_SOURCE_FILENAME         0  && stored in PICTURE column
  5234. #Define PICTURE_SOURCE_GENERAL          1  && stored in NAME    column
  5235. #Define PICTURE_SOURCE_EXPRESSION       2  && stored in NAME    column
  5236. IF EMPTY(GDIPlusImage) AND EMPTY(lcContents) && Nothing to render
  5237.                     && try drawing directly, from the original canvas
  5238.     RETURN .F.
  5239. ENDIF
  5240. Local lcFile As String, lcFile2 As String, lnHandle As Integer
  5241. nTop = This.nPageHeight - nTop
  5242. lnHandle = 0
  5243. Local lnPicWidth, lnPicHeight
  5244. Store 0 TO lnPicWidth, lnPicHeight
  5245. * liPictureMode = MAX(liPictureMode, 1)
  5246. If GDIPlusImage != 0 Then &&General Field or Expresion
  5247.     * CChalom 2010-01-17
  5248.     * Removed the dependance of having "System.App" from GdiPlusX
  5249.     * Now using _Gdiplus.vcx that is already embedded in ReportOutput.App
  5250.     *!* Original code
  5251.     *!*        Do System.App &&Initialize GDIPLUSX library
  5252.     *!*        Local loImage As xfcBitmap
  5253.     *!*        With _Screen.System.Drawing
  5254.     *!*            loImage = .Bitmap.New()
  5255.     *!*            loImage.Handle = GDIPlusImage
  5256.     *!*            lcFile = This._cTempFolder + Sys(2015) + ".Png"
  5257.     *!*            loImage.Save(lcFile, .Imaging.Imageformat.Png)
  5258.     *!*        EndWith
  5259.         lcFile = This.GetTempFile("Png")
  5260.         Local loImage As GpImage Of (ADDBS(HOME()) + "FFC\_GdiPlus.vcx")
  5261.         loImage = NEWOBJECT("GpImage", "_GdiPlus.vcx")
  5262.         loImage.SetHandle(GDIPlusImage)
  5263.         lnPicWidth = loImage.ImageWidth
  5264.         lnPicHeight = loImage.ImageHeight
  5265.         loImage.SaveToFile(lcFile,"image/png")
  5266.         loImage = NULL
  5267.     *---
  5268.         lnHandle = HPDF_LoadPngImageFromFile(This.pdfHandle, lcFile)
  5269. Else &&File Name
  5270.     *!* 10/03/2010 Change to reuse image handles
  5271.     IF FILE(lcContents) AND (liPictureMode <> 0) THEN && If using 'CLIP'
  5272.                                             && We wont store the image handle
  5273.         * lcFile = lcContents
  5274.         lcFile = This.GetTempFile(JustExt(lcContents))
  5275. *        lcFile = This._cTempFolder + Sys(2015) + "." + JustExt(lcContents)
  5276.         ** lnHandle = This.GetPictureHandle(lcContents, lcFile, @lnPicWidth, @lnPicHeight)
  5277.         *!* 2010-08-25 - Jacques Parent
  5278.         *!* Add @ to lcFile parameters so the new lcFile can be updated by the GetPictureHandle method
  5279.         *!* The lcFile will then be added to oTempImagesCollection and will be cleaned up later.
  5280.         lnHandle = This.GetPictureHandle(lcContents, @lcFile, @lnPicWidth, @lnPicHeight)
  5281.     ENDIF
  5282.     IF FILE(lcContents) AND (liPictureMode = 0) THEN && If using 'CLIP'
  5283.         lcFile = lcContents
  5284.     ENDIF
  5285. ENDIF
  5286. IF (!ISNULL(lnHandle) And lnHandle > 0) ; && Valid Image Handle
  5287.             OR (liPictureMode = 0) &&Clip
  5288.     DO CASE 
  5289.         CASE liPictureMode = 0 AND (NOT EMPTY(lcFile)) && 0 &&Clip
  5290.             lnHandle = This.CropImage(lcFile, 0, 0, @nWidth, @nHeight)
  5291. *!*                IF lcFile = lcContents
  5292. *!*                    lcFile = ""
  5293. *!*                ENDIF
  5294.             IF lnHandle > 0
  5295.                 This._Stat = HPDF_Page_DrawImage(This.oPage, lnHandle, nLeft, nTop - nHeight, nWidth, nHeight)
  5296.             ELSE 
  5297.                 RETURN .F.
  5298.             ENDIF 
  5299.         Case liPictureMode = 1 &&Scale Keeping the Shape
  5300.             * CChalom
  5301.             * Calculating the image size for isometric images
  5302.             If lnPicWidth = 0
  5303.                 Local loVFPImg as Image
  5304.                 loVFPImg = CreateObject("Image")
  5305.                 *!* loVFPImg.Picture = lcFile
  5306.                 loVFPImg.Picture = lcContents    && 2010-09-17 - Jacques Parent - If lnPicWidth  = 0, then the lcFile does not point to the actual temporary file.  Take then the original one.
  5307.                 lnPicWidth = loVFPImg.Width
  5308.                 lnPicHeight = loVFPImg.Height
  5309.                 loVFPImg = NULL
  5310.             EndIf
  5311.             lnPicWidth = (lnPicWidth / 960) * 72
  5312.             lnPicHeight = (lnPicHeight / 960) * 72 
  5313.             * Isometric Adjustment
  5314.             Local lnHorFactor, lnVertFactor, lnResizeFactor, lnIsoWidth, lnIsoHeight
  5315.             m.lnHorFactor = m.nWidth / m.lnPicWidth
  5316.             m.lnVertFactor = m.nHeight / m.lnPicHeight
  5317.             m.lnResizeFactor = MIN(m.lnHorFactor, m.lnVertFactor)
  5318.             m.lnIsoWidth = m.lnPicWidth * m.lnResizeFactor
  5319.             m.lnIsoHeight = m.lnPicHeight * m.lnResizeFactor
  5320.             This._Stat = HPDF_Page_DrawImage(This.oPage, lnHandle, nLeft, nTop - lnIsoHeight, lnIsoWidth, lnIsoHeight)
  5321.             * ---
  5322.         Otherwise &&Stretch
  5323.             IF lnHandle <= 0
  5324.                 RETURN .F.
  5325.             ENDIF 
  5326.             This._Stat = HPDF_Page_DrawImage(This.oPage, lnHandle, nLeft, nTop - nHeight, nWidth, nHeight)
  5327.     ENDCASE 
  5328. ELSE 
  5329.     RETURN .F.  && did not succeed to load the image, so try from the report canvas
  5330. ENDIF 
  5331. ENDPROC
  5332. PROCEDURE processlines
  5333. Lparameters lnPenRed As Integer,lnPenGreen As Integer,lnPenBlue As Integer,nTop As Number,nLeft As Number,nWidth As Number,;
  5334. nHeight As Number, lnPenSize As Integer, lnOffSet As Number, lnPenPat As Integer, lcStyle As String
  5335. Local lcDash As String
  5336. With This
  5337.     If lnPenRed!=-1 And lnPenGreen!=-1 And lnPenBlue!=-1 Then
  5338.         This._Stat = HPDF_Page_SetRGBStroke(.oPage, lnPenRed / 255, lnPenGreen / 255, lnPenBlue / 255)
  5339.     Else
  5340.         This._Stat = HPDF_Page_SetRGBStroke(.oPage, 0, 0, 0)
  5341.     EndIf
  5342.     nTop = .nPageHeight - nTop
  5343.     Do Case
  5344.         Case lnPenPat=8 &&Normal Mode
  5345.             This._Stat = HPDF_Page_SetDash(.oPage, Null, 0, 0)
  5346.         Case lnPenPat=1 &&Dotted
  5347.             lcDash=Chr(3) + Chr(0) + Chr(0)
  5348.             This._Stat = HPDF_Page_SetDash(.oPage, lcDash, 1, 1)
  5349.         Case lnPenPat=2 &&Dashed
  5350.             lcDash = Chr(18)+Chr(0)+Chr(6)+Chr(0)+Chr(0)
  5351.             This._Stat = HPDF_Page_SetDash(.oPage, lcDash, 2, 2)
  5352.         Case lnPenPat=3 &&Dash-dot
  5353.             lcDash = Chr(9)+Chr(0)+Chr(6)+Chr(0)+Chr(3)+Chr(0)+Chr(6)+Chr(0)+Chr(0)
  5354.             This._Stat = HPDF_Page_SetDash(.oPage, lcDash, 4, 0)
  5355.         Case lnPenPat=4 &&Dash-dot-dot
  5356.             lcDash = Chr(9)+Chr(0)+Chr(3)+Chr(0)+Chr(3)+Chr(0)+Chr(3)+Chr(0)+Chr(3)+Chr(0)+Chr(3)+Chr(0)+Chr(0)
  5357.             This._Stat = HPDF_Page_SetDash(.oPage, lcDash, 6, 0)        
  5358.     EndCase
  5359.     If lnOffSet=1 Then &&Horizontal Line
  5360.         If lnPenSize>=1 Then
  5361.             This._Stat = HPDF_Page_SetLineWidth(.oPage, lnPenSize)
  5362.         Else
  5363.             This._Stat = HPDF_Page_SetLineWidth(.oPage, 0)
  5364.         EndIf
  5365.         This._Stat = HPDF_Page_MoveTo(.oPage, nLeft, nTop) &&Move to the screen position
  5366.         This._Stat = HPDF_Page_LineTo(.oPage, nLeft + nWidth, nTop)
  5367.     Else &&Vertical Line
  5368.         If lnPenSize>=1 Then
  5369.             This._Stat = HPDF_Page_SetLineWidth(.oPage, lnPenSize)
  5370.         Else
  5371.             This._Stat = HPDF_Page_SetLineWidth(.oPage, 0)
  5372.         EndIf
  5373.         This._Stat = HPDF_Page_MoveTo(.oPage, nLeft, nTop - nHeight) 
  5374.         This._Stat = HPDF_Page_LineTo(.oPage, nLeft, nTop )
  5375.     EndIf
  5376.     This._Stat = HPDF_Page_Stroke(.oPage)
  5377. EndWith
  5378. ENDPROC
  5379. PROCEDURE getpicturehandle
  5380. LPARAMETERS lcInternalName As String, lcExternalName As String, lnPicWidth As Integer, lnPicHeight As Integer
  5381. LOCAL lcFileStream As String, lnHandle As Integer, lcExtension As String 
  5382. IF VARTYPE(This.oPictureHandles) != "O" Then
  5383.     This.oPictureHandles = CreateObject("Collection")
  5384. ENDIF
  5385. lnHandle = This.oPictureHandles.GetKey(lcInternalName)
  5386. If lnHandle = 0 Then
  5387.     lcFileStream = FILETOSTR(lcInternalName)
  5388.     TRY 
  5389.         STRTOFILE(lcFileStream, lcExternalName, 0)
  5390.     CATCH TO loExc
  5391.         * SET STEP ON 
  5392.     ENDTRY
  5393.     lcExtension = Upper(JustExt(lcExternalName))
  5394.     Do Case
  5395.         *!* 2011-04-22 - Fabio Vieira
  5396.         *!* <Begin
  5397.         *!* Picture recompresion 
  5398.         *!* Case lcExtension = "JPG" Or lcExtension = "JPEG"
  5399.         *!*     lnHandle = HPDF_LoadJpegImageFromFile(This.pdfHandle, lcExternalName)
  5400.         Case lcExtension = "JPG" Or lcExtension = "JPEG" Or lcExtension = "BMP"
  5401.             Local loVfpImg, lcFile
  5402.             loVFPImg = CreateObject("Image")
  5403.             loVFPImg.Picture = lcExternalName
  5404.             lcFile  = This.GetTempFile("JPG")
  5405.             loImage = NEWOBJECT("GpBitmap", "_GdiPlus.vcx")
  5406.             loImage.CreateFromFile(lcExternalName)
  5407.             loImage.SetResolution(m.loVFPImg.Width,m.loVFPImg.Height)            
  5408.             loImage.SaveToFile(m.lcFile ,"image/jpeg")
  5409.             If  this.FileSize(m.lcFile) < this.FileSize(m.lcExternalName)
  5410.                 lcExternalName = m.lcFile
  5411.             EndIf 
  5412.             loImage = NULL 
  5413.             loVFPImg = NULL
  5414.         *!* End>                        
  5415.             lnHandle = HPDF_LoadJpegImageFromFile(This.pdfHandle, m.lcExternalName)
  5416.         Case lcExtension = "PNG"
  5417.             *!* 2010-09-27 - Jacques Parent - Checking for transparency
  5418.             Local loBmpTmp as GpBitmap
  5419.             loBmpTmp = NewObject("GpBitmap", "_GdiPlus.vcx")
  5420.             loBmpTmp.CreateFromFile(lcExternalName)
  5421.             lnPicWidth = loBmpTmp.ImageWidth
  5422.             lnPicHeight = loBmpTmp.ImageHeight
  5423.             IF     This.IsPixelALPHA(loBmpTmp.GetPixel(0              , 0               ));
  5424.                     OR     This.IsPixelALPHA(loBmpTmp.GetPixel(0              , lnPicHeight - 1));
  5425.                     OR     This.IsPixelALPHA(loBmpTmp.GetPixel(lnPicWidth - 1, 0               ));
  5426.                     OR     This.IsPixelALPHA(loBmpTmp.GetPixel(lnPicWidth - 1, lnPicHeight - 1))
  5427.                 *!* Then, we will convert the file as if it were a GIF
  5428.                 *!* This will let the transparency to be converted with a white background.
  5429.                 *!* To do this, simply do not call the HPDF_LoadPngImageFromFile function.
  5430.             ELSE
  5431.                 *!* Treat as normal PNG
  5432.                 lnHandle = HPDF_LoadPngImageFromFile(This.pdfHandle, lcExternalName)
  5433.             ENDIF
  5434.             loBmpTmp = NULL
  5435.             *!* Original code
  5436.             *!*                lnHandle = HPDF_LoadPngImageFromFile(This.pdfHandle, lcExternalName)
  5437.         Otherwise
  5438.     EndCase
  5439.     IF lnHandle = 0
  5440.         * CChalom
  5441.         * This is being done outside the DOCASE statement because sometimes HARU may fail loading the image
  5442.         * So, here we give it another chance to load the image, this time using a converted image by GdiPlus
  5443.         * Clear the existing HPDF errors
  5444.         * As the image could not be loaded, we probably have an error, that needs to be cleared
  5445.         * Here we can see if an error occurred during the rendering process of the 
  5446.         * current field
  5447.         This.ClearPDFErrors()
  5448.         * Not Supported Format, will never happen when is a general field
  5449.         * Convert all images to PNG, that is a safer image type for HPDF
  5450.         Local loBmp2 as GpBitmap, lcFile as String, lcFile2 As String
  5451.         lcFile  = lcExternalName
  5452.         lcFile2 = This.GetTempFile("PNG")
  5453.         loBmp2 = NewObject("GpBitmap", "_GdiPlus.vcx")
  5454.         loBmp2.CreateFromFile(lcFile)
  5455.         lnPicWidth = loBmp2.ImageWidth
  5456.         lnPicHeight = loBmp2.ImageHeight
  5457.         * Check if we have an invalid size
  5458.         IF lnPicWidth = 0 OR lnPicHeight = 0
  5459.             RETURN 0
  5460.         ENDIF
  5461.         LOCAL loBmp3 as GpBitmap OF HOME() + "\ffc\_Gdiplus.vcx"
  5462.         loBmp3 = NewObject("GpBitmap", "_GdiPlus.vcx") &&, "", lnPicWidth, lnPicHeight)
  5463.         loBmp3.Create(lnPicWidth, lnPicHeight)
  5464.         loBmp3.SetResolution(loBmp2.HorizontalResolution, loBmp2.VerticalResolution)    && Jacques Parent - 2010-12-01 - Set original resolution of the file
  5465.         LOCAL loGfx as GpGraphics OF HOME() + "\ffc\_Gdiplus.vcx"
  5466.         loGfx  = NewObject("GpGraphics", "_GdiPlus.vcx")
  5467.         loGfx.CreateFromImage(loBmp3)
  5468.         loGfx.Clear(0xFFFFFFFF)
  5469.         loGfx.DrawImageAt(loBmp2, 0, 0)
  5470.         loBmp3.SaveToFile(lcFile2, "image/png")
  5471.         loBmp2 = Null
  5472.         loBmp3 = NULL
  5473.         lcFile = lcFile2
  5474.         * Try loading the image
  5475.         lnHandle = HPDF_LoadPngImageFromFile(This.pdfHandle, lcFile)
  5476.         *!* 2010-08-25 - Jacques Parent - Update the image filename
  5477.         lcExternalName = lcFile
  5478.     ENDIF 
  5479.     This.oPictureHandles.Add(lnHandle, lcInternalName)
  5480.     lnHandle = This.oPictureHandles.Item(lnHandle)
  5481. ENDIF
  5482. RETURN lnHandle
  5483. ENDPROC
  5484. PROCEDURE ispixelalpha
  5485. LPARAMETERS tnARGB
  5486. IF ISNULL(tnARGB)
  5487.     tnARGB = 0xFF000000    && OPAQUE BLACK
  5488. ENDIF
  5489. LOCAL tlAlphaIsUsed
  5490. tlAlphaIsUsed = .T.
  5491. *!* Alpha = BITAND(BITRSHIFT(tnARGB, 24), 0xFF)
  5492. *!* Red   = BITAND(BITRSHIFT(tnARGB, 16), 0xFF)
  5493. *!* Green = BITAND(BITRSHIFT(tnARGB,  8), 0xFF)
  5494. *!* Blue  = BITAND(BITRSHIFT(tnARGB,  0), 0xFF)
  5495. *!*    tlAlphaIsUsed = (BITAND(tnARGB, 0xFF000000) / 16^6) < 255
  5496. tlAlphaIsUsed = BITAND(BITRSHIFT(tnARGB, 24), 0xFF) < 255
  5497. RETURN tlAlphaIsUsed
  5498. ENDPROC
  5499. PROCEDURE outputfromdata
  5500. LPARAMETERS toListener as ReportListener, tcOutputDBF, tnWidth, tnHeight
  5501. * lnSecs = SECONDS()
  5502. IF VARTYPE(toListener) <> "O"
  5503.     MESSAGEBOX("Invalid parameter. Report listener not available", 16, "Error")
  5504.     RETURN
  5505. ENDIF
  5506. This.oActiveListener = toListener
  5507. * =DoFoxyTherm(90, "Texto label", "Titulo")
  5508. * =DoFoxyTherm(-1, "Teste2", "Titulo") && Continuo
  5509. * =DoFoxyTherm() && Desliga
  5510. IF NOT This.QuietMode
  5511.     LOCAL lnSecs
  5512.     lnSecs = SECONDS()
  5513.     *!*    ._InitStatusText    = .GetLoc("INITSTATUS") + SPACE(1)
  5514.     *!*    ._RunStatusText     = .GetLoc("RUNSTATUS")  + SPACE(1)
  5515.     *!*    ._SecondsText       = .GetLoc("SECONDS")    + SPACE(1)
  5516.     =DoFoxyTherm(1, "0%", _goFP._InitStatusText)
  5517. ENDIF 
  5518. * Ensure we are at the correct DataSession
  5519. * SET DATASESSION TO (toListener.CurrentDataSession)
  5520. SET DATASESSION TO (toListener.ListenerDataSession)
  5521. * toListener.SetCurrentDataSession()
  5522. LOCAL lnSelect,llExit
  5523. lnSelect = SELECT()
  5524. llExit   = .F.
  5525. SELECT (tcOutputDBF)
  5526. * Generate PDF using the stored information
  5527. This.lDefaultMode = .F.
  5528. This.nPageWidth  = (tnWidth / 960) * 72
  5529. This.nPageHeight = (tnHeight / 960) * 72
  5530. LOCAL lnPgFrom, lnPgTo
  5531. lnPgFrom = _goFP._ClausenRangeFrom && = loListener.COMMANDCLAUSES.RangeFrom
  5532. lnPgTo   = IIF(_goFP._ClausenRangeTo = -1, 999999, _goFP._ClausenRangeTo) && = loListener.COMMANDCLAUSES.RangeTo && -1 = All pages
  5533. This.nLineHeightRatio = NVL(_goFP.nPDFLineHeightRatio, 1)
  5534. This.nLineHeightRatio = MAX(This.nLineHeightRatio, .10)
  5535. This.nLineHeightRatio = MIN(This.nLineHeightRatio, 2)
  5536. * Prepare Watermark
  5537. IF toListener.lUsingWaterMark
  5538.     LOCAL lnX, lnY, lnW, lnH, lcTempFile, lcType
  5539.     LOCAL loBmp as GpImage OF HOME() + "\FFC\_Gdiplus.vcx"
  5540.     lcType = LOWER(JUSTEXT(toListener.cWatermarkImage))
  5541.     DO CASE
  5542.     CASE INLIST(lcType, "jpg", "jpeg", "tif", "tiff")
  5543.         lcType = "jpeg"
  5544.     OTHERWISE
  5545.         lcType = "png"
  5546.     ENDCASE
  5547.     lcTempFile = This.GetTempFile(lcType)
  5548.     IF VARTYPE(toListener.oWaterMarkBmp) = "O"
  5549.         toListener.oWaterMarkBmp.SaveToFile(lcTempFile, "image/" + lcType)
  5550.         This._cWMpicture = lcTempFile
  5551.     ENDIF
  5552.     LOCAL lnX, lnY, lnWidth, lnHeight
  5553.     lnX = (1 - toListener.nWatermarkWidthRatio) / 2
  5554.     lnY = (1 - toListener.nWatermarkHeightRatio) / 2
  5555.     lnWidth  = toListener.nWatermarkWidthRatio
  5556.     lnHeight = toListener.nWatermarkHeightRatio
  5557.     This._nWMx = lnx * This.nPageWidth
  5558.     This._nWMy = lnY * This.nPageHeight
  5559.     This._nWMw = This.nPageWidth * lnWidth
  5560.     This._nWMh = This.nPageHeight * lnHeight
  5561. ENDIF
  5562. * Initialize class
  5563. This.BeforeReport()
  5564. IF This.QuietMode 
  5565.     SCAN
  5566.         IF BETWEEN(Page, lnPgFrom, lnPgTo)
  5567.             IF NOT This.Render(FRXRECNO, Left, Top, Width, Height, ContType, UNContents, 0)
  5568.                 llExit = .T.
  5569.                 EXIT 
  5570.             ENDIF
  5571.         ENDIF
  5572.     ENDSCAN
  5573. ELSE 
  5574.     LOCAL lnPercent, lnLastPercent, lnDelay, lnTotRecs, lnRec
  5575.     lnLastPercent = 0
  5576.     lnDelay       = 2
  5577.     lnTotRecs     = RECCOUNT()
  5578.     lnRec         = 0
  5579.     SCAN
  5580.         IF BETWEEN(Page, lnPgFrom, lnPgTo)
  5581.             lnRec = lnRec + 1
  5582.             lnPercent = CEILING(100*lnRec/lnTotRecs)
  5583.             IF (lnLastPercent > 0 AND ;
  5584.                     lnPercent - lnLastPercent < lnDelay  AND ;
  5585.                     lnPercent <> 100)
  5586.             ELSE 
  5587.                 =DoFoxyTherm(lnPercent, ;
  5588.                     ALLTRIM(TRANSFORM(lnPercent)) + "%  - " + TRANSFORM(FLOOR(SECONDS() - lnSecs)) + " " + _goFP._SecondsText , ;
  5589.                     _goFP._RunStatusText)
  5590.                 lnLastPercent = lnPercent
  5591.             ENDIF 
  5592.             IF NOT This.Render(FRXRECNO, Left, Top, Width, Height, ContType, UNContents, 0)
  5593.                 llExit = .T.
  5594.                 EXIT 
  5595.             ENDIF
  5596.         ENDIF
  5597.     ENDSCAN
  5598.     =DoFoxyTherm(100, ;
  5599.         "100%  - " + TRANSFORM(CEILING(SECONDS() - lnSecs)) + " " + _goFP._SecondsText , ;
  5600.                 _goFP._RunStatusText)
  5601. ENDIF 
  5602. IF NOT llExit
  5603.     * Finalize
  5604.     This.AfterReport()
  5605.     This.UnloadReport()
  5606. ENDIF
  5607. USE IN SELECT (tcOutputDBF)
  5608. SELECT (lnSelect)
  5609. * MESSAGEBOX("Elapsed " + TRANSFORM(SECONDS() - lnSecs) + " secs.")
  5610. IF NOT This.QuietMode 
  5611.     =DoFoxyTherm()
  5612. ENDIF
  5613. RETURN
  5614. ENDPROC
  5615. PROCEDURE getparheight
  5616. LPARAMETERS tcText, tcFontName, tnSize, tcStyle, tnLeft, tnTop, tnWidth, tnHeight
  5617. LOCAL lnX0, lnY0, lnW0, lnH0, lnFactor
  5618. lnX0 = tnLeft   * 960 / 72
  5619. lnY0 = tnTop    * 960 / 72
  5620. lnW0 = tnWidth  * 960 / 72
  5621. lnH0 = tnHeight * 960 / 72
  5622. LOCAL loFont, lnChars, lnLines, lnHeight, lnWidth
  5623. LOCAL loRect as GpRectangle OF HOME() + "\ffc\_Gdiplus.vcx"
  5624. loRect = NEWOBJECT("GPRectangle", "_Gdiplus.vcx", "", lnX0, lnY0, lnW0, lnH0)
  5625. * Create a font object using the text object's settings.
  5626. loFont = NEWOBJECT("GPFont", "_Gdiplus.vcx")
  5627. loFont.Create(tcFontName, tnSize, tcStyle, 3)
  5628. LOCAL loGfx as GpGraphics OF HOME() + "\ffc\_Gdiplus.vcx"
  5629. loGfx  = NEWOBJECT("GpGraphics", "_Gdiplus.vcx")
  5630. IF This.lDefaultMode 
  5631.     lnFactor = 1
  5632.     loGfx.SetHandle(IIF(This.IsSuccessor, ;
  5633.         This.SharedGDIPlusGraphics, This.GDIPlusGraphics))
  5634. ELSE 
  5635.     lnFactor = 10
  5636.     loGfx.CreateFromHWND(_Screen.HWnd)
  5637.     loGfx.PageUnit  = 1
  5638.     loGfx.PageScale = 0.3
  5639.     loRect.w = lnW0 / lnFactor
  5640.     loRect.h = lnH0 / lnFactor
  5641. ENDIF
  5642. LOCAL loSize as GpSize OF HOME() + "\ffc\_Gdiplus.vcx"
  5643. loSize = loGfx.MeasureStringA(tcText, loFont, loRect.GdipRectF, .F., @lnChars, @lnLines)
  5644. lnWidth  = loSize.w
  5645. lnHeight = loSize.h
  5646. * loGfx.SetHandle(0)
  5647. RETURN (lnHeight / 960) * 72 * lnFactor
  5648. ENDPROC
  5649. PROCEDURE stringtopic
  5650. * CChalom 2010-12-18
  5651. * Converts the string to image
  5652. LPARAMETERS tcString, tcFont, tnSize, tnR, tnG, tnB, tnAlign, tnW, tnH
  5653. #define GDIPLUS_Unit_Point            3
  5654. #define GDIPLUS_FontStyle_Regular     0
  5655. LOCAL lnW0, lnH0, lnFactor
  5656. lnW0 = tnW * 960 / 72
  5657. lnH0 = tnH * 960 / 72
  5658. lnFactor = 10
  5659. LOCAL loRect as GpRectangle OF HOME() + "\ffc\_Gdiplus.vcx"
  5660. loRect = NEWOBJECT("GPRectangle")
  5661. loRect.w = lnW0 / lnFactor
  5662. loRect.h = lnH0 / lnFactor
  5663. LOCAL loGfx0 as GpGraphics OF HOME(1) + "ffc\_gdiplus.vcx"
  5664. loGfx0 = NEWOBJECT("gpGraphics", "_gdiplus.vcx")
  5665. loGfx0.CreateFromHWND(_Screen.HWnd)
  5666. loGfx0.PageUnit  = 1
  5667. loGfx0.PageScale = 0.3
  5668. LOCAL loFont as GpFont OF HOME(1) + "ffc\_gdiplus.vcx"
  5669. loFont = NEWOBJECT("gpFont", "_gdiplus.vcx")
  5670. loFont.Create(tcFont, tnSize, GDIPLUS_FontStyle_Regular, GDIPLUS_Unit_Point)
  5671. LOCAL loStrFmt as GpStringFormat OF HOME(1) + "ffc\_gdiplus.vcx"
  5672. loStrFmt = NEWOBJECT("gpStringFormat", "_gdiplus.vcx")
  5673. loStrFmt.Create()
  5674. LOCAL loColor as GpColor OF HOME(1) + "ffc\_gdiplus.vcx"
  5675. loColor = NEWOBJECT("gpColor", "_gdiplus.vcx", "", tnR, tnG, tnB)
  5676. LOCAL loBrush as GpSolidBrush OF HOME(1) + "ffc\_gdiplus.vcx"
  5677. loBrush = NEWOBJECT("gpSolidBrush", "_gdiplus.vcx")
  5678. loBrush.Create(loColor)
  5679. LOCAL loSize as GpSize OF HOME(1) + "ffc\_gdiplus.vcx"
  5680. loSize = loGfx0.MeasureStringA(tcString, loFont, loRect.GdipRectF)
  5681. tnW = loSize.W
  5682. tnH = loSize.H
  5683. IF EMPTY(tnH) OR EMPTY(tnW)
  5684.     RETURN ""
  5685. ENDIF
  5686. LOCAL loBmp as GpBitmap OF HOME(1) + "ffc\_gdiplus.vcx"
  5687. loBmp = NEWOBJECT("gpBitmap", "_gdiplus.vcx", "", tnW, tnH)
  5688. * loBmp.SetResolution(loBmp2.HorizontalResolution, loBmp2.VerticalResolution)
  5689. LOCAL loGfx as GpGraphics OF HOME(1) + "ffc\_gdiplus.vcx"
  5690. loGfx = NEWOBJECT("gpGraphics", "_gdiplus.vcx")
  5691. loGfx.CreateFromImage(loBmp)
  5692. loGfx.PageUnit  = 1
  5693. loGfx.PageScale = 0.3
  5694. loGfx.Clear(0xFFFFFFFF)
  5695. loGfx.DrawStringA(tcString, loFont, 0h0000000000000000, loStrFmt, loBrush)
  5696. lcTempFile = This.GetTempFile("png")
  5697. loBmp.SaveToFile(lcTempFile, "image/png")
  5698. loBmp = NULL
  5699. RETURN lcTempFile
  5700. *!*    lcCommand = "RUN /N6 Explorer.Exe " + lcTempFile
  5701. *!*    &lcCommand.
  5702. ENDPROC
  5703. PROCEDURE processpictures2
  5704. * CChalom 2010-12-18
  5705. * Draws the image of the string in the PDF document
  5706. LPARAMETERS tcFile, tnLeft, tnTop, tnWidth, tnHeight
  5707. *tnWidth  = (tnWidth  / 960) * 72
  5708. *tnHeight = (tnHeight / 960) * 72
  5709. tnWidth  = tnWidth  * .75
  5710. tnHeight = tnHeight &&* .75
  5711. LOCAL lnHandle
  5712. lnHandle = HPDF_LoadPngImageFromFile(This.pdfHandle, tcFile)
  5713. This._Stat = HPDF_Page_DrawImage(This.oPage, lnHandle, tnLeft, tnTop - tnHeight, tnWidth, tnHeight)
  5714. ENDPROC
  5715. PROCEDURE _stat_assign
  5716. LPARAMETERS tnStatus
  5717. This._Stat = tnStatus
  5718. IF tnStatus != 0
  5719.     * Clear existing the HPDF errors
  5720.     * Here we can see if an error occurred during the rendering process of the 
  5721.     * current field
  5722.     LOCAL lnHPDF_err, lcHex
  5723.     lnHPDF_err = HPDF_GetError(This.pdfHandle)
  5724.     IF lnHPDF_err <> 0
  5725.         lcHex = TRANSFORM(lnHPDF_err, "@0")
  5726.         * SET STEP ON 
  5727.         HPDF_ResetError(This.pdfHandle)
  5728.     ENDIF
  5729.     IF This.lShowErrors = .T.
  5730.         IF _VFP.StartMode = 0 && Development
  5731.             LOCAL lnOption
  5732.             lnOption = MESSAGEBOX("PDFx error in " + PROGRAM(PROGRAM(-1) - 1) + CHR(13);
  5733.                 + "Error code : " + TRANSFORM(tnStatus) + CHR(13) ;
  5734.                 + "Description: " + This._ErrorInfo(tnStatus) + CHR(13) ;
  5735.                 + "Page: " + TRANSFORM(This.nCurrentPage) + CHR(13) ;
  5736.                 + "Object: " + This.cObjectToRender + CHR(13) + CHR(13) ;
  5737.                 + "Press 'Retry' to debug the application.", 16 + 2, "Error")
  5738.             IF lnOption = 3
  5739.                 CANCEL
  5740.             ENDIF
  5741.             IF lnOption = 4
  5742.                 SUSPEND
  5743.             ENDIF
  5744.         ELSE 
  5745.             MESSAGEBOX("PDFx error in " + PROGRAM(PROGRAM(-1) - 1) + CHR(13);
  5746.                 + "Error code  : " + TRANSFORM(tnStatus) + CHR(13) ;
  5747.                 + "Description : " + This._ErrorInfo(tnStatus) + CHR(13) ;
  5748.                 + "Object: " + This.cObjectToRender, 16, "Error")
  5749.         ENDIF 
  5750.     ENDIF
  5751. ENDIF
  5752. ENDPROC
  5753. PROCEDURE _errorinfo
  5754. LPARAMETERS tnStatus
  5755. #DEFINE HPDF_ARRAY_COUNT_ERR                      0x1001
  5756. #DEFINE HPDF_ARRAY_ITEM_NOT_FOUND                 0x1002
  5757. #DEFINE HPDF_ARRAY_ITEM_UNEXPECTED_TYPE           0x1003
  5758. #DEFINE HPDF_BINARY_LENGTH_ERR                    0x1004
  5759. #DEFINE HPDF_CANNOT_GET_PALLET                    0x1005
  5760. #DEFINE HPDF_DICT_COUNT_ERR                       0x1007
  5761. #DEFINE HPDF_DICT_ITEM_NOT_FOUND                  0x1008
  5762. #DEFINE HPDF_DICT_ITEM_UNEXPECTED_TYPE            0x1009
  5763. #DEFINE HPDF_DICT_STREAM_LENGTH_NOT_FOUND         0x100A
  5764. #DEFINE HPDF_DOC_ENCRYPTDICT_NOT_FOUND            0x100B
  5765. #DEFINE HPDF_DOC_INVALID_OBJECT                   0x100C
  5766. #DEFINE HPDF_DUPLICATE_REGISTRATION               0x100E
  5767. #DEFINE HPDF_EXCEED_JWW_CODE_NUM_LIMIT            0x100F
  5768. #DEFINE HPDF_ENCRYPT_INVALID_PASSWORD             0x1011
  5769. #DEFINE HPDF_ERR_UNKNOWN_CLASS                    0x1013
  5770. #DEFINE HPDF_EXCEED_GSTATE_LIMIT                  0x1014
  5771. #DEFINE HPDF_FAILD_TO_ALLOC_MEM                   0x1015
  5772. #DEFINE HPDF_FILE_IO_ERROR                        0x1016
  5773. #DEFINE HPDF_FILE_OPEN_ERROR                      0x1017
  5774. #DEFINE HPDF_FONT_EXISTS                          0x1019
  5775. #DEFINE HPDF_FONT_INVALID_WIDTHS_TABLE            0x101A
  5776. #DEFINE HPDF_INVALID_AFM_HEADER                   0x101B
  5777. #DEFINE HPDF_INVALID_ANNOTATION                   0x101C
  5778. #DEFINE HPDF_INVALID_BIT_PER_COMPONENT            0x101E
  5779. #DEFINE HPDF_INVALID_CHAR_MATRICS_DATA            0x101F
  5780. #DEFINE HPDF_INVALID_COLOR_SPACE                  0x1020
  5781. #DEFINE HPDF_INVALID_COMPRESSION_MODE             0x1021
  5782. #DEFINE HPDF_INVALID_DATE_TIME                    0x1022
  5783. #DEFINE HPDF_INVALID_DESTINATION                  0x1023
  5784. #DEFINE HPDF_INVALID_DOCUMENT                     0x1025
  5785. #DEFINE HPDF_INVALID_DOCUMENT_STATE               0x1026
  5786. #DEFINE HPDF_INVALID_ENCODER                      0x1027
  5787. #DEFINE HPDF_INVALID_ENCODER_TYPE                 0x1028
  5788. #DEFINE HPDF_INVALID_ENCODING_NAME                0x102B
  5789. #DEFINE HPDF_INVALID_ENCRYPT_KEY_LEN              0x102C
  5790. #DEFINE HPDF_INVALID_FONTDEF_DATA                 0x102D
  5791. #DEFINE HPDF_INVALID_FONTDEF_TYPE                 0x102E
  5792. #DEFINE HPDF_INVALID_FONT_NAME                    0x102F
  5793. #DEFINE HPDF_INVALID_IMAGE                        0x1030
  5794. #DEFINE HPDF_INVALID_JPEG_DATA                    0x1031
  5795. #DEFINE HPDF_INVALID_N_DATA                       0x1032
  5796. #DEFINE HPDF_INVALID_OBJECT                       0x1033
  5797. #DEFINE HPDF_INVALID_OBJ_ID                       0x1034
  5798. #DEFINE HPDF_INVALID_OPERATION                    0x1035
  5799. #DEFINE HPDF_INVALID_OUTLINE                      0x1036
  5800. #DEFINE HPDF_INVALID_PAGE                         0x1037
  5801. #DEFINE HPDF_INVALID_PAGES                        0x1038
  5802. #DEFINE HPDF_INVALID_PARAMETER                    0x1039
  5803. #DEFINE HPDF_INVALID_PNG_IMAGE                    0x103B
  5804. #DEFINE HPDF_INVALID_STREAM                       0x103C
  5805. #DEFINE HPDF_MISSING_FILE_NAME_ENTRY              0x103D
  5806. #DEFINE HPDF_INVALID_TTC_FILE                     0x103F
  5807. #DEFINE HPDF_INVALID_TTC_INDEX                    0x1040
  5808. #DEFINE HPDF_INVALID_WX_DATA                      0x1041
  5809. #DEFINE HPDF_ITEM_NOT_FOUND                       0x1042
  5810. #DEFINE HPDF_LIBPNG_ERROR                         0x1043
  5811. #DEFINE HPDF_NAME_INVALID_VALUE                   0x1044
  5812. #DEFINE HPDF_NAME_OUT_OF_RANGE                    0x1045
  5813. #DEFINE HPDF_PAGE_INVALID_PARAM_COUNT             0x1048
  5814. #DEFINE HPDF_PAGES_MISSING_KIDS_ENTRY             0x1049
  5815. #DEFINE HPDF_PAGE_CANNOT_FIND_OBJECT              0x104A
  5816. #DEFINE HPDF_PAGE_CANNOT_GET_ROOT_PAGES           0x104B
  5817. #DEFINE HPDF_PAGE_CANNOT_RESTORE_GSTATE           0x104C
  5818. #DEFINE HPDF_PAGE_CANNOT_SET_PARENT               0x104D
  5819. #DEFINE HPDF_PAGE_FONT_NOT_FOUND                  0x104E
  5820. #DEFINE HPDF_PAGE_INVALID_FONT                    0x104F
  5821. #DEFINE HPDF_PAGE_INVALID_FONT_SIZE               0x1050
  5822. #DEFINE HPDF_PAGE_INVALID_GMODE                   0x1051
  5823. #DEFINE HPDF_PAGE_INVALID_INDEX                   0x1052
  5824. #DEFINE HPDF_PAGE_INVALID_ROTATE_VALUE            0x1053
  5825. #DEFINE HPDF_PAGE_INVALID_SIZE                    0x1054
  5826. #DEFINE HPDF_PAGE_INVALID_XOBJECT                 0x1055
  5827. #DEFINE HPDF_PAGE_OUT_OF_RANGE                    0x1056
  5828. #DEFINE HPDF_REAL_OUT_OF_RANGE                    0x1057
  5829. #DEFINE HPDF_STREAM_EOF                           0x1058
  5830. #DEFINE HPDF_STREAM_READLN_CONTINUE               0x1059
  5831. #DEFINE HPDF_STRING_OUT_OF_RANGE                  0x105B
  5832. #DEFINE HPDF_THIS_FUNC_WAS_SKIPPED                0x105C
  5833. #DEFINE HPDF_TTF_CANNOT_EMBEDDING_FONT            0x105D
  5834. #DEFINE HPDF_TTF_INVALID_CMAP                     0x105E
  5835. #DEFINE HPDF_TTF_INVALID_FOMAT                    0x105F
  5836. #DEFINE HPDF_TTF_MISSING_TABLE                    0x1060
  5837. #DEFINE HPDF_UNSUPPORTED_FONT_TYPE                0x1061
  5838. #DEFINE HPDF_UNSUPPORTED_FUNC                     0x1062
  5839. #DEFINE HPDF_UNSUPPORTED_JPEG_FORMAT              0x1063
  5840. #DEFINE HPDF_UNSUPPORTED_TYPE1_FONT               0x1064
  5841. #DEFINE HPDF_XREF_COUNT_ERR                       0x1065
  5842. #DEFINE HPDF_ZLIB_ERROR                           0x1066
  5843. #DEFINE HPDF_INVALID_PAGE_INDEX                   0x1067
  5844. #DEFINE HPDF_INVALID_URI                          0x1068
  5845. #DEFINE HPDF_PAGE_LAYOUT_OUT_OF_RANGE             0x1069
  5846. #DEFINE HPDF_PAGE_MODE_OUT_OF_RANGE               0x1070
  5847. #DEFINE HPDF_PAGE_NUM_STYLE_OUT_OF_RANGE          0x1071
  5848. #DEFINE HPDF_ANNOT_INVALID_ICON                   0x1072
  5849. #DEFINE HPDF_ANNOT_INVALID_BORDER_STYLE           0x1073
  5850. #DEFINE HPDF_PAGE_INVALID_DIRECTION               0x1074
  5851. #DEFINE HPDF_INVALID_FONT                         0x1075
  5852. #DEFINE HPDF_PAGE_INSUFFICIENT_SPACE              0x1076
  5853. #DEFINE HPDF_PAGE_INVALID_DISPLAY_TIME            0x1077
  5854. #DEFINE HPDF_PAGE_INVALID_TRANSITION_TIME         0x1078
  5855. #DEFINE HPDF_INVALID_PAGE_SLIDESHOW_TYPE          0x1079
  5856. #DEFINE HPDF_EXT_GSTATE_OUT_OF_RANGE              0x1080
  5857. #DEFINE HPDF_INVALID_EXT_GSTATE                   0x1081
  5858. #DEFINE HPDF_EXT_GSTATE_READ_ONLY                 0x1082
  5859. DO CASE
  5860.        CASE tnStatus =  HPDF_ARRAY_COUNT_ERR
  5861.     RETURN ("Internal error. Data consistency was lost.")
  5862.        CASE tnStatus =  HPDF_ARRAY_ITEM_NOT_FOUND
  5863.     RETURN ("Internal error. Data consistency was lost.")
  5864.        CASE tnStatus =  HPDF_ARRAY_ITEM_UNEXPECTED_TYPE
  5865.     RETURN ("Internal error. Data consistency was lost.")
  5866.        CASE tnStatus =  HPDF_BINARY_LENGTH_ERR
  5867.     RETURN ("Data length > HPDF_LIMIT_MAX_STRING_LEN.")
  5868.        CASE tnStatus =  HPDF_CANNOT_GET_PALLET
  5869.     RETURN ("Cannot get pallet data from PNG image.")
  5870.        CASE tnStatus =  HPDF_DICT_COUNT_ERR
  5871.     RETURN ("Dictionary elements > HPDF_LIMIT_MAX_DICT_ELEMENT")
  5872.        CASE tnStatus =  HPDF_DICT_ITEM_NOT_FOUND
  5873.     RETURN ("Internal error. Data consistency was lost.")
  5874.        CASE tnStatus =  HPDF_DICT_ITEM_UNEXPECTED_TYPE
  5875.     RETURN ("Internal error. Data consistency was lost.")
  5876.        CASE tnStatus =  HPDF_DICT_STREAM_LENGTH_NOT_FOUND
  5877.     RETURN ("Internal error. Data consistency was lost.")
  5878.        CASE tnStatus =  HPDF_DOC_ENCRYPTDICT_NOT_FOUND
  5879.     RETURN ("HPDF_SetEncryptMode() or HPDF_SetPermission() called before password set.")
  5880.        CASE tnStatus =  HPDF_DOC_INVALID_OBJECT
  5881.     RETURN ("Internal error. Data consistency was lost.")
  5882.        CASE tnStatus =  HPDF_DUPLICATE_REGISTRATION
  5883.     RETURN ("Tried to re-register a registered font.")
  5884.        CASE tnStatus =  HPDF_EXCEED_JWW_CODE_NUM_LIMIT
  5885.     RETURN ("Cannot register a character to the Japanese word wrap characters list.")
  5886.        CASE tnStatus =  HPDF_ENCRYPT_INVALID_PASSWORD
  5887.     RETURN (". Tried to set the owner password to NULL. . Owner and user password are the same.")
  5888.        CASE tnStatus =  HPDF_ERR_UNKNOWN_CLASS
  5889.     RETURN ("Internal error. Data consistency was lost.")
  5890.        CASE tnStatus =  HPDF_EXCEED_GSTATE_LIMIT
  5891.     RETURN ("Stack depth > HPDF_LIMIT_MAX_GSTATE.")
  5892.        CASE tnStatus =  HPDF_FAILD_TO_ALLOC_MEM
  5893.     RETURN ("Memory allocation failed.")
  5894.        CASE tnStatus =  HPDF_FILE_IO_ERROR
  5895.     RETURN ("File processing failed. (Detailed code is set.)")
  5896.        CASE tnStatus =  HPDF_FILE_OPEN_ERROR
  5897.     RETURN ("Cannot open a file. (Detailed code is set.)")
  5898.        CASE tnStatus =  HPDF_FONT_EXISTS
  5899.     RETURN ("Tried to load a font that has been registered.")
  5900.        CASE tnStatus =  HPDF_FONT_INVALID_WIDTHS_TABLE
  5901.     RETURN (". Font-file format is invalid. . Internal error. Data consistency was lost.")
  5902.        CASE tnStatus =  HPDF_INVALID_AFM_HEADER
  5903.     RETURN ("Cannot recognize header of afm file.")
  5904.        CASE tnStatus =  HPDF_INVALID_ANNOTATION
  5905.     RETURN ("Specified annotation handle is invalid.")
  5906.        CASE tnStatus =  HPDF_INVALID_BIT_PER_COMPONENT
  5907.     RETURN ("Bit-per-component of a image which was set as mask-image is invalid.")
  5908.        CASE tnStatus =  HPDF_INVALID_CHAR_MATRICS_DATA
  5909.     RETURN ("Cannot recognize char-matrics-data of afm file.")
  5910.        CASE tnStatus =  HPDF_INVALID_COLOR_SPACE
  5911.     RETURN (". Invalid color_space parameter of HPDF_LoadRawImage.  . Color-space of a image which was set as mask-image is invalid.  . Invoked function invalid in present color-space.")
  5912.        CASE tnStatus =  HPDF_INVALID_COMPRESSION_MODE
  5913.     RETURN ("Invalid value set when invoking HPDF_SetCommpressionMode().")
  5914.        CASE tnStatus =  HPDF_INVALID_DATE_TIME
  5915.     RETURN ("An invalid date-time value was set.")
  5916.        CASE tnStatus =  HPDF_INVALID_DESTINATION
  5917.     RETURN ("An invalid destination handle was set.")
  5918.        CASE tnStatus =  HPDF_INVALID_DOCUMENT
  5919.     RETURN ("An invalid document handle was set.")
  5920.        CASE tnStatus =  HPDF_INVALID_DOCUMENT_STATE
  5921.     RETURN ("Function invalid in the present state was invoked.")
  5922.        CASE tnStatus =  HPDF_INVALID_ENCODER
  5923.     RETURN ("An invalid encoder handle was set.")
  5924.        CASE tnStatus =  HPDF_INVALID_ENCODER_TYPE
  5925.     RETURN ("Combination between font and encoder is wrong.")
  5926.        CASE tnStatus =  HPDF_INVALID_ENCODING_NAME
  5927.     RETURN ("An Invalid encoding name is specified.")
  5928.        CASE tnStatus =  HPDF_INVALID_ENCRYPT_KEY_LEN
  5929.     RETURN ("Encryption key length is invalid.")
  5930.        CASE tnStatus =  HPDF_INVALID_FONTDEF_DATA
  5931.     RETURN (". An invalid font handle was set.  . Unsupported font format.")
  5932.        CASE tnStatus =  HPDF_INVALID_FONTDEF_TYPE
  5933.     RETURN ("Internal error. Data consistency was lost.")
  5934.        CASE tnStatus =  HPDF_INVALID_FONT_NAME
  5935.     RETURN ("Font with the specified name is not found.")
  5936.        CASE tnStatus =  HPDF_INVALID_IMAGE
  5937.     RETURN ("Unsupported image format.")
  5938.        CASE tnStatus =  HPDF_INVALID_JPEG_DATA
  5939.     RETURN ("Unsupported image format.")
  5940.        CASE tnStatus =  HPDF_INVALID_N_DATA
  5941.     RETURN ("Cannot read a postscript-name from an afm file.")
  5942.        CASE tnStatus =  HPDF_INVALID_OBJECT
  5943.     RETURN (". An invalid object is set.  . Internal error. Data consistency was lost.")
  5944.        CASE tnStatus =  HPDF_INVALID_OBJ_ID
  5945.     RETURN ("Internal error. Data consistency was lost.")
  5946.        CASE tnStatus =  HPDF_INVALID_OPERATION
  5947.     RETURN ("Invoked HPDF_Image_SetColorMask() against the image-object which was set a mask-image.")
  5948.        CASE tnStatus =  HPDF_INVALID_OUTLINE
  5949.     RETURN ("An invalid outline-handle was specified.")
  5950.        CASE tnStatus =  HPDF_INVALID_PAGE
  5951.     RETURN ("An invalid page-handle was specified.")
  5952.        CASE tnStatus =  HPDF_INVALID_PAGES
  5953.     RETURN ("An invalid pages-handle was specified. (internal error)")
  5954.        CASE tnStatus =  HPDF_INVALID_PARAMETER
  5955.     RETURN ("An invalid value is set.")
  5956.        CASE tnStatus =  HPDF_INVALID_PNG_IMAGE
  5957.     RETURN ("Invalid PNG image format.")
  5958.        CASE tnStatus =  HPDF_INVALID_STREAM
  5959.     RETURN ("Internal error. Data consistency was lost.")
  5960.        CASE tnStatus =  HPDF_MISSING_FILE_NAME_ENTRY
  5961.     RETURN ("Internal error. _FILE_NAME entry for delayed loading is missing.")
  5962.        CASE tnStatus =  HPDF_INVALID_TTC_FILE
  5963.     RETURN ("Invalid .TTC file format.")
  5964.        CASE tnStatus =  HPDF_INVALID_TTC_INDEX
  5965.     RETURN ("Index parameter > number of included fonts.")
  5966.        CASE tnStatus =  HPDF_INVALID_WX_DATA
  5967.     RETURN ("Cannot read a width-data from an afm file.")
  5968.        CASE tnStatus =  HPDF_ITEM_NOT_FOUND
  5969.     RETURN ("Internal error. Data consistency was lost.")
  5970.        CASE tnStatus =  HPDF_LIBPNG_ERROR
  5971.     RETURN ("Error returned from PNGLIB while loading image.")
  5972.        CASE tnStatus =  HPDF_NAME_INVALID_VALUE
  5973.     RETURN ("Internal error. Data consistency was lost.")
  5974.        CASE tnStatus =  HPDF_NAME_OUT_OF_RANGE
  5975.     RETURN ("Internal error. Data consistency was lost.")
  5976.        CASE tnStatus =  HPDF_PAGES_MISSING_KIDS_ENTRY
  5977.     RETURN ("Internal error. Data consistency was lost.")
  5978.        CASE tnStatus =  HPDF_PAGE_CANNOT_FIND_OBJECT
  5979.     RETURN ("Internal error. Data consistency was lost.")
  5980.        CASE tnStatus =  HPDF_PAGE_CANNOT_GET_ROOT_PAGES
  5981.     RETURN ("Internal error. Data consistency was lost.")
  5982.        CASE tnStatus =  HPDF_PAGE_CANNOT_RESTORE_GSTATE
  5983.     RETURN ("There are no graphics-states to be restored.")
  5984.        CASE tnStatus =  HPDF_PAGE_CANNOT_SET_PARENT
  5985.     RETURN ("Internal error. Data consistency was lost.")
  5986.        CASE tnStatus =  HPDF_PAGE_FONT_NOT_FOUND
  5987.     RETURN ("The current font is not set.")
  5988.        CASE tnStatus =  HPDF_PAGE_INVALID_FONT
  5989.     RETURN ("An invalid font-handle was specified.")
  5990.        CASE tnStatus =  HPDF_PAGE_INVALID_FONT_SIZE
  5991.     RETURN ("An invalid font-size was set.")
  5992.        CASE tnStatus =  HPDF_PAGE_INVALID_GMODE
  5993.     RETURN ("See Graphics mode.")
  5994.        CASE tnStatus =  HPDF_PAGE_INVALID_INDEX
  5995.     RETURN ("Internal error. Data consistency was lost.")
  5996.        CASE tnStatus =  HPDF_PAGE_INVALID_ROTATE_VALUE
  5997.     RETURN ("Specified value is not multiple of .")
  5998.        CASE tnStatus =  HPDF_PAGE_INVALID_SIZE
  5999.     RETURN ("An invalid page-size was set.")
  6000.        CASE tnStatus =  HPDF_PAGE_INVALID_XOBJECT
  6001.     RETURN ("An invalid image-handle was set.")
  6002.        CASE tnStatus =  HPDF_PAGE_OUT_OF_RANGE
  6003.     RETURN ("The specified value is out of range.")
  6004.        CASE tnStatus =  HPDF_REAL_OUT_OF_RANGE
  6005.     RETURN ("The specified value is out of range.")
  6006.        CASE tnStatus =  HPDF_STREAM_EOF
  6007.     RETURN ("Unexpected EOF marker was detected.")
  6008.        CASE tnStatus =  HPDF_STREAM_READLN_CONTINUE
  6009.     RETURN ("Internal error. Data consistency was lost.")
  6010.        CASE tnStatus =  HPDF_STRING_OUT_OF_RANGE
  6011.     RETURN ("The length of the text is too long.")
  6012.        CASE tnStatus =  HPDF_THIS_FUNC_WAS_SKIPPED
  6013.     RETURN ("Function not executed because of other errors.")
  6014.        CASE tnStatus =  HPDF_TTF_CANNOT_EMBEDDING_FONT
  6015.     RETURN ("Font cannot be embedded. (license restriction)")
  6016.        CASE tnStatus =  HPDF_TTF_INVALID_CMAP
  6017.     RETURN ("Unsupported ttf format. (cannot find unicode cmap)")
  6018.        CASE tnStatus =  HPDF_TTF_INVALID_FOMAT
  6019.     RETURN ("Unsupported ttf format.")
  6020.        CASE tnStatus =  HPDF_TTF_MISSING_TABLE
  6021.     RETURN ("Unsupported ttf format. (cannot find a necessary table)")
  6022.        CASE tnStatus =  HPDF_UNSUPPORTED_FONT_TYPE
  6023.     RETURN ("Internal error. Data consistency was lost.")
  6024.        CASE tnStatus =  HPDF_UNSUPPORTED_FUNC
  6025.     RETURN (". Library not configured to use PNGLIB.  . Internal error. Data consistency was lost.")
  6026.        CASE tnStatus =  HPDF_UNSUPPORTED_JPEG_FORMAT
  6027.     RETURN ("Unsupported JPEG format.")
  6028.        CASE tnStatus =  HPDF_UNSUPPORTED_TYPE_FONT
  6029.     RETURN ("Failed to parse .PFB file.")
  6030.        CASE tnStatus =  HPDF_XREF_COUNT_ERR
  6031.     RETURN ("Internal error. Data consistency was lost.")
  6032.        CASE tnStatus =  HPDF_ZLIB_ERROR
  6033.     RETURN ("Error while executing ZLIB function.")
  6034.        CASE tnStatus =  HPDF_INVALID_PAGE_INDEX
  6035.     RETURN ("An invalid page index was passed.")
  6036.        CASE tnStatus =  HPDF_INVALID_URI
  6037.     RETURN ("An invalid URI was set.")
  6038.        CASE tnStatus =  HPDF_PAGELAYOUT_OUT_OF_RANGE
  6039.     RETURN ("An invalid page-layout was set.")
  6040.       CASE tnStatus =  HPDF_PAGEMODE_OUT_OF_RANGE
  6041.     RETURN ("An invalid page-mode was set.")
  6042.        CASE tnStatus =  HPDF_PAGENUM_STYLE_OUT_OF_RANGE
  6043.     RETURN ("An invalid page-num-style was set.")
  6044.        CASE tnStatus =  HPDF_ANNOT_INVALID_ICON
  6045.     RETURN ("An invalid icon was set.")
  6046.        CASE tnStatus =  HPDF_ANNOT_INVALID_BORDER_STYLE
  6047.     RETURN ("An invalid border-style was set.")
  6048.        CASE tnStatus =  HPDF_PAGE_INVALID_DIRECTION
  6049.     RETURN ("An invalid page-direction was set.")
  6050.        CASE tnStatus =  HPDF_INVALID_FONT
  6051.     RETURN ("An invalid font-handle was specified.")
  6052. ENDCASE
  6053. RETURN 
  6054. DO CASE
  6055.     CASE tnStatus = 0x1001
  6056.         RETURN "HPDF_ARRAY_COUNT_ERR                      "    &&  0x1001
  6057.     CASE tnStatus = 0x1002
  6058.         RETURN "HPDF_ARRAY_ITEM_NOT_FOUND                 "    &&  0x1002
  6059.     CASE tnStatus = 0x1003
  6060.         RETURN "HPDF_ARRAY_ITEM_UNEXPECTED_TYPE           "    &&  0x1003
  6061.     CASE tnStatus = 0x1004
  6062.         RETURN "HPDF_BINARY_LENGTH_ERR                    "    &&  0x1004
  6063.     CASE tnStatus = 0x1005
  6064.         RETURN "HPDF_CANNOT_GET_PALLET                    "    &&  0x1005
  6065.     CASE tnStatus = 0x1007
  6066.         RETURN "HPDF_DICT_COUNT_ERR                       "    &&  0x1007
  6067.     CASE tnStatus = 0x1008
  6068.         RETURN "HPDF_DICT_ITEM_NOT_FOUND                  "    &&  0x1008
  6069.     CASE tnStatus = 0x1009
  6070.         RETURN "HPDF_DICT_ITEM_UNEXPECTED_TYPE            "    &&  0x1009
  6071.     CASE tnStatus = 0x100A
  6072.         RETURN "HPDF_DICT_STREAM_LENGTH_NOT_FOUND         "    &&  0x100A
  6073.     CASE tnStatus = 0x100B
  6074.         RETURN "HPDF_DOC_ENCRYPTDICT_NOT_FOUND            "    &&  0x100B
  6075.     CASE tnStatus = 0x100C
  6076.         RETURN "HPDF_DOC_INVALID_OBJECT                   "    &&  0x100C
  6077.     CASE tnStatus = 0x100E
  6078.         RETURN "HPDF_DUPLICATE_REGISTRATION               "    &&  0x100E
  6079.     CASE tnStatus = 0x100F
  6080.         RETURN "HPDF_EXCEED_JWW_CODE_NUM_LIMIT            "    &&  0x100F
  6081.     CASE tnStatus = 0x10011
  6082.         RETURN "HPDF_ENCRYPT_INVALID_PASSWORD             "    &&  0x1011
  6083.     CASE tnStatus = 0x1013
  6084.         RETURN "HPDF_ERR_UNKNOWN_CLASS                    "    &&  0x1013
  6085.     CASE tnStatus = 0x1014
  6086.         RETURN "HPDF_EXCEED_GSTATE_LIMIT                  "    &&  0x1014
  6087.     CASE tnStatus = 0x1015
  6088.         RETURN "HPDF_FAILD_TO_ALLOC_MEM                   "    &&  0x1015
  6089.     CASE tnStatus = 0x1016
  6090.         RETURN "HPDF_FILE_IO_ERROR                        "    &&  0x1016
  6091.     CASE tnStatus = 0x1017
  6092.         RETURN "HPDF_FILE_OPEN_ERROR                      "    &&  0x1017
  6093.     CASE tnStatus = 0x1019
  6094.         RETURN "HPDF_FONT_EXISTS                          "    &&  0x1019
  6095.     CASE tnStatus = 0x101A
  6096.         RETURN "HPDF_FONT_INVALID_WIDTHS_TABLE            "    &&  0x101A
  6097.     CASE tnStatus = 0x101B
  6098.         RETURN "HPDF_INVALID_AFM_HEADER                   "    &&  0x101B
  6099.     CASE tnStatus = 0x101C
  6100.         RETURN "HPDF_INVALID_ANNOTATION                   "    &&  0x101C
  6101.     CASE tnStatus = 0x101E
  6102.         RETURN "HPDF_INVALID_BIT_PER_COMPONENT            "    &&  0x101E
  6103.     CASE tnStatus = 0x101F
  6104.         RETURN "HPDF_INVALID_CHAR_MATRICS_DATA            "    &&  0x101F
  6105.     CASE tnStatus = 0x1020
  6106.         RETURN "HPDF_INVALID_COLOR_SPACE                  "    &&  0x1020
  6107.     CASE tnStatus = 0x1021
  6108.         RETURN "HPDF_INVALID_COMPRESSION_MODE             "    &&  0x1021
  6109.     CASE tnStatus = 0x1022
  6110.         RETURN "HPDF_INVALID_DATE_TIME                    "    &&  0x1022
  6111.     CASE tnStatus = 0x1023
  6112.         RETURN "HPDF_INVALID_DESTINATION                  "    &&  0x1023
  6113.     CASE tnStatus = 0x1025
  6114.         RETURN "HPDF_INVALID_DOCUMENT                     "    &&  0x1025
  6115.     CASE tnStatus = 0x1026
  6116.         RETURN "HPDF_INVALID_DOCUMENT_STATE               "    &&  0x1026
  6117.     CASE tnStatus = 0x1027
  6118.         RETURN "HPDF_INVALID_ENCODER                      "    &&  0x1027
  6119.     CASE tnStatus = 0x1028
  6120.         RETURN "HPDF_INVALID_ENCODER_TYPE                 "    &&  0x1028
  6121.     CASE tnStatus = 0x102B
  6122.         RETURN "HPDF_INVALID_ENCODING_NAME                "    &&  0x102B
  6123.     CASE tnStatus = 0x102C
  6124.         RETURN "HPDF_INVALID_ENCRYPT_KEY_LEN              "    &&  0x102C
  6125.     CASE tnStatus = 0x102D
  6126.         RETURN "HPDF_INVALID_FONTDEF_DATA                 "    &&  0x102D
  6127.     CASE tnStatus = 0x102E
  6128.         RETURN "HPDF_INVALID_FONTDEF_TYPE                 "    &&  0x102E
  6129.     CASE tnStatus = 0x102F
  6130.         RETURN "HPDF_INVALID_FONT_NAME                    "    &&  0x102F
  6131.     CASE tnStatus = 0x1030
  6132.         RETURN "HPDF_INVALID_IMAGE                        "    &&  0x1030
  6133.     CASE tnStatus = 0x1031
  6134.         RETURN "HPDF_INVALID_JPEG_DATA                    "    &&  0x1031
  6135.     CASE tnStatus = 0x1032
  6136.         RETURN "HPDF_INVALID_N_DATA                       "    &&  0x1032
  6137.     CASE tnStatus = 0x1033
  6138.         RETURN "HPDF_INVALID_OBJECT                       "    &&  0x1033
  6139.     CASE tnStatus = 0x1034
  6140.         RETURN "HPDF_INVALID_OBJ_ID                       "    &&  0x1034
  6141.     CASE tnStatus = 0x1035
  6142.         RETURN "HPDF_INVALID_OPERATION                    "    &&  0x1035
  6143.     CASE tnStatus = 0x1036
  6144.         RETURN "HPDF_INVALID_OUTLINE                      "    &&  0x1036
  6145.     CASE tnStatus = 0x1037
  6146.         RETURN "HPDF_INVALID_PAGE                         "    &&  0x1037
  6147.     CASE tnStatus = 0x1038
  6148.         RETURN "HPDF_INVALID_PAGES                        "    &&  0x1038
  6149.     CASE tnStatus = 0x1039
  6150.         RETURN "HPDF_INVALID_PARAMETER                    "    &&  0x1039
  6151.     CASE tnStatus = 0x103B
  6152.         RETURN "HPDF_INVALID_PNG_IMAGE                    "    &&  0x103B
  6153.     CASE tnStatus = 0x103C
  6154.         RETURN "HPDF_INVALID_STREAM                       "    &&  0x103C
  6155.     CASE tnStatus = 0x103D
  6156.         RETURN "HPDF_MISSING_FILE_NAME_ENTRY              "    &&  0x103D
  6157.     CASE tnStatus = 0x103F
  6158.         RETURN "HPDF_INVALID_TTC_FILE                     "    &&  0x103F
  6159.     CASE tnStatus = 0x1040
  6160.         RETURN "HPDF_INVALID_TTC_INDEX                    "    &&  0x1040
  6161.     CASE tnStatus = 0x1041
  6162.         RETURN "HPDF_INVALID_WX_DATA                      "    &&  0x1041
  6163.     CASE tnStatus = 0x1042
  6164.         RETURN "HPDF_ITEM_NOT_FOUND                       "    &&  0x1042
  6165.     CASE tnStatus = 0x1043
  6166.         RETURN "HPDF_LIBPNG_ERROR                         "    &&  0x1043
  6167.     CASE tnStatus = 0x1044
  6168.         RETURN "HPDF_NAME_INVALID_VALUE                   "    &&  0x1044
  6169.     CASE tnStatus = 0x1045
  6170.         RETURN "HPDF_NAME_OUT_OF_RANGE                    "    &&  0x1045
  6171.     CASE tnStatus = 0x1048
  6172.         RETURN "HPDF_PAGE_INVALID_PARAM_COUNT             "    &&  0x1048
  6173.     CASE tnStatus = 0x1049
  6174.         RETURN "HPDF_PAGES_MISSING_KIDS_ENTRY             "    &&  0x1049
  6175.     CASE tnStatus = 0x104A
  6176.         RETURN "HPDF_PAGE_CANNOT_FIND_OBJECT              "    &&  0x104A
  6177.     CASE tnStatus = 0x104B
  6178.         RETURN "HPDF_PAGE_CANNOT_GET_ROOT_PAGES           "    &&  0x104B
  6179.     CASE tnStatus = 0x104C
  6180.         RETURN "HPDF_PAGE_CANNOT_RESTORE_GSTATE           "    &&  0x104C
  6181.     CASE tnStatus = 0x104D
  6182.         RETURN "HPDF_PAGE_CANNOT_SET_PARENT               "    &&  0x104D
  6183.     CASE tnStatus = 0x104E
  6184.         RETURN "HPDF_PAGE_FONT_NOT_FOUND                  "    &&  0x104E
  6185.     CASE tnStatus = 0x104F
  6186.         RETURN "HPDF_PAGE_INVALID_FONT                    "    &&  0x104F
  6187.     CASE tnStatus = 0x1050
  6188.         RETURN "HPDF_PAGE_INVALID_FONT_SIZE               "    &&  0x1050
  6189.     CASE tnStatus = 0x1051
  6190.         RETURN "HPDF_PAGE_INVALID_GMODE                   "    &&  0x1051
  6191.     CASE tnStatus = 0x1052
  6192.         RETURN "HPDF_PAGE_INVALID_INDEX                   "    &&  0x1052
  6193.     CASE tnStatus = 0x1053
  6194.         RETURN "HPDF_PAGE_INVALID_ROTATE_VALUE            "    &&  0x1053
  6195.     CASE tnStatus = 0x1054
  6196.         RETURN "HPDF_PAGE_INVALID_SIZE                    "    &&  0x1054
  6197.     CASE tnStatus = 0x1055
  6198.         RETURN "HPDF_PAGE_INVALID_XOBJECT                 "    &&  0x1055
  6199.     CASE tnStatus = 0x1056
  6200.         RETURN "HPDF_PAGE_OUT_OF_RANGE                    "    &&  0x1056
  6201.     CASE tnStatus = 0x1057
  6202.         RETURN "HPDF_REAL_OUT_OF_RANGE                    "    &&  0x1057
  6203.     CASE tnStatus = 0x1058
  6204.         RETURN "HPDF_STREAM_EOF                           "    &&  0x1058
  6205.     CASE tnStatus = 0x1059
  6206.         RETURN "HPDF_STREAM_READLN_CONTINUE               "    &&  0x1059
  6207.     CASE tnStatus = 0x105B
  6208.         RETURN "HPDF_STRING_OUT_OF_RANGE                  "    &&  0x105B
  6209.     CASE tnStatus = 0x105C
  6210.         RETURN "HPDF_THIS_FUNC_WAS_SKIPPED                "    &&  0x105C
  6211.     CASE tnStatus = 0x105D
  6212.         RETURN "HPDF_TTF_CANNOT_EMBEDDING_FONT            "    &&  0x105D
  6213.     CASE tnStatus = 0x105E
  6214.         RETURN "HPDF_TTF_INVALID_CMAP                     "    &&  0x105E
  6215.     CASE tnStatus = 0x105F
  6216.         RETURN "HPDF_TTF_INVALID_FOMAT                    "    &&  0x105F
  6217.     CASE tnStatus = 0x1060
  6218.         RETURN "HPDF_TTF_MISSING_TABLE                    "    &&  0x1060
  6219.     CASE tnStatus = 0x1061
  6220.         RETURN "HPDF_UNSUPPORTED_FONT_TYPE                "    &&  0x1061
  6221.     CASE tnStatus = 0x1062
  6222.         RETURN "HPDF_UNSUPPORTED_FUNC                     "    &&  0x1062
  6223.     CASE tnStatus = 0x1063
  6224.         RETURN "HPDF_UNSUPPORTED_JPEG_FORMAT              "    &&  0x1063
  6225.     CASE tnStatus = 0x1064
  6226.         RETURN "HPDF_UNSUPPORTED_TYPE1_FONT               "    &&  0x1064
  6227.     CASE tnStatus = 0x1065
  6228.         RETURN "HPDF_XREF_COUNT_ERR                       "    &&  0x1065
  6229.     CASE tnStatus = 0x1066
  6230.         RETURN "HPDF_ZLIB_ERROR                           "    &&  0x1066
  6231.     CASE tnStatus = 0x1067
  6232.         RETURN "HPDF_INVALID_PAGE_INDEX                   "    &&  0x1067
  6233.     CASE tnStatus = 0x1068
  6234.         RETURN "HPDF_INVALID_URI                          "    &&  0x1068
  6235.     CASE tnStatus = 0x1069
  6236.         RETURN "HPDF_PAGE_LAYOUT_OUT_OF_RANGE             "    &&  0x1069
  6237.     CASE tnStatus = 0x1070
  6238.         RETURN "HPDF_PAGE_MODE_OUT_OF_RANGE               "    &&  0x1070
  6239.     CASE tnStatus = 0x1071
  6240.         RETURN "HPDF_PAGE_NUM_STYLE_OUT_OF_RANGE          "    &&  0x1071
  6241.     CASE tnStatus = 0x1072
  6242.         RETURN "HPDF_ANNOT_INVALID_ICON                   "    &&  0x1072
  6243.     CASE tnStatus = 0x1073
  6244.         RETURN "HPDF_ANNOT_INVALID_BORDER_STYLE           "    &&  0x1073
  6245.     CASE tnStatus = 0x1074
  6246.         RETURN "HPDF_PAGE_INVALID_DIRECTION               "    &&  0x1074
  6247.     CASE tnStatus = 0x1075
  6248.         RETURN "HPDF_INVALID_FONT                         "    &&  0x1075
  6249.     CASE tnStatus = 0x1076
  6250.         RETURN "HPDF_PAGE_INSUFFICIENT_SPACE              "    &&  0x1076
  6251.     CASE tnStatus = 0x1077
  6252.         RETURN "HPDF_PAGE_INVALID_DISPLAY_TIME            "    &&  0x1077
  6253.     CASE tnStatus = 0x1078
  6254.         RETURN "HPDF_PAGE_INVALID_TRANSITION_TIME         "    &&  0x1078
  6255.     CASE tnStatus = 0x1079
  6256.         RETURN "HPDF_INVALID_PAGE_SLIDESHOW_TYPE          "    &&  0x1079
  6257.     CASE tnStatus = 0x1080
  6258.         RETURN "HPDF_EXT_GSTATE_OUT_OF_RANGE              "    &&  0x1080
  6259.     CASE tnStatus = 0x1081
  6260.         RETURN "HPDF_INVALID_EXT_GSTATE                   "    &&  0x1081
  6261.     CASE tnStatus = 0x1082
  6262.         RETURN "HPDF_EXT_GSTATE_READ_ONLY                 "    &&  0x1082
  6263.     OTHERWISE
  6264.         RETURN "Unknown Error"
  6265. ENDCASE
  6266. RETURN
  6267. ENDPROC
  6268. PROCEDURE _stat2_assign
  6269. LPARAMETERS tnStatus
  6270. This._Stat2 = tnStatus
  6271. This._Stat = tnStatus
  6272. ENDPROC
  6273. PROCEDURE getpicturefromlistener
  6274. *!* 2011/02/25 CChalom
  6275. *!* When we can't render the PDF text or image correctly, we still can get 
  6276.         * an image of the object, and draw it to the PDF document
  6277. LPARAMETERS tnX, tnY, tnWidth, tnHeight
  6278. * Clear any existing HPDF errors
  6279. * Here we can see if an error occurred during the rendering process of the 
  6280. * current field
  6281. This.ClearPDFErrors()
  6282. LOCAL lcFile
  6283. lcFile = This.GetPageImg()
  6284. * RUN /n explorer.exe &lcFile.
  6285. IF EMPTY(lcFile)
  6286.     RETURN .F. && Could not load image
  6287. ENDIF 
  6288. * Horizontal and Vertical factors to divide to convert to the correct coordinate 
  6289. LOCAL lnHor, lnVert
  6290. lnHor  = 9.972
  6291. lnVert = 9.996
  6292. lcNewFile = This.CropImage(lcFile, tnX / lnHor, tnY / lnVert, tnWidth / lnHor, tnHeight / lnVert, .T.)
  6293. * RUN /n explorer.exe &lcNewFile.
  6294. lnHor  = 13.45
  6295. lnVert = 13.45
  6296. This.ProcessPictures(tnY / lnVert, tnX / lnHor, tnWidth / lnHor, tnHeight / lnVert, ;
  6297.         lcNewFile, 0, 0, 2, "")
  6298. ENDPROC
  6299. PROCEDURE getpageimg
  6300. #DEFINE OutputJPEG     102
  6301. #DEFINE OutputPNG     104
  6302. LOCAL loListener as ReportListener 
  6303. loListener = IIF(VARTYPE(This.oActiveListener)="O", This.oActiveListener, This)
  6304. LOCAL lnPage
  6305. lnPage = This.nCurrentPage - loListener.CommandClauses.RangeFrom + 1
  6306. DIMENSION This.aPagesImgs(lnPage)
  6307. IF EMPTY(This.aPagesImgs(lnPage))
  6308.     LOCAL lnDeviceType, lcFile, lnDeviceType, lnHandle
  6309.     lnDeviceType = OutputPNG
  6310.     lcFile = This.GetTempFile("PNG")
  6311.     TRY 
  6312.         loListener.OutputPage(lnPage, lcFile, lnDeviceType)
  6313.     CATCH 
  6314.         lcFile = ""
  6315.     ENDTRY 
  6316.     This.aPagesImgs(lnPage) = lcFile
  6317. ENDIF 
  6318. RETURN This.aPagesImgs(lnPage)
  6319. ENDPROC
  6320. PROCEDURE clearpdferrors
  6321. * Clear any existing HPDF errors
  6322. * Here we can see if an error occurred during the rendering process of the 
  6323. * current field
  6324. LOCAL lnHPDF_err, lcHex
  6325. lnHPDF_err = HPDF_GetError(This.pdfHandle)
  6326. IF lnHPDF_err <> 0
  6327.     lcHex = TRANSFORM(lnHPDF_err, "@0")
  6328.     * MESSAGEBOX("PDFx error in " + PROGRAM(PROGRAM(-1) - 1) + CHR(13);
  6329.         + "Error code : " + TRANSFORM(lnHPDF_err) + CHR(13) ;
  6330.         + "Description: " + This._ErrorInfo(lnHPDF_err) + CHR(13) ;
  6331.         + "Page: " + TRANSFORM(This.nCurrentPage) + CHR(13) ;
  6332.         + "Object: " + This.cObjectToRender, ;
  6333.         16, "Error")
  6334.     HPDF_ResetError(This.pdfHandle)
  6335. ENDIF
  6336. ENDPROC
  6337. PROCEDURE getimgtype
  6338. LPARAMETERS lcData
  6339. LOCAL lcReturn,lcContents
  6340. IF PCOUNT()=0 OR VARTYPE(lcData)#'C'
  6341.    lcReturn=''
  6342.    IF ADIR(laDummy,lcData)>0 && File
  6343.       lcContents=FILETOSTR(lcData)
  6344.    ELSE && Memory variable
  6345.       lcContents=lcData
  6346.    ENDIF
  6347.    DO CASE
  6348.    CASE LEN(lcContents)<4
  6349.       lcReturn=''
  6350.    CASE LEFT(lcContents,3)=CHR(0xFF)+CHR(0xD8)+CHR(0xFF)
  6351.       lcReturn='JPG'
  6352.    CASE LEFT(lcContents,3)='GIF'
  6353.       lcReturn='GIF'
  6354.    CASE SUBSTR(lcContents,42,3)='EMF'
  6355.       lcReturn='EMF'
  6356.    CASE LEFT(lcContents,4)=CHR(0xD7)+CHR(0xCD)+CHR(0xC6)+CHR(0x9A)
  6357.       lcReturn='WMF'
  6358.    CASE LEFT(lcContents,4)=CHR(0x4D)+CHR(0x4D)+CHR(0x00)+CHR(0x2A)
  6359.       lcReturn='TIF'
  6360.    CASE LEFT(lcContents,4)=CHR(0x89)+'PNG'
  6361.       lcReturn='PNG'
  6362.    CASE LEFT(lcContents,2)='BM'
  6363.       lcReturn='BMP'
  6364.    CASE LEFT(lcContents,3)='CWS' AND ASC(SUBSTR(lcContents,4,1))<16
  6365.       lcReturn='SWF'
  6366.    CASE LEFT(lcContents,3)='FWS' AND ASC(SUBSTR(lcContents,4,1))<16
  6367.       lcReturn='SWF'
  6368.    OTHERWISE
  6369.       lcReturn=''
  6370.    ENDCASE
  6371. ENDIF
  6372. RETURN lcReturn
  6373. ENDPROC
  6374. PROCEDURE getdefaultfont
  6375. LPARAMETERS tcFontStyle
  6376. LOCAL lcNewFont, lnPos
  6377. lnPos  = ASCAN(This.aFontsReplaced, This.cDefaultFont + tcFontStyle)
  6378. IF lnPos > 0
  6379.     lnPos = (lnPos + 1) / 2
  6380.     lcNewFont = This.aFontsReplaced(lnPos, 2)
  6381. ELSE 
  6382.     lcNewFont = This.cDefaultFont 
  6383. ENDIF
  6384. RETURN lcNewFont
  6385. ENDPROC
  6386. PROCEDURE updateproperties
  6387. IF NOT This.lObjTypeMode OR (VARTYPE(_Screen.oFoxyPreviewer) <> "O")
  6388.     RETURN
  6389. ENDIF 
  6390. LOCAL loFP
  6391. loFP = _Screen.oFoxyPreviewer
  6392. IF VARTYPE(This.CommandClauses) = "O"
  6393.     *!*    IF This.CommandClauses.Preview
  6394.     *!*        This.lOpenViewer = .T.
  6395.     *!*    ELSE 
  6396.     *!*        This.lOpenViewer = NVL(loFP.lOpenViewer, .T.)
  6397.     *!*    ENDIF
  6398.     This.lOpenViewer = This.CommandClauses.Preview
  6399.     IF NOT EMPTY(This.CommandClauses.ToFile)
  6400.         This.cTargetFileName = This.CommandClauses.ToFile
  6401.     ELSE 
  6402.         IF VARTYPE(_Screen.oFoxyPreviewer) = "O" AND ;
  6403.                 NOT EMPTY(_Screen.oFoxyPreviewer.cDestFile) AND ;
  6404.                 EMPTY(This.cTargetFileName)
  6405.             LOCAL lcDestFile
  6406.             lcDestFile = _Screen.oFoxyPreviewer.cDestFile
  6407.             IF NOT "\" $ lcDestFile
  6408.                 lcDestFile = ALLTRIM(ADDBS(_Screen.oFoxyPreviewer.cOutputPath) + lcDestFile)
  6409.             ENDIF
  6410.             This.cTargetFileName = lcDestFile
  6411.         ELSE
  6412.             LOCAL lcFile
  6413.             lcFile = This.cTargetFileName
  6414.             IF EMPTY(lcFile)
  6415.                 lcFile = PUTFILE("","","pdf")
  6416.             ENDIF
  6417.             IF EMPTY(lcFile)
  6418.                 _ReportListener::CancelReport()
  6419.                 * This.CancelReport()
  6420.                 RETURN .F.
  6421.             ENDIF
  6422.             This.cTargetFileName = lcFile
  6423.         ENDIF
  6424.     ENDIF 
  6425. ENDIF
  6426. This.QUIETMODE        = NVL(loFP.lQuietMode         , .F.)
  6427. This.lEmbedFont       = NVL(loFP.lPDFEmbedFonts     , .F.)
  6428. This.lCanPrint        = NVL(loFP.lPDFCanPrint       , .T.)
  6429. This.lCanEdit         = NVL(loFP.lPDFCanEdit        , .T.)
  6430. This.lCanCopy         = NVL(loFP.lPDFCanCopy        , .T.)
  6431. This.lCanAddNotes     = NVL(loFP.lPDFCanAddNotes    , .T.)
  6432. This.lEncryptDocument = NVL(loFP.lPDFEncryptDocument, .T.)
  6433. This.cMasterPassword  = NVL(loFP.cPDFMasterPassword , "")
  6434. This.cUserPassword    = NVL(loFP.cPDFUserPassword   , "")
  6435. This.lShowErrors      = NVL(loFP.lPDFShowErrors     , .F.)
  6436. This.cSymbolFontsList = NVL(loFP.cPDFSymbolFontsList, "")
  6437. This.cPdfAuthor       = NVL(loFP.cPdfAuthor         , "")
  6438. This.cPdfTitle        = NVL(loFP.cPdfTitle          , "")
  6439. This.cPdfSubject      = NVL(loFP.cPdfSubject        , "")
  6440. This.cPdfKeyWords     = NVL(loFP.cPdfKeyWords       , "")
  6441. This.cPdfCreator      = NVL(loFP.cPdfCreator        , "")
  6442. This.cDefaultFont     = NVL(loFP.cPDFDefaultFont    , "")
  6443. This.nLineHeightRatio = NVL(loFP.nPDFLineHeightRatio, 1)
  6444. This.nLineHeightRatio = MAX(This.nLineHeightRatio, .10)
  6445. This.nLineHeightRatio = MIN(This.nLineHeightRatio, 2)
  6446. This.cCodePage    = NVL(loFP.cCodePage          , This.cCodePage)
  6447. *!*    This.nWMheight        = loFp.nWATERMARKHEIGHTRATIO 
  6448. *!*    This.nWMheightratio   = lofp.nwaTERMARKHEIGHTRATIO 
  6449. *!*    This.nWMWidth         = lofp.nwaTERMARKWIDTHRATIO 
  6450. *!*    This.nWMWidthratio    = lofp.nwaTERMARKWIDTHRATIO 
  6451. *!*    This.cWMpicture       = lofp.cwaTERMARKIMAGE 
  6452. *!*    This.hWMpdfhandle     = 
  6453. LOCAL lnPgMode
  6454. lnPgMode = MAX(NVL(loFP.nPDFPageMode, 0) - 1, 0)
  6455. lnPgMode = IIF(lnPgMode = 1, 2, lnPgMode)
  6456. This.nPageMode = lnPgMode
  6457. IF VARTYPE(This.CommandClauses) = "O"
  6458.     IF This.CommandClauses.Preview
  6459.         This.lOpenViewer = .T.
  6460.     ENDIF 
  6461.     IF NOT EMPTY(This.CommandClauses.ToFile)
  6462.         This.cTargetFileName = This.CommandClauses.ToFile
  6463.     ENDIF 
  6464. ENDIF
  6465. IF NOT This.lObjTypeMode 
  6466.     This.GetWatermark()
  6467. ENDIF 
  6468. This.UpdateCodePage()
  6469. ENDPROC
  6470. PROCEDURE filesize
  6471. LPARAMETERS lcFile
  6472. LOCAL ARRAY laSizeArray(1)
  6473. RETURN laSizeArray(ADIR(laSizeArray,lcFile)+1)
  6474. *!*    lParameters lcFileName && File to be checked
  6475. *!*    Local lnAcFiles
  6476. *!*    Local Array laSizeArray(1)
  6477. *!*    lnAcFiles = adir(laSizeArray,m.lcFilename)
  6478. *!*    Return iif(m.lnAcFiles>0,laSizeArray(2),-1)
  6479. *!*    Local lnHandle,lnSize
  6480. *!*    lnHandle = Fopen(m.lcFile,10)
  6481. *!*    lnSize = Fseek(m.lnHandle,0,2)
  6482. *!*    Fclose(m.lnHandle)
  6483. *!*    Return m.lnSize
  6484. ENDPROC
  6485. PROCEDURE getfonthandle
  6486. LPARAMETERS lcFontFace, liFontStyle
  6487. IF This._lSChinese OR This._lTChinese OR This._lJapanese OR This._lKorean
  6488.     lnFontHandle = HPDF_GetFont (.pdfHandle, This.cDefaultFont + This.GetFontStyleName(liFontStyle), .cCodePage)
  6489. ELSE 
  6490.     LOCAL lcPDFFont
  6491.     lcPDFFont = .SearchFont(lcFontFace, liFontStyle)
  6492.     IF EMPTY(lcPDFFont)
  6493.         RETURN 0
  6494.     ENDIF
  6495.     lnFontHandle = HPDF_GetFont(.pdfHandle, lcPDFFont, IIF(Empty(.cCodePage), Null, .cCodePage)) && Find and select the font    
  6496. ENDIF
  6497. IF lnFontHandle = 0
  6498.     This.ClearPdfErrors()
  6499. ENDIF
  6500. RETURN lnFontHandle
  6501. ENDPROC
  6502. PROCEDURE getfontstylename
  6503. LPARAMETERS tiStyle
  6504. LOCAL lcFontStyle as String 
  6505. lcFontStyle   = ""
  6506. If Bittest(tiStyle, 0) Then &&Bold 
  6507.     lcFontStyle  = lcFontStyle + "Bold"
  6508. EndIf
  6509. If Bittest(tiStyle, 1) Then &&Italic
  6510.     lcFontStyle  = lcFontStyle + "Italic"
  6511. EndIf
  6512. lcFontStyle = IIF(EMPTY(lcFontStyle), "", "," + lcFontStyle)
  6513. RETURN lcFontStyle
  6514. ENDPROC
  6515. PROCEDURE gettempfile
  6516. LPARAMETERS tcType
  6517. IF EMPTY(tcType)
  6518.     tcType = "JPG"
  6519. ENDIF
  6520. LOCAL lcFile
  6521. * m.lcFile = ADDBS(This._cTempFolder) + "FP_TMP_" + TRANSFORM(_VFP.ProcessId) + "_" + TRANSFORM(_VFP.ThreadId) + "_" + SYS(2015) + "." + tcType
  6522. m.lcFile = ADDBS(This._cTempFolder) + "FP_TMP_" + SYS(2015) + "." + tcType
  6523. IF VARTYPE(This.oTempImagesCollection) != "O" THEN 
  6524.     This.oTempImagesCollection = CREATEOBJECT("Collection")
  6525. ENDIF
  6526. This.oTempImagesCollection.Add(m.lcFile)
  6527. RETURN m.lcFile
  6528. ENDPROC
  6529. PROCEDURE istempfile
  6530. LPARAMETERS tcFile
  6531. IF EMPTY(tcFile)
  6532.     RETURN .F.
  6533. ENDIF
  6534. RETURN UPPER(ADDBS(This._cTempFolder) + "FP_TMP_") $ UPPER(tcFile)
  6535. ENDPROC
  6536. PROCEDURE getwatermark
  6537. * Prepare the watermarks stuff
  6538. *!*        .AddProperty("lUsingWatermark", .F.)
  6539. *!*        .AddProperty("cWatermarkImage"       , "") && _goFP.cWaterMarkImage
  6540. *!*        .AddProperty("nWatermarkType"        , 1)  && 1 = colored ; 2 = greyscale  (1)
  6541. *!*        .AddProperty("nWatermarkTransparency", 0)  && 0 = transparent ; 1 = opaque (.25)
  6542. *!*        .AddProperty("nWatermarkWidthRatio"  , 0)  && 0 - 1 (.75)
  6543. *!*        .AddProperty("nWatermarkHeightRatio" , 0)  && 0 - 1 (.75)
  6544. *!*        .AddProperty("oWatermarkBmp"         , NULL)
  6545. * Watermarks
  6546. IF VARTYPE(_Screen.oFoxyPreviewer) = "O"
  6547.     LOCAL loFP
  6548.     loFP = _Screen.oFoxyPreviewer
  6549.     LOCAL lcWatermarkImage, lnWatermarkType, lnWatermarkTransparency, lnWatermarkWidthRatio, lnWatermarkHeightRatio
  6550.     lcWatermarkImage        = loFP.cWaterMarkImage
  6551.     lnWatermarkType         = loFP.nWatermarkType         && 1 = colored ; 2 = greyscale  (1)
  6552.     lnWatermarkTransparency = loFP.nWatermarkTransparency && 0 = transparent ; 1 = opaque (.25)
  6553.     lnWatermarkWidthRatio   = loFP.nWatermarkWidthRatio   && 0 - 1 (.75)
  6554.     lnWatermarkHeightRatio  = loFP.nWatermarkHeightRatio  && 0 - 1 (.75)
  6555.     IF (NOT FILE(lcWatermarkImage)) OR ;
  6556.             (lnWatermarkTransparency = 0) OR ;
  6557.             (lnWatermarkWidthRatio   = 0) OR ;
  6558.             (lnWatermarkHeightRatio  = 0)
  6559.         This.lUsingWatermark = .F.
  6560.     ELSE
  6561.         This.lUsingWatermark = .T.
  6562.         LOCAL loBmp AS GpBitmap OF HOME() + "\ffc\_gdiplus.vcx"
  6563.         loBmp = CREATEOBJECT("GpBitmap")
  6564.         loBmp.CreateFromFile(lcWatermarkImage)
  6565.         IF (lnWatermarkTransparency < 1) OR ;
  6566.                 (lnWatermarkType = 2) && 1 = colored ; 2 = greyscale
  6567.             * Applying the effects if necessary
  6568.             LOCAL loAtt   &&  AS GPATTRIB    OF "PR_GdiplusHelper.Prg"
  6569.             LOCAL lcMatrix AS COLORMATRIX OF "PR_GdiplusHelper.Prg"
  6570.             loAtt = NEWOBJECT("GpAttrib", "PR_GdiplusHelper.Prg")
  6571.             IF lnWatermarkType = 2 && 1 = colored ; 2 = greyscale
  6572.                 lcMatrix = loAtt.COLORMATRIX(;
  6573.                     .30, .30, .30,  0,  0, ;
  6574.                     .59, .59, .59,  0,  0, ;
  6575.                     .11, .11, .11,  0,  0, ;
  6576.                     0,   0,   0,  lnWatermarkTransparency,  0, ;
  6577.                     0,   0,   0,  0,  1)
  6578.             ELSE
  6579.                 lcMatrix = loAtt.COLORMATRIX(;
  6580.                     1,   0,   0,  0,  0, ;
  6581.                     0,   1,   0,  0,  0, ;
  6582.                     0,   0,   1,  0,  0, ;
  6583.                     0,   0,   0,  lnWatermarkTransparency,  0, ;
  6584.                     0,   0,   0,  0,  1)
  6585.             ENDIF
  6586.             loAtt.ApplyColorMatrix(lcMatrix, loBmp, .F., 0xFFFFFF)
  6587.             loAtt = NULL
  6588.         ENDIF
  6589.         * Prepare Watermark
  6590.         LOCAL lcTempFile, lcType
  6591.         lcType = LOWER(JUSTEXT(lcWatermarkImage))
  6592.         DO CASE
  6593.         CASE INLIST(lcType, "jpg", "jpeg", "tif", "tiff")
  6594.             lcType = "jpeg"
  6595.         OTHERWISE
  6596.             lcType = "png"
  6597.         ENDCASE
  6598.         lcTempFile = This.GetTempFile(lcType)
  6599.         loBmp.SaveToFile(lcTempFile, "image/" + lcType)
  6600.         This._cWMpicture = lcTempFile
  6601.         LOCAL lnX, lnY, lnWidth, lnHeight
  6602.         lnX = (1 - lnWatermarkWidthRatio) / 2
  6603.         lnY = (1 - lnWatermarkHeightRatio) / 2
  6604.         lnWidth  = lnWatermarkWidthRatio
  6605.         lnHeight = lnWatermarkHeightRatio
  6606.         LOCAL lnPgWidth, lnPgHeight
  6607.         lnPgWidth  = This.GetPageWidth()
  6608.         lnPgHeight = This.GetPageHeight()
  6609.         This.nPageHeight = (lnPgHeight / 960) * 72
  6610.         This.nPageWidth  = (lnPgWidth  / 960) * 72
  6611.         This._nWMx = CEILING(lnX * This.nPageWidth)
  6612.         This._nWMy = CEILING(lnY * This.nPageHeight)
  6613.         This._nWMw = CEILING(This.nPageWidth * lnWidth)
  6614.         This._nWMh = CEILING(This.nPageHeight * lnHeight)
  6615.     ENDIF
  6616. ENDIF
  6617. ENDPROC
  6618. PROCEDURE getlanguagefromsystem
  6619. DECLARE SHORT GetSystemDefaultLangID IN kernel32
  6620. LOCAL lnLangID
  6621. lnLangID = GetSystemDefaultLangID()
  6622. * We'll use the most common Language IDs used
  6623. DO CASE
  6624. CASE INLIST(lnLangID, 1046, 2070) && Portuguese
  6625.     lnLangID = 1046
  6626. CASE INLIST(lnLangID, 1034, 2058, 3082, 4106, 5130, 6154, 7178, 8202, 9226, 10250, 11274, 12298, 13322, 14346, 15370, 16394, 17418, 17529, 18442, 19466, 20490) && Spanish
  6627.     lnLangID = 1034
  6628. CASE INLIST(lnLangID, 1036, 2060, 3084, 4108, 5132) && French
  6629.     lnLangID = 1036
  6630. OTHERWISE
  6631. ENDCASE
  6632. This.nSystemLangID = lnLangID
  6633. ENDPROC
  6634. PROCEDURE deletetempimages
  6635. IF VARTYPE(This.oTempImagesCollection) = "O" Then && Cleanup Temporary Images Files
  6636.     LOCAL lcItem AS String
  6637.     FOR EACH lcItem IN .oTempImagesCollection FOXOBJECT
  6638.         IF VARTYPE(lcItem) = "C" AND FILE(lcItem)
  6639.             LOCAL loExc as Exception 
  6640.             TRY
  6641.                 DELETE FILE (lcItem)
  6642.             CATCH TO loExc
  6643.                 * SET STEP ON 
  6644.             ENDTRY
  6645.         ENDIF
  6646.     ENDFOR
  6647.     This.oTempImagesCollection = Null
  6648. ENDIF
  6649. ENDPROC
  6650. PROCEDURE updatecodepage
  6651.         * Identify Double-Byte languages
  6652.         * And prepare HPDF to use specific encodings, with some specific fonts
  6653.         LOCAL lcCodePage
  6654.         lcCodePage = UPPER(ALLTRIM(This.cCodePage))
  6655.         DO CASE
  6656.         CASE INLIST(lcCodePage, "GB-EUC-H", "GB-EUC-V", "GBK-EUC-H", "GBK-EUC-V", "CP936", "936", "EUC-CN")
  6657.             This._lSChinese = .T. && Simplified Chinese
  6658.             This.cDefaultFont = "SimSun"
  6659.             This._Stat = HPDF_UseCNSFonts(.pdfHandle)
  6660.             This._Stat = HPDF_UseCNSEncodings(.pdfHandle)
  6661.             IF "936" $ lcCodePage
  6662.                 This.cCodePage = "GBK-EUC-H"
  6663.             ENDIF
  6664.         CASE INLIST(lcCodePage, "ETEN-B5-H", "ETEN-B5-V", "CP950", "950")
  6665.             This._lTChinese = .T. && Traditional Chinese
  6666.             This.cDefaultFont = "MingLiU"
  6667.             This._Stat = HPDF_UseCNTFonts(.pdfHandle)
  6668.             This._Stat = HPDF_UseCNTEncodings(.pdfHandle)
  6669.             IF "950" $ lcCodePage
  6670.                 This.cCodePage = "ETen-B5-H"
  6671.             ENDIF
  6672.         CASE INLIST(lcCodePage, "90MS-RKSJ-H", "90MS-RKSJ-V", "90MSP-RKSJ-H", "EUC-H", "EUC-V", "CP932", "932")
  6673.             This._lJapanese = .T. && Japanese
  6674.             This.cDefaultFont = "MS-Mincyo"
  6675.             This._Stat = HPDF_UseJPFonts(.pdfHandle)
  6676.             This._Stat = HPDF_UseJPEncodings(.pdfHandle)
  6677.             IF "932" $ lcCodePage
  6678.                 This.cCodePage = "90ms-RKSJ-H"   && 90ms-RKSJ-H, 90ms-RKSJ-V, 90msp-RKSJ-H
  6679.             ENDIF
  6680.         CASE INLIST(lcCodePage, "EUC-H", "EUC-V", "KSC-EUC-H", "KSC-EUC-V", "KSCMS-UHC-H", "KSCMS-UHC-HW-H", "KSCMS-UHC-HW-V", "CP949", "949")
  6681.             This._lKorean = .T. && Korean
  6682.             This.cDefaultFont = "DotumChe"
  6683.             This._Stat = HPDF_UseKRFonts(.pdfHandle)
  6684.             This._Stat = HPDF_UseKREncodings(.pdfHandle)
  6685.             IF "949" $ lcCodePage
  6686.                 This.cCodePage = "KSC-EUC-H" && KSC-EUC-H, KSC-EUC-V, KSCms-UHC-H, KSCms-UHC-HW-H, KSCms-UHC-HW-V
  6687.             ENDIF
  6688.         CASE INLIST(lcCodePage, "CP1256", "1256") && Arabic
  6689.             This.cCodePage = "ISO8859-6"
  6690.             This.lRightToLeft = .T.
  6691.         OTHERWISE
  6692.             IF VAL(lcCodePage) > 0
  6693.                 This.cCodePage = "CP" + lcCodePage
  6694.             ENDIF
  6695.         ENDCASE
  6696.         *!*    1 - "Simplified Chinese Encodings"
  6697.         *!*        CodePages: GB-EUC-H, GB-EUC-V, GBK-EUC-H, GBK-EUC-V, CP936
  6698.         *!*             SIMSUN Font as Default
  6699.         *!*             SIMHEI font will be available, but used only if selected, with these variations:
  6700.         *!*                    SimSun
  6701.         *!*                    SimSun,Bold
  6702.         *!*                    SimSun,Italic
  6703.         *!*                    SimSun,BoldItalic
  6704.         *!*                    SimHei
  6705.         *!*                    SimHei,Bold
  6706.         *!*                    SimHei,Italic
  6707.         *!*                    SimHei,BoldItalic
  6708.         *!*    2 - "Traditional Chinese Encodings"
  6709.         *!*        CodePages: ETen-B5-H, ETen-B5-V, CP950
  6710.         *!*            MINGLIU will be the ONLY font available, with these variations:
  6711.         *!*                   MingLiU
  6712.         *!*                   MingLiU,Bold
  6713.         *!*                   MingLiU,Italic
  6714.         *!*                   MingLiU,BoldItalic
  6715.         *!*
  6716.         *!*    3 - "Japanese Encodings"
  6717.         *!*        CodePages: 90ms-RKSJ-H, 90ms-RKSJ-V, 90msp-RKSJ-H, EUC-H, EUC-V, CP932
  6718.         *!*            MS-MINCYO as Default, with these variations:
  6719.         *!*                   MS-Mincyo
  6720.         *!*                   MS-Mincyo,Bold
  6721.         *!*                   MS-Mincyo,Italic
  6722.         *!*                   MS-Mincyo,BoldItalic
  6723.         *!*                   MS-Gothic
  6724.         *!*                   MS-Gothic,Bold
  6725.         *!*                   MS-Gothic,Italic
  6726.         *!*                   MS-Gothic,BoldItalic
  6727.         *!*                   MS-PMincyo
  6728.         *!*                   MS-PMincyo,Bold
  6729.         *!*                   MS-PMincyo,Italic
  6730.         *!*                   MS-PMincyo,BoldItalic
  6731.         *!*                   MS-PGothic
  6732.         *!*                   MS-PGothic,Bold
  6733.         *!*                   MS-PGothic,Italic
  6734.         *!*                   MS-PGothic,BoldItalic
  6735.         *!*
  6736.         *!*    4 - "Korean Encodings"
  6737.         *!*        CodePages: KSC-EUC-H, KSC-EUC-V, KSCms-UHC-H, KSCms-UHC-HW-H, KSCms-UHC-HW-V, CP949
  6738.         *!*            DOTUMCHE as Default, with these variations:
  6739.         *!*                   DotumChe
  6740.         *!*                   DotumChe,Bold
  6741.         *!*                   DotumChe,Italic
  6742.         *!*                   DotumChe,BoldItalic
  6743.         *!*                   Dotum
  6744.         *!*                   Dotum,Bold
  6745.         *!*                   Dotum,Italic
  6746.         *!*                   Dotum,BoldItalic
  6747.         *!*                   BatangChe
  6748.         *!*                   BatangChe,Bold
  6749.         *!*                   BatangChe,Italic
  6750.         *!*                   BatangChe,BoldItalic
  6751.         *!*                   Batang
  6752.         *!*                   Batang,Bold
  6753.         *!*                   Batang,Italic
  6754.         *!*                   Batang,BoldItalic
  6755. ENDPROC
  6756. PROCEDURE setfrxdatasession
  6757. With This
  6758.     If (.FRXDatasession > -1) And (.FRXDatasession # Set("DATASESSION")) Then
  6759.         Try
  6760.             Set DataSession To (.FRXDatasession)
  6761.         Catch When .T.
  6762.             .ResetToDefault("FRXDataSession")
  6763.             .ResetDataSession()
  6764.         EndTry
  6765.     EndIf
  6766. EndWith
  6767. ENDPROC
  6768. PROCEDURE resetdatasession
  6769.     Set DataSession To (This.CurrentDataSession)
  6770. Catch When .T.
  6771.     *Can't Return DataSession to do: handle this
  6772. EndTry
  6773. ENDPROC
  6774. PROCEDURE AfterReport
  6775. IF This.lDefaultMode 
  6776.     DODEFAULT()
  6777. ENDIF 
  6778. * Determine the ".WaitForNextReport" status if using "lObjTypeMode"
  6779. IF This.lObjTypeMode
  6780.     TRY 
  6781.         This.WaitForNextReport = This.CommandClauses.NoPageEject
  6782.     CATCH
  6783.     ENDTRY 
  6784. ENDIF 
  6785. With This
  6786.     IF NOT .WaitForNextReport
  6787.         LOCAL lcFile
  6788.         lcFile = This.cTargetFileName
  6789.         IF EMPTY(lcFile)
  6790.             HPDF_Free(.pdfHandle)
  6791.             .pdfHandle = 0 
  6792.             .lStarted  = .F.
  6793.         ELSE
  6794.             ._Stat = HPDF_SaveToFile(.pdfHandle, lcFile)
  6795.             IF ._Stat <> 0
  6796.                 MESSAGEBOX("Error generating the PDF document" + CHR(13) ;
  6797.                     + "Error code : " + TRANSFORM(._Stat) + CHR(13) ;
  6798.                     + "Description: " + This._ErrorInfo(._Stat), 16, "Error")
  6799.             ENDIF 
  6800.             HPDF_Free(.pdfHandle)
  6801.             INKEY(.1)
  6802.             This.DeleteTempImages()
  6803.             .pdfHandle  = 0 
  6804.             .lStarted   = .F.
  6805.             .nPgCounter = 0
  6806.             .aPagesImgs = ""
  6807.             .cTextStyle = ""
  6808.             .nCurrentPage = 0
  6809.             .nDivisionFactor = 0
  6810.             .nGlobalPgCounter = 0
  6811.             .nLastPageProccesed = 0
  6812.             .nPgCounter = 0
  6813.             This.oPictureHandles = ""
  6814.             This.oDynamics = ""
  6815.             This.oTempImagesCollection = ""
  6816.             LOCAL llSaved
  6817.             llSaved = FILE(lcFile)
  6818.             IF llSaved
  6819.                 IF This.lObjTypeMode
  6820.                     _Screen.oFoxyPreviewer.lSaved = llSaved
  6821.                 ENDIF
  6822.                 IF .lOpenViewer THEN
  6823.                     .ShellExec(This.cTargetFileName)
  6824.                 ENDIF
  6825.             ENDIF 
  6826.         ENDIF 
  6827.     ENDIF 
  6828.     * CChalom
  6829.     * Reset the report page counter
  6830.     This.nPgCounter = 0
  6831. ENDWITH
  6832. This.oActiveListener = ""
  6833. ENDPROC
  6834. PROCEDURE Render
  6835. LPARAMETERS nFRXRecno, nLeft, nTop, nWidth, nHeight, nObjectContinuationType, cContentsToBeRendered, GDIPlusImage
  6836. IF This.TwoPassProcess And This.CurrentPass=0 Then &&Code to detect if report will run twice because of use of _PAGETOTAL
  6837.     DODEFAULT(nFRXRecno, nLeft, nTop, nWidth, nHeight, nObjectContinuationType, cContentsToBeRendered, GDIPlusImage)
  6838.     RETURN
  6839. ENDIF
  6840. * CChalom 2010-01-25
  6841. * If the report page is not between the page ranges asked, just skip
  6842. IF This.lDefaultMode 
  6843.     IF This.PageNo > This.nGlobalPgCounter OR This.nPgCounter = 0
  6844.         This.nPgCounter = This.nPgCounter + 1
  6845.         This.nGlobalPgCounter = This.nGlobalPgCounter + 1
  6846.     ENDIF
  6847.     LOCAL lnRangeTo
  6848.     lnRangeTo = This.CommandClauses.RangeTo
  6849.     IF lnRangeTo <> -1 AND NOT BETWEEN(This.nPgCounter, This.CommandClauses.RangeFrom, lnRangeTo)
  6850.         NODEFAULT 
  6851.         RETURN 
  6852.     ENDIF 
  6853. ENDIF 
  6854. #Define OBJ_COMMENT                  0
  6855. #Define OBJ_LABEL                    5
  6856. #Define OBJ_LINE                     6
  6857. #Define OBJ_RECTANGLE                7
  6858. #Define OBJ_FIELD                    8
  6859. #Define OBJ_PICTURE                 17
  6860. #Define OBJ_VARIABLE                18
  6861. nLeft0   = nLeft  
  6862. nTop0    = nTop   
  6863. nWidth0  = nWidth 
  6864. nHeight0 = nHeight 
  6865. LOCAL lcContents AS String, loError AS Exception
  6866. *!* Modify the measures according to the PDF library
  6867. LOCAL nPDFLeft, nPDFTop, nPDFWidth, nPDFHeight
  6868. nPDFLeft   = (nLeft   / 960) * 72
  6869. nPDFTop    = (nTop    / 960) * 72
  6870. nPDFWidth  = (nWidth  / 960) * 72
  6871. nPDFHeight = (nHeight / 960) * 72 
  6872. WITH This
  6873.     LOCAL lnPageNo
  6874.     IF This.lDefaultMode 
  6875.         .SetFRXDataSession()
  6876.         lnPageNo = .PageNo
  6877.     ELSE 
  6878.         lnPageNo = PAGE
  6879.     ENDIF 
  6880.     .nCurrentPage = lnPageNo
  6881.     If !.lStarted Then &&Start PDF Document
  6882.         IF NOT .StartPdfDocument() &&Method Called to Start the PDF Generation
  6883.             RETURN .F.
  6884.         ENDIF
  6885.         .nLastPageProccesed = lnPageNo
  6886.     EndIf
  6887.     If lnPageNo!=.nLastPageProccesed Then &&Add a New Page
  6888.         .AddBlankPage()
  6889.         .nLastPageProccesed = lnPageNo
  6890.     EndIf
  6891.     If Empty(cContentsToBeRendered) Then
  6892.         lcContents = ''
  6893.     EndIf
  6894. EndWith
  6895. IF (nPdfLeft < 0) OR (nPDFLeft > This.nPageWidth) OR ;
  6896.         (nPDFTop < 0) OR (nPdfTop > This.nPageHeight)
  6897.     * SET STEP ON
  6898.     RETURN
  6899. ENDIF
  6900. *!* Change to FRX Datasession and take out the important values
  6901. IF This.lDefaultMode 
  6902.     Go nFRXRecno In FRX
  6903. ENDIF 
  6904. Scatter Memo Name oFrx
  6905. LOCAL llSuccess
  6906. With oFrx
  6907.     *!* Restore Report Datasession
  6908.     IF This.lDefaultMode 
  6909.         This.ResetDataSession()
  6910.     ENDIF 
  6911.     *!* Start Generation Proccess depending of Object Type
  6912.     Do Case
  6913.         Case .ObjType=OBJ_LABEL &&Label
  6914.             If !Empty(.ResoId) And .ResoId!=1 Then
  6915.                 &&Convert from Unicode
  6916.                 lcContents = Strconv(cContentsToBeRendered, 6, .ResoId, 2)
  6917.                 This.Tag = lcContents
  6918.             Else
  6919.                 &&Convert from Unicode
  6920.                 lcContents = Strconv(cContentsToBeRendered, 6)
  6921.                 This.Tag = ""
  6922.             EndIf
  6923.             Try
  6924.                 This.cObjectToRender = "LABEL: " + lcContents
  6925.                 llSuccess = This.ProcessLabel(.FontFace, .FontStyle,.FontSize,.PenRed,.PenGreen,.PenBlue,.FillRed,.FillGreen,.FillBlue,nPDFLeft,nPDFTop,lcContents,.FillChar,.Offset,nPDFWidth, ;
  6926.                     .ResoId,nPDFHeight,.Picture,.Style, .Mode)
  6927.                 IF NOT llSuccess
  6928.                     This.GetPictureFromListener(nLeft, nTop, nWidth, nHeight)
  6929.                 ENDIF
  6930.             Catch To loError
  6931.                 *!* Handle Error Here
  6932.             EndTry
  6933.         Case .ObjType=OBJ_FIELD &&Field
  6934.             If !Empty(.ResoId) And .ResoId!=1 Then
  6935.                 &&Convert from Unicode
  6936.                 lcContents = Strconv(cContentsToBeRendered, 6, .ResoId, 2)
  6937.                 This.Tag = lcContents
  6938.             Else
  6939.                 &&Convert from Unicode
  6940.                 lcContents = Strconv(cContentsToBeRendered, 6)
  6941.                 This.Tag = ""
  6942.             EndIf
  6943.             Try
  6944.                 This.cObjectToRender = "FIELD: " + lcContents
  6945.                 llSuccess = This.ProcessFields(.FontFace,.FontStyle,.FontSize,.PenRed,.PenGreen,.PenBlue, ;
  6946.                     .FillRed,.FillGreen,.FillBlue,;
  6947.                     nPDFLeft,nPDFTop,;
  6948.                     lcContents,.FillChar,.Offset, ;
  6949.                     .Stretch,.ResoId,nPDFHeight,nPDFWidth,.Style, .Mode, .User)
  6950.                 IF NOT llSuccess
  6951.                     IF This._Stat2 = 4214 && Could not fit in space
  6952.                         LOCAL lnWords, lnCharWidth, n, lnLen, lnCharsAllowed, ;
  6953.                             lnCharsToInsert, lcText
  6954.                         lnWords = GETWORDCOUNT(lcContents)
  6955.                         IF lnWords = 1 && Add some spaces in the string to allow wordwrap
  6956.                             lnCharWidth = FONTMETRIC(6, .FontFace, .FontSize, This.cTextStyle) * 10
  6957.                             lnTxtWidth  = TXTWIDTH(lcContents,.FontFace,.FontSize, This.cTextStyle) * ;
  6958.                                 lnCharWidth && * 104.166
  6959.                             lnLen = LEN(lcContents)
  6960.                             * IF (lnTxtWidth * .70) > nWidth
  6961.                                 lnCharsAllowed = CEILING((nWidth / lnCharWidth) * 0.73)
  6962.                                 lnCharsToInsert = FLOOR(lnLen / lnCharsAllowed)
  6963.                                 lcText = lcContents
  6964.                                 FOR m.n = 1 TO lnCharsToInsert
  6965.                                     lcText = STUFF(lcText, (lnCharsAllowed * m.n) + m.n, 0, " ")
  6966.                                 ENDFOR 
  6967.                                 llSuccess = This.ProcessFields(.FontFace,.FontStyle,.FontSize,.PenRed,.PenGreen,.PenBlue, ;
  6968.                                     .FillRed,.FillGreen,.FillBlue,;
  6969.                                     nPDFLeft,nPDFTop,;
  6970.                                     lcText,.FillChar,.Offset, ;
  6971.                                     .Stretch,.ResoId,nPDFHeight,nPDFWidth,.Style, .Mode, .User)
  6972.                             * ENDIF 
  6973.                         ENDIF
  6974.                     ENDIF 
  6975.                     IF NOT llSuccess
  6976.                         This.GetPictureFromListener(nLeft, nTop, nWidth, nHeight)
  6977.                     ENDIF 
  6978.                 ENDIF
  6979. * Another possible way to get the width of the text
  6980. *!*    loFRXCursor = newobject('FRXCursor', home() + 'FFC\_FRXCursor.vcx')
  6981. *!*    lnWidth = loFRXCursor.GetFRUTextWidth(lcText, lcFontName, lnFontSize, lcFontStyle)
  6982.             Catch To loError
  6983.                 * SET STEP ON 
  6984.                 *!* Handle Error Here
  6985.             EndTry
  6986.         Case .ObjType=OBJ_LINE  &&Line
  6987.             Try
  6988.                 This.cObjectToRender = "LINE"
  6989.                 This.ProcessLines(.PenRed, .PenGreen, .PenBlue, nPDFTop, nPDFLeft, nPDFWidth, nPDFHeight, .PenSize, .Offset, .PenPat, .Style)
  6990.             Catch To loError
  6991.                 *!* Handle Error Here
  6992.             EndTry
  6993.         Case .ObjType=OBJ_PICTURE &&Picture or General Field
  6994.             IF nPdfWidth = 0 OR nPdfHeight = 0
  6995.                 * Nothing to render
  6996.                 RETURN
  6997.             ENDIF 
  6998.             lcContents = cContentsToBeRendered
  6999.             Try
  7000.                 This.cObjectToRender = "PICTURE: " + lcContents
  7001.                 llSuccess = This.ProcessPictures(nPDFTop, nPDFLeft, nPDFWidth, nPDFHeight, lcContents, GDIPlusImage, .Offset, .General, .Style)
  7002.                 IF NOT llSuccess AND (NOT EMPTY(lcContents)) && image is in General field 
  7003.                     TRY 
  7004.                         LOCAL lcPicVal, lcTmpImg
  7005.                         lcPicVal = FOXYGETIMAGE(lcContents)
  7006.                         
  7007.                         IF NOT EMPTY(lcPicVal)
  7008.                             lcTmpImg = ADDBS(This._cTempFolder) + JUSTFNAME(lcContents)
  7009.                             STRTOFILE(lcPicVal, lcTmpImg)
  7010.                             llSuccess = This.ProcessPictures(nPDFTop, nPDFLeft, nPDFWidth, nPDFHeight, lcTmpImg, GDIPlusImage, .Offset, .General, .Style)
  7011.                             TRY 
  7012.                                 DELETE FILE (lcTmpImg)
  7013.                             CATCH
  7014.                             ENDTRY
  7015.                         ENDIF 
  7016.                     CATCH TO loExc
  7017.                         * Clear existing the HPDF errors
  7018.                         This.ClearPDFErrors()
  7019.                     ENDTRY 
  7020.                 ENDIF 
  7021.                 IF NOT llSuccess
  7022.                     This.GetPictureFromListener(nLeft, nTop, nWidth, nHeight)
  7023.                     * Clear existing the HPDF errors
  7024.                     This.ClearPDFErrors()
  7025.                 ENDIF
  7026.             CATCH TO loError
  7027.                 * SET STEP ON 
  7028.                 *!* Handle Error Here
  7029.             EndTry
  7030.         Case .ObjType=OBJ_RECTANGLE &&Rectangle
  7031.             TRY
  7032.                 *!* 2010-08-25 - Jacques Parent - Add nObjectContinuationType to the call
  7033.                 This.cObjectToRender = "RECTANGLE"
  7034.                 This.ProcessShapes(.FillRed, .FillGreen, .FillBlue, .PenRed, .PenGreen, .PenBlue, nPDFLeft, nPDFTop, nPDFWidth, nPDFHeight, .Offset, .PenSize, .PenPat, .FillPat, .Style, .Mode, nObjectContinuationType)
  7035.             CATCH TO loError
  7036.                 * SET STEP ON 
  7037.                 *!* Handle Error Here
  7038.                 *!*    IF VERSION(2) = 2
  7039.                 *!*        MESSAGEBOX(loError.Message)
  7040.                 *!*    ENDIF
  7041.             ENDTRY 
  7042.     ENDCASE
  7043. * Clear existing the HPDF errors
  7044. This.ClearPDFErrors()
  7045. DODEFAULT(nFRXRecno, nLeft, nTop, nWidth, nHeight, nObjectContinuationType, cContentsToBeRendered, GDIPlusImage)
  7046. ENDWITH
  7047. ENDPROC
  7048. PROCEDURE BeforeReport
  7049. IF This.lDefaultMode
  7050.     This.oActiveListener = This
  7051.     DODEFAULT()
  7052. ENDIF
  7053. WITH This
  7054. * Reset values, just for security
  7055. .oFonts = NULL
  7056. DIMENSION .aFontsSymbol(1)
  7057. .aFontsSymbol = .F.
  7058.         .oFonts = CREATEOBJECT("Collection")
  7059.         .AddPDFStandardFonts()
  7060.         .DeclareDLL()
  7061.         IF "1252" $ This.cCodePage 
  7062.         ELSE
  7063.             This.lReplaceFonts = .F.
  7064.         ENDIF
  7065.         IF This.lReplaceFonts
  7066.             DIMENSION This.aFontsReplaced(26,2)
  7067.             .aFontsReplaced(1,1) = "Courier New"
  7068.             .aFontsReplaced(1,2) = "Courier"
  7069.             .aFontsReplaced(2,1) = "Courier New Bold"
  7070.             .aFontsReplaced(2,2) = "Courier-Bold"
  7071.             .aFontsReplaced(3,1) = "Courier New Italic"
  7072.             .aFontsReplaced(3,2) = "Courier-Oblique"
  7073.             .aFontsReplaced(4,1) = "Courier New Bold Italic"
  7074.             .aFontsReplaced(4,2) = "Courier-BoldOblique"
  7075.             .aFontsReplaced(5,1) = "Monotype Sorts"
  7076.             .aFontsReplaced(5,2) = "ZapfDingbats"
  7077.             .aFontsReplaced(6,1) = "Wingdings"
  7078.             .aFontsReplaced(6,2) = "ZapfDingbats"
  7079.             .aFontsReplaced(7,1) = "Arial"
  7080.             .aFontsReplaced(7,2) = "Helvetica"
  7081.             .aFontsReplaced(8,1) = "Arial Bold"
  7082.             .aFontsReplaced(8,2) = "Helvetica-Bold"
  7083.             .aFontsReplaced(9,1) = "Arial Italic"
  7084.             .aFontsReplaced(9,2) = "Helvetica-Oblique"
  7085.             .aFontsReplaced(10,1) = "Arial Bold Italic"
  7086.             .aFontsReplaced(10,2) = "Helvetica-BoldOblique"
  7087.             .aFontsReplaced(11,1) = "Times New Roman"
  7088.             .aFontsReplaced(11,2) = "Times-Roman"
  7089.             .aFontsReplaced(12,1) = "Times New Roman Bold"
  7090.             .aFontsReplaced(12,2) = "Times-Bold"
  7091.             .aFontsReplaced(13,1) = "Times New Roman Italic"
  7092.             .aFontsReplaced(13,2) = "Times-Italic"
  7093.             .aFontsReplaced(14,1) = "Times New Roman Bold Italic"
  7094.             .aFontsReplaced(14,2) = "Times-BoldItalic"
  7095.             * Other compatible possibilities
  7096.             .aFontsReplaced(15,1) = "Courier"
  7097.             .aFontsReplaced(15,2) = "Courier"
  7098.             .aFontsReplaced(16,1) = "Courier Bold"
  7099.             .aFontsReplaced(16,2) = "Courier-Bold"
  7100.             .aFontsReplaced(17,1) = "Courier Italic"
  7101.             .aFontsReplaced(17,2) = "Courier-Oblique"
  7102.             .aFontsReplaced(18,1) = "Courier Bold Italic"
  7103.             .aFontsReplaced(18,2) = "Courier-BoldOblique"
  7104.             .aFontsReplaced(19,1) = "Helvetica"
  7105.             .aFontsReplaced(19,2) = "Helvetica"
  7106.             .aFontsReplaced(20,1) = "Helvetica Bold"
  7107.             .aFontsReplaced(20,2) = "Helvetica-Bold"
  7108.             .aFontsReplaced(21,1) = "Helvetica Italic"
  7109.             .aFontsReplaced(21,2) = "Helvetica-Oblique"
  7110.             .aFontsReplaced(22,1) = "Helvetica Bold Italic"
  7111.             .aFontsReplaced(22,2) = "Helvetica-BoldOblique"
  7112.             .aFontsReplaced(23,1) = "Times-Roman"
  7113.             .aFontsReplaced(23,2) = "Times-Roman"
  7114.             .aFontsReplaced(24,1) = "Times-Roman Bold"
  7115.             .aFontsReplaced(24,2) = "Times-Bold"
  7116.             .aFontsReplaced(25,1) = "Times-Roman Italic"
  7117.             .aFontsReplaced(25,2) = "Times-Italic"
  7118.             .aFontsReplaced(26,1) = "Times-Roman Bold Italic"
  7119.             .aFontsReplaced(26,2) = "Times-BoldItalic"
  7120.         ENDIF 
  7121.         * Missing to add to corresponding fonts array
  7122.         *!*        .Add("Symbol", "Symbol")
  7123.         ._lSetConsole   = Set("Console")
  7124.         ._lSetTalk      = Set("Talk")
  7125.         Set Talk Off
  7126.         Set Console Off
  7127.         Local lnFonts, lnFontstoAdd
  7128.         lnFonts = 34
  7129.         lnFontstoAdd = Getwordcount(This.cSymbolFontsList, ",")
  7130.         Dimension .aFontsSymbol(lnFonts + lnFontstoAdd)
  7131.         .aFontsSymbol(1)  = "WING-DINGS"
  7132.         .aFontsSymbol(2)  = "WEBDINGS"
  7133.         .aFontsSymbol(3)  = "BARRAS BIRO"
  7134.         .aFontsSymbol(4)  = "PF BARCODE 128"
  7135.         .aFontsSymbol(5)  = "BARRA25"
  7136.         .aFontsSymbol(6)  = "BARRA25I"
  7137.         .aFontsSymbol(7)  = "BARRA39"
  7138.         .aFontsSymbol(8)  = "BARRAEAN8"
  7139.         .aFontsSymbol(9)  = "BARRAEAN13"
  7140.         .aFontsSymbol(10) = "BARRA128B"
  7141.         .aFontsSymbol(11) = "IDAUTOMATIONHC39M"
  7142.         .aFontsSymbol(12) = "PF BARCODE 39"
  7143.         .aFontsSymbol(13) = "PF EAN P36"
  7144.         .aFontsSymbol(14) = "PF EAN P72"
  7145.         .aFontsSymbol(15) = "PF INTERLEAVED 2 of 5"
  7146.         .aFontsSymbol(16) = "PF INTERLEAVED 2 OF 5 WIDE"
  7147.         .aFontsSymbol(17) = "PF INTERLEAVED 2 OF 5 TEXT"
  7148.         .aFontsSymbol(18) = "CODE 128AB"
  7149.         .aFontsSymbol(19) = "CODE 128AB SHORT"
  7150.         .aFontsSymbol(20) = "CODE 128AB TALL"
  7151.         .aFontsSymbol(21) = "CODE 128AB HR"
  7152.         .aFontsSymbol(22) = "CODE 128AB SHORT"
  7153.         .aFontsSymbol(23) = "CODE 128AB TALL HR"
  7154.         .aFontsSymbol(24) = "CODE 128C"
  7155.         .aFontsSymbol(25) = "CODE 128C SHORT"
  7156.         .aFontsSymbol(26) = "CODE 128C TALL"
  7157.         .aFontsSymbol(27) = "CODE 128C HR"
  7158.         .aFontsSymbol(28) = "CODE 128C HR SHORT"
  7159.         .aFontsSymbol(29) = "CODE 128C HR TALL"
  7160.         .aFontsSymbol(30) = "CODIGO DE BARRAS CYT"
  7161.         .aFontsSymbol(31) = "C39HRP24DHTT"
  7162.         .aFontsSymbol(32) = "C39HRP48DHTT"
  7163.         .aFontsSymbol(33) = "INTERLEAVED 2OF5 NT"
  7164.         .aFontsSymbol(34) = "3 of 9 Barcode"
  7165.         If lnFontstoAdd > 0
  7166.             Local N
  7167.             For m.N = 1 To lnFontstoAdd
  7168.                 .aFontsSymbol(lnFonts + m.N) = GETWORDNUM(.cSymbolFontsList, m.N, ",")
  7169.             Endfor
  7170.         Endif
  7171.         ._cTempFolder = Addbs(Sys(2023)) && ADDBS(GETENV("TEMP"))
  7172.         ._cWinFolder  = Addbs(Getenv("windir"))
  7173. *    ENDIF 
  7174. ENDWITH
  7175. * Checking the default font
  7176. LOCAL lcDefaultFont
  7177. lcDefaultFont = ALLTRIM(This.cDefaultFont)
  7178. IF EMPTY(lcDefaultFont) OR NOT INLIST(lcDefaultFont, "Courier", "Helvetica", "Times-Roman")
  7179.     This.cDefaultFont = "Helvetica"
  7180. ENDIF
  7181. ENDPROC
  7182. PROCEDURE UnloadReport
  7183. IF This.lDefaultMode 
  7184.     DODEFAULT()
  7185. ENDIF 
  7186. WITH This
  7187.     * CChalom 2010-01-20
  7188.     * Added "WaitForNextReport" property in order to allow merging reports
  7189.     * If another report is expected to come, don't close the objects and handles
  7190.     IF Not .WaitForNextReport 
  7191.         This.oDynamics = NULL
  7192.         IF USED("_TempDynamics") THEN
  7193.             USE IN "_TempDynamics"
  7194.         ENDIF 
  7195.         LOCAL llConsole, llTalk
  7196.         llConsole = This._lSetConsole
  7197.         llTalk = This._lSetTalk
  7198.         SET CONSOLE &llConsole.
  7199.         SET TALK &llTalk.
  7200.     ENDIF
  7201. ENDWITH
  7202. ENDPROC
  7203. PROCEDURE LoadReport
  7204. This.UpdateProperties()
  7205. DODEFAULT()
  7206. ENDPROC
  7207. PROCEDURE Destroy
  7208. This.ClearDLLS()
  7209. DODEFAULT()
  7210. ENDPROC
  7211. PROCEDURE Init
  7212. DODEFAULT()
  7213. This.GetLanguageFromSystem()
  7214. ENDPROC
  7215. PLATFORM
  7216. UNIQUEID
  7217. TIMESTAMP
  7218. CLASS
  7219. CLASSLOC
  7220. BASECLASS
  7221. OBJNAME
  7222. PARENT
  7223. PROPERTIES
  7224. PROTECTED
  7225. METHODS
  7226. OBJCODE
  7227. RESERVED1
  7228. RESERVED2
  7229. RESERVED3
  7230. RESERVED4
  7231. RESERVED5
  7232. RESERVED6
  7233. RESERVED7
  7234. RESERVED8
  7235.  COMMENT Class               
  7236.  WINDOWS _1TF0Z2JS31124842689
  7237.  COMMENT RESERVED            
  7238. VERSION =   3.00
  7239. rtfreportlistener
  7240. Pixels
  7241. * VFP reports to rtf converter
  7242. * Class is based on report listener clas.
  7243. * It permits to see VFP reports in MS Word 
  7244. * Authors -Vladimir Zhuravlev, Dmitriy Petrov, Valeriy Lifshits
  7245. * with help of Vadim Pirozhkov and Andrey Petrov
  7246. Class
  7247. fxlistener
  7248. rtfreportlistener
  7249. paper_letter
  7250. handle
  7251. code_page
  7252. oldpageno
  7253. borderwidth 
  7254. lofrxrecord
  7255. waitfornextreport
  7256. npgcounter
  7257. nglobalpgcounter
  7258. orecord
  7259. targetfilename
  7260. lstarted
  7261. _llandscape
  7262. npagewidth
  7263. npageheight
  7264. ldefaultmode
  7265. nmarginleft
  7266. nmarginright
  7267. nmargintop
  7268. nmarginbottom
  7269. ncurrentpage
  7270. oactivelistener
  7271. _ctempfolder
  7272. oimages
  7273. lobjtypemode
  7274. lopenviewer
  7275. ctempfrx
  7276. cfrxalias
  7277. *getfrxrecord 
  7278. *fontstyleconvert 
  7279. *pagesetup 
  7280. *twips 
  7281. *rtf_create 
  7282. ^arfont[1,0] 
  7283. *himetrictortf 
  7284. *dectoproc 
  7285. *mabout 
  7286. ^arcolors[1,4] 
  7287. *frxtotwips 
  7288. *outputfromdata 
  7289. *renderrtf 
  7290. *getpageimg 
  7291. ^apagesimgs[1,0] 
  7292. *getpicturefromlistener 
  7293. *cropimage 
  7294. ^aimgs[1,0] 
  7295. *updateproperties 
  7296. *stringfromunicode 
  7297. PNFRXRECNO
  7298. LOFRX
  7299. SETFRXDATASESSION
  7300. RESETDATASESSION
  7301. \strike
  7302. \plain
  7303. TNFONTSTYLE
  7304. LCSTYLE
  7305. TCEXPR    
  7306. LNPGWIDTH
  7307. LNPGHEIGHT
  7308. GETPAGEWIDTH
  7309. GETPAGEHEIGHT
  7310. _LLANDSCAPE
  7311. NPAGEWIDTH
  7312. FRXTOTWIPS
  7313. NPAGEHEIGHT&
  7314. Collection
  7315. CopyFRX
  7316. \redCC
  7317. \green
  7318. \blue
  7319. \redCC
  7320. \green
  7321. \blue
  7322. TempColors
  7323. TempColors
  7324. \red0\green0\blue0
  7325. TempColors
  7326. \red255\green255\blue255
  7327. TempColors
  7328. \red0\green0\blue0
  7329. {\colortbl;
  7330. {\fonttbl{
  7331. \fnil\fcharset
  7332. Error creating file: 
  7333. Error
  7334. \paperwCC
  7335. \paperh
  7336. \margl
  7337. \margr
  7338. \margt
  7339. \margb
  7340. \landscape
  7341. ENGLISH
  7342. ENGLISH
  7343. PORTUG
  7344. SPANISH
  7345. FRENCH
  7346. GERMAN
  7347. DEUTSCH
  7348. DUTCH
  7349. NETHER
  7350. {\rtf1\ansi\ansicpgC
  7351. \uc1 \deff0\deflang
  7352. \deflangfe
  7353. TCALIAS
  7354. TCOUTPUTDBF
  7355. _CTEMPFOLDER
  7356. OIMAGES
  7357. HANDLE
  7358. LCFRXALIAS
  7359. LDEFAULTMODE
  7360. LOBJTYPEMODE
  7361. SETFRXDATASESSION
  7362. CTEMPFRX    
  7363. CFRXALIAS
  7364. _GOFP    
  7365. OLISTENER
  7366. FONTFACE
  7367. ARFONT
  7368. LNSELECT
  7369. DISTINCT
  7370. PENRED
  7371. PENGREEN
  7372. PENBLUE
  7373. OBJTYPE
  7374. FILLRED    
  7375. FILLGREEN
  7376. FILLBLUE
  7377. TEMPCOLORS
  7378. ARCOLORS
  7379. RESETDATASESSION
  7380. LCCOLORTABLE
  7381. LCFONTTABLE
  7382. LNFCS
  7383. TARGETFILENAME
  7384. LCPAPER
  7385. LCOUTSTR
  7386. LCCODEPAGE
  7387. LCLANG    
  7388. LCLANGVAL
  7389. NPAGEWIDTH
  7390. NPAGEHEIGHT
  7391. NMARGINLEFT
  7392. NMARGINRIGHT
  7393. NMARGINTOP
  7394. _LLANDSCAPE
  7395. OFOXYPREVIEWER    
  7396. CCODEPAGE    
  7397. CODE_PAGE    
  7398. CLANGUAGE
  7399. HIMETRICVALUE
  7400. LNDEC
  7401. TNFRX?
  7402. Invalid parameter. Report listener not available
  7403. Error
  7404. The helper FRX table is not available. Output can't be created
  7405. Error
  7406. Datasessionv
  7407. %  - 
  7408. 100%  - CCC
  7409. TOLISTENER
  7410. TCOUTPUTDBF
  7411. TNWIDTH
  7412. TNHEIGHT
  7413. OACTIVELISTENER    
  7414. CFRXALIAS
  7415. LNSELECT
  7416. LNORIGDATASESSION
  7417. LLRELEASEFP
  7418. LCALIAS
  7419. _GOFP
  7420. OFOXYPREVIEWER
  7421. LISTENERDATASESSION    
  7422. QUIETMODE
  7423. LNSECS
  7424. DOFOXYTHERM
  7425. _INITSTATUSTEXT
  7426. LDEFAULTMODE
  7427. NPAGEWIDTH
  7428. FRXTOTWIPS
  7429. NPAGEHEIGHT
  7430. LNPGFROM
  7431. LNPGTO
  7432. COMMANDCLAUSES    
  7433. RANGEFROM
  7434. RANGETO
  7435. _CLAUSENRANGEFROM
  7436. _CLAUSENRANGETO
  7437. RTF_CREATE
  7438. RENDER
  7439. FRXRECNO
  7440. WIDTH
  7441. HEIGHT
  7442. CONTTYPE
  7443. UNCONTENTS    
  7444. LNPERCENT
  7445. LNLASTPERCENT
  7446. LNDELAY    
  7447. LNTOTRECS
  7448. LNREC
  7449. _SECONDSTEXT
  7450. _RUNSTATUSTEXT
  7451. AFTERREPORT
  7452. <_CR_>
  7453. <_CR_>
  7454. <_CR_>
  7455. <_CR_>
  7456.  \par 
  7457.  \par 
  7458. {\sp{\sn WrapText}{\sv 2}}
  7459. {\sp{\sn lineColor}{\sv CC
  7460. {\sp{\sn fillColor}{\sv C
  7461. {\sp{\sn fRecolorFillAsPicture}{\sv 0}}{\sp{\sn fFilled}{\sv 1}}
  7462. {\shp{\*\shpinst
  7463. \shpleft
  7464. \shptop
  7465. \shpright
  7466. \shpbottom
  7467. \shpfhdr0
  7468. \shpbxmargin
  7469. \shpbxignore
  7470. \shpbymargin
  7471. \shpbyignore
  7472. {\sp{\sn fLine}{\sv 1}}{\sp{\sn fFlipH}{\sv 0}}{\sp{\sn fFilled}{\sv 0}}
  7473. {\sp{\sn lineWidth}{\sv 
  7474. \red0\green0\blue0
  7475. \redCC
  7476. \green
  7477. \blue
  7478. {\shp{\*\shpinst
  7479. \shpleft
  7480. \shptop
  7481. \shpright
  7482. \shpbottom
  7483. \shpfhdr0
  7484. {\sp{\sn shapeType}{\sv 1}}
  7485. {\sp{\sn fLine}{\sv 0}}
  7486. {\sp{\sn dxTextLeft}{\sv 0}}
  7487. {\sp{\sn dyTextTop}{\sv 0}}
  7488. {\sp{\sn dxTextRight}{\sv 0}}
  7489. {\sp{\sn dyTextBottom}{\sv 0}}
  7490. {\sp{\sn fFilled}{\sv 0}}
  7491. {\sp{\sn fFitShapeToText}{\sv 1}}
  7492. { \shptxt
  7493. {\sp{\sn lineColor}{\sv CC
  7494. {\shp{\*\shpinst
  7495. \shpleft
  7496. \shptop
  7497. \shpright
  7498. \shpbottom
  7499. \shpfhdr0
  7500. {\sp{\sn fLine}{\sv 1}}
  7501. {\sp{\sn shapeType}{\sv 20}}
  7502. {\sp{\sn lineWidth}{\sv 
  7503. {\shp{\*\shpinst
  7504. \shpleft
  7505. \shptop
  7506. \shpright
  7507. \shpbottom
  7508. \shpfhdr0
  7509. {\sp{\sn fLine}{\sv 1}}
  7510. {\sp{\sn shapeType}{\sv 20}}
  7511. {\sp{\sn lineWidth}{\sv 
  7512. {\sp{\sn lineColor}{\sv CC
  7513. {\sp{\sn lineColor}{\sv CC
  7514. {\sp{\sn lineColor}{\sv CC
  7515. {\sp{\sn lineColor}{\sv CC
  7516. {\sp{\sn fillColor}{\sv C
  7517. {\sp{\sn fRecolorFillAsPicture}{\sv 0}}{\sp{\sn fFilled}{\sv 1}}
  7518. {\sp{\sn shapeType}{\sv 1}}
  7519. {\sp{\sn shapeType}{\sv 2}}6
  7520. {\shp{\*\shpinst
  7521. \shpleft
  7522. \shptop
  7523. \shpright
  7524. \shpbottom
  7525. \shpfhdr0
  7526. \shpbxmargin
  7527. \shpbxignore
  7528. \shpbymargin
  7529. \shpbyignore
  7530. {\sp{\sn fLine}{\sv 1}}{\sp{\sn fFlipH}{\sv 0}}{\sp{\sn fFilled}{\sv 0}}
  7531. {\sp{\sn lineWidth}{\sv 
  7532. TEMP5
  7533. GPIMAGE
  7534. GpImage
  7535. _GdiPlus.vcx
  7536. image/jpeg
  7537. IMAGE
  7538. Image
  7539. {\shp{\*\shpinst
  7540. \shpleft
  7541. \shptop
  7542. \shpright
  7543. \shpbottom
  7544. {\sp{\sn shapeType}{\sv 75}}
  7545. {\sp{\sn fLine}{\sv 0}}
  7546. {\sp{\sn fLockAspectRatio}{\sv 
  7547. {\sp{\sn cropFromBottom}{\sv 
  7548. {\sp{\sn cropFromRight} {\sv 
  7549. {\sp{\sn pib}
  7550. {\sv 
  7551. {\pict
  7552. \wmetafile8\pic
  7553. \picbpp4
  7554. {\sp{\sn pibFlags}{\sv 2}}
  7555. {\sp{\sn fUseShapeAnchor}{\sv 0}}
  7556. LOFRXRECORD
  7557. NLEFT
  7558. NWIDTH
  7559. NHEIGHT
  7560. NOBJECTCONTINUATIONTYPE
  7561. CCONTENTSTOBERENDERED
  7562. GDIPLUSIMAGE
  7563. _TFORCEOBJECTTYPE
  7564. _TFORCELINEOFSET
  7565. FONTNUM
  7566. FONT_ID
  7567. _FONTSTYLE
  7568. LCRTF
  7569. _ALLG    
  7570. LCPENSIZE
  7571. LCTEXT    
  7572. LLDBLBYTE
  7573. OBJTYPE
  7574. LCWRAPTEXT
  7575. STRINGFROMUNICODE
  7576. PICTURE
  7577. OFFSET
  7578. LCCOLORRTF
  7579. LNCLRINDEX
  7580. LCCOLORTAG
  7581. LCBACKCOLORRTF
  7582. LNBACKCLRINDEX
  7583. PENSIZE
  7584. LCPENCOLOR
  7585. LCFILLCOLOR
  7586. FILLRED    
  7587. FILLGREEN
  7588. FILLBLUE
  7589. LNRGB
  7590. FRXTOTWIPS
  7591. PENRED
  7592. PENGREEN
  7593. PENBLUE
  7594. ARCOLORS
  7595. ARFONT
  7596. FONTFACE
  7597. FONTSTYLECONVERT    
  7598. FONTSTYLE
  7599. LNBORDER
  7600. FONTSIZE
  7601. FILLPAT
  7602. PENPAT    
  7603. LCROUNDED
  7604. HANDLE    
  7605. RENDERRTF
  7606. HDPICT
  7607. STRFILE
  7608. LNFILESIZE
  7609. LHFILE
  7610. OBJPICT
  7611. LNPICTWIDTH
  7612. LNPICTHEIGHT
  7613. LNWIDTH
  7614. LNHEIGHT
  7615. LLLOCK
  7616. LNCROPR
  7617. LNCROPB
  7618. LCTEMPIMGFILE
  7619. LOIMAGE    
  7620. SETHANDLE
  7621. SAVETOFILE
  7622. GETPICTUREFROMLISTENER
  7623. LCEXT
  7624. LOVFPIMG
  7625. WIDTH
  7626. HEIGHT
  7627. HIMETRICTORTF
  7628. GENERAL    
  7629. DECTOPROC
  7630. LNHORFACTOR
  7631. LNVERTFACTOR
  7632. LNRESIZEFACTOR
  7633. LOEXC
  7634. REPORTLISTENER
  7635. TEMP5
  7636. LOLISTENER
  7637. OACTIVELISTENER
  7638. LNPAGE
  7639. NCURRENTPAGE
  7640. COMMANDCLAUSES    
  7641. RANGEFROM
  7642. APAGESIMGS
  7643. LNDEVICETYPE
  7644. LCFILE
  7645. LNHANDLE
  7646. OUTPUTPAGE
  7647. TNWIDTH
  7648. TNHEIGHT
  7649. LDEFAULTMODE
  7650. LCFILE
  7651. GETPAGEIMG
  7652. LNHOR
  7653. LNVERT    
  7654. LCNEWFILE    
  7655. CROPIMAGE
  7656. STRING
  7657. INTEGER
  7658. INTEGER
  7659. GPBITMAP
  7660. ffc\_gdiplus.vcx
  7661. GpBitmap
  7662. _GdiPlus.vcx
  7663. GdipCloneBitmapAreaI
  7664. GDIPLUS.DLLQ
  7665. pdfxGdipCloneBitmapAreaI
  7666. GPBITMAP
  7667. ffc\_gdiplus.vcx
  7668. GpBitmap
  7669. _GdiPlus.vcx
  7670. image/png
  7671. image/jpeg6
  7672. LCFILE
  7673. LNWIDTH
  7674. LNHEIGHT
  7675. TLFILE
  7676. LOBMP
  7677. CREATEFROMFILE
  7678. IMAGEHEIGHT
  7679. IMAGEWIDTH
  7680. LHBITMAP
  7681. LNSTATUS
  7682. GDIPCLONEBITMAPAREAI
  7683. GDIPLUS
  7684. PDFXGDIPCLONEBITMAPAREAI
  7685. PIXELFORMAT    
  7686. GETHANDLE    
  7687. LOCROPPED    
  7688. SETHANDLE
  7689. SETRESOLUTION
  7690. HORIZONTALRESOLUTION
  7691. VERTICALRESOLUTION
  7692. LCEXT    
  7693. LCENCODER
  7694. LCCROPPEDFILE
  7695. _CTEMPFOLDER
  7696. SAVETOFILE
  7697. OIMAGES
  7698. LOBJTYPEMODE
  7699. OFOXYPREVIEWER
  7700. COMMANDCLAUSES
  7701. LOPENVIEWER
  7702. PREVIEW
  7703. TOFILE
  7704. TARGETFILENAME    
  7705. CDESTFILE
  7706. LCDESTFILE
  7707. COUTPUTPATH
  7708. LCFILE
  7709. _REPORTLISTENER
  7710. CANCELREPORT    
  7711. QUIETMODE
  7712. LQUIETMODE
  7713.  \par 
  7714. TCUNICODE
  7715. LCUNVALUE    
  7716. LNUNVALUE
  7717. LCNEWCONTENTS
  7718. LNCHARS 
  7719. LDEFAULTMODE
  7720. EXCEPTION
  7721. STRING
  7722. LDEFAULTMODE
  7723. LOBJTYPEMODE
  7724. WAITFORNEXTREPORT
  7725. COMMANDCLAUSES
  7726. NOPAGEEJECT
  7727. HANDLE
  7728. LLSAVED
  7729. OFOXYPREVIEWER
  7730. LSAVED
  7731. LOPENVIEWER    
  7732. SHELLEXEC
  7733. TARGETFILENAME
  7734. NPGCOUNTER
  7735. LCFILE
  7736. LOEXC
  7737. APAGESIMGS
  7738. OIMAGES
  7739. LCITEM
  7740. DESTROY
  7741. LOFRXRECORD
  7742. OACTIVELISTENER    
  7743. CFRXALIAS
  7744. SETFRXDATASESSION
  7745. SETCURRENTDATASESSION
  7746. CTEMPFRX
  7747. \page
  7748. \page
  7749. NFRXRECNO
  7750. NLEFT
  7751. NWIDTH
  7752. NHEIGHT
  7753. NOBJECTCONTINUATIONTYPE
  7754. CCONTENTSTOBERENDERED
  7755. GDIPLUSIMAGE
  7756. LNPAGENO
  7757. PAGENO
  7758. LDEFAULTMODE    
  7759. LNRANGETO    
  7760. TLNEWPAGE
  7761. NGLOBALPGCOUNTER
  7762. NPGCOUNTER
  7763. COMMANDCLAUSES
  7764. RANGETO    
  7765. RANGEFROM    
  7766. OLDPAGENO
  7767. LSTARTED
  7768. HANDLE
  7769. NCURRENTPAGE
  7770. TWOPASSPROCESS
  7771. CURRENTPASS
  7772. LOFRXRECORD
  7773. GETFRXRECORD
  7774. LOFRX    
  7775. RENDERRTFT
  7776. LDEFAULTMODE
  7777. LOBJTYPEMODE
  7778. OACTIVELISTENER    
  7779. PAGESETUP
  7780. RTF_CREATE
  7781. TCRTFFILENAME
  7782. TARGETFILENAME
  7783. NPGCOUNTER
  7784. LDEFAULTMODE
  7785. LOBJTYPEMODE
  7786. UPDATEPROPERTIES
  7787. getfrxrecord,
  7788. fontstyleconvert
  7789. pagesetup
  7790. twips
  7791. rtf_create
  7792. himetrictortf"
  7793. dectoprocS
  7794. mabout}
  7795. frxtotwips
  7796. outputfromdata
  7797. renderrtf
  7798. getpageimgC5
  7799. getpicturefromlistener
  7800. cropimage+8
  7801. updatepropertiesp<
  7802. stringfromunicodel?
  7803. Destroy
  7804. AfterReport
  7805. Render>E
  7806. BeforeReportmI
  7807. LoadReport
  7808. PROCEDURE getfrxrecord
  7809. LPARAMETERS pnFRXRecNo
  7810. LOCAL loFRX
  7811. *-- Switch to the FRX
  7812. This.setFRXDataSession()
  7813. SET TALK OFF 
  7814. *-- Goto the record
  7815. GOTO pnFRXRecNo
  7816. *-- Get the data
  7817. SCATTER MEMO NAME loFRX 
  7818. This.resetDataSession()
  7819. *-- Return the data
  7820. RETURN loFRX
  7821. ENDPROC
  7822. PROCEDURE fontstyleconvert
  7823. *-- Convert FontStyle from numeric value
  7824. *-- to character codes
  7825. LPARAMETERS tnFontStyle
  7826. LOCAL lcStyle
  7827. lcStyle = ''
  7828. IF BITTEST(tnFontStyle, 0)
  7829.    lcStyle = lcStyle + '\b'
  7830. ENDIF
  7831. IF BITTEST(tnFontStyle, 1)
  7832.    lcStyle = lcStyle + '\i'
  7833. ENDIF
  7834. IF BITTEST(tnFontStyle, 2)
  7835.    lcStyle = lcStyle + '\ulw'
  7836. ENDIF
  7837. IF BITTEST(tnFontStyle, 7)
  7838.    lcStyle = lcStyle + '\strike'
  7839. ENDIF
  7840. IF EMPTY(lcStyle)
  7841.    lcStyle = '\plain'
  7842. ENDIF
  7843. RETURN lcStyle
  7844. ENDPROC
  7845. PROCEDURE pagesetup
  7846. LPARAMETERS tcExpr
  7847. LOCAL lnPgWidth, lnPgHeight
  7848. lnPgWidth  = This.GetPageWidth()
  7849. lnPgHeight = This.GetPageHeight()
  7850. This._lLandscape = lnPgWidth > lnPgHeight
  7851. WITH This
  7852.     .nPageWidth  = This.FrxToTwips(lnPgWidth)
  7853.     .nPageHeight = This.FrxToTwips(lnPgHeight)
  7854. ENDWITH
  7855. ENDPROC
  7856. PROCEDURE twips
  7857.  LParameters nCm_
  7858. * making Twip
  7859.   Return Int(nCm_ * 1440 / 2.54)
  7860. ENDPROC
  7861. PROCEDURE rtf_create
  7862. LPARAMETERS tcAlias, tcOutputDBF
  7863. This._cTempFolder = ADDBS(SYS(2023)) && ADDBS(GETENV("TEMP"))
  7864. This.oImages = CREATEOBJECT("Collection")
  7865. WITH This
  7866. * Creating rtf file 
  7867. IF NOT EMPTY(.handle)
  7868.     RETURN
  7869. ENDIF
  7870. LOCAL lcFRXAlias
  7871. IF This.lDefaultMode OR This.lObjTypeMode
  7872.     This.setFRXDataSession()
  7873.     SET TALK OFF
  7874.     This.cTempFRX  = ADDBS(SYS(2023)) + "FRX_" + SYS(2015) + '.dbf'
  7875.     This.cFRXAlias = "CopyFRX"
  7876.     lcFRXAlias = This.cFRXAlias
  7877.     * Make a copy of the FRX table and manipulate it
  7878.     SELECT FRX
  7879.     COPY TO (This.cTempFRX)
  7880.     USE (This.cTempFRX) SHARED AGAIN IN 0 ALIAS (This.cFRXalias)
  7881.     *lcFRXAlias = IIF(EMPTY(tcAlias),_goFP.oListener.cFRXAlias, tcAlias)
  7882.     lcFRXAlias = IIF(EMPTY(tcOutputDBF),_goFP.oListener.cFRXAlias, tcOutputDBF)
  7883. *    USE (_goFP.oListener.cFRXDBF) AGAIN ALIAS FRX IN 0
  7884. ENDIF 
  7885. * Getting all fonts sizes
  7886. SELECT ALLTRIM(Padr(Mline(fontface,1),30));
  7887.     FROM (lcFRXAlias) ;
  7888.     INTO ARRAY .arFont;
  7889.     WHERE NOT EMPTY(fontface);
  7890.     GROUP By 1
  7891. * CChalom 2010-01-23
  7892. * Creating the Color table
  7893. LOCAL lnSelect
  7894. lnSelect = SELECT()
  7895. SELECT ;
  7896.     DISTINCT ("\red" + ALLTRIM(STR(penRed)) + "\green" + ALLTRIM(STR(penGreen)) + "\blue" + ALLTRIM(STR(penBlue))) as RTF, ;
  7897.         PenRed, PenGreen, PenBlue ;
  7898.     FROM (lcFRXAlias);
  7899.     WHERE INLIST(ObjType, 5, 8) ;
  7900.         AND NOT INLIST(-1, PenRed, PenGreen, PenBlue) ;
  7901. UNION ;
  7902. SELECT;
  7903.     DISTINCT ("\red" + ALLTRIM(STR(FillRed)) + "\green" + ALLTRIM(STR(FillGreen)) + "\blue" + ALLTRIM(STR(FillBlue))) as RTF, ;
  7904.         FillRed AS PenRed, FillGreen AS PenGreen, FillBlue AS PenBlue ;
  7905.     FROM (lcFRXAlias);
  7906.     WHERE INLIST(ObjType, 5, 8) ;
  7907.         AND NOT INLIST(-1, FillRed, FillGreen, FillBlue) ;
  7908.     INTO CURSOR TempColors ;
  7909.     READWRITE 
  7910. * Check if we have the two basic colors, white and black
  7911. INSERT INTO TempColors VALUES ("\red0\green0\blue0", 0, 0, 0)
  7912. INSERT INTO TempColors VALUES ("\red255\green255\blue255", 255, 255, 255)
  7913. * Urrutia 2010-02-05
  7914. * initialize the array property in case all colors are Default
  7915. If _Tally > 0
  7916.     SELECT Distinct RTF, penRed, penGreen, penBlue ;
  7917.         FROM TempColors Into Array .ArColors NOFILTER 
  7918. ELSE 
  7919.     .ArColors(1,1)="\red0\green0\blue0"
  7920.     .ArColors(1,2)=0
  7921.     .ArColors(1,3)=0
  7922.     .ArColors(1,4)=0
  7923. Endif
  7924. USE IN TempColors
  7925. SELECT (lnSelect)
  7926. *-- Restore the datasession
  7927. IF This.lDefaultMode 
  7928.     This.ResetDataSession()
  7929. ENDIF 
  7930. ********** Making Color table
  7931. * {\colortbl;\red0\green0\blue0;\red255\green0\blue0;}
  7932. LOCAL lcColorTable
  7933. lcColorTable = '{\colortbl;'
  7934. FOR m.i = 1 TO (ALEN(.arColors) / 4)
  7935.     lcColorTable = lcColorTable + ALLTRIM(.arColors(m.i, 1)) + ";"
  7936. NEXT i
  7937. lcColorTable = lcColorTable + "}"
  7938. ********** Making font RTF features
  7939. LOCAL lcFontTable, lnFcs
  7940. lcFontTable = ""
  7941. lcFontTable = '{\fonttbl{'
  7942. FOR m.i = 1 TO ALEN(.arFont)
  7943.     lnFcs = FONTMETRIC(17, .arfont[m.i], 10)
  7944.     lcFontTable = lcFontTable+'\f' + Alltrim(Str(m.i,2,0)) + '\fnil\fcharset' + Alltrim(Str(lnFcs)) + ' ' + Alltrim(.arfont[m.i])+';'
  7945. NEXT i
  7946. lcFontTable = SUBSTR(lcFontTable, 1, LEN(lcFontTable)-1) + '}}'
  7947. .handle = FCREATE(.TargetFileName)
  7948. IF .handle <= 0
  7949.     = MESSAGEBOX("Error creating file: " + .TargetFileName, "Error")
  7950.     RETURN
  7951. ENDIF
  7952. LOCAL lcPaper, lcOutStr, lcCodePage, lcLang, lcLangVal
  7953. * Storing paper information
  7954. lcPaper = '\paperw' + Alltrim(Str(.nPageWidth))+;
  7955.         '\paperh' + Alltrim(Str(.nPageHeight))+;
  7956.         '\margl' + Alltrim(Str(.nMarginLeft))+;
  7957.         '\margr' + Alltrim(Str(.nMarginRight))+;
  7958.         '\margt' + Alltrim(Str(.nMarginTop))+;
  7959.         '\margb' + Alltrim(Str(.nMarginTop))+;
  7960.         IIF(._lLandscape, '\landscape', '')
  7961. *        IIF(.paper_letter, '\landscape', '')
  7962.     lcCodePage = _Screen.oFoxyPreviewer.cCodePage 
  7963.     lcCodePage = ALLTRIM(NVL(lcCodePage, "1252"))
  7964.     This.Code_Page = lcCodePage
  7965.     lcLang = NVL(_Screen.oFoxyPreviewer.cLanguage, "ENGLISH")
  7966. CATCH
  7967.     lcCodePage = ALLTRIM(TRANSFORM(This.Code_Page))
  7968.     This.Code_Page = lcCodePage
  7969.     lcLang = "ENGLISH"
  7970. ENDTRY 
  7971. * Language codes
  7972. * http://www.science.co.il/language/locale-codes.asp
  7973. DO CASE
  7974. CASE lcCodePage = "1251" && Russian
  7975.     lcLangVal = "1049"
  7976. CASE "PORTUG" $ lcLang
  7977.     lcLangVal = "1046"   && Portuguese 
  7978. CASE ("SPANISH" $ lcLang) OR ("ESPA" $ lcLang)
  7979.     lcLangVal = "1034"   && Spanish 
  7980. CASE ("FRENCH" $ lcLang) OR ("FRAN
  7981. AIS" $ lcLang)
  7982.     lcLangVal = "1036"   && French 
  7983. CASE ("GERMAN" $ lcLang) OR ("DEUTSCH" $ lcLang)
  7984.     lcLangVal = "1031"   && German 
  7985. CASE ("DUTCH" $ lcLang) OR ("NETHER" $ lcLang)
  7986.     lcLangVal = "1043"   && Dutch 
  7987. OTHERWISE
  7988.     lcLangVal = "1033"     && English
  7989. ENDCASE
  7990. lcOutStr = "{\rtf1\ansi\ansicpg" + Alltrim(.code_page) + ;
  7991.     '\uc1 \deff0\deflang' + lcLangVal + '\deflangfe' + lcLangVal +;
  7992.     lcFontTable + lcPaper + lcColorTable
  7993. = FPUTS(.handle, lcOutStr)
  7994. ENDWITH
  7995. ENDPROC
  7996. PROCEDURE himetrictortf
  7997. LPARAMETERS HiMetricValue
  7998. * metric transformation 
  7999. RETURN INT(HiMetricValue*240/635)
  8000. ENDPROC
  8001. PROCEDURE dectoproc
  8002. LPARAMETERS lnDec
  8003. RETURN ROUND(lnDec*65536, 0)
  8004. ENDPROC
  8005. PROCEDURE mabout
  8006. * VFP reports to rtf converter
  8007. * Class is based on report listener class.
  8008. * It permits to see VFP reports in MS Word 
  8009. * Authors: Vladimir Zhuravlev, Dmitriy Petrov, Valeriy Lifshits
  8010. * with help of Vadim Pirozhkov and Andrey Petrov
  8011. * Received improvements and fixes from Cesar Chalom
  8012. * - Fixed the calculated fields
  8013. * - Allowed general image fields to be printed
  8014. * - Enabled colors and backcolors in texts, and colors and backcolors in shapes and lines
  8015. * - Allowed generating a determined range of pages
  8016. * - Allowed merging more tan one report together
  8017. * Usage:
  8018. * SET CLASSLIB TO  frx_rtf
  8019. * LOCAL loRTFListener as ReportListener 
  8020. * loRTFListener = CREATEOBJECT('RtfReportListener')
  8021. * loRTFListener.TargetFileName = "MyRTFReport.RTF"
  8022. * REPORT FORM MyReport OBJECT loRTFListener
  8023. * CChalom comments
  8024. * All changed codes in this class are preceeded with comments
  8025. *!*    Removed methods, that are not used any more:
  8026. *!*    1 - PutPageBreak()
  8027. *!*    2 - DoBeforeRender
  8028. *!* 3 - GetBandName
  8029. *!* 4 - GetFormatCode
  8030. *!* 5 - GetNextNumber
  8031. *!* 6 - Pix2FRX
  8032. *!* 7 - StrTransform
  8033. *!*    8 - CalcAgrVal
  8034. *!*    9 - CommaTran
  8035. *!*    10 - CreateAgrProp
  8036. *!*    11 - ExprChange
  8037. *!*    12 - MEval
  8038. *!*    13 - StrTransform
  8039. *!*    14 - Thistran
  8040. *!*    Removed properties
  8041. *!*    This.cReportName
  8042. *!*    New properties
  8043. *!*    WaitForNextReport - logical determines if the listener object will keep
  8044. *!*    the file handles opened in order to get the next report pages
  8045. *!*    Renamed property:
  8046. *!*    "RTF_filename" to "TargetFileName"
  8047. *!*    in order to use the same property name from HTMLListener
  8048. *!*    Method Init()
  8049. *!*    Removed the need of all parameters
  8050. *!*    Just one parameter is allowed, the destination RTF file name
  8051. *!* This will fill the "TargetFileName" property
  8052. *!* Original comments from Vladimir Zhuravlev - original usage has changed !
  8053. * Not valid anymore
  8054. *    SET CLASSLIB TO  frx_rtf
  8055. *    loObjectList = CREATEOBJECT('rtfreportlistener', 'report1.frx', 'newrep.rtf', '', '')
  8056. *    loObjectList.OutputType = 1
  8057. *    REPORT FORM report1 OBJECT loObjectList PREVIEW noconsole
  8058. * in CREATEOBJECT('rtfreportlistener', 'report1.frx', 'newrep.rtf', '', '')
  8059. * first parameter is class name, second is report name to be converted, third parameters is
  8060. * MS Word document name. To This document VFP report will be converted
  8061. * Two optional parameters can be 'ThisForm','This' 
  8062. * These for reports, where ThisForm or This are used in expresions 
  8063. * Class does not cover General fields, if they were in report expresions
  8064. * Comments for future implementation
  8065. *!*    * Get color attributes
  8066. *!*    IF VARTYPE(This.oRecord) = "O"
  8067. *!*        SET STEP ON 
  8068. *!*        LOCAL lnRed, lnGreen, lnBlue, lnColorIndex
  8069. *!*        lnRed   = This.oRecord.PenRed
  8070. *!*        lnGreen = This.oRecord.PenGreen
  8071. *!*        lnBlue  = This.oRecord.PenBlue
  8072. *!*        lnColorIndex = This.AddColor(lnRed, lnGreen, lnBlue)    
  8073. *!*    ELSE
  8074. *!*    ENDIF 
  8075. ENDPROC
  8076. PROCEDURE frxtotwips
  8077. LPARAMETERS tnFrx
  8078. */  inches to  twip
  8079. RETURN  INT(tnFrx / 960 * 1440)
  8080. ENDPROC
  8081. PROCEDURE outputfromdata
  8082. LPARAMETERS toListener, tcOutputDBF, tnWidth, tnHeight
  8083. IF VARTYPE(toListener) <> "O"
  8084.     MESSAGEBOX("Invalid parameter. Report listener not available", 16, "Error")
  8085.     RETURN
  8086. ENDIF 
  8087. This.oActiveListener = toListener
  8088. IF EMPTY(toListener.cFRXAlias)
  8089.     MESSAGEBOX("The helper FRX table is not available. Output can't be created", 16, "Error")
  8090.     RETURN
  8091. ENDIF 
  8092. LOCAL lnSelect, lnOrigDataSession
  8093. lnSelect          = SELECT()
  8094. lnOrigDataSession = SET("Datasession")
  8095. * 2013-04-25 CChalom
  8096. * Ensure we have a _goFP object
  8097. * To be used in OBJTYPE #20
  8098. LOCAL llReleaseFP, lcAlias
  8099. llReleaseFP = .F.
  8100. IF VARTYPE(_goFP) <> "O"
  8101.     PRIVATE _goFP
  8102.     _goFP = _Screen.oFoxyPreviewer
  8103.     lcAlias = toListener.cFRXAlias
  8104.     llReleaseFP = .T.
  8105. ENDIF 
  8106. * Ensure we are at the correct DataSession
  8107. SET DATASESSION TO (toListener.ListenerDataSession)
  8108. * SET DATASESSION TO (toListener.CurrentDataSession)
  8109. SELECT (tcOutputDBF)
  8110. * =DoFoxyTherm(90, "Texto label", "Titulo")
  8111. * =DoFoxyTherm(-1, "Teste2", "Titulo") && Continuo
  8112. * =DoFoxyTherm() && Desliga
  8113. IF NOT This.QuietMode 
  8114.     LOCAL lnSecs
  8115.     lnSecs = SECONDS()
  8116.     *!*    ._InitStatusText    = .GetLoc("INITSTATUS") + SPACE(1)
  8117.     *!*    ._RunStatusText     = .GetLoc("RUNSTATUS")  + SPACE(1)
  8118.     *!*    ._SecondsText       = .GetLoc("SECONDS")    + SPACE(1)
  8119.     =DoFoxyTherm(1, "0%", _goFP._InitStatusText)
  8120. ENDIF 
  8121. * Generate RTF using the stored information
  8122. This.lDefaultMode = .F.
  8123. This.nPageWidth  = This.FrxToTwips(tnWidth)
  8124. This.nPageHeight = This.FrxToTwips(tnHeight)
  8125. LOCAL lnPgFrom, lnPgTo
  8126. IF llReleaseFP
  8127.     lnPgFrom = toListener.COMMANDCLAUSES.RangeFrom
  8128.     lnPgTo   = toListener.COMMANDCLAUSES.RangeTo && -1 = All pages
  8129.     lnPgTo   = IIF(lnPgTo = -1, 999999, lnPgTo)
  8130. ELSE 
  8131.     lnPgFrom = _goFP._ClausenRangeFrom && = loListener.COMMANDCLAUSES.RangeFrom
  8132.     lnPgTo   = IIF(_goFP._ClausenRangeTo = -1, 999999, _goFP._ClausenRangeTo) && = loListener.COMMANDCLAUSES.RangeTo && -1 = All pages
  8133. ENDIF 
  8134. * Initialize class
  8135. * This.BeforeReport()
  8136. This.RTF_Create(lcAlias, tcOutputDBF)
  8137. SELECT (tcOutputDBF)
  8138. IF This.QuietMode 
  8139.     SCAN
  8140.         IF BETWEEN(Page, lnPgFrom, lnPgTo)
  8141.             This.Render(FRXRECNO, Left, Top, Width, Height, ContType, UNContents, 0)
  8142.         ENDIF
  8143.     ENDSCAN
  8144. ELSE 
  8145.     LOCAL lnPercent, lnLastPercent, lnDelay, lnTotRecs, lnRec
  8146.     lnLastPercent = 0
  8147.     lnDelay       = 1
  8148.     lnTotRecs     = RECCOUNT()
  8149.     lnRec         = 0
  8150.     SCAN
  8151.         IF BETWEEN(Page, lnPgFrom, lnPgTo)
  8152.             IF NOT This.QuietMode 
  8153.                 lnRec = lnRec + 1
  8154.                 lnPercent = CEILING(100*lnRec/lnTotRecs)
  8155.                 IF (lnLastPercent > 0 AND ;
  8156.                         lnPercent - lnLastPercent < lnDelay  AND ;
  8157.                         lnPercent <> 100)
  8158.                 ELSE 
  8159.                     =DoFoxyTherm(lnPercent, ;
  8160.                         ALLTRIM(TRANSFORM(lnPercent)) + "%  - " + TRANSFORM(FLOOR(SECONDS() - lnSecs)) + " " + _goFP._SecondsText , ;
  8161.                         _goFP._RunStatusText)
  8162.                 ENDIF 
  8163.             ENDIF
  8164.             This.Render(FRXRECNO, Left, Top, Width, Height, ContType, UNContents, 0)
  8165.         ENDIF
  8166.     ENDSCAN
  8167.     =DoFoxyTherm(100, ;
  8168.         "100%  - " + TRANSFORM(CEILING(SECONDS() - lnSecs)) + " " + _goFP._SecondsText , ;
  8169.                 _goFP._RunStatusText)
  8170. ENDIF 
  8171. * Finalize
  8172. This.AfterReport()
  8173. USE IN SELECT(tcOutputDBF)
  8174. * Restore DataSession, Alias
  8175. SET DATASESSION TO (lnOrigDataSession)
  8176. SELECT (lnSelect)
  8177. IF NOT This.QuietMode 
  8178.     =DoFoxyTherm()
  8179. ENDIF
  8180. IF llReleaseFP = .F.
  8181.     RELEASE llReleaseFP
  8182. ENDIF 
  8183. RETURN 
  8184. ENDPROC
  8185. PROCEDURE renderrtf
  8186. LPARAMETERS loFRXrecord, nleft, ntop, nwidth, nheight, nobjectcontinuationtype, ccontentstoberendered, gdiplusimage, _tForceObjectType, _tForceLineOfset
  8187. *!* 2011-08-12 - Jacques Parent
  8188. *!* _tForceObjectType, _tForceLineOfset are used in cate there is a continuation for boxes
  8189. *!* Boxes are then decomposed into lines.
  8190. #Define OBJ_COMMENT                  0
  8191. #Define OBJ_LABEL                    5
  8192. #Define OBJ_LINE                     6
  8193. #Define OBJ_RECTANGLE                7
  8194. #Define OBJ_FIELD                    8
  8195. #Define OBJ_PICTURE                 17
  8196. #Define OBJ_VARIABLE                18
  8197. *!* 2011-08-12 - Jacques Parent - Some constants
  8198. #DEFINE tnConstVerticalLine            0
  8199. #DEFINE tnConstHorizontalLine        1
  8200. IF VARTYPE(_tForceObjectType) <> "N"
  8201.     _tForceObjectType = -1
  8202. ENDIF
  8203. IF VARTYPE(_tForceLineOfset) <> "N"
  8204.     _tForceLineOfset = -1
  8205. ENDIF
  8206. WITH loFrxRecord
  8207. *******
  8208. * OUTPUT
  8209. *******
  8210. ******************************************
  8211.     Local fontnum, font_id, _fontstyle, lcRTF, _allg, lcpensize
  8212.     lcRTF = ''
  8213.     LOCAL lcText, llDblByte
  8214.     lcText = STRCONV(cContentsToBeRendered,6)
  8215.     IF LEN(lcText) <> LENC(lcText) && Double-Byte characters
  8216.         llDblByte = .T.
  8217.     ELSE 
  8218.         llDblByte = .F.
  8219.     ENDIF
  8220.     Do Case
  8221. *************************************************************************
  8222. ***  Field or label into textbox
  8223. *************************************************************************
  8224.     Case _tForceObjectType == OBJ_FIELD OR _tForceObjectType == OBJ_LABEL OR (_tForceObjectType==-1 AND (.ObjType = OBJ_FIELD OR .ObjType = OBJ_LABEL))
  8225.         LOCAL lcWrapText
  8226.         lcWrapText = ""
  8227.         IF .ObjType = OBJ_FIELD
  8228.             IF llDblByte = .T.
  8229.                 lcText = This.StringFromUnicode(cContentsToBeRendered)
  8230.                 .Expr = lcText
  8231. *!*                    .Expr = STRCONV(cContentsToBeRendered,6)
  8232. *!*                    .Expr = STRTRAN(.Expr, CHR(13) + CHR(10), "<_CR_>")
  8233. *!*                    .Expr = STRTRAN(.Expr, CHR(13), "<_CR_>")
  8234. *!*                    .Expr = STRTRAN(.Expr, CHR(10), "<_CR_>")
  8235. *!*                    .Expr = STRTRAN(.Expr, "<_CR_>", " \par ")
  8236.             ELSE && Single-byte
  8237.                 .Expr = STRCONV(cContentsToBeRendered,6)
  8238.                 .Expr = STRTRAN(.Expr, CHR(13) + CHR(10), "<_CR_>")
  8239.                 .Expr = STRTRAN(.Expr, CHR(13), "<_CR_>")
  8240.                 .Expr = STRTRAN(.Expr, CHR(10), "<_CR_>")
  8241.                 .Expr = STRTRAN(.Expr, "<_CR_>", " \par ")
  8242.             ENDIF
  8243. *!*                .Expr = STRCONV(cContentsToBeRendered,6)
  8244. *!*                .Expr = STRTRAN(.Expr, CHR(13) + CHR(10), "<_CR_>")
  8245. *!*                .Expr = STRTRAN(.Expr, CHR(13), "<_CR_>")
  8246. *!*                .Expr = STRTRAN(.Expr, CHR(10), "<_CR_>")
  8247. *!*                .Expr = STRTRAN(.Expr, "<_CR_>", " \par ")
  8248.         ELSE 
  8249.             IF llDblByte 
  8250.                 .Expr = This.StringFromUnicode(cContentsToBeRendered)
  8251.             ELSE 
  8252.                 .Expr = CHRTRAN(loFRXRecord.Expr, ["], [])
  8253.                 * Removing CHR(13) from texts 
  8254.                 IF CHR(13) $ .Expr
  8255.                     .Expr=Strtran(.Expr, Chr(13), ' \par ')
  8256.                     * .Expr=Strtran(.Expr, Chr(13), ' \line ')
  8257.                     nWidth = nWidth + 150
  8258.                 ELSE 
  8259.                     lcWrapText = '{\sp{\sn WrapText}{\sv 2}}'
  8260.                 ENDIF
  8261.             ENDIF
  8262.         ENDIF 
  8263. ************* Making allign
  8264. *!*            If .ObjType = OBJ_LABEL
  8265. *!*                _allg = '\ql '
  8266. *!*            Else
  8267.             If  Left(.Picture, 1) = '@'
  8268.                 Do Case
  8269.                 Case 'J'$.Picture
  8270.                     _allg = '\qr '
  8271.                 Case 'I'$.Picture
  8272.                     _allg = '\qc '
  8273.                 Otherwise
  8274.                     _allg = '\ql '
  8275.                 Endcase
  8276.             Else
  8277.                 Do Case
  8278.                 * CChalom 2010-09-28
  8279.                 * Included the Full Justify option, when the tag "<FJ>" is found in the USER field
  8280.                 CASE "<FJ>" $ .User
  8281.                     _allg = '\qj '
  8282.                 *-
  8283.                 Case .offset = 0
  8284.                     _allg = '\ql '
  8285.                 Case .offset = 2
  8286.                     _allg = '\qc '
  8287.                 Case .offset = 1
  8288.                     _allg = '\qr '
  8289.                 Otherwise
  8290.                     _allg = '\ql '
  8291.                 Endcase
  8292.             Endif
  8293. *!*            Endif
  8294. * CChalom 2010-01-21
  8295. * Included color tags for "Fields" and "Labels"
  8296. ********* Color attributes
  8297.         LOCAL lcColorRTF, lnClrIndex, lcColorTag, lcBackColorRTF, lnBackClrIndex
  8298.         lcColorTag = ""
  8299.     * Draw a box as a background for the texts
  8300.         * Create a border color with the same color of the backcolor
  8301.         lcpensize = Alltrim(Str(9525*.pensize))
  8302.         LOCAL lcPenColor, lcFillColor
  8303.         IF .FillRed <> -1 && Not default
  8304.             lcPenColor = '{\sp{\sn lineColor}{\sv ' + TRANSFORM(RGB(.FillRed, .FillGreen, .FillBlue)) + '}}'
  8305.         ELSE 
  8306.             lcPenColor = ""
  8307.         ENDIF 
  8308.         IF .Mode = 0 AND .FillRed <> -1 && Mode: 0 = Opaque background; 1 = Transparent
  8309.             LOCAL lnRGB
  8310.             IF .FillRed = -1 
  8311.                 lnRGB = RGB(255,255,255)
  8312.             ELSE 
  8313.                 lnRGB = RGB(.FillRed, .FillGreen, .FillBlue)
  8314.             ENDIF 
  8315.             lcFillColor = '{\sp{\sn fillColor}{\sv ' + TRANSFORM(lnRGB) + '}}' + ;
  8316.                 '{\sp{\sn fRecolorFillAsPicture}{\sv 0}}{\sp{\sn fFilled}{\sv 1}}'
  8317.         ELSE 
  8318.             lcFillColor = ""
  8319.         ENDIF 
  8320.         IF EMPTY(lcFillColor)
  8321.             lcRTF = ""
  8322.         ELSE 
  8323.             lcRTF = '{\shp{\*\shpinst' + ;
  8324.                 '\shpleft' + Alltrim(Str(This.FrxToTwips(nleft)))+;
  8325.                 '\shptop' + Alltrim(Str(This.FrxToTwips(ntop)))+;
  8326.                 '\shpright' + Alltrim(Str(This.FrxToTwips(nleft + nwidth)))+;
  8327.                 '\shpbottom' + Alltrim(Str(This.FrxToTwips(ntop + nheight)))+;
  8328.                 '\shpfhdr0' + ;
  8329.                 '\shpbxmargin' + ;
  8330.                 '\shpbxignore' + ;
  8331.                 '\shpbymargin' + ;
  8332.                 '\shpbyignore' + ;
  8333.                 '{\sp{\sn fLine}{\sv 1}}{\sp{\sn fFlipH}{\sv 0}}{\sp{\sn fFilled}{\sv 0}}'+;
  8334.                 '{\sp{\sn lineWidth}{\sv ' + lcpensize + '}}'+;
  8335.                 lcFillColor + ;
  8336.                 lcPenColor + ;
  8337.                 '}}'
  8338.         ENDIF 
  8339.         IF .PenRed = -1 && Default Black
  8340.             lcColorRTF = "\red0\green0\blue0"
  8341.         ELSE 
  8342.             lcColorRTF = "\red" + ALLTRIM(STR(.penRed)) + "\green" + ALLTRIM(STR(.penGreen)) + "\blue" + ALLTRIM(STR(.penBlue))
  8343.         ENDIF 
  8344.         lnClrIndex = Ascan(This.arColors, lcColorRTF) &&, 1, 1, 1, 1)
  8345.         IF lnClrIndex = 0
  8346.             lnClrIndex = 1
  8347.         ELSE
  8348.             lnClrIndex = ((lnClrIndex -1) / 4) + 1
  8349.         ENDIF 
  8350.         lcColorTag = lcColorTag + "\cf" + ALLTRIM(STR(lnClrIndex)) + " "
  8351. ********* Font number
  8352.         fontnum = Ascan(This.arfont,Alltrim(.fontface),1)
  8353.         font_id = Iif(fontnum = 0, '0', Alltrim(Str(fontnum)))
  8354. *********** FONT features
  8355.         _fontstyle = This.fontstyleconvert(.fontstyle)
  8356.         LOCAL lnBorder
  8357.         lnBorder = 8
  8358.             lcRTF = lcRTF + '{\shp{\*\shpinst'+;
  8359.                 '\shpleft' + Alltrim(Str(This.FrxToTwips(nleft)))+;
  8360.                 '\shptop' + Alltrim(Str(This.FrxToTwips(ntop)))+;
  8361.                 '\shpright' + Alltrim(Str(This.FrxToTwips(nleft+nwidth+lnBorder)))+;
  8362.                 '\shpbottom' + Alltrim(Str(This.FrxToTwips(ntop+nheight+lnBorder)))+;
  8363.                 '\shpfhdr0' + ;
  8364.                 '{\sp{\sn shapeType}{\sv 1}}' + ;
  8365.                 '{\sp{\sn fLine}{\sv 0}}'+;
  8366.                 '{\sp{\sn dxTextLeft}{\sv 0}}'+;
  8367.                 '{\sp{\sn dyTextTop}{\sv 0}}'+;
  8368.                 '{\sp{\sn dxTextRight}{\sv 0}}'+;
  8369.                 '{\sp{\sn dyTextBottom}{\sv 0}}'+;
  8370.                 '{\sp{\sn fFilled}{\sv 0}}'+;
  8371.                 '{\sp{\sn fFitShapeToText}{\sv 1}}'+;
  8372.                 lcWrapText + ;
  8373.                 '{ \shptxt' + _fontstyle + '\f' + m.font_id + '\fs' + Alltrim(Str(.FontSize*2))+;
  8374.                 _allg + lcColorTag + .Expr + ' '+'}}}'
  8375. ***********************************************************
  8376. * Line
  8377. ***************************************************************
  8378.     Case _tForceObjectType == OBJ_LINE OR (_tForceObjectType==-1 AND .ObjType = OBJ_LINE)
  8379.         lcpensize = Alltrim(Str(9525*.pensize))
  8380.         * CChalom 2010-01-21
  8381.         * Included color tags for "Lines"
  8382.         LOCAL lcPenColor, lcFillColor
  8383.         IF .PenRed <> -1 && Not default
  8384.             lcPenColor = '{\sp{\sn lineColor}{\sv ' + TRANSFORM(RGB(.PenRed, .PenGreen, .PenBlue)) + '}}'
  8385.         ELSE 
  8386.             lcPenColor = ""
  8387.         ENDIF 
  8388.         *---
  8389.         If _tForceLineOfset == 1 OR (_tForceLineOfset==-1 AND .offset = 1) && horizontal
  8390.             lcRTF = '{\shp{\*\shpinst'+;
  8391.                 '\shpleft' + Alltrim(Str(This.FrxToTwips(nleft)))+;
  8392.                 '\shptop' + Alltrim(Str(This.FrxToTwips(ntop)))+;
  8393.                 '\shpright' + Alltrim(Str(This.FrxToTwips(nleft+nwidth)))+;
  8394.                 '\shpbottom' + Alltrim(Str(This.FrxToTwips(ntop)))+;
  8395.                 '\shpfhdr0'+;
  8396.                 '{\sp{\sn fLine}{\sv 1}}' + '{\sp{\sn shapeType}{\sv 20}}'+;
  8397.                 '{\sp{\sn lineWidth}{\sv ' + lcpensize + '}}'+;
  8398.                 lcPenColor + ;
  8399.                 '}}'
  8400.         ELSE && Vertical
  8401.             lcRTF = '{\shp{\*\shpinst' + ;
  8402.                 '\shpleft' + Alltrim(Str(This.FrxToTwips(nleft+nwidth)))+;
  8403.                 '\shptop' + Alltrim(Str(This.FrxToTwips(ntop)))+;
  8404.                 '\shpright' + Alltrim(Str(This.FrxToTwips(nleft+nwidth)))+;
  8405.                 '\shpbottom' + Alltrim(Str(This.FrxToTwips(ntop+nheight)))+;
  8406.                 '\shpfhdr0' + ;
  8407.                 '{\sp{\sn fLine}{\sv 1}}' + '{\sp{\sn shapeType}{\sv 20}}'+;
  8408.                 '{\sp{\sn lineWidth}{\sv ' + lcpensize + '}}'+;
  8409.                 lcPenColor + ;
  8410.                 '}}'
  8411.         Endif
  8412.     * Shape
  8413.     Case _tForceObjectType == OBJ_RECTANGLE OR (_tForceObjectType==-1 AND .ObjType = OBJ_RECTANGLE) && Rectangle, Box
  8414.         *!* --------------------------------------------------------
  8415.         *!* --------------------------------------------------------
  8416.         *!* --------------------------------------------------------
  8417.         *!* 2011-08-12 - Jacques Parent
  8418.         *!* Let boxes be printed correctly on multiple lines
  8419.         *!* Not sure how it would react with rounded corners...
  8420.         IF nobjectcontinuationtype == 0 OR (.FillPat = 1 AND .Mode = 0)
  8421.             *!* Either the continuation is COMPLETE (0) OR the box must be filled.
  8422.             lcpensize = Alltrim(Str(9525*.pensize))
  8423.             * CChalom 2010-01-21
  8424.             * Included color tags for "Shapes"
  8425.             LOCAL lcPenColor, lcFillColor
  8426.             IF nobjectcontinuationtype == 0 
  8427.                 If .PenRed = -1
  8428.                     IF .PenPat = 0
  8429.                         lcPenColor = '{\sp{\sn lineColor}{\sv ' + TRANSFORM(RGB(255, 255, 255)) + '}}'
  8430.                     ELSE 
  8431.                         lcPenColor = ""
  8432.                     ENDIF 
  8433.                 ELSE
  8434.                     lcPenColor = '{\sp{\sn lineColor}{\sv ' + TRANSFORM(RGB(.PenRed, .PenGreen, .PenBlue)) + '}}'
  8435.                 ENDIF 
  8436.             ELSE
  8437.                 *!* Set the pen color to the fill color!
  8438.                 IF .FillRed = -1 
  8439.                     IF .PenPat = 0
  8440.                         lcPenColor = '{\sp{\sn lineColor}{\sv ' + TRANSFORM(RGB(255, 255, 255)) + '}}'
  8441.                     ELSE 
  8442.                         lcPenColor = ""
  8443.                     ENDIF 
  8444.                 ELSE 
  8445.                     lcPenColor = '{\sp{\sn lineColor}{\sv ' + TRANSFORM(RGB(.FillRed, .FillGreen, .FillBlue)) + '}}'
  8446.                 ENDIF 
  8447.             ENDIF
  8448.             IF .FillPat = 1 AND (.Mode = 0 OR .FillRed <> -1) && Mode: 0 = Opaque background; 1 = Transparent
  8449.                 LOCAL lnRGB
  8450.                 IF .FillRed = -1 
  8451.                     lnRGB = RGB(255,255,255)
  8452.                 ELSE 
  8453.                     lnRGB = RGB(.FillRed, .FillGreen, .FillBlue)
  8454.                 ENDIF 
  8455.                 lcFillColor = '{\sp{\sn fillColor}{\sv ' + TRANSFORM(lnRGB) + '}}' + ;
  8456.                     '{\sp{\sn fRecolorFillAsPicture}{\sv 0}}{\sp{\sn fFilled}{\sv 1}}'
  8457.             ELSE 
  8458.                 lcFillColor = ""
  8459.             ENDIF 
  8460.             *---
  8461.             LOCAL lcRounded
  8462.             * Not used, allows setting the curvature parameter, change the value 40
  8463.             * lcRounded = IIF(.OffSet = 0, ;
  8464.                 "", ;
  8465.                 '{\sp{\sn shapeType}{\sv 2}}' + ;
  8466.                 '{\sp{\sn adjustValue}{\sv ' + ALLTRIM(TRANSFORM(.OffSet * 40)) + '}}')
  8467.             * CChalom 2010-07-20
  8468.             * Included code for generic rounded shapes
  8469.             * lcRounded = IIF(.OffSet = 0, ;
  8470.                 "", ;
  8471.                 '{\sp{\sn shapeType}{\sv 2}}')
  8472.             * Vilhelm-Ion Praisach - 2013-08-11
  8473.             * http://www.foxite.com/archives/0000381996.htm
  8474.             lcRounded = IIF(.OffSet = 0, ;
  8475.                 '{\sp{\sn shapeType}{\sv 1}}' , ;
  8476.                 '{\sp{\sn shapeType}{\sv 2}}')
  8477.             lcRTF = '{\shp{\*\shpinst' + ;
  8478.                 '\shpleft' + Alltrim(Str(This.FrxToTwips(nleft)))+;
  8479.                 '\shptop' + Alltrim(Str(This.FrxToTwips(ntop)))+;
  8480.                 '\shpright' + Alltrim(Str(This.FrxToTwips(nleft + nwidth)))+;
  8481.                 '\shpbottom' + Alltrim(Str(This.FrxToTwips(ntop + nheight)))+;
  8482.                 '\shpfhdr0' + ;
  8483.                 '\shpbxmargin' + ;
  8484.                 '\shpbxignore' + ;
  8485.                 '\shpbymargin' + ;
  8486.                 '\shpbyignore' + ;
  8487.                 lcRounded + ;
  8488.                 '{\sp{\sn fLine}{\sv 1}}{\sp{\sn fFlipH}{\sv 0}}{\sp{\sn fFilled}{\sv 0}}'+;
  8489.                 '{\sp{\sn lineWidth}{\sv ' + lcpensize + '}}'+;
  8490.                 lcFillColor + ;
  8491.                 lcPenColor + ;
  8492.                 '}}'
  8493.         ENDIF
  8494.         IF !EMPTY(lcRTF)
  8495.             = Fputs(This.handle, lcRTF)
  8496.             lcRTF = ""
  8497.         ENDIF
  8498.         *!* In case there is a continuation <> 0...
  8499.         DO CASE
  8500.             CASE nobjectcontinuationtype == 1    && Top
  8501.                 *!* Translate into lines
  8502.                 ** Top line
  8503.                 This.RenderRTF(loFRXrecord, nleft, ntop, nwidth, 0, nobjectcontinuationtype, ccontentstoberendered, gdiplusimage, OBJ_LINE, tnConstHorizontalLine)
  8504.                 ** Left line
  8505.                 This.RenderRTF(loFRXrecord, nleft, ntop, 0, nheight, nobjectcontinuationtype, ccontentstoberendered, gdiplusimage, OBJ_LINE, tnConstVerticalLine)
  8506.                 ** Right line
  8507.                 This.RenderRTF(loFRXrecord, nleft + nwidth, ntop, 0, nheight, nobjectcontinuationtype, ccontentstoberendered, gdiplusimage, OBJ_LINE, tnConstVerticalLine)
  8508.             CASE nobjectcontinuationtype == 2    && Middle
  8509.                 *!* Translate into lines
  8510.                 ** Left line
  8511.                 This.RenderRTF(loFRXrecord, nleft, ntop, 0, nheight, nobjectcontinuationtype, ccontentstoberendered, gdiplusimage, OBJ_LINE, tnConstVerticalLine)
  8512.                 ** Right line
  8513.                 This.RenderRTF(loFRXrecord, nleft + nwidth, ntop, 0, nheight, nobjectcontinuationtype, ccontentstoberendered, gdiplusimage, OBJ_LINE, tnConstVerticalLine)
  8514.             CASE nobjectcontinuationtype == 3    && Bottom
  8515.                 *!* Translate into lines
  8516.                 ** Bottom line
  8517.                 This.RenderRTF(loFRXrecord, nleft, ntop + nheight, nwidth, 0, nobjectcontinuationtype, ccontentstoberendered, gdiplusimage, OBJ_LINE, tnConstHorizontalLine)
  8518.                 ** Left line
  8519.                 This.RenderRTF(loFRXrecord, nleft, ntop, 0, nheight, nobjectcontinuationtype, ccontentstoberendered, gdiplusimage, OBJ_LINE, tnConstVerticalLine)
  8520.                 ** Right line
  8521.                 This.RenderRTF(loFRXrecord, nleft + nwidth, ntop, 0, nheight, nobjectcontinuationtype, ccontentstoberendered, gdiplusimage, OBJ_LINE, tnConstVerticalLine)
  8522.         ENDCASE
  8523.         *!* --------------------------------------------------------
  8524.         *!* --------------------------------------------------------
  8525.         *!* --------------------------------------------------------
  8526.     Case _tForceObjectType == OBJ_PICTURE OR (_tForceObjectType == -1 AND .ObjType = OBJ_PICTURE)
  8527.         LOCAL hdPict, strFile, lnFileSize, lhFile, objPict,;
  8528.             lnPictWidth, lnPictHeight, lnWidth, lnHeight, llLock, lncropr, lncropb
  8529.         * CChalom 2010-01-17
  8530.         * Dealing with images in General fields
  8531.         * Saving the image to the disk in a Temp file
  8532.         * Using _Gdiplus.vcx that is already embedded in ReportOutput.App
  8533.         LOCAL lcTempImgFile
  8534.         IF GDIPlusImage!=0 && General field
  8535.             lcTempImgFile = GetEnv("TEMP") + "\" + Sys(2015) + ".Png"
  8536.             LOCAL loImage AS GpImage OF (HOME() + _ReportOutput)
  8537.             loImage = NEWOBJECT("GpImage", "_GdiPlus.vcx")
  8538.             loImage.SetHandle(GDIPlusImage)
  8539.             loImage.SaveToFile(lcTempImgFile,"image/jpeg")
  8540.             loImage = NULL
  8541.             * Replace the original empty file
  8542.             cContentsTobeRendered = lcTempImgFile
  8543.         ENDIF 
  8544.         IF EMPTY(GDIPlusImage) AND EMPTY(cContentsTobeRendered) && Nothing to render
  8545.                     && try drawing directly, from the original canvas
  8546.             lcTempImgFile = This.GetPictureFromListener(nLeft, nTop, nWidth, nHeight)
  8547.             cContentsTobeRendered = lcTempImgFile
  8548.         ENDIF
  8549.         *---
  8550.         IF NOT EMPTY(cContentsTobeRendered) AND FILE(cContentsTobeRendered)
  8551.             * Picture size
  8552.             lcExt = JUSTEXT(cContentsTobeRendered)
  8553.             * CChalom 2010-02-19
  8554.             * Changed the way to get the image dimensions and load its binaries
  8555.             LOCAL lnWidth, lnHeight
  8556.             LOCAL loVFPImg as Image
  8557.             loVFPImg = CREATEOBJECT("Image")
  8558.             loVFPImg.Picture = cContentsTobeRendered
  8559.             lnWidth = loVFPImg.Width * 7276 / 275
  8560.             lnHeight = loVFPImg.Height * 7276 / 275
  8561.             loVFPImg = NULL
  8562.             lnPictWidth = This.HiMetricToRTF(lnWidth)
  8563.             lnPictHeight = This.HiMetricToRTF(lnHeight)
  8564.             strFile = FILETOSTR(cContentsTobeRendered)
  8565.             CLEAR RESOURCES (cContentsTobeRendered)
  8566.             lhFile = STRCONV(strFile, 15)
  8567.             DO CASE
  8568.             CASE .General = 0        && Clip
  8569.                     llLock = 1
  8570.                     lnWidth = MIN(nWidth, lnPictWidth)
  8571.                     lnHeight = MIN(nHeight, lnPictHeight)
  8572.                     lncropr = This.DecToProc(MAX(lnPictWidth - nWidth, 0)/lnPictWidth)
  8573.                     lncropb = This.DecToProc(MAX(lnPictHeight - nHeight, 0)/lnPictHeight)
  8574.             CASE .General = 1    && Isometric
  8575.                     llLock = 1
  8576.                     * Isometric Adjustment
  8577.                     LOCAL lnHorFactor, lnVertFactor, lnResizeFactor
  8578.                     m.lnHorFactor = m.nWidth / m.lnPictWidth
  8579.                     m.lnVertFactor = m.nHeight / m.lnPictHeight
  8580.                     m.lnResizeFactor = MIN(m.lnHorFactor, m.lnVertFactor)
  8581.                     m.lnWidth = m.lnPictWidth * m.lnResizeFactor
  8582.                     m.lnHeight = m.lnPictHeight * m.lnResizeFactor
  8583.                     * lnWidth  = MIN(nWidth, lnPictWidth)
  8584.                     * lnHeight = MIN(nHeight, lnPictHeight)
  8585.                     lncropb = 0
  8586.                     lncropr = 0
  8587.             CASE .General = 2    && Stretch
  8588.                     llLock = 0
  8589.                     lnWidth = nWidth
  8590.                     lnHeight = nHeight
  8591.                     lncropb = 0
  8592.                     lncropr = 0
  8593.             ENDCASE
  8594.                     
  8595.             lcRTF = '{\shp{\*\shpinst' + ;
  8596.                     '\shpleft'+Alltrim(Str(This.FrxToTwips(nleft)))+;
  8597.                     '\shptop'+Alltrim(Str(This.FrxToTwips(ntop)))+;
  8598.                     '\shpright'+Alltrim(Str(This.FrxToTwips(nleft+lnWidth)))+;
  8599.                     '\shpbottom'+Alltrim(Str(This.FrxToTwips(ntop+lnHeight)))+;
  8600.                     '{\sp{\sn shapeType}{\sv 75}}'+;
  8601.                     '{\sp{\sn fLine}{\sv 0}}'+;
  8602.                     '{\sp{\sn fLockAspectRatio}{\sv '+STR(llLock,1)+'}}'+;
  8603.                     '{\sp{\sn cropFromBottom}{\sv '+ALLTRIM(STR(lncropb))+'}}'+;
  8604.                     '{\sp{\sn cropFromRight} {\sv '+ALLTRIM(STR(lncropr))+'}}'+;
  8605.                     '{\sp{\sn pib}' + ;
  8606.                     '{\sv ' + ;
  8607.                     '{\pict' + ;
  8608.                     '\wmetafile8\pic' + lcExt + '\picbpp4' + CHR(13)+;
  8609.                     lhFile +'}'+;
  8610.                     '}' + ;
  8611.                     '}' +  ;
  8612.                     '{\sp{\sn pibFlags}{\sv 2}}' + ;
  8613.                     '{\sp{\sn fUseShapeAnchor}{\sv 0}}' + ;
  8614.                     '}}'
  8615.         ENDIF
  8616.         IF NOT EMPTY(lcTempImgFile)
  8617.             TRY
  8618.                 DELETE FILE(lcTempImgFile)
  8619.             CATCH TO loExc
  8620.                 SET STEP ON 
  8621.             ENDTRY 
  8622.         ENDIF 
  8623.     OTHERWISE 
  8624.         SET STEP ON 
  8625.     Endcase
  8626. ***************
  8627. ENDWITH
  8628. IF !EMPTY(lcRTF)
  8629.     = Fputs(This.handle, lcRTF)
  8630. ENDIF
  8631. ENDPROC
  8632. PROCEDURE getpageimg
  8633. #DEFINE OutputJPEG     102
  8634. #DEFINE OutputPNG     104
  8635. LOCAL loListener as ReportListener 
  8636. loListener = IIF(VARTYPE(This.oActiveListener)="O", This.oActiveListener, This)
  8637. LOCAL lnPage
  8638. lnPage = This.nCurrentPage - loListener.CommandClauses.RangeFrom + 1
  8639. DIMENSION This.aPagesImgs(lnPage)
  8640. IF EMPTY(This.aPagesImgs(lnPage))
  8641.     LOCAL lnDeviceType, lcFile, lnDeviceType, lnHandle
  8642.     lnDeviceType = OutputPNG
  8643.     lcFile = ADDBS(GETENV("TEMP")) + SYS(2015) + ".PNG"
  8644.     loListener.OutputPage(lnPage, lcFile, lnDeviceType)
  8645.     This.aPagesImgs(lnPage) = lcFile
  8646. ENDIF 
  8647. RETURN This.aPagesImgs(lnPage)
  8648. ENDPROC
  8649. PROCEDURE getpicturefromlistener
  8650. *!* 2011/02/25 CChalom
  8651. *!* When we can't render the PDF text or image correctly, we still can get 
  8652.         * an image of the object, and draw it to the PDF document
  8653. LPARAMETERS tnX, tnY, tnWidth, tnHeight
  8654. IF This.lDefaultMode
  8655.     RETURN
  8656. ENDIF
  8657. LOCAL lcFile
  8658. lcFile = This.GetPageImg()
  8659. IF EMPTY(lcFile)
  8660.     RETURN .F. && Could not load image
  8661. ENDIF 
  8662. * Horizontal and Vertical factors to divide to convert to the correct coordinate 
  8663. LOCAL lnHor, lnVert
  8664. lnHor  = 9.972
  8665. lnVert = 9.996
  8666. lcNewFile = This.CropImage(lcFile, tnX / lnHor, tnY / lnVert, tnWidth / lnHor, tnHeight / lnVert, .T.)
  8667. RETURN lcNewFile
  8668. ENDPROC
  8669. PROCEDURE cropimage
  8670. Lparameters lcFile As String, tnX, tnY, lnWidth As Integer, lnHeight As Integer, tlFile
  8671. Local loBmp As gpBitmap OF HOME() + "ffc\_gdiplus.vcx"
  8672. loBmp = NEWOBJECT("GpBitmap", "_GdiPlus.vcx")
  8673. loBmp.CreateFromFile(lcFile)
  8674. lnHeight = MIN(lnHeight, loBmp.ImageHeight)
  8675. lnWidth  = MIN(lnWidth , loBmp.ImageWidth)
  8676. LOCAL lhBitmap, lnStatus
  8677. lhBitmap = 0
  8678. * Function used in the CropImage method
  8679. DECLARE Long GdipCloneBitmapAreaI IN GDIPLUS.DLL AS pdfxGdipCloneBitmapAreaI Long x, Long y, Long nWidth, Long Height, Long PixelFormat, Long srcBitmap, Long @dstBitmap
  8680. lnStatus = pdfxGdipCloneBitmapAreaI(tnX, tnY, lnWidth, lnHeight, loBmp.PixelFormat, loBmp.GetHandle(), @lhBitmap)
  8681. IF (lnStatus <> 0) OR (lhBitmap = 0)
  8682.     loBmp = NULL
  8683.     * lnHandle = 0
  8684.     RETURN ""
  8685. ENDIF 
  8686. LOCAL loCropped As gpBitmap OF HOME() + "ffc\_gdiplus.vcx"
  8687. loCropped = NEWOBJECT("GpBitmap", "_GdiPlus.vcx")
  8688. loCropped.SetHandle(lhBitmap, .T.)  && Owns handle, please destroy the Bmp object when releasing
  8689. loCropped.SetResolution(loBmp.HorizontalResolution, loBmp.VerticalResolution)
  8690. LOCAL lcEXT, lcEncoder
  8691. lcEXT = UPPER(JUSTEXT(lcFile))
  8692. lcEncoder = IIF(lcEXT = "PNG", "image/png", "image/jpeg")
  8693. LOCAL lcCroppedFile
  8694. lcCroppedFile = FORCEEXT(This._cTempFolder + Sys(2015), lcEXT)
  8695. loCropped.SaveToFile(lcCroppedFile, lcEncoder)
  8696. loCropped = NULL
  8697. loBMP     = NULL
  8698. This.oImages.Add(lcCroppedFile)
  8699. RETURN lcCroppedFile
  8700. ENDPROC
  8701. PROCEDURE updateproperties
  8702. IF NOT This.lObjTypeMode OR (VARTYPE(_Screen.oFoxyPreviewer) <> "O")
  8703.     RETURN
  8704. ENDIF 
  8705. IF VARTYPE(This.CommandClauses) = "O"
  8706.     *!*    IF This.CommandClauses.Preview
  8707.     *!*        This.lOpenViewer = .T.
  8708.     *!*    ELSE 
  8709.     *!*        This.lOpenViewer = NVL(loFP.lOpenViewer, .T.)
  8710.     *!*    ENDIF
  8711.     This.lOpenViewer = This.CommandClauses.Preview
  8712.     IF NOT EMPTY(This.CommandClauses.ToFile)
  8713.         This.TargetFileName = This.CommandClauses.ToFile
  8714.     ELSE 
  8715.         IF VARTYPE(_Screen.oFoxyPreviewer) = "O" AND ;
  8716.                 NOT EMPTY(_Screen.oFoxyPreviewer.cDestFile) AND ;
  8717.                 EMPTY(This.TargetFileName)
  8718.             LOCAL lcDestFile
  8719.             lcDestFile = _Screen.oFoxyPreviewer.cDestFile
  8720.             IF NOT "\" $ lcDestFile
  8721.                 lcDestFile = ALLTRIM(ADDBS(_Screen.oFoxyPreviewer.cOutputPath) + lcDestFile)
  8722.             ENDIF
  8723.             This.TargetFileName = lcDestFile
  8724.         ELSE
  8725.             LOCAL lcFile
  8726.             lcFile = This.TargetFileName
  8727.             IF EMPTY(lcFile)
  8728.                 lcFile = PUTFILE("","","rtf")
  8729.             ENDIF
  8730.             IF EMPTY(lcFile)
  8731.                 _ReportListener::CancelReport()
  8732.                 * This.CancelReport()
  8733.                 RETURN .F.
  8734.             ENDIF
  8735.             This.TargetFileName = lcFile
  8736.         ENDIF
  8737.     ENDIF 
  8738. ENDIF
  8739. This.QUIETMODE        = NVL(_Screen.oFoxyPreviewer.lQuietMode         , .F.)
  8740. IF VARTYPE(This.CommandClauses) = "O"
  8741.     IF This.CommandClauses.Preview
  8742.         This.lOpenViewer = .T.
  8743.     ENDIF 
  8744.     IF NOT EMPTY(This.CommandClauses.ToFile)
  8745.         This.TargetFileName = This.CommandClauses.ToFile
  8746.     ENDIF 
  8747. ENDIF
  8748. ENDPROC
  8749. PROCEDURE stringfromunicode
  8750. LPARAMETERS tcUnicode
  8751.     LOCAL n, lcUNValue, lnUNValue, lcNewContents
  8752.     lcUnValue     = ""
  8753.     lcNewContents = ""
  8754. *   {\uc1\u20013 ?\u25991 ?\u31616 ?\u20307 ?\u27721 ?\u23383 ?-\u28436 ?\u31034 ?-Demo}
  8755. YE_-Demo    
  8756. *                .Expr = STRCONV(cContentsToBeRendered,6)
  8757. *                .Expr = STRTRAN(.Expr, CHR(13) + CHR(10), "<_CR_>")
  8758. *                .Expr = STRTRAN(.Expr, CHR(13), "<_CR_>")
  8759. *                .Expr = STRTRAN(.Expr, CHR(10), "<_CR_>")
  8760. *                .Expr = STRTRAN(.Expr, "<_CR_>", " \par ")
  8761.     LOCAL lnChars
  8762.     lnChars = LEN(tcUnicode)
  8763.     FOR n = 1 TO lnChars STEP 2
  8764.         lcUNValue = SUBSTR(tcUnicode, n, 2)
  8765.         IF EMPTY(lcUNValue)
  8766.             EXIT
  8767.         ENDIF
  8768.         lnUNValue = CTOBIN(0h+lcUNValue,"2RS")
  8769.         IF lnUNValue = 10 && Carriage return - CHR(10)
  8770.             lcNewContents = lcNewContents + " \par "
  8771.             LOOP 
  8772.         ENDIF 
  8773.         lcNewContents = lcNewContents + '\u' + ALLTRIM(TRANSFORM(lnUNValue)) + ' ?'
  8774.     ENDFOR
  8775. RETURN lcNewContents
  8776. ENDPROC
  8777. PROCEDURE Destroy
  8778. IF This.lDefaultMode 
  8779.     DODEFAULT()
  8780. ENDIF
  8781. ENDPROC
  8782. PROCEDURE AfterReport
  8783. IF This.lDefaultMode OR This.lObjTypeMode
  8784.     DODEFAULT()
  8785. ELSE 
  8786.     NODEFAULT 
  8787. ENDIF 
  8788. * Determine the ".WaitForNextReport" status if using "lObjTypeMode"
  8789. IF This.lObjTypeMode
  8790.     TRY 
  8791.         This.WaitForNextReport = This.CommandClauses.NoPageEject
  8792.     CATCH
  8793.     ENDTRY 
  8794. ENDIF 
  8795. ** Save the document to RTF
  8796. IF NOT This.WaitForNextReport 
  8797.     =FPUTS(This.Handle, '}')
  8798.     LOCAL llSaved
  8799.     llSaved = FCLOSE(This.Handle)
  8800.     IF llSaved
  8801.         IF This.lObjTypeMode
  8802.             _Screen.oFoxyPreviewer.lSaved = llSaved
  8803.         ENDIF
  8804.         IF This.lOpenViewer 
  8805.             This.ShellExec(This.TargetFileName)
  8806.         ENDIF 
  8807.     ENDIF 
  8808. ENDIF 
  8809. * CChalom
  8810. * Reset the report page counter
  8811. This.nPgCounter = 0
  8812. * Delete the pages files
  8813. LOCAL n, lcFile, loExc as Exception
  8814. FOR m.n = 1 TO ALEN(This.aPagesImgs,1)
  8815.     lcFile = This.aPagesImgs(m.n)
  8816.     IF NOT EMPTY(lcFile)
  8817.         TRY 
  8818.             DELETE FILE (lcFile)
  8819.         CATCH
  8820.         ENDTRY
  8821.     ENDIF
  8822. ENDFOR
  8823. * Cleanup the objects from the report
  8824. IF VARTYPE(This.oImages) = "O" && Cleanup Temporary Images Files
  8825.     LOCAL lcItem AS String
  8826.     FOR EACH lcItem IN This.oImages FOXOBJECT
  8827.         IF FILE(lcItem)
  8828.             TRY
  8829.                 DELETE FILE (lcItem)
  8830.             CATCH TO loExc
  8831.                 SET STEP ON 
  8832.             ENDTRY
  8833.         ENDIF
  8834.     ENDFOR 
  8835.     This.oImages.Destroy()
  8836.     This.oImages = NULL
  8837. ENDIF
  8838. This.loFrxRecord = NULL
  8839. This.oActiveListener = ""
  8840. * Delete the temporary copy of the FRX we created
  8841. IF This.lObjTypeMode OR This.lDefaultMode 
  8842.     IF USED(This.cFRXalias)
  8843.         USE IN SELECT(This.cFRXalias)
  8844.     ELSE 
  8845.         This.setFRXDataSession()    
  8846.         USE IN SELECT(This.cFRXalias)
  8847.         This.setCurrentDataSession()
  8848.     ENDIF 
  8849.     TRY 
  8850.         DELETE FILE (This.cTempFRX)
  8851.     CATCH TO loExc
  8852.     ENDTRY
  8853. ENDIF 
  8854. ENDPROC
  8855. PROCEDURE Render
  8856. LPARAMETERS nFRXRecno, nLeft, nTop, nWidth, nHeight, nObjectContinuationType, cContentsToBeRendered, GDIPlusImage
  8857. LOCAL lnPageNo 
  8858. lnPageNo = This.PageNo
  8859. IF This.lDefaultMode 
  8860.     * CChalom 2010-01-25
  8861.     * If the report page is not between the page ranges asked, just skip
  8862.     LOCAL lnRangeTo, tlNewPage
  8863.     tlNewPage = .F.
  8864.     IF This.PageNo > This.nGlobalPgCounter OR This.nPgCounter = 0
  8865.         This.nPgCounter = This.nPgCounter + 1
  8866.         This.nGlobalPgCounter = This.nGlobalPgCounter + 1
  8867.         tlNewPage = .T.
  8868.     ENDIF
  8869.     lnRangeTo = This.CommandClauses.RangeTo
  8870.     IF lnRangeTo <> -1 AND NOT BETWEEN(This.nPgCounter, This.CommandClauses.RangeFrom, lnRangeTo)
  8871.         IF tlNewPage
  8872.             This.OldPageNo = This.PageNo &&_PageNo 
  8873.         ENDIF 
  8874.         NODEFAULT 
  8875.         RETURN 
  8876.     ENDIF 
  8877.     * Moved the page change to the render method
  8878.     If This.OldPageNo != This.PageNo &&_PageNo 
  8879.         This.OldPageNo = This.PageNo &&_PageNo 
  8880.         IF This.lStarted && add a new page only if the report has already started
  8881.             = Fputs(This.handle,'\page')
  8882.         ENDIF 
  8883.     Endif
  8884.     This.nCurrentPage = This.PageNo
  8885. ELSE 
  8886.     If This.OldPageNo != PAGE 
  8887.         This.OldPageNo = PAGE 
  8888.         IF This.lStarted && add a new page only if the report has already started
  8889.             = Fputs(This.handle,'\page')
  8890.         ENDIF 
  8891.     Endif
  8892.     This.nCurrentPage = PAGE
  8893. ENDIF 
  8894. * From PDFx by Luis Navas
  8895. * Code to detect if report will run twice because of use of _PAGETOTAL
  8896. If This.TwoPassProcess And This.CurrentPass=0 Then
  8897.     NODEFAULT 
  8898.     RETURN 
  8899. EndIf
  8900. This.lStarted = .T.
  8901. IF This.lDefaultMode 
  8902.     This.loFRXRecord = This.Getfrxrecord(nFRXRecno)
  8903. ELSE 
  8904.     LOCAL loFRX
  8905.     SCATTER MEMO NAME loFRX 
  8906.     This.loFRXRecord = loFRX
  8907. ENDIF 
  8908. * Here is calling to RTF output
  8909. This.RenderRTF(This.loFRXRecord, nLeft, nTop, nWidth, nHeight, ;
  8910.         nObjectContinuationType, cContentsToBeRendered, GDIPlusImage)
  8911. * CChalom 2010-01-17
  8912. * No need to call the default render event, because we'll passing everything to RTF
  8913. NODEFAULT
  8914. ENDPROC
  8915. PROCEDURE BeforeReport
  8916. IF This.lDefaultMode OR This.lObjTypeMode
  8917.     This.oActiveListener = This
  8918.     DODEFAULT()
  8919. ENDIF
  8920. This.PageSetup()
  8921. This.RTF_Create()
  8922. ENDPROC
  8923. PROCEDURE Init
  8924. LPARAMETERS tcRTFFileName
  8925. IF VARTYPE(tcRTFFileName) = "C" AND FILE(tcRTFFileName)
  8926.     DELETE FILE(tcRTFFileName)
  8927. ENDIF
  8928. This.TargetFileName = tcRTFFileName
  8929. This.nPgCounter = 0
  8930. IF This.lDefaultMode OR This.lObjTypeMode
  8931.     DODEFAULT()
  8932. ELSE 
  8933.     NODEFAULT 
  8934. ENDIF 
  8935. ENDPROC
  8936. PROCEDURE LoadReport
  8937. This.UpdateProperties()
  8938. DODEFAULT()
  8939. ENDPROC
  8940. reportlistener
  8941. pr_reportlistener.vcx
  8942. Height = 23
  8943. Width = 23
  8944. FRXDataSession = -1
  8945. SendGDIPlusImage = 1
  8946. paper_letter = .F.
  8947. handle = 
  8948. code_page = 1252
  8949. oldpageno = 1
  8950. borderwidth = 0
  8951. lofrxrecord = .NULL.
  8952. waitfornextreport = .F.
  8953. npgcounter = 0
  8954. nglobalpgcounter = 0
  8955. orecord = .NULL.
  8956. targetfilename = 
  8957. lstarted = .F.
  8958. _llandscape = .F.
  8959. npagewidth = 0
  8960. npageheight = 0
  8961. ldefaultmode = .T.
  8962. nmarginleft = 0
  8963. nmarginright = 0
  8964. nmargintop = 0
  8965. nmarginbottom = 0
  8966. ncurrentpage = 0
  8967. oactivelistener = .NULL.
  8968. _ctempfolder = 
  8969. oimages = .NULL.
  8970. lobjtypemode = .F.
  8971. lopenviewer = .F.
  8972. ctempfrx = 
  8973. cfrxalias = 
  8974. _memberdata = 
  8975.      551<VFPData><memberdata name="_ctempfolder" display="_cTempFolder"/><memberdata name="aimgs" display="aImgs"/><memberdata name="oimages" display="oImages"/><memberdata name="lobjtypemode" display="lObjTypeMode"/><memberdata name="updateproperties" display="UpdateProperties"/><memberdata name="lopenviewer" display="lOpenViewer"/><memberdata name="shellexec" display="ShellExec"/><memberdata name="ctempfrx" display="cTempFRX"/><memberdata name="cfrxalias" display="cFRXAlias"/><memberdata name="stringfromunicode" <VFPData><memberdata name="_ctempfolder
  8976. Name = "rtfreportlistener"
  8977. The enhanced reporting experience provided by FoxyPreviewer can't run because there are no printers installed on this computer.C
  8978. Please install a printer and try again!
  8979. Install a printer
  8980. WScript.Shell
  8981. rundll32.exe shell32.dll,SHHelpShortcuts_RunDLL AddPrinter
  8982. Fixedv
  8983. RELEASE
  8984. FoxypreviewerPath
  8985. FoxypreviewerPath
  8986. FoxypreviewerOrigPreview
  8987. FoxypreviewerOrigPreview
  8988. FoxypreviewerOrigOutput
  8989. FoxypreviewerOrigOutput
  8990. FoxypreviewerOrigReportBehavior
  8991. FoxypreviewerOrigReportBehaviorC
  8992. ReportBehaviorv
  8993. _oReportOutput("1")b
  8994. _oReportOutput("0")b
  8995. _oReportOutput("10")b
  8996. _oReportOutput("11")b
  8997. _oReportOutput("12")b
  8998. _oReportOutput("13")b
  8999. _oReportOutput("14")b
  9000. _oReportOutput("15")b
  9001. _oReportOutput("16")b
  9002. _oReportOutput("20")b
  9003. FOXYPREVIEWERC
  9004. FoxypreviewerOrigPreview
  9005. PR_FRXOUTPUTC
  9006. FoxypreviewerOrigOutput
  9007. SET REPORTBEHAVIOR &lcRepBehavior.
  9008. FoxypreviewerOrigReportBehavior
  9009. oFoxyPreviewer
  9010. _oLang
  9011. oFoxyPreviewer
  9012. SET FIXED &lcSetFixed.
  9013. pr_ReportListener
  9014. _GdiPlus
  9015. Datasessionv
  9016. FoxyInitForm
  9017. PreviewHelper
  9018. REPORTLISTENER
  9019. EXTENSIONHANDLER
  9020. PR_FRXPreview.Prg
  9021. FOXYLISTENER
  9022. PR_ReportListener.vcx
  9023. FOXYLISTENER
  9024. ExtensionHandler
  9025. LOPREVIEWCONTAINER
  9026. LCTYPE
  9027. GAPRINTERS
  9028. LOSHELL
  9029. LCSETFIXED
  9030. LCSYS16
  9031. LCLOCALPATH    
  9032. LLRELEASE
  9033. ADDPROPERTY
  9034. _FOXYPDF
  9035. _FOXYPDFASIMAGE
  9036. _FOXYRTF    
  9037. _FOXYHTML
  9038. _FOXYXLS
  9039. _OREPORTOUTPUT
  9040. PREVIEWCONTAINER
  9041. LOEXC
  9042. REMOVE
  9043. FOXYPREVIEWERORIGPREVIEW
  9044. FOXYPREVIEWERORIGOUTPUT
  9045. LCREPBEHAVIOR
  9046. FOXYPREVIEWERORIGREPORTBEHAVIOR
  9047. _FOXYHTML2
  9048. OFOXYPREVIEWER
  9049. _OLANG
  9050. DESTROY
  9051. CLEARSETPROC
  9052. CLEARSETCLASSLIB
  9053. LOHELPER
  9054. LNDATASESSION
  9055. LNSELECT
  9056. LNRECNO
  9057. LOHELPERFORM    
  9058. CLANGUAGE    
  9059. LNSELECT0
  9060. _GOFP
  9061. LCOMPLETEMODE
  9062. LOLISTENER
  9063. LOEXHANDLER
  9064. LCPREVIEWAPP
  9065. LISTENERTYPE    
  9066. QUIETMODE
  9067. LQUIETMODE
  9068. FXFEEDBACKCLASS
  9069. _CTHERMCLASS
  9070. LEXPANDFIELDS
  9071. _OEXHANDLER
  9072. UPDATEPROPERTIES
  9073. SETEXTENSIONHANDLER
  9074. SETZOOMLEVEL
  9075. NZOOMLEVEL
  9076. SETCANVASCOUNT
  9077. NCANVASCOUNTK
  9078. TLVALUE
  9079. OFOXYPREVIEWER
  9080. LPRINTED
  9081. THISK
  9082. TLVALUE
  9083. OFOXYPREVIEWER
  9084. LSAVED
  9085. THISK
  9086. TLVALUE
  9087. OFOXYPREVIEWER
  9088. LEMAILED
  9089. THISK
  9090. TCDESTFILE
  9091. OFOXYPREVIEWER    
  9092. CDESTFILE
  9093. THISy
  9094. RETURN &lcEncrProc.(m.tcString)
  9095. TCSTRING
  9096. LCENCRPROC
  9097. CENCRYPTPROCEDURE
  9098. CCRYPTKEYy
  9099. RETURN &lcDecrProc.(m.tcString)
  9100. TCSTRING
  9101. LCDECRPROC
  9102. CDECRYPTPROCEDURE
  9103. CCRYPTKEYb
  9104. STRING
  9105. STRING
  9106. STRING
  9107. Could not locate the file or link: C
  9108. Internal error
  9109. TCLINK
  9110. TCACTION
  9111. TCPARMS    
  9112. LLSUCCESS
  9113. _LALREADYOPENED
  9114. SHELLEXECUTE
  9115. FINDWINDOW
  9116. CAPTION
  9117. _Screen.oFoxyPreviewer.
  9118. This.&lcProperty. = m.luValue
  9119. Error in method 'UpdateProperties'C
  9120. Line: 
  9121. LNPROPS
  9122. LCPROPERTY
  9123. LUVALUE
  9124. OFOXYPREVIEWER
  9125. LAPROPS
  9126. LOEXC
  9127. ERRORNO
  9128. MESSAGE
  9129. LINENO
  9130. LINECONTENTSM
  9131. Udfparmsv
  9132. Images
  9133. _GDIPLUS.VCXC
  9134. Classlibv
  9135. _GdiPlus.vcx
  9136. PR_REPORTLISTENER.VCXC
  9137. Classlibv
  9138. PR_ReportListener.vcx
  9139. PR_FRXOUTPUT
  9140. _GDIPLUS.VCXC
  9141. Classlibv
  9142. _GdiPlus.vcx
  9143. PR_REPORTLISTENER.VCXC
  9144. Classlibv
  9145. PR_ReportListener.vcx
  9146. PR_FRXOUTPUT
  9147. FoxypreviewerPath
  9148. Pathv
  9149. libhpdf.dll
  9150. INITSTATUS
  9151. PREPSTATUS
  9152. RUNSTATUS
  9153. SECONDS
  9154. CANCELINST
  9155. CANCELQUER
  9156. REPINCOMPL
  9157. ATTENTION
  9158. ERRSENDMAI
  9159. MSGNOTSENT
  9160. MSGSUCCESS
  9161. SENDEMAIL
  9162. ATACHNOTFO
  9163. MSGSENDING
  9164. TLLOCAL
  9165. _SETUDFPARMS
  9166. CERRORS    
  9167. STARTMODE
  9168. LCPATH
  9169. CLASSLIBRARY
  9170. PR_REPORTLISTENER
  9171. LCLOCALFOXYPATH
  9172. FOXYPREVIEWERPATH
  9173. LCOMPLETEMODE
  9174. _GOFP
  9175. LCCLASSPATH    
  9176. LCPDFFILE
  9177. LCTESTPATH
  9178. PR_PATHFILEEXISTS
  9179. _SYS16
  9180. UPDATESETTINGS
  9181. _INITSTATUSTEXT
  9182. GETLOC
  9183. _PREPASSSTATUSTEXT
  9184. _RUNSTATUSTEXT
  9185. _SECONDSTEXT
  9186. _CANCELINSTRTEXT
  9187. _CANCELQUERYTEXT
  9188. _REPORTINCOMPLETETEXT
  9189. _ATTENTIONTEXT
  9190. _ERRORSENDINGMAIL
  9191. _MSGNOTSENTTEXT
  9192. _MSGSUCCESSTEXT
  9193. _SENDEMAILTEXT
  9194. _ATTACHNOTFOUNDTEXT
  9195. _SENDINGTEXT
  9196. FoxypreviewerPath
  9197. FoxyPreviewer_Settings.dbf
  9198. FoxyPreviewer_DefaultSettings.dbf
  9199. _Screen.oFoxyPreviewer._cLocalPathb
  9200. Safetyv
  9201. SET SAFETY &lcSetSafety.
  9202. .Property
  9203. Value
  9204. IF VARTYPE(This.&lcProp.) = [U]        
  9205. _Screen.oFoxyPreviewer.
  9206. _Screen.oFoxyPreviewer.&lcProp. = m.luValue
  9207. This.&lcProp. = m.luValue
  9208. Could not locate the settings table.C
  9209. Please check the folder permissions of the folder where you saved 'FoxyPreviewer.App', because this utility needs Read/Write permission in that folder.
  9210. You may need to move the APP from that folder.
  9211. Loading default preview settings
  9212. Error in UpdateSettingsC
  9213. Line: 
  9214. .F..F..F..F..F..F..F.
  9215. TLFORCE
  9216. LCLOCALFOXYPATH
  9217. FOXYPREVIEWERPATH
  9218. LCCLASSPATH
  9219. LCFILE
  9220. LCUSERSETFILE
  9221. LCDEFAULTSETFILE    
  9222. LCNEWFILE
  9223. CLASSLIBRARY
  9224. LCOMPLETEMODE
  9225. OFOXYPREVIEWER
  9226. _CLOCALPATH
  9227. PR_PATHFILEEXISTS    
  9228. PR_CPZERO
  9229. LCSETSAFETY
  9230. LNSELECT
  9231. LCALIAS
  9232. _SETTINGSFILE
  9233. LCPROP
  9234. LCTYPE
  9235. LUVALUE
  9236. LUVALUE2
  9237. LOEXC
  9238. ERRORNO
  9239. SETERROR
  9240. LCMSG
  9241. MESSAGE
  9242. LINENO
  9243. LINECONTENTS
  9244. LSAVEASIMAGE
  9245. LSAVEASPDF
  9246. LSAVEASRTF
  9247. LSAVEASXLS
  9248. LSAVEASHTML
  9249. LSAVEASTXT
  9250. LSAVEASMHT
  9251. LSAVETOFILE
  9252. FXTHERM
  9253. FOXYTHERM
  9254. TNTYPE
  9255. LCTHERMCLASS
  9256. _CTHERMCLASS
  9257. NTHERMTYPE
  9258. ENGLISH
  9259. ESPANIOL
  9260. SPANISH
  9261. TCLANGUAGE
  9262. THIS    
  9263. CLANGUAGE
  9264. _OLANG
  9265. SETLANGUAGE?
  9266. FoxyPreviewer_Locs.dbf
  9267. Could not load the localizations table.
  9268. Collection
  9269. Collection
  9270. LANGNOTFOU
  9271. Make sure that the desired language is available in FoxyPreviewer_Locs.dbf
  9272. TCLANGUAGE    
  9273. LCDBFFILE
  9274. LNSELECT
  9275. SETERROR
  9276. _ALANGUAGES
  9277. _ALANGLOCAL
  9278. LANGUAGE    
  9279. LOCALLANG
  9280. GETLOC
  9281. _LANGINDEX    
  9282. CCODEPAGE
  9283. OLANG
  9284. _OLANG*
  9285. ERROR
  9286. ERROR
  9287. TCERRMSG
  9288. TCTITLE
  9289. CERRORS
  9290. LSILENT
  9291. LCERRCAPTION
  9292. GETLOC
  9293. CVERSIONi
  9294. This._oLang.
  9295. ERROR
  9296. ** ERROR **
  9297. Could not locate the string '
  9298. ' in the localizations table.
  9299. Please make sure that you have the latest version available of 'FoxyPreviewer_locs.dbf'.
  9300. TCSTRING
  9301. LCTRANSL
  9302. SETERROR
  9303. SET UDFPARMS TO &lcUDFPar.
  9304. CUSTOM
  9305. Error updating the caller class.C
  9306. Check if the file FOXUPREVIEWERCALLER.PRG matches the APP version.
  9307. LCUDFPAR
  9308. _SETUDFPARMS
  9309. LOPARENT
  9310. _OCALLER
  9311. LSAVED
  9312. LPRINTED    
  9313. CDESTFILE
  9314. LEMAILED
  9315. CERRORS
  9316. NVERSION
  9317. CVERSION
  9318. LOEXC
  9319. SETERROR
  9320. _OREPORT    
  9321. OLISTENER    
  9322. _OREPORTS    
  9323. _OCLAUSES    
  9324. _OALIASES
  9325. _ONAMES
  9326. _OPROOFSHEET
  9327. _OSETTINGSSHEET
  9328. _OEMAILSHEET
  9329. _OEXHANDLER
  9330. _OPARENTFORM
  9331. _OLANG
  9332. CLEARCACHE
  9333. _GOFP
  9334. _OPROOFSHEET
  9335. RELEASE
  9336. _OSETTINGSSHEET
  9337. _OEMAILSHEET
  9338. DOFOXYTHERM3
  9339. Collection
  9340. Collection
  9341. Collection
  9342. Collection
  9343. TCREPORT    
  9344. TCCLAUSES
  9345. TCALIAS
  9346. TCNAME
  9347. THIS    
  9348. _OREPORTS    
  9349. _OCLAUSES    
  9350. _OALIASES
  9351. _ONAMES
  9352. REPORTLISTENER
  9353. REPORTLISTENER
  9354. Printer
  9355. LABEL FORM (m.lcReport) OBJECT m.loListener &lcClauses.
  9356. NOPAGEEJECT
  9357. WaitForNextReport
  9358. REPNOTFOUN
  9359. LABEL FORM (m.lcReport) &lcClauses. &lcUser. TO PRINTER NOCONSOLE
  9360. REPORT FORM (m.lcReport) &lcClauses. &lcUser. TO PRINTER NOCONSOLE
  9361. LABEL FORM (m.lcReport) OBJECT m.loListener &lcClauses. &lcUser.
  9362. REPORT FORM (m.lcReport) OBJECT m.loListener &lcClauses. &lcUser.
  9363. TOLISTENER
  9364. TLKEEPHANDLE
  9365. LCREPORT    
  9366. LCCLAUSES
  9367. LCALIAS
  9368. LCTYPE
  9369. LOLISTENER
  9370. THIS    
  9371. OLISTENER
  9372. CPRINTERNAME
  9373. SETPRINTER    
  9374. _OREPORTS
  9375. PRINTJOBNAME
  9376. _ONAMES    
  9377. _OCLAUSES    
  9378. _OALIASES
  9379. LCUSER
  9380. LNCOUNT
  9381. COUNT
  9382. _NINDEX
  9383. WAITFORNEXTREPORT
  9384. SETERROR
  9385. GETLOC
  9386. LUSELISTENER
  9387. _LSENDTOPRINTER
  9388. _LISDOTMATRIX
  9389. LDIRECTPRINT
  9390. CLEANCLAUSESM
  9391. Printer
  9392. _CORIGINALPRINTER
  9393. SETPRINTERt
  9394. ERRNOPRINTER
  9395. FOXYLISTENER
  9396. PR_ReportListener.vcx
  9397. PR_ReportListener.vcx
  9398. PR_ReportListener.vcx
  9399. REPORTLISTENER
  9400. _REPORTLISTENER
  9401. FXLISTENER
  9402. DBFLISTENER
  9403. FULLJUSTIFYLISTENER
  9404. FOXYLISTENER
  9405. FOXYLISTENER
  9406. SYS(16) : C
  9407. GetCurPath() : 
  9408. File('PR_ReportListener.vcx') : 
  9409. PR_ReportListener.vcx0_
  9410. This.ClassLibrary : 
  9411. Error loading FoxyListener!C
  9412. Line: 
  9413. FXLISTENER
  9414. PR_ReportListener.vcx
  9415. lStoreData
  9416. PR_FRXPreview.Prg
  9417. EXTENSIONHANDLER
  9418. ExtensionHandler
  9419. TOPARENT
  9420. GAPRINTERS
  9421. SETERROR
  9422. GETLOC
  9423. LPRINTED
  9424. _OCALLER    
  9425. OLISTENER
  9426. LCLISTENERCLASS
  9427. LCOMPLETEMODE
  9428. CDEFAULTLISTENER    
  9429. STARTMODE
  9430. GETCURPATH
  9431. CLASSLIBRARY
  9432. FXFEEDBACKCLASS
  9433. _CTHERMCLASS
  9434. LEXPANDFIELDS
  9435. LCSUCCESSOR
  9436. CSUCCESSOR    
  9437. SUCCESSOR
  9438. LOEXC
  9439. LCMSG
  9440. ERRORNO
  9441. MESSAGE
  9442. LINENO
  9443. LINECONTENTS
  9444. LDIRECTPRINT
  9445. OUTPUTTYPE
  9446. LSTOREDATA
  9447. DOOUTPUT
  9448. _OLANG
  9449. SETLANGUAGE    
  9450. CLANGUAGE    
  9451. CDESTFILE
  9452. LISTENERTYPE
  9453. LOPREVIEWCONTAINER
  9454. LCPREVIEWAPP
  9455. LOEXHANDLER
  9456. SETEXTENSIONHANDLER
  9457. _OEXHANDLER    
  9458. ZOOMLEVEL
  9459. NZOOMLEVEL
  9460. CANVASCOUNT
  9461. NCANVASCOUNT
  9462. PREVIEWCONTAINER
  9463. CALLREPORT
  9464. _LNOWAIT
  9465. PdfListener
  9466. PR_PDFx.vcx
  9467. PdfListener
  9468. PR_PDFx.vcx
  9469. PDFasImageListener
  9470. PR_Pdfx.vcx
  9471. PDFasImageListener
  9472. PR_PDFx.vcx
  9473. ERR_CREATI
  9474. MSXML2.XSLTEMPLATE.4.0
  9475. ERR_CREATI
  9476. The MSXML4.0 library could not be loaded. Please check if it was properly installed.
  9477. HTMLListener
  9478. PR_HTMLListener
  9479. PR_ReportListener.vcx
  9480. ERR_CREATI
  9481. RTFreportlistener
  9482. PR_RTFListener
  9483. ERR_CREATI
  9484. ExcelListener
  9485. ExcelListener
  9486. pr_ExcelListener.vcx
  9487. Sheet
  9488. ERR_CREATI
  9489. ERR_CREATI
  9490. REPORTLISTENER
  9491. ExportListener
  9492. ERR_CREATI
  9493. REPORTLISTENER
  9494. FOXYLISTENER
  9495. PR_ReportListener.vcx
  9496. ERR_CREATI
  9497. FOXYLISTENERC
  9498. PR_ReportListener.vcx
  9499. FOXYLISTENER
  9500. PR_ReportListener.vcx
  9501. FOXYLISTENER
  9502. PR_ReportListener.vcx
  9503. REPORTLISTENER
  9504. _REPORTLISTENER
  9505. FXLISTENER
  9506. DBFLISTENER
  9507. FULLJUSTIFYLISTENER
  9508. FOXYLISTENER
  9509. FOXYLISTENER
  9510. FXLISTENER
  9511. PR_ReportListener.vcx
  9512. TLEMAIL
  9513. LCFILEFORMAT    
  9514. CDESTFILE
  9515. LSAVED
  9516. COUTPUTPATH
  9517. LSAVETOFILE
  9518. LNTYPE
  9519. LPDFASIMAGE
  9520. LOLISTENER    
  9521. CCODEPAGE
  9522. LEMBEDFONT
  9523. LPDFEMBEDFONTS
  9524. CSYMBOLFONTSLIST
  9525. CPDFSYMBOLFONTSLIST
  9526. CDEFAULTFONT
  9527. CPDFDEFAULTFONT
  9528. LREPLACEFONTS
  9529. LPDFREPLACEFONTS
  9530. CTARGETFILENAME    
  9531. QUIETMODE
  9532. LQUIETMODE
  9533. FXFEEDBACKCLASS
  9534. _CTHERMCLASS    
  9535. LCANPRINT
  9536. LPDFCANPRINT
  9537. LCANEDIT
  9538. LPDFCANEDIT
  9539. LCANCOPY
  9540. LPDFCANCOPY
  9541. LCANADDNOTES
  9542. LPDFCANADDNOTES
  9543. LENCRYPTDOCUMENT
  9544. LPDFENCRYPTDOCUMENT
  9545. CMASTERPASSWORD
  9546. CPDFMASTERPASSWORD
  9547. CUSERPASSWORD
  9548. CPDFUSERPASSWORD
  9549. LSHOWERRORS
  9550. LPDFSHOWERRORS
  9551. CPDFAUTHOR    
  9552. CPDFTITLE
  9553. CPDFSUBJECT
  9554. CPDFKEYWORDS
  9555. CPDFCREATOR
  9556. LOPENVIEWER
  9557. LNPGMODE
  9558. NPDFPAGEMODE    
  9559. NPAGEMODE
  9560. LCOMPLETEMODE
  9561. LDEFAULTMODE
  9562. CALLREPORT
  9563. LCFULLOUTPUTALIAS
  9564. LNWIDTH
  9565. LNHEIGHT    
  9566. OLISTENER
  9567. GETFULLFRXDATA
  9568. GETPAGEWIDTH
  9569. GETPAGEHEIGHT
  9570. OUTPUTFROMDATA
  9571. SETERROR
  9572. GETLOC
  9573. LLERROR
  9574. LOTESTXML4
  9575. WINDOW_HTML
  9576. TARGETFILENAME$
  9577. COPYIMAGEFILESTOEXTERNALFILELOCATION
  9578. LORTFLISTENER
  9579. LCOUTPUTALIAS
  9580. LOREPORTLISTENER
  9581. LISTENERTYPE
  9582. LOUTPUTTOCURSOR
  9583. CWORKBOOKFILE
  9584. CWORKSHEETNAME
  9585. LCONVERTTOXLS
  9586. LEXCELCONVERTTOXLS
  9587. LREPEATHEADERS
  9588. LEXCELREPEATHEADERS
  9589. LREPEATFOOTERS
  9590. LEXCELREPEATFOOTERS
  9591. LHIDEPAGENO
  9592. LEXCELHIDEPAGENO
  9593. LALIGNLEFT
  9594. LEXCELALIGNLEFT
  9595. NEXCELSAVEFORMAT    
  9596. _OREPORTS
  9597. REPORT2PIC
  9598. LDIRECTPRINT
  9599. NCOPIES
  9600. LPRINTED
  9601. RESTOREPRINTER
  9602. _LSENDTOPRINTER    
  9603. STARTMODE
  9604. GETCURPATH
  9605. CLASSLIBRARY
  9606. LCSUCCESSOR
  9607. CDEFAULTLISTENER    
  9608. SUCCESSOR
  9609. LOEXC
  9610. LOEXCEPTION
  9611. _LSENDINGEMAIL
  9612. LAUTOSENDMAIL
  9613. SENDREPORTTOEMAIL
  9614. _CDEFAULTFOLDER
  9615. _LALREADYOPENED
  9616. OPENFILE
  9617. REPORTRELEASEDD
  9618. ERR_CREATI
  9619. BADCONFIG
  9620. ERRSENDMAI
  9621. MSGNOTSENT
  9622. ERROR
  9623. OFOXYPREVIEWER
  9624. THIS    
  9625. CDESTFILE    
  9626. CEMAILPRG
  9627. NEMAILMODE
  9628. SETERROR
  9629. GETLOC
  9630. LEMAILED
  9631. LAUTOSENDMAIL
  9632. SENDCDOMAIL
  9633. PR_SENDMAILEX
  9634. HWINDOW
  9635. LCDELIMITER
  9636. LCFILES    
  9637. LCMSGSUBJ
  9638. LNMAPIRETURN
  9639. PR_GETACTIVEWINDOW
  9640. PR_MAPISENDDOCUMENTS
  9641. PR_MAPISHOWMESSAGE
  9642. _CDEFAULTFOLDER
  9643. LOMAILEX
  9644. LEMAILAUTO
  9645. LSAVED
  9646. _LSENDINGEMAIL
  9647. DefaultvC
  9648. TOEXT
  9649. THIS    
  9650. OLISTENER
  9651. ERASETEMPFILES
  9652. _CORIGINALPRINTER
  9653. CPRINTERNAME
  9654. SETPRINTER
  9655. CLOSESHEETS
  9656. _GOFP
  9657. _CDEFAULTFOLDER
  9658. CLEARCACHE
  9659. DESTROY2
  9660. _OREPORTOUTPUT
  9661. PREVIEWCONTAINER
  9662. LOEXC>
  9663. EXCEPTION
  9664. SET PRINTER TO NAME '&lcPrinter'
  9665. Could not change the current printer.C
  9666. Current Printer: 
  9667. Printer
  9668. Failed Printer: 
  9669. TCPRINTERNAME    
  9670. LCPRINTER
  9671. LLRETURN
  9672. LOEXC
  9673. SETERROR@
  9674. LENABLED
  9675. PREVIEWFORM
  9676. TOOLBAR
  9677. REFRESH
  9678. CAPTION
  9679. FORMCAPTION7
  9680. MENUTOP
  9681. MENUPREV
  9682. MENUNEXT
  9683. MENULAST
  9684. MENUGOTO
  9685. MENUSHOWPA
  9686. MENUTOOLB
  9687. CBOZOOMTTI
  9688. CBOZOOMTTI
  9689. m.oRef.ExtensionHandler.ActionGotoPage()
  9690. m.oRef.ExtensionHandler.actionToolbarVisibility()
  9691. MENUPROOF
  9692. m.oRef.ExtensionHandler.DoProof()
  9693. m.oRef.ExtensionHandler.DoSearch()
  9694. FINDBACK
  9695. FINDNEXT
  9696. m.oRef.ExtensionHandler.DoSearchBack()
  9697. m.oRef.ExtensionHandler.DoSearchAgain()
  9698. SAVEREPORT
  9699. ON BAR 17 OF (m.cPopup) ACTIVATE POPUP &lcSaveMenu.
  9700. SAVEASIMAG
  9701. pr_Img.bmp
  9702. m.oRef.ExtensionHandler.DoSaveType(1)
  9703. SAVEASPDF
  9704. pr_Pdf.bmp
  9705. m.oRef.ExtensionHandler.DoSaveType(2)
  9706. SAVEASRTF
  9707. pr_Word.bmp
  9708. m.oRef.ExtensionHandler.DoSaveType(4)
  9709. SAVEASXLS
  9710. pr_Excel.bmp
  9711. m.oRef.ExtensionHandler.DoSaveType(5)
  9712. SAVEASHTML
  9713. pr_Html.bmp
  9714. m.oRef.ExtensionHandler.DoSaveType(3)
  9715. SAVEASMHT
  9716. pr_MHT.bmp
  9717. m.oRef.ExtensionHandler.DoSaveType(8)
  9718. SAVEASIMAG
  9719. m.oRef.ExtensionHandler.DoSaveType(1)
  9720. SAVEASPDF
  9721. m.oRef.ExtensionHandler.DoSaveType(2)
  9722. SAVEASRTF
  9723. m.oRef.ExtensionHandler.DoSaveType(4)
  9724. SAVEASXLS
  9725. m.oRef.ExtensionHandler.DoSaveType(5)
  9726. SAVEASHTML
  9727. m.oRef.ExtensionHandler.DoSaveType(3)
  9728. SAVEASMHT
  9729. m.oRef.ExtensionHandler.DoSaveType(8)
  9730. m.oRef.ExtensionHandler.DoSaveType(1)
  9731. ON BAR 17 OF (m.cPopup) ACTIVATE POPUP &lcSaveMenu.
  9732. SAVEASIMAG
  9733. pr_Img.bmp
  9734. m.oRef.ExtensionHandler.DoSaveType(1)
  9735. SAVEASPDF
  9736. pr_Pdf.bmp
  9737. m.oRef.ExtensionHandler.DoSaveType(2)
  9738. SAVEASHTML
  9739. pr_Html.bmp
  9740. m.oRef.ExtensionHandler.DoSaveType(3)
  9741. SAVEASMHT
  9742. pr_MHT.bmp
  9743. m.oRef.ExtensionHandler.DoSaveType(8)
  9744. SAVEASRTF
  9745. pr_Word.bmp
  9746. m.oRef.ExtensionHandler.DoSaveType(4)
  9747. SAVEASXLS
  9748. pr_Excel.bmp
  9749. m.oRef.ExtensionHandler.DoSaveType(5)
  9750. SAVEASTXT
  9751. pr_1page.bmp
  9752. m.oRef.ExtensionHandler.DoSaveType(6)
  9753. SENDTOEMAI
  9754. m.oRef.ExtensionHandler.DoSendEmail()
  9755. PRINTINGPR
  9756. m.oRef.ExtensionHandler.DoCustomPrint()
  9757. MENUPRINT
  9758. m.oRef.ExtensionHandler.ActionPrintEx()
  9759. SETUP
  9760. m.oRef.ExtensionHandler.DoSetup()
  9761. MENUCLOSE
  9762. m.oRef.ExtensionHandler.ActionClose()
  9763. LANGUAGE
  9764. ENGLISH
  9765. ON BAR 7 OF (m.cPopup) ACTIVATE POPUP &lcZoom2
  9766. ON BAR 8 OF (m.cPopup) ACTIVATE POPUP &lcPages2
  9767. whole page
  9768. CBOZOOMWHO
  9769. fit to width
  9770. CBOZOOMPGW
  9771. m.oRef.actionSetZoom( BAR() )
  9772. ONEPGMENU
  9773. TWOPGMENU
  9774. TWOPGMENU
  9775. FOURPGMENU
  9776. FOURPGMENU
  9777. m.oRef.actionSetCanvasCount(1)
  9778. m.oRef.actionSetCanvasCount(2)
  9779. m.oRef.actionSetCanvasCount(4)
  9780. CPOPUP
  9781. INEXTBAR
  9782. _GOFP
  9783. GETLOC
  9784. IMGBTN_TOP
  9785. IMGBTN_PREV
  9786. IMGBTN_NEXT
  9787. IMGBTN_BOTT
  9788. IMGBTN_GOTOPG
  9789. LSHOWPAGECOUNT
  9790. LSHOWMINIATURES
  9791. IMGBTN_MINI
  9792. _LCANSEARCH
  9793. LSHOWSEARCH
  9794. IMGBTN_SEARCH
  9795. _LSHOWSEARCHAGAIN
  9796. IMGBTN_SEARCHBACK
  9797. IMGBTN_SEARCHAGAIN
  9798. LPRINTVISIBLE
  9799. LSAVETOFILE
  9800. IMGBTN_SAVE
  9801. LCSAVEMENU
  9802. LCOMPLETEMODE
  9803. LSHOWFILEFORMATICONS
  9804. LSAVEASIMAGE
  9805. LSAVEASPDF
  9806. LSAVEASRTF
  9807. LSAVEASXLS
  9808. LSAVEASHTML
  9809. LSAVEASMHT
  9810. LSAVEASTXT
  9811. LSENDTOEMAIL
  9812. IMGBTN_EMAIL
  9813. LPRINTERPREF
  9814. LCIMGPRINTPREF
  9815. IMGBTN_PRINTPREF
  9816. LSHOWPRINTBTN
  9817. IMGBTN_PRINT
  9818. LSHOWSETUP
  9819. IMGBTN_SETUP
  9820. LSHOWCLOSE
  9821. IMGBTN_CLOSE
  9822. LCZOOM2
  9823. LCPAGES2
  9824. LCITEM
  9825. ZOOMLEVELS    
  9826. ZOOMLEVEL
  9827. IPAGESALLOWED
  9828. CANVASCOUNT}
  9829. PreviewHelper
  9830. _GOFP
  9831. LCOMPLETEMODE
  9832. _OLANG
  9833. SETLANGUAGE    
  9834. CLANGUAGE
  9835. TNVISIBLE
  9836. PREVIEWFORM
  9837. TOOLBAR
  9838. TOOLBARISVISIBLE
  9839. CREATETOOLBAR
  9840. UPDATETOOLBAR
  9841. SHOWTOOLBAR
  9842. PREVIEWFORM
  9843. TOOLBAR
  9844. TOOLBARISVISIBLE
  9845. CREATETOOLBAR
  9846. UPDATETOOLBAR
  9847. SHOWTOOLBARP
  9848. CustomFrxGotoPageForm
  9849. LOFORM
  9850. IPAGENO
  9851. OPARENTFORM
  9852. PREVIEWFORM
  9853. TOOLBAR
  9854. SHOWTOOLBAR
  9855. PAGENO
  9856. CURRENTPAGE
  9857. SETCURRENTPAGEq
  9858. REPORTLISTENER
  9859. OutputPage
  9860. DialogPrinting
  9861. _GOFP
  9862. NPRINTERPROPTYPE
  9863. _CORIGINALPRINTER
  9864. CPRINTERNAME
  9865. SETPRINTER
  9866. SETPRINTERPROPS
  9867. CLOSESHEETS
  9868. PREVIEWFORM
  9869. OREPORT
  9870. COMMANDCLAUSES
  9871. PROMPT
  9872. PRINTPAGECURRENT
  9873. CURRENTPAGE
  9874. LOLISTENER
  9875. ONPREVIEWCLOSE
  9876. LCOMPLETEMODE
  9877. CLEARCACHE
  9878. RESTOREPARENT<
  9879. NPAGENO
  9880. EDEVICE
  9881. NDEVICETYPE
  9882. _GOFP
  9883. LPRINTEDs
  9884. _GOFP
  9885. LCOMPLETEMODE
  9886. _OPARENTFORM
  9887. LOFORM
  9888. CONTROLBOX
  9889. TITLEBAR
  9890. CLOSABLE
  9891. PAINT
  9892. REPORTRELEASED
  9893. LCALIAS    
  9894. LNSESSION
  9895. LNRECNO
  9896. PREVIEWFORM
  9897. OREPORT
  9898. CSTARTINGALIAS
  9899. NSTARTINGSESSION
  9900. NSTARTINGRECNO
  9901. ERASETEMPFILES
  9902. RELEASE
  9903. LOEXC
  9904. DESTROY
  9905. ONPREVIEWCLOSE
  9906. CLEARCACHE
  9907. RESTOREPARENT
  9908. HIDEFORM
  9909. LCALIAS    
  9910. LNSESSION
  9911. LNRECNO
  9912. PREVIEWFORM
  9913. OREPORT
  9914. CSTARTINGALIAS
  9915. NSTARTINGSESSION
  9916. NSTARTINGRECNO
  9917. ERASETEMPFILES
  9918. RELEASE
  9919. LOEXC
  9920. _GOFP
  9921. DESTROY
  9922. RESTOREPARENT
  9923. LCALIAS    
  9924. LNSESSION
  9925. LNRECNO
  9926. PREVIEWFORM
  9927. OREPORT
  9928. CSTARTINGALIAS
  9929. NSTARTINGSESSION
  9930. NSTARTINGRECNO
  9931. ERASETEMPFILES
  9932. RELEASE
  9933. LOEXC{
  9934. PREVIEWFORM
  9935. VISIBLE
  9936. LOEXC
  9937. HIDEFORM
  9938. _GOFP
  9939. _OPARENTFORM
  9940. LOFORM
  9941. CONTROLBOX
  9942. TITLEBAR
  9943. CLOSABLE
  9944. PAINT
  9945. PREVIEWFORM
  9946. OREPORT
  9947. ONPREVIEWCLOSEl
  9948. REPORTLISTENER
  9949. STRING
  9950. PCHAR
  9951. FoxyPreviewer Report
  9952. PChar
  9953. Printing 
  9954. Error trying to send the output to an alternate printer!C
  9955. Please report to vfpimaging@hotmail.com 
  9956. Error
  9957. LNORIENTATION
  9958. LLLANDSCAPE
  9959. LNPAGELIMIT
  9960. LNFRXINDEX
  9961. _GOFP    
  9962. OLISTENER    
  9963. AFRXPAGES
  9964. LNPAGE
  9965. LNPRINTWIDTH
  9966. LNPRINTHEIGHT
  9967. LNMAXWIDTH
  9968. LNMAXHEIGHT
  9969. LNHORMARGIN
  9970. LNVERTMARGIN
  9971. LNHORRES    
  9972. LNVERTRES
  9973. LNPAPERFORM
  9974. NPRTPAPERSIZE
  9975. GETFORMDIMENSIONS
  9976. CPRINTERNAME
  9977. CLOSESHEETS
  9978. _LISDOTMATRIX
  9979. ISDOTMATRIX
  9980. CPRINTJOBNAME
  9981. PRINTJOBNAME
  9982. LLCHANGEDPRINTER
  9983. _CREPORTENVPRINTERNAME
  9984. _CORIGINALPRINTER
  9985. LCOMPLETEMODE
  9986. NCOPIES
  9987. LREPEATINPAGE
  9988. LREPEATWHENFREE
  9989. LLREPEATINPAGE
  9990. LNCOPIES
  9991. LLCALCULATED
  9992. LNPRINTEDCOPIES
  9993. OFOXYPREVIEWER
  9994. LHALFHEIGHTREPORT    
  9995. LCPRINTER    
  9996. LHPRINTER
  9997. LNPRINTERDC
  9998. LOLISTENER
  9999. GETPRINTERDC1    
  10000. LCDOCINFO    
  10001. LODOCNAME
  10002. LCPRINTJOB
  10003. GETADDR
  10004. XFCSTARTDOC
  10005. THIS    
  10006. SIZEPAGES
  10007. OUTPUTPAGECOUNT
  10008. XFCSTARTPAGE
  10009. OUTPUTPAGE
  10010. XFCENDPAGE    
  10011. XFCENDDOC
  10012. XFCDELETEDC
  10013. PREVIEWFORM
  10014. OREPORT
  10015. ONPREVIEWCLOSE
  10016. LOEXC
  10017. VISIBLE
  10018. LPRINTED
  10019. _LSENDTOPRINTER
  10020. LUSELISTENER
  10021. SETPRINTER
  10022. ACTIONCLOSE
  10023. _LNOWAIT
  10024. DOOUTPUTp
  10025. REPORTLISTENER
  10026. TNHDC
  10027. TNHORRES    
  10028. TNVERTRES
  10029. LLSCALEADJUST
  10030. LOLISTENER
  10031. _GOFP    
  10032. OLISTENER
  10033. LNHDC
  10034. GETPAGEWIDTH
  10035. GETPAGEHEIGHT
  10036. XFCGETDEVICECAPS
  10037. PR_Settings.scxJ
  10038. PR_Settings.scxJ
  10039. _GOFP
  10040. CLOSESHEETS
  10041. PREVIEWFORM
  10042. TOOLBAR
  10043. LLOLDVISIBLE
  10044. VISIBLE
  10045. SHOWTOOLBAR
  10046. PR_SETTINGS
  10047. _OSETTINGSSHEET
  10048. NAME5
  10049. pr_previous.bmp
  10050. pr_next.bmp
  10051. pr_top.bmp
  10052. pr_bottom.bmp
  10053. pr_Locate.bmp
  10054. pr_Print.bmp
  10055. pr_PrintPref.bmp
  10056. pr_gotopage.bmp
  10057. pr_1page.bmp
  10058. pr_2page.bmp
  10059. pr_4page.bmp
  10060. pr_close.bmp
  10061. pr_close2.bmp
  10062. pr_Save.bmp
  10063. pr_Mail.bmp
  10064. pr_Gear.bmp
  10065. pr_Search.bmp
  10066. pr_SearchAgain.bmp
  10067. pr_SearchBack.bmp
  10068. pr_previous_32.bmp
  10069. pr_next_32.bmp
  10070. pr_top_32.bmp
  10071. pr_bottom_32.bmp
  10072. pr_Locate_32.bmp
  10073. pr_Print_32.bmp
  10074. pr_PrintPref_32.bmp
  10075. pr_gotopage_32.bmp
  10076. pr_1page_32.bmp
  10077. pr_2page_32.bmp
  10078. pr_4page_32.bmp
  10079. pr_close_32.bmp
  10080. pr_close2_32.bmp
  10081. pr_Save_32.bmp
  10082. pr_Mail_32.bmp
  10083. pr_Gear_32.bmp
  10084. pr_Search_32.bmp
  10085. pr_SearchAgain_32.bmp
  10086. pr_SearchBack_32.bmp
  10087. _GOFP
  10088. NBUTTONSIZE
  10089. IMGBTN_PREV
  10090. IMGBTN_NEXT
  10091. IMGBTN_TOP
  10092. IMGBTN_BOTT
  10093. IMGBTN_MINI
  10094. CIMGMINIATURES
  10095. IMGBTN_PRINT    
  10096. CIMGPRINT
  10097. IMGBTN_PRINTPREF
  10098. CIMGPRINTPREF
  10099. IMGBTN_GOTOPG
  10100. IMGBTN_1PG
  10101. IMGBTN_2PG
  10102. IMGBTN_4PG
  10103. IMGBTN_CLOSE    
  10104. CIMGCLOSE
  10105. IMGBTN_CLOSE2
  10106. CIMGCLOSE2
  10107. IMGBTN_SAVE
  10108. CIMGSAVE
  10109. IMGBTN_EMAIL    
  10110. CIMGEMAIL
  10111. IMGBTN_SETUP    
  10112. CIMGSETUP
  10113. IMGBTN_SEARCH
  10114. CIMGSEARCH
  10115. IMGBTN_SEARCHAGAIN
  10116. CIMGSEARCHAGAIN
  10117. IMGBTN_SEARCHBACK
  10118. CIMGSEARCHBACK
  10119. CIMGMINIATURESBIG
  10120. CIMGPRINTBIG
  10121. CIMGPRINTPREFBIG
  10122. CIMGCLOSEBIG
  10123. CIMGCLOSE2BIG
  10124. CIMGSAVEBIG
  10125. CIMGEMAILBIG
  10126. CIMGSETUPBIG
  10127. CIMGSEARCHBIG
  10128. CIMGSEARCHAGAINBIG
  10129. CIMGSEARCHBACKBIG
  10130. TOOLBAR
  10131. lStarted
  10132. lStarted-
  10133. SynchPageNo
  10134. SynchPageNo
  10135. Refresh
  10136. RefreshToolbar
  10137. RenderPage
  10138. RenderPage
  10139. RestoreFromResource
  10140. RestoreFromResource_Bind
  10141. QueryUnload
  10142. PreviewUnload2
  10143. Destroy
  10144. PreviewUnload2
  10145. QueryUnload
  10146. PreviewUnload
  10147. REPORTLISTENER
  10148. cOutputAlias
  10149. ISTYLE    
  10150. LOTOOLBAR
  10151. LLTOOLBARVISIBLE
  10152. PREVIEWFORM
  10153. TOOLBAR
  10154. VISIBLE
  10155. LOPREVIEWFORM
  10156. ADDPROPERTY
  10157. CHECKHELPERCLASS
  10158. _GOFP    
  10159. OLISTENER
  10160. OREPORT
  10161. _NBTSIZE
  10162. NBUTTONSIZE
  10163. LABEL1
  10164. _PREVIEWVERSION
  10165. CAPTION
  10166. NPREVIEWBACKCOLOR    
  10167. BACKCOLOR    
  10168. SETIMAGES
  10169. DESKTOP
  10170. LNOLDPARENT    
  10171. GETPARENT
  10172. HWND    
  10173. SETPARENT
  10174. DOCKED
  10175. WIDTH
  10176. MOVABLE
  10177. SIZABLE
  10178. SETWINDOWPOS
  10179. LLNOWAIT    
  10180. LLTOPFORM
  10181. TOPFORM
  10182. _TOPFORM
  10183. ICON    
  10184. CFORMICON
  10185. ALLOWPRINTFROMPREVIEW
  10186. SHOWWINDOW
  10187. LCPARENTTITLE    
  10188. LCCAPTION
  10189. LOFORM
  10190. GETPARENTWINDOW
  10191. FORMS
  10192. CLOSABLE
  10193. _OPARENTFORM
  10194. COMMANDCLAUSES
  10195. NOWAIT
  10196. _LNOWAIT    
  10197. NDOCKTYPE
  10198. INWINDOW
  10199. WINDOWSTATE
  10200. NWINDOWSTATE
  10201. LOLISTENER
  10202. NPAGETOTAL    
  10203. PAGETOTAL    
  10204. _CFRXNAME
  10205. FRXFILENAME
  10206. _CLAUSENRANGEFROM    
  10207. RANGEFROM
  10208. _CLAUSENRANGETO
  10209. RANGETO
  10210. _CLAUSELSUMMARY
  10211. SUMMARY
  10212. _CLAUSECHEADING
  10213. HEADING
  10214. _LCANSEARCH
  10215. LSTARTED
  10216. UPDATETOOLBAR
  10217. ACTIONSHOWTOOLBAR
  10218. NSHOWTOOLBARF
  10219. PREVIEWFORM
  10220. TOOLBAR
  10221. CREATETOOLBAR
  10222. VISIBLEk
  10223. FRXPREVIEWFORM.NEWOBJECT
  10224. Canvas1
  10225. FoxyPreviewer CC
  10226.    VFP 
  10227. Complete mode
  10228. Simplified mode6
  10229. .pageTotal   = 
  10230. .currentPage = 
  10231. _PAGENO      = 
  10232. .canvasCount = 
  10233. .pageHeight  = 
  10234. .pageWidth   = 
  10235. Report Clauses:
  10236. .oReport.commandClauses.C
  10237. Error #C
  10238. Line 
  10239. Internal Error - 
  10240. IERROR
  10241. CMETHOD
  10242. ILINE
  10243. PREVIEWFORM
  10244. LLHASERROR
  10245. LCHEADER
  10246. LCMODE
  10247. LCTEXT
  10248. LCFIELD
  10249. _GOFP
  10250. LCVERSIONTEXT
  10251. GETVFPVERSION
  10252. CVERSION
  10253. LCOMPLETEMODE
  10254. LCPROPERTY
  10255. LUVALUE    
  10256. PAGETOTAL
  10257. CURRENTPAGE
  10258. CANVASCOUNT
  10259. PAGEHEIGHT    
  10260. PAGEWIDTH
  10261. OREPORT
  10262. COMMANDCLAUSES
  10263. LCERRORMSG
  10264. CANCELLED    
  10265. SUSPENDED5
  10266. REPPREVIEW
  10267. MINILABEL
  10268. %FP%C
  10269. %LP%C
  10270. PAGECAPTIO
  10271. ICURRENTPAGE
  10272. CMESSAGE
  10273. LCREPORTNAME
  10274. LCFORMCAPTION
  10275. PREVIEWFORM
  10276. CURRENTPAGE
  10277. STARTOFFSET
  10278. _GOFP
  10279. LCOMPLETEMODE    
  10280. _CFRXNAME
  10281. _ONAMES
  10282. CTITLE
  10283. LCTITLE
  10284. GETLOC
  10285. OREPORT
  10286. COMMANDCLAUSES
  10287. WINDOW
  10288. CANVASCOUNT
  10289. LNLASTPAGE    
  10290. PAGETOTAL
  10291. CAPTION
  10292. TOOLBAR
  10293. AutoSizea
  10294. AutoSize-
  10295. Height
  10296. commandbutton
  10297. combobox
  10298. spinner
  10299. cntsearch1
  10300. REPPREVIEW
  10301. PREVIEWFORM
  10302. TOOLBAR
  10303. LOCKSCREEN
  10304. SETALL
  10305. _GOFP
  10306. _NBTSIZE    
  10307. LOCONTROL
  10308. CONTROLS    
  10309. BASECLASS
  10310. WIDTH
  10311. HEIGHT
  10312. CMDSEARCHVISIBILITY
  10313. LCREPORTNAME    
  10314. _CFRXNAME
  10315. CAPTION
  10316. CTOOLBARTITLE
  10317. GETLOC<
  10318. TOOLBAR
  10319. MENUNEXT
  10320. MENULAST
  10321. MENUTOP
  10322. MENUPREV
  10323. COMMANDBUTTON
  10324. LANGUAGE
  10325. ENGLISH
  10326. cmdGoto1
  10327. cmdGotoEx
  10328. MENUGOTO
  10329. cmdProof1
  10330. cmdProof
  10331. MINIATURES
  10332. cntSearch1
  10333. cntSearch
  10334. FINDBACK
  10335. FINDNEXT
  10336. COMBOBOX
  10337. LANGUAGE
  10338. ENGLISH
  10339. CBOZOOMTTI
  10340. CBOZOOMTTI
  10341. whole page
  10342. CBOZOOMWHO
  10343. fit to width
  10344. CBOZOOMPGW
  10345. ONEPGTTIP
  10346. TWOPGTTIP
  10347. FOURPGTTIP
  10348. OPTIONGROUP
  10349. cmbPrinters1
  10350. cmbPrinters
  10351. AVAILABLEP
  10352. cPrtPrinterName
  10353. COMBOBOX
  10354. cntCopies1
  10355. cntCopies
  10356. cmdSave1
  10357. cmdSave
  10358. SAVEREPORT
  10359. cmbSave1
  10360. cmbSave
  10361. SAVEASIMAG
  10362. pr_Img.bmp
  10363. SAVEASPDF
  10364. pr_Pdf.bmp
  10365. SAVEASRTF
  10366. pr_Word.bmp
  10367. SAVEASXLS
  10368. pr_Excel.bmp
  10369. SAVEASHTML
  10370. pr_HTML.bmp
  10371. SAVEASMHT
  10372. pr_MHT.bmp
  10373. SAVEASTXT
  10374. pr_1page.bmp
  10375. cmdEmail1
  10376. cmdEmail
  10377. SENDTOEMAI
  10378. cmdPrinterProps1
  10379. cmdPrinterProps
  10380. PRINTINGPR
  10381. cmdPrint1
  10382. cmdPrintEx
  10383. PRINTREPOR
  10384. cmdSetup1
  10385. cmdSetup
  10386. SETUP
  10387. cmdExit1
  10388. cmdExit
  10389. CLOSEREPOR
  10390. Destroy
  10391. ReportReleased
  10392. TLVISIBLE
  10393. PREVIEWFORM
  10394. ALLOWPRINTFROMPREVIEW
  10395. TOOLBAR
  10396. LOCKSCREEN
  10397. LNSIZE
  10398. _GOFP
  10399. _NBTSIZE
  10400. CNTNEXT
  10401. WIDTH
  10402. HEIGHT
  10403. CMDFORWARD
  10404. PICTURE
  10405. IMGBTN_NEXT
  10406. TOOLTIPTEXT
  10407. GETLOC    
  10408. CMDBOTTOM
  10409. IMGBTN_BOTT
  10410. CNTPREV
  10411. CMDTOP
  10412. IMGBTN_TOP
  10413. CMDBACK
  10414. IMGBTN_PREV    
  10415. LOCMDGOTO
  10416. CMDGOTOPAGE
  10417. VISIBLE    
  10418. ADDOBJECT
  10419. CMDGOTO1
  10420. IMGBTN_GOTOPG
  10421. LSHOWMINIATURES    
  10422. CMDPROOF1
  10423. _LCANSEARCH
  10424. LSHOWSEARCH
  10425. CNTSEARCH1
  10426. CMDSEARCH1
  10427. CMDSEARCHBACK1
  10428. CMDSEARCHAGAIN1
  10429. LOCOMBO
  10430. CBOZOOM
  10431. LCITEM    
  10432. LISTCOUNT
  10433. LISTITEM
  10434. OPGPAGECOUNT
  10435. LSHOWPAGECOUNT
  10436. IMGBTN_1PG
  10437. IMGBTN_2PG
  10438. IMGBTN_4PG
  10439. LPRINTVISIBLE
  10440. LSHOWPRINTERS
  10441. CMBPRINTERS1
  10442. FONTSIZE
  10443. OREPORT
  10444. CPRTPRINTERNAME
  10445. LCREPORTPRINTER
  10446. _CREPORTENVPRINTERNAME
  10447. LNPRTINDEX
  10448. LCUPPERPRT
  10449. LOCMB
  10450. VALUE
  10451. CPRINTERNAME
  10452. DISPLAYVALUE    
  10453. LISTINDEX
  10454. LSHOWCOPIES
  10455. LSAVETOFILE
  10456. CMDSAVE1
  10457. LNCMBINDEX
  10458. CMBSAVE1
  10459. LSAVEASIMAGE
  10460. ADDITEM
  10461. LSHOWFILEFORMATICONS
  10462. NEWINDEX
  10463. LCOMPLETEMODE
  10464. LSAVEASPDF
  10465. LSAVEASRTF
  10466. LSAVEASXLS
  10467. LSAVEASHTML
  10468. LSAVEASMHT
  10469. LSAVEASTXT
  10470. LSENDTOEMAIL    
  10471. CMDEMAIL1
  10472. LPRINTERPREF
  10473. CMDPRINTERPROPS1
  10474. CMDPRINT
  10475. LSHOWPRINTBTN    
  10476. CMDPRINT1
  10477. LSHOWSETUP    
  10478. CMDSETUP1
  10479. CMDCLOSE
  10480. LSHOWCLOSE
  10481. CMDEXIT1
  10482. NBUTTONSIZE
  10483. CNTCOPIES1
  10484. SPNCOPIES1
  10485. LBLCOPIES1
  10486. ADJUSTCONTROLS
  10487. REFRESH
  10488. LCREPORTNAME
  10489. LCTITLE    
  10490. _CFRXNAME
  10491. _ONAMES
  10492. SYNCHPAGENO-
  10493. ACTIONCLOSE
  10494. _GOFP
  10495. REPORTRELEASED-
  10496. ProofSheet
  10497. GLOBALPREV
  10498. EXCEPTION
  10499. _GOFP
  10500. CLOSESHEETS
  10501. LLSHOWTOOLBAR
  10502. PREVIEWFORM
  10503. TOOLBAR
  10504. VISIBLE
  10505. SHOWTOOLBAR
  10506. _OPROOFSHEET    
  10507. SETREPORT
  10508. OREPORT
  10509. CAPTION
  10510. GETLOC
  10511. NMAXMINIATUREITEM
  10512. NMAXMINIATUREDISPLAY
  10513. _OPARENTFORM
  10514. SETPROOFCAPTION
  10515. LOEXC
  10516. LNPAGE
  10517. CURRENTPAGE
  10518. SETCURRENTPAGE6
  10519. TOOLBAR
  10520. FINDBACK
  10521. FINDNEXT
  10522. TLVISIBLE    
  10523. LOTOOLBAR
  10524. PREVIEWFORM
  10525. TOOLBAR
  10526. CNTSEARCH1
  10527. CMDSEARCHAGAIN1
  10528. VISIBLE
  10529. LNWIDTH
  10530. _GOFP
  10531. _NBTSIZE
  10532. CMDSEARCH1
  10533. WIDTH
  10534. CMDSEARCHBACK1
  10535. LCTEXT
  10536. LNSIZE
  10537. _CTEXTTOFIND
  10538. TOOLTIPTEXT
  10539. GETLOC
  10540. _LSHOWSEARCHAGAIN
  10541. Search feature is currently unavailable for this report.
  10542. FoxyPreviewer error
  10543. PR_Search.scx
  10544. PR_Search.scx
  10545. Search feature is currently unavailable for this report.
  10546. FoxyPreviewer error
  10547. _GOFP
  10548. CLOSESHEETS
  10549. CLEARBOX
  10550. LCTEXT
  10551. LCREPORTALIAS
  10552. LCALIAS
  10553. PREVIEWFORM
  10554. OREPORT
  10555. COUTPUTALIAS
  10556. TOOLBAR
  10557. SHOWTOOLBAR    
  10558. PR_SEARCH
  10559. _CTEXTTOFIND
  10560. VISIBLE
  10561. LLERROR
  10562. CONTENTS
  10563. HANDLEFIND
  10564. CMDSEARCHVISIBILITY
  10565. CLEARBOX
  10566. LCTEXT
  10567. LCALIAS
  10568. LCREPORTALIAS
  10569. PREVIEWFORM
  10570. OREPORT
  10571. COUTPUTALIAS
  10572. _GOFP
  10573. _CTEXTTOFIND
  10574. CONTENTS
  10575. HANDLEFIND
  10576. CLEARBOX
  10577. LCTEXT
  10578. LCALIAS
  10579. LCREPORTALIAS
  10580. PREVIEWFORM
  10581. OREPORT
  10582. COUTPUTALIAS
  10583. _GOFP
  10584. _CTEXTTOFIND
  10585. CONTENTS
  10586. HANDLEFINDc
  10587. NOTFOUND
  10588. FINDTEXT
  10589. TLFOUND
  10590. TLAGAIN
  10591. LHIGHLIGHTTEXT
  10592. CMDSEARCHVISIBILITY
  10593. _GOFP
  10594. GETLOC
  10595. PREVIEWFORM
  10596. CURRENTPAGE
  10597. TEMPSTOPREPAINT
  10598. SETCURRENTPAGE
  10599. SCROLLTOOBJECT
  10600. WIDTH
  10601. HEIGHT
  10602. RENDERPAGES
  10603. lineTop
  10604. lineBott
  10605. lineLeft
  10606. lineRight
  10607. LOFORM
  10608. PREVIEWFORM
  10609. LINETOP
  10610. REMOVEOBJECT
  10611. LINEBOTT
  10612. LINELEFT    
  10613. LINERIGHT
  10614. TNLEFT
  10615. TNTOP
  10616. TNWIDTH
  10617. TNHEIGHT
  10618. LNNEWTOP    
  10619. LNNEWLEFT
  10620. LNVPOS
  10621. LNHPOS
  10622. LNVPTOP
  10623. LNVPLEFT    
  10624. LNVPWIDTH
  10625. LNVPHEIGHT
  10626. PREVIEWFORM
  10627. VIEWPORTTOP
  10628. VIEWPORTLEFT
  10629. VIEWPORTWIDTH
  10630. VIEWPORTHEIGHT
  10631. CANVAS1
  10632. SETVIEWPORT
  10633. lineTop
  10634. lineBott
  10635. lineLeft
  10636. lineRight
  10637. LNPIXELSPERDPI960
  10638. LNHWND
  10639. LNWIDTH
  10640. LNHEIGHT
  10641. PREVIEWFORM
  10642. GETPIXELSPERDPI960
  10643. CANVAS1
  10644. LOFORM    
  10645. ADDOBJECT
  10646. LNCOLOR
  10647. TEMPSTOPREPAINT
  10648. LINETOP
  10649. WIDTH
  10650. BORDERCOLOR
  10651. BORDERWIDTH
  10652. HEIGHT
  10653. VISIBLE
  10654. LINEBOTT
  10655. LINELEFT    
  10656. LINERIGHT
  10657. LHIGHLIGHTTEXTu
  10658. TIPAGE
  10659. TOCANVAS
  10660. CLEARBOX
  10661. LHIGHLIGHTTEXT
  10662. PREVIEWFORM
  10663. OREPORT
  10664. COUTPUTALIAS
  10665. HIGHLIGHTOBJECT
  10666. WIDTH
  10667. HEIGHT
  10668. TNINDEX
  10669. DOSAVETYPE
  10670. _GOFP
  10671. _LNOWAIT    
  10672. CDESTFILE
  10673. LSAVED
  10674. LCOMPLETEMODE
  10675. DOOUTPUT
  10676. SAVEASIMAG
  10677. Png;Bmp;Jpg;Gif;Tif;Emf
  10678. SAVEASPDF
  10679. SAVEASHTML
  10680. Htm;Html
  10681. SAVEASHTML
  10682. Mht;Mhtml
  10683. TEMP5
  10684. _IMAGES
  10685. Safetyv
  10686. SET SAFETY &lcSetSafe.
  10687. SAVEASRTF
  10688. Rtf;Doc
  10689. Xml;Xls
  10690. Xls;Xml
  10691. SAVEASXLS
  10692. SAVEASTXT
  10693. Txt;Csv;Xl5
  10694. TNTYPE
  10695. _GOFP
  10696. LSAVED    
  10697. OLISTENER
  10698. PREVIEWFORM
  10699. OREPORT
  10700. LCFILE
  10701. LCREPORTNAME    
  10702. LCDEFAULT
  10703. PRINTJOBNAME
  10704. CSAVEDEFNAME    
  10705. CDESTFILE
  10706. COUTPUTPATH
  10707. PR_XPUTFILE
  10708. GETLOC
  10709. LOLISTENER
  10710. REPORT2PIC
  10711. LOPENVIEWER
  10712. _LSENDINGEMAIL
  10713. OPENFILE
  10714. DOMAKEPDFOFFLINE
  10715. LCOMPLETEMODE
  10716. DOMAKEHTMLOFFLINE
  10717. LCTEMPHTMLFILE    
  10718. LCIMGPATH
  10719. TOMHTML    
  10720. LCSETSAFE
  10721. DOMAKERTFOFFLINE    
  10722. LCFILEEXT
  10723. CEXCELDEFAULTEXTENSION
  10724. DOMAKEXLSOFFLINE
  10725. ACTIONCLOSE
  10726. PdfListener
  10727. PR_PDFx.vcx
  10728. PdfListener
  10729. PR_PDFx.vcx
  10730. PDFasImageListener
  10731. PR_Pdfx.vcx
  10732. PDFasImageListener
  10733. PR_PDFx.vcx
  10734. ERR_CREATI
  10735. TCFILE
  10736. _GOFP    
  10737. CDESTFILE
  10738. LNPGMODE
  10739. NPDFPAGEMODE
  10740. LNTYPE
  10741. LPDFASIMAGE
  10742. LOLISTENER    
  10743. CCODEPAGE
  10744. CTARGETFILENAME
  10745. LEMBEDFONT
  10746. LPDFEMBEDFONTS    
  10747. LCANPRINT
  10748. LPDFCANPRINT
  10749. LCANEDIT
  10750. LPDFCANEDIT
  10751. LCANCOPY
  10752. LPDFCANCOPY
  10753. LCANADDNOTES
  10754. LPDFCANADDNOTES
  10755. LENCRYPTDOCUMENT
  10756. LPDFENCRYPTDOCUMENT
  10757. CMASTERPASSWORD
  10758. CPDFMASTERPASSWORD
  10759. CUSERPASSWORD
  10760. CPDFUSERPASSWORD
  10761. LSHOWERRORS
  10762. LPDFSHOWERRORS
  10763. CSYMBOLFONTSLIST
  10764. CPDFSYMBOLFONTSLIST
  10765. CPDFAUTHOR    
  10766. CPDFTITLE
  10767. CPDFSUBJECT
  10768. CPDFKEYWORDS
  10769. CPDFCREATOR
  10770. LREPLACEFONTS
  10771. LPDFREPLACEFONTS    
  10772. NPAGEMODE
  10773. CDEFAULTFONT
  10774. CPDFDEFAULTFONT    
  10775. QUIETMODE
  10776. LQUIETMODE
  10777. LCOUTPUTDBF
  10778. LNWIDTH
  10779. LNHEIGHT
  10780. LLHASFJ    
  10781. OLISTENER
  10782. GETFULLFRXDATA
  10783. LHASFJ
  10784. GETPAGEWIDTH
  10785. GETPAGEHEIGHT
  10786. OUTPUTFROMDATA
  10787. DOFOXYTHERM
  10788. LSAVED
  10789. SETERROR
  10790. GETLOC
  10791. LOPENVIEWER
  10792. _LSENDINGEMAIL
  10793. OPENFILE
  10794. REPORTLISTENER
  10795. RTFreportlistener
  10796. PR_RTFListener
  10797. ERR_CREATI
  10798. TCFILE
  10799. _GOFP    
  10800. CDESTFILE
  10801. LORTFLISTENER
  10802. TARGETFILENAME    
  10803. QUIETMODE
  10804. LQUIETMODE
  10805. LCOUTPUTDBF
  10806. LNWIDTH
  10807. LNHEIGHT    
  10808. OLISTENER
  10809. GETFULLFRXDATA
  10810. GETPAGEWIDTH
  10811. GETPAGEHEIGHT
  10812. OUTPUTFROMDATA
  10813. DOFOXYTHERM
  10814. LSAVED
  10815. SETERROR
  10816. GETLOC
  10817. LOPENVIEWER
  10818. _LSENDINGEMAIL
  10819. OPENFILE
  10820. ExcelListener
  10821. ExcelListener
  10822. pr_ExcelListener.vcx
  10823. Sheet
  10824. PREPDATA
  10825. PLEASEWAIT
  10826. ERR_CREATI
  10827. TCFILE
  10828. _GOFP    
  10829. CDESTFILE
  10830. LOXLSLISTENER
  10831. CWORKBOOKFILE
  10832. CWORKSHEETNAME    
  10833. CCODEPAGE
  10834. LCONVERTTOXLS
  10835. LEXCELCONVERTTOXLS
  10836. LREPEATHEADERS
  10837. LEXCELREPEATHEADERS
  10838. LREPEATFOOTERS
  10839. LEXCELREPEATFOOTERS
  10840. LHIDEPAGENO
  10841. LEXCELHIDEPAGENO
  10842. LALIGNLEFT
  10843. LEXCELALIGNLEFT
  10844. NEXCELSAVEFORMAT
  10845. LQUIETMODE
  10846. DOFOXYTHERM
  10847. GETLOC
  10848. _RUNSTATUSTEXT
  10849. LCOUTPUTDBF
  10850. LNWIDTH
  10851. LNHEIGHT    
  10852. OLISTENER
  10853. GETFULLFRXDATA
  10854. OUTPUTFROMDATA
  10855. LSAVED
  10856. SETERROR
  10857. LOPENVIEWER
  10858. _LSENDINGEMAIL
  10859. OPENFILE
  10860. HTMLListener
  10861. PR_HTMLListener
  10862. PR_ReportListener.vcx
  10863. ERR_CREATI
  10864. TCFILE
  10865. _GOFP    
  10866. CDESTFILE
  10867. LOLISTENER
  10868. TARGETFILENAME    
  10869. QUIETMODE
  10870. LQUIETMODE
  10871. FXFEEDBACKCLASS
  10872. _CTHERMCLASS
  10873. LCOUTPUTDBF
  10874. LNWIDTH
  10875. LNHEIGHT    
  10876. OLISTENER
  10877. GETFULLFRXDATA
  10878. GETPAGEWIDTH
  10879. GETPAGEHEIGHT
  10880. OUTPUTFROMDATA
  10881. LSAVED
  10882. SETERROR
  10883. GETLOC
  10884. LOPENVIEWER
  10885. _LSENDINGEMAIL
  10886. OPENFILE$
  10887. REPORTLISTENER
  10888. pr_HTMLListener2
  10889. PR_HTMLListener2
  10890. ERR_CREATI
  10891. TCFILE
  10892. TLTEMP
  10893. _GOFP    
  10894. CDESTFILE
  10895. LOHTMLLISTENER
  10896. CTARGETFILENAME    
  10897. QUIETMODE
  10898. LQUIETMODE
  10899. LCOUTPUTDBF
  10900. LNWIDTH
  10901. LNHEIGHT    
  10902. OLISTENER
  10903. GETFULLFRXDATA
  10904. GETPAGEWIDTH
  10905. GETPAGEHEIGHT
  10906. OUTPUTFROMDATA
  10907. DOFOXYTHERM
  10908. LSAVED
  10909. SETERROR
  10910. GETLOC
  10911. LOPENVIEWER
  10912. _LSENDINGEMAIL
  10913. OPENFILE
  10914. Pdf;Rtf;Xls;Xml;Png;Tiff;Bmp;Gif;Emf;Jpg;Htm
  10915. Pdf;Rtf;Xls;Xml;Png;Tiff;Bmp;Gif;Emf;Jpg;Htm
  10916. TEMP5
  10917. SAVEAS
  10918. ERR_CREATI
  10919. _GOFP
  10920. CLOSESHEETS
  10921. LCFILE
  10922. LCFOLDER
  10923. LCEXTENSIONS
  10924. LCOMPLETEMODE
  10925. LEMAILAUTO
  10926. CSAVEDEFNAME    
  10927. OLISTENER
  10928. PRINTJOBNAME
  10929. CEMAILTYPE    
  10930. _CFRXNAME
  10931. PR_XPUTFILE
  10932. GETLOC
  10933. LSAVED    
  10934. CDESTFILE
  10935. _LSENDINGEMAIL
  10936. LCFILEFORMAT
  10937. LOLISTENER
  10938. PREVIEWFORM
  10939. OREPORT
  10940. REPORT2PIC
  10941. SETERROR
  10942. SENDREPORTTOEMAIL
  10943. DOMAKEPDFOFFLINE
  10944. DOMAKERTFOFFLINE
  10945. DOMAKEXLSOFFLINE
  10946. ACTIONCLOSE
  10947. _LNOWAIT
  10948. DOOUTPUT
  10949. NKEYCODE
  10950. NSHIFTALTCTRL
  10951. COPIES
  10952. LCCOPIESCAPTION
  10953. _GOFP
  10954. GETLOC
  10955. LBLCOPIES1
  10956. CAPTION
  10957. AUTOSIZE
  10958. _NBTSIZE
  10959. HEIGHT
  10960. TOOLTIPTEXT
  10961. SPNCOPIES1
  10962. LNTXTWIDTH
  10963. FONTNAME
  10964. FONTSIZE
  10965. WIDTHN
  10966. COMMANDBUTTON
  10967. TLENABLED    
  10968. LOCONTROL
  10969. CONTROLS
  10970. ENABLED
  10971. VALUE
  10972. _GOFP
  10973. NCOPIES
  10974. _GOFP
  10975. NCOPIES
  10976. VALUE
  10977. Keycompv
  10978. {ENTER}
  10979. CHINESE
  10980. TCHINESE
  10981. JAPANESE
  10982. KOREAN
  10983. {ALT+DNARROW}
  10984. PARENT
  10985. CMBSAVE1
  10986. VALUE
  10987. SETFOCUS
  10988. _GOFP
  10989. LDOUBLEBYTELANGUAGE    
  10990. CLANGUAGE
  10991. PICTURE
  10992. PARENT
  10993. PREVIEWFORM
  10994. EXTENSIONHANDLER
  10995. IMGBTN_SAVE#
  10996. VALUE
  10997. NINDEX}
  10998. VALUE
  10999. LNINDEX
  11000. LIST    
  11001. LISTINDEX
  11002. NINDEX
  11003. PARENT
  11004. PREVIEWFORM
  11005. EXTENSIONHANDLER
  11006. DOSAVE
  11007. PARENT
  11008. PREVIEWFORM
  11009. EXTENSIONHANDLER
  11010. DOCUSTOMPRINT
  11011. PICTURE
  11012. PARENT
  11013. PREVIEWFORM
  11014. EXTENSIONHANDLER
  11015. IMGBTN_PRINTPREF
  11016. PARENT
  11017. PREVIEWFORM
  11018. EXTENSIONHANDLER
  11019. DOSETUP
  11020. PICTURE
  11021. PARENT
  11022. PREVIEWFORM
  11023. EXTENSIONHANDLER
  11024. IMGBTN_SETUP
  11025. PARENT
  11026. PREVIEWFORM
  11027. EXTENSIONHANDLER
  11028. DOSENDEMAIL
  11029. PICTURE
  11030. PARENT
  11031. PREVIEWFORM
  11032. EXTENSIONHANDLER
  11033. IMGBTN_EMAILa
  11034. PARENT
  11035. PREVIEWFORM
  11036. VISIBLE
  11037. _GOFP
  11038. LPRINTED
  11039. CLOSESHEETS
  11040. EXTENSIONHANDLER
  11041. ACTIONCLOSE2
  11042. NBUTTON
  11043. NSHIFT
  11044. NXCOORD
  11045. NYCOORD
  11046. PICTURE
  11047. PARENT
  11048. PREVIEWFORM
  11049. EXTENSIONHANDLER
  11050. IMGBTN_CLOSE22
  11051. NBUTTON
  11052. NSHIFT
  11053. NXCOORD
  11054. NYCOORD
  11055. PICTURE
  11056. PARENT
  11057. PREVIEWFORM
  11058. EXTENSIONHANDLER
  11059. IMGBTN_CLOSE
  11060. PICTURE
  11061. PARENT
  11062. PREVIEWFORM
  11063. EXTENSIONHANDLER
  11064. IMGBTN_CLOSE
  11065. TOOLTIPTEXT
  11066. PR_PRINTREPOR
  11067. PARENT
  11068. PREVIEWFORM
  11069. EXTENSIONHANDLER
  11070. ACTIONPRINTEX
  11071. PICTURE
  11072. PARENT
  11073. PREVIEWFORM
  11074. EXTENSIONHANDLER
  11075. IMGBTN_PRINT
  11076. PARENT
  11077. PREVIEWFORM
  11078. EXTENSIONHANDLER
  11079. ACTIONGOTOPAGE
  11080. COMMANDBUTTON
  11081. TLENABLED    
  11082. LOCONTROL
  11083. CONTROLS
  11084. ENABLED
  11085. PARENT
  11086. PREVIEWFORM
  11087. EXTENSIONHANDLER
  11088. DOSEARCH"
  11089. PICTURE
  11090. PARENT
  11091. PREVIEWFORM
  11092. EXTENSIONHANDLER
  11093. IMGBTN_SEARCH
  11094. PARENT
  11095. PREVIEWFORM
  11096. EXTENSIONHANDLER
  11097. DOSEARCHAGAIN"
  11098. PICTURE
  11099. PARENT
  11100. PREVIEWFORM
  11101. EXTENSIONHANDLER
  11102. IMGBTN_SEARCHAGAIN
  11103. PARENT
  11104. PREVIEWFORM
  11105. EXTENSIONHANDLER
  11106. DOSEARCHBACK"
  11107. PICTURE
  11108. PARENT
  11109. PREVIEWFORM
  11110. EXTENSIONHANDLER
  11111. IMGBTN_SEARCHBACK
  11112. Printer
  11113. COMBOBOX
  11114. LCDEFPRINTER
  11115. LCCURRPRINTER
  11116. LNPRINTERS
  11117. LAPRINTERS
  11118. ADDITEM
  11119. NEWINDEX    
  11120. LISTINDEX
  11121. _CORIGINALPRINTER
  11122. LCITEM    
  11123. LISTCOUNT
  11124. LCVALUE
  11125. LCORIGPRINTER
  11126. VALUE
  11127. _GOFP
  11128. _CORIGINALPRINTER
  11129. CPRINTERNAME
  11130. PARENT
  11131. PREVIEWFORM
  11132. EXTENSIONHANDLER
  11133. DOPROOF
  11134. PICTURE
  11135. PARENT
  11136. PREVIEWFORM
  11137. EXTENSIONHANDLER
  11138. IMGBTN_MINI
  11139. REPORTTITL
  11140. GOTOPG_CAP
  11141. NSTYLE
  11142. PAGENO
  11143. OPARENTFORM
  11144. CURRENTPAGE    
  11145. PAGETOTAL
  11146. CAPTION
  11147. _GOFP
  11148. GETLOC
  11149. LBLCAPTION
  11150. SHOWWINDOW
  11151. AUTOCENTER
  11152. VIEWPORTLEFT
  11153. WIDTH
  11154. VIEWPORTTOP
  11155. HEIGHT    
  11156. SPNPAGENO
  11157. SPINNERLOWVALUE
  11158. SPINNERHIGHVALUE
  11159. KEYBOARDLOWVALUE
  11160. KEYBOARDHIGHVALUE
  11161. VALUE_
  11162. GOTOPG_OK
  11163. CANCEL
  11164. CMDOK
  11165. CAPTION
  11166. _GOFP
  11167. GETLOC    
  11168. CMDCANCELe
  11169. VALUE
  11170. SPINNERLOWVALUE
  11171. SPINNERHIGHVALUE/
  11172. PARENT
  11173. PAGENO    
  11174. SPNPAGENO
  11175. VALUE
  11176. HIDE 
  11177. PARENT
  11178. THISFORM
  11179. RELEASEF
  11180. _GOFP    
  11181. CFORMICON
  11182. ICON&
  11183. NBUTTON
  11184. NSHIFT
  11185. NXCOORD
  11186. NYCOORD
  11187. MOUSEPOINTER<
  11188. NBUTTON
  11189. NSHIFT
  11190. NXCOORD
  11191. NYCOORD
  11192. MOUSEPOINTER
  11193. PARENT
  11194. NCURRSHAPE
  11195. PAGENO(
  11196. THISFORM
  11197. CURRENTPAGE
  11198. PAGENO
  11199. FIRST
  11200. CTYPE
  11201. PARENT
  11202. NPAGESET
  11203. NPAGES
  11204. NMAXMINIATUREITEM
  11205. REFRESHPAGEBTN    
  11206. FIRST
  11207. CTYPE
  11208. ENABLED
  11209. PARENT
  11210. NPAGESET
  11211. NPAGES
  11212. NMAXMINIATUREITEM
  11213. PageSetFirst
  11214. PageSetBtn
  11215. pr_top.bmp
  11216. MINIFIRSTT
  11217. FIRST
  11218. PageSetPrev
  11219. PageSetBtn
  11220. pr_previous.bmp
  11221. MINIPREVTI
  11222. PageSetNext
  11223. PageSetBtn
  11224. pr_next.bmp
  11225. MININEXTTI
  11226. PageSetLast
  11227. PageSetBtn
  11228. pr_bottom.bmp
  11229. MINILASTTI
  11230. PageSetCaption
  11231. Label
  11232. Arial
  11233. ESCAPE
  11234. ESCAPE
  11235. _VFP.ACTIVEFORM.RELEASE()
  11236. THIS    
  11237. ADDOBJECT
  11238. NOTHERTHENPROOFOBJ
  11239. PAGESETFIRST
  11240. CAPTION
  11241. PICTURE
  11242. TOOLTIPTEXT
  11243. _GOFP
  11244. GETLOC
  11245. CTYPE
  11246. VISIBLE
  11247. PAGESETPREV
  11248. WIDTH
  11249. PAGESETNEXT
  11250. PAGESETLAST
  11251. PAGESETCAPTION
  11252. AUTOSIZE
  11253. FONTNAME
  11254. FONTSIZE
  11255. FONTBOLD
  11256. HEIGHT
  11257. OLDESCFUNCTION
  11258. ESCAPE#
  11259. PAGESETNEXT
  11260. REFRESH
  11261. PAGESETPREV1
  11262. OREPORT
  11263. REPORTLISTENER
  11264. NPAGES
  11265. OUTPUTPAGECOUNT}
  11266. WINDOWSTATE    
  11267. LINACTIVE    
  11268. LSHOWDONE
  11269. PAINT
  11270. THIS    
  11271. LSHOWDONE
  11272. VNEWVALUE
  11273. NPAGESET
  11274. NPAGES
  11275. NMAXMINIATUREITEM
  11276. NOTHERTHENPROOFOBJ
  11277. OBJECTS
  11278. COUNT
  11279. VISIBLE
  11280. SETPROOFCAPTION
  11281. MINILABEL
  11282. %FP%C
  11283. %LP%C
  11284. CMESSAGE
  11285. NFIRSTPAGE    
  11286. NLASTPAGE
  11287. NPAGESET
  11288. NMAXMINIATUREITEM
  11289. NPAGES
  11290. _GOFP
  11291. GETLOC
  11292. PAGESETCAPTION
  11293. CAPTION)
  11294. ONEWVALUE
  11295. REPORTLISTENER
  11296. DORESIZEPROOFSHEET)
  11297. NNEWITEM
  11298. NMAXMINIATUREITEM
  11299. DORESIZEPROOFSHEET
  11300. REPORTLISTENER
  11301. NPROOFWIDTH
  11302. GETPAGEWIDTH
  11303. NPROOFHEIGHT
  11304. GETPAGEHEIGHT
  11305. NMAXSCREENWTOCONSIDERE
  11306. WIDTH
  11307. NMAXSCREENHTOCONSIDERE
  11308. HEIGHT
  11309. NNBCOL
  11310. NPAGES
  11311. NNBROW
  11312. NMAXMINIATUREITEM
  11313. NBASEHEIGHT
  11314. _GOFP
  11315. _NBTSIZE
  11316. AUTOCENTER
  11317. This.Objects[m.i - ((This.nPageSet - 1) * This.nMaxMiniatureItem) + This.nOtherThenProofObj]b
  11318. PAGECAPTIO
  11319. REPORTLISTENER    
  11320. LSHOWDONE
  11321. NPAGESET
  11322. NMAXMINIATUREITEM
  11323. NPAGES
  11324. OBJECTS
  11325. NOTHERTHENPROOFOBJ
  11326. TOOLTIPTEXT
  11327. _GOFP
  11328. GETLOC
  11329. OUTPUTPAGE
  11330. ProofShape
  11331. NSTYLE
  11332. NPAGES
  11333. NMAXMINIATUREITEM
  11334. LSTARTED
  11335. PAGESETFIRST
  11336. VISIBLE
  11337. PAGESETPREV
  11338. PAGESETNEXT
  11339. PAGESETLAST
  11340. PAGESETCAPTION
  11341. IROWOFFSET
  11342. _GOFP
  11343. _NBTSIZE
  11344. ICOLOFFSET
  11345. NPROOFWIDTH
  11346. REPORTLISTENER
  11347. GETPAGEWIDTH
  11348. NPROOFHEIGHT
  11349. GETPAGEHEIGHT    
  11350. ICOLCOUNT
  11351. THISFORM
  11352. WIDTH
  11353. NCURCOL    
  11354. LSHOWDONE
  11355. NPAGESET    
  11356. NOBJECTID
  11357. NOTHERTHENPROOFOBJ    
  11358. ADDOBJECT
  11359. OBJECTS
  11360. HEIGHT
  11361. PAGENOL
  11362. ON KEY LABEL ESCAPE &EscFUNCTION
  11363. CESCFUNCTION
  11364. REPORTLISTENER
  11365. ESCFUNCTION
  11366. OLDESCFUNCTION
  11367. PChar
  11368. PCharC
  11369. PChar
  11370. PChar
  11371. PChar
  11372. PChar
  11373. PChar
  11374. PCharCC
  11375. TCATTACHMENT
  11376. TCRECIPIENT    
  11377. TCSUBJECT
  11378. TCTEXT
  11379. LCATTACHMENT
  11380. LCRECIPIENT    
  11381. LCSUBJECT
  11382. LCTEXT
  11383. DECLMAPI
  11384. HSESSION
  11385. GETNEWSESSION
  11386. LORCPEMAIL
  11387. LOSNDBUF
  11388. LCRCPBUF    
  11389. LOSUBJECT
  11390. LONOTETEXT
  11391. LORCPBUF
  11392. LCMAPIMESSAGE
  11393. LNRESULT
  11394. LOATTACH    
  11395. LOATTPATH    
  11396. LOATTNAME
  11397. LCATTSTRUCT    
  11398. NUM2DWORD
  11399. GETADDR
  11400. MAPISENDMAIL    
  11401. LLSUCCESS
  11402. PR_MAPISHOWMESSAGE
  11403. MAPILOGOFF
  11404. LNRESULT    
  11405. LNSESSION
  11406. LCSTOREDPATH    
  11407. MAPILOGON
  11408. PR_MAPISHOWMESSAGE
  11409. _GOFP
  11410. LEMAILED
  11411. LNVALUEC
  11412. LCSTRING
  11413. SETVALUE
  11414. RELEASESTRING
  11415. RtlMoveMemory
  11416. kernel32Q
  11417. Heap2Str
  11418. LNSIZE
  11419. LCBUFFER
  11420. GETALLOCSIZE
  11421. RTLMOVEMEMORY
  11422. KERNEL32
  11423. HEAP2STRG
  11424. GlobalSize
  11425. kernel32
  11426. GLOBALSIZE
  11427. KERNEL32
  11428. GlobalAlloc
  11429. kernel32
  11430. RtlMoveMemory
  11431. kernel32Q
  11432. Str2Heap
  11433. LCSTRING
  11434. RELEASESTRING
  11435. GLOBALALLOC
  11436. KERNEL32
  11437. RTLMOVEMEMORY
  11438. STR2HEAP
  11439. LNSIZE
  11440. HMEMZ
  11441. GlobalFree
  11442. kernel32
  11443. GLOBALFREE
  11444. KERNEL32y
  11445. MAPILogon
  11446. mapi32
  11447. MAPILogoff
  11448. mapi32
  11449. MAPISendMail
  11450. mapi32
  11451. MAPILOGON
  11452. MAPI32
  11453. MAPILOGOFF
  11454. MAPISENDMAIL%
  11455. ENGLISH
  11456. FRENCH
  11457. PORTUGUESE
  11458. ALBANIAN
  11459. CATALAN
  11460. DANISH
  11461. DUTCH
  11462. FAEROESE
  11463. FINNISH
  11464. GALICIAN
  11465. GERMAN
  11466. ICELANDIC
  11467. ITALIAN
  11468. NORWEGIAN
  11469. SPANISH
  11470. SWEDISH
  11471. windows-CC
  11472. AERRORS    
  11473. LCCHARSET
  11474. _GOFP    
  11475. CLANGUAGE    
  11476. CCODEPAGE
  11477. CCHARSET
  11478. CDO.Configuration
  11479. CDO.Message
  11480. ERROR : From is Empty.
  11481. ERROR : Subject is Empty.
  11482. ERROR : To,CC and BCC all are Empty.
  11483. ATACHNOTFO
  11484. urn:schemas:mailheader:disposition-notification-to
  11485. urn:schemas:mailheader:return-receipt-to
  11486. Priority
  11487. urn:schemas:mailheader:X-Priority
  11488. urn:schemas:httpmail:importance
  11489. CLEARERRORS
  11490. CONFIGURATION
  11491. LNIND
  11492. LALIST
  11493. LOHEADER
  11494. LADUMMY
  11495. SETCONFIGURATION
  11496. GETERRORCOUNT
  11497. CFROM
  11498. ADDERROR
  11499. CSUBJECT
  11500. CBCC    
  11501. SETHEADER
  11502. REPLYTO
  11503. CREPLYTO
  11504. SUBJECT
  11505. CHTMLBODYURL
  11506. CREATEMHTMLBODY    
  11507. CHTMLBODY
  11508. HTMLBODY    
  11509. CTEXTBODY
  11510. TEXTBODY
  11511. HTMLBODYPART
  11512. CHARSET
  11513. CCHARSET
  11514. TEXTBODYPART
  11515. CATTACHMENT
  11516. LCATTACHMENT
  11517. OFOXYPREVIEWER
  11518. _ATTACHNOTFOUNDTEXT
  11519. _GOFP
  11520. GETLOC
  11521. ADDATTACHMENT
  11522. LREADRECEIPT
  11523. FIELDS
  11524. UPDATE    
  11525. LPRIORITY
  11526. VALUE
  11527. BODYPART    
  11528. SHOWTHERM
  11529. CLEARTHERMC
  11530. NERRORCOUNT
  11531. AERRORS
  11532. NERRORCOUNTG
  11533. TNERRORNO
  11534. GETERRORCOUNT
  11535. AERRORS%
  11536. SMTPNOTSPE
  11537. BADAUTHPRO
  11538. INFOREQUIR
  11539. http://schemas.microsoft.com/cdo/configuration/sendusing
  11540. http://schemas.microsoft.com/cdo/configuration/smtpserver
  11541. http://schemas.microsoft.com/cdo/configuration/smtpserverport
  11542. http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout
  11543. http://schemas.microsoft.com/cdo/configuration/smtpauthenticate
  11544. http://schemas.microsoft.com/cdo/configuration/sendusername
  11545. http://schemas.microsoft.com/cdo/configuration/sendpassword
  11546. http://schemas.microsoft.com/cdo/configuration/urlgetlatestversion
  11547. http://schemas.microsoft.com/cdo/configuration/smtpusessl
  11548. CSERVER
  11549. ADDERROR
  11550. _GOFP
  11551. GETLOC
  11552. NAUTHENTICATE    
  11553. CUSERNAME    
  11554. CPASSWORD
  11555. GETERRORCOUNT
  11556. FIELDS
  11557. NSERVERPORT
  11558. NCONNECTIONTIMEOUT
  11559. LURLGETLATESTVERSION
  11560. LUSESSL
  11561. UPDATE[
  11562. TCERRORMSG
  11563. NERRORCOUNT
  11564. AERRORS
  11565. TCPREFIX
  11566. TNERROR
  11567. TCMETHOD
  11568. TNLINE
  11569. LCERRORMSG
  11570. LALIST
  11571. ADDERROR
  11572. NERRORCOUNT@
  11573. TNERROR
  11574. TCMETHOD
  11575. TNLINE
  11576. ADDONEERROR
  11577. NERRORCOUNT
  11578. urn:schemas:mailheader:x-mailer
  11579. LOHEADER
  11580. CXMAILER
  11581. FIELDS
  11582. UPDATE/
  11583. OTHERMFORM
  11584. ITLFForm
  11585. Therm
  11586. ctl32_progressbar
  11587. pr_ctl32_progressbar
  11588. MSGSENDING
  11589. OFOXYPREVIEWER
  11590. LQUIETMODE
  11591. _GOFP
  11592. LOTHERMFORM
  11593. LNTHERMMARGIN
  11594. LITHERMHEIGHT
  11595. LITHERMWIDTH
  11596. LITHERMTOP
  11597. LITHERMLEFT    
  11598. SCALEMODE
  11599. HEIGHT
  11600. HALFHEIGHTCAPTION
  11601. WIDTH
  11602. AUTOCENTER
  11603. BORDERSTYLE
  11604. CONTROLBOX
  11605. CLOSABLE    
  11606. MAXBUTTON    
  11607. MINBUTTON
  11608. MOVABLE
  11609. ALWAYSONTOP
  11610. ALLOWOUTPUT    
  11611. NEWOBJECT
  11612. CAPTION
  11613. _SENDINGTEXT
  11614. GETLOC
  11615. VISIBLE
  11616. THERM
  11617. MARQUEE
  11618. MARQUEEANIMATIONSPEED
  11619. MARQUEESPEED
  11620. OTHERMFORM
  11621. LCTYPE
  11622. THIS    
  11623. CDESTFILE
  11624. DESTROY
  11625. Report Listener could not be accessed
  11626. bitmap
  11627. TOLISTENER
  11628. TCDESTFILE
  11629. TCFILEFORMAT
  11630. LNPAGECOUNT
  11631. LNFILETYPE
  11632. LNDEVICETYPE
  11633. _GOFP
  11634. NPAGETOTAL    
  11635. PAGETOTAL
  11636. LNPAGENO
  11637. OUTPUTPAGE
  11638. LCPATHFILE
  11639. LCDESTFILE
  11640. LCINDEX    
  11641. LLSUCCESS1
  11642. PR_SendMail2.scx
  11643. PR_SendMail.scx
  11644. PR_SendMail2.scx
  11645. DESTNOTDEF
  11646. BADCONFIG
  11647. Datasessionv
  11648. SMTPNOTSPE
  11649. BADCONFIG
  11650. FROMEMPTY
  11651. BADCONFIG
  11652. SUBJEMPTY
  11653. BADCONFIG
  11654. CDO2000
  11655. Cdo2000
  11656. <HTML><BR></HTML>
  11657. <HTML>
  11658. ERRSENDMAI
  11659. MSGNOTSENT
  11660. ERRSENDMAI
  11661. MSGSUCCESS
  11662. SENDEMAIL
  11663. TCFILE
  11664. TLDONOTEDITMESSAGE
  11665. OFOXYPREVIEWER
  11666. LOFP1    
  11667. CCODEPAGE
  11668. CEMAILTO
  11669. CSMTPSERVER
  11670. LEMAILAUTO
  11671. CEMAILTYPE    
  11672. CEMAILPRG    
  11673. NSMTPPORT
  11674. LSMTPUSESSL
  11675. CSMTPUSERNAME
  11676. CSMTPPASSWORD
  11677. CEMAILFROM
  11678. CEMAILCC    
  11679. CEMAILBCC
  11680. CEMAILSUBJECT
  11681. CEMAILREPLYTO
  11682. CEMAILBODY
  11683. LREADRECEIPT    
  11684. LPRIORITY
  11685. _GOFP
  11686. LEMAILED
  11687. LLCANCELLED
  11688. CLOSESHEETS    
  11689. LLVISIBLE    
  11690. LOTOOLBAR
  11691. LOFORM
  11692. _OEXHANDLER
  11693. PREVIEWFORM
  11694. TOOLBAR
  11695. VISIBLE
  11696. LCEMAILFORM
  11697. NEMAILMODE
  11698. SHOWTOOLBAR
  11699. _OEMAILSHEET
  11700. SETERROR
  11701. GETLOC
  11702. _LSENDINGFAX
  11703. LNFAXSEL
  11704. LNFAXDATASESSION
  11705. CFAXPRG
  11706. LOMAIL
  11707. CSERVER
  11708. NSERVERPORT
  11709. LUSESSL
  11710. NAUTHENTICATE    
  11711. CUSERNAME
  11712. LAUTOSENDMAIL
  11713. LCOMPLETEMODE    
  11714. CPASSWORD    
  11715. DODECRYPT
  11716. CFROM
  11717. CSUBJECT
  11718. CREPLYTO    
  11719. CHTMLBODY    
  11720. CTEXTBODY
  11721. _CATTACHMENT
  11722. CATTACHMENT
  11723. CATTACHMENTS
  11724. SEND    
  11725. LCMAILERR
  11726. GETERRORCOUNT
  11727. GETERROR
  11728. LSILENTf
  11729. OpenPrinter
  11730. winspool.drv
  11731. GetActiveWindow
  11732. user32
  11733. DocumentProperties
  11734. winspool.drv
  11735. ClosePrinter
  11736. winspool.drv
  11737. Printer
  11738. Could not open printer.
  11739. Error
  11740. TempCur
  11741. TempCur
  11742. RptFile
  11743. LCRPTFILE
  11744. LHWINDOW
  11745. LCORIGDEVMODE
  11746. LCMODIFIEDDEVMODE    
  11747. LCPRINTER    
  11748. LHPRINTER
  11749. OPENPRINTER
  11750. WINSPOOL
  11751. GETACTIVEWINDOW
  11752. USER32
  11753. DOCUMENTPROPERTIES
  11754. CLOSEPRINTER
  11755. TEMPCUR
  11756. RPTFILE    
  11757. LCOLDEXPR
  11758. LCOLDTAG
  11759. LCOLDTAG2
  11760. TAG2    
  11761. LCDEVMODE
  11762. LNRESULT
  11763. IDCANCEL
  11764. LOEXCEPTION
  11765. PROCEDURE
  11766. LCPROC
  11767. LNPOS
  11768. LCFILE
  11769. LCPATH
  11770. CTEXTE
  11771. CCLEF
  11772. NLONGCLEF
  11773. CRESULT
  11774. AINTk
  11775. ENGLISH
  11776. ESPANIOL
  11777. SPANISH
  11778. FoxyPreviewer_Locs.dbf
  11779. Could not load the localizations table.
  11780. Error
  11781. The language 
  11782.  was not found!
  11783. Make sure that the desired language is available in FoxyPreviewer_Locs.dbf
  11784. Error
  11785. TCLANGUAGE    
  11786. LCDBFFILE
  11787. LNSELECT
  11788. LANGUAGE    
  11789. LOCALLANG
  11790. OFOXYPREVIEWER    
  11791. CLANGUAGE    
  11792. CCODEPAGE
  11793. _INITSTATUSTEXT
  11794. INITSTATUS
  11795. _PREPASSSTATUSTEXT
  11796. PREPSTATUS
  11797. _RUNSTATUSTEXT    
  11798. RUNSTATUS
  11799. _SECONDSTEXT
  11800. SECONDS
  11801. _CANCELINSTRTEXT
  11802. CANCELINST
  11803. _CANCELQUERYTEXT
  11804. CANCELQUER
  11805. _REPORTINCOMPLETETEXT
  11806. REPINCOMPL
  11807. _ATTENTIONTEXT    
  11808. ATTENTION
  11809. _ERRORSENDINGMAIL
  11810. ERRSENDMAI
  11811. _MSGNOTSENTTEXT
  11812. MSGNOTSENT
  11813. _MSGSUCCESSTEXT
  11814. MSGSUCCESS
  11815. _SENDEMAILTEXT    
  11816. SENDEMAIL
  11817. _ATTACHNOTFOUNDTEXT
  11818. ATACHNOTFO
  11819. _SENDINGTEXT
  11820. MSGSENDING
  11821. LOLANG
  11822. _OLANG
  11823. _CLANGLOADED
  11824. _Screen.oFoxyPreviewer._oLang.
  11825. Could not locate the string '
  11826. ' in the localizations table.
  11827. Please make sure that you have the latest version available of 'FoxyPreviewer_locs.dbf'.
  11828. Error
  11829. TCSTRING
  11830. LCTRANSL
  11831. EnumPrinterForms
  11832. Internal
  11833. Envelope
  11834. Error loading printer information
  11835. Printer: 
  11836. Form # 
  11837. Width: 
  11838. Height: 
  11839. Printer Info
  11840. TCPRINTER
  11841. TNWIDTH
  11842. TNHEIGHT
  11843. LLSHOWRESULT
  11844. LOPRINTFORMS
  11845. CUNIT
  11846. NROUND    
  11847. LCPRINTER
  11848. GETFORMLIST
  11849. CERRORMESSAGE    
  11850. STARTMODE
  11851. CAPIERRORMESSAGE
  11852. LOONEFORM
  11853. LCFORMNAME    
  11854. OFORMLIST
  11855. COUNT
  11856. FORMID
  11857. WIDTH
  11858. HEIGHT
  11859. FORMNAME
  11860. Collection
  11861. WinApiSupport
  11862. TCUNIT
  11863. TNROUND
  11864. CUNIT
  11865. NROUND    
  11866. OFORMLIST
  11867. LOADAPIDLLS
  11868. HHEAP
  11869. HEAPCREATE
  11870. English
  11871. Metric
  11872. Internal
  11873. English
  11874. Metric
  11875. Internal
  11876. TCUNIT
  11877. CUNIT
  11878. NCOEFFICIENT
  11879. NINCH2MM
  11880. NCM2MM+
  11881. HHEAP
  11882. HEAPDESTROY
  11883. Unable to get printer handle for '
  11884. Unable to Enumerate Forms
  11885. Unable to Enumerate Forms.
  11886. TCPRINTERNAME
  11887. TCFORMNAME    
  11888. LHPRINTER    
  11889. LLSUCCESS
  11890. LNNEEDED
  11891. LNNUMBEROFFORMS
  11892. LNBUFFER
  11893. LCFORMNAME
  11894. CPRINTERNAME    
  11895. CFORMNAME
  11896. CLEARERRORS
  11897. NFORMNUMBER    
  11898. OFORMLIST
  11899. REMOVE
  11900. LNRESULT
  11901. OPENPRINTER
  11902. CERRORMESSAGE
  11903. CAPIERRORMESSAGE
  11904. WINAPIERRMSG
  11905. GETLASTERROR    
  11906. ENUMFORMS    
  11907. HEAPALLOC
  11908. HHEAP    
  11909. LOONEFORM
  11910. ONEFORMOBJ    
  11911. LNPOINTER
  11912. FORMID    
  11913. FORMFLAGS
  11914. LONG2NUMFROMBUFFER
  11915. FORMNAME
  11916. STRZFROMBUFFER
  11917. WIDTH
  11918. CONVERTFORMDIMENSION
  11919. HEIGHT
  11920. RIGHT
  11921. BOTTOM
  11922. MARKSUPPORTEDFORMS
  11923. HEAPFREE
  11924. CLOSEPRINTER/
  11925. TNPOINTER
  11926. LONG2NUMFROMBUFFER
  11927. NCOEFFICIENT
  11928. NROUNDi
  11929. DeviceCapabilities failed.
  11930. LNCOUNT
  11931. LCBUFFERPAPERS
  11932. LNINDEX
  11933. LCSTR
  11934. LNFORMID    
  11935. LOONEFORM
  11936. DEVICECAPABILITIES
  11937. CPRINTERNAME
  11938. CERRORMESSAGE
  11939. CAPIERRORMESSAGE
  11940. WINAPIERRMSG
  11941. GETLASTERROR
  11942. OWAS    
  11943. SHORT2NUM    
  11944. OFORMLIST
  11945. GETKEY
  11946. ISSUPPORTED1
  11947. Empty
  11948. FormFlags
  11949. FormId
  11950. FormName
  11951. Width
  11952. Height
  11953. Right
  11954. Bottom
  11955. IsSupported-
  11956. LOONEFORM#
  11957. CERRORMESSAGE
  11958. CAPIERRORMESSAGE
  11959. HeapCreate
  11960. WIN32API
  11961. HeapAlloc
  11962. WIN32API
  11963. HeapFree
  11964. WIN32API
  11965. HeapDestroy
  11966. WIN32API
  11967. GetLastError
  11968. kernel32
  11969. HEAPCREATE
  11970. WIN32API    
  11971. HEAPALLOC
  11972. HEAPFREE
  11973. HEAPDESTROY
  11974. GETLASTERROR
  11975. KERNEL32I
  11976. TNNUM
  11977. LCSTRING
  11978. RTLPL2PSD
  11979. TCLONG
  11980. LNNUM
  11981. RTLS2PLD
  11982. TNPOINTER
  11983. LNNUM
  11984. RTLP2PLD
  11985. TCLONG
  11986. LNNUM
  11987. RTLS2PL
  11988. TNPOINTER
  11989. LCSTR
  11990. LNSTRPOINTER
  11991. RTLP2PL
  11992. LSTRCPY
  11993. TNPOINTER
  11994. LCRESULT
  11995. LNSTRPOINTER
  11996. LNLEN
  11997. LONG2NUMFROMBUFFER
  11998. LSTRLENW
  11999. RTLP2PSZ
  12000. TNPOINTER
  12001. LCSTR
  12002. LNSTRPOINTER
  12003. LSTRCPYa
  12004. RtlMoveMemory
  12005. WIN32APIQ
  12006. RtlPL2PS
  12007. TCDEST
  12008. TNSRC
  12009. TNLEN
  12010. RTLMOVEMEMORY
  12011. WIN32API
  12012. RTLPL2PS_
  12013. RtlMoveMemory
  12014. WIN32APIQ
  12015. RtlS2PL
  12016. TNDEST
  12017. TCSRC
  12018. TNLEN
  12019. RTLMOVEMEMORY
  12020. WIN32API
  12021. RTLS2PL_
  12022. RtlMoveMemory
  12023. WIN32APIQ
  12024. RtlP2PL
  12025. TNDEST
  12026. TNSRC
  12027. TNLEN
  12028. RTLMOVEMEMORY
  12029. WIN32API
  12030. RTLP2PL_
  12031. RtlMoveMemory
  12032. WIN32APIQ
  12033. RtlP2PS
  12034. TCDEST
  12035. TNSRC
  12036. TNLEN
  12037. RTLMOVEMEMORY
  12038. WIN32API
  12039. RTLP2PSB
  12040. lstrcpy
  12041. WIN32API
  12042. TCDEST
  12043. TNSRC
  12044. LSTRCPY
  12045. WIN32API7
  12046. lstrlenW
  12047. WIN32API
  12048. TNSRC
  12049. LSTRLENW
  12050. WIN32API6
  12051. lstrlen
  12052. WIN32API
  12053. TNSRC
  12054. LSTRLEN
  12055. WIN32API
  12056. TNERRORCODE
  12057. LCERRBUFFER
  12058. LNNEWERR
  12059. LNFLAG
  12060. LCERRORMESSAGE
  12061. FORMATMESSAGE
  12062. 09.00.0000.2412
  12063. 09.00.0000.3504
  12064. 09.00.0000.5721
  12065. 09.00.0000.5815
  12066. 09.00.0000.6303
  12067. SP2 HF1
  12068. 09.00.0000.6602
  12069. SP2 HF2
  12070. 09.00.0000.7423
  12071. SP2 HF3
  12072. LCVERSION
  12073. oFoxyThermForm
  12074. oFoxyThermForm
  12075. oFoxyThermForm
  12076. _Screen.oFoxyThermForm.Thermb
  12077. TNPERCENT
  12078. TCLABELTEXT
  12079. TCTITLETEXT
  12080. ADDPROPERTY
  12081. OFOXYTHERMFORM
  12082. RELEASE
  12083. CREATETHERM
  12084. LOTHERMFORM
  12085. THERMLABEL
  12086. CAPTION
  12087. THERM
  12088. MARQUEE
  12089. VALUE
  12090. VISIBLE
  12091. ATLForm
  12092. Therm
  12093. ctl32_progressbar
  12094. PR_ctl32_progressbar.vcx
  12095. ThermLabel
  12096. Label
  12097. LOFORM
  12098. OFOXYTHERMFORM
  12099. LNBORDER
  12100. LITHERMHEIGHT
  12101. LITHERMWIDTH
  12102. LITHERMTOP
  12103. LITHERMLEFT    
  12104. SCALEMODE
  12105. HEIGHT
  12106. HALFHEIGHTCAPTION
  12107. WIDTH
  12108. AUTOCENTER
  12109. BORDERSTYLE
  12110. CONTROLBOX
  12111. CLOSABLE    
  12112. MAXBUTTON    
  12113. MINBUTTON
  12114. MOVABLE
  12115. ALWAYSONTOP
  12116. ALLOWOUTPUT    
  12117. NEWOBJECT
  12118. THERMLABEL
  12119. VISIBLE
  12120. FONTBOLD
  12121. ALIGNMENT
  12122. THERM
  12123. MARQUEESPEED
  12124. MARQUEEANIMATIONSPEED
  12125. CAPTION
  12126. Datasessionv
  12127. Fixedv
  12128. PreviewHelpera
  12129. ERRNOPRINTER
  12130. SET FIXED &lcSetFixed.
  12131. pr_FRXOutput.Prg
  12132. FXLISTENER
  12133. PR_ReportListener.vcx
  12134. FOXYLISTENER
  12135. PR_ReportListener.vcx
  12136. _GDIPLUS.VCXC
  12137. Classlibv
  12138. _GdiPlus.vcx
  12139. FOXYLISTENERCC
  12140. PR_ReportListener.vcx
  12141. _GDIPLUS.VCXC
  12142. Classlibv
  12143. _GdiPlus.vcx
  12144. PROCEDUREv
  12145. _oReportOutput("1")b
  12146. pr_FRXOutput
  12147. Could not find the 'ReportOutput.App' file. This file is needed to have the new features of FoxyPreviewer.C
  12148. Please make sure to set the global variable '_REPORTOUTPUT' with the full path of this file 
  12149. or save it in a folder that your app can reach
  12150. FoxyPreviewer not loaded!
  12151. cSuccessor
  12152. lQuietMode
  12153. lShowSearch
  12154. lShowClose
  12155. lShowSetup
  12156. nThermType
  12157. nThermFormWidth
  12158. lOpenViewer
  12159. lPrintVisible
  12160. lShowPrintBtn
  12161. lShowPageCount
  12162. lShowFileFormatIcons
  12163. lSaveToFile
  12164. _cLanguageFromDBF
  12165. _cOrigRepPreview
  12166. _cLocalPath
  12167. _oSettingsSheet
  12168. lSendToEmail
  12169. lShowMiniatures
  12170. lPrinterPref
  12171. lSaveAsImage
  12172. lSaveAsHTML
  12173. lSaveAsMHT
  12174. lSaveAsRTF
  12175. lSaveAsXLS
  12176. lSaveAsPDF
  12177. lSaveAsTXT
  12178. nCanvasCount
  12179. lEmailAuto
  12180. cEmailType
  12181. cEmailPRG
  12182. cFaxPRG
  12183. lShowPrinters
  12184. nEmailMode
  12185. cSMTPUserName
  12186. cSMTPPassword
  12187. nSMTPPort
  12188. cSMTPServer
  12189. lSMTPUseSSL
  12190. cEmailTo
  12191. cEmailSubject
  12192. cEmailBody
  12193. cEmailFrom
  12194. cEmailBodyFile
  12195. cAttachments
  12196. cSaveDefName
  12197. cEmailCC
  12198. cEmailBCC
  12199. cEmailReplyTo
  12200. cVersion
  12201. v2.99z30 RC 2013.09.12
  12202. nVersion
  12203. lSilent
  12204. nButtonSize
  12205. cOutputPath
  12206. nPrinterPropType
  12207. lDirectPrint
  12208. nSearchPages
  12209. nZoomLevel
  12210. nWindowState
  12211. nDockType
  12212. nMaxMiniatureDisplay
  12213. nShowToolBar
  12214. cFormIcon
  12215. cTitle
  12216. cToolbarTitle
  12217. nPreviewBackColor
  12218. lPrinted-
  12219. lEmailed-
  12220. lSaved-
  12221. cDestFile-
  12222. cAdressTable
  12223. cAdressSearch
  12224. cImgPrint
  12225. cImgPrintPref
  12226. cImgSave
  12227. cImgClose
  12228. cImgClose2
  12229. cImgEmail
  12230. cImgSetup
  12231. cImgMiniatures
  12232. cImgSearch
  12233. cImgSearchAgain
  12234. cImgSearchBack
  12235. cImgPrintBig
  12236. cImgPrintPrefBig
  12237. cImgSaveBig
  12238. cImgCloseBig
  12239. cImgClose2Big
  12240. cImgEmailBig
  12241. cImgSetupBig
  12242. cImgMiniaturesBig
  12243. cImgSearchBig
  12244. cImgSearchAgainBig
  12245. cImgSearchBackBig
  12246. lPDFEmbedFonts
  12247. lPDFCanPrint
  12248. lPDFCanEdit
  12249. lPDFCanCopy
  12250. lPDFCanAddNotes
  12251. lPDFEncryptDocument
  12252. lPDFAsImage
  12253. cPDFMasterPassword
  12254. cPDFUserPassword
  12255. cPDFAuthor
  12256. cPDFTitle
  12257. cPDFSubject
  12258. cPDFKeywords
  12259. cPDFCreator
  12260. lPDFShowErrors
  12261. cPDFSymbolFontsList
  12262. cPDFDefaultFont
  12263. nPDFPageMode
  12264. lPDFReplaceFonts
  12265. nPDFLineHeightRatio
  12266. lExpandFields
  12267. cPrintJobName
  12268. lShowCopies
  12269. nCopies
  12270. lReadReceipt
  12271. lPriority
  12272. cEncryptPROCEDURE
  12273. cDecryptPROCEDURE
  12274. cCryptKey
  12275. cExcelDefaultExtension
  12276. lExcelConvertToXLS
  12277. lExcelRepeatHeaders
  12278. lExcelRepeatFooters
  12279. lExcelHidePageNo
  12280. lExcelAlignLeft
  12281. nExcelSaveFormat
  12282. cCodePage
  12283. lRepeatInPage
  12284. lRepeatWhenFree
  12285. cWatermarkImage
  12286. nWatermarkType
  12287. nWatermarkTransparency
  12288. nWatermarkWidthRatio
  12289. nWatermarkHeightRatio
  12290. lDoubleByteLanguage
  12291. _MemberData
  12292. _MemberData
  12293. <VFPData>
  12294. <memberdata name="ofoxypreviewer" type="Property" display="oFoxyPreviewer"/>
  12295. </VFPData>
  12296. _MemberData
  12297. <VFPData>
  12298. <memberdata name="sendemailusingcdo" type="Property" display="SendEmailUsingCDO"/>
  12299. <memberdata name="lquietmode" type="Property" display="lQuietMode"/>
  12300. <memberdata name="lshowsearch" type="Property" display="lShowSearch"/>
  12301. <memberdata name="lshowclose" type="Property" display="lShowClose"/>
  12302. <memberdata name="lshowsetup" type="Property" display="lShowSetup"/>
  12303. <memberdata name="nthermtype" type="Property" display="nThermType"/>
  12304. <memberdata name="nthermformwidth" type="Property" display="nThermFormWidth"/>
  12305. <memberdata name="lopenviewer" type="Property" display="lOpenViewer"/>
  12306. <memberdata name="lprintvisible" type="Property" display="lPrintVisible"/>
  12307. <memberdata name="lshowprintbtn" type="Property" display="lShowPrintBtn"/>
  12308. <memberdata name="lshowpagecount" type="Property" display="lShowPageCount"/>
  12309. <memberdata name="lsavetofile" type="Property" display="lSaveToFile"/>
  12310. <memberdata name="clanguage" type="Property" display="cLanguage"/>
  12311. <memberdata name="lsendtoemail" type="Property" display="lSendToEmail"/>
  12312. <memberdata name="lshowminiatures" type="Property" display="lShowMiniatures"/>
  12313. <memberdata name="lprinterpref" type="Property" display="lPrinterPref"/>
  12314. <memberdata name="lsaveasimage" type="Property" display="lSaveAsImage"/>
  12315. <memberdata name="lsaveashtml" type="Property" display="lSaveAsHTML"/>
  12316. <memberdata name="lsaveasmht" type="Property" display="lSaveAsMHT"/>
  12317. <memberdata name="lsaveasrtf" type="Property" display="lSaveAsRTF"/>
  12318. <memberdata name="lsaveasxls" type="Property" display="lSaveAsXLS"/>
  12319. <memberdata name="lsaveaspdf" type="Property" display="lSaveAsPDF"/>
  12320. <memberdata name="lsaveastxt" type="Property" display="lSaveAsTXT"/>
  12321. <memberdata name="ncanvascount" type="Property" display="nCanvasCount"/>
  12322. <memberdata name="lemailauto" type="Property" display="lEmailAuto"/>
  12323. <memberdata name="cemailprg" type="Property" display="cEmailPRG"/>
  12324. <memberdata name="cfaxprg" type="Property" display="cFaxPRG"/>
  12325. <memberdata name="cemailtype" type="Property" display="cEmailType"/>
  12326. <memberdata name="cemailbodyfile" type="Property" display="cEmailBodyFile"/>
  12327. <memberdata name="lshowprinters" type="Property" display="lShowPrinters"/>
  12328. <memberdata name="nemailmode" type="Property" display="nEmailMode"/>
  12329. <memberdata name="csmtpusername" type="Property" display="cSMTPUserName"/>
  12330. <memberdata name="csmtppassword" type="Property" display="cSMTPPassword"/>
  12331. <memberdata name="csavedefname" type="Property" display="cSaveDefName"/>
  12332. <memberdata name="npreviewbackcolor" type="Property" display="nPreviewBackColor"/>
  12333. <memberdata name="lshowfileformaticons" type="Property" display="lShowFileFormatIcons"/>
  12334. <memberdata name="nsmtpport" type="Property" display="nSMTPPort"/>
  12335. <memberdata name="csmtpserver" type="Property" display="cSMTPServer"/>
  12336. <memberdata name="lsmtpusessl" type="Property" display="lSMTPUseSSL"/>
  12337. <memberdata name="cemailto" type="Property" display="cEmailTo"/>
  12338. <memberdata name="cemailsubject" type="Property" display="cEmailSubject"/>
  12339. <memberdata name="cemailbody" type="Property" display="cEmailBody"/>
  12340. <memberdata name="cemailfrom" type="Property" display="cEmailFrom"/>
  12341. <memberdata name="cemailcc" type="Property" display="cEmailCC"/>
  12342. <memberdata name="cemailbcc" type="Property" display="cEmailBCC"/>
  12343. <memberdata name="cemailreplyto" type="Property" display="cEmailReplyTo"/>
  12344. <memberdata name="cattachments" type="Property" display="cAttachments"/>
  12345. <memberdata name="cversion" type="Property" display="cVersion"/>
  12346. <memberdata name="nversion" type="Property" display="nVersion"/>
  12347. <memberdata name="nbuttonsize" type="Property" display="nButtonSize"/>
  12348. <memberdata name="coutputpath" type="Property" display="cOutputPath"/>
  12349. <memberdata name="nprinterproptype" type="Property" display="nPrinterPropType"/>
  12350. <memberdata name="ldirectprint" type="Property" display="lDirectPrint"/>
  12351. <memberdata name="nzoomlevel" type="Property" display="nZoomLevel"/>
  12352. <memberdata name="nwindowstate" type="Property" display="nWindowState"/>
  12353. <memberdata name="ndocktype" type="Property" display="nDockType"/>
  12354. <memberdata name="nmaxminiaturedisplay" type="Property" display="nMaxMiniatureDisplay"/>
  12355. <memberdata name="nshowtoolbar" type="Property" display="nShowToolbar"/>
  12356. <memberdata name="lprinted" type="Property" display="lPrinted"/>
  12357. <memberdata name="lemailed" type="Property" display="lEmailed"/>
  12358. <memberdata name="lsaved" type="Property" display="lSaved"/>
  12359. <memberdata name="cdestfile" type="Property" display="cDestFile"/>
  12360. <memberdata name="cformicon" type="Property" display="cFormIcon"/>
  12361. <memberdata name="ctitle" type="Property" display="cTitle"/>
  12362. <memberdata name="ctoolbartitle" type="Property" display="cToolbarTitle"/>
  12363. <memberdata name="cadresstable" type="Property" display="cAdressTable"/>
  12364. <memberdata name="ccodepage" type="Property" display="cCodePage"/>
  12365. <memberdata name="cadresssearch" type="Property" display="cAdressSearch"/>
  12366. <memberdata name="lrepeatinpage" type="Property" display="lRepeatInPage"/>
  12367. <memberdata name="lrepeatwhenfree" type="Property" display="lRepeatWhenFree"/>
  12368. <memberdata name="cwatermarkimage" type="Property" display="cWatermarkImage"/>
  12369. <memberdata name="nwatermarktype" type="Property" display="nWatermarkType"/>
  12370. <memberdata name="nwatermarktransparency" type="Property" display="nWatermarkTransparency"/>
  12371. <memberdata name="nwatermarkwidthratio" type="Property" display="nWatermarkWidthRatio"/>
  12372. <memberdata name="nwatermarkheightratio" type="Property" display="nWatermarkHeightRatio"/>
  12373. <memberdata name="cimgprint" type="Property" display="cImgPrint"/>
  12374. <memberdata name="cimgprintpref" type="Property" display="cImgPrintPref"/>
  12375. <memberdata name="cimgsave" type="Property" display="cImgSave"/>
  12376. <memberdata name="cimgclose" type="Property" display="cImgClose"/>
  12377. <memberdata name="cimgclose2" type="Property" display="cImgClose2"/>
  12378. <memberdata name="cimgemail" type="Property" display="cImgEmail"/>
  12379. <memberdata name="cimgsetup" type="Property" display="cImgSetup"/>
  12380. <memberdata name="cimgminiatures" type="Property" display="cImgMiniatures"/>
  12381. <memberdata name="cimgsearch" type="Property" display="cImgSearch"/>
  12382. <memberdata name="cimgsearchagain" type="Property" display="cImgSearchAgain"/>
  12383. <memberdata name="cimgsearchback" type="Property" display="cImgSearchBack"/>
  12384. <memberdata name="cimgprintbig" type="Property" display="cImgPrintBig"/>
  12385. <memberdata name="cimgprintprefbig" type="Property" display="cImgPrintPrefBig"/>
  12386. <memberdata name="cimgsavebig" type="Property" display="cImgSaveBig"/>
  12387. <memberdata name="cimgclosebig" type="Property" display="cImgCloseBig"/>
  12388. <memberdata name="cimgclose2big" type="Property" display="cImgClose2Big"/>
  12389. <memberdata name="cimgemailbig" type="Property" display="cImgEmailBig"/>
  12390. <memberdata name="cimgsetupbig" type="Property" display="cImgSetupBig"/>
  12391. <memberdata name="cimgminiaturesbig" type="Property" display="cImgMiniaturesBig"/>
  12392. <memberdata name="cimgsearchbig" type="Property" display="cImgSearchBig"/>
  12393. <memberdata name="cimgsearchagainbig" type="Property" display="cImgSearchAgainBig"/>
  12394. <memberdata name="cimgsearchbackbig" type="Property" display="cImgSearchBackBig"/>
  12395. <memberdata name="lpdfembedfonts" type="Property" display="lPDFEmbedFonts"/>
  12396. <memberdata name="lpdfcanprint" type="Property" display="lPDFCanPrint"/>
  12397. <memberdata name="lpdfcanedit" type="Property" display="lPDFCanEdit"/>
  12398. <memberdata name="lpdfcancopy" type="Property" display="lPDFCanCopy"/>
  12399. <memberdata name="lpdfcanaddnotes" type="Property" display="lPDFCanAddNotes"/>
  12400. <memberdata name="lpdfencryptdocument" type="Property" display="lPDFEncryptDocument"/>
  12401. <memberdata name="lpdfasimage" type="Property" display="lPDFAsImage"/>
  12402. <memberdata name="cpdfmasterpassword" type="Property" display="cPDFMasterPassword"/>
  12403. <memberdata name="cpdfuserpassword" type="Property" display="cPDFUserPassword"/>
  12404. <memberdata name="cpdfauthor" type="Property" display="cPDFAuthor"/>
  12405. <memberdata name="cpdftitle" type="Property" display="cPDFTitle"/>
  12406. <memberdata name="cpdfsubject" type="Property" display="cPDFSubject"/>
  12407. <memberdata name="cpdfkeywords" type="Property" display="cPDFKeywords"/>
  12408. <memberdata name="cpdfcreator" type="Property" display="cPDFCreator"/>
  12409. <memberdata name="lpdfshowerrors" type="Property" display="lPDFShowErrors"/>
  12410. <memberdata name="npdflineheightratio" type="Property" display="nPDFLineHeightRatio"/>
  12411. <memberdata name="lpdfreplacefonts" type="Property" display="lPDFReplaceFonts"/>
  12412. <memberdata name="cpdfsymbolfontslist"  type="Property" display="cPDFSymbolFontsList"/>
  12413. <memberdata name="cpdfdefaultfont" type="Property" display="cPDFDefaultFont"/>
  12414. <memberdata name="npdfpagemode" type="Property" display="nPDFPageMode"/>
  12415. <memberdata name="osettingsdlg" type="Property" display="oSettingsDlg"/>
  12416. <memberdata name="lexpandfields" type="Property" display="lExpandFields"/>
  12417. <memberdata name="cprintjobname" type="Property" display="cPrintJobName"/>
  12418. <memberdata name="ncopies" type="Property" display="nCopies"/>
  12419. <memberdata name="lshowcopies" type="Property" display="lShowCopies"/>
  12420. <memberdata name="lreadreceipt" type="Property" display="lReadReceipt"/>
  12421. <memberdata name="lpriority" type="Property" display="lPriority"/>
  12422. <memberdata name="cexceldefaultextension" type="Property" display="cExcelDefaultExtension"/>
  12423. <memberdata name="lexcelconverttoxls" type="Property" display="lExcelConvertToXLS"/>
  12424. <memberdata name="lexcelrepeatheaders" type="Property" display="lExcelRepeatHeaders"/>
  12425. <memberdata name="lexcelrepeatfooters" type="Property" display="lExcelRepeatFooters"/>
  12426. <memberdata name="lexcelhidepageno" type="Property" display="lExcelHidePageNo"/>
  12427. <memberdata name="lexcelalignleft" type="Property" display="lExcelAlignLeft"/>
  12428. <memberdata name="nexcelsaveformat" type="Property" display="nExcelSaveFormat"/>
  12429. </VFPData>
  12430. lHalfHeightReport-
  12431. _InitStatusTextC
  12432. INITSTATUS
  12433. _PrepassStatusTextC
  12434. PREPSTATUS
  12435. _RunStatusTextC
  12436. RUNSTATUS
  12437. _SecondsTextC
  12438. SECONDS
  12439. _CancelInstrTextC
  12440. CANCELINST
  12441. _CancelQueryTextC
  12442. CANCELQUER
  12443. _ReportIncompleteTextC
  12444. REPINCOMPL
  12445. _AttentionTextC
  12446. ATTENTION
  12447. _ErrorSendingMailC
  12448. ERRSENDMAI
  12449. _MsgNotSentTextC
  12450. MSGNOTSENT
  12451. _MsgSuccessTextC
  12452. MSGSUCCESS
  12453. _SendEmailTextC
  12454. SENDEMAIL
  12455. _AttachNotFoundTextC
  12456. ATACHNOTFO
  12457. _SendingTextC
  12458. MSGSENDING
  12459. CCODEPAGE
  12460. _oLang
  12461. _cLangLoaded
  12462. ENGLISH
  12463. _oDestScreen
  12464. _nDataSessionMode
  12465. Empty
  12466. lEnableLanguagea
  12467. lEnableTabGenerala
  12468. lEnableTabControlsa
  12469. lEnableTabOutputa
  12470. lEnableTabEmaila
  12471. lEnableTabPDFa
  12472. lEnableTabXLSa
  12473. lEnableChkPrintPrefa
  12474. lEnableCmbPrintPrefTypea
  12475. lEnableChkCopiesa
  12476. lEnableChkSavetoFilea
  12477. lEnableChkPrintersa
  12478. lEnableChkEmaila
  12479. lEnableChkMiniaturesa
  12480. lEnableChkSearcha
  12481. lEnableChkSettingsa
  12482. lEnableChkSaveAsImagea
  12483. lEnableChkSaveAsPDFa
  12484. lEnableChkSaveAsRTFa
  12485. lEnableChkSaveAsHTMLa
  12486. lEnableChkSaveAsMHTa
  12487. lEnableChkSaveAsXLSa
  12488. lEnableChkSaveAsTXTa
  12489. lEnableCmbEmailTypea
  12490. lEnableCmbAttachmentTypea
  12491. lEnableChkEmbedFontsa
  12492. lEnableChkPDFasImagea
  12493. lShowLanguagea
  12494. lShowTabGenerala
  12495. lShowTabControlsa
  12496. lShowTabOutputa
  12497. lShowTabEmaila
  12498. lShowTabPDFa
  12499. lShowTabXLSa
  12500. lShowTabXLSa
  12501. oSettingsDlg
  12502. oFoxyPreviewer
  12503. oFoxyPreviewer
  12504. oFoxyPreviewer
  12505. _oReportOutput("1")b
  12506. Could not load the FOXYPREVIEWER report factory
  12507. Error
  12508. SET FIXED &lcSetFixed.
  12509. _oReportOutput("1")
  12510. FOXYLISTENER
  12511. _oReportOutput("1")
  12512. FOXYLISTENER
  12513. Could not load the FOXYPREVIEWER report factory (2)C
  12514. Please check the version of your 'REPORTOUTPUT.APP' file, and make sure to be using the latest version released in VFP9 SP2.
  12515. Replace your current version with the new one.
  12516. Error
  12517. SET FIXED &lcSetFixed.
  12518. _oReportOutput("10")b
  12519. PdfListener
  12520. PR_PDFX.vcx
  12521. PdfListener
  12522. PR_PDFX.vcx
  12523. PdfListenerCC
  12524. PR_PDFX.vcx
  12525. _oReportOutput("11")b
  12526. PdfasImageListener
  12527. PR_PDFX.vcx
  12528. PdfasImageListener
  12529. PR_PDFX.vcx
  12530. PdfasImageListenerCC
  12531. PR_PDFX.vcx
  12532. _oReportOutput("12")b
  12533. PdfasImageListener
  12534. PR_PDFX.vcx
  12535. RTFreportlistener
  12536. PR_RTFListener
  12537. RTFreportlistenerCC
  12538. PR_RTFListener
  12539. _oReportOutput("13")b
  12540. REPORTLISTENER
  12541. ExcelListener
  12542. pr_ExcelListener.vcx
  12543. ExcelListenerCC
  12544. pr_ExcelListener.vcx
  12545. Sheet
  12546. _oReportOutput("14")b
  12547. MSXML2.XSLTEMPLATE.4.0
  12548. REPORTLISTENER
  12549. pr_HTMLListener
  12550. pr_reportlistener.vcx
  12551. pr_HTMLListenerCC
  12552. pr_ReportListener.vcx
  12553. _oReportOutput("15")b
  12554. REPORTLISTENER
  12555. pr_HTMLListener15
  12556. pr_reportlistener.vcx
  12557. pr_HTMLListener15CC
  12558. pr_ReportListener.vcx
  12559. _oReportOutput("16")b
  12560. FXLISTENER
  12561. PR_ReportListener.vcx
  12562. FOXYLISTENER
  12563. PR_ReportListener.vcx
  12564. FOXYLISTENERCC
  12565. PR_ReportListener.vcx
  12566. _oReportOutput("0")b
  12567. FXLISTENER
  12568. PR_ReportListener.vcx
  12569. FOXYLISTENER
  12570. PR_ReportListener.vcx
  12571. FOXYLISTENERCC
  12572. PR_ReportListener.vcx
  12573. _oReportOutput("20")b
  12574. FXLISTENER
  12575. PR_ReportListener.vcx
  12576. FOXYLISTENER
  12577. PR_ReportListener.vcx
  12578. FOXYLISTENERCC
  12579. PR_ReportListener.vcx
  12580. TCSYS16
  12581. TCLOCALPATH    
  12582. LNSESSION
  12583. LCSETFIXED
  12584. LOHELPER
  12585. LCOMPLETEMODE
  12586. GAPRINTERS
  12587. SETERROR
  12588. GETLOC
  12589. LOLISTENER
  12590. FXFEEDBACKCLASS
  12591. _CTHERMCLASS    
  12592. QUIETMODE
  12593. LQUIETMODE
  12594. _OREPORTOUTPUT
  12595. REMOVE
  12596. LCREPORTOUTPUT
  12597. LOSETTINGS
  12598. LCDEFAULTSETFILE    
  12599. CLANGUAGE    
  12600. STARTMODE
  12601. ADDPROPERTY
  12602. _MEMBERDATA    
  12603. CCODEPAGE
  12604. LOSETDLG
  12605. OFOXYPREVIEWER
  12606. LOPREVLISTENER
  12607. CLASS
  12608. LOPDFLISTENER
  12609. LOBJTYPEMODE
  12610. LOPDFLISTENER2
  12611. LISTENERTYPE
  12612. LORTFLISTENER
  12613. LOXLSLISTENER
  12614. LOUTPUTTOCURSOR
  12615. CWORKSHEETNAME
  12616. LCONVERTTOXLS
  12617. LEXCELCONVERTTOXLS
  12618. LREPEATHEADERS
  12619. LEXCELREPEATHEADERS
  12620. LREPEATFOOTERS
  12621. LEXCELREPEATFOOTERS
  12622. LHIDEPAGENO
  12623. LEXCELHIDEPAGENO
  12624. LALIGNLEFT
  12625. LEXCELALIGNLEFT
  12626. LLXLSERROR
  12627. LOTESTXML4
  12628. LOHTMLLISTENER$
  12629. COPYIMAGEFILESTOEXTERNALFILELOCATION
  12630. LOIMAGELISTENER
  12631. LOPRINTLISTENER
  12632. LOOUTPUTLISTENER
  12633. PROCEDUREvf
  12634. FOXYPREVIEWER.
  12635. LCPROC
  12636. LNPROCS    
  12637. LCCURPROC
  12638. PR_REPORTLISTENERCC
  12639. Classlibvf
  12640. PR_REPORTLISTENER
  12641. _GDIPLUSCC
  12642. Classlibvf
  12643. _GDIPLUS
  12644. PR_REPORTLISTENER
  12645. _GDIPLUSl
  12646. CDO.Message
  12647. file://
  12648. Source file does not exist!
  12649. Error
  12650. CDO.Configuration
  12651. CDO.Message
  12652. TCSOURCE
  12653. TCDESTINATION
  12654. LCFILENAME
  12655. LOSTREAM
  12656. LOMSG
  12657. LOCONFIG
  12658. CONFIGURATION
  12659. CREATEMHTMLBODY    
  12660. GETSTREAM
  12661. SAVETOFILEg
  12662. _ReportOutputConfig
  12663. TALKv
  12664. DATASESSIONv
  12665. TALKv
  12666. ReportListener
  12667. OutputConfig
  12668.  AND (C
  12669. LOCATE FOR ObjType = 100 AND  (ObjCode = m.iType)   &cFilter. AND (NOT DELETED())
  12670. Exception
  12671. Configuration table specified to 
  12672. VFP Report Output Application
  12673. is not found or is in the wrong format.
  12674. OutputConfig
  12675. ListenerType
  12676. PUBLIC &tvReference.   
  12677. IF PEMSTATUS(&tvReference.,"ListenerType",5) AND  UPPER(m.oTemp.BaseClass) == UPPER(m.oTemp.Class)
  12678. &tvReference..ListenerType = m.iType
  12679. ListenerType
  12680. TVTYPE
  12681. TVREFERENCE
  12682. TVUNLOAD
  12683. OTEMP
  12684. ITYPE
  12685. IINDEX
  12686. CTYPE
  12687. CCONFIGTABLE
  12688. LSUCCESS
  12689. LSETTALKBACKON
  12690. LSAFETY
  12691. CFILTER
  12692. CCLASS
  12693. CMODULE
  12694. OCONFIG
  12695. OERROR
  12696. LSTRINGVAR
  12697. LOBJECTMEMBER
  12698. IPARAMS
  12699. IUNLOAD
  12700. ISELECT
  12701. ISESSION
  12702. LSETTALKBACKONDEFAULTSESSION
  12703. VRETURN
  12704. EXECUTE
  12705. REPORTOUTPUTCONFIG
  12706. REPORTOUTPUTCLEANUP
  12707. UNLOADLISTENER
  12708. REPORTOUTPUTDECLAREREFERENCE
  12709. CHECKPUBLICLISTENERCOLLECTION
  12710. _OREPORTOUTPUT
  12711. TESTLISTENERREFERENCE
  12712. GETCONFIGOBJECT
  12713. GETCONFIGTABLE
  12714. OUTPUTCONFIG
  12715. VERIFYCONFIGTABLE
  12716. OBJTYPE
  12717. OBJCODE
  12718. OBJINFO
  12719. OBJNAME
  12720. OBJVALUE
  12721. GETSUPPORTEDLISTENERINFO
  12722. MESSAGE
  12723. HANDLEERROR    
  12724. BASECLASS
  12725. CLASS
  12726. LISTENERTYPE
  12727. OUTPUTTYPE
  12728. TISELECT
  12729. TLRESETTALKDEFAULTSESSION    
  12730. TISESSION
  12731. TLRESETTALK
  12732. EXECUTE 
  12733. TOREF!
  12734. PR_FXListener
  12735. PR_ReportListener.VCX
  12736. PR_FXListener
  12737. PR_ReportListener.VCX
  12738. ReportListener
  12739. PR_HTMLListener
  12740. PR_ReportListener.VCX
  12741. PR_XMLListener
  12742. PR_ReportListener.VCX
  12743. PR_DebugListener
  12744. PR_ReportListener.VCX
  12745. TITYPE
  12746. TCCLASS
  12747. TCLIB
  12748. TCMODULE
  12749. DATASESSIONv
  12750. session
  12751. SAFETYv
  12752. OutputConfigCC
  12753. DEBUGLISTENER
  12754. PR_ReportListener.VCX
  12755. DebugListener
  12756. PR_ReportListener.VCX
  12757. Output Configuration Table
  12758. Output Configuration Table
  12759. TNTYPE
  12760. TVREFERENCE
  12761. TVUNLOAD
  12762. ISESSION
  12763. OSESSION
  12764. OERROR
  12765. OCONFIG
  12766. LSUCCESS
  12767. CTYPE
  12768. IINDEX
  12769. CHECKPUBLICLISTENERCOLLECTION
  12770. _OREPORTOUTPUT
  12771. REMOVE
  12772. LSAFETY
  12773. EXECUTE
  12774. DATASESSIONID
  12775. GETCONFIGOBJECT
  12776. CREATECONFIGTABLE
  12777. OBJTYPE
  12778. OBJCODE
  12779. OBJNAME
  12780. OBJVALUE
  12781. GETCONFIGTABLE
  12782. HANDLEERROR
  12783. PR_XMLListener
  12784. PR_ReportListener.VCX
  12785. PR_UtilityReportListener
  12786. PR_ReportListener.VCX
  12787. VFP Report Output Application
  12788. TOCFG
  12789. LCMODULE    
  12790. QUIETMODE
  12791. APPNAME9
  12792. m.tvReferenceb
  12793. TIPARAMS
  12794. TVREFERENCE
  12795. TLOBJECTMEMBER
  12796. TLSTRINGVAR
  12797. IDOTPOS
  12798. Collectionf
  12799. TITYPE
  12800. LUNLOAD
  12801. CTYPE
  12802. _OREPORTOUTPUT
  12803. CLASS
  12804. IINDEX
  12805. COUNT
  12806. GETKEY
  12807. REMOVE
  12808. An unknown error has occurred in 
  12809. VFP Report Output Application
  12810. ERRORNO
  12811. MESSAGE
  12812. DETAILS
  12813. Collectionf
  12814. Collection
  12815. _oReportOutput
  12816. TCTYPE
  12817. TIINDEX
  12818. IINDEX
  12819. _OREPORTOUTPUT
  12820. CLASS
  12821. COUNT
  12822. GETKEY
  12823. TISESSION
  12824. TCLANGUAGE
  12825. PR_SETLANGUAGEn
  12826. _Screen.oFoxyPreviewer._oLang.C
  12827. TCTEXT
  12828. LCTRANSLATION
  12829. CDO2000
  12830. Cdo2000
  12831. <HTML><BR></HTML>
  12832. <HTML>
  12833. TCFILE
  12834. LOMAIL
  12835. LOFP1
  12836. LQUIETMODE
  12837. CSERVER
  12838. CSMTPSERVER
  12839. NSERVERPORT    
  12840. NSMTPPORT
  12841. LUSESSL
  12842. LSMTPUSESSL
  12843. CSMTPUSERNAME
  12844. CSMTPPASSWORD
  12845. NAUTHENTICATE    
  12846. CUSERNAME    
  12847. CPASSWORD
  12848. CFROM
  12849. CEMAILFROM
  12850. CEMAILTO
  12851. CEMAILCC
  12852. CBCC    
  12853. CEMAILBCC
  12854. CSUBJECT
  12855. CEMAILSUBJECT
  12856. CREPLYTO
  12857. CEMAILREPLYTO
  12858. CEMAILBODY    
  12859. CHTMLBODY    
  12860. CTEXTBODY
  12861. CATTACHMENTS
  12862. CATTACHMENT
  12863. LREADRECEIPT    
  12864. LPRIORITY
  12865. SEND    
  12866. LCMAILERR
  12867. GETERRORCOUNT
  12868. GETERROR
  12869. LSILENT
  12870. _ERRORSENDINGMAIL
  12871. _MSGNOTSENTTEXT
  12872. LEMAILED
  12873. _MSGSUCCESSTEXT
  12874. _SENDEMAILTEXT$
  12875. ERRSENDMAI
  12876. MSGNOTSENT
  12877. ERROR
  12878. Error sending emailC
  12879. Message was not sent
  12880. Error
  12881. TNMAPIERRNO    
  12882. LCMESSAGE    
  12883. LCMAPIMSG
  12884. PR_MAPI_GETMESSAGETEXT
  12885. _GOFP
  12886. GETLOCx
  12887. One or more files could not be located. No message was sent.
  12888. An attachment could not be written to a temporary file. Check directory permissions.
  12889. One or more unspecified errors occurred while sending the message. It is not known if the message was sent.
  12890. There was insufficient memory to proceed.
  12891. There was no default logon, and the user failed to log on successfully when the logon dialog box was displayed. No message was sent.
  12892. The user canceled one of the dialog boxes. No message was sent.
  12893. The user had too many sessions open simultaneously. No session handle was returned.
  12894. A recipient matched more than one of the recipient descriptor structures and MAPI_DIALOG was not set. No message was sent.
  12895. The specified attachment was not found. No message was sent.
  12896. The type of a recipient was not MAPI_TO, MAPI_CC, or MAPI_BCC. No message was sent.
  12897. One or more recipients were invalid or did not resolve to any address.
  12898. The text in the message was too large. No message was sent.
  12899. There were too many file attachments. No message was sent.
  12900. There were too many recipients. No message was sent.
  12901. A recipient did not appear in the address list. No message was sent.
  12902. TNERR
  12903. LCRET.
  12904. TCCUSTOMTEXT
  12905. TCFULLPATHFILENAME
  12906. TCFILEEXTENSIONS
  12907. LCFILE
  12908. LCDEFEXT
  12909. LCFULLPATHCURDIR
  12910. LCPATH
  12911. GdipDrawString
  12912. GDIPLUS.DLLQ
  12913. xfcGdipDrawString
  12914. GRAPHICS
  12915. LENGTH
  12916. THEFONT
  12917. LAYOUTRECT
  12918. STRINGFORMAT
  12919. BRUSH
  12920. GDIPDRAWSTRING
  12921. GDIPLUS
  12922. XFCGDIPDRAWSTRING
  12923. GdipMeasureString
  12924. GDIPLUS.DLLQ
  12925. xfcGdipMeasureString
  12926. GRAPHICS
  12927. LENGTH
  12928. THEFONT
  12929. LAYOUTRECT
  12930. STRINGFORMAT
  12931. BOUNDINGBOX
  12932. CODEPOINTSFITTED
  12933. LINESFILLED
  12934. GDIPMEASURESTRING
  12935. GDIPLUS
  12936. XFCGDIPMEASURESTRINGk
  12937. GdipRestoreGraphics
  12938. GDIPLUS.DLLQ
  12939. xfcGdipRestoreGraphics
  12940. GRAPHICS
  12941. STATE
  12942. GDIPRESTOREGRAPHICS
  12943. GDIPLUS
  12944. XFCGDIPRESTOREGRAPHICSf
  12945. GdipSaveGraphics
  12946. GDIPLUS.DLLQ
  12947. xfcGdipSaveGraphics
  12948. GRAPHICS
  12949. STATE
  12950. GDIPSAVEGRAPHICS
  12951. GDIPLUS
  12952. XFCGDIPSAVEGRAPHICSq
  12953. GdipSetPixelOffsetMode
  12954. GDIPLUS.DLLQ
  12955. xfcGdipSetPixelOffsetMode
  12956. GRAPHICS
  12957. PIXOFFSETMODE
  12958. GDIPSETPIXELOFFSETMODE
  12959. GDIPLUS
  12960. XFCGDIPSETPIXELOFFSETMODE}
  12961. GdipSetRenderingOrigin
  12962. GDIPLUS.DLLQ
  12963. xfcGdipSetRenderingOrigin
  12964. GRAPHICS
  12965. GDIPSETRENDERINGORIGIN
  12966. GDIPLUS
  12967. XFCGDIPSETRENDERINGORIGINm
  12968. GdipSetSmoothingMode
  12969. GDIPLUS.DLLQ
  12970. xfcGdipSetSmoothingMode
  12971. GRAPHICS
  12972. SMOOTHINGMD
  12973. GDIPSETSMOOTHINGMODE
  12974. GDIPLUS
  12975. XFCGDIPSETSMOOTHINGMODEu
  12976. GdipSetStringFormatAlign
  12977. GDIPLUS.DLLQ
  12978. xfcGdipSetStringFormatAlign
  12979. STRINGFORMAT
  12980. ALIGN
  12981. GDIPSETSTRINGFORMATALIGN
  12982. GDIPLUS
  12983. XFCGDIPSETSTRINGFORMATALIGNu
  12984. GdipSetStringFormatFlags
  12985. GDIPLUS.DLLQ
  12986. xfcGdipSetStringFormatFlags
  12987. STRINGFORMAT
  12988. FLAGS
  12989. GDIPSETSTRINGFORMATFLAGS
  12990. GDIPLUS
  12991. XFCGDIPSETSTRINGFORMATFLAGSu
  12992. GdipSetTextRenderingHint
  12993. GDIPLUS.DLLQ
  12994. xfcGdipSetTextRenderingHint
  12995. GRAPHICS
  12996. GDIPSETTEXTRENDERINGHINT
  12997. GDIPLUS
  12998. XFCGDIPSETTEXTRENDERINGHINTo
  12999. GdipSetWorldTransform
  13000. GDIPLUS.DLLQ
  13001. xfcGdipSetWorldTransform
  13002. GRAPHICS
  13003. MATRIX
  13004. GDIPSETWORLDTRANSFORM
  13005. GDIPLUS
  13006. XFCGDIPSETWORLDTRANSFORM
  13007. GdipStringFormatGetGenericTypographic
  13008. GDIPLUS.DLLQ
  13009. xfcGdipStringFormatGetGenericTypographic
  13010. STRINGFORMAT%
  13011. GDIPSTRINGFORMATGETGENERICTYPOGRAPHIC
  13012. GDIPLUS
  13013. XFCGDIPSTRINGFORMATGETGENERICTYPOGRAPHIC
  13014. GdipTransformPoints
  13015. GDIPLUS.DLLQ
  13016. xfcGdipTransformPoints
  13017. GRAPHICS    
  13018. DESTSPACE
  13019. SRCSPACE
  13020. PPOINT
  13021. COUNT
  13022. GDIPTRANSFORMPOINTS
  13023. GDIPLUS
  13024. XFCGDIPTRANSFORMPOINTS
  13025. GdipTransformPointsI
  13026. GDIPLUS.DLLQ
  13027. xfcGdipTransformPointsI
  13028. GRAPHICS    
  13029. DESTSPACE
  13030. SRCSPACE
  13031. PPOINT
  13032. COUNT
  13033. GDIPTRANSFORMPOINTSI
  13034. GDIPLUS
  13035. XFCGDIPTRANSFORMPOINTSIs
  13036. GdipTranslateClip
  13037. GDIPLUS.DLLQ
  13038. xfcGdipTranslateClip
  13039. GRAPHICS
  13040. GDIPTRANSLATECLIP
  13041. GDIPLUS
  13042. XFCGDIPTRANSLATECLIPp
  13043. GdipCloneStringFormat
  13044. GDIPLUS.DLLQ
  13045. xfcGdipCloneStringFormat
  13046. STRINGFORMAT    
  13047. NEWFORMAT
  13048. GDIPCLONESTRINGFORMAT
  13049. GDIPLUS
  13050. XFCGDIPCLONESTRINGFORMAT~
  13051. GdipCreateStringFormat
  13052. GDIPLUS.DLLQ
  13053. xfcGdipCreateStringFormat
  13054. FORMATATTRIBUTES
  13055. LANGUAGE
  13056. STRINGFORMAT
  13057. GDIPCREATESTRINGFORMAT
  13058. GDIPLUS
  13059. XFCGDIPCREATESTRINGFORMATe
  13060. GdipDeleteStringFormat
  13061. GDIPLUS.DLLQ
  13062. xfcGdipDeleteStringFormat
  13063. STRINGFORMAT
  13064. GDIPDELETESTRINGFORMAT
  13065. GDIPLUS
  13066. XFCGDIPDELETESTRINGFORMATv
  13067. GdipGetStringFormatAlign
  13068. GDIPLUS.DLLQ
  13069. xfcGdipGetStringFormatAlign
  13070. STRINGFORMAT
  13071. ALIGN
  13072. GDIPGETSTRINGFORMATALIGN
  13073. GDIPLUS
  13074. XFCGDIPGETSTRINGFORMATALIGN
  13075. GdipGetStringFormatDigitSubstitution
  13076. GDIPLUS.DLLQ
  13077. xfcGdipGetStringFormatDigitSubstitution
  13078. STRINGFORMAT
  13079. LANGUAGE
  13080. SUBSTITUTE$
  13081. GDIPGETSTRINGFORMATDIGITSUBSTITUTION
  13082. GDIPLUS
  13083. XFCGDIPGETSTRINGFORMATDIGITSUBSTITUTIONv
  13084. GdipGetStringFormatFlags
  13085. GDIPLUS.DLLQ
  13086. xfcGdipGetStringFormatFlags
  13087. STRINGFORMAT
  13088. FLAGS
  13089. GDIPGETSTRINGFORMATFLAGS
  13090. GDIPLUS
  13091. XFCGDIPGETSTRINGFORMATFLAGS
  13092. GdipGetStringFormatHotkeyPrefix
  13093. GDIPLUS.DLLQ
  13094. xfcGdipGetStringFormatHotkeyPrefix
  13095. STRINGFORMAT
  13096. HKPREFIX
  13097. GDIPGETSTRINGFORMATHOTKEYPREFIX
  13098. GDIPLUS
  13099. XFCGDIPGETSTRINGFORMATHOTKEYPREFIX~
  13100. GdipGetStringFormatLineAlign
  13101. GDIPLUS.DLLQ
  13102. xfcGdipGetStringFormatLineAlign
  13103. STRINGFORMAT
  13104. ALIGN
  13105. GDIPGETSTRINGFORMATLINEALIGN
  13106. GDIPLUS
  13107. XFCGDIPGETSTRINGFORMATLINEALIGN
  13108. GdipGetStringFormatTabStopCount
  13109. GDIPLUS.DLLQ
  13110. xfcGdipGetStringFormatTabStopCount
  13111. STRINGFORMAT
  13112. COUNT
  13113. GDIPGETSTRINGFORMATTABSTOPCOUNT
  13114. GDIPLUS
  13115. XFCGDIPGETSTRINGFORMATTABSTOPCOUNT
  13116. GdipGetStringFormatTabStops
  13117. GDIPLUS.DLLQ
  13118. xfcGdipGetStringFormatTabStops
  13119. STRINGFORMAT
  13120. COUNT
  13121. FIRSTTABOFFSET
  13122. TABSTOPS
  13123. GDIPGETSTRINGFORMATTABSTOPS
  13124. GDIPLUS
  13125. XFCGDIPGETSTRINGFORMATTABSTOPS|
  13126. GdipGetStringFormatTrimming
  13127. GDIPLUS.DLLQ
  13128. xfcGdipGetStringFormatTrimming
  13129. STRINGFORMAT
  13130. TRIMMING
  13131. GDIPGETSTRINGFORMATTRIMMING
  13132. GDIPLUS
  13133. XFCGDIPGETSTRINGFORMATTRIMMINGu
  13134. GdipSetStringFormatAlign
  13135. GDIPLUS.DLLQ
  13136. xfcGdipSetStringFormatAlign
  13137. STRINGFORMAT
  13138. ALIGN
  13139. GDIPSETSTRINGFORMATALIGN
  13140. GDIPLUS
  13141. XFCGDIPSETSTRINGFORMATALIGN
  13142. GdipSetStringFormatDigitSubstitution
  13143. GDIPLUS.DLLQ
  13144. xfcGdipSetStringFormatDigitSubstitution
  13145. STRINGFORMAT
  13146. LANGUAGE
  13147. SUBSTITUTE$
  13148. GDIPSETSTRINGFORMATDIGITSUBSTITUTION
  13149. GDIPLUS
  13150. XFCGDIPSETSTRINGFORMATDIGITSUBSTITUTIONu
  13151. GdipSetStringFormatFlags
  13152. GDIPLUS.DLLQ
  13153. xfcGdipSetStringFormatFlags
  13154. STRINGFORMAT
  13155. FLAGS
  13156. GDIPSETSTRINGFORMATFLAGS
  13157. GDIPLUS
  13158. XFCGDIPSETSTRINGFORMATFLAGS
  13159. GdipSetStringFormatHotkeyPrefix
  13160. GDIPLUS.DLLQ
  13161. xfcGdipSetStringFormatHotkeyPrefix
  13162. STRINGFORMAT
  13163. HKPREFIX
  13164. GDIPSETSTRINGFORMATHOTKEYPREFIX
  13165. GDIPLUS
  13166. XFCGDIPSETSTRINGFORMATHOTKEYPREFIX}
  13167. GdipSetStringFormatLineAlign
  13168. GDIPLUS.DLLQ
  13169. xfcGdipSetStringFormatLineAlign
  13170. STRINGFORMAT
  13171. ALIGN
  13172. GDIPSETSTRINGFORMATLINEALIGN
  13173. GDIPLUS
  13174. XFCGDIPSETSTRINGFORMATLINEALIGN
  13175. GdipSetStringFormatMeasurableCharacterRanges
  13176. GDIPLUS.DLLQ
  13177. xfcGdipSetStringFormatMeasurableCharacterRanges
  13178. STRINGFORMAT
  13179. RANGECOUNT
  13180. RANGES,
  13181. GDIPSETSTRINGFORMATMEASURABLECHARACTERRANGES
  13182. GDIPLUS
  13183. XFCGDIPSETSTRINGFORMATMEASURABLECHARACTERRANGES
  13184. GdipSetStringFormatTabStops
  13185. GDIPLUS.DLLQ
  13186. xfcGdipSetStringFormatTabStops
  13187. STRINGFORMAT
  13188. FIRSTTABOFFSET
  13189. COUNT
  13190. TABSTOPS
  13191. GDIPSETSTRINGFORMATTABSTOPS
  13192. GDIPLUS
  13193. XFCGDIPSETSTRINGFORMATTABSTOPS{
  13194. GdipSetStringFormatTrimming
  13195. GDIPLUS.DLLQ
  13196. xfcGdipSetStringFormatTrimming
  13197. STRINGFORMAT
  13198. TRIMMING
  13199. GDIPSETSTRINGFORMATTRIMMING
  13200. GDIPLUS
  13201. XFCGDIPSETSTRINGFORMATTRIMMING|
  13202. GdipStringFormatGetGenericDefault
  13203. GDIPLUS.DLLQ
  13204. xfcGdipStringFormatGetGenericDefault
  13205. STRINGFORMAT!
  13206. GDIPSTRINGFORMATGETGENERICDEFAULT
  13207. GDIPLUS
  13208. XFCGDIPSTRINGFORMATGETGENERICDEFAULT
  13209. GdipStringFormatGetGenericTypographic
  13210. GDIPLUS.DLLQ
  13211. xfcGdipStringFormatGetGenericTypographic
  13212. STRINGFORMAT%
  13213. GDIPSTRINGFORMATGETGENERICTYPOGRAPHIC
  13214. GDIPLUS
  13215. XFCGDIPSTRINGFORMATGETGENERICTYPOGRAPHICk
  13216. CreateDC
  13217. WIN32APIQ
  13218. xfcCreateDC
  13219. CDRIVER
  13220. CDEVICE
  13221. LPSZOUTPUT
  13222. LPINITDATA
  13223. CREATEDC
  13224. WIN32API
  13225. XFCCREATEDCF
  13226. DeleteDC
  13227. WIN32APIQ
  13228. xfcDeleteDC
  13229. DELETEDC
  13230. WIN32API
  13231. XFCDELETEDCE
  13232. StartPage
  13233. gdi32Q
  13234. xfcStartPage
  13235. STARTPAGE
  13236. GDI32
  13237. XFCSTARTPAGEA
  13238. EndPage
  13239. gdi32Q
  13240. xfcEndPage
  13241. ENDPAGE
  13242. GDI32
  13243. XFCENDPAGEP
  13244. StartDoc
  13245. gdi32Q
  13246. xfcStartDoc
  13247. STARTDOC
  13248. GDI32
  13249. XFCSTARTDOC?
  13250. EndDoc
  13251. gdi32Q
  13252. xfcEndDoc
  13253. ENDDOC
  13254. GDI32    
  13255. XFCENDDOCY
  13256. GetDeviceCaps
  13257. gdi32Q
  13258. xfcGetDeviceCaps
  13259. NINDEX
  13260. GETDEVICECAPS
  13261. GDI32
  13262. XFCGETDEVICECAPS]
  13263. ScreenToClient
  13264. user32Q
  13265. PR_ScreenToClient
  13266. CPOINT
  13267. SCREENTOCLIENT
  13268. USER32
  13269. PR_SCREENTOCLIENTM
  13270. GetCursorPos
  13271. user32Q
  13272. PR_GetCursorPos
  13273. CPOINT
  13274. GETCURSORPOS
  13275. USER32
  13276. PR_GETCURSORPOSQ
  13277. PathFileExists
  13278. shlwapiQ
  13279. PR_PathFileExists
  13280. PSZPATH
  13281. PATHFILEEXISTS
  13282. SHLWAPI
  13283. PR_PATHFILEEXISTS6
  13284. GetFocus
  13285. user32Q
  13286. PR_GetFocus
  13287. GETFOCUS
  13288. USER32
  13289. PR_GETFOCUSg
  13290. GetWindowText
  13291. user32Q
  13292. PR_GetWindowText
  13293. LPSTRING
  13294. GETWINDOWTEXT
  13295. USER32
  13296. PR_GETWINDOWTEXTD
  13297. GetActiveWindow
  13298. user32Q
  13299. PR_GetActiveWindow
  13300. GETACTIVEWINDOW
  13301. USER32
  13302. PR_GETACTIVEWINDOW
  13303. MAPISendDocuments
  13304. mapi32Q
  13305. PR_MAPISendDocuments
  13306. ULUIPARAM
  13307. LPSZDELIMCHAR
  13308. LPSZFULLPATHS
  13309. LPSZFILENAMES
  13310. ULRESERVED
  13311. MAPISENDDOCUMENTS
  13312. MAPI32
  13313. PR_MAPISENDDOCUMENTS
  13314. NOCONSOLE
  13315. noconsole
  13316. PREVIEW
  13317. preview
  13318. TCCLAUSES    
  13319. LCCLAUSES
  13320. TCPRINTER
  13321. LNBINS
  13322. LCBUFF
  13323. LLDOTMATRIX
  13324. PR_DEVICECAPABILITIES
  13325. LOEXC
  13326. DeviceCapabilities
  13327. WinSpool.drvQ
  13328. PR_DeviceCapabilities
  13329. SPRINTER
  13330. SPORT
  13331. NCAPABILITY
  13332. SRETURN
  13333. PDEVMODE
  13334. DEVICECAPABILITIES
  13335. WINSPOOL
  13336. PR_DEVICECAPABILITIESL
  13337. MessageBeep
  13338. Win32APIQ
  13339. PR_MessageBeep
  13340. NTYPE
  13341. MESSAGEBEEP
  13342. WIN32API
  13343. PR_MESSAGEBEEP*
  13344. HWINDOW
  13345. PR_GETFOCUS
  13346. GETWINTEXT
  13347. HWINDOW    
  13348. LNBUFSIZE
  13349. LCBUFFER
  13350. PR_GETWINDOWTEXTW
  13351. OpenPrinter
  13352. WinSpool.Drv
  13353. TCPRINTERNAME    
  13354. THPRINTER    
  13355. TCDEFAULT
  13356. OPENPRINTER
  13357. WINSPOOL
  13358. ClosePrinter
  13359. WinSpool.Drv
  13360. THPRINTER
  13361. CLOSEPRINTER
  13362. WINSPOOL
  13363. EnumForms
  13364. winspool.drv
  13365. THPRINTER
  13366. TNLEVEL
  13367. TNFORM
  13368. TNBUF
  13369. TNNEEDED
  13370. TNRETURNED    
  13371. ENUMFORMS
  13372. WINSPOOL
  13373. DeviceCapabilities
  13374. winspool.drv
  13375. PDEVICE
  13376. PPORT
  13377. FWCAPABILITY
  13378. POUTPUT
  13379. PDEVMODE
  13380. DEVICECAPABILITIES
  13381. WINSPOOL
  13382. ShellExecute
  13383. SHELL32.Dll
  13384. NWINHANDLE
  13385. COPERATION    
  13386. CFILENAME
  13387. CPARAMETERS
  13388. CDIRECTORY
  13389. NSHOWWINDOW
  13390. SHELLEXECUTE
  13391. SHELL32
  13392. FindWindow
  13393. WIN32API
  13394. CNULL
  13395. CWINNAME
  13396. FINDWINDOW
  13397. WIN32API6
  13398. GetParent
  13399. WIN32API
  13400. NHWND    
  13401. GETPARENT
  13402. WIN32API@
  13403. SetParent
  13404. WIN32API
  13405. HWNDCHILD
  13406. HWNDNEWPARENT    
  13407. SETPARENT
  13408. WIN32APIu
  13409. SetWindowPos
  13410. WIN32API
  13411. HWNDINSERTAFTER
  13412. UFLAGS
  13413. SETWINDOWPOS
  13414. WIN32APIw
  13415. FormatMessage
  13416. kernel32
  13417. DWFLAGS
  13418. LPSOURCE
  13419. DWMESSAGEID
  13420. DWLANGUAGEID
  13421. LPBUFFER
  13422. NSIZE    
  13423. ARGUMENTS
  13424. FORMATMESSAGE
  13425. KERNEL32
  13426. lPrinted_Assign
  13427. lSaved_Assign
  13428. lEmailed_Assign
  13429. cDestFile_Assign
  13430. DoEncrypt
  13431. DoDecryptE
  13432. OpenFile
  13433. UpdateProperties
  13434. UpdateSettingsJ 
  13435. nThermType_Assign-*
  13436. cLanguage_Assign
  13437. SetLanguage
  13438. SetError
  13439. GetLoc30
  13440. DESTROY
  13441. CloseSheets
  13442. AddReport
  13443. CallReport(8
  13444. RestorePrinter
  13445. RunReport
  13446. DoOutputMH
  13447. SendReportToEmail
  13448. ReportReleasedbd
  13449. ClearCache
  13450. SetPrinterrf
  13451. STB_Handler
  13452. AddBarsToMenuxh
  13453. CheckHelperClassR
  13454. ActionShowToolbar    
  13455. actionToolbarVisibilityM
  13456. ActionGotoPagec
  13457. DoCustomPrint/
  13458. DialogPrinting
  13459. ActionClose/
  13460. PreviewUnload
  13461. PreviewUnload2
  13462. HideForm
  13463. RestoreParent
  13464. ActionPrint
  13465. ActionPrintEx 
  13466. SizePages
  13467. DoSetup2
  13468. SetImages
  13469. SHOW`
  13470. RestoreFromResource_Bindh
  13471. HandledError
  13472. SynchPageNo
  13473. RefreshToolbar
  13474. UpdateToolbarF
  13475. ParentClosedn
  13476. DoProof
  13477. CmdSearchVisibility
  13478. DoSearch
  13479. DoSearchAgain
  13480. DoSearchBackz
  13481. HandleFind
  13482. ClearBox
  13483. ScrollToObjectw
  13484. HighLightObject
  13485. RenderPageA
  13486. PAINT;
  13487. DoSaveB
  13488. DoSaveType
  13489. DoMakePDFOfflineH
  13490. DoMakeRTFOffline
  13491. DoMakeXLSOffline
  13492. DoMakeHTMLOffline_old
  13493. DoMakeHTMLOffline
  13494. DoSendEmail
  13495. HandledKeyPress    
  13496. RELEASE;
  13497. DESTROY^
  13498. AdjustControls
  13499. Enabled_Assign
  13500. INTERACTIVECHANGEK!
  13501. CLICK
  13502. DROPDOWN
  13503. VALIDX#
  13504. CLICK7$
  13505. CLICK
  13506. INITN%
  13507. CLICK
  13508. CLICKs&
  13509. MOUSEENTER9'
  13510. MOUSELEAVE
  13511. INITt(
  13512. RIGHTCLICK
  13513. CLICK
  13514. INITt)
  13515. CLICK
  13516. INIT8*
  13517. AdjustControls?*
  13518. Enabled_AssignF*
  13519. CLICK
  13520. CLICK
  13521. CLICKU,
  13522. VALIDt0
  13523. CLICKR1
  13524. spnpageno.LOSTFOCUSQ5
  13525. cmdok.CLICK
  13526. cmdcancel.CLICKK6
  13527. MOUSELEAVE
  13528. MOUSEENTER_7
  13529. CLICK
  13530. CLICKI8
  13531. REFRESH
  13532. RefreshPageBtn
  13533. SetReport
  13534. RESIZE
  13535. ACTIVATE<B
  13536. QUERYUNLOADbB
  13537. nPageSet_assign
  13538. SetProofCaption
  13539. ReportListener_Assign
  13540. nMaxMiniatureItem_Assign,F
  13541. DoResizeProofSheet
  13542. PAINT;I
  13543. DESTROY
  13544. PR_SendMailEx
  13545. getNewSession
  13546. num2dwordHW
  13547. INITsW
  13548. DESTROY
  13549. getAddr
  13550. getValue
  13551. getAllocSize
  13552. setValue
  13553. ReleaseString
  13554. DeclMapiH[
  13555. SEND\]
  13556. ClearErrors
  13557. GetErrorCountTf
  13558. GetErrorzf
  13559. SetConfiguration
  13560. AddError
  13561. AddOneErrorVl
  13562. ERROR
  13563. SetHeader5n
  13564. ClearTherm
  13565. ShowTherm>o
  13566. BEFOREREPORT
  13567. Report2Pic
  13568. SendCDOMail
  13569. SetPrinterPropsZ
  13570. GetCurPath
  13571. PR_SetLanguage
  13572. PR_GetLoc
  13573. GetFormDimensionsQ
  13574. InitM
  13575. cUnit_Assignm
  13576. Destroy
  13577. GetFormList
  13578. ConvertFormDimension
  13579. MarkSupportedForms
  13580. OneFormObjX
  13581. ClearErrors
  13582. LoadApiDlls
  13583. Num2Long
  13584. Long2NumJ
  13585. Long2NumFromBuffer
  13586. Short2Num
  13587. StrZFromBufferm
  13588. StrZFromBufferW%
  13589. StrZCopy(
  13590. RtlPL2PS
  13591. RtlS2PLM
  13592. RtlP2PL
  13593. RtlP2PS
  13594. lstrcpy
  13595. lstrlenW
  13596. lstrlen
  13597. WinApiErrMsg0
  13598. GetVfpVersion0
  13599. DoFoxyTherm
  13600. CreateTherm|
  13601. Destroy
  13602. ClearSetProc:
  13603. ClearSetClassLib(
  13604. ToMHTML
  13605. PR_FRXOUTPUT
  13606. ReportOutputCleanup
  13607. TestListenerReference
  13608. GetSupportedListenerInfo
  13609. ReportOutputConfig:,
  13610. GetConfigObject
  13611. ReportOutputDeclareReference
  13612. UnloadListenerS6
  13613. HandleError
  13614. CheckPublicListenerCollection~8
  13615. Execute
  13616. cLanguage_Assign
  13617. GetLoc
  13618. SendEmailUsingCDO
  13619. PR_MAPIShowMessage
  13620. PR_MAPI_GetMessageText
  13621. PR_XPUTFILE
  13622. xfcGdipDrawString
  13623. xfcGdipMeasureString%K
  13624. xfcGdipRestoreGraphics
  13625. xfcGdipSaveGraphics@M
  13626. xfcGdipSetPixelOffsetMode
  13627. xfcGdipSetRenderingOrigin
  13628. xfcGdipSetSmoothingMode
  13629. xfcGdipSetStringFormatAlignVP
  13630. xfcGdipSetStringFormatFlags)Q
  13631. xfcGdipSetTextRenderingHint
  13632. xfcGdipSetWorldTransform
  13633. xfcGdipStringFormatGetGenericTypographic
  13634. xfcGdipTransformPoints
  13635. xfcGdipTransformPointsI
  13636. xfcGdipTranslateClip
  13637. xfcGdipCloneStringFormatAW
  13638. xfcGdipCreateStringFormat
  13639. xfcGdipDeleteStringFormat
  13640. xfcGdipGetStringFormatAlign
  13641. xfcGdipGetStringFormatDigitSubstitution
  13642. xfcGdipGetStringFormatFlags
  13643. xfcGdipGetStringFormatHotkeyPrefixz\
  13644. xfcGdipGetStringFormatLineAlignm]
  13645. xfcGdipGetStringFormatTabStopCountQ^
  13646. xfcGdipGetStringFormatTabStopsA_
  13647. xfcGdipGetStringFormatTrimmingT`
  13648. xfcGdipSetStringFormatAlign7a
  13649. xfcGdipSetStringFormatDigitSubstitution
  13650. xfcGdipSetStringFormatFlags(c
  13651. xfcGdipSetStringFormatHotkeyPrefix
  13652. xfcGdipSetStringFormatLineAlign
  13653. xfcGdipSetStringFormatMeasurableCharacterRanges
  13654. xfcGdipSetStringFormatTabStops
  13655. xfcGdipSetStringFormatTrimming
  13656. xfcGdipStringFormatGetGenericDefault
  13657. xfcGdipStringFormatGetGenericTypographic
  13658. xfcCreateDC
  13659. xfcDeleteDC
  13660. xfcStartPage
  13661. xfcEndPageql
  13662. xfcStartDoc
  13663. xfcEndDocTm
  13664. xfcGetDeviceCaps
  13665. PR_ScreenToClientHn
  13666. PR_GetCursorPos
  13667. PR_PathFileExistsbo
  13668. PR_GetFocus
  13669. PR_GetWindowTextEp
  13670. PR_GetActiveWindow
  13671. PR_MAPISendDocumentscq
  13672. CleanClausesbr
  13673. IsDotMatrix
  13674. PR_DeviceCapabilities
  13675. PR_MessageBeep
  13676. GetParentWindow
  13677. GetWinText
  13678. OpenPrinter
  13679. ClosePrinter5w
  13680. EnumForms
  13681. DeviceCapabilitiesqx
  13682. ShellExecute?y
  13683. FindWindow
  13684. GetParent
  13685. SetParent
  13686. SetWindowPosK{
  13687. FormatMessage    |
  13688. Printer
  13689. FOXYLISTENER
  13690. wwrite.ico
  13691. ENGLISH
  13692. Printer
  13693. v2.99z30 RC 2013.09.12
  13694. FOXYTHERM
  13695. ?GotData?9FoxIt!!!
  13696. PDFx / FoxyPreviewer
  13697. Helvetica
  13698. CPRINTERNAME
  13699. LSAVETOFILE
  13700. LSENDTOEMAIL
  13701. LPRINTVISIBLE
  13702. LSHOWCOPIES
  13703. LSHOWMINIATURES
  13704. LSHOWCLOSE
  13705. LSHOWPRINTBTN
  13706. LSHOWPAGECOUNT
  13707. LSHOWFILEFORMATICONS
  13708. LPRINTERPREF
  13709. LSAVEASIMAGE
  13710. LSAVEASHTML
  13711. LSAVEASRTF
  13712. LSAVEASXLS
  13713. LSAVEASPDF
  13714. LSAVEASTXT
  13715. LSAVEASMHT
  13716. LQUIETMODE    
  13717. CDESTFILE
  13718. LPRINTED
  13719. LSAVED
  13720. LEMAILED
  13721. NPAGETOTAL
  13722. NCOPIES
  13723. CTITLE
  13724. CTOOLBARTITLE    
  13725. OLISTENER
  13726. CDEFAULTLISTENER
  13727. CSUCCESSOR
  13728. NCANVASCOUNT
  13729. NZOOMLEVEL
  13730. NWINDOWSTATE    
  13731. NDOCKTYPE    
  13732. CFORMICON
  13733. NPREVIEWBACKCOLOR
  13734. LUSELISTENER
  13735. LEMAILAUTO
  13736. CEMAILTYPE    
  13737. CEMAILPRG
  13738. CFAXPRG
  13739. CSAVEDEFNAME
  13740. CSMTPSERVER    
  13741. NSMTPPORT
  13742. LSMTPUSESSL
  13743. CSMTPUSERNAME
  13744. CSMTPPASSWORD
  13745. CEMAILTO
  13746. CEMAILSUBJECT
  13747. CEMAILBODY
  13748. CEMAILFROM
  13749. CEMAILCC    
  13750. CEMAILBCC
  13751. CEMAILREPLYTO
  13752. LAUTOSENDMAIL
  13753. NBUTTONSIZE    
  13754. CCODEPAGE
  13755. LPDFASIMAGE
  13756. NMAXMINIATUREDISPLAY    
  13757. CLANGUAGE
  13758. NSHOWTOOLBAR
  13759. LSHOWSETUP
  13760. LSHOWPRINTERS
  13761. LSHOWSEARCH
  13762. LSILENT
  13763. CERRORS
  13764. LCOMPLETEMODE
  13765. _CLAUSENRANGEFROM
  13766. _CLAUSENRANGETO
  13767. _CLAUSENPRINTRANGEFROM
  13768. _CLAUSENPRINTRANGETO
  13769. _CLAUSELSUMMARY
  13770. _CLAUSECHEADING    
  13771. _CFRXNAME
  13772. _CFRXFULLNAME    
  13773. _OREPORTS    
  13774. _OCLAUSES    
  13775. _OALIASES
  13776. _ONAMES
  13777. _OPROOFSHEET
  13778. _OSETTINGSSHEET
  13779. _OEMAILSHEET
  13780. _CORIGINALPRINTER
  13781. _LSENDTOPRINTER
  13782. _LNOWAIT
  13783. _OLDREPORTOUTPUT
  13784. _OEXHANDLER
  13785. _OCALLER
  13786. _OPARENTFORM
  13787. _DE_NAME
  13788. _OREPORT
  13789. _LSENDINGEMAIL
  13790. _LSENDINGFAX
  13791. _CDEFAULTFOLDER
  13792. _LISDOTMATRIX
  13793. _OLANG
  13794. _NBTSIZE
  13795. _ALANGUAGES
  13796. _ALANGLOCAL
  13797. _LANGINDEX
  13798. _CREPORTENVPRINTERNAME
  13799. COUTPUTPATH
  13800. _COUTPUTALIAS
  13801. _CTEXTTOFIND
  13802. _NINDEX
  13803. _LCANSEARCH
  13804. _LSHOWSEARCHAGAIN
  13805. NPRINTERPROPTYPE
  13806. LDIRECTPRINT
  13807. _TOPFORM
  13808. NVERSION
  13809. CVERSION
  13810. NSEARCHPAGES
  13811. _CTHERMCLASS
  13812. NTHERMTYPE
  13813. NTHERMFORMWIDTH
  13814. CDECRYPTPROCEDURE
  13815. CENCRYPTPROCEDURE    
  13816. CCRYPTKEY
  13817. _CATTACHMENT
  13818. CATTACHMENTS
  13819. LREADRECEIPT    
  13820. LPRIORITY
  13821. NEMAILMODE
  13822. CEMAILBODYFILE
  13823. LPDFEMBEDFONTS
  13824. LPDFCANPRINT
  13825. LPDFCANEDIT
  13826. LPDFCANCOPY
  13827. LPDFCANADDNOTES
  13828. LPDFENCRYPTDOCUMENT
  13829. CPDFMASTERPASSWORD
  13830. CPDFUSERPASSWORD
  13831. LOPENVIEWER
  13832. NPDFPAGEMODE
  13833. LPDFSHOWERRORS
  13834. CPDFSYMBOLFONTSLIST
  13835. CPDFAUTHOR    
  13836. CPDFTITLE
  13837. CPDFSUBJECT
  13838. CPDFKEYWORDS
  13839. CPDFCREATOR
  13840. CPDFDEFAULTFONT
  13841. LPDFREPLACEFONTS
  13842. NPDFLINEHEIGHTRATIO
  13843. CADRESSTABLE
  13844. CADRESSSEARCH
  13845. LEXCELCONVERTTOXLS
  13846. LEXCELREPEATHEADERS
  13847. LEXCELREPEATFOOTERS
  13848. LEXCELHIDEPAGENO
  13849. LEXCELALIGNLEFT
  13850. NEXCELSAVEFORMAT
  13851. _SETUDFPARMS    
  13852. CIMGPRINT
  13853. CIMGPRINTPREF
  13854. CIMGSAVE    
  13855. CIMGCLOSE
  13856. CIMGCLOSE2    
  13857. CIMGEMAIL    
  13858. CIMGSETUP
  13859. CIMGMINIATURES
  13860. CIMGSEARCH
  13861. CIMGSEARCHAGAIN
  13862. CIMGSEARCHBACK
  13863. CIMGPRINTBIG
  13864. CIMGPRINTPREFBIG
  13865. CIMGSAVEBIG
  13866. CIMGCLOSEBIG
  13867. CIMGCLOSE2BIG
  13868. CIMGEMAILBIG
  13869. CIMGSETUPBIG
  13870. CIMGMINIATURESBIG
  13871. CIMGSEARCHBIG
  13872. CIMGSEARCHAGAINBIG
  13873. CIMGSEARCHBACKBIG
  13874. _SETTINGSFILE
  13875. _LALREADYOPENED
  13876. _SYS16
  13877. _CLOCALPATH
  13878. _CORIGREPPREVIEW
  13879. _CLANGLOADED
  13880. _PREVIEWVERSION
  13881. OSETTINGSDLG
  13882. LEXPANDFIELDS
  13883. CPRINTJOBNAME
  13884. CEXCELDEFAULTEXTENSION
  13885. _INITSTATUSTEXT
  13886. _PREPASSSTATUSTEXT
  13887. _RUNSTATUSTEXT
  13888. _SECONDSTEXT
  13889. _CANCELINSTRTEXT
  13890. _CANCELQUERYTEXT
  13891. _REPORTINCOMPLETETEXT
  13892. _ATTENTIONTEXT
  13893. _ERRORSENDINGMAIL
  13894. _MSGNOTSENTTEXT
  13895. _MSGSUCCESSTEXT
  13896. _SENDEMAILTEXT
  13897. _ATTACHNOTFOUNDTEXT
  13898. _SENDINGTEXT
  13899. LREPEATINPAGE
  13900. LREPEATWHENFREE
  13901. CWATERMARKIMAGE
  13902. NWATERMARKTYPE
  13903. NWATERMARKTRANSPARENCY
  13904. NWATERMARKWIDTHRATIO
  13905. NWATERMARKHEIGHTRATIO
  13906. LDOUBLEBYTELANGUAGE
  13907. pr_previous.bmp
  13908. pr_next.bmp
  13909. pr_top.bmp
  13910. pr_bottom.bmp
  13911. pr_Locate.bmp
  13912. pr_Print.bmp
  13913. pr_PrintPref.bmp
  13914. pr_gotopage.bmp
  13915. pr_1page.bmp
  13916. pr_2page.bmp
  13917. pr_4page.bmp
  13918. pr_close.bmp
  13919. pr_close2.bmp
  13920. pr_Save.bmp
  13921. pr_Mail.bmp
  13922. pr_Gear.bmp
  13923. pr_Search.bmp
  13924. pr_SearchAgain.bmp
  13925. pr_SearchBack.bmp
  13926. PREVIEWFORM
  13927. LHIGHLIGHTTEXT
  13928. _CREATINGCANVASES
  13929. IMGBTN_PREV
  13930. IMGBTN_NEXT
  13931. IMGBTN_TOP
  13932. IMGBTN_BOTT
  13933. IMGBTN_MINI
  13934. IMGBTN_PRINT
  13935. IMGBTN_PRINTPREF
  13936. IMGBTN_GOTOPG
  13937. IMGBTN_1PG
  13938. IMGBTN_2PG
  13939. IMGBTN_4PG
  13940. IMGBTN_CLOSE
  13941. IMGBTN_CLOSE2
  13942. IMGBTN_SAVE
  13943. IMGBTN_EMAIL
  13944. IMGBTN_SETUP
  13945. IMGBTN_SEARCH
  13946. IMGBTN_SEARCHAGAIN
  13947. IMGBTN_SEARCHBACK9
  13948. WIDTH
  13949. BORDERWIDTH
  13950. HEIGHT
  13951. VISIBLEA
  13952. CAPTION
  13953. WIDTH
  13954. _GOFP
  13955. _NBTSIZE
  13956. HEIGHT
  13957. SPECIALEFFECTx
  13958. BACKSTYLE
  13959. BORDERWIDTH
  13960. HEIGHT
  13961. WIDTH
  13962. VISIBLE
  13963. SPNCOPIES1    
  13964. SPNCOPIES
  13965. LBLCOPIES1    
  13966. LBLCOPIES
  13967. WIDTH
  13968. HEIGHT
  13969. SPECIALEFFECT    
  13970. INCREMENT
  13971. SPINNERHIGHVALUE
  13972. SPINNERLOWVALUE
  13973. KEYBOARDHIGHVALUE
  13974. KEYBOARDLOWVALUE
  13975. VISIBLE3
  13976. AUTOSIZE    
  13977. BACKSTYLE
  13978. VISIBLE:
  13979. pr_Save.bmp
  13980. PICTURE
  13981. VISIBLEI
  13982. HEIGHT
  13983. WIDTH
  13984. VISIBLE
  13985. NINDEX?
  13986. pr_PrintPref.bmp
  13987. PICTURE
  13988. VISIBLE:
  13989. pr_Gear.bmp
  13990. PICTURE
  13991. VISIBLE:
  13992. pr_Mail.bmp
  13993. PICTURE
  13994. VISIBLEO
  13995. pr_close.bmp
  13996. PICTURE
  13997. VISIBLEO
  13998. pr_Print.bmp
  13999. PICTURE
  14000. VISIBLE>
  14001. pr_gotopage.bmp
  14002. PICTURE
  14003. VISIBLEz
  14004. BACKSTYLE
  14005. BORDERWIDTH
  14006. HEIGHT
  14007. WIDTH
  14008. VISIBLE
  14009. CMDSEARCH1    
  14010. CMDSEARCH
  14011. CMDSEARCHAGAIN1
  14012. CMDSEARCHAGAIN
  14013. CMDSEARCHBACK1
  14014. CMDSEARCHBACK<
  14015. pr_Search.bmp
  14016. PICTURE
  14017. VISIBLEA
  14018. pr_SearchAgain.bmp
  14019. PICTURE
  14020. VISIBLE@
  14021. pr_SearchBack.bmp
  14022. PICTURE
  14023. VISIBLE
  14024. 220,140
  14025. WIDTH
  14026. COLUMNCOUNT
  14027. COLUMNLINES
  14028. ROWSOURCETYPE
  14029. COLUMNWIDTHS
  14030. STYLE
  14031. VISIBLE
  14032. _CORIGINALPRINTER<
  14033. pr_Locate.bmp
  14034. PICTURE
  14035. VISIBLE
  14036. BACKSTYLE
  14037. BORDERWIDTH
  14038. frxgotopageform
  14039. spnPageno
  14040. lblCaption
  14041. cmdOK
  14042. cmdCancel
  14043. DESKTOP
  14044. HEIGHT
  14045. WIDTH
  14046. SHOWWINDOW
  14047. DOCREATE
  14048. AUTOCENTER
  14049. BORDERSTYLE
  14050. CLOSABLE    
  14051. MAXBUTTON    
  14052. MINBUTTON
  14053. ALWAYSONTOP
  14054. ALLOWOUTPUT
  14055. PAGENO    
  14056. PAGETOTAL
  14057. OPARENTFORM
  14058. SHAPE
  14059. LEFT    
  14060. BACKSTYLE    
  14061. ZORDERSET
  14062. STYLE    
  14063. SPNPAGENO
  14064. SPINNER    
  14065. INPUTMASK
  14066. LBLCAPTION
  14067. LABEL
  14068. AUTOSIZE
  14069. CMDOK    
  14070. CMDREPORT
  14071. DEFAULT
  14072. SPECIALEFFECT    
  14073. CMDCANCEL
  14074. CANCEL/
  14075. wwrite.ico
  14076. SHOWTIPS_
  14077. proofshape
  14078. HEIGHT
  14079. WIDTH
  14080. PAGENO
  14081. NAMEU
  14082. HEIGHT
  14083. _GOFP
  14084. _NBTSIZE
  14085. WIDTH
  14086. CAPTION
  14087. CTYPE
  14088. proofsheet
  14089. HEIGHT
  14090. WIDTH
  14091. SCROLLBARS
  14092. DOCREATE
  14093. AUTOCENTER
  14094. SHOWWINDOW
  14095. DESKTOP
  14096. CURRENTPAGE
  14097. REPORTLISTENER
  14098. LSTARTED
  14099. NPAGES
  14100. LPAINTED
  14101. NCURRSHAPE
  14102. NPAGESET    
  14103. LSHOWDONE    
  14104. LINACTIVE
  14105. NOTHERTHENPROOFOBJ
  14106. NMAXMINIATUREITEM
  14107. OLDESCFUNCTIONP
  14108. VFP CDO 2000(CDOSYS) mailer Ver 1.1 2009
  14109. AERRORS
  14110. NERRORCOUNT
  14111. CXMAILER
  14112. CFROM
  14113. CREPLYTO
  14114. CATTACHMENT
  14115. CSUBJECT    
  14116. CHTMLBODY    
  14117. CTEXTBODY
  14118. CHTMLBODYURL
  14119. CCHARSET
  14120. CSERVER
  14121. NSERVERPORT
  14122. LUSESSL
  14123. NCONNECTIONTIMEOUT
  14124. NAUTHENTICATE    
  14125. CUSERNAME    
  14126. CPASSWORD
  14127. LURLGETLATESTVERSION
  14128. LREADRECEIPT    
  14129. LPRIORITY
  14130. OTHERMFORM
  14131. SHOWWINDOW'
  14132. CDESTFILE
  14133. LISTENERTYPE%
  14134. Internal
  14135. ffffff9@
  14136. HHEAP
  14137. NINCH2MM
  14138. NCM2MM
  14139. NCOEFFICIENT
  14140. CPRINTERNAME
  14141. CUNIT
  14142. NROUND
  14143. CAPIERRORMESSAGE
  14144. CERRORMESSAGE    
  14145. OFORMLIST
  14146. OWAS    
  14147. CFORMNAME
  14148. NFORMNUMBERI
  14149. SHOWWINDOW
  14150. SHOWINTASKBARD
  14151. DATASESSION
  14152. VISIBLE
  14153. ALLOWOUTPUT
  14154. CLANGUAGE
  14155. PreviewHelper
  14156. CUSTOM}
  14157. ExtensionHandler
  14158. CUSTOMR
  14159. BoxLine
  14160. Line}
  14161. cmdReport
  14162. COMMANDBUTTON
  14163. cntCopies    
  14164. CONTAINER\
  14165. spnCopies
  14166. SPINNER6
  14167. lblCopies
  14168. LABEL>
  14169. cmdSave    
  14170. cmdReport
  14171. cmbSave
  14172. COMBOBOX
  14173. cmdPrinterProps    
  14174. cmdReportU
  14175. cmdSetup    
  14176. cmdReport
  14177. cmdEmail    
  14178. cmdReport
  14179. cmdExit    
  14180. cmdReportJ
  14181. cmdPrintEx    
  14182. cmdReport
  14183. cmdGotoEx    
  14184. cmdReport
  14185. cntSearch    
  14186. CONTAINERh
  14187. cmdSearch    
  14188. cmdReportm
  14189. cmdSearchAgain    
  14190. cmdReport
  14191. cmdSearchBack    
  14192. cmdReport
  14193. cmbPrinters
  14194. COMBOBOXl
  14195. cmdProof    
  14196. cmdReportS
  14197. cntCanvas    
  14198. Container
  14199. CustomFrxGotoPageForm    
  14200. frmReport
  14201. frmReport
  14202. proofshape
  14203. SHAPEO
  14204. PageSetBtn
  14205. COMMANDBUTTON
  14206. proofsheet    
  14207. frmReportX
  14208. PChar
  14209. CUSTOM
  14210. cdo2000
  14211. CUSTOM-
  14212. ITLFForm
  14213. Form\
  14214. ExportListener
  14215. REPORTLISTENER|
  14216. EnumPrinterForms
  14217. Custom
  14218. WinApiSupport
  14219. Customw
  14220. ATLForm
  14221. FoxyInitForm
  14222. Customi
  14223. Customz
  14224. aWM_J6_K8_L9_M:_M;_M<^L8\^`
  14225.                             
  14226.                             
  14227. u5s5s-3-3m
  14228. V                
  14229. ^[                    
  14230. AAx;<x;<r99n67
  14231. D$G2!
  14232. 91r99
  14233. q[KG<4
  14234. =5x;<
  14235. G<4G<4
  14236. B<}>>
  14237. q[Kq[Kq[Kq[Kq[Kq[KvbR}j[
  14238. R?g33
  14239. opBM6
  14240. 'Cv%H
  14241. \deDl
  14242. ???%%%%%%%%%%%%%%%%%%%%%%%%
  14243. xuuuss
  14244. zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
  14245. bH4bH4bH4bH4bH4bH4bH4bH4bH4bH4bH4bH4bH4
  14246. Y0k<&
  14247. cI5cI5cI5
  14248. teKg|~
  14249. !This program cannot be run in DOS mode.
  14250. .text
  14251. `.rdata
  14252. @.data
  14253. .rsrc
  14254. @.reloc
  14255. T$$A;
  14256. T$    ~s
  14257. F<!r4<~w0<\t,<%t(<#t$</t <(t
  14258. r4<~w0<\t,<%t(<#t$</t <(t
  14259. L$ QW
  14260. T$ RW
  14261. T$TRU
  14262. L$PQV
  14263. D$TPU
  14264. L$PQV
  14265. 8MRTSu
  14266. tHj0j
  14267. t:j0j
  14268. VWj0S
  14269. L$/QR@P
  14270. L$;QhD
  14271. T$(RP
  14272. T$(QRP
  14273. u%j W
  14274. L$(QW
  14275. T$<RW
  14276. D$PPW
  14277. t@j0j
  14278. y#^][
  14279. ]_^[Y
  14280. ]_^[Y
  14281. ]_^[Y
  14282. V$UQSR
  14283. ]_^[Y
  14284. L$$SQ
  14285. T$WRh
  14286. D$DPW
  14287. L$CQRP
  14288. T$[Rh
  14289. D$HPW
  14290. D$DPW
  14291. t ^[_
  14292. D$0PS
  14293. 8DCNEu
  14294. @Af;F
  14295. 8DCNEu    
  14296. 8DCNEt
  14297. ?DCNEt
  14298. 8DCNEt
  14299. 8DCNEu
  14300. Pt<It'It
  14301. VWt    S
  14302. L$4j<U
  14303. T$,RP
  14304. L$$QR
  14305. D$ r7
  14306. T$<RP
  14307. D$<PQ
  14308. VWj!S
  14309. Ws/Qj
  14310. D$0j 
  14311. t$dWj 
  14312. D$$vT2
  14313. D$(vT2
  14314. D$\vT2
  14315. D$$PV
  14316. D$ vT2
  14317. ~,PQV
  14318. D$(PQ
  14319. uH+|$
  14320. L$ VQ
  14321. T$3UR
  14322. D$8PW
  14323. 0^_][
  14324. ][_^Y
  14325. t-[_^]
  14326. L$<QR
  14327. t+[_^]
  14328. L$$QW
  14329. L$<QW
  14330. L$TQW
  14331. D$ PW
  14332. D$8PW
  14333. D$PPW
  14334. L$ PW
  14335. D$8PW
  14336. D$PPW
  14337. L$LQR
  14338. L$LQR
  14339. D$4PV
  14340. D$LPV
  14341. D$4PV
  14342. D$LPV
  14343. D$4PV
  14344. D$LPV
  14345. D$4PV
  14346. D$LPV
  14347. L$$QS
  14348. L$<QS
  14349. L$,QS
  14350. D$(u V
  14351. L$<QR
  14352. L$$QV
  14353. D$$PV
  14354. T$ RV
  14355. L$0QV
  14356. L$(QV
  14357. D$,SUVW
  14358. \$ t;j
  14359. D$ f=
  14360. T$$VRf
  14361. D$ ;D$
  14362. t$<    t <
  14363. D$ hT4
  14364. tO<    tK<
  14365. t?< t;
  14366. L$$hH4
  14367. L$$h@4
  14368. T$$h04
  14369. D$$h$4
  14370. u0QRP
  14371. SUVW3
  14372. T$0RP
  14373. t$(VR
  14374. T$(RP
  14375. SVWu4
  14376. QSUVW
  14377. _^][Y
  14378. T$ VR
  14379. _^][Y
  14380. _^][Y
  14381. _^][Y
  14382. _^][Y
  14383. _^][Y
  14384. _^][Y
  14385. T$8RW
  14386. D$8PW
  14387. D$ PW
  14388. D$ PW
  14389. D$8PhH4
  14390. _^][Y
  14391. D$$PU
  14392. L$$QU
  14393. L$0UQ
  14394. T$$WR
  14395. T$0VR
  14396. L$4QhH4
  14397. U$WhL
  14398. D$(SUVW
  14399. D$<VP
  14400. L$(QU
  14401. T$ RU
  14402. |$DSW
  14403. D$4PU
  14404. T$,GRU
  14405. L$H@;
  14406. T$4Ph
  14407. L$8h@
  14408. D$XPQ
  14409. D$ h0
  14410. D$4PQ
  14411. D$@hp
  14412. D$(h`
  14413. D$TPQ
  14414. D$ h@
  14415. T$@RP
  14416. D$@PQ
  14417. T$XRP
  14418. T$@RP
  14419. D$8PQ
  14420. L$(QR
  14421. T$4RP
  14422. T$DRP
  14423. D$(PQ
  14424. L$(QR
  14425. D$DPQ
  14426. D$ hd
  14427. D$(PQ
  14428. D$ hT
  14429. T$ UR
  14430. T$ VR
  14431. T$8RQ
  14432. L$(WU
  14433. T$(h$
  14434. 8FDPAu
  14435. 8FDPAu)
  14436. >FDPAu$
  14437. N`RPQ
  14438. 8FDPAu$
  14439. >FDPAt    
  14440. >FDPAu!
  14441. >FDPAu$
  14442. >FDPAu$
  14443. 8FDPAu!
  14444. 8FDPAuN
  14445. >FDPAu$
  14446. >FDPAu$
  14447. V$WSR
  14448. 8FDPAt
  14449. WLSVR
  14450. ?FDPAu$
  14451. WPSVR
  14452. ?FDPAu$
  14453. 8FDPAu!
  14454. SUVW3
  14455. >FDPAu(
  14456. HtGHt
  14457. >FDPAu$
  14458. ^Du!j
  14459. ^Du!j
  14460. >FDPAu$
  14461. >FDPAu$
  14462. >FDPAu$
  14463. 8FDPAu!
  14464. 8FDPAu$
  14465. 8FDPAu!
  14466. 8FDPAu$
  14467. >FDPAu$
  14468. 8FDPAu!
  14469. 8FDPAu$
  14470. >FDPAu$
  14471. >FDPAu!
  14472. L$8QP
  14473. >FDPAu$
  14474. 8FDPAu$
  14475. 8FDPAt
  14476. 8FDPAt
  14477. 8FDPAt
  14478. 8FDPAu
  14479. >FDPA
  14480. ;FDPAu1S
  14481. >FDPAu$
  14482. ^h[_3
  14483. V`QPR
  14484. F(_^[
  14485. >FDPAu$
  14486. >FDPAu$
  14487. >FDPAu$
  14488. t ;Flw
  14489. >FDPAu*
  14490. =FDPAt    
  14491. >FDPAu(
  14492. _[t    U
  14493. >FDPAu$
  14494. >FDPAu$
  14495. >FDPAt
  14496. L$,RPQ
  14497. L$<PQV
  14498. t!_^[
  14499. t!_^[
  14500. O,WSP
  14501. SWUh\
  14502. ttWhX
  14503. D$(PQ
  14504. D$(PQ
  14505. D$(PQ
  14506. \$@VS
  14507. t$0Wh
  14508. T$(RP
  14509. D$$t,
  14510. D$(PQ
  14511. T$8RP
  14512. T$8RP
  14513. T$8RP
  14514. T$ RP
  14515. T$0RP
  14516. T$8RP
  14517. T$8RP
  14518. T$ RP
  14519. T$DRP
  14520. T$DRP
  14521. |$$WP
  14522. |$$WP
  14523. |$$WP
  14524. |$$WP
  14525. F,SUWh
  14526. D$ PQ
  14527. T$0RP
  14528. |$ WP
  14529. |$ WP
  14530. F,SUWh
  14531. D$ PQ
  14532. @SUWQ
  14533. T$HRP
  14534. VLSWR
  14535. NLPSWQ
  14536. ^(^_[
  14537. N,_]3
  14538. N0_]3
  14539. QRWUP
  14540. VRPWUQ
  14541. u    _^]
  14542. T$LQRV
  14543. T$TRj
  14544. D$dPUV
  14545. T$,RW
  14546. L$$QW
  14547. D$LPV
  14548. D$PPV
  14549. L$PQV
  14550. D$TPj
  14551. D$(PV
  14552. L$4QV
  14553. D$(PV
  14554. L$4QV
  14555. T$@RV
  14556. D$(PV
  14557. L$4QV
  14558. T$@RV
  14559. T$ Rh
  14560. T$$QRW
  14561. L$$QW
  14562. T$ RU
  14563. D$ PU
  14564. L$ QU
  14565. \$ uR
  14566. L$(Rhx
  14567. V$PQR
  14568. T$$RV
  14569. D$0PV
  14570. L$<QV
  14571. T$HRV
  14572. D$TPV
  14573.  SUW3
  14574. F$QRP
  14575. N$SPQ
  14576. tQVhx
  14577. L$(IQV
  14578. L$ PQ
  14579. D$$PS
  14580. Sj VW
  14581. 0:@j?Q
  14582. )QWh`
  14583. SVWPQj
  14584. _^][Y
  14585. _^][Y
  14586. Eh_^][Y
  14587. El@u    U
  14588. MxQRU
  14589. BPARQVU
  14590. @PQRU
  14591. SUVW3
  14592. _^][Y
  14593. \$HUVWt
  14594. l$(u[
  14595. HtpHtAHt
  14596. T$0t^Ht/Hur
  14597. Fp@t=
  14598. \$,v~
  14599. HHIIN
  14600. T$0W3
  14601. :D$$u
  14602. :D$,u
  14603. D$$GH
  14604. f;D$,
  14605. f;D$(u    
  14606. D$(FH
  14607. D$@GFH
  14608. |$4u    f;
  14609. D$,FGH
  14610. D$HFA
  14611. f;t$ u
  14612. L$Df3
  14613. L$4f3
  14614. L$$f;q
  14615. u8f;y
  14616. u2f;i
  14617. u9f;U
  14618. u3f;u
  14619. _^][Y
  14620. \$ HIK
  14621. _^][Y
  14622. _^][Y
  14623. _^][Y
  14624. _^][Y
  14625. _^][Y
  14626. D$ w93
  14627. GTPVj
  14628. |$PVU
  14629. L$TQU
  14630. |$Lu&VU
  14631. T$TRU
  14632. D$TPU
  14633. T$DQURV
  14634. $_^][
  14635. _^][Y
  14636. _^][Y
  14637. _^][Y
  14638. _^][Y
  14639. _^][Y
  14640.  t h@
  14641. D$L=x
  14642. L$$UR
  14643. D$`QRPV
  14644. QSUVW
  14645. _^][Y
  14646. _^][Y
  14647. _^][Y
  14648. _^][Y
  14649. _^][Y
  14650. D$ VUSPW
  14651. _^][Y
  14652. _^][Y
  14653. l$,VUW
  14654. RPWSV
  14655. RPWSV
  14656. T$0RS
  14657. ;t$(w
  14658. ;t$(w
  14659. t$0UQ
  14660. T$<PQVRS
  14661. D$$PQ
  14662. D$$GPW
  14663. L$4RPQS
  14664. L$ QS
  14665. QSUVW
  14666. _^][Y
  14667. _^][Y
  14668. QVRSUW
  14669. _^][Y
  14670. _^][Y
  14671. \$ UV
  14672.  u'US
  14673. D$4PS
  14674. t$4VS
  14675. t$ VPS
  14676.  u+US
  14677. <ArE<zwA<Zv
  14678. <Ar2<zw.<Zv
  14679. SUVWuV
  14680. D$,VW3
  14681. ExPRU
  14682. Eh_^][Y
  14683. Fl_^][
  14684. 8U    uA
  14685. L$Th\
  14686. T$Th(
  14687. t$(VU
  14688. L$(@;
  14689. W(9W$u
  14690. tv9_ tq9_$tl
  14691. U0PQR
  14692. U0PQR
  14693. U0PQR
  14694. U0PQR
  14695. S0UQR
  14696. K0UPQ
  14697. _^][Y
  14698. _^][Y
  14699. l$ VW
  14700. D$(8D
  14701. Nxf+Fd
  14702. _^][Y
  14703. _^][Y
  14704. ~(9~$u
  14705. N(h0%
  14706. D$(PQ
  14707. D$(PQ
  14708. D$(PQ
  14709. T$8t=
  14710. L$,t,
  14711. T$8t!
  14712. S@;Q 
  14713. L$,t,
  14714. T$8t!
  14715. S@;Q(
  14716. KpPQj
  14717. DSpQPj
  14718. T$,AB
  14719. L$(Pt
  14720. L$8;K
  14721. D$TRP
  14722. D$4_^][
  14723. 9s4u(
  14724. K,_^][
  14725. K,_^]3
  14726. |$ WUSV
  14727. @APQV
  14728. T$ RV
  14729. D$$SUV
  14730. D$0tc
  14731. _^][Y
  14732. D$DSU
  14733. L$Xt5;
  14734. L$XJ#
  14735. l$XI;
  14736. ;l$(s^;t$,sX
  14737. DDLJu
  14738. L\Lf9t\L
  14739. |$ AB
  14740. u.;5l
  14741. YYt,V
  14742. C =02CVu
  14743. B 02CV
  14744. VC20XC00U
  14745. YYt-V
  14746.     9x4t
  14747.     9x0t
  14748.     9x@t
  14749. YYt+V
  14750. btFHt+
  14751. u79=P
  14752. Y]_^[
  14753. QQSVW3
  14754. @PVSS
  14755. t#SSUP
  14756. t$$VSS
  14757. _^][YY
  14758. HHt`HHt\
  14759. SVWUj
  14760. t.;t$$t(
  14761. HHtjHHtF
  14762. VWj Y
  14763. SVWj ^
  14764. F,98uX
  14765. VWumh`M
  14766. t|hDM
  14767. v    N+D$
  14768. t]HtN
  14769. t:Ht+
  14770. t5Ht&Ht
  14771. t5Ht&-=
  14772. t6Ht*Ht
  14773. t+Ht$Ht
  14774. +t"HHt
  14775.     j    XO
  14776. j8h0S
  14777. u8SS3
  14778. FVh,S
  14779. t!SS9]
  14780. u.hdS
  14781. PPPPPPPP
  14782. GWh,S
  14783. PPPPPPPP
  14784. wLVWP
  14785. It    Iu*
  14786. WWWWVSW
  14787. t2WWVPVSW
  14788. LSVWj
  14789. xd;=L
  14790. F1.2.3
  14791. false
  14792. Length
  14793. endstream
  14794. stream
  14795. DCTDecode
  14796. FlateDecode
  14797. Filter
  14798. %%EOF
  14799. startxref
  14800. trailer
  14801. endobj
  14802.    ! 
  14803.  &   ! 
  14804.  &   ! 
  14805.  &   ! 
  14806.  &   ! 
  14807.  &   ! 
  14808.  &   ! 
  14809.  &   ! 
  14810.  &   ! 
  14811.  &   ! 
  14812.  &   ! 
  14813. %$%,%4%<%
  14814. "H"d"e"
  14815. P%Q%R%Q
  14816. S%T%U%V%W%X%Y%Z%[%\%]%^%_%`%a%
  14817. b%c%d%e%f%g%h%i%j%k%l%
  14818. KOI8-R
  14819. CP1258
  14820. CP1257
  14821. CP1256
  14822. CP1255
  14823. CP1254
  14824. CP1253
  14825. CP1252
  14826. CP1251
  14827. CP1250
  14828. ISO8859-16
  14829. ISO8859-15
  14830. ISO8859-14
  14831. ISO8859-13
  14832. ISO8859-11
  14833. ISO8859-10
  14834. ISO8859-9
  14835. ISO8859-8
  14836. ISO8859-7
  14837. ISO8859-6
  14838. ISO8859-5
  14839. ISO8859-4
  14840. ISO8859-3
  14841. ISO8859-2
  14842. WinAnsiEncoding
  14843. MacRomanEncoding
  14844. StandardEncoding
  14845. FontSpecific
  14846. afii57700
  14847. afii57723
  14848. afii57695
  14849. afii57694
  14850. afii57705
  14851. bracerightbt
  14852. bracerightmid
  14853. bracerighttp
  14854. bracketrightbt
  14855. bracketrightex
  14856. bracketrighttp
  14857. parenrightbt
  14858. parenrightex
  14859. parenrighttp
  14860. integralex
  14861. braceex
  14862. braceleftbt
  14863. braceleftmid
  14864. bracelefttp
  14865. bracketleftbt
  14866. bracketleftex
  14867. bracketlefttp
  14868. parenleftbt
  14869. parenleftex
  14870. parenlefttp
  14871. trademarksans
  14872. copyrightsans
  14873. registersans
  14874. arrowhorizex
  14875. arrowvertex
  14876. radicalex
  14877. Ydieresissmall
  14878. Thornsmall
  14879. Yacutesmall
  14880. Udieresissmall
  14881. Ucircumflexsmall
  14882. Uacutesmall
  14883. Ugravesmall
  14884. Oslashsmall
  14885. Odieresissmall
  14886. Otildesmall
  14887. Ocircumflexsmall
  14888. Oacutesmall
  14889. Ogravesmall
  14890. Ntildesmall
  14891. Ethsmall
  14892. Idieresissmall
  14893. Icircumflexsmall
  14894. Iacutesmall
  14895. Igravesmall
  14896. Edieresissmall
  14897. Ecircumflexsmall
  14898. Eacutesmall
  14899. Egravesmall
  14900. Ccedillasmall
  14901. AEsmall
  14902. Aringsmall
  14903. Adieresissmall
  14904. Atildesmall
  14905. Acircumflexsmall
  14906. Aacutesmall
  14907. Agravesmall
  14908. questiondownsmall
  14909. Cedillasmall
  14910. Acutesmall
  14911. Macronsmall
  14912. Dieresissmall
  14913. centoldstyle
  14914. exclamdownsmall
  14915. Zsmall
  14916. Ysmall
  14917. Xsmall
  14918. Wsmall
  14919. Vsmall
  14920. Usmall
  14921. Tsmall
  14922. Ssmall
  14923. Rsmall
  14924. Qsmall
  14925. Psmall
  14926. Osmall
  14927. Nsmall
  14928. Msmall
  14929. Lsmall
  14930. Ksmall
  14931. Jsmall
  14932. Ismall
  14933. Hsmall
  14934. Gsmall
  14935. Fsmall
  14936. Esmall
  14937. Dsmall
  14938. Csmall
  14939. Bsmall
  14940. Asmall
  14941. Gravesmall
  14942. questionsmall
  14943. nineoldstyle
  14944. eightoldstyle
  14945. sevenoldstyle
  14946. sixoldstyle
  14947. fiveoldstyle
  14948. fouroldstyle
  14949. threeoldstyle
  14950. twooldstyle
  14951. oneoldstyle
  14952. zerooldstyle
  14953. ampersandsmall
  14954. dollaroldstyle
  14955. exclamsmall
  14956. Zcaronsmall
  14957. Tildesmall
  14958. Scaronsmall
  14959. Ringsmall
  14960. Ogoneksmall
  14961. OEsmall
  14962. Lslashsmall
  14963. Hungarumlautsmall
  14964. Dotaccentsmall
  14965. Circumflexsmall
  14966. Caronsmall
  14967. Brevesmall
  14968. tsuperior
  14969. ssuperior
  14970. rsuperior
  14971. osuperior
  14972. msuperior
  14973. lsuperior
  14974. isuperior
  14975. esuperior
  14976. dsuperior
  14977. bsuperior
  14978. asuperior
  14979. periodsuperior
  14980. periodinferior
  14981. hyphensuperior
  14982. hypheninferior
  14983. dollarsuperior
  14984. dollarinferior
  14985. commasuperior
  14986. commainferior
  14987. centsuperior
  14988. centinferior
  14989. threequartersemdash
  14990. rupiah
  14991. onefitted
  14992. trademarkserif
  14993. registerserif
  14994. copyrightserif
  14995. dieresisgrave
  14996. dieresisacute
  14997. dblgrave
  14998. cyrflex
  14999. cyrbreve
  15000. dblGrave
  15001. cyrFlex
  15002. cyrBreve
  15003. Macron
  15004. Hungarumlaut
  15005. Grave
  15006. DieresisGrave
  15007. DieresisAcute
  15008. Dieresis
  15009. Caron
  15010. Acute
  15011. afii10832
  15012. afii10831
  15013. afii10192
  15014. afii10064
  15015. afii10063
  15016. commaaccent
  15017. dotlessj
  15018. musicalnotedbl
  15019. musicalnote
  15020. diamond
  15021. heart
  15022. spade
  15023. female
  15024. invsmileface
  15025. smileface
  15026. openbullet
  15027. invcircle
  15028. invbullet
  15029. H18533
  15030. circle
  15031. lozenge
  15032. triaglf
  15033. triagdn
  15034. triagrt
  15035. triagup
  15036. filledrect
  15037. H18551
  15038. H18543
  15039. H22073
  15040. filledbox
  15041. dkshade
  15042. shade
  15043. ltshade
  15044. rtblock
  15045. lfblock
  15046. block
  15047. dnblock
  15048. upblock
  15049. SF440000
  15050. SF530000
  15051. SF540000
  15052. SF400000
  15053. SF460000
  15054. SF450000
  15055. SF410000
  15056. SF480000
  15057. SF470000
  15058. SF230000
  15059. SF200000
  15060. SF190000
  15061. SF420000
  15062. SF370000
  15063. SF360000
  15064. SF260000
  15065. SF270000
  15066. SF280000
  15067. SF380000
  15068. SF490000
  15069. SF500000
  15070. SF250000
  15071. SF210000
  15072. SF220000
  15073. SF390000
  15074. SF520000
  15075. SF510000
  15076. SF240000
  15077. SF430000
  15078. SF050000
  15079. SF070000
  15080. SF060000
  15081. SF090000
  15082. SF080000
  15083. SF040000
  15084. SF020000
  15085. SF030000
  15086. SF010000
  15087. SF110000
  15088. SF100000
  15089. angleright
  15090. angleleft
  15091. integralbt
  15092. integraltp
  15093. revlogicalnot
  15094. house
  15095. dotmath
  15096. perpendicular
  15097. circlemultiply
  15098. circleplus
  15099. reflexsuperset
  15100. reflexsubset
  15101. notsubset
  15102. propersuperset
  15103. propersubset
  15104. greaterequal
  15105. lessequal
  15106. equivalence
  15107. notequal
  15108. approxequal
  15109. congruent
  15110. similar
  15111. therefore
  15112. integral
  15113. union
  15114. intersection
  15115. logicalor
  15116. logicaland
  15117. angle
  15118. orthogonal
  15119. infinity
  15120. proportional
  15121. radical
  15122. asteriskmath
  15123. minus
  15124. summation
  15125. product
  15126. suchthat
  15127. notelement
  15128. element
  15129. gradient
  15130. emptyset
  15131. existential
  15132. partialdiff
  15133. universal
  15134. arrowdblboth
  15135. arrowdbldown
  15136. arrowdblright
  15137. arrowdblup
  15138. arrowdblleft
  15139. carriagereturn
  15140. arrowupdnbse
  15141. arrowupdn
  15142. arrowboth
  15143. arrowdown
  15144. arrowright
  15145. arrowup
  15146. arrowleft
  15147. seveneighths
  15148. fiveeighths
  15149. threeeighths
  15150. oneeighth
  15151. twothirds
  15152. onethird
  15153. aleph
  15154. estimated
  15155. trademark
  15156. prescription
  15157. Rfraktur
  15158. weierstrass
  15159. afii61352
  15160. afii61289
  15161. Ifraktur
  15162. afii61248
  15163. afii57636
  15164. peseta
  15165. franc
  15166. colonmonetary
  15167. parenrightinferior
  15168. parenleftinferior
  15169. nineinferior
  15170. eightinferior
  15171. seveninferior
  15172. sixinferior
  15173. fiveinferior
  15174. fourinferior
  15175. threeinferior
  15176. twoinferior
  15177. oneinferior
  15178. zeroinferior
  15179. nsuperior
  15180. parenrightsuperior
  15181. parenleftsuperior
  15182. ninesuperior
  15183. eightsuperior
  15184. sevensuperior
  15185. sixsuperior
  15186. fivesuperior
  15187. foursuperior
  15188. zerosuperior
  15189. fraction
  15190. exclamdbl
  15191. guilsinglright
  15192. guilsinglleft
  15193. second
  15194. minute
  15195. perthousand
  15196. afii61575
  15197. afii61574
  15198. afii61573
  15199. ellipsis
  15200. twodotenleader
  15201. onedotenleader
  15202. bullet
  15203. daggerdbl
  15204. dagger
  15205. quotedblbase
  15206. quotedblright
  15207. quotedblleft
  15208. quotereversed
  15209. quotesinglbase
  15210. quoteright
  15211. quoteleft
  15212. underscoredbl
  15213. afii00208
  15214. emdash
  15215. endash
  15216. figuredash
  15217. afii300
  15218. afii299
  15219. afii301
  15220. afii61664
  15221. ygrave
  15222. Ygrave
  15223. wdieresis
  15224. Wdieresis
  15225. wacute
  15226. Wacute
  15227. wgrave
  15228. Wgrave
  15229. afii57534
  15230. afii57519
  15231. afii57514
  15232. afii57509
  15233. afii57505
  15234. afii57508
  15235. afii57513
  15236. afii57512
  15237. afii57507
  15238. afii57506
  15239. afii57511
  15240. afii63167
  15241. afii57381
  15242. afii57401
  15243. afii57400
  15244. afii57399
  15245. afii57398
  15246. afii57397
  15247. afii57396
  15248. afii57395
  15249. afii57394
  15250. afii57393
  15251. afii57392
  15252. afii57458
  15253. afii57457
  15254. afii57456
  15255. afii57455
  15256. afii57454
  15257. afii57453
  15258. afii57452
  15259. afii57451
  15260. afii57450
  15261. afii57449
  15262. afii57448
  15263. afii57470
  15264. afii57446
  15265. afii57445
  15266. afii57444
  15267. afii57443
  15268. afii57442
  15269. afii57441
  15270. afii57440
  15271. afii57434
  15272. afii57433
  15273. afii57432
  15274. afii57431
  15275. afii57430
  15276. afii57429
  15277. afii57428
  15278. afii57427
  15279. afii57426
  15280. afii57425
  15281. afii57424
  15282. afii57423
  15283. afii57422
  15284. afii57421
  15285. afii57420
  15286. afii57419
  15287. afii57418
  15288. afii57417
  15289. afii57416
  15290. afii57415
  15291. afii57414
  15292. afii57413
  15293. afii57412
  15294. afii57411
  15295. afii57410
  15296. afii57409
  15297. afii57407
  15298. afii57403
  15299. afii57388
  15300. afii57718
  15301. afii57717
  15302. afii57716
  15303. afii57690
  15304. afii57689
  15305. afii57688
  15306. afii57687
  15307. afii57686
  15308. afii57685
  15309. afii57684
  15310. afii57683
  15311. afii57682
  15312. afii57681
  15313. afii57680
  15314. afii57679
  15315. afii57678
  15316. afii57677
  15317. afii57676
  15318. afii57675
  15319. afii57674
  15320. afii57673
  15321. afii57672
  15322. afii57671
  15323. afii57670
  15324. afii57669
  15325. afii57668
  15326. afii57667
  15327. afii57666
  15328. afii57665
  15329. afii57664
  15330. afii57658
  15331. afii57803
  15332. afii57804
  15333. afii57842
  15334. afii57841
  15335. afii57645
  15336. afii57839
  15337. afii57807
  15338. afii57796
  15339. afii57806
  15340. afii57797
  15341. afii57798
  15342. afii57795
  15343. afii57794
  15344. afii57793
  15345. afii57802
  15346. afii57800
  15347. afii57801
  15348. afii57799
  15349. afii10846
  15350. afii10098
  15351. afii10050
  15352. afii10196
  15353. afii10148
  15354. afii10195
  15355. afii10147
  15356. afii10194
  15357. afii10146
  15358. afii10193
  15359. afii10110
  15360. afii10109
  15361. afii10108
  15362. afii10107
  15363. afii10106
  15364. afii10105
  15365. afii10104
  15366. afii10103
  15367. afii10102
  15368. afii10101
  15369. afii10100
  15370. afii10099
  15371. afii10071
  15372. afii10097
  15373. afii10096
  15374. afii10095
  15375. afii10094
  15376. afii10093
  15377. afii10092
  15378. afii10091
  15379. afii10090
  15380. afii10089
  15381. afii10088
  15382. afii10087
  15383. afii10086
  15384. afii10085
  15385. afii10084
  15386. afii10083
  15387. afii10082
  15388. afii10081
  15389. afii10080
  15390. afii10079
  15391. afii10078
  15392. afii10077
  15393. afii10076
  15394. afii10075
  15395. afii10074
  15396. afii10073
  15397. afii10072
  15398. afii10070
  15399. afii10069
  15400. afii10068
  15401. afii10067
  15402. afii10066
  15403. afii10065
  15404. afii10049
  15405. afii10048
  15406. afii10047
  15407. afii10046
  15408. afii10045
  15409. afii10044
  15410. afii10043
  15411. afii10042
  15412. afii10041
  15413. afii10040
  15414. afii10039
  15415. afii10038
  15416. afii10037
  15417. afii10036
  15418. afii10035
  15419. afii10034
  15420. afii10033
  15421. afii10032
  15422. afii10031
  15423. afii10030
  15424. afii10029
  15425. afii10028
  15426. afii10027
  15427. afii10026
  15428. afii10025
  15429. afii10024
  15430. afii10022
  15431. afii10021
  15432. afii10020
  15433. afii10019
  15434. afii10018
  15435. afii10017
  15436. afii10145
  15437. afii10062
  15438. afii10061
  15439. afii10060
  15440. afii10059
  15441. afii10058
  15442. afii10057
  15443. afii10056
  15444. afii10055
  15445. afii10054
  15446. afii10053
  15447. afii10052
  15448. afii10051
  15449. afii10023
  15450. omega1
  15451. Upsilon1
  15452. theta1
  15453. omegatonos
  15454. upsilontonos
  15455. omicrontonos
  15456. upsilondieresis
  15457. iotadieresis
  15458. omega
  15459. upsilon
  15460. sigma
  15461. sigma1
  15462. omicron
  15463. lambda
  15464. kappa
  15465. theta
  15466. epsilon
  15467. delta
  15468. gamma
  15469. alpha
  15470. upsilondieresistonos
  15471. iotatonos
  15472. etatonos
  15473. epsilontonos
  15474. alphatonos
  15475. Upsilondieresis
  15476. Iotadieresis
  15477. Omega
  15478. Upsilon
  15479. Sigma
  15480. Omicron
  15481. Lambda
  15482. Kappa
  15483. Theta
  15484. Epsilon
  15485. Delta
  15486. Gamma
  15487. Alpha
  15488. iotadieresistonos
  15489. Omegatonos
  15490. Upsilontonos
  15491. Omicrontonos
  15492. Iotatonos
  15493. Etatonos
  15494. Epsilontonos
  15495. anoteleia
  15496. Alphatonos
  15497. dieresistonos
  15498. tonos
  15499. dotbelowcomb
  15500. hookabovecomb
  15501. tildecomb
  15502. acutecomb
  15503. gravecomb
  15504. hungarumlaut
  15505. tilde
  15506. ogonek
  15507. dotaccent
  15508. breve
  15509. caron
  15510. circumflex
  15511. afii64937
  15512. afii57929
  15513. scommaaccent
  15514. Scommaaccent
  15515. oslashacute
  15516. Oslashacute
  15517. aeacute
  15518. AEacute
  15519. aringacute
  15520. Aringacute
  15521. gcaron
  15522. Gcaron
  15523. uhorn
  15524. Uhorn
  15525. ohorn
  15526. Ohorn
  15527. florin
  15528. longs
  15529. zcaron
  15530. Zcaron
  15531. zdotaccent
  15532. Zdotaccent
  15533. zacute
  15534. Zacute
  15535. Ydieresis
  15536. ycircumflex
  15537. Ycircumflex
  15538. wcircumflex
  15539. Wcircumflex
  15540. uogonek
  15541. Uogonek
  15542. uhungarumlaut
  15543. Uhungarumlaut
  15544. uring
  15545. Uring
  15546. ubreve
  15547. Ubreve
  15548. umacron
  15549. Umacron
  15550. utilde
  15551. Utilde
  15552. tcaron
  15553. Tcaron
  15554. tcommaaccent
  15555. Tcommaaccent
  15556. scaron
  15557. Scaron
  15558. scedilla
  15559. Scedilla
  15560. scircumflex
  15561. Scircumflex
  15562. sacute
  15563. Sacute
  15564. rcaron
  15565. Rcaron
  15566. rcommaaccent
  15567. Rcommaaccent
  15568. racute
  15569. Racute
  15570. ohungarumlaut
  15571. Ohungarumlaut
  15572. obreve
  15573. Obreve
  15574. omacron
  15575. Omacron
  15576. napostrophe
  15577. ncaron
  15578. Ncaron
  15579. ncommaaccent
  15580. Ncommaaccent
  15581. nacute
  15582. Nacute
  15583. lslash
  15584. Lslash
  15585. lcaron
  15586. Lcaron
  15587. lcommaaccent
  15588. Lcommaaccent
  15589. lacute
  15590. Lacute
  15591. kgreenlandic
  15592. kcommaaccent
  15593. Kcommaaccent
  15594. jcircumflex
  15595. Jcircumflex
  15596. dotlessi
  15597. Idotaccent
  15598. iogonek
  15599. Iogonek
  15600. ibreve
  15601. Ibreve
  15602. imacron
  15603. Imacron
  15604. itilde
  15605. Itilde
  15606. hcircumflex
  15607. Hcircumflex
  15608. gcommaaccent
  15609. Gcommaaccent
  15610. gdotaccent
  15611. Gdotaccent
  15612. gbreve
  15613. Gbreve
  15614. gcircumflex
  15615. Gcircumflex
  15616. ecaron
  15617. Ecaron
  15618. eogonek
  15619. Eogonek
  15620. edotaccent
  15621. Edotaccent
  15622. ebreve
  15623. Ebreve
  15624. emacron
  15625. Emacron
  15626. dcroat
  15627. Dcroat
  15628. dcaron
  15629. Dcaron
  15630. ccaron
  15631. Ccaron
  15632. cdotaccent
  15633. Cdotaccent
  15634. ccircumflex
  15635. Ccircumflex
  15636. cacute
  15637. Cacute
  15638. aogonek
  15639. Aogonek
  15640. abreve
  15641. Abreve
  15642. amacron
  15643. Amacron
  15644. ydieresis
  15645. thorn
  15646. yacute
  15647. udieresis
  15648. ucircumflex
  15649. uacute
  15650. ugrave
  15651. oslash
  15652. divide
  15653. odieresis
  15654. otilde
  15655. ocircumflex
  15656. oacute
  15657. ograve
  15658. ntilde
  15659. idieresis
  15660. icircumflex
  15661. iacute
  15662. igrave
  15663. edieresis
  15664. ecircumflex
  15665. eacute
  15666. egrave
  15667. ccedilla
  15668. aring
  15669. adieresis
  15670. atilde
  15671. acircumflex
  15672. aacute
  15673. agrave
  15674. germandbls
  15675. Thorn
  15676. Yacute
  15677. Udieresis
  15678. Ucircumflex
  15679. Uacute
  15680. Ugrave
  15681. Oslash
  15682. multiply
  15683. Odieresis
  15684. Otilde
  15685. Ocircumflex
  15686. Oacute
  15687. Ograve
  15688. Ntilde
  15689. Idieresis
  15690. Icircumflex
  15691. Iacute
  15692. Igrave
  15693. Edieresis
  15694. Ecircumflex
  15695. Eacute
  15696. Egrave
  15697. Ccedilla
  15698. Aring
  15699. Adieresis
  15700. Atilde
  15701. Acircumflex
  15702. Aacute
  15703. Agrave
  15704. questiondown
  15705. threequarters
  15706. onehalf
  15707. onequarter
  15708. guillemotright
  15709. ordmasculine
  15710. onesuperior
  15711. cedilla
  15712. periodcentered
  15713. paragraph
  15714. acute
  15715. threesuperior
  15716. twosuperior
  15717. plusminus
  15718. degree
  15719. macron
  15720. registered
  15721. logicalnot
  15722. guillemotleft
  15723. ordfeminine
  15724. copyright
  15725. dieresis
  15726. section
  15727. brokenbar
  15728. currency
  15729. sterling
  15730. exclamdown
  15731. asciitilde
  15732. braceright
  15733. braceleft
  15734. grave
  15735. underscore
  15736. asciicircum
  15737. bracketright
  15738. backslash
  15739. bracketleft
  15740. question
  15741. greater
  15742. equal
  15743. semicolon
  15744. colon
  15745. eight
  15746. seven
  15747. three
  15748. slash
  15749. period
  15750. hyphen
  15751. comma
  15752. asterisk
  15753. parenright
  15754. parenleft
  15755. quotesingle
  15756. ampersand
  15757. percent
  15758. dollar
  15759. numbersign
  15760. quotedbl
  15761. exclam
  15762. space
  15763. .notdef
  15764. /Differences [
  15765. /Encoding 
  15766. /Encoding <<
  15767. /Type /Encoding
  15768. /BaseEncoding 
  15769. dSizStandard
  15770. Italic
  15771. Regular
  15772. StartCharMetrics
  15773. STDHV
  15774. STDHW
  15775. Descender
  15776. Ascender
  15777. CapHeight
  15778. EncodingScheme
  15779. FontBBox
  15780. CharacterSet
  15781. ItalicAngle
  15782. IsFixedPitch
  15783. Weight
  15784. FontName
  15785. StartFontMetrics
  15786. cleartomark
  15787. eexec
  15788. ZapfDingbats
  15789. Symbol
  15790. Times-BoldItalic
  15791. Times-Italic
  15792. Times-Bold
  15793. Times-Roman
  15794. Helvetica-BoldOblique
  15795. Helvetica-Oblique
  15796. Helvetica-Bold
  15797. Helvetica
  15798. Courier-BoldOblique
  15799. Courier-Oblique
  15800. Courier-Bold
  15801. Courier
  15802. Length3
  15803. Length2
  15804. Length1
  15805. FontFile
  15806. CharSet
  15807. XHeight
  15808. StemV
  15809. Flags
  15810. Descent
  15811. Ascent
  15812. FontDescriptor
  15813. Widths
  15814. /LastChar 
  15815. /FirstChar 
  15816. MissingWidth
  15817. Subtype
  15818. Type1
  15819. BaseFont
  15820. FontFile2
  15821. LastChar
  15822. FirstChar
  15823. TrueType
  15824. Supplement
  15825. Ordering
  15826. Registry
  15827. CIDSystemInfo
  15828. CIDFontType0
  15829. %%EOF
  15830. %%EndResource
  15831. CMapName currentdict /CMap defineresource pop
  15832. endcmap
  15833. endcidrange
  15834. endcidrange
  15835.  begincidrange
  15836. endnotdefrange
  15837.  beginnotdefrange
  15838. endcodespacerange
  15839.  begincodespacerange
  15840. /WMode 
  15841. ] def
  15842. /XUID [
  15843. /UIDOffset 
  15844. /CMapType 1 def
  15845. /CMapVersion 1.0 def
  15846. /CMapName /
  15847. end def
  15848.   /Supplement 
  15849.   /Ordering (
  15850. ) def
  15851.   /Registry (
  15852. /CIDSystemInfo 3 dict dup begin
  15853. begincmap
  15854. 12 dict begin
  15855. /CIDInit /ProcSet findresource begin
  15856. %%EndComments
  15857. %%Version: 1.0
  15858. %%Title: (
  15859. %%BeginResource: CMap (
  15860. %%IncludeResource: ProcSet (CIDInit)
  15861. %%DocumentNeededResources: ProcSet (CIDInit)
  15862. %!PS-Adobe-3.0 Resource-CMap
  15863. WMode
  15864. CMapName
  15865. CIDToGIDMap
  15866. CIDFontType2
  15867. DescendantFonts
  15868. Encoding
  15869. Type0
  15870. %PDF-1.6
  15871. %PDF-1.5
  15872. %PDF-1.4
  15873. %PDF-1.3
  15874. %PDF-1.2
  15875. 2.0.8
  15876. Encrypt
  15877. HPDFAA
  15878. Outlines
  15879. Haru Free PDF Library 
  15880. Keywords
  15881. Subject
  15882. Title
  15883. Producer
  15884. Creator
  15885. Author
  15886. ModDate
  15887. CreationDate
  15888. UseAttachments
  15889. UseOC
  15890. FullScreen
  15891. UseThumbs
  15892. UseOutlines
  15893. UseNone
  15894. TwoColumnRight
  15895. TwoColumnLeft
  15896. OneColumn
  15897. SinglePage
  15898. Pages
  15899. Catalog
  15900. PageLayout
  15901. PageMode
  15902. OpenAction
  15903. PageLabels
  15904. CenterWindow
  15905. FitWindow
  15906. HideWindowUI
  15907. HideMenubar
  15908. HideToolbar
  15909. ViewerPreferences
  15910. Rotate
  15911. CropBox
  15912. MediaBox
  15913. Resources
  15914. Parent
  15915. ImageI
  15916. ImageC
  15917. ImageB
  15918. ProcSet
  15919. XObject
  15920. ExtGState
  15921. Annots
  15922. Count
  15923. Contents
  15924. @UUUUUU
  15925. Glitter
  15926. Dissolve
  15927. Blinds
  15928. Split
  15929. Trans
  15930. ?FitBV
  15931. FitBH
  15932. ?Insert
  15933. Paragraph
  15934. NewParagraph
  15935. Comment
  15936. Popup
  15937. FileAttachment
  15938. Underline
  15939. Highlight
  15940. StrikeOut
  15941. Circle
  15942. Square
  15943. Stamp
  15944. FreeText
  15945. Sound
  15946. Annot
  15947. Border
  15948. Action
  15949. First
  15950. _OPENED
  15951. Outline
  15952. DeviceGray
  15953. DeviceRGB
  15954. DeviceCMYK
  15955. BitsPerComponent
  15956. ColorSpace
  15957. Decode
  15958. Width
  15959. Height
  15960. Image
  15961. AImageMask
  15962. Japan1
  15963. Adobe
  15964. EUC-V
  15965. EUC-H
  15966. 90msp-RKSJ-H
  15967. 90ms-RKSJ-V
  15968. 90ms-RKSJ-H
  15969. Korea1
  15970. KSC-EUC-V
  15971. KSC-EUC-H
  15972. KSCms-UHC-HW-V
  15973. KSCms-UHC-HW-H
  15974. KSCms-UHC-H
  15975. GB-EUC-V
  15976. GB-EUC-H
  15977. GBK-EUC-V
  15978. GBK-EUC-H
  15979. ETen-B5-V
  15980. ETen-B5-H
  15981. MS-PMincyo,BoldItalic
  15982. MS-PMincyo,Italic
  15983. MS-PMincyo,Bold
  15984. MS-PMincyo
  15985. MS-Mincyo,BoldItalic
  15986. MS-Mincyo,Italic
  15987. MS-Mincyo,Bold
  15988. MS-Mincyo
  15989. MS-PGothic,BoldItalic
  15990. MS-PGothic,Italic
  15991. MS-PGothic,Bold
  15992. MS-PGothic
  15993. MS-Gothic,BoldItalic
  15994. MS-Gothic,Italic
  15995. MS-Gothic,Bold
  15996. MS-Gothic
  15997. Batang,BoldItalic
  15998. Batang,Italic
  15999. Batang,Bold
  16000. Batang
  16001. BatangChe,BoldItalic
  16002. BatangChe,Italic
  16003. BatangChe,Bold
  16004. BatangChe
  16005. Dotum,BoldItalic
  16006. Dotum,Italic
  16007. Dotum,Bold
  16008. Dotum
  16009. DotumChe,BoldItalic
  16010. DotumChe,Italic
  16011. DotumChe,Bold
  16012. DotumChe
  16013. SimHei,BoldItalic
  16014. SimHei,Italic
  16015. SimHei,Bold
  16016. SimHei
  16017. SimSun,BoldItalic
  16018. SimSun,Italic
  16019. SimSun,Bold
  16020. SimSun
  16021. MingLiU,BoldItalic
  16022. MingLiU,Italic
  16023. MingLiU,Bold
  16024. MingLiU
  16025. Indexed
  16026. 1.2.10
  16027. _FILE_NAME
  16028. Exclusion
  16029. Difference
  16030. SoftLight
  16031. HardLight
  16032. ColorBurn
  16033. ColorDodge
  16034. Lighten
  16035. Darken
  16036. Overlay
  16037. Screen
  16038. Multiply
  16039. Normal
  16040. 1.2.10
  16041. 0123456789ABCDEF
  16042.  0@P`p
  16043. !1AQaq
  16044. "2BRbr
  16045. #3CScs
  16046. $4DTdt
  16047. %5EUeu
  16048. &6FVfv
  16049. '7GWgw
  16050. (8HXhx
  16051. )9IYiy
  16052. *:JZjz
  16053. +;K[k{
  16054. ,<L\l|
  16055. -=M]m}
  16056. .>N^n~
  16057. /?O_o
  16058. > deflate 1.2.3 Copyright 1995-2005 Jean-loup Gailly 
  16059. 1.2.3
  16060. Qkkbal
  16061. wn>Jj
  16062. Z* ,    
  16063.     #jT$
  16064. [-&LMb#{'
  16065. w+OQvr
  16066. R1h58
  16067. )\ZEo^m/
  16068. H*0"ZOW
  16069. l!;b    F
  16070. mj>zjZ
  16071. l6qnk
  16072. IiGM>nw
  16073. 1A26b
  16074. ewh/?y
  16075. 1wsHp
  16076. #bML"
  16077. vQO+t
  16078. ^oEZ_
  16079. OZw3(?
  16080. V_:X1:
  16081. NJ2"v
  16082. O*9y]
  16083.                                 
  16084.  inflate 1.2.3 Copyright 1995-2005 Mark Adler 
  16085. e+000
  16086. GAIsProcessorFeaturePresent
  16087. KERNEL32
  16088. FlsFree
  16089. FlsSetValue
  16090. FlsGetValue
  16091. FlsAlloc
  16092. kernel32.dll
  16093. CorExitProcess
  16094. mscoree.dll
  16095. runtime error 
  16096. TLOSS error
  16097. SING error
  16098. DOMAIN error
  16099. R6029
  16100. - This application cannot run using the active version of the Microsoft .NET Runtime
  16101. Please contact the application's support team for more information.
  16102. R6028
  16103. - unable to initialize heap
  16104. R6027
  16105. - not enough space for lowio initialization
  16106. R6026
  16107. - not enough space for stdio initialization
  16108. R6025
  16109. - pure virtual function call
  16110. R6024
  16111. - not enough space for _onexit/atexit table
  16112. R6019
  16113. - unable to open console device
  16114. R6018
  16115. - unexpected heap error
  16116. R6017
  16117. - unexpected multithread lock error
  16118. R6016
  16119. - not enough space for thread data
  16120. This application has requested the Runtime to terminate it in an unusual way.
  16121. Please contact the application's support team for more information.
  16122. R6009
  16123. - not enough space for environment
  16124. R6008
  16125. - not enough space for arguments
  16126. R6002
  16127. - floating point not loaded
  16128. Microsoft Visual C++ Runtime Library
  16129. Runtime Error!
  16130. Program: 
  16131. <program name unknown>
  16132.  (8PX
  16133. 700WP
  16134. `h````
  16135. ppxxxx
  16136. (null)
  16137. AuthenticAMD
  16138. ?X&eB
  16139. ?h6_~
  16140. ?7Tf(
  16141. =\uI=
  16142. ]vQ<)8
  16143. |)P!?Ua0
  16144. Eb2]A=
  16145. hb?O2
  16146. 2ieO=
  16147. |W8A=
  16148. np?z 
  16149. u?^p?o4
  16150. Pex?0
  16151. y1~?|"
  16152. V%A+=
  16153. ?|I7Z#
  16154. >,'1D=
  16155. ?g)([|X>=
  16156. ?IT$7
  16157. :h"?bC
  16158. @H#?43
  16159. Ax#?uN}*
  16160. r7Yr7=
  16161. .K="=
  16162. F0$?3=1
  16163. H`$?h|
  16164. &?~YK|
  16165. sU0&?W
  16166. :]=O>
  16167. CqTR;
  16168. AiFC.
  16169. <{Q}<
  16170. hI{L[
  16171. <8bunz8
  16172. ?(FN\
  16173. K<<H!
  16174. m1WY$
  16175. ?#%X.y
  16176. F||<##
  16177. T~OXu
  16178. <@En[vP
  16179. InitializeCriticalSectionAndSpinCount
  16180.  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
  16181. GetProcessWindowStation
  16182. GetUserObjectInformationA
  16183. GetLastActivePopup
  16184. GetActiveWindow
  16185. MessageBoxA
  16186. user32.dll
  16187. floor
  16188. exp10
  16189. log10
  16190. 1#QNAN
  16191. 1#INF
  16192. 1#IND
  16193. 1#SNAN
  16194. Program: 
  16195. A buffer overrun has been detected which has corrupted the program's
  16196. internal state.  The program cannot safely continue execution and must
  16197. now be terminated.
  16198. Buffer overrun detected!
  16199. A security error of unknown cause has been detected which has
  16200. corrupted the program's internal state.  The program cannot safely
  16201. continue execution and must now be terminated.
  16202. Unknown security failure detected!
  16203. HH:mm:ss
  16204. dddd, MMMM dd, yyyy
  16205. MM/dd/yy
  16206. December
  16207. November
  16208. October
  16209. September
  16210. August
  16211. April
  16212. March
  16213. February
  16214. January
  16215. Saturday
  16216. Friday
  16217. Thursday
  16218. Wednesday
  16219. Tuesday
  16220. Monday
  16221. Sunday
  16222. _nextafter
  16223. _logb
  16224. frexp
  16225. _hypot
  16226. _cabs
  16227. ldexp
  16228. atan2
  16229. SunMonTueWedThuFriSat
  16230. JanFebMarAprMayJunJulAugSepOctNovDec
  16231. HeapAlloc
  16232. HeapFree
  16233. GetSystemTimeAsFileTime
  16234. GetCurrentThreadId
  16235. GetCommandLineA
  16236. GetVersionExA
  16237. EnterCriticalSection
  16238. LeaveCriticalSection
  16239. GetProcAddress
  16240. GetModuleHandleA
  16241. DeleteCriticalSection
  16242. HeapDestroy
  16243. HeapCreate
  16244. VirtualFree
  16245. VirtualAlloc
  16246. HeapReAlloc
  16247. GetLastError
  16248. ReadFile
  16249. SetFilePointer
  16250. SetHandleCount
  16251. GetStdHandle
  16252. GetFileType
  16253. GetStartupInfoA
  16254. WriteFile
  16255. CloseHandle
  16256. TlsAlloc
  16257. SetLastError
  16258. TlsFree
  16259. TlsSetValue
  16260. TlsGetValue
  16261. ExitProcess
  16262. TerminateProcess
  16263. GetCurrentProcess
  16264. GetModuleFileNameA
  16265. FreeEnvironmentStringsA
  16266. GetEnvironmentStrings
  16267. FreeEnvironmentStringsW
  16268. WideCharToMultiByte
  16269. GetEnvironmentStringsW
  16270. UnhandledExceptionFilter
  16271. RtlUnwind
  16272. InitializeCriticalSection
  16273. InterlockedExchange
  16274. VirtualQuery
  16275. SetStdHandle
  16276. FlushFileBuffers
  16277. GetACP
  16278. GetOEMCP
  16279. GetCPInfo
  16280. CreateFileA
  16281. LoadLibraryA
  16282. LCMapStringA
  16283. MultiByteToWideChar
  16284. LCMapStringW
  16285. QueryPerformanceCounter
  16286. GetTickCount
  16287. GetCurrentProcessId
  16288. GetLocaleInfoA
  16289. GetStringTypeA
  16290. GetStringTypeW
  16291. SetEndOfFile
  16292. HeapSize
  16293. RaiseException
  16294. VirtualProtect
  16295. GetSystemInfo
  16296. KERNEL32.dll
  16297. LIBHPDF.DLL
  16298. HPDF_AddPage
  16299. HPDF_AddPageLabel
  16300. HPDF_CreateExtGState
  16301. HPDF_CreateOutline
  16302. HPDF_Destination_SetFit
  16303. HPDF_Destination_SetFitB
  16304. HPDF_Destination_SetFitBH
  16305. HPDF_Destination_SetFitBV
  16306. HPDF_Destination_SetFitH
  16307. HPDF_Destination_SetFitR
  16308. HPDF_Destination_SetFitV
  16309. HPDF_Destination_SetXYZ
  16310. HPDF_Encoder_GetByteType
  16311. HPDF_Encoder_GetType
  16312. HPDF_Encoder_GetUnicode
  16313. HPDF_Encoder_GetWritingMode
  16314. HPDF_ExtGState_SetAlphaFill
  16315. HPDF_ExtGState_SetAlphaStroke
  16316. HPDF_ExtGState_SetBlendMode
  16317. HPDF_Font_GetAscent
  16318. HPDF_Font_GetBBox
  16319. HPDF_Font_GetCapHeight
  16320. HPDF_Font_GetDescent
  16321. HPDF_Font_GetEncodingName
  16322. HPDF_Font_GetFontName
  16323. HPDF_Font_GetUnicodeWidth
  16324. HPDF_Font_GetXHeight
  16325. HPDF_Font_MeasureText
  16326. HPDF_Font_TextWidth
  16327. HPDF_Free
  16328. HPDF_FreeDoc
  16329. HPDF_FreeDocAll
  16330. HPDF_GetCurrentEncoder
  16331. HPDF_GetCurrentPage
  16332. HPDF_GetEncoder
  16333. HPDF_GetError
  16334. HPDF_GetErrorDetail
  16335. HPDF_GetFont
  16336. HPDF_GetInfoAttr
  16337. HPDF_GetPageByIndex
  16338. HPDF_GetPageLayout
  16339. HPDF_GetPageMode
  16340. HPDF_GetStreamSize
  16341. HPDF_GetVersion
  16342. HPDF_GetViewerPreference
  16343. HPDF_HasDoc
  16344. HPDF_Image_GetBitsPerComponent
  16345. HPDF_Image_GetColorSpace
  16346. HPDF_Image_GetHeight
  16347. HPDF_Image_GetSize2
  16348. HPDF_Image_GetSize
  16349. HPDF_Image_GetWidth
  16350. HPDF_Image_SetColorMask
  16351. HPDF_Image_SetMaskImage
  16352. HPDF_InsertPage
  16353. HPDF_LinkAnnot_SetBorderStyle
  16354. HPDF_LinkAnnot_SetHighlightMode
  16355. HPDF_LoadJpegImageFromFile
  16356. HPDF_LoadPngImageFromFile2
  16357. HPDF_LoadPngImageFromFile
  16358. HPDF_LoadRawImageFromFile
  16359. HPDF_LoadRawImageFromMem
  16360. HPDF_LoadTTFontFromFile2
  16361. HPDF_LoadTTFontFromFile
  16362. HPDF_LoadType1FontFromFile
  16363. HPDF_New
  16364. HPDF_NewDoc
  16365. HPDF_NewEx
  16366. HPDF_Outline_SetDestination
  16367. HPDF_Outline_SetOpened
  16368. HPDF_Page_Arc
  16369. HPDF_Page_BeginText
  16370. HPDF_Page_Circle
  16371. HPDF_Page_Clip
  16372. HPDF_Page_ClosePath
  16373. HPDF_Page_ClosePathEofillStroke
  16374. HPDF_Page_ClosePathFillStroke
  16375. HPDF_Page_ClosePathStroke
  16376. HPDF_Page_Concat
  16377. HPDF_Page_CreateDestination
  16378. HPDF_Page_CreateLinkAnnot
  16379. HPDF_Page_CreateTextAnnot
  16380. HPDF_Page_CreateURILinkAnnot
  16381. HPDF_Page_CurveTo2
  16382. HPDF_Page_CurveTo3
  16383. HPDF_Page_CurveTo
  16384. HPDF_Page_DrawImage
  16385. HPDF_Page_Ellipse
  16386. HPDF_Page_EndPath
  16387. HPDF_Page_EndText
  16388. HPDF_Page_Eoclip
  16389. HPDF_Page_Eofill
  16390. HPDF_Page_EofillStroke
  16391. HPDF_Page_ExecuteXObject
  16392. HPDF_Page_Fill
  16393. HPDF_Page_FillStroke
  16394. HPDF_Page_GRestore
  16395. HPDF_Page_GSave
  16396. HPDF_Page_GetCMYKFill
  16397. HPDF_Page_GetCMYKStroke
  16398. HPDF_Page_GetCharSpace
  16399. HPDF_Page_GetCurrentFont
  16400. HPDF_Page_GetCurrentFontSize
  16401. HPDF_Page_GetCurrentPos2
  16402. HPDF_Page_GetCurrentPos
  16403. HPDF_Page_GetCurrentTextPos2
  16404. HPDF_Page_GetCurrentTextPos
  16405. HPDF_Page_GetDash
  16406. HPDF_Page_GetFillingColorSpace
  16407. HPDF_Page_GetFlat
  16408. HPDF_Page_GetGMode
  16409. HPDF_Page_GetGStateDepth
  16410. HPDF_Page_GetGrayFill
  16411. HPDF_Page_GetGrayStroke
  16412. HPDF_Page_GetHeight
  16413. HPDF_Page_GetHorizontalScalling
  16414. HPDF_Page_GetLineCap
  16415. HPDF_Page_GetLineJoin
  16416. HPDF_Page_GetLineWidth
  16417. HPDF_Page_GetMiterLimit
  16418. HPDF_Page_GetRGBFill
  16419. HPDF_Page_GetRGBStroke
  16420. HPDF_Page_GetStrokingColorSpace
  16421. HPDF_Page_GetTextLeading
  16422. HPDF_Page_GetTextMatrix
  16423. HPDF_Page_GetTextRaise
  16424. HPDF_Page_GetTextRenderingMode
  16425. HPDF_Page_GetTextRise
  16426. HPDF_Page_GetTransMatrix
  16427. HPDF_Page_GetWidth
  16428. HPDF_Page_GetWordSpace
  16429. HPDF_Page_LineTo
  16430. HPDF_Page_MeasureText
  16431. HPDF_Page_MoveTextPos2
  16432. HPDF_Page_MoveTextPos
  16433. HPDF_Page_MoveTo
  16434. HPDF_Page_MoveToNextLine
  16435. HPDF_Page_Rectangle
  16436. HPDF_Page_SetCMYKFill
  16437. HPDF_Page_SetCMYKStroke
  16438. HPDF_Page_SetCharSpace
  16439. HPDF_Page_SetDash
  16440. HPDF_Page_SetExtGState
  16441. HPDF_Page_SetFlat
  16442. HPDF_Page_SetFontAndSize
  16443. HPDF_Page_SetGrayFill
  16444. HPDF_Page_SetGrayStroke
  16445. HPDF_Page_SetHeight
  16446. HPDF_Page_SetHorizontalScalling
  16447. HPDF_Page_SetLineCap
  16448. HPDF_Page_SetLineJoin
  16449. HPDF_Page_SetLineWidth
  16450. HPDF_Page_SetMiterLimit
  16451. HPDF_Page_SetRGBFill
  16452. HPDF_Page_SetRGBStroke
  16453. HPDF_Page_SetRotate
  16454. HPDF_Page_SetSize
  16455. HPDF_Page_SetSlideShow
  16456. HPDF_Page_SetTextLeading
  16457. HPDF_Page_SetTextMatrix
  16458. HPDF_Page_SetTextRaise
  16459. HPDF_Page_SetTextRenderingMode
  16460. HPDF_Page_SetTextRise
  16461. HPDF_Page_SetWidth
  16462. HPDF_Page_SetWordSpace
  16463. HPDF_Page_ShowText
  16464. HPDF_Page_ShowTextNextLine
  16465. HPDF_Page_ShowTextNextLineEx
  16466. HPDF_Page_Stroke
  16467. HPDF_Page_TextOut
  16468. HPDF_Page_TextRect
  16469. HPDF_Page_TextWidth
  16470. HPDF_ReadFromStream
  16471. HPDF_ResetError
  16472. HPDF_ResetStream
  16473. HPDF_SaveToFile
  16474. HPDF_SaveToStream
  16475. HPDF_SetCompressionMode
  16476. HPDF_SetCurrentEncoder
  16477. HPDF_SetEncryptionMode
  16478. HPDF_SetErrorHandler
  16479. HPDF_SetInfoAttr
  16480. HPDF_SetInfoDateAttr
  16481. HPDF_SetOpenAction
  16482. HPDF_SetPageLayout
  16483. HPDF_SetPageMode
  16484. HPDF_SetPagesConfiguration
  16485. HPDF_SetPassword
  16486. HPDF_SetPermission
  16487. HPDF_SetViewerPreference
  16488. HPDF_TextAnnot_SetIcon
  16489. HPDF_TextAnnot_SetOpened
  16490. HPDF_UseCNSEncodings
  16491. HPDF_UseCNSFonts
  16492. HPDF_UseCNTEncodings
  16493. HPDF_UseCNTFonts
  16494. HPDF_UseJPEncodings
  16495. HPDF_UseJPFonts
  16496. HPDF_UseKREncodings
  16497. HPDF_UseKRFonts
  16498. DN*1DR(zD
  16499. CN*1D
  16500. Too many bytes for PNG signature.
  16501. Potential overflow in png_zalloc()
  16502. libpng error: %s
  16503. libpng error: %s, offset=%d
  16504. libpng error no. %s: %s
  16505. libpng warning: %s
  16506. libpng warning no. %s: %s
  16507. Unknown zlib error
  16508. zlib version error
  16509. zlib memory error
  16510. 1.2.3
  16511. Incompatible libpng version in application and library
  16512. Application  is  running with png.c from libpng-%.20s
  16513. Application was compiled with png.h from libpng-%.20s
  16514. Missing PLTE before IDAT
  16515. Missing IHDR before IDAT
  16516. PNG file corrupted by ASCII conversion
  16517. Not a PNG file
  16518. Ignoring extra png_read_update_info() call; row buffer not reallocated
  16519. Extra compressed data
  16520. Decompression error
  16521. Not enough image data
  16522. Invalid attempt to read row data
  16523. png_do_dither returned rowbytes=0
  16524. png_do_rgb_to_gray found nongray pixel
  16525. NULL row buffer for row %ld, pass %d
  16526. Call to NULL read function
  16527. Read Error
  16528. same structure.  Resetting write_data_fn to NULL.
  16529. It's an error to set both read_data_fn and write_data_fn in the 
  16530. Out of Memory!
  16531. Error decoding compressed text
  16532. PNG unsigned integer out of range.
  16533. CRC error
  16534. Unknown zTXt compression type %d
  16535. Not enough memory for text.
  16536. Incomplete compressed datastream in %s chunk
  16537. Data error in compressed datastream in %s chunk
  16538. Buffer error in compressed datastream in %s chunk
  16539. Not enough memory to decompress chunk
  16540. Not enough memory to decompress chunk..
  16541. Not enough memory to decompress chunk.
  16542. Invalid IHDR chunk
  16543. Out of place IHDR
  16544. Truncating incorrect info tRNS chunk length
  16545. Truncating incorrect tRNS chunk length
  16546. Invalid palette chunk
  16547. Ignoring PLTE chunk in grayscale PNG
  16548. Duplicate PLTE chunk
  16549. Invalid PLTE after IDAT
  16550. Missing IHDR before PLTE
  16551. Incorrect IEND chunk length
  16552. No image in file
  16553. gamma = (%d/100000)
  16554. Ignoring incorrect gAMA value when sRGB is also present
  16555. Ignoring gAMA chunk with gamma=0
  16556. Incorrect gAMA chunk length
  16557. Duplicate gAMA chunk
  16558. Out of place gAMA chunk
  16559. Invalid gAMA after IDAT
  16560. Missing IHDR before gAMA
  16561. Incorrect sBIT chunk length
  16562. Duplicate sBIT chunk
  16563. Out of place sBIT chunk
  16564. Invalid sBIT after IDAT
  16565. Missing IHDR before sBIT
  16566. Invalid cHRM white point
  16567. gx=%f, gy=%f, bx=%f, by=%f
  16568. wx=%f, wy=%f, rx=%f, ry=%f
  16569. Ignoring incorrect cHRM value when sRGB is also present
  16570. Invalid cHRM blue point
  16571. Invalid cHRM green point
  16572. Invalid cHRM red point
  16573. Incorrect cHRM chunk length
  16574. Duplicate cHRM chunk
  16575. Missing PLTE before cHRM
  16576. Invalid cHRM after IDAT
  16577. Missing IHDR before cHRM
  16578. incorrect gamma=(%d/100000)
  16579. Unknown sRGB intent
  16580. Incorrect sRGB chunk length
  16581. Duplicate sRGB chunk
  16582. Out of place sRGB chunk
  16583. Invalid sRGB after IDAT
  16584. Missing IHDR before sRGB
  16585. Profile size field missing from iCCP chunk
  16586. Ignoring truncated iCCP profile.
  16587. Ignoring nonzero compression type in iCCP chunk
  16588. Malformed iCCP chunk
  16589. Duplicate iCCP chunk
  16590. Out of place iCCP chunk
  16591. Invalid iCCP after IDAT
  16592. Missing IHDR before iCCP
  16593. Invalid sPLT after IDAT
  16594. sPLT chunk requires too much memory
  16595. sPLT chunk too long
  16596. sPLT chunk has bad length
  16597. malformed sPLT chunk
  16598. Missing IHDR before sPLT
  16599. Duplicate tRNS chunk
  16600. Invalid tRNS after IDAT
  16601. tRNS chunk not allowed with alpha channel
  16602. Zero length tRNS chunk
  16603. Missing PLTE before tRNS
  16604. Incorrect tRNS chunk length
  16605. Missing IHDR before tRNS
  16606. Duplicate bKGD chunk
  16607. Missing PLTE before bKGD
  16608. Invalid bKGD after IDAT
  16609. Incorrect bKGD chunk index value
  16610. Incorrect bKGD chunk length
  16611. Missing IHDR before bKGD
  16612. Duplicate hIST chunk
  16613. Missing PLTE before hIST
  16614. Invalid hIST after IDAT
  16615. Incorrect hIST chunk length
  16616. Missing IHDR before hIST
  16617. Duplicate pHYs chunk
  16618. Invalid pHYs after IDAT
  16619. Incorrect pHYs chunk length
  16620. Missing IHDR before pHYs
  16621. Duplicate oFFs chunk
  16622. Invalid oFFs after IDAT
  16623. Incorrect oFFs chunk length
  16624. Missing IHDR before oFFs
  16625. Duplicate pCAL chunk
  16626. Invalid pCAL after IDAT
  16627. No memory for pCAL params.
  16628. Unrecognized equation type for pCAL chunk
  16629. Invalid pCAL parameters for equation type
  16630. Invalid pCAL data
  16631. No memory for pCAL purpose.
  16632. Missing IHDR before pCAL
  16633. Duplicate sCAL chunk
  16634. Invalid sCAL after IDAT
  16635. Invalid sCAL data
  16636. malformed height string in sCAL chunk
  16637. malformed width string in sCAL chunk
  16638. Out of memory while processing sCAL chunk
  16639. Missing IHDR before sCAL
  16640. Duplicate tIME chunk
  16641. Incorrect tIME chunk length
  16642. Out of place tIME chunk
  16643. Insufficient memory to process text chunk.
  16644. Not enough memory to process text chunk.
  16645. No memory to process text chunk.
  16646. Missing IHDR before tEXt
  16647. Insufficient memory to store zTXt chunk.
  16648. Not enough memory to process zTXt chunk.
  16649. Unknown compression type in zTXt chunk
  16650. Zero length zTXt chunk
  16651. Out of memory processing zTXt chunk.
  16652. Missing IHDR before zTXt
  16653. unknown critical chunk
  16654. invalid chunk type
  16655. Ignoring bad adaptive filter type
  16656. Extra compression data
  16657. Extra compressed data.
  16658. Decompression Error
  16659. Row has too many bytes to allocate in memory.
  16660. Ignoring attempt to set negative chromaticity value
  16661. Ignoring attempt to set chromaticity value exceeding 21474.83
  16662. Setting gamma=0
  16663. Limiting gamma to 21474.83
  16664. Setting negative gamma to zero
  16665. Invalid palette size, hIST allocation skipped.
  16666. Insufficient memory for hIST chunk data.
  16667. Invalid filter method in IHDR
  16668. Unknown filter method in IHDR
  16669. MNG features are not allowed in a PNG datastream
  16670. Unknown compression method in IHDR
  16671. Unknown interlace method in IHDR
  16672. Invalid color type/bit depth combination in IHDR
  16673. Invalid color type in IHDR
  16674. Invalid bit depth in IHDR
  16675. Width is too large for libpng to process pixels
  16676. Invalid image size in IHDR
  16677. image size exceeds user limits in IHDR
  16678. Image width or height is zero in IHDR
  16679. Insufficient memory for pCAL parameter.
  16680. Insufficient memory for pCAL params.
  16681. Insufficient memory for pCAL units.
  16682. Insufficient memory for pCAL purpose.
  16683. Invalid palette length
  16684. Insufficient memory to process iCCP profile.
  16685. Insufficient memory to process iCCP chunk.
  16686. iTXt chunk not supported.
  16687. No memory for sPLT palettes.
  16688. Out of memory processing unknown chunk.
  16689. Out of memory while processing unknown chunk.
  16690. too many length or distance symbols
  16691. incorrect length check
  16692. incorrect data check
  16693. invalid distance too far back
  16694. invalid distance code
  16695. invalid literal/length code
  16696. invalid distances set
  16697. invalid literal/lengths set
  16698. invalid bit length repeat
  16699. invalid code lengths set
  16700. invalid stored block lengths
  16701. invalid block type
  16702. header crc mismatch
  16703. unknown header flags set
  16704. incorrect header check
  16705. invalid window size
  16706. unknown compression method
  16707. incompatible version
  16708. buffer error
  16709. insufficient memory
  16710. data error
  16711. stream error
  16712. file error
  16713. stream end
  16714. need dictionary
  16715. z?aUY
  16716. zc%C1
  16717. -64OS
  16718. 0u0|0
  16719. 1.252l2p2t2x2|2
  16720. 3(3,3034383<3@3D3H3L3P3T3X3\3`3d3$4
  16721. 3;3Q3
  16722. 406P6b6
  16723. 7*8~8
  16724. 9A:R:
  16725. 566A6H6S6Z6e6l6w6
  16726. 7 7*7
  16727. 1*1C1P1d1}1
  16728. 2i9s9
  16729. >)?U?
  16730. :5:p:
  16731. ;$<L<t<
  16732. ,0w0E3
  16733. =1=F=`=x=
  16734. >">8>J>
  16735. 151V1l1
  16736. 3#3M3T3
  16737. 5I5[5n5
  16738. 5 686E6T6
  16739. 8U9w9
  16740. :a;h;o;
  16741. <-<@<b<
  16742. =*=;=h=
  16743. ?+?@?W?l?
  16744. 0I0m0
  16745. 222n2~2
  16746. 849f9
  16747. :2:\:
  16748. ;&;8;O;v;
  16749. <*<T<z<
  16750. < =z=
  16751. 061y1
  16752. 222E2
  16753. 3'3V3M4M5
  16754. 606B6@7i7p7
  16755. 3V4{4
  16756. =G>8?<?@?
  16757. 040?0
  16758. 1-1C1i1
  16759. 1.2m2
  16760. 343J3j3
  16761. 4 4>4
  16762. 44585<5@5D5
  16763. ===h=
  16764. >(?a?
  16765. 3@4E4
  16766. 556u6
  16767. 1&272O2
  16768. 2D3R3j3z3
  16769. 4/4H4
  16770. 8_9s9
  16771. <b>B?
  16772. 4,5O5U5
  16773. 7%7\7
  16774. 8,9O9U9
  16775. 9O:c:
  16776. ;#;X;
  16777. <k=M>
  16778. 0S1m1
  16779. 1n2<3
  16780. 4:5R5j5
  16781. 727J7b7
  16782. 9*9B9
  16783. ;2;J;b;
  16784. =.>H>
  16785. 2'2v2
  16786. 2N3g3
  16787. 9:9S9
  16788. ;";-;2;?;D;[;`;k;p;};
  16789. <4<9<D<I<`<e<p<u<
  16790. =-=@=D=H=L=P=T=X=\=`=d=h=l=p=t=x=|=
  16791. >9>&?
  16792. 0*0B0!1O2
  16793. 565R5i5w5
  16794. :4:r:.;
  16795. 0:1o1
  16796. 1*2>3R3Y3`3e3
  16797. 3C4f4s4
  16798. 4    5#5J5
  16799. 5=6e6
  16800. 7>7a7t7y7
  16801. 818>8C8
  16802. <g<l<~<
  16803. >0>C>W>/?4???D?p?
  16804. 0(0?0V0
  16805. 0)161
  16806. 3Z3{3
  16807. 8%858
  16808. 9*949K9[9
  16809. ;+;;;
  16810. <,<7<A<X<h<
  16811. =6=;=W=\=N>y>
  16812. 1'2?2J2T2k2
  16813. 2%3,3T3l3w3
  16814. 41464R4W4s4x4
  16815. 898?8g8
  16816. 9;9e9l9
  16817. 9L:Q:m:r:
  16818. =(>H?
  16819. 1o2t2
  16820. 3(3-3M3R3r3w3
  16821. 4+404L4Q4m4r4
  16822. 5(6H7h8L9Q9q9v9
  16823. :*:/:O:T:t:y:
  16824. ;);.;J;O;k;p;
  16825. >6>;>[>`>
  16826. <0A0]0b0~0
  16827. 3e4o4u4
  16828. 6&6A6
  16829. ;&;7;
  16830. 5*5/5?5D5
  16831. 5    797J7e7
  16832. 8 8p8t8x8|8
  16833. :E:[:
  16834. ;-;W;
  16835. ;)<S<}<
  16836. =6=Q=e=
  16837. =#>B>o>
  16838. 1X2\2`2d2h2l2p2
  16839. : ;(;i;x;~;
  16840. <C<P<V<z<
  16841. %0H0k0
  16842. 5]5j5p5
  16843. 6)6I6V6\6
  16844. ;,<8<M<
  16845. 5X6\6`6d6h6l6p6
  16846. 8B8a8
  16847. :$:J:f:R;
  16848. >'>3>;>I>
  16849. ?T?Y?
  16850. 0I1}1
  16851. 4B4w4
  16852. 4/5U5
  16853. 9:9m9
  16854. <><z<
  16855. 2F2e2v2
  16856. 3Y3|3
  16857. 4L5p5
  16858. 4W4^4
  16859. 41575<7
  16860. <$<9<N<c<x<
  16861. = =5=J=_=
  16862. >#>/>>>J>Y>e>t>
  16863. >I?b?{?
  16864. +030;0C0K0S0[0c0
  16865. 181D1P1a1k1{1
  16866. 3+3I3_3
  16867. 4*4`4v4
  16868. =$=.=B=N=j=q=
  16869. >,>6>J>V>r>|>
  16870. ?&?/?R?
  16871. 0'0]1F2y2
  16872. 9);e;
  16873. ;R>i>
  16874. 2y3W5
  16875. 5_7h7l7p7t7x7|7
  16876. <a>o>
  16877. 3;4I4
  16878. 1$191
  16879. 2"2f2y2
  16880. :0:8:A:S:a:m:
  16881. :6;<;M;~;
  16882. ;"<`<o<
  16883. ?"?0?>?E?T?]?n?
  16884. 0$0G0
  16885. 2'242
  16886. 3N4k4
  16887. 4k5w5
  16888. 6C7A8J8e8z8
  16889. 979I9O9X9g9
  16890. :(:1:S:Z:i:
  16891. ;&;3;:;@;H;N;Y;a;
  16892. >(>3>9>>>D>Q>n>t>
  16893. ?,?2?C?
  16894. 6!656
  16895. 9c:q:
  16896. :H;`;g;o;t;x;|;
  16897. <V<\<`<d<h<
  16898. =)=S=
  16899. 0(0I0
  16900. 141i1p1
  16901. 112_2m2
  16902. 3t3|3
  16903. 4"5K5
  16904. 777E7S7
  16905. 8'878=8E8f8l8w8
  16906. :.:4:@:E:M:S:Z:`:g:m:u:{:
  16907. ;W<t<
  16908. =/=?=Q=V=    >
  16909. >3>c>u>z>
  16910. ?$?*?;?@?K?P?j?
  16911. -030?0o0~0
  16912. 1(1z1P2i2
  16913. 2-343B3L3e3q3}3
  16914. 4T4d4p4w4
  16915. 4o5t5
  16916. 5D6}6
  16917. 607E7d7v7
  16918. <$=?=P=
  16919. 0^1x1
  16920. 3'3V3
  16921. 3E4N4T4
  16922. 5P5W5u5{5
  16923. 5,656@6{6
  16924. 8Y8e8}8
  16925. 9/:7:
  16926. :?;l;
  16927. 2H2e2y2
  16928. 6+7e7
  16929. 8%838f8y8
  16930. 9/:1;B>X>t>
  16931. >(?@?G?O?T?X?\?
  16932. 60<0@0D0H0
  16933. 0    131e1l1p1t1x1|1
  16934. 7&7+74797l7
  16935. 9+929C9J9X9l9
  16936. :>:k:{:
  16937. :(;D;
  16938. ;#<5<
  16939. =f=t=
  16940. =%>9>
  16941. ?G?p?
  16942. 0%040K0`0
  16943. 2!2;2G2Y2g2
  16944. 3#3C3I3j3p3
  16945. 4+494C4P4Z4g4p4y4
  16946. 5#5/5^5o5
  16947. 6Y7f7q7w7
  16948. 9%9-9D9R9W9a9
  16949. :$:):F:V:n:
  16950. <Z<m<y<
  16951. <%=s=
  16952. >%>4>=>F>s>
  16953. ?%?-?
  16954. 6    8$8u8
  16955. 9 9B9}9
  16956. 3!3%3)3-3135393=3A3
  16957. 4+4Z4~4
  16958. 5"6/6
  16959. 7Y7Y879
  16960. <*<4<<<l<v<
  16961. <!=-=W=    ?
  16962. ?%?0?A?L?m?x?
  16963. 2$2N2r2
  16964. 3$313v3
  16965. 4$5Y5
  16966. 6T6Z6j6
  16967. 6$7*7>9{:
  16968. :0;s;};
  16969. 0 1G1
  16970. 2>2C2d2
  16971. 2U3@5
  16972. 2$2,242<2D2L2T2\2d2l2t2|2
  16973. 3$3,343<3D3L3T3\3d3l3t3|3
  16974. 4$4,444<4D4L4T4\4d4l4t4|4
  16975. 5$5,545<5D5L5T5\5d5l5t5|5
  16976. 6$6,646<6D6L6T6\6d6l6t6|6
  16977. 7$7,747<7D7L7T7\7d7l7t7|7
  16978. 8$8,848<8D8L8T8\8d8l8t8|8
  16979. 9$9,949<9D9L9T9\9d9l9t9|9
  16980. :$:,:4:<:D:L:T:\:d:l:t:|:
  16981. ;$;,;4;<;D;L;T;\;d;l;t;|;
  16982. <$<,<4<<<D<L<T<\<d<l<t<|<
  16983. =$=,=4=<=D=L=T=\=d=l=t=|=
  16984. >$>,>4><>D>L>T>\>d>l>t>|>
  16985. ?$?,?4?<?D?L?T?\?d?l?t?|?
  16986. 0$0,040<0D0L0T0\0d0l0t0|0
  16987. 1$1,141<1D1L1T1\1d1l1t1|1
  16988. 2$2,242<2D2L2T2\2d2l2t2|2
  16989. 3$3,343<3D3L3T3\3d3l3t3|3
  16990. 4$4,444<4D4L4T4\4d4l4t4|4
  16991. 5$5,545<5D5L5T5\5d5l5t5|5
  16992. 6$6,646<6D6L6T6\6d6l6t6|6
  16993. 7$7,747<7D7L7T7\7d7l7t7|7
  16994. 8$8,848<8D8L8T8\8d8l8t8|8
  16995. 9$9,949<9D9L9T9\9d9l9t9|9
  16996. :$:,:4:<:D:L:T:\:d:l:t:|:
  16997. ;$;,;4;<;D;L;T;\;d;l;t;|;
  16998. <$<,<4<<<D<L<T<\<d<l<t<|<
  16999. =$=,=4=<=D=L=T=\=d=l=t=|=
  17000. >$>,>4><>D>L>T>\>d>l>t>|>
  17001. ?$?,?4?<?D?L?T?\?d?l?t?|?
  17002. 0$0,040<0D0L0T0\0d0l0t0|0
  17003. 1$1,141<1D1L1T1\1d1l1t1|1
  17004. 2$2,242<2D2L2T2\2d2l2t2|2
  17005. 4$4(40444<4@4H4L4T4X4`4d4l4p4x4|4
  17006. 5 5$5,5
  17007. 70747T7X7x7|7
  17008. 8,808P8T8t8x8
  17009. :P;`;p;
  17010. <8<H<T<X<d<h<
  17011. 1$1(1
  17012. ; ;,;8;
  17013. 4383@3D3L3P3
  17014. 5 5T6X6h6x6
  17015. 0(0@0D0H0L0P0T0X0\0`0d0h0l0p0t0x0|0
  17016. 0@1D1H1L1T1X1\1`1d1h1l1p1x1|1
  17017. <$<<<@<D<
  17018. L0P0T0X0\0`0L2T2\2d2l2t2|2
  17019. 2J3N3R3V304@4D4L4
  17020. 7"7&7*7.72767:7>7B7F7J7N7R7V7Z7^7b7f7j7n7r7v7z7~7
  17021. 7(8084888<8@8D8H8L8P8T8X8\8`8d8h8l8p8t8x8|8
  17022. 9<9D9L9T9\9d9l9t9|9
  17023. gggg`
  17024. vvvvp
  17025. gggg`
  17026. vvvvp
  17027. gggg`
  17028. vvvvp
  17029. gggg`
  17030. gggg`
  17031. wwwwwwwwwwwp
  17032. gggggggggg`p
  17033. vvvvvvvvvvpp
  17034. gggggggggg`p
  17035. vvvvvvvvvvpp
  17036. gggggggggg`p
  17037. vvvvvvvvvvpp
  17038. gggggggggg`p
  17039. vvvvvvvvvvpp
  17040. gggggggggg`p
  17041. vvvvvvvvvvpp
  17042. gggggggggg`p
  17043. vvvvvvvvvvpp
  17044. gggggggggg`p
  17045. vvvvvvvvvvpp
  17046. gggggggggg`p
  17047. vvvvvvvvvvpp
  17048. gggggggggg`p
  17049. wwwww
  17050. wwwww
  17051. wwwww
  17052. gggggggggg`p
  17053. vvvvvvvvvvpp
  17054. gggggggggg`p
  17055. PLATFORM
  17056. UNIQUEID
  17057. TIMESTAMP
  17058. CLASS
  17059. CLASSLOC
  17060. BASECLASS
  17061. OBJNAME
  17062. PARENT
  17063. PROPERTIES
  17064. PROTECTED
  17065. METHODS
  17066. OBJCODE
  17067. RESERVED1
  17068. RESERVED2
  17069. RESERVED3
  17070. RESERVED4
  17071. RESERVED5
  17072. RESERVED6
  17073. RESERVED7
  17074. RESERVED8
  17075.  COMMENT Class               
  17076.  WINDOWS _1WE14QM5X1117391972
  17077.  COMMENT RESERVED            
  17078. VERSION =   3.00
  17079. frxpreview.h^
  17080. foxpro_reporting.hf
  17081. frxpreview_loc.hn
  17082. excellistener
  17083. frxpreview.h
  17084. Pixels
  17085. Class
  17086. fxlistener
  17087. excellistener
  17088. coutputalias
  17089. coutputdbf
  17090. loutputtocursor
  17091. closeondeactivate
  17092. nlastpercent
  17093. cworkbookfile
  17094. cworksheetname
  17095. applyexcelstyleprogram
  17096. cexcelstyle
  17097. waitfornextreport
  17098. ldefaultmode
  17099. cfrxalias
  17100. lobjtypemode
  17101. targetfilename
  17102. lopenviewer
  17103. ccodepage
  17104. ctempfrx
  17105. lalignleft
  17106. nexcelsaveformat
  17107. setstrictdate
  17108. *isnumber 
  17109. *xml_numberformat 
  17110. *xml_file_header 
  17111. *xml_style 
  17112. *xml_workbook_header 
  17113. *xml_worksheet_header 
  17114. *xml_row_header 
  17115. *xml_row_footer 
  17116. *xml_cell 
  17117. *xml_table_header 
  17118. *xml_workbook_footer 
  17119. *xml_worksheet_footer 
  17120. *xml_stylenumber 
  17121. *xml_type 
  17122. *xml_styles_header 
  17123. *xml_styles_footer 
  17124. *xml_table_footer 
  17125. *xml_encode 
  17126. *calcbandnumbers 
  17127. *xextractexcelcol 
  17128. *applyexcelstyle 
  17129. *islonghorizontalline 
  17130. *isshorthorizontalline 
  17131. *calcbasefilename 
  17132. *calcnextfilename 
  17133. *xml_names_header 
  17134. *xml_name 
  17135. *xml_names_footer 
  17136. *outputfromdata 
  17137. *updateproperties 
  17138. *topurexlsusingexcel 
  17139. *topurexlsusingoo 
  17140. *showtherm 
  17141. 0123456789.,$
  17142. 0123456789.,$
  17143. TCCONTENTS
  17144. LLISNUMBER
  17145. LCALIAS
  17146. LLALLDIGITS
  17147. LCTEST
  17148. LNTIMES
  17149. LNPOS
  17150. LNOLDPOS
  17151. LNLOOP
  17152. SETPOINT
  17153. SETSEPARATOR|
  17154. NUMBER
  17155. ###,###,##0
  17156. ########0
  17157. DATETIME
  17158. Short Date
  17159. String
  17160. TCCONTENTS
  17161. LCTYPE
  17162. XML_TYPE
  17163. LCPOINT
  17164. LCSEPAR
  17165. SETPOINT
  17166. SETSEPARATOR
  17167. LCFORMAT
  17168. ISO-8859-1
  17169. CP950
  17170. CP936
  17171. UTF-8
  17172. Windows-CC
  17173. <?xml version="1.0" encoding="<<lcEncoding>>"?>
  17174. <?mso-application progid="Excel.Sheet"?>
  17175. LCRETVAL
  17176. LCCODEPAGE
  17177. LCENCODING
  17178. THIS    
  17179. CCODEPAGE
  17180. LCONVERTTOUTF8
  17181.  ss:FontName="CC
  17182.  ss:Size="CCC
  17183. 000000
  17184.  ss:Color="#
  17185.  ss:Bold="1"
  17186.  ss:Italic="1"
  17187.  ss:Format="C
  17188. LEFTCC
  17189.  ss:Horizontal="Left"
  17190. CENTERCC
  17191.  ss:Horizontal="Center"
  17192. RIGHTCC
  17193.  ss:Horizontal="Right"
  17194. <Borders/>
  17195. <Borders>
  17196. "Bottom"
  17197. SINGLE
  17198. "Continuous"
  17199. <Border ss:Position=
  17200.  ss:LineStyle=
  17201.  ss:Weight=
  17202. </Borders>
  17203. FFFFFF
  17204. <Interior/>
  17205.  ss:Pattern=CCC
  17206. "Solid"
  17207.  ss:Color=CCC
  17208. "#FFFFFF"
  17209.  ss:PatternColor=
  17210. <Interior 
  17211.   <Style ss:ID="<<'s' + TRANSFORM(tnID,'@L 99')>>">
  17212.    <Alignment ss:Vertical="Bottom" <<lcHorizontalAlignment>>/>
  17213.    <<lcBorders>>
  17214.    <Font<<lcFont>>/>
  17215.    <<lcInterior>>
  17216.    <NumberFormat<<lcNumberFormat>>/>
  17217.    <Protection/>
  17218.   </Style>
  17219. LCFONT
  17220. PASTYLES
  17221. LCTEXTCOLOR
  17222. LCBOLD
  17223. LCITALIC
  17224. LCFAMILY
  17225. LCNUMBERFORMAT
  17226. LCHORIZONTALALIGNMENT    
  17227. LABORDERS
  17228. LABORDER
  17229. LCPOSITION
  17230. LCLINESTYLE
  17231. LCWEIGHT
  17232. LCBORDER    
  17233. LCBORDERS
  17234. LAINTERIOR
  17235. LCINTERIOR    
  17236. LCPATTERN
  17237. LCCOLOR
  17238. LCPATTERNCOLOR
  17239. LCRETVALW
  17240. <Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet"
  17241.  xmlns:o="urn:schemas-microsoft-com:office:office"
  17242.  xmlns:x="urn:schemas-microsoft-com:office:excel"
  17243.  xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"
  17244.  xmlns:html="http://www.w3.org/TR/REC-html40">
  17245. LCRETVALi
  17246. <Worksheet ss:Name="<<tcWorksheetName>>">
  17247. TCWORKSHEETNAME
  17248. LCRETVAL
  17249. <Row ss:Index="<<ALLTRIM(TRANSFORM(ExcelRow))>>" ss:AutoFitHeight="1">
  17250. LCRETVAL
  17251. </Row>C
  17252. DATETIME
  17253. STRING
  17254. @L 9999_
  17255. @L 99_
  17256. @L 99_
  17257. T00:00:00.000
  17258. NUMBER
  17259. Currency
  17260. STRING
  17261. STRING
  17262.  ss:MergeAcross="CC
  17263. 99999
  17264. STRING
  17265. <Data ss:Type="C
  17266. </Data>
  17267.  ss:Formula="C
  17268. <NamedCell ss:Name="C
  17269. =Sheet1!R
  17270. <Cell  ss:Index="CC
  17271.  ss:StyleID="s
  17272. @L 99_
  17273. </Cell>
  17274. TCCONTENTS    
  17275. TCUNICODE
  17276. TNSTYLENUMBER
  17277. LCORIGCONTENTS
  17278. LCSTYLE
  17279. PASTYLES
  17280. LCRETVAL
  17281. SETSEPARATOR
  17282. SETPOINT
  17283. LLUSEUNICODE    
  17284. LLCHINESE    
  17285. CCODEPAGE
  17286. LCUNVALUE    
  17287. LNUNVALUE
  17288. LCNEWCONTENTS
  17289. LNCHARS
  17290. LCMERGEACROSS
  17291. NEXCELMERGEACROSS
  17292. LCDATA
  17293. LCINSERTFORMULA
  17294. LCNAMEDCELL
  17295. CEXCELINSERTFORMULA
  17296. CEXCELNAMEDCELL
  17297. CEXCELNAMEDRANGE
  17298. EXCELROW
  17299. EXCELCOLE
  17300. <Column ss:Index="
  17301.  ss:AutoFitWidth="
  17302.  ss:Width="
  17303. <Table ss:ExpandedColumnCount="<<ja[1]>>" ss:ExpandedRowCount="<<ja[2]>>" x:FullColumns="1"
  17304.  x:FullRows="1" ss:StyleID="s21"><<lcColumns>> 
  17305. TNROWS
  17306. TNCOLS
  17307. LCRETVAL
  17308. LCCOLUMNS
  17309. EXCELCOL
  17310. EXCELROW
  17311. COUTPUTALIAS    
  17312. PACOLDATA#
  17313. </Workbook>C
  17314.  </Worksheet>
  17315. LCRETVAL@
  17316. Number
  17317. DateTime
  17318. Short Date
  17319. TCCONTENTS
  17320. LCTYPE
  17321. LCNUMBERFORMAT
  17322. LCKEY
  17323. XML_TYPE
  17324. XML_NUMBERFORMAT
  17325. FONTFACE
  17326. FONTSIZE    
  17327. FONTSTYLE
  17328. CEXCELALIGNMENT
  17329. CEXCELBORDER
  17330. CEXCELINTERIOR
  17331. PASTYLES
  17332. String
  17333. DateTime
  17334. Number
  17335. DateTime
  17336. String
  17337. String
  17338. TCCONTENTS
  17339. LCTYPE    
  17340. LCSETDATE
  17341. SETDATEANSI
  17342. ISNUMBER 
  17343. <Styles>C
  17344. </Styles>C
  17345. </Table>C
  17346. TCCONTENTS
  17347. TCCHAR
  17348. LCVALUE
  17349. WINDOWS
  17350. WINDOWS
  17351. LABANDS
  17352. LNVPOS
  17353. LNSELECT
  17354. G_PIXELSIZE
  17355. G_BANDHEIGHT
  17356. G_BANDFUDGE
  17357. OBJCODE
  17358. HEIGHT
  17359. THIS    
  17360. CFRXALIAS
  17361. PLATFORM
  17362. OBJTYPE
  17363. LNVPOSBOTTOM
  17364. 0000000
  17365. TCCOMMENTT
  17366. &tcExcelStyle.(tnOption,This)
  17367. TCEXCELSTYLE
  17368. TNOPTION
  17369. COUTPUTALIAS;
  17370. TCEXPR9
  17371. TCEXPR
  17372. REP_C
  17373. @L 99_
  17374. REP_C
  17375. @L 99_
  17376. REP_??.
  17377. TCWORKBOOK
  17378. LCFILENAME
  17379. LADIR
  17380. TCEXTENSION
  17381. @L 99_
  17382. @L 99_
  17383. TCWORKBOOK
  17384. LCBASENAME
  17385. LCFILENAME
  17386. LADIR
  17387. <Names>C
  17388.   <NamedRange ss:Name="
  17389. " ss:RefersTo="
  17390. LCRETVAL
  17391. LAITEMS
  17392. PANAMES 
  17393. </Names>C
  17394. Invalid parameter. Report listener not available
  17395. Error
  17396. The helper FRX table is not available. Output can't be created
  17397. Error
  17398. Datasessionv
  17399. FRXCopy
  17400. FRXCopy
  17401. REPLACE ALL Contents WITH  strt(strt(strt(STRCONV(Contents, 6),'&','&'),'>','>' ),'<','<')
  17402. TOLISTENER
  17403. TCOUTPUTDBF
  17404. THIS    
  17405. SHOWTHERM    
  17406. CFRXALIAS
  17407. LNSELECT
  17408. LNORIGDATASESSION
  17409. LISTENERDATASESSION
  17410. LDEFAULTMODE
  17411. FRXCOPY
  17412. COUTPUTDBF
  17413. COUTPUTALIAS
  17414. CALCBANDNUMBERS
  17415. NOREPEAT
  17416. OBJTYPE
  17417. OBJCODE
  17418. LCRENDERALIAS
  17419. LLRELEASEFP
  17420. LCALIAS
  17421. _GOFP
  17422. OFOXYPREVIEWER
  17423. LNPGFROM
  17424. LNPGTO
  17425. COMMANDCLAUSES    
  17426. RANGEFROM
  17427. RANGETO
  17428. _CLAUSENRANGEFROM
  17429. _CLAUSENRANGETO
  17430. FRXRECNO    
  17431. NFRXRECNO
  17432. NLEFT
  17433. WIDTH
  17434. NWIDTH
  17435. HEIGHT
  17436. NHEIGHT
  17437. UNCONTENTS
  17438. CONTENTS
  17439. NPAGENO
  17440. AFTERREPORT
  17441. LOEXCi
  17442. xls;xml
  17443. LOBJTYPEMODE
  17444. OFOXYPREVIEWER
  17445. COMMANDCLAUSES
  17446. LOPENVIEWER
  17447. PREVIEW
  17448. TOFILE
  17449. TARGETFILENAME    
  17450. CDESTFILE
  17451. LCDESTFILE
  17452. COUTPUTPATH
  17453. LCFILE
  17454. _REPORTLISTENER
  17455. CANCELREPORT    
  17456. QUIETMODE
  17457. LQUIETMODE
  17458. NEXCELSAVEFORMAT
  17459. Spreadsheet file
  17460. excel.application
  17461. LOGICAL
  17462. excel.application
  17463. TCSOURCE
  17464. TCDESTINATION
  17465. LOEXCEL
  17466. LLRETURN
  17467. ALERTBEFOREOVERWRITING
  17468. DISPLAYALERTS    
  17469. WORKBOOKS
  17470. ACTIVEWORKBOOK
  17471. SAVEAS
  17472. NEXCELSAVEFORMAT
  17473. ACTIVEWINDOW
  17474. CLOSE
  17475. LOEXC
  17476. Spreadsheet file
  17477. TCSOURCE
  17478. TCDESTINATION
  17479. LLRETURN
  17480. PR_OOXML2XLS
  17481. PLEASEWAIT
  17482. TNVALUE
  17483. TCTEXT
  17484. TCTITLE
  17485. _GOFP
  17486. LQUIETMODE
  17487. DOFOXYTHERM
  17488. _RUNSTATUSTEXT
  17489. GETLOC8
  17490. SETFRXDATASESSION
  17491. SETSEPARATOR
  17492. SETPOINT
  17493. MACDESKTOP
  17494. SCREEN
  17495. MACDESKTOP
  17496. SCREEN
  17497. CMESSAGE
  17498. LOPARENTFORM    
  17499. LCCAPTION
  17500. LCPARENTFORMNAME
  17501. THIS    
  17502. QUIETMODE    
  17503. ISRUNNING
  17504. COMMANDCLAUSES
  17505. NODIALOG
  17506. NLASTPERCENT
  17507. PERCENTDONE
  17508. THERMCAPTION    
  17509. THERMFORM
  17510. CREATETHERM
  17511. CLOSABLE
  17512. MOVABLE
  17513. THERM
  17514. VALUE
  17515. THERMLABEL
  17516. CAPTION
  17517. VISIBLE
  17518. GETPARENTWINDOWREF
  17519. DESKTOP
  17520. MACDESKTOP
  17521. SHOWWINDOW
  17522. ALWAYSONTOP
  17523. AUTOCENTER
  17524. cContents = strt(strt(strt(lcTmpContent,'&','&'),'>','>' ),'<','<')
  17525. NFRXRECNO
  17526. NLEFT
  17527. NWIDTH
  17528. NHEIGHT
  17529. NOBJECTCONTINUATIONTYPE
  17530. CCONTENTSTOBERENDERED
  17531. GDIPLUSIMAGE
  17532. TWOPASSPROCESS
  17533. CURRENTPASS
  17534. LOUTPUTTOCURSOR    
  17535. CCONTENTS
  17536. LCTMPCONTENT
  17537. SETFRXDATASESSION
  17538. COUTPUTALIAS
  17539. CONTENTS
  17540. UNCONTENTS
  17541. NPAGENO
  17542. PAGENO
  17543. SETCURRENTDATASESSION
  17544. DRIVINGALIAS<
  17545. CopyFRX
  17546. Datev
  17547. Strictdatev
  17548. LDEFAULTMODE
  17549. LOBJTYPEMODE
  17550. LOUTPUTTOCURSOR
  17551. COUTPUTDBF
  17552. COUTPUTALIAS
  17553. SETFRXDATASESSION
  17554. CTEMPFRX    
  17555. CFRXALIAS
  17556. CALCBANDNUMBERS
  17557. NOREPEAT
  17558. OBJTYPE
  17559. OBJCODE    
  17560. NFRXRECNO
  17561. NLEFT
  17562. NWIDTH
  17563. NHEIGHT
  17564. CONTENTS
  17565. UNCONTENTS
  17566. NPAGENO
  17567. SETCURRENTDATASESSION
  17568. SETDATE
  17569. SETSTRICTDATE
  17570. GetDeviceCaps
  17571. WIN32API
  17572. GetDC
  17573. WIN32API
  17574. ReleaseDC
  17575. WIN32API
  17576. GetWindowDC
  17577. WIN32API
  17578. SetSeparatorC
  17579. Separatorv
  17580. SetPointC
  17581. Pointv
  17582. SetCurrencyC
  17583. Currency
  17584. SetDateC
  17585. Datev
  17586. SetDateAnsiCC
  17587. Datev
  17588. GERMAN
  17589. lConvertToXLSa
  17590. lRepeatHeadersa
  17591. lRepeatFootersa
  17592. lHidePageNo-
  17593. lUseUnicode-
  17594. lConvertToUTF8-
  17595. GETDEVICECAPS
  17596. WIN32API
  17597. GETDC    
  17598. RELEASEDC
  17599. GETWINDOWDC
  17600. ADDPROPERTY
  17601. SELECT 00000 AS ExcelRow,000 AS ExcelCol,  UPPER(PADR(Expr,100)) AS cExpr,PADR(User,3) AS cUser,PADR(UPPER(Contents),100) AS cContents,  OA.*,  00000 AS nExcelColRequest,00000 AS nExcelSpecialColRequest,00000 AS nExcelMergeAcross,  00000.00 AS nExcelColWidth,SPACE(50) AS cExcelAlignment,  SPACE(100) AS cExcelBorder,SPACE(100) AS cExcelInterior,  SPACE(100) AS cExcelInsertFormula,SPACE(100) AS cExcelNamedRange,SPACE(100) AS cExcelNamedCell,  0 AS nUnderlinedColCount,  .F. AS lDelete,  &lcFRXAlias..*  FROM (this.cOutputAlias) OA  JOIN (This.cFRXalias) ON (OA.nFrxRecno = &lcFRXalias..nRecno  AND NOT INLIST(ObjType, 6, 7, 17))  INTO CURSOR (this.cOutputAlias) READWRITE
  17602. @L 999999_C
  17603. @L 999999_
  17604. @L 999999_C
  17605. @L 999999_
  17606. @L 999999_
  17607. _PAGENOC
  17608. Widths
  17609. Solid,CCCC
  17610. Horizontal,Left
  17611. Horizontal,Right
  17612. Horizontal,Center66
  17613. Horizontal,Left
  17614. <data> <datos>
  17615. </datos> </data>
  17616. PageTop
  17617. @L 999999_C
  17618. @L 999999_
  17619. @L 999999_C
  17620. @L 999999_
  17621. Lefts
  17622. @L 999999_
  17623. Sheet1
  17624. ADDITIVE
  17625. ADDITIVE
  17626. WINDOWS 
  17627. Lucida Console
  17628. RowCol
  17629. TEMP5
  17630. Error creating file: 
  17631. Error
  17632. Safetyv
  17633. SET SAFETY &lcOldSetSafe.
  17634. xlConv2xls
  17635. Report is too big to be exported to the Excel format.C
  17636. Please revise the created document because it will be incomplete!
  17637. Attention
  17638. XLTOOBIG
  17639. ATTENTION
  17640. LEFTSW
  17641. PAGETOPW
  17642. THIS    
  17643. SHOWTHERM
  17644. LDEFAULTMODE
  17645. SETFRXDATASESSION
  17646. SETSEPARATOR
  17647. SETPOINT
  17648. SETDATE    
  17649. CFRXALIAS
  17650. NRECNO
  17651. NSECS
  17652. LCFRXALIAS    
  17653. NFRXRECNO
  17654. OBJTYPE
  17655. EXCELROW
  17656. EXCELCOL
  17657. NPAGENO
  17658. CEXPR
  17659. CUSER
  17660. ROWCOL    
  17661. PAGROWCOL
  17662. LREPEATHEADERS
  17663. LREPEATFOOTERS    
  17664. LNMINPAGE    
  17665. LNMAXPAGE
  17666. COUTPUTALIAS
  17667. LAPAGES
  17668. LHIDEPAGENO
  17669. EXPR    
  17670. CCONTENTS
  17671. PNROWHEIGHT
  17672. PNCOLWIDTH
  17673. NWIDTH
  17674. WIDTHS
  17675. FILLRED
  17676. PENRED
  17677. PENGREEN
  17678. PENBLUE    
  17679. FILLGREEN
  17680. FILLBLUE
  17681. CEXCELINTERIOR
  17682. LALIGNLEFT
  17683. CEXCELALIGNMENT
  17684. OFFSET
  17685. APPLYEXCELSTYLE
  17686. CEXCELSTYLE    
  17687. LCCOMMENT
  17688. COMMENT
  17689. NEXCELCOLREQUEST    
  17690. XMLRESULT
  17691. NEXCELSPECIALCOLREQUEST
  17692. EXCELSPECIALCOL
  17693. EXCELDELETE
  17694. NEXCELCOLWIDTH
  17695. EXCELCOLWIDTH
  17696. EXCELALIGNMENT
  17697. EXCELALIGN
  17698. NEXCELMERGEACROSS
  17699. EXCELMERGEACROSS
  17700. CEXCELBORDER
  17701. EXCELBORDER
  17702. EXCELINTERIOR
  17703. NEXCELUNDERLINEDCOLCOUNT
  17704. EXCELUNDERLINEDCOLCOUNT
  17705. CEXCELINSERTFORMULA
  17706. EXCELINSERTFORMULA
  17707. CEXCELNAMEDRANGE
  17708. EXCELNAMEDRANGE
  17709. CEXCELNAMEDCELL
  17710. EXCELNAMEDCELL
  17711. DISTINCT
  17712. PAGETOP
  17713. PAGTOP    
  17714. LNLASTTOP    
  17715. LNLASTROW
  17716. LNLASTPAGENO    
  17717. LLSKIPPED    
  17718. LNOLDPAGE    
  17719. LLNEWPAGE
  17720. LNLASTLEFT    
  17721. LNLASTCOL
  17722. LLASSIGNEDCOL
  17723. LNEXCELCOL
  17724. NLEFT
  17725. CPARSEORDER
  17726. LEFTS
  17727. LEFORD
  17728. LACOUNT
  17729. LNTHISLEFT
  17730. COUNT
  17731. PNMAXCOL    
  17732. PACOLDATA    
  17733. LNCOLDATA
  17734. CWORKBOOKFILE
  17735. LUWORKBOOK
  17736. CALCBASEFILENAME
  17737. LCWORKSHEETNAME
  17738. CWORKSHEETNAME
  17739. LCOPCIONES    
  17740. LLERASEOK
  17741. CALCNEXTFILENAME
  17742. PASTYLES
  17743. FONTFACE
  17744. FONTSIZE    
  17745. FONTSTYLE
  17746. PLATFORM
  17747. OBJCODE
  17748. LCXMLTABLE
  17749. LCCRLF
  17750. XML_TABLE_HEADER    
  17751. LILASTROW    
  17752. LILASTCOL    
  17753. LICURRROW    
  17754. LICURRCOL
  17755. LIREC
  17756. LCPREVCONTENTS
  17757. CONTENTS
  17758. LLINCOMPLETE
  17759. LNRECS
  17760. LN100
  17761. XML_ROW_FOOTER
  17762. XML_ROW_HEADER
  17763. LNSTYLENUMBER
  17764. XML_STYLENUMBER
  17765. XML_CELL
  17766. UNCONTENTS
  17767. XML_TABLE_FOOTER
  17768. LCXML
  17769. XML_FILE_HEADER
  17770. XML_WORKBOOK_HEADER
  17771. XML_STYLES_HEADER
  17772. XML_STYLE
  17773. XML_STYLES_FOOTER
  17774. PANAMES
  17775. XML_NAMES_HEADER
  17776. XML_NAME
  17777. XML_NAMES_FOOTER
  17778. SETCURRENTDATASESSION
  17779. XML_WORKSHEET_HEADER
  17780. SETSTRICTDATE
  17781. LCTEMPFILE
  17782. LNHANDLE
  17783. XML_WORKSHEET_FOOTER
  17784. XML_WORKBOOK_FOOTER
  17785. LLSAVED
  17786. LCONVERTTOUTF8
  17787. LCXMLWKS
  17788. LCOLDSETSAFE
  17789. TARGETFILENAME
  17790. LCONVERTTOXLS
  17791. _GOFP
  17792. GETLOC
  17793. TOPUREXLSUSINGEXCEL
  17794. TOPUREXLSUSINGOO
  17795. LOEXC
  17796. LOBJTYPEMODE
  17797. OFOXYPREVIEWER
  17798. LSAVED
  17799. LOPENVIEWER    
  17800. SHELLEXEC
  17801. CTEMPFRX
  17802. UPDATEPROPERTIES
  17803. lDefaultMode
  17804. DATASESSIONv
  17805. FRXDataSession
  17806. LDEFAULTMODE
  17807. FRXDATASESSION
  17808. RESETTODEFAULT
  17809. RESETDATASESSION
  17810. isnumber,
  17811. xml_numberformat
  17812. xml_file_header}
  17813. xml_styleh
  17814. xml_workbook_header
  17815. xml_worksheet_header
  17816. xml_row_headert
  17817. xml_row_footer
  17818. xml_cell#
  17819. xml_table_header
  17820. xml_workbook_footer
  17821. xml_worksheet_footer
  17822. xml_stylenumber
  17823. xml_type
  17824. xml_styles_header
  17825. xml_styles_footer
  17826. xml_table_footer*#
  17827. xml_encodeN#
  17828. calcbandnumbers
  17829. xextractexcelcolx&
  17830. applyexcelstyle
  17831. islonghorizontalline%'
  17832. isshorthorizontallinel'
  17833. calcbasefilename
  17834. calcnextfilenamep)
  17835. xml_names_headerS+
  17836. xml_namev+
  17837. xml_names_footerr,
  17838. outputfromdata
  17839. updatepropertiesF3
  17840. topurexlsusingexcel
  17841. topurexlsusingoo
  17842. showtherm
  17843. setfrxdatasessionenvironment?;
  17844. DoStatus
  17845. Destroy
  17846. Render
  17847. BeforeReport
  17848. Init0F
  17849. AfterReport
  17850. LoadReport
  17851. setfrxdatasession
  17852. PROCEDURE isnumber
  17853. LPARAMETERS tcContents
  17854. LOCAL llIsNumber, lcAlias, llAllDigits
  17855. tcContents  = ALLTRIM(tcContents)
  17856. llAllDigits = LEN(CHRTRAN(tcContents, '0123456789.,$', "")) = 0
  17857. IF LEFT(tcContents, 1) = "(" AND RIGHT(tcContents,1) = ")"
  17858.     tcContents = "-" + CHRTRAN(tcContents, "() ", "")
  17859. ENDIF 
  17860. IF llAllDigits
  17861.     * Preliminary test
  17862.     * Check if the separator symbols have a distance of 3 chars
  17863.     LOCAL lcTest, lnTimes, lnPos, lnOldPos, lnLoop
  17864.     lcTest = tcContents
  17865.     IF OCCURS(This.SetPoint, lcTest) = 1
  17866.         lcTest = LEFT(lcTest, AT(This.SetPoint, lcTest) - 1)
  17867.     ENDIF
  17868.     lnTimes = OCCURS(This.SetSeparator, lcTest)
  17869.     lnOldPos = 0
  17870.     IF lnTimes > 0
  17871.         FOR lnLoop = 1 TO lnTimes
  17872.             lnPos = AT(This.SetSeparator, lcTest, lnLoop)
  17873.             IF lnLoop > 1
  17874.                 IF lnPos - lnOldPos <> 4
  17875.                     RETURN .F. && Not a number
  17876.                 ENDIF
  17877.             ENDIF
  17878.             lnOldPos = lnPos
  17879.         ENDFOR
  17880.         IF LEN(lcTest) - AT(This.SetSeparator, lcTest, lnTimes) <> 3
  17881.             RETURN .F. && Not a number
  17882.         ENDIF
  17883.     ENDIF
  17884. ENDIF
  17885. * 06/09/09 Generic method using value of FillChar in report file!
  17886. *!*        lcAlias = ALIAS()
  17887. *!*        llIsNumber = &lcAlias..FillChar = 'N'
  17888. DO CASE
  17889.     *!*            CASE &lcAlias..FillChar = 'N'
  17890.     *!*                llIsNumber = .T.
  17891.     *!*            CASE &lcAlias..FillChar = 'C'
  17892.     *!*                llIsNumber = .F.
  17893.     * 02/01/07 Case added by Andrus Moor to handle dd.mm.yyyy date format.
  17894.     * Not very satisfying...  need to devise something more explicit and general.
  17895.     *        CASE OCCURS('.', tcContents) > 1
  17896.     * CChalom - Check XML_Type method, a new checking was added there
  17897.     * 2010/08/08 Fix by Jaketon / CChalom, when SET("POINT") = ","
  17898.     *!*            CASE FillChar = "N"
  17899.     *!*                llIsNumber = .T.
  17900. CASE (" " $ tcContents) OR ("%" $ tcContents)
  17901.     llIsNumber = .F.
  17902. CASE llAllDigits AND LEN(CHRTRAN(tcContents, ".,$", "")) > 15 && Excel can't deal with numbers of more than 15 positions
  17903.     llIsNumber = .F.
  17904. CASE OCCURS(This.SetPoint, tcContents) > 0 AND ;
  17905.         OCCURS(This.SetSeparator, tcContents) > 0 AND ;
  17906.         (AT(This.SetPoint, tcContents) < AT(This.SetSeparator, tcContents))
  17907.     llIsNumber = .F.
  17908. CASE OCCURS(This.SetPoint, tcContents) > 1
  17909.     llIsNumber = .F.
  17910. CASE LEN(tcContents) = 0
  17911.     llIsNumber = .F.
  17912.     * 2011-02-23 Fix by Julio Laborin (Mexico)
  17913.     * CASE LEN(CHRTRAN(tcContents, '0123456789.,$', '')) = 0
  17914. CASE llAllDigits AND LEFT(tcContents, 2) = "0" + This.SetPoint
  17915.     llIsNumber = .T.
  17916. CASE LEFT(tcContents, 1) = "0" AND NOT EMPTY(SUBSTR(tcContents,2,1)) AND (SUBSTR(tcContents,2,1) <> This.SetPoint)
  17917.     llIsNumber = .F.
  17918. CASE llAllDigits AND SUBSTR(tcContents,1,1) <> "0"
  17919.     llIsNumber = .T.
  17920. CASE llAllDigits AND VAL(tcContents) = 0
  17921.     llIsNumber = .T.
  17922. OTHERWISE
  17923.     llIsNumber = (LEFT(tcContents,1) = '-' AND LEN(CHRTRAN(SUBSTR(tcContents,2),'0123456789.,$','')) = 0)
  17924. ENDCASE
  17925. RETURN llIsNumber
  17926. ENDPROC
  17927. PROCEDURE xml_numberformat
  17928. LPARAMETERS tcContents
  17929. LOCAL lcType
  17930. lcType = UPPER(This.Xml_Type(tcContents))
  17931. DO CASE
  17932.     CASE lcType = 'NUMBER'
  17933.         *    2010/08/08 Fix by Jaketon / CChalom, when SET("POINT") = ","
  17934.         LOCAL lcPoint, lcSepar
  17935.         lcPoint = This.SetPoint
  17936.         lcSepar = This.SetSeparator
  17937.         IF AT(lcSepar, tcContents) > 0 
  17938.             lcFormat = '###,###,##0' 
  17939. *            lcFormat = '###' + lcSepar + '###' + lcSepar + '##0' 
  17940.         ELSE
  17941.             lcFormat = '########0' 
  17942.         ENDIF
  17943.         IF AT(lcPoint, tcContents) > 0
  17944. *            lcFormat = lcFormat + "." + REPLICATE('0',LEN(tcContents) - AT(lcPoint, tcContents))
  17945.             lcFormat = lcFormat + "." + REPLICATE('0',LEN(tcContents) - AT(lcPoint, tcContents) - IIF(RIGHT(tcContents,1)=")",1,0))
  17946.         ENDIF 
  17947.     CASE lcType = 'DATETIME'
  17948.         lcFormat = 'Short Date'
  17949.     OTHERWISE
  17950.         lcFormat = 'String'
  17951. ENDCASE
  17952. RETURN lcFormat
  17953. ENDPROC
  17954. PROCEDURE xml_file_header
  17955. LOCAL lcRetVal, lcCodePage, lcEncoding
  17956. IF EMPTY(This.cCodePage)
  17957.     lcCodePage = TRANSFORM(CPCURRENT())
  17958. ELSE 
  17959.     lcCodePage = ALLTRIM(This.cCodePage)
  17960. ENDIF
  17961. * Let's use ISO-8859-1 instead of Windows-1252, to make it compatible with LibreOffice
  17962. * Still need checking from people that use different CodePages
  17963. DO CASE
  17964. CASE "1252" $ lcCodePage
  17965.     lcEncoding = "ISO-8859-1"
  17966. CASE INLIST(lcCodePage, "CP950", "CP936", "950", "936")  && Chinese
  17967.     lcEncoding = "UTF-8"
  17968.     This.lConvertToUTF8    = .T.
  17969. *    lcEncoding = "GB2312"
  17970. OTHERWISE
  17971.     * lcEncoding = "Windows-" + IIF("CP" $ lcCodePage, "", "CP") + lcCodePage && comment by amaximum
  17972.     lcEncoding = "Windows-" + IIF(LEFT(lcCodePage, 2) = "CP", SUBSTR(lcCodePage, 3), lcCodePage)
  17973. ENDCASE
  17974. TEXT TO lcRetVal TEXTMERGE NOSHOW PRETEXT 2
  17975. <?xml version="1.0" encoding="<<lcEncoding>>"?>
  17976. <?mso-application progid="Excel.Sheet"?>
  17977. ENDTEXT
  17978. *!*    * Original code from Alejandro Sosa
  17979. *!*    TEXT TO lcRetVal NOSHOW PRETEXT 2
  17980. *!*    <?xml version="1.0"?>
  17981. *!*    <?mso-application progid="Excel.Sheet"?>
  17982. *!*    ENDTEXT
  17983. * Cancelled Andrus Moor'update because the resulting header would not allow the 
  17984. * XML to be opened by LIBREOFFICE
  17985. * 02/01/07 Change by andrus Moor
  17986. *!*    TEXT TO lcRetVal TEXTMERGE NOSHOW PRETEXT 2
  17987. *!*    <?xml version="1.0" encoding="Windows-<<TRANSFORM(CPCURRENT())>>"?>
  17988. *!*    <?mso-application progid="Excel.Sheet"?>
  17989. *!*    ENDTEXT
  17990. RETURN lcRetVal + CHR(13) + CHR(10)
  17991. *!*    Microsoft's
  17992. *!*    ISO Code Page Charts
  17993. *!*    Globalization site: GlobalDev
  17994. *!*    ISO Code Pages at Microsoft's site
  17995. *!*    ISO/IEC 8859-1 (Latin 1)
  17996. *!*    ISO/IEC 8859-2 (Latin 2)
  17997. *!*    ISO/IEC 8859-3 (Latin 3)
  17998. *!*    ISO/IEC 8859-4 (Baltic)
  17999. *!*    ISO/IEC 8859-5 (Cyrillic)
  18000. *!*    ISO/IEC 8859-6 (Arabic)
  18001. *!*    ISO/IEC 8859-7 (Greek)
  18002. *!*    ISO/IEC 8859-8 (Hebrew)
  18003. *!*    ISO/IEC 8859-9 (Turkish)
  18004. *!*    ISO/IEC 8859-15 (Latin 9)
  18005. ENDPROC
  18006. PROCEDURE xml_style
  18007. LPARAMETERS tnID
  18008. *!*    IF "936" $ This.cCodepage && We are not setting fonts for Chinese
  18009. *!*                                && Let's allow Excel to use the one it has default for the language
  18010. *!*        lcFont = ""
  18011. *!*    ELSE
  18012. *!*        lcFont     = IIF(EMPTY(paStyles[tnId-20,2]),'',[ ss:FontName="] + ALLTRIM(paStyles[tnId-20,2]) + ["])
  18013. *!*    ENDIF
  18014. lcFont     = IIF(EMPTY(paStyles[tnId-20,2]),'',[ ss:FontName="] + ALLTRIM(paStyles[tnId-20,2]) + ["])
  18015. * 2010.01.30 - CChalom: Fix in the name of the field, correct = "Size"
  18016. lcFont     = lcFont + IIF(EMPTY(paStyles[tnId-20,3]),'',[ ss:Size="] + ALLTRIM(TRANSFORM(paStyles[tnId-20,3])) + ["])
  18017. *lcFont     = lcFont + IIF(EMPTY(paStyles[tnId-20,3]),'',[ ss:FontSize="] + ALLTRIM(TRANSFORM(paStyles[tnId-20,3])) + ["])
  18018. * 2010.01.30 - CChalom: Create a tag for the text color
  18019. LOCAL lcTextColor
  18020. lcTextColor = ALLTRIM(GETWORDNUM(paStyles[tnId-20,9],3,","))
  18021. IF NOT EMPTY(lcTextColor) AND lcTextColor <> "000000"
  18022.     lcFont     = lcFont + IIF(EMPTY(lcTextColor),'',[ ss:Color="#] + lcTextColor + ["])
  18023. ENDIF 
  18024. lcBold     = IIF(BITTEST(paStyles[tnId-20,4],0), [ ss:Bold="1"],'')
  18025. lcItalic = IIF(BITTEST(paStyles[tnId-20,4],1), [ ss:Italic="1"],'')
  18026. lcFamily = ''  && IIF(EMPTY(lcBold) AND EMPTY(lcItalic),'',[ x:Family="Modern"])
  18027. lcFont   = lcFont + lcFamily + lcBold + lcItalic
  18028. lcNumberFormat = IIF(EMPTY(paStyles[tnId-20,6]),'',[ ss:Format="] + paStyles[tnId-20,6] + ["])
  18029. *lcHorizontalAlignment = IIF(paStyles[tnId-20,7] = 2,[ ss:Horizontal="Center"],'')
  18030. DO CASE
  18031.     CASE 'LEFT' $ UPPER(paStyles[tnId-20,7])
  18032.         lcHorizontalAlignment = [ ss:Horizontal="Left"]
  18033.     CASE 'CENTER' $ UPPER(paStyles[tnId-20,7])
  18034.         lcHorizontalAlignment = [ ss:Horizontal="Center"]
  18035.     CASE 'RIGHT' $ UPPER(paStyles[tnId-20,7])
  18036.         lcHorizontalAlignment = [ ss:Horizontal="Right"]
  18037.     OTHERWISE
  18038.         lcHorizontalAlignment = ''
  18039. ENDCASE
  18040. *!* ExcelBorders format: <ExcelBorders>Top,Single,1;Bottom,Double,3</ExcelBorders>
  18041. *!*       <Borders>
  18042. *!*        <Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="1"/>
  18043. *!*        <Border ss:Position="Bottom" ss:LineStyle="Double" ss:Weight="3"/>
  18044. *!*       </Borders>
  18045. LOCAL laBorders[1],laBorder[1],i,j,lcPosition,lcLineStyle,lcWeight,lcBorder,lcBorders
  18046. ALINES(laBorders,paStyles[tnId-20,8],1,';')
  18047. IF EMPTY(laBorders[1])
  18048.     lcBorders = '<Borders/>'
  18049.     lcBorders = '<Borders>'
  18050.     FOR m.i = 1 TO ALEN(laBorders,1)
  18051.         ALINES(laBorder,laBorders[m.i],1,',')
  18052.         DIMENSION laBorder[3]
  18053.         IF EMPTY(laBorder[1])
  18054.             LOOP
  18055.         ENDIF
  18056.         lcPosition  = IIF(EMPTY(laBorder[1]),["Bottom"],["]+laBorder[1]+["])
  18057.         lcLineStyle = IIF(EMPTY(laBorder[2]) OR UPPER(laBorder[2]) = 'SINGLE',["Continuous"],["]+laBorder[2]+["])
  18058.         lcWeight    = IIF(EMPTY(laBorder[3]),["1"],["]+laBorder[3]+["])
  18059.         lcBorder    = [<Border ss:Position=]+lcPosition+[ ss:LineStyle=]+lcLineStyle + [ ss:Weight=] + lcWeight + [/>]
  18060.         lcBorders = lcBorders + lcBorder
  18061.     ENDFOR
  18062.     lcBorders = lcBorders + '</Borders>'
  18063. ENDIF
  18064. *!* Interior properties.
  18065. *!*        Color         = Background Color
  18066. *!*        Pattern         = "Solid" --> no pattern, "Gray125", "ThinVert ss:Pattern="Solid"Stripe"
  18067. *!*        PatternColor
  18068. *!* Samples:
  18069. *!*    <ExcelInterior>Solid,FFFF00</ExcelInterior>
  18070. *!*        <Interior ss:Color="#FFFF00" ss:Pattern="Gray125"/>
  18071. *!*    <ExcelInterior>Gray125,FFFFFF,000000</ExcelInterior>
  18072. *!*        <Interior ss:Color="#FFFFFF" ss:Pattern="Gray125" ss:PatternColor="#000000"/>
  18073. *!*    <ExcelInterior>ThinVertStripe,FFFF00,00FF00</ExcelInterior>
  18074. *!*        <Interior ss:Color="#FFFF00" ss:Pattern="ThinVertStripe" ss:PatternColor="#00FF00"/>
  18075. LOCAL laInterior[1],lcPosition,lcLineStyle,lcWeight,lcInterior
  18076. ALINES(laInterior,paStyles[tnId-20,9],1,',')
  18077. DIMENSION laInterior[3]
  18078. * 2010.01.30 - CChalom: Modified to create the tag only for non white background
  18079. IF EMPTY(laInterior[1]) OR laInterior[2] = "FFFFFF"
  18080.     lcInterior = '<Interior/>'
  18081.     lcPattern       = [ ss:Pattern=] + IIF(EMPTY(laInterior[1]),["Solid"],["]+laInterior[1]+["])
  18082.     lcColor           = [ ss:Color=] + IIF(EMPTY(laInterior[2]),["#FFFFFF"],["#]+laInterior[2]+["])
  18083.     lcPatternColor = IIF(EMPTY(laInterior[3]),[],[ ss:PatternColor=] + ["#]+laInterior[3]+["])
  18084.     lcInterior = '<Interior ' + lcColor + lcPattern + lcPatternColor + '/>'
  18085. ENDIF
  18086. TEXT TO lcRetVal NOSHOW TEXTMERGE PRETEXT 2
  18087.   <Style ss:ID="<<'s' + TRANSFORM(tnID,'@L 99')>>">
  18088.    <Alignment ss:Vertical="Bottom" <<lcHorizontalAlignment>>/>
  18089.    <<lcBorders>>
  18090.    <Font<<lcFont>>/>
  18091.    <<lcInterior>>
  18092.    <NumberFormat<<lcNumberFormat>>/>
  18093.    <Protection/>
  18094.   </Style>
  18095. ENDTEXT
  18096. RETURN lcRetVal + CHR(13) + CHR(10)
  18097. ENDPROC
  18098. PROCEDURE xml_workbook_header
  18099. LOCAL lcRetVal
  18100. TEXT TO lcRetVal NOSHOW PRETEXT 2
  18101. <Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet"
  18102.  xmlns:o="urn:schemas-microsoft-com:office:office"
  18103.  xmlns:x="urn:schemas-microsoft-com:office:excel"
  18104.  xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"
  18105.  xmlns:html="http://www.w3.org/TR/REC-html40">
  18106. ENDTEXT
  18107. RETURN lcRetVal + CHR(13) + CHR(10)
  18108. ENDPROC
  18109. PROCEDURE xml_worksheet_header
  18110. LPARAMETERS tcWorksheetName
  18111. LOCAL lcRetVal
  18112. TEXT TO lcRetVal NOSHOW TEXTMERGE PRETEXT 2
  18113. <Worksheet ss:Name="<<tcWorksheetName>>">
  18114. ENDTEXT
  18115. RETURN lcRetVal + CHR(13) + CHR(10)
  18116. ENDPROC
  18117. PROCEDURE xml_row_header
  18118. LOCAL lcRetVal
  18119. TEXT TO lcRetVal TEXTMERGE NOSHOW PRETEXT 2
  18120. <Row ss:Index="<<ALLTRIM(TRANSFORM(ExcelRow))>>" ss:AutoFitHeight="1">
  18121. ENDTEXT
  18122. RETURN lcRetVal + CHR(13) + CHR(10)
  18123. ENDPROC
  18124. PROCEDURE xml_row_footer
  18125. RETURN '</Row>' + CHR(13) + CHR(10)
  18126. ENDPROC
  18127. PROCEDURE xml_cell
  18128. LPARAMETERS tcContents, tcUnicode, tnStyleNumber
  18129. tcContents = ALLTRIM(tcContents)
  18130. LOCAL lcOrigContents, lcStyle
  18131. lcOrigContents = tcContents
  18132. lcStyle = UPPER(paStyles[tnStyleNumber-20,5])
  18133. LOCAL lcRetVal
  18134. IF lcStyle = 'DATETIME'
  18135.     tcContents = CTOD(tcContents)
  18136.     IF EMPTY(tcContents) OR ( YEAR(tcContents) < 1900 )  && Excel does not like years before 1900
  18137.                 * CChalom 2013-03-01
  18138.                 * http://www.foxite.com/archives/0000371512.htm
  18139.         lcStyle = "STRING"
  18140.         tcContents = lcOrigContents
  18141.     ELSE
  18142.         *1899-12-31T14:49:56.000
  18143.         tcContents = TRANSFORM(YEAR(tcContents),'@L 9999') ;
  18144.             + '-' + TRANSFORM(MONTH(tcContents),'@L 99') ;
  18145.             + '-' + TRANSFORM(DAY(tcContents),'@L 99') ;
  18146.             + 'T00:00:00.000'
  18147.     ENDIF
  18148. ENDIF
  18149. * 2010/08/08 Fix by Jaketon / CChalom, when SET("POINT") = ","
  18150. IF lcStyle = 'NUMBER'
  18151.     * 2012-11-24 - replace the separator only if 'Separator' and 'Point' are different
  18152.     IF This.SetSeparator <> This.SetPoint
  18153.         tcContents = CHRTRAN(tcContents, This.SetSeparator, '') && remove separator symbols
  18154.     ENDIF
  18155.     tcContents = CHRTRAN(tcContents, This.SetPoint    ,'.') && Replace with "dot"
  18156.     * 2012-05-30 Fix by RGBean to allow flexible Currency and ()'s for Negative
  18157.     * 2012-12-01 Fix by Max Arlikh, avoiding error if "." $ SET("Currency")
  18158.     tcContents =  CHRTRAN(tcContents, chrtran(SET('Currency',1), '.', ''), '')    && Kill any Currency character(s) && upd 26.11.2012 amaximum - first kill point symbol from currency symbols to avoid conflict whth replace with 'dot' above
  18159.     IF AT('(', tcContents) > 0 AND AT(')', tcContents) > 0    && ()'s used for negative
  18160.         tcContents = CHRTRAN(tcContents,'()','')              && Kill the ()'s
  18161.         tcContents = '-'+ALLTRIM(tcContents)                  && Make it a negative value
  18162.     ENDIF
  18163. ENDIF
  18164. LOCAL llUseUnicode
  18165. llUseUnicode = (lcStyle = 'STRING') and ("?" $ tcContents)
  18166. LOCAL llChinese
  18167. llChinese = ("936" $ This.cCodePage)
  18168. IF lcStyle = 'STRING' AND (llUseUnicode) AND (NOT llChinese)
  18169.     LOCAL n, lcUNValue, lnUNValue, lcNewContents
  18170.     lcUNValue     = ""
  18171.     lcNewContents = ""
  18172.     LOCAL lnChars
  18173.     lnChars = (LEN(tcContents) * 2)
  18174.     FOR n = 1 TO lnChars STEP 2
  18175.         lcUNValue = SUBSTR(tcUnicode, n, 2)
  18176.         IF EMPTY(lcUNValue)
  18177.             EXIT
  18178.         ENDIF
  18179.         lnUNValue = CTOBIN(0h+lcUNValue,"2RS")
  18180.         lcNewContents = lcNewContents + '&#' + ALLTRIM(TRANSFORM(lnUNValue)) + ';'
  18181.     ENDFOR
  18182.     tcContents = lcNewContents
  18183. ENDIF
  18184. *!*    IF UPPER(paStyles[tnStyleNumber-20,5]) = 'STRING' AND (NOT "1251" $ This.cCodePage) AND (This.lUseUnicode = .F.)
  18185. *!*        tcContents = This.Xml_Encode(tcContents,'
  18186. *!*        tcContents = This.Xml_Encode(tcContents,'
  18187. *!*        tcContents = This.Xml_Encode(tcContents,'
  18188. *!*        tcContents = This.Xml_Encode(tcContents,'
  18189. *!*        tcContents = This.Xml_Encode(tcContents,'
  18190. *!*        tcContents = This.Xml_Encode(tcContents,'
  18191. *!*        tcContents = This.Xml_Encode(tcContents,'
  18192. *!*        tcContents = This.Xml_Encode(tcContents,'
  18193. *!*        tcContents = This.Xml_Encode(tcContents,'
  18194. *!*        tcContents = This.Xml_Encode(tcContents,'
  18195. *!*        tcContents = This.Xml_Encode(tcContents,'
  18196. *!*        tcContents = This.Xml_Encode(tcContents,'
  18197. *!*        tcContents = This.Xml_Encode(tcContents,'
  18198. *!*        tcContents = This.Xml_Encode(tcContents,'
  18199. *!*        tcContents = This.Xml_Encode(tcContents,'
  18200. *!*        tcContents = This.Xml_Encode(tcContents,'
  18201. *!*        tcContents = This.Xml_Encode(tcContents,'
  18202. *!*        tcContents = This.Xml_Encode(tcContents,'
  18203. *!*        tcContents = This.Xml_Encode(tcContents,'
  18204. *!*        tcContents = This.Xml_Encode(tcContents,'
  18205. *!*        tcContents = This.Xml_Encode(tcContents,'
  18206. *!*        tcContents = This.Xml_Encode(tcContents,'
  18207. *!*        tcContents = This.Xml_Encode(tcContents,'
  18208. *!*        tcContents = This.Xml_Encode(tcContents,'
  18209. *!*        tcContents = This.Xml_Encode(tcContents,'
  18210. *!*        tcContents = This.Xml_Encode(tcContents,'
  18211. *!*        tcContents = This.Xml_Encode(tcContents,'
  18212. *!*        tcContents = This.Xml_Encode(tcContents,'
  18213. *!*        tcContents = This.Xml_Encode(tcContents,'
  18214. *!*        tcContents = This.Xml_Encode(tcContents,'
  18215. *!*        tcContents = This.Xml_Encode(tcContents,'
  18216. *!*        tcContents = This.Xml_Encode(tcContents,'
  18217. *!*        tcContents = This.Xml_Encode(tcContents,'
  18218. *!*        tcContents = This.Xml_Encode(tcContents,'
  18219. *!*        tcContents = This.Xml_Encode(tcContents,'
  18220. *!*        tcContents = This.Xml_Encode(tcContents,'
  18221. *!*        tcContents = This.Xml_Encode(tcContents,'
  18222. *!*        tcContents = This.Xml_Encode(tcContents,'
  18223. *!*        tcContents = This.Xml_Encode(tcContents,'
  18224. *!*        tcContents = This.Xml_Encode(tcContents,'
  18225. *!*        tcContents = This.Xml_Encode(tcContents,'
  18226. *!*        tcContents = This.Xml_Encode(tcContents,'
  18227. *!*        tcContents = This.Xml_Encode(tcContents,'
  18228. *!*        tcContents = This.Xml_Encode(tcContents,'
  18229. *!*        tcContents = This.Xml_Encode(tcContents,'
  18230. *!*        tcContents = This.Xml_Encode(tcContents,'
  18231. *!*        tcContents = This.Xml_Encode(tcContents,'
  18232. *!*        tcContents = This.Xml_Encode(tcContents,'
  18233. *!*        tcContents = This.Xml_Encode(tcContents,'
  18234. *!*        tcContents = This.Xml_Encode(tcContents,'
  18235. *!*        tcContents = This.Xml_Encode(tcContents,'
  18236. *!*        tcContents = This.Xml_Encode(tcContents,'
  18237. *!*        tcContents = This.Xml_Encode(tcContents,'
  18238. *!*        tcContents = This.Xml_Encode(tcContents,'
  18239. *!*        tcContents = This.Xml_Encode(tcContents,'
  18240. *!*    ENDIF
  18241. LOCAL lcMergeAcross
  18242. lcMergeAcross = IIF(EMPTY(nExcelMergeAcross),'',[ ss:MergeAcross="] + ALLTRIM(TRANSFORM(nExcelMergeAcross),'99999') + ["])
  18243. lcData = IIF(lcStyle = 'STRING' AND EMPTY(tcContents),'', ;
  18244.     '<Data ss:Type="' + paStyles[tnStyleNumber-20,5] + '">' + tcContents + '</Data>')
  18245. * 21/06/08 ExcelInsertFormula    <Cell ss:Index="7" ss:StyleID="s68" ss:Formula="=+R[-4]C-R[-3]C">
  18246. *TEXT TO lcRetVal TEXTMERGE NOSHOW PRETEXT 2
  18247. *<Cell  ss:Index="<<ALLTRIM(TRANSFORM(ExcelCol))>>" <<lcMergeAcross>> ss:StyleID="<<'s'+TRANSFORM(tnStyleNumber,'@L 99')>>"><<lcData>></Cell>
  18248. *ENDTEXT
  18249. LOCAL lcInsertFormula,lcNamedCell
  18250. lcInsertFormula = IIF(EMPTY(cExcelInsertFormula),'',[ ss:Formula="] + ALLTRIM(cExcelInsertFormula) + ["])
  18251. * 21/06/08 ExcelNamedCell    <Cell ss:Index="13" ss:StyleID="s67"><Data ss:Type="Number">17832.98</Data><NamedCell ss:Name="Cajas_Per2"/></Cell>
  18252. lcNamedCell = ''
  18253. IF !EMPTY(cExcelNamedCell)
  18254.     lcNamedCell = [<NamedCell ss:Name="] + ALLTRIM(cExcelNamedCell) + ["/>]
  18255.     *  <NamedRange ss:Name="Cajas_Per1" ss:RefersTo="=Sheet1!R10C7"/>
  18256.     REPLACE cExcelNamedRange WITH ALLTRIM(cExcelNamedCell) + [;] ;
  18257.         + [=Sheet1!R] + ALLTRIM(TRANSFORM(ExcelRow)) ;
  18258.         + [C] + ALLTRIM(TRANSFORM(ExcelCol))
  18259. ENDIF
  18260. *TEXT TO lcRetVal TEXTMERGE NOSHOW PRETEXT 2
  18261. *<Cell  ss:Index="<<ALLTRIM(TRANSFORM(ExcelCol))>>" <<lcMergeAcross>> ss:StyleID="<<'s'+TRANSFORM(tnStyleNumber,'@L 99')>>" <<lcInsertFormula>> ><<lcData>></Cell>
  18262. *ENDTEXT
  18263. lcRetVal = [<Cell  ss:Index="] + ALLTRIM(TRANSFORM(ExcelCol)) + ["] ;
  18264.     + lcMergeAcross + [ ss:StyleID="s] + TRANSFORM(tnStyleNumber,'@L 99') + ["] ;
  18265.     + lcInsertFormula + [>] + lcData ;
  18266.     + lcNamedCell + [</Cell>]
  18267. RETURN lcRetVal + CHR(13) + CHR(10)
  18268. *!*       <Row ss:AutoFitHeight="0">
  18269. *!*        <Cell ss:StyleID="s27"><Data ss:Type="DateTime">2006-10-05T00:00:00.000</Data></Cell>
  18270. *!*       </Row>
  18271. *!*       <Row ss:AutoFitHeight="0">
  18272. *!*        <Cell ss:StyleID="s22"><Data ss:Type="String">Puro texto Bold</Data></Cell>
  18273. *!*       </Row>
  18274. ENDPROC
  18275. PROCEDURE xml_table_header
  18276. LPARAMETERS tnRows,tnCols
  18277. LOCAL lcRetVal,ja[1],i,lcColumns
  18278. *   <Column ss:StyleID="s21" ss:AutoFitWidth="0" ss:Width="91.5"/>
  18279. *   <Column ss:Index="4" ss:StyleID="s21" ss:AutoFitWidth="0" ss:Width="71.25"/>
  18280. SELECT MAX(ExcelCol),MAX(ExcelRow) ;
  18281.   FROM (This.cOutputAlias) ;
  18282.   INTO ARRAY ja
  18283. lcColumns = ''
  18284. ASORT(paColData,1,ALEN(paColData),0)
  18285. FOR m.i = 1 TO ALEN(paColData,1)
  18286.     IF EMPTY(paColData[m.i,1])
  18287.         LOOP
  18288.     ENDIF
  18289.     * Column1 = Column number
  18290.     * Column2 = AutoFitWidth (.T. / .F.)
  18291.     * Column3 = Column width
  18292.     lcColumns = lcColumns + CHR(13) + CHR(10) + [<Column ss:Index="] + TRANSFORM(paColData[i,1]) + ["]
  18293.     lcColumns = lcColumns + [ ss:AutoFitWidth="] + IIF(paColData[m.i,2],'1','0') + ["]
  18294.     * The stored width is screen width / 1.33333.  Screen pixels are screen width * 7 + 5.
  18295.     lcColumns = lcColumns + [ ss:Width="] + TRANSFORM(((paColData[m.i,3]*7+5)/1.333333)) + ["/>]
  18296. ENDFOR
  18297. *!*    TEXT TO lcRetVal TEXTMERGE NOSHOW PRETEXT 2
  18298. *!*    <Table ss:ExpandedColumnCount="<<ja[1]>>" ss:ExpandedRowCount="<<ja[2]>>" x:FullColumns="1"
  18299. *!*     x:FullRows="1" ss:StyleID="s21" ss:DefaultRowHeight="14.25"><<lcColumns>> 
  18300. *!*    ENDTEXT
  18301. TEXT TO lcRetVal TEXTMERGE NOSHOW PRETEXT 2
  18302. <Table ss:ExpandedColumnCount="<<ja[1]>>" ss:ExpandedRowCount="<<ja[2]>>" x:FullColumns="1"
  18303.  x:FullRows="1" ss:StyleID="s21"><<lcColumns>> 
  18304. ENDTEXT
  18305. RETURN lcRetVal + CHR(13) + CHR(10)
  18306. ENDPROC
  18307. PROCEDURE xml_workbook_footer
  18308. RETURN '</Workbook>' + CHR(13) + CHR(10)
  18309. ENDPROC
  18310. PROCEDURE xml_worksheet_footer
  18311. LOCAL lcRetVal
  18312. TEXT TO lcRetVal NOSHOW PRETEXT 2
  18313.  </Worksheet>
  18314. ENDTEXT
  18315. RETURN lcRetVal + CHR(13) + CHR(10)
  18316. ENDPROC
  18317. PROCEDURE xml_stylenumber
  18318. LPARAMETERS tcContents
  18319. LOCAL lcType,lcNumberFormat,lcKey,i
  18320. lcType           = This.Xml_Type(tcContents)
  18321. lcNumberFormat = IIF(lcType = 'Number',This.Xml_NumberFormat(tcContents),'')
  18322. lcNumberFormat = IIF(lcType = 'DateTime','Short Date',lcNumberFormat)
  18323. lcKey           = UPPER(PADR(FontFace,20)+TRAN(FontSize,'99')+TRAN(FontStyle,'99') ;
  18324.                 + PADR(lcType,10) + PADR(lcNumberFormat,20)) + PADR(cExcelAlignment,30) ;
  18325.                 + PADR(cExcelBorder,50) + PADR(cExcelInterior,50)
  18326. i = ASCAN(paStyles,lcKey,1,ALEN(paStyles,1),1,1 + 2 + 4 + 8)
  18327. IF i = 0
  18328.     i = ALEN(paStyles,1)+1
  18329.     DIMENSION paStyles[i,ALEN(paStyles,2)]
  18330.     paStyles[i,2] = FontFace
  18331.     paStyles[i,3] = FontSize
  18332.     paStyles[i,4] = FontStyle
  18333.     paStyles[i,5] = lcType
  18334.     paStyles[i,6] = lcNumberFormat
  18335.     paStyles[i,7] = cExcelAlignment    && Alignment
  18336.     paStyles[i,8] = cExcelBorder    && Border
  18337.     paStyles[i,9] = cExcelInterior    && Interior color and pattern
  18338.     paStyles[i,1] = lcKey
  18339. ENDIF
  18340. RETURN 20 + i
  18341. ENDPROC
  18342. PROCEDURE xml_type
  18343. LPARAMETERS tcContents
  18344. tcContents = ALLTRIM(tcContents)
  18345. LOCAL lcType,lcSetDate
  18346. *lcSetDate = SET("Date")
  18347. *SET DATE TO BRITISH
  18348. DO CASE
  18349.     * CChalom - Check XML_Type method, a new checking was added there 
  18350.     * Checks if the date type is ANSI
  18351.     CASE (OCCURS('.', tcContents) = 2) AND ;
  18352.             This.SetDateAnsi AND ;
  18353.             (OCCURS(':', tcContents) = 2) && Probably a DateTime, NOT a Number !
  18354.         lcType = 'String'
  18355.     CASE (OCCURS('.', tcContents) = 2) AND ;
  18356.             This.SetDateAnsi AND ;
  18357.             (LEN(GETWORDNUM(tcContents, 2, ".")) = 2) AND CTOD(tcContents) # {} && updated 2012/02/07 - aMaximum
  18358.         lcType = 'DateTime'
  18359.     CASE This.IsNumber(tcContents)
  18360.         lcType = 'Number'
  18361.     CASE AT('/',tcContents,2) > 0 AND AT('/',tcContents,3) = 0
  18362.         * Make sure a string with two slashes is not interpreted as a date unless it is a date
  18363.         tcContents = CTOD(tcContents)
  18364.         IF VARTYPE(tcContents) = 'D' AND !EMPTY(tcContents)
  18365.             lcType = 'DateTime'
  18366.         ELSE
  18367.             lcType = 'String'
  18368.         endif
  18369.     OTHERWISE
  18370.         lcType = 'String'
  18371. ENDCASE
  18372. *SET DATE TO &lcSetDate
  18373. RETURN lcType
  18374. ENDPROC
  18375. PROCEDURE xml_styles_header
  18376. RETURN '<Styles>' + CHR(13) + CHR(10)
  18377. ENDPROC
  18378. PROCEDURE xml_styles_footer
  18379. RETURN '</Styles>' + CHR(13) + CHR(10)
  18380. ENDPROC
  18381. PROCEDURE xml_table_footer
  18382. RETURN '</Table>' + CHR(13) + CHR(10)
  18383. ENDPROC
  18384. PROCEDURE xml_encode
  18385. LPARAMETERS tcContents,tcChar
  18386. * tcContents = STRTRAN(tcContents,tcChar,'&#' + ALLTRIM(TRANSFORM(ASC(tcChar))) + ';')
  18387. lcValue = CTOBIN(0h+STRCONV(tcChar,5),"2RS")
  18388. tcContents = STRTRAN(tcContents,tcChar,'&#' + ALLTRIM(TRANSFORM( lcValue)) + ';')
  18389. RETURN tcContents
  18390. ENDPROC
  18391. PROCEDURE calcbandnumbers
  18392. * This routine places in frx.User the number of the report band to which each element belongs
  18393. *  When OBJTYPE = 9 (a band), the following values are used:
  18394. *  0 = Title 
  18395. *  1 = Page header
  18396. *  2 = Column header
  18397. *  3 = Group header
  18398. *  4 = Detail
  18399. *  5 = Group footer
  18400. *  6 = Column footer
  18401. *  7 = Page footer
  18402. *  8 = Summary
  18403. * NOTES:
  18404. * Frx.VPos contains the vertical position of the report elements AS THEY APPEAR IN REPORT DESIGNER
  18405. * In order to determine the band to which report elements belong we need to know the top of each band IN REPORT DESIGNER
  18406. * Frx.Height contains the height of report bands, but we must calculate VPos for each band.
  18407. * "Report Bands" refer to report designer areas that contain fields and labels.  They are numbered as above.
  18408. * "Title Bands" refer to report designer areas that contain titles such as Detail, Page Header
  18409. * Procedure:
  18410. * Store VPos of "title bands" in array.
  18411. * Store in User field the number of the report band to which each report element belongs
  18412.     LOCAL laBands[1],lnVpos,i,lnSelect
  18413.     * These constants come from VFP program convert.prg
  18414.     m.g_pixelsize  = 96       && logical pixels per inch
  18415.     m.g_bandheight = ((19/m.g_pixelsize) * 10000)
  18416.     m.g_bandfudge  =  4350
  18417.     * Metrics for various objects, report bands, etc.
  18418.     #DEFINE c_radhght      1.308
  18419.     #DEFINE c_chkhght      1.308
  18420.     #DEFINE c_listht       1.000
  18421.     #DEFINE c_adjfld       0.125
  18422.     #DEFINE c_adjlist      0.125
  18423.     #DEFINE c_adjtbtn      0.769
  18424.     #DEFINE c_adjrbtn      0.308
  18425.     #DEFINE c_vchkbox      0.154
  18426.     #DEFINE c_vradbtn      0.154
  18427.     #DEFINE c_vlist        0.500
  18428.     #DEFINE c_hpopup       1.000
  18429.     #DEFINE c_adjbox       0.500
  18430.     #DEFINE c_chkpixel        12
  18431.     laBands = 0
  18432.     SELECT RECNO(),ObjCode,000000.000,Height ;
  18433.       FROM (This.cFRXalias) ;
  18434.      WHERE Platform = 'WINDOWS' ;
  18435.             AND ObjType = 9 ;
  18436.       INTO ARRAY laBands
  18437.     lnVPosBottom = - m.g_bandheight && - (m.g_bandfudge/m.g_pixelsize)
  18438.      FOR m.i = 1 TO ALEN(laBands,1)
  18439.         lnVPosBottom = lnVPosBottom + laBands[m.i,4] + m.g_bandheight + (m.g_bandfudge/m.g_pixelsize)
  18440.         laBands[m.i,3] = lnVPosBottom
  18441.     ENDFOR
  18442.     * Make cursor readwrite
  18443.     SELECT * ;
  18444.       FROM (This.cFRXalias) ;
  18445.       INTO CURSOR Frx1 READWRITE
  18446.     USE IN (This.cFRXalias)
  18447.     SELECT * ;
  18448.       FROM Frx1 ;
  18449.       INTO CURSOR (This.cFRXalias) READWRITE
  18450.     USE IN Frx1
  18451.     SCAN FOR Platform = 'WINDOWS' AND (ObjType = 5 OR ObjType = 8)
  18452.          FOR m.i = 1 TO ALEN(laBands,1)
  18453.              IF VPos < laBands[m.i,3]
  18454.                  * Store in User the number of the band to which report element belongs
  18455.                  REPLACE User WITH TRANSFORM(laBands[m.i,2],'999')
  18456.                  EXIT
  18457.              ENDIF
  18458.         ENDFOR
  18459.     ENDSCAN
  18460. ENDPROC
  18461. PROCEDURE xextractexcelcol
  18462. LPARAMETERS tcComment
  18463. RETURN '0000000'
  18464. ENDPROC
  18465. PROCEDURE applyexcelstyle
  18466. LPARAMETERS tcExcelStyle,tnOption
  18467. SELECT (this.cOutputAlias)
  18468. IF !EMPTY(tcExcelStyle)
  18469.     &tcExcelStyle.(tnOption,This)
  18470. ENDIF
  18471. RETURN
  18472. *!*    **** Moved to an outside procedure ****
  18473. *!*    * My Default ExcelStyle
  18474. *!*    *  0 = Title 
  18475. *!*    *  1 = Page header
  18476. *!*    *  2 = Column header
  18477. *!*    *  3 = Group header
  18478. *!*    *  4 = Detail
  18479. *!*    *  5 = Group footer
  18480. *!*    *  6 = Column footer
  18481. *!*    *  7 = Page footer
  18482. *!*    *  8 = Summary
  18483. *!*    tcOutputAlias = This.cOutputAlias
  18484. *!*    DO CASE
  18485. *!*        CASE tnOption = 1    && Before extracting comments
  18486. *!*        CASE tnOption = 2    && Before assigning row
  18487. *!*            DELETE ALL FOR (cUser = '  0' OR cUser = '  1') ;
  18488. *!*                            AND ('FECHA DE IMPRESION:' $ cExpr OR 'FECHA DE IMPRESI
  18489. N:' $ cExpr ;
  18490. *!*                                 OR 'PAGINA:' $ cExpr OR 'P
  18491. GINA:' $ cExpr ;
  18492. *!*                                 OR cExpr = 'DATE()' OR cExpr = 'DATETIME()' OR cExpr = 'TIME()' OR cExpr = '_PAGENO')
  18493. *!*    *        DELETE ALL FOR (cUser = '  0' OR cUser = '  1') ;
  18494. *!*                            AND ('PAGINA:' $ cExpr OR 'P
  18495. GINA:' $ cExpr OR cExpr = '_PAGENO')
  18496. *!*    *        DELETE ALL FOR (cUser = '  0' OR cUser = '  1') ;
  18497. *!*                            AND ('FECHA DE IMPRESION:' $ cExpr OR 'FECHA DE IMPRESI
  18498. N:' $ cExpr ;
  18499. *!*                                 OR cExpr = 'DATE()' OR cExpr = 'TIME()') ;
  18500. *!*                            AND nPageNo > 1
  18501. *!*        CASE tnOption = 3    && Before assigning col
  18502. *!*        CASE tnOption = 4    && After assigning row and column
  18503. *!*            * Cursores con las filas y columnas
  18504. *!*            SELECT DISTINCT ExcelRow,LEFT(User,3) AS User ;
  18505. *!*              FROM (tcOutputAlias) ;
  18506. *!*              INTO ARRAY laRowUser
  18507. *!*            CREATE CURSOR ExcelCols (ExcelCol N(3))
  18508. *!*            FOR i = 1 TO pnMaxCol
  18509. *!*                INSERT INTO ExcelCols (ExcelCol) VALUES(i)
  18510. *!*            ENDFOR
  18511. *!*            * Lista de celdas con ----- or =====
  18512. *!*            SELECT ExcelRow,ExcelCol,Contents,User,nExcelUnderlinedColCount ;
  18513. *!*              FROM (tcOutputAlias) ;
  18514. *!*             WHERE LEFT(cContents,5) = '=====' OR LEFT(cContents,5) = '-----' ;
  18515. *!*              INTO CURSOR DashedCells READWRITE
  18516. *!*            * Borramos celdas con ----- or =====
  18517. *!*            DELETE &tcOutputAlias ;
  18518. *!*              FROM DashedCells ;
  18519. *!*             WHERE &tcOutputAlias..ExcelRow = DashedCells.ExcelRow AND &tcOutputAlias..ExcelCol = DashedCells.ExcelCol
  18520. *!*            * Cells to underline (one line above ----- or =====)
  18521. *!*            SELECT ExcelRow - 1 AS ExcelRow,ExcelCol,Contents,User,nExcelUnderlinedColCount,.F. AS lNueva ;
  18522. *!*              FROM DashedCells ;
  18523. *!*              INTO CURSOR UnderlinedCells READWRITE
  18524. *!*            * Add line extensions
  18525. *!*            SCAN FOR INT(LEN(ALLTRIM(Contents)) / 8) > 1 AND !lNueva
  18526. *!*                lnRecno       = RECNO()
  18527. *!*                lnExcelRow = ExcelRow
  18528. *!*                lcContents = LEFT(Contents,5)
  18529. *!*                FOR i = 1 TO MIN(INT(LEN(ALLTRIM(Contents)) / 8),MAX(1,nExcelUnderlinedColCount))
  18530. *!*                    lnExcelCol = UnderlinedCells.ExcelCol + i
  18531. *!*                    IF lnExcelCol > pnMaxCol
  18532. *!*                        EXIT
  18533. *!*                    ENDIF
  18534. *!*    *!*                    SELECT (tcOutputAlias)
  18535. *!*    *!*                    LOCATE FOR ExcelRow = lnExcelRow AND ExcelCol = lnExcelCol
  18536. *!*    *!*                    IF EOF()
  18537. *!*    *!*                        SELECT UnderlinedCells
  18538. *!*    *!*                        LOCATE FOR ExcelRow = lnExcelRow AND ExcelCol = lnExcelCol
  18539. *!*    *!*                        IF EOF()
  18540. *!*    *!*                            j = ASCAN(laRowUser,lnExcelRow,1,ALEN(laRowUser,1),1,8)
  18541. *!*    *!*                            lcUser = IIF(j > 0,laRowUser[j,2],User)
  18542. *!*    *!*                            INSERT INTO UnderlinedCells (ExcelRow,ExcelCol,Contents,User) VALUES (lnExcelRow,lnExcelCol,lcContents,lcUser)
  18543. *!*    *!*                            GOTO (lnRecno) IN UnderlinedCells
  18544. *!*    *!*                        ENDIF
  18545. *!*    *!*                    ENDIF
  18546. *!*                    LOCATE FOR ExcelRow = lnExcelRow AND ExcelCol = lnExcelCol
  18547. *!*                    IF EOF()
  18548. *!*                        j = ASCAN(laRowUser,lnExcelRow,1,ALEN(laRowUser,1),1,8)
  18549. *!*                        lcUser = IIF(j > 0,laRowUser[j,2],User)
  18550. *!*                        INSERT INTO UnderlinedCells (ExcelRow,ExcelCol,Contents,User,lNueva) VALUES (lnExcelRow,lnExcelCol,lcContents,lcUser,.T.)
  18551. *!*                    ENDIF
  18552. *!*                    GOTO (lnRecno) IN UnderlinedCells
  18553. *!*                ENDFOR
  18554. *!*            ENDSCAN
  18555. *!*            
  18556. *!*            * Add missing cells that need to be underlined
  18557. *!*            SELECT U.* ;
  18558. *!*              FROM UnderlinedCells U ;
  18559. *!*             WHERE NOT EXISTS (SELECT OA.ExcelRow,OA.ExcelCol ;
  18560. *!*                                  FROM (tcOutputAlias) OA ;
  18561. *!*                                 WHERE OA.ExcelRow = U.ExcelRow ;
  18562. *!*                                       AND OA.ExcelCol = U.ExcelCol) ;
  18563. *!*              INTO CURSOR MissingCells
  18564. *!*            SELECT (tcOutputAlias)
  18565. *!*            APPEND FROM DBF('MissingCells') FIELDS ExcelRow,ExcelCol,User
  18566. *!*            SET ORDER TO RowCol
  18567. *!*            * Perform underline
  18568. *!*            SELECT UnderlinedCells
  18569. *!*            SET RELATION TO TRANSFORM(ExcelRow,'@L 999999') + TRANSFORM(ExcelCol,'@L 999999') INTO (tcOutputAlias)
  18570. *!*            REPLACE ALL &tcOutputAlias..cExcelBorder WITH 'Bottom,' ;
  18571. *!*                        + IIF(LEFT(ALLTRIM(Contents),5)='=====','Double,3','')
  18572. *!*            SET RELATION TO
  18573. *!*            * Eliminate dashed Excel rows that became empty (move up following cells)
  18574. *!*            SELECT (tcOutputAlias)
  18575. *!*            SET ORDER TO
  18576. *!*            SELECT DISTINCT ExcelRow + 0000000 AS ExcelRow ;
  18577. *!*              FROM DashedCells ;
  18578. *!*             WHERE ExcelRow NOT IN (SELECT ExcelRow ;
  18579. *!*                                       FROM (tcOutputAlias)) ;
  18580. *!*             GROUP BY 1 ;
  18581. *!*             ORDER BY 1 ;
  18582. *!*              INTO CURSOR RenglonesParaEliminar READWRITE
  18583. *!*            APPEND BLANK
  18584. *!*            REPLACE ExcelRow WITH 9999999
  18585. *!*            GO TOP
  18586. *!*            lnFirstRow = 0
  18587. *!*            SCAN
  18588. *!*                SELECT (tcOutputAlias)
  18589. *!*                REPLACE ALL ExcelRow WITH ExcelRow - RECNO('RenglonesParaEliminar') + 1 ;
  18590. *!*                        FOR BETWEEN(ExcelRow,lnFirstRow,RenglonesParaEliminar.ExcelRow)
  18591. *!*                lnFirstRow = RenglonesParaEliminar.ExcelRow
  18592. *!*            ENDSCAN
  18593. *!*            * If nExcelMergeAcross >=99 merges to rightmost column
  18594. *!*            SELECT (tcOutputAlias)
  18595. *!*            REPLACE ALL nExcelMergeAcross WITH pnMaxCol - ExcelCol ;
  18596. *!*                    FOR nExcelMergeAcross >=99
  18597. *!*            * Font
  18598. *!*            REPLACE ALL FontFace WITH 'Arial', ;
  18599. *!*                        FontSize WITH MAX(FontSize,10)        && Minimum font is 10
  18600. *!*            REPLACE ALL FontSize WITH 16 ;
  18601. *!*                    FOR (cUser = '  0' OR cUser = '  1') ;
  18602. *!*                        AND ObjType = 8 ;
  18603. *!*                        AND 'SIS.CNOMBRE' $ cExpr
  18604. *!*            REPLACE ALL FontStyle WITH 1 ;
  18605. *!*                    FOR cUser <= '  2' ;
  18606. *!*                        AND (ObjType = 5 OR ObjType = 8)
  18607. *!*            REPLACE ALL FontStyle WITH 1 + 2 ;
  18608. *!*                    FOR cUser = '  3' ;
  18609. *!*                        AND (ObjType = 5 OR ObjType = 8)
  18610. *!*            * Group Footer
  18611. *!*            * Creamos celdas vacias que faltan
  18612. *!*            LOCAL laRowsGroupFooter[1]
  18613. *!*            laRowsGroupFooter = 0
  18614. *!*            lcCols = 0
  18615. *!*            SELECT DISTINCT ExcelRow ;
  18616. *!*              FROM (tcOutputAlias) ;
  18617. *!*             WHERE cUser = '  5' ;
  18618. *!*              INTO ARRAY laRowsGroupFooter
  18619. *!*            FOR i = 1 TO ALEN(laRowsGroupFooter,1)
  18620. *!*                IF EMPTY(laRowsGroupFooter[i])
  18621. *!*                    LOOP
  18622. *!*                ENDIF
  18623. *!*                lnRow = laRowsGroupFooter[i]
  18624. *!*                FOR lnCol = 1 TO pnMaxCol
  18625. *!*                    LOCATE FOR ExcelRow = lnRow AND ExcelCol = lnCol
  18626. *!*                    IF EOF()
  18627. *!*                        APPEND BLANK
  18628. *!*                        REPLACE ExcelRow WITH lnRow, ;
  18629. *!*                                ExcelCol WITH lnCol, ;
  18630. *!*                                User     WITH '  5', ;
  18631. *!*                                cUser     WITH '  5'
  18632. *!*                    ENDIF
  18633. *!*                ENDFOR
  18634. *!*            ENDFOR
  18635. *!*             
  18636. *!*            * Decoramos GroupFooter ( User = '  5')
  18637. *!*            * Font y background
  18638. *!*            REPLACE ALL FontStyle WITH 1 ;
  18639. *!*                    FOR cUser = '  5' ;
  18640. *!*                        AND (ObjType = 5 OR ObjType = 8)
  18641. *!*            REPLACE ALL cExcelInterior WITH 'Solid,';
  18642. *!*                                            + RIGHT(TRANSFORM(RGB(192,192,192),'@0'),6) + ',' ;
  18643. *!*                                            + RIGHT(TRANSFORM(RGB(0,0,0),'@0'),6) ;
  18644. *!*                    FOR cUser = '  5'
  18645. *!*            * Bordes arriba y abajo
  18646. *!*            LOCAL laGroupFooters[1,2]
  18647. *!*            laGroupFooters[1,1] = 0
  18648. *!*            laGroupFooters[1,2] = ''
  18649. *!*            SELECT DISTINCT ExcelRow,SPACE(8) AS cExcelBorder ;
  18650. *!*              FROM (tcOutputAlias) ;
  18651. *!*             WHERE cUser = '  5' ;
  18652. *!*              INTO ARRAY laGroupFooters
  18653. *!*            lnLastRow      = 0
  18654. *!*            FOR i = 1 TO ALEN(laGroupFooters,1)
  18655. *!*                IF EMPTY(laGroupFooters[i,1])
  18656. *!*                    LOOP
  18657. *!*                ENDIF
  18658. *!*                DO CASE
  18659. *!*                    CASE lnLastRow = 0
  18660. *!*                        laGroupFooters[i,2] = 'Top,Single,1'
  18661. *!*                    CASE laGroupFooters[i,1] = lnLastRow + 1
  18662. *!*                        laGroupFooters[i,2] = 'Top,Single,1'
  18663. *!*                    OTHERWISE    && laGroupFooters[i,1] > lnLastRow + 1
  18664. *!*                        laGroupFooters[i-1,2] = laGroupFooters[i-1,2] ;
  18665. *!*                                               + IIF(EMPTY(laGroupFooters[i-1,2]),'',';') ;
  18666. *!*                                               + 'Bottom,Double,3'
  18667. *!*                        laGroupFooters[i,2]   = 'Top,Single,1'
  18668. *!*                ENDCASE            
  18669. *!*                lnLastRow = laGroupFooters[i,1]
  18670. *!*            ENDFOR
  18671. *!*            laGroupFooters[ALEN(laGroupFooters,1),2] = laGroupFooters[ALEN(laGroupFooters,1),2] ;
  18672. *!*                                   + IIF(EMPTY(laGroupFooters[ALEN(laGroupFooters,1),2]),'',';') ;
  18673. *!*                                   + 'Bottom,Double,3'
  18674. *!*            
  18675. *!*            lnRecno          = 0
  18676. *!*            SCAN FOR User = '  5'
  18677. *!*                i = ASCAN(laGroupFooters,ExcelRow,1,ALEN(laGroupFooters,1),1,8)
  18678. *!*                IF i = 0
  18679. *!*                    LOOP
  18680. *!*                ENDIF
  18681. *!*                REPLACE cExcelBorder WITH laGroupFooters[i,2]
  18682. *!*                lnRecno = RECNO()
  18683. *!*            ENDSCAN
  18684. *!*    ENDCASE
  18685. ENDPROC
  18686. PROCEDURE islonghorizontalline
  18687. LPARAMETERS tcExpr
  18688. RETURN !EMPTY(tcExpr) AND EMPTY(CHRTRAN(ALLTRIM(tcExpr),[=-"],[])) AND LEN(ALLTRIM(tcExpr)) > 15
  18689. ENDPROC
  18690. PROCEDURE isshorthorizontalline
  18691. LPARAMETERS tcExpr
  18692. RETURN !EMPTY(tcExpr) AND EMPTY(CHRTRAN(ALLTRIM(tcExpr),[=-"],[])) AND LEN(tcExpr) < 15
  18693. ENDPROC
  18694. PROCEDURE calcbasefilename
  18695. LPARAMETERS tcWorkbook
  18696. LOCAL i,lcFileName
  18697. IF EMPTY(tcWorkbook)
  18698.     * Calc default name
  18699.     FOR m.i = 1 TO 9
  18700.         IF !FILE(FORCEEXT('REP_'+TRANSFORM(m.i,'@L 99'),'xls'))
  18701.             lcFileName = FORCEEXT('REP_'+TRANSFORM(m.i,'@L 99'),'xls')
  18702.             EXIT
  18703.         ENDIF
  18704.     ENDFOR
  18705.     IF EMPTY(lcFileName)
  18706.         LOCAL laDir[1,3]
  18707.         ADIR(laDir,'REP_??.'+tcExtension)
  18708.         FOR m.i = 1 TO ALEN(laDir,1)
  18709.             laDir[m.i,3] = DTOS(laDir[m.i,3])
  18710.         ENDFOR
  18711.         ASORT(laDir,3)
  18712.         lcFileName = FORCEEXT(PADR(laDir[1,1],50),'xls')
  18713.     ENDIF
  18714.     lcFileName = FORCEEXT(JUSTFNAME(tcWorkbook),'xls')
  18715. ENDIF
  18716. RETURN lcFileName
  18717. ENDPROC
  18718. PROCEDURE calcnextfilename
  18719. LPARAMETERS tcWorkbook
  18720. LOCAL lcBaseName,lcFileName,i
  18721. lcBaseName = JUSTSTEM(tcWorkbook)
  18722. IF AT(lcBaseName,'_',2) > 0
  18723.     lcBaseName = LEFT(lcBaseName,AT(lcBaseName,'_',2) - 1)
  18724. ENDIF
  18725. lcFileName = ''
  18726. FOR m.i = 1 TO 9
  18727.     IF !FILE(lcBaseName + '_' + TRANSFORM(i,'@L 99') + '.xls')
  18728.         lcFileName = lcBaseName + '_' + TRANSFORM(i,'@L 99') + '.xls'
  18729.         EXIT
  18730.     ENDIF
  18731. ENDFOR
  18732. IF EMPTY(lcFileName)
  18733.     LOCAL laDir[1,3]
  18734.     ADIR(laDir,lcBaseName + '_??' + '.XLS')
  18735.     FOR m.i = 1 TO ALEN(laDir,1)
  18736.         laDir[m.i,3] = DTOS(laDir[m.i,3])
  18737.     ENDFOR
  18738.     ASORT(laDir,3)
  18739.     lcFileName = FORCEEXT(laDir[1,1],'xls')
  18740. ENDIF
  18741. RETURN lcFileName
  18742. ENDPROC
  18743. PROCEDURE xml_names_header
  18744. * 21/06/08 Added
  18745. RETURN '<Names>' + CHR(13) + CHR(10)
  18746. ENDPROC
  18747. PROCEDURE xml_name
  18748. LPARAMETERS tnID
  18749. * 21/06/08 Added
  18750. *  <NamedRange ss:Name="Cajas_Per1" ss:RefersTo="=Sheet1!R10C7"/>
  18751. *  <NamedRange ss:Name="Cajas_Per2" ss:RefersTo="=Sheet1!R10C13"/>
  18752. LOCAL lcRetVal,laItems[1]
  18753. lcRetVal = ''
  18754. *SET STEP ON 
  18755. ALINES(laItems,paNames[tnID],1 + 2,';')
  18756. IF !EMPTY(laItems[1]) AND !EMPTY(laItems[2])
  18757.     lcRetVal = lcRetVal + [  <NamedRange ss:Name="] + ALLTRIM(laItems[1]) ;
  18758.                         + [" ss:RefersTo="] + ALLTRIM(laItems[2]) + ["/>] + CHR(13) + CHR(10)
  18759. ENDIF
  18760. RETURN lcRetVal
  18761. ENDPROC
  18762. PROCEDURE xml_names_footer
  18763. * 21/06/08 Added
  18764. RETURN '</Names>' + CHR(13) + CHR(10)
  18765. ENDPROC
  18766. PROCEDURE outputfromdata
  18767. LPARAMETERS toListener, tcOutputDBF &&, tnWidth, tnHeight
  18768. This.ShowTherm(1)
  18769. IF VARTYPE(toListener) <> "O"
  18770.     MESSAGEBOX("Invalid parameter. Report listener not available", 16, "Error")
  18771.     RETURN
  18772. ENDIF 
  18773. IF EMPTY(toListener.cFRXAlias)
  18774.     MESSAGEBOX("The helper FRX table is not available. Output can't be created", 16, "Error")
  18775.     RETURN
  18776. ENDIF 
  18777. LOCAL lnSelect, lnOrigDataSession
  18778. lnSelect          = SELECT()
  18779. lnOrigDataSession = SET("Datasession")
  18780. * Ensure we are at the correct DataSession
  18781. SET DATASESSION TO (toListener.ListenerDataSession)
  18782. * SET DATASESSION TO (toListener.CurrentDataSession)
  18783. * Generate XLS using the stored information
  18784. This.lDefaultMode = .F.
  18785. * Make a copy of the FRX table and manipulate it
  18786. SELECT * FROM (toListener.cFRXAlias) INTO CURSOR FRXCopy READWRITE 
  18787. SELECT FRXCopy
  18788. This.cFRXalias = "FRXCopy"
  18789. * Initialize class
  18790. * "BeforeReport"
  18791. IF  EMPTY(this.cOutputDBF)
  18792.     this.cOutputDBF = ADDBS(SYS(2023)) + SYS(2015) + '.dbf'
  18793. ENDIF  
  18794. IF EMPTY(this.cOutputAlias)
  18795.     this.cOutputAlias = STRTRAN(JUSTSTEM(this.cOutputDBF), ' ', '_')
  18796. ENDIF
  18797. * Store in Frx.User the number of the band to which each field belongs
  18798. This.CalcBandNumbers()
  18799. * Don't reprint group header on each page (not working yet)
  18800. REPLACE ALL NoRepeat WITH .F. ;
  18801.         FOR objType = 9 AND (ObjCode = 3 OR ObjCode = 5)
  18802. GO TOP
  18803. LOCAL lcRenderAlias
  18804. lcRenderAlias = toListener.cOutputAlias
  18805. * 2013-04-25 CChalom
  18806. * Ensure we have a _goFP object
  18807. * To be used in OBJTYPE #20
  18808. LOCAL llReleaseFP, lcAlias
  18809. llReleaseFP = .F.
  18810. IF VARTYPE(_goFP) <> "O"
  18811.     PRIVATE _goFP
  18812.     _goFP = _Screen.oFoxyPreviewer
  18813.     lcAlias = toListener.cFRXAlias
  18814.     llReleaseFP = .T.
  18815. ENDIF 
  18816. LOCAL lnPgFrom, lnPgTo
  18817. IF llReleaseFP
  18818.     lnPgFrom = toListener.COMMANDCLAUSES.RangeFrom
  18819.     lnPgTo   = toListener.COMMANDCLAUSES.RangeTo && -1 = All pages
  18820.     lnPgTo   = IIF(lnPgTo = -1, 999999, lnPgTo)
  18821. ELSE 
  18822.     lnPgFrom = _goFP._ClausenRangeFrom && = loListener.COMMANDCLAUSES.RangeFrom
  18823.     lnPgTo   = IIF(_goFP._ClausenRangeTo = -1, 999999, _goFP._ClausenRangeTo) && = loListener.COMMANDCLAUSES.RangeTo && -1 = All pages
  18824. ENDIF 
  18825. SELECT FRXRECNO as nFRXRecno, ;
  18826.             RA.LEFT as nLeft, ;
  18827.             TOP as nTop, ;
  18828.             WIDTH as nWidth, ;
  18829.             HEIGHT as nHeight, ;
  18830.             UNCONTENTS as Contents, ;
  18831.             UNCONTENTS as UNContents, ;
  18832.             PAGE as nPageNo ;
  18833.         FROM (lcRenderAlias) RA ;
  18834.         WHERE BETWEEN(Page, lnPgFrom, lnPgTo) ;
  18835.         INTO CURSOR (This.cOutputAlias) ;
  18836.         READWRITE
  18837. INDEX ON nFrxRecno TAG nFrxRecno
  18838. * REPLACE ALL Contents WITH STRCONV(CONTENTS,6 ,1256)
  18839. * Replacing the Render event
  18840. REPLACE ALL Contents WITH ;
  18841.     strt(strt(strt(STRCONV(Contents, 6),'&','&'),'>','>' ),'<','<')
  18842. *!*    SELECT (This.cOutputAlias) 
  18843. *!*    BROWSE
  18844. * Finalize
  18845. This.AfterReport()
  18846. * Clean up
  18847.     USE IN SELECT(This.cOutputAlias)
  18848.     USE IN SELECT(This.cFRXalias)
  18849. CATCH TO loExc
  18850.     SET STEP ON 
  18851. ENDTRY 
  18852. * Restore DataSession and Alias
  18853. SET DATASESSION TO (lnOrigDataSession)
  18854. SELECT (lnSelect)
  18855. This.ShowTherm()
  18856. IF llReleaseFP = .F.
  18857.     RELEASE llReleaseFP
  18858. ENDIF 
  18859. ENDPROC
  18860. PROCEDURE updateproperties
  18861. IF NOT This.lObjTypeMode OR (VARTYPE(_Screen.oFoxyPreviewer) <> "O")
  18862.     RETURN
  18863. ENDIF 
  18864. LOCAL loFP
  18865. loFP = _Screen.oFoxyPreviewer
  18866. IF VARTYPE(This.CommandClauses) = "O"
  18867.     *!*    IF This.CommandClauses.Preview
  18868.     *!*        This.lOpenViewer = .T.
  18869.     *!*    ELSE 
  18870.     *!*        This.lOpenViewer = NVL(loFP.lOpenViewer, .T.)
  18871.     *!*    ENDIF
  18872.     This.lOpenViewer = This.CommandClauses.Preview
  18873.     IF NOT EMPTY(This.CommandClauses.ToFile)
  18874.         This.TargetFileName = This.CommandClauses.ToFile
  18875.     ELSE 
  18876.         IF VARTYPE(_Screen.oFoxyPreviewer) = "O" AND ;
  18877.                 NOT EMPTY(_Screen.oFoxyPreviewer.cDestFile) AND ;
  18878.                 EMPTY(This.TargetFileName)
  18879.             LOCAL lcDestFile
  18880.             lcDestFile = _Screen.oFoxyPreviewer.cDestFile
  18881.             IF NOT "\" $ lcDestFile
  18882.                 lcDestFile = ALLTRIM(ADDBS(_Screen.oFoxyPreviewer.cOutputPath) + lcDestFile)
  18883.             ENDIF
  18884.             This.TargetFileName = lcDestFile
  18885.         ELSE
  18886.             LOCAL lcFile
  18887.             lcFile = This.TargetFileName
  18888.             IF EMPTY(lcFile)
  18889.                 lcFile = PUTFILE("","","xls;xml")
  18890.             ENDIF
  18891.             IF EMPTY(lcFile)
  18892.                 _ReportListener::CancelReport()
  18893.                 * This.CancelReport()
  18894.                 RETURN .F.
  18895.             ENDIF
  18896.             This.TargetFileName = lcFile
  18897.         ENDIF
  18898.     ENDIF 
  18899. ENDIF
  18900. This.QUIETMODE        = NVL(loFP.lQuietMode         , .F.)
  18901. IF VARTYPE(This.CommandClauses) = "O"
  18902.     IF This.CommandClauses.Preview
  18903.         This.lOpenViewer = .T.
  18904.     ENDIF 
  18905.     IF NOT EMPTY(This.CommandClauses.ToFile)
  18906.         This.TargetFileName = This.CommandClauses.ToFile
  18907.     ENDIF 
  18908. ENDIF
  18909. * 2013-03-01 - Update the nSaveFormat property when using OBJECTTYPE mode
  18910. * http://www.foxite.com/archives/0000368612.htm - Thanks to Tushar
  18911. This.nExcelSaveFormat = NVL(_Screen.oFoxyPreviewer.nExcelSaveFormat, This.nExcelSaveFormat)
  18912. ENDPROC
  18913. PROCEDURE topurexlsusingexcel
  18914. LPARAMETERS tcSource, tcDestination
  18915. * File format specific
  18916. * http://support.sas.com/documentation/cdl/en/acpcref/63184/HTML/default/viewer.htm#a003103761.htm
  18917. *!*        Excel 4 files, only one spreadsheet is allowed per file
  18918. *!*        Excel 4, Excel 5, and Excel 95 limits are 256 columns, and 16,384 rows
  18919. *!*        Excel 97, 2000, 2002, 2003 limits are 256 columns, and 65,536 rows
  18920. *!*        Excel 2007 limits are 16,384 columns, and 1,048,576 rows.
  18921. *!*        Excel 95 files are treated as the same format as Excel 5 files.
  18922. *!*        Excel 2000, 2002, and 2003 files with an .xls file extension are treated as the same format as Excel 97 files.
  18923. *!*        Excel 2007 has three different file extensions, .xlsb, .xlsm, and .xlsx.
  18924. *!* See also: http://www.rondebruin.nl/saveas.htm
  18925. #DEFINE xlAddIn         18
  18926. #DEFINE xlCSV            6
  18927. #DEFINE xlCSVMac        22
  18928. #DEFINE xlCSVMSDOS      24
  18929. #DEFINE xlCSVWindows    23
  18930. #DEFINE xlDBF2             7
  18931. #DEFINE xlDBF3             8
  18932. #DEFINE xlDBF4            11
  18933. #DEFINE xlDIF             9
  18934. #DEFINE xlExcel2         16
  18935. #DEFINE xlExcel2FarEast 27
  18936. #DEFINE xlExcel3         29
  18937. #DEFINE xlExcel5         39
  18938. #DEFINE xlExcel7         39
  18939. #DEFINE xlExcel8         56
  18940. #DEFINE xlExcel9795     43
  18941. #DEFINE xlExcel4Workbook    35
  18942. #DEFINE xlIntlAddIn     26
  18943. #DEFINE xlIntlMacro     25
  18944. #DEFINE xlWorkbookNormal -4143
  18945. #DEFINE xlSYLK             2
  18946. #DEFINE xlTemplate        17
  18947. #DEFINE xlCurrentPlatformText -4158
  18948. #DEFINE xlTextMac         19
  18949. #DEFINE xlTextMSDOS     21
  18950. #DEFINE xlTextPrinter   36
  18951. #DEFINE xlTextWindows   20
  18952. #DEFINE xlWJ2WD1         14
  18953. #DEFINE xlWK1             5
  18954. #DEFINE xlWK1ALL         31
  18955. #DEFINE xlWK1FMT         30
  18956. #DEFINE xlWK3             15
  18957. #DEFINE xlWK4             38
  18958. #DEFINE xlWK3FM3         32
  18959. #DEFINE xlWKS             4
  18960. #DEFINE xlWorks2FarEast 28
  18961. #DEFINE xlWQ1             34
  18962. #DEFINE xlWJ3             40
  18963. #DEFINE xlWJ3FJ3         41
  18964. #DEFINE xlUnicodeText   42
  18965. #DEFINE xlHtml             44
  18966. IF EMPTY(tcSource)
  18967.     tcSource = GETFILE("xml", "Spreadsheet file")
  18968. ENDIF
  18969. IF EMPTY(tcSource)
  18970.     RETURN .F.
  18971. ENDIF
  18972. IF EMPTY(tcDestination)
  18973.     tcDestination = FORCEEXT(tcSource, "xls")
  18974. ENDIF
  18975. LOCAL loExcel AS "excel.application"
  18976. LOCAL llReturn AS Logical
  18977.     loExcel = CREATEOBJECT("excel.application")
  18978.     loExcel.AlertBeforeOverwriting = .F.
  18979.     loExcel.DisplayAlerts = .F.
  18980.     * http://msdn.microsoft.com/en-us/library/bb179167(v=office.12).aspx
  18981.     * http://msdn.microsoft.com/en-us/library/bb214129%28v=office.12%29.aspx
  18982.     loExcel.Workbooks.Open(tcSource)
  18983.     loExcel.ActiveWorkbook.SaveAs(tcDestination, This.nExcelSaveFormat) && Excel 97 type
  18984.         && The file format to use when you save the file. 
  18985.         && For a list of valid choices, see the XlFileFormat enumeration. 
  18986.         && For an existing file, the default format is the last file format specified; 
  18987.         && for a new file, the default is the format of the version of Excel being used.
  18988.     loExcel.ActiveWindow.Close(.T.)
  18989.     loExcel.Quit
  18990.     llReturn = .T.
  18991. CATCH TO loExc
  18992.     TRY 
  18993.         loExcel.ActiveWindow.Close(.T.)
  18994.     CATCH 
  18995.     ENDTRY 
  18996.     TRY 
  18997.         loExcel.Quit
  18998.     CATCH 
  18999.     ENDTRY 
  19000.     llReturn = .F.
  19001. ENDTRY
  19002. loExcel = NULL
  19003. RETURN llReturn
  19004. ENDPROC
  19005. PROCEDURE topurexlsusingoo
  19006. LPARAMETERS tcSource, tcDestination
  19007. IF EMPTY(tcSource)
  19008.     tcSource = GETFILE("xml", "Spreadsheet file")
  19009. ENDIF
  19010. IF EMPTY(tcSource)
  19011.     RETURN
  19012. ENDIF
  19013. IF EMPTY(tcDestination)
  19014.     tcDestination = FORCEEXT(tcSource, "xls")
  19015. ENDIF
  19016. LOCAL llReturn
  19017.     llReturn = PR_OOXML2XLS(tcSource, tcDestination)
  19018. CATCH
  19019.     llReturn = .F.
  19020. ENDTRY
  19021. RETURN llReturn
  19022. ENDPROC
  19023. PROCEDURE showtherm
  19024. LPARAMETERS tnValue, tcText, tcTitle
  19025. IF VARTYPE(_goFP) = "O"
  19026.     IF NOT _goFP.lQuietMode
  19027.         IF EMPTY(tnValue)
  19028.             =DoFoxyTherm()
  19029.             RETURN
  19030.         ENDIF
  19031.         IF EMPTY(tcTitle)
  19032.             tcTitle = _goFP._RunStatusText
  19033.         ENDIF
  19034.         IF EMPTY(tcText)
  19035.             tcText = _goFP.GetLoc("PLEASEWAIT") + "    " + TRANSFORM(tnValue)+ "%"
  19036.         ENDIF
  19037.         =DoFoxyTherm(tnValue, tcText, tcTitle)
  19038.     ENDIF
  19039. ENDIF
  19040. ENDPROC
  19041. PROCEDURE setfrxdatasessionenvironment
  19042. NODEFAULT 
  19043. THIS.setFRXDataSession()
  19044. SET SEPARATOR TO (This.SetSeparator)
  19045. SET POINT TO (This.SetPoint)
  19046. SET TALK OFF 
  19047. ENDPROC
  19048. PROCEDURE DoStatus
  19049. LPARAMETERS cMessage
  19050. RETURN
  19051. * This code comes from, Dorin's to use Carlos Alloati's therm
  19052. LOCAL loParentForm, lcCaption, lcParentFormName
  19053. NODEFAULT
  19054. IF (NOT (THIS.QuietMode or ;
  19055.     (THIS.IsRunning AND THIS.CommandClauses.NoDialog)))
  19056.     IF this.nlastpercent <> CEILING(this.percentDone*100)
  19057.         this.nlastpercent = CEILING(this.percentDone*100)
  19058.     ELSE
  19059.         RETURN 
  19060.     ENDIF
  19061.     IF EMPTY(cMessage) OR ISNULL(cMessage)
  19062.         cMessage = ""
  19063.     ENDIF
  19064.     lcCaption = EVALUATE(THIS.ThermCaption)
  19065.     IF ((NOT ISNULL(THIS.ThermForm)) OR (THIS.CreateTherm()) )
  19066.         WITH THIS.ThermForm
  19067.             IF THIS.IsRunning
  19068.                 .Closable = .F.
  19069.                 .Movable = .F.
  19070.             ENDIF
  19071.             .Therm.Value = CEILING(THIS.PercentDone * 100)
  19072.             .ThermLabel.Caption = lcCaption
  19073.             IF NOT .Visible
  19074.                 loParentForm = THIS.GetParentWindowRef()
  19075.                 DO CASE
  19076.                     CASE VARTYPE(loParentForm) # "O" AND (NOT _SCREEN.Visible)
  19077.                         lcParentFormName = "MACDESKTOP"
  19078.                     CASE VARTYPE(loParentForm) # "O"
  19079.                         lcParentFormName = "SCREEN"
  19080.                     CASE (NOT loParentForm.Visible) AND ;
  19081.                         (loParentForm.DeskTop OR NOT EMPTY(loParentForm.MacDesktop) OR ;
  19082.                         loParentForm.ShowWindow = 2 OR (NOT _SCREEN.Visible))
  19083.                         * in many cases,
  19084.                         * they've probably made a programming error,
  19085.                         * the parent should be visible according to
  19086.                         * the requirements of REPORT FORM ... IN WINDOW
  19087.                         * if it's a WINDOW clause they
  19088.                         * have no need to show it, might not be an error
  19089.                         * Either way, they should see the therm
  19090.                         * to know that the report is progressing
  19091.                         lcParentFormName = "MACDESKTOP"
  19092.                     CASE (NOT loParentForm.Visible)
  19093.                         * same comment as above
  19094.                         lcParentFormName = "SCREEN"
  19095.                     OTHERWISE
  19096.                         lcParentFormName = loParentForm.Name
  19097.                 ENDCASE
  19098.                 SHOW WINDOW (.Name) IN WINDOW (lcParentFormName)
  19099.                 .AlwaysOnTop = .T.
  19100.                 .AutoCenter = .T.
  19101.                 .Visible = .T.
  19102.             ENDIF
  19103.         ENDWITH
  19104.     ENDIF
  19105. ENDIF
  19106. ENDPROC
  19107. PROCEDURE Destroy
  19108. * 02/10/06 Alex. This code was in Dorin's cursorListener.
  19109. * It is not necessary because we keep directory table in FrxDatasession which doesn't exist.
  19110. *this.resetDataSession()
  19111. *IF USED(this.cOutputAlias)
  19112. *    USE IN (this.cOutputAlias)
  19113. *ENDIF
  19114. DODEFAULT()
  19115. ENDPROC
  19116. PROCEDURE Render
  19117. LPARAMETERS nFRXRecno, nLeft, nTop, nWidth, nHeight, nObjectContinuationType, cContentsToBeRendered, GDIPlusImage
  19118. * From PDFx by Luis Navas 
  19119. * Code to detect if report will run twice because of use of _PAGETOTAL 
  19120. If This.TwoPassProcess And This.CurrentPass=0 Then 
  19121.     NODEFAULT 
  19122.     RETURN 
  19123. EndIf 
  19124. IF this.lOutputToCursor  
  19125.     LOCAL cContents
  19126.     WITH this
  19127.         IF EMPTY(cContentsToBeRendered)
  19128.             cContents = ''
  19129.         ELSE 
  19130. * 01/01/07 Correction by Andus Moor: Created XML file caused encoding error for some data
  19131. *            cContents = STRCONV(cContentsToBeRendered, 6)
  19132. * 02/01/07 Second conversion by Andrus Moor
  19133. *            cContents = STRCONV(strt(strt(strt(cContentsToBeRendered,'&','&'),'>','>' ),'<','<'),9)
  19134. *            cContents = STRCONV(strt(strt(strt(cContentsToBeRendered,'&','&'),'>','>' ),'<','<'),6)
  19135. * 14/06/10 Fix by CChalom
  19136. * Need first to convert the contents before converting to HTML tags
  19137.             LOCAL lcTmpContent
  19138.             lcTmpContent = STRCONV(cContentsToBeRendered, 6)
  19139.             cContents = strt(strt(strt(lcTmpContent,'&','&'),'>','>' ),'<','<')
  19140.         ENDIF
  19141.         This.setFRXDataSession()
  19142.         IF NOT EMPTY(cContents)
  19143.             INSERT INTO (.cOutputAlias) (nFrxRecno, nLeft, nTop, nWidth, nHeight, Contents, UNCONTENTS, nPageNo) ;
  19144.                              VALUES (m.nFrxRecno,m.nLeft,m.nTop,m.nWidth,m.nHeight,m.cContents, m.cContentsToBeRendered, .PageNo)
  19145.         ENDIF 
  19146.         this.setCurrentDataSession() 
  19147.         SELECT (this.drivingAlias)
  19148.     ENDWITH 
  19149. ENDIF 
  19150. DODEFAULT(nFRXRecno, nLeft, nTop, nWidth, nHeight, nObjectContinuationType, cContentsToBeRendered, GDIPlusImage)
  19151. ENDPROC
  19152. PROCEDURE BeforeReport
  19153. * Code is inspired by Dorin Valisescu's CursorListener
  19154. IF This.lDefaultMode OR This.lObjTypeMode
  19155.     DODEFAULT()
  19156. ENDIF 
  19157. IF this.lOutputToCursor
  19158.     IF  EMPTY(this.cOutputDBF)
  19159.         this.cOutputDBF = ADDBS(SYS(2023)) + SYS(2015) + '.dbf'
  19160.     ENDIF  
  19161.     IF EMPTY(this.cOutputAlias)
  19162.         this.cOutputAlias = STRTRAN(JUSTSTEM(this.cOutputDBF), ' ', '_')
  19163.     ENDIF
  19164.     This.setFRXDataSession()
  19165.     IF This.lObjTypeMode
  19166.         * Make a copy of the FRX table and manipulate it
  19167.         This.cTempFRX = ADDBS(SYS(2023)) + "FRX_" + SYS(2015) + '.dbf'
  19168.         This.cFRXalias = "CopyFRX"
  19169.         SELECT FRX
  19170.         COPY TO (This.cTempFRX)
  19171.         USE (This.cTempFRX) SHARED AGAIN IN 0 ALIAS (This.cFRXalias)
  19172.     ENDIF
  19173.     * Store in Frx.User the number of the band to which each field belongs
  19174.     This.CalcBandNumbers()
  19175.     * Don't reprint group header on each page (not working yet)
  19176.     REPLACE ALL NoRepeat WITH .F. ;
  19177.             FOR objType = 9 AND (ObjCode = 3 OR ObjCode = 5)
  19178.     GO TOP
  19179.     CREATE CURSOR (this.cOutputAlias) (nFrxRecno N(4,0),nLeft I, nTop I, nWidth I, nHeight I, ;
  19180.                                        Contents M NOCPTRANS, UNCONTENTS M NOCPTRANS, nPageNo I)
  19181.     INDEX ON nFrxRecno TAG nFrxRecno
  19182. ENDIF 
  19183. THIS.setCurrentDataSession()
  19184. This.SetDate = SET("Date")
  19185. This.SetStrictDate = SET("Strictdate")
  19186. SET STRICTDATE TO 0
  19187. ENDPROC
  19188. PROCEDURE Init
  19189. declare integer GetDeviceCaps in WIN32API integer HDC, integer item
  19190. declare integer GetDC         in WIN32API integer hWnd
  19191. declare integer ReleaseDC     in WIN32API integer hWnd, integer HDC
  19192. DECLARE INTEGER GetWindowDC      IN WIN32API INTEGER hwnd
  19193. DODEFAULT()
  19194. * 2010/08/08 Fix by Jaketon / CChalom, when set point = ","
  19195. * I needed to store the original settings because the ReportListener class
  19196. * changes the settings during run
  19197. This.AddProperty("SetSeparator", SET("Separator"))
  19198. This.AddProperty("SetPoint", SET("Point"))
  19199. This.AddProperty("SetCurrency", SET("Currency", 1))
  19200. This.AddProperty("SetDate", SET("Date"))
  19201. This.AddProperty("SetDateAnsi", INLIST(SET("Date"),"ANSI","GERMAN"))
  19202. This.AddProperty("lConvertToXLS" , .T.)
  19203. This.AddProperty("lRepeatHeaders", .T.)
  19204. This.AddProperty("lRepeatFooters", .T.)
  19205. This.AddProperty("lHidePageNo"   , .F.)
  19206. This.AddProperty("lUseUnicode"   , .F.) && 2011-12-29
  19207. This.AddProperty("lConvertToUTF8", .F.) && 2011-12-31
  19208. * Developer can indicate properties by placing values in Comment field in this format: <ExcelCol>18</ExcelCol>
  19209. * To get numeric 1 or 0 must write it as 1. or 0., otherwise Fox interprets as .T. / .F.
  19210.     * <ExcelCol>18</ExcelCol>                - Indicates ExcelCol for this and other items with same Left
  19211.     * <ExcelSpecialCol>18</ExcelSpecialCol> - Indicates ExcelCol for one item only
  19212.     * <ExcelNamedRange>Cajas_Per1;=Sheet1!R10C7</ExcelNamedRange> - Indicates NameOfRange,Range, as defined by Excel
  19213.     * <ExcelInsertFormula>=+(RC[-4]+RC[-3]) / Cajas_Per2</ExcelInsertFormula> - Indicates formula to insert
  19214. *!* ExcelBorders format: <ExcelBorders>Top,Single,1;Bottom,Double,3</ExcelBorders>
  19215. *!*       <Borders>
  19216. *!*        <Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="1"/>
  19217. *!*        <Border ss:Position="Bottom" ss:LineStyle="Double" ss:Weight="3"/>
  19218. *!*       </Borders>
  19219. * Codify report colors as <ExcelInterior>Solid,xxxxxx</ExcelInterior> and store in cExcelInterior
  19220. *!* Interior properties.
  19221. *!*        Color         = Background Color
  19222. *!*        Pattern         = "Solid" --> no pattern, "Gray125", "ThinVert ss:Pattern="Solid"Stripe"
  19223. *!*        PatternColor
  19224. *!* Samples:
  19225. *!*    <ExcelInterior>Solid,FFFF00</ExcelInterior>
  19226. *!*        <Interior ss:Color="#FFFF00" ss:Pattern="Gray125"/>
  19227. *!*    <ExcelInterior>Gray125,FFFFFF,000000</ExcelInterior>
  19228. *!*        <Interior ss:Color="#FFFFFF" ss:Pattern="Gray125" ss:PatternColor="#000000"/>
  19229. *!*    <ExcelInterior>ThinVertStripe,FFFF00,00FF00</ExcelInterior>
  19230. *!*        <Interior ss:Color="#FFFF00" ss:Pattern="ThinVertStripe" ss:PatternColor="#00FF00"/>
  19231. *<ExcelNamedRange>Cajas_Per2,=Sheet1!R10C13</ExcelNamedRange>
  19232. ENDPROC
  19233. PROCEDURE AfterReport
  19234. This.ShowTherm(3)
  19235. IF This.lDefaultMode
  19236.     * Since some data manipulations may be processed in the FRX DataSession, we'll
  19237.     * Adjust some settings to avoid problems
  19238.         * Setup</Row>
  19239.     This.setFRXDataSession()
  19240.     SET SAFETY OFF    && FrxDataSession has safety on
  19241.     SET DELETED ON
  19242.     SET SEPARATOR TO (This.SetSeparator)
  19243.     SET POINT TO     (This.SetPoint)
  19244.     SET DATE TO      (This.SetDate)
  19245. ENDIF
  19246. * Add field to Frx with RECNO()
  19247.     SELECT (This.cFRXalias)
  19248.     ALTER TABLE (This.cFRXalias) ADD COLUMN nRecno N(5)
  19249.     REPLACE ALL nRecno WITH RECNO()
  19250.     INDEX ON nRecno TAG nRECNO
  19251. * Add fields from Frx and other fields to (this.cOutputAlias)
  19252. * 21/06/08 Add <ExcelInsertFormula>, <ExcelNamedCell> and <ExcelNamedRange> options
  19253. *    SELECT 00000 AS ExcelRow,000 AS ExcelCol, ;
  19254.            UPPER(PADR(Expr,100)) AS cExpr,PADR(User,3) AS cUser,PADR(UPPER(Contents),100) AS cContents, ;
  19255.            OA.*, ;
  19256.            00000 AS nExcelColRequest,00000 AS nExcelSpecialColRequest,00000 AS nExcelMergeAcross, ;
  19257.            00000.00 AS nExcelColWidth,SPACE(50) AS cExcelAlignment, ;
  19258.            SPACE(100) AS cExcelBorder,SPACE(100) AS cExcelInterior, ;
  19259.            0 AS nUnderlinedColCount, ;
  19260.            .F. AS lDelete, ;
  19261.            Frx.* ;
  19262.       FROM (this.cOutputAlias) OA ;
  19263.       JOIN Frx ON OA.nFrxRecno = Frx.nRecno ;
  19264.       INTO CURSOR (this.cOutputAlias) READWRITE
  19265. nSecs = SECONDS()
  19266.     LOCAL lcFRXalias
  19267.     lcFRXAlias = This.cFRXalias 
  19268.     SELECT 00000 AS ExcelRow,000 AS ExcelCol, ;
  19269.            UPPER(PADR(Expr,100)) AS cExpr,PADR(User,3) AS cUser,PADR(UPPER(Contents),100) AS cContents, ;
  19270.            OA.*, ;
  19271.            00000 AS nExcelColRequest,00000 AS nExcelSpecialColRequest,00000 AS nExcelMergeAcross, ;
  19272.            00000.00 AS nExcelColWidth,SPACE(50) AS cExcelAlignment, ;
  19273.            SPACE(100) AS cExcelBorder,SPACE(100) AS cExcelInterior, ;
  19274.            SPACE(100) AS cExcelInsertFormula,SPACE(100) AS cExcelNamedRange,SPACE(100) AS cExcelNamedCell, ;
  19275.            0 AS nUnderlinedColCount, ;
  19276.            .F. AS lDelete, ;
  19277.            &lcFRXAlias..* ;
  19278.       FROM (this.cOutputAlias) OA ;
  19279.       JOIN (This.cFRXalias) ON (OA.nFrxRecno = &lcFRXalias..nRecno ;
  19280.             AND NOT INLIST(ObjType, 6, 7, 17)) ; && skip Line, Shape, Picture
  19281.       INTO CURSOR (this.cOutputAlias) READWRITE
  19282.     INDEX ON nFrxRecno TAG nFrxRecno
  19283.     INDEX ON ObjType TAG ObjType ADDITIVE
  19284.     INDEX ON ExcelRow TAG ExcelRow ADDITIVE
  19285.     INDEX ON ExcelCol TAG ExcelCol ADDITIVE
  19286.     INDEX ON nPageNo TAG nPageNo ADDITIVE
  19287.     INDEX ON cExpr TAG cExpr ADDITIVE
  19288.     INDEX ON cUser TAG cUser ADDITIVE
  19289.     INDEX ON TRANSFORM(ExcelRow,'@L 999999') + TRANSFORM(ExcelCol,'@L 999999') TAG RowCol ADDITIVE
  19290.     INDEX ON TRANSFORM(nPageNo,'@L 999999') + TRANSFORM(ExcelRow,'@L 999999') + TRANSFORM(ExcelCol,'@L 999999') ;
  19291.          TAG PagRowCol ADDITIVE
  19292. IF (NOT This.lRepeatHeaders) OR (NOT This.lRepeatFooters)
  19293.     LOCAL lnMinPage, lnMaxPage
  19294.     SELECT MIN(nPageNo), MAX(nPageNo) FROM (this.cOutputAlias) INTO ARRAY laPages
  19295.     lnMinPage = laPages(1)
  19296.     lnMaxPage = laPages(2)
  19297.     * Header = 1
  19298.     * Footer = 7
  19299.     * Eliminate all page headers except from the 1st page
  19300.     IF NOT This.lRepeatHeaders
  19301.         DELETE ALL FOR (cUser = '  1' AND nPageNo > lnMinPage)
  19302.     ENDIF
  19303.     * Eliminate all page headers footers except from the last page
  19304.     IF NOT This.lRepeatFooters
  19305.         DELETE ALL FOR (cUser = '  7' AND nPageNo < lnMaxPage)
  19306.     ENDIF
  19307. ENDIF
  19308. * Ommit Page numbers, because we have a single document
  19309. IF NOT This.lHidePageNo
  19310.     DELETE ALL FOR ("_PAGENO" $ UPPER(EXPR)) 
  19311. ENDIF
  19312. * Eliminate items in bands 0,1,2 if nPage > 1
  19313.     DELETE ALL FOR (cUser < '  3' AND nPageNo > 1) OR ;
  19314.         (EMPTY(cContents) AND INLIST(ObjType, 5, 8)) && Label or Field
  19315. * Determine row height and col width in report (not Excel)
  19316.     PRIVATE pnRowHeight,pnColWidth
  19317.     pnRowHeight  = 120        && Should be calculated
  19318.     SELECT nWidth,COUNT(nWidth) ;
  19319.         FROM (This.cOutputAlias) ;
  19320.         WHERE ObjType = 8 ;
  19321.         GROUP BY 1 ;
  19322.         ORDER BY 2 DESC ;
  19323.         INTO CURSOR Widths
  19324.     pnColWidth = IIF(_TALLY > 0,nWidth,400)
  19325.     SELECT (this.cOutputAlias)
  19326. * Codify report colors as <ExcelInterior>Solid,xxxxxx</ExcelInterior> and store in cExcelInterior
  19327. * 01/01/07 Correction by Andrus Moor, since color columns in frx file can have value -1
  19328. *    REPLACE ALL cExcelInterior WITH 'Solid,';
  19329.                                     + RIGHT(TRANSFORM(RGB(FillRed,FillGreen,FillBlue),'@0'),6) + ',' ;
  19330.                                     + RIGHT(TRANSFORM(RGB(PenRed,PenGreen,PenBlue),'@0'),6) ;
  19331.             FOR FillRed # 255 OR FillGreen # 255 OR FillBlue # 255 ;
  19332.                 OR PenRed # 0 OR PenGreen # 0 OR PenBlue # 0
  19333. *    REPLACE ALL cExcelInterior WITH 'Solid,';
  19334.                                     + RIGHT(TRANSFORM(RGB(FillBlue,FillGreen,FillRed),'@0'),6) + ',' ;
  19335.                                     + RIGHT(TRANSFORM(RGB(PenBlue,PenGreen,PenRed),'@0'),6) ;
  19336.             FOR ( FillRed # 255 OR FillGreen # 255 OR FillBlue # 255 ;
  19337.                  OR PenRed # 0 OR PenGreen # 0 OR PenBlue # 0 ) ;
  19338.                 AND FillRed # -1 AND FillGreen # -1 AND FillBlue #-1 ;
  19339.                 AND PenRed # -1 AND PenGreen # -1 AND PenBlue # -1
  19340. * 2010.01.30 - CChalom: Check if the color of the current field is not default
  19341. * 2010.01.30 - CChalom: Fix the color generation was inverted values
  19342. *!*            * Mode: 0 = Opaque background; 1 = Transparent
  19343. *!*            IF lnMode = 1 && Transparent
  19344. *!*                This._Stat = HPDF_Page_Stroke(.oPage)
  19345. *!*            ELSE && 0 = Opaque
  19346. *!*                This._Stat = HPDF_Page_FillStroke(.oPage)
  19347. *!*            ENDIF 
  19348. SCAN FOR ((FillRed > -1 OR PenRed > -1) AND (Mode = 0))  && Opaque
  19349.     IF (PenRed + PenGreen + PenBlue <> 0) OR ;
  19350.             (FillRed + FillGreen + FillBlue <> 765)
  19351.         REPLACE cExcelInterior WITH ('Solid,' ;
  19352.             + RIGHT(TRANSFORM(RGB(IIF(FillBlue=-1,255,FillBlue), ;
  19353.                 IIF(FillGreen=-1,255,FillGreen), IIF(FillRed=-1,255,FillRed)),'@0'),6) + ',' ;
  19354.             + RIGHT(TRANSFORM(RGB(MAX(PenBlue,0),MAX(PenGreen,0),MAX(PenRed,0)),'@0'),6))
  19355.     ENDIF 
  19356. ENDSCAN 
  19357. * Codify Offset as Horizontal Alignment for fields
  19358. IF This.lAlignLeft 
  19359. ELSE 
  19360.     REPLACE ALL cExcelAlignment WITH IIF(Offset=0,'Horizontal,Left',IIF(Offset=1,'Horizontal,Right','Horizontal,Center')) ;
  19361.             FOR ObjType = 8
  19362. *    REPLACE ALL cExcelAlignment WITH IIF(EMPTY(Picture),'Horizontal,Left',IIF(Picture=["@J"],'Horizontal,Right', ;
  19363.                                          IIF(Picture=["@I"],'Horizontal,Center','Horizontal,Left'))) ;
  19364.             FOR ObjType = 5
  19365.     REPLACE ALL cExcelAlignment WITH 'Horizontal,Left' FOR ObjType = 5 && Label
  19366. ENDIF
  19367. * Run ExcelStyle routine (1 - Before extracting comments)
  19368.     This.ApplyExcelStyle(This.cExcelStyle,1)
  19369. * Developer can indicate properties by placing values in Comment field in this format: <ExcelCol>18</ExcelCol>
  19370. * To get numeric 1 or 0 must write it as 1. or 0., otherwise Fox interprets as .T. / .F.
  19371.     * <ExcelCol>18</ExcelCol>                - Indicates ExcelCol for this and other items with same Left
  19372.     * <ExcelSpecialCol>18</ExcelSpecialCol> - Indicates ExcelCol for one item only
  19373.     * <ExcelNamedRange>Cajas_Per1;=Sheet1!R10C7</ExcelNamedRange> - Indicates NameOfRange,Range, as defined by Excel
  19374.     * <ExcelInsertFormula>=+(RC[-4]+RC[-3]) / Cajas_Per2</ExcelInsertFormula> - Indicates formula to insert
  19375. This.ShowTherm(15)
  19376. nSecs = SECONDS()
  19377.     LOCAL lcComment
  19378.     SCAN FOR !EMPTY(Comment)
  19379.         lcComment = ''
  19380.         TRY
  19381.             lcComment  = '<data> <datos>' + Comment + '</datos> </data>'
  19382.             lcComment  = XMLTOCURSOR(lcComment)
  19383.         CATCH
  19384.         ENDTRY
  19385.         SELECT (this.cOutputAlias)
  19386.         TRY
  19387.             REPLACE nExcelColRequest WITH XMLResult.ExcelCol
  19388.         CATCH
  19389.         ENDTRY
  19390.         TRY
  19391.             REPLACE nExcelSpecialColRequest WITH XMLResult.ExcelSpecialCol
  19392.         CATCH
  19393.         ENDTRY
  19394.         TRY
  19395.             IF (VARTYPE(XMLResult.ExcelDelete) = 'C' AND UPPER(XMLResult.ExcelDelete) = '.T.') ;
  19396.                OR XMLResult.ExcelDelete
  19397.                 DELETE
  19398.             ENDIF
  19399.         CATCH
  19400.         ENDTRY
  19401.         TRY
  19402.             REPLACE nExcelColWidth WITH XMLResult.ExcelColWidth
  19403.         CATCH
  19404.         ENDTRY
  19405.         TRY
  19406.             REPLACE cExcelAlignment WITH XMLResult.ExcelAlignment
  19407.         CATCH
  19408.         ENDTRY
  19409.         TRY
  19410.             REPLACE cExcelAlignment WITH XMLResult.ExcelAlign
  19411.         CATCH
  19412.         ENDTRY
  19413.         TRY
  19414.             REPLACE nExcelMergeAcross WITH XMLResult.ExcelMergeAcross
  19415.         CATCH
  19416.         ENDTRY
  19417.         TRY
  19418.             REPLACE cExcelBorder WITH XMLResult.ExcelBorder
  19419.         CATCH
  19420.         ENDTRY
  19421.         TRY
  19422.             REPLACE cExcelInterior WITH XMLResult.ExcelInterior
  19423.         CATCH
  19424.         ENDTRY
  19425.         TRY
  19426.             REPLACE nExcelUnderlinedColCount WITH XMLResult.ExcelUnderlinedColCount
  19427.         CATCH
  19428.         ENDTRY
  19429. * 21/06/08 Add ExcelInsertFormula, ExcelNamedCell and ExcelNamedRange options
  19430. * cExcelInsertFormula
  19431.         TRY
  19432.             REPLACE cExcelInsertFormula WITH XMLResult.ExcelInsertFormula
  19433.         CATCH
  19434.         ENDTRY
  19435.         TRY
  19436.             REPLACE cExcelNamedRange WITH XMLResult.ExcelNamedRange
  19437.         CATCH
  19438.         ENDTRY
  19439.         TRY
  19440.             REPLACE cExcelNamedCell WITH XMLResult.ExcelNamedCell
  19441.         CATCH
  19442.         ENDTRY
  19443.         TRY
  19444.             USE IN XMLResult
  19445.         CATCH
  19446.         ENDTRY
  19447.     ENDSCAN
  19448. * Run ExcelStyle routine (2 - Before assigning row)
  19449.     This.ApplyExcelStyle(This.cExcelStyle,2)
  19450. * Calc rows ExcelRow
  19451.     * User contains band number
  19452.     SELECT DISTINCT nPageNo,nTop,LEFT(User,3) AS User,0000000 AS ExcelRow ;
  19453.         FROM (this.cOutputAlias) ;
  19454.         INTO CURSOR PageTop READWRITE
  19455.     INDEX ON TRANSFORM(nPageNo,'@L 999999') + TRANSFORM(nTop,'@L 999999') TAG PagTop
  19456.     LOCAL lnLastTop,lnLastRow,lnLastPageNo, llSkipped, lnOldPage, llNewPage
  19457.     lnLastTop     = 0
  19458.     lnLastRow    = 1
  19459.     lnLastPageNo = 1
  19460.     lnOldPage    = 1
  19461.     SCAN
  19462.         * Page header is ignored after page 1
  19463.         llSkipped = .F.
  19464.         llNewPage = .F.
  19465.         * 2010.01.30 - CChalom: Skip one line if new page
  19466.         IF nPageNo > lnOldPage
  19467.             lnOldPage = nPageNo
  19468.             lnLastRow = lnLastRow + 1
  19469.             llNewPage = .T.
  19470.         ENDIF            
  19471.         IF nPageNo > 1 && # lnLastPageNo
  19472.             IF VAL(User) < 3
  19473.                 LOOP
  19474.             ELSE
  19475.                 * If new page adjust last top
  19476.                 lnLastPageNo = nPageNo
  19477.                 IF llNewPage
  19478.                     lnLastTop = nTop - pnRowHeight
  19479.             ENDIF 
  19480.             ENDIF
  19481.         ENDIF
  19482.         * There may be empty rows above this one
  19483.         DO WHILE nTop > lnLastTop + pnRowHeight
  19484.             lnLastTop = lnLastTop + pnRowHeight
  19485.             lnLastRow = lnLastRow + 1
  19486.             llSkipped = .T.
  19487.         ENDDO
  19488.         * nTop may be so close that is is considered same row
  19489.         IF nTop < lnLastTop + .5 * pnRowHeight
  19490.             * No change in lnLastTop
  19491.         ELSE
  19492.             IF NOT llSkipped && Only if we are already in the page
  19493.                 lnLastRow = lnLastRow + 1
  19494.             ENDIF 
  19495.         ENDIF
  19496.         lnLastTop = nTop
  19497.         REPLACE ExcelRow WITH lnLastRow
  19498.         * WAIT WINDOW NOWAIT 'Calculando renglones...'
  19499.     ENDSCAN
  19500.     SELECT (This.cOutputAlias)
  19501.     SET RELATION TO TRANSFORM(nPageNo,'@L 999999') + TRANSFORM(nTop,'@L 999999') INTO PageTop
  19502.     REPLACE ALL ExcelRow WITH PageTop.ExcelRow
  19503. This.ShowTherm(25)
  19504. * Run ExcelStyle routine (3 - Before assigning col)
  19505.     This.ApplyExcelStyle(This.cExcelStyle,3)
  19506. * Calc cols
  19507.     LOCAL lnLastLeft,lnLastCol,llAssignedCol,lnExcelCol
  19508.     * cParseOrder indicates parsing order for two cells with same nLeft
  19509.     * Parse from report top
  19510. *                    TRANSFORM(100-nExcelColRequest-nExcelSpecialColRequest,'@L 999') AS cParseOrder ;
  19511.     SELECT DISTINCT nLeft,0000000 AS ExcelCol,nExcelColRequest,nExcelSpecialColRequest, ;
  19512.                     '9' AS cParseOrder ;
  19513.             FROM (This.cOutputAlias) ;
  19514.             INTO CURSOR Lefts READWRITE
  19515.     REPLACE ALL cParseOrder WITH '2' ;
  19516.             FOR nExcelColRequest > 0
  19517.     REPLACE ALL cParseOrder WITH '1' ;
  19518.             FOR nExcelSpecialColRequest > 0
  19519.     INDEX ON TRANSFORM(nLeft,'@L 999999') + cParseOrder TAG LefOrd
  19520.     lnLastLeft = 0
  19521.     lnLastCol  = 0
  19522.     LOCAL laCount[1]
  19523.     SCAN
  19524.         IF nLeft = lnLastLeft
  19525. *            DELETE
  19526. *            LOOP
  19527.         ENDIF
  19528.         * WAIT WINDOW NOWAIT 'Calculando columnas...'
  19529.         lnThisLeft      = nLeft
  19530.         llAssignedCol = .F.
  19531.         lnExcelCol      = 0
  19532.         * Lefts.nExcelSpecialColRequest is col request for this item only
  19533.         IF Lefts.nExcelSpecialColRequest > 0
  19534.             * Make sure that requested cell is not occupied
  19535.             lnExcelCol = Lefts.nExcelSpecialColRequest
  19536.             SELECT COUNT(*) ;
  19537.               FROM (this.cOutputAlias) A ;
  19538.               JOIN (this.cOutputAlias) B  ON A.ExcelRow = B.ExcelRow ;
  19539.              WHERE A.ExcelCol = lnExcelCol ;
  19540.                     AND B.ExcelCol = 0 ;
  19541.                     AND B.nLeft = lnThisLeft ;
  19542.                     AND B.nExcelSpecialColRequest = lnExcelCol ;
  19543.               INTO ARRAY laCount
  19544.             IF laCount > 0
  19545.                 * There was a clash.  Don't assign.
  19546.                 * SET STEP ON 
  19547.             ELSE
  19548.                 * Accept request
  19549.                 REPLACE ExcelCol WITH lnExcelCol
  19550.                 REPLACE ALL ExcelCol WITH lnExcelCol ;
  19551.                         FOR nLeft = lnThisLeft ;
  19552.                             AND nExcelSpecialColRequest = lnExcelCol ;
  19553.                          IN (this.cOutputAlias)
  19554.                 LOOP
  19555.             ENDIF
  19556.         ENDIF
  19557.         IF Lefts.nExcelColRequest > 0
  19558.             * Make sure that cell is not occupied
  19559.             lnExcelCol = Lefts.nExcelColRequest
  19560.             SELECT COUNT(*) ;
  19561.               FROM (this.cOutputAlias) A ;
  19562.               JOIN (this.cOutputAlias) B  ON A.ExcelRow = B.ExcelRow ;
  19563.              WHERE A.ExcelCol = lnExcelCol ;
  19564.                     AND B.nLeft = lnThisLeft ;
  19565.               INTO ARRAY laCount
  19566.             IF laCount > 0
  19567.                 * There was a clash.  Don't assign.
  19568.             ELSE
  19569.                 * Accept request
  19570.                 lnLastCol  = MAX(lnExcelCol,lnLastCol)
  19571.                 lnLastLeft = nLeft
  19572.                 REPLACE ExcelCol WITH lnExcelCol
  19573.                 REPLACE ALL ExcelCol WITH lnExcelCol ;
  19574.                         FOR nLeft = lnThisLeft ;
  19575.                             AND EMPTY(ExcelCol) ;
  19576.                          IN (this.cOutputAlias)
  19577.                 LOOP
  19578.             ENDIF
  19579.         ENDIF
  19580.         * Haven't assigned Excel column yet, so do it here
  19581.         * If Left is very close it may be considered same col, except if it causes overlap
  19582.         IF nLeft < lnLastLeft + .75 * pnColWidth AND lnLastCol # 0
  19583.             * Make sure it doesn't cause two fields in same cell
  19584.             SELECT COUNT(*) ;
  19585.               FROM (this.cOutputAlias) A ;
  19586.               JOIN (this.cOutputAlias) B  ON A.ExcelRow = B.ExcelRow ;
  19587.              WHERE A.ExcelCol = lnLastCol ;
  19588.                     AND B.nLeft = lnThisLeft ;
  19589.                     AND EMPTY(B.ExcelCol) ;
  19590.               INTO ARRAY laCount
  19591.             IF laCount > 0
  19592.                 lnLastCol  = lnLastCol + 1
  19593.                 lnLastLeft = nLeft
  19594.             ELSE
  19595.                 * No change either in lnLastCol or lnLastLeft
  19596.             ENDIF
  19597.         ELSE
  19598.             lnLastCol  = lnLastCol + 1
  19599.             lnLastLeft = nLeft
  19600.         ENDIF
  19601.         REPLACE ExcelCol WITH lnLastCol
  19602.         REPLACE ALL ExcelCol WITH lnLastCol ;
  19603.                 FOR nLeft    = lnThisLeft ;
  19604.                     AND EMPTY(ExcelCol) ;
  19605.                  IN (this.cOutputAlias)
  19606.     ENDSCAN
  19607. This.ShowTherm(30)
  19608. nSecs = SECONDS()
  19609. * Calc how many columns exist
  19610.     LOCAL ja[1]
  19611.     SELECT MAX(ExcelCol) ;
  19612.       FROM (this.cOutputAlias) ;
  19613.       INTO ARRAY ja
  19614.     PRIVATE pnMaxCol
  19615.     pnMaxCol = ja
  19616. * Extract ExcelColWidths requested
  19617.     PRIVATE paColData
  19618.     DIMENSION paColData[1,2]
  19619.     lnColData = 0
  19620.     SELECT (this.cOutputAlias)
  19621.     * This could follow the real Width of the fields, but does not provide a good result
  19622.     * REPLACE ALL nexcelcolwidth WITH CEILING(nWidth / 70)
  19623.     SCAN FOR !EMPTY(nExcelColWidth)
  19624.         IF ASCAN(paColData,ExcelCol,1,ALEN(paColData,1),1,8) > 0
  19625.             LOOP
  19626.         ENDIF
  19627.         lnColData = lnColData + 1
  19628.         DIMENSION paColData[lnColData,3]
  19629.         paColData[lnColData,1] = ExcelCol
  19630.         paColData[lnColData,2] = .F.            && AutoFitWidth
  19631.         paColData[lnColData,3] = nExcelColWidth
  19632.     ENDSCAN
  19633. * Run ExcelStyle routine (4 - After assigning row and column)
  19634.     This.ApplyExcelStyle(This.cExcelStyle,4)
  19635.     This.cWorkbookFile = ALLTRIM(This.cWorkbookFile)
  19636.     luWorkbook        = FORCEPATH(This.CalcBaseFileName(This.cWorkbookFile), ;
  19637.                                 IIF(EMPTY(JUSTPATH(This.cWorkbookFile)),FULLPATH(CURDIR()),FULLPATH(JUSTPATH(This.cWorkbookFile))))
  19638.     lcWorkSheetName = IIF(EMPTY(This.cWorksheetName),'Sheet1',This.cWorksheetName)
  19639.     lcOpciones = ''
  19640.     * Erase previous file if not ADDITIVE
  19641.     llEraseOK = .T.
  19642.     IF NOT EMPTY(luWorkbook) AND NOT 'ADDITIVE' $ lcOpciones AND FILE(luWorkbook)
  19643.         * Erase inside TRY/CATCH because it may be in use
  19644.         TRY
  19645.             ERASE (luWorkbook)
  19646.         CATCH
  19647.             * Couldn't erase file, so leave a workbook open without saving
  19648.             * WAIT WINDOW NOWAIT 'No pude borrar copia anterior de ' + luWorkbook
  19649.             llEraseOK = .F.
  19650.         ENDTRY
  19651.     ENDIF
  19652.     IF !llEraseOK
  19653.         luWorkbook = FORCEPATH(This.CalcNextFileName(luWorkbook),FULLPATH(CURDIR()))
  19654.         IF NOT EMPTY(luWorkbook) AND NOT 'ADDITIVE' $ lcOpciones AND FILE(luWorkbook)
  19655.             * Erase inside TRY/CATCH because it may be in use
  19656.             TRY
  19657.                 ERASE (luWorkbook)
  19658.             CATCH
  19659.                 * Couldn't erase file, so leave a workbook open without saving
  19660.                 * WAIT WINDOW NOWAIT 'No pude borrar copia anterior de ' + luWorkbook
  19661.                 llEraseOK = .F.
  19662.             ENDTRY
  19663.         ENDIF
  19664.     ENDIF
  19665. * Place data in Excel by writing file in XML format
  19666.     DIMENSION paStyles[1,10]        && Array to save styles
  19667.     * Column1  = Key
  19668.     * Column2  = FontFace
  19669.     * Column3  = FontSize
  19670.     * Column4  = FontStyle
  19671.     * Column5  = DataType
  19672.     * Column6  = NumberFormat
  19673.     * Column7  = HorizontalAlignment
  19674.     * Column8  = Borders
  19675.     * Column9  = Colors
  19676.     * Key = PADR(FontFace,20)+TRAN(FontSize,'99') + PADR(DataType,10) + PADR(NumberFormat,20)
  19677.     SELECT FontFace,FontSize,FontStyle ;
  19678.         FROM (This.cFRXalias) ;    && (this.cOutputAlias) does not contain ObjType = 1 AND ObjCode = 53
  19679.         WHERE Platform = 'WINDOWS ' ;
  19680.             AND ObjType = 1 AND ObjCode = 53 ;
  19681.         INTO ARRAY ja
  19682.     paStyles[1,2]  = IIF(EMPTY(ja[1]),'Lucida Console',ja[1])
  19683.     paStyles[1,3]  = IIF(EMPTY(ja[2]),10,MIN(ja[2] + 3,10))    && 3 points larger that in report up to 10
  19684.     paStyles[1,4]  = ja[3]
  19685.     paStyles[1,5]  = ''
  19686.     paStyles[1,6]  = ''
  19687.     paStyles[1,7]  = '' && Alignment
  19688.     paStyles[1,8]  = ''    && Border
  19689.     paStyles[1,9]  = ''    && Colors
  19690.     paStyles[1,1]  = UPPER(PADR(paStyles[1,2],20)+TRAN(paStyles[1,3],'99')+TRAN(paStyles[1,4],'99') ;
  19691.         + PADR(paStyles[1,5],10) + PADR(paStyles[1,6],20)) + PADR(paStyles[1,7],30) ;
  19692.         + PADR(paStyles[1,8],50) + PADR(paStyles[1,9],50)
  19693.     * Create styles array and XML for table items
  19694.     LOCAL lcXmlTable,lcCRLF,lnLastRow
  19695.     lcXmlTable = This.xml_Table_Header()
  19696.     lcCRLF       = CHR(13)+CHR(10)
  19697.     lnLastRow  = 0
  19698.     SELECT (This.cOutputAlias)
  19699.     SET ORDER TO RowCol
  19700.     LOCAL liLastRow, liLastCol, liCurrRow, liCurrCol, liRec
  19701.     STORE 0 TO liLastRow, liLastCol, liCurrRow, liCurrCol
  19702.     SCAN
  19703.         liRec     = RECNO()
  19704.         liCurrRow = ExcelRow
  19705.         liCurrCol = ExcelCol
  19706.         IF liCurrRow = liLastRow AND liCurrCol = liLastCol && 2 elements in the same cell
  19707.             IF liRec > 1
  19708.                 SKIP -1
  19709.                 lcPrevContents = Contents
  19710.                 DELETE 
  19711.                 SKIP + 1
  19712.                 REPLACE Contents WITH (ALLTRIM(lcPrevContents) + " / " + Contents)
  19713.             ENDIF
  19714.         ENDIF             
  19715.         liLastRow = ExcelRow
  19716.         liLastCol = ExcelCol
  19717.     ENDSCAN
  19718.     LOCAL llIncomplete
  19719.     llIncomplete = liLastRow > 65530
  19720. *MESSAGEBOX("Step 6 - " + TRANSFORM(SECONDS() - nSecs))
  19721. nSecs = SECONDS()
  19722. This.ShowTherm(40)
  19723. LOCAL lnRecs, ln12, ln25, ln37, ln50, ln62, ln75, ln87, ln100
  19724. lnRecs = RECCOUNT()
  19725. ln25 = INT(lnRecs/4)
  19726. ln12 = INT(ln25/2)
  19727. ln37 = ln25 + ln12
  19728. ln50 = INT(lnrecs/2)
  19729. ln62 = ln50 + ln12
  19730. ln75 = ln25 + ln50
  19731. ln87 = ln75 + ln12
  19732.     SCAN FOR NOT DELETED()
  19733.         * WAIT WINDOW NOWAIT 'Preparando para guardar... (' + TRANSFORM(ExcelRow) + ',' + TRANSFORM(ExcelCol) + ')'
  19734.         * If ExcelRow = 0 element belongs to page header of later page
  19735.         IF ExcelRow = 0 OR ExcelRow > 65530
  19736.             LOOP
  19737.         ENDIF
  19738.         * If new row, close last row (if open) and open new.
  19739.         IF lnLastRow # ExcelRow
  19740.             IF lnLastRow # 0
  19741.                 lcXmlTable = lcXmlTable + This.Xml_Row_Footer()
  19742.             ENDIF
  19743.             lnLastRow = ExcelRow
  19744.             lcXmlTable = lcXmlTable + This.Xml_Row_Header()
  19745.         ENDIF
  19746.         lnStyleNumber = This.Xml_StyleNumber(Contents)
  19747.         lcXmlTable      = lcXmlTable + This.Xml_Cell(Contents, UNCONTENTS, lnStyleNumber) && 2011-12-29 Passing the Unicode as well
  19748.         IF RECNO() = ln12
  19749.             This.ShowTherm(48)
  19750.         ENDIF 
  19751.         IF RECNO() = ln25
  19752.             This.ShowTherm(55)
  19753.         ENDIF 
  19754.         IF RECNO() = ln37
  19755.             This.ShowTherm(62)
  19756.         ENDIF 
  19757.         IF RECNO() = ln50
  19758.             This.ShowTherm(70)
  19759.         ENDIF 
  19760.         IF RECNO() = ln62
  19761.             This.ShowTherm(77)
  19762.         ENDIF 
  19763.         IF RECNO() = ln75
  19764.             This.ShowTherm(85)
  19765.         ENDIF 
  19766.         IF RECNO() = ln87
  19767.             This.ShowTherm(92)
  19768.         ENDIF 
  19769.     ENDSCAN
  19770.     This.ShowTherm(97)
  19771.     lcXmlTable = lcXmlTable + This.Xml_Row_Footer()
  19772.     lcXmlTable = lcXmlTable + This.xml_Table_Footer()
  19773.     LOCAL lcXML
  19774.     lcXML = This.Xml_File_Header()
  19775.     lcXML = lcXML + This.Xml_Workbook_Header()
  19776.     lcXML = lcXML + This.Xml_Styles_Header()
  19777.     FOR m.i = 21 TO 20 + ALEN(paStyles,1)
  19778.         lcXML = lcXML + This.Xml_Style(m.i)
  19779.     ENDFOR
  19780.     lcXML = lcXML + This.Xml_Styles_Footer()
  19781. * 21/06/08 Adding NamedRange(s)
  19782. *<ExcelNamedRange>Cajas_Per2,=Sheet1!R10C13</ExcelNamedRange>
  19783.     DIMENSION paNames[1]        && Array to save NamedRanges
  19784.     paNames = ''
  19785.     SELECT DISTINCT cExcelNamedRange ;
  19786.         FROM (this.cOutputAlias) ;
  19787.         WHERE !EMPTY(cExcelNamedRange) ;
  19788.         INTO ARRAY paNames
  19789.     IF !EMPTY(paNames)
  19790.         lcXML = lcXML + This.Xml_Names_Header()
  19791.         FOR m.i = 1 TO ALEN(paNames,1)
  19792.             lcXML = lcXML + This.Xml_Name(m.i)
  19793.         ENDFOR
  19794.         lcXML = lcXML + This.Xml_Names_Footer()
  19795.     ENDIF
  19796. * Finished working with the FRXDataSession, now we can restore to the "current DataSession"
  19797. IF This.lDefaultMode 
  19798.     THIS.setCurrentDataSession()
  19799.     DODEFAULT()
  19800. ENDIF
  19801.     lcXML = lcXML + This.Xml_Worksheet_Header(lcWorkSheetName)
  19802. * Since we finished processing, now it's nice to set the StrictDate back to the original
  19803. SET STRICTDATE TO (This.SetStrictDate)
  19804. LOCAL lcTempFile, lnHandle
  19805. lcTempFile = ADDBS(GETENV("TEMP")) + "FP_" + SYS(2015) + ".XML"
  19806. lnHandle = FCREATE(lcTempFile)
  19807. IF lnHandle <= 0
  19808.     =MESSAGEBOX("Error creating file: " + lcTempFile, "Error")
  19809.     RETURN
  19810. ENDIF
  19811. =FPUTS(lnHandle, lcXML)
  19812. *    lcXML = lcXML + lcXmlTable
  19813. =FPUTS(lnHandle, lcXMLTable)
  19814. *    lcXML = lcXML + This.Xml_Worksheet_Footer()
  19815. =FPUTS(lnHandle, This.Xml_Worksheet_Footer())
  19816. *    lcXML = lcXML + This.Xml_Workbook_Footer()
  19817. =FPUTS(lnHandle, This.Xml_Workbook_Footer())
  19818.     This.ShowTherm(99)
  19819.     LOCAL llSaved
  19820.     llSaved = FCLOSE(lnHandle)
  19821.     * Check if we need to convert to UTF-8
  19822.     IF This.lConvertToUTF8
  19823.         TRY 
  19824.             LOCAL lcXMLWks, lcOldSetSafe
  19825.             lcXMLWKS = FILETOSTR(lcTempFile)
  19826.             lcOldSetSafe = SET("Safety")
  19827.             SET SAFETY OFF 
  19828.             =STRTOFILE(STRCONV(lcXMLWKS,9) , lcTempFile, 4)
  19829.             SET SAFETY &lcOldSetSafe.
  19830.         CATCH 
  19831.         ENDTRY
  19832.     ENDIF
  19833.     * Save sheet
  19834.     IF NOT EMPTY(This.TargetFileName)
  19835.         This.cWorkbookFile = This.TargetFileName
  19836.     ENDIF
  19837.     IF (UPPER(JUSTEXT(This.cWorkbookFile)) = "XML") OR ;
  19838.             (NOT This.lConvertToXLS)
  19839.         llSaved = .F.
  19840.         TRY 
  19841.             RENAME (lcTempFile) TO (This.cWorkbookFile)
  19842.             * llSaved = (STRTOFILE(lcXml, This.cWorkbookFile)) > 0
  19843.             INKEY(.1)
  19844.             llSaved = .T.
  19845.         CATCH 
  19846.         ENDTRY
  19847.     ELSE
  19848. *!*            LOCAL lcTempFile
  19849. *!*            lcTempFile = ADDBS(GETENV("TEMP")) + "FP_" + SYS(2015) + ".XML"
  19850. *!*            llSaved = (STRTOFILE(lcXml, lcTempFile)) > 0
  19851.         This.ShowTherm(100, IIF(VARTYPE(_goFP)="O", _goFP.GetLoc("xlConv2xls"), ""))
  19852.         INKEY(.1)
  19853.         IF llSaved
  19854.             llSaved = .F.
  19855.             llSaved = This.ToPureXLSUsingExcel(lcTempFile, This.cWorkbookFile) && 1st try, using Excel automation
  19856.             IF NOT llSaved
  19857.                 llSaved = This.ToPureXLSUsingOO(lcTempFile, This.cWorkbookFile) && 2nd try, using OpenOffice automation
  19858.             ENDIF
  19859.             IF NOT llSaved && If we didnt manage to use Excel or OO automation to convert, then 
  19860.                            && we'll keep it as XML
  19861.                 TRY 
  19862.                     RENAME (lcTempFile) TO (This.cWorkbookFile)
  19863.                     llSaved = .T.
  19864.                 CATCH 
  19865.                     llSaved = (STRTOFILE(FILETOSTR(lcTempFile), This.cWorkbookFile)) > 0
  19866.                 ENDTRY
  19867.                 INKEY(.1)
  19868.             ENDIF
  19869.             * Erase the temp file
  19870.             IF FILE(lcTempFile)
  19871.                 TRY 
  19872.                     ERASE (lcTempFile)
  19873.                 CATCH TO loExc
  19874.                     * SET STEP ON 
  19875.                 ENDTRY 
  19876.             ENDIF 
  19877.         ENDIF
  19878.     ENDIF
  19879.     IF llSaved
  19880.         IF This.lObjTypeMode
  19881.             _Screen.oFoxyPreviewer.lSaved = llSaved
  19882.         ENDIF
  19883.         IF This.lOpenViewer AND NOT EMPTY(This.TargetFileName)
  19884.             This.ShellExec(This.TargetFileName)
  19885.         ENDIF
  19886.     ENDIF 
  19887.     IF llIncomplete 
  19888.         IF VARTYPE(_goFP) <> "O"
  19889.             MESSAGEBOX("Report is too big to be exported to the Excel format." + CHR(13) + ;
  19890.                 "Please revise the created document because it will be incomplete!", 48, "Attention")
  19891.         ELSE 
  19892.             MESSAGEBOX(_goFP.GetLoc("XLTOOBIG"), 48, _goFP.GetLoc("ATTENTION"))
  19893.         ENDIF 
  19894.     ENDIF
  19895. * Delete the temporary copy of the FRX we created
  19896. IF This.lObjTypeMode
  19897.     USE IN SELECT(This.cFRXalias)
  19898.     TRY 
  19899.         DELETE FILE (This.cTempFRX)
  19900.     CATCH
  19901.     ENDTRY
  19902. ENDIF
  19903.     USE IN SELECT("LEFTS")
  19904.     USE IN SELECT("PAGETOP")
  19905. CATCH
  19906. ENDTRY
  19907. ENDPROC
  19908. PROCEDURE LoadReport
  19909. This.UpdateProperties()
  19910. DODEFAULT()
  19911. ENDPROC
  19912. PROCEDURE setfrxdatasession
  19913. IF PEMSTATUS(This, "lDefaultMode", 5) AND (This.lDefaultMode = .F.)
  19914.     RETURN 
  19915. ENDIF
  19916. IF (THIS.FRXDataSession > -1) AND (THIS.FRXDataSession # SET("DATASESSION"))
  19917.    TRY
  19918.       SET DATASESSION TO (THIS.FRXDataSession)
  19919.    CATCH WHEN .T.
  19920.       THIS.ResetToDefault("FRXDataSession")
  19921.       THIS.resetDataSession()
  19922.    ENDTRY
  19923. ENDIF   
  19924. ENDPROC
  19925. 0FRXDataSession = -1
  19926. coutputalias = 
  19927. coutputdbf = 
  19928. loutputtocursor = .T.
  19929. closeondeactivate = .T.
  19930. nlastpercent = 0
  19931. cworkbookfile = 
  19932. cworksheetname = 
  19933. applyexcelstyleprogram = 
  19934. cexcelstyle = 
  19935. waitfornextreport = .F.
  19936. ldefaultmode = .T.
  19937. cfrxalias = FRX
  19938. lobjtypemode = .F.
  19939. targetfilename = 
  19940. lopenviewer = .F.
  19941. ccodepage = 
  19942. ctempfrx = 
  19943. lalignleft = .F.
  19944. nexcelsaveformat = 43
  19945. setstrictdate = 0
  19946. _memberdata = 
  19947.      869<VFPData><memberdata name="waitfornextreport" display="WaitForNextReport"/><memberdata name="outputfromdata" display="OutputFromData"/><memberdata name="ldefaultmode" display="lDefaultMode"/><memberdata name="cfrxalias" display="cFRXalias"/><memberdata name="shellexec" display="ShellExec"/><memberdata name="updateproperties" display="UpdateProperties"/><memberdata name="lobjtypemode" display="lObjTypeMode"/><memberdata name="targetfilename" display="TargetFileName"/><memberdata name="lopenviewer" display="l<VFPData><memberdata name="waitfornextreport" display="WaitForNextReport"/><memberdata name="outputfromdata" display="OutputFromData"/><memberdata name="ldefaultmode" display="lDefaultMode"/><memberdata name="cfrxalias" display="cFRXalias"/><memberdata name="shellexec" display="ShellExec"/><memberdata name="updateproperties" display="UpdateProperties"/><m
  19948. Name = "excellistener"
  19949. reportlistener
  19950. pr_reportlistener.vcxBM6
  19951. cI5cI5cI5cI5cI5cI5cI5cI5cI5cI5cI5cI5cI5
  19952. cI5 |>
  19953. ]4[}_
  19954. Z!p:l
  19955. Z&|9'g1
  19956. dJ6dJ6dJ6f
  19957. PLATFORM
  19958. UNIQUEID
  19959. TIMESTAMP
  19960. CLASS
  19961. CLASSLOC
  19962. BASECLASS
  19963. OBJNAME
  19964. PARENT
  19965. PROPERTIES
  19966. PROTECTED
  19967. METHODS
  19968. OBJCODE
  19969. RESERVED1
  19970. RESERVED2
  19971. RESERVED3
  19972. RESERVED4
  19973. RESERVED5
  19974. RESERVED6
  19975. RESERVED7
  19976. RESERVED8
  19977.  COMMENT Class               
  19978.  WINDOWS _18Q0OF4291061424627v
  19979.  COMMENT RESERVED            
  19980.  WINDOWS _16V109SEN1061424706
  19981.  COMMENT RESERVED            
  19982. VERSION =   3.00
  19983.     frxcursor
  19984. Pixels
  19985. _frxcursor.h
  19986. foxpro_reporting.h&
  19987. Pixels
  19988. _frxcursor.h
  19989. foxpro_reporting.h&
  19990. _frxcursor.h
  19991. resettextmerge
  19992. frxdevicehelper
  19993. _frxcursor.h
  19994. This class knows how to read printer environment information. Usage:
  19995.    x = NEWOBJECT( "frxDeviceHelper" ) 
  19996.    IF x.LoadDeviceInfo( cDRIVER, cDEVICE, frx.TAG2 )
  19997.        ? x.DpiX
  19998.        ? x.DpiY
  19999.        :
  20000.       etc
  20001. Class
  20002. gProvides methods to translate and manipulate various values in label  and report tables (LBXs and FRXs)
  20003. custom
  20004. frxdevicehelper
  20005. ~dpix Logical pixels-per-inch in the X dimension
  20006. dpiy Logical pixels-per-inch in the Y dimension
  20007. offsetx Physical printable page left margin
  20008. offsety Physical printable page top margin
  20009. actualx Physical width of page in device units
  20010. actualy Physical length of page in device units
  20011. mmx Horizontal page size in millimeters
  20012. mmy Vertical page size in millimeters
  20013. printablex Horizontal page width in pixels
  20014. printabley Vertical page length in pixels
  20015. _memberdata XML Metadata for customizable properties
  20016. orientation 0=Portrait, 1=Landscape
  20017. errormessage Occurs when the Valid event returns false (.F.), and provides a means to display an error message.
  20018. *loaddeviceinfo Parses out print device parameters  into member properties given specific device information: Parameters: cDriver, cDevice, cDevMode. Assumes current VFP default printer if no parameters specified.
  20019. *loadfromfrx Loads printer device parameters from an FRX cursor header record. Restores recno and selected alias. Params: [ cFrxAlias ] (assumes "frx" if none specified.)
  20020. *loadfromstrings Loads printer device parameters from string variables. Params: cExpr, cTag
  20021. *loadfromhdc 
  20022. PRINTER
  20023. Unable to create device context. CreateIC() returned 0.
  20024. LCDRIVER
  20025. LCDEVICE    
  20026. LCDEVMODE
  20027. ERRORMESSAGE
  20028. LRETVAL
  20029. VRESULT
  20030. CREATEIC
  20031. LOADFROMHDC
  20032. DELETEDC
  20033. MESSAGE-
  20034. WINDOWS
  20035. LCFRXALIAS
  20036. ERRORMESSAGE
  20037. CURSEL
  20038. CURREC
  20039. LRETVAL
  20040. PLATFORM
  20041. OBJTYPE
  20042. OBJCODE
  20043. LOADFROMSTRINGS
  20044. TAG26
  20045. DRIVER=
  20046. DEVICE=
  20047. TCEXPR
  20048. TCTAG2
  20049. CLINE
  20050. CDRIVER
  20051. LDRIVER
  20052. CDEVICE
  20053. LDEVICE
  20054. LOADDEVICEINFO
  20055. TIHDC
  20056. GETDEVICECAPS
  20057. OFFSETX
  20058. OFFSETY
  20059. PRINTABLEX
  20060. PRINTABLEY
  20061. ACTUALX
  20062. ACTUALY
  20063. GetLastError
  20064. win32api
  20065. SetLastError
  20066. win32api
  20067. CreateIC
  20068. gdi32
  20069. GetDeviceCaps
  20070. gdi32
  20071. DeleteDC
  20072. gdi32
  20073. GETLASTERROR
  20074. WIN32API
  20075. SETLASTERROR
  20076. CREATEIC
  20077. GDI32
  20078. GETDEVICECAPS
  20079. DELETEDC
  20080. loaddeviceinfo,
  20081. loadfromfrx
  20082. loadfromstrings
  20083. loadfromhdcO
  20084. custom
  20085. Class
  20086. custom
  20087.     frxcursor
  20088. screendpi Contains the working DPI of the ReportDesigner.  Currently hard-coded to 96.
  20089. _memberdata XML Metadata for customizable properties
  20090. quietmode Allows runtime users of frxCursor to specify whether the class displays error messages and other user feedback.
  20091. *inttobinstring Returns a string of bytes, the binary version of a given integer.
  20092. *binstringtoint Returns a numeric equivalent of a given binary number given in byte string form.
  20093. *hasprotectionflag Returns .T. if the given binary data contains a specific bit set. Parameters: cBytes, iBit
  20094. *frutopixels Returns the pixel value of a given measurement in FRUs.
  20095. *pixelstofru Returns the FRU value of a given measurement in pixels.
  20096. *getfrutextwidth Returns the width of a given string in FRUs. Parameters: cText, cTypeface, iSize [, cStyle ]
  20097. *getfrutextheight Reutrns the height of a given string in FRUs. Parameters: cText, cTypeface, iSize [, cStyle ]
  20098. *gorec Restores record pointer with bounds checking. Parameters: i, cAlias
  20099. *getreportattribute Returns the value of a given report/header attribute. The FRX cursor must be open. Parameters: cToken [, iAlternate]
  20100. *createbandcursor Creates a cursor with alias "bands" containing records of information for each band in the report. Assumes source alias is "FRX" unless specified. Parameters: [cFrxAlias]
  20101. *hasband Returns .T. if the report has the specified band type. Calls .createBandCursor() if necessary. Parameters: iObjCode
  20102. *hasdetailheader Returns .T. if the specified detail band has an associated detail header band. Calls .createBandCursor() if necessary. Parameters: cUniqueId
  20103. *createobjectcursor Creates a cursor (default alias: "objects") of records for each object record in the report alias. Parameters: [ cFrxAlias [, cDestinationAlias [, iFilterMode ]]]
  20104. *createobjcursorrecord Called from .createObjectCursor(). Parameter: cDestinationAlias
  20105. *charsettolocale Converts a given Font Charset to a candidate locale Id for use with the STRCONV() function. Parameters: nCharSet
  20106. *getbandfor Returns a SCATTER NAME band object for the specified object ID. Calls .createObjectCursor() if necessary. Parameters: cObjectID [, lStart]
  20107. *synchobjectpositions Updates VPOS values in the FRX cursor for each object, based on which band the object starts in, and the current height of each band as expressed in the bands cursor. Assumes: band and object cursors exist; current alias is frx cursor; no recno restore.
  20108. *getobjectsinband Returns a collection of UNIQUEIDs (or RECNOs) for each object in a given band. Calls .createObjectCursor() if necessary. Parameters: cBandId [, lRecnos]
  20109. *insertdataenvrecord Inserts a data environment object record into an FRX cursor. Assumes that the record pointer is appropriately located. Parameters: ID, NAME, EXPR, CODE
  20110. *insertband Inserts a band record into an frx cursor. Assumes that the FRX is currently selected and that the record pointer is located appropriately. Parameter: iObjCode
  20111. *inserttitleband Inserts a title band into the frx cursor. Parameter: lBreakToNewPage
  20112. *insertsummaryband Inserts a summary band into the frx cursor. Parameters: lBreakToNewPage, lPageHeader, lPageFooter
  20113. *insertdetailband Inserts a detail band into the frx cursor. Assumes: the record pointer is located appropriately. Parameters: none
  20114. *insertdetailheaderfooter Inserts detail header and footer bands into the frx cursor. Assumes: record pointer is located on the detail band record. Parameters: none
  20115. *setcolumncount Adds or removes columns (and column header/footer records) from the FRX cursor. Assumes: the frx cursor is selected. Parameters: iColumns
  20116. *creategroupcursor Creates a cursor with the alias "groups" containing records of information about each data group in the specified report cursor, default "frx". Parameters: [cFrxAlias]
  20117. *createvariablecursor Creates a cursor with the alias "vars" containing records of information for each report variable in the report. Parameters: [cFrxAlias]
  20118. *createcalcresetoncursor Creates a cursor with alias "reset_on" that contains records of information for each prompt in the Calculation Reset combobox. Parameters: [cFrxAlias]
  20119. *createdefaultprintenvcursor Creates a one-row cursor with the same structure as the FRX. Default parameters are "frx", "defPrnEnv". Parameters: [ cFrxAlias [, cDestinationAlias]]
  20120. *getselectedobjectcount Returns the number of selected objects in the frx cursor. Parameter: [cFrxAlias]
  20121. *pushprintenvtocursor Saves the current printer environment to a cursor. Parameter: cSavedInAlias
  20122. *popprintenv Restores the printer environment from a previously saved cursor. See .PushPrintEnvToCursor() method. Assumes: previously saved cursor is currently selected.
  20123. *getfrxtimestamp Returns a FOX system file timestamp from a datetime value, any data type. Parameter: [vDateTime]
  20124. *gettimestampstring Returns a readable string version of a Fox system timestamp, using current date settings. Parameter: iStamp
  20125. *inttobin Returns a binary form of an integer. Parameter: iNumber
  20126. *bintoint Returns the integer form of binary data. Parameter: cBinary
  20127. *gettargettypetext Returns a readable string version of a target Type+Code. Parameters: iObjectType, iObjectCode
  20128. *getunitvaluefromfru Returns a given unit value for a given value in FRUs, depending on the units. Parameters: nFruValue, iUnits
  20129. *stripquotes Returns a string with embraced string delimiters removed. Parameters: cString
  20130. *getmetadatadomdoc Returns a reference to an MSXml.DomDocument with the metadata xml loaded. Assumes FRX is located on desired record.
  20131. *islayoutcontrol 
  20132. *unpackmemberdata Parameters: [cFrxAlias], [cMetaAlias]. Defaults to 'frx', 'memberdata'
  20133. *packupmemberdata Parameters: [cFrxAlias], [cMetaAlias]. Defaults to 'frx', 'memberdata'
  20134. *unpackfrxmemberdata 
  20135. *getfrxrecdisplayname Returns a readable string version of the current record in the current alias. (Assumes current alias is an FRX structure.)
  20136. *xmlstrtocursor 
  20137. *cursortoxmlstr 
  20138. *quietmode_assign 
  20139. *generateevaluatecontentsscript Provides generated EvaluateContents code based on specified MemberData record usage.
  20140. *generateadjustobjectsizescript Provides generated AdjustObjectSize code based on specified MemberData record usage.
  20141. *resettextmerge Restores a saved set of delimiters  and other characteristics of the SET TEXTMERGE command.
  20142. ]screendpi = 96
  20143. _memberdata = 
  20144.     4363<?xml version = "1.0" encoding="Windows-1252" standalone="yes"?>
  20145. <VFPData>
  20146. <memberdata name="getmetadatadomdoc" type="Method" display="GetMetadataDomDoc" favorites="false" override="false" script=""/>
  20147. <memberdata name="createvariablecursor" type="Method" display="CreateVariableCursor"/>
  20148. <memberdata name="binstringtoint" type="Method" display="BinStringToInt"/>
  20149. <memberdata name="bintoint" type="Method" display="BinToInt"/>
  20150. <memberdata name="charsettolocale" type="Method" display="CharsetToLocale"/>
  20151. <memberdata name="createbandcursor" type="Method" display="CreateBandCursor"/>
  20152. <memberdata name="createcalcresetoncursor" type="Method" display="CreateCalcResetOnCursor"/>
  20153. <memberdata name="createdefaultprintenvcursor" type="Method" display="CreateDefaultPrintEnvCursor"/>
  20154. <memberdata name="creategroupcursor" type="Method" display="CreateGroupCursor"/>
  20155. <memberdata name="createobjcursorrecord" type="Method" display="CreateObjCursorRecord"/>
  20156. <memberdata name="createobjectcursor" type="Method" display="CreateObjectCursor"/>
  20157. <memberdata name="frutopixels" type="Method" display="FruToPixels"/>
  20158. <memberdata name="getbandfor" type="Method" display="GetBandFor"/>
  20159. <memberdata name="getfrutextheight" type="Method" display="GetFruTextHeight"/>
  20160. <memberdata name="getfrutextwidth" type="Method" display="GetFruTextWidth"/>
  20161. <memberdata name="getfrxtimestamp" type="Method" display="GetFrxTimeStamp"/>
  20162. <memberdata name="getobjectsinband" type="Method" display="GetObjectsInBand"/>
  20163. <memberdata name="getreportattribute" type="Method" display="GetReportAttribute"/>
  20164. <memberdata name="getselectedobjectcount" type="Method" display="GetSelectedObjectCount"/>
  20165. <memberdata name="gettargettypetext" type="Method" display="GetTargetTypeText"/>
  20166. <memberdata name="gettimestampstring" type="Method" display="GetTimeStampString"/>
  20167. <memberdata name="getunitvaluefromfru" type="Method" display="GetUnitValueFromFru"/>
  20168. <memberdata name="gorec" type="Method" display="GoRec"/>
  20169. <memberdata name="hasband" type="Method" display="HasBand"/>
  20170. <memberdata name="hasdetailheader" type="Method" display="HasDetailHeader"/>
  20171. <memberdata name="hasprotectionflag" type="Method" display="HasProtectionFlag"/>
  20172. <memberdata name="insertband" type="Method" display="InsertBand"/>
  20173. <memberdata name="insertdataenvrecord" type="Method" display="InsertDataEnvRecord"/>
  20174. <memberdata name="insertdetailband" type="Method" display="InsertDetailBand"/>
  20175. <memberdata name="insertdetailheaderfooter" type="Method" display="InsertDetailHeaderFooter"/>
  20176. <memberdata name="insertsummaryband" type="Method" display="InsertSummaryBand"/>
  20177. <memberdata name="inserttitleband" type="Method" display="InsertTitleBand"/>
  20178. <memberdata name="inttobin" type="Method" display="IntToBin"/>
  20179. <memberdata name="inttobinstring" type="Method" display="IntToBinString"/>
  20180. <memberdata name="islayoutcontrol" type="Method" display="IsLayoutControl"/>
  20181. <memberdata name="packupmemberdata" type="Method" display="PackupMemberData"/>
  20182. <memberdata name="pixelstofru" type="Method" display="PixelsToFru"/>
  20183. <memberdata name="popprintenv" type="Method" display="PopPrintEnv"/>
  20184. <memberdata name="pushprintenvtocursor" type="Method" display="PushPrintEnvToCursor"/>
  20185. <memberdata name="runtimemode" type="Property" display="RuntimeMode"/>
  20186. <memberdata name="screendpi" type="Property" display="ScreenDPI"/>
  20187. <memberdata name="setcolumncount" type="Method" display="SetColumnCount"/>
  20188. <memberdata name="stripquotes" type="Method" display="StripQuotes"/>
  20189. <memberdata name="synchobjectpositions" type="Method" display="SynchObjectPositions"/>
  20190. <memberdata name="unpackmemberdata" type="Method" display="UnpackMemberData"/>
  20191. <memberdata name="unpackfrxmemberdata" type="Method" display="UnpackFrxMemberData"/>
  20192. <memberdata name="cursortoxmlstr" type="Method" display="CursorToXmlStr"/>
  20193. <memberdata name="xmlstrtocursor" type="Method" display="XmlStrToCursor"/>
  20194. <memberdata name="getfrxrecdisplayname" type="Method" display="GetFrxRecDisplayName"/><memberdata name="quietmode" display="QuietMode" type="Property" favorites="True"/><memberdata name="generateevaluatecontentsscript" display="GenerateEvaluateContentsScript" type="Method" favorites="True"/><memberdata name="generateadjustobjectsizescript" display="GenerateAdjustObjectSizeScript" type="Method" favorites="True"/>
  20195. <memberdata name="resettextmerge" type="Method" display="ResetTextMerge"/>
  20196. </VFPData>
  20197. quietmode = .F.
  20198. Name = "frxcursor"
  20199. custom
  20200. dpix = 0
  20201. dpiy = 0
  20202. offsetx = 0
  20203. offsety = 0
  20204. actualx = 0
  20205. actualy = 0
  20206. mmx = 0
  20207. mmy = 0
  20208. printablex = 0
  20209. printabley = 0
  20210. _memberdata = 
  20211.     1735<?xml version = "1.0" encoding="Windows-1252" standalone="yes"?>
  20212. <VFPData>
  20213. <memberdata name="loaddeviceinfo" type="Method" display="LoadDeviceInfo" favorites="false" override="false" script=""/>
  20214. <memberdata name="loadfromfrx" type="Method" display="LoadFromFrx" favorites="false" override="false" script=""/>
  20215. <memberdata name="loadfromstrings" type="Method" display="LoadFromStrings" favorites="false" override="false" script=""/>
  20216. <memberdata name="loadfromhdc" type="Method" display="LoadFromHDC" favorites="false" override="false" script=""/>
  20217. <memberdata name="dpix" type="Property" display="DpiX" favorites="false" override="false" script=""/>
  20218. <memberdata name="dpiy" type="Property" display="DpiY" favorites="false" override="false" script=""/>
  20219. <memberdata name="offsetx" type="Property" display="OffsetX" favorites="false" override="false" script=""/>
  20220. <memberdata name="offsety" type="Property" display="OffsetY" favorites="false" override="false" script=""/>
  20221. <memberdata name="actualx" type="Property" display="ActualX" favorites="false" override="false" script=""/>
  20222. <memberdata name="actualy" type="Property" display="ActualY" favorites="false" override="false" script=""/>
  20223. <memberdata name="mmx" type="Property" display="mmX" favorites="false" override="false" script=""/>
  20224. <memberdata name="mmy" type="Property" display="mmY" favorites="false" override="false" script=""/>
  20225. <memberdata name="printablex" type="Property" display="PrintableX" favorites="false" override="false" script=""/>
  20226. <memberdata name="printabley" type="Property" display="PrintableY" favorites="false" override="false" script=""/>
  20227. <memberdata name="orientation" type="Property" display="Orientation" favorites="false" override="false" script=""/>
  20228. </VFPData>
  20229. orientation = 0
  20230. errormessage = ("")
  20231. Name = "frxdevicehelper"
  20232. CBYTES
  20233. CBYTE
  20234. IRETURN
  20235. CBINSTRING
  20236. IFLAGBIT
  20237. IPROTFLAGS
  20238. BINSTRINGTOINT?
  20239. IPIXELS
  20240. THIS    
  20241. SCREENDPI%
  20242. THIS    
  20243. SCREENDPI
  20244. CTEXT    
  20245. CTYPEFACE
  20246. ISIZE
  20247. CSTYLE
  20248. IWIDTH
  20249. PIXELSTOFRUk
  20250. CTEXT    
  20251. CTYPEFACE
  20252. ISIZE
  20253. CSTYLE
  20254. IHEIGHT
  20255. PIXELSTOFRUc
  20256. CALIAS
  20257. WINDOWS
  20258. UNITS
  20259. MULTICOLUMN
  20260. COLUMNCOUNT
  20261. PROTECTION
  20262. SNAKED_COLUMNS
  20263. CURSEL
  20264. CURREC
  20265. VRETVAL
  20266. OBJTYPE
  20267. PLATFORM
  20268. RULER
  20269. FRX_RULER_FRUS
  20270. UNITS_FRU_LOC
  20271. UNITS_INCHES_LOC
  20272. UNITS_METRIC_LOC
  20273. UNITS_PIXELS_LOC
  20274. UNITS_CHARACTERS_LOC
  20275. ORDER
  20276. BOTTOM
  20277. GOREC
  20278. datasessionv
  20279. datasessionv
  20280. bands
  20281. bands
  20282. Collection
  20283. Collection
  20284. WINDOWS
  20285. bands
  20286. TCFRXALIAS    
  20287. TISESSION
  20288. CURSEL
  20289. CURREC
  20290. CURSESSION
  20291. BANDS
  20292. UNIQUEID
  20293. OBJTYPE
  20294. OBJCODE
  20295. EXPR    
  20296. BANDLABEL
  20297. START
  20298. HEIGHT
  20299. P_START
  20300. P_STOP
  20301. P_HEIGHT
  20302. R_START
  20303. R_STOP
  20304. RESETTOTAL
  20305. BAND_SEQ
  20306. REL_BAND_ID
  20307. REC_NO
  20308. NSTART
  20309. ISTART
  20310. IDETAILCOUNT
  20311. CSUFFIX
  20312. IBANDCOUNT
  20313. OGROUP
  20314. OHEADER    
  20315. LCTITLEID
  20316. LCSUMMARYID
  20317. PLATFORM
  20318. GETTARGETTYPETEXT
  20319. COUNT
  20320. REMOVE
  20321. FRUTOPIXELS
  20322. IREC    
  20323. CFOOTERID
  20324. CBANDID    
  20325. CHEADERID
  20326. GOREC
  20327. bands
  20328. IOBJCODE
  20329. CREATEBANDCURSOR
  20330. CURSEL
  20331. LRETVAL
  20332. BANDS
  20333. OBJCODE
  20334. bands
  20335. CUNIQUEID
  20336. CREATEBANDCURSOR
  20337. CURSEL
  20338. LRETVAL
  20339. BANDS
  20340. UNIQUEID
  20341. OBJTYPE
  20342. OBJCODE
  20343. objects
  20344. datasessionv
  20345. datasessionv
  20346. bands
  20347. create cursor &tcDestAlias (  UNIQUEID c(10),  OBJTYPE N(2,0),  OBJCODE n(3,0),  EXPR M,  VPOS n(9,3),  HPOS n(9,3),  HEIGHT n(9,3), WIDTH n(9,3), OBJNAME c(50), LOCALE_ID i,  P_START i,  P_STOP i,  P_HEIGHT i,  BAND_OFFSET i,  START_BAND_ID c(10), END_BAND_ID c(10),  BANDLABEL c(75),  SELECTED l,  OBJ_PICT c(12),  BAND_SEQ i,  REC_NO i,  TYPE_SEQ i,  CTYPE c(10) )
  20348. WINDOWS
  20349. WINDOWS
  20350. WINDOWS
  20351. WINDOWS
  20352. TCFRXALIAS
  20353. TCDESTALIAS
  20354. TIFILTER
  20355. TLRUNTIMEMODE    
  20356. TISESSION
  20357. CURSEL
  20358. CURREC
  20359. CURSESSION
  20360. CREATEBANDCURSOR
  20361. OBJTYPE
  20362. PLATFORM
  20363. CREATEOBJCURSORRECORD    
  20364. IGRPSTART    
  20365. IGRPCOUNT
  20366. CURPOS
  20367. GOREC
  20368. Label
  20369. pslabel.bmp
  20370. Field
  20371. pseditbx.bmp
  20372. psline.bmp
  20373. Rectangle
  20374. pshape.bmp
  20375. Picture/OLE Bound
  20376. psolebnd.bmp
  20377. Grouped Objects
  20378. group2.bmp
  20379. Indeterminate behavior
  20380. Resolved as Page Header
  20381. TCDESTALIAS
  20382. TLRUNTIMEMODE
  20383. SRCALIAS
  20384. LISGROUP
  20385. REC_NO
  20386. OBJNAME
  20387. GETFRXRECDISPLAYNAME
  20388. OBJTYPE
  20389. CTYPE
  20390. OBJ_PICT    
  20391. LOCALE_ID
  20392. CHARSETTOLOCALE
  20393. RESOID
  20394. TYPE_SEQ
  20395. UNIQUEID
  20396. OBJCODE
  20397. HEIGHT
  20398. P_START
  20399. FRUTOPIXELS
  20400. P_HEIGHT
  20401. P_STOP
  20402. WIDTH
  20403. SELECTED
  20404. CURPOS
  20405. BANDS
  20406. R_START
  20407. START_BAND_ID    
  20408. BANDLABEL
  20409. BAND_OFFSET
  20410. BAND_SEQ
  20411. R_STOP
  20412. END_BAND_ID
  20413. REL_BAND_ID
  20414. NCHARSET
  20415. datasessionv
  20416. datasessionv
  20417. objects
  20418. COBJECTID
  20419. LSTART
  20420. ISESSION
  20421. CURSESSION
  20422. CREATEOBJECTCURSOR
  20423. CURSEL
  20424. OBAND
  20425. OBJECTS
  20426. UNIQUEID
  20427. BANDS
  20428. START_BAND_ID
  20429. END_BAND_ID
  20430. WINDOWS
  20431. bands4
  20432. objects4    
  20433. CURSEL
  20434. CURREC
  20435. OBJTYPE
  20436. PLATFORM
  20437. UNIQUEID
  20438. OBJECTS
  20439. BANDS
  20440. START_BAND_ID
  20441. PIXELSTOFRU
  20442. P_START
  20443. BAND_OFFSET
  20444. GORECh
  20445. datasessionv
  20446. datasessionv
  20447. Collection
  20448. objects
  20449. CBANDID
  20450. LRECNOS
  20451. ISESSION
  20452. OBANDOBJECTS
  20453. CURSEL
  20454. CURSESSION
  20455. CREATEOBJECTCURSOR
  20456. OBJECTS
  20457. START_BAND_ID
  20458. REC_NO
  20459. UNIQUEIDs
  20460. WINDOWS
  20461. LIOBJTYPE
  20462. LCNAME
  20463. LCEXPR    
  20464. LCMETHODS
  20465. PLATFORM
  20466. OBJTYPE
  20467. ENVIRON
  20468. CURPOSz
  20469. WINDOWS
  20470. LIOBJCODE
  20471. PLATFORM
  20472. UNIQUEID
  20473. OBJTYPE
  20474. OBJCODE
  20475. NOREPEAT    
  20476. PAGEBREAK
  20477. COLBREAK    
  20478. RESETPAGE
  20479. PLAIN
  20480. CURPOSD
  20481. LNEWPAGE
  20482. INSERTBAND
  20483. HEIGHT    
  20484. PAGEBREAKx
  20485. LNEWPAGE
  20486. LPAGEHEADER
  20487. LPAGEFOOTER
  20488. OBJTYPE
  20489. OBJCODE
  20490. INSERTBAND
  20491. HEIGHT    
  20492. PAGEBREAK
  20493. EJECTBEFOR
  20494. EJECTAFTER
  20495. INSERTBAND
  20496. WINDOWS
  20497. WINDOWS
  20498. PLATFORM
  20499. UNIQUEID
  20500. OBJTYPE
  20501. OBJCODE'
  20502. WINDOWS
  20503. WINDOWS
  20504. WINDOWS
  20505. WINDOWS
  20506. WINDOWS
  20507. WINDOWS
  20508. WINDOWS
  20509. WINDOWS
  20510. ICOLS
  20511. LHASCOLBANDS
  20512. CURREC    
  20513. CFRXALIAS
  20514. OBJTYPE
  20515. PLATFORM
  20516. OBJCODE
  20517. GOREC
  20518. CREATEOBJECTCURSOR
  20519. UNIQUEID
  20520. NOREPEAT    
  20521. PAGEBREAK
  20522. COLBREAK    
  20523. RESETPAGE
  20524. PLAIN
  20525. CURPOS
  20526. CREATEBANDCURSOR
  20527. SYNCHOBJECTPOSITIONS$
  20528. datasessionv
  20529. datasessionv
  20530. UNITS
  20531. groups
  20532. groups
  20533. MULTICOLUMN
  20534. WINDOWS
  20535. insert into groups values (  &tcFrxAlias..UNIQUEID,  &tcFrxAlias..EXPR,  m.iPaginate,  &tcFrxAlias..NOREPEAT,  m.nThreshold,  "" )
  20536. WINDOWS
  20537. replace FOOTER_ID with &tcFrxAlias..UNIQUEID
  20538. TCFRXALIAS    
  20539. TISESSION
  20540. CURSESSION
  20541. CURSEL
  20542. IUNITS
  20543. GETREPORTATTRIBUTE
  20544. GROUPS
  20545. UNIQUEID
  20546. PAGINATE
  20547. REPRINT
  20548. THRESH    
  20549. FOOTER_ID    
  20550. IPAGINATE
  20551. ICURREC
  20552. NTHRESHOLD
  20553. LISMULTICOL
  20554. OBJTYPE
  20555. OBJCODE
  20556. PLATFORM    
  20557. PAGEBREAK    
  20558. RESETPAGE
  20559. COLBREAK
  20560. GETUNITVALUEFROMFRU
  20561. WIDTH
  20562. GOREC2
  20563. datasessionv
  20564. datasessionv
  20565. reset_on
  20566. WINDOWS
  20567. locate for RESETTOTAL = &tcFrxAlias..RESETTOTAL
  20568. insert into vars values (  &tcFrxAlias..UNIQUEID,  &tcFrxAlias..NAME,  &tcFrxAlias..EXPR,  &tcFrxAlias..TAG,  &tcFrxAlias..UNIQUE,  &tcFrxAlias..TOTALTYPE+1,  recno("reset_on"),  recno(m.tcFrxAlias) )
  20569. TCFRXALIAS    
  20570. TISESSION
  20571. CURSESSION
  20572. CURSEL
  20573. CREATECALCRESETONCURSOR
  20574. UNIQUEID
  20575. VARNAME
  20576. VALUE_TO_STORE
  20577. INITIAL_VALUE
  20578. RELEASE_VAR    
  20579. CALC_TYPE
  20580. RESET_ON
  20581. REC_NO
  20582. ICURREC
  20583. IRESETON
  20584. OBJTYPE
  20585. PLATFORM
  20586. GORECK
  20587. datasessionv
  20588. datasessionv
  20589. reset_on
  20590. reset_on
  20591. reset_on
  20592. Report
  20593. reset_on
  20594. WINDOWS
  20595. reset_on
  20596. Column
  20597. reset_on
  20598. Column
  20599. WINDOWS
  20600. reset_on
  20601. WINDOWS
  20602. insert into reset_on values (  &tcFrxAlias..UNIQUEID,  &tcFrxAlias..OBJCODE,  "Group: " + trim(&tcFrxAlias..EXPR),  5    + m.iNum )
  20603. WINDOWS
  20604. reset_on
  20605. WINDOWS
  20606. insert into reset_on values (  &tcFrxAlias..UNIQUEID,  &tcFrxAlias..OBJCODE,  "Detail " + transform(m.iNum),  79   + m.iNum  )    
  20607. TCFRXALIAS    
  20608. TISESSION
  20609. CURSESSION
  20610. CURSEL
  20611. CURREC
  20612. IGROUPCOUNT
  20613. IDETAILCOUNT
  20614. RESET_ON
  20615. UNIQUEID
  20616. OBJCODE
  20617. PROMPT_TEXT
  20618. RESETTOTAL
  20619. OBJTYPE
  20620. PLATFORM
  20621. GORECG
  20622. datasessionv
  20623. datasessionv
  20624. defPrnEnv
  20625. WINDOWS
  20626. LCFRXALIAS    
  20627. LCPEALIAS    
  20628. LISESSION
  20629. CURSEL
  20630. CURSESSION
  20631. OBJTYPE
  20632. PLATFORM
  20633. WINDOWS
  20634. LCFRXALIAS
  20635. CURSEL
  20636. CURREC
  20637. SELCOUNT
  20638. CURPOS
  20639. PLATFORM
  20640. OBJTYPEc
  20641. CREGISTERALIAS
  20642. CURSEL
  20643. RESULT
  20644. RESULT
  20645. TVDATETIME
  20646. LTDATETIME
  20647. LVFOXTIMESTAMP
  20648. LVTEMP
  20649. INTTOBIN
  20650. BINTOINT~
  20651. tiStampb
  20652. RETURN TTOC({^&lcYear./&lcMonth./&lcDay. &lcHour.:&lcMinute.:&lcSecond.})    
  20653. TISTAMP
  20654. LNYEAROFFSET
  20655. LCYEAR
  20656. LCMONTH
  20657. LCDAY
  20658. LCHOUR
  20659. LCMINUTE
  20660. LCSECOND
  20661. TNINTEGER    
  20662. LNINTEGER
  20663. LCBINARY    
  20664. LNDIVISOR
  20665. LNCOUNT
  20666. TCBINARY    
  20667. LCINTEGER    
  20668. LNINTEGER
  20669. LNCOUNT
  20670. LNSTRLEN
  20671. Multiple Selection
  20672. Comment
  20673. Report/Global
  20674. Workarea
  20675. Index
  20676. Relation
  20677. Label
  20678. Rectangle
  20679. Field
  20680. Title
  20681. Page Header
  20682. Column Header
  20683. Group Header
  20684. Detail
  20685. Group Footer
  20686. Column Footer
  20687. Page Footer
  20688. Summary
  20689. Detail Header
  20690. Detail Footer
  20691. Unknown band type
  20692. Grouped Objects
  20693. Picture/OLE Bound
  20694. Variable
  20695. Printer Driver Setup
  20696. Font Resource
  20697. Data Environment
  20698. Cursor
  20699. Unknown Target type
  20700. NOBJTYPE
  20701. NOBJCODE
  20702. NFRUVALUE
  20703. IUNITS
  20704. LCVALUE
  20705. <VFPData>
  20706.     <reportdata name="" type="R" script="" execute="" execwhen="" class="" classlib="" declass="" declasslib=""/> 
  20707. </VFPData>     
  20708. MSXml.DomDocument
  20709. LCFRXALIAS
  20710. CURSEL
  20711. STYLE
  20712. LOADXML&
  20713. IOBJTYPE
  20714. datasessionv
  20715. datasessionv
  20716. memberdata
  20717. <VFPD
  20718. <?XML
  20719. TCFRXALIAS
  20720. TCMETAALIAS
  20721. TIDATASESSION
  20722. CURSEL
  20723. LCXML    
  20724. LLSUCCESS
  20725. LIDATASESSION
  20726. STYLE
  20727. XMLSTRTOCURSOR2
  20728. memberdata
  20729. datasessionv
  20730. datasessionv
  20731. <VFPD
  20732. <?XML
  20733. For this object, the report layout currently contains unexpected STYLE information:C
  20734. This may be a consequence of a conversion from a FoxPro DOS report.
  20735. If you save your changes, this information will be replaced.
  20736. (It will not affect the existing behavior of this report in FoxPro DOS.)
  20737. Do you wish to continue?
  20738. FoxPro Reporting
  20739. reportdata
  20740. reportdata
  20741. <VFPData><reportdata name="" type="R" script="" execute="" execwhen="" class="" classlib="" declass="" declasslib=""/></VFPData>
  20742. <VFPDATA/>
  20743. TCFRXALIAS
  20744. TCMETAALIAS
  20745. TIDATASESSION
  20746. LCXML
  20747. LIBYTES
  20748. LISELECT
  20749. LIDATASESSION    
  20750. LLSUCCESS
  20751. STYLE
  20752. THIS    
  20753. QUIETMODE
  20754. REPORTDATA
  20755. CURSORTOXMLSTR
  20756. DATASESSIONv
  20757. DATASESSIONv
  20758. memberdata
  20759. |NAME|TYPE|SCRIPT|EXECUTE|EXECWHEN|CLASS|CLASSLIB|DECLASS|DECLASSLIB|
  20760. WINDOWS
  20761. The metadata for a report definition row (ID: 
  20762. ) is invalid.
  20763. Metadata instructions for this item will be ignored.
  20764. FoxPro Reporting
  20765. The metadata for some report definition rows
  20766. could not be loaded.
  20767. Some dynamic report features may be missing,
  20768. or a report run may not conclude successfully.
  20769. FoxPro Reporting
  20770. TCFRXALIAS
  20771. TCMETAALIAS
  20772. TIDATASESSION
  20773. TLOMITINDEX
  20774. CURSEL
  20775. LIROWS
  20776. LCATTRIBUTES
  20777. LIINDEX
  20778. LCTEMPALIAS
  20779. LISELECT
  20780. LLERROR
  20781. LIDATASESSION
  20782. FRXRECNO
  20783. EXECWHEN
  20784. EXECUTE
  20785. CLASS
  20786. CLASSLIB
  20787. DECLASS
  20788. DECLASSLIB
  20789. SCRIPT
  20790. PLATFORM
  20791. STYLE
  20792. THIS    
  20793. QUIETMODE
  20794. MESSAGE
  20795. UNIQUEID
  20796. Report/Global
  20797. Rectangle
  20798. Title
  20799. Page Header
  20800. Column Header
  20801. Group Header
  20802. Detail
  20803. Group Footer
  20804. Column Footer
  20805. Page Footer
  20806. Summary
  20807. Detail Header
  20808. Detail Footer
  20809. Grouped Objects
  20810. Unknown Target type
  20811. [CCO_
  20812. TLINCLUDERECNO
  20813. RETVAL
  20814. OBJTYPE
  20815. STRIPQUOTES
  20816. PICTURE
  20817. OBJCODE
  20818. HPOSs
  20819. <VFPDATA/>
  20820. Do you want to replace the metadata with a valid default XML fragment?
  20821. FoxPro Reporting
  20822. <VFPData><reportdata name="" type="R" script="" execute="" execwhen="" class="" classlib="" declass="" declasslib=""/></VFPData>
  20823. |NAME|TYPE|SCRIPT|EXECUTE|EXECWHEN|CLASS|CLASSLIB|DECLASS|DECLASSLIB|
  20824.  ADD COLUMN 
  20825. alter table (m.tcMetaAlias) &cAddColumns
  20826. TCXML
  20827. TCMETAALIAS
  20828. CURSEL
  20829. LIROWS
  20830. CADDCOLUMNS
  20831. CSTANDARDSET
  20832. SCRIPT
  20833. EXECUTE
  20834. EXECWHEN
  20835. CLASS
  20836. CLASSLIB
  20837. DECLASS
  20838. DECLASSLIB
  20839. TMPALIAS
  20840. THIS    
  20841. QUIETMODE
  20842. MESSAGE
  20843. DELETEDv
  20844. lcXml
  20845. lcXml
  20846. TCMETAALIAS
  20847. LCXML
  20848. LIBYTES5
  20849. TVNEWVAL
  20850. THIS    
  20851. QUIETMODEi
  20852. DATASESSIONv
  20853. DATASESSIONv
  20854. memberdata
  20855. .FRXRecno
  20856. FRXRecno = CC
  20857.  AND 
  20858. Type = '
  20859. ' AND 
  20860. Name = '
  20861. Microsoft.VFP.Reporting.Builder.EvaluateContents
  20862. LOCATE FOR &lcConditions.
  20863. TEXTMERGE
  20864. TEXTMERGEv
  20865. TEXTMERGE
  20866. TEXTMERGE
  20867. LPARAMETERS m.toListener, m.tP1, m.tP2 
  20868.  * <<"generated user-dynamic code" >>
  20869.  * <<"for EvaluateContents method">>
  20870.  * FRXRECNO: <<RECNO("frx")>>, EXPR: <<FRX.Expr>>
  20871.  * <<"the following code translates from the standard">>
  20872.  * <<"fxMemberDataScript.ApplyFx parameters, which are used">>
  20873.  * <<"so you can cut and paste the CASEs below into">>
  20874.  * <<"Memberdata standard script later if you want to">>
  20875. LOCAL m.nFRXRecno, m.oProps 
  20876. m.nFRXRecno = m.tP1
  20877. m.oProps = m.tP2
  20878. m.oProps.Reload = .T.   
  20879.    SET DATASESSION TO (m.toListener.CurrentDataSession)
  20880.    * <<"Conditions are evaluated in the Current (Report) datasession.">>
  20881.    DO CASE
  20882. SCAN ALL FOR &lcConditions. 
  20883.    CASE <<IIF(EMPTY(ExecWhen), ".T.", ExecWhen)>> && <<"user condition: ">> <<Execute>>
  20884.       * <<"Expression required for this item. ">>
  20885.       * <<"Combinations of any 2 out of the 3 delimiter types (" +["]+ ",',[]) permitted within expressions.">>
  20886.       IF TYPE(<<m.lcDelim1>><<Script>><<m.lcDelim2>>) # "U"
  20887.          m.oProps.Text = TRANSFORM(<<Script>>)
  20888.       ELSE
  20889.          * <<"Expression evaluated first in Current (Report) datasession, then in FRX datasession.">>          
  20890.          SET DATASESSION TO (m.toListener.FRXDataSession)           
  20891.          IF TYPE(<<m.lcDelim1>><<Script>><<m.lcDelim2>>) # "U"
  20892.             m.oProps.Text = TRANSFORM(<<Script>>)
  20893.          ENDIF
  20894.          SET DATASESSION TO (m.toListener.CurrentDataSession)                     
  20895.       ENDIF
  20896.       * <<"Additional items use literal values.">>   
  20897.       m.oProps.PenRed = <<INT(MOD(m.liColor,256))>>
  20898.       m.oProps.PenGreen = <<MOD(INT(m.liColor/256),256)>>
  20899.       m.oProps.PenBlue = <<MOD(INT(m.liColor/(256*256)),256)>>
  20900.       m.oProps.FillRed = <<INT(MOD(m.liColor,256))>>
  20901.       m.oProps.FillGreen = <<MOD(INT(m.liColor/256),256)>>
  20902.       m.oProps.FillBlue = <<MOD(INT(m.liColor/(256*256)),256)>>
  20903.       m.oProps.PenAlpha = <<PenA>>
  20904.       m.oProps.FillAlpha = <<FillA>>
  20905.       m.oProps.FontName = "<<FName>>"
  20906.       m.oProps.FontStyle = <<ABS(INT(VAL(FStyle)))>>
  20907.       m.oProps.FontSize = <<ABS(INT(VAL(FSize)))>>
  20908.    OTHERWISE  && <<"default result from FRX definition">>
  20909.       m.oProps.Reload = .F.   
  20910.    ENDCASE
  20911. CATCH WHEN .T.
  20912.    m.oProps.Reload = .F.   
  20913. FINALLY
  20914.    SET DATASESSION TO (m.toListener.FRXDataSession)
  20915. ENDTRY
  20916. TCFRXALIAS
  20917. TCMEMBERDATAALIAS
  20918. TIDATASESSION
  20919. LIDATASESSION
  20920. LCRESULT
  20921. LISELECT
  20922. LCCONDITIONS
  20923. LICOLOR
  20924. LCTEXTMERGEDELIMS
  20925. LCTEXTMERGE
  20926. LLTEXTMERGE
  20927. LCTEXTMERGESHOW
  20928. LCEXPDELIM1
  20929. LCEXPDELIM2
  20930. SCRIPT
  20931. LCDELIM1
  20932. LCDELIM2
  20933. PENRGB
  20934. FILLRGB
  20935. FILLA
  20936. FNAME
  20937. FSTYLE
  20938. FSIZE
  20939. RESETTEXTMERGEr
  20940. DATASESSIONv
  20941. DATASESSIONv
  20942. memberdata
  20943. .FRXRecno
  20944. FRXRecno = CC
  20945.  AND 
  20946. Type = '
  20947. ' AND 
  20948. Name = '
  20949. Microsoft.VFP.Reporting.Builder.AdjustObjectSize
  20950. LOCATE FOR &lcConditions.
  20951. TEXTMERGE
  20952. TEXTMERGEv
  20953. TEXTMERGE
  20954. TEXTMERGE
  20955. LPARAMETERS m.toListener, m.tP1, m.tP2 
  20956.  * <<"generated user-dynamic code" >>
  20957.  * <<"for AdjustObjectSize method">>
  20958.  * FRXRECNO: <<RECNO("frx")>>, TYPE: <<FRX.ObjType>>
  20959.  * <<"the following code translates from the standard">>
  20960.  * <<"fxMemberDataScript.ApplyFx parameters, which are used">>
  20961.  * <<"so you can cut and paste the CASEs below into">>
  20962.  * <<"Memberdata standard script later if you want to">>
  20963. LOCAL m.nFRXRecno, m.oProps 
  20964. m.nFRXRecno = m.tP1
  20965. m.oProps = m.tP2
  20966. m.oProps.Reload = .T.   
  20967.    SET DATASESSION TO (m.toListener.CurrentDataSession)
  20968.    * <<"Conditions are evaluated in the Current (Report) datasession.">>
  20969.    LOCAL liTemp
  20970.    * <<"These items use literal values">>
  20971.    * <<"or expressions that evaluate to numeric values.">>
  20972.    * <<"Expressions are evaluated in the Current (Report) datasession.">>
  20973.    DO CASE
  20974. SCAN ALL FOR &lcConditions. 
  20975.    CASE <<IIF(EMPTY(ExecWhen), ".T.", ExecWhen)>> && <<"user condition: ">> <<Execute>>
  20976.       IF <<Width>> > -1 AND ;
  20977.          <<Width>> < 64000 
  20978.          m.oProps.Width = INT(<<Width>>)   
  20979.       ENDIF
  20980.       IF <<Height>> > -1 AND ;
  20981.          <<Height>> < 64000 AND ;
  20982.          ((INT(<<Height>>) < m.oProps.MaxHeightAvailable) ;
  20983.           OR (NOT m.oProps.Reattempt))
  20984.          m.oProps.Height = INT(<<Height>>)
  20985.       ENDIF
  20986.    OTHERWISE  && <<"default result from FRX definition">>
  20987.       m.oProps.Reload = .F.   
  20988.    ENDCASE
  20989. CATCH WHEN .T.
  20990.    m.oProps.Reload = .F.   
  20991. FINALLY
  20992.    SET DATASESSION TO (m.toListener.FRXDataSession)
  20993. ENDTRY
  20994. TCFRXALIAS
  20995. TCMEMBERDATAALIAS
  20996. TIDATASESSION
  20997. LIDATASESSION
  20998. LCRESULT
  20999. LISELECT
  21000. LCCONDITIONS
  21001. LCTEXTMERGEDELIMS
  21002. LCTEXTMERGE
  21003. LLTEXTMERGE
  21004. LCTEXTMERGESHOW
  21005. RESETTEXTMERGE7
  21006. TEXTMERGE
  21007. set textmerge on &tcTextMergeShow.
  21008. set textmerge to &tcTextMerge. additive 
  21009. TCDELIMITERS
  21010. TCTEXTMERGE
  21011. TLTEXTMERGE
  21012. TCTEXTMERGESHOW    
  21013. DELIMSIZE    
  21014. LEFTDELIM
  21015. RIGHTDELIM
  21016. LCTEXTMERGEDELIMS
  21017. GetDeviceCaps
  21018. WIN32API
  21019. GetDC
  21020. WIN32API
  21021. ReleaseDC
  21022. WIN32API
  21023. GETDEVICECAPS
  21024. WIN32API
  21025. GETDC    
  21026. RELEASEDC
  21027. SCREENDPI
  21028. THIS    
  21029. QUIETMODE    
  21030. STARTMODE
  21031. inttobinstring,
  21032. binstringtoint
  21033. hasprotectionflagn
  21034. frutopixels
  21035. pixelstofruL
  21036. getfrutextwidth
  21037. getfrutextheightV
  21038. gorec
  21039. getreportattributew
  21040. createbandcursor
  21041. hasband
  21042. hasdetailheaderf
  21043. createobjectcursork
  21044. createobjcursorrecord$
  21045. charsettolocale
  21046. getbandfor
  21047. synchobjectpositions
  21048. getobjectsinband
  21049. insertdataenvrecord
  21050. insertbando,
  21051. inserttitlebandW-
  21052. insertsummaryband
  21053. insertdetailband
  21054. insertdetailheaderfooter
  21055. setcolumncount
  21056. creategroupcursor
  21057. createvariablecursor
  21058. createcalcresetoncursor
  21059. createdefaultprintenvcursor
  21060. getselectedobjectcount
  21061. pushprintenvtocursoryE
  21062. popprintenv
  21063. getfrxtimestamp+F
  21064. gettimestampstring.H
  21065. inttobin
  21066. bintoint-K
  21067. gettargettypetext
  21068. getunitvaluefromfru!Q
  21069. stripquotes
  21070. getmetadatadomdoc
  21071. islayoutcontrol
  21072. unpackmemberdata
  21073. packupmemberdataCW
  21074. unpackfrxmemberdata
  21075. getfrxrecdisplaynamePd
  21076. xmlstrtocursor
  21077. cursortoxmlstr
  21078. quietmode_assign#o
  21079. generateevaluatecontentsscriptwo
  21080. generateadjustobjectsizescript
  21081. resettextmerge3
  21082. PROCEDURE loaddeviceinfo
  21083. lparameters lcDriver, lcDevice, lcDEVMODE
  21084. THIS.errorMessage = ""
  21085. local lRetVal
  21086. lRetVal = .T.
  21087. if empty( m.lcDevice )
  21088.     *---------------------------------------
  21089.     * Use default printer settings:
  21090.     *---------------------------------------
  21091.     lcDriver  = ""
  21092.     lcDevice  = set("PRINTER",3)
  21093.     lcDEVMODE = ""
  21094. endif
  21095.     local iHDC, vResult
  21096.     iHDC = CreateIC( m.lcDriver, m.lcDevice, chr(0), m.lcDEVMODE )
  21097.     if m.iHDC = 0
  21098.         error CREATE_IC_FAILURE_LOC
  21099.     else
  21100.         THIS.LoadFromHDC( m.iHDC )
  21101.         vResult = DeleteDC( m.iHDC )
  21102.     endif
  21103. catch to oErr
  21104.     THIS.errorMessage = oErr.message
  21105.     lRetVal = .F.
  21106. endtry
  21107. return m.lRetVal
  21108. ENDPROC
  21109. PROCEDURE loadfromfrx
  21110. lparameter lcFrxAlias
  21111. THIS.errorMessage = ""
  21112. local curSel, curRec, lRetVal
  21113. store .F. to lRetVal
  21114. if empty(m.lcFrxAlias)
  21115.     lcFrxAlias = "frx"
  21116. endif
  21117. if not used( m.lcFrxAlias )
  21118.     return m.lRetVal
  21119. endif
  21120. *--------------------------------
  21121. * Save current data/cursor state:
  21122. *--------------------------------
  21123. curSel = select(0)
  21124. select (m.lcFrxAlias)
  21125. curRec = recno()
  21126. locate for PLATFORM="WINDOWS" and OBJTYPE = 1 and OBJCODE = 53
  21127. if found()
  21128.     *---------------------------------------------------
  21129.     * Get the device info settings:
  21130.     *---------------------------------------------------
  21131.     lRetVal = THIS.LoadFromStrings( EXPR, TAG2 )
  21132. endif
  21133. *---------------------------------------------------
  21134. * Restore data/cursor state:
  21135. *---------------------------------------------------
  21136. if m.curRec <= reccount()
  21137.     go m.curRec
  21138. endif
  21139. select (m.curSel)
  21140. return m.lRetVal
  21141. ENDPROC
  21142. PROCEDURE loadfromstrings
  21143. lparameters tcEXPR, tcTAG2
  21144. local i, cLine, cDriver, lDriver, cDevice, lDevice
  21145. *---------------------------------------------------
  21146. * Read DRIVER and DEVICE values from EXPR    
  21147. *---------------------------------------------------
  21148. for m.i = 1 to memlines(m.tcEXPR)
  21149.     cLine = mline(m.tcEXPR,m.i)
  21150.     do case
  21151.     case m.cLine = "DRIVER=" and not m.lDriver
  21152.         cDriver = substr(m.cLine,8)
  21153.         lDriver = .T.
  21154.     case m.cLine = "DEVICE=" and not m.lDevice
  21155.         cDevice = substr(m.cLine,8)
  21156.         lDevice = .T.
  21157.     endcase        
  21158.     if m.lDevice and m.lDriver
  21159.         exit
  21160.     endif
  21161. endfor
  21162. *---------------------------------------------------
  21163. * Get the device info settings:
  21164. *---------------------------------------------------
  21165. return THIS.LoadDeviceInfo( m.cDriver, m.cDevice, m.tcTAG2 )
  21166. ENDPROC
  21167. PROCEDURE loadfromhdc
  21168. lparameters tiHDC
  21169. #define HORZSIZE          4  && Horizontal size in millimeters 
  21170. #define VERTSIZE          6  && Vertical size in millimeters 
  21171. #define HORZRES           8  && Printable page width  / Horizontal width in pixels 
  21172. #define VERTRES          10  && Printable page length / Vertical height in pixels 
  21173. #define LOGPIXELSX       88  && DPI / Logical pixels/inch in X dimension
  21174. #define LOGPIXELSY       90  && DPI / Logical pixels/inch in Y dimension
  21175. #define PHYSICALWIDTH   110  && Actual page width  / Physical Width in device units
  21176. #define PHYSICALHEIGHT  111  && Actual page length / Physical Height in device units
  21177. #define PHYSICALOFFSETX 112  && Printable page left margin / Physical Printable Area x margin 
  21178. #define PHYSICALOFFSETY 113  && Printable page top margin  / Physical Printable Area y margin
  21179. with THIS
  21180.     .dpiX        = GetDeviceCaps( m.tiHDC, LOGPIXELSX )
  21181.     .dpiY        = GetDeviceCaps( m.tiHDC, LOGPIXELSY )
  21182.     .OffsetX     = GetDeviceCaps( m.tiHDC, PHYSICALOFFSETX )
  21183.     .OffsetY     = GetDeviceCaps( m.tiHDC, PHYSICALOFFSETY )
  21184.     .PrintableX  = GetDeviceCaps( m.tiHDC, HORZRES )
  21185.     .PrintableY  = GetDeviceCaps( m.tiHDC, VERTRES )
  21186.     .mmX         = GetDeviceCaps( m.tiHDC, HORZSIZE )
  21187.     .mmY         = GetDeviceCaps( m.tiHDC, VERTSIZE )
  21188.     .ActualX     = GetDeviceCaps( m.tiHDC, PHYSICALWIDTH )
  21189.     .ActualY     = GetDeviceCaps( m.tiHDC, PHYSICALHEIGHT )
  21190. endwith
  21191. return
  21192. ENDPROC
  21193. PROCEDURE Init
  21194. declare integer GetLastError ;
  21195.     in win32api
  21196. declare integer SetLastError ;
  21197.     in win32api ;
  21198.     integer i
  21199. declare integer CreateIC ;
  21200.     in gdi32 ;
  21201.     string lpszDriver, ;
  21202.     string lpszDevice, ;
  21203.     string lpszOutput, ;
  21204.     string lpdvmInit
  21205. declare integer GetDeviceCaps ;
  21206.     in gdi32 ;
  21207.     integer hdc, ;
  21208.     integer nIndex     
  21209. declare integer DeleteDC ;
  21210.     in gdi32 ;
  21211.     integer hdc
  21212. return .T.
  21213. ENDPROC
  21214. W_PROCEDURE inttobinstring
  21215. *=======================================================
  21216. * InttoBinString( int )
  21217. * Returns a string of bytes, the binary version of a 
  21218. * given integer.
  21219. * BinChar & Integer conversion, based on code by RS
  21220. *=======================================================
  21221. lparameter i
  21222. local cBytes, b
  21223. cBytes = ""
  21224. do while m.i <> 0 
  21225.     b = m.i % 256
  21226.     i = floor( m.i/256 )
  21227.     cBytes = m.cBytes + chr(m.b)            
  21228. enddo    
  21229. return m.cBytes
  21230. ENDPROC
  21231. PROCEDURE binstringtoint
  21232. *=======================================================
  21233. * BinstringToInt( char )
  21234. * Returns a numeric equivalent of a binary data in string
  21235. * form.
  21236. * BinChar & Integer conversion, based on code by RS
  21237. *=======================================================
  21238. lparameter cByte
  21239. local iReturn, i, b
  21240. iReturn = 0
  21241. for m.i = len( m.cByte ) to 1 step -1
  21242.     b = asc( substr( m.cByte, m.i, 1 ))
  21243.     iReturn = (m.iReturn*256) + m.b
  21244. endfor
  21245. return m.iReturn
  21246. ENDPROC
  21247. PROCEDURE hasprotectionflag
  21248. *=======================================================
  21249. * HasProtectionFlag( cBytes, iBit )
  21250. * Returns .T. if the given binary data contains a specific 
  21251. * bit set to true.
  21252. * Uses: BinstringToInt()
  21253. *=======================================================
  21254. lparameters cBinstring, iFlagBit 
  21255. local iProtFlags
  21256. iProtFlags = THIS.BinstringToInt( m.cBinstring )
  21257. return bittest( m.iProtFlags, m.iFlagBit )
  21258. ENDPROC
  21259. PROCEDURE frutopixels
  21260. *=======================================================
  21261. * FruToPixels( num )
  21262. * returns the value in pixels of a given FRU measurement.
  21263. *=======================================================
  21264. lparameter nFRU
  21265. local iPixels
  21266. *------------------------------------
  21267. * Fixed for SP1: 
  21268. * use the .screenDPI property instead of 
  21269. * the hard-coded 96 dpi value. The ReportBuilder
  21270. * client will reset .screenDPI to 96 so that it
  21271. * is correct for design-time report designer use.
  21272. *------------------------------------
  21273. *iPixels = round((m.nFRU * 96)/10000,3)
  21274. iPixels = round((m.nFRU * this.screenDPI)/10000,3)
  21275. return int( m.iPixels )
  21276. ENDPROC
  21277. PROCEDURE pixelstofru
  21278. *=======================================================
  21279. * PixelsToFru( int )
  21280. * return a value in FRUs of a given pixel dimension
  21281. *=======================================================
  21282. lparameter nPix 
  21283. *------------------------------------
  21284. * Fixed for SP1: 
  21285. * use the .screenDPI property instead of 
  21286. * the hard-coded 96 dpi value. The ReportBuilder
  21287. * client will reset .screenDPI to 96 so that it
  21288. * is correct for design-time report designer use.
  21289. *------------------------------------
  21290. *return round(( nPix * 10000 )/96 , 3 )
  21291. return round(( nPix * 10000 )/this.screenDPI , 3 )
  21292. ENDPROC
  21293. PROCEDURE getfrutextwidth
  21294. *=======================================================
  21295. * GetFruTextWidth( cText, cTypeface, iSize [, cStyle ] )
  21296. * Returns the width of a given string in FRUs
  21297. *=======================================================
  21298. lparameters cText, cTypeFace, iSize, cStyle
  21299. if parameters() < 4
  21300.     cStyle = "N"
  21301. endif
  21302. *-------------------------------------------------------
  21303. * obtain text width in pixels. Remember that txtwidth() returns
  21304. * number of equivalent average characters, so must multiply by
  21305. * the overall average character width:
  21306. *-------------------------------------------------------
  21307. local iWidth
  21308. iWidth = txtwidth( cText,  cTypeFace, iSize, cStyle ) 
  21309. iWidth = m.iWidth * fontmetric(6, cTypeFace, iSize, cStyle ) 
  21310. *-------------------------------------------------------
  21311. * convert pixels to FRU using screen dpi:
  21312. *-------------------------------------------------------
  21313. *------------------------------------
  21314. * Fixed for SP1: 
  21315. * use the .screenDPI property instead of 
  21316. * the hard-coded 96 dpi value. The ReportBuilder
  21317. * client will reset .screenDPI to 96 so that it
  21318. * is correct for design-time report designer use.
  21319. *------------------------------------
  21320. return this.pixelsToFru( m.iWidth )    
  21321. ENDPROC
  21322. PROCEDURE getfrutextheight
  21323. *=======================================================
  21324. * GetFruTextHeight( cText, cTypeface, iSize [, cStyle ] )
  21325. * Returns the height of a given string in FRUs
  21326. *=======================================================
  21327. lparameters cText, cTypeFace, iSize, cStyle
  21328. if parameters() < 4
  21329.     cStyle = "N"
  21330. endif
  21331. *-------------------------------------------------------
  21332. * obtain text height in pixels:
  21333. *-------------------------------------------------------
  21334. local iHeight
  21335. iHeight = fontmetric(1, cTypeFace, iSize, cStyle )
  21336. *-------------------------------------------------------
  21337. * convert pixels to FRU:
  21338. *-------------------------------------------------------
  21339. *------------------------------------
  21340. * Fixed for SP1: 
  21341. * use the .screenDPI property instead of 
  21342. * the hard-coded 96 dpi value. The ReportBuilder
  21343. * client will reset .screenDPI to 96 so that it
  21344. * is correct for design-time report designer use.
  21345. *------------------------------------
  21346. return this.pixelsToFru( m.iHeight )    
  21347. ENDPROC
  21348. PROCEDURE gorec
  21349. *=======================================================
  21350. * GoRec( i, cAlias )
  21351. * restores record pointer with bounds checking
  21352. *=======================================================
  21353. lparameter iRec, cAlias
  21354. if parameters() < 2
  21355.     cAlias = alias()
  21356. endif
  21357. if between( iRec, 1, reccount(m.cAlias) )
  21358.     go m.iRec in (m.cAlias)
  21359. endif
  21360. return
  21361. ENDPROC
  21362. PROCEDURE getreportattribute
  21363. *=======================================================
  21364. * GetReportAttribute( cToken [, iAlt] )
  21365. * Returns the value of a given report (or header) attribute.
  21366. * The FRX cursor must be open.
  21367. *=======================================================
  21368. lparameters cKey, iAlt 
  21369. if parameters()<2
  21370.     iAlt = 0
  21371. endif
  21372. if not used('frx')
  21373.     return .F.
  21374. endif
  21375. local curSel, curRec, vRetVal
  21376. curSel = select(0)
  21377. select frx
  21378. curRec = recno()
  21379. locate for    OBJTYPE = FRX_OBJTYP_REPORTHEADER and ;
  21380.             PLATFORM = FRX_PLATFORM_WINDOWS
  21381. do case
  21382. case upper(m.cKey) = "UNITS"
  21383.     if m.iAlt = 0
  21384.         vRetVal = RULER
  21385.     else
  21386.         do case
  21387.         case RULER = FRX_RULER_FRUS
  21388.             vRetVal = UNITS_FRU_LOC
  21389.         case RULER = FRX_RULER_INCHES
  21390.             vRetVal = UNITS_INCHES_LOC
  21391.         case RULER = FRX_RULER_METRIC
  21392.             vRetVal = UNITS_METRIC_LOC
  21393.         case RULER = FRX_RULER_PIXELS
  21394.             vRetVal = UNITS_PIXELS_LOC
  21395.         case RULER = FRX_RULER_CHARACTERS
  21396.             vRetVal = UNITS_CHARACTERS_LOC
  21397.         otherwise
  21398.             vRetVal = "?"
  21399.         endcase
  21400.     endif
  21401. case upper(m.cKey) = "MULTICOLUMN"
  21402.     *-------------------------------------------------------
  21403.     * If a report has multiple columns,
  21404.     * then the column width is not the default:
  21405.     *-------------------------------------------------------
  21406.     *vRetVal = (WIDTH <> -1)                        
  21407.     *-------------------------------------------------------
  21408.     * could also check for existence of ColumnHeader:
  21409.     *-------------------------------------------------------
  21410.     *vRetVal = THIS.hasBand(OBJCODE_COLHEADER)
  21411.     *-------------------------------------------------------
  21412.     * or just how many columns?
  21413.     *-------------------------------------------------------
  21414.     vRetVal = (VPOS > 1)
  21415. case upper(m.cKey) = "COLUMNCOUNT"
  21416.     vRetVal = VPOS
  21417. case upper(m.cKey) = "PROTECTION"
  21418.     vRetVal = ORDER
  21419. case upper(m.cKey) = "SNAKED_COLUMNS"
  21420.     vRetVal = BOTTOM
  21421. *case upper(m.cKey) = "DEFAULT FONT"
  21422. endcase
  21423. THIS.goRec( m.curRec, 'frx')
  21424. select (m.curSel)
  21425. return m.vRetVal
  21426. ENDPROC
  21427. PROCEDURE createbandcursor
  21428. *=======================================================
  21429. * CreateBandCursor()
  21430. * Creats a cursor with the alias "bands" containing records
  21431. * of information for each band in the report.
  21432. * Returns .T. if successfully created.
  21433. *=======================================================
  21434. lparameter tcFrxAlias, tiSession
  21435. local curSel, curRec, curSession
  21436. if empty(m.tiSession) or (m.tiSession < 1)
  21437.    m.tiSession = set("datasession")
  21438. endif
  21439. m.curSession = set("datasession")
  21440. set datasession to (m.tiSession)   
  21441. if empty( m.tcFrxAlias )
  21442.     tcFrxAlias = 'frx'
  21443. endif
  21444. if not used(m.tcFrxAlias)
  21445.     set datasession to (m.curSession)
  21446.     return .F.
  21447. endif
  21448. curSel = select(0)
  21449. curRec = recno(m.tcFrxAlias)
  21450. *-------------------------------------------------------
  21451. * create the bands cursor:
  21452. *-------------------------------------------------------
  21453. if used("bands")
  21454.     use in bands
  21455. endif
  21456. select 0
  21457. create cursor bands ( ;
  21458.     UNIQUEID c(10), ;
  21459.     OBJTYPE N(2,0), ;
  21460.     OBJCODE n(3,0), ;
  21461.     EXPR M, ;
  21462.     BANDLABEL c(35), ;
  21463.     START n(9,3), ;
  21464.     STOP n(9,3), ;
  21465.     HEIGHT n(9,3), ;
  21466.     P_START i, ;
  21467.     P_STOP i, ;
  21468.     P_HEIGHT i, ;
  21469.     R_START i, ;
  21470.     R_STOP i, ;
  21471.     RESETTOTAL i, ;
  21472.     BAND_SEQ i, ;
  21473.     REL_BAND_ID c(10), ;
  21474.     REC_NO i )
  21475. *-------------------------------------------------------
  21476. * Initialise stuff:
  21477. *-------------------------------------------------------
  21478. local nStart, iStart, iDetailCount
  21479. local cSuffix, iBandCount, oRec
  21480. local oGroup, oHeader
  21481. local lcTitleId, lcSummaryId
  21482. nStart  = 0.000 
  21483. iStart  = 0
  21484. oGroup  = newobject("Collection")
  21485. oHeader = newobject("Collection")
  21486. iBandCount   = 0
  21487. iDetailCount = 0
  21488. store "" to lcTitleId, lcSummaryId
  21489. *-------------------------------------------------------
  21490. * Scan through the band records, building up the information
  21491. * and then insert a new record into the bands cursor:
  21492. *-------------------------------------------------------
  21493. select (m.tcFrxAlias)
  21494. scan for    OBJTYPE = FRX_OBJTYP_BAND ;
  21495.             and not deleted()  and ;
  21496.             PLATFORM = FRX_PLATFORM_WINDOWS
  21497.     *----------------------------------------------
  21498.     * Initialise the record buffer
  21499.     *----------------------------------------------
  21500.     select bands
  21501.     scatter memo blank name oRec
  21502.     select (m.tcFrxAlias)
  21503.     iBandCount     = m.iBandCount + 1
  21504.     oRec.BAND_SEQ  = m.iBandCount
  21505.     *----------------------------------------------
  21506.     * Transfer over some field values:
  21507.     *----------------------------------------------
  21508.     oRec.UNIQUEID   = UNIQUEID
  21509.     oRec.REC_NO     = recno()
  21510.     oRec.OBJTYPE    = OBJTYPE
  21511.     oRec.OBJCODE    = OBJCODE
  21512.     oRec.EXPR       = EXPR
  21513.     oRec.BANDLABEL  = THIS.getTargetTypeText( OBJTYPE, OBJCODE )
  21514.     *----------------------------------------------
  21515.     * Save for later:
  21516.     *----------------------------------------------
  21517.     if OBJCODE = FRX_OBJCOD_TITLE
  21518.         lcTitleID = UNIQUEID
  21519.     endif
  21520.     if OBJCODE = FRX_OBJCOD_SUMMARY
  21521.         lcSummaryID = UNIQUEID
  21522.     endif
  21523.     *----------------------------------------------
  21524.     * Determine related header/footer IDs:
  21525.     *----------------------------------------------
  21526.     do case
  21527.     case inlist( OBJCODE, FRX_OBJCOD_PAGEHEADER, FRX_OBJCOD_COLHEADER, FRX_OBJCOD_GROUPHEADER, FRX_OBJCOD_DETAILHEADER )
  21528.         *-------------------------------------
  21529.         * Push the header ID on the stack:
  21530.         *-------------------------------------
  21531.         oHeader.Add( UNIQUEID )        
  21532.     case inlist( OBJCODE, FRX_OBJCOD_PAGEFOOTER, FRX_OBJCOD_COLFOOTER, FRX_OBJCOD_GROUPFOOTER, FRX_OBJCOD_DETAILFOOTER )    
  21533.         *-------------------------------------
  21534.         * Pop the related header ID off the stack and 
  21535.         * store it:
  21536.         *-------------------------------------
  21537.         oRec.REL_BAND_ID = oHeader.Item( oHeader.Count )
  21538.         oHeader.Remove( oHeader.Count )
  21539.     endcase
  21540.     *----------------------------------------------
  21541.     * Some bands need extra info in their labels:
  21542.     *----------------------------------------------
  21543.     do case 
  21544.     case OBJCODE = FRX_OBJCOD_GROUPHEADER
  21545.         cSuffix = ":" + trim(EXPR)         
  21546.         oGroup.Add( m.cSuffix )
  21547.         oRec.RESETTOTAL = FRX_RESETTOTAL_GROUP_OFFSET + oGroup.Count
  21548.     case OBJCODE = FRX_OBJCOD_DETAIL
  21549.         iDetailCount = m.iDetailCount + 1
  21550.         oRec.RESETTOTAL = FRX_RESETTOTAL_DETAIL_OFFSET + m.iDetailCount
  21551.         cSuffix = " " + transform( m.iDetailCount ) ;
  21552.                 + iif(not empty( trim(EXPR)), ":" + trim(EXPR), "")
  21553.     case OBJCODE = FRX_OBJCOD_GROUPFOOTER
  21554.         cSuffix = oGroup.Item( oGroup.Count )
  21555.         oGroup.Remove( oGroup.Count )
  21556.     otherwise
  21557.         cSuffix = ""
  21558.     endcase
  21559.     oRec.BANDLABEL = oRec.BANDLABEL + m.cSuffix
  21560.     *----------------------------------------------
  21561.     * Band dimensions:
  21562.     *----------------------------------------------
  21563.     oRec.HEIGHT    = HEIGHT
  21564.     oRec.P_HEIGHT  = THIS.FruToPixels( HEIGHT )
  21565.     oRec.START       = m.nStart    
  21566.     oRec.STOP       = m.nStart + oRec.HEIGHT   + BAND_SEPARATOR_HEIGHT_FRUS
  21567.     nStart         = oRec.STOP
  21568.     oRec.P_START   = m.iStart
  21569.     oRec.P_STOP    = m.iStart + oRec.P_HEIGHT + BAND_SEPARATOR_HEIGHT_PIXELS - 1
  21570.     iStart         = oRec.P_STOP + 1
  21571.     *----------------------------------------------
  21572.     * Run-time Band dimensions:
  21573.     *----------------------------------------------
  21574.     oRec.R_START   = oRec.P_START - 18
  21575.     oRec.R_STOP    = oRec.P_STOP - 2  && per RICHSTA
  21576. *    oRec.R_STOP    = oRec.P_STOP - 3  && empirically
  21577.     *----------------------------------------------
  21578.     * Add the record to the cursor:
  21579.     *----------------------------------------------
  21580.     insert into bands from name oRec
  21581. endscan
  21582. *----------------------------------------------
  21583. * Retro-fit the Headers' relative Footer band id:
  21584. *----------------------------------------------
  21585. select bands
  21586. local iRec, cFooterId, cBandId 
  21587.     if not empty( REL_BAND_ID )
  21588.         iRec = recno()
  21589.         m.cFooterId = UNIQUEID
  21590.         m.cHeaderId = REL_BAND_ID
  21591.         locate for UNIQUEID = m.cHeaderId
  21592.         if found()
  21593.             replace REL_BAND_ID with m.cFooterId
  21594.         endif
  21595.         go m.iRec
  21596.     endif
  21597. endscan
  21598. if not empty( m.lcTitleId ) and not empty( m.lcSummaryId )
  21599.     *----------------------------------------------
  21600.     * Match up relative band ids:
  21601.     *----------------------------------------------
  21602.     locate for UNIQUEID = m.lcTitleID
  21603.     replace REL_BAND_ID with m.lcSummaryId
  21604.     locate for UNIQUEID = m.lcSummaryID
  21605.     replace REL_BAND_ID with m.lcTitleId
  21606. endif
  21607. go top in bands
  21608. release oGroup, oHeader
  21609. THIS.goRec(m.curRec, m.tcFrxAlias)
  21610. select (m.curSel)        
  21611. set datasession to (m.curSession)
  21612. return .T.
  21613. ENDPROC
  21614. PROCEDURE hasband
  21615. *=======================================================
  21616. * HasBand( objCode )
  21617. * Returns .T. if the report has the specified type of 
  21618. * band record.
  21619. * Calls .createBandCursor() if necessary.
  21620. *=======================================================
  21621. lparameter iObjCode 
  21622. if not used('bands')
  21623.     THIS.createBandCursor()
  21624. endif
  21625. local curSel, lRetVal
  21626. curSel = select(0)
  21627. lRetVal = .F.
  21628. select bands
  21629. locate for OBJCODE = m.iObjCode
  21630. if found()
  21631.     lRetVal = .T.
  21632. endif
  21633. select (m.curSel)
  21634. return m.lRetVal    
  21635. ENDPROC
  21636. PROCEDURE hasdetailheader
  21637. *=======================================================
  21638. * HasDetailHeader( UNIQUED )
  21639. * Returns .T. if the specifed Detail band has an associated 
  21640. * "detail header" band.
  21641. * Calls .createBandCursor() if necessary.
  21642. *=======================================================
  21643. lparameter cUniqueId 
  21644. if not used('bands')
  21645.     THIS.createBandCursor()
  21646. endif
  21647. local curSel, lRetval
  21648. curSel = select(0)
  21649. lRetVal = .F.
  21650. select bands
  21651. locate for UNIQUEID = m.cUniqueId
  21652. skip -1
  21653. lRetVal = (OBJTYPE = FRX_OBJTYP_BAND and OBJCODE = FRX_OBJCOD_DETAILHEADER)
  21654. select (m.curSel)
  21655. return m.lRetVal
  21656. ENDPROC
  21657. PROCEDURE createobjectcursor
  21658. *=======================================================
  21659. * CreateObjectCursor()
  21660. * Creates a cursor (alias: objects) of records for each 
  21661. * object in the report.
  21662. * Returns .T. if successful.
  21663. * Calls .createBandCursor() if necessary.
  21664. *=======================================================
  21665. lparameter tcFrxAlias, tcDestAlias, tiFilter, tlRuntimeMode, tiSession
  21666. *-------------------------------------------------------
  21667. * Ensure parameters are initialised appropriately:
  21668. *-------------------------------------------------------
  21669. if vartype( m.tiFilter ) = "L"
  21670.     tiFilter = OBJCSR_ALL_OBJECTS_IGNORE_GROUPS
  21671. endif    
  21672. if empty( m.tcDestAlias )
  21673.     tcDestAlias = 'objects'
  21674. endif
  21675. if empty( m.tcFrxAlias )
  21676.     tcFrxAlias = 'frx'
  21677. endif
  21678. local curSel, curRec, curSession
  21679. if empty(m.tiSession) or (m.tiSession < 1)
  21680.    m.tiSession = set("datasession")
  21681. endif 
  21682. m.curSession = set("datasession")
  21683. set datasession to (m.tiSession)
  21684. m.curSel = select(0)
  21685. if not used(m.tcFrxAlias)
  21686.     set datasession to (m.curSession)
  21687.     return .F.
  21688.     curRec = recno(m.tcFrxAlias)
  21689. endif
  21690. if not used('bands')
  21691.     if not THIS.createBandCursor(m.tcFrxAlias)
  21692.         select (m.curSel)
  21693.         set datasession to (m.curSession)        
  21694.         return .F.
  21695.     endif
  21696. endif
  21697. *-------------------------------------------------------
  21698. * create the objects cursor:
  21699. *-------------------------------------------------------
  21700. if used( m.tcDestAlias )
  21701.     use in (m.tcDestAlias)
  21702. endif
  21703. select 0
  21704. create cursor &tcDestAlias ( ;
  21705.     UNIQUEID c(10), ;
  21706.     OBJTYPE N(2,0), ;
  21707.     OBJCODE n(3,0), ;
  21708.     EXPR M, ;
  21709.     VPOS n(9,3), ;
  21710.     HPOS n(9,3), ;
  21711.     HEIGHT n(9,3),;
  21712.     WIDTH n(9,3),;
  21713.     OBJNAME c(50),;
  21714.     LOCALE_ID i, ;
  21715.     P_START i, ;
  21716.     P_STOP i, ;
  21717.     P_HEIGHT i, ;    
  21718.     BAND_OFFSET i, ;
  21719.     START_BAND_ID c(10),;
  21720.     END_BAND_ID c(10), ;
  21721.     BANDLABEL c(75), ;
  21722.     SELECTED l, ;
  21723.     OBJ_PICT c(12), ;
  21724.     BAND_SEQ i, ;
  21725.     REC_NO i, ;
  21726.     TYPE_SEQ i, ;
  21727.     CTYPE c(10) )
  21728. *-------------------------------------------------------
  21729. * Select object records from the FRX:
  21730. *-------------------------------------------------------
  21731. do case
  21732. case m.tiFilter = OBJCSR_ALL_OBJECTS_IGNORE_GROUPS
  21733.     *-------------------------------------------------
  21734.     * all object records (ignoring grouped items):
  21735.     *-------------------------------------------------
  21736.     select (m.tcFrxAlias)
  21737.     scan for     inlist( OBJTYPE, FRX_OBJTYP_LABEL, FRX_OBJTYP_FIELD, ;
  21738.                     FRX_OBJTYP_LINE, FRX_OBJTYP_RECTANGLE, FRX_OBJTYP_PICTURE ) and ;
  21739.                   not deleted()  and ;
  21740.                 PLATFORM = FRX_PLATFORM_WINDOWS
  21741.         THIS.createObjCursorRecord( tcDestAlias, m.tlRuntimeMode )
  21742.     endscan
  21743. case m.tiFilter = OBJCSR_SHOW_ALL_OBJECTS
  21744.     *-------------------------------------------------
  21745.     * All objects+grouped objects in report:
  21746.     * Show groups as separate objects
  21747.     * do not expand grouped objects
  21748.     *-------------------------------------------------
  21749.     select (m.tcFrxAlias)
  21750.     scan for    inlist( OBJTYPE, FRX_OBJTYP_LABEL, FRX_OBJTYP_FIELD, ;
  21751.                         FRX_OBJTYP_LINE, FRX_OBJTYP_RECTANGLE, FRX_OBJTYP_PICTURE ) and ;
  21752.                 not deleted()  and ;
  21753.                 PLATFORM = FRX_PLATFORM_WINDOWS
  21754.         THIS.createObjCursorRecord( tcDestAlias, m.tlRuntimeMode )
  21755.     endscan
  21756.     *-------------------------------------------------
  21757.     * Now remove the grouped ones 
  21758.     *-------------------------------------------------
  21759.     local iGrpStart, iGrpCount
  21760.     scan for OBJTYPE = FRX_OBJTYP_GROUP
  21761.         iGrpStart = VPOS
  21762.         iGrpCount = HPOS
  21763.         select (m.tcDestAlias)
  21764.         go m.iGrpStart
  21765.         delete next m.iGrpCount        
  21766.         select (m.tcFrxAlias)        
  21767.     endscan    
  21768.     *-------------------------------------------------
  21769.     * Now add the groups themselves
  21770.     *-------------------------------------------------
  21771.     scan for OBJTYPE = FRX_OBJTYP_GROUP
  21772.         THIS.createObjCursorRecord( tcDestAlias, m.tlRuntimeMode )
  21773.     endscan    
  21774. case m.tiFilter = OBJCSR_FILTER_ON_SELECTED
  21775.     *-------------------------------------------------
  21776.     * All currently selected object records:
  21777.     * do not show grouped objects
  21778.     * Show groups as separate objects
  21779.     *-------------------------------------------------
  21780.     select (m.tcFrxAlias)
  21781.     scan for    inlist( OBJTYPE, FRX_OBJTYP_LABEL, FRX_OBJTYP_FIELD, ;
  21782.                     FRX_OBJTYP_LINE, FRX_OBJTYP_RECTANGLE, FRX_OBJTYP_PICTURE ) and ;
  21783.                 not deleted() and ;
  21784.                 CURPOS  and ;
  21785.                 PLATFORM = FRX_PLATFORM_WINDOWS                
  21786.         THIS.createObjCursorRecord( tcDestAlias, m.tlRuntimeMode )
  21787.     endscan
  21788.     *-------------------------------------------------
  21789.     * Now add any selected grouped items themselves:
  21790.     *-------------------------------------------------
  21791.     scan for     OBJTYPE = FRX_OBJTYP_GROUP and ;
  21792.                 CURPOS and ;
  21793.                 PLATFORM = FRX_PLATFORM_WINDOWS
  21794.         THIS.createObjCursorRecord( tcDestAlias, m.tlRuntimeMode )
  21795.     endscan    
  21796. endcase
  21797. go top in (m.tcDestAlias)
  21798. THIS.goRec(m.curRec, m.tcFrxAlias)
  21799. select (m.curSel)
  21800. set datasession to (m.curSession)
  21801. return .T.
  21802. ENDPROC
  21803. PROCEDURE createobjcursorrecord
  21804. *=======================================================
  21805. * createObjCursorRecord()
  21806. * Assumes: current alias is the source
  21807. *=======================================================
  21808. lparameters tcDestAlias, tlRuntimeMode
  21809. local srcAlias, lIsGroup, oRec
  21810. srcAlias = alias()
  21811. lIsGroup = .F.
  21812. select (m.tcDestAlias)
  21813. scatter memo blank name oRec
  21814. select (m.srcAlias)
  21815. oRec.REC_NO  = recno()
  21816. oRec.OBJNAME = THIS.GetFrxRecDisplayName()
  21817. do case 
  21818. case OBJTYPE = FRX_OBJTYP_LABEL
  21819.     oRec.CTYPE     = TARGET_TEXT_LABEL_LOC
  21820.     oRec.OBJ_PICT  = "pslabel.bmp"
  21821.     oRec.LOCALE_ID = THIS.CharsetToLocale( RESOID )    
  21822.     oRec.TYPE_SEQ  = 1
  21823. case OBJTYPE = FRX_OBJTYP_FIELD
  21824.     oRec.CTYPE     = TARGET_FIELD_LOC
  21825.     oRec.OBJ_PICT  = "pseditbx.bmp"
  21826.     oRec.LOCALE_ID = THIS.CharsetToLocale( RESOID )    
  21827.     oRec.TYPE_SEQ  = 2
  21828. case OBJTYPE = FRX_OBJTYP_LINE
  21829.     oRec.CTYPE     = TARGET_LINE_LOC
  21830.     oRec.OBJ_PICT  = "psline.bmp"
  21831.     oRec.TYPE_SEQ  = 3
  21832. case OBJTYPE = FRX_OBJTYP_RECTANGLE
  21833.     oRec.CTYPE    = TARGET_BOX_LOC
  21834.     oRec.OBJ_PICT = "pshape.bmp"
  21835.     oRec.TYPE_SEQ  = 4
  21836. case OBJTYPE = FRX_OBJTYP_PICTURE
  21837.     oRec.CTYPE    = TARGET_PICTURE_LOC
  21838.     oRec.OBJ_PICT = "psolebnd.bmp"
  21839.     oRec.TYPE_SEQ  = 5
  21840. case OBJTYPE = FRX_OBJTYP_GROUP
  21841.     oRec.CTYPE    = TARGET_GROUPED_LOC
  21842.     oRec.OBJ_PICT = "group2.bmp"
  21843.     lIsGroup = .T.
  21844.     oRec.TYPE_SEQ  = 6
  21845. endcase
  21846. oRec.UNIQUEID = UNIQUEID
  21847. oRec.OBJTYPE  = OBJTYPE
  21848. oRec.OBJCODE  = OBJCODE
  21849. oRec.EXPR     = EXPR
  21850. oRec.VPOS     = VPOS
  21851. oRec.HPOS     = HPOS
  21852. oRec.HEIGHT   = HEIGHT
  21853. oRec.P_START  = THIS.FruToPixels( VPOS )
  21854. oRec.P_HEIGHT = THIS.FruToPixels( HEIGHT )
  21855. oRec.P_STOP   = (oRec.P_START + oRec.P_HEIGHT - 1)
  21856. oRec.WIDTH    = WIDTH
  21857. oRec.SELECTED = CURPOS
  21858. if not m.lIsGroup
  21859.     if m.tlRuntimeMode
  21860.         *--------------------------------------------------------
  21861.         * Determine the object's location, start and end bands,
  21862.         * as determined by the report run-time engine, using the 
  21863.         * two adjusted lookup cursors we created earlier:
  21864.         *--------------------------------------------------------
  21865.         *-------------------------------------------
  21866.         * Scan bottom up for start points: 
  21867.         *-------------------------------------------
  21868.         select bands
  21869.         go bottom
  21870.         do while .T.
  21871.             if R_START <= oRec.P_START
  21872.                 oRec.START_BAND_ID = UNIQUEID
  21873.                 oRec.BANDLABEL     = trim(BANDLABEL)
  21874.                 oRec.BAND_OFFSET   = oRec.P_START - P_START
  21875.                 oRec.BAND_SEQ      = BAND_SEQ
  21876.                 exit
  21877.             endif            
  21878.             if recno()=1
  21879.                 exit
  21880.             endif
  21881.             skip -1 in bands
  21882.         enddo
  21883.         *-------------------------------------------
  21884.         * scan top down for end points: 
  21885.         *-------------------------------------------
  21886.         select bands
  21887.         go top
  21888.         *-------------------------------------------
  21889.         * This difference between object types 
  21890.         * was determined through empirical testing.
  21891.         * It may have some flaws.
  21892.         *-------------------------------------------
  21893.         do case
  21894.         case inlist(oRec.OBJTYPE, FRX_OBJTYP_LABEL ) 
  21895.             locate for R_STOP > oRec.P_STOP
  21896.         otherwise
  21897.             locate for R_STOP >= oRec.P_STOP
  21898.         endcase
  21899.         if found()
  21900.             *-------------------------------------------
  21901.             * an object cannot end in a band above 
  21902.             * that in which it starts:
  21903.             *-------------------------------------------
  21904.             if BAND_SEQ >= oRec.BAND_SEQ
  21905.                 oRec.END_BAND_ID   = UNIQUEID
  21906.             else
  21907.                 oRec.END_BAND_ID   = oRec.START_BAND_ID
  21908.             endif
  21909.         else
  21910.             *---------------------------------------------------
  21911.             * The object runs off the bottom of the band array.
  21912.             * Force the object to end in the Page Footer:
  21913.             *---------------------------------------------------
  21914.             locate for OBJCODE = FRX_OBJCOD_PAGEFOOTER
  21915.             if found()
  21916.                 oRec.END_BAND_ID   = UNIQUEID
  21917.             endif
  21918.         endif
  21919.         *---------------------------------------------------
  21920.         * Show both start and end bands against the object:
  21921.         *---------------------------------------------------
  21922.         if oRec.END_BAND_ID <> oRec.START_BAND_ID
  21923.             oRec.BANDLABEL = oRec.BANDLABEL + "..." + trim(BANDLABEL)
  21924.         endif
  21925.         *---------------------------------------------------
  21926.         * If an object starts and ends in two different bands...
  21927.         *---------------------------------------------------
  21928.         if oRec.START_BAND_ID <> oRec.END_BAND_ID
  21929.             select bands
  21930.             locate for UNIQUEID = oRec.START_BAND_ID
  21931.             if empty( REL_BAND_ID ) or REL_BAND_ID # oRec.END_BAND_ID
  21932.                 *---------------------------------------------------
  21933.                 * ...that are not a matched Header-Footer pair,
  21934.                 * then the object is forced into the PageHeader band.
  21935.                 *---------------------------------------------------
  21936.                 locate for OBJTYPE = FRX_OBJTYP_BAND ;
  21937.                        and OBJCODE = FRX_OBJCOD_PAGEHEADER
  21938.                 oRec.START_BAND_ID = UNIQUEID
  21939.                 do case
  21940.                 case inlist(oRec.OBJTYPE, FRX_OBJTYP_RECTANGLE )
  21941.                     oRec.BANDLABEL     = TARGET_UNPREDICTABLE_LOC + " (" + trim(oRec.BANDLABEL) + ")"
  21942.                 otherwise
  21943.                     oRec.BANDLABEL     = TARGET_FORCED_PAGEHEADER_LOC + " (" + trim(oRec.BANDLABEL) + ")"
  21944.                 endcase
  21945.                 oRec.BAND_SEQ      = 99
  21946.                 oRec.END_BAND_ID   = ""
  21947.                 oRec.BAND_OFFSET   = oRec.P_START - P_START && real start, not the run-time one
  21948.             endif
  21949.         endif        
  21950.     else
  21951.         *--------------------------------------------------------
  21952.         * Determine the object's location, start and end bands,
  21953.         * as determined by the Report Designer:
  21954.         *--------------------------------------------------------
  21955.         select bands
  21956.         locate for P_START <= oRec.P_START ;
  21957.                and P_STOP  >= oRec.P_START
  21958.         if found()
  21959.             oRec.START_BAND_ID = UNIQUEID
  21960.             oRec.BAND_OFFSET   = oRec.P_START - P_START
  21961.             oRec.BANDLABEL     = trim(BANDLABEL)
  21962.             oRec.BAND_SEQ      = BAND_SEQ
  21963.         endif    
  21964.         select bands
  21965.         locate for P_START <= oRec.P_STOP ;
  21966.                and P_STOP  >= oRec.P_STOP
  21967.         if found()
  21968.             oRec.END_BAND_ID = UNIQUEID
  21969.             if oRec.END_BAND_ID <> oRec.START_BAND_ID
  21970.                 oRec.BANDLABEL = oRec.BANDLABEL + " - " + trim(BANDLABEL)
  21971.             endif
  21972.         endif    
  21973.     endif
  21974. endif
  21975. insert into (m.tcDestAlias) from name oRec
  21976. select (m.srcAlias)
  21977. return
  21978. ENDPROC
  21979. PROCEDURE charsettolocale
  21980. *=======================================================
  21981. * CharsetToLocale( nCharset )
  21982. * We need to map a given Font Charset to a candidate locale
  21983. * for use with the STRCONV() function.
  21984. *----------------------------------------------------------
  21985. * References: Q224804, Q232625
  21986. * also http://www.science.co.il/Language-Locale-Codes.asp
  21987. * Charset------------------- CodePage---- Locale (hex / dec)
  21988. *   0   Western              1252                   1033
  21989. * 178   Arabic               1256, 864     0x0401 / 1025 (saudi)
  21990. * 186   Baltic               1257,         0x0425 / 1061
  21991. * 134   Chinese Simplified    936          0x0804 / 2052
  21992. * 136   Chinese Traditional   950          0x0404 / 1028
  21993. * 238   Central European     1250,         0x0405 / 1029  (Czech)
  21994. * 204   Cyrillic             1251, 855     0x0419 / 1049  (Russian)
  21995. * 161   Greek                1253, 869     0x0408 / 1032
  21996. * 177   Hebrew               1255          0x040d / 1037
  21997. * 128   Japanese              932          0x0411 / 1041
  21998. * 129   Korean               1361, 949     0x0412 / 1042
  21999. * 162   Turkish              1254, 857     0x041f / 1055
  22000. * 163   Vietnamese           1258          0x042a / 1066
  22001. *=======================================================
  22002. lparameter nCharset
  22003. do case
  22004. case inlist( m.nCharset, -1, 1 )
  22005.     * Charset not assigned or system default 
  22006.     * Map to default locale:
  22007.     return 0
  22008. case inlist( m.nCharset, 0 )
  22009.     * 0 = Western
  22010.     return 1033
  22011. case inlist( m.nCharset, 2, 77, 255 )
  22012.     * These are generic. Map to default locale?
  22013.     return 0
  22014. case m.nCharset = 178
  22015.     * 178   Arabic               1256, 864     0x0401 / 1025 (saudi)
  22016.     return 1025
  22017. case m.nCharset = 186
  22018.     * 186   Baltic               1257,         0x0425 / 1061
  22019.     return 1061
  22020. case m.nCharset = 134
  22021.     * 134   Chinese Simplified    936          0x0804 / 2052
  22022.     return 2052
  22023. case m.nCharset = 136
  22024.     * 136   Chinese Traditional   950          0x0404 / 1028
  22025.     return 1028
  22026. case m.nCharset = 238
  22027.     * 238   Central European     1250,         0x0405 / 1029  (Czech)
  22028.     return 1029
  22029. case m.nCharset = 204
  22030.     * 204   Cyrillic             1251, 855     0x0419 / 1049  (Russian)
  22031.     return 1049
  22032. case m.nCharset = 161
  22033.     * 161   Greek                1253, 869     0x0408 / 1032
  22034.     return 1032
  22035. case m.nCharset = 177
  22036.     * 177   Hebrew               1255          0x040d / 1037
  22037.     return 1037
  22038. case m.nCharset = 128
  22039.     * 128   Japanese              932          0x0411 / 1041
  22040.     return 1041
  22041. case m.nCharset = 129
  22042.     * 129   Korean               1361, 949     0x0412 / 1042
  22043.     return 1042
  22044. case m.nCharset = 162
  22045.     * 162   Turkish              1254, 857     0x041f / 1055
  22046.     return 1055
  22047. case m.nCharset = 163
  22048.     * 163   Vietnamese           1258          0x042a / 1066
  22049.     return 1066
  22050. otherwise
  22051.     return 0
  22052. endcase
  22053. return 0
  22054. ENDPROC
  22055. PROCEDURE getbandfor
  22056. *=======================================================
  22057. * GetBandFor( UNIQUEID [, lStart ] )
  22058. * Returns a SCATTER NAME band object for the specified
  22059. * object.
  22060. * Calls .createObjectCursor() if necessary.
  22061. *=======================================================
  22062. lparameters cObjectId, lStart, iSession
  22063. local curSession
  22064. if empty(m.iSession) or (m.iSession < 1)
  22065.    iSession = set("datasession")
  22066. endif   
  22067. curSession = set("datasession")
  22068. set datasession to (m.iSession)
  22069. if not used('frx')
  22070.     set datasession to (m.curSession)
  22071.     return null
  22072. endif
  22073. if parameters() < 2
  22074.     lStart = .T.
  22075. endif
  22076. if not used('objects')
  22077.     THIS.createObjectCursor()
  22078. endif
  22079. local curSel, iRec, oBand
  22080. curSel = select(0)
  22081. oBand  = null
  22082. select objects
  22083. locate for UNIQUEID = m.cObjectId
  22084. if found()
  22085.     select bands
  22086.     if m.lStart
  22087.         locate for UNIQUEID = objects.START_BAND_ID
  22088.     else
  22089.         locate for UNIQUEID = objects.END_BAND_ID
  22090.     endif
  22091. endif            
  22092. if not found()
  22093.     go bottom
  22094. endif
  22095. *scatter fields UNIQUEID, OBJCODE, BANDLABEL, RESETTOTAL, REC_NO ;
  22096. *    name oBand
  22097. scatter name oBand
  22098. select (m.curSel)
  22099. set datasession to (m.curSession)
  22100. return oBand
  22101. ENDPROC
  22102. PROCEDURE synchobjectpositions
  22103. *=======================================================
  22104. * SynchObjectPositions()
  22105. * Updates the VPOS values in the FRX for each object,
  22106. * based on which band the object starts in, and the current
  22107. * height of each band as expressed in the bands cursor.
  22108. * Assumes: 
  22109. *   - bands and objects cursors have been prepared,
  22110. *   - current alias is an FRX cursor
  22111. *=======================================================
  22112. local curSel, curRec, cUID
  22113. curSel = select(0)
  22114. curRec = recno()
  22115. *-------------------------------------------------------
  22116. * Scan through the FRX cursor, 
  22117. * updating the VPOS to maintain the 
  22118. * same relative offset from the band it belongs to.
  22119. *-------------------------------------------------------
  22120. scan for     inlist( OBJTYPE, ;
  22121.                 FRX_OBJTYP_LABEL, FRX_OBJTYP_FIELD, FRX_OBJTYP_LINE, ;
  22122.                 FRX_OBJTYP_RECTANGLE, FRX_OBJTYP_PICTURE ) and ;
  22123.             not deleted() and ;
  22124.             PLATFORM = FRX_PLATFORM_WINDOWS
  22125.     cUID = UNIQUEID
  22126.     *-------------------------------------------------------
  22127.     * for each object, restore the relative positions:
  22128.     *-------------------------------------------------------
  22129.     select objects
  22130.     locate for UNIQUEID = cUID
  22131.     select bands
  22132.     locate for UNIQUEID = objects.START_BAND_ID
  22133.     select (curSel)
  22134.     if found("bands") and found("objects")
  22135.         *-------------------------------------------------------
  22136.         * The bands and objects cursors use pixel-based math, so
  22137.         * convert back to FRUs:
  22138.         *-------------------------------------------------------
  22139.         replace VPOS with ;
  22140.             THIS.pixelsToFru( bands.P_START + objects.BAND_OFFSET    )
  22141.     endif
  22142. endscan
  22143. THIS.GoRec( m.curRec, alias() )
  22144. return
  22145. ENDPROC
  22146. PROCEDURE getobjectsinband
  22147. *=======================================================
  22148. * GetObjectsInBand( UNIQUEID [, lRecnos ] )
  22149. * returns a Collection of UNIQUEID values for each object
  22150. * in a given Band.
  22151. * Calls .createObjectCursor() if necessary.
  22152. *=======================================================
  22153. lparameter cBandId, lRecnos,iSession
  22154. local oBandObjects, curSel, curSession
  22155. if empty(m.iSession) or (m.iSession < 1)
  22156.    iSession = set("datasession")
  22157. endif   
  22158. curSession = set("datasession")
  22159. set datasession to (m.iSession)
  22160. curSel = select(0)
  22161. oBandObjects = newobject("Collection")
  22162. if not used("objects")
  22163.     THIS.createObjectCursor()
  22164. endif
  22165. select objects
  22166.     if objects.START_BAND_ID = m.cBandId
  22167.         *-------------------------------------------------------
  22168.         * the object is defined as starting in this band
  22169.         *-------------------------------------------------------
  22170.         if m.lRecnos
  22171.             oBandObjects.Add( objects.REC_NO )
  22172.         else
  22173.             oBandObjects.Add( objects.UNIQUEID )
  22174.         endif
  22175.     endif            
  22176. endscan
  22177. select (m.curSel)
  22178. set datasession to (m.curSession)
  22179. return oBandObjects
  22180. ENDPROC
  22181. PROCEDURE insertdataenvrecord
  22182. *=======================================================
  22183. * InsertDataEnvRecord( ID, NAME, EXPR, CODE )
  22184. * Inserts a data-environment object record into an FRX. 
  22185. * Assumes that the record pointer is located appropriately.
  22186. *=======================================================
  22187. lparameters liObjType, lcName, lcExpr, lcMethods
  22188. insert blank
  22189. replace ;
  22190.     PLATFORM     with FRX_PLATFORM_WINDOWS, ;
  22191.     OBJTYPE      with m.liObjType, ;
  22192.     NAME        with m.lcName, ;
  22193.     EXPR        with m.lcExpr, ;
  22194.     TAG         with m.lcMethods, ;
  22195.     ENVIRON        with .F., ;
  22196.     CURPOS        with .F.
  22197. return
  22198. ENDPROC
  22199. PROCEDURE insertband
  22200. *=======================================================
  22201. * InsertBand()
  22202. * Inserts a band into an FRX. 
  22203. * Assumes that the record pointer is located appropriately.
  22204. *=======================================================
  22205. lparameters liObjCode 
  22206. insert blank
  22207. replace ;
  22208.     PLATFORM     with FRX_PLATFORM_WINDOWS, ;
  22209.     UNIQUEID     with sys(2015), ;
  22210.     OBJTYPE      with FRX_OBJTYP_BAND, ;
  22211.     OBJCODE      with m.liObjCode, ;
  22212.     NOREPEAT    with .F., ;
  22213.     PAGEBREAK    with .F., ;
  22214.     COLBREAK    with .F., ;
  22215.     RESETPAGE    with .F., ;
  22216.     PLAIN        with .F., ;
  22217.     CURPOS        with .F.
  22218. return
  22219. ENDPROC
  22220. PROCEDURE inserttitleband
  22221. *=======================================================
  22222. * InsertTitleBand( lNewPage )
  22223. * Inserts a Title band record into the FRX
  22224. *=======================================================
  22225. lparameter lNewPage
  22226. go top
  22227. *-------------------------------------------------------
  22228. * will be inserted as the second record (as is appropriate)
  22229. *-------------------------------------------------------
  22230. THIS.insertBand( FRX_OBJCOD_TITLE )
  22231. replace ;
  22232.     HEIGHT    with 5000.000, ;
  22233.     PAGEBREAK with m.lNewPage
  22234. return
  22235. ENDPROC
  22236. PROCEDURE insertsummaryband
  22237. *=======================================================
  22238. * InsertSummaryBand( lNewPage, lPageHeader, lPageFooter )
  22239. * Inserts a Summary band into an FRX
  22240. *=======================================================
  22241. lparameter lNewPage, lPageHeader, lPageFooter
  22242. locate for OBJTYPE = FRX_OBJTYP_BAND and ;
  22243.             OBJCODE = FRX_OBJCOD_PAGEFOOTER
  22244. THIS.insertBand( FRX_OBJCOD_SUMMARY )
  22245. replace ;
  22246.     HEIGHT        with 5000.000, ;
  22247.     PAGEBREAK   with m.lNewPage, ;
  22248.     EJECTBEFOR  with m.lPageHeader, ;
  22249.     EJECTAFTER  with m.lPageFooter
  22250. return
  22251. ENDPROC
  22252. PROCEDURE insertdetailband
  22253. *=======================================================
  22254. * InsertDetailBand()
  22255. * Inserts a detail band into an FRX. 
  22256. * Assumes that the record pointer is located appropriately.
  22257. *=======================================================
  22258. THIS.insertBand( FRX_OBJCOD_DETAIL )
  22259. return
  22260. ENDPROC
  22261. PROCEDURE insertdetailheaderfooter
  22262. *=======================================================
  22263. * InsertDetailHeaderFooter()
  22264. * Inserts Detail Header and Footer bands into the FRX.
  22265. * Assumes: we are positioned on the detail band:
  22266. *=======================================================
  22267. insert blank
  22268. replace ;
  22269.     PLATFORM with FRX_PLATFORM_WINDOWS, ;
  22270.     UNIQUEID with sys(2015), ;
  22271.     OBJTYPE  with FRX_OBJTYP_BAND, ;
  22272.     OBJCODE  with FRX_OBJCOD_DETAILFOOTER
  22273. skip -1
  22274. insert before blank
  22275. replace ;
  22276.     PLATFORM with FRX_PLATFORM_WINDOWS, ;
  22277.     UNIQUEID with sys(2015), ;
  22278.     OBJTYPE  with FRX_OBJTYP_BAND, ;
  22279.     OBJCODE  with FRX_OBJCOD_DETAILHEADER
  22280. skip                    
  22281. return
  22282. ENDPROC
  22283. PROCEDURE setcolumncount
  22284. *=======================================================
  22285. * SetColumnCount( iCols )
  22286. * Adds or subtracts columns (and column header/footer
  22287. * records from the FRX.
  22288. * Assumes: the current workarea contains the FRX cursor.
  22289. * Calls: .createObjectCursor() if necessary.
  22290. *=======================================================
  22291. lparameter iCols
  22292. local lHasColBands, curRec, cFrxAlias
  22293. cFrxAlias = alias()
  22294. curRec = recno( m.cFrxAlias )
  22295. locate for     OBJTYPE = FRX_OBJTYP_REPORTHEADER and ;
  22296.             PLATFORM = FRX_PLATFORM_WINDOWS
  22297. replace VPOS with m.iCols
  22298. locate for    OBJTYPE = FRX_OBJTYP_BAND and ;
  22299.             OBJCODE = FRX_OBJCOD_COLHEADER and ;
  22300.             PLATFORM = FRX_PLATFORM_WINDOWS
  22301. lHasColBands = found()
  22302. THIS.goRec(m.curRec, m.cFrxAlias)
  22303. if (m.lHasColBands and m.iCols = 1) or ;
  22304.    (not m.lHasColBands and m.iCols > 1)
  22305.     THIS.createObjectCursor()
  22306.     do case 
  22307.     case (m.lHasColBands and m.iCols = 1)
  22308.         *-------------------------------------------------------
  22309.         * Remove the column header/footer bands:
  22310.         *-------------------------------------------------------
  22311.         locate for OBJTYPE = FRX_OBJTYP_BAND ;
  22312.                and OBJCODE = FRX_OBJCOD_COLHEADER ;
  22313.                and PLATFORM = FRX_PLATFORM_WINDOWS
  22314.         if found()
  22315.             delete
  22316.         endif
  22317.         locate for OBJTYPE = FRX_OBJTYP_BAND ;
  22318.                and OBJCODE = FRX_OBJCOD_COLFOOTER ;
  22319.                and PLATFORM = FRX_PLATFORM_WINDOWS
  22320.         if found()
  22321.             delete
  22322.         endif
  22323.     case (not m.lHasColBands and m.iCols > 1)
  22324.         *-------------------------------------------------------
  22325.         * Insert the column header/footer bands:
  22326.         *-------------------------------------------------------
  22327.         locate for OBJTYPE = FRX_OBJTYP_BAND ;
  22328.                and OBJCODE = FRX_OBJCOD_PAGEHEADER ;
  22329.                 and PLATFORM = FRX_PLATFORM_WINDOWS
  22330.         insert blank
  22331.         replace ;
  22332.             PLATFORM     with FRX_PLATFORM_WINDOWS, ;
  22333.             UNIQUEID     with sys(2015), ;
  22334.             OBJTYPE      with FRX_OBJTYP_BAND, ;
  22335.             OBJCODE      with FRX_OBJCOD_COLHEADER, ;
  22336.             NOREPEAT    with .F., ;
  22337.             PAGEBREAK    with .F., ;
  22338.             COLBREAK    with .F., ;
  22339.             RESETPAGE    with .F., ;
  22340.             PLAIN        with .F., ;
  22341.             CURPOS        with .F.
  22342.         locate for OBJTYPE = FRX_OBJTYP_BAND ;
  22343.                and OBJCODE = FRX_OBJCOD_PAGEFOOTER ;
  22344.                and PLATFORM = FRX_PLATFORM_WINDOWS
  22345.         insert before blank
  22346.         replace ;
  22347.             PLATFORM     with FRX_PLATFORM_WINDOWS, ;
  22348.             UNIQUEID     with sys(2015), ;
  22349.             OBJTYPE      with FRX_OBJTYP_BAND, ;
  22350.             OBJCODE      with FRX_OBJCOD_COLFOOTER, ;
  22351.             NOREPEAT    with .F., ;
  22352.             PAGEBREAK    with .F., ;
  22353.             COLBREAK    with .F., ;
  22354.             RESETPAGE    with .F., ;
  22355.             PLAIN        with .F., ;
  22356.             CURPOS        with .F.
  22357.     endcase
  22358.     *-------------------------------------------------------
  22359.     * Refresh the band cursor:
  22360.     *-------------------------------------------------------
  22361.     THIS.createBandCursor()
  22362.     *-------------------------------------------------------
  22363.     * Using the offsets in object cursor and the 
  22364.     * new band heights in band cursor, re-sync the 
  22365.     * objects' positions:
  22366.     *-------------------------------------------------------
  22367.     THIS.synchObjectPositions()
  22368.     THIS.goRec(m.curRec, m.cFrxAlias)
  22369. endif
  22370. return
  22371. ENDPROC
  22372. PROCEDURE creategroupcursor
  22373. *=======================================================
  22374. * CreateGroupCursor()
  22375. * Creats a cursor with the alias "groups" containing records
  22376. * of information for each data group in the report.
  22377. * Used mainly by PanelGrouping class.
  22378. * Returns .T. if successfully created.
  22379. *=======================================================
  22380. lparameter tcFrxAlias, tiSession
  22381. local curSession
  22382. if empty(m.tiSession) or (m.tiSession < 1)
  22383.    m.tiSession = set("datasession")
  22384. endif 
  22385. m.curSession = set("datasession")
  22386. set datasession to (m.tiSession)
  22387. if empty( m.tcFrxAlias )
  22388.     tcFrxAlias = 'frx'
  22389. endif
  22390. if not used(m.tcFrxAlias)
  22391.     set datasession to (m.curSession)
  22392.     return .F.
  22393. endif
  22394. curSel = select(0)
  22395. *-------------------------------------------------------
  22396. * get the current report measurement units and tell our 
  22397. * converter to use them:
  22398. *-------------------------------------------------------
  22399. local iUnits
  22400. iUnits     = THIS.getReportAttribute("UNITS")
  22401. *-------------------------------------------------------
  22402. * create the groups cursor:
  22403. *-------------------------------------------------------
  22404. if used("groups")
  22405.     use in groups
  22406. endif
  22407. select 0
  22408. create cursor groups ( ;
  22409.     UNIQUEID c(10), ;
  22410.     EXPR M, ;
  22411.     PAGINATE i, ;
  22412.     REPRINT l, ;
  22413.     THRESH n(9,3), ;
  22414.     FOOTER_ID c(10) )
  22415. *-------------------------------------------------------
  22416. * Initialise stuff:
  22417. *-------------------------------------------------------
  22418. local iPaginate, iCurRec, nThreshold, lisMultiCol
  22419. iPaginate   = 0
  22420. iCurRec     = recno(m.tcFrxAlias)
  22421. lIsMultiCol = THIS.getReportAttribute("MULTICOLUMN")
  22422. *-------------------------------------------------------
  22423. * Scan through the group header records, building up the information
  22424. * and then insert a new record into the groups cursor:
  22425. *-------------------------------------------------------
  22426. select (m.tcFrxAlias)
  22427. scan for OBJTYPE = FRX_OBJTYP_BAND and ;
  22428.          OBJCODE = FRX_OBJCOD_GROUPHEADER and ;
  22429.          not deleted() and ;
  22430.          PLATFORM = FRX_PLATFORM_WINDOWS
  22431.     *-------------------------------------
  22432.     * Pagination: try:
  22433.     * 1  ( ) Normal               (none set)
  22434.     * 2  ( ) Start on new column  (COLBREAK)
  22435.     * 3  ( ) Start on new page    (PAGEBREAK)
  22436.     * 4  ( ) Start on new page 1  (PAGEBREAK+RESETPAGE)
  22437.     *-------------------------------------
  22438.     do case
  22439.     case PAGEBREAK and RESETPAGE
  22440.         iPaginate = 4
  22441.     case PAGEBREAK 
  22442.         iPaginate = 3
  22443.     case COLBREAK
  22444.         if m.lIsMultiCol
  22445.             iPaginate = 2
  22446.         else
  22447.             *--------------------------------
  22448.             * Even though this option used to be set to "new column",
  22449.             * the report only has one column, so reset to default:
  22450.             *--------------------------------
  22451.             iPaginate = 1
  22452.         endif
  22453.     otherwise
  22454.         iPaginate = 1
  22455.     endcase
  22456.     *-------------------------------------
  22457.     * Calculate threshold in local units:
  22458.     *-------------------------------------
  22459.     nThreshold = THIS.getUnitValueFromFRU( WIDTH, m.iUnits )
  22460.     insert into groups values ( ;
  22461.         &tcFrxAlias..UNIQUEID, ;
  22462.         &tcFrxAlias..EXPR, ;
  22463.         m.iPaginate, ;
  22464.         &tcFrxAlias..NOREPEAT, ;
  22465.         m.nThreshold, ;
  22466.         "" )
  22467. endscan
  22468. *-------------------------------------------------------
  22469. * Now grab the group footer IDs as well. Note of course
  22470. * that they are in reverse order to the headers (nesting):
  22471. *-------------------------------------------------------
  22472. go bottom in groups
  22473. scan for OBJTYPE = FRX_OBJTYP_BAND and ;
  22474.          OBJCODE = FRX_OBJCOD_GROUPFOOTER and ;
  22475.          not deleted() and ;
  22476.          PLATFORM = FRX_PLATFORM_WINDOWS
  22477.     select groups
  22478.     replace FOOTER_ID with &tcFrxAlias..UNIQUEID
  22479.     skip -1        
  22480.     select (m.tcFrxAlias)
  22481. endscan
  22482. *-------------------------------------------------------
  22483. * Restore the record pointer in FRX (important)
  22484. *-------------------------------------------------------
  22485. THIS.goRec(m.icurRec, m.tcFrxAlias)
  22486. select (m.curSel)        
  22487. set datasession to (m.curSession)
  22488. return .T.
  22489. ENDPROC
  22490. PROCEDURE createvariablecursor
  22491. *=======================================================
  22492. * CreateVariableCursor()
  22493. * Creats a cursor with the alias "vars" containing records
  22494. * of information for each report variable in the report.
  22495. * Used mostly by panelVariables class
  22496. * Returns .T. if successfully created.
  22497. *=======================================================
  22498. lparameter tcFrxAlias, tiSession
  22499. local curSession
  22500. if empty(m.tiSession) or (m.tiSession < 1)
  22501.    m.tiSession = set("datasession")
  22502. endif 
  22503. m.curSession = set("datasession")
  22504. set datasession to (m.tiSession)
  22505. if empty( m.tcFrxAlias )
  22506.     tcFrxAlias = 'frx'
  22507. endif
  22508. if not used(m.tcFrxAlias)
  22509.     set datasession to (m.curSession)
  22510.     return .F.
  22511. endif
  22512. curSel = select(0)
  22513. *-------------------------------------------------------
  22514. * This is needed later on:
  22515. *-------------------------------------------------------
  22516. if not used("reset_on")
  22517.     THIS.createCalcResetOnCursor()
  22518. endif
  22519. *-------------------------------------------------------
  22520. * create the vars cursor:
  22521. *-------------------------------------------------------
  22522. if used("vars")
  22523.     use in vars
  22524. endif
  22525. select 0
  22526. create cursor vars ( ;
  22527.     UNIQUEID       C(10), ;
  22528.     VARNAME        M, ;
  22529.     VALUE_TO_STORE M, ;
  22530.     INITIAL_VALUE  M, ;
  22531.     RELEASE_VAR    L, ;
  22532.     CALC_TYPE      N(2,0), ;
  22533.     RESET_ON       N(2,0), ;
  22534.     REC_NO           I )
  22535. *-------------------------------------------------------
  22536. * Initialise stuff:
  22537. *-------------------------------------------------------
  22538. local iCurRec, iResetOn
  22539. iCurRec   = recno(m.tcFrxAlias)
  22540. *-------------------------------------------------------
  22541. * Scan through the variable records, building up the information
  22542. * and then insert a new record into the vars cursor:
  22543. *-------------------------------------------------------
  22544. select (m.tcFrxAlias)
  22545. scan for OBJTYPE = FRX_OBJTYP_VARIABLE and ;
  22546.          not deleted() and ;
  22547.          PLATFORM = FRX_PLATFORM_WINDOWS
  22548.     select reset_on
  22549.     locate for RESETTOTAL = &tcFrxAlias..RESETTOTAL
  22550.     insert into vars values ( ;
  22551.         &tcFrxAlias..UNIQUEID, ;
  22552.         &tcFrxAlias..NAME, ;
  22553.         &tcFrxAlias..EXPR, ;
  22554.         &tcFrxAlias..TAG, ;
  22555.         &tcFrxAlias..UNIQUE, ;
  22556.         &tcFrxAlias..TOTALTYPE+1, ;
  22557.         recno("reset_on"), ;
  22558.         recno(m.tcFrxAlias) )
  22559. endscan
  22560. *-------------------------------------------------------
  22561. * Restore the record pointer in FRX (important)
  22562. *-------------------------------------------------------
  22563. THIS.goRec(m.icurRec, m.tcFrxAlias)
  22564. select (m.curSel)        
  22565. set datasession to (m.curSession)
  22566. return .T.
  22567. ENDPROC
  22568. PROCEDURE createcalcresetoncursor
  22569. *=======================================================
  22570. * CreateCalcResetOnCursor()
  22571. * Creates a cursor with the alias "reset_on" containing records
  22572. * of information for each prompt in the Calculation Reset combobox.
  22573. * Returns .T. if successfully created.
  22574. *=======================================================
  22575. lparameter tcFrxAlias, tiSession
  22576. local curSession
  22577. if empty(m.tiSession) or (m.tiSession < 1)
  22578.    m.tiSession = set("datasession")
  22579. endif 
  22580. m.curSession = set("datasession")
  22581. set datasession to (m.tiSession)
  22582. if empty( m.tcFrxAlias )
  22583.     tcFrxAlias = 'frx'
  22584. endif
  22585. if not used(m.tcFrxAlias)
  22586.     set datasession to (m.curSession)
  22587.     return .F.
  22588. endif
  22589. local curSel, curRec, iGroupCount, iDetailCount, iNum
  22590. curSel = select(0)
  22591. *-------------------------------------------------------
  22592. * create the reset_on cursor:
  22593. *-------------------------------------------------------
  22594. if used("reset_on")
  22595.     use in reset_on
  22596. endif
  22597. create cursor reset_on (;
  22598.     UNIQUEID c(10), ;
  22599.     OBJCODE n(2,0) , ;
  22600.     PROMPT_TEXT c(30), ;
  22601.     RESETTOTAL i )
  22602. *-----------------------------------------------------------    
  22603. * Add in the report/Page resets:
  22604. *-----------------------------------------------------------    
  22605. insert into reset_on values ( "", 0, ENDOFREPORT_LOC, FRX_RESETTOTAL_ENDOFREPORT )
  22606. insert into reset_on values ( "", 0, ENDOFPAGE_LOC,   FRX_RESETTOTAL_ENDOFPAGE )
  22607. select (m.tcFrxAlias)
  22608. curRec = recno()
  22609. *-----------------------------------------------------------    
  22610. * Add in the column reset if there are multi-cols:
  22611. *-----------------------------------------------------------    
  22612. locate for OBJTYPE = FRX_OBJTYP_REPORTHEADER ;
  22613.        and PLATFORM = FRX_PLATFORM_WINDOWS
  22614. if VPOS > 1
  22615.     insert into reset_on values ( "", 0, ENDOFCOLUMN_LOC, FRX_RESETTOTAL_ENDOFCOLUMN )
  22616.     insert into reset_on values ( "", 0, "\"+ENDOFCOLUMN_LOC, FRX_RESETTOTAL_ENDOFCOLUMN )
  22617. endif
  22618. *-----------------------------------------------------------    
  22619. * Only add in the group reset if there are groups:
  22620. *-----------------------------------------------------------    
  22621. count for OBJTYPE = FRX_OBJTYP_BAND ;
  22622.       and OBJCODE = FRX_OBJCOD_GROUPHEADER ;
  22623.       and PLATFORM = FRX_PLATFORM_WINDOWS ;
  22624.       to iGroupCount
  22625. if m.iGroupCount > 0
  22626.     iNum = 1
  22627.     insert into reset_on values ( "", 0, "\-", 1001 )
  22628.     scan for OBJTYPE = FRX_OBJTYP_BAND ;
  22629.          and OBJCODE = FRX_OBJCOD_GROUPHEADER ;
  22630.          and PLATFORM = FRX_PLATFORM_WINDOWS
  22631.         insert into reset_on values ( ;
  22632.             &tcFrxAlias..UNIQUEID, ;
  22633.             &tcFrxAlias..OBJCODE, ;
  22634.             GROUP_BY_LOC + trim(&tcFrxAlias..EXPR), ;
  22635.             FRX_RESETTOTAL_GROUP_OFFSET + m.iNum )
  22636.         iNum = m.iNum + 1
  22637.     endscan
  22638. endif    
  22639. *-----------------------------------------------------------    
  22640. * Only add in the detail reset if this is a multi-detail report:
  22641. *-----------------------------------------------------------    
  22642. count for OBJTYPE = FRX_OBJTYP_BAND ;
  22643.       and OBJCODE = FRX_OBJCOD_DETAIL ;
  22644.       and PLATFORM = FRX_PLATFORM_WINDOWS ;
  22645.       to iDetailCount
  22646. if m.iDetailCount > 1
  22647.     iNum = 1
  22648.     insert into reset_on values ( "", 0, "\-", 1002 )
  22649.     scan for OBJTYPE = FRX_OBJTYP_BAND ;
  22650.          and OBJCODE = FRX_OBJCOD_DETAIL ;
  22651.          and PLATFORM = FRX_PLATFORM_WINDOWS
  22652.          
  22653.         insert into reset_on values ( ;
  22654.             &tcFrxAlias..UNIQUEID, ;
  22655.             &tcFrxAlias..OBJCODE, ;
  22656.             DETAIL_LOC + transform(m.iNum), ;
  22657.             FRX_RESETTOTAL_DETAIL_OFFSET + m.iNum  )    
  22658.         iNum = m.iNum + 1
  22659.     endscan
  22660. endif    
  22661. THIS.goRec(m.curRec, m.tcFrxAlias)
  22662. select (m.curSel)
  22663. set datasession to (m.curSession)
  22664. return .t.
  22665. ENDPROC
  22666. PROCEDURE createdefaultprintenvcursor
  22667. *=======================================================
  22668. * CreateDefaultPrintEnvCursor( <frxAlias>, <dataenvAlias> )
  22669. * Creates a one-row cursor with the same structure as the
  22670. * FRX. Default parameters are "frx", "defPrnEnv".
  22671. *=======================================================
  22672. lparameters lcFrxAlias, lcPEAlias, liSession
  22673. local curSel,curSession
  22674. if empty(m.liSession) or (m.liSession < 1)
  22675.    m.liSession = set("datasession")
  22676. endif 
  22677. m.curSession = set("datasession")
  22678. set datasession to (m.liSession)
  22679. curSel = select(0)
  22680. if empty( m.lcFrxAlias )
  22681.     lcFrxAlias = 'frx'
  22682. endif
  22683. if empty( m.lcPEAlias )
  22684.     lcPEAlias = 'defPrnEnv'
  22685. endif
  22686. select * ;
  22687.     from (m.lcFrxAlias) ;
  22688.     where OBJTYPE = FRX_OBJTYP_REPORTHEADER ;
  22689.       and PLATFORM = FRX_PLATFORM_WINDOWS ;
  22690.     into cursor (m.lcPEAlias) ;
  22691.     readwrite
  22692. =sys(1037,2)
  22693. select (m.curSel)
  22694. set datasession to (m.curSession)
  22695. return
  22696. ENDPROC
  22697. PROCEDURE getselectedobjectcount
  22698. *=======================================================
  22699. * getSelectedObjectCount( <frx> )
  22700. *=======================================================
  22701. lparameter lcFrxAlias
  22702. if empty( m.lcFrxAlias )
  22703.     lcFrxAlias = "frx"
  22704. endif
  22705. local cursel, curRec, selCount
  22706. curSel = select(0)
  22707. select (m.lcFrxAlias)
  22708. curRec = recno()
  22709. count for    CURPOS and ;
  22710.             PLATFORM = FRX_PLATFORM_WINDOWS and ;
  22711.             OBJTYPE <> 1 ;
  22712.     to m.selCount
  22713. go m.curRec
  22714. select (m.curSel)
  22715. return m.selCount
  22716. ENDPROC
  22717. PROCEDURE pushprintenvtocursor
  22718. *=======================================================
  22719. * pushPrintEnvToCursor( <alias> )
  22720. *=======================================================
  22721. lparameter cRegisterAlias
  22722. local curSel
  22723. curSel = select(0)
  22724. select * ;
  22725.     from frx ;
  22726.     where .F. ;
  22727.     into cursor (m.cRegisterAlias) ;
  22728.     readwrite
  22729. append Blank
  22730. result = sys(1037,2)
  22731. select (m.curSel)
  22732. return
  22733. ENDPROC
  22734. PROCEDURE popprintenv
  22735. *=======================================================
  22736. * popPrintEnv()
  22737. * assumes the FRX file to pop from is selected.
  22738. *=======================================================
  22739. result = sys(1037,3)
  22740. return
  22741. ENDPROC
  22742. PROCEDURE getfrxtimestamp
  22743. #define DEBUGGING .F.
  22744. *=======================================================
  22745. * GetFrxTimeStamp( vDateTime )
  22746. * Returns a FOX system file timestamp 
  22747. * from a date time value, any data type
  22748. * Calls: intToBin(), binToInt() from browser.scx code
  22749. *=======================================================
  22750. lparameter tvDateTime
  22751. *-------------------------------------------------------
  22752. * Default to current datetime
  22753. *-------------------------------------------------------
  22754. LOCAL ltDateTime, lvFoxTimeStamp, lvTemp
  22755. ltDateTime = CTOT(TRANSFORM(tvDateTime))
  22756. IF EMPTY(ltDateTime)
  22757.    ltDateTime = DATETIME()
  22758. ENDIF
  22759. #IF DEBUGGING
  22760.    ACTI SCREEN
  22761.    CLEAR
  22762.    ? ltDateTime
  22763. #ENDIF
  22764. *-------------------------------------------------------
  22765. * bits 4-0, seconds in two-second increments
  22766. *-------------------------------------------------------
  22767. lvTemp = SEC(ltDateTime) / 2
  22768. lvFoxTimeStamp = PADL(RIGHT(THIS.IntToBin(lvTemp),5),5,"0")
  22769. #IF DEBUGGING
  22770. ?  lvTemp
  22771. ?  lvFoxTimeStamp
  22772. #ENDIF
  22773. *-------------------------------------------------------
  22774. * bits 10-5, minutes
  22775. *-------------------------------------------------------
  22776. lvTemp = MINUTE(ltDateTime)
  22777. lvFoxTimeStamp = PADL(RIGHT(THIS.IntToBin(lvTemp),6),6,"0") + lvFoxTimeStamp
  22778. #IF DEBUGGING
  22779. ?  lvTemp
  22780. ?  lvFoxTimeStamp
  22781. #ENDIF
  22782. *-------------------------------------------------------
  22783. * bits 15-11, hours
  22784. *-------------------------------------------------------
  22785. lvTemp = HOUR(ltDateTime)
  22786. lvFoxTimeStamp = PADL(RIGHT(THIS.IntToBin(lvTemp),5),5,"0") + lvFoxTimeStamp
  22787. #IF DEBUGGING
  22788. ?  lvTemp
  22789. ?  lvFoxTimeStamp
  22790. #ENDIF
  22791. *-------------------------------------------------------
  22792. * bits 20-16, days
  22793. *-------------------------------------------------------
  22794. lvTemp = DAY(ltDateTime)
  22795. lvFoxTimeStamp = PADL(RIGHT(THIS.IntToBin(lvTemp),5),5,"0") + lvFoxTimeStamp
  22796. #IF DEBUGGING
  22797. ?  lvTemp
  22798. ?  lvFoxTimeStamp
  22799. #ENDIF
  22800. *-------------------------------------------------------
  22801. * bits 24-21, months
  22802. *-------------------------------------------------------
  22803. lvTemp = MONTH(ltDateTime)
  22804. lvFoxTimeStamp = PADL(RIGHT(THIS.IntToBin(lvTemp),4),4,"0") + lvFoxTimeStamp
  22805. #IF DEBUGGING
  22806. ?  lvTemp
  22807. ?  lvFoxTimeStamp
  22808. #ENDIF
  22809. *-------------------------------------------------------
  22810. * bits 31-25, years with a 1980 offset
  22811. *-------------------------------------------------------
  22812. lvTemp = YEAR(ltDateTime)-1980
  22813. lvFoxTimeStamp = PADL(RIGHT(THIS.IntToBin(lvTemp),7),7,"0") + lvFoxTimeStamp
  22814. #IF DEBUGGING
  22815. ?  lvTemp
  22816. ?  LEN(lvFoxTimeStamp)
  22817. ?  lvFoxTimeStamp
  22818. #ENDIF
  22819. lvFoxTimeStamp = THIS.BinToInt(lvFoxTimeStamp)
  22820. RETURN lvFoxTimeStamp
  22821. ENDPROC
  22822. PROCEDURE gettimestampstring
  22823. *=======================================================
  22824. * GetTimeStampString( iStamp )
  22825. * Returns a readable string version of a Fox system 
  22826. * timestamp, using current date settings
  22827. *=======================================================
  22828. lparameter tiStamp 
  22829. IF EMPTY(tiStamp) OR TYPE("tiStamp") # "N"  
  22830.    RETURN ""
  22831. ENDIF
  22832. LOCAL lnYearoffset,lcYear,lcMonth,;
  22833.       lcDay,lcHour,lcMinute,lcSecond
  22834. *-------------------------------------------------------
  22835. * lnYearoffset = INT(tiStamp/2^25)   && bits 31-25
  22836. *-------------------------------------------------------
  22837. lnYearoffset = BITRSHIFT(tiStamp,25)
  22838. lcYear = STR(1980 + lnYearoffset)
  22839. *-------------------------------------------------------
  22840. * lcMonth = STR(INT(tiStamp/2^21) % 2^4)  && bits 24-21
  22841. *-------------------------------------------------------
  22842. lcMonth = STR(BITRSHIFT(tiStamp,21) % 2^4)
  22843. *-------------------------------------------------------
  22844. * lcDay = STR(INT(tiStamp/2^16) % 2^5)    && bits 20-16
  22845. *-------------------------------------------------------
  22846. lcDay = STR(BITRSHIFT(tiStamp,16) % 2^5)
  22847. *-------------------------------------------------------
  22848. * lcHour = STR(INT(tiStamp/2^11) % 2^5)   && bits 15-11
  22849. *-------------------------------------------------------
  22850. lcHour = STR(BITRSHIFT(tiStamp,11) % 2^5)
  22851. *-------------------------------------------------------
  22852. * lcMinute = STR(INT(tiStamp/2^5) % 2^6)  && bits 10-5
  22853. *-------------------------------------------------------
  22854. lcMinute = STR(BITRSHIFT(tiStamp,5) % 2^6)
  22855. *-------------------------------------------------------
  22856. * lcSecond = STR(INT(tiStamp%2^5) * 2)    && bits 4-0 (two-second increments)   
  22857. *-------------------------------------------------------
  22858. lcSecond = STR(BITLSHIFT(tiStamp%2^5,1))
  22859. RETURN TTOC({^&lcYear./&lcMonth./&lcDay. &lcHour.:&lcMinute.:&lcSecond.})    
  22860. ENDPROC
  22861. PROCEDURE inttobin
  22862. *=======================================================
  22863. * IntToBin( int )
  22864. * Returns a binary form of an integer
  22865. *=======================================================
  22866. LPARAMETERS tnInteger
  22867. LOCAL lnInteger,lcBinary,lnDivisor,lnCount
  22868. IF EMPTY(tnInteger)
  22869.     RETURN "0"
  22870. ENDIF
  22871. lnInteger=INT(tnInteger)
  22872. lcBinary=""
  22873. FOR lnCount = 31 TO 0 STEP -1
  22874.     lnDivisor=2^lnCount
  22875.     IF lnDivisor>lnInteger
  22876.         lcBinary=lcBinary+"0"
  22877.         LOOP
  22878.     ENDIF
  22879.     lcBinary=lcBinary+IIF((lnInteger/lnDivisor)>0,"1","0")
  22880.     lnInteger=INT(lnInteger-lnDivisor)
  22881. ENDFOR
  22882. RETURN lcBinary
  22883. ENDPROC
  22884. PROCEDURE bintoint
  22885. *=======================================================
  22886. * BinToInt( cBytes )
  22887. * Returns an integer form of binary data
  22888. *=======================================================
  22889. LPARAMETERS tcBinary
  22890. LOCAL lcInteger,lnInteger,lnCount,lnStrLen
  22891. IF EMPTY(tcBinary)
  22892.     RETURN 0
  22893. ENDIF
  22894. lnStrLen=LEN(tcBinary)
  22895. lnInteger=0
  22896. FOR lnCount = 0 TO (lnStrLen-1)
  22897.     IF SUBSTR(tcBinary,lnStrLen-lnCount,1)=="1"
  22898.         lnInteger=lnInteger+2^lnCount
  22899.     ENDIF
  22900. ENDFOR
  22901. RETURN INT(lnInteger)
  22902. ENDPROC
  22903. PROCEDURE gettargettypetext
  22904. *=======================================================
  22905. * GetTargetTypeText( OBJTYPE, OBJCODE ) 
  22906. * Returns a readable string version of a target Type/Code
  22907. *=======================================================
  22908. lparameters nObjType, nObjCode 
  22909. if parameters() = 0
  22910.     nObjType = -1
  22911.     nObjCode = -1 
  22912. endif
  22913. do case
  22914. case m.nObjType = FRX_OBJTYPE_MULTISELECT
  22915.     return TARGET_MULTISELECT_LOC
  22916. case m.nObjType = FRX_OBJTYP_COMMENT
  22917.     return TARGET_REPORT_COMMENT_LOC
  22918. case m.nObjType = FRX_OBJTYP_REPORTHEADER
  22919.     return TARGET_REPORT_GLOBAL_LOC
  22920. case m.nObjType = 2
  22921.     return TARGET_WORKAREA_LOC
  22922. case m.nObjType = 3
  22923.     return TARGET_INDEX_LOC
  22924. case m.nObjType = 4
  22925.     return TARGET_RELATION_LOC
  22926. case m.nObjType = FRX_OBJTYP_LABEL
  22927.     return TARGET_TEXT_LABEL_LOC
  22928. case m.nObjType = FRX_OBJTYP_LINE
  22929.     return TARGET_LINE_LOC
  22930. case m.nObjType = FRX_OBJTYP_RECTANGLE
  22931.     return TARGET_BOX_LOC
  22932. case m.nObjType = FRX_OBJTYP_FIELD
  22933.     return TARGET_FIELD_LOC
  22934. case m.nObjType = FRX_OBJTYP_BAND
  22935.     do case
  22936.     case m.nObjCode = FRX_OBJCOD_TITLE
  22937.         return TARGET_TITLE_LOC
  22938.     case m.nObjCode = FRX_OBJCOD_PAGEHEADER
  22939.         return TARGET_PAGE_HEADER_LOC
  22940.     case m.nObjCode = FRX_OBJCOD_COLHEADER
  22941.         return TARGET_COL_HEADER_LOC
  22942.     case m.nObjCode = FRX_OBJCOD_GROUPHEADER
  22943.         return TARGET_GROUP_HEADER_LOC
  22944.     case m.nObjCode = FRX_OBJCOD_DETAIL
  22945.         return TARGET_DETAIL_LOC
  22946.     case m.nObjCode = FRX_OBJCOD_GROUPFOOTER
  22947.         return TARGET_GROUP_FOOTER_LOC
  22948.     case m.nObjCode = FRX_OBJCOD_COLFOOTER
  22949.         return TARGET_COL_FOOTER_LOC
  22950.     case m.nObjCode = FRX_OBJCOD_PAGEFOOTER
  22951.         return TARGET_PAGE_FOOTER_LOC
  22952.     case m.nObjCode = FRX_OBJCOD_SUMMARY
  22953.         return TARGET_SUMMARY_LOC
  22954.     case m.nObjCode = FRX_OBJCOD_DETAILHEADER
  22955.         return TARGET_DETAIL_HEADER_LOC
  22956.     case m.nObjCode = FRX_OBJCOD_DETAILFOOTER
  22957.         return TARGET_DETAIL_FOOTER_LOC
  22958.      otherwise
  22959.         return TARGET_UNKNOWN_BAND_LOC
  22960.     endcase
  22961. case m.nObjType = FRX_OBJTYP_GROUP
  22962.     return TARGET_GROUPED_LOC
  22963. case m.nObjType = FRX_OBJTYP_PICTURE
  22964.     return TARGET_PICTURE_LOC
  22965. case m.nObjType = FRX_OBJTYP_VARIABLE
  22966.     return TARGET_VARIABLE_LOC
  22967. case m.nObjType = FRX_OBJTYP_PDRIVER
  22968.     return TARGET_PDRIVER_LOC
  22969. case m.nObjType = FRX_OBJTYP_FONTRES
  22970.     return TARGET_FONTRESO_LOC
  22971. case m.nObjType = FRX_OBJTYP_DATAENV
  22972.     return TARGET_DATAENV_LOC
  22973. case m.nObjType = FRX_OBJTYP_DATAOBJ
  22974.     return TARGET_CURSOR_LOC
  22975. otherwise
  22976.     return TARGET_UNKNOWN_LOC
  22977. endcase
  22978. ENDPROC
  22979. PROCEDURE getunitvaluefromfru
  22980. *-------------------------------------------------
  22981. * Return a given unit value for a given value in FRUs,
  22982. * depending on the Units:
  22983. *-------------------------------------------------
  22984. lparameter nFruValue, iUnits
  22985. do case
  22986. case inlist( m.iUnits, FRX_RULER_INCHES, FRX_RULER_OFF)
  22987.     return (m.nFruValue / 10000)
  22988. case m.iUnits = FRX_RULER_METRIC
  22989.     return (m.nFruValue / (0.3937 * 10000))
  22990. case m.iUnits = FRX_RULER_CHARACTERS
  22991.     *---------------------------------------------------------
  22992.     * 1 char = 833.33 FRU
  22993.     * 1 char = 1/12 inch
  22994.     *---------------------------------------------------------
  22995.     return (m.nFruValue / 833.33)
  22996. *case THIS.units = FRX_RULER_PIXELS 
  22997. otherwise
  22998.     *---------------------------------------------------------
  22999.     * Designer fixed at 96 dpi
  23000.     *---------------------------------------------------------
  23001.     return (m.nFruValue * 96 / 10000 )
  23002. endcase
  23003. ENDPROC
  23004. PROCEDURE stripquotes
  23005. lparameter lcValue
  23006. do case
  23007. case left( m.lcValue, 1 ) == ["] and right( m.lcValue, 1 ) == ["]
  23008.     return substr( m.lcValue, 2, len( m.lcValue ) - 2 )
  23009. case left( m.lcValue, 1 ) == ['] and right( m.lcValue, 1 ) == [']
  23010.     return substr( m.lcValue, 2, len( m.lcValue ) - 2 )
  23011. otherwise
  23012.     return m.lcValue
  23013. endcase
  23014. ENDPROC
  23015. PROCEDURE getmetadatadomdoc
  23016. *=======================================================
  23017. * GetMetadataDomDoc( <frx> )
  23018. * Returns a reference to an MSXml.DomDocument with the 
  23019. * XML stored in the STYLE column of the current record in 
  23020. * the frx cursor. Default alias is "frx". 
  23021. * Check for null in case of errors.
  23022. * If the STYLE field is empty, a default XML document is
  23023. * returned.
  23024. *=======================================================
  23025. lparameter lcFrxAlias
  23026. local curSel, cXml, oDom
  23027. if empty( m.lcFrxAlias )
  23028.     lcFrxAlias = 'frx'
  23029. endif
  23030. if not used(m.lcFrxAlias) 
  23031.     return .null.
  23032. endif
  23033. curSel = select(0)
  23034. select (m.lcFrxAlias)
  23035. *------------------------------------------------------
  23036. * Extract the metadata XML from STYLE field of frx cursor 
  23037. * record, and put default xml in if its empty:
  23038. *------------------------------------------------------
  23039. cXml = STYLE
  23040. if empty( m.cXml )
  23041.     text noshow to m.cXml 
  23042. <VFPData>
  23043.     <reportdata name="" type="R" script="" execute="" execwhen="" class="" classlib="" declass="" declasslib=""/> 
  23044. </VFPData>     
  23045.     endtext
  23046.     replace STYLE with m.cXml
  23047. endif
  23048. select (m.curSel)
  23049. *------------------------------------------------------
  23050. * Create a DomDocument and load up the xml.
  23051. *------------------------------------------------------
  23052. oDom = createobject("MSXml.DomDocument")
  23053. oDom.loadXML( m.cXml )
  23054. return oDom
  23055. ENDPROC
  23056. PROCEDURE islayoutcontrol
  23057. lparameter iObjType
  23058. return inlist( m.iObjType, FRX_OBJTYP_LABEL, FRX_OBJTYP_LINE, FRX_OBJTYP_RECTANGLE, FRX_OBJTYP_FIELD, FRX_OBJTYP_PICTURE )
  23059. ENDPROC
  23060. PROCEDURE unpackmemberdata
  23061. *=======================================================
  23062. * UnpackMemberData( cFrxAlias, cMetaAlias )
  23063. * Creates a cursor containing rows from Memberdata (STYLE)
  23064. * Assumes: FRX cursor is located on correct record
  23065. * in the FRXDataSession
  23066. * Returns: .T. if it has successfully create (cAliasName)
  23067. *=======================================================
  23068. lparameter tcFrxAlias, tcMetaAlias, tiDataSession
  23069. local curSel, lcXml, llSuccess, liDataSession
  23070. llSuccess = .T.
  23071. if empty(m.tiDataSession) or (m.tiDataSession < 1)
  23072.    m.tiDataSession = set("datasession")
  23073. endif
  23074. m.liDataSession = set("datasession")
  23075. set datasession to (m.tiDataSession)   
  23076. curSel = select(0)
  23077. if empty( m.tcFrxAlias )
  23078.     tcFrxAlias = "frx"
  23079. endif
  23080. if empty( m.tcMetaAlias )
  23081.     tcMetaAlias = "memberdata"
  23082. endif
  23083. if not used(m.tcFrxAlias)
  23084.     set datasession to (m.liDataSession)       
  23085.     return .F.
  23086. endif
  23087. if used(m.tcMetaAlias)
  23088.     use in (m.tcMetaAlias)
  23089. endif
  23090. select (m.tcFrxAlias)
  23091. if empty(STYLE)
  23092.     *-------------------------------------
  23093.     * Use the default:
  23094.     *-------------------------------------
  23095.     lcXML = ""
  23096.     lcXml = trim(STYLE)
  23097.     if not inlist( left( upper( m.lcXml ),5), "<VFPD","<?XML")
  23098.         * OK. STYLE doesn't have XML in it.
  23099.         * We're not actually writing data back into the STYLE column yet,
  23100.         * and they might hit Cancel after they've opened the dialog.
  23101.         * So, create an empty memberdata cursor. The warning message 
  23102.         * should perhaps be done in the save, where they can cancel 
  23103.         * and check it out themselves.
  23104.         lcXml = ""
  23105.     endif
  23106. endif    
  23107. if m.llSuccess 
  23108.     llSuccess = THIS.XmlStrToCursor( m.lcXml, m.tcMetaAlias )
  23109. endif
  23110. select (m.curSel)
  23111. set datasession to (m.liDataSession)       
  23112. return m.llSuccess
  23113. ENDPROC
  23114. PROCEDURE packupmemberdata
  23115. *=======================================================
  23116. * PackupMemberData
  23117. * Converts the rows into XML and stores in STYLE column
  23118. * Assumes: FRX cursor is located on correct record
  23119. * in the FRXDataSession
  23120. * Returns: Success or Failure
  23121. *=======================================================
  23122. lparameter tcFrxAlias, tcMetaAlias, tiDataSession
  23123. local lcXml, liBytes, liSelect, liDataSession, llSuccess
  23124. if empty( m.tcFrxAlias )
  23125.     tcFrxAlias = "frx"
  23126. endif
  23127. if empty( m.tcMetaAlias )
  23128.     tcMetaAlias = "memberdata"
  23129. endif
  23130. if empty(m.tiDataSession) or (m.tiDataSession < 1)
  23131.    m.tiDataSession = set("datasession")
  23132. endif
  23133. m.liDataSession = set("datasession")
  23134. set DataSession to (m.tiDataSession)
  23135. liSelect  = select(0)
  23136. llSuccess = .T.
  23137. if not used(m.tcFrxAlias)
  23138.     m.llSuccess = .F.
  23139. endif
  23140. if not used(m.tcMetaAlias)
  23141.     m.llSuccess= .F.
  23142. endif
  23143. select (m.tcFrxAlias)
  23144. if not empty( STYLE )
  23145.     if not inlist( left( upper(alltrim(STYLE)),5), "<VFPD","<?XML")
  23146.         * OK. STYLE currently doesn't contain XML.
  23147.         * We must warn the user and let them cancel the operation
  23148.         * if they think the contents are important:
  23149.         if not THIS.QuietMode
  23150.             if messagebox(METADATA_NOT_XML_ERROR_LOC, 48+4, DEFAULT_MBOX_TITLE_LOC)=6
  23151.                 llSuccess = .T.
  23152.             else
  23153.                 llSuccess = .F.                            
  23154.             endif                
  23155.         else
  23156.             llSuccess = .T.                            
  23157.         endif    
  23158.     endif
  23159. endif
  23160. if m.llSuccess
  23161.     *--------------------------------------
  23162.     * Fix for SP2: force a "reportdata" node name
  23163.     *--------------------------------------
  23164.     select * from (m.tcMetaAlias) into cursor reportdata where not deleted()
  23165.     lcXml = THIS.CursorToXmlStr( "reportdata" )
  23166.     use in reportdata
  23167.     *--------------------------------------
  23168.     * Only save the XML into FRX.STYLE 
  23169.     * if it has changed from default:
  23170.     *--------------------------------------
  23171.     do case
  23172.     case empty(m.lcXml)
  23173.         replace STYLE with "" in (m.tcFrxAlias)
  23174.     case m.lcXml == DEFAULT_MEMBERDATA_XML
  23175.         replace STYLE with "" in (m.tcFrxAlias)
  23176.     case trim(upper(m.lcXml)) = "<VFPDATA/>"            
  23177.         replace STYLE with "" in (m.tcFrxAlias)
  23178.     otherwise    
  23179.         replace STYLE with m.lcXml in (m.tcFrxAlias)
  23180.     endcase
  23181. endif
  23182. select (m.liSelect)
  23183. set datasession to (m.liDataSession)       
  23184. return m.llSuccess
  23185. ENDPROC
  23186. PROCEDURE unpackfrxmemberdata
  23187. *=============================================================================
  23188. * UnpackFrxMemberData( frxAlias, memberdataAlias, FrxDataSession, NoIndex)
  23189. * Expands the XML contents of the STYLE column
  23190. * into a cursor (alias of your choice)
  23191. * for ALL ROWS IN THE SOURCE CURSOR
  23192. * Default parameter values are 'frx', 'memberdata'
  23193. *=============================================================================
  23194. lparameter tcFrxAlias, tcMetaAlias, tiDataSession, tlOmitIndex
  23195. local curSel, liRows, lcAttributes, liIndex, lcTempAlias, liSelect, llError, liDataSession
  23196. if empty(m.tiDataSession) or (m.tiDataSession < 1)
  23197.    m.tiDataSession = set("DATASESSION")
  23198. endif
  23199. m.liDataSession = set("DATASESSION")
  23200. set datasession to (m.tiDataSession)
  23201. if empty( m.tcFrxAlias )
  23202.     tcFrxAlias = "frx"
  23203. endif
  23204. if empty( m.tcMetaAlias )
  23205.     tcMetaAlias = "memberdata"
  23206. endif
  23207. if not used(m.tcFrxAlias)
  23208.     set datasession to (m.liDataSession)
  23209.     return .f.
  23210. endif
  23211. if used(m.tcMetaAlias)
  23212.     use in (m.tcMetaAlias)
  23213. endif
  23214. liSelect = select(0)
  23215. *------------------------------------------------------
  23216. * we're going to take every attribute, whether we understand 
  23217. * the column or not, but we'll start off with the core set
  23218. *------------------------------------------------------
  23219. lcAttributes = "|NAME|TYPE|SCRIPT|EXECUTE|EXECWHEN|CLASS|CLASSLIB|DECLASS|DECLASSLIB|"
  23220. create cursor (m.tcMetaAlias) ( ;
  23221.     FRXRECNO i, ;
  23222.     NAME m, ;
  23223.     TYPE c(1), ;
  23224.     EXECWHEN m, ;
  23225.     EXECUTE m, ;
  23226.     CLASS m, ;
  23227.     CLASSLIB m, ;
  23228.     DECLASS m, ;
  23229.     DECLASSLIB m, ;
  23230.     SCRIPT m )
  23231. select (m.tcFrxAlias)
  23232. lcTempAlias = "T" + sys(2015)
  23233. go top
  23234. scan while not m.llError for PLATFORM = FRX_PLATFORM_WINDOWS and not (empty(STYLE) or deleted())
  23235.     if len(alltrim(STYLE))<5
  23236.         *---------------------------------------------
  23237.         * ENH for SP2:
  23238.         * This is probably not invalid XML. 
  23239.         * This is probably migrated FP2.x style data
  23240.         * Therefore ignore:
  23241.         *---------------------------------------------
  23242.         loop
  23243.     endif
  23244.         XmlToCursor(STYLE, m.lcTempAlias)
  23245.     catch to oErr
  23246.         *---------------------------------------------
  23247.         * Invalid XML, will be ignored for this record
  23248.         *---------------------------------------------
  23249.        if not this.QuietMode        
  23250.             messagebox(oErr.Message + chr(13) + METADATA_LOAD_ERROR_LOC , ;
  23251.                         MB_ICONEXCLAMATION, ;
  23252.                         DEFAULT_MBOX_TITLE_LOC)
  23253.        endif    
  23254.     finally
  23255.         if used(m.lcTempAlias)
  23256.             if reccount(m.lcTempAlias) > 0
  23257.                 select (m.lcTempAlias)
  23258.                 for m.liIndex = 1 to fcount()
  23259.                     if atc("|"+field(m.liIndex)+"|",m.lcAttributes) = 0
  23260.                         try
  23261.                                alter table (m.tcMetaAlias) add column (field(liIndex)) M
  23262.                             m.lcAttributes = m.lcAttributes + field(m.liIndex) + "|"
  23263.                         catch to oErr
  23264.                            m.llError = .T.
  23265.                            exit
  23266.                         endtry 
  23267.                     endif
  23268.                 endfor
  23269.                 select (m.tcFrxAlias)
  23270.                 if m.llError 
  23271.                    if not this.QuietMode
  23272.                         messagebox(oErr.Message + chr(13) + METADATA_CUMULATIVE_ERROR_LOC , ;
  23273.                                     MB_ICONEXCLAMATION, ;
  23274.                                     DEFAULT_MBOX_TITLE_LOC)
  23275.                    endif
  23276.                 else
  23277.                     *---------------------------------------------
  23278.                     * Re-import the XML into the new structure:
  23279.                     *---------------------------------------------                
  23280.                     XmlToCursor( STYLE, m.tcMetaAlias, 8192 ) 
  23281.                     select (m.tcMetaAlias)
  23282.                     replace FRXRECNO with recno(m.tcFrxAlias) for empty(FRXRECNO)
  23283.                 endif
  23284.             endif
  23285.             use in (m.lcTempAlias)
  23286.         endif
  23287.     endtry
  23288.     select (m.tcFrxAlias)
  23289. endscan
  23290. if not m.tlOmitIndex
  23291.     select (m.tcMetaAlias)
  23292.     index on FRXRECNO tag FRXRECNO
  23293. endif
  23294. select (m.liSelect)
  23295. set datasession to (m.liDataSession)
  23296. return .T.
  23297. ENDPROC
  23298. PROCEDURE getfrxrecdisplayname
  23299. *======================================================
  23300. * GetFrxRecDisplayName()
  23301. * Assumes: current alias is the source FRX 
  23302. *======================================================
  23303. lparameter tlIncludeRecno
  23304. local retVal
  23305. retVal = ""
  23306. do case
  23307. case OBJTYPE = FRX_OBJTYP_REPORTHEADER
  23308.     retVal = TARGET_REPORT_GLOBAL_LOC
  23309. case OBJTYPE = FRX_OBJTYP_LABEL
  23310.     *retVal = TARGET_TEXT_LABEL_LOC + ": " + trim(EXPR)
  23311.     retVal = THIS.stripQuotes(trim(EXPR))
  23312. case OBJTYPE = FRX_OBJTYP_FIELD
  23313.     *retVal = TARGET_FIELD_LOC + ": " + trim(EXPR)
  23314.     retVal = THIS.stripQuotes(trim(EXPR))
  23315. case OBJTYPE = FRX_OBJTYP_LINE
  23316.     retVal = TARGET_LINE_LOC
  23317. case OBJTYPE = FRX_OBJTYP_RECTANGLE
  23318.     retVal = TARGET_BOX_LOC
  23319. case OBJTYPE = FRX_OBJTYP_PICTURE
  23320.     if not empty(NAME)
  23321.         *retVal = TARGET_PICTURE_LOC + ": " + trim(NAME)
  23322.         retVal = THIS.stripQuotes(trim(NAME))
  23323.     else
  23324.         *retVal = TARGET_PICTURE_LOC + ": " + trim(PICTURE)
  23325.         retVal = THIS.stripQuotes(trim(PICTURE))
  23326.     endif            
  23327. case OBJTYPE = FRX_OBJTYP_BAND
  23328.     do case
  23329.     case OBJCODE = FRX_OBJCOD_TITLE
  23330.         retVal = TARGET_TITLE_LOC 
  23331.     case OBJCODE = FRX_OBJCOD_PAGEHEADER
  23332.         retVal = TARGET_PAGE_HEADER_LOC 
  23333.     case OBJCODE = FRX_OBJCOD_COLHEADER
  23334.         retVal = TARGET_COL_HEADER_LOC
  23335.     case OBJCODE = FRX_OBJCOD_GROUPHEADER
  23336.         retVal = TARGET_GROUP_HEADER_LOC + ": " + THIS.stripQuotes(trim(EXPR))
  23337.     case OBJCODE = FRX_OBJCOD_DETAIL
  23338.         retVal = TARGET_DETAIL_LOC
  23339.     case OBJCODE = FRX_OBJCOD_GROUPFOOTER
  23340.         retVal = TARGET_GROUP_FOOTER_LOC 
  23341.     case OBJCODE = FRX_OBJCOD_COLFOOTER
  23342.         retVal = TARGET_COL_FOOTER_LOC 
  23343.     case OBJCODE = FRX_OBJCOD_PAGEFOOTER
  23344.         retVal = TARGET_PAGE_FOOTER_LOC
  23345.     case OBJCODE = FRX_OBJCOD_SUMMARY
  23346.         retVal = TARGET_SUMMARY_LOC 
  23347.     case OBJCODE = FRX_OBJCOD_DETAILHEADER
  23348.         retVal = TARGET_DETAIL_HEADER_LOC
  23349.     case OBJCODE = FRX_OBJCOD_DETAILFOOTER
  23350.         retVal = TARGET_DETAIL_FOOTER_LOC
  23351.     endcase
  23352. case OBJTYPE = FRX_OBJTYP_GROUP
  23353.     retVal = TARGET_GROUPED_LOC + " (" + trans(HPOS)+")"
  23354. otherwise
  23355.     retVal = TARGET_UNKNOWN_LOC
  23356. endcase
  23357. if m.tlIncludeRecno
  23358.     retVal = "["+trans(recno())+"] " + m.retVal
  23359. endif
  23360. return m.retVal
  23361. ENDPROC
  23362. PROCEDURE xmlstrtocursor
  23363. *===============================================================
  23364. * XmlStrToCursor( xml, alias )
  23365. * Returns: Logical/Success
  23366. * Notes: will close/recreate alias if already open
  23367. *===============================================================
  23368. lparameter tcXml, tcMetaAlias
  23369. local curSel, liRows, cAddColumns, cStandardSet
  23370. if used( m.tcMetaAlias )
  23371.     use in (m.tcMetaAlias)
  23372. endif
  23373. curSel = select(0)
  23374. *-----------------------------
  23375. * Create initial empty cursor
  23376. *-----------------------------
  23377. create Cursor (m.tcMetaAlias) (;
  23378.         NAME m, ;
  23379.         TYPE c(1), ;
  23380.         SCRIPT m, ;
  23381.         EXECUTE m, ;
  23382.         EXECWHEN m, ;
  23383.         CLASS m, ;
  23384.         CLASSLIB m, ;
  23385.         DECLASS m, ;
  23386.         DECLASSLIB m )
  23387. if empty( m.tcXml ) ;
  23388. or upper(trim(m.tcXml))="<VFPDATA/>"
  23389.     *--------------------------------------------------
  23390.     * Done. Empty memberdata means cursor with no records
  23391.     *--------------------------------------------------
  23392.     select (m.curSel)
  23393.     return .T.
  23394. endif
  23395. local tmpAlias
  23396. tmpAlias     = 'T' + sys(2015)
  23397.     *----------------------------------------------
  23398.     * Get the metadata out of the XML and into a cursor
  23399.     *----------------------------------------------
  23400.     liRows = XMlToCursor( m.tcXml, m.tmpAlias )
  23401. catch to oErr 
  23402.     *----------------------------------------------------
  23403.     * Inform of error and offer to reset to default:
  23404.     *----------------------------------------------------        
  23405.    if not this.QuietMode            
  23406.         if messagebox( oErr.Message + chr(13) + METADATA_XML_REPLACE_LOC,48+4,DEFAULT_MBOX_TITLE_LOC) = 6
  23407.             *----------------------------------------------------
  23408.             * XML is invalid. Replace with default and re-load:
  23409.             *----------------------------------------------------        
  23410.             tcXml = DEFAULT_MEMBERDATA_XML
  23411.             liRows = XMlToCursor( m.tcXml, m.tmpAlias )
  23412.         else
  23413.             *----------------------------------------------------
  23414.             * Fall out the bottom and return .F.
  23415.             *----------------------------------------------------
  23416.             if used(m.tmpAlias)
  23417.                 use in (m.tmpAlias)
  23418.             endif
  23419.         endif
  23420.     else
  23421.         if used(m.tmpAlias)
  23422.             use in (m.tmpAlias)
  23423.         endif
  23424.     endif
  23425. endtry
  23426. if used( m.tmpAlias )
  23427.     *----------------------------------------------
  23428.     * check for additional columns:
  23429.     *----------------------------------------------
  23430.     local cAddColumns, i
  23431.     cAddColumns  = ""
  23432.     select (m.tmpAlias)
  23433.     for m.i = 1 to fcount()
  23434.         if not ("|"+field(m.i)+"|" $ "|NAME|TYPE|SCRIPT|EXECUTE|EXECWHEN|CLASS|CLASSLIB|DECLASS|DECLASSLIB|")
  23435.             *----------------------------------------------
  23436.             * column is not part of the standard set.
  23437.             * Must add it to the metadata cursor:
  23438.             *----------------------------------------------
  23439.             m.cAddColumns = m.cAddColumns + " ADD COLUMN " + field(m.i) + " M"
  23440.         endif            
  23441.     endfor    
  23442.     if not empty( m.cAddColumns)
  23443.         *----------------------------------------------
  23444.         * Update metadata structure:
  23445.         *----------------------------------------------
  23446.         alter table (m.tcMetaAlias) &cAddColumns
  23447.     endif
  23448.     use in (m.tmpAlias)
  23449.     *----------------------------------------------
  23450.     * Extract into final cursor:
  23451.     *----------------------------------------------
  23452.     liRows = XMlToCursor( m.tcXml, m.tcMetaAlias, 8192 )
  23453.     select (m.curSel)
  23454.     return .T.
  23455. else    
  23456.     if used(m.tcMetaAlias)
  23457.         use in (m.tcMetaAlias)
  23458.     endif
  23459.     select (m.curSel)
  23460.     return .F.
  23461. endif
  23462. ENDPROC
  23463. PROCEDURE cursortoxmlstr
  23464. *===============================================================
  23465. * CursorToXmlStr( alias )
  23466. * Returns: String
  23467. * Notes: Respects DELETED flag
  23468. *===============================================================
  23469. lparameter tcMetaAlias
  23470. local lcXml, liBytes
  23471. if not used( m.tcMetaAlias )
  23472.     return ""
  23473. endif
  23474. if reccount( m.tcMetaAlias ) = 0
  23475.     return ""
  23476. endif
  23477. lcXml   = ""
  23478. if set("DELETED")="OFF"
  23479.     set deleted on
  23480.     liBytes = CursorToXml(m.tcMetaAlias, "lcXml", 2 )
  23481.     set deleted off
  23482.     liBytes = CursorToXml(m.tcMetaAlias, "lcXml", 2 )
  23483. endif
  23484. *----------------------------------------------
  23485. * Strip out "<?xml ... ?>" header
  23486. *----------------------------------------------
  23487. if at("?>",m.lcXml) > 0
  23488.     lcXml = alltrim(substr(m.lcXml,at("?>",m.lcXml)+4))
  23489. endif
  23490. if m.liBytes = 0
  23491.     return ""
  23492.     return m.lcXml
  23493. endif
  23494. ENDPROC
  23495. PROCEDURE quietmode_assign
  23496. LPARAMETERS tvNewVal
  23497. IF VARTYPE(tvNewVal) = "L"
  23498.    THIS.quietmode = m.tvNewVal
  23499. ENDIF   
  23500. ENDPROC
  23501. PROCEDURE generateevaluatecontentsscript
  23502. LPARAMETERS tcFRXAlias, tcMemberDataAlias, tiDataSession
  23503. LOCAL liDataSession
  23504. IF EMPTY(m.tiDataSession) OR (m.tiDataSession < 1)
  23505.    m.tiDataSession = SET("DATASESSION")
  23506. ENDIF
  23507. m.liDataSession = SET("DATASESSION")
  23508. SET DATASESSION TO (m.tiDataSession)
  23509. IF EMPTY(m.tcFRXAlias)
  23510.    m.tcFRXAlias = "FRX"
  23511. ENDIF
  23512. IF EMPTY(m.tcMemberDataAlias)
  23513.     m.tcMemberDataAlias = "memberdata"
  23514. ENDIF
  23515. IF NOT (USED(m.tcFRXAlias) AND USED(m.tcMemberDataAlias))
  23516.    SET DATASESSION TO (m.liDataSession)
  23517.    RETURN ""
  23518. ENDIF
  23519. LOCAL m.lcResult, m.liSelect, m.lcConditions, m.liColor, ;
  23520.       m.lcTextMergeDelims, m.lcTextMerge, m.llTextMerge, ;
  23521.       m.lcTextMergeShow, m.lcExpDelim1, m.lcExpDelim2
  23522. IF TYPE(m.tcMemberDataAlias + ".FRXRecno") = "N"
  23523.     m.lcConditions = "FRXRecno = " + TRANSFORM(RECNO(m.tcFRXAlias)) + " AND "
  23524.     m.lcConditions = ""
  23525. ENDIF
  23526. m.lcConditions = m.lcConditions + ;
  23527.                  "Type = '" + FRX_BLDR_MEMBERDATATYPE + "' AND " + ;
  23528.                  "Name = '" + FRX_BLDR_NAMESPACE_EVALUATECONTENTS  +"' "
  23529. m.liSelect = SELECT(0)
  23530. SELECT (m.tcMemberDataAlias)
  23531. LOCATE FOR &lcConditions.
  23532. IF EOF()
  23533.    m.lcConditions = ""
  23534.    m.lcTextMergeDelims = SET("TEXTMERGE",1)
  23535.    m.llTextMerge = (SET("TEXTMERGE") == "ON")
  23536.    m.lcTextMerge = SET("TEXTMERGE",2)
  23537.    m.lcTextMergeShow = SET("TEXTMERGE",3)
  23538.    SET TEXTMERGE DELIMITERS TO
  23539.    SET TEXTMERGE TO MEMVAR m.lcResult NOSHOW
  23540.    SET TEXTMERGE ON
  23541.    \LPARAMETERS m.toListener, m.tP1, m.tP2 
  23542.    \ * <<FRXSCRIPTWRITER_GENERAL_LOC >>
  23543.    \ * <<FRXSCRIPTWRITER_EVALUATECONTENTS_LOC>>
  23544.    \ * FRXRECNO: <<RECNO("frx")>>, EXPR: <<FRX.Expr>>
  23545.    \ 
  23546.    \ * <<FRXSCRIPTWRITER_DYNAMICPARAMS1_LOC>>
  23547.    \ * <<FRXSCRIPTWRITER_DYNAMICPARAMS2_LOC>>
  23548.    \ * <<FRXSCRIPTWRITER_DYNAMICPARAMS3_LOC>>
  23549.    \ * <<FRXSCRIPTWRITER_DYNAMICPARAMS4_LOC>>
  23550.    \LOCAL m.nFRXRecno, m.oProps 
  23551.    \m.nFRXRecno = m.tP1
  23552.    \m.oProps = m.tP2
  23553.    \m.oProps.Reload = .T.   
  23554.    \TRY
  23555.    \   SET DATASESSION TO (m.toListener.CurrentDataSession)
  23556.    \   * <<FRXSCRIPTWRITER_CONDITIONRULES_LOC>>
  23557.    \   DO CASE
  23558.           SCAN ALL FOR &lcConditions. 
  23559.    \   CASE <<IIF(EMPTY(ExecWhen), ".T.", ExecWhen)>> && <<FRXSCRIPTWRITER_USERLABEL_LOC>> <<Execute>>
  23560.           IF NOT EMPTY(Script)
  23561.              DO CASE 
  23562.              CASE NOT ["] $ Script
  23563.                 STORE ["] TO m.lcDelim1, m.lcDelim2
  23564.              CASE NOT ['] $ Script
  23565.                 STORE ['] TO m.lcDelim1, m.lcDelim2             
  23566.              OTHERWISE
  23567.                 * may not work but we only have three delimiter choices!
  23568.                 m.lcDelim1 = "["
  23569.                 m.lcDelim2 = "]"                
  23570.              ENDCASE
  23571.              \      * <<FRXSCRIPTWRITER_EVALRULES1_LOC>>
  23572.              \      * <<FRXSCRIPTWRITER_EXPRESSIONRULES_LOC>>
  23573.              \      IF TYPE(<<m.lcDelim1>><<Script>><<m.lcDelim2>>) # "U"
  23574.              \         m.oProps.Text = TRANSFORM(<<Script>>)
  23575.              \      ELSE
  23576.              \         * <<FRXSCRIPTWRITER_EVALRULES2_LOC>>          
  23577.              \         SET DATASESSION TO (m.toListener.FRXDataSession)           
  23578.              \         IF TYPE(<<m.lcDelim1>><<Script>><<m.lcDelim2>>) # "U"
  23579.              \            m.oProps.Text = TRANSFORM(<<Script>>)
  23580.              \         ENDIF
  23581.              \         SET DATASESSION TO (m.toListener.CurrentDataSession)                     
  23582.              \      ENDIF
  23583.           ENDIF
  23584.              \      * <<FRXSCRIPTWRITER_EVALRULES3_LOC>>   
  23585.           IF NOT (EMPTY(PenRGB) OR VAL(PenRGB) = -1)
  23586.              m.liColor = VAL(PenRGB)
  23587.              \      m.oProps.PenRed = <<INT(MOD(m.liColor,256))>>
  23588.              \      m.oProps.PenGreen = <<MOD(INT(m.liColor/256),256)>>
  23589.              \      m.oProps.PenBlue = <<MOD(INT(m.liColor/(256*256)),256)>>
  23590.           ENDIF
  23591.           IF NOT (EMPTY(FillRGB) OR VAL(FillRGB) = -1)
  23592.              m.liColor = VAL(FillRGB)
  23593.              \      m.oProps.FillRed = <<INT(MOD(m.liColor,256))>>
  23594.              \      m.oProps.FillGreen = <<MOD(INT(m.liColor/256),256)>>
  23595.              \      m.oProps.FillBlue = <<MOD(INT(m.liColor/(256*256)),256)>>
  23596.           ENDIF
  23597.           IF NOT (EMPTY(PenA) OR VAL(PenA) = -1)
  23598.              \      m.oProps.PenAlpha = <<PenA>>
  23599.           ENDIF
  23600.           IF NOT (EMPTY(FillA) OR VAL(FillA) = -1)
  23601.              \      m.oProps.FillAlpha = <<FillA>>
  23602.           ENDIF
  23603.           IF NOT EMPTY(FName)
  23604.              \      m.oProps.FontName = "<<FName>>"
  23605.           ENDIF
  23606.           IF NOT EMPTY(FStyle)
  23607.              \      m.oProps.FontStyle = <<ABS(INT(VAL(FStyle)))>>
  23608.           ENDIF
  23609.           IF NOT (EMPTY(FSize) OR EMPTY(VAL(FSize)) OR VAL(FSize) = -1)
  23610.              \      m.oProps.FontSize = <<ABS(INT(VAL(FSize)))>>
  23611.           ENDIF
  23612.           ENDSCAN
  23613.    \   OTHERWISE  && <<FRXSCRIPTWRITER_DEFAULT_LOC>>
  23614.    \      m.oProps.Reload = .F.   
  23615.    \   ENDCASE
  23616.    \CATCH WHEN .T.
  23617.    \   m.oProps.Reload = .F.   
  23618.    \FINALLY
  23619.    \   SET DATASESSION TO (m.toListener.FRXDataSession)
  23620.    \ENDTRY
  23621.    SET TEXTMERGE OFF
  23622.    SET TEXTMERGE TO
  23623.    IF EMPTY(m.lcResult)
  23624.       m.lcConditions = ""
  23625.    ELSE
  23626.       m.lcConditions = m.lcResult && we must swap to a new variable before the reset
  23627.    ENDIF   
  23628.    THIS.resetTextMerge(m.lcTextMergeDelims, ;
  23629.                        m.lcTextMerge, m.llTextMerge, ;
  23630.                        m.lcTextMergeShow)
  23631. ENDIF
  23632. SELECT (m.liSelect)
  23633. SET DATASESSION TO (m.liDataSession)
  23634. RETURN m.lcConditions
  23635. ENDPROC
  23636. PROCEDURE generateadjustobjectsizescript
  23637. LPARAMETERS tcFRXAlias, tcMemberDataAlias,tiDataSession
  23638. LOCAL liDataSession
  23639. IF EMPTY(m.tiDataSession) OR (m.tiDataSession < 1)
  23640.    m.tiDataSession = SET("DATASESSION")
  23641. ENDIF
  23642. m.liDataSession = SET("DATASESSION")
  23643. SET DATASESSION TO (m.tiDataSession)
  23644. IF EMPTY(m.tcFRXAlias)
  23645.    m.tcFRXAlias = "FRX"
  23646. ENDIF
  23647. IF EMPTY(m.tcMemberDataAlias)
  23648.     m.tcMemberDataAlias = "memberdata"
  23649. ENDIF
  23650. IF NOT (USED(m.tcFRXAlias) AND USED(m.tcMemberDataAlias))
  23651.    SET DATASESSION TO (m.liDataSession)
  23652.    RETURN ""
  23653. ENDIF
  23654. LOCAL m.lcResult, m.liSelect, m.lcConditions,  ;
  23655.       m.lcTextMergeDelims, m.lcTextMerge, m.llTextMerge, ;
  23656.       m.lcTextMergeShow
  23657. IF TYPE(m.tcMemberDataAlias + ".FRXRecno") = "N"
  23658.     m.lcConditions = "FRXRecno = " + TRANSFORM(RECNO(m.tcFRXAlias)) + " AND "
  23659.     m.lcConditions = ""
  23660. ENDIF
  23661. m.lcConditions = m.lcConditions + ;
  23662.                  "Type = '" + FRX_BLDR_MEMBERDATATYPE + "' AND " + ;
  23663.                  "Name = '" + FRX_BLDR_NAMESPACE_ADJUSTOBJECTSIZE  +"' "
  23664. m.liSelect = SELECT(0)
  23665. SELECT (m.tcMemberDataAlias)
  23666. LOCATE FOR &lcConditions.
  23667. IF EOF()
  23668.    m.lcConditions = ""
  23669.    m.lcTextMergeDelims = SET("TEXTMERGE",1)
  23670.    m.llTextMerge = (SET("TEXTMERGE") == "ON")
  23671.    m.lcTextMerge = SET("TEXTMERGE",2)
  23672.    m.lcTextMergeShow = SET("TEXTMERGE",3)
  23673.    SET TEXTMERGE DELIMITERS TO
  23674.    SET TEXTMERGE TO MEMVAR m.lcResult NOSHOW
  23675.    SET TEXTMERGE ON
  23676.    \LPARAMETERS m.toListener, m.tP1, m.tP2 
  23677.    \ * <<FRXSCRIPTWRITER_GENERAL_LOC >>
  23678.    \ * <<FRXSCRIPTWRITER_ADJUSTOBJECTSIZE_LOC>>
  23679.    \ * FRXRECNO: <<RECNO("frx")>>, TYPE: <<FRX.ObjType>>
  23680.    \ 
  23681.    \ * <<FRXSCRIPTWRITER_DYNAMICPARAMS1_LOC>>
  23682.    \ * <<FRXSCRIPTWRITER_DYNAMICPARAMS2_LOC>>
  23683.    \ * <<FRXSCRIPTWRITER_DYNAMICPARAMS3_LOC>>
  23684.    \ * <<FRXSCRIPTWRITER_DYNAMICPARAMS4_LOC>>
  23685.    \LOCAL m.nFRXRecno, m.oProps 
  23686.    \m.nFRXRecno = m.tP1
  23687.    \m.oProps = m.tP2
  23688.    \m.oProps.Reload = .T.   
  23689.    \TRY
  23690.    \   SET DATASESSION TO (m.toListener.CurrentDataSession)
  23691.    \   * <<FRXSCRIPTWRITER_CONDITIONRULES_LOC>>
  23692.    \   LOCAL liTemp
  23693.    \   * <<FRXSCRIPTWRITER_ADJUSTOBJRULES1_LOC>>
  23694.    \   * <<FRXSCRIPTWRITER_ADJUSTOBJRULES2_LOC>>
  23695.    \   * <<FRXSCRIPTWRITER_ADJUSTOBJRULES3_LOC>>
  23696.    \   DO CASE
  23697.           SCAN ALL FOR &lcConditions. 
  23698.    \   CASE <<IIF(EMPTY(ExecWhen), ".T.", ExecWhen)>> && <<FRXSCRIPTWRITER_USERLABEL_LOC>> <<Execute>>
  23699.              \      IF <<Width>> > -1 AND ;
  23700.              \         <<Width>> < FRX_RUNTIME_LAYOUT_DIMENSION_LIMIT 
  23701.              \         m.oProps.Width = INT(<<Width>>)   
  23702.              \      ENDIF
  23703.              \      IF <<Height>> > -1 AND ;
  23704.              \         <<Height>> < FRX_RUNTIME_LAYOUT_DIMENSION_LIMIT AND ;
  23705.              \         ((INT(<<Height>>) < m.oProps.MaxHeightAvailable) ;
  23706.              \          OR (NOT m.oProps.Reattempt))
  23707.              \         m.oProps.Height = INT(<<Height>>)
  23708.              \      ENDIF
  23709.         ENDSCAN
  23710.    \   OTHERWISE  && <<FRXSCRIPTWRITER_DEFAULT_LOC>>
  23711.    \      m.oProps.Reload = .F.   
  23712.    \   ENDCASE
  23713.    \CATCH WHEN .T.
  23714.    \   m.oProps.Reload = .F.   
  23715.    \FINALLY
  23716.    \   SET DATASESSION TO (m.toListener.FRXDataSession)
  23717.    \ENDTRY
  23718.    SET TEXTMERGE OFF
  23719.    SET TEXTMERGE TO
  23720.    IF EMPTY(m.lcResult)
  23721.       m.lcConditions = ""
  23722.    ELSE
  23723.       m.lcConditions = m.lcResult && we must swap to a new variable before the reset
  23724.    ENDIF   
  23725.    THIS.resetTextMerge(m.lcTextMergeDelims, ;
  23726.                        m.lcTextMerge, m.llTextMerge, ;
  23727.                        m.lcTextMergeShow)
  23728. ENDIF   
  23729. SELECT (m.liSelect)
  23730. SET DATASESSION TO (m.liDataSession)
  23731. RETURN m.lcConditions
  23732. ENDPROC
  23733. PROCEDURE resettextmerge
  23734. LPARAMETERS tcDelimiters, m.tcTextMerge, m.tlTextMerge,m.tcTextMergeShow
  23735. if m.tcDelimiters <> set("TEXTMERGE",1)
  23736.     *-----------------------------------
  23737.     * They're using custom delimiters: 
  23738.     * Restore them
  23739.     *-----------------------------------
  23740.     local delimSize, leftDelim, rightDelim
  23741.     && it's either 1 or 2:
  23742.     m.delimSize = int(len(m.lcTextMergeDelims)/2)
  23743.     m.leftDelim  = left(  m.lcTextMergeDelims, m.delimSize )
  23744.     m.rightDelim = right( m.lcTextMergeDelims, m.delimSize )
  23745.     set textmerge delimiters to m.leftDelim, m.rightDelim
  23746. endif
  23747. if m.tlTextMerge
  23748.    set textmerge on &tcTextMergeShow.
  23749.    set textmerge off
  23750. endif 
  23751. if not empty(m.tcTextMerge)
  23752.    set textmerge to &tcTextMerge. additive 
  23753. endif   
  23754. ENDPROC
  23755. PROCEDURE Init
  23756. *=======================================================
  23757. * Init()
  23758. *=======================================================
  23759. *---------------------------------
  23760. * Determine the screen DPI:
  23761. *---------------------------------
  23762. #define LOGPIXELSX 88
  23763. declare integer GetDeviceCaps in WIN32API integer HDC, integer item
  23764. declare integer GetDC         in WIN32API integer hWnd
  23765. declare integer ReleaseDC     in WIN32API integer hWnd, integer HDC
  23766. local hdc, screenDPI
  23767. hdc    = GetDC(0)
  23768. THIS.screenDPI = GetDeviceCaps( m.hdc, LOGPIXELSX )
  23769. ReleaseDC( 0, m.hdc )
  23770. *---------------------------------------------------
  23771. * Fixed for SP1: 
  23772. * The ReportBuilder client will 
  23773. * reset .ScreenDPI to 96 so that it is correct 
  23774. * for design-time report designer use, even if
  23775. * at run-time the app is running on higher-res 
  23776. * screens.
  23777. *---------------------------------------------------
  23778. *---------------------------------------------------
  23779. * No ui feedback if not appropriate (servers, etc):
  23780. *---------------------------------------------------
  23781. THIS.QuietMode = !inlist(_VFP.Startmode, 0, 4)
  23782. ENDPROC
  23783. ~~~~~~
  23784. ~~~~~~
  23785. kkmkjkjhh|zx|zx{zx{zx{zx{zx{zx{zx|zx|zxjhhkjkkkm
  23786. a`_ca`ba`b`_b`_b`_b`_b`_b`_b`_b`_ba`ca`a`_
  23787. {yw}{y}{y}{y}{y}{y}{y}{y}{y}{y}{y}{y}{y{yw
  23788. vtsywvywwyxwyxwyxwyxwyxwyxwyxwyxwyxwyxwywwywvvts
  23789. gednlkpnmpnmpnmpnmpnmpnmpnmpnmpnmpnmpnmpnmpnmpnmnlkged
  23790. ~}ywv
  23791. }|yvu
  23792. jhhnlnTVWSTTSSTSSTSSTSSTSSTSSTSSTSSTSSTSSTSTTTVWnlnjhh
  23793. ~~~||||||~
  23794. ||||||~~~
  23795. &%#&%#&%#
  23796. &%#&%#&%#
  23797. &%#''%'&$
  23798. '&%'&%&%#
  23799. '&$)(%((%
  23800. ('%*)'**'
  23801. +*(*)'('%
  23802. )(&-+),+)
  23803. ,+),,))(&
  23804. **(/.+/.+
  23805. .-+.-++)(
  23806. ,*(1/-1/.
  23807. 1/-10-,+(
  23808. -+*42/320
  23809. 410410-,*
  23810. .-+642642
  23811. 642642.-+
  23812. 0/,865865
  23813. 9758740.-
  23814. 1/-;97;97
  23815. ;97;971/-
  23816. 20/><9=;:
  23817. ><:><:31/
  23818. 421A><A><
  23819. A><A?<431
  23820. 642DA?CA?
  23821. CA?DA?542
  23822. 753FDBGDA
  23823. FDBFDB753
  23824. 975IGDIGD
  23825. IFDIFD875
  23826. ;86LIGLIGLIGLIGLIGLIGLIGLIGLIGLIGKIGLIGLIGKIGLIGLIGKIGLIGKIGLIGLIGKIGLIGLIGKIGLIG:86
  23827. <97OLJOKJOLIOLJOLJOLI>;9>;:=;:=;:>;9=;9>;:=;:=;9>;9=;:=;:>;9>;9>;:=;:NKIOLJOKINKJ<97
  23828. =:9QNLQOLRNLnlk`\Y`\Y
  23829. ?=;QNLQNLQNLQNL=;9
  23830. >;:TPNTQNTQO`\YKGFKGF
  23831. 0/-HDBHDB
  23832. B>=SQNTPNTQNTQO><;
  23833. @=;VSQVSQVSP`\YKGFVSQ
  23834. 0/-HDBHDB
  23835. C@?VSQVSQVSQVSP@>;
  23836. A?=XUSXUSXUS`\YKGFXUS
  23837. 0/-HDBHDB
  23838. EBAYUSXUSXUSXUS@?=
  23839. B?>[WU[WUZWU`\YKGF[WU
  23840. 0/-HDBHDB
  23841. GDB[WU[WU[WUZVUB?>
  23842. CA?\YV\XW\YW`\YKGF]YV
  23843. 0/-HDBHDB
  23844. IEC]YW\XW]YW\YWC@?
  23845. DA@^[X^ZY^ZX`\YKGF^ZY
  23846. 0/-HDBHDB
  23847. IFE^[X^[X^[X^ZYDA@
  23848. EBA`[Y`\Y`[Z`\YKGF_\Z
  23849. 0/-0/-0/-
  23850. JGF_[Z`[Z`\ZnlkEBA
  23851. nlknlk`\YKGFnlk
  23852. VTTnlknlk
  23853. FCAYUT
  23854. a][FCBFCAFCB`\YKGFFCB
  23855. 744FCAFCBFCAYUTMJI
  23856. =y9DH9DHclo
  23857. uudrnY
  23858. |epmXdcQutd
  23859. khTwnajxk|
  23860. igSwla@S\ r
  23861. z_tsd
  23862. srbzkU
  23863. z_zkUqp_
  23864. srbbaOsrb
  23865. LANGUAGE
  23866. LOCALLANG
  23867. LASTUPDATE
  23868. CCODEPAGE
  23869. PRINT
  23870. MENUTOP
  23871. MENUPREV
  23872. MENUNEXT
  23873. MENULAST
  23874. MENUGOTO
  23875. MENUSHOWPA
  23876. MENUPRINT
  23877. MENUCLOSE
  23878. MENUTOOLB
  23879. ONEPGMENU
  23880. TWOPGMENU
  23881. FOURPGMENU
  23882. CBOZOOMWHO
  23883. CBOZOOMTTI
  23884. CBOZOOMPGW
  23885. CMDGOTOPGT
  23886. ONEPGTTIP
  23887. TWOPGTTIP
  23888. FOURPGTTIP
  23889. REPORTTITL
  23890. ERR_CREATI
  23891. ERROR
  23892. ERRNOPRINT
  23893. MENUPROOF
  23894. COPIES
  23895. SAVEREPORT
  23896. SAVEASIMAG
  23897. SAVEASPDF
  23898. SAVEASHTML
  23899. SAVEASRTF
  23900. SAVEASXLS
  23901. SAVEASTXT
  23902. SAVEPATH
  23903. SENDTOEMAI
  23904. CLOSEREPOR
  23905. PRINTREPOR
  23906. MINIATURES
  23907. GLOBALPREV
  23908. AVAILABLEP
  23909. GOTOPG_CAP
  23910. GOTOPG_OK
  23911. CANCEL
  23912. PRINTINGPR
  23913. PREFCAPTIO
  23914. PREFTAB
  23915. PREFBUTTON
  23916. PREFPGINTE
  23917. PREFALLPG
  23918. PREFCURRPG
  23919. PREFPAGES
  23920. MINILABEL
  23921. PAGECAPTIO
  23922. MINIFIRSTT
  23923. MINILASTTI
  23924. MININEXTTI
  23925. MINIPREVTI
  23926. SETUP
  23927. SETUPTITLE
  23928. GENERAL
  23929. CUSLANGUAG
  23930. TBARVISIBL
  23931. DOCKPOSITI
  23932. CANVASCNT
  23933. ZOOMLEVEL
  23934. WNDSTATE
  23935. MINIPERPG
  23936. VISIBLE
  23937. INVISIBLE
  23938. UNDOCKED
  23939. TBONTOP
  23940. TBONLEFT
  23941. TBONRIGHT
  23942. TBONBOTTOM
  23943. USERESOURC
  23944. NORMAL
  23945. MINIMIZED
  23946. MAXIMIZED
  23947. CONTROLS
  23948. OUTPUT
  23949. EMAIL
  23950. EMAILMODE
  23951. ATTACHTYPE
  23952. AUTOEMAIL
  23953. CDOSETUP
  23954. SMTPSERVER
  23955. LOGIN
  23956. PASSWORD
  23957. SMTPPORT
  23958. SENDER
  23959. USESSL
  23960. CUSTOMPROC
  23961. SENDEMAIL
  23962. SUBJECT
  23963. BUTTONSIZE
  23964. SMALL
  23965. FINDNEXT
  23966. FINDBACK
  23967. FINDTEXT
  23968. NOTFOUND
  23969. ERRSENDMAI
  23970. DESTNOTDEF
  23971. MSGNOTSENT
  23972. BADAUTHPRO
  23973. SMTPNOTSPE
  23974. INFOREQUIR
  23975. FROMEMPTY
  23976. SUBJEMPTY
  23977. BADCONFIG
  23978. ATACHNOTFO
  23979. LANGNOTFOU
  23980. REPNOTFOUN
  23981. SAVEAS
  23982. PRGENERAL
  23983. PRCONFIG
  23984. MAXSEARCH
  23985. PROGRESS
  23986. DEFAULT
  23987. WINPGBAR
  23988. QUIETMODE
  23989. INITSTATUS
  23990. PREPSTATUS
  23991. RUNSTATUS
  23992. SECONDS
  23993. CANCELQUER
  23994. CANCELINST
  23995. REPINCOMPL
  23996. ATTENTION
  23997. NOTUPDATE
  23998. ITALIC
  23999. UNDERLINE
  24000. FONTSIZE
  24001. FONTNAME
  24002. ATTACHMENT
  24003. ALIGNLEFT
  24004. ALIGNRIGHT
  24005. ALIGNCENTE
  24006. ALIGNJUSTI
  24007. INDENTINCR
  24008. INDENTREDU
  24009. HYPERLINK
  24010. ADDPICTURE
  24011. HORIZBAR
  24012. HTMLMODEL
  24013. RECEIPT
  24014. PRIORITY
  24015. PASTE
  24016. FILESUCCES
  24017. LISTBULLET
  24018. LISTNUMBER
  24019. CLEANFORMT
  24020. MSGSUCCESS
  24021. MSGSENDING
  24022. FONTCOLOR
  24023. BACKCOLOR
  24024. REMOVEFILE
  24025. HTMLFILE
  24026. HTMLDEFA
  24027. OPENVIEWER
  24028. PDFOPTIONS
  24029. EMBEDFONTS
  24030. CANPRINT
  24031. CANEDIT
  24032. CANCOPY
  24033. CANADDNOTE
  24034. ENCRYPTDOC
  24035. MASTERPWD
  24036. USERPWD
  24037. MASTANDUSR
  24038. PAGEMODE
  24039. NORMALVIEW
  24040. OUTLINPANE
  24041. THUMBSPANE
  24042. PDFAUTHOR
  24043. PDFTITLE
  24044. SYMBBARCOD
  24045. SYMBBARTIP
  24046. BADSMTP
  24047. CONTINUE
  24048. BADSETUP
  24049. RESETDEFA
  24050. SELECTRECI
  24051. SEARCHFLD
  24052. PDFASIMAGE
  24053. ATTACHFILE
  24054. SELECTALL
  24055. UNSELECTAL
  24056. INVERTSEL
  24057. REPPREVIEW
  24058. CLOSEBTN
  24059. PDFFONT
  24060. PLEASEWAIT
  24061. XML2XLS
  24062. RPTHEADER
  24063. RPTFOOTER
  24064. WKSEXT
  24065. HIDEPAGENO
  24066. XLALIGNLEF
  24067. SAVEASMHT
  24068. XLTOOBIG
  24069. XLCONV2XLS
  24070. PREPDATA
  24071.  ENGLISH        ENGLISH        201111281252Print                              First page                         Previous page                      Next page                          Last page                          Go to page                         Show pages                         Print report                       Close preview                      Toolbar                            1 page                             2 pages                            4 pages                            Whole page                         Zoom                               Page width                         Go to page                         One page                           Two pages                          Four pages                         Previewing report...               Failed creating the file! Please try again later.                               Error                              No Printers found.
  24072.  Please install a printer and try running the report again                      \<Miniatures...                    Copies                             Save report                        Save as image file...              Save as PDF                        Save as HTML                       Save as RTF                        Save as XLS                        Save as TXT / CSV / XL5            Output path                        Send report by e-mail                        Close report                       Print report                       Show miniatures                    Global preview                     Available printers                 Go to page                         Ok                                 Cancel                             Printing preferences               Customize printing                 General                            Preferences                        Page range                         All pages                          Current page                       Pages                              Pages from %FP% to %LP%            Page #                             First page set                     Last page set                      Next page set                      Previous page set                  Configurations           Report preview setup                              General        Language                 Toolbar visibility                 Dock position            Canvas count             Zoom level               Window state             Miniatures per page           Visible             Invisible           Undocked            Toolbar on TOP of the window                 Toolbar on LEFT of the window                Toolbar on RIGHT of the window               Toolbar on BOTTOM of the window              Use settings from resource file                   Normal         Minimized           Maximized           Controls       Output         Email          Email mode                    Attachment type               Automatically generate email file                 CDO email settings                 SMTP server              Login               Password            SMTP port           Sender              Security connection (SSL)          Custom procedure                   Send email                         Subject             To                  Body                Send                Size of buttons          Small (16x16 pixels)     Big (32x32 pixels)       Find                Find next                     Search backwards                             Find text:                                   String not found!                  Error sending email                          Destination not defined                      Message was not sent                         Invalid authentication protocol              SMTP server is not specified                 User name/password is required for basic authentication     From is empty                                Subject is empty                             Bad email configuration                      Attachment not found                    Could not locate the selected language  Could not locate the report source file      Save file as ...                   Global printer prompt options           Setup property sheet for current printerMax. pages to search                    Progress bar             Default                       Windows progress bar                    Quiet                         Initializing...          Running calculation prepass...          Creating output...       sec(s)    Stop report execution? (If you press 'No', report execution will continue.)               Press Esc to cancel...                  Report execution was cancelled. Your results are not complete.                                      Attention      Settings updated. The performed changes will be working on the next report preview session.         Italic         Bold           Underline      Font size                Font name           Attachments    Align left               Align right              Align center             Full justified           Increase indentationDecrease indentationHyperlink      Picture             Horizontal bar      HTML model for message   Ask for receipt                    Priority       Cut            Copy           Paste          File created successfully               Formatting bullets            Formatting numbers            Undo                Redo                New document             Clean formatting              Email was sent!               Sending message... Please wait...       Text color               Background color         Remove file attachment                  HTML file to be used as email body                          Make the saved file the default email body in the next sessions?                          Open using the default viewer           PDF options                   Embed fonts                        Allow printing                Allow edit                    Allow copy                    Allow add notes                    Encrypt document              Master password               User password                 'Master' and 'User' passwords for PDF must be different!              Page mode                     Normal view                   Show the outlines pane        Show the thumbnails pane      PDF author                    PDF title                     Symbol or bar codes fonts list                    Fonts list that can't be converted in PDF. Usually, bar codes and symbol fonts. Delimited with commas, eg. "Webdings,Biro"                                                Invalid SMTP email configuration!       Continue anyway?                        Setup inconsistency                     Default                       Select recipients                       Search field                  Render pages as images             Attach file              Select all               Unselect all             Invert selection         Report Preview           Close button             PDF default font         Please wait ...          Convert worksheet to 'Excel 97' format? (requires MS Excel or OpenOffice installed)                                               Repeat report page headers in worksheet                          Repeat report page footers in worksheet                          Worksheet file extension                 Ommits page number fields in worksheet                 Align character cells to the left                 Save as MHTML                      Report is too big to be exported to the Excel format. Revise the created document because it is incomplete!                                           Converting to XLS format                          Preparing data                      PORTUGUESE     PORTUGUES      201111281252Imprimir                           In
  24073. cio                             P
  24074. g. Anterior                      P
  24075. g. Seguinte                      
  24076. ltima p
  24077. gina                      Ir para p
  24078. gina                     Mostrar p
  24079. ginas                    Imprimir                           Fechar                             Barra de Ferramentas               1 p
  24080. gina                           2 p
  24081. ginas                          4 p
  24082. ginas                          P
  24083. gina Inteira                     Zoom                               Largura da P
  24084. gina                  Ir para a p
  24085. gina                   Uma p
  24086. gina                         Duas p
  24087. ginas                       Quatro p
  24088. ginas                     Previsualizando relat
  24089. rio...       Falha na cria
  24090. o do arquivo !
  24091. Tente novamente.                                  Erro                               Impressora n
  24092. o encontrada.
  24093. Instale uma impressora e execute o relat
  24094. rio novamente.                  \<Miniaturas...                    C
  24095. pias                             Salvar relat
  24096. rio                   Salvar em arquivo de imagem...     Salvar em PDF                      Salvar em HTML                     Salvar em RTF                      Salvar em XLS                      Salvar em TXT / CSV / XL5          Pasta destino                      Enviar relat
  24097. rio por email                   Fechar relat
  24098. rio                   Imprimir                           Mostrar miniaturas                 Previsualiza
  24099. o geral              Impressoras dispon
  24100. veis            Ir para p
  24101. gina                     Ok                                 Cancelar                           Prefer
  24102. ncias de impress
  24103. o          Customizar impress
  24104. o               Geral                              Prefer
  24105. ncias                       Intervalo de p
  24106. ginas               Tudo                               P
  24107. gina atual                       P
  24108. ginas :                          Paginas de %FP% a %LP%             P
  24109. gina                             Grupo de p
  24110. ginas inicial           
  24111. ltimo grupo de p
  24112. ginas            Pr
  24113. ximo grupo de p
  24114. ginas           Grupo de p
  24115. ginas anterior          Configura
  24116. es            Configura
  24117. o da previsualiza
  24118. o de relat
  24119. rios     Geral          Idioma                   Barra de ferramentas               Posi
  24120. o de dock          Quantidade de p
  24121. ginas    N
  24122. vel de zoom            Estado da janela         Miniaturas por p
  24123. gina         Vis
  24124. vel             Invis
  24125. vel           Undocked            Ferramentas no TOPO da janela                Ferramentas 
  24126.  ESQUERDA da janela             Ferramentas 
  24127.  DIREITA da janela              Ferramentas ABAIXO da janela                 Defini
  24128. es do arquivo de recursos                 Normal         Minimizado          Maximizado          Controles      Sa
  24129. da          Email          Tipo de email                 Tipo de anexo                 Gerar automaticamente anexo de email              Configura
  24130. es para envio de emails Servidor SMTP            Login               Senha               Porta SMTP          Identifica
  24131. o       Usar conex
  24132. o segura (SSL)          Modo personalizado                 Enviar email                       Assunto             Destinat
  24133. rio        Mensagem            Enviar              Tamanho dos bot
  24134. es       Pequeno (16x16 pixels)   Grande (32x32 pixels)    Localizar           Localizar pr
  24135. ximo             Procurar atr
  24136. s                               Encontrar texto:                             Texto n
  24137. o localizado!              Erro ao enviar email                         Destinat
  24138. rio n
  24139. o especificado                Mensagem n
  24140. o foi enviada                     Protocolo de autentica
  24141. o inv
  24142. lido           Servidor SMTP n
  24143. o especificado               Usu
  24144. rio/senha s
  24145. o necess
  24146. rios para autentica
  24147. sica      Remetente vazio                              Assunto vazio                                Configura
  24148. o de email inv
  24149. lida               Anexo n
  24150. o encontrado                    Linguagem solicitada n
  24151. o foi localizada O arquivo de relatorio n
  24152. o foi localizado    Salvar arquivo como ...            Op
  24153. es de impress
  24154. o gerais              Configurar impressora atual             Max. p
  24155. ginas a buscar                   Barra de progresso       Original (plana)              Barra de progressos do Windows          Silencioso                    Inicializando...         Executando c
  24156. lculos preliminares...     Criando relat
  24157. rio...     segs.     Interromper a execu
  24158. o do relat
  24159. rio? (Se selecionar 'N
  24160. o', o relat
  24161. rio continuar
  24162. .)       <ESC> Cancela...                        A gera
  24163. o do relat
  24164. rio foi cancelada. Seus resultados est
  24165. o incompletos.                            Aten
  24166. o        Configura
  24167. es salvas. As mudan
  24168. as entrar
  24169. o em vigor na pr
  24170. xima sess
  24171. o de relat
  24172. rio.                 It
  24173. lico        Negrito        Sublinhado     Tamanho da fonte         Nome da fonte       Anexos         Alinhar 
  24174.  esquerda       Alinhar 
  24175.  direita        Centralizar              Justificado              Aumentar recuo      Diminuir recuo      Hyperlink      Imagem              Barra horizontal    Modelo HTML para mensagemSolicitar confirma
  24176. o              Prioridade     Recortar       Copiar         Colar          Arquivo criado com sucesso              Lista com marcadores          Lista numerada                Desfazer            Refazer             Novo documento           Limpar formata
  24177. o             Mensagem foi enviada!         Enviando mensagem... Favor aguardar...  Cor do texto             Cor do fundo             Remover o arquivo anexo                 Arquivo HTML para ser usado como padr
  24178. o                     Marcar o arquivo salvo como texto padr
  24179. o para o corpo dos emails?                         Abrir com o visualizador padr
  24180. o         Op
  24181. es de PDF                 Inserir fontes no PDF              Permite imprimir              Permite alterar               Permite copiar                Permite adicionar anota
  24182. es        Criptografar documento        Senha mestre                  Senha do usu
  24183. rio              Senhas 'mestre' e do 'usu
  24184. rio' para o PDF devem ser diferentes!       Modo de p
  24185. gina                Visualiza
  24186. o normal           Show the outlines pane        Exibir painel de miniaturas   Autor do PDF                  T
  24187. tulo do PDF                 Fontes de s
  24188. mbolos or cod. barras                 Lista de fontes que n
  24189. o pode ser convertida normalmente. Em geral c
  24190. d de barras e desenhos. Usar virgula como separador, ex. "Webdings,Biro"                              Configura
  24191. o inv
  24192. lida do servidor SMTP  Continuar assim mesmo?                  Inconsist
  24193. ncia nas configura
  24194. es        Padr
  24195. o                        Selecione os contatos                   Buscar campo                  Gera p
  24196. ginas em formato imagem     Anexar arquivo           Selecionar todos         Descelecionar todos      Inverter sele
  24197. o         Previsualiza
  24198. o          Bot
  24199. o fechar             Fonte padr
  24200. o             Por favor aguarde ...    Converter planilha para o formato 'Excel 97' ? (requer MS Excel ou OpenOffice instalados)                                         Repetir cabe
  24201. alho de p
  24202. ginas do relat
  24203. rio na planilha            Repetir rodap
  24204.  de p
  24205. ginas do relat
  24206. rio na planilha               Extens
  24207. o do arquivo de planilha          Omite n
  24208. mero de p
  24209. gina nas planilhas                   Alinhar c
  24210. lulas 
  24211.  esquerda                        Salvar em MHTML                    Relatorio 
  24212.  muito grande para ser exportado para o formato Excel. Revise o documento criado pois ele esta incompleto!                                 Convertendo para o formato XLS                    Preparando dados                    SPANISH        ESPA
  24213. OL        201111281252Imprimir                           Inicio                             P
  24214. gina anterior                    P
  24215. gina siguiente                   
  24216. ltima p
  24217. gina                      Ir a p
  24218. gina                        Mostrar p
  24219. ginas                    Imprimir                           Cerrar                             Barra de herramientas              1 p
  24220. gina                           2 p
  24221. ginas                          4 p
  24222. ginas                          P
  24223. gina entera                      Zoom                               Ancho de p
  24224. gina                    Ir a p
  24225. gina                        Una p
  24226. gina                         Dos p
  24227. ginas                        Cuatro p
  24228. ginas                     Vista previa del informe...        
  24229. No se pudo crear el archivo! Por favor int
  24230. ntelo nuevamente.                   Error                              No se encontraron impresoras. Instale una impresora e intente ejecutar de nuevo el informe.         \<Miniaturas...                    Copias                             Guardar informe                    Guardar como archivo de imagen...  Guardar como PDF                   Guardar como HTML                  Guardar como RTF                   Guardar como XLS                   Guardar como TXT / CSV / XL5       Carpeta destino                    Enviar informe por correo electr
  24231. nico        Cerrar informe                     Imprimir informe                   Mostrar miniaturas                 Vista previa global                Impresoras disponibles             Ir a p
  24232. gina                        Aceptar                            Cancelar                           Preferencias de impresi
  24233. n          Personalizar impresi
  24234. n             General                            Preferencias                       Rango de p
  24235. ginas                   Todas las p
  24236. ginas                  P
  24237. gina actual                      P
  24238. ginas:                           P
  24239. ginas de %FP% a %LP%             P
  24240. gina                             Primera p
  24241. gina del grupo           
  24242. ltima p
  24243. gina del grupo            Grupo de p
  24244. ginas siguiente         Grupo de p
  24245. ginas anterior          Configuraciones          Configuraci
  24246. n de vista previa de informe          General        Idioma                   Barra de herramientas              Posici
  24247. n de acoplamiento Cantidad de p
  24248. ginas      Nivel de zoom            Estado de la ventana     Miniaturas por p
  24249. gina         Visible             Invisible           Desacoplado         Barra de herramientas al Tope de la ventana  Barra de herramientas a la Izq. de la ventanaBarra de herramientas a la Der. de la ventanaBarra de herramientas al Pie de la ventana   Usar definiciones del archivo de recursos         Normal         Minimizado          Maximizado          Controles      Salida         Correo         Tipo de correo                Tipo de adjunto               Generar autom
  24250. ticamente archivo de correo         Configuraci
  24251. n para env
  24252. o de correosServidor SMTP            Inicio de sesi
  24253. n    Contrase
  24254. a          Puerto SMTP         Remitente           Usar conexion segura (SSL)         Modo personalizado                 Enviar correo                      Asunto              Destinatario        Mensaje             Enviar              Tama
  24255. o de botones        Peque
  24256. o (16x16 pixels)   Grande (32x32 pixels)    Buscar              Buscar siguiente              Buscar hacia atr
  24257. s                           Buscar texto:                                
  24258. Texto no encontrado!              Error al enviar el correo                    Destinatario no especificado                 Mensaje no fue enviado                       Protocolo de autenticaci
  24259. n inv
  24260. lido          Servidor SMTP no especificado                Usuario/contrase
  24261. a son necesarios para autenticaci
  24262. sica Remitente est
  24263.  en blanco                     Asunto est
  24264.  en blanco                        Configuraci
  24265. n de correo inv
  24266. lida             Adjunto no encontrado                   Lenguaje seleccionado no encontrado     No se puede encontrar el archivo del informe Guardar archivo como...            Opciones generales de impresi
  24267. n         Configurar impresora actual             Max. p
  24268. ginas a buscar                   Barra de progreso        Predeterminado                Barra de progreso de Windows            Silencioso                    Inicializando...         Ejecutando c
  24269. lculos preliminares...     Creando informe...       segs.     
  24270. Detener la ejecuci
  24271. n del informe? (Si selecciona 'No', el informe continuar
  24272. .)           Presione [Esc] para cancelar...         La ejecuci
  24273. n del informe fue cancelada. Sus resultados no est
  24274. n completos.                          Atenci
  24275. n       Configuraci
  24276. n actualizada. Los cambios realizados regir
  24277. n a partir de la pr
  24278. xima sesi
  24279. n de informe. Cursiva        Negrita        Subrayado      Tama
  24280. o de fuente         Nombre de fuente    Adjuntos       Alinear a la izquierda   Alinear a la derecha     Centrar                  Justificado              Aumentar sangr
  24281. a    Reducir sangr
  24282. a     Hiperv
  24283. nculo   Imagen              Barra horizontal    Modelo HTML para mensaje Solicitar confirmaci
  24284. n             Prioridad      Cortar         Copiar         Pegar          Archivo creado exitosamente.            Lista con vi
  24285. etas             Lista numerada                Deshacer            Rehacer             Nuevo documento          Limpiar formato               
  24286. Correo enviado!              Enviando mensaje... Por favor espere... Color de fuente          Color de Relleno         Eliminar el archivo adjunto             Archivo HTML usado como cuerpo de correo                    Hacer que el archivo guardado sea el cuerpo de correo por defecto?                        Abrir el visor predeterminado           Opciones del PDF              Fuentes incrustadas                Permitir la impresi
  24287. n         Permitir la edici
  24288. n           Permitir copiar               Permitir agregar notas             Encriptar documento           Contrase
  24289. a maestra            Contrase
  24290. a de usuario         Las contrase
  24291. as maestras y de usuario del PDF deben ser diferentes!   Modo p
  24292. gina                   Modo vista                    Mostrar el panel  de contornosMostrar el panel de miniaturasAutor del PDF                 T
  24293. tulo del PDF                Lista de fuentes de s
  24294. mbolos                      Lista de fuentes que no se pueden convertir en PDF. Generalmente fuentes de s
  24295. mbolos o c
  24296. digos de barra. Delimitado por comas, Ej: "Webdings, Biro"                       Configuraci
  24297. n de SMTP de correo inv
  24298. Desea continuar?                       Inconsistencia de instalac
  24299. n            Predeterminado                Seleccionar los destinatarios           Campo de b
  24300. squeda             Representar p
  24301. ginas como im
  24302. gen    Archivo adjunto          Seleccionar todo         Seleccionar ninguno      Invertir selecci
  24303. n       Vista previa             Bot
  24304. n cerrar             Fuente b
  24305. sica            Por favor espere ...     
  24306. Convertir hoja de trabajo a formato 'Excel 97'? (requiere MS Excel u OpenOffice instalado)                                       Repetir encabezado de p
  24307. gina en hoja de trabajo                  Repetir pie de p
  24308. gina en hoja de trabajo                         Extensi
  24309. n de hoja de trabajo             Omitir n
  24310. meros de p
  24311. gina en hoja de trabajo            Ajustar caracteres a la derecha                   Guardar como MHTML                 Report is too big to be exported to the Excel format. Revise the created document because it is incomplete!                                           Converting to XLS format                          Preparando datos                    TURKISH        T
  24312. E         201111281254Yazd
  24313. r                             
  24314. lk sayfa                          
  24315. nceki sayfa                       Sonraki sayfa                      Son sayfa                          Sayfaya git                        Sayfalar
  24316. ster                   Raporu yazd
  24317. r                      
  24318. nizlemeyi kapat                   Ara
  24319. u                        Tek sayfa                          
  24320. ki sayfa                          D
  24321. rt sayfa                         T
  24322. m sayfa                          Yakla
  24323.                              Sayfa geni
  24324. i                    Sayfaya git                        Tek sayfa                          
  24325. ki sayfa                          D
  24326. rt sayfa                         Rapor 
  24327. nizleme...                  Dosya Olu
  24328. turma Hatas
  24329.  ! Tekrar Deneyin..                                       Hata                               Yaz
  24330.  bulunamad
  24331. tfen bir yaz
  24332. kleyin ve raporu tekrar 
  24333.  deneyin.                \<Minyat
  24334. rler...                   Kopya say
  24335.                        Raporu kaydet                      Resim dosyas
  24336.  olarak kaydet...     PDF Olarak Kaydet                  HTML Olarak Kaydet                 RTF Olarak Kaydet                  XLS Olarak Kaydet                  TXT / CSV / XL5 Olarak Kaydet      Kaydetme Dizini                    Raporu e-Posta ile g
  24337. nder                    Kapat                              Yazd
  24338. r                             Minyat
  24339. rleri G
  24340. ster                Genel 
  24341. nizleme                     Kullan
  24342. r Yaz
  24343. lar           Sayfaya Git                        Tamam                              Vazge
  24344.                              Yazd
  24345. rma Se
  24346. enekleri               Yazd
  24347. zelle
  24348. tir              Genel                              Tercihler                          Sayfa Aral
  24349.                    T
  24350. m Sayfalar                       Bu Sayfa                           Sayfalar :                         Sayfa Aral
  24351.  ( %FP% - %LP% )   Sayfa                              
  24352. lk sayfa ayar
  24353.                     Son sayfa ayar
  24354.                     Sonraki sayfa ayar
  24355.                 
  24356. nceki sayfa ayar
  24357.                  Ayarlar                  Rapor 
  24358. nizleme Ayarlar
  24359.                            Genel          Dil                      Ara
  24360. u                        Ara
  24361. u Pozisyonu    Sayfa Say
  24362.              Yak
  24363. rma Derecesi   Pencere Konumu           Sayfa Ba
  24364. na Minyat
  24365. r Say
  24366. r             G
  24367. nmez            Sabit               
  24368. stte                                        Solda                                        Sa
  24369. da                                        Altta                                        Ayarlar
  24370.  Dosyadan Al                              Normal         K
  24371.          B
  24372.          Kontroller     
  24373.           e-Posta        e-Posta bi
  24374. imi                Dosya T
  24375.                     e-Posta dosyas
  24376.  otomatik olarak olu
  24377. tur         CDO E-posta Ayarlar
  24378.                SMTP Sunucu              Kullan
  24379.        
  24380. ifre               SMTP port           G
  24381. nderen            G
  24382. venli Ba
  24383. lanti (SSL)             
  24384. zel Prosed
  24385. r                      E-posta G
  24386. nder                     Konu                Kime                Mesaj               G
  24387. nder              Buton Boyutu             K
  24388. k (16x16 pixels)     B
  24389. k (32x32 pixels)     Bul                 Sonrakini Bul                 
  24390. ncekini Bul                                 Aranan Metin:                                Bulunmad
  24391. !                         E-posta G
  24392. ndermede Hata!                     Hedef Belirtilmedi                           Message G
  24393. nderilemedi                        Ge
  24394. ersiz Do
  24395. rulama Protokolu                 SMTP sunucu belirtilmedi                     Kullan
  24396. ifre Do
  24397. rulama i
  24398. in gereklidir               Kimden Bo
  24399. !                                  Konu Bo
  24400. !                                    Hatal
  24401.  e-posta yap
  24402.                 Eklenti Bulunamad
  24403.                       Se
  24404. ilen Dil Bulunamad
  24405.                   Rapor Kaynak Dosyas
  24406.  Bulunamad
  24407.               Farkl
  24408.  Kaydet ..                   Genel Yaz
  24409.  Dialog Se
  24410. enekleri         Se
  24411. ili Yaz
  24412. in Sayfa Ayar
  24413.           Maks.Arama Sayfas
  24414.                       ilerleme 
  24415. u          Varsay
  24416. lan                    Windows ilerleme 
  24417. u                 Sessiz                        Ba
  24418. yor...          Hesaplama Yap
  24419. yor...                  Rapor Haz
  24420. yor       Saniye    
  24421. lem Durdurulsunmu? (Hay
  24422. larsan
  24423. lem devam edecek)                               Press Esc to cancel...                  Raporun 
  24424.  Durduruldu. Rapor Tamamlanmad
  24425. .                                                   Dikkat         Ayarlar G
  24426. ncellendi. G
  24427. ncellenmi
  24428.  Ayarlar Sonraki 
  24429. nizlemede Aktif Olacak.                          
  24430. talik         Kal
  24431. n          Alt 
  24432. izgili    Boyut                    Yaz
  24433.  tipi           Eklentiler     Sola Yaslanm
  24434.            Sa
  24435. a Yaslanm
  24436.            Ortalanm
  24437.                Sayfaya Yaslanm
  24438.         Bo
  24439. u Artt
  24440. r      Bo
  24441. r       Link           Resim               Yat.Kayd
  24442. u Mesaj i
  24443. in HTML bi
  24444. imi   Al
  24445.  Raporu                      
  24446. ncelik        Kes            Kopyala        Yap
  24447. r       Dosya Ba
  24448.  ile Olu
  24449. turuldu            Madde 
  24450. areti Bi
  24451. imlendir     Numara 
  24452. areti Bi
  24453. imlendir    Geri Al             
  24454. leri Al            Yeni D
  24455. man             Bi
  24456. imlemeyi Temizle           e-Posta G
  24457. nderildi!           e-Posta G
  24458. nderiliyor...Bekleyiniz..     Yaz
  24459.  Rengi               Arka Plan Rengi          Dosya Eklentisini 
  24460. kart                Mesaj G
  24461. vdesi HTML olarak kullan
  24462. lacak                      Dosya Bundan Sonraki Oturumlar 
  24463. in Kaydedilsinmi?                                        Varsay
  24464. lan G
  24465. leyiciyi A
  24466.            PDF Se
  24467. enekleri               G
  24468.  Fontlar                     Yazd
  24469. labilir                D
  24470. zenlenebilir                Kopyalanabilir                Not Eklenebilir                    D
  24471. ifrele              Ana 
  24472. ifre                     Kullan
  24473. ifresi             Ana 
  24474. ifre ve Kullan
  24475. ifreleri PDF i
  24476. in Farkl
  24477.  Olmal
  24478. r            Sayfa G
  24479.                 Normal G
  24480. m                
  24481. zet B
  24482. lmesini G
  24483. ster         K
  24484. lmede G
  24485. ster          PDF Yaratan                   PDF Ba
  24486. k                    Sembol yada bar code font listesi                 Font listesi PDF te d
  24487. lemez. Genellikle, bar code ve sembol fontlar
  24488.  virgul ile ayr
  24489. rn. "Webdings,Biro"                                                     Ge
  24490. ersiz SMTP email konfig
  24491. rasyonu      Devam Edilsinmi?                        Tutars
  24492. z Kurulum!                       Varsay
  24493. lan                    Al
  24494.                            Aranacak Alan Ad
  24495.              Sayfalar
  24496.  resim olarak d
  24497. r    Dosya ekle               Hepsini se
  24498.               Hi
  24499. birini se
  24500. me          Ters se
  24501. im               Rapor 
  24502. nizleme           Kapatma D
  24503. mesi          PDF Varsay
  24504. lan Yaz
  24505. tipi  L
  24506. tfen Bekleyiniz....    
  24507. ma sayfas
  24508.  'Excel 97' bi
  24509. imine d
  24510. ? (MS Excel yada OpenOffice gerekir)                                           Rapor ba
  24511. ma sayfas
  24512. nda tekrarla                   Rapor alt ba
  24513. ma sayfas
  24514. nda tekrarla               
  24515. ma sayfas
  24516.  dosya uzant
  24517.            Sayfa numaralar
  24518. ma sayfas
  24519. nda es ge
  24520.            H
  24521. creleri sola hizala                             MHTML Olarak Kaydet                Report is too big to be exported to the Excel format. Revise the created document because it is incomplete!                                           Converting to XLS format                          Preparing data                      ITALIAN        ITALIANO       201102011252Stampa                             Prima pagina                       Precedente                         Successiva                         Iltima pagina                      Vai alla pagina                    Visualizza pagine                  Stampa                             Chiudi anteprima                   Barra strumenti                    Una pagina                         Due pagine                         Quattro pagine                     Tulla la pagina                    Zoom                               Larghezza pagina                   Vai a pagina                       Una pagina                         Due pagine                         Quattro pagine                     Anteprima stampa...                Errore nella creazione del file! Riprovare pi
  24522.  tardi.                           Errore                             Nessuna stampante trovata. Si prega di installare una stampante e provare a rieseguire il report    \<Miniature...                     Copie                              Salva stampa                       Salva come immagine...             Salva come PDF                     Salva come HTML                    Salva come RTF                     Salva come XLS                     Salva come TXT / CSV / XL5         Percorso di destinazione           Invia la stampa per e-mail                   Chiudi stampa                      Stampa                             Visualizza miniature               Anteprima globale                  Stampanti disponibili              Vai alla pagina                    Ok                                 Annullare                          Preferenze di stampa               Personalizza stampa                Generale                           Preferenze                         Pagine da stampare                 Tutte                              Pagina Corrente                    Pagine:                            Pagine da %FP% a %LP%              Pagina                             Prima pagina del gruppo            Ultima pagina del gruppo           Prossimo gruppo di pagine          Gruppo di pagine precedente        Configurazioni           Impostazioni anteprima di stampa                  Generale       Linguaggio               Visibilit
  24523.  barra strumenti         Posizione barra strumentiConteggio di pagine      Livello di zoom          Stato della finestra     Miniature per pagina          Visibile            Invisibile          Undocked            Barra strumenti SOPRA la finestra            Barra strumenti a SINISTRA della finestra    Barra strumenti a DESTRA della finestra      Barra strumenti SOTTO la finestra            Usare impostazioni dal file di risorse            Normale        Minimizzato         Massimizzato        Controlli      Output         Email          Tipo di email                 Tipo di allegato              Genera automaticamente fle di email               Impostazioni email CDO             Server SMTP              Login               Password            Porta SMTP          Mittente            Connessione di sicurezza (SSL)     Modalit
  24524.  personalizzata            Invio email                        Soggetto            A                   Corpo               Inviare             Formato del bottone      Piccolo (16x16 pixels)   Grande (32x32 pixels)    Trova               Trova il prossimo             Ricerca indietro                             Trova il testo                               Non trovato!                       Errore in invio email                        Destinazione non definita                    Il messaggio non 
  24525.  stato inviato             Protocollo di autenticazione non valido      Server SMTP non specificato                  Lo username/password 
  24526.  richiesto per autenticazione di base Da 
  24527.  vuoto                                   Soggetto 
  24528.  vuoto                             Configurazione email non valida              Allegato non trovato                    Linguaggio selezionato non trovato      Impossibile trovare il sorgente del report   Salva con nome...                  Opzioni generali di stampa              Impostare propriet
  24529.  stampante corrente  Pagine massime da cercare               Barra di avanzamento     Default                       Barra di avanzamento Windows            Silenzioso                    Inizializzazione...      Esecuzione calcoli preliminari...       Creazione output...      sec.      Interrompere esecuzione report? (Se si preme 'No' continuer
  24530.  esecuzione report)           Premi Esc per cancellare...             Esecuzione del report cancellata. Risultati incompleti.                                             Attenzione     Impostazioni aggiornate. I cambiamenti apportati entreranno in funzione con la prossima anteprima.  Corsivo        Grassetto      Sottolineato   Formato font             Nome del font       Allegati       Allineamento a sinistra  Allineamento a destra    Allinemento centrato     Giustificato             Aumento indentazioneDiminuire indentaz. Hyperlink      Immagine            Barra orizzontale   Modello HTML per messaggiRichiesta conferma                 Priorit
  24531.        Taglia         Copia          Incolla        File creato con successo                Lista puntata                 Lista numerata                Disfa               Rifai               Nuovo documento          Formattazione pulita          Email inviata                 Invio messaggio... Attendere...         Colore del testo         colore di sfondo         Rimuovere file allegato                 File HTML da usare come corpo email                         Rendere il file salvato il corpo email di default nella prossimasessione?                 Apri il visualizzatore di default       Opzioni PDF                   Inserire i font                    Consenti stampa               Consenti modifica             Consenti copia                Concenti aggiunta annotazioni      Crittografare documento       Password principale           Password utente               Password principale ed utente per i PDF devono essere diverse         Modalit
  24532.  pagina               Vista normale                 Mostra il pannello dei profiliMostra il pannello delle minieAutore del PDF                Titolo del PDF                Lista dei font dei simboli o dei codici a barre   Lista dei font che non possono essere convertiti in PDF. Di solito, codici a barre e font dei simboli. Delimitati da virgole, es. "Webdings,Biro"                         Configurazione SMTP non valida          Continuare comunque?                    Anomalia di configurazione              Default                       Selezionare destinatari                 Campo di ricerca              Visualizzare pagine come immagini  Allegare file            Seleziona tutto          Deseleziona tutto        Invertire selezione      Anteprima di stampa      Bottone chiudi           Font di default per PDF  Prego attendere...       Convertire foglio di lavoro in formato 'Excel 97' ? (richiede MS Excel o OpenOffice installati)                                   Ripetere intestazioni di pagina nel foglio di lavoro             Ripetere pi
  24533.  di pagina nel foglio di lavoro                      Estensione file di foglio di lavoro      Omette numeri di pagina nei fogli di lavoro            Allinea celle di caratteri a sinistra             Salva come MHTML                   Il report 
  24534.  troppo grande per essere esportato in formato EXCEL. Controlla il documento creato perch
  24535.  incompleto!                                   Conversione al formato XLS                        Preparazione dati                   PERSIAN        
  24536.           201102011256
  24537.                                 
  24538.                          
  24539.                                
  24540.                                
  24541.                          
  24542.                         
  24543.                         
  24544.                           
  24545.                      
  24546.                           
  24547.                             
  24548.                             
  24549.                           
  24550.                           
  24551.                           
  24552.                            
  24553.                         
  24554.                             
  24555.                             
  24556.                           
  24557.  ...                
  24558. .                                    
  24559.                                 
  24560. .                               \<
  24561.                       
  24562.                            
  24563.                         
  24564.  ...      
  24565.  PDF                  
  24566.  HTML                 
  24567.  RTF                  
  24568.  XLS                  
  24569.  TXT / CSV / XL5      Output path                        
  24570.                   
  24571.                          
  24572.                           
  24573.                   
  24574.                       
  24575.                      
  24576.                         
  24577.                               
  24578.                              
  24579.                         
  24580.                    
  24581.                               
  24582.                              
  24583.                        
  24584.                          
  24585.                           
  24586.                               
  24587.  %FP% 
  24588.  %LP%              
  24589.  #                             
  24590.                   
  24591.                   
  24592.                    
  24593.                    
  24594.                  
  24595.                                
  24596.           
  24597.                      
  24598.                    
  24599.  Dock              
  24600.           
  24601.               
  24602.      
  24603.                
  24604.                Undocked            
  24605.                        
  24606.                       
  24607.                     
  24608.                        
  24609.                       
  24610.            
  24611.             
  24612.             
  24613.        
  24614.           
  24615.        
  24616.                  
  24617.                      
  24618.                         
  24619.  CDO                        
  24620.  SMTP                
  24621.           
  24622.              
  24623.  SMTP           
  24624.              
  24625.  (SSL)                   Custom procedure                   
  24626.                      
  24627.                
  24628.               
  24629.                 
  24630.                
  24631.               
  24632.  (16x16 
  24633. )       
  24634.  (32x32 
  24635. )       Find                Find next                     Search backwards                             Find text:                                   Not found!                         Error sending email                          Destination not defined                      Message was not sent                         Invalid authentication protocol              SMTP server is not specified                 User name/Password is required for basic authentication     From is empty                                Subject is empty                             Bad email configuration                      Attachment not Found                    Could not locate the selected language  Could not locate the Report source file      Save file as ...                   Global printer prompt options           Setup property sheet for current printerMax. pages to search                    Progress bar             Default                       Windows progress bar                    Quiet                         Initializing...          Running calculation prepass...          Creating output...       sec(s)    Stop report execution? (If you press 'No', report execution will continue.)               Press Esc to cancel...                  Report execution was cancelled. Your results are not complete.                                      Attention      Settings updated. The performed changes will be working on the next report preview session.         Italic         Bold           Underline      Font size                Font name           Attachments    Align left               Align right              Align center             Full justified           Increase indentationDecrease indentationHyperlink      Picture             Horizontal bar      HTML model for message   Ask for receipt                    Priority       Cut            Copy           Paste          File created successfully               Formatting bullets            Formatting numbers            Undo                Redo                New document             Clean formatting              Email was sent!               Sending Message... Please wait...       Text color               Background color         Remove file attachment                  HTML file to be used as email body                          Make the saved file the default email body in the next sessions?                          Open the default viewer                 PDF options                   Embed fonts                        Allow printing                Allow edit                    Allow copy                    Allow add notes                    Encrypt document              Master password               User password                 Master and User passwords for PDF must be different!                  Page mode                     Normal view                   Show the outlines pane        Show the thumbnails pane      PDF author                    PDF title                     Symbol or bar codes fonts list                    Fonts list that can't be converted in PDF. Usually, bar codes and symbol fonts. Delimited with commas, eg. "Webdings,Biro"                                                Invalid SMTP email configuration!       Continue anyway?                        Setup inconsistency                     Default                       Select recipients                       Search field                  Render pages as images             Attach file              Select all               Unselect all             Invert selection         Report Preview           Close button             PDF default font         Please wait ...          Convert worksheet to 'Excel 97' format? (requires MS Excel or OpenOffice installed)                                               Repeat report page headers in worksheet                          Repeat report page footers in worksheet                          Worksheet file extension                 Ommits page number fields in worksheet                 Align character cells to the left                 
  24636.  MHTML                Report is too big to be exported to the Excel format. Revise the created document because it is incomplete!                                           Converting to XLS format                          Preparing data                      POLISH         POLSKA         201212081252Drukuj                             Pierwsza strona                    Poprzednia                         Nast
  24637. pna                           Ostatnia strona                    IdY do strony                      Poka
  24638.  strony                       Drukuj raport                      Zamknij podgl1d                    Panel sterowania                   1 strona                           2 strony                           4 strony                           Ca3a strona                        Lupa                               Szerokoo
  24639.  strony                   IdY do strony                      Jedna strona                       Dwie strony                        Cztery strony                      Przeglad raportu ...               B31d utworzenia pliku ! Prosz
  24640. buj ponownie.                                B31d                               Brak drukarek.
  24641. Zainstaluj drukark
  24642.  i spr
  24643. buj ponownie.                                              \<Miniatury...                     Kopie                              Zapisz raport                      Zapisz jako plik graficzny ...     Zapisz jako PDF                    Zapisz jako HTML                   Zapisz jako RTF / DOC              Zapisz jako XLS / XML              Zapisz jako TXT / CSV / XL5        Zapisz w katalogu                  Wyolij raport za pomoc1 e-mail               Zamknij raport                     Drukuj raport                      Poka
  24644.  miniatury                    Globalny podgl1d                   Dost
  24645. pne drukarki                  IdY do strony                      Tak                                Cofnij                             Ustawienia drukarki                Dostosuj drukowanie                G3
  24646. wne                             Ustawienia                         Rozmiar strony                     Wszystkie strony                   Bie
  24647. aca strona                     Strony                             Strony od %FP% do %LP%             Strona #                           Pierwsza strona                    Ostatnia strona                    Nast
  24648. pna strona                    Poprzednia strona                  Konfiguracja             Ustawienia podgl1du raportu                       G3
  24649. wne         J
  24650. zyk                    Pasek wydruku                      Usytuowanie paska wydrukuIloo
  24651.  stron              Lupa %                   Rozmiar okno raportu     Iloo
  24652.  miniatur na stronie     Widoczny            Ukryty              Niedowi1zany        Pasek wydruku na G
  24653. RZE okna                  Pasek wydruku z LEWEJ strony okna            Pasek wydruku z PRAWEJ strony okna           Pasek wydruku na DOLE okna                   Zgodnie z ustawieniami pliku Yr
  24654. d3owego           Normalny       Minimalizuj         Maksymalizuj        Poka
  24655.  przyciskiWyjociowe      E-mail         E-mail typ                    Do31czany typ                 Automatycznie generuj plik e-mail                 CDO E-mail ustawienia              SMTP serwer              Login               Has3o               SMTP port           Wysy3aj przez       Szyfrowane po31czenie (SSL)        Typowa procedura                   Wyolij e-mail                      Temat               Do                  Grupa               Wyolij              Rozmiar przycisk
  24656. w       Ma3e (16x16 pixels)      Du
  24657. e (32x32 pixels)      Szukaj              Szukaj nast
  24658. pny               Szukaj poprzedni                             Szukaj tekst:                                Nie istnieje!                      B31d wysy3ania e-mail                        Docelowy nie zdefiniowany                    Wiadomoo
  24659.  nie wys3ana                        Niew3aociwe ustawienia protoko3u             SMTP serwer nie ustawiony                    U
  24660. ytkownik / Has3o nie potwierdzone                         Brak nadawcy                                 Temat jest pusty                             Z3a konfiguracja e-mail                      Brak za31cznika                         Nie mo
  24661. na znaleY
  24662.  wybranego j
  24663. zyka      Nie mo
  24664. na znaleY
  24665.  pliku Yr
  24666. d3owego raportu   Zapisz plik jako ...               G3
  24667. wne ustawienia drukarki              Arkusz w3aociwooci dla obecnej drukarki Max. iloo
  24668.  stron do szukania            Pasek post
  24669. pu            Domyolny                      Pasek post
  24670. pu Windows                   Brak paska                    Inicjuj ...              Uruchomiono obliczenia ...              Tworzenie raportu ...    sek(s)    Zatrzyma
  24671.  wykonanie raportu? (gdy nacioniesz 'Nie', wykonanie raportu b
  24672. dzie kontynuowane)Nacionij Esc aby przerwa
  24673.  ....          Wykonanie raportu zatrzymane. Wynik nie jest kompletny.                                             Uwaga          Ustawienia zaktualizowano. Zapisane ustawienia b
  24674. d1 wykorzystane przy nast
  24675. pnym raporcie.           Kursywa        Pogrubienie    Podkreolenie   Rozmiar czcionki         Nazwa czcionki      Do31czono      Do lewej                 Do prawej                Centrowanie              Justowanie               Zwi
  24676. ksz wci
  24677. cie     Zmiejsz wci
  24678. cie     Hiper31cze     Obrazek             Poziomy pasek       HTML typ wiadomooci      Odpowiedz na                       Priorytet      Wytnij         Kopiuj         Wklej          Plik utworzono w3aociwie                Formatuj punktory             Formatowanie numer
  24679. w          Do ty3u             Do przodu           Nowy dokument            Wyczyo
  24680.  formatowanie          E-mail zosta3 wys3any!        Wysy3anie wiadomooci ... Prosz
  24681.  czeka
  24682. ! Kolor tekstu             Kolor t3a                Usu
  24683.  do31czony plik                     HTML plik u
  24684. ywany w treoci e-mail                           Wykorzystywa
  24685.  plik w nast
  24686. pnych sesjach e-mail?                                           Otw
  24687. rz w domyolnej przegl1darce         PDF opcje                     OsadY czcionki                     Pozw
  24688. l drukowa
  24689.                Pozw
  24690. l edytowa
  24691.                Pozw
  24692. l kopiowa
  24693.                Pozw
  24694. l dodawa
  24695.  notatki             Koduj dokument                G3
  24696. wne has3o                  Has3o u
  24697. ytkownika             Has3a G3
  24698. wne oraz U
  24699. ytkownika pliku PDF mysz1 by
  24700.  inne!               Typ strony                    Normalny widok                Poka
  24701.  obrysowanie             Poka
  24702.  okno miniatur           PDF autor                     PDF opis                      Symbole lub kody kreskowe czcionki                Czcionki lista, kt
  24703. ra nie mo
  24704.  przerobi3a w PDF. Zazwyczaj, kody kreskowe i czcionki symbolu.                                                                         B31d SMTP konfiguracji e-mail           Kontynuowa
  24705.  dalej?                      Niesp
  24706.  ustawie
  24707.                     Domyolne                      Wybierz odbiorc
  24708. w                       Przeszukaj obszar             Strony jako obrazy                 Do31cz plik              Zaznacz wszystko         Odznacz wszystko         Odwr
  24709.  zaznaczenie       Raport przegl1d          Zamknij przycisk         PDF czcionki             Prosz
  24710.  czeka
  24711.  ...        Konwertowa
  24712.  zak3adki na format 'Excel 97' ? (MS Excel lub OpenOffice)                                                             Powt
  24713.  nag3
  24714. wki strony w karcie                               Powt
  24715.  stopk
  24716.  strony w karcie                                 Rozszerzenie pliku                       Pola numeru strony w karcie                            Ustaw w szeregu kom
  24717. rki znakowe z lewej           Zapisz jako MHTML                  Dane raport s1 zbyt du
  24718. e, aby wyeksportowa
  24719.  je do formatu Excel.                                                                                      Konwertuj do formatu XLS                          Przygotowanie danych                INDONESIAN     INDONESIA      201111281252Cetak                              Halaman Pertama                    Sebelumnya                         Berikut                            Halaman terakhir                   Ke halaman                         Tampilkan halaman                  Cetak laporan                      Tutup laporan                      Toolbar                            Satu halaman                       Dua halaman                        Empat halaman                      Halaman penuh                      Zoom                               Lebar halaman                      Ke halaman                         Satu halaman                       Dua halaman                        Empat halaman                      Menampilkan laporan...             Gagal membuat berkas !
  24720. Silahkan mencoba sesaat lagi.                            Error                              Tidak ditemukan printer.
  24721. Silahkan instal printer and jalankan ulang laporan.                        \<Miniatur...                      Salinan                            Simpan Laporan                     Simpan sebagai gambar...           Simpan sebagai PDF                 Simpan sebagai HTML                Simpan sebagai RTF                 Simpan sebagai XLS                 Simpan sebagai TXT / CSV / XL5     Lokasi tujuan (path)               Kirim laporan lewat e-mail                   Tutup Laporan                      Cetak Laporan                      Tampilkan Miniatur                 Preview global                     Printer yang tersedia              Ke halaman                         Ok                                 Batalkan                           Preferensi Percetakan              Sesuaikan Percetakan               Umum                               Preferensi                         Jumlah halaman                     Semua halaman                      Halaman ini                        Halaman                            Halaman dari %FP% s/d %LP%         Halaman no.                        Set halaman pertama                Set halaman terakhir               Set halaman berikut                Set halaman sebelumnya             Konfigurasi              Setup preview laporan                             Umum           Bahasa                   Tampilan toolbar                   Posisi dock              Jumlah halaman di previewTingkat Zoom             Status Jendela           Miniatur per halaman          Tampilkan           Sembunyikan         Undocked            Toolbar di bagian ATAS jendela               Toolbar di bagian KIRI jendela               Toolbar di bagian KANAN jendela              Toolbar di bagian BAWAH jendela              Gunakan pengaturan dari berkas                    Normal         Minimized           Maximized           Controls       Output         Email          Jenis email                   Jenis lampiran                Ciptakan berkas email secara otomatis             Pengaturan pengiriman email        Server SMTP              Login               Password            Port SMTP           Pengirim            Gunakan koneksi aman (SSL)         Modus Custom                       Kirim email                        Judul Subjek        Kepada              Pesan               Kirim               Ukuran tombol            Kecil (16x16 pixels)     Besar (32x32 pixels)     Cari                Cari berikut                  Pencarian mundur                             Cari teks:                                   Tidak ditemukan!                   Error kirim email                            Tujuan tidak ditentukan                      Pesan tidak terkirim                         Protokol otentikasi tidak valid              SMTP server tidak ditentukan                 User name/Password diperlukan utk otentikasi dasar          From kosong                                  Subjek kosong                                Konfigurasi email salah                      Lampiran tidak ditemukan                Bahasa yang dipilih tidak ditemukan     Berkas sumber laporan tidak ditemukan        Simpan berkas sebagai...           Opsi-opsi global utk printer            Setup property sheet utk printer ini    Maks. halaman pencarian                 Progress bar             Default                       Windows progress bar                    Modus diam                    Initialisasi...          Menjalankan kalkulasi prepass...        Membuat output...        sec(s)    Hentikan eksekusi laporan? (Jika pilih 'No', eksekusi laporan dilanjutkan.)               Tekan Esc utk membatalkan...            Eksekusi laporan dibatalkan. Hasil Anda tidak lengkap.                                              Perhatian      Settings telah di-update. Perubahan akan berlaku di preview laporan yang akan datang.               Italic         Bold           Underline      Font size                Font name           Lampiran       Align left               Align right              Align center             Full justified           Besarkan indent     Kecilkan indent     Hyperlink      Gambar              Bar horisontal      Model HTML untuk pesan   Minta kwitansi                     Prioritas      Cut            Copy           Paste          Berkas berhasil dibuat                  Daftar dengan bullet          Daftar dengan nomor           Undo                Redo                Dokumen baru             Kembalikan format             Email telah dikirim!          Mengirim pesan... Silahkan menunggu     Warna teks               Warna latar belakang     Hapus berkas lampiran                   Berkas HTML utk digunakan sbg email body                    Jadikan berkas tersimpan sbg email body default pada sesi berikut?                        Buka viewer default                     Opsi-opsi PDF                 Gabungkan fonts                    Injinkan cetak                Injinkan sunting              Injinkan salin                Injinkan menambahkan catatan       Enkripsikan dokumen           Password Utama                Password pengguna             Password utama dan pengguna utk PDF harus berbeda!                    Modus halaman                 Tampilan biasa                Tampilkan outlines pane       Tampilkan thumbnails pane     Penulis PDF                   Judul PDF                     Daftar simbol atau font barcode                   Daftar font yg tak bisa dikonversi ke PDF. Pada umumnya font barcode dan symbol. Delimited with commas, cth. "Webdings,Biro"                                              Konfigurasi SMTP email tidak valid      Tetap dilanjutkan?                      Setup tidak konsisten                   Default                       Pelih para penerima                     Cari di field                 Render halaman sebagai gambar      Lampirkan berkas         Pilih semua              Unselect semua           Membalikkan seleksi      Preview laporan          Tombol tutup             Font default PDF         Silahkan menunggu...     Konversi worksheet ke format 'Excel 97'? (membutuhkan MS Excel atau OpenOffice)                                                   Ulangi page headers laporan di worksheet                         Ulangi page footers laporan di worksheet                         Ekstensi berkas worksheet                Mengabaikan field nomor halaman di worksheet           Sel karakter dijajar ke kiri                      Simpan sebagai MHTML               Report is too big to be exported to the Excel format. Revise the created document because it is incomplete!                                           Converting to XLS format                          Preparing data                      GERMAN         DEUTSCH        201111281252Drucken                            Erste Seite                        Zur
  24722. ck                             Vor                                Letzte Seite                       Gehe zu Seite                      Anzahl Seiten                      Drucken                            Beenden                            Toolbar                            1 Seite                            2 Seiten                           4 Seiten                           Ganze Seite                        Anzeigegr
  24723. e                       Seitenbreite                       Gehe zu Seite                      1 Seite                            2 Seiten                           4 Seiten                           Vorschau f
  24724. r ...                   Datei konnte nicht erstellt werden. Bitte versuchen Sie es erneut.              Fehler                             Keine Drucker gefunden. Bitte installieren Sie einen Drucker und versuchen es dann erneut.          \<Miniaturansichten...             Kopien                             Speichern                          Speichern als Bild                 Speichern als PDF                  Speichern als HTML                 Speichern als RTF                  Speichern als XLS                  Speichern als TXT / CSV / XL5      Zielordner                         Als Email versenden                          Beenden                            Drucken                            Miniaturansichten anzeigen         Vorschau                           Verf
  24725. gbare Drucker                 Gehe zu Seite                      OK                                 Abbrechen                          Druckoptionen                      Drucken                            Allgemein                          Optionen                           Seitenbereich                      Alles                              Aktuelle Seite                     Seiten                             Seitenbereich ( %FP% - %LP% )      Seite #                            Erste Seitengruppe                 Letzte Seitengruppe                N
  24726. chste Seitengruppe               Vorherige Seitengruppe             Optionen                 Optionen                                          Allgemein      Sprache                  Toolbar-Sichtbarkeit               Toolbar-Position         Anzahl Vorschauseiten    Anzeigegr
  24727. e             Vorschaufenster          Miniaturen pro Seite          Sichtbar            Unsichtbar          Frei                Toolbar oben                                 Toolbar links                                Toolbar rechts                               Toolbar unten                                Einstellungen aus Ressourcendatei                 Normal         Minimiert           Maximiert           Steuerelemente Ausgabe        Email          Email-Modus                   Attachment-Typ                Email automatisch erstellen                       CDO Email-Einstellungen            SMTP Server              Benutzername        Passwort            SMTP Port           Absender            Sichere Verbindung (SSL)           Eigene Methode                     Email senden                       Betreff             An                  Text                Senden              Schaltfl
  24728. chengr
  24729. e       Klein (16x16 Pixel)      Gro
  24730.  (32x32 Pixel)       Suchen              Weiter Suchen                 R
  24731. rts Suchen                             Text Suchen                                  Nicht gefunden                     Fehler beim Senden                           Ziel nicht definiert                         Nachricht wurde nicht gesendet               Ung
  24732. ltiges Authentifizierungsprotokoll       SMTP Server nicht spezifiziert               Benutzername/Passwort erforderlich                          Absender ist leer                            Betreffzeile ist leer                        Ung
  24733. ltige Email-Konfiguration                Anhang nicht gefunden                   Ausgew
  24734. hlte Sprache nicht gefunden      Report-Datei nicht gefunden                  Datei Speichern als...             Allgemeine Druck-Optionen               Eigenschaften des aktuellen Druckers    Max. zu durchsuchende Seiten            Fortschrittsanzeige      Standard                      Windows Fortschrittsanzeige             Stiller Modus                 Initialisierung...       Seiten werden berechnet...              Ausgabe wird berechnet...Sek.      Erstellung abbrechen? (W
  24735. hlen Sie "Nein" um fortzusetzen)                                 Dr
  24736. cken Sie Esc um abzubrechen...       Reporterstellung abgebrochen. Resultat ist unvollst
  24737. ndig.                                           Vorsicht       Einstellungen wurden aktualisiert. 
  24738. nderungen werden in der n
  24739. chsten Vorschau wirksam.              Kursiv         Fett           Unterstrichen  Schriftgr
  24740. e             Schriftname         Anh
  24741. nge        Linksb
  24742. ndig              Rechtsb
  24743. ndig             Zentriert                Blocksatz                Rand vergr
  24744. ern     Rand verkleinern    Link           Bild                Horizontales Band   Nachricht als HTML       Best
  24745. tigung anfordern              Priorit
  24746. t      Ausschneiden   Kopieren       Einf
  24747. gen       Datei wurde erfolgreich erstellt.       Aufz
  24748. hlungszeichen            Aufz
  24749. hlungsnummern            R
  24750. ngig          Wiederholen         Neues Dokument           Formatierung zur
  24751. cksetzen     Email wurde gesendet          Nachricht wird gesendet...              Schriftfarbe             Hintergrundfarbe         Dateianlage entfernen                   HTML Email-Vorlage                                          Soll die gespeicherte Datei ab der n
  24752. chsten Sitzung zur Standardvorlage werden?           Ansicht 
  24753. ffnen                          PDF-Optionen                  Fonts einbetten                    Drucken zulassen              Editieren zulassen            Kopieren zulassen             Hinzuf
  24754. gen von Anmerkungen zulassenDokument verschl
  24755. sseln        Passwort Administrator        Passwort Benutzer             PDF-Passw
  24756. rter f
  24757. r Administrator und Benutzer m
  24758. ssen verschieden sein Seiten-Modus                  Standrdansicht                Entwurfsansicht               Miniaturansicht               PDF Autor/in                  PDF Titel                     Liste Symbol-/BarCode Fonts                       Zeichens
  24759. tze, die ins PDF-Format konvertiert werden k
  24760. nnen. Typischerweise BarCodes und Symbol-Fonts. Komma-separierte Liste, z.B.. "Webdings,Biro"                       Ung
  24761. ltige SMTP Email-Konfiguration!     Trotzdem fortfahren?                    Setup-Fehler                            Standard                      Auswahl Empf
  24762. nger                       Suchen in                     Seiten als Bilder generieren       Datei anh
  24763. ngen           Alles ausw
  24764. hlen          Auswahl aufheben         Auswahl umkehren         Druckvorschau            Schlie
  24765. en-Schaltfl
  24766. che   PDF Standardschriftart   Bitte warten Sie ...     Arbeitsblatt ins 'Excel 97' Format konvertieren? (erfordert MS Excel oder OpenOffice)                                             Reportseiten-
  24767. berschriften in Excel wiederholen                  Reportseiten-Fu
  24768. zeilen in Excel wiederholen                      Excel-Dateinamenerweiterung              Entfernt Seitenzahlfelder in Excel                     Zeichenformattierte Zellen linksb
  24769. ndig            Speichern als MHTML                Report is too big to be exported to the Excel format. Revise the created document because it is incomplete!                                           Converting to XLS format                          Preparing data                      CZECH          
  24770.           201111281250Tisk                               Prvn
  24771.  strana                       P
  24772. edchoz
  24773.                           Dal
  24774.                               Posledn
  24775.  strana                    Jdi na stranu...                   Zobrazit str
  24776. nky                   Tisknout                           Zav
  24777. hled                      N
  24778. stroje                           Zobrazit jednu str
  24779. nku             Zobrazit dv
  24780. nky               Zobrazit 
  24781. i str
  24782. nky             Cel
  24783. nka                       Lupa                               Cel
  24784. ka                         Jdi na ...                         Zobrazit jednu str
  24785. nku             Zobrazit dv
  24786. nky               Zobrazit 
  24787. i str
  24788. nky             N
  24789. hled tisku...                    Chyba p
  24790. i vytv
  24791.  souboru ! Zkuste to pros
  24792. m znovu.                           Chyba                              
  24793. rny!  Pros
  24794. m, nainstalujte tisk
  24795. rnu a zkuste to znovu.                                   \<N
  24796. hledy...                       Po
  24797. et kopi
  24798.                         Ulo
  24799. it jako...                     Ulo
  24800. it jako obr
  24801. zek...             Ulo
  24802. it jako PDF                    Ulo
  24803. it jako HTML                   Ulo
  24804. it jako RTF                    Ulo
  24805. it jako XLS                    Ulo
  24806. it jako TXT / CSV / XL5        Ulo
  24807. it do                          Odeslat sestavu e-mailem                     Zav
  24808. t                             Tisknout                           Zobrazit n
  24809. hledy                   N
  24810. hledy                            Dostupn
  24811.  tisk
  24812. rny                  Jdi na stranu...                   Ok                                 Storno                             P
  24813. edvolby tisku                    Nastaven
  24814.  tisku                    Obecn
  24815.                              P
  24816. edvolby                          Rozsah str
  24817. nek                     V
  24818. echny str
  24819. nky                    Aktu
  24820.  strana                    Str
  24821. nky:                           Strany od %FP% do %LP%             Strana                             Nastav prvn
  24822.  stranu                Nastav posledn
  24823.  stranu             Nastav dal
  24824.  stranu                Nastav p
  24825. edchoz
  24826.  stranu            Konfigurace              Konfigurace prohl
  24827. e                            Obecn
  24828.          Jazyk                    Zobrazit panel n
  24829. stroj
  24830.             Um
  24831.  panelu n
  24832. stroj
  24833. et zobrazen
  24834. ch stran  Zv
  24835.                  Pozice okna              Miniatur na stranu            Zobrazit            Skr
  24836. t               Voln
  24837.                Panel n
  24838. stroj
  24839.  naho
  24840. e                        Panel n
  24841. stroj
  24842.  vlevo                         Panel n
  24843. stroj
  24844.  vpravo                        Panel n
  24845. stroj
  24846.  dole                          Pou
  24847. t nastaven
  24848.  z resource souboru               Norm
  24849.        Minimalizovan
  24850.       Maximalizovan
  24851.       Prvky          V
  24852. stup         E-mail         Typ e-mailu                   Typ p
  24853. lohy                   Automaticky generovan
  24854.  e-mail                     CDO Email nastaven
  24855.                 SMTP server              Jm
  24856. no               Heslo               SMTP port           Odes
  24857. latel          Zabezpe
  24858. ipojen
  24859.  (SSL)        Vlastn
  24860.  procedura                  Odeslat e-mail                     P
  24861. t             Komu                Zpr
  24862. va              Odeslat             Velikost tla
  24863. tek        Mal
  24864.  (16x16 pixels)      Velk
  24865.  (32x32 pixels)     Hledat              Hledat dal
  24866.                   Hledat p
  24867. edchoz
  24868.                              Hledat text:                                 Nenalezeno!                        Chyba p
  24869. i odes
  24870.  emailu                   C
  24871. l nen
  24872.  definov
  24873. n                           Zpr
  24874. va NEBYLA odesl
  24875. na                       Neplatn
  24876.  autentifika
  24877.  protokol             SMTP server nen
  24878.  nastaven                    Jm
  24879. no/Heslo je vy
  24880. no pro z
  24881. kladn
  24882.               Chyb
  24883.  odes
  24884. latel                             Chyb
  24885.  subjekt                                Chybn
  24886.  konfigurace emailu                    P
  24887. loha nenalezena                      Nelze nal
  24888. zt po
  24889. adovan
  24890.  jazyk           Nelze nal
  24891. zt zdrojov
  24892.  soubor reportu         Ulo
  24893. it jako...                     Obecn
  24894.  vlastnosti tisk
  24895. rny              Nastavit vlastnosti aktu
  24896.  tisk
  24897. rny   Maximum str
  24898. nek pro hled
  24899.              Pr
  24900. h                   V
  24901.                        Pr
  24902. h                                  Tich
  24903. d                     Inicializace...          Prob
  24904.  kalkulace                       Vytv
  24905. stupu        sec(s)    Zastavit tisk ?  (Pokud zvol
  24906. te NE, tisk bude pokra
  24907. ovat...)                              Stiskn
  24908. te ESC pro p
  24909.              Tisk byl p
  24910. en. V
  24911. sledky nejsou kompletn
  24912. .                                                       Upozorn
  24913.      Nastaven
  24914. eno. Zm
  24915. ny se projev
  24916. i dal
  24917. m tisku.                                            Naklon
  24918.       Tu
  24919.           Podtr
  24920.       Velikost p
  24921. sma           P
  24922. smo               P
  24923. lohy        Zarovnat vlevo           Zarovnat vpravo          Zarovnat doprost
  24924. ed      Do bloku                 Zv
  24925. it okraj       Zmen
  24926. it okraj       Odkaz          Obr
  24927. zek             Horizont
  24928. ta  HTML 
  24929. ablona             Dotaz na p
  24930. jemce                  Priorita       Odst
  24931. ihnout    Kop
  24932. rovat      Vlo
  24933. it         Soubor byl 
  24934.  vytvo
  24935. en             Form
  24936. ek           Form
  24937. sel             Zp
  24938. t                Vp
  24939. ed               Nov
  24940.  dokument            Vymazat form
  24941.            Email by odesl
  24942. n!             Zpr
  24943. va se odes
  24944. , strpen
  24945.  pros
  24946. m...    Barva textu              Barva pozad
  24947.              Odebrat p
  24948. lohu                         HTML soubor, kter
  24949.  bude pou
  24950. it jako t
  24951. lo emailu             Pou
  24952. t ulo
  24953.  soubor jako t
  24954. lo emailu pro p
  24955.  ?                                       Otev
  24956.  prohl
  24957.                PDF volby                     Vlo
  24958.  fonty                      Povolit tisk                  Povolit 
  24959. pravy                Povolit kop
  24960.             Povolit pozn
  24961. mky                   Za
  24962. ifrovat dokument           Heslo administr
  24963. tora          Heslo u
  24964. ivatele               Administr
  24965. torsk
  24966. ivatelsk
  24967.  heslo se nesm
  24968.  shodovat!               M
  24969. d str
  24970. nky                   Normaln
  24971.  zobrazen
  24972.             Zobrazit obrysy               Zobrazit n
  24973. hledy              PDF Autor                     PDF titulek                   Seznam font
  24974.                                       Seznam font
  24975. , kter
  24976.  nemohou b
  24977. t vlo
  24978. eny do PDF. Obvykle 
  24979. dy nebo symboly. Nap
  24980. . "Webdings,Biro".                                                                  Chybn
  24981.  SMTP konfigurace!                Pokra
  24982. ovat ?                            Chybn
  24983.  konfigurace                      V
  24984.                        Vybrat p
  24985. jemce                         Hledat                        Vykreslit str
  24986. nky jako obr
  24987. zky     P
  24988. ipojit soubor          Vybrat v
  24989. e               Zru
  24990. it ozna
  24991.           Invertovat v
  24992. r         N
  24993. hled tisku             Tla
  24994. tko zav
  24995. t          PDF v
  24996. smo        
  24997. ekejte pros
  24998. m ...       Konvertovat list do form
  24999. tu 'Excel97'? (vy
  25000. aduje nainstalovan
  25001.  MS Excel nebo Open Office)                                         Opakovat z
  25002. nky v listu                                 Opakovat z
  25003. nky v listu                                  P
  25004. pona souboru                          Vynechat pole 
  25005. slo str
  25006. nky v listu                    Zarovnat bu
  25007. ky doleva                             Ulo
  25008. it jako MHTML                  Report is too big to be exported to the Excel format. Revise the created document because it is incomplete!                                           Converting to XLS format                          Preparing data                      ARABIC         ARABIC         201111281256
  25009.                               
  25010.                       
  25011.                              
  25012.                              
  25013.                      
  25014.                            
  25015.                      
  25016.                       
  25017.                               
  25018.                             
  25019.                          
  25020.                              
  25021.                          
  25022.                        
  25023.                               
  25024.                          
  25025.                            
  25026.                          
  25027.                              
  25028.                          
  25029.                         
  25030.                                 
  25031.                                 
  25032.                                         \<
  25033.                         
  25034.                         
  25035.                       
  25036.                         
  25037.  PDF                          
  25038.  HTML                         
  25039.  RTF                          
  25040.  XLS                          
  25041.  TXT / CSV / XL5              Output path                        
  25042.              
  25043.                       
  25044.                       
  25045.                           
  25046.                            
  25047.                    
  25048.                            
  25049.                               
  25050.                               
  25051.                      
  25052.                         
  25053.                               
  25054.                        
  25055.                        
  25056.                           
  25057.                         
  25058.                               
  25059.  %FP% 
  25060.  %LP%           
  25061.                            
  25062.                    
  25063.                    
  25064.              
  25065.              
  25066.                   
  25067.                                 
  25068.           
  25069.                     
  25070.                        
  25071.               
  25072.             
  25073.                
  25074.                
  25075.            
  25076.             
  25077.                             
  25078.                            
  25079.                            
  25080.                             
  25081.                 
  25082.            
  25083.                 
  25084.                 
  25085.         
  25086.           
  25087.          
  25088.                   
  25089.                 
  25090.  CDO      
  25091.  SMTP              
  25092.         
  25093.            
  25094.  SMTP          
  25095.               
  25096.  (SSL)                    
  25097.                       
  25098.             
  25099.              
  25100.          
  25101.                 
  25102.                
  25103.               
  25104.  (16x16)             
  25105.  (32x32)             
  25106.                  
  25107.                       
  25108.                                     
  25109. :                                    
  25110.                        
  25111.               
  25112.                              
  25113.                               
  25114.                    
  25115.  SMTP 
  25116.                         
  25117.                      
  25118.                                 
  25119.                            
  25120.                 
  25121.                         
  25122.         
  25123.               
  25124. ....                    
  25125.                    
  25126.             
  25127.             
  25128.               
  25129.                      
  25130.                        
  25131.                           
  25132. ...                 Running calculation prepass...          
  25133.  ...        
  25134. )                           
  25135.  Esc 
  25136.  ...                    
  25137.                                                           
  25138.          
  25139. .                              
  25140.            
  25141.            
  25142.           
  25143.                  
  25144.             
  25145.        
  25146.             
  25147.             
  25148.            
  25149.              
  25150.        
  25151.        
  25152.          
  25153.                 
  25154.            
  25155.  HTML     
  25156.                       
  25157.          
  25158.             
  25159.             
  25160.           
  25161.                       
  25162.        
  25163.                  
  25164.              
  25165.                
  25166.               
  25167.                  
  25168.  ... 
  25169.        
  25170.               
  25171.               
  25172.                             
  25173.  HTML 
  25174.                      
  25175.                                    
  25176.                   
  25177.  PDF                 
  25178.                      
  25179.                
  25180.                
  25181.                  
  25182.               
  25183.                  
  25184.             
  25185.               
  25186.                 
  25187.                     
  25188.                       
  25189.             
  25190.           
  25191.  PDF                   
  25192.  PDF                  
  25193.                                 
  25194.  PDF. 
  25195. . "Webdings
  25196.  Biro"                                      
  25197.  SMTP 
  25198.       
  25199.                                 
  25200.                         
  25201.                      
  25202.                           
  25203.                      
  25204.                 
  25205.                 
  25206.             
  25207.              
  25208.             
  25209.               
  25210.                
  25211.  PDF    
  25212.  ...      
  25213.  "Excel 97"? (
  25214.  Excel or OpenIffice 
  25215. )                                                
  25216.  worksheet                                    
  25217.  worksheet                                    
  25218.  Worksheet                         
  25219.  worksheet                             
  25220.                            
  25221.  MHTML                        Report is too big to be exported to the Excel format. Revise the created document because it is incomplete!                                           Converting to XLS format                          Preparing data                      GREEK          
  25222.        201303121253
  25223.                            D
  25224.                        D
  25225.                         
  25226.                             
  25227.                    I
  25228.                  
  25229.                    
  25230.                   E
  25231.             
  25232.                        1 
  25233.                            2 
  25234.                           4 
  25235.                           I
  25236.                     
  25237.                          D
  25238.               I
  25239.                  I
  25240.                          
  25241.                         
  25242.                    D
  25243. ...          
  25244. ...                         
  25245.                               
  25246. .           \<I
  25247. ...                  
  25248.                           
  25249.                 
  25250. ...   
  25251.  PDF                  
  25252.  HTML                 
  25253.  RTF                  
  25254.  XLS                  
  25255.  TXT / CSV / XL5      
  25256.                       
  25257.  e-mail                E
  25258.             
  25259.                   
  25260.               E
  25261.                I
  25262.                  IE                                 
  25263.                             D
  25264.                 D
  25265.                 A
  25266.                              D
  25267.                         
  25268.                       
  25269.                     
  25270.                     
  25271.                             
  25272.  %FP% 
  25273.  %LP%          
  25274.                              D
  25275.                      
  25276.                  
  25277.                    D
  25278.                
  25279.              
  25280.                  A
  25281.          A
  25282.                    I
  25283.             E
  25284.            
  25285.       E
  25286. o      I
  25287.        I
  25288.                
  25289.               
  25290.           
  25291.                 
  25292.            
  25293.               
  25294.                
  25295.                   E
  25296.        
  25297.     I
  25298.      D
  25299.         
  25300.      Email          
  25301.                    
  25302. o              
  25303. o Email                 
  25304. o CDO         
  25305.  SMTP         
  25306.              E
  25307. o     D
  25308.  SMTP           
  25309.           
  25310.  (SSL)              
  25311.            
  25312. mail                     E
  25313.                 D
  25314.                 
  25315.                 
  25316. _            I
  25317.          I
  25318.  (16x16 pixels)     I
  25319.  (32x32 pixels     
  25320.               
  25321. o               
  25322. o                          E
  25323. :                                     
  25324. !                     
  25325. _ email                    D
  25326.                    
  25327.                        
  25328.             I 
  25329.  SMTP 
  25330.            
  25331.       E
  25332.                              E
  25333.                                     E
  25334.  email                        
  25335.               
  25336.          
  25337.  ...          E
  25338.             
  25339. _      I
  25340. o           
  25341.                     
  25342.  Windows              
  25343.                        
  25344. ...          D
  25345. ...    
  25346. ...   
  25347. ...)    D
  25348.  Esc a
  25349. ...               
  25350. .                                    D
  25351. _        I
  25352. .             D
  25353. _   Od
  25354.     I
  25355.        
  25356.       
  25357.         
  25358.            
  25359.       D
  25360.           
  25361.        I
  25362.        Od
  25363.               I
  25364.     I_
  25365. _ HTML     
  25366. d_        
  25367. _      
  25368.      
  25369.      E
  25370.                      
  25371.                       
  25372.             
  25373.               
  25374.          Email 
  25375. !               
  25376. ...    
  25377.      
  25378.        
  25379. o                     
  25380.  HTML a
  25381.                      
  25382. ;        
  25383. _     
  25384.  PDF                  
  25385.       
  25386.           
  25387.        
  25388. _         
  25389.     E
  25390. o        E
  25391.              
  25392. _          
  25393.  PDF d
  25394.               E
  25395.                   
  25396.      
  25397.      
  25398. o PDF             
  25399. o PDF                
  25400.                  E
  25401.  PDF. 
  25402. . "Webdings,Biro"                             
  25403. _ SMTP       
  25404. ;                    
  25405.               
  25406.                    
  25407.                        
  25408. o                 
  25409.          
  25410.          
  25411.              
  25412.           
  25413.       D
  25414.       
  25415.  PDFD
  25416.  ...  I
  25417. _ 'Excel 97'; (
  25418.  MS Excel _ OpenOffice 
  25419. )                                               
  25420.                    
  25421.                           
  25422.             
  25423.          
  25424.  MHTML                D
  25425. _ Excel. 
  25426. !                                             I
  25427. _ XLS                        D
  25428.             FRENCH         FRAN
  25429. AIS       201111281252Imprimer                           Premi
  25430. re page                      Pr
  25431. dente                         Suivante                           Derni
  25432. re page                      Aller 
  25433.  la page                    Afficher les pages                 Imprimer le rapport                Fermer la pr
  25434. visualisation         Barre d'outils                     1 Page                             2 Pages                            4 Pages                            Page Enti
  25435. re                       Zoom                               Largeur de Page                    Aller 
  25436.  la page                    Une page                           Deux pages                         Quatre pages                       Pr
  25437. visualisation du rapport        Impossible de cr
  25438. er le fichier ! S.V.P., veuillez r
  25439. essayer plus tard.          Erreur                             Aucune imprimante trouv
  25440. e. Veuillez installer une imprimante et r
  25441. essayer le rapport.               \<Miniatures...                    Copies                             Sauvegarder le rapport             Sauvegarder en fichier image...    Sauvegarder en PDF                 Sauvegarder en HTML                Sauvegarder en RTF                 Sauvegarder en XLS                 Sauvegarder en TXT / CSV / XL5     Chemin de sauvegarde               Envoyer le rapport par courriel              Fermer la pr
  25442. visualisation         Imprimer le Rapport                Afficher les Miniatures            Pr
  25443. visualisation Globale           Imprimantes Disponibles            Aller 
  25444.  la page                    Ok                                 Annuler                            Param
  25445. tres d'impression            Personnalisation de l'impression   G
  25446. ral                            Pr
  25447. rences                        Plage de Pages                     Toutes les Pages                   Page en Cours                      Pages                              Pages %FP% 
  25448.  %LP%                  Page #                             Premier groupe de pages            Dernier groupe de pages            Groupe de pages suivant            Groupe de pages pr
  25449. dent          Configurations           Configuration de l'aper
  25450. u avant impression        G
  25451. ral        Langage                  Visibilit
  25452.  de la Barre d'Outils    Position d'Accrochage    Nombre de rep
  25453. res        Niveau de Zoom           Etat de la fen
  25454. tre       Miniatures par page           Visible             Invisible           Flottant            Barre d'Outils en HAUT de la fen
  25455. tre         Barre d'Outils 
  25456.  GAUCHE de la fen
  25457. tre        Barre d'Outils 
  25458.  DROITE de la fen
  25459. tre        Barre d'Outils en BAS de la fen
  25460. tre          Utiliser les param
  25461. trages du fichier de ressourcesNormal         R
  25462. duit              Agrandi             Contr
  25463. les      Sortie         Courriel       Type de courriel              Type de Pi
  25464. ce Jointe          G
  25465. rer automatiquement le fichier de courriel    Configuration CDO                  Serveur SMTP             Utilisateur         Mot de Passe        Port SMTP           Exp
  25466. diteur          Connexion S
  25467. curis
  25468. e (SSL)          Proc
  25469. dure personnalis
  25470. e            Envoyer le Courriel                Objet               
  25471.                    Texte               Envoyer             Taille des Boutons       Petit (16x16 pixels)     Grand (32x32 pixels)     Rechercher          Trouver le suivant            Trouver le pr
  25472. dent                         Chercher:                                    Texte non trouv
  25473. !                  Erreur lors de l'envoi du courriel           Le destinataire n'a pas 
  25474. fini           Le message n'a pas 
  25475.  envoy
  25476.                 Protocole d'authentification invalide        Le serveur SMTP n'a pas 
  25477.  identifi
  25478.         Nom/Mot de passe obligatoires pour autentification de base  Le formulaire est vide                       L'objet est vide                             La configuration du courriel est invalide    La pi
  25479. ce jointe n'a pas 
  25480.  trouv
  25481. e     Le langage s
  25482. lectionn
  25483.  est introuvable  Le rapport source est introuvable            Enregistrer sous...                Options d'impression globales           Configuration de l'imprimante en cours  Nbre Maximum de pages 
  25484.  chercher        Barre de progression     D
  25485. faut                        Barre de progression Windows            Silencieux                    Initialisation...        Calculs pr
  25486. paratoires en cours...       Cr
  25487. ation de la sortie... sec(s)    Voulez-vous interrompre l'ex
  25488. cution du rapport? (Si Non, l'ex
  25489. cution du rapport reprendra)Appuyez sur <
  25490. chap> pour annuler...     L'ex
  25491. cution du rapport a 
  25492.  interrompue. Vos r
  25493. sultats sont incomplets.                            Attention      Configuration mise 
  25494.  jour. Les changements effectu
  25495. s seront op
  25496. rationnels 
  25497.  la prochaine session.   Italique       Gras           Soulign
  25498.        Taille de police         Police              Pi
  25499. ces jointes Align
  25500.  gauche          Align
  25501.  droite          Centr
  25502.                    Justifi
  25503.                  Augmenter la marge  Diminuer la marge   HyperLien      Image               Barre Horizontale   Message au format HTML   Accus
  25504.  de R
  25505. ception                Priorit
  25506.        Couper         Copier         Coller         Le fichier a 
  25507.  avec succ
  25508. s       Liste de points               Liste num
  25509. e               Annuler             Refaire             Nouveau document         Supprimer le formattage       Le courriel a 
  25510.  envoy
  25511. !     Envoie du courriel...  Un instant SVP...Couleur de la police     Couleur de fond          Supprimer fichier en pi
  25512. ce jointe       Fichier HTML qui sera utilis
  25513.  comme corps du message        Rendre le fichier enregistr
  25514.  le corps du message par d
  25515. faut dans les prochaines sessions? Ouvrir le visualiseur par d
  25516. faut        Options PDF                   Polices Incorpor
  25517. es                Autoriser l'Impression        Autoriser la Modification     Autoriser la Copie            Autoriser l'Ajout de Notes         Crypter le Document           Mot de Passe Principal        Mot de Passe Utilisateur      Les mots de passe Principal et Utilisateur doivent 
  25518. tre diff
  25519. rents !  Mode de Page                  Vue Normale                   Affiche le plan               Affiche les vignettes         Auteur du PDF                 Titre du PDF                  Liste des polices de symboles ou codes-barre      Liste des polices ne pouvant pas 
  25520. tre converties en PDF. En g
  25521. ral, les polices de code-barre et de symboles. s
  25522. s par une virgule, par exemple "Webdings,Biro"       Configuration mail SMTP incorrecte !    Continuer quand m
  25523. me ?                  Configuration incoh
  25524. rente               D
  25525. faut                        Choisir les destinataires               Champ de recherche            Afficher les pages comme des imagesJoindre le fichier       Tout s
  25526. lectionner        Tout d
  25527. selectionner      Inverser la s
  25528. lection    Aper
  25529. u du Rapport        Bouton fermer            Police par d
  25530. faut PDF    Veuillez patienter...    Voulez-vous convertir la feuille de calcul au format "Excel 97" ? Il faut que MS Excel ou Open Office soit install
  25531. .              R
  25532. ter les en-t
  25533. tes de page du rapport sur la feuille de calcul R
  25534. ter les pieds de page du rapport sur la feuille de calcul    Extension du fichier de feuille de calculOmettre le num
  25535. ro de page sur la feuille de calcul     Aligner 
  25536.  gauche les cellules contenant du texte  Sauvegarder en MHTML               Report is too big to be exported to the Excel format. Revise the created document because it is incomplete!                                           Converting to XLS format                          Preparing data                      SWAHILI        SWAHILI        201111281252Chapisha                           Ukurasa Wa Kwanza                  Ukurasa Uliopita                   Ukurasa Ufuatao                    Ukurasa Wa Mwisho                  Enda Kwa Ukurasa Wa                Onyesha Kurasa                     Chapisha Ripoti                    Funga Ripoti                       Ubao wa vifaa                      Ukurasa                            Kurasa 2                           Kurasa 3                           Ukurasa Mzima                      Vuta                               Upana Wa Ukurasa                   Enda ukurasa wa                    Ukurasa mmoja                      Kurasa mbili                       Kurasa Nne                         Kuitazama Repoti                   Haikuwezekana kuunda faili ! Tafadhali jaribu tena baadaye                      Hitilafu                           Kichapishi hakikupatikana. Tafadhali Tawazisha Kichapishi alafu jaribu tena kuitembeza ripoti       \<Kifano Cha ripoti                Mara ya kuregelea vichapo          Hifadhi ripoti                     Hifadhi kama taswira               Hifadhi kama PDF                   Hifadhi kama HTML                  Hifadhi kama RTF                   Hifadhi kama XLS                   Hifadhi kama TXT / CSV / XL5       Mahala pakuhifadhi                 Tuma ripoti kwa barua pepe                   Funga ripoti                       Chapisha ripoti                    Onyesha vifano vya ripoti          Onyesho kwa jumla                  Vichapishi viliomo                 Nenda kwa ukurasa wa               Sawa                               Batilisha                          Khiyari za uchapishi               Badilisha Namna ya Uchapishi       Kwa kawaida                        Khiyari                            Kurasa za kuchapisha               Kurasa zote                        Ukurasa huu pekeyake               Kurasa                             Kutoka Kurasa %FP% to %LP%         Ukurasa nambari                    Ukurasa wa kuanzia                 Ukurasa wa kumalizia               Ukurasa unao fuatia                Ukurasa uliotangulia               Matayarisho              Maandalizi ya kutazama ripoti                     Kwa kawaida    Lugha                    Kuonekana kwa ubao wa vifaa        Mahali pa ubao vifaa     Idadi ya canvas          Kiwango cha kuvuta       Hali ya ripoti           Vifano kwa kila ukurasa       Kuonekana           Kutoonekana         Ondosha Mahali ilipoUbao wa vifaa juu ya ripoti                  Ubao wa vifaa kushoto mwa ripoti             Ubao wa vifaa kulia mwa repoti               Ubao wa vifaa chini mwa ripoti               Tumia marekebisho yaliyo hifadhiiwa               Kawaida        Imeteremshwa        Imepanuliwa         Dhibiti        Kutoa          Barua pepe     Aina ya barua pepe            Aina ya vishikanishwa         Moja kwa moja toa faili ya barua pepe             Marekebisho ya barua pepe za CDO   Muhudumu wa SMPT         Jina                Alama za siri       Mapitio ya SMTP     Mtumaji barua pepe  Maunganishi ya siri (SSL)          Utaratibu ulio undwa               Tuma barua pepe                    Madhumuni           Kwa                 Mwili wa barua      Tuma                Ukubwa wa vifungo        Ndogo (16x16 pixels)     Kubwa  (32x32 pixels)    Tafuta              Tafuta nyengine               Tafuta Kuenda kureglea nyuma                 Tafuta nyengine                              Maandishi hayakupatikana           Hitilafu katika kutuma barua pepe            Mafikio ya barua pepe haya kuwekwa           Barua haikutumwa                             Sheria za kuhakikisha hazifai                Muhudumu wa SMTP hajulikani                  Jina / Maandishi ya siri ya hitajika kwa kuhakikisha        Kutoka Kwa hakujawekwa kitu                  Madhumuni ya barua hakujawekwa kitu          Matayarishi ya barua pepe ni mabaya          Viambatanishwa havikupatikana           Lugha ilochaguliwa haikuonekana         Faili la ripoti halikupatikana               Hifadhi faili kama...              Khiyari yakuchagua kichapishi           Tayarisha viungo va kichapishi hiki     Jumla ya kurasa kutafutia               Ubao wa maendeleo        Kwa Kawaida                   Ubao wa maendeleo wa Windows            Kimya                         Ya anzisha...            Yaendelea kuhisabu vitangulizi          Yatengeneza toleo...     Nukta     Simamisha Utengenezaji wa ripoti ?( Bonyeza 'No', Utengenezaji Utaendelea.)               Bonyeza  Alama Ya Esc ku batilisha....  Utengenezaji wa ripoti ulibatilishwa. Matokeo ya ripoti haya kukamilika                             Samahani       Mabadiliko yamehifadhiwa. Mabadiliko yaliyo fanywa yatafanya kazi wakati repoti ikitazamwa tena     Lalisha        Nene           Piga mstari    Ukubwa wa herufi         jina la herufi      Vishikanishwa  Vutia kushoto            Vutia kulia              Weka katikati            Sawasanisha kabisa       Panua uwachanishi   Punguza uwachanishi Kiunga mtandao Picha               Mlingoti wa upana   Aina ya barua ya HTML    Ungependa ku arifiwa               Umuhimu        Kata           Nakili         Paka           Imefaulu kutengeneza faili              Alama za kupanga barua        Namabri za kupanga barua      Kutofanya           Fanya tena          Ukurasa mpya             Safisha matayarisho           Baura pepe ishatumwa!         Yatuma barua... Tafadhali subiri...     Rangi ya herufi          Rangi ya nyuma           Ondosha faili ilioshikanishwa           Faili ya HTML kutumika kama mwili wa barua pepe             Fanya faili ilio hifadhiwa kuwa mwili wa barua pepe wakati ujao?                          Fungua kiangalilio cha kawaida          Hiyari za PDF                 Shikanisha herufi                  Kubali ichapishwe             Kubali ibadilishwe            Kubali inakilishwe            Kubali iongezwe maneno             Ifunge ripoti                 Neno la siri la mwanzo        Neno la siri la mtumiaji      Neno la siri la mtumiaji na la mwanzo kwa PDF lazima liwe tofauti     Mfumo wa kurasa               Tazama kwa kwaida             Onyesha upande wa matoleo     Onyesha upande wa vikarakasi  Mwandishi wa PDF              Kichwa cha PDF                Orodha ya herufi za bar code ama kuashiria        Orodha ya herufi ambazo haziwezi kubadilishwa kwenye PDF. Kawaida za [bar code] na herufi za kuashiria zilotenganishwa na alama ya kupumzika kwa mfano "Webdings,Biro"    Matayarishi ya barua ya SMTP hayafai    Endelea hata hivyo?                     Matayarishi yasio lingamana             Kawaida                       Chagua wapokezi                         Tefuta maeneo                 Toa ripoti kama picha              Shikanisha Faili         Chagua zote              Ondosha vilochaguliwa    Geuza chaguo             Matokeo ya repoti        Kifungo cha kufunga      Herufi za PDF kawaida    Subiri ...               Badilisha iwe mfumo wa [worksheet] ya 'Excel 97' ? Yahitajia  uwe na  [MS Excel] ama  [OpenOffice]                                Regelea kichwa cha repoti kwenye [worksheet]                     Regelea Fundo la repoti kwenye [worksheet]                       Kiendelezi cha jina la faili             Ondosha alama ya hesabu ya ukurasa kwenye worksheet    Panga herufi zianze kushoto                       Hifadhi kama MHTML                 Report is too big to be exported to the Excel format. Revise the created document because it is incomplete!                                           Converting to XLS format                          Preparing data                      RUSSIAN        
  25537.         201111281251
  25538.                              
  25539.                     
  25540.                          
  25541.                           
  25542.                  
  25543.                 
  25544.                   
  25545.                       
  25546.                
  25547.                 1 
  25548.                          2 
  25549.                          4 
  25550.                          
  25551.                    
  25552.                     
  25553.                  
  25554.                 
  25555.                       
  25556.                        
  25557.                     
  25558. ...             
  25559. .                    
  25560.                              
  25561. .           
  25562. ...                       
  25563.                               
  25564.                     
  25565. ...       
  25566.  PDF                  
  25567.  HTML                 
  25568.  RTF                  
  25569.  XLS                  
  25570.  TXT / CSV / XL5      
  25571.                         
  25572.  e-mail                    
  25573.                       
  25574.                   
  25575.                  
  25576.      
  25577.                  
  25578.                  
  25579.                                  
  25580.                              
  25581.                    
  25582.                    
  25583.                               
  25584.                           
  25585.                    
  25586.                        
  25587.                    
  25588.                            
  25589.  %FP% 
  25590.  %LP%            C
  25591.  #                         
  25592.           
  25593.        
  25594.        
  25595.       
  25596.              
  25597.                     
  25598.           
  25599.                      
  25600.                 
  25601.       
  25602.            
  25603.           
  25604.              
  25605.            
  25606.       
  25607.      
  25608.        
  25609.       
  25610.                
  25611.           
  25612.      
  25613.            
  25614.          
  25615.      
  25616.           E-mail         
  25617.  E-mail              
  25618.                   
  25619.  e-mail          
  25620.  CDO                      SMTP-
  25621.               
  25622.                
  25623.               
  25624.  SMTP           
  25625.          
  25626.  (SSL)        
  25627.          
  25628.  e-mail                   
  25629.                 
  25630.                  
  25631.                 
  25632.            
  25633.             
  25634.  (16x16 
  25635.                
  25636.                    
  25637.                                
  25638. :                                 
  25639. !                 
  25640.  e-mail                       
  25641.                      
  25642.                  
  25643. !            SMTP-
  25644.                      
  25645.         
  25646.                               
  25647.                                  
  25648.  e-mail                    
  25649.                    
  25650.          
  25651.        
  25652. ...              
  25653.            
  25654.                 
  25655.              
  25656.                   
  25657.  Windows                    
  25658.                         
  25659. ...         
  25660. ...           
  25661. ...       
  25662. .      
  25663. .)   
  25664.  Esc 
  25665. ...               
  25666. .                         
  25667.        
  25668.          
  25669.      
  25670.             
  25671.      
  25672.          
  25673.     HTML-
  25674.        
  25675.               
  25676.       
  25677.        
  25678.      
  25679.        
  25680.                      
  25681.           
  25682.            
  25683.             
  25684.              
  25685.            
  25686.        E-mail 
  25687.           
  25688. ...      
  25689.               
  25690.                 
  25691.                         HTML-
  25692.               
  25693. ?                            
  25694.      
  25695.  PDF                     
  25696.                   
  25697.               
  25698.       
  25699.          
  25700.          
  25701.             
  25702.                  
  25703.            
  25704.  PDF 
  25705. !        
  25706.                 
  25707.                     
  25708.      
  25709.       
  25710.  PDF                     
  25711.  PDF                 
  25712.           
  25713.  PDF. 
  25714.  "Webdings,Biro"                      
  25715.  SMTP!         
  25716. ?                             
  25717.                 
  25718.                   
  25719.                      
  25720.                    
  25721.           
  25722.               
  25723.          
  25724.        
  25725.           
  25726.  PDF 
  25727.  ...            
  25728.  'Excel 97'? (
  25729.  MS Excel 
  25730.  OpenOffice)                                   
  25731.                
  25732.               
  25733.              
  25734.               
  25735.                  
  25736.  MHTML                
  25737.  Excel. 
  25738. !                                                                 
  25739.  XLS                       
  25740.                    DUTCH          NEDERLANDS     201111281252Afdrukken                          1e pagina                          Vorige pagina                      Volgende pagina                    Laatste pagina                     Ga naar blz.                       Bladzijde overzicht                Afdrukmenu                         Sluiten                            Zwevend menu                       Een bladzijde                      Twee bladzijden                    Vier bladzijden                    Volledige bladzijde                Zoomvergroting                     Pagina breedte                     Ga naar pagina                     E
  25741. n bladzijde                      Twee pagina's                      Vier pagina's                      Afdrukvoorbeeld                    Fout bij het maken van bestand !
  25742. Svp nogmaals proberen..                       Fout                               Geen printer gevonden.
  25743. Svp rapport na her installatie van printer nogmaals afdrukken.              \<Miniaturen                       Kopi
  25744. n                             Rapport opslaan                    Afbeelding opslaan                 Opslaan als PDF bestand            Opslaan als HTML bestand           Opslaan als RTF bestand            Opslaan als XLS bestand            Opslaan als TXT /CSV/XL5 bestand   Opslaan van volledige map          Rapport per E-mail verzenden                 Rapport opslaan                    Rapport afdrukken                  Miniaturen                         Algemeen afdrukvoorbeeld           Beschikbare printers               Ga naar pagina                     OK                                 Afbreken                           Afdruk voorkeursinstellingen       Afdrukinstellingen                 Algemeen                           Voorkeursinstellingen              Pagina reeks                       Alle pagina's                      Huidige pagina                     Pagina's                           Pagina van %FP% tot%LP%            Pagina nummer                      Eerste pagina groep                Laatste pagina groep               Volgende pagina groep              Vorige pagina groep                Instellingen             Raport afdrukvoorbeeld                            Algemeen       Taal                     Zwevende werkbalk zichtbaar        Werkbalk positie         Aantal pagina's          Vergrotingsfaktor        Venster situatie         Aantal miniaturen per pagina  Zichtbaar           Onzichtbaar         Zwevend             Werkbalk bovenaan venster                    Werkbalk links op venster                    Werkbalk rechts op venster                   Werkbalk onderaan venster                    Instelling van resource overnemen                 Normaal        Geminimaliseerd     Gemaximaliseerd     Stuurelementen Resultaat      Email          Email mode                    Bijlage type                  Automatisch gegenereerde mail                     Instellingen van CDO Mail          SMTP Servernaam          Gebruikersnaam      Wachtwoord          SMPT poort          Afzender            Versleutelde verbinding (SSL)      Eigen procedure                    Email versturen                    Onderwerp           Aan                 Tekst               Versturen           Groote van knoppen       Klein (16x16 pixels)     Groot (32x32 pixels)     Zoeken              Zoek volgende                 Zoek vorige                                  Zoek tekst                                   Tekst niet gevonden                Fout bij het versturen van Email             Geadresseerde niet aangegeven                Bericht is niet verzonden                    Onjuiste authorisatie gegevens               SMTP server niet aangegeven                  Gebruikersnaam en/of wachtwoord ontbreekt                   Afzender ontbreekt                           Onderwerp ontbreekt                          Verkleerde Email instellingen                Bijlage niet gevonden                   Kan de aangegeven taal niet vinden      Kan de rapport gegevens niet vinden          Bestand opslaan als.....           Algemene printer instellingen           Instellingen van de actuele printer     Maximaal aantal pagina's te doorzoeken  Voortgangsindicator      Standaard                     Windows voortgangsindicator             Stil                          Initialisatie....        Aantal pagina's wordt berekend....      Uitvoer samenstellen.... Seconden  Raport samenstelling afbreken? (Indien Nee gekozen wordt  doorgegaan met samenstelling)   Druk op Esc om te annuleren...          Raportsamenstelling is afgebroken.  Het resultaat is niet volledig.                                 Let op         Instellingen zijn aangepast. Worden bij een volgend rapport toegepast.                              Schuin         Vet            Onderstreept   Lettergrootte            Lettertype naam     Bijlage's      Links uitgelijnd         Rechts uitgelijnd        Gecentreerd              Uitgevuld                Inspringing vergroteInspringing verkleinHyperlink      Afbeelding          Horizontale streep  HTML code opmaak voor hetOntvangstbevestiging               Spoed          Knippen        Kopie          Plakken        Bestand  opslaan, geslaagd              Opsommingstekens              Opsommings nummering          Teniet doen         Herhalen            Nieuw document           Alles verwijderen             Email is verzonden            Bericht wordt verzoden                  Letterkleur              Achtergrondskleur        Bijlage verwijderen                     HTML bestand sjablooon voor Email tekst                     Moet het opgeslagen bestand als Emailsjabloon voor een volgend bericht gebruikt worden?   Bekijk normaal                          PDF opties                    Opgenomen lettertypen              Afdrukken                     Wijzig                        Kopie                         Notities                           Document versleutelen         Hoofdwachtwoord               Gebruikers password           Hoofd- en gebruikerwachtwoord moeten verschilend zijn                 Bekijken per bladzijde        Normaal                       Laat geheel overzicht zien    Laat miniaturen zien          PDF auteur                    PDF titel                     Symbolen en barcode typen lijst                   Lettertypen niet in PDF geconverteerd kunnen worden. Lijst van lettertypen met komma's gescheiden                                                                         Incorrecte SMTP email configuratie!     Toch doorgaan?                          Instellingsfout                         Normaal                       Selecteer ontvangers                    Zoeken                        Sla bladzijden als plaatje op      Bijlage                  Selecteer alles          Deselecteer alles        Selectie omdraaien       Print op scherm          Asluitknop               PDF standaardlettertype  Even wachten....         In Excel97 bestandsformaat wijzigen? -  Alleen mogelijk indein Excel of OpenOfffice ge
  25745. nstalleerd is                              Rapportkop op de werkbladen herhalen                             Rapport voettekst op werkbladen herhalen                         Werkblad bestandsformaat                 Zonder paginanummer op werkbladen                      Tekens in de cel links uitlijnen                  Opslaan als MHTML bestand          Report is too big to be exported to the Excel format. Revise the created document because it is incomplete!                                           Converting to XLS format                          Preparing data                      CHINESE        
  25746.        20111001936 
  25747.                                
  25748.                              
  25749.                              
  25750.                              
  25751.                            
  25752.                            
  25753.                             
  25754.                           
  25755.                            
  25756.                              
  25757.                              
  25758.                              
  25759.                              
  25760.                                
  25761.                                
  25762.                                
  25763.                            
  25764.                              
  25765.                              
  25766.                              
  25767.                            
  25768. !                                                        
  25769.                                
  25770.                                                               \<
  25771.                              
  25772.                                 
  25773.                           
  25774. ...                      
  25775. PDF                          
  25776. HTML                         
  25777. WORD                         
  25778. XLS                          
  25779. TXT/CSV/XL5                  
  25780.                              
  25781.                                        
  25782.                            
  25783.                            
  25784.                            
  25785.                            
  25786.                          
  25787.                            
  25788.                                
  25789.                                
  25790.                          
  25791.                          
  25792.                                
  25793.                                
  25794.                            
  25795.                              
  25796.                              
  25797.                                
  25798. %FP% 
  25799.  %LP% 
  25800.                   
  25801.                                
  25802.                          
  25803.                        
  25804.                          
  25805.                          
  25806.                      
  25807.                                       
  25808.            
  25809.                      
  25810.                          
  25811.                      
  25812.                  
  25813.                  
  25814.                  
  25815.                       
  25816.                 
  25817.               
  25818.                 
  25819.                              
  25820.                              
  25821.                              
  25822.                              
  25823.                                     
  25824.            
  25825.               
  25826.               
  25827.            
  25828.            
  25829.            
  25830.                       
  25831.                       
  25832.                                   CDO
  25833.                         SMTP
  25834.                
  25835.               
  25836.                 SMPT
  25837.             
  25838.               
  25839. (SSL)                  
  25840.                          
  25841.                            
  25842.                 
  25843.               
  25844.                 
  25845.                 
  25846.                  
  25847. (16x16 pixels)         
  25848.  (32x32 pixels)        
  25849.                 
  25850.                     
  25851.                                      
  25852.                                      
  25853. !                          
  25854.                                  
  25855.                                  
  25856.                                    
  25857.                                      
  25858.                            
  25859.                                          
  25860.                                    
  25861.                                      
  25862.                                  
  25863.                                 
  25864.                       
  25865.                              
  25866. ...                          
  25867.                           
  25868.                       
  25869.                                 
  25870.                    
  25871.                           Windows
  25872.                            
  25873.                           
  25874. ...                
  25875. ...                         
  25876. ...              
  25877. (s)     
  25878. )                                                       
  25879. ...                          
  25880.                                                                         
  25881.            
  25882.                                                             
  25883.            
  25884.            
  25885.          
  25886.                  
  25887.                 
  25888.            
  25889.                    
  25890.                    
  25891.                      
  25892.                      
  25893.               
  25894.               
  25895.            
  25896.                 
  25897.                 HTML
  25898.              
  25899.                            
  25900.            
  25901.            
  25902.            
  25903.             
  25904.                            
  25905.                       
  25906.                       
  25907.                 
  25908.                 
  25909.                    
  25910.                       
  25911.                     
  25912. ...                 
  25913.                  
  25914.                  
  25915.                                 
  25916.                                           
  25917.                                                     
  25918.                           PDF 
  25919.                       
  25920.                            
  25921.                       
  25922.                       
  25923.                       
  25924.                        
  25925.                       
  25926.                     
  25927.                       
  25928. !                                         
  25929.                       
  25930.                       
  25931.                       
  25932.                       
  25933.                         PDF 
  25934.                       
  25935.                                           
  25936. "Webdings,Biro"                                                                                                
  25937. !                     
  25938.                                   
  25939.                               
  25940.                           
  25941.                               
  25942.                       
  25943.                        
  25944.                  
  25945.                      
  25946.                  
  25947.                  
  25948.                  
  25949.                  PDF
  25950.               
  25951. ...                
  25952. 'Excel 97'
  25953. MS Excel
  25954. OpenOffice)                                                                         
  25955.                                            
  25956.                                            
  25957.                          
  25958.                                    
  25959.                                       
  25960. MHTML                        
  25961. Excel
  25962. !                                                                                                              
  25963.                                      
  25964.                           BULGARIAN      
  25965.       201111281251
  25966.                               
  25967.                      
  25968.                   
  25969.                   
  25970.                   
  25971.                            
  25972.                              
  25973.                               
  25974.                             
  25975.                 1 
  25976.                          2 
  25977.                          4 
  25978.                          
  25979.                       
  25980.                          
  25981.             
  25982.                   
  25983.                       
  25984.                        
  25985.                     
  25986. ...                         
  25987. .                          
  25988.                              
  25989. .            
  25990. ..                        
  25991.                               
  25992.                              
  25993. ...            
  25994.  PDF                    
  25995.  HTML                   
  25996.  RTF                    
  25997.  XLS                    
  25998.  TXT / CSV / XL5        
  25999.                   
  26000.  e-mail                  
  26001.                   
  26002.                    
  26003.                    
  26004.                         
  26005.                   
  26006.                   OK                                 
  26007.                               
  26008.                  
  26009.                  
  26010.                                
  26011.                           
  26012.                    
  26013.                     
  26014.                     
  26015.                            
  26016.  %FP% 
  26017.  %LP%           
  26018.                          
  26019.       
  26020.              
  26021.                      
  26022.            
  26023.                      
  26024.                 
  26025.        
  26026.        
  26027.          
  26028.               
  26029.             
  26030.             
  26031.                  
  26032.                  
  26033.                 
  26034.                 
  26035.            
  26036.        
  26037.          
  26038.         
  26039.      
  26040.           Email          
  26041.  Email             
  26042.             
  26043.  Email            
  26044.  CDO                   SMTP - 
  26045.             
  26046.           
  26047.               SMTP 
  26048.            
  26049.              
  26050.  (SSL)             
  26051.             
  26052.  Email                      
  26053.              
  26054.                   
  26055.                
  26056.              
  26057.      
  26058.  (16x16 
  26059. )    
  26060.  (32x32 
  26061.               
  26062.                
  26063.                                   
  26064.                              
  26065.                 
  26066.  eMail                
  26067.                  
  26068.                    
  26069.             SMTP-
  26070.                      
  26071.          
  26072.                           
  26073.                             
  26074.  eMail                   
  26075.          
  26076.          
  26077. ...                     
  26078.           
  26079.             
  26080.                
  26081.                
  26082.  Windwows       
  26083.                          
  26084. ...         
  26085. ...  
  26086. ...    
  26087. .      
  26088. )       
  26089.  ESC 
  26090. ...          
  26091. .                                                 
  26092.        
  26093. .        
  26094.          
  26095.        
  26096.       
  26097.          
  26098.                
  26099.      
  26100.            
  26101.           
  26102.                
  26103.      
  26104.      
  26105.       
  26106.       
  26107.             
  26108.   HTML-
  26109.        
  26110.       
  26111.          
  26112.         
  26113.         
  26114.                
  26115.                
  26116.               
  26117.               
  26118.                
  26119.              
  26120.          eMail-
  26121. !           
  26122. ...          
  26123.            
  26124.              
  26125.             
  26126.  HTML 
  26127.  eMail-
  26128. .                  
  26129.  eMail 
  26130. ?          
  26131.             PDF 
  26132.                  
  26133.                    
  26134.              
  26135.         
  26136.         
  26137.                  
  26138.            
  26139.               
  26140.          
  26141. .             
  26142.                   
  26143.               
  26144.               
  26145.  PDF                  
  26146.  PDF               
  26147.         
  26148.  PDF. 
  26149. . "Webdings,Biro"                      
  26150.  SMTP!         
  26151. ?                          
  26152.                        
  26153.                
  26154.                        
  26155.                   
  26156.              
  26157.           
  26158.        
  26159.             
  26160.      
  26161.        PDF 
  26162. ...        
  26163.  'Excel 97' format? (
  26164.  MS Excel 
  26165.  OpenOffice)                               
  26166.                      
  26167.  footer-
  26168.                        
  26169.                       
  26170.             
  26171.            
  26172.  MHTML                  Report is too big to be exported to the Excel format. Revise the created document because it is incomplete!                                           Converting to XLS format                          Preparing data                      TCHINESE       
  26173.        20120211950 
  26174. L                               
  26175.                              
  26176.                              
  26177.                              
  26178.                            
  26179.                            
  26180.                            
  26181.                            
  26182.                            
  26183.                              
  26184.                              
  26185.                              
  26186.                              
  26187.                                
  26188.                                
  26189. e                               
  26190.                            
  26191.                              
  26192.                              
  26193.                              
  26194.                            
  26195. !                                                        
  26196. ~                               
  26197. I                                                              \<
  26198.                              
  26199.                                
  26200.                            
  26201. ...                      
  26202. PDF                          
  26203. HTML                         
  26204. WORD                         
  26205. XLS                          
  26206. TXT/CSV/XL5                  
  26207.                              
  26208.                                        
  26209.                            
  26210.                            
  26211.                            
  26212.                            
  26213.                          
  26214.                            
  26215. w                               
  26216.                                
  26217.                          
  26218. L                         
  26219. W                               
  26220.                                
  26221. m                           
  26222.                              
  26223.                              
  26224.                                
  26225. q%FP%?
  26226. ?%LP%?
  26227.                   
  26228. X                               
  26229. m                         
  26230. m                       
  26231. m                         
  26232. m                         
  26233. m                     
  26234. m                                      
  26235. W           
  26236.                      
  26237.                          
  26238.                      
  26239.                  
  26240.                  
  26241.                  
  26242.                       
  26243.                 
  26244.               
  26245. }                
  26246.                              
  26247.                              
  26248.                              
  26249.                              
  26250. m                                  
  26251. `           
  26252.               
  26253.               
  26254.            
  26255. X           
  26256.            
  26257.                       
  26258.                       
  26259.                                   CDO
  26260. m                        SMTP
  26261.                
  26262. W              
  26263. X                SMPT
  26264.               
  26265. H              
  26266. (SSL)                  
  26267. {                         
  26268.                            
  26269. D                
  26270. H              
  26271. e                
  26272. e                
  26273. o                 
  26274. p(16x16 pixels)         
  26275. j(32x32 pixels)         
  26276.                 
  26277.                     
  26278. h                                     
  26279. e                                     
  26280. !                          
  26281. ~                                 
  26282. q                                 
  26283. e                                   
  26284. w                                     
  26285.                            
  26286.                                          
  26287.                                    
  26288.                                      
  26289. m                                 
  26290.                                 
  26291.                       
  26292.                              
  26293. ...                          
  26294.                           
  26295. m                      
  26296.                                 
  26297.                    
  26298. {                          Windows
  26299.                            
  26300. R                          
  26301. ...                
  26302. {...                         
  26303. X...              
  26304. (s)     
  26305. C)                                                       
  26306. ...                          
  26307. C                                                                        
  26308. N           
  26309. C                                                            
  26310.            
  26311.            
  26312. u         
  26313. p                 
  26314.                 
  26315.            
  26316.                    
  26317.                    
  26318.                      
  26319. R                     
  26320.               
  26321.               
  26322.            
  26323.                 
  26324.                 HTML
  26325.              
  26326.                            
  26327.            
  26328.            
  26329. s           
  26330. K           
  26331.                             
  26332.                       
  26333.                       
  26334. P                
  26335.                 
  26336.                    
  26337.                       
  26338. e                    
  26339. ...                 
  26340.                  
  26341.                  
  26342.                                 
  26343. e                                          
  26344. H                                                    
  26345.                           PDF
  26346.                        
  26347.                            
  26348. L                      
  26349.                       
  26350. s                      
  26351. e                       
  26352. K                      
  26353. X                    
  26354. X                      
  26355. !                                         
  26356.                       
  26357.                       
  26358.                       
  26359.                       
  26360. H                        PDF
  26361. D                       
  26362.                                           
  26363. "Webdings,Biro"                                                                                                
  26364. m!                     
  26365. H                                  
  26366. P                              
  26367. {                          
  26368.                               
  26369.                       
  26370.                          
  26371.                  
  26372.                      
  26373.                  
  26374.                  
  26375.                  
  26376. s                 PDF
  26377.               
  26378. ...                
  26379. 'Excel 97'
  26380. MS Excel
  26381. OpenOffice)                                                                         
  26382.                                            
  26383.                                            
  26384. W                         
  26385.                                    
  26386.                                       
  26387. MHTML                        
  26388. Excel
  26389. !                                                                                                              
  26390.                                      
  26391.                           HUNGARIAN      MAGYAR         201208251250Nyomtat                            Els
  26392.  lap                           El
  26393.  lap                          K
  26394. vetkez
  26395.  lap                      Utols
  26396.  lap                         Oldalhoz l
  26397. s                     Mutassa az oldalakat               Nyomtat
  26398. s                          El
  26399. zet bez
  26400. sa                  Eszk
  26401. r                          1 oldal                            2 oldal                            4 oldal                            Eg
  26402. sz oldal                        Nagy
  26403. s/Kicsiny
  26404. s               Oldal sz
  26405. g                    Oldalhoz l
  26406. s                     Egy oldal                          K
  26407. t oldal                          N
  26408. gy oldal                         Kimutat
  26409. zete...             Nem siker
  26410. lt a f
  26411. jl el
  26412. sa! Pr
  26413. lja k
  26414. bb.                               Hiba                               Nincs telep
  26415. tett nyomtat
  26416. . Telep
  26417. tsen egy nyomtat
  26418. s futtassa 
  26419. jra a jelent
  26420. st.                   \<Miniat
  26421. k                       P
  26422. m                        Kimutat
  26423. s ment
  26424. se                  Ment
  26425. jlba...               Ment
  26426. s PDF form
  26427. tumba              Ment
  26428. s HTML form
  26429. tumba             Ment
  26430. s RTF form
  26431. tumba              Ment
  26432. s XLS form
  26433. tumba              Ment
  26434. s TXT/CSV/XL5 form
  26435. tumba      Kimeneti mappa                     Kimutat
  26436. se e-mailben                  Kimutat
  26437. s bez
  26438. sa                 Kimutat
  26439. s nyomtat
  26440. sa               Miniat
  26441. k megjelen
  26442. se           Teljes el
  26443. zet                    El
  26444.  nyomtat
  26445. k                 Oldalhoz l
  26446. s                     Rendben                            M
  26447. gsem                             Nyomtat
  26448. si tulajdons
  26449. gok           Nyomtat
  26450. s szem
  26451. lyre szab
  26452. sa        
  26453. nos                          Tulajdons
  26454. gok                      Oldal tartom
  26455. ny                    Minden oldal                       Aktu
  26456. lis oldal                     Oldalak:                           Oldalak %FP%-t
  26457. l %LP%-ig           Oldalsz
  26458. m                          Els
  26459.  oldal be
  26460. sa              Utols
  26461.  oldal be
  26462. sa            K
  26463. vetkez
  26464.  oldal be
  26465. sa         EL
  26466.  oldal be
  26467. sa             Konfigur
  26468. k            Kimutat
  26469. nek be
  26470. sa                 
  26471. nos      Nyelv                    Eszk
  26472. ga              Eszk
  26473. r helye          Oldalak sz
  26474. ma            Nagy
  26475. s/Kicsiny
  26476. s %   Ablak 
  26477. llapota           Miniat
  26478. ma egy oldalon  L
  26479.              Nem l
  26480.          Nincs r
  26481. tve      Eszk
  26482. r az ablak tetej
  26483. n                   Eszk
  26484. r az ablak bal oldal
  26485. n               Eszk
  26486. r az ablak jobb oldal
  26487. n              Eszk
  26488. r az ablak alj
  26489. n                     A be
  26490. sokat a forr
  26491. l vegye            Norm
  26492. l         Kis m
  26493. retben        Teljes m
  26494. ret        Vez
  26495. elemek  Kimenet        E-mail         E-mail 
  26496. d                Csatolm
  26497. pusa             Automatikusan k
  26498. tse az e-mail f
  26499. jlt            CDO e-mail be
  26500. sok             SMTP kiszolg
  26501.           Felhaszn
  26502. v      Jelsz
  26503.               SMTP port           Felad
  26504.               Biztons
  26505. gos kapcsolat (SSL)        Egyedi m
  26506. velet                     E-mail k
  26507. se                     T
  26508. rgy               C
  26509. mzett             
  26510. zenet sz
  26511. vege      K
  26512. s              Gombok m
  26513. rete            Kicsi (16x16 k
  26514. ppont)    Nagy (32x32 k
  26515. ppont)     Keres
  26516. s             K
  26517. vetkez
  26518.  keres
  26519. se            Keres
  26520. s visszafel
  26521.                            Keresend
  26522. veg:                            Sz
  26523. veg nem tal
  26524. !              Hiba az e-mail k
  26525. zben                C
  26526. l nincs meghat
  26527. rozva                       
  26528. zenet nem lett elk
  26529. ldve                     Hib
  26530. s hiteles
  26531. si protokoll                 SMTP kiszolg
  26532.  nincs meghat
  26533. rozva           Felhaszn
  26534. v/jelsz
  26535. ges az egyszer
  26536.  hiteles
  26537. shez  Felad
  26538. res                                  T
  26539. res                                   Hib
  26540. s e-mail be
  26541. sok                     Csatolm
  26542. ny nem tal
  26543.                 Nem tal
  26544.  a kiv
  26545. lasztott nyelv      Nem tal
  26546.  a kimutat
  26547. s forr
  26548. nya   F
  26549. jl ment
  26550. se mint...               
  26551. nos nyomtat
  26552. sok          Jelenlegi nyomtat
  26553. sai          Max. keresend
  26554.  oldalak                  Feldolgoz
  26555. v         Alap
  26556. rtelmezett               Windows feldolgoz
  26557. v                Csendes                       Inicializ
  26558. s...         Sz
  26559. sok folyamatban...               Kimenet k
  26560. se...     mp.       Le
  26561. tja a kimutat
  26562. t? (Ha Nem-mel felel, akkor folytat
  26563. dik)                   Nyomja meg az Esc-et a megszak
  26564. shoz...A kimutat
  26565. t meg
  26566. totta. Az eredm
  26567. ny nem teljes.                                        Figyelem       Be
  26568. sok friss
  26569. tve. A v
  26570. sok a k
  26571. vetkez
  26572.  megjelen
  26573. skor l
  26574. pnek 
  26575. letbe.                      D
  26576. lt           F
  26577. r       Al
  26578. zott      Bet
  26579. ret                Bet
  26580.  neve           Csatolm
  26581. nyok   Jobbra z
  26582. rt              Balra z
  26583. rt               K
  26584. pre z
  26585. rt             Sorkiz
  26586. rt                Beh
  26587. se    Beh
  26588. kkent
  26589. se Hivatkoz
  26590. s     K
  26591. p                 V
  26592. zszintes s
  26593. v      
  26594. zenetform
  26595. tum HTML      Nyugta k
  26596. se                      Els
  26597. g      Kiv
  26598. g          M
  26599. sol          Beilleszt      F
  26600. se megt
  26601. nt               Felsorol
  26602. s form
  26603. sa          Sz
  26604. mok form
  26605. sa              Visszavon           M
  26606. gis               
  26607. j dokumentum            Form
  26608. se              E-mail k
  26609. se megt
  26610. nt!    
  26611. zenet k
  26612. se folyamatban...           Sz
  26613. veg sz
  26614. ne             H
  26615. ne             Csatolm
  26616. ny elt
  26617. sa                 Haszn
  26618. ljon HTML f
  26619. jlt az 
  26620. zenet sz
  26621. nek                  A mentett f
  26622. jl legyen az alap
  26623. rtelmezett 
  26624. zenet a k
  26625. vetkez
  26626. l?                     Megnyit
  26627. s az alap
  26628. rtelmezett programmal PDF be
  26629. sai               Bet
  26630. szlet be
  26631. sa             Nyomtat
  26632. s enged
  26633. se       Szerkeszt
  26634. s enged
  26635. se     M
  26636. s enged
  26637. se         Megjegyz
  26638. sek hozz
  26639. adhat
  26640. k          Dokumentum titkos
  26641. sa        Els
  26642. dleges jelsz
  26643.              Felhaszn
  26644. i jelsz
  26645.            Az Els
  26646. dleges 
  26647. s Felhaszn
  26648. i jelsz
  26649. nak k
  26650. nek kell lennie!     Oldal 
  26651. d                 Norm
  26652. zet                  Mutassa a k
  26653. rvonalat          Mutassa az el
  26654. zetet         PDF szerz
  26655. je                  PDF c
  26656. me                      Szimb
  26657. lum vagy vonalk
  26658. d bet
  26659. szletek list
  26660. ja     Bet
  26661. szletek nem konvert
  26662.  PDF-be. Jellemz
  26663. en, vonalk
  26664. s szimb
  26665. lum bet
  26666. szleteket. Vessz
  26667. vel elv
  26668. lasztott lista, pl. "Webdings, Biro"                           Hib
  26669. sak az SMTP e-mail be
  26670. sok!     Mindenk
  26671. ppen folytatja?                 Hib
  26672. sok                       Alap
  26673. rtelmezett               V
  26674. lasszon c
  26675. mzetteket                   Keres
  26676. s                       Oldalakat k
  26677. nt kezelje          F
  26678. jl csatol
  26679. sa           Mindet kiv
  26680. lasztja       Egyiket sem              Megford
  26681. tja              Kimutat
  26682. zet       Bez
  26683. r gomb               PDF alap bet
  26684. szlet     K
  26685. rem v
  26686. rjon...          Konvert
  26687. lja 'Excel 97' form
  26688.  munkalapp
  26689. ? (MS Excel vagy OpenOffice telep
  26690. se sz
  26691. ges)                                      A fejl
  26692. cet ism
  26693. telje a munkalapon                                A l
  26694. cet ism
  26695. telje a munkalapon                                Munkalap kiterjeszt
  26696. se                   Hagyja az odalsz
  26697. mokat a munkalapon                    Igaz
  26698. tsa balra a sz
  26699. veges mez
  26700. ket                 Ment
  26701. s MHTML f
  26702. jlba                A kimutat
  26703. l nagy ahhoz, hogy Excel form
  26704. tumba ments
  26705. k. Az elk
  26706. lt dokumentum hi
  26707. nyos lehet!                                                     Konvert
  26708. s XLS form
  26709. tumba                        Adatok el
  26710. se                 KAZAKH         EA
  26711.       201301141251
  26712.                                
  26713.                         A
  26714.                             E
  26715. i                             
  26716.                           E
  26717.                   
  26718.                       
  26719.                         A
  26720.              
  26721. i                    1 
  26722.                               2 
  26723. d                           4 
  26724. d                           
  26725.                       I
  26726.                          
  26727.                  
  26728.                          
  26729.                             
  26730. d                         O'd
  26731. d                        A
  26732.  ...    
  26733. 'di_i
  26734. .           
  26735.                                Id
  26736. 'di_i
  26737. .                  I
  26738. d...                    E'oid
  26739. d                         
  26740.                      E'di
  26741.  ...      PDF 
  26742.                          HTML 
  26743.                         RTF 
  26744.                          XLS 
  26745.                          TXT / CSV / XL5 
  26746.              O
  26747.                         E-mail 
  26748.                  
  26749.                         
  26750.                 I
  26751.               A
  26752.          
  26753. d             
  26754.                          
  26755.                                  
  26756.                           
  26757.               
  26758.               
  26759.                              
  26760.                              
  26761. di                
  26762. di                     A
  26763.                          
  26764. d                             %FP%
  26765.  %LP%
  26766. d           
  26767.  #                              E'
  26768. i             E'
  26769. i               E'
  26770. i              E'
  26771. i             Iioi
  26772. d        
  26773.              
  26774.           Oi
  26775.                       
  26776. i                    
  26777. i       O
  26778.              
  26779. _d              E'di
  26780. i          E'di
  26781. i        
  26782. i       O
  26783. i          I
  26784.         
  26785.         
  26786.              
  26787.            
  26788.         O
  26789.          E-mail         E-mail 
  26790. d            
  26791. i             
  26792.  e-mail 
  26793.                 CDO 
  26794.                          SMTP-
  26795. d              
  26796.                I
  26797.               SMTP 
  26798.           
  26799. oi            
  26800.  (SSL)                I
  26801.               E-mail 
  26802.                       O
  26803.              
  26804.                 
  26805.                 
  26806.               
  26807. i        Eio
  26808.  (16 o16
  26809. di (32o32 
  26810. .)  O
  26811.            
  26812.                 E
  26813.                                 I
  26814. :                                
  26815. !                     E-mail 
  26816.                        
  26817.                         O
  26818.                         A
  26819. !      SMTP-
  26820.                      I
  26821.                                  O
  26822.                                 E-mail 
  26823.                      
  26824.                       O
  26825.        
  26826. ... d
  26827.            Id
  26828.                 A
  26829. d               Id
  26830. d             E
  26831.                Windows 
  26832. d                    
  26833.                         E
  26834. ...         
  26835. ...    O
  26836. ...         
  26837. .      
  26838.  Esc 
  26839. ...           
  26840. .                                        
  26841. d          
  26842. .      E
  26843.          
  26844. _     A
  26845. i          
  26846.       
  26847.         
  26848.        O
  26849.             E'
  26850.      HTML-
  26851.       A
  26852.                    
  26853.        E'oid
  26854.          
  26855.            
  26856.                   I
  26857.             
  26858.              
  26859.                 
  26860.              
  26861.                Iioi
  26862.             E-mail 
  26863.              O
  26864.  ... E
  26865.      I
  26866. i            
  26867. i              
  26868.                        HTML- 
  26869.            
  26870. ?                    
  26871.            PDF 
  26872.                  Eidai
  26873. d               
  26874.     D
  26875.   E'oid
  26876.           
  26877.       
  26878.                O
  26879.                   I
  26880. i         O
  26881.  PDF 
  26882. !        
  26883. i                 
  26884.                        E
  26885.         I
  26886.       PDF 
  26887. d                     PDF 
  26888.                    
  26889. i     PDF -
  26890. ,"Webdinqs, Biro" 
  26891.                                       SMTP
  26892. !          
  26893. ?                             
  26894.                    E
  26895.                A
  26896.                        I
  26897.                    
  26898. .      
  26899.             
  26900.           
  26901.     A
  26902.      
  26903.            
  26904.  ...              Excel 97 
  26905.  MS Excel 
  26906.   Open Office 
  26907. i)                          
  26908.                     
  26909.        
  26910.        
  26911. .     
  26912.                   MHTML 
  26913.                        Report is too big to be exported to the Excel format. Revise the created document because it is incomplete!                                           Converting to XLS format                          Preparing data                      SERBIAN        SRPSKI         201201271250
  26914. tampa                             Prva strana                        Nazad                              Napred                             Poslednja strana                   Skok na stranu                     Prika
  26915. i strane                     
  26916. tampaj izve
  26917. taj                   Zatvori prikaz                     Alati                              1 strana                           2 strane                           4 strane                           Cela strana                        Lupa                               
  26918. irina strane                      Skok na stranu                     Jedna strana                       Dve strane                         Eetiri strane                      Pregled izve
  26919. taja...               Kreiranje izve
  26920. taja nije uspe
  26921. no! Poku
  26922. ajte kasnije                             Gre
  26923. ka                             Ni jedan 
  26924. tampa
  26925.  nije instaliran. Instalirajte 
  26926. tampa
  26927.  i ponovo pokrenite izve
  26928. taj.                 \<Minijature...                    Kopije                             Sa
  26929. uvaj izve
  26930. taj                   Sa
  26931. uvaj kao sliku...               Sa
  26932. uvaj kao PDF                    Sa
  26933. uvaj kao HTML                   Sa
  26934. uvaj kao RTF                    Sa
  26935. uvaj kao XLS                    Sa
  26936. uvaj kao TXT / CSV / XL5        Putanja                            Po
  26937. alji kao e-mail                           Zatvori izve
  26938. taj                   Od
  26939. tampaj                          Prika
  26940. i minijature                 Globalni pregled                   Raspolo
  26941. tampa
  26942. i               Skok na stranu                     OK                                 Odustajem                          Parametri 
  26943. tampe                   Prilagodi 
  26944. tampu                   Osnovno                            Parametri                          Opseg strana                       Sve strane                         Ova strana                         Strane                             Strane od %FP% do %LP%             Strana                             Prva strana seta                   Zadnja strana seta                 Slede
  26945. a strana seta                Prethodna strana seta              Konfiguracije            Pode
  26946. avanje prikaza                               Osnovno        Jezik                    Vidljivost alatnice                Pozicija panela          Prikazuje se             Nivo uve
  26947. anja            Status prozora           Minijature po strani          Vidljivo            Nevidljivo          Slobodno            Alatnica na VRHU prozora                     Alatnica na LEVOJ strani                     Alatnica na DESNOJ strani                    Alatnica na DNU prozora                      Koristi pode
  26948. avanja iz resource fajla             Normalno       Minimalizovano      Maksimalizovano     Kontrole       Izvoz          E-mail         Tip e-maila                   Tip priloga                   Automatski generi
  26949. i e-mail                        CDO e-mail pode
  26950. avanja             SMTP server              Ime                 Lozinka             SMTP port           Po
  26951. iljalac          Bezbedna konekcija (SSL)           Sopstvena procedura                Poslati e-mail                     Predmet             Za                  Poruka              Poslati             Veli
  26952. ina dugmeta         Malo (16x16 ta
  26953. aka)      Veliko (32x32 ta
  26954. ke)     Tra
  26955. i               Tra
  26956. i dalje                   Tra
  26957. i unazad                                 Tra
  26958. i tekst:                                 Nije nadeno!                       Gre
  26959. ka pri slanju poruke                     Odredi
  26960. te nije definisano                    Poruka nije poslata                          Neva
  26961. i protokol autentifikacije            SMTP server nije naveden                     Korisni
  26962. ko ime i lozinka su neophodni                       Polje 'Po
  26963. iljalac' je prazno                 Polje 'Predmet' je prazno                    Neispravna konfiguracija e-maila             Prilog nije pronaden                    
  26964. eljeni jezik nije pronaden             Resource fajl nije lociran                   Snimi kao...                       Osnovne opcije 
  26965. tampa
  26966. a                 Podesi 
  26967. tampu                           Maksimum strana za pretragu             Termometar               Podrazumevano                 Windows Termometar                      Tihi mod                      Inicijalizacija...       Prora
  26968. un u toku...                      Izrada...                sec.      Zaustaviti izradu izve
  26969. taja? (Ako pritisnete NE, izrada 
  26970. e se nastaviti.)                 Pritisni Esc za prekid...               Izrada izve
  26971. taja je prekinuta. Rezultat nije kompletan.                                             Pa
  26972. nja         Pode
  26973. avanja sa
  26974. uvana. Promene stupaju na snagu sa slede
  26975. im izve
  26976. tajem.                              Koso           Masno          Podvu
  26977. eno      Veli
  26978. ina slova           Naziv fonta         Prilozi        Poravnaj ulevo           Poravnaj udesno          Centriraj                Po obe margine           Uve
  26979. aj uvla
  26980. enje    Smanji uvla
  26981. enje    Hiperlink      Slika               Horizontalna traka  HTML 
  26982. ablon              Zahtevati potvrdu prijema          Hitnost        Iseci          Iskopiraj      Nalepi         Uspe
  26983. no kreirano!                       Formatiranje stavki           Redni brojevi                 Nazad               Napred              Novi dokument            Eisto formatirati             Poruka je poslata!            Slanje u toku... Sa
  26984. ekajte...           Boja teksta              Boja pozadine            Ukloni prilog                           HTML fajl kao telo za poruku                                Koristiti snimljeni fajl kao 
  26985. ablon za slede
  26986. e poruke?                                    Otvori podrazumevani pregleda
  26987.           PDF opcije                    Prilo
  26988. iti fontove                  Dozvoliti 
  26989. tampu              Dozvoliti izmene              Dozvoliti kopiranje           Dozvoliti komentare                
  26990. ifrirati dokument            Lozinka administr.            Korisni
  26991. ka lozinka            Lozinke Administratora i Korisnika se moraju razlikovati!             'Strana' re
  26992. im                Normalno                      Prikazati konture             Prikazati sli
  26993. ice             PDF autor                     PDF naziv                     Spisak fontova                                    Spisak fontova koji se ne mogu konvertovati u PDF. Naj
  26994. e, bar kodovi i fontovi simbola. Odvojeni zarezom, npr. "Webdings,Biro"                                         Neispravna konfiguracija servera SMTP   Ipak nastaviti?                         Neispravna konfiguracija                Podrazumevano                 Izabrati primaoce                       Tra
  26995. i                         Renderovati stranice kao slike     Prilo
  26996. iti fajl           Odaberi sve              Odmarkiraj               Invertuj izbor           Pregled izve
  26997. taja        Dugme 'Zatvori'          Podrazumevani font       Sa
  26998. ekajte...             Konvertovati u 'Excel 97' format? (MS Excel ili OpenOffice mora biti instaliran)                                                  Ponoviti zaglavlje na svakoj stranici (Header)                   Ponoviti podno
  26999. je na svakoj stranici (Footer)                    Ekstenzija fajla                         Izostaviti polje 'broj strane'                         Poravnati 
  27000. elije sa tekstom po levoj strani       Sa
  27001. uvati kao MHTML                 Izve
  27002. taj je preveliki za izvoz u Excel format. Rezultuju
  27003. i fajl je nekompletan!                                                                       Konvertovanje u XLS format                        Priprema podataka                   SERBIAN CYRILIC
  27004. EE         201201271250O
  27005.                              Id
  27006.                         
  27007.                               
  27008.                              I
  27009.                    
  27010.                      Id
  27011.                      O
  27012.                    
  27013.                      A
  27014.                               1 
  27015.                            2 
  27016.                            4 
  27017.                            
  27018.                         
  27019.                                O
  27020.                       
  27021.                      
  27022.                        
  27023.                          
  27024.                       Id
  27025. ...               Ed
  27026.                                Ad
  27027.                              
  27028. .                 \<I
  27029. ...                    E
  27030.                              
  27031.                    
  27032. ...               
  27033.  PDF                    
  27034.  HTML                   
  27035.   RTF                   
  27036.  XLS                    
  27037.  TXT / CSV /            I
  27038.                              I
  27039.  e-mail                            
  27040.                    
  27041.                           Id
  27042.                  A
  27043.                    D
  27044.                
  27045.                      
  27046.                              
  27047.                           I
  27048.                    Id
  27049.                    
  27050.                             I
  27051.                           
  27052.                        
  27053.                          
  27054.                          
  27055.                              
  27056.   %FP% 
  27057.  %LP%            
  27058.                              Id
  27059.                    
  27060.                   
  27061.                 Id
  27062.               E
  27063.             I
  27064.                                 
  27065.         
  27066.                     
  27067.                  I
  27068.           Id
  27069.              
  27070.             
  27071.            I
  27072.           
  27073.              
  27074.            
  27075.             A
  27076.                      A
  27077.                      A
  27078.                     A
  27079.                       E
  27080.                 
  27081.        I
  27082.       I
  27083.      E
  27084.        E
  27085.           E-mail         O
  27086.  e-maila                   O
  27087.                    A
  27088.  e-mail                        CDO e-mail 
  27089.               SMTP 
  27090. d              E
  27091.                  
  27092.              SMTP 
  27093.            I
  27094.            
  27095. )           
  27096.                 I
  27097.  e-mail                     Id
  27098.              
  27099.                   I
  27100.               I
  27101.              
  27102.          I
  27103.  (16x16 
  27104. )      
  27105.  (32x32 ta
  27106. ke      Od
  27107.                Od
  27108.                     Od
  27109.                                  Od
  27110. :                                 
  27111. !                       Ad
  27112.                       
  27113.                     I
  27114.                           
  27115.             SMTP 
  27116.                      E
  27117.                        I
  27118.                    I
  27119.  'Predmet' 
  27120.                      
  27121.  e-maila             Id
  27122.                     
  27123.               D
  27124.                      
  27125. ...                       
  27126.                                  I
  27127.                            I
  27128.              O
  27129. d               I
  27130.                  
  27131. d                    O
  27132.                       E
  27133. ...       Id
  27134. ...                      E
  27135. ...                
  27136. .        
  27137. .)                 Id
  27138.  Esc 
  27139. ...               E
  27140. .                                             I
  27141.           I
  27142. .                               E
  27143.            I
  27144.           I
  27145.       
  27146.            
  27147.          Id
  27148.         I
  27149.            I
  27150.           
  27151.                 I
  27152.            
  27153.      
  27154.       O
  27155.       
  27156.                O
  27157.   HTML o
  27158.               
  27159.           O
  27160.         E
  27161.           E
  27162.       
  27163.          
  27164. !                       
  27165.             D
  27166.                  
  27167.                
  27168.               
  27169.             
  27170.              I
  27171. !            
  27172. ...            
  27173.               
  27174.             
  27175. a                           HTML 
  27176.                                 E
  27177. ?                                     
  27178.           PDF 
  27179.                     Id
  27180.                   
  27181.               
  27182.               
  27183.             
  27184.                 O
  27185.             
  27186.         E
  27187.             
  27188. !             '
  27189.                 
  27190.                       Id
  27191.              Id
  27192. o             PDF 
  27193. d                     PDF 
  27194.                      
  27195.                                     
  27196.  PDF. 
  27197. d. "Webdings,Biro"                                         
  27198.  SMTP 
  27199. ?                         
  27200.                 I
  27201.                  E
  27202.                        Od
  27203.                          D
  27204.      Id
  27205.            
  27206.               
  27207.                E
  27208. d           Id
  27209.         
  27210. '          I
  27211.        
  27212. ...             E
  27213.  'Excel 97' 
  27214. ? (MS Excel 
  27215.  OpenOffice 
  27216. )                                                  I
  27217.                              I
  27218.                              
  27219.                          E
  27220. '                          I
  27221.        
  27222.  MHTML                 E
  27223.  Excel 
  27224. !                                                                          E
  27225.  XLS 
  27226.                          Id
  27227.                   
  27228. ~~~~~~
  27229. kkmkjkjhh|zx{zx{zx{zx
  27230. a`_ca`b`_b`_b`_b`_
  27231. {yw}{y}{y}{y}{y}{y}{y}{y@@
  27232. vtsywvywwyxwyxwyxwyxwyxwyxwyxw@ 
  27233. gednlkpnmpnmpnmpnmpnmpnmpnmpnmpnmpnmpnm
  27234. ~}ywv
  27235. }|yvu
  27236. jhhnlnTVWSTTSSTSSTSSTSSTSSTSSTSSTSSTSSTSSTSTTTVWnlnjhh
  27237. ~~~||||||~
  27238. ||||||~~~
  27239. PROPERTY
  27240. CVALUE
  27241. NVALUE
  27242. LVALUE
  27243. _NullFlags
  27244.  cLanguage                ENGLISH                                                                                                                                                                                                                                                       
  27245.  lSaveToFile                                                                                                                                                                                                                                                                            
  27246.  lSendToEmail                                                                                                                                                                                                                                                                           
  27247.  lPrintVisible                                                                                                                                                                                                                                                                          
  27248.  lShowCopies                                                                                                                                                                                                                                                                            
  27249.  lShowMiniatures                                                                                                                                                                                                                                                                        
  27250.  lPrinterPref                                                                                                                                                                                                                                                                           
  27251.  lSaveAsImage                                                                                                                                                                                                                                                                           
  27252.  lSaveAsHTML                                                                                                                                                                                                                                                                            
  27253.  lSaveAsRTF                                                                                                                                                                                                                                                                             
  27254.  lSaveAsXLS                                                                                                                                                                                                                                                                             
  27255.  lSaveAsPDF                                                                                                                                                                                                                                                                             
  27256.  lQuietMode                                                                                                                                                                                                                                                                             
  27257.  nCanvasCount                                                                                                                                                                                                                                                                           
  27258.  nZoomLevel                                                                                                                                                                                                                                                                             
  27259.  nWindowState                                                                                                                                                                                                                                                                           
  27260.  nDockType                                                                                                                                                                                                                                                                              
  27261.  nMaxMiniatureDisplay                                                                                                                                                                                                                                                                   @
  27262.  nPDFPageMode                                                                                                                                                                                                                                                                           
  27263.  nShowToolBar                                                                                                                                                                                                                                                                           
  27264.  lEmailAuto                                                                                                                                                                                                                                                                             
  27265.  cEmailType               PDF                                                                                                                                                                                                                                                           
  27266.  lShowPrinters                                                                                                                                                                                                                                                                          
  27267.  lShowSetup                                                                                                                                                                                                                                                                             
  27268.  nEmailMode                                                                                                                                                                                                                                                                             
  27269.  cSMTPUserName                                                                                                                                                                                                                                                                          
  27270.  cSMTPPassword                                                                                                                                                                                                                                                                          
  27271.  nSMTPPort                                                                                                                                                                                                                                                                              
  27272.  cSMTPServer                                                                                                                                                                                                                                                                            
  27273.  lSMTPUseSSL                                                                                                                                                                                                                                                                            
  27274.  cEmailTo                                                                                                                                                                                                                                                                               
  27275.  cEmailSubject                                                                                                                                                                                                                                                                          
  27276.  cEmailBody                                                                                                                                                                                                                                                                             
  27277.  cEmailFrom                                                                                                                                                                                                                                                                             
  27278.  nButtonSize                                                                                                                                                                                                                                                                            
  27279.  lSaveAsTXT                                                                                                                                                                                                                                                                             
  27280.  cOutputPath                                                                                                                                                                                                                                                                            
  27281.  lShowSearch                                                                                                                                                                                                                                                                            
  27282.  nPrinterPropType                                                                                                                                                                                                                                                                       
  27283.  lDirectPrint                                                                                                                                                                                                                                                                           
  27284.  nSearchPages                                                                                                                                                                                                                                                                           
  27285.  nThermType                                                                                                                                                                                                                                                                             
  27286.  cEmailBodyFile                                                                                                                                                                                                                                                                         
  27287.  lPDFEmbedFonts                                                                                                                                                                                                                                                                         
  27288.  lPDFCanPrint                                                                                                                                                                                                                                                                           
  27289.  lPDFCanEdit                                                                                                                                                                                                                                                                            
  27290.  lPDFCanCopy                                                                                                                                                                                                                                                                            
  27291.  lPDFCanAddNotes                                                                                                                                                                                                                                                                        
  27292.  lPDFEncryptDocument                                                                                                                                                                                                                                                                    
  27293.  cPDFMasterPassword                                                                                                                                                                                                                                                                     
  27294.  cPDFUserPassword                                                                                                                                                                                                                                                                       
  27295.  lOpenViewer                                                                                                                                                                                                                                                                            
  27296.  cPdfAuthor                                                                                                                                                                                                                                                                             
  27297.  cPdfTitle                                                                                                                                                                                                                                                                              
  27298.  cPdfSubject                                                                                                                                                                                                                                                                            
  27299.  cPdfKeywords                                                                                                                                                                                                                                                                           
  27300.  cPdfCreator                                                                                                                                                                                                                                                                            
  27301.  lPDFShowErrors                                                                                                                                                                                                                                                                         
  27302.  cPDFSymbolFontsList                                                                                                                                                                                                                                                                    
  27303.  cSuccessor                                                                                                                                                                                                                                                                             
  27304.  lPdfAsImage                                                                                                                                                                                                                                                                            
  27305.  cAdressTable                                                                                                                                                                                                                                                                           
  27306.  cAdressSearch                                                                                                                                                                                                                                                                          
  27307.  lShowClose                                                                                                                                                                                                                                                                             
  27308.  cPDFDefaultFont          Helvetica                                                                                                                                                                                                                                                     
  27309.  cExcelDefaultExtension   XLS                                                                                                                                                                                                                                                           
  27310.  lExcelConvertToXLS                                                                                                                                                                                                                                                                     
  27311.  lExcelRepeatHeaders                                                                                                                                                                                                                                                                    
  27312.  lExcelRepeatFooters                                                                                                                                                                                                                                                                    
  27313.  lExcelHidePageNo                                                                                                                                                                                                                                                                       
  27314.  lExcelAlignLeft                                                                                                                                                                                                                                                                        
  27315.  lSaveAsMHT                                                                                                                                                                                                                                                                             
  27316.  lPDFReplaceFonts                                                                                                                                                                                                                                                                       
  27317.  cEmailPRG                                                                                                                                                                                                                                                                              
  27318. PLATFORM
  27319. UNIQUEID
  27320. TIMESTAMP
  27321. CLASS
  27322. CLASSLOC
  27323. BASECLASS
  27324. OBJNAME
  27325. PARENT
  27326. PROPERTIES
  27327. PROTECTED
  27328. METHODS
  27329. OBJCODE
  27330. RESERVED1
  27331. RESERVED2
  27332. RESERVED3
  27333. RESERVED4
  27334. RESERVED5
  27335. RESERVED6
  27336. RESERVED7
  27337. RESERVED8
  27338.  COMMENT Screen              
  27339.  WINDOWS _2Z911D86M1022004034
  27340.  WINDOWS _2Z911D86N1124205488
  27341.  WINDOWS _2Z911D86O1124205488
  27342.  WINDOWS _2Z911D86P1124205489
  27343.  WINDOWS _2Z911D86Q1042694858
  27344.  WINDOWS _2Z911D86M1065027017v
  27345.  WINDOWS _2Z911D86N1042694858Q
  27346.  WINDOWS _2Z911D86M1065027017=
  27347.  WINDOWS _2Z911D86N1048408615
  27348.  WINDOWS _2Z911D86M1065027017
  27349.  WINDOWS _2Z911D86N1042694858
  27350.  WINDOWS _2Z911D86M1065027017
  27351.  WINDOWS _2Z911D86N1042694858
  27352.  WINDOWS _2ZF013V231077036022
  27353.  WINDOWS _2ZF013V241042694858
  27354.  WINDOWS _31G005RBV1042694858
  27355.  WINDOWS _31G005RBW1077037059t
  27356.  WINDOWS _31G005RBX1042694858
  27357.  WINDOWS _2Z911D86U1064960002
  27358.  WINDOWS _2Z911D86V1064960002
  27359.  WINDOWS _2Z911D86M1064960002
  27360.  WINDOWS _2Z911D86X1064960002
  27361.  WINDOWS _2Z911D86M1064960002
  27362.  WINDOWS _2Z911D86Z1065027017
  27363.  WINDOWS _2Z911D86M1064960002
  27364.  WINDOWS _2Z911D86N1064960002
  27365.  WINDOWS _30K0LFEHW1064960002
  27366.  WINDOWS _2Z911D86O1092441000
  27367.  WINDOWS _33S01D4M61064960002n
  27368.  WINDOWS _3DB0002G31064960002r
  27369.  WINDOWS _2Z911D86M1042694858i
  27370.  WINDOWS _2Z911D86N1042694858r
  27371.  WINDOWS _2Z911D86O1042694858h
  27372.  WINDOWS _2Z911D86P1042694858m
  27373.  WINDOWS _2Z911D86Q1042694858|
  27374.  WINDOWS _2Z911D86M1042694858
  27375.  WINDOWS _2Z911D86N1042694858
  27376.  WINDOWS _2Z911D86M1076905386
  27377.  WINDOWS _2ZO1BW1D91042694858
  27378.  WINDOWS _2Z911D86M1042694858
  27379.  WINDOWS _2Z911D86N1076905386
  27380.  WINDOWS _31C1D0K7W1077050810
  27381.  WINDOWS _31C1D0K7X1062583425
  27382.  WINDOWS _31I0RW5JO1077050787
  27383.  WINDOWS _31I0RW5JP1077050810
  27384.  WINDOWS _33Z1CPWON1062583425
  27385.  WINDOWS _2Z911D86M1042694858
  27386.  WINDOWS _2Z911D86M1042694858
  27387.  WINDOWS _2Z911D86M1042694858
  27388.  WINDOWS _2Z911D8781042694858j
  27389.  WINDOWS _2Z911D86N1062583425Y
  27390.  WINDOWS _2Z911D86N1062583425
  27391.  WINDOWS _2Z911D86N1062583425
  27392.  WINDOWS _2Z911D86M1042694858
  27393.  WINDOWS _2Z911D86N1042694858r
  27394.  WINDOWS _2Z911D86M1042694858%
  27395.  WINDOWS _2Z911D86M1065027017
  27396.  WINDOWS _2Z911D86N1042694858t
  27397.  WINDOWS _2ZJ1C5GMI1042694858U
  27398.  WINDOWS _2ZJ1C5GMJ1062583425-
  27399.  WINDOWS _2ZJ1C5GMK1065027017
  27400.  WINDOWS _2ZJ1C5GML1042694858
  27401.  WINDOWS _2ZJ1E3CRI1042694858
  27402.  WINDOWS _33D04NIU41042694858
  27403.  WINDOWS _33D04NIU51062583425p
  27404.  WINDOWS _33D04NIU61065027017;
  27405.  WINDOWS _2Z911D86M1076905520
  27406.  WINDOWS _33S01D4MP1076905520
  27407.  WINDOWS _2Z911D86M1076905386
  27408.  WINDOWS _2Z911D86N1076905520G    
  27409.  WINDOWS _2Z911D86M1076905386
  27410.  WINDOWS _33S0QG5I81076905386Z
  27411.  WINDOWS _33S0QG5I91076905386    
  27412.  WINDOWS _33S0QG5IA1076905386
  27413.  WINDOWS _33S0QG5IB1076905386^
  27414.  WINDOWS _33S0QG5IC1076905386
  27415.  WINDOWS _33S0QG5ID1076905386&
  27416.  WINDOWS _33S0QG5IE1076905386i
  27417.  WINDOWS _33S0QG5IF1076905386w
  27418.  WINDOWS _2Z911D86M1076905520+
  27419.  WINDOWS _2Z911D86N1076905386
  27420.  WINDOWS _2Z911D86M1076905520
  27421.  WINDOWS _2Z911D86N1076905386
  27422.  WINDOWS _33Z1CPWOZ1077036022
  27423.  WINDOWS _33Z1CPWP01076905386
  27424.  WINDOWS _35N1AHVAG1076905520
  27425.  WINDOWS _3711E67NR1076905386
  27426.  WINDOWS _3711E67NS1076905520
  27427.  WINDOWS _2Z911D86M1076905642
  27428.  WINDOWS _2Z911D86N1064960002
  27429.  WINDOWS _2Z911D86M1062602843
  27430.  WINDOWS _3CB1DSTEH1062583425
  27431.  WINDOWS _2Z911D86M1022004034
  27432.  WINDOWS _2Z911D86M1022004034
  27433.  WINDOWS _3DC01NICH1065027017
  27434.  WINDOWS _2Z911D86M1065027017
  27435.  WINDOWS _2Z911D86M1065027017
  27436.  WINDOWS _2Z911D86M1063148833
  27437.  WINDOWS _3CC00L4NW1065027017
  27438.  WINDOWS _2Z911D86M1063148833"
  27439.  WINDOWS _3CC012S7Z10650270178
  27440.  WINDOWS _2Z911D86M1063148833#
  27441.  WINDOWS _2Z911D86M1063148833z
  27442.  WINDOWS _3CK04Q1DQ1063148833
  27443.  WINDOWS _2Z911D86M1124205489
  27444.  WINDOWS _2ZD1D1IP71092441000R
  27445.  WINDOWS _2Z911D86M10625834252
  27446.  WINDOWS _32E04QKDC10924410006
  27447.  COMMENT RESERVED            
  27448. VERSION =   3.00
  27449. dataenvironment
  27450. dataenvironment
  27451. Dataenvironment
  27452. YTop = 0
  27453. Left = 0
  27454. Width = 0
  27455. Height = 0
  27456. DataSource = .NULL.
  27457. Name = "Dataenvironment"
  27458. frmSettings
  27459. ?DataSession = 2
  27460. BorderStyle = 2
  27461. Height = 470
  27462. Width = 455
  27463. Desktop = .T.
  27464. ShowWindow = 1
  27465. DoCreate = .T.
  27466. ShowTips = .T.
  27467. AutoCenter = .T.
  27468. Caption = "Report preview general configurations"
  27469. Closable = .F.
  27470. MaxButton = .F.
  27471. MinButton = .F.
  27472. WindowType = 1
  27473. AlwaysOnTop = .T.
  27474. AllowOutput = .F.
  27475. _memberdata = 
  27476.      445<VFPData><memberdata name="updatecontrol" display="UpdateControl"/><memberdata name="updatetable" display="UpdateTable"/><memberdata name="validate" display="Validate"/><memberdata name="setlanguage" display="SetLanguage"/><memberdata name="getloc" display="GetLoc"/><memberdata name="inpreview" display="inPreview"/><memberdata name="enablecontrols" display="EnableControls"/><memberdata name="lcompletemode" display="lCompleteMode"/></VFPData>
  27477. inpreview = .T.
  27478. lcompletemode = .F.
  27479. Name = "frmSettings"
  27480. VaPROCEDURE updatecontrol
  27481. LPARAMETERS toObject as CheckBox, tcProperty, tnAdjust
  27482. LOCAL lcProp, lcType, luValue
  27483. LOCATE FOR UPPER(FP_Settings.Property) = UPPER(tcProperty)
  27484. IF EOF()
  27485.     WAIT WINDOW "Could not locate the property '" + tcProperty + "' in the configuration file." + ;
  27486.         CHR(13) + "The settings file will be updated." NOWAIT 
  27487.     * Workaround to resize the settings table to have the Property field with C(22)
  27488.     IF LEN(FP_Settings.Property) < 25
  27489.         TRY 
  27490.             WAIT WINDOW "Updating settings table" NOWAIT 
  27491.             LOCAL lcFile0
  27492.             lcFile0 = (DBF("fp_Settings"))
  27493.             USE IN SELECT("FP_Settings")  && Close the file
  27494.             USE (lcFile0) IN 0 ALIAS fp_settings EXCLUSIVE
  27495.             ALTER TABLE FP_Settings ALTER COLUMN Property c(25)
  27496.             USE IN SELECT("FP_Settings")
  27497.             USE (lcFile0) IN 0 AGAIN ALIAS fp_settings
  27498.         CATCH 
  27499.         ENDTRY
  27500.         IF NOT USED("FP_SETTINGS")
  27501.             LOCAL lcUserFile
  27502.             lcUserFile = IIF(EMPTY(_goFP._SettingsFile), ;
  27503.                 "FoxyPreviewer_Settings.dbf", ;
  27504.                 _goFP._SettingsFile)
  27505.             USE (lcUserFile) IN 0 AGAIN SHARED ALIAS FP_Settings
  27506.         ENDIF
  27507.         WAIT CLEAR
  27508.     ENDIF
  27509.     APPEND BLANK 
  27510.     REPLACE FP_Settings.Property WITH tcProperty IN FP_Settings
  27511.     lcType  = UPPER(LEFT(tcProperty, 1))
  27512.     luValue = EVALUATE("_goFP." + tcProperty)
  27513.     REPLACE (lcType + "Value") WITH luValue IN FP_Settings
  27514. ENDIF 
  27515. lcProp = FP_Settings.Property
  27516. lcType = UPPER(LEFT(lcProp, 1))
  27517. luValue = EVALUATE("FP_Settings." + lcType + "Value")
  27518. IF NOT PEMSTATUS(toObject, "nAdjust", 5)
  27519.     toObject.AddProperty("nAdjust"   , 0)
  27520.     toObject.AddProperty("cProperty" , lcProp)
  27521.     toObject.AddProperty("nRec"      , RECNO())
  27522. ENDIF
  27523. IF EMPTY(tnAdjust)
  27524.     toObject.Value = luValue
  27525. ELSE 
  27526.     toObject.nAdjust = tnAdjust
  27527.     toObject.Value = luValue + tnAdjust
  27528. ENDIF
  27529. IF _VFP.StartMode = 0 && Development
  27530.     toObject.ToolTipText = "Related property: '" + tcProperty + "'"
  27531. ENDIF 
  27532. ENDPROC
  27533. PROCEDURE updatetable
  27534. LOCAL lnPg, loControl as ComboBox
  27535. LOCAL lcProp, lcType, luValue
  27536. FOR lnPg = 1 TO Thisform.PF.PageCount
  27537.     FOR EACH loControl IN Thisform.PF.Pages(lnPg).Controls
  27538.         * Locate our controls
  27539.         IF PEMSTATUS(loControl, "nAdjust", 5)
  27540.             * MESSAGEBOX(loControl.cProperty + CHR(13) + loControl.Name)
  27541.             lcProp = loControl.cProperty
  27542.             lcType = UPPER(LEFT(lcProp, 1))
  27543.             IF lcType = "C" AND PEMSTATUS(loControl, "cValue", 5)
  27544.                 luValue = loControl.cValue
  27545.             ELSE
  27546.                 luValue = loControl.Value
  27547.             ENDIF
  27548.             DO CASE
  27549.                 CASE lcType = "L"
  27550.                     UPDATE FP_Settings ;
  27551.                         SET lValue = luValue ;
  27552.                         WHERE Property = lcProp
  27553.                 CASE lcType = "C"
  27554.                     UPDATE FP_Settings ;
  27555.                         SET cValue = luValue ;
  27556.                         WHERE Property = lcProp
  27557.                 CASE lcType = "N"
  27558.                     UPDATE FP_Settings ;
  27559.                         SET nValue = luValue - loControl.nAdjust;
  27560.                         WHERE Property = lcProp
  27561.                 OTHERWISE
  27562.                     MESSAGEBOX("Missing: " + loControl.cProperty + CHR(13) + loControl.Name)
  27563.             ENDCASE
  27564.         ENDIF
  27565.     ENDFOR
  27566. ENDFOR
  27567. * Update the Encryption container
  27568. * Update separately the cLanguage property
  27569. IF VARTYPE(This.PF.PageGeneral) = "O"
  27570.     LOCAL lcLang
  27571.     lcLang = ALLTRIM(GETWORDNUM(Thisform.PF.PageGeneral.CmbLanguage.Value, 1, "/"))
  27572.     UPDATE FP_Settings ;
  27573.         SET cValue = lcLang;
  27574.         WHERE Property = "cLanguage"
  27575. ENDIF
  27576. * Update separately the cSMTPPassword property - by Nick Porfyris [20101014]
  27577. IF VARTYPE(This.PF.PageEmail) = "O"
  27578.     LOCAL lcPass
  27579.     lcPass = _goFP.DoEncrypt(ALLTRIM(Thisform.PF.PageEmail.txtPassword.VALUE)) && Encrypt it!...
  27580.     UPDATE FP_Settings ;
  27581.         SET cValue = lcPass;
  27582.         WHERE Property = "cSMTPPassword"
  27583. ENDIF
  27584. FLUSH IN FP_Settings FORCE
  27585. RETURN
  27586. ENDPROC
  27587. PROCEDURE validate
  27588. IF VARTYPE(This.PF.PageEmail) = "O"
  27589. WITH This.PF.PageEmail 
  27590.     IF INLIST(.CmbEmailType.Value, 2, 3) AND ; && "CDO"
  27591.             (EMPTY(.TxtSMTP.Value) OR ;
  27592.             EMPTY(.TxtLogin.Value) OR ;
  27593.             EMPTY(.TxtPassword.Value) OR ;
  27594.             EMPTY(.TxtPort.Value) OR ;
  27595.             EMPTY(.TxtFrom.Value))
  27596. *!*            IF MESSAGEBOX("Invalid SMTP email configuration!" + CHR(13) + ;
  27597. *!*                "Continue anyway?", 1 + 32, "Setup inconsistency") = 2 && 1=Ok 2=Cancel
  27598. *!*                RETURN .F.
  27599. *!*            ENDIF 
  27600.         IF MESSAGEBOX(_goFP.GetLoc("BADSMTP") + CHR(13) + ;
  27601.             _goFP.GetLoc("CONTINUE"), 1 + 32, _goFP.GetLoc("BADSETUP")) = 2 && 1=Ok 2=Cancel
  27602.             RETURN .F.
  27603.         ENDIF 
  27604.     ENDIF 
  27605. ENDWITH 
  27606. ENDIF 
  27607. IF VARTYPE(This.PF.PagePDF) = "O"
  27608. IF (This.PF.PagePDF.ChkEncrypt.Value = .T.) AND ;
  27609.     (This.PF.PagePDF.TxtMasterPwd.Value = This.PF.PagePDF.TxtUserPwd.Value)
  27610.     IF MESSAGEBOX(_goFP.GetLoc("MASTANDUSR") + CHR(13) + ;
  27611.         _goFP.GetLoc("CONTINUE"), 1 + 32, _goFP.GetLoc("BADSETUP")) = 2 && 1=Ok 2=Cancel
  27612.         RETURN .F.
  27613.     ENDIF 
  27614. ENDIF
  27615. ENDIF 
  27616. IF VARTYPE(This.PF.PageGeneral) = "O"
  27617. LOCAL lnIndex
  27618. lnIndex = Thisform.PF.PageGeneral.CmbLanguage.ListIndex
  27619.     _goFP.cLanguage = _goFP._aLanguages(lnIndex)
  27620. CATCH
  27621. ENDTRY
  27622. ENDIF
  27623. RETURN .T.
  27624. ENDPROC
  27625. PROCEDURE setlanguage
  27626. LOCAL loExc as Exception
  27627.     WITH This
  27628.         LOCAL lcVersionText, lcPreviewVersion
  27629.         TRY
  27630.             lcVersionText = GetVfpVersion()
  27631.         CATCH
  27632.             lcVersionText = ""
  27633.         ENDTRY
  27634.         lcPreviewVersion = _goFP._PreviewVersion
  27635.         .lblVersion.Caption = ALLTRIM(TRANSFORM(_goFP.cVersion)) + CHR(13) + "(" + VERSION(4) + ") " + lcVersionText + "   PV " + lcPreviewVersion
  27636.         .CmdOk.Caption      = _goFP.GetLoc("GOTOPG_OK")
  27637.         .CmdCancel.Caption  = _goFP.GetLoc("CANCEL")
  27638.         .Caption            = _goFP.GetLoc("SETUPTITLE")
  27639.     ENDWITH
  27640.     IF VARTYPE(This.PF.PageGeneral) = "O"
  27641.         WITH This.PF.PageGeneral
  27642.             .Caption                      = _goFP.GetLoc("GENERAL")
  27643.             .lblZoom.Caption              = _goFP.GetLoc("ZOOMLEVEL")
  27644.             .LblCanvasCnt.Caption         = _goFP.GetLoc("CANVASCNT")
  27645.             .lblDockPosition.Caption      = _goFP.GetLoc("DOCKPOSITI")
  27646.             .lblLanguage.Caption          = _goFP.GetLoc("CUSLANGUAG")
  27647.             .lblToolbarvisibility.Caption = _goFP.GetLoc("TBARVISIBL")
  27648.             .lblWndState.Caption          = _goFP.GetLoc("WNDSTATE")
  27649.             .lblProgress.Caption          = _goFP.GetLoc("PROGRESS")
  27650.             .chkQuiet.Caption             = _goFP.GetLoc("QUIETMODE")
  27651.         ENDWITH
  27652.         WITH This.PF.PageGeneral.CmbProgress as ComboBox
  27653.             .ListItem(1) = _goFP.GetLoc("DEFAULT")
  27654.             .ListItem(2) = _goFP.GetLoc("WINPGBAR")
  27655.         ENDWITH
  27656.         WITH This.PF.PageGeneral.CmbTbrVisibility as ComboBox
  27657.             .ListItem(1) = _goFP.GetLoc("VISIBLE")
  27658.             .ListItem(2) = _goFP.GetLoc("INVISIBLE")
  27659.             .ListItem(3) = _goFP.GetLoc("USERESOURC")
  27660.         ENDWITH
  27661.         WITH This.PF.PageGeneral.CmbDock as ComboBox
  27662.             .ListItem(1) = _goFP.GetLoc("UNDOCKED")
  27663.             .ListItem(2) = _goFP.GetLoc("TBONTOP")
  27664.             .ListItem(3) = _goFP.GetLoc("TBONLEFT")
  27665.             .ListItem(4) = _goFP.GetLoc("TBONRIGHT")
  27666.             .ListItem(5) = _goFP.GetLoc("TBONBOTTOM")
  27667.             .ListItem(6) = _goFP.GetLoc("USERESOURC")
  27668.         ENDWITH
  27669.         WITH This.PF.PageGeneral.CmbWndState as ComboBox
  27670.             .ListItem(1) = _goFP.GetLoc("NORMAL")
  27671.             .ListItem(2) = _goFP.GetLoc("MINIMIZED")
  27672.             .ListItem(3) = _goFP.GetLoc("MAXIMIZED")
  27673.         ENDWITH
  27674.         WITH This.PF.PageGeneral.CmbCanvasCnt AS ComboBox
  27675.             .ListItem(1) = _goFP.GetLoc("ONEPGMENU")
  27676.             .ListItem(2) = _goFP.GetLoc("TWOPGMENU")
  27677.             .ListItem(3) = _goFP.GetLoc("FOURPGMENU")
  27678.         ENDWITH
  27679.         WITH This.PF.PageGeneral.CmbZoom as ComboBox
  27680.             .ListItem(10) = _goFP.GetLoc("CBOZOOMWHO")
  27681.             .ListItem(11) = _goFP.GetLoc("CBOZOOMPGW")
  27682.         ENDWITH
  27683.     ENDIF
  27684.     IF VARTYPE(This.PF.PageControls) = "O"
  27685.         WITH This.PF.PageControls
  27686.             .Caption = _goFP.GetLoc("CONTROLS")
  27687.             .lblBtnSize.Caption       = _goFP.GetLoc("BUTTONSIZE")
  27688.             .CmbBtnSize.ListItem(1)   = _goFP.GetLoc("SMALL")
  27689.             .CmbBtnSize.ListItem(2)   = _goFP.GetLoc("BIG")
  27690.             .CmbPrPrefType.ListItem(1)= _goFP.GetLoc("PRGENERAL")
  27691.             .CmbPrPrefType.ListItem(2)= _goFP.GetLoc("PRCONFIG")
  27692.             .ChkAvailPrinters.Caption = _goFP.GetLoc("AVAILABLEP")
  27693.             .ChkCopies.Caption        = _goFP.GetLoc("COPIES")
  27694.             .ChkMiniatures.Caption    = _goFP.GetLoc("MENUPROOF")
  27695.             .lblMiniatures.Caption    = _goFP.GetLoc("MINIPERPG")
  27696.             .ChkPrintPref.Caption     = _goFP.GetLoc("PRINTINGPR")
  27697.             .ChkSaveToFile.Caption    = _goFP.GetLoc("SAVEREPORT")
  27698.             .ChkSendEmail.Caption     = _goFP.GetLoc("SENDTOEMAI")
  27699.             .ChkSettings.Caption      = _goFP.GetLoc("Setup")
  27700.             .ChkSearch.Caption        = _goFP.GetLoc("FIND")
  27701.             .lblSearchPages.Caption   = _goFP.GetLoc("MAXSEARCH")
  27702.         ENDWITH
  27703.     ENDIF
  27704.     IF VARTYPE(This.PF.PageOutput) = "O"
  27705.         WITH This.PF.PageOutput
  27706.             .Caption = _goFP.GetLoc("OUTPUT")
  27707.             .ChkSaveHTML.Caption = _goFP.GetLoc("SAVEASHTML")
  27708.             .ChkSaveMHT.Caption  = _goFP.GetLoc("SAVEASMHT")
  27709.             .ChkSaveImg.Caption  = _goFP.GetLoc("SAVEASIMAG")
  27710.             .ChkSavePDF.Caption  = _goFP.GetLoc("SAVEASPDF")
  27711.             .ChkSaveRTF.Caption  = _goFP.GetLoc("SAVEASRTF")
  27712.             .ChkSaveXLS.Caption  = _goFP.GetLoc("SAVEASXLS")
  27713.             .ChkSaveTXT.Caption  = _goFP.GetLoc("SAVEASTXT")
  27714.             .lblOutputPath.Caption = _goFP.GetLoc("SAVEPATH")
  27715.             .ChkOpenViewer.Caption = _goFP.GetLoc("OPENVIEWER")
  27716.         ENDWITH
  27717.     ENDIF
  27718.     IF VARTYPE(This.PF.PageEmail) = "O"
  27719.         WITH This.PF.PageEmail
  27720.             .Caption = _goFP.GetLoc("EMAIL")
  27721.             .lblAttachmentType.Caption = _goFP.GetLoc("ATTACHTYPE")
  27722.             .lblCDOsettings.Caption    = _goFP.GetLoc("CDOSETUP")
  27723.             .lblEmailMode.Caption      = _goFP.GetLoc("EMAILMODE")
  27724.             .lblLogin.Caption          = _goFP.GetLoc("LOGIN")
  27725.             .lblPassword.Caption       = _goFP.GetLoc("PASSWORD")
  27726.             .lblSender.Caption         = _goFP.GetLoc("SENDER")
  27727.             .lblSMTPport.Caption       = _goFP.GetLoc("SMTPPORT")
  27728.             .lblSMTPserver.Caption     = _goFP.GetLoc("SMTPSERVER")
  27729.             .ChkAutoEmail.Caption      = _goFP.GetLoc("AUTOEMAIL")
  27730.             .ChkUseSSL.Caption         = _goFP.GetLoc("USESSL")
  27731.         ENDWITH
  27732.         WITH This.PF.PageEmail.CmbEmailType as ComboBox
  27733.             .ListItem(4) = _goFP.GetLoc("CUSTOMPROC")
  27734.         ENDWITH
  27735.     ENDIF
  27736.     IF VARTYPE(This.PF.PagePDF) = "O"
  27737.         WITH This.PF.PagePDF
  27738.             * .Caption = _goFP.GetLoc("PDFOPTIONS")
  27739.             .chkEmbedFonts.Caption    = _goFP.GetLoc("EMBEDFONTS")
  27740.             .chkPDFasImage.Caption    = _goFP.GetLoc("PDFASIMAGE")
  27741.             .lblPageMode.Caption      = _goFP.GetLoc("PAGEMODE")
  27742.             .CmbPageMode.ListItem(1)  = _goFP.GetLoc("NORMALVIEW")
  27743.             .CmbPageMode.ListItem(2)  = _goFP.GetLoc("THUMBSPANE")
  27744.             *!*        .CmbPageMode.ListItem(2)  = _goFP.GetLoc("OUTLINPANE")
  27745.             *!*        .CmbPageMode.ListItem(3)  = _goFP.GetLoc("THUMBSPANE")
  27746.             .lblPDFauthor.Caption     = _goFP.GetLoc("PDFAUTHOR")
  27747.             .lblPDFtitle.Caption      = _goFP.GetLoc("PDFTITLE")
  27748.             .lblSymbol.Caption        = _goFP.GetLoc("SYMBBARCOD")
  27749.             .lblSymbol.ToolTipText    = _goFP.GetLoc("SYMBBARTIP")
  27750.             .txtPDFSymbolList.ToolTipText = _goFP.GetLoc("SYMBBARTIP")
  27751.             .lblDefaultFont.Caption   = _goFP.GetLoc("PDFFONT")
  27752.             .ChkEncrypt.Caption       = _goFP.GetLoc("ENCRYPTDOC")
  27753.             .lblMasterPwd.Caption     = _goFP.GetLoc("MASTERPWD")
  27754.             .lblUserPwd.Caption       = _goFP.GetLoc("USERPWD")
  27755.             .ChkCanPrint.Caption      = _goFP.GetLoc("CANPRINT")
  27756.             .ChkCanEdit.Caption       = _goFP.GetLoc("CANEDIT")
  27757.             .ChkCanCopy.Caption       = _goFP.GetLoc("CANCOPY")
  27758.             .ChkCanAddNotes.Caption   = _goFP.GetLoc("CANADDNOTE")
  27759.         ENDWITH
  27760.     ENDIF
  27761.     IF VARTYPE(This.PF.PageXLS) = "O"
  27762.         WITH This.PF.PageXLS
  27763.             .lblExcelExtension.Caption   = _goFP.GetLoc("WKSEXT")
  27764.             .chkConverttoPureXLS.Caption = _goFP.GetLoc("XML2XLS")
  27765.             .chkRepeatHeaders.Caption    = _goFP.GetLoc("RPTHEADER")
  27766.             .chkRepeatFooters.Caption    = _goFP.GetLoc("RPTFOOTER")
  27767.             .chkHidePageNo.Caption       = _goFP.GetLoc("HIDEPAGENO")
  27768.             .chkCellAlignLeft.Caption    = _goFP.GetLoc("XLALIGNLEF")
  27769.         ENDWITH
  27770.     ENDIF
  27771. CATCH TO loExc
  27772.     *    SET STEP ON
  27773. ENDTRY
  27774. RETURN
  27775. ENDPROC
  27776. PROCEDURE getloc
  27777. LPARAMETERS tcString
  27778. RETURN TRIM(EVALUATE("_goFP._oLang." + tcString))
  27779. ENDPROC
  27780. PROCEDURE enablecontrols
  27781.     IF VARTYPE(_Screen.oFoxyPreviewer) = "O" AND ;
  27782.             VARTYPE(_Screen.oFoxyPreviewer.oSettingsDlg) = "O"
  27783.         WITH _Screen.oFoxyPreviewer.oSettingsDlg
  27784.             && Enabling the Tabs
  27785.             This.PF.PageGeneral.Enabled  = .lEnableTabGeneral
  27786.             This.PF.PageControls.Enabled = .lEnableTabControls
  27787.             This.PF.PageOutput.Enabled   = .lEnableTabOutput
  27788.             This.PF.PageEmail.Enabled    = .lEnableTabEmail
  27789.             This.PF.PagePDF.Enabled      = .lEnableTabPDF
  27790.             This.PF.PageXLS.Enabled      = .lEnableTabXLS
  27791.             && Showing / hiding  and Enabling / disabling the controls or pages
  27792.             IF .lShowTabXLS
  27793.             ELSE
  27794.                 This.PF.RemoveObject("PageXLS")
  27795.             ENDIF
  27796.             IF .lShowTabPDF
  27797.                 This.PF.PagePDF.ChkEmbedFonts.Enabled    = .lEnableChkEmbedFonts
  27798.                 This.PF.PagePDF.ChkPDFasImage.Enabled    = .lEnableChkPDFasImage
  27799.             ELSE
  27800.                 This.PF.RemoveObject("PagePDF")
  27801.             ENDIF
  27802.             IF .lShowTabEmail
  27803.                 This.PF.PageEmail.cmbEmailType.Enabled     = .lEnableCmbEmailType
  27804.                 This.PF.PageEmail.CmbAttach.Enabled        = .lEnableCmbAttachmentType
  27805.             ELSE 
  27806.                 This.PF.RemoveObject("PageEmail")
  27807.             ENDIF
  27808.             IF .lShowTabOutput
  27809.                 This.PF.PageOutput.chkSaveImg.Enabled       = .lEnableChkSaveAsImage
  27810.                 This.PF.PageOutput.chkSavePDF.Enabled       = .lEnableChkSaveAsPDF
  27811.                 This.PF.PageOutput.chkSaveRTF.Enabled       = .lEnableChkSaveAsRTF
  27812.                 This.PF.PageOutput.ChkSaveHTML.Enabled      = .lEnableChkSaveAsHTML
  27813.                 This.PF.PageOutput.ChkSaveMHT.Enabled       = .lEnableChkSaveAsMHT
  27814.                 This.PF.PageOutput.chkSaveXLS.Enabled       = .lEnableChkSaveAsXLS
  27815.                 This.PF.PageOutput.OptXLSType.Enabled       = .lEnableChkSaveAsXLS
  27816.                 This.PF.PageOutput.ChkSaveTXT.Enabled       = .lEnableChkSaveAsTXT
  27817.                 This.PF.PageOutput.ChkSaveTXT.Visible       = This.lCompleteMode = .T.
  27818.             ELSE 
  27819.                 This.PF.RemoveObject("PageOutput")
  27820.             ENDIF
  27821.             IF .lShowTabControls
  27822.                 This.PF.PageControls.ChkPrintPref.Enabled     = .lEnableChkPrintPref
  27823.                 This.PF.PageControls.CmbPrPrefType.Enabled    = .lEnableCmbPrintPrefType
  27824.                 This.PF.PageControls.ChkCopies.Enabled        = .lEnableChkCopies
  27825.                 This.PF.PageControls.ChkSaveToFile.Enabled    = .lEnableChkSavetoFile
  27826.                 This.PF.PageControls.ChkAvailPrinters.Enabled = .lEnableChkPrinters
  27827.                 This.PF.PageControls.ChkSendEmail.Enabled     = .lEnableChkEmail
  27828.                 This.PF.PageControls.ChkMiniatures.Enabled    = .lEnableChkMiniatures
  27829.                 This.PF.PageControls.SpnMiniatures.Enabled    = .lEnableChkMiniatures
  27830.                 This.PF.PageControls.ChkSearch.Enabled        = .lEnableChkSearch
  27831.                 This.PF.PageControls.SpnSearchPages.Enabled   = .lEnableChkSearch
  27832.                 This.PF.PageControls.ChkSettings.Enabled      = .lEnableChkSettings
  27833.             ELSE 
  27834.                 This.PF.RemoveObject("PageControls")
  27835.             ENDIF
  27836.             IF .lShowTabGeneral
  27837.                 This.PF.PageGeneral.CmbLanguage.Visible = .lShowLanguage
  27838.                 This.PF.PageGeneral.lblLanguage.Visible = .lShowLanguage
  27839.                 This.PF.PageGeneral.CmbLanguage.Enabled = .lEnableLanguage
  27840.             ELSE 
  27841.                 This.PF.RemoveObject("PageGeneral")
  27842.             ENDIF
  27843.         ENDWITH
  27844.     ENDIF
  27845. CATCH TO loExc
  27846. *    SET STEP ON
  27847. ENDTRY
  27848. ENDPROC
  27849. PROCEDURE Load
  27850. SET TALK OFF
  27851. SET CONSOLE OFF 
  27852. Thisform.AddProperty("nSelect", SELECT())
  27853. Thisform.AddProperty("nDataSession", SET("Datasession"))
  27854. ENDPROC
  27855. PROCEDURE Destroy
  27856. USE IN SELECT("FP_Settings")
  27857. IF This.inPreview = .F.
  27858.     RELEASE _goFP
  27859. ENDIF
  27860. SET DATASESSION TO (Thisform.nDataSession)
  27861. SELECT(Thisform.nSelect)
  27862. ENDPROC
  27863. PROCEDURE Init
  27864. && Remove the "About" page if running in EXE
  27865. IF _VFP.StartMode <> 0
  27866.     This.PF.PageCount = 6
  27867. ENDIF
  27868. IF VARTYPE(_goFP) <> "O"
  27869.     * Get settings information
  27870.     RELEASE _goFP
  27871.     PUBLIC  _goFP
  27872.     _goFP = NEWOBJECT("PreviewHelper", LOCFILE("FoxyPreviewer.Prg"))
  27873.     This.lCompleteMode = .F.
  27874.     This.inPreview = .F.
  27875. ENDIF
  27876.     This.Icon = _goFP.cFormIcon
  27877. CATCH
  27878. ENDTRY
  27879. LOCAL lcUserFile, llReturn, loEx as Exception
  27880. lcUserFile = IIF(EMPTY(_goFP._SettingsFile), ;
  27881.     "FoxyPreviewer_Settings.dbf", ;
  27882.     _goFP._SettingsFile)
  27883.     USE (lcUserFile) IN 0 AGAIN SHARED ALIAS FP_Settings
  27884. CATCH TO loEx
  27885.     MESSAGEBOX("Could not load the settings file." + CHR(13) + ;
  27886.         "Make sure to delete the file 'FoxyPreviewer_Settings.dbf'" + CHR(13) + ;
  27887.         "and run a report again using the previewer to generate the settings file", ;
  27888.         16, "Error loading settings")
  27889.     IF loEx.ErrorNo = 1 && File does not exist
  27890.     ENDIF
  27891.     llReturn = .T.
  27892. ENDTRY
  27893. IF llReturn
  27894.     SET DATASESSION TO (Thisform.nDataSession)
  27895.     SELECT(Thisform.nSelect)
  27896.     RETURN .F.
  27897. ENDIF
  27898. && Show/Hide, Enable/Disable controls in simplified mode
  27899. Thisform.EnableControls()
  27900. SELECT FP_Settings
  27901. WITH This
  27902.     * .UpdateControl(.PF.PageGeneral.CmbLanguage, "cLanguage")
  27903.     IF VARTYPE(.PF.PageGeneral) = "O"
  27904.         IF VARTYPE(_goFP) = "O"
  27905.             * .PF.PageGeneral.CmbLanguage.Value = _goFP.cLanguage
  27906.             This.PF.PageGeneral.CmbLanguage.ListItemId = _goFP._LangIndex
  27907.         ENDIF
  27908.         .UpdateControl(.PF.PageGeneral.CmbTbrVisibility, "nShowToolBar")
  27909.         && 1 = Visible (default), 2 = Invisible, 3 = Use resource
  27910.         .UpdateControl(.PF.PageGeneral.CmbDock, "nDockType", 2)
  27911. 1 Undocks the toolbar or form.
  27912.         *      0 Positions the toolbar or form at the top of the main Visual FoxPro window.
  27913.         *     1 Positions the toolbar or form at the left side of the main Visual FoxPro window.
  27914.         *     2 Positions the toolbar or form at the right side of the main Visual FoxPro window.
  27915.         *     3 Positions the toolbar or form at the bottom of the main Visual FoxPro window.
  27916.         *     4 or .F. Mmeans to keep the current Dock settings from the resource
  27917.         .UpdateControl(.PF.PageGeneral.CmbCanvasCnt    , "nCanvasCount")
  27918.         .UpdateControl(.PF.PageGeneral.CmbZoom         , "nZoomLevel")
  27919.         .UpdateControl(.PF.PageGeneral.CmbWndState     , "nWindowState", 1)
  27920.         .UpdateControl(.PF.PageGeneral.ChkQuiet        , "lQuietMode")
  27921.         .UpdateControl(.PF.PageGeneral.CmbProgress     , "nThermType")
  27922.     ENDIF
  27923.     IF VARTYPE(.PF.PageControls) = "O"
  27924.         .UpdateControl(.PF.PageControls.CmbBtnSize      , "nButtonSize")
  27925.         .UpdateControl(.PF.PageControls.cmbPrPrefType   , "nPrinterPropType")
  27926.         .UpdateControl(.PF.PageControls.ChkAvailPrinters, "lShowPrinters")
  27927.         .UpdateControl(.PF.PageControls.ChkCopies       , "lShowCopies")
  27928.         .UpdateControl(.PF.PageControls.ChkPrintPref    , "lPrinterPref")
  27929.         .UpdateControl(.PF.PageControls.ChkSaveToFile   , "lSaveToFile")
  27930.         .UpdateControl(.PF.PageControls.ChkSettings     , "lShowSetup")
  27931.         .UpdateControl(.PF.PageControls.ChkMiniatures   , "lShowMiniatures")
  27932.         .UpdateControl(.PF.PageControls.SpnMiniatures   , "nMaxMiniatureDisplay")    && Number of miniature to display in the miniature form
  27933.         .UpdateControl(.PF.PageControls.ChkSendEmail    , "lSendToEmail")
  27934.         .UpdateControl(.PF.PageControls.ChkSearch       , "lShowSearch")
  27935.         .UpdateControl(.PF.PageControls.SpnSearchPages  , "nSearchPages")
  27936.     ENDIF
  27937.     IF VARTYPE(.PF.PageOutput) = "O"
  27938.         .UpdateControl(.PF.PageOutput.ChkSaveHTML     , "lSaveAsHTML")
  27939.         .UpdateControl(.PF.PageOutput.ChkSaveMHT      , "lSaveAsMHT")
  27940.         .UpdateControl(.PF.PageOutput.ChkSaveImg      , "lSaveAsImage")
  27941.         .UpdateControl(.PF.PageOutput.ChkSavePDF      , "lSaveAsPDF")
  27942.         .UpdateControl(.PF.PageOutput.ChkSaveRTF      , "lSaveAsRTF")
  27943.         .UpdateControl(.PF.PageOutput.ChkSaveXLS      , "lSaveAsXLS")
  27944.         .UpdateControl(.PF.PageOutput.ChkSaveTXT      , "lSaveAsTXT")
  27945.         .UpdateControl(.PF.PageOutput.TxtOutputPath   , "cOutputPath")
  27946.         .UpdateControl(.PF.PageOutput.ChkOpenViewer   , "lOpenViewer")
  27947.     ENDIF
  27948.     IF VARTYPE(.PF.PageEmail) = "O"
  27949.         .UpdateControl(.PF.PageEmail.CmbEmailType    , "nEmailMode")
  27950.         .UpdateControl(.PF.PageEmail.CmbAttach       , "cEmailType") && file type to be used in Emails (PDF, RTF, HTML or XLS)
  27951.         .UpdateControl(.PF.PageEmail.chkAutoEmail    , "lEmailAuto") && Auto generates output file
  27952.         .UpdateControl(.PF.PageEmail.TxtLogin        , "cSMTPUserName")
  27953.         .UpdateControl(.PF.PageEmail.TxtPassword     , "cSMTPPassword")
  27954.         .PF.PageEmail.TxtPassword.Value = _goFP.DoDecrypt(.PF.PageEmail.TxtPassword.Value)  && Decrypt it!... by Nick Porfyris [20101014]...
  27955.         .UpdateControl(.PF.PageEmail.TxtPort         , "nSMTPPort")
  27956.         .UpdateControl(.PF.PageEmail.TxtSMTP         , "cSMTPServer")
  27957.         .UpdateControl(.PF.PageEmail.ChkUseSSL       , "lSMTPUseSSL")
  27958.         .UpdateControl(.PF.PageEmail.TxtFrom         , "cEmailFrom")
  27959.         .UpdateControl(.PF.PageEmail.TxtHTMLfile     , "cEmailBodyFile")
  27960.         * Disable the HTML output from the Email TAB if not at Extended mode
  27961.         WITH This.PF.PageEmail.CmbAttach as ComboBox
  27962.             IF NOT This.lCompleteMode
  27963.                 .ListItem(5) = "\HTML"
  27964.             ENDIF
  27965.         ENDWITH
  27966.     ENDIF
  27967.     IF VARTYPE(.PF.PagePDF) = "O"
  27968.         .UpdateControl(.PF.PagePDF.ChkEmbedFonts   , "lPDFEmbedFonts")
  27969.         .UpdateControl(.PF.PagePDF.ChkPDFasImage   , "lPDFasImage")
  27970.         .UpdateControl(.PF.PagePDF.ChkEncrypt      , "lPDFEncryptDocument")
  27971.         .UpdateControl(.PF.PagePDF.CmbPageMode     , "nPDFPageMode")
  27972.         .UpdateControl(.PF.PagePDF.ChkCanAddNotes  , "lPDFCanAddNotes")
  27973.         .UpdateControl(.PF.PagePDF.ChkCanCopy      , "lPDFCanCopy")
  27974.         .UpdateControl(.PF.PagePDF.ChkCanEdit      , "lPDFCanEdit")
  27975.         .UpdateControl(.PF.PagePDF.ChkCanPrint     , "lPDFCanPrint")
  27976.         .UpdateControl(.PF.PagePDF.TxtMasterPwd    , "cPDFMasterPassword")
  27977.         .UpdateControl(.PF.PagePDF.TxtUserPwd      , "cPDFUserPassword")
  27978.         .UpdateControl(.PF.PagePDF.TxtPDFAuthor    , "cPDFAuthor")
  27979.         .UpdateControl(.PF.PagePDF.TxtPDFtitle     , "cPDFtitle")
  27980.         .UpdateControl(.PF.PagePDF.TxtPDFSymbolList, "cPDFSymbolFontsList")
  27981.         .UpdateControl(.PF.PagePDF.CmbDefaultFont  , "cPDFDefaultFont")
  27982.     ENDIF
  27983.     IF VARTYPE(.PF.PageXLS) = "O"
  27984.         .UpdateControl(.PF.PageXLS.cmbExcelExtension  , "cExcelDefaultExtension")
  27985.         .UpdateControl(.PF.PageXLS.chkCOnverttoPureXLS, "lExcelConvertToXLS")
  27986.         .UpdateControl(.PF.PageXLS.chkRepeatHeaders   , "lExcelRepeatHeaders")
  27987.         .UpdateControl(.PF.PageXLS.chkRepeatFooters   , "lExcelRepeatFooters")
  27988.         .UpdateControl(.PF.PageXLS.chkHidePageNo      , "lExcelHidePageNo")
  27989.         .UpdateControl(.PF.PageXLS.chkCellAlignLeft   , "lExcelAlignLeft")
  27990.     ENDIF
  27991.     *!*        cPdfAuthor          = NULL
  27992.     *!*        cPdfTitle           = NULL
  27993.     *!*        cPdfSubject         = NULL
  27994.     *!*        cPdfKeyWords        = NULL
  27995.     *!*        cPdfCreator         = NULL
  27996. ENDWITH
  27997. This.SetLanguage()
  27998. RETURN
  27999. *!*        cEmailPRG  = ""
  28000. *!*        lPDFasImage     = .F.
  28001. *!*        nPDFPageMode = 0 &&0 = Normal view (default), 1 = Show outlines pane, 2 = Show thumbnails pane
  28002. *!*        lQuietMode      = .T.
  28003. *!*         cFormIcon = PR_FORMICON
  28004. ENDPROC
  28005. GetShortPathName
  28006. Win32API
  28007. Settings file: 
  28008. Settings information
  28009. FoxyPreviewer settings table: 
  28010. LCFILE
  28011. _GOFP
  28012. _SETTINGSFILE
  28013. LCLONGFILE
  28014. LCBUFFER
  28015. LNBUFFERSIZE
  28016. LNSHORTPATHLEN
  28017. LCSHORTPATH
  28018. GETSHORTPATHNAME
  28019. WIN32API
  28020. _SYS16
  28021. RightClick,
  28022. EXTENSIONHANDLER
  28023. LOEXHANDLER
  28024. _GOFP
  28025. _OEXHANDLER
  28026. PREVIEWFORM
  28027. TOOLBAR
  28028. TOOLBARISVISIBLE
  28029. CREATETOOLBAR
  28030. LOEXC
  28031. THISFORM
  28032. RELEASE
  28033. Click,
  28034. EXTENSIONHANDLER
  28035. THISFORM
  28036. VALIDATE
  28037. UPDATETABLE
  28038. LOEXHANDLER
  28039. _GOFP
  28040. _OEXHANDLER
  28041. PREVIEWFORM
  28042. TOOLBAR
  28043. UPDATESETTINGS
  28044. TOOLBARISVISIBLE
  28045. CREATETOOLBAR
  28046. LOEXC
  28047. RELEASE
  28048. Click,
  28049. http://foxypreviewer.codeplex.com/license
  28050. Hyperlink
  28051. LOHYPERLINK
  28052. LCLINK
  28053. NAVIGATETO
  28054. Click,
  28055. FoxyPreviewer settings table: 
  28056. CAPTION
  28057. Click,
  28058. http://foxypreviewer.codeplex.com/releases
  28059. Hyperlink
  28060. LOHYPERLINK
  28061. LCLINK
  28062. NAVIGATETO
  28063. Click,
  28064. http://foxypreviewer.codeplex.com/documentation/
  28065. Hyperlink
  28066. LOHYPERLINK
  28067. LCLINK
  28068. NAVIGATETO
  28069. Click,
  28070. ADDITEM
  28071. Init,
  28072. Helvetica
  28073. Courier
  28074. Times-Roman
  28075. ADDITEM
  28076. Init,
  28077. Normal view
  28078. Thumbnails pane
  28079. ADDITEM
  28080. Init,
  28081. PARENT
  28082. ACTIVATE
  28083. InteractiveChange,
  28084. LCDIR
  28085. LCNEWDIR
  28086. PARENT
  28087. TXTHTMLFILE
  28088. VALUE
  28089. Click,
  28090. ADDITEM
  28091. Init,
  28092. CDO - HTML
  28093. CDO - TXT
  28094. Custom procedure
  28095. MAPI Alternative
  28096. ADDITEM
  28097. Init,
  28098. Global printer prompt options
  28099. Setup property sheet for current printer
  28100. ADDITEM
  28101. Init,
  28102. Small (16x16 pixels)
  28103. Big (32x32 pixels)
  28104. ADDITEM
  28105. Init,
  28106. SAVEPATH
  28107. LCDIR
  28108. LCNEWDIR
  28109. PARENT
  28110. TXTOUTPUTPATH
  28111. VALUE
  28112. _GOFP
  28113. GETLOC
  28114. Click,
  28115. VISIBLE
  28116. Init,
  28117. Default thermometer
  28118. Windows compatible thermometer
  28119. ADDITEM
  28120. Init,
  28121. Normal
  28122. Minimized
  28123. Maximized
  28124. ADDITEM
  28125. Init,
  28126. Whole Page
  28127. Page Width
  28128. ADDITEM
  28129. Init,
  28130. VALUE
  28131. 1 Page
  28132. 2 Pages
  28133. 4 Pages
  28134. COLUMNCOUNT
  28135. BOUNDCOLUMN
  28136. COLUMNWIDTHS
  28137. COLUMNLINES
  28138. ADDITEM
  28139. NEWINDEX
  28140. ProgrammaticChange,
  28141. Initi
  28142. Visible on startup
  28143. Invisible
  28144. Show according to Resource
  28145. ADDITEM
  28146. Init,
  28147. Undocked
  28148. Toolbar on TOP of the window
  28149. Toolbar on LEFT of the window
  28150. Toolbar on RIGHT of the window
  28151. Toolbar on BOTTOM of the window
  28152. Use settings from the Resource
  28153. ADDITEM
  28154. Init,
  28155. cValue
  28156. ENGLISH
  28157. ARABIC
  28158. BULGARIAN
  28159. CHINESE
  28160. CZECH
  28161. DUTCH
  28162. FRENCH
  28163. GERMAN
  28164. GREEK
  28165. INDONESIAN
  28166. ITALIAN
  28167. PERSIAN
  28168. POLISH
  28169. PORTUGUES
  28170. RUSSIAN
  28171. SPANISH
  28172. SWAHILI
  28173. TCHINESE
  28174. TURKISH
  28175. ADDPROPERTY
  28176. _GOFP
  28177. LCLANG
  28178. LCLOCAL
  28179. LCITEM
  28180. _ALANGUAGES
  28181. COUNT
  28182. _ALANGLOCAL
  28183. ADDITEMX
  28184. CVALUE
  28185. VALUE
  28186. _GOFP    
  28187. CLANGUAGE
  28188. THISFORM
  28189. SETLANGUAGE
  28190. Init,
  28191. InteractiveChangeH
  28192. LLENABLE
  28193. CHKENCRYPT
  28194. VALUE
  28195. CHKCANADDNOTES
  28196. ENABLED
  28197. CHKCANCOPY
  28198. CHKCANEDIT
  28199. CHKCANPRINT
  28200. TXTMASTERPWD
  28201. TXTUSERPWD
  28202. LBLMASTERPWD
  28203. LBLUSERPWD
  28204. GetShortPathName
  28205. Win32API
  28206. __ReadMe.txt
  28207. LCFILE
  28208. _GOFP
  28209. _SETTINGSFILE
  28210. LCLONGFILE
  28211. LCBUFFER
  28212. LNBUFFERSIZE
  28213. LNSHORTPATHLEN
  28214. LCSHORTPATH
  28215. GETSHORTPATHNAME
  28216. WIN32API
  28217. LCINFO
  28218. LCSETTINGSFILE
  28219. _SYS16
  28220. EDTCURSETTINGS
  28221. VALUE    
  28222. EDTSOURCE    
  28223. EDTREADME
  28224. VISIBLE
  28225. PagePDF.Activate,
  28226. PageAbout.Activate{
  28227. !Arial, 0, 9, 5, 15, 12, 32, 3, 0
  28228. TPROCEDURE RightClick
  28229. LOCAL lcFile
  28230. lcFile = _goFP._SettingsFile
  28231. IF LEN(lcFile) > 150
  28232.     * GetShortPathName
  28233.     LOCAL lcLongFile, lcBuffer, lnBufferSize, lnShortPathLen, lcShortPath
  28234.     lcLongFile = lcFile
  28235.     DECLARE INTEGER GetShortPathName IN Win32API ;   
  28236.         STRING  @cLongPath, ;   
  28237.         STRING  @cShortPathBuff, ;   
  28238.         INTEGER nBuffSize
  28239.     lcBuffer = SPACE(511)
  28240.     * should this be set to the maximum length allowed for a long path name?
  28241.     lnBufferSize = 511
  28242.     lnShortPathLen = GetShortPathName(lcLongFile, @lcBuffer, @lnBufferSize)
  28243.     lcShortPath = LEFT(lcBuffer, lnShortPathLen)
  28244.     IF NOT EMPTY(lcShortPath)
  28245.         lcFile = lcShortPath
  28246.     ENDIF 
  28247. ENDIF
  28248. MESSAGEBOX(;
  28249.         _goFP._Sys16 + CHR(13) + ;
  28250.         "Settings file: " + lcFile, 64, "Settings information")
  28251. _ClipText = lcFile
  28252. BROWSE NORMAL TITLE "FoxyPreviewer settings table: " + lcFile
  28253. ENDPROC
  28254. Top = 456
  28255. Left = -2
  28256. Height = 13
  28257. Width = 18
  28258. Caption = "Command1"
  28259. Style = 1
  28260. TabIndex = 5
  28261. Alignment = 2
  28262. Name = "Command1"
  28263. frmSettings
  28264. Command1
  28265. commandbutton
  28266. commandbutton
  28267. AutoSize = .F.
  28268. FontSize = 8
  28269. WordWrap = .F.
  28270. Caption = "Version"
  28271. Height = 29
  28272. Left = 12
  28273. Top = 427
  28274. Width = 247
  28275. TabIndex = 4
  28276. ForeColor = 0,128,192
  28277. Name = "lblVersion"
  28278. frmSettings
  28279. lblVersion
  28280. label
  28281. label
  28282. VPROCEDURE Click
  28283. LOCAL loExHandler
  28284. loExHandler = _goFP._oExHandler
  28285. TRY     
  28286.     WITH loExHandler as ExtensionHandler
  28287.         IF VARTYPE(.previewForm.ToolBar) <> "O"
  28288.             .PreviewForm.ToolBar = NULL
  28289.             * _goFP.UpdateSettings()
  28290.             .PreviewForm.ToolbarIsVisible = .F.
  28291.             .PreviewForm.CreateToolbar()
  28292.             .Show()
  28293.         ENDIF 
  28294.     ENDWITH 
  28295. CATCH TO loExc
  28296.     * LOCAL loExc AS EXCEPTION
  28297.     * MESSAGEBOX("Error :" + CHR(13) + ;
  28298.                 TRANSFORM(loExc.ERRORNO) + " - " + loExc.MESSAGE + CHR(13) + ;
  28299.                 "Line: " + TRANSFORM(loExc.LINENO) + " - " + loExc.LINECONTENTS)
  28300. ENDTRY
  28301. Thisform.Release()
  28302. RETURN
  28303. ENDPROC
  28304. tTop = 433
  28305. Left = 355
  28306. Height = 27
  28307. Width = 84
  28308. Cancel = .T.
  28309. Caption = "Cancel"
  28310. TabIndex = 3
  28311. Name = "cmdCancel"
  28312. frmSettings
  28313.     cmdCancel
  28314. commandbutton
  28315. commandbutton
  28316. PROCEDURE Click
  28317. IF NOT Thisform.Validate()
  28318.     RETURN
  28319. ENDIF 
  28320. Thisform.UpdateTable()
  28321. INKEY(.1)
  28322.     LOCAL loExHandler
  28323.     loExHandler = _goFP._oExHandler
  28324.     WITH loExHandler as ExtensionHandler
  28325.         TRY 
  28326.             .PreviewForm.ToolBar.Hide()
  28327.             .PreviewForm.ToolBar = NULL
  28328.         CATCH 
  28329.         ENDTRY 
  28330.         _goFP.UpdateSettings(.T.) && .T. means force the settings
  28331.         .PreviewForm.ToolbarIsVisible = .F.
  28332.         .PreviewForm.CreateToolbar()
  28333.         .Show()
  28334.     ENDWITH 
  28335. CATCH TO loExc
  28336.     SET STEP ON 
  28337. ENDTRY 
  28338. Thisform.Release()
  28339. ENDPROC
  28340. ^Top = 433
  28341. Left = 259
  28342. Height = 27
  28343. Width = 84
  28344. Caption = "Ok"
  28345. TabIndex = 2
  28346. Name = "cmdOk"
  28347. frmSettings
  28348. cmdOk
  28349. commandbutton
  28350. commandbutton
  28351. SHeight = 174
  28352. Left = 14
  28353. ReadOnly = .F.
  28354. Top = 8
  28355. Width = 409
  28356. Name = "edtReadMe"
  28357. frmSettings.PF.PageAbout
  28358.     edtReadMe
  28359. editbox
  28360. editbox
  28361. WFontSize = 8
  28362. Height = 38
  28363. Left = 86
  28364. Top = 314
  28365. Width = 338
  28366. Name = "edtCurSettings"
  28367. frmSettings.PF.PageAbout
  28368. edtCurSettings
  28369. editbox
  28370. editbox
  28371. RFontSize = 8
  28372. Height = 38
  28373. Left = 86
  28374. Top = 267
  28375. Width = 338
  28376. Name = "edtSource"
  28377. frmSettings.PF.PageAbout
  28378.     edtSource
  28379. editbox
  28380. editbox
  28381. PROCEDURE Click
  28382. LOCAL loHyperlink, lcLink
  28383. lcLink = "http://foxypreviewer.codeplex.com/license"
  28384. loHyperlink = CREATEOBJECT("Hyperlink") 
  28385. loHyperlink.navigateto(lcLink)
  28386. ENDPROC
  28387. AutoSize = .T.
  28388. FontUnderline = .T.
  28389. BackStyle = 0
  28390. Caption = "Freeware and open source utility - See License online"
  28391. Height = 17
  28392. Left = 14
  28393. MousePointer = 15
  28394. Top = 239
  28395. Width = 296
  28396. ForeColor = 0,0,255
  28397. ToolTipText = "Click to follow link"
  28398. Name = "Label2"
  28399. frmSettings.PF.PageAbout
  28400. Label2
  28401. label
  28402. label
  28403. AutoSize = .T.
  28404. WordWrap = .T.
  28405. BackStyle = 0
  28406. Caption = "Source file:"
  28407. Height = 17
  28408. Left = 14
  28409. Top = 267
  28410. Width = 61
  28411. TabIndex = 15
  28412. Name = "lblInfo"
  28413. frmSettings.PF.PageAbout
  28414. lblInfo
  28415. label
  28416. label
  28417. _PROCEDURE Click
  28418. BROWSE NORMAL TITLE "FoxyPreviewer settings table: " + This.Caption
  28419. ENDPROC
  28420. AutoSize = .T.
  28421. FontUnderline = .T.
  28422. WordWrap = .T.
  28423. BackStyle = 0
  28424. Caption = "Browse settings file"
  28425. Height = 17
  28426. Left = 14
  28427. MousePointer = 15
  28428. Top = 356
  28429. Width = 108
  28430. ForeColor = 0,0,255
  28431. ToolTipText = "Click to follow link"
  28432. Name = "lblSettingsFile"
  28433. frmSettings.PF.PageAbout
  28434. lblSettingsFile
  28435. label
  28436. label
  28437. AutoSize = .T.
  28438. BackStyle = 0
  28439. Caption = "Settings file:"
  28440. Height = 17
  28441. Left = 14
  28442. Top = 315
  28443. Width = 69
  28444. TabIndex = 15
  28445. Name = "lblExcelExtension"
  28446. frmSettings.PF.PageAbout
  28447. lblExcelExtension
  28448. label
  28449. label
  28450. PROCEDURE Click
  28451. LOCAL loHyperlink, lcLink
  28452. lcLink = "http://foxypreviewer.codeplex.com/releases"
  28453. loHyperlink = CREATEOBJECT("Hyperlink") 
  28454. loHyperlink.navigateto(lcLink)
  28455. ENDPROC
  28456. AutoSize = .T.
  28457. FontUnderline = .T.
  28458. BackStyle = 0
  28459. Caption = "FoxyPreviewer latest releases"
  28460. Height = 17
  28461. Left = 14
  28462. MousePointer = 15
  28463. Top = 213
  28464. Width = 165
  28465. ForeColor = 0,0,255
  28466. ToolTipText = "Click to follow link"
  28467. Name = "Label1"
  28468. frmSettings.PF.PageAbout
  28469. Label1
  28470. label
  28471. label
  28472. frmSettings.PF.PageAbout
  28473. Label4
  28474. label
  28475. label
  28476. _memberdata XML Metadata for customizable properties
  28477. inpreview
  28478. lcompletemode
  28479. *updatecontrol 
  28480. *updatetable 
  28481. *validate 
  28482. *setlanguage 
  28483. *getloc 
  28484. *enablecontrols 
  28485.     pageframe
  28486.     pageframe
  28487. frmSettings
  28488. {ErasePage = .T.
  28489. PageCount = 7
  28490. Top = 11
  28491. Left = 7
  28492. Width = 443
  28493. Height = 408
  28494. TabIndex = 1
  28495. Name = "PF"
  28496. Page1.Caption = "General"
  28497. Page1.PageOrder = 1
  28498. Page1.Name = "PageGeneral"
  28499. Page2.Caption = "Output"
  28500. Page2.PageOrder = 3
  28501. Page2.Name = "PageOutput"
  28502. Page3.Caption = "Controls"
  28503. Page3.PageOrder = 2
  28504. Page3.Name = "PageControls"
  28505. Page4.Caption = "Email"
  28506. Page4.Enabled = .T.
  28507. Page4.PageOrder = 4
  28508. Page4.Name = "PageEmail"
  28509. Page5.Caption = "PDF"
  28510. Page5.PageOrder = 5
  28511. Page5.Name = "PagePDF"
  28512. Page6.Caption = "XLS"
  28513. Page6.PageOrder = 6
  28514. Page6.Name = "PageXLS"
  28515. Page7.Caption = "About"
  28516. Page7.PageOrder = 7
  28517. Page7.Name = "PageAbout"
  28518. 5PROCEDURE PagePDF.Activate
  28519. LOCAL llEnable
  28520. llEnable = This.chkEncrypt.Value
  28521. WITH This
  28522.     .ChkCanAddNotes.Enabled = llEnable
  28523.     .ChkCanCopy.Enabled     = llEnable  
  28524.     .ChkCanEdit.Enabled     = llEnable
  28525.     .ChkCanPrint.Enabled    = llEnable
  28526.     .TxtMasterPwd.Enabled   = llEnable
  28527.     .TxtUserPwd.Enabled     = llEnable
  28528.     .lblMasterPwd.Enabled   = llEnable
  28529.     .lblUserPwd.Enabled     = llEnable
  28530. ENDWITH 
  28531. ENDPROC
  28532. PROCEDURE PageAbout.Activate
  28533. LOCAL lcFile
  28534. lcFile = _goFP._SettingsFile
  28535. IF LEN(lcFile) > 150
  28536.     * GetShortPathName
  28537.     LOCAL lcLongFile, lcBuffer, lnBufferSize, lnShortPathLen, lcShortPath
  28538.     lcLongFile = lcFile
  28539.     DECLARE INTEGER GetShortPathName IN Win32API ;   
  28540.         STRING  @cLongPath, ;   
  28541.         STRING  @cShortPathBuff, ;   
  28542.         INTEGER nBuffSize
  28543.     lcBuffer = SPACE(511)
  28544.     * should this be set to the maximum length allowed for a long path name?
  28545.     lnBufferSize = 511
  28546.     lnShortPathLen = GetShortPathName(lcLongFile, @lcBuffer, @lnBufferSize)
  28547.     lcShortPath = LEFT(lcBuffer, lnShortPathLen)
  28548.     IF NOT EMPTY(lcShortPath)
  28549.         lcFile = lcShortPath
  28550.     ENDIF 
  28551. ENDIF
  28552. LOCAL lcInfo, lcSettingsFile
  28553. lcInfo = _goFP._Sys16
  28554. This.EdtCurSettings.Value = lcFile
  28555. This.EdtSource.Value = lcInfo
  28556.     This.EdtReadMe.Value = FILETOSTR("__ReadMe.txt")
  28557. CATCH
  28558.     This.EdtReadMe.Visible = .F.
  28559. ENDTRY 
  28560. _ClipText = lcFile
  28561. ENDPROC
  28562. PROCEDURE Click
  28563. LOCAL loHyperlink, lcLink
  28564. lcLink = "http://foxypreviewer.codeplex.com/documentation/"
  28565. loHyperlink = CREATEOBJECT("Hyperlink") 
  28566. loHyperlink.navigateto(lcLink)
  28567. ENDPROC
  28568. AutoSize = .T.
  28569. FontUnderline = .T.
  28570. BackStyle = 0
  28571. Caption = "FoxyPreviewer online documentation"
  28572. Height = 17
  28573. Left = 14
  28574. MousePointer = 15
  28575. Top = 188
  28576. Width = 202
  28577. ForeColor = 0,0,255
  28578. ToolTipText = "Click to follow link"
  28579. Name = "Label4"
  28580. Top = 261
  28581. Left = 40
  28582. Height = 17
  28583. Width = 126
  28584. AutoSize = .T.
  28585. Alignment = 0
  28586. BackStyle = 0
  28587. Caption = "Align cells to the left"
  28588. TabIndex = 1
  28589. Name = "chkCellAlignLeft"
  28590. frmSettings.PF.PageXLS
  28591. chkCellAlignLeft
  28592. checkbox
  28593. checkbox
  28594. Top = 225
  28595. Left = 40
  28596. Height = 17
  28597. Width = 128
  28598. AutoSize = .T.
  28599. Alignment = 0
  28600. BackStyle = 0
  28601. Caption = "Hide page numbers"
  28602. TabIndex = 1
  28603. Name = "chkHidePageNo"
  28604. frmSettings.PF.PageXLS
  28605. chkHidePageNo
  28606. checkbox
  28607. checkbox
  28608. Top = 189
  28609. Left = 40
  28610. Height = 17
  28611. Width = 99
  28612. AutoSize = .T.
  28613. Alignment = 0
  28614. BackStyle = 0
  28615. Caption = "Repeat footers"
  28616. TabIndex = 1
  28617. Name = "chkRepeatFooters"
  28618. frmSettings.PF.PageXLS
  28619. chkRepeatFooters
  28620. checkbox
  28621. checkbox
  28622. label
  28623. combobox
  28624. combobox
  28625. cmbLanguage
  28626. frmSettings.PF.PageGeneral
  28627. rRowSourceType = 0
  28628. Height = 24
  28629. Left = 186
  28630. Style = 2
  28631. TabIndex = 1
  28632. Top = 20
  28633. Width = 241
  28634. Name = "cmbLanguage"
  28635. @PROCEDURE Init
  28636. This.AddProperty("cValue", "")
  28637. IF VARTYPE(_goFP) = "O"
  28638.     LOCAL n, lcLang, lcLocal, lcItem
  28639.     FOR m.n = 1 TO _goFP._aLanguages.Count
  28640.         lcLang  = ALLTRIM(_goFP._aLanguages(m.n))
  28641.         lcLocal = ALLTRIM(_goFP._aLangLocal(m.n))
  28642.         IF lcLang == lcLocal
  28643.             lcLocal = ""
  28644.         ELSE 
  28645.             lcLocal = " / " + lcLocal
  28646.         ENDIF 
  28647.         lcItem = lcLang + lcLocal
  28648.         This.AddItem(lcItem)
  28649.     ENDFOR
  28650.     This.AddItem("ENGLISH")
  28651.     This.AddItem("ARABIC")
  28652.     This.AddItem("BULGARIAN")
  28653.     This.AddItem("CHINESE")
  28654.     This.AddItem("CZECH")
  28655.     This.AddItem("DUTCH")
  28656.     This.AddItem("FRENCH")
  28657.     This.AddItem("GERMAN")
  28658.     This.AddItem("GREEK")
  28659.     This.AddItem("INDONESIAN")
  28660.     This.AddItem("ITALIAN")
  28661.     This.AddItem("PERSIAN")
  28662.     This.AddItem("POLISH")
  28663.     This.AddItem("PORTUGUES")
  28664.     This.AddItem("RUSSIAN")
  28665.     This.AddItem("SPANISH")
  28666.     This.AddItem("SWAHILI")
  28667.     This.AddItem("TCHINESE")
  28668.     This.AddItem("TURKISH")
  28669. ENDIF
  28670. ENDPROC
  28671. PROCEDURE InteractiveChange
  28672. This.cValue = ALLTRIM(GETWORDNUM(This.Value, 1, " / "))
  28673.     _goFP.cLanguage = This.cValue
  28674.     Thisform.SetLanguage()
  28675. CATCH
  28676. ENDTRY
  28677. ENDPROC
  28678. Top = 153
  28679. Left = 40
  28680. Height = 17
  28681. Width = 107
  28682. AutoSize = .T.
  28683. Alignment = 0
  28684. BackStyle = 0
  28685. Caption = "Repeat headers"
  28686. TabIndex = 1
  28687. Name = "chkRepeatHeaders"
  28688. frmSettings.PF.PageXLS
  28689. chkRepeatHeaders
  28690. checkbox
  28691. checkbox
  28692. Top = 82
  28693. Left = 40
  28694. Height = 52
  28695. Width = 391
  28696. WordWrap = .T.
  28697. AutoSize = .F.
  28698. Alignment = 0
  28699. BackStyle = 0
  28700. Caption = "Convert to pure XLS"
  28701. TabIndex = 1
  28702. Name = "chkConverttoPureXLS"
  28703. frmSettings.PF.PageXLS
  28704. chkConverttoPureXLS
  28705. checkbox
  28706. checkbox
  28707. AutoSize = .T.
  28708. BackStyle = 0
  28709. Caption = "Default file extension"
  28710. Height = 17
  28711. Left = 40
  28712. Top = 45
  28713. Width = 116
  28714. TabIndex = 15
  28715. Name = "lblExcelExtension"
  28716. frmSettings.PF.PageXLS
  28717. lblExcelExtension
  28718. label
  28719. CPROCEDURE Init
  28720. This.AddItem("XLS")
  28721. This.AddItem("XML")
  28722. ENDPROC
  28723. FontSize = 8
  28724. RowSourceType = 0
  28725. Height = 24
  28726. Left = 277
  28727. Style = 2
  28728. TabIndex = 3
  28729. Top = 45
  28730. Width = 112
  28731. Name = "cmbExcelExtension"
  28732. frmSettings.PF.PageXLS
  28733. cmbExcelExtension
  28734. combobox
  28735. combobox
  28736. AutoSize = .T.
  28737. BackStyle = 0
  28738. Caption = "PDF default font"
  28739. Height = 17
  28740. Left = 12
  28741. Top = 119
  28742. Width = 89
  28743. TabIndex = 16
  28744. Name = "lblDefaultFont"
  28745. label
  28746. label
  28747. label
  28748. lblLanguage
  28749. frmSettings.PF.PageGeneral
  28750. AutoSize = .T.
  28751. BackStyle = 0
  28752. Caption = "Language"
  28753. Height = 17
  28754. Left = 12
  28755. Top = 22
  28756. Width = 58
  28757. TabIndex = 9
  28758. Name = "lblLanguage"
  28759. combobox
  28760. combobox
  28761. cmbDock
  28762. frmSettings.PF.PageGeneral
  28763. nRowSourceType = 0
  28764. Height = 24
  28765. Left = 186
  28766. Style = 2
  28767. TabIndex = 3
  28768. Top = 92
  28769. Width = 241
  28770. Name = "cmbDock"
  28771. FPROCEDURE Init
  28772. This.AddItem("Undocked")     && -1
  28773. This.AddItem("Toolbar on TOP of the window")    && 0
  28774. This.AddItem("Toolbar on LEFT of the window")   && 1
  28775. This.AddItem("Toolbar on RIGHT of the window")  && 2
  28776. This.AddItem("Toolbar on BOTTOM of the window") && 3
  28777. This.AddItem("Use settings from the Resource") && .F.
  28778. * This.ListItemId = 1
  28779.     *!*        
  28780. 1 Undocks the toolbar or form.
  28781.     *!*          0 Positions the toolbar or form at the top of the main Visual FoxPro window.
  28782.     *!*         1 Positions the toolbar or form at the left side of the main Visual FoxPro window.
  28783.     *!*         2 Positions the toolbar or form at the right side of the main Visual FoxPro window.
  28784.     *!*         3 Positions the toolbar or form at the bottom of the main Visual FoxPro window.
  28785.     *!*      4 or .F. Mmeans to keep the current Dock settings from the resource
  28786. ENDPROC
  28787. frmSettings.PF.PagePDF
  28788. lblDefaultFont
  28789. label
  28790. jPROCEDURE Init
  28791. This.AddItem("Helvetica")
  28792. This.AddItem("Courier")
  28793. This.AddItem("Times-Roman")
  28794. ENDPROC
  28795. FontSize = 8
  28796. RowSourceType = 0
  28797. Height = 24
  28798. Left = 163
  28799. Style = 2
  28800. TabIndex = 6
  28801. Top = 116
  28802. Width = 259
  28803. Name = "cmbDefaultFont"
  28804. frmSettings.PF.PagePDF
  28805. cmbDefaultFont
  28806. combobox
  28807. combobox
  28808. frmSettings.PF.PagePDF
  28809. chkPDFasImage
  28810. label
  28811. label
  28812. lblDockPosition
  28813. frmSettings.PF.PageGeneral
  28814. AutoSize = .T.
  28815. BackStyle = 0
  28816. Caption = "Dock position"
  28817. Height = 17
  28818. Left = 12
  28819. Top = 95
  28820. Width = 77
  28821. TabIndex = 10
  28822. Name = "lblDockPosition"
  28823. combobox
  28824. combobox
  28825. cmbTbrVisibility
  28826. frmSettings.PF.PageGeneral
  28827. wRowSourceType = 0
  28828. Height = 24
  28829. Left = 186
  28830. Style = 2
  28831. TabIndex = 2
  28832. Top = 56
  28833. Width = 241
  28834. Name = "cmbTbrVisibility"
  28835. PROCEDURE Init
  28836. This.AddItem("Visible on startup")
  28837. This.AddItem("Invisible")     
  28838. This.AddItem("Show according to Resource")
  28839. * This.ListItemId = 1
  28840. ENDPROC
  28841. Top = 12
  28842. Left = 209
  28843. Height = 17
  28844. Width = 152
  28845. AutoSize = .T.
  28846. Alignment = 0
  28847. BackStyle = 0
  28848. Caption = "Render pages as Image"
  28849. TabIndex = 2
  28850. Name = "chkPDFasImage"
  28851. checkbox
  28852. checkbox
  28853. frmSettings.PF.PagePDF
  28854. txtPDFSymbolList
  28855. textbox
  28856. textbox
  28857. label
  28858. label
  28859. lblToolbarvisibility
  28860. frmSettings.PF.PageGeneral
  28861. AutoSize = .T.
  28862. BackStyle = 0
  28863. Caption = "Toolbar visibility"
  28864. Height = 17
  28865. Left = 12
  28866. Top = 60
  28867. Width = 89
  28868. TabIndex = 11
  28869. Name = "lblToolbarvisibility"
  28870. combobox
  28871. combobox
  28872. cmbCanvasCnt
  28873. frmSettings.PF.PageGeneral
  28874. ColumnWidths = "250"
  28875. RowSourceType = 0
  28876. Height = 24
  28877. Left = 186
  28878. Style = 2
  28879. TabIndex = 4
  28880. Top = 128
  28881. Width = 136
  28882. Name = "cmbCanvasCnt"
  28883. PROCEDURE ProgrammaticChange
  28884. IF This.Value = 4
  28885.     This.Value = "3"
  28886. ENDIF  
  28887. ENDPROC
  28888. PROCEDURE Init
  28889. WITH This
  28890.     .ColumnCount = 2
  28891.     .BoundColumn = 2
  28892.     .ColumnWidths = "80,0"
  28893.     .ColumnLines = .F. 
  28894.     .AddItem("1 Page")
  28895.     .List[.NewIndex, 2] = '1'
  28896.     .AddItem("2 Pages")
  28897.     .List[.NewIndex, 2] = '2'
  28898.     .AddItem("4 Pages")
  28899.     .List[.NewIndex, 2] = '3'
  28900. ENDWITH 
  28901. * This.ListItemId = 1
  28902. ENDPROC
  28903. vFontSize = 8
  28904. Format = "K"
  28905. Height = 21
  28906. Left = 163
  28907. TabIndex = 7
  28908. Top = 144
  28909. Width = 259
  28910. Name = "txtPDFSymbolList"
  28911. AutoSize = .F.
  28912. WordWrap = .T.
  28913. BackStyle = 0
  28914. Caption = "Symbol or Bar codes fonts"
  28915. Height = 47
  28916. Left = 12
  28917. Top = 145
  28918. Width = 144
  28919. TabIndex = 19
  28920. Name = "lblSymbol"
  28921. frmSettings.PF.PagePDF
  28922.     lblSymbol
  28923. label
  28924. label
  28925. pFontSize = 8
  28926. Format = "K"
  28927. Height = 21
  28928. Left = 163
  28929. TabIndex = 5
  28930. Top = 90
  28931. Width = 259
  28932. Name = "txtPDFTitle"
  28933. frmSettings.PF.PagePDF
  28934. txtPDFTitle
  28935. textbox
  28936. textbox
  28937. frmSettings.PF.PagePDF
  28938. label
  28939. label
  28940. label
  28941. lblCanvasCnt
  28942. frmSettings.PF.PageGeneral
  28943. AutoSize = .T.
  28944. BackStyle = 0
  28945. Caption = "Canvas count"
  28946. Height = 17
  28947. Left = 12
  28948. Top = 132
  28949. Width = 77
  28950. TabIndex = 12
  28951. Name = "lblCanvasCnt"
  28952. combobox
  28953. combobox
  28954. cmbZoom
  28955. frmSettings.PF.PageGeneral
  28956. oRowSourceType = 0
  28957. Height = 24
  28958. Left = 186
  28959. Style = 2
  28960. TabIndex = 5
  28961. Top = 164
  28962. Width = 136
  28963. Name = "cmbZoom"
  28964. PROCEDURE Init
  28965. This.AddItem("10%")
  28966. This.AddItem("25%")
  28967. This.AddItem("50%")
  28968. This.AddItem("75%")
  28969. This.AddItem("100%")
  28970. This.AddItem("150%")
  28971. This.AddItem("200%")
  28972. This.AddItem("300%")
  28973. This.AddItem("500%")
  28974. This.AddItem("Whole Page")
  28975. This.AddItem("Page Width")
  28976. * This.ListItemId = 1
  28977. * nZoomLevel = 5 && initial zoom level of the preview window. Possible values are:
  28978.     && 1-10%, 2-25%, 3-50%, 4-75%, 5-100% default, 6-150% ;
  28979.     && 7-200%, 8-300%, 9-500%, 10-whole page
  28980. ENDPROC
  28981. AutoSize = .T.
  28982. BackStyle = 0
  28983. Caption = "PDF Title"
  28984. Height = 17
  28985. Left = 12
  28986. Top = 92
  28987. Width = 52
  28988. TabIndex = 18
  28989. Name = "lblPDFtitle"
  28990. lblPDFtitle
  28991. label
  28992. qFontSize = 8
  28993. Format = "K"
  28994. Height = 21
  28995. Left = 163
  28996. TabIndex = 4
  28997. Top = 64
  28998. Width = 259
  28999. Name = "txtPDFAuthor"
  29000. frmSettings.PF.PagePDF
  29001. txtPDFAuthor
  29002. textbox
  29003. textbox
  29004. frmSettings.PF.PagePDF
  29005. lblPDFauthor
  29006. label
  29007. label
  29008. label
  29009. lblZoom
  29010. frmSettings.PF.PageGeneral
  29011. AutoSize = .T.
  29012. BackStyle = 0
  29013. Caption = "Zoom level"
  29014. Height = 17
  29015. Left = 12
  29016. Top = 168
  29017. Width = 62
  29018. TabIndex = 13
  29019. Name = "lblZoom"
  29020. combobox
  29021. combobox
  29022. cmbWndState
  29023. frmSettings.PF.PageGeneral
  29024. sRowSourceType = 0
  29025. Height = 24
  29026. Left = 186
  29027. Style = 2
  29028. TabIndex = 6
  29029. Top = 200
  29030. Width = 136
  29031. Name = "cmbWndState"
  29032. PROCEDURE Init
  29033. This.AddItem("Normal")
  29034. This.AddItem("Minimized")
  29035. This.AddItem("Maximized")
  29036. * This.ListItemId = 1
  29037. * nWindowState
  29038. *    0 = Normal
  29039. *    1 = Minimized
  29040. *    2 = Maximized
  29041. ENDPROC
  29042. AutoSize = .T.
  29043. BackStyle = 0
  29044. Caption = "PDF Author"
  29045. Height = 17
  29046. Left = 12
  29047. Top = 65
  29048. Width = 64
  29049. TabIndex = 17
  29050. Name = "lblPDFauthor"
  29051. label
  29052. frmSettings.PF.PagePDF
  29053. txtUserPwd
  29054. textbox
  29055. textbox
  29056. frmSettings.PF.PagePDF
  29057. label
  29058. label
  29059. lblWndState
  29060. frmSettings.PF.PageGeneral
  29061. AutoSize = .T.
  29062. BackStyle = 0
  29063. Caption = "Window State"
  29064. Height = 17
  29065. Left = 12
  29066. Top = 203
  29067. Width = 77
  29068. TabIndex = 14
  29069. Name = "lblWndState"
  29070. checkbox
  29071. checkbox
  29072. chkQuiet
  29073. frmSettings.PF.PageGeneral
  29074. Top = 274
  29075. Left = 186
  29076. Height = 17
  29077. Width = 47
  29078. AutoSize = .T.
  29079. Alignment = 0
  29080. BackStyle = 0
  29081. Caption = "Quiet"
  29082. TabIndex = 7
  29083. Name = "chkQuiet"
  29084. combobox
  29085. combobox
  29086. cmbProgress
  29087. frmSettings.PF.PageGeneral
  29088. sRowSourceType = 0
  29089. Height = 24
  29090. Left = 186
  29091. Style = 2
  29092. TabIndex = 8
  29093. Top = 297
  29094. Width = 241
  29095. Name = "cmbProgress"
  29096. |PROCEDURE Init
  29097. WITH This
  29098.     .AddItem("Default thermometer")
  29099.     .AddItem("Windows compatible thermometer")
  29100. ENDWITH
  29101. ENDPROC
  29102. FontSize = 8
  29103. Format = "K"
  29104. Height = 21
  29105. Left = 213
  29106. TabIndex = 10
  29107. Top = 245
  29108. Width = 203
  29109. PasswordChar = "*"
  29110. Name = "txtUserPwd"
  29111. AutoSize = .T.
  29112. BackStyle = 0
  29113. Caption = "User password"
  29114. Height = 17
  29115. Left = 64
  29116. Top = 246
  29117. Width = 87
  29118. TabIndex = 21
  29119. Name = "lblUserPwd"
  29120. label
  29121. label
  29122. lblProgress
  29123. frmSettings.PF.PageGeneral
  29124. AutoSize = .T.
  29125. BackStyle = 0
  29126. Caption = "Progress Thermometer"
  29127. Height = 17
  29128. Left = 11
  29129. Top = 275
  29130. Width = 131
  29131. TabIndex = 15
  29132. Name = "lblProgress"
  29133. checkbox
  29134. checkbox
  29135. chkSavePDF
  29136. frmSettings.PF.PageOutput
  29137. Top = 67
  29138. Left = 25
  29139. Height = 17
  29140. Width = 89
  29141. AutoSize = .T.
  29142. Alignment = 0
  29143. BackStyle = 0
  29144. Caption = "Save as PDF"
  29145. TabIndex = 2
  29146. Name = "chkSavePDF"
  29147. checkbox
  29148. checkbox
  29149. chkSaveRTF
  29150. frmSettings.PF.PageOutput
  29151. Top = 99
  29152. Left = 25
  29153. Height = 17
  29154. Width = 88
  29155. AutoSize = .T.
  29156. Alignment = 0
  29157. BackStyle = 0
  29158. Caption = "Save as RTF"
  29159. TabIndex = 3
  29160. Name = "chkSaveRTF"
  29161. checkbox
  29162. checkbox
  29163. chkSaveHTML
  29164. frmSettings.PF.PageOutput
  29165. Top = 131
  29166. Left = 25
  29167. Height = 17
  29168. Width = 97
  29169. AutoSize = .T.
  29170. Alignment = 0
  29171. BackStyle = 0
  29172. Caption = "Save as HTML"
  29173. TabIndex = 4
  29174. Name = "chkSaveHTML"
  29175. checkbox
  29176. checkbox
  29177. chkSaveXLS
  29178. frmSettings.PF.PageOutput
  29179. Top = 195
  29180. Left = 25
  29181. Height = 17
  29182. Width = 119
  29183. AutoSize = .T.
  29184. Alignment = 0
  29185. BackStyle = 0
  29186. Caption = "Save as XLS / XML"
  29187. TabIndex = 5
  29188. Name = "chkSaveXLS"
  29189. checkbox
  29190. checkbox
  29191. chkSaveImg
  29192. frmSettings.PF.PageOutput
  29193. Top = 35
  29194. Left = 25
  29195. Height = 17
  29196. Width = 100
  29197. AutoSize = .T.
  29198. Alignment = 0
  29199. BackStyle = 0
  29200. Caption = "Save as Image"
  29201. TabIndex = 1
  29202. Name = "chkSaveImg"
  29203. optiongroup
  29204. optiongroup
  29205. optXLSType
  29206. frmSettings.PF.PageOutput
  29207. ButtonCount = 2
  29208. BackStyle = 0
  29209. Value = 1
  29210. Enabled = .F.
  29211. Height = 46
  29212. Left = 219
  29213. Top = 194
  29214. Width = 120
  29215. TabIndex = 11
  29216. Name = "optXLSType"
  29217. Option1.BackStyle = 0
  29218. Option1.Caption = "XLS Listener"
  29219. Option1.Value = 1
  29220. Option1.Height = 17
  29221. Option1.Left = 5
  29222. Option1.Top = 5
  29223. Option1.Width = 88
  29224. Option1.AutoSize = .T.
  29225. Option1.Name = "Option1"
  29226. Option2.BackStyle = 0
  29227. Option2.Caption = "Plain XLS"
  29228. Option2.Height = 17
  29229. Option2.Left = 5
  29230. Option2.Top = 24
  29231. Option2.Width = 71
  29232. Option2.AutoSize = .T.
  29233. Option2.Name = "Option2"
  29234. .PROCEDURE Init
  29235. This.Visible = .F. 
  29236. ENDPROC
  29237. lblUserPwd
  29238. label
  29239. label
  29240. FontSize = 8
  29241. Format = "K"
  29242. Height = 21
  29243. Left = 213
  29244. TabIndex = 9
  29245. Top = 219
  29246. Width = 203
  29247. PasswordChar = "*"
  29248. Name = "txtMasterPwd"
  29249. txtMasterPwd
  29250. label
  29251. label
  29252. lblOutputPath
  29253. frmSettings.PF.PageOutput
  29254. AutoSize = .F.
  29255. WordWrap = .T.
  29256. BackStyle = 0
  29257. Caption = "Output Path"
  29258. Height = 42
  29259. Left = 25
  29260. Top = 259
  29261. Width = 107
  29262. TabIndex = 7
  29263. Name = "lblOutputPath"
  29264. textbox
  29265. textbox
  29266. txtOutputPath
  29267. frmSettings.PF.PageOutput
  29268. sFontSize = 8
  29269. Format = "K"
  29270. Height = 23
  29271. Left = 159
  29272. TabIndex = 9
  29273. Top = 261
  29274. Width = 264
  29275. Name = "txtOutputPath"
  29276. checkbox
  29277. checkbox
  29278. chkSaveTXT
  29279. frmSettings.PF.PageOutput
  29280. Top = 227
  29281. Left = 25
  29282. Height = 17
  29283. Width = 149
  29284. AutoSize = .T.
  29285. Alignment = 0
  29286. BackStyle = 0
  29287. Caption = "Save as TXT / CSV / XL5"
  29288. TabIndex = 6
  29289. Name = "chkSaveTXT"
  29290. commandbutton
  29291. commandbutton
  29292. cmdPath
  29293. frmSettings.PF.PageOutput
  29294. aTop = 260
  29295. Left = 133
  29296. Height = 24
  29297. Width = 24
  29298. Caption = "..."
  29299. TabIndex = 8
  29300. Name = "cmdPath"
  29301. PPROCEDURE Click
  29302. LOCAL lcDir, lcNewDir
  29303. lcDir = This.Parent.TxtOutputPath.Value
  29304. * This.Parent.TxtOutputPath.Value = GETDIR(lcDir, _goFP.GetLoc("SAVEPATH"), _goFP.GetLoc("SAVEPATH"), 64)
  29305. lcNewDir = GETDIR(lcDir, "", _goFP.GetLoc("SAVEPATH"), 64)
  29306. IF NOT EMPTY(lcNewDir)
  29307.     This.Parent.TxtOutputPath.Value = lcNewDir
  29308. ENDIF 
  29309. ENDPROC
  29310. frmSettings.PF.PagePDF
  29311. textbox
  29312. textbox
  29313. AutoSize = .T.
  29314. BackStyle = 0
  29315. Caption = "Master password"
  29316. Height = 17
  29317. Left = 63
  29318. Top = 221
  29319. Width = 97
  29320. TabIndex = 20
  29321. Name = "lblMasterPwd"
  29322. frmSettings.PF.PagePDF
  29323. lblMasterPwd
  29324. label
  29325. label
  29326. frmSettings.PF.PagePDF
  29327. chkCanAddNotes
  29328. checkbox
  29329. checkbox
  29330. checkbox
  29331. checkbox
  29332. chkOpenViewer
  29333. frmSettings.PF.PageOutput
  29334. Top = 299
  29335. Left = 25
  29336. Height = 17
  29337. Width = 126
  29338. AutoSize = .T.
  29339. Alignment = 0
  29340. BackStyle = 0
  29341. Caption = "Open default viewer"
  29342. TabIndex = 10
  29343. Name = "chkOpenViewer"
  29344. checkbox
  29345. checkbox
  29346. chkSaveMHT
  29347. frmSettings.PF.PageOutput
  29348. Top = 163
  29349. Left = 25
  29350. Height = 17
  29351. Width = 106
  29352. AutoSize = .T.
  29353. Alignment = 0
  29354. BackStyle = 0
  29355. Caption = "Save as MHTML"
  29356. TabIndex = 4
  29357. Name = "chkSaveMHT"
  29358. checkbox
  29359. checkbox
  29360. chkPrintPref
  29361. frmSettings.PF.PageControls
  29362. Top = 55
  29363. Left = 20
  29364. Height = 17
  29365. Width = 160
  29366. AutoSize = .T.
  29367. Alignment = 0
  29368. BackStyle = 0
  29369. Caption = "Printer preferences button"
  29370. TabIndex = 3
  29371. Name = "chkPrintPref"
  29372. checkbox
  29373. checkbox
  29374.     chkCopies
  29375. frmSettings.PF.PageControls
  29376. Top = 85
  29377. Left = 20
  29378. Height = 17
  29379. Width = 98
  29380. AutoSize = .T.
  29381. Alignment = 0
  29382. BackStyle = 0
  29383. Caption = "Copies control"
  29384. TabIndex = 5
  29385. Name = "chkCopies"
  29386. checkbox
  29387. checkbox
  29388. chkSaveToFile
  29389. frmSettings.PF.PageControls
  29390. Top = 115
  29391. Left = 20
  29392. Height = 17
  29393. Width = 114
  29394. AutoSize = .T.
  29395. Alignment = 0
  29396. BackStyle = 0
  29397. Caption = "Save to file button"
  29398. TabIndex = 6
  29399. Name = "chkSaveToFile"
  29400. checkbox
  29401. checkbox
  29402. chkAvailPrinters
  29403. frmSettings.PF.PageControls
  29404. Top = 145
  29405. Left = 20
  29406. Height = 17
  29407. Width = 131
  29408. AutoSize = .T.
  29409. Alignment = 0
  29410. BackStyle = 0
  29411. Caption = "Available printers list"
  29412. TabIndex = 7
  29413. Name = "chkAvailPrinters"
  29414. checkbox
  29415. checkbox
  29416. chkSettings
  29417. frmSettings.PF.PageControls
  29418. Top = 265
  29419. Left = 20
  29420. Height = 17
  29421. Width = 100
  29422. AutoSize = .T.
  29423. Alignment = 0
  29424. BackStyle = 0
  29425. Caption = "Settings button"
  29426. TabIndex = 15
  29427. Visible = .F.
  29428. Name = "chkSettings"
  29429. checkbox
  29430. checkbox
  29431. chkSendEmail
  29432. frmSettings.PF.PageControls
  29433. Top = 175
  29434. Left = 20
  29435. Height = 17
  29436. Width = 132
  29437. AutoSize = .T.
  29438. Alignment = 0
  29439. BackStyle = 0
  29440. Caption = "Send to Email button"
  29441. TabIndex = 8
  29442. Name = "chkSendEmail"
  29443. checkbox
  29444. checkbox
  29445. chkMiniatures
  29446. frmSettings.PF.PageControls
  29447. Top = 205
  29448. Left = 20
  29449. Height = 17
  29450. Width = 112
  29451. AutoSize = .T.
  29452. Alignment = 0
  29453. BackStyle = 0
  29454. Caption = "Miniatures button"
  29455. TabIndex = 9
  29456. Name = "chkMiniatures"
  29457. combobox
  29458. combobox
  29459. cmbBtnSize
  29460. frmSettings.PF.PageControls
  29461. qRowSourceType = 0
  29462. Height = 24
  29463. Left = 251
  29464. Style = 2
  29465. TabIndex = 2
  29466. Top = 17
  29467. Width = 175
  29468. Name = "cmbBtnSize"
  29469. qPROCEDURE Init
  29470. WITH This
  29471.     .AddItem("Small (16x16 pixels)")
  29472.     .AddItem("Big (32x32 pixels)")
  29473. ENDWITH
  29474. ENDPROC
  29475. Top = 344
  29476. Left = 64
  29477. Height = 17
  29478. Width = 105
  29479. AutoSize = .T.
  29480. Alignment = 0
  29481. BackStyle = 0
  29482. Caption = "Allow add notes"
  29483. TabIndex = 14
  29484. Name = "chkCanAddNotes"
  29485. frmSettings.PF.PagePDF
  29486. chkCanCopy
  29487. checkbox
  29488. checkbox
  29489. frmSettings.PF.PagePDF
  29490. label
  29491. label
  29492. lblBtnSize
  29493. frmSettings.PF.PageControls
  29494. AutoSize = .T.
  29495. BackStyle = 0
  29496. Caption = "Size of buttons"
  29497. Height = 17
  29498. Left = 20
  29499. Top = 22
  29500. Width = 82
  29501. TabIndex = 1
  29502. Name = "lblBtnSize"
  29503. checkbox
  29504. checkbox
  29505.     chkSearch
  29506. frmSettings.PF.PageControls
  29507. Top = 235
  29508. Left = 20
  29509. Height = 17
  29510. Width = 94
  29511. AutoSize = .T.
  29512. Alignment = 0
  29513. BackStyle = 0
  29514. Caption = "Search button"
  29515. TabIndex = 12
  29516. Visible = .T.
  29517. Name = "chkSearch"
  29518. combobox
  29519. combobox
  29520. cmbPrPrefType
  29521. frmSettings.PF.PageControls
  29522. tRowSourceType = 0
  29523. Height = 24
  29524. Left = 251
  29525. Style = 2
  29526. TabIndex = 4
  29527. Top = 52
  29528. Width = 175
  29529. Name = "cmbPrPrefType"
  29530. PROCEDURE Init
  29531. WITH This
  29532.     .AddItem("Global printer prompt options")
  29533.     .AddItem("Setup property sheet for current printer")
  29534. ENDWITH
  29535. ENDPROC
  29536. Top = 320
  29537. Left = 64
  29538. Height = 17
  29539. Width = 75
  29540. AutoSize = .T.
  29541. Alignment = 0
  29542. BackStyle = 0
  29543. Caption = "Allow copy"
  29544. TabIndex = 13
  29545. Name = "chkCanCopy"
  29546. chkCanEdit
  29547. checkbox
  29548. checkbox
  29549. frmSettings.PF.PagePDF
  29550. chkCanPrint
  29551. checkbox
  29552. checkbox
  29553. cntEncryptPDF
  29554. spinner
  29555. spinner
  29556. spnSearchPages
  29557. frmSettings.PF.PageControls
  29558. Height = 24
  29559. Increment =   1.00
  29560. InputMask = "999999"
  29561. KeyboardHighValue = 999999
  29562. KeyboardLowValue = -1
  29563. Left = 369
  29564. SpinnerHighValue = 999999.00
  29565. SpinnerLowValue =  -1.00
  29566. TabIndex = 14
  29567. Top = 235
  29568. Width = 57
  29569. Format = "999999"
  29570. Value = -1
  29571. Name = "spnSearchPages"
  29572. label
  29573. label
  29574. lblSearchPages
  29575. frmSettings.PF.PageControls
  29576. AutoSize = .F.
  29577. WordWrap = .T.
  29578. BackStyle = 0
  29579. Caption = "Max. Search pages"
  29580. Height = 38
  29581. Left = 202
  29582. Top = 236
  29583. Width = 149
  29584. TabIndex = 13
  29585. Name = "lblSearchPages"
  29586. label
  29587. label
  29588. lblMiniatures
  29589. frmSettings.PF.PageControls
  29590. AutoSize = .F.
  29591. BackStyle = 0
  29592. Caption = "Miniatures per page"
  29593. Height = 31
  29594. Left = 202
  29595. Top = 207
  29596. Width = 157
  29597. TabIndex = 10
  29598. Name = "lblMiniatures"
  29599. spinner
  29600. spinner
  29601. spnMiniatures
  29602. frmSettings.PF.PageControls
  29603. Height = 24
  29604. KeyboardHighValue = 64
  29605. KeyboardLowValue = 1
  29606. Left = 369
  29607. SpinnerHighValue =  64.00
  29608. SpinnerLowValue =   1.00
  29609. TabIndex = 11
  29610. Top = 202
  29611. Width = 57
  29612. Value = 0
  29613. Name = "spnMiniatures"
  29614.     container
  29615.     container
  29616. cntEncryptPDF
  29617. frmSettings.PF.PageEmail
  29618. rTop = 149
  29619. Left = 28
  29620. Width = 397
  29621. Height = 191
  29622. Enabled = .F.
  29623. TabIndex = 17
  29624. Style = 3
  29625. Name = "cntEncryptPDF"
  29626. label
  29627. label
  29628. lblSMTPserver
  29629. frmSettings.PF.PageEmail
  29630. AutoSize = .T.
  29631. BackStyle = 0
  29632. Caption = "SMTP server"
  29633. Height = 17
  29634. Left = 38
  29635. Top = 159
  29636. Width = 71
  29637. TabIndex = 13
  29638. Name = "lblSMTPserver"
  29639. label
  29640. label
  29641. lblLogin
  29642. frmSettings.PF.PageEmail
  29643. AutoSize = .T.
  29644. BackStyle = 0
  29645. Caption = "Login"
  29646. Height = 17
  29647. Left = 38
  29648. Top = 189
  29649. Width = 33
  29650. TabIndex = 14
  29651. Name = "lblLogin"
  29652. label
  29653. label
  29654. lblPassword
  29655. frmSettings.PF.PageEmail
  29656. AutoSize = .T.
  29657. BackStyle = 0
  29658. Caption = "Password"
  29659. Height = 17
  29660. Left = 38
  29661. Top = 221
  29662. Width = 58
  29663. TabIndex = 15
  29664. Name = "lblPassword"
  29665. label
  29666. label
  29667. lblCDOsettings
  29668. frmSettings.PF.PageEmail
  29669. AutoSize = .T.
  29670. BackStyle = 0
  29671. Caption = "CDO email settings"
  29672. Height = 17
  29673. Left = 11
  29674. Top = 125
  29675. Width = 110
  29676. TabIndex = 16
  29677. Name = "lblCDOsettings"
  29678. textbox
  29679. textbox
  29680. txtSMTP
  29681. frmSettings.PF.PageEmail
  29682. _Format = "K"
  29683. Height = 23
  29684. Left = 165
  29685. TabIndex = 4
  29686. Top = 159
  29687. Width = 254
  29688. Name = "txtSMTP"
  29689. textbox
  29690. textbox
  29691. txtLogin
  29692. frmSettings.PF.PageEmail
  29693. `Format = "K"
  29694. Height = 23
  29695. Left = 165
  29696. TabIndex = 5
  29697. Top = 189
  29698. Width = 254
  29699. Name = "txtLogin"
  29700. textbox
  29701. textbox
  29702. txtPassword
  29703. frmSettings.PF.PageEmail
  29704. wFormat = "K"
  29705. Height = 23
  29706. Left = 165
  29707. TabIndex = 6
  29708. Top = 219
  29709. Width = 254
  29710. PasswordChar = "*"
  29711. Name = "txtPassword"
  29712. label
  29713. label
  29714. lblSMTPport
  29715. frmSettings.PF.PageEmail
  29716. AutoSize = .T.
  29717. BackStyle = 0
  29718. Caption = "SMTP port"
  29719. Height = 17
  29720. Left = 38
  29721. Top = 249
  29722. Width = 58
  29723. TabIndex = 18
  29724. Name = "lblSMTPport"
  29725. textbox
  29726. textbox
  29727. txtPort
  29728. frmSettings.PF.PageEmail
  29729. ^Format = "K"
  29730. Height = 23
  29731. Left = 165
  29732. TabIndex = 7
  29733. Top = 248
  29734. Width = 44
  29735. Name = "txtPort"
  29736. checkbox
  29737. checkbox
  29738.     chkUseSSL
  29739. frmSettings.PF.PageEmail
  29740. Top = 249
  29741. Left = 216
  29742. Height = 17
  29743. Width = 67
  29744. AutoSize = .T.
  29745. Alignment = 0
  29746. BackStyle = 0
  29747. Caption = "Use SSL"
  29748. TabIndex = 8
  29749. Name = "chkUseSSL"
  29750. combobox
  29751. combobox
  29752. cmbEmailType
  29753. frmSettings.PF.PageEmail
  29754. sRowSourceType = 0
  29755. Height = 24
  29756. Left = 164
  29757. Style = 2
  29758. TabIndex = 1
  29759. Top = 10
  29760. Width = 147
  29761. Name = "cmbEmailType"
  29762. CPROCEDURE Init
  29763. This.AddItem("MAPI")
  29764. This.AddItem("CDO - HTML")
  29765. This.AddItem("CDO - TXT")
  29766. This.AddItem("Custom procedure")
  29767. This.AddItem("MAPI Alternative")
  29768. * This.AddItem("MAPI Alternative 2")
  29769. * This.ListItemId = 1
  29770. * nEmailMode && 1 = MAPI, 2 = CDOSYS HTML, 3 = CDOSYS plain text, 4 = Custom procedure
  29771. ENDPROC
  29772. Top = 296
  29773. Left = 64
  29774. Height = 17
  29775. Width = 70
  29776. AutoSize = .T.
  29777. Alignment = 0
  29778. BackStyle = 0
  29779. Caption = "Allow edit"
  29780. TabIndex = 12
  29781. Name = "chkCanEdit"
  29782. Top = 272
  29783. Left = 64
  29784. Height = 17
  29785. Width = 91
  29786. AutoSize = .T.
  29787. Alignment = 0
  29788. BackStyle = 0
  29789. Caption = "Allow printing"
  29790. TabIndex = 11
  29791. Name = "chkCanPrint"
  29792. label
  29793. label
  29794. lblEmailMode
  29795. frmSettings.PF.PageEmail
  29796. AutoSize = .T.
  29797. BackStyle = 0
  29798. Caption = "Email mode"
  29799. Height = 17
  29800. Left = 13
  29801. Top = 10
  29802. Width = 69
  29803. TabIndex = 19
  29804. Name = "lblEmailMode"
  29805. label
  29806. label
  29807.     lblSender
  29808. frmSettings.PF.PageEmail
  29809. AutoSize = .T.
  29810. BackStyle = 0
  29811. Caption = "Sender"
  29812. Height = 17
  29813. Left = 38
  29814. Top = 278
  29815. Width = 42
  29816. TabIndex = 20
  29817. Name = "lblSender"
  29818. textbox
  29819. textbox
  29820. txtFrom
  29821. frmSettings.PF.PageEmail
  29822. _Format = "K"
  29823. Height = 23
  29824. Left = 165
  29825. TabIndex = 9
  29826. Top = 277
  29827. Width = 254
  29828. Name = "txtFrom"
  29829. combobox
  29830. combobox
  29831.     cmbAttach
  29832. frmSettings.PF.PageEmail
  29833. pRowSourceType = 0
  29834. Height = 24
  29835. Left = 164
  29836. Style = 2
  29837. TabIndex = 2
  29838. Top = 44
  29839. Width = 147
  29840. Name = "cmbAttach"
  29841. PROCEDURE Init
  29842. This.AddItem("PDF")
  29843. This.AddItem("RTF")     
  29844. This.AddItem("XLS")
  29845. This.AddItem("XML")
  29846. This.AddItem("HTML")
  29847. This.AddItem("TIF")
  29848. ENDPROC
  29849. rTop = 211
  29850. Left = 51
  29851. Width = 372
  29852. Height = 157
  29853. Enabled = .F.
  29854. TabIndex = 22
  29855. Style = 3
  29856. Name = "cntEncryptPDF"
  29857. frmSettings.PF.PagePDF
  29858.     container
  29859.     container
  29860. frmSettings.PF.PagePDF
  29861. lblPageMode
  29862. label
  29863. label
  29864. frmSettings.PF.PagePDF
  29865. cmbPageMode
  29866. combobox
  29867. label
  29868. label
  29869. lblAttachmentType
  29870. frmSettings.PF.PageEmail
  29871. AutoSize = .T.
  29872. BackStyle = 0
  29873. Caption = "Attachment type"
  29874. Height = 17
  29875. Left = 13
  29876. Top = 44
  29877. Width = 88
  29878. TabIndex = 21
  29879. Name = "lblAttachmentType"
  29880. checkbox
  29881. checkbox
  29882. chkAutoEmail
  29883. frmSettings.PF.PageEmail
  29884. Top = 77
  29885. Left = 12
  29886. Height = 17
  29887. Width = 195
  29888. AutoSize = .T.
  29889. Alignment = 0
  29890. BackStyle = 0
  29891. Caption = "Automatically generate email file"
  29892. TabIndex = 3
  29893. Name = "chkAutoEmail"
  29894. label
  29895. label
  29896. lblOutputPath
  29897. frmSettings.PF.PageEmail
  29898. AutoSize = .T.
  29899. BackStyle = 0
  29900. Caption = "HTML"
  29901. Height = 17
  29902. Left = 38
  29903. Top = 308
  29904. Width = 34
  29905. TabIndex = 12
  29906. Name = "lblOutputPath"
  29907. textbox
  29908. textbox
  29909. txtHTMLfile
  29910. frmSettings.PF.PageEmail
  29911. rFontSize = 8
  29912. Format = "K"
  29913. Height = 23
  29914. Left = 165
  29915. TabIndex = 11
  29916. Top = 306
  29917. Width = 254
  29918. Name = "txtHTMLfile"
  29919. commandbutton
  29920. commandbutton
  29921. cmdPath
  29922. frmSettings.PF.PageEmail
  29923. bTop = 305
  29924. Left = 134
  29925. Height = 24
  29926. Width = 24
  29927. Caption = "..."
  29928. TabIndex = 10
  29929. Name = "cmdPath"
  29930. PROCEDURE Click
  29931. LOCAL lcDir, lcNewDir
  29932. lcDir = This.Parent.TxtHTMLfile.Value
  29933. lcNewDir = GETFILE("HTM")
  29934. IF NOT EMPTY(lcNewDir)
  29935.     This.Parent.TxtHTMLfile.Value = lcNewDir
  29936. ENDIF
  29937. ENDPROC
  29938. AutoSize = .T.
  29939. BackStyle = 0
  29940. Caption = "Page mode"
  29941. Height = 17
  29942. Left = 12
  29943. Top = 38
  29944. Width = 66
  29945. TabIndex = 15
  29946. Name = "lblPageMode"
  29947. FontSize = 8
  29948. RowSourceType = 0
  29949. Height = 24
  29950. Left = 163
  29951. Style = 2
  29952. TabIndex = 3
  29953. Top = 35
  29954. Width = 259
  29955. Name = "cmbPageMode"
  29956. combobox
  29957. frmSettings.PF.PagePDF
  29958. checkbox
  29959. checkbox
  29960. chkEmbedFonts
  29961. frmSettings.PF.PagePDF
  29962. Top = 12
  29963. Left = 12
  29964. Height = 17
  29965. Width = 88
  29966. AutoSize = .T.
  29967. Alignment = 0
  29968. BackStyle = 0
  29969. Caption = "Embed fonts"
  29970. TabIndex = 1
  29971. Name = "chkEmbedFonts"
  29972. checkbox
  29973. checkbox
  29974. chkEncrypt
  29975. Top = 191
  29976. Left = 12
  29977. Height = 17
  29978. Width = 116
  29979. AutoSize = .T.
  29980. Alignment = 0
  29981. BackStyle = 0
  29982. Caption = "Encrypt document"
  29983. TabIndex = 8
  29984. Name = "chkEncrypt"
  29985. >PROCEDURE InteractiveChange
  29986. This.Parent.Activate()
  29987. ENDPROC
  29988. 9PROCEDURE Init
  29989. This.AddItem("Normal view")
  29990. * This.AddItem("Outlines pane")
  29991. This.AddItem("Thumbnails pane")
  29992. && 0 = Normal view, 1 = Show the outlines pane, 2 = Show the thumbnails pane
  29993. * This.ListItemId = 1
  29994. * nEmailMode && 1 = MAPI, 2 = CDOSYS HTML, 3 = CDOSYS plain text, 4 = Custom procedure
  29995. ENDPROC
  29996. CHECKBOX
  29997. Could not locate the property '
  29998. ' in the configuration file.
  29999. The settings file will be updated.
  30000. Updating settings table
  30001. fp_Settings&
  30002. FP_SettingsW
  30003. FP_Settings
  30004. FP_SettingsW
  30005. FP_SETTINGS
  30006. FoxyPreviewer_Settings.dbf
  30007. _goFP.
  30008. Value
  30009. FP_Settings.
  30010. Value
  30011. nAdjust
  30012. nAdjust
  30013. cProperty
  30014. nRecCO
  30015. Related property: '
  30016. TOOBJECT
  30017. TCPROPERTY
  30018. TNADJUST
  30019. LCPROP
  30020. LCTYPE
  30021. LUVALUE
  30022. FP_SETTINGS
  30023. PROPERTY
  30024. LCFILE0
  30025. LCUSERFILE
  30026. _GOFP
  30027. _SETTINGSFILE
  30028. ADDPROPERTY
  30029. VALUE
  30030. NADJUST    
  30031. STARTMODE
  30032. TOOLTIPTEXT
  30033. COMBOBOX
  30034. nAdjust
  30035. cValue
  30036. FP_Settings
  30037. FP_Settings
  30038. FP_Settings
  30039. Missing: 
  30040. FP_Settings
  30041. cLanguage
  30042. FP_Settings
  30043. cSMTPPassword
  30044. LNPG    
  30045. LOCONTROL
  30046. LCPROP
  30047. LCTYPE
  30048. LUVALUE
  30049. THISFORM
  30050. PAGECOUNT
  30051. PAGES
  30052. CONTROLS    
  30053. CPROPERTY
  30054. CVALUE
  30055. VALUE
  30056. FP_SETTINGS
  30057. LVALUE
  30058. PROPERTY
  30059. NVALUE
  30060. NADJUST
  30061. PAGEGENERAL
  30062. LCLANG
  30063. CMBLANGUAGE    
  30064. PAGEEMAIL
  30065. LCPASS
  30066. _GOFP    
  30067. DOENCRYPT
  30068. TXTPASSWORD&
  30069. BADSMTP
  30070. CONTINUE
  30071. BADSETUP
  30072. MASTANDUSR
  30073. CONTINUE
  30074. BADSETUP
  30075. PAGEEMAIL
  30076. CMBEMAILTYPE
  30077. VALUE
  30078. TXTSMTP
  30079. TXTLOGIN
  30080. TXTPASSWORD
  30081. TXTPORT
  30082. TXTFROM
  30083. _GOFP
  30084. GETLOC
  30085. PAGEPDF
  30086. CHKENCRYPT
  30087. TXTMASTERPWD
  30088. TXTUSERPWD
  30089. PAGEGENERAL
  30090. LNINDEX
  30091. THISFORM
  30092. CMBLANGUAGE    
  30093. LISTINDEX    
  30094. CLANGUAGE
  30095. _ALANGUAGES;
  30096. EXCEPTION
  30097.    PV 
  30098. GOTOPG_OK
  30099. CANCEL
  30100. SETUPTITLE
  30101. GENERAL
  30102. ZOOMLEVEL
  30103. CANVASCNT
  30104. DOCKPOSITI
  30105. CUSLANGUAG
  30106. TBARVISIBL
  30107. WNDSTATE
  30108. PROGRESS
  30109. QUIETMODE
  30110. COMBOBOX
  30111. DEFAULT
  30112. WINPGBAR
  30113. COMBOBOX
  30114. VISIBLE
  30115. INVISIBLE
  30116. USERESOURC
  30117. COMBOBOX
  30118. UNDOCKED
  30119. TBONTOP
  30120. TBONLEFT
  30121. TBONRIGHT
  30122. TBONBOTTOM
  30123. USERESOURC
  30124. COMBOBOX
  30125. NORMAL
  30126. MINIMIZED
  30127. MAXIMIZED
  30128. COMBOBOX
  30129. ONEPGMENU
  30130. TWOPGMENU
  30131. FOURPGMENU
  30132. COMBOBOX
  30133. CBOZOOMWHO
  30134. CBOZOOMPGW
  30135. CONTROLS
  30136. BUTTONSIZE
  30137. SMALL
  30138. PRGENERAL
  30139. PRCONFIG
  30140. AVAILABLEP
  30141. COPIES
  30142. MENUPROOF
  30143. MINIPERPG
  30144. PRINTINGPR
  30145. SAVEREPORT
  30146. SENDTOEMAI
  30147. Setup
  30148. MAXSEARCH
  30149. OUTPUT
  30150. SAVEASHTML
  30151. SAVEASMHT
  30152. SAVEASIMAG
  30153. SAVEASPDF
  30154. SAVEASRTF
  30155. SAVEASXLS
  30156. SAVEASTXT
  30157. SAVEPATH
  30158. OPENVIEWER
  30159. EMAIL
  30160. ATTACHTYPE
  30161. CDOSETUP
  30162. EMAILMODE
  30163. LOGIN
  30164. PASSWORD
  30165. SENDER
  30166. SMTPPORT
  30167. SMTPSERVER
  30168. AUTOEMAIL
  30169. USESSL
  30170. COMBOBOX
  30171. CUSTOMPROC
  30172. EMBEDFONTS
  30173. PDFASIMAGE
  30174. PAGEMODE
  30175. NORMALVIEW
  30176. THUMBSPANE
  30177. PDFAUTHOR
  30178. PDFTITLE
  30179. SYMBBARCOD
  30180. SYMBBARTIP
  30181. SYMBBARTIP
  30182. PDFFONT
  30183. ENCRYPTDOC
  30184. MASTERPWD
  30185. USERPWD
  30186. CANPRINT
  30187. CANEDIT
  30188. CANCOPY
  30189. CANADDNOTE
  30190. WKSEXT
  30191. XML2XLS
  30192. RPTHEADER
  30193. RPTFOOTER
  30194. HIDEPAGENO
  30195. XLALIGNLEF
  30196. LOEXC
  30197. LCVERSIONTEXT
  30198. LCPREVIEWVERSION
  30199. GETVFPVERSION
  30200. _GOFP
  30201. _PREVIEWVERSION
  30202. LBLVERSION
  30203. CAPTION
  30204. CVERSION
  30205. CMDOK
  30206. GETLOC    
  30207. CMDCANCEL
  30208. PAGEGENERAL
  30209. LBLZOOM
  30210. LBLCANVASCNT
  30211. LBLDOCKPOSITION
  30212. LBLLANGUAGE
  30213. LBLTOOLBARVISIBILITY
  30214. LBLWNDSTATE
  30215. LBLPROGRESS
  30216. CHKQUIET
  30217. CMBPROGRESS
  30218. LISTITEM
  30219. CMBTBRVISIBILITY
  30220. CMBDOCK
  30221. CMBWNDSTATE
  30222. CMBCANVASCNT
  30223. CMBZOOM
  30224. PAGECONTROLS
  30225. LBLBTNSIZE
  30226. CMBBTNSIZE
  30227. CMBPRPREFTYPE
  30228. CHKAVAILPRINTERS    
  30229. CHKCOPIES
  30230. CHKMINIATURES
  30231. LBLMINIATURES
  30232. CHKPRINTPREF
  30233. CHKSAVETOFILE
  30234. CHKSENDEMAIL
  30235. CHKSETTINGS    
  30236. CHKSEARCH
  30237. LBLSEARCHPAGES
  30238. PAGEOUTPUT
  30239. CHKSAVEHTML
  30240. CHKSAVEMHT
  30241. CHKSAVEIMG
  30242. CHKSAVEPDF
  30243. CHKSAVERTF
  30244. CHKSAVEXLS
  30245. CHKSAVETXT
  30246. LBLOUTPUTPATH
  30247. CHKOPENVIEWER    
  30248. PAGEEMAIL
  30249. LBLATTACHMENTTYPE
  30250. LBLCDOSETTINGS
  30251. LBLEMAILMODE
  30252. LBLLOGIN
  30253. LBLPASSWORD    
  30254. LBLSENDER
  30255. LBLSMTPPORT
  30256. LBLSMTPSERVER
  30257. CHKAUTOEMAIL    
  30258. CHKUSESSL
  30259. CMBEMAILTYPE
  30260. PAGEPDF
  30261. CHKEMBEDFONTS
  30262. CHKPDFASIMAGE
  30263. LBLPAGEMODE
  30264. CMBPAGEMODE
  30265. LBLPDFAUTHOR
  30266. LBLPDFTITLE    
  30267. LBLSYMBOL
  30268. TOOLTIPTEXT
  30269. TXTPDFSYMBOLLIST
  30270. LBLDEFAULTFONT
  30271. CHKENCRYPT
  30272. LBLMASTERPWD
  30273. LBLUSERPWD
  30274. CHKCANPRINT
  30275. CHKCANEDIT
  30276. CHKCANCOPY
  30277. CHKCANADDNOTES
  30278. PAGEXLS
  30279. LBLEXCELEXTENSION
  30280. CHKCONVERTTOPUREXLS
  30281. CHKREPEATHEADERS
  30282. CHKREPEATFOOTERS
  30283. CHKHIDEPAGENO
  30284. CHKCELLALIGNLEFT(
  30285. _goFP._oLang.
  30286. TCSTRING
  30287. PageXLS
  30288. PagePDF
  30289. PageEmail
  30290. PageOutput
  30291. PageControls
  30292. PageGeneral
  30293. OFOXYPREVIEWER
  30294. OSETTINGSDLG
  30295. PAGEGENERAL
  30296. ENABLED
  30297. LENABLETABGENERAL
  30298. PAGECONTROLS
  30299. LENABLETABCONTROLS
  30300. PAGEOUTPUT
  30301. LENABLETABOUTPUT    
  30302. PAGEEMAIL
  30303. LENABLETABEMAIL
  30304. PAGEPDF
  30305. LENABLETABPDF
  30306. PAGEXLS
  30307. LENABLETABXLS
  30308. LSHOWTABXLS
  30309. REMOVEOBJECT
  30310. LSHOWTABPDF
  30311. CHKEMBEDFONTS
  30312. LENABLECHKEMBEDFONTS
  30313. CHKPDFASIMAGE
  30314. LENABLECHKPDFASIMAGE
  30315. LSHOWTABEMAIL
  30316. CMBEMAILTYPE
  30317. LENABLECMBEMAILTYPE    
  30318. CMBATTACH
  30319. LENABLECMBATTACHMENTTYPE
  30320. LSHOWTABOUTPUT
  30321. CHKSAVEIMG
  30322. LENABLECHKSAVEASIMAGE
  30323. CHKSAVEPDF
  30324. LENABLECHKSAVEASPDF
  30325. CHKSAVERTF
  30326. LENABLECHKSAVEASRTF
  30327. CHKSAVEHTML
  30328. LENABLECHKSAVEASHTML
  30329. CHKSAVEMHT
  30330. LENABLECHKSAVEASMHT
  30331. CHKSAVEXLS
  30332. LENABLECHKSAVEASXLS
  30333. OPTXLSTYPE
  30334. CHKSAVETXT
  30335. LENABLECHKSAVEASTXT
  30336. VISIBLE
  30337. LCOMPLETEMODE
  30338. LSHOWTABCONTROLS
  30339. CHKPRINTPREF
  30340. LENABLECHKPRINTPREF
  30341. CMBPRPREFTYPE
  30342. LENABLECMBPRINTPREFTYPE    
  30343. CHKCOPIES
  30344. LENABLECHKCOPIES
  30345. CHKSAVETOFILE
  30346. LENABLECHKSAVETOFILE
  30347. CHKAVAILPRINTERS
  30348. LENABLECHKPRINTERS
  30349. CHKSENDEMAIL
  30350. LENABLECHKEMAIL
  30351. CHKMINIATURES
  30352. LENABLECHKMINIATURES
  30353. SPNMINIATURES    
  30354. CHKSEARCH
  30355. LENABLECHKSEARCH
  30356. SPNSEARCHPAGES
  30357. CHKSETTINGS
  30358. LENABLECHKSETTINGS
  30359. LSHOWTABGENERAL
  30360. CMBLANGUAGE
  30361. LSHOWLANGUAGE
  30362. LBLLANGUAGE
  30363. LENABLELANGUAGE
  30364. LOEXCT
  30365. nSelectCW
  30366. nDataSessionC
  30367. Datasessionv
  30368. THISFORM
  30369. ADDPROPERTYS
  30370. FP_SettingsW
  30371. THIS    
  30372. INPREVIEW
  30373. _GOFP
  30374. THISFORM
  30375. NDATASESSION
  30376. NSELECTq
  30377. PreviewHelperC
  30378. FoxyPreviewer.Prg
  30379. EXCEPTION
  30380. FoxyPreviewer_Settings.dbf
  30381. Could not load the settings file.C
  30382. Make sure to delete the file 'FoxyPreviewer_Settings.dbf'
  30383. and run a report again using the previewer to generate the settings file
  30384. Error loading settings
  30385. nShowToolBar
  30386. nDockType
  30387. nCanvasCount
  30388. nZoomLevel
  30389. nWindowState
  30390. lQuietMode
  30391. nThermType
  30392. nButtonSize
  30393. nPrinterPropType
  30394. lShowPrinters
  30395. lShowCopies
  30396. lPrinterPref
  30397. lSaveToFile
  30398. lShowSetup
  30399. lShowMiniatures
  30400. nMaxMiniatureDisplay
  30401. lSendToEmail
  30402. lShowSearch
  30403. nSearchPages
  30404. lSaveAsHTML
  30405. lSaveAsMHT
  30406. lSaveAsImage
  30407. lSaveAsPDF
  30408. lSaveAsRTF
  30409. lSaveAsXLS
  30410. lSaveAsTXT
  30411. cOutputPath
  30412. lOpenViewer
  30413. nEmailMode
  30414. cEmailType
  30415. lEmailAuto
  30416. cSMTPUserName
  30417. cSMTPPassword
  30418. nSMTPPort
  30419. cSMTPServer
  30420. lSMTPUseSSL
  30421. cEmailFrom
  30422. cEmailBodyFile
  30423. COMBOBOX
  30424. \HTML
  30425. lPDFEmbedFonts
  30426. lPDFasImage
  30427. lPDFEncryptDocument
  30428. nPDFPageMode
  30429. lPDFCanAddNotes
  30430. lPDFCanCopy
  30431. lPDFCanEdit
  30432. lPDFCanPrint
  30433. cPDFMasterPassword
  30434. cPDFUserPassword
  30435. cPDFAuthor
  30436. cPDFtitle
  30437. cPDFSymbolFontsList
  30438. cPDFDefaultFont
  30439. cExcelDefaultExtension
  30440. lExcelConvertToXLS
  30441. lExcelRepeatHeaders
  30442. lExcelRepeatFooters
  30443. lExcelHidePageNo
  30444. lExcelAlignLeft
  30445. STARTMODE
  30446. PAGECOUNT
  30447. _GOFP
  30448. LCOMPLETEMODE    
  30449. INPREVIEW
  30450. ICON    
  30451. CFORMICON
  30452. LCUSERFILE
  30453. LLRETURN
  30454. _SETTINGSFILE
  30455. FP_SETTINGS
  30456. ERRORNO
  30457. THISFORM
  30458. NDATASESSION
  30459. NSELECT
  30460. ENABLECONTROLS
  30461. PAGEGENERAL
  30462. CMBLANGUAGE
  30463. LISTITEMID
  30464. _LANGINDEX
  30465. UPDATECONTROL
  30466. CMBTBRVISIBILITY
  30467. CMBDOCK
  30468. CMBCANVASCNT
  30469. CMBZOOM
  30470. CMBWNDSTATE
  30471. CHKQUIET
  30472. CMBPROGRESS
  30473. PAGECONTROLS
  30474. CMBBTNSIZE
  30475. CMBPRPREFTYPE
  30476. CHKAVAILPRINTERS    
  30477. CHKCOPIES
  30478. CHKPRINTPREF
  30479. CHKSAVETOFILE
  30480. CHKSETTINGS
  30481. CHKMINIATURES
  30482. SPNMINIATURES
  30483. CHKSENDEMAIL    
  30484. CHKSEARCH
  30485. SPNSEARCHPAGES
  30486. PAGEOUTPUT
  30487. CHKSAVEHTML
  30488. CHKSAVEMHT
  30489. CHKSAVEIMG
  30490. CHKSAVEPDF
  30491. CHKSAVERTF
  30492. CHKSAVEXLS
  30493. CHKSAVETXT
  30494. TXTOUTPUTPATH
  30495. CHKOPENVIEWER    
  30496. PAGEEMAIL
  30497. CMBEMAILTYPE    
  30498. CMBATTACH
  30499. CHKAUTOEMAIL
  30500. TXTLOGIN
  30501. TXTPASSWORD
  30502. VALUE    
  30503. DODECRYPT
  30504. TXTPORT
  30505. TXTSMTP    
  30506. CHKUSESSL
  30507. TXTFROM
  30508. TXTHTMLFILE
  30509. LISTITEM
  30510. PAGEPDF
  30511. CHKEMBEDFONTS
  30512. CHKPDFASIMAGE
  30513. CHKENCRYPT
  30514. CMBPAGEMODE
  30515. CHKCANADDNOTES
  30516. CHKCANCOPY
  30517. CHKCANEDIT
  30518. CHKCANPRINT
  30519. TXTMASTERPWD
  30520. TXTUSERPWD
  30521. TXTPDFAUTHOR
  30522. TXTPDFTITLE
  30523. TXTPDFSYMBOLLIST
  30524. CMBDEFAULTFONT
  30525. PAGEXLS
  30526. CMBEXCELEXTENSION
  30527. CHKCONVERTTOPUREXLS
  30528. CHKREPEATHEADERS
  30529. CHKREPEATFOOTERS
  30530. CHKHIDEPAGENO
  30531. CHKCELLALIGNLEFT
  30532. SETLANGUAGE
  30533. updatecontrol,
  30534. updatetable
  30535. validate
  30536. setlanguage
  30537. getloc
  30538. enablecontrols
  30539. Loadl)
  30540. Destroy
  30541. Initk*
  30542. PLATFORM
  30543. UNIQUEID
  30544. TIMESTAMP
  30545. CLASS
  30546. CLASSLOC
  30547. BASECLASS
  30548. OBJNAME
  30549. PARENT
  30550. PROPERTIES
  30551. PROTECTED
  30552. METHODS
  30553. OBJCODE
  30554. RESERVED1
  30555. RESERVED2
  30556. RESERVED3
  30557. RESERVED4
  30558. RESERVED5
  30559. RESERVED6
  30560. RESERVED7
  30561. RESERVED8
  30562.  COMMENT Screen              
  30563.  WINDOWS _2Z911D86M1022004034
  30564.  WINDOWS _2Z911D86N1092440921
  30565.  WINDOWS _2Z911D86M1092440921
  30566.  WINDOWS _2ZD1D1IP71027520183
  30567.  WINDOWS _2Z911D86M1025136828
  30568.  WINDOWS _2Z911D86N1025136828
  30569.  WINDOWS _2Z911D86M1025136828I
  30570.  WINDOWS _2ZH1E1KNS1025136828    
  30571.  WINDOWS _2ZH1E1KNT1025136828
  30572.  WINDOWS _2ZH1E1KNU1025136828\
  30573.  WINDOWS _2ZH1F6HRH10251368286
  30574.  WINDOWS _2ZH1F6HRI1027520183
  30575.  COMMENT RESERVED            
  30576. VERSION =   3.00
  30577. dataenvironment
  30578. dataenvironment
  30579. Dataenvironment
  30580. YTop = 0
  30581. Left = 0
  30582. Width = 0
  30583. Height = 0
  30584. DataSource = .NULL.
  30585. Name = "Dataenvironment"
  30586. frmSendMail
  30587. DataSession = 2
  30588. Height = 400
  30589. Width = 470
  30590. Desktop = .T.
  30591. ShowWindow = 1
  30592. DoCreate = .T.
  30593. AutoCenter = .T.
  30594. BorderStyle = 2
  30595. Caption = "Send Email"
  30596. Closable = .F.
  30597. MaxButton = .F.
  30598. MinButton = .F.
  30599. Icon = ..\
  30600. WindowType = 1
  30601. AlwaysOnTop = .T.
  30602. AllowOutput = .F.
  30603. _memberdata = <VFPData><memberdata name="updatecontrol" display="UpdateControl"/><memberdata name="updatetable" display="UpdateTable"/></VFPData>
  30604. Name = "frmSendMail"
  30605. PROCEDURE Unload
  30606. RETURN Thisform.lCancelled
  30607. ENDPROC
  30608. PROCEDURE Load
  30609. SET TALK OFF
  30610. SET CONSOLE OFF 
  30611. ENDPROC
  30612. PROCEDURE Init
  30613. LPARAMETERS tcFile
  30614. Thisform.lblAttachment.Caption = JUSTFNAME(tcFile)
  30615. Thisform.AddProperty("lCancelled", .F.)
  30616.     This.Icon = _goFP.cFormIcon
  30617. CATCH
  30618. ENDTRY
  30619.     WITH _goFP
  30620.         This.txtDestination.Value = .cEmailTo
  30621.         This.txtSubject.Value     = .cEmailSubject
  30622.         This.edtBody.Value        =    .cEmailBody
  30623.         This.Caption            = .GetLoc("SENDEMAIL")
  30624.         This.CmdCancel.Caption  = .GetLoc("CANCEL")
  30625.         This.CmdSend.Caption    = .GetLoc("SEND")
  30626.         This.lblBody.Caption    = .GetLoc("BODY")
  30627.         This.lblSubject.Caption = .GetLoc("SUBJECT")
  30628.         This.lblTo.Caption      = .GetLoc("TO")
  30629.     ENDWITH
  30630. CATCH
  30631. ENDTRY
  30632. ENDPROC
  30633. THISFORM
  30634. LCANCELLED
  30635. RELEASE
  30636. Click,
  30637. _GOFP
  30638. CEMAILTO
  30639. THISFORM
  30640. TXTDESTINATION
  30641. VALUE
  30642. CEMAILSUBJECT
  30643. TXTSUBJECT
  30644. CEMAILBODY
  30645. EDTBODY
  30646. RELEASE
  30647. Click,
  30648. !Arial, 0, 9, 5, 15, 12, 32, 3, 0
  30649. nPicture = images\pr_attach.bmp
  30650. BackStyle = 0
  30651. Height = 16
  30652. Left = 62
  30653. Top = 84
  30654. Width = 16
  30655. Name = "Image1"
  30656. frmSendMail
  30657. Image1
  30658. image
  30659. image
  30660. frmSendMail
  30661. lblAttachment
  30662. label
  30663. label
  30664. frmSendMail
  30665. V_memberdata XML Metadata for customizable properties
  30666. *updatecontrol 
  30667. *updatetable 
  30668. commandbutton
  30669. commandbutton
  30670. cmdSend
  30671. frmSendMail
  30672. bTop = 360
  30673. Left = 276
  30674. Height = 27
  30675. Width = 84
  30676. Caption = "Send"
  30677. TabIndex = 5
  30678. Name = "cmdSend"
  30679. PROCEDURE Click
  30680. WITH _goFP
  30681.     .cEmailTo      = ALLTRIM(Thisform.txtDestination.Value)
  30682.     .cEmailSubject = ALLTRIM(Thisform.txtSubject.Value)
  30683.     .cEmailBody    = Thisform.edtBody.Value
  30684. ENDWITH 
  30685. Thisform.Release()
  30686. ENDPROC
  30687. AutoSize = .T.
  30688. BackStyle = 0
  30689. Caption = "Attachment"
  30690. Height = 17
  30691. Left = 85
  30692. Top = 84
  30693. Width = 63
  30694. TabIndex = 3
  30695. Name = "lblAttachment"
  30696. QHeight = 240
  30697. Left = 87
  30698. TabIndex = 4
  30699. Top = 110
  30700. Width = 370
  30701. Name = "edtBody"
  30702. edtBody
  30703. editbox
  30704. editbox
  30705. frmSendMail
  30706. lblBody
  30707. label
  30708. label
  30709. frmSendMail
  30710. txtSubject
  30711. textbox
  30712. commandbutton
  30713. commandbutton
  30714.     cmdCancel
  30715. frmSendMail
  30716. tTop = 360
  30717. Left = 372
  30718. Height = 27
  30719. Width = 84
  30720. Cancel = .T.
  30721. Caption = "Cancel"
  30722. TabIndex = 6
  30723. Name = "cmdCancel"
  30724. IPROCEDURE Click
  30725. Thisform.lCancelled = .T.
  30726. Thisform.Release()
  30727. ENDPROC
  30728. AutoSize = .T.
  30729. BackStyle = 0
  30730. Caption = "Body:"
  30731. Height = 17
  30732. Left = 14
  30733. Top = 110
  30734. Width = 32
  30735. TabIndex = 9
  30736. Name = "lblBody"
  30737. RHeight = 23
  30738. Left = 87
  30739. TabIndex = 2
  30740. Top = 52
  30741. Width = 370
  30742. Name = "txtSubject"
  30743. label
  30744. label
  30745. label
  30746. lblTo
  30747. frmSendMail
  30748. |AutoSize = .T.
  30749. BackStyle = 0
  30750. Caption = "To:"
  30751. Height = 17
  30752. Left = 14
  30753. Top = 16
  30754. Width = 19
  30755. TabIndex = 7
  30756. Name = "lblTo"
  30757. textbox
  30758. textbox
  30759. txtDestination
  30760. frmSendMail
  30761. VHeight = 23
  30762. Left = 87
  30763. TabIndex = 1
  30764. Top = 16
  30765. Width = 370
  30766. Name = "txtDestination"
  30767. label
  30768. lblSubject
  30769. frmSendMail
  30770. AutoSize = .T.
  30771. BackStyle = 0
  30772. Caption = "Subject:"
  30773. Height = 17
  30774. Left = 14
  30775. Top = 52
  30776. Width = 46
  30777. TabIndex = 8
  30778. Name = "lblSubject"
  30779. textbox
  30780. THISFORM
  30781. LCANCELLED
  30782. lCancelled-
  30783. SENDEMAIL
  30784. CANCEL
  30785. SUBJECT
  30786. TCFILE
  30787. THISFORM
  30788. LBLATTACHMENT
  30789. CAPTION
  30790. ADDPROPERTY
  30791. _GOFP    
  30792. CFORMICON
  30793. TXTDESTINATION
  30794. VALUE
  30795. CEMAILTO
  30796. TXTSUBJECT
  30797. CEMAILSUBJECT
  30798. EDTBODY
  30799. CEMAILBODY
  30800. GETLOC    
  30801. CMDCANCEL
  30802. CMDSEND
  30803. LBLBODY
  30804. LBLSUBJECT
  30805. LBLTO
  30806. Unload,
  30807. LoadU
  30808. Inith
  30809. PLATFORM
  30810. UNIQUEID
  30811. TIMESTAMP
  30812. CLASS
  30813. CLASSLOC
  30814. BASECLASS
  30815. OBJNAME
  30816. PARENT
  30817. PROPERTIES
  30818. PROTECTED
  30819. METHODS
  30820. OBJCODE
  30821. RESERVED1
  30822. RESERVED2
  30823. RESERVED3
  30824. RESERVED4
  30825. RESERVED5
  30826. RESERVED6
  30827. RESERVED7
  30828. RESERVED8
  30829.  COMMENT Class               
  30830.  WINDOWS _18E1A3AY7 822197245
  30831.  COMMENT RESERVED            
  30832.  WINDOWS _18E1A3AY7 822328842
  30833.  COMMENT RESERVED            
  30834.  WINDOWS _18E19ZCVM 822432384
  30835.  COMMENT RESERVED            
  30836.  WINDOWS _18P19LGRG 822432551
  30837.  COMMENT RESERVED            
  30838.  WINDOWS _18O1AV6J6 822434107
  30839.  COMMENT RESERVED            
  30840.  WINDOWS _18P1BYG3R 824668460
  30841.  COMMENT RESERVED            
  30842.  WINDOWS _18F0ZR1S1 826623356;
  30843.  COMMENT RESERVED            
  30844.  WINDOWS _18F0ZR1S1 826623373
  30845.  COMMENT RESERVED            
  30846.  WINDOWS _18O1ATV50 826624375
  30847.  COMMENT RESERVED            
  30848.  WINDOWS _18E0V1V1K 828065963
  30849.  COMMENT RESERVED            
  30850.  WINDOWS _19A0QGWHR 828065293
  30851.  COMMENT RESERVED            
  30852.  WINDOWS _18F0ZR1S1 829569785
  30853.  COMMENT RESERVED            
  30854.  WINDOWS _18B1CLDLZ 830372061
  30855.  COMMENT RESERVED            
  30856.  WINDOWS _19A0QEO5E 830372083
  30857.  COMMENT RESERVED            
  30858.  WINDOWS _18O18G812 830372203L
  30859.  COMMENT RESERVED            
  30860.  WINDOWS _18E18PHD71116440284
  30861.  COMMENT RESERVED            
  30862. VERSION =   3.00
  30863. gppoint
  30864. _gdiplus.vcx
  30865. gpbase
  30866. gpobject
  30867.     gdiplus.h
  30868. Class
  30869. Class
  30870. Pixels
  30871.     gdiplus.h
  30872. gpbase
  30873.     gdiplus.h
  30874. haderror
  30875. lasterrormessage
  30876. Pixels
  30877. Class
  30878. custom
  30879. gpbase
  30880. custom
  30881. ,gdiphandle
  30882. gdipstatus
  30883. gdipownsthishandle
  30884. Pixels
  30885. gpbase
  30886. gpobject
  30887. custom
  30888. _gdiplus.vcx
  30889. gpcolor
  30890.     gdiplus.h
  30891. Pixels
  30892. gppoint
  30893. _gdiplus.vcx
  30894. custom
  30895. Class
  30896. gpsolidbrush
  30897.     gdiplus.h
  30898. Pixels
  30899. 0A brush object which fills with a a solid color.
  30900. Class
  30901. gpbrush
  30902. gpsolidbrush
  30903. brushcolor Get or set color of a SolidBrush object
  30904. *create Create solid brush in given color
  30905. *brushcolor_access 
  30906. *brushcolor_assign 
  30907. custom
  30908. _gdiplus.vcx
  30909. uThe abstract base class for all GDI+ objects. Provides management of GDI+ handles and the outcome of GDI+ operations.
  30910. pEncapsulates a GDI+ color, consisting of 4 positive integers (0..255) for red, green, blue and alpha components.
  30911. gpbase
  30912. gpcolor
  30913. custom
  30914. _gdiplus.vcx
  30915. gpsize
  30916. gpbase
  30917. _gdiplus.vcx
  30918. Pixels
  30919. _gdiplus.vcx
  30920. gpgraphics
  30921. Pixels
  30922. gpbrush
  30923. gphatchbrush
  30924. Pixels
  30925.     gdiplus.h
  30926. Class
  30927.     gdiplus.h
  30928. Jgdippoint_access
  30929. gdippoint_assign
  30930. gdippointf_access
  30931. gdippointf_assign
  30932. Pixels
  30933.     gdiplus.h
  30934. gpobject
  30935. Pixels
  30936. gpstringformat
  30937. Pixels
  30938. _memberdata = <VFPData><memberdata name="brushcolor" type="property" display="BrushColor" favorites="true"/><memberdata name="create" type="method" display="Create" favorites="true"/></VFPData>
  30939. Name = "gpsolidbrush"
  30940. gppen
  30941.     gdiplus.h
  30942. Pixels
  30943.     gdiplus.h
  30944. Class
  30945. gpobject
  30946. gpstringformat
  30947. gpgraphics
  30948. gpbitmap
  30949. Class
  30950. gpfontfamily
  30951.     gdiplus.h
  30952. Class
  30953. custom
  30954. _gdiplus.vcx
  30955. 9Designates attributes shared by a group of related fonts.
  30956. gpobject
  30957. gpfontfamily
  30958. custom
  30959. _gdiplus.vcx
  30960. gpobject
  30961. _gdiplus.vcx
  30962. custom
  30963.     gdiplus.h
  30964. gpimage
  30965. gpbitmap
  30966. custom
  30967. _gdiplus.vcx
  30968. custom
  30969. custom
  30970. custom
  30971. Class
  30972. Class
  30973. gpfont
  30974. Pixels
  30975. gpimage
  30976. Object which encapsulates text layout information (such as alignment and line spacing) and display manipulations (such as ellipsis insertion and national digit substitution).
  30977. Class
  30978. gpobject
  30979. gppen
  30980. custom
  30981. Lgetencoderparamsfromstring
  30982. getencoderparamsfromarray
  30983. getencoderparaminfo
  30984.     gdiplus.h
  30985. gpbrush
  30986. Class
  30987. _gdiplus.vcx
  30988. gpobject
  30989.     gdiplus.h
  30990. VDefines a particular format for text, including font face, size, and style attributes.
  30991. Class
  30992. gpobject
  30993. gpfont
  30994. custom
  30995. _gdiplus.vcx
  30996. Dforegroundcolor Color of hatch lines
  30997. backgroundcolor Color of space between hatch lines
  30998. hatchstyle Hatch style of this brush object
  30999. *create Create solid brush in given color
  31000. *foregroundcolor_access 
  31001. *foregroundcolor_assign 
  31002. *backgroundcolor_access 
  31003. *backgroundcolor_assign 
  31004. *hatchstyle_access 
  31005. *hatchstyle_assign 
  31006.     gdiplus.h
  31007. gprectangle
  31008. Pixels
  31009. alignment Text alignment information.
  31010. formatflags Formatting Information (StringFormatFlags enumeration)
  31011. hotkeyprefix Set GpHotkeyPrefix object (write-only?)
  31012. linealignment Line alignment
  31013. trimming String trimming
  31014. *alignment_access 
  31015. *alignment_assign 
  31016. *formatflags_access 
  31017. *formatflags_assign 
  31018. *hotkeyprefix_access 
  31019. *hotkeyprefix_assign 
  31020. *linealignment_access 
  31021. *linealignment_assign 
  31022. *trimming_access 
  31023. *trimming_assign 
  31024. *getgenericdefault Get generic default string format (.NET: SystemDrawing.StringFormat.GenericDefault)
  31025. *getgenerictypographic Get generic typographic StringFormat
  31026. *create Create StringFormat with optional flags and language
  31027. Encapsulates a GDI+ bitmap, which consists of the pixel data for a graphics image and its attributes. A Bitmap object is an object used to work with images defined by pixel data.
  31028. 6*createfromgraphics Create from a GpGraphics object
  31029. *create Create bitmap with specified properties
  31030. *setpixel Set an individual pixel in this image to a specific colour value
  31031. *getpixel Get the colour value of an individual pixel
  31032. *setresolution Set the resolution of the bitmap, specified in dots-per-inch
  31033. Pixels
  31034. sEncapsulates a GDI+ image, and serves as the base class for specific image types (for example, the gpBitmap class).
  31035. Class
  31036.     gdiplus.h
  31037. Pixels
  31038. gpimage
  31039. \The abstract base class for all other _GDIPLUS classes. Provides some basic utility methods.
  31040. 5A pen object, which is used to draw lines and curves.
  31041. _gdiplus.vcx
  31042. gphatchbrush
  31043. gpsize
  31044. custom
  31045. gpbrush
  31046. gpbase
  31047. Class
  31048. gprectangle
  31049. gdiplus.h6
  31050. gdiplus_locs.h>
  31051. custom
  31052. _gdiplus.vcx
  31053. 0A brush object which fills with a hatch pattern.
  31054. Fgdiprect_access
  31055. gdiprect_assign
  31056. gdiprectf_access
  31057. gdiprectf_assign
  31058. gdiplus.h6
  31059. gdiplus_locs.h>
  31060. gThe abstract base class for all Brush classes (for example, the gpSolidBrush and gpHatchBrush classes).
  31061. WEncapsulates a set of four numbers that represent the location and size of a rectangle.
  31062. Fgdipsize_access
  31063. gdipsize_assign
  31064. gdipsizef_access
  31065. gdipsizef_assign
  31066. QStores an ordered pair of numbers, typically the width and height of a rectangle.
  31067. zw width value
  31068. h height value
  31069. gdipsize String representing the GDI+ Size structure (2 x 32bit integers)
  31070. gdipsizef String representing the GDI+ SizeF structure (2 x 32bit single-precision floats)
  31071. *gdipsize_access 
  31072. *gdipsize_assign 
  31073. *gdipsizef_access 
  31074. *gdipsizef_assign 
  31075. *create Set point from individual coordinates
  31076. *set Set point coordinates from individual x,y values
  31077. eEncapsulates an ordered pair of x- and y-coordinates that defines a point in a two-dimensional plane.
  31078. gdiplus.h6
  31079. gdiplus_locs.h>
  31080. gdiplus.h6
  31081. gdiplus_locs.h>
  31082. gdiplus.h6
  31083. gdiplus_locs.h>
  31084. gdiplus.h6
  31085. gdiplus_locs.h>
  31086. style Get style information for this font
  31087. unit The unit of measure used by this font
  31088. fontname Font name eg "Arial"
  31089. size Get the em size in the unit of this Font object
  31090. *create Create font using specified font family, size and style
  31091. *style_access 
  31092. *style_assign 
  31093. *unit_access 
  31094. *unit_assign 
  31095. *getheight Get line spacing for a given Graphics object (in the units of that graphics object)
  31096. *fontname_access 
  31097. *fontname_assign 
  31098. *size_access 
  31099. *size_assign 
  31100. *getheightgivendpi Get line spacing of this font, for specified DPI
  31101. gdipfontcollectionhandle Handle to GDI+ FontCollection object. This class does not manage this handle at all, it merely uses it. Normally it will refer to the collection of installed fonts.
  31102. fontname Font name eg "Arial"
  31103. *create Create font family with specified name
  31104. *getgenericmonospace Gets a generic monospace FontFamily 
  31105. *getgenericserif Gets a generic serif FontFamily 
  31106. *getgenericsansserif Gets a generic sans serif FontFamily 
  31107. *isstyleavailable Indicates whether the specified Font Style enumeration is available
  31108. *fontname_access 
  31109. *fontname_assign 
  31110. *getcellascent Get cell ascent in design units, of this font family in the specified  style
  31111. *getemheight Get the height in design units, of this font family in the specified  style
  31112. *getcelldescent Get cell descent in design units, of this font family in the specified  style
  31113. *getlinespacing Get line spacing in design units, of this font family in the specified  style
  31114. *getname Get name of this font family, in the specified language
  31115. TOOTHEROBJECT,
  31116. StringFromGUID2
  31117. ole32.dll
  31118. Internal error: buffer too small
  31119. TQGUID
  31120. LCUNICODESTRING
  31121. LNRESULT
  31122. STRINGFROMGUID2
  31123. OLE32
  31124. STRING
  31125. CLSIDFromString
  31126. ole32.dll
  31127. StringToGUID error code CC
  31128. LCSTRING
  31129. LCCLSID
  31130. LNRESULT
  31131. CLSIDFROMSTRING
  31132. OLE32
  31133. NUMBER
  31134. NUMBER
  31135. NUMBER
  31136. NUMBER
  31137. NUMBER
  31138. NUMBER
  31139. ARRAY
  31140. INTEGER
  31141. INTEGER
  31142. m.taArray[1,2]b
  31143. TAARRAY
  31144. TNCOLS
  31145. TNFIRSTCOL
  31146. LCSTRUCT
  31147. LNROWS
  31148. LNROW
  31149. LNCOL
  31150. LNFIRSTCOL
  31151. LNCOLSMINUSONEs
  31152. STRING
  31153. INTEGER
  31154. STRING
  31155. STRING
  31156. STRING
  31157. STRING
  31158. STRING
  31159. STRING
  31160. STRING
  31161. STRING
  31162. m.tcExprCC
  31163. TCALIAS
  31164. TNCOLS
  31165. TCEXPR1
  31166. TCEXPR2
  31167. TCEXPR3
  31168. TCEXPR4
  31169. TCEXPR5
  31170. TCEXPR6
  31171. TCEXPR7
  31172. TCEXPR8
  31173. LCSTRUCT
  31174. LNCOL
  31175. LNSAVEAREA
  31176. LNSAVERECNO
  31177. LAEXPR
  31178. NUMBER
  31179. NUMBER
  31180. VNEWVAL
  31181. ALLOWMODALMESSAGESH
  31182. VNEWVAL
  31183. QUIETONERRORH
  31184. VNEWVAL
  31185. IGNOREERRORS!
  31186. HADERROR
  31187. LASTERRORMESSAGE
  31188. HADERROR
  31189. LASTERRORMESSAGEH
  31190. VNEWVAL
  31191. APPNAME
  31192. TCCONTEXT
  31193. TCCLASSNAME
  31194. LCCLASSLIBRARY
  31195. LCMODULE
  31196. CLASSLIBRARY
  31197. OBJFACTORYHOOK
  31198. TCCONTEXT
  31199. RCCLASSNAME
  31200. RCCLASSLIBRARY
  31201. RCMODULE
  31202. INTEGER
  31203. STRING
  31204. INTEGER
  31205. error
  31206. CCCCC
  31207. error()
  31208. m.nError
  31209. program()
  31210. m.cMethod
  31211. lineno()
  31212. m.nLine
  31213. message()
  31214. m.lcMessage
  31215. message(1)
  31216. m.lcCodeLine
  31217. &lcOnError
  31218. Error:           
  31219. Method:       
  31220. Line:            
  31221. NERROR
  31222. CMETHOD
  31223. NLINE    
  31224. LCMESSAGE
  31225. LCCODELINE
  31226. HADERROR
  31227. IGNOREERRORS    
  31228. STARTMODE    
  31229. LCONERROR
  31230. LCERRORMSG
  31231. LASTERRORMESSAGE
  31232. QUIETONERROR
  31233. ALLOWMODALMESSAGES
  31234. APPNAME
  31235. clone,
  31236. guidtostringI
  31237. stringtoguid
  31238. makegdipsizef
  31239. makegdiprectf
  31240. makegdiparrayf|
  31241. makegdiparrayffromcursor
  31242. makegdippointf
  31243. allowmodalmessages_assignN
  31244. quietonerror_assign
  31245. ignoreerrors_assign&
  31246. clearerrors
  31247. geterrorstatus
  31248. getlasterrormessage
  31249. appname_assign$
  31250. objfactory
  31251. objfactoryhook
  31252. Error
  31253. Init3
  31254. _memberdata = 
  31255.      653<?xml version="1.0" encoding="Windows-1252" standalone="yes"?><VFPData><memberdata name="create" type="method" display="Create"/><memberdata name="getgenericdefault" type="method" display="GetGenericDefault"/><memberdata name="getgenerictypographic" type="method" display="GetGenericTypographic"/><memberdata name="alignment" type="property" display="Alignment"/><memberdata name="formatflags" type="property" display="FormatFlags"/><memberdata name="hotkeyprefix" type="property" display="HotkeyPrefix"/><memberdata name="linealignment" type="property" display="LineAlignment"/><memberdata name="trimming" type="property" display="Trimming"/></VFPData>
  31256. Name = "gpstringformat"
  31257. )PROCEDURE clone
  31258. lparameters toBrush as GpBrush
  31259. #if GDIPLUS_CHECK_PARAMS
  31260. if !(vartype(m.toBrush)='O' and m.toBrush.gdipHandle<>0)
  31261.     error 11 && function argument
  31262.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  31263.     return .F.
  31264. endif
  31265. #endif
  31266. this.Destroy()
  31267. local nHandle
  31268. nHandle = 0
  31269. Declare Integer GdipCloneBrush In GDIPlus.Dll ;
  31270.     integer nBrush, integer @nCloneBrush
  31271. This.gdipStatus = GdipCloneBrush( ;
  31272.     m.toBrush.gdipHandle ;
  31273. ,    @nHandle)
  31274. this.gdipHandle= m.nHandle
  31275. return GDIPLUS_STATUS_OK == This.GdipStatus
  31276. ENDPROC
  31277. PROCEDURE Destroy
  31278. if This.gdipHandle!=0 and This.gdipOwnsThisHandle
  31279.     declare integer GdipDeleteBrush in gdiplus.dll ;
  31280.         integer nBrush
  31281.     GdipDeleteBrush( This.gdipHandle )
  31282.     This.gdipHandle = 0
  31283.     This.gdipOwnsThisHandle = .F.
  31284. endif
  31285. return dodefault()
  31286. ENDPROC
  31287. [_memberdata XML Metadata for customizable properties
  31288. allowmodalmessages Allow error handler to put up Messagebox on error
  31289. quietonerror If .T., error messages are suppressed
  31290. ignoreerrors If .T., errors are ignored: test return values from all functions!
  31291. haderror Flag indicating whether an error has occured - you can also check return value from most functions.
  31292. lasterrormessage Last error message (formatted)
  31293. appname Application name for use in user feedback
  31294. *clone Create a new object as an exact copy of an existing object
  31295. *guidtostring Convert GUID value from binary form to string representation
  31296. *stringtoguid Convert string representation of a GUID or CLSID to binary form (16 bytes)
  31297. *makegdipsizef Create GDI+ SizeF structure as string, from separate width,height parameters
  31298. *makegdiprectf Create GDI+ RectF structure as string, from separate x,y,w,h parameters
  31299. *makegdiparrayf Convert VFP array to a binary string (array of floats)
  31300. *makegdiparrayffromcursor Convert VFP cursor to a binary string (array of floats)
  31301. *makegdippointf Create GDI+ PointF structure as string, from separate x,y parameters
  31302. *allowmodalmessages_assign 
  31303. *quietonerror_assign 
  31304. *ignoreerrors_assign 
  31305. *clearerrors Resets the object's error status
  31306. *geterrorstatus Has an error occurred?
  31307. *getlasterrormessage Get information about the last error to occur
  31308. *appname_assign 
  31309. *objfactory Object factory function for creating _GDIPLUS objects. Override this or ObjFactoryHook to change the classes used
  31310. *objfactoryhook Modify behaviour of object factory for  _GDIPLUS objects. Override this or ObjFactory to change the classes used
  31311. _memberdata = 
  31312.     1616<?xml version="1.0" encoding="Windows-1252" standalone="yes"?><VFPData><memberdata name="allowmodalmessages" type="property" display="AllowModalMessages"/><memberdata name="appname" type="property" display="AppName"/><memberdata name="clearerrors" type="method" display="ClearErrors"/><memberdata name="clone" type="method" display="Clone" favorites="True"/><memberdata name="geterrorstatus" type="method" display="GetErrorStatus"/><memberdata name="getlasterrormessage" type="method" display="GetLastErrorMessage"/><memberdata name="guidtostring" type="method" display="GUIDToString" favorites="True"/><memberdata name="haderror" type="property" display="hadError"/><memberdata name="ignoreerrors" type="property" display="IgnoreErrors" favorites="True"/><memberdata name="lasterrormessage" type="property" display="lastErrorMessage"/><memberdata name="makegdiparrayf" type="method" display="MakeGdipArrayF" favorites="True"/><memberdata name="makegdiparrayffromcursor" type="method" display="MakeGdipArrayFFromCursor" favorites="True"/><memberdata name="makegdippointf" type="method" display="MakeGdipPointF" favorites="True"/><memberdata name="makegdiprectf" type="method" display="MakeGdipRectF" favorites="True"/><memberdata name="makegdipsizef" type="method" display="MakeGdipSizeF" favorites="True"/><memberdata name="quietonerror" type="property" display="QuietOnError"/><memberdata name="stringtoguid" type="method" display="StringToGUID" favorites="True"/><memberdata name="objfactory" type="method" display="ObjFactory"/><memberdata name="objfactoryhook" type="method" display="ObjFactoryHook"/></VFPData>
  31313. allowmodalmessages = (inlist(_VFP.StartMode,0,4))
  31314. quietonerror = (not inlist(_VFP.StartMode,0,4))
  31315. lasterrormessage = ('')
  31316. appname = GDI+ FFC Library
  31317. Name = "gpbase"
  31318. _memberdata = 
  31319.      482<VFPData><memberdata name="gdiphandle" type="property" display="gdipHandle"/><memberdata name="gdipownsthishandle" type="property" display="gdipOwnsThisHandle"/><memberdata name="gdipstatus" type="property" display="gdipStatus"/><memberdata name="gethandle" type="method" display="GetHandle" favorites="True"/><memberdata name="getstatus" type="method" display="GetStatus" favorites="True"/><memberdata name="sethandle" type="method" display="SetHandle" favorites="True"/></VFPData>
  31320. Name = "gpbrush"
  31321. hatchstyle = 0
  31322. _memberdata = 
  31323.      369<VFPData><memberdata name="backgroundcolor" type="property" display="BackgroundColor" favorites="true"/><memberdata name="create" type="method" display="Create" favorites="true"/><memberdata name="foregroundcolor" type="property" display="ForegroundColor" favorites="true"/><memberdata name="hatchstyle" type="property" display="HatchStyle" favorites="true"/></VFPData>
  31324. Name = "gphatchbrush"
  31325. TCRECT
  31326. TCRECTF
  31327. NUMBER
  31328. NUMBER
  31329. NUMBER
  31330. NUMBER
  31331. TCPOINTF
  31332. TCRECTF
  31333. TCSIZEF
  31334. gprectange.gppoint_access
  31335. GpPoint
  31336. OBJFACTORY
  31337. TOPOINT
  31338. gprectange.gpsize_access
  31339. GpSize
  31340. OBJFACTORY
  31341. TOSIZE
  31342. GPPOINT
  31343. GPSIZE
  31344. TOPOINT
  31345. TOSIZE
  31346. GPPOINT
  31347. GDIPPOINTF
  31348. GPSIZE    
  31349. GDIPSIZEF(
  31350. STRING
  31351. TCSIZE
  31352. STRING
  31353. TCPOINT
  31354. STRING
  31355. TCRECT
  31356. VNEWVAL
  31357. VNEWVAL
  31358. TOOTHERRECT
  31359. THIS    
  31360. GDIPRECTF
  31361. TXORRECTORPOINT
  31362. TYORSIZE
  31363. CLONE    
  31364. GDIPRECTF
  31365. CREATEFROMPOINTSIZE
  31366. CREATE
  31367. gdiprect_access,
  31368. gdiprect_assign
  31369. gdiprectf_accessv
  31370. gdiprectf_assign
  31371. create
  31372. x2_access
  31373. y2_access
  31374. gdippointf_access
  31375. gdippointf_assignA
  31376. gdipsizef_access
  31377. gdipsizef_assign 
  31378. gppoint_access
  31379. gppoint_assign
  31380. gpsize_access
  31381. gpsize_assign
  31382. createfrompointsize
  31383. gdipsize_access^
  31384. gdipsize_assign
  31385. gdippoint_accessB
  31386. gdippoint_assignz
  31387. gdirect_access'
  31388. gdirect_assign
  31389. x2_assign
  31390. y2_assign
  31391. clone
  31392. Init{
  31393. GDIPHANDLE
  31394. GDIPSTATUS
  31395. TVNEWHANDLE
  31396. TLOWNSHANDLE
  31397. GDIPSTATUS
  31398. GDIPHANDLE
  31399. GDIPOWNSTHISHANDLE
  31400. GDI+ not initialized
  31401. VNEWVAL
  31402. GDIPSTATUS
  31403. WIN32LASTERROR
  31404. _WIN32_GETLASTERRORG
  31405. GetLastError
  31406. kernel32.dllQ
  31407. _win32_GetLastError
  31408. GETLASTERROR
  31409. KERNEL32
  31410. _WIN32_GETLASTERROR    
  31411. gethandle,
  31412. getstatusQ
  31413. sethandlev
  31414. gdipstatus_assignG
  31415. gdiplus.h6
  31416. gdiplus_locs.h>
  31417. gdiplus.h6
  31418. gdiplus_locs.h>
  31419. gdiplus.h6
  31420. gdiplus_locs.h>
  31421. gdiplus.h6
  31422. gdiplus_locs.h>
  31423. gdiplus.h6
  31424. gdiplus_locs.h>
  31425. gdiplus.h6
  31426. gdiplus_locs.h>
  31427. gdiplus.h6
  31428. gdiplus_locs.h>
  31429. gdiplus.h6
  31430. gdiplus_locs.h>
  31431. gdiplus.h6
  31432. gdiplus_locs.h>
  31433. gdiplus.h6
  31434. gdiplus_locs.h>
  31435. ^Encapsulates a GDI+ drawing surface. Provides methods for drawing on a window or other canvas.
  31436. Dargb Color in ARGB form (GDI+ native format), bits 24-31=alpha, 16-23=red, 8-15=green, 0-7=blue
  31437. foxrgb Color in Foxpro RGB form (bits 0-7=red, 8-15=green, 16-23=blue, no transparency)
  31438. red Red component, value 0-255
  31439. green Green component, value 0-255
  31440. blue Blue component, value 0-255
  31441. alpha Alpha (transparency) component, value 0-255 (255=completely opaque)
  31442. *foxrgb_access 
  31443. *foxrgb_assign 
  31444. *red_access 
  31445. *red_assign 
  31446. *green_access 
  31447. *green_assign 
  31448. *blue_access 
  31449. *blue_assign 
  31450. *alpha_access 
  31451. *alpha_assign 
  31452. *set Set colour value using separate R,G,B,Alpha components
  31453. ]gdiphandle Underlying GDI+ handle for this object
  31454. gdipstatus Status code returned from last GDI+ function called (see Status enumeration)
  31455. gdipownsthishandle True if this VFP object owns the corresponding GDI+ object (and thus should dispose of it in its Destroy Event)
  31456. win32lasterror Win32 error code if GetStatus() returns GP_STATUS_Win32Error
  31457. *gethandle Return the underlying GDI+ handle for this object
  31458. *getstatus Return the status code from the last GDI+ function called on this object
  31459. *sethandle Set the native GDI+ handle if this has been obtained from an outside source
  31460. *gdipstatus_assign 
  31461. x x-coordinate of point
  31462. y y-coordinate of point
  31463. gdippoint String representing the GDI+ Point structure (2 x 32bit integers)
  31464. gdippointf String representing the GDI+ PointF structure (2 x 32bit single-precision floats)
  31465. *gdippoint_access 
  31466. *gdippoint_assign 
  31467. *gdippointf_access 
  31468. *gdippointf_assign 
  31469. *create Set point from individual x,y coordinates
  31470. *set Set point from individual x,y coordinates
  31471. QPROCEDURE gethandle
  31472. return This.gdipHandle
  31473. ENDPROC
  31474. PROCEDURE getstatus
  31475. return This.gdipStatus
  31476. ENDPROC
  31477. PROCEDURE sethandle
  31478. lparameters tvNewHandle, tlOwnsHandle
  31479. #if GDIPLUS_CHECK_PARAMS
  31480. if !(vartype(m.tvNewHandle)='N' and vartype(m.tlOwnsHandle)='L')
  31481.     error 11 && function argument
  31482.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  31483.     return .F.
  31484. endif
  31485. #endif
  31486. * Assume if we came through this function that we do NOT own the graphics handle
  31487. * Thus destroy must not call GdipDelete..() on this handle
  31488. * This can be overridden by passing tlOwnsHandle=.T.
  31489. This.gdipHandle = m.tvNewHandle
  31490. This.gdipOwnsThisHandle = m.tlOwnsHandle
  31491. ENDPROC
  31492. PROCEDURE gdipstatus_assign
  31493. LPARAMETERS vNewVal
  31494. THIS.gdipStatus = m.vNewVal
  31495. do case
  31496. case m.vNewVal == GDIPLUS_STATUS_Win32Error
  31497.     This.win32LastError = _win32_GetLastError()
  31498. #if GDIPLUS_CHECK_GDIPLUSNOTINIT
  31499. case m.vNewVal == GDIPLUS_STATUS_GdiplusNotInitialized
  31500.     error _GDIPLUS_GDIPLUSNOTINIT_LOC
  31501. #endif    
  31502. endcase
  31503. ENDPROC
  31504. PROCEDURE Init
  31505. declare integer GetLastError in kernel32.dll as _win32_GetLastError 
  31506. return dodefault()
  31507. ENDPROC
  31508. CPROCEDURE create
  31509. lparameters tvColor
  31510. * tvColor may be ARGB or a Color object
  31511. #if GDIPLUS_CHECK_PARAMS
  31512. if !(vartype(m.tvColor)$'ONL')
  31513.     error 11 && Function argument
  31514.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  31515.     return .F.
  31516. endif
  31517. #endif
  31518. this.Destroy()
  31519. local nHandle
  31520. nHandle = 0
  31521. Declare Integer GdipCreateSolidFill In GDIPlus.Dll ;
  31522.     integer nColor, Integer @nBrush
  31523. This.gdipStatus = GdipCreateSolidFill( ;
  31524.     icase(vartype(m.tvColor)='O',m.tvColor.ARGB,vartype(m.tvColor)='N',m.tvColor,0xFF000000) ;
  31525. ,    @nHandle)
  31526. This.SetHandle(m.nHandle,.T.)
  31527. return GDIPLUS_STATUS_OK == This.gdipStatus
  31528. ENDPROC
  31529. PROCEDURE brushcolor_access
  31530. #if GDIPLUS_CHECK_OBJECT
  31531. if This.gdipHandle==0
  31532.     error _GDIPLUS_NOGDIPOBJECT_LOC
  31533.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  31534.     return cast(null as I)
  31535. endif
  31536. #endif
  31537. declare integer GdipGetSolidFillColor in gdiplus.dll ;
  31538.     integer, integer @
  31539. local nARGB
  31540. nARGB = 0
  31541. This.gdipStatus = GdipGetSolidFillColor( This.gdipHandle, @nARGB )
  31542. return iif(This.gdipStatus==GDIPLUS_STATUS_OK,m.nARGB,cast(null as I))
  31543. ENDPROC
  31544. PROCEDURE brushcolor_assign
  31545. LPARAMETERS tvColor
  31546. #if GDIPLUS_CHECK_OBJECT
  31547. if This.gdipHandle==0
  31548.     error _GDIPLUS_NOGDIPOBJECT_LOC
  31549.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  31550.     return .F.
  31551. endif
  31552. #endif
  31553. #if GDIPLUS_CHECK_PARAMS
  31554. if !(vartype(m.tvColor)$'ON')
  31555.     error 11 && Function argument
  31556.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  31557.     return .F.
  31558. endif
  31559. #endif
  31560. declare Integer GdipSetSolidFillColor in gdiplus.dll ;
  31561.     integer nPen, integer nColor
  31562. This.gdipStatus = GdipSetSolidFillColor( This.gdipHandle,iif(vartype(m.tvColor)='O',m.tvColor.ARGB,m.tvColor))
  31563. return GDIPLUS_STATUS_OK == This.gdipStatus
  31564. ENDPROC
  31565. PROCEDURE Init
  31566. lparameters tvColor
  31567. if not dodefault()
  31568.     return .F.
  31569. endif
  31570. if pcount()>0
  31571.     return This.Create(m.tvColor)
  31572. endif
  31573. ENDPROC
  31574. pencolor The color of this Pen object.
  31575. penwidth Width of the pen object
  31576. pentype The style of lines drawn with this Pen object
  31577. alignment The alignment of this pen (see GP_PENALIGNMENT_ constants)
  31578. miterlimit The limit of the thickness of the join on a mitered corner
  31579. dashcap The cap style at the end of dashes, for dashed lines
  31580. linejoin Join style for the ends of two consecutive lines drawn with this Pen
  31581. startcap Cap style at the start of lines drawn with this Pen
  31582. endcap Cap style at the end of lines drawn with this Pen
  31583. dashstyle The style used for dashed lines
  31584. dashoffset The distance from the start of a line to the beginning of a dash pattern
  31585. penunit The unit for measuring width etc, see GDIPLUS_UNIT constants
  31586. *create Create pen in a given color
  31587. *createfrombrush Create pen from an existing _gdiplus brush object
  31588. *pencolor_access 
  31589. *pencolor_assign 
  31590. *penwidth_access 
  31591. *penwidth_assign 
  31592. *pentype_access 
  31593. *pentype_assign 
  31594. *alignment_access 
  31595. *alignment_assign 
  31596. *miterlimit_access 
  31597. *miterlimit_assign 
  31598. *dashcap_access 
  31599. *dashcap_assign 
  31600. *linejoin_access 
  31601. *linejoin_assign 
  31602. *startcap_access 
  31603. *startcap_assign 
  31604. *endcap_access 
  31605. *endcap_assign 
  31606. *dashstyle_access 
  31607. *dashstyle_assign 
  31608. *dashoffset_access 
  31609. *dashoffset_assign 
  31610. *penunit_access 
  31611. *penunit_assign 
  31612. _memberdata = 
  31613.     1223<?xml version="1.0" encoding="Windows-1252" standalone="yes"?><VFPData><memberdata name="create" type="method" display="Create" favorites="True"/><memberdata name="createfrombrush" type="method" display="CreateFromBrush" favorites="True"/><memberdata name="dashcap" type="property" display="DashCap" favorites="True"/><memberdata name="dashoffset" type="property" display="DashOffset" favorites="True"/><memberdata name="dashstyle" type="property" display="DashStyle" favorites="True"/><memberdata name="endcap" type="property" display="EndCap" favorites="True"/><memberdata name="linejoin" type="property" display="LineJoin" favorites="True"/><memberdata name="miterlimit" type="property" display="MiterLimit" favorites="True"/><memberdata name="pencolor" type="property" display="PenColor" favorites="True"/><memberdata name="pentype" type="property" display="PenType" favorites="True"/><memberdata name="penunit" type="property" display="PenUnit" favorites="True"/><memberdata name="penwidth" type="property" display="PenWidth" favorites="True"/><memberdata name="startcap" type="property" display="StartCap" favorites="True"/><memberdata name="alignment" type="property" display="Alignment" favorites="True"/></VFPData>
  31614. Name = "gppen"
  31615. Lx = 0
  31616. y = 0
  31617. _memberdata = 
  31618.      527<?xml version="1.0" encoding="Windows-1252" standalone="yes"?><VFPData><memberdata name="create" type="method" display="Create" favorites="True"/><memberdata name="set" type="method" display="Set" favorites="True"/><memberdata name="gdippoint" type="property" display="GdipPoint" favorites="True"/><memberdata name="gdippointf" type="property" display="GdipPointF" favorites="True"/><memberdata name="x" type="property" display="x" favorites="True"/><memberdata name="y" type="property" display="y" favorites="True"/></VFPData>
  31619. Name = "gppoint"
  31620. BPROCEDURE gdippoint_access
  31621. * Convert object into 2 x 32-bit integers
  31622. * Modify bintoc() output into little-endian with normal sign bit
  31623. return ;
  31624.     bintoc(This.X,'4RS') + bintoc(This.Y,'4RS')
  31625. ENDPROC
  31626. PROCEDURE gdippoint_assign
  31627. LPARAMETERS tcPoint
  31628. #if GDIPLUS_CHECK_PARAMS
  31629. if !(vartype(m.tcPoint)='C' and len(m.tcPoint)=8)
  31630.     error 11 && Function argument
  31631.     return .F.
  31632. endif
  31633. #endif
  31634. This.X = ctobin(substr(m.tcPoint,1,4),'RS')
  31635. This.Y = ctobin(substr(m.tcPoint,5,4),'RS')
  31636. ENDPROC
  31637. PROCEDURE gdippointf_access
  31638. return ;
  31639.     bintoc(This.X,'F') + bintoc(This.Y,'F')
  31640. ENDPROC
  31641. PROCEDURE gdippointf_assign
  31642. LPARAMETERS tcPointF
  31643. #if GDIPLUS_CHECK_PARAMS
  31644. if !(vartype(m.tcPointF)='C' and len(m.tcPointF)=8)
  31645.     error 11 && Function argument
  31646.     return .F.
  31647. endif
  31648. #endif
  31649. This.X = ctobin(substr(m.tcPointF,1,4),'N')
  31650. This.Y = ctobin(substr(m.tcPointF,5,4),'N')
  31651. ENDPROC
  31652. PROCEDURE create
  31653. lparameters tx,ty
  31654. #if GDIPLUS_CHECK_PARAMS
  31655. if !(vartype(m.tx)='N' and vartype(m.ty)='N')
  31656.     error 11 && Function argument
  31657.     return .F.
  31658. endif
  31659. #endif
  31660. This.X = m.tx
  31661. This.Y = m.ty
  31662. ENDPROC
  31663. PROCEDURE set
  31664. lparameters tx as Number,ty as Number
  31665. #if GDIPLUS_CHECK_PARAMS
  31666. if !(vartype(m.tx)='N' and vartype(m.ty)='N')
  31667.     error 11 && Function argument
  31668.     return .F.
  31669. endif
  31670. #endif
  31671. This.X = m.tx
  31672. This.Y = m.ty
  31673. ENDPROC
  31674. PROCEDURE Init
  31675. lparameters tXorPoint,ty
  31676. if not dodefault()
  31677.     return .F.
  31678. endif
  31679. do case
  31680. case pcount()=1 and vartype(m.tXorPoint)='O'
  31681.     * Passed an object - presumably an existing Point object
  31682.     This.Clone(m.tXorPoint)
  31683. case pcount()=1 and vartype(m.tXorPoint)='C'
  31684.     * Passed a string (structure)
  31685.     * Assume PointF as this is preferred format
  31686.     This.gdipPointF = m.tXorPoint
  31687. case pcount()>=2
  31688.     * Separate components
  31689.     This.Create(m.tXorPoint,m.ty)
  31690. endcase
  31691. ENDPROC
  31692. PROCEDURE clone
  31693. lparameters toOtherPoint as GpPoint
  31694. #if GDIPLUS_CHECK_PARAMS
  31695. if !(vartype(m.toOtherPoint)='O' ;
  31696.     and vartype(toOtherPoint.X)='N' and vartype(toOtherPoint.Y)='N')
  31697.         error 11 && Function argument
  31698.         return .F.
  31699.     endif
  31700.     #endif
  31701. This.X = m.toOtherPoint.X
  31702. This.Y = m.toOtherPoint.Y
  31703. ENDPROC
  31704. gdiphandle = 0
  31705. gdipstatus = 0
  31706. win32lasterror = 0
  31707. _memberdata = 
  31708.      544<?xml version="1.0" encoding="Windows-1252" standalone="yes"?><VFPData><memberdata name="gdiphandle" type="property" display="gdipHandle"/><memberdata name="gdipownsthishandle" type="property" display="gdipOwnsThisHandle"/><memberdata name="gdipstatus" type="property" display="gdipStatus"/><memberdata name="gethandle" type="method" display="GetHandle" favorites="True"/><memberdata name="getstatus" type="method" display="GetStatus" favorites="True"/><memberdata name="sethandle" type="method" display="SetHandle" favorites="True"/></VFPData>
  31709. Name = "gpobject"
  31710. gdipfontcollectionhandle = 0
  31711. _memberdata = 
  31712.     1156<?xml version="1.0" encoding="Windows-1252" standalone="yes"?><VFPData><memberdata name="create" type="method" display="Create" favorites="True"/><memberdata name="fontname" type="property" display="FontName" favorites="True"/><memberdata name="gdipfontcollectionhandle" type="property" display="gdipFontCollectionHandle"/><memberdata name="getcellascent" type="method" display="GetCellAscent" favorites="True"/><memberdata name="getcelldescent" type="method" display="GetCellDescent" favorites="True"/><memberdata name="getemheight" type="method" display="GetEmHeight" favorites="True"/><memberdata name="getgenericmonospace" type="method" display="GetGenericMonospace" favorites="True"/><memberdata name="getgenericsansserif" type="method" display="GetGenericSansSerif" favorites="True"/><memberdata name="getgenericserif" type="method" display="GetGenericSerif" favorites="True"/><memberdata name="getlinespacing" type="method" display="GetLineSpacing" favorites="True"/><memberdata name="getname" type="method" display="GetName" favorites="True"/><memberdata name="isstyleavailable" type="method" display="IsStyleAvailable" favorites="True"/></VFPData>
  31713. Name = "gpfontfamily"
  31714. argb = -16777216
  31715. _memberdata = 
  31716.      594<?xml version="1.0" encoding="Windows-1252" standalone="yes"?><VFPData><memberdata name="alpha" type="property" display="Alpha" favorites="True"/><memberdata name="argb" type="property" display="ARGB" favorites="True"/><memberdata name="blue" type="property" display="Blue" favorites="True"/><memberdata name="foxrgb" type="property" display="FoxRGB" favorites="True"/><memberdata name="green" type="property" display="Green" favorites="True"/><memberdata name="red" type="property" display="Red" favorites="True"/><memberdata name="set" type="method" display="Set" favorites="True"/></VFPData>
  31717. Name = "gpcolor"
  31718. Gw = 0
  31719. h = 0
  31720. _memberdata = 
  31721.      523<?xml version="1.0" encoding="Windows-1252" standalone="yes"?><VFPData><memberdata name="create" type="method" display="Create" favorites="True"/><memberdata name="set" type="method" display="Set" favorites="True"/><memberdata name="gdipsize" type="property" display="GdipSize" favorites="True"/><memberdata name="gdipsizef" type="property" display="GdipSizeF" favorites="True"/><memberdata name="w" type="property" display="w" favorites="True"/><memberdata name="h" type="property" display="h" favorites="True"/></VFPData>
  31722. Name = "gpsize"
  31723. PROCEDURE gdipsize_access
  31724. * Convert object into 2 x 32-bit integers
  31725. * Modify bintoc() output into little-endian with normal sign bit
  31726. return ;
  31727.     bintoc(This.W,'4RS')+bintoc(This.H,'4RS')
  31728. ENDPROC
  31729. PROCEDURE gdipsize_assign
  31730. LPARAMETERS tcSize as String
  31731. #if GDIPLUS_CHECK_PARAMS
  31732. if !(vartype(m.tcSize)='C' and len(m.tcSize)=8)
  31733.     error 11 && Function argument
  31734.     return .F.
  31735. endif
  31736. #endif
  31737. This.W = ctobin(substr(m.tcSize,1,4),'RS')
  31738. This.H = ctobin(substr(m.tcSize,5,4),'RS')
  31739. ENDPROC
  31740. PROCEDURE gdipsizef_access
  31741. return ;
  31742.     bintoc(This.W,'F') + bintoc(This.H,'F')
  31743. ENDPROC
  31744. PROCEDURE gdipsizef_assign
  31745. LPARAMETERS tcSizeF as String
  31746. #if GDIPLUS_CHECK_PARAMS
  31747. if !(vartype(m.tcSizeF)='C' and len(m.tcSizeF)=8)
  31748.     error 11 && Function argument
  31749.     return .F.
  31750. endif
  31751. #endif
  31752. This.W = ctobin(substr(m.tcSizeF,1,4),'N')
  31753. This.H = ctobin(substr(m.tcSizeF,5,4),'N')
  31754. ENDPROC
  31755. PROCEDURE create
  31756. lparameters tw,th
  31757. #if GDIPLUS_CHECK_PARAMS
  31758. if !(vartype(m.tw)='N' and vartype(m.th)='N')
  31759.     error 11 && Function argument
  31760.     return .F.
  31761. endif
  31762. #endif
  31763. This.W = m.tw
  31764. This.H = m.th
  31765. ENDPROC
  31766. PROCEDURE set
  31767. lparameters tw,th
  31768. #if GDIPLUS_CHECK_PARAMS
  31769. if !(vartype(m.tw)='N' and vartype(m.th)='N')
  31770.     error 11 && Function argument
  31771.     return .F.
  31772. endif
  31773. #endif
  31774. This.W = m.tw
  31775. This.H = m.th
  31776. ENDPROC
  31777. PROCEDURE clone
  31778. lparameters toOtherSize
  31779. #if GDIPLUS_CHECK_PARAMS
  31780. if !(vartype(m.toOtherSize)='O' ;
  31781.     and vartype(toOtherSize.W)='N' and vartype(toOtherSize.H)='N')
  31782.     error 11 && Function argument
  31783.     return .F.
  31784. endif
  31785. #endif
  31786. This.W = m.toOtherSize.W
  31787. This.H = m.toOtherSize.H
  31788. ENDPROC
  31789. PROCEDURE Init
  31790. lparameters tWorSize,th
  31791. if not dodefault()
  31792.     return .F.
  31793. endif
  31794. do case
  31795. case pcount()=1 and vartype(m.tWorSize)='O'
  31796.     * Passed an object - presumably an existing Size object
  31797.     This.Clone(m.tWorSize)
  31798. case pcount()=1 and vartype(m.tWorSize)='C'
  31799.     * Passed a string (structure)
  31800.     * Assume SizeF as this is preferred format
  31801.     This.gdipSizeF = m.tWorSize
  31802. case pcount()>=2
  31803.     * Separate components
  31804.     This.Create(m.tWorSize,m.th)
  31805. endcase
  31806. ENDPROC
  31807. _memberdata = 
  31808.      725<?xml version="1.0" encoding="Windows-1252" standalone="yes"?><VFPData><memberdata name="fontname" type="property" display="FontName" favorites="True"/><memberdata name="getheight" type="method" display="GetHeight" favorites="True"/><memberdata name="getheightgivendpi" type="method" display="GetHeightGivenDPI" favorites="True"/><memberdata name="create" type="method" display="Create" favorites="True"/><memberdata name="size" type="property" display="Size" favorites="True"/><memberdata name="style" type="property" display="Style" favorites="True"/><memberdata name="sizeinpoints" type="property" display="SizeInPoints" favorites="True"/><memberdata name="unit" type="property" display="Unit" favorites="True"/></VFPData>
  31809. Name = "gpfont"
  31810. GREEN
  31811. BLUE~
  31812. TNRGB
  31813. ARGBp
  31814. TNNEWVAL
  31815. ARGBp
  31816. TNNEWVAL
  31817. ARGBj
  31818. TNNEWVAL
  31819. ARGBp
  31820. TNNEWVAL
  31821. TNRED
  31822. TNGREEN
  31823. TNBLUE
  31824. TNALPHA
  31825. ARGBk
  31826. GPCOLOR
  31827. TOOTHERCOLOR
  31828. INTEGER
  31829. INTEGER
  31830. INTEGER
  31831. INTEGER
  31832. TNREDORARGB
  31833. TNGREEN
  31834. TNBLUE
  31835. TNALPHA
  31836. foxrgb_access,
  31837. foxrgb_assignf
  31838. red_access
  31839. red_assign&
  31840. green_access
  31841. green_assign
  31842. blue_accesse
  31843. blue_assign
  31844. alpha_access
  31845. alpha_assign9
  31846. clone
  31847. STRING
  31848. TCSIZE
  31849. STRING
  31850. TCSIZEF
  31851. TOOTHERSIZE
  31852. TWORSIZE
  31853. CLONE    
  31854. GDIPSIZEF
  31855. CREATE
  31856. gdipsize_access,
  31857. gdipsize_assignd
  31858. gdipsizef_access
  31859. gdipsizef_assignD
  31860. create
  31861. clone
  31862. GPBRUSH
  31863. GdipCloneBrush
  31864. GDIPlus.Dll
  31865. TOBRUSH
  31866. GDIPHANDLE
  31867. GDIPSTATUS
  31868. DESTROY
  31869. NHANDLE
  31870. GDIPCLONEBRUSH
  31871. GDIPLUS
  31872. GdipDeleteBrush
  31873. gdiplus.dll
  31874. GDIPHANDLE
  31875. GDIPOWNSTHISHANDLE
  31876. GDIPDELETEBRUSH
  31877. GDIPLUS
  31878. clone,
  31879. Destroyr
  31880. &_memberdata = 
  31881.      502<?xml version="1.0" encoding="Windows-1252" standalone="yes"?><VFPData><memberdata name="create" type="method" display="Create" favorites="True"/><memberdata name="createfromgraphics" type="method" display="CreateFromGraphics" favorites="True"/><memberdata name="getpixel" type="method" display="GetPixel" favorites="True"/><memberdata name="setpixel" type="method" display="SetPixel" favorites="True"/><memberdata name="setresolution" type="method" display="SetResolution" favorites="True"/></VFPData>
  31882. Name = "gpbitmap"
  31883. jx = 0
  31884. y = 0
  31885. w = 0
  31886. h = 0
  31887. _memberdata = 
  31888.     1307<?xml version="1.0" encoding="Windows-1252" standalone="yes"?><VFPData><memberdata name="create" type="method" display="Create" favorites="True"/><memberdata name="createfrompointsize" type="method" display="CreateFromPointSize" favorites="True"/><memberdata name="set" type="method" display="Set" favorites="True"/><memberdata name="gdippoint" type="property" display="GdipPoint" favorites="True"/><memberdata name="gdippointf" type="property" display="GdipPointF" favorites="True"/><memberdata name="x" type="property" display="x" favorites="True"/><memberdata name="y" type="property" display="y" favorites="True"/><memberdata name="gdipsize" type="property" display="GdipSize" favorites="True"/><memberdata name="gdipsizef" type="property" display="GdipSizeF" favorites="True"/><memberdata name="w" type="property" display="w" favorites="True"/><memberdata name="h" type="property" display="h" favorites="True"/><memberdata name="x2" type="property" display="x2" favorites="True"/><memberdata name="y2" type="property" display="y2" favorites="True"/><memberdata name="gdiprect" type="property" display="GdipRect" favorites="True"/><memberdata name="gdiprectf" type="property" display="GdipRectF" favorites="True"/><memberdata name="gdirect" type="property" display="GdiRect" favorites="True"/></VFPData>
  31889. Name = "gprectangle"
  31890. x x-coordinate of upper-left corner of rectangle
  31891. y y-coordinate of upper-left corner of rectangle
  31892. w Width of rectangle
  31893. h Height of rectangle
  31894. gdiprect String representing the GDI+ Rect structure (4 x 32bit integers)
  31895. gdiprectf String representing the GDI+ RectF structure (4 x 32bit single-precision floats)
  31896. x2 X-Coordinate of bottom right corner of rectangle
  31897. y2 Y-Coordinate of bottom right corner of rectangle
  31898. gdippointf GDI+ PointF structure for the x,y position of this rectange
  31899. gdipsizef GDI+ SizeF structure for the width and height of this rectange
  31900. gppoint Origin of the rectange (x,y) as a GpPoint object
  31901. gpsize Width and Height of the rectangle as a GpSize object
  31902. gdipsize GDI+ Size (integers) structure for the width and height of this rectange
  31903. gdippoint GDI+ Point (integers) structure for the x,y position of this rectange
  31904. gdirect String containing Win32/GDI "RECT" structure (integers, x1,y1,x2,y2)
  31905. *gdiprect_access 
  31906. *gdiprect_assign 
  31907. *gdiprectf_access 
  31908. *gdiprectf_assign 
  31909. *create Set rectangle from individual coordinates
  31910. *x2_access 
  31911. *y2_access 
  31912. *set Set rectangle coordinates from individual components
  31913. *gdippointf_access 
  31914. *gdippointf_assign 
  31915. *gdipsizef_access 
  31916. *gdipsizef_assign 
  31917. *gppoint_access 
  31918. *gppoint_assign 
  31919. *gpsize_access 
  31920. *gpsize_assign 
  31921. *createfrompointsize Set rectangle from separate point and size objects
  31922. *gdipsize_access 
  31923. *gdipsize_assign 
  31924. *gdippoint_access 
  31925. *gdippoint_assign 
  31926. *gdirect_access 
  31927. *gdirect_assign 
  31928. *x2_assign 
  31929. *y2_assign 
  31930. STRING
  31931. LOGICAL
  31932. GdipLoadImageFromFileICM
  31933. gdiplus.dll
  31934. GdipLoadImageFromFile
  31935. gdiplus.dll
  31936. TCFILENAME
  31937. TLUSEEMBEDDEDCOLORMGMT
  31938. GDIPSTATUS
  31939. GDIPLOADIMAGEFROMFILEICM
  31940. GDIPLUS
  31941. DESTROY
  31942. NHANDLE    
  31943. SETHANDLE
  31944. GDIPLOADIMAGEFROMFILE
  31945. STRING
  31946. GDI+ object not created or associated
  31947. GdipSaveImageToFile
  31948. gdiplus.dll
  31949. GlobalFree
  31950. kernel32.dll
  31951. rvEncoderParams[1]b
  31952. TCFILENAME
  31953. TVCLSIDENCODER
  31954. RVENCODERPARAMS
  31955. GDIPHANDLE
  31956. GDIPSTATUS
  31957. LQCLSIDENCODER
  31958. STRINGTOGUID
  31959. GETENCODERCLSID
  31960. GDIPSAVEIMAGETOFILE
  31961. GDIPLUS
  31962. GLOBALFREE
  31963. KERNEL32
  31964. LNENCODERPARAMSPTR
  31965. GETENCODERPARAMSFROMARRAY
  31966. GETENCODERPARAMSFROMSTRING
  31967. INTEGER
  31968. INTEGER
  31969. GDI+ object not created or associated
  31970. GdipGetImageThumbnail
  31971. gdiplus.dll
  31972. gpimage.getthumbnailimage
  31973. GpImage
  31974. TNWIDTH
  31975. TNHEIGHT
  31976. GDIPHANDLE
  31977. GDIPSTATUS
  31978. GDIPGETIMAGETHUMBNAIL
  31979. GDIPLUS
  31980. LNNEWIMAGE
  31981. OBJFACTORYx
  31982. INTEGER
  31983. INTEGER
  31984. GlobalAlloc
  31985. kernel32.dll
  31986. GlobalFree
  31987. kernel32.dll
  31988. lstrlenW
  31989. kernel32.dllQ
  31990. __win32_lstrlenW_ptr
  31991. GdipGetImageEncodersSize
  31992. gdiplus.dll
  31993. GdipGetImageEncoders
  31994. gdiplus.dll
  31995. INTEGER
  31996. INTEGER
  31997. INTEGER
  31998. TVSEARCHVALUE
  31999. GDIPSTATUS
  32000. LNNUMENCODERS
  32001. LNBUFFERSIZE
  32002. GLOBALALLOC
  32003. KERNEL32
  32004. GLOBALFREE
  32005. LSTRLENW
  32006. __WIN32_LSTRLENW_PTR
  32007. GDIPGETIMAGEENCODERSSIZE
  32008. GDIPLUS
  32009. GDIPGETIMAGEENCODERS
  32010. LNBUFFERPTR
  32011. LNSTRINGPTR    
  32012. LIENCODER
  32013. LCFOUNDCLSID
  32014. LCUNICODEMIMETYPE
  32015. LCFORMATID
  32016. INTEGER
  32017. GDI+ object not created or associated
  32018. GdipGetImageBounds
  32019. gdiplus.dll
  32020. gpimage.getbounds
  32021. GpRectangle
  32022. TNUNIT
  32023. GDIPSTATUS
  32024. GDIPHANDLE
  32025. GDIPGETIMAGEBOUNDS
  32026. GDIPLUS
  32027. LCRECTF
  32028. OBJFACTORY
  32029. GDI+ object not created or associated
  32030. GdipImageRotateFlip
  32031. gdiplus.dll
  32032. TNROTATEFLIPTYPE
  32033. GDIPHANDLE
  32034. GDIPSTATUS
  32035. GDIPIMAGEROTATEFLIP
  32036. GDIPLUS
  32037. GDI+ object not created or associated
  32038. GdipGetImageFlags
  32039. gdiplus.dll
  32040. GDIPHANDLE
  32041. GDIPSTATUS
  32042. GDIPGETIMAGEFLAGS
  32043. GDIPLUS
  32044. NVALUE
  32045. Flags
  32046. NEWVAL
  32047. GDI+ object not created or associated
  32048. GdipGetImageHorizontalResolution
  32049. gdiplus.dll
  32050. GDIPHANDLE
  32051. GDIPSTATUS 
  32052. GDIPGETIMAGEHORIZONTALRESOLUTION
  32053. GDIPLUS
  32054. NVALUE.
  32055. HorizontalResolution
  32056. NEWVAL
  32057. GDI+ object not created or associated
  32058. GdipGetImageVerticalResolution
  32059. gdiplus.dll
  32060. GDIPHANDLE
  32061. GDIPSTATUS
  32062. GDIPGETIMAGEVERTICALRESOLUTION
  32063. GDIPLUS
  32064. NVALUE,
  32065. VerticalResolution
  32066. NEWVAL
  32067. GDI+ object not created or associated
  32068. GdipGetImageHeight
  32069. gdiplus.dll
  32070. GDIPHANDLE
  32071. GDIPSTATUS
  32072. GDIPGETIMAGEHEIGHT
  32073. GDIPLUS
  32074. NVALUE%
  32075. ImageHeight
  32076. NEWVAL
  32077. GDI+ object not created or associated
  32078. GdipGetImageWidth
  32079. gdiplus.dll
  32080. GDIPHANDLE
  32081. GDIPSTATUS
  32082. GDIPGETIMAGEWIDTH
  32083. GDIPLUS
  32084. NVALUE$
  32085. ImageWidth
  32086. NEWVAL
  32087. GDI+ object not created or associated
  32088. GdipGetImageRawFormat
  32089. gdiplus.dll
  32090. GDIPHANDLE
  32091. GDIPSTATUS
  32092. GDIPGETIMAGERAWFORMAT
  32093. GDIPLUS
  32094. SGUID#
  32095. RawFormat
  32096. NEWVAL
  32097. GDI+ object not created or associated
  32098. GdipGetImagePixelFormat
  32099. gdiplus.dll
  32100. GDIPHANDLE
  32101. GDIPSTATUS
  32102. GDIPGETIMAGEPIXELFORMAT
  32103. GDIPLUS
  32104. NVALUE%
  32105. PixelFormat
  32106. NEWVALi
  32107. INTEGER
  32108. INTEGER
  32109. GlobalAlloc
  32110. kernel32.dll
  32111. GlobalFree
  32112. kernel32.dll
  32113. lstrlenW
  32114. kernel32.dllQ
  32115. __win32_lstrlenW_ptr
  32116. GdipGetImageDecodersSize
  32117. gdiplus.dll
  32118. GdipGetImageDecoders
  32119. gdiplus.dll
  32120. INTEGER
  32121. INTEGER
  32122. INTEGER
  32123. TVSEARCHVALUE
  32124. GDIPSTATUS
  32125. LNNUMDECODERS
  32126. LNBUFFERSIZE
  32127. GLOBALALLOC
  32128. KERNEL32
  32129. GLOBALFREE
  32130. LSTRLENW
  32131. __WIN32_LSTRLENW_PTR
  32132. GDIPGETIMAGEDECODERSSIZE
  32133. GDIPLUS
  32134. GDIPGETIMAGEDECODERS
  32135. LNBUFFERPTR
  32136. LNSTRINGPTR    
  32137. LIDECODER
  32138. LCFOUNDCLSID
  32139. LCUNICODEMIMETYPE
  32140. LCFORMATIDB
  32141. GDI+ object not created or associated
  32142. GdipGetImageDimension
  32143. gdiplus.dll
  32144. gpimage.physicaldimension_access
  32145. GpSize
  32146. GDIPHANDLE
  32147. GDIPSTATUS
  32148. GDIPGETIMAGEDIMENSION
  32149. GDIPLUS
  32150. LNWIDTH
  32151. LNHEIGHT
  32152. OBJFACTORY+
  32153. PhysicalDimension
  32154. NEWVAL
  32155. Invalid encoder parameter string
  32156. Invalid encoder parameter name "
  32157. LQCLSIDENCODER
  32158. TCENCODERPARAMS
  32159. LNCOUNT
  32160. LAPARAMS
  32161. LNPOS
  32162. LCNAME
  32163. LCVALUE
  32164. LQGUID
  32165. LNTYPE    
  32166. LCSCRATCH
  32167. LIPARAM
  32168. GETENCODERPARAMINFO
  32169. GETENCODERPARAMSFROMARRAYw
  32170. raEncoderParams[1]b
  32171. Invalid encoder parameter name "
  32172. Invalid data type for encoder parameter name
  32173. Invalid encoder parameter value
  32174. GlobalAlloc
  32175. kernel32.dll
  32176. LQCLSIDENCODER
  32177. RAENCODERPARAMS
  32178. LNPARAMCOUNT
  32179. LAPARAM
  32180. LIPARAM
  32181. LCNAME    
  32182. LQPARAMID
  32183. LVVALUE
  32184. LNVALUE
  32185. LNBUFFERSIZE
  32186. LNBUFFERPTR
  32187. GETENCODERPARAMINFO
  32188. GLOBALALLOC
  32189. KERNEL32
  32190. _GDIPLUS_LOC_MALLOCFAIL
  32191. LNARRAYPTR
  32192. LNVALUEPTRI
  32193. QUALITY
  32194. TRANSFORMATION
  32195. LUMINANCETABLE
  32196. CHROMINANCETABLE
  32197. COMPRESSION
  32198. COLORDEPTH
  32199. SAVEFLAG
  32200. TCPARAMNAME
  32201. RQGUID
  32202. RNDATATYPE
  32203. GDI+ object not created or associated
  32204. GdipGetPropertyCount
  32205. gdiplus.dll
  32206. GDIPHANDLE
  32207. GDIPSTATUS
  32208. LNCOUNT
  32209. GDIPGETPROPERTYCOUNT
  32210. GDIPLUS
  32211. GDI+ object not created or associated
  32212. raPropIDList[1]b
  32213. GdipGetPropertyIdList
  32214. gdiplus.dll
  32215. RAPROPIDLIST
  32216. GDIPHANDLE
  32217. GDIPSTATUS
  32218. LNCOUNT
  32219. LCIDLIST
  32220. LNINDEX
  32221. GETPROPERTYCOUNT
  32222. GDIPGETPROPERTYIDLIST
  32223. GDIPLUS
  32224. INTEGER
  32225. GDI+ object not created or associated
  32226. GlobalAlloc
  32227. kernel32.dll
  32228. GlobalFree
  32229. kernel32.dll
  32230. lstrlenA
  32231. kernel32.dllQ
  32232. __win32_lstrlenA_ptr
  32233. GdipGetPropertyItemSize
  32234. gdiplus.dll
  32235. GdipGetPropertyItem
  32236. gdiplus.dll
  32237. INTEGER
  32238. INTEGER
  32239. INTEGER
  32240. Memory allocation failed
  32241. Unknown or invalid property tag type
  32242. TNPROPID
  32243. GDIPHANDLE
  32244. GDIPSTATUS
  32245. GLOBALALLOC
  32246. KERNEL32
  32247. GLOBALFREE
  32248. LSTRLENA
  32249. __WIN32_LSTRLENA_PTR
  32250. GDIPGETPROPERTYITEMSIZE
  32251. GDIPLUS
  32252. GDIPGETPROPERTYITEM
  32253. LNBUFFERSIZE
  32254. LNBUFFERPTR
  32255. LNSTRINGPTR
  32256. LNPROPERTYTAGTYPE
  32257. LNVALUELEN
  32258. LNVALUEPTR
  32259. LVRETURN
  32260. LNNUM
  32261. LNDEN
  32262. GPIMAGE
  32263. GdipCloneImage
  32264. GDIPlus.Dll
  32265. TOIMAGE
  32266. DESTROY
  32267. NHANDLE
  32268. GDIPHANDLE
  32269. GDIPSTATUS
  32270. GDIPCLONEIMAGE
  32271. GDIPLUS
  32272. GdipDisposeImage
  32273. GDIPlus.Dll
  32274. GDIPHANDLE
  32275. GDIPOWNSTHISHANDLE
  32276. GDIPDISPOSEIMAGE
  32277. GDIPLUS
  32278. TVPARAM1
  32279. TVPARAM2
  32280. GDIPSTATUS    
  32281. SETHANDLE
  32282. CREATEFROMFILE
  32283. createfromfile,
  32284. savetofile
  32285. getthumbnailimage
  32286. getencoderclsid
  32287. getbounds0
  32288. rotateflip
  32289. flags_accessi
  32290. flags_assign
  32291. horizontalresolution_access
  32292. horizontalresolution_assign"
  32293. verticalresolution_access\
  32294. verticalresolution_assign
  32295. imageheight_access
  32296. imageheight_assign 
  32297. imagewidth_accessQ
  32298. imagewidth_assign
  32299. rawformat_access
  32300. rawformat_assign
  32301. pixelformat_access,
  32302. pixelformat_assignl
  32303. getdecoderclsid
  32304. physicaldimension_access
  32305. physicaldimension_assign
  32306. getencoderparamsfromstring
  32307. getencoderparamsfromarray
  32308. getencoderparaminfo
  32309. getpropertycount
  32310. getpropertyidlist
  32311. getpropertyitem&6
  32312. clone
  32313. Destroy
  32314. NUMBER
  32315. NUMBER
  32316. GdipCreatePen1
  32317. GDIPlus.Dll
  32318. TVCOLOR
  32319. TNWIDTH
  32320. TNUNIT
  32321. DESTROY
  32322. NHANDLE
  32323. GDIPCREATEPEN1
  32324. GDIPLUS
  32325. GDIPSTATUS
  32326. ARGB    
  32327. SETHANDLEN
  32328. BRUSH
  32329. NUMBER
  32330. NUMBER
  32331. GdipCreatePen2
  32332. GDIPlus.Dll
  32333. TOBRUSH
  32334. TNWIDTH
  32335. TNUNIT
  32336. TOPEN
  32337. GDIPHANDLE
  32338. GDIPSTATUS
  32339. DESTROY
  32340. NHANDLE
  32341. GDIPCREATEPEN2
  32342. GDIPLUS
  32343. GETHANDLE    
  32344. SETHANDLE
  32345. GDI+ object not created or associated
  32346. GdipGetPenColor
  32347. gdiplus.dll
  32348. GDIPHANDLE
  32349. GDIPSTATUS
  32350. GDIPGETPENCOLOR
  32351. GDIPLUS
  32352. NARGB
  32353. GDI+ object not created or associated
  32354. GdipSetPenColor
  32355. gdiplus.dll
  32356. TVCOLOR
  32357. GDIPHANDLE
  32358. GDIPSTATUS
  32359. GDIPSETPENCOLOR
  32360. GDIPLUS
  32361. GDI+ object not created or associated
  32362. GdipGetPenWidth
  32363. gdiplus.dll
  32364. GDIPHANDLE
  32365. GDIPSTATUS
  32366. GDIPGETPENWIDTH
  32367. GDIPLUS
  32368. NWIDTH
  32369. GDI+ object not created or associated
  32370. GdipSetPenWidth
  32371. gdiplus.dll
  32372. TNNEWWIDTH
  32373. GDIPSTATUS
  32374. GDIPHANDLE
  32375. GDIPSETPENWIDTH
  32376. GDIPLUS
  32377. GDI+ object not created or associated
  32378. GdipGetPenFillType
  32379. gdiplus.dll
  32380. GDIPHANDLE
  32381. GDIPSTATUS
  32382. GDIPGETPENFILLTYPE
  32383. GDIPLUS
  32384. NTYPE!
  32385. PenType
  32386. VNEWVAL
  32387. GDI+ object not created or associated
  32388. GdipGetPenMode
  32389. gdiplus.dll
  32390. GDIPHANDLE
  32391. GDIPSTATUS
  32392. GDIPGETPENMODE
  32393. GDIPLUS
  32394. NTYPE
  32395. GDI+ object not created or associated
  32396. GdipSetPenMode
  32397. gdiplus.dll
  32398. TNVALUE
  32399. GDIPHANDLE
  32400. GDIPSTATUS
  32401. GDIPSETPENMODE
  32402. GDIPLUS
  32403. GDI+ object not created or associated
  32404. GdipGetPenMiterLimit
  32405. gdiplus.dll
  32406. GDIPHANDLE
  32407. GDIPSTATUS
  32408. GDIPGETPENMITERLIMIT
  32409. GDIPLUS
  32410. NLIMIT
  32411. GDI+ object not created or associated
  32412. GdipSetPenMiterLimit
  32413. gdiplus.dll
  32414. TNNEWVALUE
  32415. GDIPSTATUS
  32416. GDIPHANDLE
  32417. GDIPSETPENMITERLIMIT
  32418. GDIPLUS
  32419. GDI+ object not created or associated
  32420. GdipGetPenDashCap197819
  32421. gdiplus.dll
  32422. GDIPHANDLE
  32423. GDIPSTATUS
  32424. GDIPGETPENDASHCAP197819
  32425. GDIPLUS
  32426. NTYPE
  32427. GDI+ object not created or associated
  32428. GdipSetPenDashCap197819
  32429. gdiplus.dll
  32430. TNVALUE
  32431. GDIPHANDLE
  32432. GDIPSTATUS
  32433. GDIPSETPENDASHCAP197819
  32434. GDIPLUS
  32435. GDI+ object not created or associated
  32436. GdipGetPenLineJoin
  32437. gdiplus.dll
  32438. GDIPHANDLE
  32439. GDIPSTATUS
  32440. GDIPGETPENLINEJOIN
  32441. GDIPLUS
  32442. NTYPE
  32443. GDI+ object not created or associated
  32444. GdipSetPenLineJoin
  32445. gdiplus.dll
  32446. TNVALUE
  32447. GDIPHANDLE
  32448. GDIPSTATUS
  32449. GDIPSETPENLINEJOIN
  32450. GDIPLUS
  32451. GDI+ object not created or associated
  32452. GdipGetPenStartCap
  32453. gdiplus.dll
  32454. GDIPHANDLE
  32455. GDIPSTATUS
  32456. GDIPGETPENSTARTCAP
  32457. GDIPLUS
  32458. NTYPE
  32459. GDI+ object not created or associated
  32460. GdipSetPenStartCap
  32461. gdiplus.dll
  32462. TNVALUE
  32463. GDIPHANDLE
  32464. GDIPSTATUS
  32465. GDIPSETPENSTARTCAP
  32466. GDIPLUS
  32467. GDI+ object not created or associated
  32468. GdipGetPenEndCap
  32469. gdiplus.dll
  32470. GDIPHANDLE
  32471. GDIPSTATUS
  32472. GDIPGETPENENDCAP
  32473. GDIPLUS
  32474. NTYPE
  32475. GDI+ object not created or associated
  32476. GdipSetPenEndCap
  32477. gdiplus.dll
  32478. TNVALUE
  32479. GDIPHANDLE
  32480. GDIPSTATUS
  32481. GDIPSETPENENDCAP
  32482. GDIPLUS
  32483. GDI+ object not created or associated
  32484. GdipGetPenDashStyle
  32485. gdiplus.dll
  32486. GDIPHANDLE
  32487. GDIPSTATUS
  32488. GDIPGETPENDASHSTYLE
  32489. GDIPLUS
  32490. NTYPE
  32491. GDI+ object not created or associated
  32492. GdipSetPenDashStyle
  32493. gdiplus.dll
  32494. TNVALUE
  32495. GDIPHANDLE
  32496. GDIPSTATUS
  32497. GDIPSETPENDASHSTYLE
  32498. GDIPLUS
  32499. GDI+ object not created or associated
  32500. GdipGetPenDashOffset
  32501. gdiplus.dll
  32502. GDIPHANDLE
  32503. GDIPSTATUS
  32504. GDIPGETPENDASHOFFSET
  32505. GDIPLUS
  32506. NOFFSET
  32507. GDI+ object not created or associated
  32508. GdipSetPenDashOffset
  32509. gdiplus.dll
  32510. TNNEWVALUE
  32511. GDIPSTATUS
  32512. GDIPHANDLE
  32513. GDIPSETPENDASHOFFSET
  32514. GDIPLUS
  32515. GDI+ object not created or associated
  32516. GdipGetPenUnit
  32517. gdiplus.dll
  32518. GDIPHANDLE
  32519. GDIPSTATUS
  32520. GDIPGETPENUNIT
  32521. GDIPLUS
  32522. NTYPE
  32523. GDI+ object not created or associated
  32524. GdipSetPenUnit
  32525. gdiplus.dll
  32526. TNVALUE
  32527. GDIPHANDLE
  32528. GDIPSTATUS
  32529. GDIPSETPENUNIT
  32530. GDIPLUS
  32531. GPPEN
  32532. GdipClonePen
  32533. GDIPlus.Dll
  32534. TOPEN
  32535. DESTROY
  32536. NHANDLE
  32537. GDIPHANDLE
  32538. GDIPSTATUS
  32539. GDIPCLONEPEN
  32540. GDIPLUS
  32541. NUMBER
  32542. NUMBER
  32543. TVCOLOR
  32544. TNWIDTH
  32545. TNUNIT
  32546. CREATEx
  32547. GdipDeletePen
  32548. GDIPlus.Dll
  32549. GDIPHANDLE
  32550. GDIPOWNSTHISHANDLE
  32551. GDIPDELETEPEN
  32552. GDIPLUS
  32553. create,
  32554. createfrombrush
  32555. pencolor_access
  32556. pencolor_assign
  32557. penwidth_access:
  32558. penwidth_assignr
  32559. pentype_access
  32560. pentype_assign
  32561. alignment_access
  32562. alignment_assignI
  32563. miterlimit_access
  32564. miterlimit_assign
  32565. dashcap_access
  32566. dashcap_assign]
  32567. linejoin_access
  32568. linejoin_assign
  32569. startcap_access0
  32570. startcap_assigne
  32571. endcap_access
  32572. endcap_assign
  32573. dashstyle_access&
  32574. dashstyle_assign]
  32575. dashoffset_access
  32576. dashoffset_assign
  32577. penunit_access=
  32578. penunit_assignj
  32579. clone
  32580. Destroy
  32581. #PROCEDURE foxrgb_access
  32582. return rgb(This.Red,This.Green,This.Blue)
  32583. ENDPROC
  32584. PROCEDURE foxrgb_assign
  32585. LPARAMETERS tnRGB
  32586. #if GDIPLUS_CHECK_PARAMS
  32587. if !(vartype(m.tnRGB)=='N')
  32588.     error 11 && Function argument
  32589. endif
  32590. #endif
  32591. This.ARGB = bitor( 0xFF000000 ;
  32592.     , bitlshift(bitand(m.tnRGB,0xFF),16) ;
  32593.     , bitand(m.tnRGB,0x0000FF00) ;
  32594.     , bitrshift(bitand(m.tnRGB,0x00FF0000),16) )
  32595. ENDPROC
  32596. PROCEDURE red_access
  32597. RETURN bitand(bitrshift(This.ARGB,16),0xFF)
  32598. ENDPROC
  32599. PROCEDURE red_assign
  32600. LPARAMETERS tnNewVal
  32601. #if GDIPLUS_CHECK_PARAMS
  32602. if !(vartype(m.tnNewVal)='N' and between(m.tnNewVal,0,255))
  32603.     error 11 && Function argument
  32604. endif
  32605. #endif
  32606. This.ARGB = bitor( bitand(This.ARGB,0xFF00FFFF), bitlshift(m.tnNewVal,16))
  32607. ENDPROC
  32608. PROCEDURE green_access
  32609. RETURN bitand(bitrshift(This.ARGB,8),0xFF)
  32610. ENDPROC
  32611. PROCEDURE green_assign
  32612. LPARAMETERS tnNewVal
  32613. #if GDIPLUS_CHECK_PARAMS
  32614. if !(vartype(m.tnNewVal)='N' and between(m.tnNewVal,0,255))
  32615.     error 11 && Function argument
  32616. endif
  32617. #endif
  32618. This.ARGB = bitor( bitand(This.ARGB,0xFF00FFFF), bitlshift(m.tnNewVal,8))
  32619. ENDPROC
  32620. PROCEDURE blue_access
  32621. RETURN bitand(This.ARGB,0xFF)
  32622. ENDPROC
  32623. PROCEDURE blue_assign
  32624. LPARAMETERS tnNewVal
  32625. #if GDIPLUS_CHECK_PARAMS
  32626. if !(vartype(m.tnNewVal)='N' and between(m.tnNewVal,0,255))
  32627.     error 11 && Function argument
  32628. endif
  32629. #endif
  32630. This.ARGB = bitor( bitand(This.ARGB,0xFFFFFF00), m.tnNewVal)
  32631. ENDPROC
  32632. PROCEDURE alpha_access
  32633. RETURN bitand(bitrshift(This.ARGB,24),0xFF)
  32634. ENDPROC
  32635. PROCEDURE alpha_assign
  32636. LPARAMETERS tnNewVal
  32637. #if GDIPLUS_CHECK_PARAMS
  32638. if !(vartype(m.tnNewVal)='N' and between(m.tnNewVal,0,255))
  32639.     error 11 && Function argument
  32640. endif
  32641. #endif
  32642. This.ARGB = bitor( bitand(This.ARGB,0xFF00FFFF), bitlshift(m.tnNewVal,24))
  32643. ENDPROC
  32644. PROCEDURE set
  32645. lparameters tnRed, tnGreen, tnBlue, tnAlpha
  32646. #if GDIPLUS_CHECK_PARAMS
  32647. if !(vartype(m.tnRed)='N' and between(m.tnRed,0,255) ;
  32648.     and vartype(m.tnGreen)='N' and between(m.tnGreen,0,255) ;
  32649.     and vartype(m.tnBlue)='N' and between(m.tnBlue,0,255) ;
  32650.     and vartype(m.tnAlpha)='L' or (vartype(m.tnAlpha)='N' and between(m.tnAlpha,0,255)))
  32651.     error 11 && Function argument
  32652. endif
  32653. #endif
  32654. This.ARGB = ;
  32655.     iif(vartype(m.tnAlpha)='N',0x1000000*m.tnAlpha,0xFF000000) ;
  32656.     + 0x10000*m.tnRed ;
  32657.     + 0x100 * m.tnGreen ;
  32658.     + m.tnBlue
  32659. ENDPROC
  32660. PROCEDURE clone
  32661. lparameters toOtherColor as GpColor
  32662. #if GDIPLUS_CHECK_PARAMS
  32663. if !(vartype(m.toOtherColor)='O' and pemstatus(toOtherColor,'argb',5))
  32664.     error 11 && Function argument
  32665.     return .F.
  32666. endif
  32667. #endif
  32668. This.ARGB = m.toOtherColor.ARGB
  32669. ENDPROC
  32670. PROCEDURE Init
  32671. lparameters tnRedOrARGB as Integer, tnGreen as Integer, tnBlue as Integer, tnAlpha as integer
  32672. #if GDIPLUS_CHECK_PARAMS
  32673. if !(inlist(pcount(),0,1,3,4))
  32674.     error 11 && Function argument
  32675.     return .F.
  32676. endif
  32677. #endif
  32678. if not dodefault()
  32679.     return .F.
  32680. endif
  32681. do case
  32682. case pcount()=1
  32683.     #if GDIPLUS_CHECK_PARAMS
  32684.     if !(vartype(m.tnRedOrARGB)='N')
  32685.         error 11 && Function argument
  32686.     endif
  32687.     #endif
  32688.     This.ARGB = int(m.tnRedOrARGB)
  32689. case pcount()>=3
  32690.     This.Set(tnRedOrARGB, tnGreen, tnBlue, m.tnAlpha )
  32691. endcase
  32692. ENDPROC
  32693. PROCEDURE create
  32694. lparameters tnStyle, tvForeColor, tvBackColor
  32695. * tnStyle must be HatchStyle constant
  32696. #if GDIPLUS_CHECK_PARAMS
  32697. if !(vartype(m.tnStyle)='N')
  32698.     error 11 && function argument
  32699.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  32700.     return .F.
  32701. endif
  32702. #endif
  32703. this.Destroy()
  32704. local nHandle
  32705. nHandle = 0
  32706. Declare Integer GdipCreateHatchBrush In GDIPlus.Dll ;
  32707.     integer nHatchStyle, integer nForeColor, integer nBackColor, Integer @nBrush
  32708. This.gdipStatus = GdipCreateHatchBrush( ;
  32709.     m.tnStyle ;
  32710. ,    iif(vartype(m.tvForeColor)='O',m.tvForeColor.ARGB,iif(vartype(m.tvForeColor)='N',m.tvForeColor,0xFF000000)) ;
  32711. ,    iif(vartype(m.tvBackColor)='O',m.tvBackColor.ARGB,iif(vartype(m.tvBackColor)='N',m.tvBackColor,0xFFFFFFFF)) ;
  32712. ,    @nHandle)
  32713. This.SetHandle(m.nHandle,.T.)
  32714. return GDIPLUS_STATUS_OK == This.gdipStatus
  32715. ENDPROC
  32716. PROCEDURE foregroundcolor_access
  32717. #if GDIPLUS_CHECK_OBJECT
  32718. if This.gdipHandle==0
  32719.     error _GDIPLUS_NOGDIPOBJECT_LOC
  32720.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  32721.     return cast(null as I)
  32722. endif
  32723. #endif
  32724. declare integer GdipGetHatchForegroundColor in gdiplus.dll ;
  32725.     integer, integer @
  32726. local nARGB
  32727. nARGB = 0
  32728. This.gdipStatus = GdipGetHatchForegroundColor( This.gdipHandle, @nARGB )
  32729. return iif(This.gdipStatus==GDIPLUS_STATUS_OK,m.nARGB,cast(null as I))
  32730. ENDPROC
  32731. PROCEDURE foregroundcolor_assign
  32732. LPARAMETERS tvColor
  32733. error 1743, 'ForegroundColor'
  32734. ENDPROC
  32735. PROCEDURE backgroundcolor_access
  32736. #if GDIPLUS_CHECK_OBJECT
  32737. if This.gdipHandle==0
  32738.     error _GDIPLUS_NOGDIPOBJECT_LOC
  32739.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  32740.     return cast(null as I)
  32741. endif
  32742. #endif
  32743. declare integer GdipGetHatchBackgroundColor in gdiplus.dll ;
  32744.     integer, integer @
  32745. local nARGB
  32746. nARGB = 0
  32747. This.gdipStatus = GdipGetHatchBackgroundColor( This.gdipHandle, @nARGB )
  32748. return iif(This.gdipStatus==GDIPLUS_STATUS_OK,m.nARGB,cast(null as I))
  32749. ENDPROC
  32750. PROCEDURE backgroundcolor_assign
  32751. LPARAMETERS tvColor
  32752. error 1743, 'BackgroundColor'
  32753. ENDPROC
  32754. PROCEDURE hatchstyle_access
  32755. #if GDIPLUS_CHECK_OBJECT
  32756. if This.gdipHandle==0
  32757.     error _GDIPLUS_NOGDIPOBJECT_LOC
  32758.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  32759.     return cast(null as I)
  32760. endif
  32761. #endif
  32762. declare integer GdipGetHatchStyle in gdiplus.dll ;
  32763.     integer, integer @
  32764. local nHatchStyle
  32765. nHatchStyle = 0
  32766. This.gdipStatus = GdipGetHatchStyle( This.gdipHandle, @nHatchStyle )
  32767. return iif(This.gdipStatus==GDIPLUS_STATUS_OK,m.nHatchStyle,cast(null as I))
  32768. ENDPROC
  32769. PROCEDURE hatchstyle_assign
  32770. LPARAMETERS vNewVal
  32771. error 1743, 'HatchStyle'
  32772. ENDPROC
  32773. PROCEDURE Init
  32774. lparameters tnStyle, tvForeColor, tvBackColor
  32775. if not dodefault()
  32776.     return .F.
  32777. endif
  32778. if pcount()>0
  32779.     return This.Create(m.tnStyle, m.tvForeColor, m.tvBackColor)
  32780. endif
  32781. ENDPROC
  32782. _flags Attribute flags for this image
  32783. horizontalresolution Horizontal resolution in pixels-per-inch
  32784. verticalresolution Vertical resolution in pixels-per-inch
  32785. imageheight Height of this image
  32786. imagewidth Width of this image
  32787. rawformat Get the format of this image (as a GUID)
  32788. pixelformat Pixel format - see GP_PIXELFORMAT constants
  32789. physicaldimension Get the width and height of this object (returned as a GpSize)
  32790. *createfromfile Create Image object from a file on disk
  32791. *savetofile Save image to a disk file, using specified encoder
  32792. *getthumbnailimage Create a thumbnail at the specified size, return as new GpImage object
  32793. *getencoderclsid Get the CLSID for the Encoder for a specific image format (eg "image/jpeg")
  32794. *getbounds Get a bounding rectangle in the specified units
  32795. *rotateflip Rotate, flip (or both) this image
  32796. *flags_access 
  32797. *flags_assign 
  32798. *horizontalresolution_access 
  32799. *horizontalresolution_assign 
  32800. *verticalresolution_access 
  32801. *verticalresolution_assign 
  32802. *imageheight_access 
  32803. *imageheight_assign 
  32804. *imagewidth_access 
  32805. *imagewidth_assign 
  32806. *rawformat_access 
  32807. *rawformat_assign 
  32808. *pixelformat_access 
  32809. *pixelformat_assign 
  32810. *getdecoderclsid Get the CLSID for the Decoder for a specific image format (eg "image/jpeg")
  32811. *physicaldimension_access 
  32812. *physicaldimension_assign 
  32813. *getencoderparamsfromstring Internal function, parse string into EncoderParameters array
  32814. *getencoderparamsfromarray Internal function, convert array into EncoderParameters array
  32815. *getencoderparaminfo Internal function, get inforrmation about an encoder parameter, given human-facing name
  32816. *getpropertycount Gets the number of properties (pieces of metadata) stored in this Image object
  32817. *getpropertyidlist Gets an array of the property identifiers used in the metadata of this Image object.
  32818. *getpropertyitem Gets a specified property item (piece of metadata) from this Image object
  32819. _memberdata = 
  32820.     1647<VFPData><memberdata name="createfromfile" type="method" display="CreateFromFile" favorites="True"/><memberdata name="flags" type="property" display="Flags" favorites="True"/><memberdata name="getbounds" type="method" display="GetBounds" favorites="True"/><memberdata name="getdecoderclsid" type="method" display="GetDecoderCLSID" favorites="True"/><memberdata name="getencoderclsid" type="method" display="GetEncoderCLSID" favorites="True"/><memberdata name="getthumbnailimage" type="method" display="GetThumbnailImage" favorites="True"/><memberdata name="horizontalresolution" type="property" display="HorizontalResolution" favorites="True"/><memberdata name="imageheight" type="property" display="ImageHeight" favorites="True"/><memberdata name="imagewidth" type="property" display="ImageWidth" favorites="True"/><memberdata name="physicaldimension" type="property" display="PhysicalDimension" favorites="True"/><memberdata name="pixelformat" type="property" display="PixelFormat" favorites="True"/><memberdata name="rawformat" type="property" display="RawFormat" favorites="True"/><memberdata name="savetofile" type="method" display="SaveToFile" favorites="True"/><memberdata name="verticalresolution" type="property" display="VerticalResolution" favorites="True"/><memberdata name="getpropertycount" type="method" display="GetPropertyCount" favorites="True"/><memberdata name="getpropertyidlist" type="method" display="GetPropertyIDList" favorites="True"/><memberdata name="getpropertyitem" type="method" display="GetPropertyItem" favorites="True"/><memberdata name="rotateflip" type="method" display="RotateFlip" favorites="True"/></VFPData>
  32821. Name = "gpimage"
  32822. PROCEDURE create
  32823. lparameters tvColor, tnWidth as Number, tnUnit as Number
  32824. * tvColor may be ARGB or a Color object
  32825. this.Destroy()
  32826. local nHandle
  32827. nHandle = 0
  32828. Declare Integer GdipCreatePen1 In GDIPlus.Dll ;
  32829.     integer nColor, single fWidth,Integer nUnit, Integer @nPen
  32830. This.GdipStatus = GdipCreatePen1( ;
  32831.     icase(vartype(m.tvColor)='O',m.tvColor.ARGB,vartype(m.tvColor)='N',m.tvColor,0xFF000000) ;
  32832. ,    iif(vartype(m.tnWidth)='N',m.tnWidth,1.0) ;
  32833. ,    iif(vartype(m.tnUnit)='N',m.tnUnit,0) ;
  32834. ,    @nHandle)
  32835. This.SetHandle(m.nHandle,.T.)
  32836. return GDIPLUS_STATUS_OK == This.GdipStatus
  32837. ENDPROC
  32838. PROCEDURE createfrombrush
  32839. lparameters toBrush as Brush, tnWidth as Number, tnUnit as Number
  32840. #if GDIPLUS_CHECK_PARAMS
  32841. if !(vartype(m.toBrush)='O' and m.toPen.gdipHandle<>0)
  32842.     error 11 && Function argument
  32843.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  32844.     return .F.
  32845. endif
  32846. #endif
  32847. this.Destroy()
  32848. local nHandle
  32849. nHandle = 0
  32850. Declare Integer GdipCreatePen2 In GDIPlus.Dll ;
  32851.     integer nBrush, single fWidth,Integer nUnit, Integer @nPen
  32852. This.GdipStatus = GdipCreatePen2( ;
  32853.     m.toBrush.GetHandle() ;
  32854. ,    iif(vartype(m.tnWidth)='N',m.tnWidth,1.0) ;
  32855. ,    iif(vartype(m.tnUnit)='N',m.tnUnit,0) ;
  32856. ,    @nHandle)
  32857. This.SetHandle(m.nHandle,.T.)
  32858. return GDIPLUS_STATUS_OK == This.GdipStatus
  32859. ENDPROC
  32860. PROCEDURE pencolor_access
  32861. #if GDIPLUS_CHECK_OBJECT
  32862. if This.gdipHandle==0
  32863.     error _GDIPLUS_NOGDIPOBJECT_LOC
  32864.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  32865.     return cast(null as I)
  32866. endif
  32867. #endif
  32868. declare Integer GdipGetPenColor in gdiplus.dll ;
  32869.     integer nPen, integer @ nARGB
  32870. local nARGB
  32871. nARGB = 0
  32872. This.gdipStatus = GdipGetPenColor( This.gdipHandle, @nARGB )
  32873. * if !(GDIPLUS_STATUS_OK==This.gdipStatus) then error?
  32874. return iif(This.gdipStatus==GDIPLUS_STATUS_OK,m.nARGB,cast(null as I))
  32875. ENDPROC
  32876. PROCEDURE pencolor_assign
  32877. LPARAMETERS tvColor
  32878. #if GDIPLUS_CHECK_OBJECT
  32879. if This.gdipHandle==0
  32880.     error _GDIPLUS_NOGDIPOBJECT_LOC
  32881.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  32882.     return .F.
  32883. endif
  32884. #endif
  32885. #if GDIPLUS_CHECK_PARAMS
  32886. if !(vartype(m.tvColor)$'ON')
  32887.     error 11 && Function argument
  32888.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  32889.     return .F.
  32890. endif
  32891. #endif
  32892. declare Integer GdipSetPenColor in gdiplus.dll ;
  32893.     integer nPen, integer nColor
  32894. This.gdipStatus = GdipSetPenColor( This.gdipHandle,iif(vartype(m.tvColor)='O',m.tvColor.ARGB,m.tvColor))
  32895. return GDIPLUS_STATUS_OK == This.gdipStatus
  32896. ENDPROC
  32897. PROCEDURE penwidth_access
  32898. #if GDIPLUS_CHECK_OBJECT
  32899. if This.gdipHandle==0
  32900.     error _GDIPLUS_NOGDIPOBJECT_LOC
  32901.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  32902.     return cast(null as B)
  32903. endif
  32904. #endif
  32905. declare Integer GdipGetPenWidth in gdiplus.dll ;
  32906.     integer nPen, single @ fWidth
  32907. local nWidth
  32908. nWidth = 0.0
  32909. This.gdipStatus = GdipGetPenWidth( This.gdipHandle, @nWidth )
  32910. * if !(GDIPLUS_STATUS_OK==This.gdipStatus) then error?
  32911. return iif(This.gdipStatus==GDIPLUS_STATUS_OK,m.nWidth,cast(null as B))
  32912. ENDPROC
  32913. PROCEDURE penwidth_assign
  32914. LPARAMETERS tnNewWidth
  32915. #if GDIPLUS_CHECK_PARAMS
  32916. if !(vartype(m.tnNewWidth)='N')
  32917.     error 11 && Function argument
  32918.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  32919.     return .F.
  32920. endif
  32921. #endif
  32922. #if GDIPLUS_CHECK_OBJECT
  32923. if This.gdipHandle==0
  32924.     error _GDIPLUS_NOGDIPOBJECT_LOC
  32925.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  32926.     return .F.
  32927. endif
  32928. #endif
  32929. declare Integer GdipSetPenWidth in gdiplus.dll ;
  32930.     integer nPen, single fWidth
  32931. This.gdipStatus = GdipSetPenWidth( This.gdipHandle,m.tnNewWidth)
  32932. return GDIPLUS_STATUS_OK == This.gdipStatus
  32933. ENDPROC
  32934. PROCEDURE pentype_access
  32935. #if GDIPLUS_CHECK_OBJECT
  32936. if This.gdipHandle==0
  32937.     error _GDIPLUS_NOGDIPOBJECT_LOC
  32938.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  32939.     return cast(null as I)
  32940. endif
  32941. #endif
  32942. declare Integer GdipGetPenFillType in gdiplus.dll ;
  32943.     integer nPen, integer @ nType
  32944. local nType
  32945. nType = 0
  32946. This.gdipStatus = GdipGetPenFillType( This.gdipHandle, @nType)
  32947. * if !(GDIPLUS_STATUS_OK==This.gdipStatus) then error?
  32948. return iif(This.gdipStatus==GDIPLUS_STATUS_OK,m.nType,cast(null as I))
  32949. ENDPROC
  32950. PROCEDURE pentype_assign
  32951. LPARAMETERS vNewVal
  32952. error 1743, 'PenType'
  32953. ENDPROC
  32954. PROCEDURE alignment_access
  32955. #if GDIPLUS_CHECK_OBJECT
  32956. if This.gdipHandle==0
  32957.     error _GDIPLUS_NOGDIPOBJECT_LOC
  32958.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  32959.     return cast(null as I)
  32960. endif
  32961. #endif
  32962. declare Integer GdipGetPenMode in gdiplus.dll ;
  32963.     integer nPen, integer @ nType
  32964. local nType
  32965. nType = 0
  32966. This.gdipStatus = GdipGetPenMode( This.gdipHandle, @nType)
  32967. * if !(GDIPLUS_STATUS_OK==This.gdipStatus) then error?
  32968. return iif(This.gdipStatus==GDIPLUS_STATUS_OK,m.nType,cast(null as I))
  32969. ENDPROC
  32970. PROCEDURE alignment_assign
  32971. LPARAMETERS tnValue
  32972. #if GDIPLUS_CHECK_OBJECT
  32973. if This.gdipHandle==0
  32974.     error _GDIPLUS_NOGDIPOBJECT_LOC
  32975.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  32976.     return .F.
  32977. endif
  32978. #endif
  32979. #if GDIPLUS_CHECK_PARAMS
  32980. if !(vartype(m.tnValue)='N')
  32981.     error 11 && Function argument
  32982.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  32983.     return .F.
  32984. endif
  32985. #endif
  32986. declare Integer GdipSetPenMode in gdiplus.dll ;
  32987.     integer nPen, integer nValue
  32988. This.gdipStatus = GdipSetPenMode( This.gdipHandle,m.tnValue)
  32989. return GDIPLUS_STATUS_OK == This.gdipStatus
  32990. ENDPROC
  32991. PROCEDURE miterlimit_access
  32992. #if GDIPLUS_CHECK_OBJECT
  32993. if This.gdipHandle==0
  32994.     error _GDIPLUS_NOGDIPOBJECT_LOC
  32995.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  32996.     return cast(null as B)
  32997. endif
  32998. #endif
  32999. declare Integer GdipGetPenMiterLimit in gdiplus.dll ;
  33000.     integer nPen, single @ nLimit
  33001. local nLimit
  33002. nLimit = 0.0
  33003. This.gdipStatus = GdipGetPenMiterLimit( This.gdipHandle, @nLimit)
  33004. * if !(GDIPLUS_STATUS_OK==This.gdipStatus) then error?
  33005. return iif(This.gdipStatus==GDIPLUS_STATUS_OK,m.nLimit,cast(null as B))
  33006. ENDPROC
  33007. PROCEDURE miterlimit_assign
  33008. LPARAMETERS tnNewValue
  33009. #if GDIPLUS_CHECK_PARAMS
  33010. if !(vartype(m.tnNewValue)='N')
  33011.     error 11 && Function argument
  33012.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  33013.     return .F.
  33014. endif
  33015. #endif
  33016. #if GDIPLUS_CHECK_OBJECT
  33017. if This.gdipHandle==0
  33018.     error _GDIPLUS_NOGDIPOBJECT_LOC
  33019.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  33020.     return .F.
  33021. endif
  33022. #endif
  33023. declare Integer GdipSetPenMiterLimit in gdiplus.dll ;
  33024.     integer nPen, single nValue
  33025. This.gdipStatus = GdipSetPenMiterLimit( This.gdipHandle,m.tnNewValue)
  33026. return GDIPLUS_STATUS_OK == This.gdipStatus
  33027. ENDPROC
  33028. PROCEDURE dashcap_access
  33029. #if GDIPLUS_CHECK_OBJECT
  33030. if This.gdipHandle==0
  33031.     error _GDIPLUS_NOGDIPOBJECT_LOC
  33032.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  33033.     return cast(null as I)
  33034. endif
  33035. #endif
  33036. declare Integer GdipGetPenDashCap197819 in gdiplus.dll ;
  33037.     integer nPen, integer @ nType
  33038. local nType
  33039. nType = 0
  33040. This.gdipStatus = GdipGetPenDashCap197819( This.gdipHandle, @nType)
  33041. * if !(GDIPLUS_STATUS_OK==This.gdipStatus) then error?
  33042. return iif(This.gdipStatus==GDIPLUS_STATUS_OK,m.nType,cast(null as I))
  33043. ENDPROC
  33044. PROCEDURE dashcap_assign
  33045. LPARAMETERS tnValue
  33046. #if GDIPLUS_CHECK_OBJECT
  33047. if This.gdipHandle==0
  33048.     error _GDIPLUS_NOGDIPOBJECT_LOC
  33049.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  33050.     return .F.
  33051. endif
  33052. #endif
  33053. #if GDIPLUS_CHECK_PARAMS
  33054. if !(vartype(m.tnValue)='N')
  33055.     error 11 && Function argument
  33056.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  33057.     return .F.
  33058. endif
  33059. #endif
  33060. declare Integer GdipSetPenDashCap197819 in gdiplus.dll ;
  33061.     integer nPen, integer nValue
  33062. This.gdipStatus = GdipSetPenDashCap197819( This.gdipHandle,m.tnValue)
  33063. return GDIPLUS_STATUS_OK == This.gdipStatus
  33064. ENDPROC
  33065. PROCEDURE linejoin_access
  33066. #if GDIPLUS_CHECK_OBJECT
  33067. if This.gdipHandle==0
  33068.     error _GDIPLUS_NOGDIPOBJECT_LOC
  33069.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  33070.     return cast(null as I)
  33071. endif
  33072. #endif
  33073. declare Integer GdipGetPenLineJoin in gdiplus.dll ;
  33074.     integer nPen, integer @ nType
  33075. local nType
  33076. nType = 0
  33077. This.gdipStatus = GdipGetPenLineJoin( This.gdipHandle, @nType)
  33078. * if !(GDIPLUS_STATUS_OK==This.gdipStatus) then error?
  33079. return iif(This.gdipStatus==GDIPLUS_STATUS_OK,m.nType,cast(null as I))
  33080. ENDPROC
  33081. PROCEDURE linejoin_assign
  33082. LPARAMETERS tnValue
  33083. #if GDIPLUS_CHECK_OBJECT
  33084. if This.gdipHandle==0
  33085.     error _GDIPLUS_NOGDIPOBJECT_LOC
  33086.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  33087.     return .F.
  33088. endif
  33089. #endif
  33090. #if GDIPLUS_CHECK_PARAMS
  33091. if !(vartype(m.tnValue)='N')
  33092.     error 11 && Function argument
  33093.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  33094.     return .F.
  33095. endif
  33096. #endif
  33097. declare Integer GdipSetPenLineJoin in gdiplus.dll ;
  33098.     integer nPen, integer nValue
  33099. This.gdipStatus = GdipSetPenLineJoin( This.gdipHandle,m.tnValue)
  33100. return GDIPLUS_STATUS_OK == This.gdipStatus
  33101. ENDPROC
  33102. PROCEDURE startcap_access
  33103. #if GDIPLUS_CHECK_OBJECT
  33104. if This.gdipHandle==0
  33105.     error _GDIPLUS_NOGDIPOBJECT_LOC
  33106.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  33107.     return cast(null as I)
  33108. endif
  33109. #endif
  33110. declare Integer GdipGetPenStartCap in gdiplus.dll ;
  33111.     integer nPen, integer @ nType
  33112. local nType
  33113. nType = 0
  33114. This.gdipStatus = GdipGetPenStartCap( This.gdipHandle, @nType)
  33115. * if !(GDIPLUS_STATUS_OK==This.gdipStatus) then error?
  33116. return iif(This.gdipStatus==GDIPLUS_STATUS_OK,m.nType,cast(null as I))
  33117. ENDPROC
  33118. PROCEDURE startcap_assign
  33119. LPARAMETERS tnValue
  33120. #if GDIPLUS_CHECK_OBJECT
  33121. if This.gdipHandle==0
  33122.     error _GDIPLUS_NOGDIPOBJECT_LOC
  33123.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  33124.     return .F.
  33125. endif
  33126. #endif
  33127. #if GDIPLUS_CHECK_PARAMS
  33128. if !(vartype(m.tnValue)='N')
  33129.     error 11 && Function argument
  33130.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  33131.     return .F.
  33132. endif
  33133. #endif
  33134. declare Integer GdipSetPenStartCap in gdiplus.dll ;
  33135.     integer nPen, integer nValue
  33136. This.gdipStatus = GdipSetPenStartCap( This.gdipHandle,m.tnValue)
  33137. return GDIPLUS_STATUS_OK == This.gdipStatus
  33138. ENDPROC
  33139. PROCEDURE endcap_access
  33140. #if GDIPLUS_CHECK_OBJECT
  33141. if This.gdipHandle==0
  33142.     error _GDIPLUS_NOGDIPOBJECT_LOC
  33143.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  33144.     return cast(null as I)
  33145. endif
  33146. #endif
  33147. declare Integer GdipGetPenEndCap in gdiplus.dll ;
  33148.     integer nPen, integer @ nType
  33149. local nType
  33150. nType = 0
  33151. This.gdipStatus = GdipGetPenEndCap( This.gdipHandle, @nType)
  33152. * if !(GDIPLUS_STATUS_OK==This.gdipStatus) then error?
  33153. return iif(This.gdipStatus==GDIPLUS_STATUS_OK,m.nType,cast(null as I))
  33154. ENDPROC
  33155. PROCEDURE endcap_assign
  33156. LPARAMETERS tnValue
  33157. #if GDIPLUS_CHECK_OBJECT
  33158. if This.gdipHandle==0
  33159.     error _GDIPLUS_NOGDIPOBJECT_LOC
  33160.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  33161.     return .F.
  33162. endif
  33163. #endif
  33164. #if GDIPLUS_CHECK_PARAMS
  33165. if !(vartype(m.tnValue)='N')
  33166.     error 11 && Function argument
  33167.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  33168.     return .F.
  33169. endif
  33170. #endif
  33171. declare Integer GdipSetPenEndCap in gdiplus.dll ;
  33172.     integer nPen, integer nValue
  33173. This.gdipStatus = GdipSetPenEndCap( This.gdipHandle,m.tnValue)
  33174. return GDIPLUS_STATUS_OK == This.gdipStatus
  33175. ENDPROC
  33176. PROCEDURE dashstyle_access
  33177. #if GDIPLUS_CHECK_OBJECT
  33178. if This.gdipHandle==0
  33179.     error _GDIPLUS_NOGDIPOBJECT_LOC
  33180.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  33181.     return cast(null as I)
  33182. endif
  33183. #endif
  33184. declare Integer GdipGetPenDashStyle in gdiplus.dll ;
  33185.     integer nPen, integer @ nType
  33186. local nType
  33187. nType = 0
  33188. This.gdipStatus = GdipGetPenDashStyle( This.gdipHandle, @nType)
  33189. * if !(GDIPLUS_STATUS_OK==This.gdipStatus) then error?
  33190. return iif(This.gdipStatus==GDIPLUS_STATUS_OK,m.nType,cast(null as I))
  33191. ENDPROC
  33192. PROCEDURE dashstyle_assign
  33193. LPARAMETERS tnValue
  33194. #if GDIPLUS_CHECK_OBJECT
  33195. if This.gdipHandle==0
  33196.     error _GDIPLUS_NOGDIPOBJECT_LOC
  33197.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  33198.     return .F.
  33199. endif
  33200. #endif
  33201. #if GDIPLUS_CHECK_PARAMS
  33202. if !(vartype(m.tnValue)='N')
  33203.     error 11 && Function argument
  33204.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  33205.     return .F.
  33206. endif
  33207. #endif
  33208. declare Integer GdipSetPenDashStyle in gdiplus.dll ;
  33209.     integer nPen, integer nValue
  33210. This.gdipStatus = GdipSetPenDashStyle( This.gdipHandle,m.tnValue)
  33211. return GDIPLUS_STATUS_OK == This.gdipStatus
  33212. ENDPROC
  33213. PROCEDURE dashoffset_access
  33214. #if GDIPLUS_CHECK_OBJECT
  33215. if This.gdipHandle==0
  33216.     error _GDIPLUS_NOGDIPOBJECT_LOC
  33217.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  33218.     return cast(null as B)
  33219. endif
  33220. #endif
  33221. declare Integer GdipGetPenDashOffset in gdiplus.dll ;
  33222.     integer nPen, single @ nType
  33223. local nOffset
  33224. nOffset = 0.0
  33225. This.gdipStatus = GdipGetPenDashOffset( This.gdipHandle, @nOffset)
  33226. * if !(GDIPLUS_STATUS_OK==This.gdipStatus) then error?
  33227. return iif(This.gdipStatus==GDIPLUS_STATUS_OK,m.nOffset,cast(null as B))
  33228. ENDPROC
  33229. PROCEDURE dashoffset_assign
  33230. LPARAMETERS tnNewValue
  33231. #if GDIPLUS_CHECK_PARAMS
  33232. if !(vartype(m.tnNewValue)='N')
  33233.     error 11 && Function argument
  33234.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  33235.     return .F.
  33236. endif
  33237. #endif
  33238. #if GDIPLUS_CHECK_OBJECT
  33239. if This.gdipHandle==0
  33240.     error _GDIPLUS_NOGDIPOBJECT_LOC
  33241.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  33242.     return .F.
  33243. endif
  33244. #endif
  33245. declare Integer GdipSetPenDashOffset in gdiplus.dll ;
  33246.     integer nPen, single nValue
  33247. This.gdipStatus = GdipSetPenDashOffset( This.gdipHandle,m.tnNewValue)
  33248. return GDIPLUS_STATUS_OK == This.gdipStatus
  33249. ENDPROC
  33250. PROCEDURE penunit_access
  33251. #if GDIPLUS_CHECK_OBJECT
  33252. if This.gdipHandle==0
  33253.     error _GDIPLUS_NOGDIPOBJECT_LOC
  33254.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  33255.     return cast(null as I)
  33256. endif
  33257. #endif
  33258. declare Integer GdipGetPenUnit in gdiplus.dll ;
  33259.     integer nPen, integer @ nType
  33260. local nType
  33261. nType = 0
  33262. This.gdipStatus = GdipGetPenUnit( This.gdipHandle, @nType)
  33263. * if !(GDIPLUS_STATUS_OK==This.gdipStatus) then error?
  33264. return iif(This.gdipStatus==GDIPLUS_STATUS_OK,m.nType,cast(null as I))
  33265. ENDPROC
  33266. PROCEDURE penunit_assign
  33267. LPARAMETERS tnValue
  33268. #if GDIPLUS_CHECK_OBJECT
  33269. if This.gdipHandle==0
  33270.     error _GDIPLUS_NOGDIPOBJECT_LOC
  33271.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  33272.     return .F.
  33273. endif
  33274. #endif
  33275. #if GDIPLUS_CHECK_PARAMS
  33276. if !(vartype(m.tnValue)='N')
  33277.     error 11 && Function argument
  33278.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  33279.     return .F.
  33280. endif
  33281. #endif
  33282. declare Integer GdipSetPenUnit in gdiplus.dll ;
  33283.     integer nPen, integer nValue
  33284. This.gdipStatus = GdipSetPenUnit( This.gdipHandle,m.tnValue)
  33285. return GDIPLUS_STATUS_OK == This.gdipStatus
  33286. ENDPROC
  33287. PROCEDURE clone
  33288. lparameters toPen as GpPen
  33289. this.Destroy()
  33290. local nHandle
  33291. nHandle = 0
  33292. #if GDIPLUS_CHECK_PARAMS
  33293. if !(vartype(m.toPen)='O' and m.toPen.gdipHandle<>0)
  33294.     error 11 && Function argument
  33295.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  33296.     return .F.
  33297. endif
  33298. #endif
  33299. Declare Integer GdipClonePen In GDIPlus.Dll ;
  33300.     integer nPen, integer @nClonePen
  33301. This.GdipStatus = GdipClonePen( ;
  33302.     m.toPen.gdipHandle ;
  33303. ,    @nHandle)
  33304. this.gdipHandle= m.nHandle
  33305. return GDIPLUS_STATUS_OK == This.GdipStatus
  33306. ENDPROC
  33307. PROCEDURE Init
  33308. lparameters tvColor, tnWidth as Number, tnUnit as Number
  33309. if not dodefault()
  33310.     return .F.
  33311. endif
  33312. if pcount()>0
  33313.     return This.Create(m.tvColor,m.tnWidth,m.tnUnit)
  33314. endif
  33315. ENDPROC
  33316. PROCEDURE Destroy
  33317. if This.GdipHandle!=0 and This.gdipOwnsThisHandle
  33318.     Declare Integer GdipDeletePen In GDIPlus.Dll ;
  33319.         integer nPen
  33320.     GdipDeletePen(This.GdipHandle)
  33321.     This.GdipHandle=0
  33322.     This.gdipOwnsThisHandle=.F.
  33323. endif
  33324. ENDPROC
  33325. GPGRAPHICS
  33326. INTEGER
  33327. INTEGER
  33328. GdipCreateBitmapFromGraphics
  33329. gdiplus.dll
  33330. TOGRAPHICS
  33331. NWIDTH
  33332. NHEIGHT
  33333. GDIPSTATUS
  33334. GDIPCREATEBITMAPFROMGRAPHICS
  33335. GDIPLUS
  33336. DESTROY
  33337. NHANDLE    
  33338. GETHANDLE    
  33339. SETHANDLEM
  33340. INTEGER
  33341. INTEGER
  33342. INTEGER
  33343. GdipCreateBitmapFromScan0
  33344. gdiplus.dll
  33345. TNWIDTH
  33346. TNHEIGHT
  33347. TNPIXELFORMAT
  33348. GDIPSTATUS
  33349. GDIPCREATEBITMAPFROMSCAN0
  33350. GDIPLUS
  33351. DESTROY
  33352. NHANDLE    
  33353. SETHANDLE{
  33354. INTEGER
  33355. INTEGER
  33356. GDI+ object not created or associated
  33357. GdipBitmapSetPixel
  33358. gdiplus.dll
  33359. TVCOLOR
  33360. GDIPSTATUS
  33361. GDIPHANDLE
  33362. GDIPBITMAPSETPIXEL
  33363. GDIPLUS
  33364. ARGBR
  33365. INTEGER
  33366. INTEGER
  33367. GDI+ object not created or associated
  33368. GdipBitmapGetPixel
  33369. gdiplus.dll
  33370. GDIPSTATUS
  33371. GDIPHANDLE
  33372. GDIPBITMAPGETPIXEL
  33373. GDIPLUS
  33374. NARGB
  33375. STRING
  33376. LOGICAL
  33377. GdipCreateBitmapFromFileICM
  33378. gdiplus.dll
  33379. GdipCreateBitmapFromFile
  33380. gdiplus.dll
  33381. TCFILENAME
  33382. TLUSEEMBEDDEDCOLORMGMT
  33383. GDIPSTATUS
  33384. GDIPCREATEBITMAPFROMFILEICM
  33385. GDIPLUS
  33386. DESTROY
  33387. NHANDLE    
  33388. SETHANDLE
  33389. GDIPCREATEBITMAPFROMFILE
  33390. TVPARAM1
  33391. TVPARAM2
  33392. TVPARAM3
  33393. CREATE
  33394. NUMBER
  33395. NUMBER
  33396. GDI+ object not created or associated
  33397. GdipBitmapSetResolution
  33398. gdiplus.dll
  33399. TNDPIX
  33400. TNDPIY
  33401. GDIPSTATUS
  33402. GDIPHANDLE
  33403. GDIPBITMAPSETRESOLUTION
  33404. GDIPLUS
  33405. createfromgraphics,
  33406. create
  33407. setpixel
  33408. getpixel
  33409. createfromfileQ
  33410. setresolution
  33411. TCPOINT
  33412. TCPOINTF
  33413. NUMBER
  33414. NUMBER
  33415. TXORPOINT
  33416. CLONE
  33417. GDIPPOINTF
  33418. CREATE
  33419. GPPOINT
  33420. TOOTHERPOINT
  33421. gdippoint_access,
  33422. gdippoint_assignd
  33423. gdippointf_access
  33424. gdippointf_assign;
  33425. create
  33426. clone
  33427. 7PROCEDURE createfromgraphics
  33428. lparameters toGraphics as GpGraphics, nWidth as integer, nHeight as integer
  33429. #if GDIPLUS_CHECK_PARAMS
  33430. if !(vartype(toGraphics)$'ON' and vartype(m.nWidth)='N' and vartype(m.nHeight)='N')
  33431.     error 11 && Function argument
  33432.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  33433.     return .F.
  33434. endif
  33435. #endif
  33436. declare integer GdipCreateBitmapFromGraphics in gdiplus.dll ;
  33437.     integer nWidth, integer nHeight, integer nGraphics, integer @ nImage
  33438. this.Destroy()
  33439. local nHandle
  33440. nHandle = 0
  33441. This.gdipStatus = GdipCreateBitmapFromGraphics( ;
  33442.     m.nWidth, m.nHeight ;
  33443.     , iif(vartype(m.toGraphics)='O',m.toGraphics.GetHandle(),m.toGraphics) ;
  33444. ,    @nHandle)
  33445. this.SetHandle(m.nHandle,.T.)
  33446. return GDIPLUS_STATUS_OK == This.gdipStatus
  33447. ENDPROC
  33448. PROCEDURE create
  33449. LPARAMETERS tnWidth as Integer, tnHeight as Integer, tnPixelFormat as Integer
  33450. #if GDIPLUS_CHECK_PARAMS
  33451. if !(vartype(tnWidth)='N' AND vartype(tnHeight)='N' AND vartype(tnPixelFormat )$'LN')
  33452.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  33453.     return .F.
  33454. endif
  33455. #endif
  33456. declare integer GdipCreateBitmapFromScan0 in gdiplus.dll ;
  33457.     integer nWidth, integer nHeight, integer nStride;
  33458.     , integer nPixelFormat ;
  33459.     , string @ cScan0, integer @ nImage
  33460. this.Destroy()
  33461. local nHandle
  33462. nHandle = 0
  33463. This.gdipStatus = GdipCreateBitmapFromScan0( ;
  33464.     m.tnWidth, m.tnHeight, 0 ;
  33465.     , iif(vartype(m.tnPixelFormat)='N',m.tnPixelFormat,GDIPLUS_PIXELFORMAT_32bppARGB) ;
  33466.     , 0 ;
  33467.     ,    @nHandle)
  33468. this.SetHandle(m.nHandle,.T.)
  33469. return GDIPLUS_STATUS_OK == This.gdipStatus
  33470. ENDPROC
  33471. PROCEDURE setpixel
  33472. lparameters tX as integer, tY as integer, tvColor
  33473. #if GDIPLUS_CHECK_PARAMS
  33474. if !(vartype(m.tx)='N' and vartype(m.ty)='N' and ;
  33475.  (vartype(m.tvColor)='N' or (vartype(m.tvColor)='O' and pemstatus(m.tvColor,'argb',5))))
  33476.     error 11
  33477.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  33478.     return .F.
  33479. endif
  33480.  #endif
  33481.  #if GDIPLUS_CHECK_OBJECT
  33482.  if This.gdipHandle==0
  33483.      error _GDIPLUS_NOGDIPOBJECT_LOC
  33484.  endif
  33485.  #endif
  33486.  declare integer GdipBitmapSetPixel in gdiplus.dll ;
  33487.      integer nBitmap, integer x, integer y, integer nARGB
  33488.  This.gdipStatus = GdipBitmapSetPixel( ;
  33489.      This.gdipHandle, m.tx, m.ty ;
  33490.      , iif(vartype(m.tvColor)='N',m.tvColor,m.tvColor.argb) ;
  33491.  return GDIPLUS_STATUS_OK == This.gdipStatus
  33492. ENDPROC
  33493. PROCEDURE getpixel
  33494. lparameters tX as integer, tY as integer
  33495. #if GDIPLUS_CHECK_PARAMS
  33496. if !(vartype(m.tx)='N' and vartype(m.ty)='N')
  33497.     error 11 && function argument
  33498.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  33499.     return cast(null as I)
  33500.  endif
  33501.  #endif
  33502.  #if GDIPLUS_CHECK_OBJECT
  33503.  if This.gdipHandle==0
  33504.      error _GDIPLUS_NOGDIPOBJECT_LOC
  33505.  endif
  33506.  #endif
  33507.  declare integer GdipBitmapGetPixel in gdiplus.dll ;
  33508.      integer nBitmap, integer x, integer y, integer @ nARGB
  33509.  local nARGB
  33510.  nARGB = 0
  33511.  This.gdipStatus = GdipBitmapGetPixel( ;
  33512.      This.gdipHandle, m.tx, m.ty, @nARGB )
  33513.  return iif(GDIPLUS_STATUS_OK == This.gdipStatus,m.nARGB,cast(null as I))
  33514. ENDPROC
  33515. PROCEDURE createfromfile
  33516. lparameters tcFilename as String, tlUseEmbeddedColorMgmt as Logical
  33517. #if GDIPLUS_CHECK_PARAMS
  33518. if !(vartype(m.tcFilename)='C' and !empty(m.tcFilename) and vartype(m.tlUseEmbeddedColorMgmt)='L')
  33519.     error 11
  33520.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  33521.     return .F.
  33522. endif
  33523. #endif
  33524. if m.tlUseEmbeddedColorMgmt
  33525.     declare integer GdipCreateBitmapFromFileICM in gdiplus.dll ;
  33526.         string wFilename, integer @ nImage
  33527.     this.Destroy()
  33528.     local nHandle
  33529.     nHandle = 0
  33530.     This.gdipStatus = GdipCreateBitmapFromFileICM( ;
  33531.         strconv(m.tcFilename+chr(0),5) ;
  33532.     ,    @nHandle)
  33533.     this.SetHandle(m.nHandle,.T.)
  33534.     return GDIPLUS_STATUS_OK == This.gdipStatus
  33535.     declare integer GdipCreateBitmapFromFile in gdiplus.dll ;
  33536.         string wFilename, integer @ nImage
  33537.     this.Destroy()
  33538.     local nHandle
  33539.     nHandle = 0
  33540.     This.gdipStatus = GdipCreateBitmapFromFile( ;
  33541.         strconv(m.tcFilename+chr(0),5) ;
  33542.     ,    @nHandle)
  33543.     this.SetHandle(m.nHandle,.T.)
  33544.     return GDIPLUS_STATUS_OK == This.gdipStatus
  33545. endif
  33546. ENDPROC
  33547. PROCEDURE Init
  33548. lparameters tvParam1, tvParam2, tvParam3
  33549. if vartype(m.tvParam1)+vartype(m.tvParam2)='NN'
  33550.     * Width and height
  33551.     if not dodefault()    && Bypasses 
  33552.         return .F.
  33553.     endif
  33554.     return This.Create( m.tvParam1, m.tvParam2, m.tvParam3 )
  33555.     return dodefault(m.tvParam1,m.tvParam2)
  33556. endif
  33557. ENDPROC
  33558. PROCEDURE setresolution
  33559. lparameters tnDPIX as number, tnDPIY as number
  33560. #if GDIPLUS_CHECK_PARAMS
  33561. if !(vartype(m.tnDPIX )='N' and vartype(m.tnDPIY )='N')
  33562.     error 11
  33563.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  33564.     return .F.
  33565. endif
  33566. #endif
  33567. #if GDIPLUS_CHECK_OBJECT
  33568. if This.gdipHandle==0
  33569.     error _GDIPLUS_NOGDIPOBJECT_LOC
  33570. endif
  33571. #endif
  33572. declare integer GdipBitmapSetResolution in gdiplus.dll ;
  33573.      integer nBitmap, single dpix, single dpiy
  33574. This.gdipStatus = GdipBitmapSetResolution ( ;
  33575.      This.gdipHandle, m.tnDPIX , m.tnDPIY ;
  33576. return GDIPLUS_STATUS_OK == This.gdipStatus
  33577. ENDPROC
  33578. OPROCEDURE create
  33579. lparameters ;
  33580.     tvFontNameOrFamily ;    && Font name or Fontfamily (created separately)
  33581.     , tnSize as Number ;            && size in units (default points)
  33582.     , tnStyle as integer ;            && see GDIPLUS_FontStyle_xxx values (default Normal)
  33583.     , tnUnit as integer                && see GDIPLUS_Unit_xxx values (default points)
  33584. #if GDIPLUS_CHECK_PARAMS
  33585. if !((vartype(m.tvFontNameOrFamily )='C' ;
  33586.     or (vartype(m.tvFontNameOrFamily )='O' and m.tvFontNameOrFamily.GetHandle()<>0)) ;
  33587. and vartype(m.tnSize)='N')
  33588.     error 11 && Function argument
  33589.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  33590.     return .F.
  33591. endif
  33592. #endif
  33593. local lnStyle as Integer, lnUnit as integer, lnHandle as integer ;
  33594.     , loFamily as GpFontFamily, lnFamily as integer
  33595. lnStyle = evl(m.tnStyle,GDIPLUS_FontStyle_Regular)
  33596. lnUnit = evl(m.tnUnit,GDIPLUS_Unit_World)
  33597. lnHandle = 0
  33598. if vartype(m.tvFontnameOrFamily)='O'
  33599.     lnFamily = m.tvFontNameOrFamily.GetHandle()
  33600.     * Must create ourselves
  33601.     loFamily = This.ObjFactory('gpfont.create', GDIPLUS_CLASS_FONTFAMILY, @tvFontNameOrFamily)
  33602.     lnFamily =iif(vartype(m.loFamily)='O',m.loFamily.GetHandle(),0)
  33603. endif
  33604. this.Destroy()
  33605. Declare Integer GdipCreateFont In GDIPlus.Dll ;
  33606.     integer nFontFamily, single fSize, integer nStyle, integer nUnit, integer @nHandle
  33607. if 0!=m.lnFamily
  33608.     * Try creating font
  33609.     This.gdipStatus = GdipCreateFont( m.lnFamily, m.tnSize,m.lnStyle,m.lnUnit,@lnHandle)
  33610.     if GDIPLUS_STATUS_OK==This.gdipStatus
  33611.         * That worked
  33612.         This.SetHandle(m.lnHandle,.T.)
  33613.         return .T.
  33614.     endif
  33615. endif
  33616. * If here, either font family is invalid or font creation failed
  33617. * Try from Generic family
  33618. lnFamily = 0
  33619. declare integer GdipGetGenericFontFamilySansSerif in gdiplus.dll integer @
  33620. GdipGetGenericFontFamilySansSerif( @lnFamily )
  33621. This.gdipStatus = GdipCreateFont( m.lnFamily, m.tnSize,m.lnStyle,m.lnUnit,@lnHandle)
  33622. This.SetHandle(m.lnHandle,.T.)
  33623. return GDIPLUS_STATUS_OK == This.GdipStatus
  33624. ENDPROC
  33625. PROCEDURE style_access
  33626. #if GDIPLUS_CHECK_OBJECT
  33627. if This.gdipHandle==0
  33628.     error _GDIPLUS_NOGDIPOBJECT_LOC
  33629.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  33630.     return cast(null as I)
  33631. endif
  33632. #endif
  33633. declare integer GdipGetFontStyle in gdiplus.dll ;
  33634.     integer nFont, integer @
  33635. local nStyle
  33636. nStyle= 0
  33637. This.gdipStatus = GdipGetFontStyle( This.gdipHandle, @nStyle)
  33638. return iif(This.gdipStatus==GDIPLUS_STATUS_OK,m.nStyle,cast(null as I))
  33639. ENDPROC
  33640. PROCEDURE style_assign
  33641. LPARAMETERS vNewVal
  33642. error 1743, 'Style'
  33643. ENDPROC
  33644. PROCEDURE unit_access
  33645. #if GDIPLUS_CHECK_OBJECT
  33646. if This.gdipHandle==0
  33647.     error _GDIPLUS_NOGDIPOBJECT_LOC
  33648.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  33649.     return cast(null as I)
  33650. endif
  33651. #endif
  33652. declare integer GdipGetFontUnit in gdiplus.dll ;
  33653.     integer nFont, integer @
  33654. local nUnit
  33655. nUnit = 0
  33656. This.gdipStatus = GdipGetFontUnit( This.gdipHandle, @nUnit)
  33657. return iif(This.gdipStatus==GDIPLUS_STATUS_OK,m.nUnit,cast(null as I))
  33658. ENDPROC
  33659. PROCEDURE unit_assign
  33660. LPARAMETERS vNewVal
  33661. error 1743, 'Unit'
  33662. ENDPROC
  33663. PROCEDURE getheight
  33664. lparameters tvGraphics
  33665. local lnGraphics
  33666. do case
  33667. case vartype(m.tvGraphics)='N'
  33668.     lnGraphics = m.tvGraphics
  33669. case vartype(m.tvGraphics)='O'
  33670.     lnGraphics = m.tvGraphics.GetHandle()
  33671. otherwise
  33672.     error 11
  33673.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  33674.     return cast(null as B)
  33675. endcase
  33676. #if GDIPLUS_CHECK_PARAMS
  33677. if 0==m.lnGraphics
  33678.     error 11 && Function argument
  33679.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  33680.     return cast(null as B)
  33681. endif
  33682. #endif
  33683. declare integer GdipGetFontHeight in gdiplus.dll ;
  33684.     integer nFont, integer nGraphics, single @ fHeight
  33685. local nHeight
  33686. nHeight = 0.0
  33687. This.gdipStatus = GdipGetFontHeight(This.gdipHandle,m.lnGraphics,@nHeight)
  33688. return iif(This.gdipStatus==GDIPLUS_STATUS_OK,m.nHeight,cast(null as B))
  33689. ENDPROC
  33690. PROCEDURE fontname_access
  33691. #if GDIPLUS_CHECK_OBJECT
  33692. if This.gdipHandle==0
  33693.     error _GDIPLUS_NOGDIPOBJECT_LOC
  33694.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  33695.     return cast(null as C)
  33696. endif
  33697. #endif
  33698. declare integer GdipGetFamily in gdiplus.dll ;
  33699.     integer nFont, integer @ nFamily
  33700. declare integer GdipGetFamilyName in gdiplus.dll ;
  33701.     integer nFamily, string @ cUnicodeName, integer nLangID
  33702. declare integer lstrlenW in kernel32.dll as __win32_lstrlenW string
  33703. local nFamily as Number, cUnicodeName as String
  33704. nFamily = 0
  33705. cUnicodeName= replicate(chr(0), 64 )    && 64=LF_FACESIZE*2
  33706. This.gdipStatus = GdipGetFamily( This.gdipHandle, @nFamily ) && LANG_NEUTRAL
  33707. if (GDIPLUS_STATUS_OK!=This.gdipStatus)
  33708.     return cast(null as C)
  33709. endif
  33710. This.gdipStatus = GdipGetFamilyName( m.nFamily, @cUnicodeName, 0x00 ) && LANG_NEUTRAL
  33711. return iif(GDIPLUS_STATUS_OK==This.gdipStatus ;
  33712.      , strconv( left(m.cUnicodeName,__win32_lstrlenW(m.cUnicodeName)*2),6) ;
  33713.      , cast(null as C) )
  33714. ENDPROC
  33715. PROCEDURE fontname_assign
  33716. LPARAMETERS vNewVal
  33717. error 1743,'FontName'
  33718. ENDPROC
  33719. PROCEDURE size_access
  33720. #if GDIPLUS_CHECK_OBJECT
  33721. if This.gdipHandle==0
  33722.     error _GDIPLUS_NOGDIPOBJECT_LOC
  33723.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  33724.     return cast(null as B)
  33725. endif
  33726. #endif
  33727. declare integer GdipGetFontSize in gdiplus.dll ;
  33728.     integer nFont, single  @
  33729. local nSize
  33730. nSize= 0.0
  33731. This.gdipStatus = GdipGetFontSize( This.gdipHandle, @nSize)
  33732. return iif(This.gdipStatus==GDIPLUS_STATUS_OK,m.nSize,cast(null as B))
  33733. ENDPROC
  33734. PROCEDURE size_assign
  33735. LPARAMETERS vNewVal
  33736. error 1743, 'Size'
  33737. ENDPROC
  33738. PROCEDURE getheightgivendpi
  33739. lparameters tnDPI as Number
  33740. #if GDIPLUS_CHECK_OBJECT
  33741. if This.gdipHandle==0
  33742.     error _GDIPLUS_NOGDIPOBJECT_LOC
  33743.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  33744.     return cast(null as B)
  33745. endif
  33746. #endif
  33747. #if GDIPLUS_CHECK_PARAMS
  33748. if vartype(m.tnDPI)!='N'
  33749.     error 11 && Function argument
  33750. endif
  33751. #endif
  33752. declare integer GdipGetFontHeightGivenDPI in gdiplus.dll ;
  33753.     integer nFont, single nDPI, single @ fHeight
  33754. local nHeight
  33755. nHeight = 0.0
  33756. This.gdipStatus = GdipGetFontHeight(This.gdipHandle,m.tnDPI,@nHeight)
  33757. return iif(This.gdipStatus==GDIPLUS_STATUS_OK,m.nHeight,cast(null as B))
  33758. ENDPROC
  33759. PROCEDURE Init
  33760. lparameters ;
  33761.     tvFontNameOrFamily ;    && Font name, or Fontfamily (created separately)
  33762.     , tnSize as Number ;            && size in units (default points)
  33763.     , tnStyle as integer ;            && see GDIPLUS_FontStyle_xxx values (default Normal)
  33764.     , tnUnit as integer                && see GDIPLUS_Unit_xxx values (default points)
  33765. if not dodefault()
  33766.     return .F.
  33767. endif
  33768. if pcount()>0
  33769.     return This.Create(m.tvFontNameOrFamily,m.tnSize,m.tnStyle,m.tnUnit)
  33770. endif
  33771. return .T.
  33772. ENDPROC
  33773. PROCEDURE Destroy
  33774. if This.GdipHandle!=0 and This.gdipOwnsThisHandle
  33775.     Declare Integer GdipDeleteFont In GDIPlus.Dll ;
  33776.         integer nFont
  33777.     GdipDeleteFont(This.GdipHandle)
  33778.     This.GdipHandle=0
  33779.     This.gdipOwnsThisHandle=.F.
  33780. endif
  33781. ENDPROC
  33782. PROCEDURE clone
  33783. lparameters toFont as GpFont
  33784. this.Destroy()
  33785. local nHandle
  33786. nHandle = 0
  33787. #if GDIPLUS_CHECK_PARAMS
  33788. if !(vartype(m.toFont)='O' and m.toFont.gdipHandle<>0)
  33789.     error 11 && Function argument
  33790.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  33791.     return .F.
  33792. endif
  33793. #endif
  33794. Declare Integer GdipCloneFont In GDIPlus.Dll ;
  33795.     integer nOriginal, integer @nClone
  33796. This.GdipStatus = GdipCloneFont( ;
  33797.     m.toFont.gdipHandle ;
  33798. ,    @nHandle)
  33799. this.gdipHandle= m.nHandle
  33800. This.gdipOwnsThisHandle = .T.
  33801. return GDIPLUS_STATUS_OK == This.gdipStatus
  33802. ENDPROC
  33803. NUMBER
  33804. INTEGER
  33805. INTEGER
  33806. INTEGER
  33807. INTEGER
  33808. INTEGER
  33809. GPFONTFAMILY
  33810. INTEGER
  33811. gpfont.create
  33812. GpFontFamily
  33813. GdipCreateFont
  33814. GDIPlus.Dll
  33815. GdipGetGenericFontFamilySansSerif
  33816. gdiplus.dll
  33817. TVFONTNAMEORFAMILY
  33818. TNSIZE
  33819. TNSTYLE
  33820. TNUNIT    
  33821. GETHANDLE
  33822. GDIPSTATUS
  33823. LNSTYLE
  33824. LNUNIT
  33825. LNHANDLE
  33826. LOFAMILY
  33827. LNFAMILY
  33828. OBJFACTORY
  33829. DESTROY
  33830. GDIPCREATEFONT
  33831. GDIPLUS
  33832. SETHANDLE!
  33833. GDIPGETGENERICFONTFAMILYSANSSERIF
  33834. GDI+ object not created or associated
  33835. GdipGetFontStyle
  33836. gdiplus.dll
  33837. GDIPHANDLE
  33838. GDIPSTATUS
  33839. GDIPGETFONTSTYLE
  33840. GDIPLUS
  33841. NSTYLE
  33842. Style
  33843. VNEWVAL
  33844. GDI+ object not created or associated
  33845. GdipGetFontUnit
  33846. gdiplus.dll
  33847. GDIPHANDLE
  33848. GDIPSTATUS
  33849. GDIPGETFONTUNIT
  33850. GDIPLUS
  33851. NUNIT
  33852. VNEWVALr
  33853. GdipGetFontHeight
  33854. gdiplus.dll
  33855. TVGRAPHICS
  33856. LNGRAPHICS    
  33857. GETHANDLE
  33858. GDIPSTATUS
  33859. GDIPGETFONTHEIGHT
  33860. GDIPLUS
  33861. NHEIGHT
  33862. GDIPHANDLE
  33863. GDI+ object not created or associated
  33864. GdipGetFamily
  33865. gdiplus.dll
  33866. GdipGetFamilyName
  33867. gdiplus.dll
  33868. lstrlenW
  33869. kernel32.dllQ
  33870. __win32_lstrlenW
  33871. NUMBER
  33872. STRING
  33873. GDIPHANDLE
  33874. GDIPSTATUS
  33875. GDIPGETFAMILY
  33876. GDIPLUS
  33877. GDIPGETFAMILYNAME
  33878. LSTRLENW
  33879. KERNEL32
  33880. __WIN32_LSTRLENW
  33881. NFAMILY
  33882. CUNICODENAME"
  33883. FontName
  33884. VNEWVAL
  33885. GDI+ object not created or associated
  33886. GdipGetFontSize
  33887. gdiplus.dll
  33888. GDIPHANDLE
  33889. GDIPSTATUS
  33890. GDIPGETFONTSIZE
  33891. GDIPLUS
  33892. NSIZE
  33893. VNEWVAL6
  33894. NUMBER
  33895. GDI+ object not created or associated
  33896. GdipGetFontHeightGivenDPI
  33897. gdiplus.dll
  33898. TNDPI
  33899. GDIPHANDLE
  33900. GDIPSTATUS
  33901. GDIPGETFONTHEIGHTGIVENDPI
  33902. GDIPLUS
  33903. NHEIGHT
  33904. GDIPGETFONTHEIGHT
  33905. NUMBER
  33906. INTEGER
  33907. INTEGER
  33908. TVFONTNAMEORFAMILY
  33909. TNSIZE
  33910. TNSTYLE
  33911. TNUNIT
  33912. CREATEy
  33913. GdipDeleteFont
  33914. GDIPlus.Dll
  33915. GDIPHANDLE
  33916. GDIPOWNSTHISHANDLE
  33917. GDIPDELETEFONT
  33918. GDIPLUS
  33919. GPFONT
  33920. GdipCloneFont
  33921. GDIPlus.Dll
  33922. TOFONT
  33923. DESTROY
  33924. NHANDLE
  33925. GDIPHANDLE
  33926. GDIPSTATUS
  33927. GDIPCLONEFONT
  33928. GDIPLUS
  33929. GDIPOWNSTHISHANDLE
  33930. create,
  33931. style_access*
  33932. style_assign\
  33933. unit_access
  33934. unit_assign
  33935. getheight
  33936. fontname_access
  33937. fontname_assign"
  33938. size_accessQ
  33939. size_assign
  33940. getheightgivendpi
  33941. InitW
  33942. Destroy&
  33943. clone
  33944. GdipCreateSolidFill
  33945. GDIPlus.Dll
  33946. TVCOLOR
  33947. GDIPSTATUS
  33948. DESTROY
  33949. NHANDLE
  33950. GDIPCREATESOLIDFILL
  33951. GDIPLUS
  33952. ARGB    
  33953. SETHANDLE
  33954. GDI+ object not created or associated
  33955. GdipGetSolidFillColor
  33956. gdiplus.dll
  33957. GDIPHANDLE
  33958. GDIPSTATUS
  33959. GDIPGETSOLIDFILLCOLOR
  33960. GDIPLUS
  33961. NARGB
  33962. GDI+ object not created or associated
  33963. GdipSetSolidFillColor
  33964. gdiplus.dll
  33965. TVCOLOR
  33966. GDIPHANDLE
  33967. GDIPSTATUS
  33968. GDIPSETSOLIDFILLCOLOR
  33969. GDIPLUS
  33970. ARGBK
  33971. TVCOLOR
  33972. CREATE
  33973. create,
  33974. brushcolor_access
  33975. brushcolor_assign
  33976. InitQ
  33977. PROCEDURE create
  33978. lparameters tcName as String
  33979. this.Destroy()
  33980. local nHandle
  33981. nHandle = 0
  33982. Declare Integer GdipCreateFontFamilyFromName In GDIPlus.Dll ;
  33983.     string cUnicodeName, integer nFontCollection ,integer @nHandle
  33984. This.gdipStatus = GdipCreateFontFamilyFromName ( ;
  33985.     strconv(m.tcName,5)+chr(0) ;
  33986.     , This.gdipFontCollectionHandle ;
  33987.     , @nHandle )
  33988. This.SetHandle(m.nHandle,.T.)
  33989. return GDIPLUS_STATUS_OK == This.GdipStatus
  33990. ENDPROC
  33991. PROCEDURE getgenericmonospace
  33992. this.Destroy()
  33993. local nHandle
  33994. nHandle = 0
  33995. Declare Integer GdipGetGenericFontFamilyMonospace In GDIPlus.Dll ;
  33996.     integer @nHandle
  33997. This.gdipStatus = GdipGetGenericFontFamilyMonospace(@nHandle )
  33998. This.SetHandle(m.nHandle,.F.)
  33999. return GDIPLUS_STATUS_OK == This.GdipStatus
  34000. ENDPROC
  34001. PROCEDURE getgenericserif
  34002. this.Destroy()
  34003. local nHandle
  34004. nHandle = 0
  34005. Declare Integer GdipGetGenericFontFamilySerif In GDIPlus.Dll ;
  34006.     integer @nHandle
  34007. This.gdipStatus = GdipGetGenericFontFamilySerif(@nHandle )
  34008. This.SetHandle(m.nHandle,.F.)
  34009. return GDIPLUS_STATUS_OK == This.GdipStatus
  34010. ENDPROC
  34011. PROCEDURE getgenericsansserif
  34012. this.Destroy()
  34013. local nHandle
  34014. nHandle = 0
  34015. Declare Integer GdipGetGenericFontFamilySansSerif In GDIPlus.Dll ;
  34016.     integer @nHandle
  34017. This.gdipStatus = GdipGetGenericFontFamilySansSerif(@nHandle )
  34018. This.SetHandle(m.nHandle,.F.)
  34019. return GDIPLUS_STATUS_OK == This.GdipStatus
  34020. ENDPROC
  34021. PROCEDURE isstyleavailable
  34022. lparameters tnFontStyle as integer
  34023. #if GDIPLUS_CHECK_OBJECT
  34024. if This.gdipHandle==0
  34025.     error _GDIPLUS_NOGDIPOBJECT_LOC
  34026.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  34027.     return .F.
  34028. endif
  34029. #endif
  34030. #if GDIPLUS_CHECK_PARAMS
  34031. if !(vartype(m.tnFontStyle)='N')
  34032.     error 11 && Function argument
  34033.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  34034.     return .F.
  34035. endif
  34036. #endif
  34037. declare integer GdipIsStyleAvailable in gdiplus.dll ;
  34038.     integer nFontFamily, integer nStyle, integer @bIsAvailable
  34039. local nAvailable
  34040. nAvailable = 0    && default to FALSE
  34041. This.gdipStatus = GdipIsStyleAvailable( This.gdipHandle, m.tnFontStyle, @nAvailable )
  34042. * Convert integer to .T./.F.
  34043. return (m.nAvailable<>0)
  34044. ENDPROC
  34045. PROCEDURE fontname_access
  34046. #if GDIPLUS_CHECK_OBJECT
  34047. if This.gdipHandle==0
  34048.     error _GDIPLUS_NOGDIPOBJECT_LOC
  34049.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  34050.     return cast(null as C)
  34051. endif
  34052. #endif
  34053. declare integer GdipGetFamilyName in gdiplus.dll ;
  34054.     integer nFamily, string @ cUnicodeName, integer nLangID
  34055. declare integer lstrlenW in kernel32.dll as __win32_lstrlenW string
  34056. local cUnicodeName as String
  34057. cUnicodeName= replicate(chr(0), 64 )    && 64=LF_FACESIZE*2
  34058. This.gdipStatus = GdipGetFamilyName( This.gdipHandle, @cUnicodeName, 0x00 ) && 0x00=LANG_NEUTRAL
  34059. return iif(GDIPLUS_STATUS_OK==This.gdipStatus ;
  34060.      , strconv( left(m.cUnicodeName,__win32_lstrlenW(m.cUnicodeName)*2),6) ;
  34061.      , cast(null as C) )
  34062. ENDPROC
  34063. PROCEDURE fontname_assign
  34064. LPARAMETERS vNewVal
  34065. error 1743, 'FontName'
  34066. ENDPROC
  34067. PROCEDURE getcellascent
  34068. lparameters tnStyle as integer
  34069. #if GDIPLUS_CHECK_PARAMS
  34070. if !(vartype(m.tnStyle)$'LN')
  34071.     error 11 && Function argument
  34072.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  34073.     return cast(null as I)
  34074. endif
  34075. #endif
  34076. #if GDIPLUS_CHECK_OBJECT
  34077. if This.gdipHandle==0
  34078.     error _GDIPLUS_NOGDIPOBJECT_LOC
  34079.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  34080.     return cast(null as I)
  34081. endif
  34082. #endif
  34083. declare integer GdipGetCellAscent in gdiplus.dll ;
  34084.     integer nFamily, integer nStyle, integer @ nValue
  34085. local nValue as Number
  34086. nValue = 0
  34087. This.gdipStatus = GdipGetCellAscent( This.gdipHandle, evl(m.tnStyle,0), @nValue)
  34088. return iif(GDIPLUS_STATUS_OK==This.gdipStatus ;
  34089.      , m.nValue ;
  34090.      , cast(null as I) )
  34091. ENDPROC
  34092. PROCEDURE getemheight
  34093. lparameters tnStyle as integer
  34094. #if GDIPLUS_CHECK_PARAMS
  34095. if !(vartype(m.tnStyle)$'LN')
  34096.     error 11 && Function argument
  34097.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  34098.     return cast(null as I)
  34099. endif
  34100. #endif
  34101. #if GDIPLUS_CHECK_OBJECT
  34102. if This.gdipHandle==0
  34103.     error _GDIPLUS_NOGDIPOBJECT_LOC
  34104.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  34105.     return cast(null as I)
  34106. endif
  34107. #endif
  34108. declare integer GdipGetEmHeight in gdiplus.dll ;
  34109.     integer nFamily, integer nStyle, integer @ nValue
  34110. local nValue as Number
  34111. nValue = 0
  34112. This.gdipStatus = GdipGetEmHeight( This.gdipHandle, evl(m.tnStyle,0), @nValue)
  34113. return iif(GDIPLUS_STATUS_OK==This.gdipStatus ;
  34114.      , m.nValue ;
  34115.      , cast(null as I) )
  34116. ENDPROC
  34117. PROCEDURE getcelldescent
  34118. lparameters tnStyle as integer
  34119. #if GDIPLUS_CHECK_PARAMS
  34120. if !(vartype(m.tnStyle)$'LN')
  34121.     error 11 && Function argument
  34122.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  34123.     return cast(null as I)
  34124. endif
  34125. #endif
  34126. #if GDIPLUS_CHECK_OBJECT
  34127. if This.gdipHandle==0
  34128.     error _GDIPLUS_NOGDIPOBJECT_LOC
  34129.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  34130.     return cast(null as I)
  34131. endif
  34132. #endif
  34133. declare integer GdipGetCellDescent in gdiplus.dll ;
  34134.     integer nFamily, integer nStyle, integer @ nValue
  34135. local nValue as Number
  34136. nValue = 0
  34137. This.gdipStatus = GdipGetCellDescent( This.gdipHandle, evl(m.tnStyle,0), @nValue)
  34138. return iif(GDIPLUS_STATUS_OK==This.gdipStatus ;
  34139.      , m.nValue ;
  34140.      , cast(null as I) )
  34141. ENDPROC
  34142. PROCEDURE getlinespacing
  34143. lparameters tnStyle as integer
  34144. #if GDIPLUS_CHECK_PARAMS
  34145. if !(vartype(m.tnStyle)$'LN')
  34146.     error 11 && Function argument
  34147.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  34148.     return cast(null as I)
  34149. endif
  34150. #endif
  34151. #if GDIPLUS_CHECK_OBJECT
  34152. if This.gdipHandle==0
  34153.     error _GDIPLUS_NOGDIPOBJECT_LOC
  34154.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  34155.     return cast(null as I)
  34156. endif
  34157. #endif
  34158. declare integer GdipGetLineSpacing in gdiplus.dll ;
  34159.     integer nFamily, integer nStyle, integer @ nValue
  34160. local nValue as Number
  34161. nValue = 0
  34162. This.gdipStatus = GdipGetLineSpacing( This.gdipHandle, evl(m.tnStyle,0), @nValue)
  34163. return iif(GDIPLUS_STATUS_OK==This.gdipStatus ;
  34164.      , m.nValue ;
  34165.      , cast(null as I) )
  34166. ENDPROC
  34167. PROCEDURE getname
  34168. lparameters tnLangID
  34169. #if GDIPLUS_CHECK_PARAMS
  34170. if !(vartype(m.tnLangID)$'LN')
  34171.     error 11 && Function argument
  34172.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  34173.     return cast(null as C)
  34174. endif
  34175. #endif
  34176. #if GDIPLUS_CHECK_OBJECT
  34177. if This.gdipHandle==0
  34178.     error _GDIPLUS_NOGDIPOBJECT_LOC
  34179.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  34180.     return cast(null as C)
  34181. endif
  34182. #endif
  34183. declare integer GdipGetFamilyName in gdiplus.dll ;
  34184.     integer nFamily, string @ cUnicodeName, integer nLangID
  34185. declare integer lstrlenW in kernel32.dll as __win32_lstrlenW string
  34186. local cUnicodeName as String
  34187. cUnicodeName= replicate(chr(0), 64 )    && 64=LF_FACESIZE*2
  34188. This.gdipStatus = GdipGetFamilyName( This.gdipHandle, @cUnicodeName, evl(m.tnLangID,0x00) ) && LANG_NEUTRAL
  34189. return iif(GDIPLUS_STATUS_OK==This.gdipStatus ;
  34190.      , strconv( left(m.cUnicodeName,__win32_lstrlenW(m.cUnicodeName)*2),6) ;
  34191.      , cast(null as C) )
  34192. ENDPROC
  34193. PROCEDURE Init
  34194. lparameters tcName
  34195. * Get the Installed Font collection
  34196. if not dodefault()
  34197.     return .F.
  34198. endif
  34199. * This class cannot handle Private Font collections on its own: if you want
  34200. * that, you will need to extend it (and manage the lifetime of the
  34201. * PrivateFontCollection object
  34202. * Is this necessary? 
  34203. * declare integer GdipNewInstalledFontCollection in gdiplus.dll integer @
  34204. * For now, this seems to work:
  34205. This.gdipFontCollectionHandle = 0 
  34206. if pcount()>=1
  34207.     return This.Create( m.tcName )
  34208. endif
  34209. return .T.
  34210. ENDPROC
  34211. PROCEDURE Destroy
  34212. if This.GdipHandle!=0 and This.gdipOwnsThisHandle
  34213.     Declare Integer GdipDeleteFontFamily In GDIPlus.Dll ;
  34214.         integer nFontFamily
  34215.     GdipDeleteFontFamily(This.GdipHandle)
  34216.     This.GdipHandle=0
  34217.     This.gdipOwnsThisHandle=.F.
  34218. endif
  34219. ENDPROC
  34220. PROCEDURE clone
  34221. lparameters toFontFamily as GpFontFamily
  34222. this.Destroy()
  34223. local nHandle
  34224. nHandle = 0
  34225. #if GDIPLUS_CHECK_PARAMS
  34226. if !(vartype(m.toFontFamily)='O' and m.toFontFamily.gdipHandle<>0)
  34227.     error 11 && Function argument
  34228.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  34229.     return .F.
  34230. endif
  34231. #endif
  34232. Declare Integer GdipCloneFontFamily In GDIPlus.Dll ;
  34233.     integer nOriginal, integer @nClone
  34234. This.GdipStatus = GdipCloneFontFamily( ;
  34235.     m.toFontFamily.gdipHandle ;
  34236. ,    @nHandle)
  34237. this.gdipHandle= m.nHandle
  34238. This.gdipOwnsThisHandle = .T.
  34239. return GDIPLUS_STATUS_OK == This.gdipStatus
  34240. ENDPROC
  34241. PROCEDURE clone
  34242. lparameters toOtherObject
  34243. * Not implemented in this class, see derived classes
  34244. ENDPROC
  34245. PROCEDURE guidtostring
  34246. lparameters tqGUID
  34247. #if GDIPLUS_CHECK_PARAMS
  34248. * Require 16-byte string or varbinary
  34249. if !(vartype(m.tqGUID)$'CQ' and len(m.tqGUID)=16)
  34250.     error 11 && function argument
  34251.     return cast(null as C)
  34252. endif
  34253. #endif
  34254. local lcUnicodeString, lnResult
  34255. lcUnicodeString = replicate(chr(0),80)    && Should be big enough for anything
  34256. * Note - this is Unicode
  34257. declare integer StringFromGUID2 in ole32.dll ;
  34258.     string @cCLSID, string @cUnicodeString, integer nLen
  34259. lnResult = StringFromGUID2( m.tqGUID, @lcUnicodeString, 40 )
  34260. if m.lnResult == 0
  34261.     error _GDIPLUS_INTERNALBUFTOOSMALL_LOC
  34262.     return cast(null as C)
  34263.     return strconv(left(m.lcUnicodeString,(m.lnResult-1)*2),6)
  34264. endif
  34265. ENDPROC
  34266. PROCEDURE stringtoguid
  34267. lparameters lcString as String
  34268. #if GDIPLUS_CHECK_PARAMS
  34269. if !(vartype(m.lcString)='C')
  34270.     error 11 && function argument
  34271.     return cast(null as Q) && Function argument
  34272. endif
  34273. #endif
  34274. local lcCLSID, lnResult
  34275. lcCLSID = replicate(chr(0),16)
  34276. declare integer CLSIDFromString in ole32.dll ;
  34277.     string cString, string @cCLSID
  34278. lnResult = CLSIDFromString( strconv(m.lcString,5), @lcCLSID )
  34279. if m.lnResult == 0
  34280.     return cast(m.lcCLSID as Q(16))
  34281.     error _GDIPLUS_STRINGTOGUID_LOC
  34282.     return cast(null as Q)
  34283. endif
  34284. ENDPROC
  34285. PROCEDURE makegdipsizef
  34286. lparameters tw as number,th as number
  34287. #if GDIPLUS_CHECK_PARAMS
  34288. if !(vartype(m.tw)+vartype(m.th)=='NN')
  34289.     error 11 && function argument
  34290.     return cast(null as C)
  34291. endif
  34292. #endif
  34293. return ;
  34294.     bintoc(m.tW,'F') + bintoc(m.tH,'F')
  34295. ENDPROC
  34296. PROCEDURE makegdiprectf
  34297. lparameters tx as number,ty as number,tw as number,th as number
  34298. #if GDIPLUS_CHECK_PARAMS 
  34299. if ! vartype(m.tx)+vartype(m.ty)+vartype(m.tw)+vartype(m.th)=='NNNN'
  34300.     error 11 && function argument
  34301.     return cast(null as C)
  34302. endif
  34303. #endif
  34304. return ;
  34305.     bintoc(m.tX,'F') + bintoc(m.tY,'F') ;
  34306.     + bintoc(m.tW,'F') + bintoc(m.tH,'F')
  34307. ENDPROC
  34308. PROCEDURE makegdiparrayf
  34309. lparameters taArray as array, tnCols as integer, tnFirstCol as integer
  34310. external array taArray
  34311. #if GDIPLUS_CHECK_PARAMS
  34312. if !(type('m.taArray[1,2]')='N')    && Must be 2-D array
  34313.     error 11 && function argument
  34314.     return cast(null as C)
  34315. endif
  34316. #endif
  34317. local lcStruct, lnRows, lnRow, lnCol, lnFirstCol, lnColsMinusOne
  34318. lnRows = alen(taArray,1)
  34319. lnFirstCol = evl(m.tnFirstCol,1)
  34320. lnColsMinusOne= iif(empty(m.tnCols), alen(taArray,2)-m.lnFirstCol, m.tnCols-1 )
  34321. #if GDIPLUS_CHECK_PARAMS
  34322. if !(between(m.lnFirstCol,1,alen(taArray,2)) and between(m.lnColsMinusOne,0,alen(taArray,2)-m.lnFirstCol))
  34323.     error 11 && function argument
  34324.     return cast(null as C)
  34325. endif
  34326. #endif
  34327. lcStruct = ''
  34328. for lnRow = 1 to m.lnRows
  34329.     for lnCol = m.lnFirstCol to m.lnFirstCol+m.lnColsMinusOne
  34330.         lcStruct = m.lcStruct + bintoc(taArray[m.lnRow,m.lnCol],'F')
  34331.     endfor
  34332. endfor
  34333. assert len(m.lcStruct) == m.lnRows*4*(m.lnColsMinusOne+1)
  34334. return m.lcStruct
  34335. * Determine length from the result
  34336. ENDPROC
  34337. PROCEDURE makegdiparrayffromcursor
  34338. lparameters tcAlias as string, tnCols as Integer ;
  34339.     , tcExpr1 as string, tcExpr2 as string, tcExpr3 as string, tcExpr4 as String ;
  34340.     , tcExpr5 as string, tcExpr6 as string, tcExpr7 as string, tcExpr8 as string
  34341. #if GDIPLUS_CHECK_PARAMS
  34342. if !(vartype(m.tcAlias)='C' and vartype(m.tnCols)='N' and between(m.tnCols,1,8))
  34343.     error 11 && function argument
  34344.     return cast(null as C)
  34345. endif
  34346. if !used(m.tcAlias)
  34347.     error 13, m.tcAlias    && Alias not found
  34348.     return cast(null as C)
  34349. endif
  34350. #endif
  34351. local lcStruct, lnCol, lnSaveArea, lnSaveRecno, laExpr[m.tnCols]
  34352. lnSaveArea = select()
  34353. select (m.tcAlias)
  34354. lnSaveRecno = recno()
  34355. * Check expressions
  34356. for lnCol = 1 to m.tnCols
  34357.     laExpr[m.lnCol] = evaluate("m.tcExpr"+ltrim(str(m.lnCol)))
  34358.     #if GDIPLUS_CHECK_PARAMS
  34359.     if vartype(laExpr[m.lnCol])!='C'
  34360.         error 11 && function argument
  34361.         return cast(null as C)
  34362.     endif
  34363.     #endif
  34364. endfor
  34365. lcStruct = ''
  34366.     for lnCol = 1 to m.tnCols
  34367.         lcStruct = m.lcStruct + bintoc(evaluate(laExpr[m.lnCol]),'F')
  34368.     endfor
  34369. endscan
  34370. if m.lnSaveRecno<=reccount()
  34371.     go (m.lnSaveRecno)
  34372. endif
  34373. select (m.lnSaveArea)
  34374. return m.lcStruct
  34375. ENDPROC
  34376. PROCEDURE makegdippointf
  34377. lparameters tx as number,ty as number
  34378. #if GDIPLUS_CHECK_PARAMS
  34379. if ! vartype(m.tx)+vartype(m.ty)=='NN'
  34380.     error 11 && function argument
  34381.     return cast(null as C)
  34382. endif
  34383. #endif
  34384. return ;
  34385.     bintoc(m.tX,'F') + bintoc(m.tY,'F')
  34386. ENDPROC
  34387. PROCEDURE allowmodalmessages_assign
  34388. lparameters vNewVal
  34389. #if GDIPLUS_CHECK_PARAMS
  34390. if vartype(m.vNewVal)='L'
  34391. #endif
  34392.     This.AllowModalMessages = m.vNewVal
  34393. #if GDIPLUS_CHECK_PARAMS
  34394.     error 11 && func arg
  34395. endif
  34396. #endif
  34397. ENDPROC
  34398. PROCEDURE quietonerror_assign
  34399. lparameters vNewVal
  34400. #if GDIPLUS_CHECK_PARAMS
  34401. if vartype(m.vNewVal)='L'
  34402. #endif
  34403.     This.QuietOnError = m.vNewVal
  34404. #if GDIPLUS_CHECK_PARAMS
  34405.     error 11 && func arg
  34406. endif
  34407. #endif
  34408. ENDPROC
  34409. PROCEDURE ignoreerrors_assign
  34410. lparameters vNewVal
  34411. #if GDIPLUS_CHECK_PARAMS
  34412. if vartype(m.vNewVal)='L'
  34413. #endif
  34414.     This.IgnoreErrors = m.vNewVal
  34415. #if GDIPLUS_CHECK_PARAMS
  34416.     error 11 && func arg
  34417. endif
  34418. #endif
  34419. ENDPROC
  34420. PROCEDURE clearerrors
  34421. This.hadError = .F.
  34422. This.LastErrorMessage = ''
  34423. ENDPROC
  34424. PROCEDURE geterrorstatus
  34425. return This.hadError
  34426. ENDPROC
  34427. PROCEDURE getlasterrormessage
  34428. return This.LastErrorMessage
  34429. ENDPROC
  34430. PROCEDURE appname_assign
  34431. lparameters vNewVal
  34432. #if GDIPLUS_CHECK_PARAMS
  34433. if vartype(m.vNewVal)='C'
  34434. #endif
  34435.     This.AppName = m.vNewVal
  34436. #if GDIPLUS_CHECK_PARAMS
  34437.     error 11 && func arg
  34438. endif
  34439. #endif
  34440. ENDPROC
  34441. PROCEDURE objfactory
  34442. lparameters tcContext, tcClassName ;
  34443.     , p1,p2,p3,p4,p5,p6,p7,p8,p9,p10
  34444. * Class name is one of _gdiplus.vcx base classes, or you could extend it yourself
  34445. * context is where it is called from, in the form 'class.method'
  34446. #if GDIPLUS_CHECK_PARAMS
  34447. if !(vartype(m.tcContext)+vartype(m.tcClassName )=='CC')
  34448.     error 11 && function argument
  34449.     return cast(null as O) && Function argument
  34450. endif
  34451. #endif
  34452. * Base implementation - always use same class library as header file
  34453. local lcClassLibrary,lcModule
  34454. lcClassLibrary = GDIPLUS_CLASS_LIBRARY
  34455. lcModule = ''
  34456. * Allow modifications to class chosen. Note arguments cannot be changed
  34457. This.ObjFactoryHook( tcContext, @tcClassName, @lcClassLibrary, @lcModule )
  34458. * Most common cases in _GDIPLUS.VCX are 1 and 2 args so do those pcounts() first
  34459. do case
  34460. case pcount()==3
  34461.     return newobject(m.tcClassName,m.lcClassLibrary,m.lcModule,@p1)
  34462. case pcount()==4
  34463.     return newobject(m.tcClassName,m.lcClassLibrary,m.lcModule,@p1,@p2)
  34464. case pcount()==2
  34465.     return newobject(m.tcClassName,m.lcClassLibrary,m.lcModule)
  34466. case pcount()==5
  34467.     return newobject(m.tcClassName,m.lcClassLibrary,m.lcModule,@p1,@p2,@p3)
  34468. case pcount()==6
  34469.     return newobject(m.tcClassName,m.lcClassLibrary,m.lcModule,@p1,@p2,@p3,@p4)
  34470. case pcount()==7
  34471.     return newobject(m.tcClassName,m.lcClassLibrary,m.lcModule,@p1,@p2,@p3,@p4,@p5)
  34472. case pcount()==8
  34473.     return newobject(m.tcClassName,m.lcClassLibrary,m.lcModule,@p1,@p,@p3,@p4,@p5,@p6)
  34474. case pcount()==9
  34475.     return newobject(m.tcClassName,m.lcClassLibrary,m.lcModule,@p1,@p2,@p3,@p4,@p5,@p6,@p7)
  34476. case pcount()==10
  34477.     return newobject(m.tcClassName,m.lcClassLibrary,m.lcModule,@p1,@p2,@p3,@p4,@p5,@p6,@p7,@p8)
  34478. case pcount()==11
  34479.     return newobject(m.tcClassName,m.lcClassLibrary,m.lcModule,@p1,@p2,@p3,@p4,@p5,@p6,@p7,@p8,@p9)
  34480. case pcount()==12
  34481.     return newobject(m.tcClassName,m.lcClassLibrary,m.lcModule,@p1,@p2,@p3,@p4,@p5,@p6,@p7,@p8,@p9,@p10)
  34482. endcase
  34483. error 11 && Function argument
  34484. return cast(null as O)
  34485. ENDPROC
  34486. PROCEDURE objfactoryhook
  34487. lparameters tcContext, rcClassName, rcClassLibrary, rcModule
  34488. * No special behaviour in base class
  34489. ENDPROC
  34490. PROCEDURE Error
  34491. LPARAMETERS nError as integer, cMethod as string, nLine as Integer
  34492. local lcMessage, lcCodeLine
  34493. lcMessage = message()
  34494. lcCodeLine = message(1)
  34495. This.HadError = .T.
  34496. if This.IgnoreErrors or _vfp.StartMode>0
  34497.     return .F.
  34498. endif
  34499. local lcOnError, lcErrorMsg
  34500. lcOnError = alltrim(on("error"))
  34501. if not empty(m.lcOnError)
  34502.     lcOnError= ;
  34503.         strtran( ;
  34504.         strtran( ;
  34505.         strtran( ;
  34506.         strtran( ;
  34507.         strtran( ;
  34508.         m.lcOnError,'error()',"m.nError",1,-1,1) ;
  34509.         ,'program()',"m.cMethod",1,-1,1) ;
  34510.         ,'lineno()',"m.nLine",1,-1,1) ;
  34511.         ,'message()',"m.lcMessage",1,-1,1) ;
  34512.         ,'message(1)',"m.lcCodeLine",1,-1,1) 
  34513.     &lcOnError
  34514.     return
  34515. endif
  34516. lcErrorMsg = ;
  34517.     m.lcMessage ;
  34518.     +chr(13)+chr(13) ;
  34519.     + This.Name ;
  34520.     + chr(13) + _GDIPLUS_ERRNOLABEL_LOC + ltrim(str(m.nError)) ;
  34521.     + chr(13) + _GDIPLUS_ERRPROCLABEL_LOC + m.cMethod ;
  34522.     + chr(13) + _GDIPLUS_ERRLINELABEL_LOC + ltrim(str(m.nLine)) ;
  34523.     + chr(13) + m.lcCodeLine
  34524. This.LastErrorMessage = m.lcErrorMsg
  34525. do case
  34526. case This.QuietOnError
  34527.     * Do nothing
  34528. case This.AllowModalMessages
  34529.     messagebox( m.lcErrorMsg,16, This.AppName )
  34530. otherwise
  34531.     wait window (m.lcErrorMsg) nowait
  34532. endcase
  34533. #if GDIPLUS_ERRHANDLER_RETHROW
  34534.     if m.nError = 1098
  34535.         error m.lcMessage
  34536.     else
  34537.         * Note, this loses the additional parameter
  34538.         error m.nError
  34539.     endif
  34540. #endif    
  34541. ENDPROC
  34542. PROCEDURE Init
  34543. #ifdef GDIPLUS_ERRHANDLER_ALLOWMODAL
  34544.     This.AllowModalMessages = GDIPLUS_ERRHANDLER_ALLOWMODAL
  34545. #endif
  34546. #ifdef GDIPLUS_ERRHANDLER_QUIET
  34547.     This.QuietOnError = GDIPLUS_ERRHANDLER_QUIET
  34548. #endif
  34549. #ifdef GDIPLUS_ERRHANDLER_IGNOREERRORS
  34550.     This.IgnoreErrors = GDIPLUS_ERRHANDLER_IGNOREERRORS
  34551. #endif
  34552. #ifdef GDIPLUS_ERRHANDLER_APPNAME
  34553.     This.AppName = GDIPLUS_ERRHANDLER_APPNAME
  34554. #endif
  34555. return dodefault()    
  34556. ENDPROC
  34557. PROCEDURE alignment_access
  34558. #if GDIPLUS_CHECK_OBJECT
  34559. if This.gdipHandle==0
  34560.     error _GDIPLUS_NOGDIPOBJECT_LOC
  34561.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  34562.     return cast(null as I)
  34563. endif
  34564. #endif
  34565. declare integer GdipGetStringFormatAlign in gdiplus.dll ;
  34566.     integer nGraphics, integer @
  34567. local nAlignment
  34568. nAlignment = cast(null as I) && predefined error value
  34569. This.gdipStatus = GdipGetStringFormatAlign( This.gdipHandle, @nAlignment)
  34570. return m.nAlignment
  34571. ENDPROC
  34572. PROCEDURE alignment_assign
  34573. LPARAMETERS tnAlignment
  34574. #if GDIPLUS_CHECK_PARAMS
  34575. if !(vartype(m.tnAlignment)='N')
  34576.     error 11 && Function argument
  34577.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  34578.     return .F.
  34579. endif
  34580. #endif
  34581. #if GDIPLUS_CHECK_OBJECT
  34582. if This.gdipHandle==0
  34583.     error _GDIPLUS_NOGDIPOBJECT_LOC
  34584.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  34585.     return .F.
  34586. endif
  34587. if !This.gdipOwnsThisHandle
  34588.     error _GDIPLUS_GDIPNOTOWNED_LOC
  34589.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  34590.     return .F.
  34591. endif
  34592. #endif
  34593. declare integer GdipSetStringFormatAlign in gdiplus.dll ;
  34594.     integer nGraphics, integer
  34595. This.gdipStatus = GdipSetStringFormatAlign( This.gdipHandle,m.tnAlignment)
  34596. return GDIPLUS_STATUS_OK == This.gdipStatus
  34597. ENDPROC
  34598. PROCEDURE formatflags_access
  34599. #if GDIPLUS_CHECK_OBJECT
  34600. if This.gdipHandle==0
  34601.     error _GDIPLUS_NOGDIPOBJECT_LOC
  34602.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  34603.     return cast(null as I)
  34604. endif
  34605. #endif
  34606. declare integer GdipGetStringFormatFlags in gdiplus.dll ;
  34607.     integer nGraphics, integer @
  34608. local nFlags
  34609. nFlags = 0
  34610. This.gdipStatus = GdipGetStringFormatFlags( This.gdipHandle, @nFlags)
  34611. return iif(This.gdipStatus==GDIPLUS_STATUS_OK,m.nFlags,cast(null as I))
  34612. ENDPROC
  34613. PROCEDURE formatflags_assign
  34614. LPARAMETERS tnFlags
  34615. #if GDIPLUS_CHECK_PARAMS
  34616. if !(vartype(m.tnFlags)='N')
  34617.     error 11 && Function argument
  34618.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  34619.     return .F.
  34620. endif
  34621. #endif
  34622. #if GDIPLUS_CHECK_OBJECT
  34623. if This.gdipHandle==0
  34624.     error _GDIPLUS_NOGDIPOBJECT_LOC
  34625.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  34626.     return .F.
  34627. endif
  34628. if !This.gdipOwnsThisHandle
  34629.     error _GDIPLUS_GDIPNOTOWNED_LOC
  34630.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  34631.     return .F.
  34632. endif
  34633. #endif
  34634. declare integer GdipSetStringFormatFlags in gdiplus.dll ;
  34635.     integer nGraphics, integer
  34636. This.gdipStatus = GdipSetStringFormatFlags( This.gdipHandle,m.tnFlags)
  34637. return GDIPLUS_STATUS_OK == This.gdipStatus
  34638. ENDPROC
  34639. PROCEDURE hotkeyprefix_access
  34640. #if GDIPLUS_CHECK_OBJECT
  34641. if This.gdipHandle==0
  34642.     error _GDIPLUS_NOGDIPOBJECT_LOC
  34643.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  34644.     return cast(null as I)
  34645. endif
  34646. #endif
  34647. declare integer GdipGetStringFormatHotkeyPrefix in gdiplus.dll ;
  34648.     integer nGraphics, integer @
  34649. local nPrefix
  34650. nPrefix = 0
  34651. This.gdipStatus = GdipGetStringFormatHotkeyPrefix( This.gdipHandle, @nPrefix)
  34652. return iif(This.gdipStatus==GDIPLUS_STATUS_OK,m.nPrefix,cast(null as I))
  34653. ENDPROC
  34654. PROCEDURE hotkeyprefix_assign
  34655. LPARAMETERS tnPrefix
  34656. #if GDIPLUS_CHECK_PARAMS
  34657. if !(vartype(m.tnPrefix)='N')
  34658.     error 11 && Function argument
  34659.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  34660.     return .F.
  34661. endif
  34662. #endif
  34663. #if GDIPLUS_CHECK_OBJECT
  34664. if This.gdipHandle==0
  34665.     error _GDIPLUS_NOGDIPOBJECT_LOC
  34666.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  34667.     return .F.
  34668. endif
  34669. if !This.gdipOwnsThisHandle
  34670.     error _GDIPLUS_GDIPNOTOWNED_LOC
  34671.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  34672.     return .F.
  34673. endif
  34674. #endif
  34675. declare integer GdipSetStringFormatHotkeyPrefix in gdiplus.dll ;
  34676.     integer nGraphics, integer
  34677. This.gdipStatus = GdipSetStringFormatHotkeyPrefix( This.gdipHandle,m.tnPrefix)
  34678. return GDIPLUS_STATUS_OK == This.gdipStatus
  34679. ENDPROC
  34680. PROCEDURE linealignment_access
  34681. #if GDIPLUS_CHECK_OBJECT
  34682. if This.gdipHandle==0
  34683.     error _GDIPLUS_NOGDIPOBJECT_LOC
  34684.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  34685.     return cast(null as I)
  34686. endif
  34687. #endif
  34688. declare integer GdipGetStringFormatLineAlign in gdiplus.dll ;
  34689.     integer nGraphics, integer @
  34690. local nAlignment
  34691. nAlignment = 0
  34692. This.gdipStatus = GdipGetStringFormatLineAlign( This.gdipHandle, @nAlignment)
  34693. return iif(This.gdipStatus==GDIPLUS_STATUS_OK,m.nAlignment,cast(null as I))
  34694. ENDPROC
  34695. PROCEDURE linealignment_assign
  34696. LPARAMETERS tnAlignment
  34697. #if GDIPLUS_CHECK_PARAMS
  34698. if !(vartype(m.tnAlignment)='N')
  34699.     error 11 && Function argument
  34700.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  34701.     return .F.
  34702. endif
  34703. #endif
  34704. #if GDIPLUS_CHECK_OBJECT
  34705. if This.gdipHandle==0
  34706.     error _GDIPLUS_NOGDIPOBJECT_LOC
  34707.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  34708.     return .F.
  34709. endif
  34710. if !This.gdipOwnsThisHandle
  34711.     error _GDIPLUS_GDIPNOTOWNED_LOC
  34712.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  34713.     return .F.
  34714. endif
  34715. #endif
  34716. declare integer GdipSetStringFormatLineAlign in gdiplus.dll ;
  34717.     integer nGraphics, integer
  34718. This.gdipStatus = GdipSetStringFormatLineAlign( This.gdipHandle,m.tnAlignment)
  34719. return GDIPLUS_STATUS_OK == This.gdipStatus
  34720. ENDPROC
  34721. PROCEDURE trimming_access
  34722. #if GDIPLUS_CHECK_OBJECT
  34723. if This.gdipHandle==0
  34724.     error _GDIPLUS_NOGDIPOBJECT_LOC
  34725.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  34726.     return cast(null as I)
  34727. endif
  34728. #endif
  34729. declare integer GdipGetStringFormatTrimming in gdiplus.dll ;
  34730.     integer nGraphics, integer @
  34731. local nMode
  34732. nMode = 0
  34733. This.gdipStatus = GdipGetStringFormatTrimming( This.gdipHandle, @nMode)
  34734. return iif(This.gdipStatus==GDIPLUS_STATUS_OK,m.nMode,cast(null as I))
  34735. ENDPROC
  34736. PROCEDURE trimming_assign
  34737. LPARAMETERS tnMode
  34738. #if GDIPLUS_CHECK_PARAMS
  34739. if !(vartype(m.tnMode)='N')
  34740.     error 11 && Function argument
  34741.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  34742.     return .F.
  34743. endif
  34744. #endif
  34745. #if GDIPLUS_CHECK_OBJECT
  34746. if This.gdipHandle==0
  34747.     error _GDIPLUS_NOGDIPOBJECT_LOC
  34748.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  34749.     return .F.
  34750. endif
  34751. if !This.gdipOwnsThisHandle
  34752.     error _GDIPLUS_GDIPNOTOWNED_LOC
  34753.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  34754.     return .F.
  34755. endif
  34756. #endif
  34757. declare integer GdipSetStringFormatTrimming in gdiplus.dll ;
  34758.     integer nGraphics, integer
  34759. This.gdipStatus = GdipSetStringFormatTrimming( This.gdipHandle,m.tnMode)
  34760. return GDIPLUS_STATUS_OK == This.gdipStatus
  34761. ENDPROC
  34762. PROCEDURE getgenericdefault
  34763. lparameters tlMakeClone
  34764. this.Destroy()
  34765. local nHandle
  34766. nHandle = 0
  34767. Declare Integer GdipStringFormatGetGenericDefault In GDIPlus.Dll ;
  34768.     integer @nHandle
  34769. This.gdipStatus = GdipStringFormatGetGenericDefault (@nHandle )
  34770. if This.gdipStatus <> GDIPLUS_STATUS_OK
  34771.     return .F.
  34772. endif
  34773. if m.tlMakeClone
  34774.     Declare Integer GdipCloneStringFormat In GDIPlus.Dll ;
  34775.         integer nOriginal, integer @nClone
  34776.     This.GdipStatus = GdipCloneStringFormat( ;
  34777.         (m.nHandle) ;
  34778.     ,    @nHandle)
  34779.     if GDIPLUS_STATUS_OK == This.GdipStatus
  34780.         This.SetHandle(m.nHandle,.T.)
  34781.     endif
  34782.     This.SetHandle(m.nHandle,.F.)
  34783. endif
  34784. return GDIPLUS_STATUS_OK == This.GdipStatus
  34785. ENDPROC
  34786. PROCEDURE getgenerictypographic
  34787. lparameters tlMakeClone
  34788. this.Destroy()
  34789. local nHandle
  34790. nHandle = 0
  34791. Declare Integer GdipStringFormatGetGenericTypographic In GDIPlus.Dll ;
  34792.     integer @nHandle
  34793. This.gdipStatus = GdipStringFormatGetGenericTypographic(@nHandle )
  34794. if This.gdipStatus <> GDIPLUS_STATUS_OK
  34795.     return .F.
  34796. endif
  34797. if m.tlMakeClone
  34798.     Declare Integer GdipCloneStringFormat In GDIPlus.Dll ;
  34799.         integer nOriginal, integer @nClone
  34800.         
  34801.     This.GdipStatus = GdipCloneStringFormat( ;
  34802.         (m.nHandle) ;
  34803.     ,    @nHandle)
  34804.     if GDIPLUS_STATUS_OK == This.GdipStatus
  34805.         This.SetHandle(m.nHandle,.T.)
  34806.     endif
  34807.     This.SetHandle(m.nHandle,.F.)
  34808. endif
  34809. return GDIPLUS_STATUS_OK == This.GdipStatus
  34810. ENDPROC
  34811. PROCEDURE create
  34812. lparameters tnFlags, tnLangID
  34813. this.Destroy()
  34814. local nHandle
  34815. nHandle = 0
  34816. Declare Integer GdipCreateStringFormat In GDIPlus.Dll ;
  34817.     integer,integer,integer @nHandle
  34818. This.gdipStatus = GdipCreateStringFormat ( ;
  34819.     evl(tnFlags,0) ;
  34820.     , evl(m.tnLangID,0) ;
  34821.     , @nHandle )
  34822. This.SetHandle(m.nHandle,.T.)
  34823. return GDIPLUS_STATUS_OK == This.GdipStatus
  34824. ENDPROC
  34825. PROCEDURE clone
  34826. lparameters toStringFormat as GpStringFormat
  34827. this.Destroy()
  34828. local nHandle
  34829. nHandle = 0
  34830. #if GDIPLUS_CHECK_PARAMS
  34831. if !(vartype(m.toStringFormat)='O' and m.toStringFormat.gdipHandle<>0)
  34832.     error 11 && Function argument
  34833.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  34834.     return .F.
  34835. endif
  34836. #endif
  34837. Declare Integer GdipCloneStringFormat In GDIPlus.Dll ;
  34838.     integer nOriginal, integer @nClone
  34839. This.GdipStatus = GdipCloneStringFormat( ;
  34840.     m.toStringFormat.gdipHandle ;
  34841. ,    @nHandle)
  34842. this.gdipHandle= m.nHandle
  34843. This.gdipOwnsThisHandle = .T.
  34844. return GDIPLUS_STATUS_OK == This.GdipStatus
  34845. ENDPROC
  34846. PROCEDURE Destroy
  34847. if This.GdipHandle!=0 and This.gdipOwnsThisHandle
  34848.     Declare Integer GdipDeleteStringFormat In GDIPlus.Dll ;
  34849.         integer nStringFormat
  34850.     GdipDeleteStringFormat(This.GdipHandle)
  34851.     This.GdipHandle=0
  34852.     This.gdipOwnsThisHandle=.F.
  34853. endif
  34854. ENDPROC
  34855. PROCEDURE Init
  34856. lparameters tnFlags, tnLangID
  34857. if not dodefault()
  34858.     return .F.
  34859. endif
  34860. if pcount()>0
  34861.     return This.Create(m.tnFlags,m.tnLangID)
  34862. endif
  34863. ENDPROC
  34864. w>PROCEDURE createfromfile
  34865. lparameters tcFilename as String, tlUseEmbeddedColorMgmt as Logical
  34866. #if GDIPLUS_CHECK_PARAMS
  34867. if !(vartype(m.tcFilename)='C' and !empty(m.tcFilename) and vartype(m.tlUseEmbeddedColorMgmt)='L')
  34868.     error 11 && function argument
  34869.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  34870.     return .F.
  34871. endif
  34872. #endif
  34873. if m.tlUseEmbeddedColorMgmt
  34874.     declare integer GdipLoadImageFromFileICM in gdiplus.dll ;
  34875.         string wFilename, integer @ nImage
  34876.     this.Destroy()
  34877.     local nHandle
  34878.     nHandle = 0
  34879.     This.gdipStatus = GdipLoadImageFromFileICM( ;
  34880.         strconv(m.tcFilename+chr(0),5) ;
  34881.     ,    @nHandle)
  34882.     this.SetHandle(m.nHandle,.T.)
  34883.     return GDIPLUS_STATUS_OK == This.gdipStatus
  34884.     declare integer GdipLoadImageFromFile in gdiplus.dll ;
  34885.         string wFilename, integer @ nImage
  34886.     this.Destroy()
  34887.     local nHandle
  34888.     nHandle = 0
  34889.     This.gdipStatus = GdipLoadImageFromFile( ;
  34890.         strconv(m.tcFilename+chr(0),5) ;
  34891.     ,    @nHandle)
  34892.     this.SetHandle(m.nHandle,.T.)
  34893.     return GDIPLUS_STATUS_OK == This.gdipStatus
  34894. endif
  34895. ENDPROC
  34896. PROCEDURE savetofile
  34897. lparameters tcFilename as String, tvCLSIDEncoder, rvEncoderParams
  34898. #if GDIPLUS_CHECK_OBJECT
  34899. if This.gdipHandle==0
  34900.     error _GDIPLUS_NOGDIPOBJECT_LOC
  34901.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  34902.     return .F.
  34903. endif
  34904. #endif
  34905. #if GDIPLUS_CHECK_PARAMS
  34906. if !(vartype(m.tcFilename)='C' and !empty(m.tcFilename))
  34907.     error 11 && Function argument
  34908. endif
  34909. #endif
  34910. local lqCLSIDEncoder
  34911. * Encoder may be varbinary, or string
  34912. do case
  34913. case vartype(m.tvCLSIDEncoder)=='Q'
  34914.     lqCLSIDEncoder = m.tvCLSIDEncoder
  34915. case vartype(m.tvCLSIDEncoder)=='C'
  34916.     if left(m.tvCLSIDEncoder,1)=='{'
  34917.         lqCLSIDEncoder = This.StringToGUID( m.tvCLSIDEncoder)
  34918.     else
  34919.         lqCLSIDEncoder = This.GetEncoderCLSID(m.tvCLSIDEncoder)
  34920.     endif
  34921. otherwise
  34922.     error 11
  34923. endcase
  34924. declare integer GdipSaveImageToFile in gdiplus.dll ;
  34925.     integer nImage, string wFilename, string qEncoder, integer  nEncoderParamsPtr
  34926. declare integer GlobalFree in kernel32.dll integer nHandle
  34927. local lnEncoderParamsPtr
  34928. do case
  34929. case type("rvEncoderParams[1]")!='U'
  34930.     lnEncoderParamsPtr = This.getEncoderParamsFromArray( m.lqCLSIDEncoder, @rvEncoderParams )
  34931. case vartype(m.rvEncoderParams)=='C'
  34932.     lnEncoderParamsPtr = This.getEncoderParamsFromString( m.lqCLSIDEncoder, @rvEncoderParams )
  34933. case vartype(m.rvEncoderParams)=='L' and !m.rvEncoderParams
  34934.     lnEncoderParamsPtr = 0
  34935. otherwise
  34936.     error 11    && function argument
  34937.     return .F.
  34938. endcase
  34939. This.gdipStatus = GdipSaveImageToFile ( ;
  34940.     This.gdipHandle ;
  34941. ,    strconv(m.tcFilename,5)+chr(0) ;
  34942. ,    m.lqCLSIDEncoder ;
  34943. ,    m.lnEncoderParamsPtr ) 
  34944. if m.lnEncoderParamsPtr!=0
  34945.     GlobalFree(m.lnEncoderParamsPtr)
  34946. endif
  34947. return GDIPLUS_STATUS_OK == This.gdipStatus
  34948. ENDPROC
  34949. PROCEDURE getthumbnailimage
  34950. lparameters tnWidth as Integer, tnHeight as Integer
  34951. #if GDIPLUS_CHECK_OBJECT
  34952. if This.gdipHandle==0
  34953.     error _GDIPLUS_NOGDIPOBJECT_LOC
  34954.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  34955.     return null
  34956. endif
  34957. #endif
  34958. #if GDIPLUS_CHECK_PARAMS
  34959. if !(vartype(m.tnWidth)='N' and vartype(m.tnHeight)='N')
  34960.     error 11 && function argument
  34961.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  34962.     return .F.
  34963. endif
  34964. #endif
  34965. declare integer GdipGetImageThumbnail in gdiplus.dll ;
  34966.     integer nSrcImage, integer nWidth, integer nHeight, integer @nNewImage,integer,integer
  34967. local lnNewImage
  34968. lnNewImage = 0
  34969. This.gdipStatus = GdipGetImageThumbnail( ;
  34970.     This.gdipHandle ;
  34971.     , m.tnWidth, m.tnHeight, @lnNewImage, 0, 0 )
  34972. if GDIPLUS_STATUS_OK == This.gdipStatus
  34973.     return This.ObjFactory('gpimage.getthumbnailimage', GDIPLUS_CLASS_IMAGE,m.lnNewImage)
  34974. else    
  34975.     return null
  34976. endif    
  34977. ENDPROC
  34978. PROCEDURE getencoderclsid
  34979. lparameters tvSearchValue
  34980. * When passed varbinary, search on Image format GUID
  34981. * When passed char, search on mime type
  34982. #if GDIPLUS_CHECK_PARAMS
  34983. if !(vartype(m.tvSearchValue)='C' or (vartype(m.tvSearchValue)='Q' and len(m.tvSearchValue)=16))
  34984.     error 11 && function argument
  34985.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  34986.     return cast(null as Q)
  34987. endif
  34988. #endif
  34989. local lnNumEncoders as Integer, lnBufferSize as integer
  34990. lnNumEncoders = 0
  34991. lnBufferSize = 0
  34992. * The buffer is self-referencing: it starts with an array of ImageCodecInfo
  34993. * followed by the text strings, and the array contains pointers to the text strings
  34994. * To avoid the danger, however slight, of VFP moving this memory around, I allocate
  34995. * Memory using GlobalAlloc.
  34996. * eg on my system, sizeof(ImageCodecInfo)=76, num encoders=5, but lnBufferSize=1040
  34997. * object is 1040 bytes
  34998. declare integer GlobalAlloc in kernel32.dll integer nFlags, integer nSize
  34999. declare integer GlobalFree in kernel32.dll integer nHandle
  35000. declare integer lstrlenW in kernel32.dll as __win32_lstrlenW_ptr integer
  35001. declare integer GdipGetImageEncodersSize in gdiplus.dll ;
  35002.     integer @numEncoders, integer @ nsize
  35003. declare integer GdipGetImageEncoders in gdiplus.dll ;
  35004.     integer numEncoders, integer nsize, integer nBufferPtr
  35005. This.gdipStatus = GdipGetImageEncodersSize( @lnNumEncoders, @lnBufferSize )
  35006. if GDIPLUS_STATUS_OK != This.gdipStatus
  35007.     return cast(null as Q)
  35008. endif
  35009. local lnBufferPtr as Integer, lnStringPtr as integer, liEncoder as integer
  35010. lnBufferPtr = GlobalAlloc( 0x0040, m.lnBufferSize ) && 0x40=GMEM_FIXED|GMEM_ZEROINIT
  35011. * Be careful from now on to deallocate this memory
  35012. * TRY ..CATCH would be smart?
  35013. This.gdipStatus = GdipGetImageEncoders( m.lnNumEncoders, m.lnBufferSize, m.lnBufferPtr )
  35014. if GDIPLUS_STATUS_OK != This.gdipStatus
  35015.     GlobalFree( m.lnBufferPtr )
  35016.     return cast(null as Q)
  35017. endif
  35018. local lcFoundCLSID
  35019. lcFoundCLSID = null
  35020. do case
  35021. case vartype(m.tvSearchValue)='C'    && Search on mime type
  35022.     local lcUnicodeMimeType
  35023.     lcUnicodeMimeType = strconv(m.tvSearchValue,5)
  35024.     for liEncoder = 0 to m.lnNumEncoders-1
  35025.         lnStringPtr = ctobin( sys(2600,m.lnBufferPtr+m.liEncoder*76+48,4),'RS')
  35026.         if m.lcUnicodeMimeType == sys(2600,lnStringPtr,__win32_lstrlenW_ptr(m.lnStringPtr)*2 )
  35027.             lcFoundCLSID = sys(2600,m.lnBufferPtr+m.liEncoder*76,16)
  35028.             exit
  35029.         endif
  35030.     endfor
  35031. case vartype(m.tvSearchValue)='Q'    && Search on Image format GUID
  35032.     local lcFormatID
  35033.     lcFormatID = cast(m.tvSearchValue as C(16))
  35034.     for liEncoder = 0 to m.lnNumEncoders-1
  35035.         if m.tvSearchValue == cast( sys(2600,m.lnBufferPtr+m.liEncoder*76+16,16) as Q(16) )
  35036.             lcFoundCLSID = sys(2600,m.lnBufferPtr+m.liEncoder*76,16)
  35037.             exit
  35038.         endif
  35039.     endfor
  35040. otherwise
  35041.     error 11 && function argument
  35042.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  35043.     return cast(null as Q)
  35044. endcase    
  35045. GlobalFree( m.lnBufferPtr )
  35046. return cast( m.lcFoundCLSID as Q(16) )
  35047. ENDPROC
  35048. PROCEDURE getbounds
  35049. lparameters tnUnit as integer
  35050. #if GDIPLUS_CHECK_PARAMS
  35051. if !(vartype(m.tnUnit)='N')
  35052.     error 11 && function argument
  35053.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  35054.     return null
  35055. endif
  35056. #endif
  35057. #if GDIPLUS_CHECK_OBJECT
  35058. if This.gdipHandle==0
  35059.     error _GDIPLUS_NOGDIPOBJECT_LOC
  35060.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  35061.     return null
  35062. endif
  35063. #endif
  35064. declare integer GdipGetImageBounds in gdiplus.dll ;
  35065.     integer nGraphics, string @ pRectF, integer @nUnit
  35066. local lcRectF
  35067. lcRectF = replicate(chr(0),16)
  35068. This.gdipStatus = GdipGetImageBounds( This.gdipHandle, @lcRectF, @tnUnit )
  35069. if This.gdipStatus==GDIPLUS_STATUS_OK and len(m.lcRectF)==16
  35070.     return This.ObjFactory( 'gpimage.getbounds', GDIPLUS_CLASS_RECT,@lcRectF)
  35071.     return null
  35072. endif
  35073. ENDPROC
  35074. PROCEDURE rotateflip
  35075. lparameters tnRotateFlipType
  35076. #if GDIPLUS_CHECK_OBJECT
  35077. if This.gdipHandle==0
  35078.     error _GDIPLUS_NOGDIPOBJECT_LOC
  35079.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  35080.     return .F.
  35081. endif
  35082. #endif
  35083. #if GDIPLUS_CHECK_PARAMS
  35084. if !(vartype(m.tnRotateFlipType)='N')
  35085.     error 11 && function argument
  35086.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  35087.     return .F.
  35088. endif
  35089. #endif
  35090. declare integer GdipImageRotateFlip in gdiplus.dll ;
  35091.     integer nImage, integer nMode
  35092. This.gdipStatus = GdipImageRotateFlip( This.gdipHandle, m.tnRotateFlipType )
  35093. return (GDIPLUS_STATUS_OK == This.gdipStatus)
  35094. ENDPROC
  35095. PROCEDURE flags_access
  35096. #if GDIPLUS_CHECK_OBJECT
  35097. if This.gdipHandle==0
  35098.     error _GDIPLUS_NOGDIPOBJECT_LOC
  35099.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  35100.     return cast(null as I)
  35101. endif
  35102. #endif
  35103. declare Integer GdipGetImageFlags in gdiplus.dll ;
  35104.     integer nImage, integer @ nValue
  35105. local nValue
  35106. nValue = 0
  35107. This.gdipStatus = GdipGetImageFlags( This.gdipHandle, @nValue)
  35108. return iif(This.gdipStatus==GDIPLUS_STATUS_OK,m.nValue,cast(null as I))
  35109. ENDPROC
  35110. PROCEDURE flags_assign
  35111. lparameters newVal
  35112. error 1743, "Flags"
  35113. ENDPROC
  35114. PROCEDURE horizontalresolution_access
  35115. #if GDIPLUS_CHECK_OBJECT
  35116. if This.gdipHandle==0
  35117.     error _GDIPLUS_NOGDIPOBJECT_LOC
  35118.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  35119.     return cast(null as B)
  35120. endif
  35121. #endif
  35122. declare Integer GdipGetImageHorizontalResolution in gdiplus.dll ;
  35123.     integer nImage, single @ nValue
  35124. local nValue
  35125. nValue = 0.0
  35126. This.gdipStatus = GdipGetImageHorizontalResolution( This.gdipHandle, @nValue)
  35127. return iif(This.gdipStatus==GDIPLUS_STATUS_OK,m.nValue,cast(null as B))
  35128. ENDPROC
  35129. PROCEDURE horizontalresolution_assign
  35130. lparameters newVal
  35131. error 1743, "HorizontalResolution"
  35132. ENDPROC
  35133. PROCEDURE verticalresolution_access
  35134. #if GDIPLUS_CHECK_OBJECT
  35135. if This.gdipHandle==0
  35136.     error _GDIPLUS_NOGDIPOBJECT_LOC
  35137.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  35138.     return cast(null as B)
  35139. endif
  35140. #endif
  35141. declare Integer GdipGetImageVerticalResolution in gdiplus.dll ;
  35142.     integer nImage, single @ nValue
  35143. local nValue
  35144. nValue = 0.0
  35145. This.gdipStatus = GdipGetImageVerticalResolution( This.gdipHandle, @nValue)
  35146. return iif(This.gdipStatus==GDIPLUS_STATUS_OK,m.nValue,cast(null as B))
  35147. ENDPROC
  35148. PROCEDURE verticalresolution_assign
  35149. lparameters newVal
  35150. error 1743, "VerticalResolution"
  35151. ENDPROC
  35152. PROCEDURE imageheight_access
  35153. #if GDIPLUS_CHECK_OBJECT
  35154. if This.gdipHandle==0
  35155.     error _GDIPLUS_NOGDIPOBJECT_LOC
  35156.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  35157.     return cast(null as I)
  35158. endif
  35159. #endif
  35160. declare Integer GdipGetImageHeight in gdiplus.dll ;
  35161.     integer nImage, integer @ nValue
  35162. local nValue
  35163. nValue = 0
  35164. This.gdipStatus = GdipGetImageHeight( This.gdipHandle, @nValue)
  35165. return iif(This.gdipStatus==GDIPLUS_STATUS_OK,m.nValue,cast(null as I))
  35166. ENDPROC
  35167. PROCEDURE imageheight_assign
  35168. lparameters newVal
  35169. error 1743, "ImageHeight"
  35170. ENDPROC
  35171. PROCEDURE imagewidth_access
  35172. #if GDIPLUS_CHECK_OBJECT
  35173. if This.gdipHandle==0
  35174.     error _GDIPLUS_NOGDIPOBJECT_LOC
  35175.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  35176.     return cast(null as I)
  35177. endif
  35178. #endif
  35179. declare Integer GdipGetImageWidth in gdiplus.dll ;
  35180.     integer nPen, integer @ nValue
  35181. local nValue
  35182. nValue = 0
  35183. This.gdipStatus = GdipGetImageWidth( This.gdipHandle, @nValue)
  35184. return iif(This.gdipStatus==GDIPLUS_STATUS_OK,m.nValue,cast(null as I))
  35185. ENDPROC
  35186. PROCEDURE imagewidth_assign
  35187. lparameters newVal
  35188. error 1743, "ImageWidth"
  35189. ENDPROC
  35190. PROCEDURE rawformat_access
  35191. #if GDIPLUS_CHECK_OBJECT
  35192. if This.gdipHandle==0
  35193.     error _GDIPLUS_NOGDIPOBJECT_LOC
  35194.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  35195.     return cast(null as Q(16))
  35196. endif
  35197. #endif
  35198. declare Integer GdipGetImageRawFormat in gdiplus.dll ;
  35199.     integer nImage, string @ sGUID
  35200. local sGUID
  35201. sGUID = replicate(chr(0),16)
  35202. This.gdipStatus = GdipGetImageRawFormat( This.gdipHandle, @sGUID)
  35203. return cast(iif(This.gdipStatus==GDIPLUS_STATUS_OK,m.sGUID,null) as Q(16))
  35204. ENDPROC
  35205. PROCEDURE rawformat_assign
  35206. lparameters newVal
  35207. error 1743, "RawFormat"
  35208. ENDPROC
  35209. PROCEDURE pixelformat_access
  35210. #if GDIPLUS_CHECK_OBJECT
  35211. if This.gdipHandle==0
  35212.     error _GDIPLUS_NOGDIPOBJECT_LOC
  35213.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  35214.     return cast(null as I)
  35215. endif
  35216. #endif
  35217. declare Integer GdipGetImagePixelFormat in gdiplus.dll ;
  35218.     integer nPen, integer @ nValue
  35219. local nValue
  35220. nValue = 0
  35221. This.gdipStatus = GdipGetImagePixelFormat( This.gdipHandle, @nValue)
  35222. return iif(This.gdipStatus==GDIPLUS_STATUS_OK,m.nValue,cast(null as I))
  35223. ENDPROC
  35224. PROCEDURE pixelformat_assign
  35225. lparameters newVal
  35226. error 1743, "PixelFormat"
  35227. ENDPROC
  35228. PROCEDURE getdecoderclsid
  35229. lparameters tvSearchValue
  35230. * When passed varbinary, search on Image format GUID
  35231. * When passed char, search on mime type
  35232. #if GDIPLUS_CHECK_PARAMS
  35233. if !(vartype(m.tvSearchValue)='C' or (vartype(m.tvSearchValue)='Q' and len(m.tvSearchValue)=16))
  35234.     error 11 && function argument
  35235.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  35236.     return cast(null as Q)
  35237. endif
  35238. #endif
  35239. local lnNumDecoders as Integer, lnBufferSize as integer
  35240. lnNumDecoders = 0
  35241. lnBufferSize = 0
  35242. * The buffer is self-referencing: it starts with an array of ImageCodecInfo
  35243. * followed by the text strings, and the array contains pointers to the text strings
  35244. * To avoid the danger, however slight, of VFP moving this memory around, I allocate
  35245. * Memory using GlobalAlloc.
  35246. declare integer GlobalAlloc in kernel32.dll integer nFlags, integer nSize
  35247. declare integer GlobalFree in kernel32.dll integer nHandle
  35248. declare integer lstrlenW in kernel32.dll as __win32_lstrlenW_ptr integer
  35249. declare integer GdipGetImageDecodersSize in gdiplus.dll ;
  35250.     integer @numDecoders, integer @ nsize
  35251. declare integer GdipGetImageDecoders in gdiplus.dll ;
  35252.     integer numDecoders, integer nsize, integer nBufferPtr
  35253. This.gdipStatus = GdipGetImageDecodersSize( @lnNumDecoders, @lnBufferSize )
  35254. if GDIPLUS_STATUS_OK != This.gdipStatus
  35255.     return cast(null as Q)
  35256. endif
  35257. local lnBufferPtr as Integer, lnStringPtr as integer, liDecoder as integer
  35258. lnBufferPtr = GlobalAlloc( 0x0040, m.lnBufferSize ) && 0x40=GMEM_FIXED|GMEM_ZEROINIT
  35259. * Be careful from now on to deallocate this memory
  35260. * TRY ..CATCH would be smart?
  35261. This.gdipStatus = GdipGetImageDecoders( m.lnNumDecoders, m.lnBufferSize, m.lnBufferPtr )
  35262. if GDIPLUS_STATUS_OK != This.gdipStatus
  35263.     GlobalFree( m.lnBufferPtr )
  35264.     return cast(null as Q)
  35265. endif
  35266. local lcFoundCLSID
  35267. lcFoundCLSID = null
  35268. do case
  35269. case vartype(m.tvSearchValue)='C'    && Search on mime type
  35270.     local lcUnicodeMimeType
  35271.     lcUnicodeMimeType = strconv(m.tvSearchValue,5)
  35272.     for liDecoder = 0 to m.lnNumDecoders-1
  35273.         lnStringPtr = ctobin(sys(2600,m.lnBufferPtr+m.liDecoder*76+48,4),'RS')
  35274.         if m.lcUnicodeMimeType == sys(2600,lnStringPtr,__win32_lstrlenW_ptr(m.lnStringPtr)*2 )
  35275.             lcFoundCLSID = sys(2600,m.lnBufferPtr+m.liDecoder*76,16)
  35276.             exit
  35277.         endif
  35278.     endfor
  35279. case vartype(m.tvSearchValue)='Q'    && Search on Image format GUID
  35280.     local lcFormatID
  35281.     lcFormatID = cast(m.tvSearchValue as C(16))
  35282.     for liDecoder = 0 to m.lnNumDecoders-1
  35283.         if m.tvSearchValue == cast( sys(2600,m.lnBufferPtr+m.liDecoder*76+16,16) as Q(16) )
  35284.             lcFoundCLSID = sys(2600,m.lnBufferPtr+m.liDecoder*76,16)
  35285.             exit
  35286.         endif
  35287.     endfor
  35288. otherwise
  35289.     error 11 && function argument
  35290.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  35291.     * No return here - must still free memory, see below!
  35292. endcase    
  35293. GlobalFree( m.lnBufferPtr )
  35294. return cast( m.lcFoundCLSID as Q(16) )
  35295. ENDPROC
  35296. PROCEDURE physicaldimension_access
  35297. #if GDIPLUS_CHECK_OBJECT
  35298. if This.gdipHandle==0
  35299.     error _GDIPLUS_NOGDIPOBJECT_LOC
  35300.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  35301.     return null
  35302. endif
  35303. #endif
  35304. declare integer GdipGetImageDimension in gdiplus.dll ;
  35305.     integer nGraphics, single @, single @
  35306. local lnWidth, lnHeight
  35307. store 0.0 to lnWidth, lnHeight
  35308. This.gdipStatus = GdipGetImageDimension ( This.gdipHandle, @lnWidth, @lnHeight )
  35309. if This.gdipStatus==GDIPLUS_STATUS_OK
  35310.     return This.ObjFactory('gpimage.physicaldimension_access',GDIPLUS_CLASS_SIZE, m.lnWidth, m.lnHeight)
  35311.     return null
  35312. endif
  35313. ENDPROC
  35314. PROCEDURE physicaldimension_assign
  35315. lparameters newVal
  35316. error 1743, "PhysicalDimension"
  35317. ENDPROC
  35318. PROCEDURE getencoderparamsfromstring
  35319. lparameters lqCLSIDEncoder, tcEncoderParams
  35320. * Internal function, parse string into EncoderParameters array
  35321. * return global memory handle (pointer)
  35322. * Input is a string of the format "param1=value1, param2=value2, ..."
  35323. * This is more limited than the array version in that
  35324. *    - it only understands string parameter names
  35325. *    - it only understands those parameters it knows about
  35326. *    - data type is only the kind this class implements
  35327. *    - cannot include commas in values
  35328. * but it is easier to use for the more common cases
  35329. #if GDIPLUS_CHECK_PARAMS
  35330. if !(vartype(m.tcEncoderParams)=='C')
  35331.     error 11 && Function argument
  35332. endif
  35333. #endif
  35334. * Short circui
  35335. if empty(m.tcEncoderParams)
  35336.     return 0    && nothing to do
  35337. endif
  35338. local lnCount
  35339. lnCount= occurs(",",m.tcEncoderParams)+1
  35340. local laParams[m.lnCount,3], lnPos,lcName, lcValue, lqGUID, lnType, lcScratch,liParam
  35341. lcScratch = m.tcEncoderParams
  35342. for liParam = 1 to m.lnCount
  35343.     * Find name
  35344.     lnPos = at('=',m.lcScratch)
  35345.     if m.lnPos = 0
  35346.         * Invalid
  35347.         error _GDIPLUS_BADENCODERPARAMSTRING_LOC
  35348.         return 0
  35349.     endif
  35350.     lcName = alltrim(left(m.lcScratch,m.lnPos-1))
  35351.     lcScratch = substr(m.lcScratch,m.lnPos+1)
  35352.     lnPos = at(',',m.lcScratch)
  35353.     if m.lnPos = 0
  35354.         lcValue = alltrim(m.lcScratch)
  35355.         lcScratch = ''
  35356.     else
  35357.         lcValue = alltrim(left(m.lcScratch,m.lnPos-1))
  35358.         lcScratch = substr(m.lcScratch,m.lnPos+1)
  35359.     endif    
  35360.     * Now look it up
  35361.     if not This.getEncoderParamInfo( m.lcName, @lqGUID, @lnType )
  35362.         error _GDIPLUS_BADENCODERPARAMNAME_LOC
  35363.         return 0
  35364.     endif
  35365.     laParams[m.liParam,1] = m.lqGUID
  35366.     laParams[m.liParam,2] = m.lnType
  35367.     do case
  35368.     case inlist(m.lnType ;
  35369.         ,GDIPLUS_ValueDataType_Byte,GDIPLUS_ValueDataType_Short,GDIPLUS_ValueDataType_Long )
  35370.         laParams[m.liParam,3] = val(m.lcValue)
  35371.     * rationals?
  35372.     otherwise
  35373.         laParams[m.liParam,3] = m.lcValue
  35374.     endcase
  35375. endfor
  35376. return This.getEncoderParamsFromArray( m.lqCLSIDEncoder, @laParams )
  35377. ENDPROC
  35378. PROCEDURE getencoderparamsfromarray
  35379. lparameters lqCLSIDEncoder, raEncoderParams
  35380. * Internal function, convert array into EncoderParameters array
  35381. * return global memory handle (pointer)
  35382. external array raEncoderParams
  35383. #if GDIPLUS_CHECK_PARAMS
  35384. if !(type( "raEncoderParams[1]")!='U' and alen(raEncoderParams,2) >= 3)
  35385.     error 11 && Function argument
  35386. endif
  35387. #endif
  35388. * Input is a 3-column array, where
  35389. *    array[i,1] = GUID (varbinary) or name (string) of parameter
  35390. *    array[i,2] = data type (se GDIPLUS_ValueDataType_xxx constants)
  35391. *    array[i,3] = value 
  35392. * Need to build an array of EncoderParameter objects
  35393. * Each item is:
  35394. * arraycol    Offset    Size    Description
  35395. * 1            0        16        GUID of the parameter, see GDIPLUS_ENCODER_xxx constants
  35396. * 2            16        4        Number of values
  35397. * 3            20        4        Data type - see 
  35398. * -            24        4        Pointer to buffer
  35399. * 4            n/a                value
  35400. * Build local array of parameters
  35401. local lnParamCount
  35402. lnParamCount = alen(raEncoderParams,1)
  35403. local laParam[m.lnParamCount,4], liParam, lcName, lqParamID,lvValue,lnValue, lnBufferSize, lnBufferPtr
  35404. lnBufferSize = 4 + 28 * m.lnParamCount    && 4=sizeof(ULONG), 28=sizeof(EncoderParameter)
  35405. for liParam = 1 to m.lnParamCount
  35406.     lqParamID = null    && initialise
  35407.     * Check input
  35408.     * Name -> GUID
  35409.     do case
  35410.     case vartype( raEncoderParams[m.liParam,1])=='C'
  35411.         * Look it up
  35412.         lcName = raEncoderParams[m.liParam,1]    && to save having two error messages (ouch)
  35413.         if not This.getEncoderParamInfo( m.lcName, @lqParamID )
  35414.             error _GDIPLUS_BADENCODERPARAMNAME_LOC
  35415.             return 0
  35416.         endif
  35417.         laParam[m.liParam,1] = m.lqParamID
  35418.     case vartype( raEncoderParams[m.liParam,1])=='Q' and len(raEncoderParams[m.liParam,1])=16
  35419.         laParam[m.liParam,1] = raEncoderParams[m.liParam,1]
  35420.     otherwise
  35421.         error _GDIPLUS_BADENCODERPARAMNAMETYPE_LOC
  35422.     endcase
  35423.     * Data type and value
  35424.     laParam[m.liParam,2]=1    && default value
  35425.     laParam[m.liParam,3]=raEncoderParams[m.liParam,2]
  35426.     lvValue = raEncoderParams[m.liParam,3]
  35427.     lnValue = icase( vartype(raEncoderParams[m.liParam,3])$'NY',raEncoderParams[m.liParam,3] ;
  35428.                     ,vartype(raEncoderParams[m.liParam,3])='C',val(raEncoderParams[m.liParam,3]) ;
  35429.                     ,null)
  35430.     local llOK    
  35431.     llOK = .F. && only set to .T. if works
  35432.     do case
  35433.     case GDIPLUS_ValueDataType_Byte = laParam[m.liParam,3]
  35434.         if vartype(m.lvValue)$'NC'
  35435.             laParam[m.liParam,4] = chr(m.lnValue)
  35436.             llOK = .T.
  35437.         endif
  35438.     case GDIPLUS_ValueDataType_Short= laParam[m.liParam,3]
  35439.         if vartype(m.lvValue)$'NC'
  35440.             laParam[m.liParam,4] = chr(m.lnValue%256)+chr(m.lnValue/256)
  35441.             llOK = .T.
  35442.         endif
  35443.     case GDIPLUS_ValueDataType_Long = laParam[m.liParam,3]
  35444.         if vartype(m.lvValue)$'NC'
  35445.             laParam[m.liParam,4] = bintoc(m.lnValue,'4RS')
  35446.             llOK = .T.
  35447.         endif
  35448.     case GDIPLUS_ValueDataType_Rational = laParam[m.liParam,3]
  35449.         * must be expressed as a string in the form "num/den"
  35450.         if vartype(m.lvValue)=='C' and '/' $ m.lvValue
  35451.             laParam[m.liParam,4] = ;
  35452.                 bintoc(val(strextract(m.lnValue,'','/')),'4RS') ;
  35453.                 + bintoc(val(strextract(m.lnValue,'/','')),'4RS')
  35454.             llOK = .T.
  35455.         endif
  35456.     case GDIPLUS_ValueDataType_LongRange = laParam[m.liParam,3]
  35457.         * must be expressed as a string in the form "low-high"
  35458.         if vartype(m.lvValue)=='C' and '-' $ m.lvValue
  35459.             laParam[m.liParam,4] = ;
  35460.                 bintoc(val(strextract(m.lnValue,'','-')),'4RS') ;
  35461.                 + bintoc(val(strextract(m.lnValue,'-','')),'4RS')
  35462.             llOK = .T.
  35463.         endif
  35464.     case GDIPLUS_ValueDataType_ASCII = laParam[m.liParam,3]
  35465.         if vartype(m.lvValue)=='C'
  35466.             laParam[m.liParam,4] = m.lvValue + chr(0)
  35467.             * laParam[m.liParam,2]= len(laParam[m.liParam,4]) ?
  35468.             llOK = .T.
  35469.         endif
  35470.     case GDIPLUS_ValueDataType_Undefined = laParam[m.liParam,3]
  35471.         if vartype(m.lvValue)$'CQ'
  35472.             laParam[m.liParam,4] = m.lvValue
  35473.             laParam[m.liParam,2]= len(m.lvValue)
  35474.             llOK = .T.
  35475.         endif
  35476.     * Don't support rational range or pointer
  35477.     * otherwise llOK already false
  35478.     endcase
  35479.     if ! m.llOK
  35480.         error _GDIPLUS_BADENCODERPARAMVALUE_LOC
  35481.         return 0
  35482.     endif
  35483.     lnBufferSize = m.lnBufferSize + len(laParam[m.liParam,4])
  35484. endfor
  35485. * OK, allocate array and go for it.
  35486. declare integer GlobalAlloc in kernel32.dll integer nFlags, integer nSize
  35487. lnBufferPtr = GlobalAlloc( 0x0040, m.lnBufferSize ) && 0x40=GMEM_FIXED|GMEM_ZEROINIT
  35488. if 0==m.lnBufferPtr
  35489.     * Memory allocation error
  35490.     error _GDIPLUS_LOC_MALLOCFAIL
  35491.     return null
  35492. endif
  35493. local lnArrayPtr, lnValuePtr
  35494. lnArrayPtr = m.lnBufferPtr + 4
  35495. lnValuePtr = m.lnArrayPtr  + 28*m.lnParamCount
  35496. * parameter count:
  35497. sys(2600,m.lnBufferPtr ,4, bintoc(m.lnParamCount,'4RS'))
  35498. for liParam = 1 to m.lnParamCount
  35499.     sys(2600,m.lnArrayPtr,28, ;
  35500.         laParam[m.liParam,1];
  35501.         + bintoc(laParam[m.liParam,2],'4RS') ;
  35502.         + bintoc(laParam[m.liParam,3],'4RS') ;
  35503.         + bintoc(m.lnValuePtr,'4RS') ;    
  35504.     sys(2600,m.lnValuePtr,len(laParam[m.liParam,4]),laParam[m.liParam,4])
  35505.     lnArrayPtr = m.lnArrayPtr + 28
  35506.     lnValuePtr = m.lnValuePtr + len(laParam[m.liParam,4])
  35507. endfor
  35508. return m.lnBufferPtr
  35509. ENDPROC
  35510. PROCEDURE getencoderparaminfo
  35511. lparameters tcParamName, rqGUID, rnDataType
  35512. do case
  35513. case upper(m.tcParamName) == 'QUALITY'
  35514.     * Supported by: JPEG
  35515.     rqGUID = GDIPLUS_ENCODER_Quality
  35516.     rnDataType = GDIPLUS_ValueDataType_Long
  35517. case upper(m.tcParamName) == 'TRANSFORMATION'
  35518.     * Supported by: JPEG
  35519.     rqGUID = GDIPLUS_ENCODER_Transformation
  35520.     rnDataType = GDIPLUS_ValueDataType_Long
  35521. case upper(m.tcParamName) == 'LUMINANCETABLE'
  35522.     * Supported by: JPEG
  35523.     rqGUID = GDIPLUS_ENCODER_LuminanceTable
  35524.     rnDataType = GDIPLUS_ValueDataType_Short && array of ...
  35525. case upper(m.tcParamName) == 'CHROMINANCETABLE'
  35526.     * Supported by: JPEG
  35527.     rqGUID = GDIPLUS_ENCODER_ChrominanceTable
  35528.     rnDataType = GDIPLUS_ValueDataType_Short && array of ...
  35529. case upper(m.tcParamName) == 'COMPRESSION'
  35530.     * Supported by: TIFF
  35531.     rqGUID = GDIPLUS_ENCODER_Compression
  35532.     rnDataType = GDIPLUS_ValueDataType_Long
  35533. case upper(m.tcParamName) == 'COLORDEPTH'
  35534.     * Supported by: TIFF
  35535.     rqGUID = GDIPLUS_ENCODER_ColorDepth
  35536.     rnDataType = GDIPLUS_ValueDataType_Long
  35537. case upper(m.tcParamName) == 'SAVEFLAG'
  35538.     * Supported by: TIFF
  35539.     rqGUID = GDIPLUS_ENCODER_SaveFlag
  35540.     rnDataType = GDIPLUS_ValueDataType_Long
  35541. * These are defined by GDI+ but not supported by any of the standard encoders
  35542. *case upper(m.tcParamName) == 'COMPRESSION'
  35543. *case upper(m.tcParamName) == 'SCANMETHOD'
  35544. *case upper(m.tcParamName) == 'VERSION'
  35545. *case upper(m.tcParamName) == 'RENDERMETHOD'
  35546. otherwise
  35547.     return .F.
  35548. endcase
  35549. return .T.
  35550. ENDPROC
  35551. PROCEDURE getpropertycount
  35552. #if GDIPLUS_CHECK_OBJECT
  35553. if This.gdipHandle==0
  35554.     error _GDIPLUS_NOGDIPOBJECT_LOC
  35555.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  35556.     return cast(null as I)
  35557. endif
  35558. #endif
  35559. local lnCount
  35560. store 0 to lnCount
  35561. declare integer GdipGetPropertyCount in gdiplus.dll ;
  35562.     integer nImage, integer @nCount
  35563. This.gdipStatus = GdipGetPropertyCount( This.gdipHandle, @lnCount)
  35564. return iif(GDIPLUS_STATUS_OK==This.gdipStatus,m.lnCount,cast(null as I))
  35565. ENDPROC
  35566. PROCEDURE getpropertyidlist
  35567. lparameters raPropIDList
  35568. #if GDIPLUS_CHECK_OBJECT
  35569. if This.gdipHandle==0
  35570.     error _GDIPLUS_NOGDIPOBJECT_LOC
  35571.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  35572.     return cast(null as I)
  35573. endif
  35574. #endif
  35575. #if GDIPLUS_CHECK_PARAMS
  35576. if !(type("raPropIDList[1]")!='U')
  35577.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  35578.     error 11 && Function argument
  35579.     return cast(null as I)
  35580. endif
  35581. #endif
  35582. local lnCount, lcIdList, lnIndex
  35583. lnCount = This.GetPropertyCount()
  35584. if isnull(m.lnCount) or m.lnCount<1
  35585.     return m.lnCount
  35586. endif
  35587. declare integer GdipGetPropertyIdList in gdiplus.dll ;
  35588.     integer nImage, integer nCount, string @ list
  35589. lcIdList = replicate( chr(0), 4*m.lnCount )
  35590. This.gdipStatus = GdipGetPropertyIdList( This.gdipHandle, lnCount, @lcIdList )
  35591. * Now convert to the array
  35592. dimension raPropIDList[m.lnCount]
  35593. for lnIndex = 1 to m.lnCount
  35594.     raPropIDList[m.lnIndex] = ctobin(substr(m.lcIdList,m.lnIndex*4-3,4),'RS')
  35595. endfor
  35596. return m.lnCount
  35597. ENDPROC
  35598. PROCEDURE getpropertyitem
  35599. lparameters tnPropID as Integer
  35600. #if GDIPLUS_CHECK_OBJECT
  35601. if This.gdipHandle==0
  35602.     error _GDIPLUS_NOGDIPOBJECT_LOC
  35603.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  35604.     return cast(null as I)
  35605. endif
  35606. #endif
  35607. #if GDIPLUS_CHECK_PARAMS
  35608. if !(vartype(m.tnPropID)='N')
  35609.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  35610.     error 11 && Function argument
  35611.     return cast(null as I)
  35612. endif
  35613. #endif
  35614. declare integer GlobalAlloc in kernel32.dll integer nFlags, integer nSize
  35615. declare integer GlobalFree in kernel32.dll integer nHandle
  35616. declare integer lstrlenA in kernel32.dll as __win32_lstrlenA_ptr integer
  35617. declare integer GdipGetPropertyItemSize in gdiplus.dll ;
  35618.     integer nImage, integer nPropID, integer @ nBufSize
  35619. declare integer GdipGetPropertyItem in gdiplus.dll ;
  35620.     integer nImage, integer nPropID, integer nBufSize, integer nBufferPtr
  35621. local lnBufferSize as integer, lnBufferPtr as Integer, lnStringPtr as integer
  35622. lnBufferSize = 0
  35623. This.gdipStatus = GdipGetPropertyItemSize( This.gdipHandle, m.tnPropID, @lnBufferSize )
  35624. if GDIPLUS_STATUS_OK != This.gdipStatus
  35625.     return null
  35626. endif
  35627. lnBufferPtr = GlobalAlloc( 0x0040, m.lnBufferSize ) && 0x40=GMEM_FIXED|GMEM_ZEROINIT
  35628. if 0==m.lnBufferPtr
  35629.     * Memory allocation error
  35630.     error _GDIPLUS_MALLOCFAIL_LOC
  35631.     return null
  35632. endif
  35633. This.gdipStatus = GdipGetPropertyItem( This.gdipHandle, m.tnPropID, m.lnBufferSize, m.lnBufferPtr )
  35634. if GDIPLUS_STATUS_OK != This.gdipStatus
  35635.     GlobalFree( m.lnBufferPtr )
  35636.     return null
  35637. endif
  35638. * Now decode the parameter
  35639. * PropertyItem
  35640. * Offset    Size    Description
  35641. *   0         4         ID (32 bit int)
  35642. *    4         4        Length of value 
  35643. *    8         4        Data type - GP_PROPERTYTAGTYPE_xxx
  35644. *  12         4        Pointer to value
  35645. *  16 (probably)    The value itself
  35646. local lnPropertyTagType, lnValueLen, lnValuePtr, lvReturn
  35647. lnPropertyTagType = ctobin(sys(2600,m.lnBufferPtr+8,4),'RS')
  35648. lnValueLen = ctobin(sys(2600,m.lnBufferPtr+4,4),'RS')
  35649. lnValuePtr = ctobin(sys(2600,m.lnBufferPtr+12,4),'RS')
  35650. do case
  35651. case inlist(m.lnPropertyTagType,0,6,7,8)    && nothing or undefined
  35652.     lvReturn = null    && warning: this is also error value
  35653. case 1 == m.lnPropertyTagType    && Byte
  35654.     lvReturn = asc( sys(2600,m.lnValuePtr,1))
  35655. case 2 == m.lnPropertyTagType    && ASCII string (_not_ unicode)
  35656.     * trim null byte off end, but only if there! (It *should* be, but..)
  35657.     lvReturn = strextract(sys(2600,m.lnValuePtr,m.lnValueLen),'',chr(0),1,2)
  35658. case 3 == m.lnPropertyTagType    && Short (16 bit)
  35659.     lvReturn = asc(sys(2600,m.lnValuePtr,1))+256*asc(sys(2600,m.lnValuePtr+1,1))
  35660. case 4 == m.lnPropertyTagType    && Long (32 bit)
  35661.     lvReturn = ctobin(sys(2600,m.lnValuePtr,4),'RS')
  35662. case 5 == m.lnPropertyTagType    && Rational(two 32 bit)
  35663.     * return as string
  35664.     lvReturn = ltrim(str( ctobin(sys(2600,m.lnValuePtr,4),'RS') )) ;
  35665.         + '/' ;
  35666.         + ltrim(str( ctobin(sys(2600,m.lnValuePtr+4,4),'RS') ))
  35667. case 9 == m.lnPropertyTagType    && signed Long (32 bit)
  35668.     lvReturn = ctobin(sys(2600,m.lnValuePtr,4),'RS')
  35669.     if m.lvReturn>0x7FFFFFFF
  35670.         lvReturn = m.lvReturn - 0x100000000
  35671.     endif
  35672. case 10 == m.lnPropertyTagType    && signed rational a/b
  35673.     local lnNum, lnDen
  35674.     lnNum = ctobin(sys(2600,m.lnValuePtr,4),'RS')
  35675.     lnDen = ctobin(sys(2600,m.lnValuePtr+4,4),'RS')
  35676.     if m.lnNum >0x7FFFFFFF
  35677.         lnNum = m.lnNum - 0x100000000
  35678.     endif
  35679.     if m.lnDen >0x7FFFFFFF
  35680.         lnDen = m.lnDen - 0x100000000
  35681.     endif
  35682.     lvReturn = ltrim(str(m.lnNum)) +'/'+ltrim(str(m.lnDen))
  35683. otherwise
  35684.     GlobalFree( m.lnBufferPtr )
  35685.     error _GDIPLUS_BADPROPERTYTAGTYPE_LOC
  35686.     return null
  35687. endcase
  35688. GlobalFree( m.lnBufferPtr )
  35689. return m.lvReturn
  35690. ENDPROC
  35691. PROCEDURE clone
  35692. lparameters toImage as GpImage
  35693. this.Destroy()
  35694. local nHandle
  35695. nHandle = 0
  35696. #if GDIPLUS_CHECK_PARAMS
  35697. if !(vartype(m.toImage)='O' and m.toImage.gdipHandle<>0)
  35698.     error 11 && function argument
  35699.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  35700.     return .F.
  35701. endif
  35702. #endif
  35703. Declare Integer GdipCloneImage In GDIPlus.Dll ;
  35704.     integer nImage, integer @nCloneImage
  35705. This.GdipStatus = GdipCloneImage( ;
  35706.     m.toImage.gdipHandle ;
  35707. ,    @nHandle)
  35708. this.gdipHandle= m.nHandle
  35709. return GDIPLUS_STATUS_OK == This.GdipStatus
  35710. ENDPROC
  35711. PROCEDURE Destroy
  35712. if This.GdipHandle!=0 and This.gdipOwnsThisHandle
  35713.     Declare Integer GdipDisposeImage In GDIPlus.Dll ;
  35714.         integer nImage
  35715.     GdipDisposeImage(This.GdipHandle)
  35716.     This.GdipHandle=0
  35717.     This.gdipOwnsThisHandle = .F.
  35718. endif
  35719. ENDPROC
  35720. PROCEDURE Init
  35721. lparameters tvParam1, tvParam2
  35722. if not dodefault()
  35723.     return .F.
  35724. endif
  35725. do case
  35726. case vartype(m.tvParam1) = 'N'
  35727.     * Handle
  35728.     #if GDIPLUS_CHECK_PARAMS
  35729.     if !(vartype(m.tvParam2)='L')
  35730.         error 11 && function argument
  35731.         This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  35732.         return .F.
  35733.     endif
  35734.     #endif
  35735.     This.SetHandle(m.tvParam1,m.tvParam2)
  35736. case vartype(m.tvParam1) = 'C'
  35737.     * Filename, no second param
  35738.     #if GDIPLUS_CHECK_PARAMS
  35739.     if !(vartype(m.tvParam2)='L')
  35740.         error 11 && function argument
  35741.         This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  35742.         return .F.
  35743.     endif
  35744.     #endif
  35745.     return This.CreateFromFile( m.tvParam1, m.tvParam2 )
  35746. case vartype(m.tvParam1)='L'
  35747.     * Do nothing
  35748. otherwise
  35749.     error 11 && function argument
  35750.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  35751.     return .F.
  35752. endcase
  35753. return .T.
  35754. ENDPROC
  35755. 6PROCEDURE gdiprect_access
  35756. * Convert object into 4 x 4-byte integers
  35757. * Modify bintoc() output into little-endian with normal sign bit
  35758. return ;
  35759.     bintoc(This.X,'4RS')+bintoc(This.Y,'4RS')+bintoc(This.W,'4RS')+bintoc(This.H,'4RS')
  35760. ENDPROC
  35761. PROCEDURE gdiprect_assign
  35762. LPARAMETERS tcRect
  35763. #if GDIPLUS_CHECK_PARAMS
  35764. if !(vartype(m.tcRect)='C' and len(m.tcRect)=16)
  35765.     error 11 && Function argument
  35766.     return .F.
  35767. endif
  35768. #endif
  35769. This.X = ctobin(substr(m.tcRect,1,4),'RS')
  35770. This.Y = ctobin(substr(m.tcRect,5,4),'RS')
  35771. This.W = ctobin(substr(m.tcRect,9,4),'RS')
  35772. This.H = ctobin(substr(m.tcRect,13,4),'RS')
  35773. ENDPROC
  35774. PROCEDURE gdiprectf_access
  35775. return ;
  35776.     bintoc(This.X,'F') + bintoc(This.Y,'F') ;
  35777.     + bintoc(This.W,'F') + bintoc(This.H,'F')
  35778. ENDPROC
  35779. PROCEDURE gdiprectf_assign
  35780. LPARAMETERS tcRectF
  35781. #if GDIPLUS_CHECK_PARAMS
  35782. if !(vartype(m.tcRectF)='C' and len(m.tcRectF)=16)
  35783.     error 11 && Function argument
  35784.     return .F.
  35785. endif
  35786. #endif
  35787. * Unpack structure
  35788. This.X = ctobin(substr(m.tcRectF,1,4),'N')
  35789. This.Y = ctobin(substr(m.tcRectF,5,4),'N')
  35790. This.W = ctobin(substr(m.tcRectF,9,4),'N')
  35791. This.H = ctobin(substr(m.tcRectF,13,4),'N')
  35792. ENDPROC
  35793. PROCEDURE create
  35794. lparameters tx,ty,tw,th
  35795. #if GDIPLUS_CHECK_PARAMS
  35796. if !(vartype(m.tx)='N' and vartype(m.ty)='N' ;
  35797.     and vartype(m.tw)$'LN' and vartype(m.th)$'LN')
  35798.     error 11 && Function argument
  35799.     return .F.
  35800. endif
  35801. #endif
  35802. This.X = m.tx
  35803. This.Y = m.ty
  35804. This.W = evl(m.tw,0)
  35805. This.H = evl(m.th,0)
  35806. ENDPROC
  35807. PROCEDURE x2_access
  35808. RETURN THIS.x+This.w
  35809. ENDPROC
  35810. PROCEDURE y2_access
  35811. RETURN THIS.y+This.h
  35812. ENDPROC
  35813. PROCEDURE set
  35814. lparameters tx as Number,ty as Number,tw as Number,th as Number
  35815. #if GDIPLUS_CHECK_PARAMS
  35816. if !(vartype(m.tx)='N' and vartype(m.ty)='N' ;
  35817.     and vartype(m.tw)$'LN' and vartype(m.th)$'LN')
  35818.     error 11 && Function argument
  35819.     return .F.
  35820. endif
  35821. #endif
  35822. This.X = m.tx
  35823. This.Y = m.ty
  35824. This.W = evl(m.tw,0)
  35825. This.H = evl(m.th,0)
  35826. ENDPROC
  35827. PROCEDURE gdippointf_access
  35828. * Convert object into 2 x 4-byte integers
  35829. * Modify bintoc() output into little-endian with normal sign bit
  35830. return ;
  35831.     bintoc(This.X,'F')+bintoc(This.Y,'F')
  35832. ENDPROC
  35833. PROCEDURE gdippointf_assign
  35834. LPARAMETERS tcPointF
  35835. #if GDIPLUS_CHECK_PARAMS
  35836. if !(vartype(m.tcPointF)='C' and len(m.tcPointF)=8)
  35837.     error 11 && Function argument
  35838.     return .F.
  35839. endif
  35840. #endif
  35841. * Unpack structure
  35842. This.X = ctobin(substr(m.tcRectF,1,4),'N')
  35843. This.Y = ctobin(substr(m.tcRectF,5,4),'N')
  35844. ENDPROC
  35845. PROCEDURE gdipsizef_access
  35846. * Convert object into 2 x 4-byte integers
  35847. * Modify bintoc() output into little-endian with normal sign bit
  35848. return ;
  35849.     bintoc(This.W,'F')+bintoc(This.H,'F')
  35850. ENDPROC
  35851. PROCEDURE gdipsizef_assign
  35852. LPARAMETERS tcSizeF
  35853. #if GDIPLUS_CHECK_PARAMS
  35854. if !(vartype(m.tcSizeF)='C' and len(m.tcSizeF)=8)
  35855.     error 11 && Function argument
  35856.     return .F.
  35857. endif
  35858. #endif
  35859. * Unpack structure
  35860. This.W = ctobin(substr(m.tcSizeF,1,4),'N')
  35861. This.H = ctobin(substr(m.tcSizeF,5,4),'N')
  35862. ENDPROC
  35863. PROCEDURE gppoint_access
  35864. RETURN This.ObjFactory( 'gprectange.gppoint_access', GDIPLUS_CLASS_POINT,This.X,This.Y)
  35865. ENDPROC
  35866. PROCEDURE gppoint_assign
  35867. LPARAMETERS toPoint
  35868. #if GDIPLUS_CHECK_PARAMS
  35869. if !(vartype(m.toPoint)='O' and pemstatus(m.toPoint,'X',5))
  35870.     error 11 && Function argument
  35871.     return .F.
  35872. endif
  35873. #endif
  35874. This.X = m.toPoint.X
  35875. This.Y = m.toPoint.Y
  35876. ENDPROC
  35877. PROCEDURE gpsize_access
  35878. RETURN This.ObjFactory( 'gprectange.gpsize_access', GDIPLUS_CLASS_SIZE,This.W,This.H)
  35879. ENDPROC
  35880. PROCEDURE gpsize_assign
  35881. LPARAMETERS toSize
  35882. #if GDIPLUS_CHECK_PARAMS
  35883. if !(vartype(m.toSize)='O' and pemstatus(m.toSize,'W',5))
  35884.     error 11 && Function argument
  35885.     return .F.
  35886. endif
  35887. #endif
  35888. This.W = m.toSize.W
  35889. This.H = m.toSize.H
  35890. ENDPROC
  35891. PROCEDURE createfrompointsize
  35892. lparameters toPoint as GpPoint, toSize as GpSize
  35893. do case
  35894. case empty(m.toPoint)
  35895.     * point not passed, (0,0) origin
  35896.     This.X = 0
  35897.     This.Y = 0
  35898. case vartype(m.toPoint)='O'
  35899.     This.GpPoint = m.toPoint
  35900. case vartype(m.toPoint)='C'
  35901.     * Assume PointF
  35902.     This.gdipPointF = m.toPoint
  35903. otherwise
  35904.     error 11
  35905.     return .F.
  35906. endcase
  35907. do case
  35908. case empty(m.toSize)
  35909.     * size not passed, (0,0) size
  35910.     This.W = 0
  35911.     This.H = 0
  35912. case vartype(m.toSize)='O'
  35913.     This.GpSize = m.toSize
  35914. case vartype(m.toSize)='C'
  35915.     * Assume SizeF
  35916.     This.gdipSizeF = m.toSize
  35917. otherwise
  35918.     error 11
  35919.     return .F.
  35920. endcase
  35921. ENDPROC
  35922. PROCEDURE gdipsize_access
  35923. * Return size as 2 x 32-bit integers
  35924. * Modify bintoc() output into little-endian with normal sign bit
  35925. return ;
  35926.     bintoc(This.W,'4RS')+bintoc(This.H,'4RS')
  35927. ENDPROC
  35928. PROCEDURE gdipsize_assign
  35929. LPARAMETERS tcSize as String
  35930. #if GDIPLUS_CHECK_PARAMS
  35931. if !(vartype(m.tcSize)='C' and len(m.tcSize)=8)
  35932.     error 11 && Function argument
  35933.     return .F.
  35934. endif
  35935. #endif
  35936. This.W = ctobin(substr(m.tcSize,1,4),'RS')
  35937. This.H = ctobin(substr(m.tcSize,5,4),'RS')
  35938. ENDPROC
  35939. PROCEDURE gdippoint_access
  35940. * Return size as 2 x 32-bit integers
  35941. * Modify bintoc() output into little-endian with normal sign bit
  35942. return ;
  35943.     bintoc(This.X,'4RS')+bintoc(This.Y,'4RS')
  35944. ENDPROC
  35945. PROCEDURE gdippoint_assign
  35946. LPARAMETERS tcPoint as String
  35947. #if GDIPLUS_CHECK_PARAMS
  35948. if !(vartype(m.tcPoint)='C' and len(m.tcPoint)=8)
  35949.     error 11 && Function argument
  35950.     return .F.
  35951. endif
  35952. #endif
  35953. This.X = ctobin(substr(m.tcPoint,1,4),'RS')
  35954. This.Y = ctobin(substr(m.tcPoint,5,4),'RS')
  35955. ENDPROC
  35956. PROCEDURE gdirect_access
  35957. * Convert object into 4 x 4-byte integers
  35958. * Modify bintoc() output into little-endian with normal sign bit
  35959. return ;
  35960.     bintoc(This.X,'4RS')+bintoc(This.Y,'4RS') ;
  35961.     + bintoc(This.X2,'4RS')+bintoc(This.Y2,'4RS')
  35962. ENDPROC
  35963. PROCEDURE gdirect_assign
  35964. LPARAMETERS tcRect as string
  35965. #if GDIPLUS_CHECK_PARAMS
  35966. if !(vartype(m.tcRect)='C' and len(m.tcRect)=16)
  35967.     error 11 && Function argument
  35968.     return .F.
  35969. endif
  35970. #endif
  35971. This.X = ctobin(substr(m.tcRect,1,4),'RS')
  35972. This.Y = ctobin(substr(m.tcRect,5,4),'RS')
  35973. This.X2 = ctobin(substr(m.tcRect,9,4),'RS')
  35974. This.Y2 = ctobin(substr(m.tcRect,13,4),'RS')
  35975. ENDPROC
  35976. PROCEDURE x2_assign
  35977. LPARAMETERS vNewVal
  35978. This.w = m.vNewVal - This.x
  35979. ENDPROC
  35980. PROCEDURE y2_assign
  35981. LPARAMETERS vNewVal
  35982. This.h = m.vNewVal - This.y
  35983. ENDPROC
  35984. PROCEDURE clone
  35985. lparameters toOtherRect
  35986. do case
  35987. case vartype(m.toOtherRect)='O'
  35988.     #if GDIPLUS_CHECK_PARAMS
  35989.     if !(vartype(toOtherRect.X)='N' and vartype(toOtherRect.Y)='N' ;
  35990.         and vartype(toOtherRect.W)='N' and vartype(toOtherRect.H)='N')
  35991.         error 11 && Function argument
  35992.         return .F.
  35993.     endif
  35994.     #endif
  35995.     This.X = m.toOtherRect.X
  35996.     This.Y = m.toOtherRect.Y
  35997.     This.W = m.toOtherRect.W
  35998.     This.H = m.toOtherRect.H
  35999. case vartype(m.toOtherRect)='C'
  36000.     #if GDIPLUS_CHECK_PARAMS
  36001.     if !(len(m.toOtherRect)=16)
  36002.         error 11 && Function argument
  36003.         return .F.
  36004.     endif
  36005.     #endif
  36006.     * Assume RectF
  36007.     This.gdipRectF = m.toOtherRect
  36008. otherwise
  36009.     error 11
  36010.     return .F.
  36011. endcase
  36012. ENDPROC
  36013. PROCEDURE Init
  36014. lparameters tXorRectorPoint,tYorSize,tw,th
  36015. if not dodefault()
  36016.     return .F.
  36017. endif
  36018. do case
  36019. case pcount()=0
  36020.     * empty constructor - rectangle will be empty
  36021. case pcount()=1 and vartype(m.tXorRectorPoint)='O'
  36022.     * Passed an object - presumably an existing Rect object
  36023.     This.Clone(m.tXorRectorPoint)
  36024. case pcount()=1 and vartype(m.tXorRectorPoint)='C'
  36025.     * Passed a string (structure)
  36026.     * Rect or RectF? Assume RectF as this is preferred format
  36027.     This.gdipRectF = m.tXorRectorPoint
  36028. case pcount()=2 and vartype(m.tXorRectorPoint)$'OC' and vartype(m.tYorSize)$'OC' 
  36029.     * Passed separate point and size objects?
  36030.     This.CreateFromPointSize(m.tXorRectorPoint, m.tYorSize)
  36031. case pcount()>=4 ;
  36032.     and vartype(m.tXorRectorPoint)='N' and vartype(m.tYorSize)='N' ;
  36033.     and vartype(m.tw)='N' and vartype(m.th)='N'
  36034.     * Separate components
  36035.     This.Create(m.tXorRectorPoint,m.tYorSize,m.tw,m.th)
  36036. otherwise
  36037.     error 11
  36038.     return .F.
  36039. endcase
  36040. ENDPROC
  36041. GDI+ object not created or associated
  36042. GdipGetDpiX
  36043. gdiplus.dll
  36044. GDIPHANDLE
  36045. GDIPSTATUS
  36046. GDIPGETDPIX
  36047. GDIPLUS
  36048. VNEWVAL
  36049. GDI+ object not created or associated
  36050. GdipGetDpiY
  36051. gdiplus.dll
  36052. GDIPHANDLE
  36053. GDIPSTATUS
  36054. GDIPGETDPIY
  36055. GDIPLUS
  36056. VNEWVALW
  36057. GPPEN
  36058. GDI+ object not created or associated
  36059. ONNNN
  36060. GdipDrawLine
  36061. gdiplus.dll
  36062. TOPEN
  36063. GDIPHANDLE
  36064. GDIPSTATUS
  36065. GDIPDRAWLINE
  36066. GDIPLUS
  36067. GETHANDLE_
  36068. GDI+ object not created or associated
  36069. GdipDrawRectangle
  36070. gdiplus.dll
  36071. TOPEN
  36072. TXORRECT
  36073. GDIPHANDLE
  36074. GDIPSTATUS
  36075. GDIPDRAWRECTANGLE
  36076. GDIPLUS
  36077. GETHANDLE
  36078. GDI+ object not created or associated
  36079. gdipRectF
  36080. gdipPointF
  36081. GdipDrawString
  36082. gdiplus.dll
  36083. TCANSISTRING
  36084. TOFONT
  36085. TVRECTPOINT
  36086. TOSTRINGFORMAT
  36087. TOBRUSH
  36088. GDIPHANDLE
  36089. GDIPSTATUS
  36090. LCRECT    
  36091. GDIPRECTF
  36092. GDIPPOINTF
  36093. GDIPDRAWSTRING
  36094. GDIPLUS
  36095. GETHANDLEX
  36096. GDI+ object not created or associated
  36097. gdipRectF
  36098. gdipPointF
  36099. GdipDrawString
  36100. gdiplus.dll
  36101. TCUNICODESTRING
  36102. TOFONT
  36103. TVRECTPOINT
  36104. TOSTRINGFORMAT
  36105. TOBRUSH
  36106. GDIPHANDLE
  36107. GDIPSTATUS
  36108. LCRECT    
  36109. GDIPRECTF
  36110. GDIPPOINTF
  36111. GDIPDRAWSTRING
  36112. GDIPLUS
  36113. GETHANDLE
  36114. GDI+ object not created or associated
  36115. NNNNN
  36116. NNLLL
  36117. GdipDrawPie
  36118. gdiplus.dll
  36119. TOPEN
  36120. TXORRECT
  36121. TNYORSTART
  36122. TNWORSWEEP
  36123. NSTART
  36124. NSWEEP
  36125. GDIPHANDLE
  36126. GDIPSTATUS
  36127. GDIPDRAWPIE
  36128. GDIPLUS
  36129. GETHANDLE
  36130. GDI+ object not created or associated
  36131. NNNNN
  36132. NNLLL
  36133. GdipFillPie
  36134. gdiplus.dll
  36135. TOBRUSH
  36136. TXORRECT
  36137. TNYORSTART
  36138. TNWORSWEEP
  36139. NSTART
  36140. NSWEEP
  36141. GDIPHANDLE
  36142. GDIPSTATUS
  36143. GDIPFILLPIE
  36144. GDIPLUS
  36145. GETHANDLE
  36146. GDI+ object not created or associated
  36147. ONNNNNN
  36148. GdipDrawArc
  36149. gdiplus.dll
  36150. TOPEN
  36151. NWIDTH
  36152. NHEIGHT
  36153. NSTARTANGLE
  36154. NSWEEPANGLE
  36155. GDIPHANDLE
  36156. GDIPSTATUS
  36157. GDIPDRAWARC
  36158. GDIPLUS
  36159. GETHANDLE
  36160. GDI+ object not created or associated
  36161. ONNNNNNNN
  36162. GdipDrawBezier
  36163. gdiplus.dll
  36164. TOPEN
  36165. GDIPHANDLE
  36166. GDIPSTATUS
  36167. GDIPDRAWBEZIER
  36168. GDIPLUS
  36169. GETHANDLE]
  36170. GDI+ object not created or associated
  36171. GdipDrawEllipse
  36172. gdiplus.dll
  36173. TOPEN
  36174. TXORRECT
  36175. GDIPHANDLE
  36176. GDIPSTATUS
  36177. GDIPDRAWELLIPSE
  36178. GDIPLUS
  36179. GETHANDLE
  36180. GDI+ object not created or associated
  36181. GdipFillRectangle
  36182. gdiplus.dll
  36183. TOBRUSH
  36184. TXORRECT
  36185. GDIPHANDLE
  36186. GDIPSTATUS
  36187. GDIPFILLRECTANGLE
  36188. GDIPLUS
  36189. GETHANDLE
  36190. GDI+ object not created or associated
  36191. GdipFillEllipse
  36192. gdiplus.dll
  36193. TOBRUSH
  36194. TXORRECT
  36195. GDIPHANDLE
  36196. GDIPSTATUS
  36197. GDIPFILLELLIPSE
  36198. GDIPLUS
  36199. GETHANDLE
  36200. GDI+ object not created or associated
  36201. GdipFlush
  36202. gdiplus.dll
  36203. TNFLUSHINTENTION
  36204. GDIPHANDLE
  36205. GDIPSTATUS    
  36206. GDIPFLUSH
  36207. GDIPLUS
  36208. GdipCreateFromHDC
  36209. gdiplus.dll
  36210. GDIPSTATUS
  36211. DESTROY
  36212. GDIPCREATEFROMHDC
  36213. GDIPLUS
  36214. NHANDLE    
  36215. SETHANDLEv
  36216. LOGICAL
  36217. GdipCreateFromHWNDICM
  36218. gdiplus.dll
  36219. GdipCreateFromHWND
  36220. gdiplus.dll
  36221. TLICM
  36222. GDIPSTATUS
  36223. DESTROY
  36224. NHANDLE
  36225. GDIPCREATEFROMHWNDICM
  36226. GDIPLUS
  36227. GDIPCREATEFROMHWND    
  36228. SETHANDLE
  36229. GDI+ object not created or associated
  36230. GdipGetCompositingMode
  36231. gdiplus.dll
  36232. GDIPHANDLE
  36233. GDIPSTATUS
  36234. GDIPGETCOMPOSITINGMODE
  36235. GDIPLUS
  36236. NMODE
  36237. GDI+ object not created or associated
  36238. GdipSetCompositingMode
  36239. gdiplus.dll
  36240. TNMODE
  36241. GDIPHANDLE
  36242. GDIPSTATUS
  36243. GDIPSETCOMPOSITINGMODE
  36244. GDIPLUS
  36245. GDI+ object not created or associated
  36246. GdipGetCompositingQuality
  36247. gdiplus.dll
  36248. GDIPHANDLE
  36249. GDIPSTATUS
  36250. GDIPGETCOMPOSITINGQUALITY
  36251. GDIPLUS
  36252. NQUALITY
  36253. GDI+ object not created or associated
  36254. GdipSetCompositingQuality
  36255. gdiplus.dll
  36256. TNQUALITY
  36257. GDIPHANDLE
  36258. GDIPSTATUS
  36259. GDIPSETCOMPOSITINGQUALITY
  36260. GDIPLUS
  36261. GDI+ object not created or associated
  36262. GdipGetInterpolationMode
  36263. gdiplus.dll
  36264. GDIPHANDLE
  36265. GDIPSTATUS
  36266. GDIPGETINTERPOLATIONMODE
  36267. GDIPLUS
  36268. NMODE
  36269. GDI+ object not created or associated
  36270. GdipSetInterpolationMode
  36271. gdiplus.dll
  36272. TNINTERPMODE
  36273. GDIPHANDLE
  36274. GDIPSTATUS
  36275. GDIPSETINTERPOLATIONMODE
  36276. GDIPLUS
  36277. GDI+ object not created or associated
  36278. GdipGetPageScale
  36279. gdiplus.dll
  36280. GDIPHANDLE
  36281. GDIPSTATUS
  36282. GDIPGETPAGESCALE
  36283. GDIPLUS
  36284. NPAGESCALE
  36285. GDI+ object not created or associated
  36286. GdipSetPageScale
  36287. gdiplus.dll
  36288. TNSCALE
  36289. GDIPHANDLE
  36290. GDIPSTATUS
  36291. GDIPSETPAGESCALE
  36292. GDIPLUS
  36293. GDI+ object not created or associated
  36294. GdipGetSmoothingMode
  36295. gdiplus.dll
  36296. GDIPHANDLE
  36297. GDIPSTATUS
  36298. GDIPGETSMOOTHINGMODE
  36299. GDIPLUS
  36300. NSMOOTHINGMODE
  36301. GDI+ object not created or associated
  36302. GdipSetSmoothingMode
  36303. gdiplus.dll
  36304. TNMODE
  36305. GDIPHANDLE
  36306. GDIPSTATUS
  36307. GDIPSETSMOOTHINGMODE
  36308. GDIPLUS
  36309. GDI+ object not created or associated
  36310. GdipGetPixelOffsetMode
  36311. gdiplus.dll
  36312. GDIPHANDLE
  36313. GDIPSTATUS
  36314. GDIPGETPIXELOFFSETMODE
  36315. GDIPLUS
  36316. NMODE
  36317. GDI+ object not created or associated
  36318. GdipSetPixelOffsetMode
  36319. gdiplus.dll
  36320. TNMODE
  36321. GDIPHANDLE
  36322. GDIPSTATUS
  36323. GDIPSETPIXELOFFSETMODE
  36324. GDIPLUS
  36325. GDI+ object not created or associated
  36326. GdipGetClipBounds
  36327. gdiplus.dll
  36328. gpgraphics.clipbounds_access
  36329. GpRectangle
  36330. GDIPHANDLE
  36331. GDIPSTATUS
  36332. GDIPGETCLIPBOUNDS
  36333. GDIPLUS
  36334. LCRECTF
  36335. LORECT
  36336. OBJFACTORY$
  36337. ClipBounds
  36338. VNEWVAL
  36339. GDI+ object not created or associated
  36340. GdipGetPageUnit
  36341. gdiplus.dll
  36342. GDIPHANDLE
  36343. GDIPSTATUS
  36344. GDIPGETPAGEUNIT
  36345. GDIPLUS
  36346. NUNIT
  36347. GDI+ object not created or associated
  36348. GdipSetPageUnit
  36349. gdiplus.dll
  36350. TNUNIT
  36351. GDIPHANDLE
  36352. GDIPSTATUS
  36353. GDIPSETPAGEUNIT
  36354. GDIPLUS
  36355. GDI+ object not created or associated
  36356. GdipGetVisibleClipBounds
  36357. gdiplus.dll
  36358. gpgraphics.visibleclipbounds_access
  36359. GpRectangle
  36360. GDIPHANDLE
  36361. GDIPSTATUS
  36362. GDIPGETVISIBLECLIPBOUNDS
  36363. GDIPLUS
  36364. LCRECTF
  36365. LORECT
  36366. OBJFACTORY+
  36367. VisibleClipBounds
  36368. VNEWVALC
  36369. GDI+ object not created or associated
  36370. gdipRectF
  36371. GdipSizeF
  36372. GdipMeasureString
  36373. gdiplus.dll
  36374. STRING
  36375. INTEGER
  36376. INTEGER
  36377. gpgraphics.measurestring
  36378. GpSizeC
  36379. TCANSISTRING
  36380. TOFONT
  36381. TVLAYOUTAREA
  36382. TOSTRINGFORMAT
  36383. RNCHARSFITTED
  36384. RNLINESFILLED
  36385. GDIPHANDLE
  36386. GDIPSTATUS
  36387. LCRECTF    
  36388. GDIPRECTF    
  36389. GDIPSIZEF
  36390. GDIPMEASURESTRING
  36391. GDIPLUS
  36392. LCBOUNDINGBOX
  36393. LNCHARSFITTED
  36394. LNLINESFILLED    
  36395. GETHANDLE
  36396. OBJFACTORY
  36397. GDI+ object not created or associated
  36398. GdipMeasureString
  36399. gdiplus.dll
  36400. STRING
  36401. INTEGER
  36402. INTEGER
  36403. gpgraphics.measurestring
  36404. GpSizeC
  36405. TCUNICODESTRING
  36406. TOFONT
  36407. TVLAYOUTAREA
  36408. TOSTRINGFORMAT
  36409. RNCHARSFITTED
  36410. RNLINESFILLED
  36411. GDIPHANDLE
  36412. GDIPSTATUS
  36413. LCRECTF    
  36414. GDIPSIZEF
  36415. GDIPMEASURESTRING
  36416. GDIPLUS
  36417. LCBOUNDINGBOX
  36418. LNCHARSFITTED
  36419. LNLINESFILLED    
  36420. GETHANDLE
  36421. OBJFACTORY
  36422. GDI+ object not created or associated
  36423. GdipGetTextRenderingHint
  36424. gdiplus.dll
  36425. GDIPHANDLE
  36426. GDIPSTATUS
  36427. GDIPGETTEXTRENDERINGHINT
  36428. GDIPLUS
  36429. NHINT
  36430. GDI+ object not created or associated
  36431. GdipSetTextRenderingHint
  36432. gdiplus.dll
  36433. TNVALUE
  36434. GDIPHANDLE
  36435. GDIPSTATUS
  36436. GDIPSETTEXTRENDERINGHINT
  36437. GDIPLUS
  36438. GDI+ object not created or associated
  36439. GdipGetRenderingOrigin
  36440. gdiplus.dll
  36441. gpgraphics.renderingorigin_access
  36442. GpPoint
  36443. GDIPHANDLE
  36444. GDIPSTATUS
  36445. GDIPGETRENDERINGORIGIN
  36446. GDIPLUS
  36447. OBJFACTORY
  36448. GDI+ object not created or associated
  36449. GdipSetRenderingOrigin
  36450. gdiplus.dll
  36451. TOPOINT
  36452. GDIPHANDLE
  36453. GDIPSTATUS
  36454. GDIPSETRENDERINGORIGIN
  36455. GDIPLUS
  36456. GDI+ object not created or associated
  36457. GdipGetTextContrast
  36458. gdiplus.dll
  36459. GDIPHANDLE
  36460. GDIPSTATUS
  36461. GDIPGETTEXTCONTRAST
  36462. GDIPLUS
  36463. NVALUE
  36464. GDI+ object not created or associated
  36465. GdipSetTextContrast
  36466. gdiplus.dll
  36467. TNVALUE
  36468. GDIPHANDLE
  36469. GDIPSTATUS
  36470. GDIPSETTEXTCONTRAST
  36471. GDIPLUS
  36472. GPPEN
  36473. INTEGER
  36474. GDI+ object not created or associated
  36475. taPoints[1,1]b
  36476. GdipDrawLines
  36477. gdiplus.dll
  36478. TOPEN
  36479. TAPOINTS
  36480. TNFIRSTCOL
  36481. GDIPHANDLE
  36482. GDIPSTATUS
  36483. LCPOINTS
  36484. MAKEGDIPARRAYF
  36485. GDIPDRAWLINES
  36486. GDIPLUS
  36487. GETHANDLEl
  36488. GPPEN
  36489. STRING
  36490. STRING
  36491. STRING
  36492. GDI+ object not created or associated
  36493. GdipDrawLines
  36494. gdiplus.dll
  36495. TOPEN
  36496. TCALIAS
  36497. TCEXPRX
  36498. TCEXPRY
  36499. GDIPHANDLE
  36500. GDIPSTATUS
  36501. LCPOINTS
  36502. MAKEGDIPARRAYFFROMCURSOR
  36503. GDIPDRAWLINES
  36504. GDIPLUS
  36505. GETHANDLE
  36506. GDI+ object not created or associated
  36507. taPoints[1,1]b
  36508. GdipDrawBeziers
  36509. gdiplus.dll
  36510. TOPEN
  36511. TAPOINTS
  36512. TNFIRSTCOL
  36513. GDIPHANDLE
  36514. GDIPSTATUS
  36515. LCPOINTS
  36516. MAKEGDIPARRAYF
  36517. GDIPDRAWBEZIERS
  36518. GDIPLUS
  36519. GETHANDLE
  36520. GDI+ object not created or associated
  36521. taPoints[1,1]b
  36522. GdipDrawClosedCurve
  36523. gdiplus.dll
  36524. TOPEN
  36525. TAPOINTS
  36526. TNFIRSTCOL
  36527. GDIPHANDLE
  36528. GDIPSTATUS
  36529. LCPOINTS
  36530. MAKEGDIPARRAYF
  36531. GDIPDRAWCLOSEDCURVE
  36532. GDIPLUS
  36533. GETHANDLEG
  36534. GDI+ object not created or associated
  36535. GdipDrawBeziers
  36536. gdiplus.dll
  36537. TOPEN
  36538. TCALIAS
  36539. TCEXPRX
  36540. TCEXPRY
  36541. GDIPHANDLE
  36542. GDIPSTATUS
  36543. LCPOINTS
  36544. MAKEGDIPARRAYFFROMCURSOR
  36545. GDIPDRAWBEZIERS
  36546. GDIPLUS
  36547. GETHANDLEK
  36548. GDI+ object not created or associated
  36549. GdipDrawClosedCurve
  36550. gdiplus.dll
  36551. TOPEN
  36552. TCALIAS
  36553. TCEXPRX
  36554. TCEXPRY
  36555. GDIPHANDLE
  36556. GDIPSTATUS
  36557. LCPOINTS
  36558. MAKEGDIPARRAYFFROMCURSOR
  36559. GDIPDRAWCLOSEDCURVE
  36560. GDIPLUS
  36561. GETHANDLE
  36562. GDI+ object not created or associated
  36563. taPoints[1,1]b
  36564. GdipDrawCurve
  36565. gdiplus.dll
  36566. TOPEN
  36567. TAPOINTS
  36568. TNFIRSTCOL
  36569. GDIPHANDLE
  36570. GDIPSTATUS
  36571. LCPOINTS
  36572. MAKEGDIPARRAYF
  36573. GDIPDRAWCURVE
  36574. GDIPLUS
  36575. GETHANDLEE
  36576. GDI+ object not created or associated
  36577. GdipDrawCurve
  36578. gdiplus.dll
  36579. TOPEN
  36580. TCALIAS
  36581. TCEXPRX
  36582. TCEXPRY
  36583. GDIPHANDLE
  36584. GDIPSTATUS
  36585. LCPOINTS
  36586. MAKEGDIPARRAYFFROMCURSOR
  36587. GDIPDRAWCURVE
  36588. GDIPLUS
  36589. GETHANDLE
  36590. GDI+ object not created or associated
  36591. taPoints[1,1]b
  36592. GdipDrawPolygon
  36593. gdiplus.dll
  36594. TOPEN
  36595. TAPOINTS
  36596. TNFIRSTCOL
  36597. GDIPHANDLE
  36598. GDIPSTATUS
  36599. LCPOINTS
  36600. MAKEGDIPARRAYF
  36601. GDIPDRAWPOLYGON
  36602. GDIPLUS
  36603. GETHANDLEG
  36604. GDI+ object not created or associated
  36605. GdipDrawPolygon
  36606. gdiplus.dll
  36607. TOPEN
  36608. TCALIAS
  36609. TCEXPRX
  36610. TCEXPRY
  36611. GDIPHANDLE
  36612. GDIPSTATUS
  36613. LCPOINTS
  36614. MAKEGDIPARRAYFFROMCURSOR
  36615. GDIPDRAWPOLYGON
  36616. GDIPLUS
  36617. GETHANDLE
  36618. GDI+ object not created or associated
  36619. taRects[1,1]b
  36620. GdipDrawRectangles
  36621. gdiplus.dll
  36622. TOPEN
  36623. TARECTS
  36624. TNFIRSTCOL
  36625. GDIPHANDLE
  36626. GDIPSTATUS
  36627. LCRECTS
  36628. MAKEGDIPARRAYF
  36629. GDIPDRAWRECTANGLES
  36630. GDIPLUS
  36631. GETHANDLE^
  36632. GDI+ object not created or associated
  36633. GdipDrawRectangles
  36634. gdiplus.dll
  36635. TOPEN
  36636. TCALIAS
  36637. TCEXPRX
  36638. TCEXPRY
  36639. TCEXPRW
  36640. TCEXPRH
  36641. GDIPHANDLE
  36642. GDIPSTATUS
  36643. LCRECTS
  36644. MAKEGDIPARRAYFFROMCURSOR
  36645. GDIPDRAWRECTANGLES
  36646. GDIPLUS
  36647. GETHANDLE
  36648. GDI+ object not created or associated
  36649. taPoints[1,1]b
  36650. GdipFillClosedCurve
  36651. gdiplus.dll
  36652. TOBRUSH
  36653. TAPOINTS
  36654. TNFIRSTCOL
  36655. TNFILLMODE
  36656. GDIPHANDLE
  36657. GDIPSTATUS
  36658. LCPOINTS
  36659. MAKEGDIPARRAYF
  36660. GDIPFILLCLOSEDCURVE
  36661. GDIPLUS
  36662. GETHANDLEn
  36663. GDI+ object not created or associated
  36664. GdipFillClosedCurve
  36665. gdiplus.dll
  36666. TOBRUSH
  36667. TCALIAS
  36668. TCEXPRX
  36669. TCEXPRY
  36670. TNFILLMODE
  36671. GDIPHANDLE
  36672. GDIPSTATUS
  36673. LCPOINTS
  36674. MAKEGDIPARRAYFFROMCURSOR
  36675. GDIPFILLCLOSEDCURVE
  36676. GDIPLUS
  36677. GETHANDLEj
  36678. GDI+ object not created or associated
  36679. GdipFillPolygon
  36680. gdiplus.dll
  36681. TOBRUSH
  36682. TCALIAS
  36683. TCEXPRX
  36684. TCEXPRY
  36685. TNFILLMODE
  36686. GDIPHANDLE
  36687. GDIPSTATUS
  36688. LCPOINTS
  36689. MAKEGDIPARRAYFFROMCURSOR
  36690. GDIPFILLPOLYGON
  36691. GDIPLUS
  36692. GETHANDLE
  36693. GDI+ object not created or associated
  36694. taPoints[1,1]b
  36695. GdipFillPolygon
  36696. gdiplus.dll
  36697. TOBRUSH
  36698. TAPOINTS
  36699. TNFIRSTCOL
  36700. TNFILLMODE
  36701. GDIPHANDLE
  36702. GDIPSTATUS
  36703. LCPOINTS
  36704. MAKEGDIPARRAYF
  36705. GDIPFILLPOLYGON
  36706. GDIPLUS
  36707. GETHANDLE
  36708. GDI+ object not created or associated
  36709. taRects[1,1]b
  36710. GdipFillRectangles
  36711. gdiplus.dll
  36712. TOBRUSH
  36713. TARECTS
  36714. TNFIRSTCOL
  36715. GDIPHANDLE
  36716. GDIPSTATUS
  36717. LCRECTS
  36718. MAKEGDIPARRAYF
  36719. GDIPFILLRECTANGLES
  36720. GDIPLUS
  36721. GETHANDLE^
  36722. GDI+ object not created or associated
  36723. GdipFillRectangles
  36724. gdiplus.dll
  36725. TOBRUSH
  36726. TCALIAS
  36727. TCEXPRX
  36728. TCEXPRY
  36729. TCEXPRW
  36730. TCEXPRH
  36731. GDIPHANDLE
  36732. GDIPSTATUS
  36733. LCRECTS
  36734. MAKEGDIPARRAYFFROMCURSOR
  36735. GDIPFILLRECTANGLES
  36736. GDIPLUS
  36737. GETHANDLE
  36738. GDI+ object not created or associated
  36739. GdipGraphicsClear
  36740. GDIPlus.Dll
  36741. TVCOLOR
  36742. GDIPHANDLE
  36743. GDIPSTATUS
  36744. GDIPGRAPHICSCLEAR
  36745. GDIPLUS
  36746. GDI+ object not created or associated
  36747. GdipSaveGraphics
  36748. gdiplus.dll
  36749. RNGRAPHICSSTATE
  36750. GDIPHANDLE
  36751. GDIPSTATUS
  36752. LNSTATE
  36753. GDIPSAVEGRAPHICS
  36754. GDIPLUS
  36755. GDI+ object not created or associated
  36756. GdipRestoreGraphics
  36757. gdiplus.dll
  36758. TNGRAPHICSSTATE
  36759. GDIPHANDLE
  36760. GDIPSTATUS
  36761. GDIPRESTOREGRAPHICS
  36762. GDIPLUS
  36763. GDI+ object not created or associated
  36764. GdipTranslateWorldTransform
  36765. gdiplus.dll
  36766. TNOFFSETX    
  36767. TNOFFSETY
  36768. TNMATRIXORDER
  36769. GDIPHANDLE
  36770. GDIPSTATUS
  36771. GDIPTRANSLATEWORLDTRANSFORM
  36772. GDIPLUS
  36773. GDI+ object not created or associated
  36774. GdipRotateWorldTransform
  36775. gdiplus.dll
  36776. TNANGLE
  36777. TNMATRIXORDER
  36778. GDIPHANDLE
  36779. GDIPSTATUS
  36780. GDIPROTATEWORLDTRANSFORM
  36781. GDIPLUS
  36782. GDI+ object not created or associated
  36783. GdipScaleWorldTransform
  36784. gdiplus.dll
  36785. TNSCALEX
  36786. TNSCALEY
  36787. TNMATRIXORDER
  36788. GDIPHANDLE
  36789. GDIPSTATUS
  36790. GDIPSCALEWORLDTRANSFORM
  36791. GDIPLUS
  36792. GDI+ object not created or associated
  36793. GdipResetWorldTransform
  36794. gdiplus.dll
  36795. GDIPHANDLE
  36796. GDIPSTATUS
  36797. GDIPRESETWORLDTRANSFORM
  36798. GDIPLUS
  36799. GdipGetImageGraphicsContext
  36800. gdiplus.dll
  36801. TOIMAGE
  36802. GDIPSTATUS
  36803. DESTROY
  36804. GDIPGETIMAGEGRAPHICSCONTEXT
  36805. GDIPLUS
  36806. NHANDLE    
  36807. GETHANDLE    
  36808. SETHANDLE
  36809. GDI+ object not created or associated
  36810. NUMBER
  36811. GdipDrawImage
  36812. gdiplus.dll
  36813. TOIMAGE    
  36814. DESTPTORX
  36815. DESTY
  36816. GDIPHANDLE
  36817. GDIPSTATUS
  36818. LNDESTX
  36819. LNDESTY
  36820. GDIPDRAWIMAGE
  36821. GDIPLUS
  36822. GETHANDLE
  36823. GPIMAGE
  36824. GDI+ object not created or associated
  36825. NUMBER
  36826. GdipDrawImageRect
  36827. gdiplus.dll
  36828. TOIMAGE
  36829. DESTRECTORX
  36830. DESTY
  36831. DESTW
  36832. DESTH
  36833. GDIPHANDLE
  36834. GDIPSTATUS
  36835. LNDESTX
  36836. LNDESTY
  36837. LNDESTW
  36838. LNDESTH
  36839. GDIPDRAWIMAGERECT
  36840. GDIPLUS
  36841. GETHANDLE
  36842. GDI+ object not created or associated
  36843. GdipDrawImagePointRect
  36844. gdiplus.dll
  36845. TOIMAGE    
  36846. DESTPOINT
  36847. SRCRECT
  36848. SRCUNIT
  36849. GDIPHANDLE
  36850. GDIPSTATUS
  36851. GDIPDRAWIMAGEPOINTRECT
  36852. GDIPLUS
  36853. GETHANDLE
  36854. GDI+ object not created or associated
  36855. GdipDrawImageRectRect
  36856. gdiplus.dll
  36857. TOIMAGE
  36858. DESTRECT
  36859. SRCRECT
  36860. SRCUNIT
  36861. IMAGEATTRIBS
  36862. GDIPHANDLE
  36863. GDIPSTATUS
  36864. GDIPDRAWIMAGERECTRECT
  36865. GDIPLUS
  36866. GETHANDLE
  36867. IMAGEATTRIBUTES
  36868. INTEGER
  36869. GDI+ object not created or associated
  36870. GdipReleaseDC
  36871. gdiplus.dll
  36872. TNHDC
  36873. GDIPHANDLE
  36874. GDIPSTATUS
  36875. GDIPRELEASEDC
  36876. GDIPLUS
  36877. GDI+ object not created or associated
  36878. GdipGetDC
  36879. gdiplus.dll
  36880. GDIPHANDLE
  36881. GDIPSTATUS
  36882. LNHDC    
  36883. GDIPGETDC
  36884. GDIPLUS
  36885. GdipSetTextRenderingHint
  36886. GDIPLUS.DLLQ
  36887. xfcGdipSetTextRenderingHint
  36888. GdipStringFormatGetGenericTypographic
  36889. GDIPLUS.DLLQ
  36890. xfcGdipStringFormatGetGenericTypographic
  36891. GdipCloneStringFormat
  36892. GDIPLUS.DLLQ
  36893. xfcGdipCloneStringFormat
  36894. GdipCreateStringFormat
  36895. GDIPLUS.DLLQ
  36896. xfcGdipCreateStringFormat
  36897. GdipDeleteStringFormat
  36898. GDIPLUS.DLLQ
  36899. xfcGdipDeleteStringFormat
  36900. GdipSetStringFormatFlags
  36901. GDIPLUS.DLLQ
  36902. xfcGdipSetStringFormatFlags
  36903. GdipSetStringFormatAlign
  36904. GDIPLUS.DLLQ
  36905. xfcGdipSetStringFormatAlign
  36906. GdipMeasureString
  36907. GDIPLUS.DLLQ
  36908. xfcGdipMeasureString
  36909. GdipDrawString
  36910. GDIPLUS.DLLQ
  36911. xfcGdipDrawString
  36912. GdipDeleteStringFormat
  36913. GDIPLUS.DLLQ
  36914. xfcGdipDeleteStringFormat
  36915. GdipSetTextRenderingHint
  36916. GDIPLUS.DLLQ
  36917. Foxy_GdipSetTextRenderingHint
  36918. GPFONT
  36919. \ffc\_gdiplus.vcx
  36920. GPSOLIDBRUSH
  36921. GPRECTANGLE
  36922. \ffc\_gdiplus.vcx
  36923. BOOLEAN
  36924. XFCGRAPHICSSTATE
  36925. EXCEPTION
  36926.  <CR> 
  36927.  <CR> 
  36928.  <CR> 
  36929.  <LASTWORD> 
  36930. <LASTWORD>
  36931. <LASTWORD>
  36932. GDIPSETTEXTRENDERINGHINT
  36933. GDIPLUS
  36934. XFCGDIPSETTEXTRENDERINGHINT%
  36935. GDIPSTRINGFORMATGETGENERICTYPOGRAPHIC(
  36936. XFCGDIPSTRINGFORMATGETGENERICTYPOGRAPHIC
  36937. GDIPCLONESTRINGFORMAT
  36938. XFCGDIPCLONESTRINGFORMAT
  36939. GDIPCREATESTRINGFORMAT
  36940. XFCGDIPCREATESTRINGFORMAT
  36941. GDIPDELETESTRINGFORMAT
  36942. XFCGDIPDELETESTRINGFORMAT
  36943. GDIPSETSTRINGFORMATFLAGS
  36944. XFCGDIPSETSTRINGFORMATFLAGS
  36945. GDIPSETSTRINGFORMATALIGN
  36946. XFCGDIPSETSTRINGFORMATALIGN
  36947. GDIPMEASURESTRING
  36948. XFCGDIPMEASURESTRING
  36949. GDIPDRAWSTRING
  36950. XFCGDIPDRAWSTRING
  36951. FOXY_GDIPSETTEXTRENDERINGHINT
  36952. TCSTRING
  36953. TOFONT
  36954. TOBRUSH
  36955. TORECTANGLE
  36956. TLJUSTLAST
  36957. LHFONT
  36958. LHGRAPHICS
  36959. LHBRUSH
  36960. LCRECTF
  36961. LNSPACEWIDTH
  36962. LNLINEHEIGHT
  36963. LCTEXT
  36964. LOGFXSTATE
  36965. LHTEMPSTRFORMAT
  36966. LHSTRINGFORMAT
  36967. LHLEFTALIGNHANDLE
  36968. LHRIGHTALIGNHANDLE
  36969. LNWORDS
  36970. LNWORDWIDTH
  36971. LNCHARS
  36972. LCCURRWORD    
  36973. LCCUTWORD
  36974. LNREDUCE
  36975. LLENDOFSENTENCE
  36976. LNWORDSWIDTH
  36977. LNWORDSINLINE
  36978. LNCURRWORD
  36979. LNCURRLINE
  36980. LNWIDTHOFBETWEEN
  36981. LNSTRINGFORMATHANDLE
  36982. LLLAST
  36983. LOEXC
  36984. LHGFXSTATE
  36985. SAVE    
  36986. GETHANDLE    
  36987. GETHEIGHT
  36988. PCBOUNDINGBOX
  36989. LAWORDS
  36990. RESTORE
  36991. LLLASTLINE
  36992. LCCHAR}
  36993. GdipDeleteGraphics
  36994. gdiplus.dll
  36995. GDIPHANDLE
  36996. GDIPOWNSTHISHANDLE
  36997. GDIPDELETEGRAPHICS
  36998. GDIPLUS
  36999. dpix_access,
  37000. dpix_assignZ
  37001. dpiy_access
  37002. dpiy_assign
  37003. drawline
  37004. drawrectangle
  37005. drawstringan
  37006. drawstringwl
  37007. drawpiem
  37008. fillpie
  37009. drawarc
  37010. drawbezier
  37011. drawellipse
  37012. fillrectangle
  37013. fillellipset
  37014. flushK"
  37015. createfromhdc
  37016. createfromhwnd
  37017. compositingmode_access
  37018. compositingmode_assign
  37019. compositingquality_accessQ)
  37020. compositingquality_assign
  37021. interpolationmode_access
  37022. interpolationmode_assign2-
  37023. pagescale_access
  37024. pagescale_assign
  37025. smoothingmode_access
  37026. smoothingmode_assignS2
  37027. pixeloffsetmode_access
  37028. pixeloffsetmode_assign
  37029. clipbounds_access.6
  37030. clipbounds_assign
  37031. pageunit_access
  37032. pageunit_assign(9
  37033. visibleclipbounds_accessk:
  37034. visibleclipbounds_assign
  37035. measurestringaR<
  37036. measurestringw
  37037. textrenderinghint_access4F
  37038. textrenderinghint_assignuG
  37039. renderingorigin_access
  37040. renderingorigin_assignoJ
  37041. textcontrast_access
  37042. textcontrast_assign
  37043. drawlineshN
  37044. drawlinesfromcursor
  37045. drawbeziers
  37046. drawclosedcurve
  37047. drawbeziersfromcursor
  37048. drawclosedcurvefromcursor
  37049. drawcurve
  37050. drawcurvefromcursor
  37051. drawpolygonk^
  37052. drawpolygonfromcursor
  37053. drawrectangles]b
  37054. drawrectanglesfromcursoryd
  37055. fillclosedcurve}f
  37056. fillclosedcurvefromcursor
  37057. fillpolygonfromcursor
  37058. fillpolygon
  37059. fillrectangles5o
  37060. fillrectanglesfromcursorSq
  37061. clearYs
  37062. restore
  37063. translatetransformrw
  37064. rotatetransform*y
  37065. scaletransform
  37066. resettransform`|
  37067. createfromimage_}
  37068. drawimageat
  37069. drawimagescaled>
  37070. drawimageportionat
  37071. drawimageportionscaled
  37072. releasehdc
  37073. gethdc
  37074. drawstringjust
  37075. Destroy
  37076. GDI+ object not created or associated
  37077. GdipGetStringFormatAlign
  37078. gdiplus.dll
  37079. GDIPHANDLE
  37080. GDIPSTATUS
  37081. GDIPGETSTRINGFORMATALIGN
  37082. GDIPLUS
  37083. NALIGNMENT[
  37084. GDI+ object not created or associated
  37085. GDI+ object not owned by VFP object
  37086. GdipSetStringFormatAlign
  37087. gdiplus.dll
  37088. TNALIGNMENT
  37089. GDIPSTATUS
  37090. GDIPHANDLE
  37091. GDIPOWNSTHISHANDLE
  37092. GDIPSETSTRINGFORMATALIGN
  37093. GDIPLUS
  37094. GDI+ object not created or associated
  37095. GdipGetStringFormatFlags
  37096. gdiplus.dll
  37097. GDIPHANDLE
  37098. GDIPSTATUS
  37099. GDIPGETSTRINGFORMATFLAGS
  37100. GDIPLUS
  37101. NFLAGS[
  37102. GDI+ object not created or associated
  37103. GDI+ object not owned by VFP object
  37104. GdipSetStringFormatFlags
  37105. gdiplus.dll
  37106. TNFLAGS
  37107. GDIPSTATUS
  37108. GDIPHANDLE
  37109. GDIPOWNSTHISHANDLE
  37110. GDIPSETSTRINGFORMATFLAGS
  37111. GDIPLUS
  37112. GDI+ object not created or associated
  37113. GdipGetStringFormatHotkeyPrefix
  37114. gdiplus.dll
  37115. GDIPHANDLE
  37116. GDIPSTATUS
  37117. GDIPGETSTRINGFORMATHOTKEYPREFIX
  37118. GDIPLUS
  37119. NPREFIXb
  37120. GDI+ object not created or associated
  37121. GDI+ object not owned by VFP object
  37122. GdipSetStringFormatHotkeyPrefix
  37123. gdiplus.dll
  37124. TNPREFIX
  37125. GDIPSTATUS
  37126. GDIPHANDLE
  37127. GDIPOWNSTHISHANDLE
  37128. GDIPSETSTRINGFORMATHOTKEYPREFIX
  37129. GDIPLUS
  37130. GDI+ object not created or associated
  37131. GdipGetStringFormatLineAlign
  37132. gdiplus.dll
  37133. GDIPHANDLE
  37134. GDIPSTATUS
  37135. GDIPGETSTRINGFORMATLINEALIGN
  37136. GDIPLUS
  37137. NALIGNMENT_
  37138. GDI+ object not created or associated
  37139. GDI+ object not owned by VFP object
  37140. GdipSetStringFormatLineAlign
  37141. gdiplus.dll
  37142. TNALIGNMENT
  37143. GDIPSTATUS
  37144. GDIPHANDLE
  37145. GDIPOWNSTHISHANDLE
  37146. GDIPSETSTRINGFORMATLINEALIGN
  37147. GDIPLUS
  37148. GDI+ object not created or associated
  37149. GdipGetStringFormatTrimming
  37150. gdiplus.dll
  37151. GDIPHANDLE
  37152. GDIPSTATUS
  37153. GDIPGETSTRINGFORMATTRIMMING
  37154. GDIPLUS
  37155. NMODE^
  37156. GDI+ object not created or associated
  37157. GDI+ object not owned by VFP object
  37158. GdipSetStringFormatTrimming
  37159. gdiplus.dll
  37160. TNMODE
  37161. GDIPSTATUS
  37162. GDIPHANDLE
  37163. GDIPOWNSTHISHANDLE
  37164. GDIPSETSTRINGFORMATTRIMMING
  37165. GDIPLUS
  37166. GdipStringFormatGetGenericDefault
  37167. GDIPlus.Dll
  37168. GdipCloneStringFormat
  37169. GDIPlus.Dll
  37170. TLMAKECLONE
  37171. DESTROY
  37172. NHANDLE!
  37173. GDIPSTRINGFORMATGETGENERICDEFAULT
  37174. GDIPLUS
  37175. GDIPSTATUS
  37176. GDIPCLONESTRINGFORMAT    
  37177. SETHANDLES
  37178. GdipStringFormatGetGenericTypographic
  37179. GDIPlus.Dll
  37180. GdipCloneStringFormat
  37181. GDIPlus.Dll
  37182. TLMAKECLONE
  37183. DESTROY
  37184. NHANDLE%
  37185. GDIPSTRINGFORMATGETGENERICTYPOGRAPHIC
  37186. GDIPLUS
  37187. GDIPSTATUS
  37188. GDIPCLONESTRINGFORMAT    
  37189. SETHANDLE
  37190. GdipCreateStringFormat
  37191. GDIPlus.Dll
  37192. TNFLAGS
  37193. TNLANGID
  37194. DESTROY
  37195. NHANDLE
  37196. GDIPCREATESTRINGFORMAT
  37197. GDIPLUS
  37198. GDIPSTATUS    
  37199. SETHANDLE
  37200. GPSTRINGFORMAT
  37201. GdipCloneStringFormat
  37202. GDIPlus.Dll
  37203. TOSTRINGFORMAT
  37204. DESTROY
  37205. NHANDLE
  37206. GDIPHANDLE
  37207. GDIPSTATUS
  37208. GDIPCLONESTRINGFORMAT
  37209. GDIPLUS
  37210. GDIPOWNSTHISHANDLE
  37211. GdipDeleteStringFormat
  37212. GDIPlus.Dll
  37213. GDIPHANDLE
  37214. GDIPOWNSTHISHANDLE
  37215. GDIPDELETESTRINGFORMAT
  37216. GDIPLUS
  37217. TNFLAGS
  37218. TNLANGID
  37219. CREATE
  37220. alignment_access,
  37221. alignment_assign]
  37222. formatflags_access#
  37223. formatflags_assigne
  37224. hotkeyprefix_access'
  37225. hotkeyprefix_assignx
  37226. linealignment_accessI    
  37227. linealignment_assign
  37228. trimming_accesse
  37229. trimming_assign
  37230. getgenericdefaults
  37231. getgenerictypographicJ
  37232. create)
  37233. cloneD
  37234. Destroy
  37235. STRING
  37236. GdipCreateFontFamilyFromName
  37237. GDIPlus.Dll
  37238. TCNAME
  37239. DESTROY
  37240. NHANDLE
  37241. GDIPCREATEFONTFAMILYFROMNAME
  37242. GDIPLUS
  37243. GDIPSTATUS
  37244. GDIPFONTCOLLECTIONHANDLE    
  37245. SETHANDLE
  37246. GdipGetGenericFontFamilyMonospace
  37247. GDIPlus.Dll
  37248. DESTROY
  37249. NHANDLE!
  37250. GDIPGETGENERICFONTFAMILYMONOSPACE
  37251. GDIPLUS
  37252. GDIPSTATUS    
  37253. SETHANDLE
  37254. GdipGetGenericFontFamilySerif
  37255. GDIPlus.Dll
  37256. DESTROY
  37257. NHANDLE
  37258. GDIPGETGENERICFONTFAMILYSERIF
  37259. GDIPLUS
  37260. GDIPSTATUS    
  37261. SETHANDLE
  37262. GdipGetGenericFontFamilySansSerif
  37263. GDIPlus.Dll
  37264. DESTROY
  37265. NHANDLE!
  37266. GDIPGETGENERICFONTFAMILYSANSSERIF
  37267. GDIPLUS
  37268. GDIPSTATUS    
  37269. SETHANDLE%
  37270. INTEGER
  37271. GDI+ object not created or associated
  37272. GdipIsStyleAvailable
  37273. gdiplus.dll
  37274. TNFONTSTYLE
  37275. GDIPHANDLE
  37276. GDIPSTATUS
  37277. GDIPISSTYLEAVAILABLE
  37278. GDIPLUS
  37279. NAVAILABLEJ
  37280. GDI+ object not created or associated
  37281. GdipGetFamilyName
  37282. gdiplus.dll
  37283. lstrlenW
  37284. kernel32.dllQ
  37285. __win32_lstrlenW
  37286. STRING
  37287. GDIPHANDLE
  37288. GDIPSTATUS
  37289. GDIPGETFAMILYNAME
  37290. GDIPLUS
  37291. LSTRLENW
  37292. KERNEL32
  37293. __WIN32_LSTRLENW
  37294. CUNICODENAME"
  37295. FontName
  37296. VNEWVALX
  37297. INTEGER
  37298. GDI+ object not created or associated
  37299. GdipGetCellAscent
  37300. gdiplus.dll
  37301. NUMBER
  37302. TNSTYLE
  37303. GDIPSTATUS
  37304. GDIPHANDLE
  37305. GDIPGETCELLASCENT
  37306. GDIPLUS
  37307. NVALUEV
  37308. INTEGER
  37309. GDI+ object not created or associated
  37310. GdipGetEmHeight
  37311. gdiplus.dll
  37312. NUMBER
  37313. TNSTYLE
  37314. GDIPSTATUS
  37315. GDIPHANDLE
  37316. GDIPGETEMHEIGHT
  37317. GDIPLUS
  37318. NVALUEY
  37319. INTEGER
  37320. GDI+ object not created or associated
  37321. GdipGetCellDescent
  37322. gdiplus.dll
  37323. NUMBER
  37324. TNSTYLE
  37325. GDIPSTATUS
  37326. GDIPHANDLE
  37327. GDIPGETCELLDESCENT
  37328. GDIPLUS
  37329. NVALUEY
  37330. INTEGER
  37331. GDI+ object not created or associated
  37332. GdipGetLineSpacing
  37333. gdiplus.dll
  37334. NUMBER
  37335. TNSTYLE
  37336. GDIPSTATUS
  37337. GDIPHANDLE
  37338. GDIPGETLINESPACING
  37339. GDIPLUS
  37340. NVALUE
  37341. GDI+ object not created or associated
  37342. GdipGetFamilyName
  37343. gdiplus.dll
  37344. lstrlenW
  37345. kernel32.dllQ
  37346. __win32_lstrlenW
  37347. STRING
  37348. TNLANGID
  37349. GDIPSTATUS
  37350. GDIPHANDLE
  37351. GDIPGETFAMILYNAME
  37352. GDIPLUS
  37353. LSTRLENW
  37354. KERNEL32
  37355. __WIN32_LSTRLENW
  37356. CUNICODENAMEb
  37357. TCNAME
  37358. GDIPFONTCOLLECTIONHANDLE
  37359. CREATE
  37360. GdipDeleteFontFamily
  37361. GDIPlus.Dll
  37362. GDIPHANDLE
  37363. GDIPOWNSTHISHANDLE
  37364. GDIPDELETEFONTFAMILY
  37365. GDIPLUS
  37366. GPFONTFAMILY
  37367. GdipCloneFontFamily
  37368. GDIPlus.Dll
  37369. TOFONTFAMILY
  37370. DESTROY
  37371. NHANDLE
  37372. GDIPHANDLE
  37373. GDIPSTATUS
  37374. GDIPCLONEFONTFAMILY
  37375. GDIPLUS
  37376. GDIPOWNSTHISHANDLE
  37377. create,
  37378. getgenericmonospacek
  37379. getgenericseriff
  37380. getgenericsansserifY
  37381. isstyleavailableT
  37382. fontname_access
  37383. fontname_assign
  37384. getcellascent
  37385. getemheightt    
  37386. getcelldescent
  37387. getlinespacing
  37388. getnamex
  37389. Destroy.
  37390. clone
  37391. GdipCreateHatchBrush
  37392. GDIPlus.Dll
  37393. A66CC
  37394. TNSTYLE
  37395. TVFORECOLOR
  37396. TVBACKCOLOR
  37397. GDIPSTATUS
  37398. DESTROY
  37399. NHANDLE
  37400. GDIPCREATEHATCHBRUSH
  37401. GDIPLUS
  37402. ARGB    
  37403. SETHANDLE
  37404. GDI+ object not created or associated
  37405. GdipGetHatchForegroundColor
  37406. gdiplus.dll
  37407. GDIPHANDLE
  37408. GDIPSTATUS
  37409. GDIPGETHATCHFOREGROUNDCOLOR
  37410. GDIPLUS
  37411. NARGB)
  37412. ForegroundColor
  37413. TVCOLOR
  37414. GDI+ object not created or associated
  37415. GdipGetHatchBackgroundColor
  37416. gdiplus.dll
  37417. GDIPHANDLE
  37418. GDIPSTATUS
  37419. GDIPGETHATCHBACKGROUNDCOLOR
  37420. GDIPLUS
  37421. NARGB)
  37422. BackgroundColor
  37423. TVCOLOR
  37424. GDI+ object not created or associated
  37425. GdipGetHatchStyle
  37426. gdiplus.dll
  37427. GDIPHANDLE
  37428. GDIPSTATUS
  37429. GDIPGETHATCHSTYLE
  37430. GDIPLUS
  37431. NHATCHSTYLE$
  37432. HatchStyle
  37433. VNEWVAL_
  37434. TNSTYLE
  37435. TVFORECOLOR
  37436. TVBACKCOLOR
  37437. CREATE
  37438. create,
  37439. foregroundcolor_access
  37440. foregroundcolor_assignY
  37441. backgroundcolor_access
  37442. backgroundcolor_assign
  37443. hatchstyle_access
  37444. hatchstyle_assignE
  37445. Initv
  37446. ]dpix Horizontal resolution of drawing surface
  37447. dpiy Vertical resolution of drawing surface
  37448. compositingmode how composited images are drawn to this Graphics object
  37449. compositingquality rendering quality of composited images drawn to this Graphics object
  37450. interpolationmode interpolation mode associated with this Graphics object.
  37451. pagescale The scaling between world units and page units 
  37452. smoothingmode Rendering quality 
  37453. pixeloffsetmode Value specifying how pixels are offset during rendering of this Graphics object
  37454. clipbounds Returns GpRectangle object that bounds the clipping region of this graphics object . Note: if the clipping region is infinite, this returns a meaningless large rectangle
  37455. pageunit The unit of measure used for page coordinates
  37456. visibleclipbounds Returns a GpRectange Object of the visible clipping region
  37457. renderingorigin The rendering origin for dithering and for hatch brushes
  37458. textcontrast Gamma corrrection value for rendering text
  37459. textrenderinghint Rendering mode for text associated with this Graphics object
  37460. *dpix_access 
  37461. *dpix_assign 
  37462. *dpiy_access 
  37463. *dpiy_assign 
  37464. *drawline Draw a line that connects two points, in the specified pen.
  37465. *drawrectangle Draw a rectangle
  37466. *drawstringa Draw a string in specified font and position (ANSI Version)
  37467. *drawstringw Draw a string in specified font and position (Unicode Version)
  37468. *drawpie Draw outlined pie slice in specified pen and start/stop anagles
  37469. *fillpie Draw filled pie slice in specified pen and start/stop angles
  37470. *drawarc Draws an arc representing a portion of an ellipse, given bounding rectangle of elllipse, start and sweep angles.
  37471. *drawbezier Draw a B
  37472. zier spline from 4 control points
  37473. *drawellipse Draw outlined ellipse specified by its bounding rectangle
  37474. *fillrectangle Fill a rectangle
  37475. *fillellipse Draw filled ellipse specified by its bounding rectangle
  37476. *flush Force execution of all pending graphics operations 
  37477. *createfromhdc Create Graphics object for a given device context (HDC)
  37478. *createfromhwnd Create GDI+ Graphics object for a given window (HWND)
  37479. *compositingmode_access 
  37480. *compositingmode_assign 
  37481. *compositingquality_access 
  37482. *compositingquality_assign 
  37483. *interpolationmode_access 
  37484. *interpolationmode_assign 
  37485. *pagescale_access 
  37486. *pagescale_assign 
  37487. *smoothingmode_access 
  37488. *smoothingmode_assign 
  37489. *pixeloffsetmode_access 
  37490. *pixeloffsetmode_assign 
  37491. *clipbounds_access 
  37492. *clipbounds_assign 
  37493. *pageunit_access 
  37494. *pageunit_assign 
  37495. *visibleclipbounds_access 
  37496. *visibleclipbounds_assign 
  37497. *measurestringa Measures ANSI text string when drawn with the specified Font and formatting
  37498. *measurestringw Measures Unicode text string when drawn with the specified Font and formatting
  37499. *textrenderinghint_access 
  37500. *textrenderinghint_assign 
  37501. *renderingorigin_access 
  37502. *renderingorigin_assign 
  37503. *textcontrast_access 
  37504. *textcontrast_assign 
  37505. *drawlines Draw sequence of connected lines, given array of coordinates
  37506. *drawlinesfromcursor Draw sequence of connected lines, given cursor containing coordinates
  37507. *drawbeziers Draw a B
  37508. zier spline given a 2-column array of coordinates
  37509. *drawclosedcurve Draw a closed curve given a 2-column array of coordinates
  37510. *drawbeziersfromcursor Draw a B
  37511. zier spline given a cursor containing coordinates
  37512. *drawclosedcurvefromcursor Draw a closed curve given a cursor containing coordinates
  37513. *drawcurve Draw a smooth curve given a 2-column array of coordinates
  37514. *drawcurvefromcursor Draw a smooth curve given a cursor containing coordinates
  37515. *drawpolygon Draw a polygon given a 2-column array of coordinates
  37516. *drawpolygonfromcursor Draw a polygon given a cursor containing coordinates
  37517. *drawrectangles Draw a series of rectangles given a 4-column array (each row x,y,w,h)
  37518. *drawrectanglesfromcursor Draw a series of rectangles given a cursor containing x,y,w,h values
  37519. *fillclosedcurve Fill a closed curve defined by a 2-column array of coordinates
  37520. *fillclosedcurvefromcursor Fill a closed curve from a cursor defining coordinates
  37521. *fillpolygonfromcursor Fill a polygon from a cursor defining coordinates
  37522. *fillpolygon Filll a polygon defined by a 2-column array of coordinates
  37523. *fillrectangles Fill a series of rectangles defined by a 4-column array of coordinates
  37524. *fillrectanglesfromcursor Fill a series of rectangles defined by a cursor containing x,y,w,h values
  37525. *clear Clear entire drawing surface and fill with specified background color
  37526. *save Save current state and return token (for later restore)
  37527. *restore Restore previously saved state
  37528. *translatetransform Add translate by (x,y) to this graphics object's transformation matrix
  37529. *rotatetransform Prepend rotation by specified angle to this object's transformation matrix
  37530. *scaletransform Apply scaling to transformation matrix for this graphics object
  37531. *resettransform Reset the world transform matrix (to no transformation)
  37532. *createfromimage Create graphics object from the specified GpImage object (to draw on that image's surface)
  37533. *drawimageat Draw image at the specified location, using its original physical size
  37534. *drawimagescaled Draw image at the specified location with the specified size.
  37535. *drawimageportionat Draw portion of an image at the specified location, using its original size
  37536. *drawimageportionscaled Draw portion of an image at the specified location and with the specified size
  37537. *releasehdc Release device context previously obtained with GetHdc()
  37538. *gethdc Get handle to device context associated with this Graphics object.
  37539. *drawstringjust 
  37540. PROCEDURE dpix_access
  37541. #if GDIPLUS_CHECK_OBJECT
  37542. if This.gdipHandle==0
  37543.     error _GDIPLUS_NOGDIPOBJECT_LOC
  37544.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  37545.     return cast(null as B)
  37546. endif
  37547. #endif
  37548. declare integer GdipGetDpiX in gdiplus.dll ;
  37549.     integer nGraphics, single @ fDPI
  37550. local nDPI
  37551. nDPI = 0.0
  37552. This.gdipStatus = GdipGetDpiX( This.gdipHandle, @nDPI)
  37553. return iif(This.gdipStatus==GDIPLUS_STATUS_OK,m.nDPI,cast(null as B))
  37554. ENDPROC
  37555. PROCEDURE dpix_assign
  37556. LPARAMETERS vNewVal
  37557. error 1743, 'DpiX'
  37558. ENDPROC
  37559. PROCEDURE dpiy_access
  37560. #if GDIPLUS_CHECK_OBJECT
  37561. if This.gdipHandle==0
  37562.     error _GDIPLUS_NOGDIPOBJECT_LOC
  37563.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  37564.     return cast(null as B)
  37565. endif
  37566. #endif
  37567. declare integer GdipGetDpiY in gdiplus.dll ;
  37568.     integer nGraphics, single @ fDPI
  37569. local nDPI
  37570. nDPI = 0.0
  37571. This.gdipStatus = GdipGetDpiY( This.gdipHandle, @nDPI)
  37572. return iif(This.gdipStatus==GDIPLUS_STATUS_OK,m.nDPI,cast(null as B))
  37573. ENDPROC
  37574. PROCEDURE dpiy_assign
  37575. LPARAMETERS vNewVal
  37576. error 1743, 'DpiY'
  37577. ENDPROC
  37578. PROCEDURE drawline
  37579. lparameters toPen as GpPen, x1,y1,x2,y2
  37580. #if GDIPLUS_CHECK_OBJECT
  37581. if This.gdipHandle==0
  37582.     error _GDIPLUS_NOGDIPOBJECT_LOC
  37583.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  37584.     return .F.
  37585. endif
  37586. #endif
  37587. #if GDIPLUS_CHECK_PARAMS
  37588. if !(vartype(toPen)+vartype(m.x1)+vartype(m.y1)+vartype(m.x2)+vartype(m.y2)=='ONNNN')
  37589.     error 11 && function argument
  37590.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  37591.     return .F.
  37592. endif
  37593. #endif
  37594. declare Integer GdipDrawLine in gdiplus.dll ;
  37595.     integer nGraphics, integer nPen, single,single,single,single
  37596. This.gdipStatus = GdipDrawLine( This.gdipHandle, toPen.GetHandle(), m.x1,m.y1, m.x2,m.y2 )
  37597. return This.gdipStatus = GDIPLUS_STATUS_OK
  37598. ENDPROC
  37599. PROCEDURE drawrectangle
  37600. lparameters toPen, tXOrRect,tnY,tnW,tnH
  37601. * Parameters either ( pen, x,y,w,h )
  37602. * or ( pen, rect )
  37603. #if GDIPLUS_CHECK_OBJECT
  37604. if This.gdipHandle==0
  37605.     error _GDIPLUS_NOGDIPOBJECT_LOC
  37606.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  37607.     return .F.
  37608. endif
  37609. #endif
  37610. #if GDIPLUS_CHECK_PARAMS
  37611. do case
  37612. case vartype(m.toPen)!='O'
  37613.     * Pen must be given (assume object is of correct type!)
  37614.     error 11 && function argument
  37615.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  37616.     return .F.
  37617. case vartype(m.tXOrRect)='N' ;
  37618.     and vartype(m.tnY)+vartype(m.tnW)+vartype(m.tnH)=='NNN'
  37619.     * OK
  37620. case vartype(m.tXOrRect)='O' ;
  37621.     and vartype(m.tnY)+vartype(m.tnW)+vartype(m.tnH)=='LLL' ;
  37622.     and pemstatus(m.tXOrRect,'X',5) and pemstatus(m.tXOrRect,'W',5)
  37623.     * OK
  37624. otherwise    
  37625.     * Parameters do not pass the test
  37626.     error 11 && function argument
  37627.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  37628.     return .F.
  37629. endcase
  37630. #endif
  37631. declare Integer GdipDrawRectangle in gdiplus.dll ;
  37632.     integer nGraphics, integer nPen, single,single,single,single
  37633. if vartype(m.tXOrRect)='O'
  37634.     This.gdipStatus = GdipDrawRectangle( This.gdipHandle, toPen.GetHandle() ;
  37635.     , m.tXOrRect.X,m.tXOrRect.Y, m.tXOrRect.W,m.tXOrRect.H )
  37636.     This.gdipStatus = GdipDrawRectangle( This.gdipHandle, toPen.GetHandle() ;
  37637.     , m.tXOrRect,m.tnY, m.tnW,m.tnH )
  37638. endif
  37639. return GDIPLUS_STATUS_OK == This.gdipStatus
  37640. ENDPROC
  37641. PROCEDURE drawstringa
  37642. lparameters tcAnsiString, toFont, tvRectPoint, toStringFormat, toBrush
  37643. #if GDIPLUS_CHECK_OBJECT
  37644. if This.gdipHandle==0
  37645.     error _GDIPLUS_NOGDIPOBJECT_LOC
  37646.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  37647.     return .F.
  37648. endif
  37649. #endif
  37650. #if GDIPLUS_CHECK_PARAMS
  37651. if !(vartype(m.tcAnsiString)='C' and vartype(m.toFont)$'OL' ;
  37652.     and vartype(m.toStringFormat)$'OL' and vartype(m.toBrush)$'OL')
  37653.     error 11 && function argument
  37654.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  37655.     return .F.
  37656. endif
  37657. #endif
  37658. local lcRect
  37659. do case
  37660. case vartype(tvRectPoint)$'CQ' && String or varbinary
  37661.     do case
  37662.     case len(m.tvRectPoint)==8 && point
  37663.         lcRect = m.tvRectPoint + replicate(chr(0),8)
  37664.     case len(m.tvRectPoint)==16 && rect
  37665.         lcRect = m.tvRectPoint
  37666.     otherwise
  37667.         error 11 && function argument
  37668.         This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  37669.         return .F.
  37670.     endcase
  37671. case vartype(m.tvRectPoint) == 'O'
  37672.     do case
  37673.     case pemstatus(m.tvRectPoint,'gdipRectF',5)    && Rect
  37674.         lcRect = tvRectPoint.GdipRectF
  37675.     case pemstatus(m.tvRectPoint,'gdipPointF',5)    && Point
  37676.         lcRect = tvRectPoint.GdipPointF + replicate(chr(0),8)
  37677.     otherwise
  37678.         error 11 && function argument
  37679.         This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  37680.         return .F.
  37681.     endcase
  37682. otherwise
  37683.     error 11 && function argument
  37684.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  37685.     return .F.
  37686. endcase
  37687. declare integer GdipDrawString in gdiplus.dll ;
  37688.     integer,string,integer,integer,string,integer,integer
  37689. This.gdipStatus = GdipDrawString( ;
  37690.     This.gdipHandle ;
  37691.     , strconv(m.tcAnsiString,5)    ;
  37692.     , len(m.tcAnsiString) ;
  37693.     , iif(vartype(m.toFont)='O',toFont.GetHandle(),0) ;
  37694.     , m.lcRect ;
  37695.     , iif(vartype(m.toStringFormat)='O',toStringFormat.GetHandle(),0) ;
  37696.     , iif(vartype(m.toBrush)='O',toBrush.GetHandle(),0) ;
  37697. return GDIPLUS_STATUS_OK == This.gdipStatus
  37698. ENDPROC
  37699. PROCEDURE drawstringw
  37700. lparameters tcUnicodeString, toFont, tvRectPoint, toStringFormat, toBrush
  37701. #if GDIPLUS_CHECK_OBJECT
  37702. if This.gdipHandle==0
  37703.     error _GDIPLUS_NOGDIPOBJECT_LOC
  37704.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  37705.     return .F.
  37706. endif
  37707. #endif
  37708. #if GDIPLUS_CHECK_PARAMS
  37709. * 2013-04-11 CChalom
  37710. * Allow receiving Varbinary values for the Unicode string
  37711. if !(vartype(m.tcUnicodeString)$'CQ' and vartype(m.toFont)$'OL' ;
  37712.     and vartype(m.toStringFormat)$'OL' and vartype(m.toBrush)$'OL')
  37713.     error 11 && function argument
  37714.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  37715.     return .F.
  37716. endif
  37717. #endif
  37718. local lcRect
  37719. do case
  37720. case vartype(tvRectPoint)$'CQ' && String or varbinary
  37721.     do case
  37722.     case len(m.tvRectPoint)==8 && point
  37723.         lcRect = m.tvRectPoint + replicate(chr(0),8)
  37724.     case len(m.tvRectPoint)==16 && rect
  37725.         lcRect = m.tvRectPoint
  37726.     otherwise
  37727.         error 11 && function argument
  37728.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  37729.     return .F.
  37730.     endcase
  37731. case vartype(m.tvRectPoint) == 'O'
  37732.     do case
  37733.     case pemstatus(m.tvRectPoint,'gdipRectF',5)    && Rect
  37734.         lcRect = tvRectPoint.GdipRectF
  37735.     case pemstatus(m.tvRectPoint,'gdipPointF',5)    && Point
  37736.         lcRect = tvRectPoint.GdipPointF + replicate(chr(0),8)
  37737.     otherwise
  37738.         error 11 && function argument
  37739.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  37740.     return .F.
  37741.     endcase
  37742. otherwise
  37743.     error 11 && function argument
  37744.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  37745.     return .F.
  37746. endcase
  37747. declare integer GdipDrawString in gdiplus.dll ;
  37748.     integer,string,integer,integer,string,integer,integer
  37749. This.gdipStatus = GdipDrawString( ;
  37750.     This.gdipHandle ;
  37751.     , m.tcUnicodeString ;
  37752.     , len(m.tcUnicodeString)/2 ;
  37753.     , iif(vartype(m.toFont)='O',toFont.GetHandle(),0) ;
  37754.     , m.lcRect ;
  37755.     , iif(vartype(m.toStringFormat)='O',toStringFormat.GetHandle(),0) ;
  37756.     , iif(vartype(m.toBrush)='O',toBrush.GetHandle(),0) ;
  37757. return GDIPLUS_STATUS_OK == This.gdipStatus
  37758. ENDPROC
  37759. PROCEDURE drawpie
  37760. lparameters toPen, tXOrRect,tnYOrStart,tnWOrSweep,tnH, nStart, nSweep
  37761. * Parameters either ( pen, x,y,w,h, start, sweep )
  37762. * or ( pen, rect, start, sweep )
  37763. #if GDIPLUS_CHECK_OBJECT
  37764. if This.gdipHandle==0
  37765.     error _GDIPLUS_NOGDIPOBJECT_LOC
  37766.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  37767.     return .F.
  37768. endif
  37769. #endif
  37770. #if GDIPLUS_CHECK_PARAMS
  37771. do case
  37772. case vartype(m.toPen)!='O'
  37773.     * Pen must be given (assume object is of correct type!)
  37774.     * Start and sweep angles are required
  37775.     error 11 && function argument
  37776.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  37777.     return .F.
  37778. case vartype(m.tXOrRect)='N' ;
  37779.     and vartype(m.tnYOrStart)+vartype(m.tnWOrSweep)+vartype(m.tnH)+vartype(nStart)+vartype(nSweep)=='NNNNN'
  37780.     * OK
  37781. case vartype(m.tXOrRect)='O' ;
  37782.     and vartype(m.tnYOrStart)+vartype(m.tnWOrSweep)+vartype(m.tnH)+vartype(nStart)+vartype(nSweep)=='NNLLL' ;
  37783.     and pemstatus(m.tXOrRect,'X',5) and pemstatus(m.tXOrRect,'W',5)
  37784.     * OK
  37785. otherwise    
  37786.     * Parameters do not pass the test
  37787.     error 11 && function argument
  37788.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  37789.     return .F.
  37790. endcase
  37791. #endif
  37792. declare integer GdipDrawPie in gdiplus.dll ;
  37793.     integer nGraphics, integer nPen ;
  37794.     , single x, single y, single w,single h ;
  37795.     ,single fStart, single fSweep
  37796. if vartype(m.tXOrRect)='O'
  37797.     This.gdipStatus = GdipDrawPie( This.gdipHandle, toPen.GetHandle() ;
  37798.     , m.tXOrRect.X,m.tXOrRect.Y, m.tXOrRect.W,m.tXOrRect.H ;
  37799.     , m.tnYOrStart,m.tnWOrSweep )
  37800.     This.gdipStatus = GdipDrawPie( This.gdipHandle, toPen.GetHandle() ;
  37801.     , m.tXOrRect,m.tnYOrStart, m.tnWOrSweep,m.tnH ;
  37802.     , m.nStart,m.nSweep )
  37803. endif
  37804. return GDIPLUS_STATUS_OK == This.gdipStatus
  37805. ENDPROC
  37806. PROCEDURE fillpie
  37807. lparameters toBrush, tXOrRect,tnYOrStart,tnWOrSweep,tnH, nStart, nSweep
  37808. * Parameters either ( brush, x,y,w,h, start, sweep )
  37809. * or ( brush, rect, start, sweep )
  37810. #if GDIPLUS_CHECK_OBJECT
  37811. if This.gdipHandle==0
  37812.     error _GDIPLUS_NOGDIPOBJECT_LOC
  37813.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  37814.     return .F.
  37815. endif
  37816. #endif
  37817. #if GDIPLUS_CHECK_PARAMS
  37818. do case
  37819. case vartype(m.toBrush)!='O'
  37820.     * Brush must be given (assume object is of correct type!)
  37821.     * Start and sweep angles are required
  37822.     error 11 && function argument
  37823.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  37824.     return .F.
  37825. case vartype(m.tXOrRect)='N' ;
  37826.     and vartype(m.tnYOrStart)+vartype(m.tnWOrSweep)+vartype(m.tnH)+vartype(nStart)+vartype(nSweep)=='NNNNN'
  37827.     * OK
  37828. case vartype(m.tXOrRect)='O' ;
  37829.     and vartype(m.tnYOrStart)+vartype(m.tnWOrSweep)+vartype(m.tnH)+vartype(nStart)+vartype(nSweep)=='NNLLL' ;
  37830.     and pemstatus(m.tXOrRect,'X',5) and pemstatus(m.tXOrRect,'W',5)
  37831.     * OK
  37832. otherwise    
  37833.     * Parameters do not pass the test
  37834.     error 11 && function argument
  37835.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  37836.     return .F.
  37837. endcase
  37838. #endif
  37839. declare integer GdipFillPie in gdiplus.dll ;
  37840.     integer nGraphics, integer nBrush ;
  37841.     , single x, single y, single w,single h ;
  37842.     ,single fStart, single fSweep
  37843. if vartype(m.tXOrRect)='O'
  37844.     This.gdipStatus = GdipFillPie( This.gdipHandle, toBrush.GetHandle() ;
  37845.     , m.tXOrRect.X,m.tXOrRect.Y, m.tXOrRect.W,m.tXOrRect.H ;
  37846.     , m.tnYOrStart,m.tnWOrSweep )
  37847.     This.gdipStatus = GdipFillPie( This.gdipHandle, toBrush.GetHandle() ;
  37848.     , m.tXOrRect,m.tnYOrStart, m.tnWOrSweep,m.tnH ;
  37849.     , m.nStart,m.nSweep )
  37850. endif
  37851. return GDIPLUS_STATUS_OK == This.gdipStatus
  37852. ENDPROC
  37853. PROCEDURE drawarc
  37854. lparameters toPen, x,y,nWidth,nHeight, nStartAngle, nSweepAngle
  37855. #if GDIPLUS_CHECK_OBJECT
  37856. if This.gdipHandle==0
  37857.     error _GDIPLUS_NOGDIPOBJECT_LOC
  37858.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  37859.     return .F.
  37860. endif
  37861. #endif
  37862. #if GDIPLUS_CHECK_PARAMS
  37863. if !(vartype(toPen)+vartype(x)+vartype(y)+vartype(nWidth)+vartype(nHeight)+vartype(nStartAngle)+vartype(nSweepAngle)=='ONNNNNN')
  37864.     error 11 && function argument
  37865.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  37866.     return .F.
  37867. endif
  37868. #endif
  37869. declare integer GdipDrawArc in gdiplus.dll ;
  37870.     integer nGraphics, integer nPen, single x, single y, single w,single h,single fStart, single fSweep
  37871. This.gdipStatus = GdipDrawArc( THis.gdipHandle, toPen.GetHandle(), m.x,m.y,m.nWidth,m.nHeight,m.nStartAngle,m.nSweepAngle)
  37872. return GDIPLUS_STATUS_OK == This.gdipStatus
  37873. ENDPROC
  37874. PROCEDURE drawbezier
  37875. lparameters toPen, x1,y1, x2,y2, x3,y3, x4,y4
  37876. #if GDIPLUS_CHECK_OBJECT
  37877. if This.gdipHandle==0
  37878.     error _GDIPLUS_NOGDIPOBJECT_LOC
  37879.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  37880.     return .F.
  37881. endif
  37882. #endif
  37883. #if GDIPLUS_CHECK_PARAMS
  37884. if !(vartype(toPen)+vartype(x1)+vartype(y1)+vartype(x2)+vartype(y2)+vartype(x3)+vartype(y3)+vartype(x4)+vartype(y4)=='ONNNNNNNN')
  37885.     error 11 && function argument
  37886.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  37887.     return .F.
  37888. endif
  37889. #endif
  37890. declare integer GdipDrawBezier in gdiplus.dll ;
  37891.     integer nGraphics, integer nPen, single,single,single,single,single,single,single,single
  37892. This.gdipStatus = GdipDrawBezier( This.gdipHandle, toPen.GetHandle() ;
  37893.     , m.x1,m.y1, m.x2,m.y2, m.x3,m.y3, m.x4,m.y4 )
  37894. return GDIPLUS_STATUS_OK == This.gdipStatus
  37895. ENDPROC
  37896. PROCEDURE drawellipse
  37897. lparameters toPen, tXOrRect,tnY,tnW,tnH
  37898. * Parameters either ( pen, x,y,w,h )
  37899. * or ( pen, rect )
  37900. #if GDIPLUS_CHECK_OBJECT
  37901. if This.gdipHandle==0
  37902.     error _GDIPLUS_NOGDIPOBJECT_LOC
  37903.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  37904.     return .F.
  37905. endif
  37906. #endif
  37907. #if GDIPLUS_CHECK_PARAMS
  37908. do case
  37909. case vartype(m.toPen)!='O'
  37910.     * Pen must be given (assume object is of correct type!)
  37911.     error 11 && function argument
  37912.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  37913.     return .F.
  37914. case vartype(m.tXOrRect)='N' ;
  37915.     and vartype(m.tnY)+vartype(m.tnW)+vartype(m.tnH)=='NNN'
  37916.     * OK
  37917. case vartype(m.tXOrRect)='O' ;
  37918.     and vartype(m.tnY)+vartype(m.tnW)+vartype(m.tnH)=='LLL' ;
  37919.     and pemstatus(m.tXOrRect,'X',5) and pemstatus(m.tXOrRect,'W',5)
  37920.     * OK
  37921. otherwise    
  37922.     * Parameters do not pass the test
  37923.     error 11 && function argument
  37924.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  37925.     return .F.
  37926. endcase
  37927. #endif
  37928. declare Integer GdipDrawEllipse in gdiplus.dll ;
  37929.     integer nGraphics, integer nPen, single,single,single,single
  37930. if vartype(m.tXOrRect)='O'
  37931.     This.gdipStatus = GdipDrawEllipse( This.gdipHandle, toPen.GetHandle() ;
  37932.     , m.tXOrRect.X,m.tXOrRect.Y, m.tXOrRect.W,m.tXOrRect.H )
  37933.     This.gdipStatus = GdipDrawEllipse( This.gdipHandle, toPen.GetHandle() ;
  37934.     , m.tXOrRect,m.tnY, m.tnW,m.tnH )
  37935. endif
  37936. return GDIPLUS_STATUS_OK == This.gdipStatus
  37937. ENDPROC
  37938. PROCEDURE fillrectangle
  37939. lparameters toBrush, tXOrRect,tnY,tnW,tnH
  37940. * Parameters either ( brush, x,y,w,h )
  37941. * or ( brush, rect )
  37942. #if GDIPLUS_CHECK_OBJECT
  37943. if This.gdipHandle==0
  37944.     error _GDIPLUS_NOGDIPOBJECT_LOC
  37945.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  37946.     return .F.
  37947. endif
  37948. #endif
  37949. #if GDIPLUS_CHECK_PARAMS
  37950. do case
  37951. case vartype(m.toBrush)!='O'
  37952.     * Brush must be given (assume object is of correct type!)
  37953.     error 11 && function argument
  37954.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  37955.     return .F.
  37956. case vartype(m.tXOrRect)='N' ;
  37957.     and vartype(m.tnY)+vartype(m.tnW)+vartype(m.tnH)=='NNN'
  37958.     * OK
  37959. case vartype(m.tXOrRect)='O' ;
  37960.     and vartype(m.tnY)+vartype(m.tnW)+vartype(m.tnH)=='LLL' ;
  37961.     and pemstatus(m.tXOrRect,'X',5) and pemstatus(m.tXOrRect,'W',5)
  37962.     * OK
  37963. otherwise    
  37964.     * Parameters do not pass the test
  37965.     error 11 && function argument
  37966.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  37967.     return .F.
  37968. endcase
  37969. #endif
  37970. declare Integer GdipFillRectangle in gdiplus.dll ;
  37971.     integer nGraphics, integer nBrush, single,single,single,single
  37972. if vartype(m.tXOrRect)='O'
  37973.     This.gdipStatus = GdipFillRectangle( This.gdipHandle, toBrush.GetHandle() ;
  37974.     , m.tXOrRect.X,m.tXOrRect.Y, m.tXOrRect.W,m.tXOrRect.H )
  37975.     This.gdipStatus = GdipFillRectangle( This.gdipHandle, toBrush.GetHandle() ;
  37976.     , m.tXOrRect,m.tnY, m.tnW,m.tnH )
  37977. endif
  37978. return GDIPLUS_STATUS_OK == This.gdipStatus
  37979. ENDPROC
  37980. PROCEDURE fillellipse
  37981. lparameters toBrush, tXOrRect,tnY,tnW,tnH
  37982. * Parameters either ( brush, x,y,w,h )
  37983. * or ( brush, rect )
  37984. #if GDIPLUS_CHECK_OBJECT
  37985. if This.gdipHandle==0
  37986.     error _GDIPLUS_NOGDIPOBJECT_LOC
  37987.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  37988.     return .F.
  37989. endif
  37990. #endif
  37991. #if GDIPLUS_CHECK_PARAMS
  37992. do case
  37993. case vartype(m.toBrush)!='O'
  37994.     * Brush must be given (assume object is of correct type!)
  37995.     error 11 && function argument
  37996.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  37997.     return .F.
  37998. case vartype(m.tXOrRect)='N' ;
  37999.     and vartype(m.tnY)+vartype(m.tnW)+vartype(m.tnH)=='NNN'
  38000.     * OK
  38001. case vartype(m.tXOrRect)='O' ;
  38002.     and vartype(m.tnY)+vartype(m.tnW)+vartype(m.tnH)=='LLL' ;
  38003.     and pemstatus(m.tXOrRect,'X',5) and pemstatus(m.tXOrRect,'W',5)
  38004.     * OK
  38005. otherwise    
  38006.     * Parameters do not pass the test
  38007.     error 11 && function argument
  38008.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  38009.     return .F.
  38010. endcase
  38011. #endif
  38012. declare Integer GdipFillEllipse in gdiplus.dll ;
  38013.     integer nGraphics, integer nBrush, single,single,single,single
  38014. if vartype(m.tXOrRect)='O'
  38015.     This.gdipStatus = GdipFillEllipse( This.gdipHandle, toBrush.GetHandle() ;
  38016.     , m.tXOrRect.X,m.tXOrRect.Y, m.tXOrRect.W,m.tXOrRect.H )
  38017.     This.gdipStatus = GdipFillEllipse( This.gdipHandle, toBrush.GetHandle() ;
  38018.     , m.tXOrRect,m.tnY, m.tnW,m.tnH )
  38019. endif
  38020. return GDIPLUS_STATUS_OK == This.gdipStatus
  38021. ENDPROC
  38022. PROCEDURE flush
  38023. lparameters tnFlushIntention
  38024. #if GDIPLUS_CHECK_OBJECT
  38025. if This.gdipHandle==0
  38026.     error _GDIPLUS_NOGDIPOBJECT_LOC
  38027.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  38028.     return .F.
  38029. endif
  38030. #endif
  38031. #if GDIPLUS_CHECK_PARAMS
  38032. if !(vartype(m.tnFlushIntention)='N')
  38033.     error 11 && function argument
  38034.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  38035.     return .F.
  38036. endif
  38037. #endif
  38038. declare integer GdipFlush in gdiplus.dll ;
  38039.     integer nGraphics, integer nFlushIntention
  38040. This.gdipStatus = GdipFlush(This.gdipHandle,m.tnFlushIntention)
  38041. return GDIPLUS_STATUS_OK == This.gdipStatus
  38042. ENDPROC
  38043. PROCEDURE createfromhdc
  38044. lparameters hDC
  38045. #if GDIPLUS_CHECK_PARAMS
  38046. if !(vartype(hDC)=='N')
  38047.     error 11 && function argument
  38048.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  38049.     return .F.
  38050. endif
  38051. #endif
  38052. This.Destroy()
  38053. declare integer GdipCreateFromHDC in gdiplus.dll ;
  38054.     integer hdc, integer @ nGraphics
  38055. local nHandle
  38056. nHandle = 0
  38057. This.gdipStatus = GdipCreateFromHDC ( m.hDC, @nHandle )
  38058. if GDIPLUS_STATUS_OK == This.gdipStatus
  38059.     This.SetHandle( m.nHandle,.T.)
  38060.     return .T.
  38061.     return .F.
  38062. endif
  38063. ENDPROC
  38064. PROCEDURE createfromhwnd
  38065. lparameters hWND, tlICM as Logical
  38066. #if GDIPLUS_CHECK_PARAMS
  38067. if !(vartype(hWND)=='N' and vartype(m.tlICM)='L')
  38068.     error 11 && function argument
  38069.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  38070.     return .F.
  38071. endif
  38072. #endif
  38073. This.Destroy()
  38074. local nHandle
  38075. nHandle = 0
  38076. if m.tlICM
  38077.     declare integer GdipCreateFromHWNDICM in gdiplus.dll ;
  38078.         integer hwnd, integer @ nGraphics
  38079.     This.gdipStatus = GdipCreateFromHWNDICM( m.hWND, @nHandle )
  38080.     declare integer GdipCreateFromHWND in gdiplus.dll ;
  38081.         integer hwnd, integer @ nGraphics
  38082.     This.gdipStatus = GdipCreateFromHWND( m.hWND, @nHandle )
  38083. endif
  38084. if GDIPLUS_STATUS_OK == This.gdipStatus
  38085.     This.SetHandle(m.nHandle,.T.)
  38086.     return .T.
  38087.     return .F.
  38088. endif
  38089. ENDPROC
  38090. PROCEDURE compositingmode_access
  38091. #if GDIPLUS_CHECK_OBJECT
  38092. if This.gdipHandle==0
  38093.     error _GDIPLUS_NOGDIPOBJECT_LOC
  38094.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  38095.     return cast(null as I)
  38096. endif
  38097. #endif
  38098. declare integer GdipGetCompositingMode in gdiplus.dll ;
  38099.     integer nGraphics, integer @
  38100. local nMode
  38101. nMode = 0 
  38102. This.gdipStatus = GdipGetCompositingMode( This.gdipHandle, @nMode)
  38103. return iif(This.gdipStatus==GDIPLUS_STATUS_OK,m.nMode,cast(null as I))
  38104. ENDPROC
  38105. PROCEDURE compositingmode_assign
  38106. LPARAMETERS tnMode
  38107. #if GDIPLUS_CHECK_OBJECT
  38108. if This.gdipHandle==0
  38109.     error _GDIPLUS_NOGDIPOBJECT_LOC
  38110.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  38111.     return .F.
  38112. endif
  38113. #endif
  38114. #if GDIPLUS_CHECK_PARAMS
  38115. if !(vartype(m.tnMode)='N')
  38116.     error 11 && function argument
  38117.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  38118.     return .F.
  38119. endif
  38120. #endif
  38121. declare integer GdipSetCompositingMode in gdiplus.dll ;
  38122.     integer nGraphics, integer
  38123. This.gdipStatus = GdipSetCompositingMode( This.gdipHandle,m.tnMode)
  38124. return GDIPLUS_STATUS_OK == This.gdipStatus
  38125. ENDPROC
  38126. PROCEDURE compositingquality_access
  38127. #if GDIPLUS_CHECK_OBJECT
  38128. if This.gdipHandle==0
  38129.     error _GDIPLUS_NOGDIPOBJECT_LOC
  38130.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  38131.     return cast(null as I)
  38132. endif
  38133. #endif
  38134. declare integer GdipGetCompositingQuality in gdiplus.dll ;
  38135.     integer nGraphics, integer @
  38136. local nQuality
  38137. nQuality = 0
  38138. This.gdipStatus = GdipGetCompositingQuality( This.gdipHandle, @nQuality)
  38139. return iif(This.gdipStatus==GDIPLUS_STATUS_OK,m.nQuality,cast(null as I))
  38140. ENDPROC
  38141. PROCEDURE compositingquality_assign
  38142. LPARAMETERS tnQuality
  38143. #if GDIPLUS_CHECK_OBJECT
  38144. if This.gdipHandle==0
  38145.     error _GDIPLUS_NOGDIPOBJECT_LOC
  38146.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  38147.     return .F.
  38148. endif
  38149. #endif
  38150. #if GDIPLUS_CHECK_PARAMS
  38151. if !(vartype(m.tnQuality)='N')
  38152.     error 11 && function argument
  38153.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  38154.     return .F.
  38155. endif
  38156. #endif
  38157. declare integer GdipSetCompositingQuality in gdiplus.dll ;
  38158.     integer nGraphics, integer
  38159. This.gdipStatus = GdipSetCompositingQuality( This.gdipHandle,m.tnQuality)
  38160. return GDIPLUS_STATUS_OK == This.gdipStatus
  38161. ENDPROC
  38162. PROCEDURE interpolationmode_access
  38163. #if GDIPLUS_CHECK_OBJECT
  38164. if This.gdipHandle==0
  38165.     error _GDIPLUS_NOGDIPOBJECT_LOC
  38166.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  38167.     return cast(null as I)
  38168. endif
  38169. #endif
  38170. declare integer GdipGetInterpolationMode in gdiplus.dll ;
  38171.     integer nGraphics, integer @
  38172. local nMode
  38173. nMode = 0
  38174. This.gdipStatus = GdipGetInterpolationMode ( This.gdipHandle, @nMode)
  38175. return iif(This.gdipStatus==GDIPLUS_STATUS_OK,m.nMode,cast(null as I))
  38176. ENDPROC
  38177. PROCEDURE interpolationmode_assign
  38178. LPARAMETERS tnInterpMode
  38179. #if GDIPLUS_CHECK_OBJECT
  38180. if This.gdipHandle==0
  38181.     error _GDIPLUS_NOGDIPOBJECT_LOC
  38182.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  38183.     return .F.
  38184. endif
  38185. #endif
  38186. #if GDIPLUS_CHECK_PARAMS
  38187. if !(vartype(m.tnInterpMode)='N')
  38188.     error 11 && function argument
  38189.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  38190.     return .F.
  38191. endif
  38192. #endif
  38193. declare integer GdipSetInterpolationMode in gdiplus.dll ;
  38194.     integer nGraphics, integer
  38195. This.gdipStatus = GdipSetInterpolationMode ( This.gdipHandle,m.tnInterpMode)
  38196. return GDIPLUS_STATUS_OK == This.gdipStatus
  38197. ENDPROC
  38198. PROCEDURE pagescale_access
  38199. #if GDIPLUS_CHECK_OBJECT
  38200. if This.gdipHandle==0
  38201.     error _GDIPLUS_NOGDIPOBJECT_LOC
  38202.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  38203.     return cast(null as B)
  38204. endif
  38205. #endif
  38206. declare integer GdipGetPageScale in gdiplus.dll ;
  38207.     integer nGraphics, single @
  38208. local nPageScale
  38209. nPageScale = 0.0
  38210. This.gdipStatus = GdipGetPageScale( This.gdipHandle, @nPageScale)
  38211. return iif(This.gdipStatus==GDIPLUS_STATUS_OK,m.nPageScale,cast(null as B))
  38212. ENDPROC
  38213. PROCEDURE pagescale_assign
  38214. LPARAMETERS tnScale
  38215. #if GDIPLUS_CHECK_OBJECT
  38216. if This.gdipHandle==0
  38217.     error _GDIPLUS_NOGDIPOBJECT_LOC
  38218.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  38219.     return .F.
  38220. endif
  38221. #endif
  38222. #if GDIPLUS_CHECK_PARAMS
  38223. if !(vartype(m.tnScale)='N')
  38224.     error 11 && function argument
  38225.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  38226.     return .F.
  38227. endif
  38228. #endif
  38229. declare integer GdipSetPageScale in gdiplus.dll ;
  38230.     integer nGraphics, single
  38231. This.gdipStatus = GdipSetPageScale( This.gdipHandle,m.tnScale)
  38232. return GDIPLUS_STATUS_OK == This.gdipStatus
  38233. ENDPROC
  38234. PROCEDURE smoothingmode_access
  38235. #if GDIPLUS_CHECK_OBJECT
  38236. if This.gdipHandle==0
  38237.     error _GDIPLUS_NOGDIPOBJECT_LOC
  38238.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  38239.     return cast(null as I)
  38240. endif
  38241. #endif
  38242. declare integer GdipGetSmoothingMode in gdiplus.dll ;
  38243.     integer nGraphics, integer @
  38244. local nSmoothingMode
  38245. nSmoothingMode = 0
  38246. This.gdipStatus = GdipGetSmoothingMode( This.gdipHandle, @nSmoothingMode)
  38247. return iif(This.gdipStatus==GDIPLUS_STATUS_OK,m.nSmoothingMode,cast(null as I))
  38248. ENDPROC
  38249. PROCEDURE smoothingmode_assign
  38250. LPARAMETERS tnMode
  38251. #if GDIPLUS_CHECK_OBJECT
  38252. if This.gdipHandle==0
  38253.     error _GDIPLUS_NOGDIPOBJECT_LOC
  38254.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  38255.     return .F.
  38256. endif
  38257. #endif
  38258. #if GDIPLUS_CHECK_PARAMS
  38259. if !(vartype(m.tnMode)='N')
  38260.     error 11 && function argument
  38261.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  38262.     return .F.
  38263. endif
  38264. #endif
  38265. declare integer GdipSetSmoothingMode in gdiplus.dll ;
  38266.     integer nGraphics, integer
  38267. This.gdipStatus = GdipSetSmoothingMode( This.gdipHandle,m.tnMode)
  38268. return GDIPLUS_STATUS_OK == This.gdipStatus
  38269. ENDPROC
  38270. PROCEDURE pixeloffsetmode_access
  38271. #if GDIPLUS_CHECK_OBJECT
  38272. if This.gdipHandle==0
  38273.     error _GDIPLUS_NOGDIPOBJECT_LOC
  38274.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  38275.     return cast(null as I)
  38276. endif
  38277. #endif
  38278. declare integer GdipGetPixelOffsetMode in gdiplus.dll ;
  38279.     integer nGraphics, integer @
  38280. local nMode
  38281. nMode = 0
  38282. This.gdipStatus = GdipGetPixelOffsetMode( This.gdipHandle, @nMode)
  38283. return iif(This.gdipStatus==GDIPLUS_STATUS_OK,m.nMode,cast(null as I))
  38284. ENDPROC
  38285. PROCEDURE pixeloffsetmode_assign
  38286. LPARAMETERS tnMode
  38287. #if GDIPLUS_CHECK_OBJECT
  38288. if This.gdipHandle==0
  38289.     error _GDIPLUS_NOGDIPOBJECT_LOC
  38290.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  38291.     return .F.
  38292. endif
  38293. #endif
  38294. #if GDIPLUS_CHECK_PARAMS
  38295. if !(vartype(m.tnMode)='N')
  38296.     error 11 && function argument
  38297.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  38298.     return .F.
  38299. endif
  38300. #endif
  38301. declare integer GdipSetPixelOffsetMode in gdiplus.dll ;
  38302.     integer nGraphics, integer
  38303. This.gdipStatus = GdipSetPixelOffsetMode ( This.gdipHandle,m.tnMode)
  38304. return GDIPLUS_STATUS_OK == This.gdipStatus
  38305. ENDPROC
  38306. PROCEDURE clipbounds_access
  38307. #if GDIPLUS_CHECK_OBJECT
  38308. if This.gdipHandle==0
  38309.     error _GDIPLUS_NOGDIPOBJECT_LOC
  38310.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  38311.     return null
  38312. endif
  38313. #endif
  38314. declare integer GdipGetClipBounds in gdiplus.dll ;
  38315.     integer nGraphics, string @ pRectF
  38316. local lcRectF, loRect
  38317. lcRectF = replicate(chr(0),16)
  38318. This.gdipStatus = GdipGetClipBounds ( This.gdipHandle, @lcRectF )
  38319. if This.gdipStatus==GDIPLUS_STATUS_OK and len(m.lcRectF)==16
  38320.     return This.ObjFactory('gpgraphics.clipbounds_access',GDIPLUS_CLASS_RECT,@lcRectF)
  38321.     return null
  38322. endif
  38323. ENDPROC
  38324. PROCEDURE clipbounds_assign
  38325. LPARAMETERS vNewVal
  38326. error 1743, 'ClipBounds'
  38327. ENDPROC
  38328. PROCEDURE pageunit_access
  38329. #if GDIPLUS_CHECK_OBJECT
  38330. if This.gdipHandle==0
  38331.     error _GDIPLUS_NOGDIPOBJECT_LOC
  38332.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  38333.     return cast(null as I)
  38334. endif
  38335. #endif
  38336. declare integer GdipGetPageUnit in gdiplus.dll ;
  38337.     integer nGraphics, integer @
  38338. local nUnit
  38339. nUnit = 0 
  38340. This.gdipStatus = GdipGetPageUnit( This.gdipHandle, @nUnit)
  38341. return iif(This.gdipStatus==GDIPLUS_STATUS_OK,m.nUnit,cast(null as I))
  38342. ENDPROC
  38343. PROCEDURE pageunit_assign
  38344. LPARAMETERS tnUnit
  38345. #if GDIPLUS_CHECK_OBJECT
  38346. if This.gdipHandle==0
  38347.     error _GDIPLUS_NOGDIPOBJECT_LOC
  38348.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  38349.     return .F.
  38350. endif
  38351. #endif
  38352. #if GDIPLUS_CHECK_PARAMS
  38353. if !(vartype(m.tnUnit)='N')
  38354.     error 11 && function argument
  38355.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  38356.     return .F.
  38357. endif
  38358. #endif
  38359. declare integer GdipSetPageUnit in gdiplus.dll ;
  38360.     integer nGraphics, integer
  38361. This.gdipStatus = GdipSetPageUnit( This.gdipHandle,m.tnUnit)
  38362. return GDIPLUS_STATUS_OK == This.gdipStatus
  38363. ENDPROC
  38364. PROCEDURE visibleclipbounds_access
  38365. #if GDIPLUS_CHECK_OBJECT
  38366. if This.gdipHandle==0
  38367.     error _GDIPLUS_NOGDIPOBJECT_LOC
  38368.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  38369.     return null
  38370. endif
  38371. #endif
  38372. declare integer GdipGetVisibleClipBounds in gdiplus.dll ;
  38373.     integer nGraphics, string @ pRectF
  38374. local lcRectF, loRect
  38375. lcRectF = replicate(chr(0),16)
  38376. This.gdipStatus = GdipGetVisibleClipBounds( This.gdipHandle, @lcRectF )
  38377. if This.gdipStatus==GDIPLUS_STATUS_OK and len(m.lcRectF)==16
  38378.     return This.ObjFactory('gpgraphics.visibleclipbounds_access',GDIPLUS_CLASS_RECT,@lcRectF)
  38379.     return null
  38380. endif
  38381. ENDPROC
  38382. PROCEDURE visibleclipbounds_assign
  38383. LPARAMETERS vNewVal
  38384. error 1743, 'VisibleClipBounds'
  38385. ENDPROC
  38386. PROCEDURE measurestringa
  38387. lparameters tcAnsiString, toFont, tvLayoutArea, toStringFormat, rnCharsFitted, rnLinesFilled
  38388. #if GDIPLUS_CHECK_OBJECT
  38389. if This.gdipHandle==0
  38390.     error _GDIPLUS_NOGDIPOBJECT_LOC
  38391.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  38392.     return null
  38393. endif
  38394. #endif
  38395. #if GDIPLUS_CHECK_PARAMS
  38396. if !(vartype(m.tcAnsiString)='C' and vartype(m.toFont)$'OL' ;
  38397.     and vartype(m.toStringFormat)$'OL')
  38398.         error 11 && function argument
  38399.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  38400.     return null
  38401.     endif
  38402. #endif
  38403. local lcRectF    && layout rectangle
  38404. do case
  38405. case vartype(tvLayoutArea)$'CQ' && String or varbinary
  38406.     do case
  38407.     case len(m.tvLayoutArea)==8 && sizeF
  38408.         lcRectF = replicate(chr(0),8)+m.tvLayoutArea
  38409.     case len(m.tvLayoutArea)==16 && rect
  38410.         lcRectF = cast(m.tvLayoutArea as C(16))
  38411.     otherwise
  38412.         * Empty
  38413.         lcRectF = replicate(chr(0),16)
  38414.     ENDCASE
  38415. case vartype(m.tvLayoutArea) == 'O'
  38416.     do case
  38417.     case pemstatus(m.tvLayoutArea,'gdipRectF',5)    && Rect
  38418.         lcRectF = tvLayoutArea.GdipRectF
  38419.     case pemstatus(m.tvLayoutArea,'GdipSizeF',5)    && Size
  38420.         lcRectF = replicate(chr(0),8)+tvLayoutArea.GdipSizeF
  38421.     otherwise
  38422.         error 11 && function argument
  38423.         This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  38424.         return null
  38425.     endcase
  38426. case vartype(m.tvLayoutArea) == 'N'    && Width only
  38427.     lcRectF = replicate(chr(0),8)+bintoc(m.tvLayoutArea,'F')+replicate(chr(0),4)
  38428. otherwise
  38429.     * Not given
  38430.     lcRectF = replicate(chr(0),16)
  38431. endcase
  38432. declare integer GdipMeasureString in gdiplus.dll ;
  38433.     integer nGraphics,string cUnicode,integer nLength ;
  38434.     ,integer nFont,string cLayoutRect,integer nStringFormat ;
  38435.     , string @cRectOut, integer @nChars, integer @nLines
  38436. local lcBoundingBox as String, lnCharsFitted as Integer, lnLinesFilled as Integer
  38437. lcBoundingBox = replicate(chr(0),16) && empty rectangle
  38438. lnCharsFitted = 0
  38439. lnLinesFilled = 0
  38440. This.gdipStatus = GdipMeasureString( ;
  38441.     This.gdipHandle ;
  38442.     , strconv(m.tcAnsiString,5)    ;
  38443.     , len(m.tcAnsiString) ;
  38444.     , iif(vartype(m.toFont)='O',toFont.GetHandle(),0) ;
  38445.     , m.lcRectF ;
  38446.     , iif(vartype(m.toStringFormat)='O',toStringFormat.GetHandle(),0) ;
  38447.     , @ lcBoundingBox ;
  38448.     , @lnCharsFitted, @lnLinesFilled ;
  38449. if GDIPLUS_STATUS_OK == This.gdipStatus
  38450.     * Return result
  38451.     rnCharsFitted = m.lnCharsFitted
  38452.     rnLinesFilled = m.lnLinesFilled
  38453.     * return size - the SECOND 8 bytes of the rectF structure
  38454.     return This.ObjFactory('gpgraphics.measurestring',GDIPLUS_CLASS_SIZE,substr(m.lcBoundingBox,9))
  38455.     return null    && Failed
  38456. endif
  38457. ENDPROC
  38458. PROCEDURE measurestringw
  38459. lparameters tcUnicodeString, toFont, tvLayoutArea, toStringFormat, rnCharsFitted, rnLinesFilled
  38460. #if GDIPLUS_CHECK_OBJECT
  38461. if This.gdipHandle==0
  38462.     error _GDIPLUS_NOGDIPOBJECT_LOC
  38463.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  38464.     return null
  38465. endif
  38466. #endif
  38467. #if GDIPLUS_CHECK_PARAMS
  38468. if !(vartype(m.tcUnicodeString)='C' and vartype(m.toFont)$'OL' ;
  38469.     and vartype(m.toStringFormat)$'OL')
  38470.         error 11 && function argument
  38471.         This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  38472.         return null
  38473.     endif
  38474. #endif
  38475. local lcRectF    && layout rectangle
  38476. do case
  38477. case vartype(tvLayoutArea)$'CQ' && String or varbinary
  38478.     do case
  38479.     case len(m.tvLayoutArea)==8 && sizeF
  38480.         lcRectF = replicate(chr(0),8)+m.tvLayoutArea
  38481.     case len(m.tvLayoutArea)==16 && rect
  38482.         lcRectF = cast(m.tvLayoutArea as C(16))
  38483.     otherwise
  38484.         * Empty
  38485.         lcRectF = replicate(chr(0),16)
  38486.     endcase
  38487. case vartype(m.tvLayoutArea) == 'O'
  38488.     * Assume GpSize object
  38489.     lcRectF = replicate(chr(0),8)+tvLayoutArea.GdipSizeF
  38490. case vartype(m.tvLayoutArea) == 'N'    && Width only
  38491.     lcRectF = replicate(chr(0),8)+bintoc(m.tvLayoutArea,'F')+replicate(chr(0),4)
  38492. otherwise
  38493.     * Not given
  38494.     lcRectF = replicate(chr(0),16)
  38495. endcase
  38496. declare integer GdipMeasureString in gdiplus.dll ;
  38497.     integer nGraphics,string cUnicode,integer nLength ;
  38498.     ,integer nFont,string cLayoutRect,integer nStringFormat ;
  38499.     , string @cRectOut, integer @nChars, integer @nLines
  38500. local lcBoundingBox as String, lnCharsFitted as Integer, lnLinesFilled as Integer
  38501. lcBoundingBox = replicate(chr(0),16) && empty rectangle
  38502. lnCharsFitted = 0
  38503. lnLinesFilled = 0
  38504. This.gdipStatus = GdipMeasureString( ;
  38505.     This.gdipHandle ;
  38506.     , m.tcUnicodeString ;
  38507.     , len(m.tcUnicodeString)/2 ;
  38508.     , iif(vartype(m.toFont)='O',toFont.GetHandle(),0) ;
  38509.     , m.lcRectF ;
  38510.     , iif(vartype(m.toStringFormat)='O',toStringFormat.GetHandle(),0) ;
  38511.     , @ lcBoundingBox ;
  38512.     , @lnCharsFitted, @lnLinesFilled ;
  38513. if GDIPLUS_STATUS_OK == This.gdipStatus
  38514.     * Return result
  38515.     rnCharsFitted = m.lnCharsFitted
  38516.     rnLinesFilled = m.lnLinesFilled
  38517.     * return size - the SECOND 8 bytes of the rectF structure
  38518.     return This.ObjFactory('gpgraphics.measurestring',GDIPLUS_CLASS_SIZE,substr(m.lcBoundingBox,9))
  38519.     return null    && Failed
  38520. endif
  38521. ENDPROC
  38522. PROCEDURE textrenderinghint_access
  38523. #if GDIPLUS_CHECK_OBJECT
  38524. if This.gdipHandle==0
  38525.     error _GDIPLUS_NOGDIPOBJECT_LOC
  38526.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  38527.     return cast(null as I)
  38528. endif
  38529. #endif
  38530. declare integer GdipGetTextRenderingHint in gdiplus.dll ;
  38531.     integer nGraphics, integer @
  38532. local nHint
  38533. nHint = 0 
  38534. This.gdipStatus = GdipGetTextRenderingHint( This.gdipHandle, @nHint)
  38535. return iif(This.gdipStatus==GDIPLUS_STATUS_OK,m.nHint,cast(null as I))
  38536. ENDPROC
  38537. PROCEDURE textrenderinghint_assign
  38538. LPARAMETERS tnValue
  38539. #if GDIPLUS_CHECK_OBJECT
  38540. if This.gdipHandle==0
  38541.     error _GDIPLUS_NOGDIPOBJECT_LOC
  38542.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  38543.     return .F.
  38544. endif
  38545. #endif
  38546. #if GDIPLUS_CHECK_PARAMS
  38547. if !(vartype(m.tnValue)='N')
  38548.     error 11 && function argument
  38549.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  38550.     return .F.
  38551. endif
  38552. #endif
  38553. declare integer GdipSetTextRenderingHint in gdiplus.dll ;
  38554.     integer nGraphics, integer
  38555. This.gdipStatus = GdipSetTextRenderingHint( This.gdipHandle,m.tnValue)
  38556. return GDIPLUS_STATUS_OK == This.gdipStatus
  38557. ENDPROC
  38558. PROCEDURE renderingorigin_access
  38559. #if GDIPLUS_CHECK_OBJECT
  38560. if This.gdipHandle==0
  38561.     error _GDIPLUS_NOGDIPOBJECT_LOC
  38562.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  38563.     return null
  38564. endif
  38565. #endif
  38566. declare integer GdipGetRenderingOrigin in gdiplus.dll ;
  38567.     integer nGraphics, integer @ x, integer @ y
  38568. local lnX, lnY
  38569. lnX = 0
  38570. lnY = 0
  38571. This.gdipStatus = GdipGetRenderingOrigin( This.gdipHandle, @lnX, @lnY )
  38572. if This.gdipStatus==GDIPLUS_STATUS_OK
  38573.     return This.ObjFactory('gpgraphics.renderingorigin_access',GDIPLUS_CLASS_POINT,m.lnX,m.lnY)
  38574.     return null
  38575. endif
  38576. ENDPROC
  38577. PROCEDURE renderingorigin_assign
  38578. LPARAMETERS toPoint
  38579. #if GDIPLUS_CHECK_OBJECT
  38580. if This.gdipHandle==0
  38581.     error _GDIPLUS_NOGDIPOBJECT_LOC
  38582.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  38583.     return .F.
  38584. endif
  38585. #endif
  38586. #if GDIPLUS_CHECK_PARAMS
  38587. if !(vartype(m.toPoint)='O' and pemstatus(toPoint,'X',5))
  38588.     error 11 && function argument
  38589.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  38590.     return .F.
  38591. endif
  38592. #endif
  38593. declare integer GdipSetRenderingOrigin in gdiplus.dll ;
  38594.     integer nGraphics, integer x, integer y
  38595. This.gdipStatus = GdipSetRenderingOrigin( This.gdipHandle,m.toPoint.X,m.toPoint.Y)
  38596. return GDIPLUS_STATUS_OK == This.gdipStatus
  38597. ENDPROC
  38598. PROCEDURE textcontrast_access
  38599. #if GDIPLUS_CHECK_OBJECT
  38600. if This.gdipHandle==0
  38601.     error _GDIPLUS_NOGDIPOBJECT_LOC
  38602.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  38603.     return cast(null as I)
  38604. endif
  38605. #endif
  38606. declare integer GdipGetTextContrast in gdiplus.dll ;
  38607.     integer nGraphics, integer @
  38608. local nValue
  38609. nValue = 0 
  38610. This.gdipStatus = GdipGetTextContrast( This.gdipHandle, @nValue)
  38611. return iif(This.gdipStatus==GDIPLUS_STATUS_OK,m.nValue,cast(null as I))
  38612. ENDPROC
  38613. PROCEDURE textcontrast_assign
  38614. LPARAMETERS tnValue
  38615. #if GDIPLUS_CHECK_OBJECT
  38616. if This.gdipHandle==0
  38617.     error _GDIPLUS_NOGDIPOBJECT_LOC
  38618.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  38619.     return .F.
  38620. endif
  38621. #endif
  38622. #if GDIPLUS_CHECK_PARAMS
  38623. if !(vartype(m.tnValue)='N')
  38624.     error 11 && function argument
  38625.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  38626.     return .F.
  38627. endif
  38628. #endif
  38629. declare integer GdipSetTextContrast in gdiplus.dll ;
  38630.     integer nGraphics, integer
  38631. This.gdipStatus = GdipSetTextContrast( This.gdipHandle,m.tnValue)
  38632. return GDIPLUS_STATUS_OK == This.gdipStatus
  38633. ENDPROC
  38634. PROCEDURE drawlines
  38635. lparameters toPen as GpPen, taPoints, tnFirstCol as integer
  38636. #if GDIPLUS_CHECK_OBJECT
  38637. if This.gdipHandle==0
  38638.     error _GDIPLUS_NOGDIPOBJECT_LOC
  38639.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  38640.     return .F.
  38641. endif
  38642. #endif
  38643. #if GDIPLUS_CHECK_PARAMS
  38644. if !(vartype(toPen)='O' and (vartype(taPoints)='C' or type("taPoints[1,1]")='N'))
  38645.     error 11 && function argument
  38646.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  38647.     return .F.
  38648. endif
  38649. #endif
  38650. local lcPoints
  38651. if vartype(taPoints)='C'
  38652.     lcPoints = m.taPoints
  38653.     lcPoints = This.MakeGdipArrayF( @taPoints, 2, m.tnFirstCol )
  38654. endif
  38655. declare integer GdipDrawLines in gdiplus.dll ;
  38656.     integer nGraphics, integer nPen, string cPoints, integer nCount
  38657. This.gdipStatus = GdipDrawLines( This.gdipHandle, toPen.GetHandle() ;
  38658.     , m.lcPoints, len(m.lcPoints)/8 )
  38659. return GDIPLUS_STATUS_OK == This.gdipStatus
  38660. ENDPROC
  38661. PROCEDURE drawlinesfromcursor
  38662. lparameters toPen as GpPen, tcAlias as String, tcExprX as String, tcExprY as String
  38663. #if GDIPLUS_CHECK_OBJECT
  38664. if This.gdipHandle==0
  38665.     error _GDIPLUS_NOGDIPOBJECT_LOC
  38666.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  38667.     return .F.
  38668. endif
  38669. #endif
  38670. #if GDIPLUS_CHECK_PARAMS
  38671. if !(vartype(toPen)='O')
  38672.     error 11 && function argument
  38673.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  38674.     return .F.
  38675. endif
  38676. #endif
  38677. local lcPoints
  38678. lcPoints = This.MakeGdipArrayFFromCursor( m.tcAlias, 2, m.tcExprX, m.tcExprY )
  38679. declare integer GdipDrawLines in gdiplus.dll ;
  38680.     integer nGraphics, integer nPen, string cPoints, integer nCount
  38681. This.gdipStatus = GdipDrawLines( This.gdipHandle, toPen.GetHandle() ;
  38682.     , m.lcPoints, len(m.lcPoints)/8 )
  38683. return GDIPLUS_STATUS_OK == This.gdipStatus
  38684. ENDPROC
  38685. PROCEDURE drawbeziers
  38686. lparameters toPen, taPoints, tnFirstCol
  38687. #if GDIPLUS_CHECK_OBJECT
  38688. if This.gdipHandle==0
  38689.     error _GDIPLUS_NOGDIPOBJECT_LOC
  38690.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  38691.     return .F.
  38692. endif
  38693. #endif
  38694. #if GDIPLUS_CHECK_PARAMS
  38695. if !(vartype(toPen)='O' and (vartype(taPoints)='C' or type("taPoints[1,1]")='N'))
  38696.     error 11 && function argument
  38697.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  38698.     return .F.
  38699. endif
  38700. #endif
  38701. local lcPoints
  38702. if vartype(taPoints)='C'
  38703.     lcPoints = m.taPoints
  38704.     lcPoints = This.MakeGdipArrayF( @taPoints, 2, m.tnFirstCol )
  38705. endif
  38706. declare integer GdipDrawBeziers in gdiplus.dll ;
  38707.     integer nGraphics, integer nPen, string cPoints, integer nCount
  38708. This.gdipStatus = GdipDrawBeziers( This.gdipHandle, toPen.GetHandle() ;
  38709.     , m.lcPoints, len(m.lcPoints)/8 )
  38710. return GDIPLUS_STATUS_OK == This.gdipStatus
  38711. ENDPROC
  38712. PROCEDURE drawclosedcurve
  38713. lparameters toPen, taPoints, tnFirstCol
  38714. #if GDIPLUS_CHECK_OBJECT
  38715. if This.gdipHandle==0
  38716.     error _GDIPLUS_NOGDIPOBJECT_LOC
  38717.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  38718.     return .F.
  38719. endif
  38720. #endif
  38721. #if GDIPLUS_CHECK_PARAMS
  38722. if !(vartype(toPen)='O' and (vartype(taPoints)='C' or type("taPoints[1,1]")='N'))
  38723.     error 11 && function argument
  38724.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  38725.     return .F.
  38726. endif
  38727. #endif
  38728. local lcPoints
  38729. if vartype(taPoints)='C'
  38730.     lcPoints = m.taPoints
  38731.     lcPoints = This.MakeGdipArrayF( @taPoints, 2, m.tnFirstCol )
  38732. endif
  38733. declare integer GdipDrawClosedCurve in gdiplus.dll ;
  38734.     integer nGraphics, integer nPen, string cPoints, integer nCount
  38735. This.gdipStatus = GdipDrawClosedCurve( This.gdipHandle, toPen.GetHandle() ;
  38736.     , m.lcPoints, len(m.lcPoints)/8 )
  38737. return GDIPLUS_STATUS_OK == This.gdipStatus
  38738. ENDPROC
  38739. PROCEDURE drawbeziersfromcursor
  38740. lparameters toPen, tcAlias, tcExprX, tcExprY
  38741. #if GDIPLUS_CHECK_OBJECT
  38742. if This.gdipHandle==0
  38743.     error _GDIPLUS_NOGDIPOBJECT_LOC
  38744.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  38745.     return .F.
  38746. endif
  38747. #endif
  38748. #if GDIPLUS_CHECK_PARAMS
  38749. if !(vartype(toPen)='O')
  38750.     error 11 && function argument
  38751.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  38752.     return .F.
  38753. endif
  38754. #endif
  38755. local lcPoints
  38756. lcPoints = This.MakeGdipArrayFFromCursor( m.tcAlias, 2, m.tcExprX, m.tcExprY )
  38757. declare integer GdipDrawBeziers in gdiplus.dll ;
  38758.     integer nGraphics, integer nPen, string cPoints, integer nCount
  38759. This.gdipStatus = GdipDrawBeziers( This.gdipHandle, toPen.GetHandle() ;
  38760.     , m.lcPoints, len(m.lcPoints)/8 )
  38761. return GDIPLUS_STATUS_OK == This.gdipStatus
  38762. ENDPROC
  38763. PROCEDURE drawclosedcurvefromcursor
  38764. lparameters toPen, tcAlias, tcExprX, tcExprY
  38765. #if GDIPLUS_CHECK_OBJECT
  38766. if This.gdipHandle==0
  38767.     error _GDIPLUS_NOGDIPOBJECT_LOC
  38768.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  38769.     return .F.
  38770. endif
  38771. #endif
  38772. #if GDIPLUS_CHECK_PARAMS
  38773. if !(vartype(toPen)='O')
  38774.     error 11 && function argument
  38775.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  38776.     return .F.
  38777. endif
  38778. #endif
  38779. local lcPoints
  38780. lcPoints = This.MakeGdipArrayFFromCursor( m.tcAlias, 2, m.tcExprX, m.tcExprY )
  38781. declare integer GdipDrawClosedCurve in gdiplus.dll ;
  38782.     integer nGraphics, integer nPen, string cPoints, integer nCount
  38783. This.gdipStatus = GdipDrawClosedCurve( This.gdipHandle, toPen.GetHandle() ;
  38784.     , m.lcPoints, len(m.lcPoints)/8 )
  38785. return GDIPLUS_STATUS_OK == This.gdipStatus
  38786. ENDPROC
  38787. PROCEDURE drawcurve
  38788. lparameters toPen, taPoints, tnFirstCol
  38789. #if GDIPLUS_CHECK_OBJECT
  38790. if This.gdipHandle==0
  38791.     error _GDIPLUS_NOGDIPOBJECT_LOC
  38792.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  38793.     return .F.
  38794. endif
  38795. #endif
  38796. #if GDIPLUS_CHECK_PARAMS
  38797. if !(vartype(toPen)='O' and (vartype(taPoints)='C' or type("taPoints[1,1]")='N'))
  38798.     error 11 && function argument
  38799.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  38800.     return .F.
  38801. endif
  38802. #endif
  38803. local lcPoints
  38804. if vartype(taPoints)='C'
  38805.     lcPoints = m.taPoints
  38806.     lcPoints = This.MakeGdipArrayF( @taPoints, 2, m.tnFirstCol )
  38807. endif
  38808. declare integer GdipDrawCurve in gdiplus.dll ;
  38809.     integer nGraphics, integer nPen, string cPoints, integer nCount
  38810. This.gdipStatus = GdipDrawCurve( This.gdipHandle, toPen.GetHandle() ;
  38811.     , m.lcPoints, len(m.lcPoints)/8 )
  38812. return GDIPLUS_STATUS_OK == This.gdipStatus
  38813. ENDPROC
  38814. PROCEDURE drawcurvefromcursor
  38815. lparameters toPen, tcAlias, tcExprX, tcExprY
  38816. #if GDIPLUS_CHECK_OBJECT
  38817. if This.gdipHandle==0
  38818.     error _GDIPLUS_NOGDIPOBJECT_LOC
  38819.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  38820.     return .F.
  38821. endif
  38822. #endif
  38823. #if GDIPLUS_CHECK_PARAMS
  38824. if !(vartype(toPen)='O')
  38825.     error 11 && function argument
  38826.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  38827.     return .F.
  38828. endif
  38829. #endif
  38830. local lcPoints
  38831. lcPoints = This.MakeGdipArrayFFromCursor( m.tcAlias, 2, m.tcExprX, m.tcExprY )
  38832. declare integer GdipDrawCurve in gdiplus.dll ;
  38833.     integer nGraphics, integer nPen, string cPoints, integer nCount
  38834. This.gdipStatus = GdipDrawCurve( This.gdipHandle, toPen.GetHandle() ;
  38835.     , m.lcPoints, len(m.lcPoints)/8 )
  38836. return GDIPLUS_STATUS_OK == This.gdipStatus
  38837. ENDPROC
  38838. PROCEDURE drawpolygon
  38839. lparameters toPen, taPoints, tnFirstCol
  38840. #if GDIPLUS_CHECK_OBJECT
  38841. if This.gdipHandle==0
  38842.     error _GDIPLUS_NOGDIPOBJECT_LOC
  38843.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  38844.     return .F.
  38845. endif
  38846. #endif
  38847. #if GDIPLUS_CHECK_PARAMS
  38848. if !(vartype(toPen)='O' and (vartype(taPoints)='C' or type("taPoints[1,1]")='N'))
  38849.     error 11 && function argument
  38850.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  38851.     return .F.
  38852. endif
  38853. #endif
  38854. local lcPoints
  38855. if vartype(taPoints)='C'
  38856.     lcPoints = m.taPoints
  38857.     lcPoints = This.MakeGdipArrayF( @taPoints, 2, m.tnFirstCol )
  38858. endif
  38859. declare integer GdipDrawPolygon in gdiplus.dll ;
  38860.     integer nGraphics, integer nPen, string cPoints, integer nCount
  38861. This.gdipStatus = GdipDrawPolygon( This.gdipHandle, toPen.GetHandle() ;
  38862.     , m.lcPoints, len(m.lcPoints)/8 )
  38863. return GDIPLUS_STATUS_OK == This.gdipStatus
  38864. ENDPROC
  38865. PROCEDURE drawpolygonfromcursor
  38866. lparameters toPen, tcAlias, tcExprX, tcExprY
  38867. #if GDIPLUS_CHECK_OBJECT
  38868. if This.gdipHandle==0
  38869.     error _GDIPLUS_NOGDIPOBJECT_LOC
  38870.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  38871.     return .F.
  38872. endif
  38873. #endif
  38874. #if GDIPLUS_CHECK_PARAMS
  38875. if !(vartype(toPen)='O')
  38876.     error 11 && function argument
  38877.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  38878.     return .F.
  38879. endif
  38880. #endif
  38881. local lcPoints
  38882. lcPoints = This.MakeGdipArrayFFromCursor( m.tcAlias, 2, m.tcExprX, m.tcExprY )
  38883. declare integer GdipDrawPolygon in gdiplus.dll ;
  38884.     integer nGraphics, integer nPen, string cPoints, integer nCount
  38885. This.gdipStatus = GdipDrawPolygon( This.gdipHandle, toPen.GetHandle() ;
  38886.     , m.lcPoints, len(m.lcPoints)/8 )
  38887. return GDIPLUS_STATUS_OK == This.gdipStatus
  38888. ENDPROC
  38889. PROCEDURE drawrectangles
  38890. lparameters toPen, taRects, tnFirstCol
  38891. #if GDIPLUS_CHECK_OBJECT
  38892. if This.gdipHandle==0
  38893.     error _GDIPLUS_NOGDIPOBJECT_LOC
  38894.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  38895.     return .F.
  38896. endif
  38897. #endif
  38898. #if GDIPLUS_CHECK_PARAMS
  38899. if !(vartype(toPen)='O' and (vartype(taRects)='C' or type("taRects[1,1]")='N'))
  38900.     error 11 && function argument
  38901.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  38902.     return .F.
  38903. endif
  38904. #endif
  38905. local lcRects
  38906. if vartype(taRects)='C'
  38907.     lcRects = m.taRects
  38908.     lcRects = This.MakeGdipArrayF( @taRects, 4, m.tnFirstCol )
  38909. endif
  38910. declare integer GdipDrawRectangles in gdiplus.dll ;
  38911.     integer nGraphics, integer nPen, string cRects, integer nCount
  38912. This.gdipStatus = GdipDrawRectangles( This.gdipHandle, toPen.GetHandle() ;
  38913.     , m.lcRects, len(m.lcRects)/16 )
  38914. return GDIPLUS_STATUS_OK == This.gdipStatus
  38915. ENDPROC
  38916. PROCEDURE drawrectanglesfromcursor
  38917. lparameters toPen, tcAlias, tcExprX, tcExprY, tcExprW, tcExprH
  38918. #if GDIPLUS_CHECK_OBJECT
  38919. if This.gdipHandle==0
  38920.     error _GDIPLUS_NOGDIPOBJECT_LOC
  38921.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  38922.     return .F.
  38923. endif
  38924. #endif
  38925. #if GDIPLUS_CHECK_PARAMS
  38926. if !(vartype(toPen)='O')
  38927.     error 11 && function argument
  38928.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  38929.     return .F.
  38930. endif
  38931. #endif
  38932. local lcRects
  38933. lcRects = This.MakeGdipArrayFFromCursor( m.tcAlias, 4, m.tcExprX, m.tcExprY, m.tcExprW, m.tcExprH )
  38934. declare integer GdipDrawRectangles in gdiplus.dll ;
  38935.     integer nGraphics, integer nPen, string cRects, integer nCount
  38936. This.gdipStatus = GdipDrawRectangles( This.gdipHandle, toPen.GetHandle() ;
  38937.     , m.lcRects, len(m.lcRects)/16 )
  38938. return GDIPLUS_STATUS_OK == This.gdipStatus
  38939. ENDPROC
  38940. PROCEDURE fillclosedcurve
  38941. lparameters toBrush, taPoints, tnFirstCol, tnFillMode
  38942. #if GDIPLUS_CHECK_OBJECT
  38943. if This.gdipHandle==0
  38944.     error _GDIPLUS_NOGDIPOBJECT_LOC
  38945.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  38946.     return .F.
  38947. endif
  38948. #endif
  38949. #if GDIPLUS_CHECK_PARAMS
  38950. if !(vartype(toBrush)='O' and vartype(m.tnFillMode)$'LN' and (vartype(taPoints)='C' or type("taPoints[1,1]")='N'))
  38951.     error 11 && function argument
  38952.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  38953.     return .F.
  38954. endif
  38955. #endif
  38956. local lcPoints
  38957. if vartype(taPoints)='C'
  38958.     lcPoints = m.taPoints
  38959.     lcPoints = This.MakeGdipArrayF( @taPoints, 2, m.tnFirstCol )
  38960. endif
  38961. declare integer GdipFillClosedCurve in gdiplus.dll ;
  38962.     integer nGraphics, integer nPen, string cPoints, integer nCount, integer nFillMode
  38963. This.gdipStatus = GdipFillClosedCurve( This.gdipHandle, toBrush.GetHandle() ;
  38964.     , m.lcPoints, len(m.lcPoints)/8,evl(m.tnFillMode,GDIPLUS_FillMode_Alternate) )
  38965. return GDIPLUS_STATUS_OK == This.gdipStatus
  38966. ENDPROC
  38967. PROCEDURE fillclosedcurvefromcursor
  38968. lparameters toBrush, tcAlias, tcExprX, tcExprY, tnFillMode
  38969. #if GDIPLUS_CHECK_OBJECT
  38970. if This.gdipHandle==0
  38971.     error _GDIPLUS_NOGDIPOBJECT_LOC
  38972.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  38973.     return .F.
  38974. endif
  38975. #endif
  38976. #if GDIPLUS_CHECK_PARAMS
  38977. if !(vartype(toBrush)='O' and vartype(m.tnFillMode)$'LN' )
  38978.     error 11 && function argument
  38979.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  38980.     return .F.
  38981. endif
  38982. #endif
  38983. local lcPoints
  38984. lcPoints = This.MakeGdipArrayFFromCursor( m.tcAlias, 2, m.tcExprX, m.tcExprY )
  38985. declare integer GdipFillClosedCurve in gdiplus.dll ;
  38986.     integer nGraphics, integer nBrush, string cPoints, integer nCount, integer nFillMode
  38987. This.gdipStatus = GdipFillClosedCurve( This.gdipHandle, toBrush.GetHandle() ;
  38988.     , m.lcPoints, len(m.lcPoints)/8,evl(m.tnFillMode,GDIPLUS_FillMode_Alternate) )
  38989. return GDIPLUS_STATUS_OK == This.gdipStatus
  38990. ENDPROC
  38991. PROCEDURE fillpolygonfromcursor
  38992. lparameters toBrush, tcAlias, tcExprX, tcExprY, tnFillMode
  38993. #if GDIPLUS_CHECK_OBJECT
  38994. if This.gdipHandle==0
  38995.     error _GDIPLUS_NOGDIPOBJECT_LOC
  38996.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  38997.     return .F.
  38998. endif
  38999. #endif
  39000. #if GDIPLUS_CHECK_PARAMS
  39001. if !(vartype(toBrush)='O' and vartype(m.tnFillMode)$'LN' )
  39002.     error 11 && function argument
  39003.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  39004.     return .F.
  39005. endif
  39006. #endif
  39007. local lcPoints
  39008. lcPoints = This.MakeGdipArrayFFromCursor( m.tcAlias, 2, m.tcExprX, m.tcExprY )
  39009. declare integer GdipFillPolygon in gdiplus.dll ;
  39010.     integer nGraphics, integer nBrush, string cPoints, integer nCount, integer nFillMode
  39011. This.gdipStatus = GdipFillPolygon( This.gdipHandle, toBrush.GetHandle() ;
  39012.     , m.lcPoints, len(m.lcPoints)/8,evl(m.tnFillMode,GDIPLUS_FillMode_Alternate) )
  39013. return GDIPLUS_STATUS_OK == This.gdipStatus
  39014. ENDPROC
  39015. PROCEDURE fillpolygon
  39016. lparameters toBrush, taPoints, tnFirstCol, tnFillMode
  39017. #if GDIPLUS_CHECK_OBJECT
  39018. if This.gdipHandle==0
  39019.     error _GDIPLUS_NOGDIPOBJECT_LOC
  39020.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  39021.     return .F.
  39022. endif
  39023. #endif
  39024. #if GDIPLUS_CHECK_PARAMS
  39025. if !(vartype(toBrush)='O' and vartype(m.tnFillMode)$'LN' and (vartype(taPoints)='C' or type("taPoints[1,1]")='N'))
  39026.     error 11 && function argument
  39027.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  39028.     return .F.
  39029. endif
  39030. #endif
  39031. local lcPoints
  39032. if vartype(taPoints)='C'
  39033.     lcPoints = m.taPoints
  39034.     lcPoints = This.MakeGdipArrayF( @taPoints, 2, m.tnFirstCol )
  39035. endif
  39036. declare integer GdipFillPolygon in gdiplus.dll ;
  39037.     integer nGraphics, integer nBrush, string cPoints, integer nCount, integer nFillMode
  39038. This.gdipStatus = GdipFillPolygon( This.gdipHandle, toBrush.GetHandle() ;
  39039.     , m.lcPoints, len(m.lcPoints)/8,evl(m.tnFillMode,GDIPLUS_FillMode_Alternate) )
  39040. return GDIPLUS_STATUS_OK == This.gdipStatus
  39041. ENDPROC
  39042. PROCEDURE fillrectangles
  39043. lparameters toBrush, taRects, tnFirstCol
  39044. #if GDIPLUS_CHECK_OBJECT
  39045. if This.gdipHandle==0
  39046.     error _GDIPLUS_NOGDIPOBJECT_LOC
  39047.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  39048.     return .F.
  39049. endif
  39050. #endif
  39051. #if GDIPLUS_CHECK_PARAMS
  39052. if !(vartype(toBrush)='O' and (vartype(taRects)='C' or type("taRects[1,1]")='N'))
  39053.     error 11 && function argument
  39054.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  39055.     return .F.
  39056. endif
  39057. #endif
  39058. local lcRects
  39059. if vartype(taRects)='C'
  39060.     lcRects = m.taRects
  39061.     lcRects = This.MakeGdipArrayF( @taRects, 4, m.tnFirstCol )
  39062. endif
  39063. declare integer GdipFillRectangles in gdiplus.dll ;
  39064.     integer nGraphics, integer nPen, string cRects, integer nCount
  39065. This.gdipStatus = GdipFillRectangles( This.gdipHandle, toBrush.GetHandle() ;
  39066.     , m.lcRects, len(m.lcRects)/16 )
  39067. return GDIPLUS_STATUS_OK == This.gdipStatus
  39068. ENDPROC
  39069. PROCEDURE fillrectanglesfromcursor
  39070. lparameters toBrush, tcAlias, tcExprX, tcExprY, tcExprW, tcExprH
  39071. #if GDIPLUS_CHECK_OBJECT
  39072. if This.gdipHandle==0
  39073.     error _GDIPLUS_NOGDIPOBJECT_LOC
  39074.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  39075.     return .F.
  39076. endif
  39077. #endif
  39078. #if GDIPLUS_CHECK_PARAMS
  39079. if !(vartype(toBrush)='O')
  39080.     error 11 && function argument
  39081.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  39082.     return .F.
  39083. endif
  39084. #endif
  39085. local lcRects
  39086. lcRects = This.MakeGdipArrayFFromCursor( m.tcAlias, 4, m.tcExprX, m.tcExprY, m.tcExprW, m.tcExprH )
  39087. declare integer GdipFillRectangles in gdiplus.dll ;
  39088.     integer nGraphics, integer nPen, string cRects, integer nCount
  39089. This.gdipStatus = GdipFillRectangles( This.gdipHandle, toBrush.GetHandle() ;
  39090.     , m.lcRects, len(m.lcRects)/16 )
  39091. return GDIPLUS_STATUS_OK == This.gdipStatus
  39092. ENDPROC
  39093. PROCEDURE clear
  39094. lparameters tvColor
  39095. #if GDIPLUS_CHECK_OBJECT
  39096. if This.gdipHandle==0
  39097.     error _GDIPLUS_NOGDIPOBJECT_LOC
  39098.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  39099.     return .F.
  39100. endif
  39101. #endif
  39102. #if GDIPLUS_CHECK_PARAMS
  39103. if !(vartype(m.tvColor)$'NO')
  39104.     error 11 && function argument
  39105.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  39106.     return .F.
  39107. endif
  39108. #endif
  39109. Declare Integer GdipGraphicsClear In GDIPlus.Dll ;
  39110.     integer nGraphics, integer nColor
  39111. This.gdipStatus = GdipGraphicsClear( ;
  39112.     This.gdipHandle ;
  39113.     , iif(vartype(m.tvColor)='O',m.tvColor.ARGB,m.tvColor) )
  39114. return GDIPLUS_STATUS_OK == This.gdipStatus
  39115. ENDPROC
  39116. PROCEDURE save
  39117. lparameters rnGraphicsState
  39118. #if GDIPLUS_CHECK_OBJECT
  39119. if This.gdipHandle==0
  39120.     error _GDIPLUS_NOGDIPOBJECT_LOC
  39121.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  39122.     return .F.
  39123. endif
  39124. #endif
  39125. local lnState
  39126. lnState = 0
  39127. declare integer GdipSaveGraphics in gdiplus.dll ;
  39128.     integer, integer @
  39129. This.gdipStatus = GdipSaveGraphics( This.gdipHandle, @lnState )
  39130. if GDIPLUS_STATUS_OK == This.gdipStatus
  39131.     rnGraphicsState = m.lnState
  39132.     return .T.
  39133.     return .F.
  39134. endif
  39135. ENDPROC
  39136. PROCEDURE restore
  39137. lparameters tnGraphicsState
  39138. #if GDIPLUS_CHECK_OBJECT
  39139. if This.gdipHandle==0
  39140.     error _GDIPLUS_NOGDIPOBJECT_LOC
  39141.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  39142.     return .F.
  39143. endif
  39144. #endif
  39145. #if GDIPLUS_CHECK_PARAMS
  39146. if !(vartype(m.tnGraphicsState)='N')
  39147.     error 11 && function argument
  39148.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  39149.     return .F.
  39150. endif
  39151. #endif
  39152. declare integer GdipRestoreGraphics in gdiplus.dll ;
  39153.     integer, integer
  39154. This.gdipStatus = GdipRestoreGraphics( This.gdipHandle, m.tnGraphicsState )
  39155. return GDIPLUS_STATUS_OK == This.gdipStatus
  39156. ENDPROC
  39157. PROCEDURE translatetransform
  39158. lparameters tnOffsetX, tnOffsetY, tnMatrixOrder
  39159. #if GDIPLUS_CHECK_OBJECT
  39160. if This.gdipHandle==0
  39161.     error _GDIPLUS_NOGDIPOBJECT_LOC
  39162.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  39163.     return .F.
  39164. endif
  39165. #endif
  39166. #if GDIPLUS_CHECK_PARAMS
  39167. if !(vartype(m.tnOffsetX)='N' and vartype(m.tnOffsetY)='N' and vartype(m.tnMatrixOrder)$'LN')
  39168.     error 11 && function argument
  39169.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  39170.     return .F.
  39171. endif
  39172. #endif
  39173. declare integer GdipTranslateWorldTransform in gdiplus.dll ;
  39174.     integer nGraphics, single nOffsetX, single nOffsetY, integer nMatrixOrder
  39175. This.gdipStatus = GdipTranslateWorldTransform( This.gdipHandle ;
  39176.     , m.tnOffsetX, m.tnOffsetY, evl(m.tnMatrixOrder,GDIPLUS_MatrixOrder_Prepend) )
  39177. return GDIPLUS_STATUS_OK == This.gdipStatus
  39178. ENDPROC
  39179. PROCEDURE rotatetransform
  39180. lparameters tnAngle, tnMatrixOrder
  39181. #if GDIPLUS_CHECK_OBJECT
  39182. if This.gdipHandle==0
  39183.     error _GDIPLUS_NOGDIPOBJECT_LOC
  39184.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  39185.     return .F.
  39186. endif
  39187. #endif
  39188. #if GDIPLUS_CHECK_PARAMS
  39189. if !(vartype(m.tnAngle)='N' and vartype(m.tnMatrixOrder)$'LN')
  39190.     error 11 && function argument
  39191.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  39192.     return .F.
  39193. endif
  39194. #endif
  39195. declare integer GdipRotateWorldTransform in gdiplus.dll ;
  39196.     integer nGraphics, single nAngle, integer nMatrixOrder
  39197. This.gdipStatus = GdipRotateWorldTransform( This.gdipHandle ;
  39198.     , m.tnAngle, evl(m.tnMatrixOrder,GDIPLUS_MatrixOrder_Prepend) )
  39199. return GDIPLUS_STATUS_OK == This.gdipStatus
  39200. ENDPROC
  39201. PROCEDURE scaletransform
  39202. lparameters tnScaleX, tnScaleY, tnMatrixOrder
  39203. #if GDIPLUS_CHECK_OBJECT
  39204. if This.gdipHandle==0
  39205.     error _GDIPLUS_NOGDIPOBJECT_LOC
  39206.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  39207.     return .F.
  39208. endif
  39209. #endif
  39210. #if GDIPLUS_CHECK_PARAMS
  39211. if !(vartype(m.tnScaleX)='N' and vartype(m.tnScaleY)='N' and vartype(m.tnMatrixOrder)$'LN')
  39212.     error 11 && function argument
  39213.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  39214.     return .F.
  39215. endif
  39216. #endif
  39217. declare integer GdipScaleWorldTransform in gdiplus.dll ;
  39218.     integer nGraphics, single nScaleX, single nScaleY, integer nMatrixOrder
  39219. This.gdipStatus = GdipScaleWorldTransform( This.gdipHandle ;
  39220.     , m.tnScaleX, m.tnScaleY, evl(m.tnMatrixOrder,GDIPLUS_MatrixOrder_Prepend) )
  39221. return GDIPLUS_STATUS_OK == This.gdipStatus
  39222. ENDPROC
  39223. PROCEDURE resettransform
  39224. #if GDIPLUS_CHECK_OBJECT
  39225. if This.gdipHandle==0
  39226.     error _GDIPLUS_NOGDIPOBJECT_LOC
  39227.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  39228.     return .F.
  39229. endif
  39230. #endif
  39231. declare integer GdipResetWorldTransform in gdiplus.dll ;
  39232.     integer nGraphics
  39233. This.gdipStatus = GdipResetWorldTransform( This.gdipHandle )
  39234. return GDIPLUS_STATUS_OK == This.gdipStatus
  39235. ENDPROC
  39236. PROCEDURE createfromimage
  39237. lparameters toImage
  39238. #if GDIPLUS_CHECK_PARAMS
  39239. if !(vartype(toImage)=='O')
  39240.     error 11 && function argument
  39241.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  39242.     return .F.
  39243. endif
  39244. #endif
  39245. This.Destroy()
  39246. declare integer GdipGetImageGraphicsContext in gdiplus.dll ;
  39247.     integer nImage, integer @ nGraphics
  39248. local nHandle
  39249. nHandle = 0
  39250. This.gdipStatus = GdipGetImageGraphicsContext ( toImage.GetHandle(), @nHandle )
  39251. if GDIPLUS_STATUS_OK == This.gdipStatus
  39252.     This.SetHandle(m.nHandle,.T.)
  39253.     return .T.
  39254.     return .F.
  39255. endif
  39256. ENDPROC
  39257. PROCEDURE drawimageat
  39258. lparameters toImage, destPtOrX,destY
  39259. #if GDIPLUS_CHECK_OBJECT
  39260. if This.gdipHandle==0
  39261.     error _GDIPLUS_NOGDIPOBJECT_LOC
  39262.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  39263.     return .F.
  39264. endif
  39265. #endif
  39266. #if GDIPLUS_CHECK_PARAMS
  39267. if !(vartype(m.toImage)='O')
  39268.     error 11 && function argument
  39269.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  39270.     return .F.
  39271. endif
  39272. #endif
  39273. local lnDestX, lnDestY as Number
  39274. do case
  39275. case vartype(m.destPtOrX)+vartype(m.destY)='NN'
  39276.     * passed separate coordinates
  39277.     lnDestX = m.destPtOrX
  39278.     lnDestY = m.destY
  39279. case vartype(m.destPtOrX)+vartype(m.destY)='OL' and pemstatus(m.destPtOrX,'X',5)
  39280.     * passed a point object (or a rect but we're ignoring width&height - this is unscaled)
  39281.     lnDestX = m.destPtOrX.X
  39282.     lnDestY = m.destPtOrX.Y
  39283. otherwise     
  39284.     error 11 && function argument
  39285.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  39286.     return .F.
  39287. endcase
  39288. declare Integer GdipDrawImage in gdiplus.dll ;
  39289.     integer nGraphics, integer nImage, single,single
  39290. This.gdipStatus = GdipDrawImage( This.gdipHandle, toImage.GetHandle() ;
  39291.     , m.lnDestX,m.lnDestY)
  39292. return GDIPLUS_STATUS_OK==This.gdipStatus
  39293. ENDPROC
  39294. PROCEDURE drawimagescaled
  39295. lparameters toImage as GpImage, destRectOrX,destY,destW,destH
  39296. #if GDIPLUS_CHECK_OBJECT
  39297. if This.gdipHandle==0
  39298.     error _GDIPLUS_NOGDIPOBJECT_LOC
  39299.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  39300.     return .F.
  39301. endif
  39302. #endif
  39303. #if GDIPLUS_CHECK_PARAMS
  39304. if !(vartype(m.toImage)='O')
  39305.     error 11 && function argument
  39306.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  39307.     return .F.
  39308. endif
  39309. #endif
  39310. local lnDestX, lnDestY, lnDestW, lnDestH as Number
  39311. do case
  39312. case vartype(m.destRectOrX)+vartype(m.destY)+vartype(m.destW)+vartype(m.destH)='NNNN'
  39313.     * passed separate coordinates
  39314.     lnDestX = m.destRectOrX
  39315.     lnDestY = m.destY
  39316.     lnDestW = m.destW
  39317.     lnDestH = m.destH
  39318. case vartype(m.destRectOrX)+vartype(m.destY)+vartype(m.destW)+vartype(m.destH)='OLLL' ;
  39319.     and pemstatus(m.destRectOrX,'X',5) and pemstatus(m.destRectOrX,'W',5)
  39320.     * passed a Rect object
  39321.     lnDestX = m.destRectOrX.X
  39322.     lnDestY = m.destRectOrX.Y
  39323.     lnDestW = m.destRectOrX.W
  39324.     lnDestH = m.destRectOrX.H
  39325. otherwise     
  39326.     error 11 && function argument
  39327.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  39328.     return .F.
  39329. endcase
  39330. declare Integer GdipDrawImageRect in gdiplus.dll ;
  39331.     integer nGraphics, integer nImage, single,single,single,single
  39332. This.gdipStatus = GdipDrawImageRect ( This.gdipHandle, toImage.GetHandle() ;
  39333.     , m.lnDestX,m.lnDestY, m.lnDestW,m.lnDestH )
  39334. return GDIPLUS_STATUS_OK==This.gdipStatus
  39335. ENDPROC
  39336. PROCEDURE drawimageportionat
  39337. lparameters toImage, destPoint,srcRect, srcUnit
  39338. #if GDIPLUS_CHECK_OBJECT
  39339. if This.gdipHandle==0
  39340.     error _GDIPLUS_NOGDIPOBJECT_LOC
  39341.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  39342.     return .F.
  39343. endif
  39344. #endif
  39345. #if GDIPLUS_CHECK_PARAMS
  39346. if !(vartype(m.toImage)+vartype(m.destPoint)+vartype(m.srcRect)+vartype(m.srcUnit)=='OOON' ;
  39347.     and pemstatus(m.destPoint,'X',5) ;
  39348.     and pemstatus(m.srcRect,'X',5) and pemstatus(m.srcRect,'W',5))
  39349.     error 11 && function argument
  39350.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  39351.     return .F.
  39352. endif
  39353. #endif
  39354. declare Integer GdipDrawImagePointRect in gdiplus.dll ;
  39355.     integer nGraphics, integer nImage ;
  39356.     , single,single ;
  39357.     , single,single,single,single ;
  39358.     , integer
  39359. This.gdipStatus = GdipDrawImagePointRect( This.gdipHandle, toImage.GetHandle() ;
  39360.     , m.destPoint.X,m.destPoint.Y ;
  39361.     , m.srcRect.X,m.srcRect.Y,m.srcRect.W,m.srcRect.H ;
  39362.     , m.srcUnit )
  39363. return GDIPLUS_STATUS_OK==This.gdipStatus
  39364. ENDPROC
  39365. PROCEDURE drawimageportionscaled
  39366. lparameters toImage, destRect,srcRect, srcUnit, imageAttribs
  39367. * This function allows an optional ImageAttributes object. Since this class
  39368. * isn't currently implemented in the FFC classes, allow an integer pointer
  39369. * to be passed in, so that the called can implement themselves
  39370. #if GDIPLUS_CHECK_OBJECT
  39371. if This.gdipHandle==0
  39372.     error _GDIPLUS_NOGDIPOBJECT_LOC
  39373.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  39374.     return .F.
  39375. endif
  39376. #endif
  39377. #if GDIPLUS_CHECK_PARAMS
  39378. if !(vartype(m.toImage)+vartype(m.destRect)+vartype(m.srcRect)+vartype(m.srcUnit)=='OOON' ;
  39379.     and vartype(m.imageAttribs)$'ONL' ;
  39380.     and pemstatus(m.destRect,'X',5) and pemstatus(m.destRect,'W',5) ;
  39381.     and pemstatus(m.srcRect,'X',5) and pemstatus(m.srcRect,'W',5))
  39382.     error 11 && function argument
  39383.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  39384.     return .F.
  39385. endif
  39386. #endif
  39387. declare Integer GdipDrawImageRectRect in gdiplus.dll ;
  39388.     integer nGraphics, integer nImage ;
  39389.     , single,single,single,single ;
  39390.     , single,single,single,single ;
  39391.     , integer nSrcUnit ;
  39392.     , integer nImgAttribs ;
  39393.     , integer nCallback, integer nCallbackData
  39394. This.gdipStatus = GdipDrawImageRectRect( This.gdipHandle, toImage.GetHandle() ;
  39395.     , m.destRect.X,m.destRect.Y,m.destRect.W,m.destRect.H ;
  39396.     , m.srcRect.X,m.srcRect.Y,m.srcRect.W,m.srcRect.H ;
  39397.     , m.srcUnit ;
  39398.     , icase(    vartype(m.imageAttribs)='O',m.imageAttribs.GetHandle() ;
  39399.                 ,vartype(m.imageAttribs)='N',m.imageAttributes ;
  39400.                 , 0 ) ;
  39401.     , 0, 0 )
  39402. return GDIPLUS_STATUS_OK==This.gdipStatus
  39403. ENDPROC
  39404. PROCEDURE releasehdc
  39405. lparameters tnHDC as integer
  39406. #if GDIPLUS_CHECK_OBJECT
  39407. if This.gdipHandle==0
  39408.     error _GDIPLUS_NOGDIPOBJECT_LOC
  39409.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  39410.     return .F.
  39411. endif
  39412. #endif
  39413. #if GDIPLUS_CHECK_PARAMS
  39414. if !(vartype(m.tnHDC)='N')
  39415.     error 11 && function argument
  39416.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  39417.     return .F.
  39418. endif
  39419. #endif
  39420. declare integer GdipReleaseDC in gdiplus.dll ;
  39421.     integer, integer
  39422. This.gdipStatus = GdipReleaseDC( This.gdipHandle, tnHDC )
  39423. return GDIPLUS_STATUS_OK == This.gdipStatus
  39424. ENDPROC
  39425. PROCEDURE gethdc
  39426. #if GDIPLUS_CHECK_OBJECT
  39427. if This.gdipHandle==0
  39428.     error _GDIPLUS_NOGDIPOBJECT_LOC
  39429.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  39430.     return cast(null as I)
  39431. endif
  39432. #endif
  39433. local lnHDC
  39434. lnHDC = 0
  39435. declare integer GdipGetDC in gdiplus.dll ;
  39436.     integer, integer @
  39437. This.gdipStatus = GdipGetDC( This.gdipHandle, @lnHDC )
  39438. if GDIPLUS_STATUS_OK == This.gdipStatus
  39439.     return m.lnHDC
  39440.     return cast(null as I)
  39441. endif
  39442. ENDPROC
  39443. PROCEDURE drawstringjust
  39444.     *************************************************************************************
  39445.     ** Method: xfcGraphics.DrawStringJustified
  39446.     ** Draws the specified text string at the specified location with the specified Brush
  39447.     ** and Font objects in a Full Justified format.
  39448.     ** History:
  39449.     **  2007/01/15: CChalom - Coded
  39450.     **  2007/02/02: CChalom - Tweaked to work with ReportListener
  39451.     **  2007/04/16: CChalom - Minor fixes for small sentences
  39452.     **  2008/06/22: CChalom - Added some tweaks to allow better drawing on reports
  39453.     **                        Added new flag - tlJustLast - that will forcely justify the last line
  39454.     *************************************************************************************
  39455.     DECLARE Long GdipSetTextRenderingHint IN GDIPLUS.DLL AS xfcGdipSetTextRenderingHint Long graphics, Long mode
  39456.     DECLARE Long GdipStringFormatGetGenericTypographic IN GDIPLUS.DLL AS xfcGdipStringFormatGetGenericTypographic Long @StringFormat
  39457.     DECLARE Long GdipCloneStringFormat IN GDIPLUS.DLL AS xfcGdipCloneStringFormat Long StringFormat, Long @newFormat
  39458.     DECLARE Long GdipCreateStringFormat IN GDIPLUS.DLL AS xfcGdipCreateStringFormat Integer formatAttributes, Integer language, Long @StringFormat
  39459.     DECLARE Long GdipDeleteStringFormat IN GDIPLUS.DLL AS xfcGdipDeleteStringFormat Long StringFormat
  39460.     DECLARE Long GdipSetStringFormatFlags IN GDIPLUS.DLL AS xfcGdipSetStringFormatFlags Long StringFormat, Long flags
  39461.     DECLARE Long GdipSetStringFormatAlign IN GDIPLUS.DLL AS xfcGdipSetStringFormatAlign Long StringFormat, Long Align
  39462.     DECLARE Long GdipMeasureString IN GDIPLUS.DLL AS xfcGdipMeasureString Long graphics, String str, Long length, Long thefont, String @layoutRect, Long StringFormat, String @boundingBox, Long @codepointsFitted, Long @linesFilled
  39463.     DECLARE Long GdipDrawString IN GDIPLUS.DLL AS xfcGdipDrawString Long graphics, String str, Long length, Long thefont, String @layoutRect, Long StringFormat, Long brush
  39464.     DECLARE Long GdipDeleteStringFormat IN GDIPLUS.DLL AS xfcGdipDeleteStringFormat Long StringFormat
  39465. #DEFINE StringFormatFlagsDirectionRightToLeft 1 
  39466. #DEFINE StringFormatFlagsDirectionVertical  2 
  39467. #DEFINE StringFormatFlagsNoFitBlackBox   4 
  39468. #DEFINE StringFormatFlagsDisplayFormatControl 32 
  39469. #DEFINE StringFormatFlagsNoFontFallback   1024 
  39470. #DEFINE StringFormatFlagsMeasureTrailingSpaces 2048 
  39471. #DEFINE StringFormatFlagsNoWrap     4096 
  39472. #DEFINE StringFormatFlagsLineLimit    8192 
  39473. #DEFINE StringFormatFlagsNoClip     16384 
  39474. #DEFINE StringAlignmentNear 0 
  39475. #DEFINE StringAlignmentCenter 1 
  39476. #DEFINE StringAlignmentFar  2 
  39477. #DEFINE EMPTY_FLOAT            0h00000000
  39478. #DEFINE EMPTY_LONG            0h00000000
  39479. #DEFINE EMPTY_SHORT            0h0000
  39480. #DEFINE EMPTY_RECTANGLE        EMPTY_LONG+EMPTY_LONG+EMPTY_LONG+EMPTY_LONG
  39481. #DEFINE EMPTY_RECTANGLEF    EMPTY_FLOAT+EMPTY_FLOAT+EMPTY_FLOAT+EMPTY_FLOAT
  39482. #DEFINE EMPTY_POINT            EMPTY_LONG+EMPTY_LONG
  39483. #DEFINE EMPTY_POINTF        EMPTY_FLOAT+EMPTY_FLOAT
  39484. #DEFINE EMPTY_SIZE            EMPTY_LONG+EMPTY_LONG
  39485. #DEFINE EMPTY_SIZEF            EMPTY_FLOAT+EMPTY_FLOAT
  39486. #DEFINE EMPTY_METAFILEHEADER  EMPTY_LONG+EMPTY_LONG+EMPTY_LONG+EMPTY_LONG+;
  39487.                                 EMPTY_FLOAT+EMPTY_FLOAT+;
  39488.                                 EMPTY_LONG+EMPTY_LONG+EMPTY_LONG+EMPTY_LONG+;
  39489.                                 EMPTY_LONG+EMPTY_LONG+EMPTY_LONG+EMPTY_LONG
  39490. #DEFINE EMPTY_ICONINFO        EMPTY_LONG+EMPTY_LONG+EMPTY_LONG+EMPTY_LONG+EMPTY_LONG
  39491. #DEFINE EMPTY_BITMAP        EMPTY_LONG+EMPTY_LONG+EMPTY_LONG+EMPTY_LONG+EMPTY_SHORT+EMPTY_SHORT+EMPTY_LONG
  39492.     DECLARE Long GdipSetTextRenderingHint IN GDIPLUS.DLL AS Foxy_GdipSetTextRenderingHint Long graphics, Long mode
  39493.     LPARAMETERS tcString, ;
  39494.                     toFont as GpFont of HOME() + "\ffc\_gdiplus.vcx", ;
  39495.                     toBrush as GpSolidBrush, ;
  39496.                     toRectangle as GpRectangle of HOME() + "\ffc\_gdiplus.vcx", ;
  39497.                     tlJustLast as Boolean 
  39498.         *!ToDo: Add more error trapping
  39499.         *!ToDo: Add new overloads
  39500.         LOCAL lhFont, lhGraphics, lhBrush, lcRectF
  39501.         LOCAL N, lnSpaceWidth, lnLineHeight, lcText
  39502.         LOCAL wImg, hImg, x0, y0
  39503.         LOCAL loGfxState AS xfcGraphicsState
  39504.         LOCAL lhTempStrFormat, lhStringFormat
  39505.         LOCAL lhLeftAlignHandle
  39506.         LOCAL lhRightAlignHandle
  39507.         LOCAL lnWords, lnWordWidth, lnChars, lcCurrWord, lcCutWord, lnReduce
  39508.         LOCAL llEndOfSentence, lnWordsWidth, lnWordsinLine, lnCurrWord, lnCurrLine, lnX, lnY
  39509.         LOCAL lnWidthofBetween, lnStringFormatHandle, llLast
  39510.         #DEFINE TextRenderingHintAntiAlias        4
  39511.         LOCAL loExc AS Exception
  39512.         TRY
  39513.             m.X0   = m.toRectangle.x 
  39514.             m.Y0   = m.toRectangle.y
  39515.             m.wImg = m.toRectangle.w
  39516.             m.hImg = m.toRectangle.h
  39517.             * Save the current state of the graphics handle
  39518. LOCAL lhGfxState
  39519. lhGfxState = 0        
  39520. This.Save(@lhGfxState)
  39521.             * m.loGfxState = This.Save()
  39522.             * Store Gdi+ handles for MeasureString and DrawString
  39523.             m.lhFont     = m.toFont.GetHandle()
  39524.             m.lhGraphics = This.GetHandle()
  39525.             m.lhBrush    = m.toBrush.GetHandle()
  39526.             * Obtain the Font Height to be used as Line Height
  39527.             m.lnLineHeight = FLOOR(m.toFont.GetHeight(This)) - 2
  39528.             * Adjust the Text String to ease detection of Carriage Returns
  39529.             m.lcText = STRTRAN(m.tcString,CHR(13)+CHR(10), " <CR> ")
  39530.             m.lcText = STRTRAN(m.lcText,CHR(13), " <CR> ")
  39531.             m.lcText = STRTRAN(m.lcText,CHR(10), " <CR> ")
  39532.             m.lcText = m.lcText + " <LASTWORD> "
  39533.             * Ensure Measure String will bring the best measures possible
  39534.             * Set to AntiAlias
  39535.             = xfcGdipSetTextRenderingHint(m.lhGraphics, TextRenderingHintAntiAlias)
  39536.             * Create a String Format object with the Generic Typographic TO obtain
  39537.             *   the most accurate String measurements
  39538.             * Strange, but the recommended for this case is to use a "cloned" StringFormat
  39539.             STORE 0 TO m.lhTempStrFormat, m.lhStringFormat
  39540.             = xfcGdipStringFormatGetGenericTypographic(@lhTempStrFormat)
  39541.             = xfcGdipCloneStringFormat(m.lhTempStrFormat, @lhStringFormat)
  39542.             * Delete the Temporary StringFormat object created
  39543.             = xfcGdipDeleteStringFormat(m.lhTempStrFormat)
  39544.             * Allow the correct measuring of Spaces
  39545.             = xfcGdipSetStringFormatFlags(m.lhStringFormat, StringFormatFlagsMeasureTrailingSpaces)
  39546.             * Create a StringFormat for LeftAlignment
  39547.             m.lhLeftAlignHandle = 0
  39548.             = xfcGdipCreateStringFormat(0, 0, @lhLeftAlignHandle)
  39549.             = xfcGdipSetStringFormatAlign(m.lhLeftAlignHandle, StringAlignmentNear)
  39550.             * Create a StringFormat for RightAlignment
  39551.             m.lhRightAlignHandle = 0
  39552.             = xfcGdipCreateStringFormat(0, 0, @lhRightAlignHandle)
  39553.             = xfcGdipSetStringFormatAlign(m.lhRightAlignHandle, StringAlignmentFar)
  39554.             * Measure Space for the given font
  39555.             STORE EMPTY_RECTANGLE TO m.lcRectF, pcBoundingBox
  39556.             = xfcGdipMeasureString( m.lhGraphics;
  39557.                 , STRCONV(" " + 0h00,5)    ;
  39558.                 , 1 ;
  39559.                 , m.lhFont ;
  39560.                 , m.lcRectF ;
  39561.                 , m.lhStringFormat ;
  39562.                 , @pcBoundingBox, 0, 0)
  39563.             m.lnSpaceWidth = CTOBIN(SUBSTR(pcBoundingBox, 9, 4), 'N') + 1
  39564.             m.lnWords = GETWORDCOUNT(m.lcText)
  39565.             DIMENSION laWords(lnWords,2)
  39566.             * Measure each word
  39567.             n = 1
  39568.             DO WHILE .T.
  39569.                 laWords(N,1) = GETWORDNUM(m.lcText, N)
  39570.                 m.lcCurrWord = laWords(N,1)
  39571.                 STORE EMPTY_RECTANGLE TO m.lcRectF, pcBoundingBox
  39572.                 = xfcGdipMeasureString(m.lhGraphics;
  39573.                     , STRCONV(m.lcCurrWord + 0h00,5)    ;
  39574.                     , LENC(m.lcCurrWord) ;
  39575.                     , m.lhFont ;
  39576.                     , m.lcRectF ;
  39577.                     , lhStringFormat ;
  39578.                     , @pcBoundingBox, 0, 0)
  39579.                 m.lnWordWidth = CTOBIN(SUBSTR(pcBoundingBox, 9, 4), 'N')
  39580.                 IF m.lnWordWidth > m.wImg AND (NOT INLIST(m.lcCurrWord, "<CR>", "<LASTWORD>"))
  39581.                     m.lnReduce = 1
  39582.                     DO WHILE .T.
  39583.                         m.lnChars = ROUND((LENC(m.lcCurrWord) / (m.lnWordWidth / m.wImg)),0) - m.lnReduce
  39584.                         m.lcCutWord = SUBSTR(m.lcCurrWord, 1, m.lnChars)
  39585.                         STORE EMPTY_RECTANGLE TO m.lcRectF, pcBoundingBox
  39586.                         = xfcGdipMeasureString(m.lhGraphics;
  39587.                             , STRCONV(m.lcCutWord + 0h00,5)    ;
  39588.                             , LENC(m.lcCutWord) ;
  39589.                             , m.lhFont ;
  39590.                             , m.lcRectF ;
  39591.                             , m.lhStringFormat ;
  39592.                             , @pcBoundingBox, 0, 0)
  39593.                         m.lnWordWidth = CTOBIN(SUBSTR(pcBoundingBox, 9, 4), 'N')
  39594.                         laWords(N,1) = m.lcCutWord
  39595.                         IF m.lnWordWidth <= m.wImg
  39596.                             m.lnWords = m.lnWords + 1
  39597.                             DIMENSION laWords(m.lnWords,2)
  39598.                             laWords(m.lnWords,1) = ""
  39599.                             laWords(m.lnWords,2) = 0
  39600.                             
  39601.                             m.lcText = STRTRAN(m.lcText, m.lcCurrWord, ;
  39602.                                 m.lcCutWord + SPACE(1) + SUBSTR(m.lcCurrWord, m.lnChars + 1), ;
  39603.                                 1, 1)
  39604.                             EXIT
  39605.                         ENDIF
  39606.                         m.lnReduce = m.lnReduce + 1    
  39607.                     ENDDO
  39608.                 ENDIF
  39609.                 laWords(N,2) = m.lnWordWidth
  39610.                 N = N + 1
  39611.                 IF N > m.lnWords
  39612.                     EXIT
  39613.                 ENDIF
  39614.             ENDDO
  39615.             * Before we start drawing, it's wise to restore our Graphics object to
  39616.             *    its original state.
  39617.             * Put back the state of the graphics handle
  39618.             * This.Restore(loGfxState)
  39619. This.Restore(lhGfxState)            
  39620.             * Start Drawing word by word
  39621.             m.lnCurrWord = 1
  39622.             m.lnCurrLine = 0
  39623.             LOCAL llLastLine
  39624.             m.llLastLine = .F.
  39625.             FOR m.N = 1 TO m.lnWords
  39626.                 llEndOfSentence   = .F.
  39627.                 m.lnWordsWidth  = 0
  39628.                 m.lnWordsinLine = 0
  39629.                 FOR m.z = m.N TO m.lnWords
  39630.                     lcChar = LOWER(laWords(z,1))
  39631.                     
  39632.                     IF m.laWords(z,1) = "<CR>"
  39633.                         m.llEndOfSentence = .T.
  39634.                         EXIT
  39635.                     ENDIF
  39636.                     
  39637.                     IF m.laWords(z,1) = "<LASTWORD>"
  39638.                         m.llLastLine = .T.
  39639.                         m.lnWordsWidth = m.lnWordsWidth - (m.lnSpaceWidth * m.lnWordsinLine) + m.lnSpaceWidth
  39640.                         EXIT
  39641.                     ENDIF 
  39642.                     m.lnWordsWidth = m.lnWordsWidth + m.laWords(z,2) + m.lnSpaceWidth
  39643.                     IF m.lnWordsWidth > m.wImg AND z > N
  39644.                         m.lnWordsWidth = m.lnWordsWidth - m.laWords(z,2) - (m.lnSpaceWidth * m.lnWordsinLine)
  39645.                         EXIT
  39646.                     ENDIF
  39647.                     m.lnWordsinLine = m.lnWordsinLine + 1
  39648.                 ENDFOR
  39649.                 m.lnWordsWidth = m.lnWordsWidth - m.lnSpaceWidth
  39650.                 IF m.z >= m.lnWords
  39651.                     m.llEndOfSentence = .T.
  39652.                     m.llLastLine = .T.
  39653.                 ENDIF
  39654.                 IF m.llLastLine
  39655.                     IF m.tlJustLast
  39656.                         m.lnWidthOfBetween = (m.wImg - m.lnWordsWidth - m.lnSpaceWidth) / (m.lnWordsinLine - 1)
  39657.                     ELSE 
  39658.                         m.lnWidthOfBetween = m.lnSpaceWidth
  39659.                     ENDIF 
  39660.                     
  39661.                 ELSE 
  39662.                     
  39663.                     IF m.llEndOfSentence
  39664.                         m.lnWidthOfBetween = m.lnSpaceWidth
  39665.                     ELSE
  39666.                         m.lnWidthOfBetween = (m.wImg - m.lnWordsWidth - m.lnSpaceWidth) / (m.lnWordsinLine - 1)
  39667.                     ENDIF
  39668.                             
  39669.                 ENDIF 
  39670.                 m.lnY = m.Y0 + (m.lnCurrLine * m.lnLineHeight)
  39671.                 IF m.lnY > (m.hImg + m.Y0 - lnLineHeight / 2)
  39672.                     m.n = m.lnWords
  39673.                     EXIT
  39674.                 ENDIF
  39675.                         
  39676.                 m.lnX = m.X0
  39677.                 FOR m.lnCurrWord = 1 TO m.lnWordsinLine
  39678.                     m.llLast = .F.
  39679.                     IF m.laWords(N,1) = "<CR>" && Ignore
  39680.                         m.N = m.N + 1
  39681.                         LOOP
  39682.                     ENDIF
  39683.                     
  39684.                     IF m.lnCurrWord = m.lnWordsinLine AND NOT m.llEndOfSentence
  39685.                         m.llLast = .T.
  39686.                     ENDIF
  39687.                     IF m.lnCurrWord = m.lnWordsinLine AND m.llLastLine AND tlJustLast
  39688.                         m.llLast = .T.
  39689.                     ENDIF
  39690.                     IF m.lnWordsInLine = 1
  39691.                         m.lnX = m.X0
  39692.                         m.llLast = .F.
  39693.                     ENDIF
  39694.                     IF m.llLast
  39695.                         m.lcRectF = BINTOC(m.X0,'F') + BINTOC(m.lnY,'F') + ;
  39696.                             BINTOC(m.wImg,'F') + BINTOC(m.lnY + m.lnLineHeight,'F')
  39697.                         m.lnStringFormatHandle = m.lhRightAlignHandle
  39698.                     ELSE
  39699.                         m.lcRectF = BINTOC(m.lnX,'F') + BINTOC(m.lnY,'F') + REPLICATE(CHR(0),8)
  39700.                         m.lnStringFormatHandle = m.lhLeftAlignHandle
  39701.                     ENDIF
  39702.                     = xfcGdipDrawString(m.lhGraphics ;
  39703.                         , STRCONV(m.laWords(N,1) + 0h00,5) ;
  39704.                         , LEN(m.laWords(N,1)) ;
  39705.                         , m.lhFont ;
  39706.                         , m.lcRectF ;
  39707.                         , m.lnStringFormatHandle ;
  39708.                         , m.lhBrush)
  39709.                     m.lnX = m.lnX + m.laWords(N,2) + m.lnWidthOfBetween
  39710.                     m.N = m.N + 1 && Go to next word
  39711.                 ENDFOR
  39712.                 m.lnCurrLine = m.lnCurrLine + 1
  39713.                 IF m.N >= m.lnWords
  39714.                     EXIT
  39715.                 ENDIF
  39716.                 IF m.laWords(N,1) <> "<CR>"
  39717.                     m.N = m.N - 1 && Compensate ENDFOR
  39718.                 ENDIF
  39719.             ENDFOR
  39720.             * Finished Measuring, so erase the temp objects
  39721.             * Delete the StringFormat object created
  39722.             =xfcGdipDeleteStringFormat(m.lhStringFormat)
  39723.             =xfcGdipDeleteStringFormat(m.lhLeftAlignHandle)
  39724.             =xfcGdipDeleteStringFormat(m.lhRightAlignHandle)
  39725.         CATCH TO loExc
  39726.             SET STEP ON 
  39727.         ENDTRY
  39728.         RETURN NULL
  39729. ENDPROC
  39730. PROCEDURE Destroy
  39731. if This.gdipHandle>0 and This.gdipOwnsThisHandle
  39732.     declare integer GdipDeleteGraphics in gdiplus.dll integer
  39733.     GdipDeleteGraphics( This.gdipHandle )
  39734.     This.gdipHandle = 0
  39735.     This.gdipOwnsThisHandle = .F.
  39736. endif
  39737. ENDPROC
  39738. pixeloffsetmode = 0
  39739. pageunit =  
  39740. _memberdata = 
  39741.     7020<?xml version="1.0" standalone="yes"?>
  39742. <VFPData><memberdata name="clear" type="method" display="Clear" favorites="True"/><memberdata name="clipbounds" type="property" display="ClipBounds" favorites="True"/><memberdata name="compositingmode" type="property" display="CompositingMode" favorites="True"/><memberdata name="compositingquality" type="property" display="CompositingQuality" favorites="True"/><memberdata name="createfromhdc" type="method" display="CreateFromHDC" favorites="True"/><memberdata name="createfromhwnd" type="method" display="CreateFromHWND" favorites="True" override="True"/><memberdata name="createfromimage" type="method" display="CreateFromImage" favorites="True"/><memberdata name="dpix" type="property" display="DpiX" favorites="True"/><memberdata name="dpiy" type="property" display="DpiY" favorites="True"/><memberdata name="drawarc" type="method" display="DrawArc" favorites="True"/><memberdata name="drawbezier" type="method" display="DrawBezier" favorites="True"/><memberdata name="drawbeziers" type="method" display="DrawBeziers" favorites="True"/><memberdata name="drawbeziersfromcursor" type="method" display="DrawBeziersFromCursor" favorites="True"/><memberdata name="drawcachedbitmap" type="method" display="DrawCachedBitmap" favorites="True"/><memberdata name="drawclosedcurve" type="method" display="DrawClosedCurve" favorites="True"/><memberdata name="drawclosedcurvefromcursor" type="method" display="DrawClosedCurveFromCursor" favorites="True"/><memberdata name="drawcurve" type="method" display="DrawCurve" favorites="True"/><memberdata name="drawcurvefromcursor" type="method" display="DrawCurveFromCursor" favorites="True"/><memberdata name="drawellipse" type="method" display="DrawEllipse" favorites="True"/><memberdata name="drawellipser" type="method" display="DrawEllipseR" favorites="True"/><memberdata name="drawimageat" type="method" display="DrawImageAt" favorites="True"/><memberdata name="drawimageportionat" type="method" display="DrawImagePortionAt" favorites="True"/><memberdata name="drawimageportionscaled" type="method" display="DrawImagePortionScaled" favorites="True"/><memberdata name="drawimagescaled" type="method" display="DrawImageScaled" favorites="True"/><memberdata name="drawline" type="method" display="DrawLine" favorites="True"/><memberdata name="drawlines" type="method" display="DrawLines" favorites="True"/><memberdata name="drawlinesfromcursor" type="method" display="DrawLinesFromCursor" favorites="True"/><memberdata name="drawpie" type="method" display="DrawPie" favorites="True"/><memberdata name="drawpier" type="method" display="DrawPieR" favorites="True"/><memberdata name="drawpolygon" type="method" display="DrawPolygon" favorites="True"/><memberdata name="drawpolygonfromcursor" type="method" display="DrawPolygonFromCursor" favorites="True"/><memberdata name="drawrectangle" type="method" display="DrawRectangle" favorites="True" override="True"/><memberdata name="drawrectangler" type="method" display="DrawRectangleR" favorites="True"/><memberdata name="drawrectangles" type="method" display="DrawRectangles" favorites="True"/><memberdata name="drawrectanglesfromcursor" type="method" display="DrawRectanglesFromCursor" favorites="True"/><memberdata name="drawstringa" type="method" display="DrawStringA" favorites="True"/><memberdata name="drawstringw" type="method" display="DrawStringW" favorites="True"/><memberdata name="fillclosedcurve" type="method" display="FillClosedCurve" favorites="True"/><memberdata name="fillclosedcurvefromcursor" type="method" display="FillClosedCurveFromCursor" favorites="True"/><memberdata name="fillellipse" type="method" display="FillEllipse" favorites="True"/><memberdata name="fillellipser" type="method" display="FillEllipseR" favorites="True"/><memberdata name="fillpie" type="method" display="FillPie" favorites="True"/><memberdata name="fillpier" type="method" display="FillPieR" favorites="True"/><memberdata name="fillpolygon" type="method" display="FillPolygon" favorites="True"/><memberdata name="fillpolygonfromcursor" type="method" display="FillPolygonFromCursor" favorites="True"/><memberdata name="fillrectangle" type="method" display="FillRectangle" favorites="True"/><memberdata name="fillrectangler" type="method" display="FillRectangleR" favorites="True"/><memberdata name="fillrectangles" type="method" display="FillRectangles" favorites="True"/><memberdata name="fillrectanglesfromcursor" type="method" display="FillRectanglesFromCursor" favorites="True"/><memberdata name="flush" type="method" display="Flush" favorites="True"/><memberdata name="interpolationmode" type="property" display="InterpolationMode" favorites="True"/><memberdata name="interpolationmode_access" type="method" display="InterpolationMode_access"/><memberdata name="interpolationmode_assign" type="method" display="InterpolationMode_assign"/><memberdata name="measurestringa" type="method" display="MeasureStringA" favorites="True"/><memberdata name="measurestringw" type="method" display="MeasureStringW" favorites="True"/><memberdata name="pagescale" type="property" display="PageScale" favorites="True"/><memberdata name="pagescale_access" type="method" display="PageScale_access"/><memberdata name="pagescale_assign" type="method" display="PageScale_assign"/><memberdata name="pageunit" type="property" display="PageUnit" favorites="True"/><memberdata name="pageunit_access" type="method" display="PageUnit_access"/><memberdata name="pageunit_assign" type="method" display="PageUnit_assign"/><memberdata name="pixeloffsetmode" type="property" display="PixelOffsetMode" favorites="True"/><memberdata name="pixeloffsetmode_access" type="method" display="PixelOffsetMode_access"/><memberdata name="pixeloffsetmode_assign" type="method" display="PixelOffsetMode_assign"/><memberdata name="renderingorigin" type="property" display="RenderingOrigin" favorites="True"/><memberdata name="resettransform" type="method" display="ResetTransform" favorites="True"/><memberdata name="restore" type="method" display="Restore" favorites="True"/><memberdata name="rotatetransform" type="method" display="RotateTransform" favorites="True"/><memberdata name="save" type="method" display="Save" favorites="True"/><memberdata name="scaletransform" type="method" display="ScaleTransform" favorites="True"/><memberdata name="smoothingmode" type="property" display="SmoothingMode" favorites="True"/><memberdata name="textcontrast" type="property" display="TextContrast" favorites="True"/><memberdata name="textrenderinghint" type="property" display="TextRenderingHint" favorites="True"/><memberdata name="translatetransform" type="method" display="TranslateTransform" favorites="True"/><memberdata name="visibleclipbounds" type="property" display="VisibleClipBounds" favorites="True"/><memberdata name="gethdc" type="method" display="GetHdc" favorites="True"/><memberdata name="releasehdc" type="method" display="ReleaseHdc" favorites="True"/><memberdata name="drawstringjust" display="DrawStringJust"/></VFPData>
  39743. Name = "gpgraphics"
  39744. PLATFORM
  39745. UNIQUEID
  39746. TIMESTAMP
  39747. CLASS
  39748. CLASSLOC
  39749. BASECLASS
  39750. OBJNAME
  39751. PARENT
  39752. PROPERTIES
  39753. PROTECTED
  39754. METHODS
  39755. OBJCODE
  39756. RESERVED1
  39757. RESERVED2
  39758. RESERVED3
  39759. RESERVED4
  39760. RESERVED5
  39761. RESERVED6
  39762. RESERVED7
  39763. RESERVED8
  39764.  COMMENT Screen              
  39765.  WINDOWS _2Z911D86M1022004034
  39766.  WINDOWS _2Z911D86N1092440912
  39767.  WINDOWS _2Z911D86M1092440912
  39768.  WINDOWS _2ZD1D1IP71092440912
  39769.  WINDOWS _2Z911D86M1026130672n
  39770.  WINDOWS _2Z911D86N10261306720
  39771.  COMMENT RESERVED            
  39772. VERSION =   3.00
  39773. dataenvironment
  39774. dataenvironment
  39775. Dataenvironment
  39776. YTop = 0
  39777. Left = 0
  39778. Width = 0
  39779. Height = 0
  39780. DataSource = .NULL.
  39781. Name = "Dataenvironment"
  39782.     frmSearch
  39783. DataSession = 2
  39784. Height = 90
  39785. Width = 370
  39786. Desktop = .T.
  39787. ShowWindow = 1
  39788. DoCreate = .T.
  39789. AutoCenter = .T.
  39790. BorderStyle = 2
  39791. Caption = "Find"
  39792. Closable = .F.
  39793. MaxButton = .F.
  39794. MinButton = .F.
  39795. Icon = ..\
  39796. WindowType = 1
  39797. AlwaysOnTop = .T.
  39798. AllowOutput = .F.
  39799. _memberdata = <VFPData><memberdata name="updatecontrol" display="UpdateControl"/><memberdata name="updatetable" display="UpdateTable"/></VFPData>
  39800. Name = "frmSearch"
  39801. PROCEDURE Init
  39802. LPARAMETERS tcString, toParentForm
  39803.     This.Icon = _goFP.cFormIcon
  39804. CATCH
  39805. ENDTRY
  39806.     WITH _goFP
  39807.         This.Caption            = .GetLoc("FIND")
  39808.         This.CmdCancel.Caption  = .GetLoc("CANCEL")
  39809.         This.CmdFind.Caption    = .GetLoc("FIND")
  39810.         This.lblString.Caption  = .GetLoc("FINDTEXT")
  39811.     ENDWITH
  39812.     This.TxtTextToFind.Value = tcString
  39813. CATCH
  39814. ENDTRY
  39815. IF (VARTYPE(toParentForm) = "O") AND toParentForm.SHOWWINDOW = 2 && as top-level form
  39816.     *-----------------------------------
  39817.     * If parent preview window is a top-level form,
  39818.     * center the child window in the view port:
  39819.     *-----------------------------------
  39820.     This.AUTOCENTER = .F.
  39821.     This.LEFT = toParentForm.VIEWPORTLEFT + INT(toParentForm.WIDTH/2  - This.WIDTH/2)
  39822.     This.TOP  = toParentForm.VIEWPORTTOP  + INT(toParentForm.HEIGHT/2 - This.HEIGHT/2)
  39823.     This.AUTOCENTER = .T.
  39824. ENDIF
  39825. ENDPROC
  39826. PROCEDURE Load
  39827. SET TALK OFF
  39828. SET CONSOLE OFF 
  39829. ENDPROC
  39830. _GOFP
  39831. _CTEXTTOFIND
  39832. THISFORM
  39833. RELEASE
  39834. Click,
  39835. _GOFP
  39836. _CTEXTTOFIND
  39837. THISFORM
  39838. TXTTEXTTOFIND
  39839. VALUE
  39840. RELEASE
  39841. Click,
  39842. !Arial, 0, 9, 5, 15, 12, 32, 3, 0
  39843. cFormat = "K"
  39844. Height = 23
  39845. Left = 99
  39846. TabIndex = 1
  39847. Top = 16
  39848. Width = 260
  39849. Name = "txtTextToFind"
  39850.     frmSearch
  39851. txtTextToFind
  39852. textbox
  39853. textbox
  39854.     frmSearch
  39855.     lblString
  39856. label
  39857. label
  39858.     frmSearch
  39859.     cmdCancel
  39860.     frmSearch
  39861. V_memberdata XML Metadata for customizable properties
  39862. *updatecontrol 
  39863. *updatetable 
  39864. commandbutton
  39865. commandbutton
  39866. cmdFind
  39867. aTop = 51
  39868. Left = 180
  39869. Height = 27
  39870. Width = 84
  39871. Caption = "Find"
  39872. TabIndex = 2
  39873. Name = "cmdFind"
  39874. jPROCEDURE Click
  39875. _goFP._cTextToFind = ALLTRIM(Thisform.txtTextToFind.Value)
  39876. Thisform.Release()
  39877. ENDPROC
  39878. AutoSize = .T.
  39879. BackStyle = 0
  39880. Caption = "String:"
  39881. Height = 17
  39882. Left = 7
  39883. Top = 16
  39884. Width = 37
  39885. TabIndex = 4
  39886. Name = "lblString"
  39887. GPROCEDURE Click
  39888. _goFP._cTextToFind = ""
  39889. Thisform.Release()
  39890. ENDPROC
  39891. commandbutton
  39892. commandbutton
  39893. sTop = 51
  39894. Left = 276
  39895. Height = 27
  39896. Width = 84
  39897. Cancel = .T.
  39898. Caption = "Cancel"
  39899. TabIndex = 3
  39900. Name = "cmdCancel"
  39901. CANCEL
  39902. FINDTEXT
  39903. TCSTRING
  39904. TOPARENTFORM
  39905. _GOFP    
  39906. CFORMICON
  39907. CAPTION
  39908. GETLOC    
  39909. CMDCANCEL
  39910. CMDFIND    
  39911. LBLSTRING
  39912. TXTTEXTTOFIND
  39913. VALUE
  39914. SHOWWINDOW
  39915. AUTOCENTER
  39916. VIEWPORTLEFT
  39917. WIDTH
  39918. VIEWPORTTOP
  39919. HEIGHT
  39920. Init,
  39921. Load{
  39922. !#!LNMRVTOTRHPH
  39923. 777WWWXXXXXXXXXXXXXXXVVVUUUTTTRRRQQQPPPNNNMMMLLLLLLKKKLLLMMMNNNPRQ]`^
  39924. SWUR\R
  39925. SWUUUU
  39926. mqpPRQ
  39927. ~~~{{{wwwtttpppllliiieeefff```
  39928. !#!LNMRVTOTRHPH
  39929. 777WWWXXXXXXXXXXXXXXXVVVUUUTTTRRRQQQPPPNNNMMMLLLLLLKKKLLLMMMNNNPRQ]`^
  39930. SWUR\R
  39931. SWUUUU
  39932. mqpPRQ
  39933. ~~~{{{wwwtttpppllliiieeefff```
  39934. !#!LNMRVTOTRHPH
  39935. 777WWWXXXXXXXXXXXXXXXVVVUUUTTTRRRQQQPPPNNNMMMLLLLLLKKKLLLMMMNNNPRQ]`^
  39936. SWUR\R
  39937. SWUUUU
  39938. mqpPRQ
  39939. ~~~{{{wwwtttpppllliiieeefff```
  39940. PLATFORM
  39941. UNIQUEID
  39942. TIMESTAMP
  39943. CLASS
  39944. CLASSLOC
  39945. BASECLASS
  39946. OBJNAME
  39947. PARENT
  39948. PROPERTIES
  39949. PROTECTED
  39950. METHODS
  39951. OBJCODE
  39952. RESERVED1
  39953. RESERVED2
  39954. RESERVED3
  39955. RESERVED4
  39956. RESERVED5
  39957. RESERVED6
  39958. RESERVED7
  39959. RESERVED8
  39960.  COMMENT Class               
  39961.  WINDOWS _1O61C2TAZ 884087372
  39962.  COMMENT RESERVED            
  39963.  WINDOWS _1NS0MG7JU1052884140
  39964.  WINDOWS _1NS0MG7JU 8790598334
  39965.  WINDOWS _1O403W86Q 883962909j
  39966.  WINDOWS _1O603XLBF 863702772G
  39967.  COMMENT RESERVED            
  39968. VERSION =   3.00
  39969. ctl32.h
  39970. ctl32_progressbarlabel
  39971. ctl32.h
  39972. uctl32_name
  39973. ctl32_version
  39974. ctl32_update^
  39975. ctl32_declares^
  39976. uformatasbytes^
  39977. ctl32_init^
  39978. ctl32_bind^
  39979. ctl32_unbind^
  39980. Pixels
  39981. Class
  39982. label
  39983. ctl32_progressbarlabel
  39984. X_memberdata XML Metadata for customizable properties
  39985. buddycontrol Especifies the full name of the ctl32_ProgressBar control to bind this label to. For example: ThisForm.ctl32_ProgressBar1
  39986. labelstyle Especifies the Style used to display numbers in label text. N: Number, P: Percent, B: Bytes/KB/MB/GB
  39987. labelcaption Especifies the text to display in the label. Any text can be entered, keywords <<Value>> and <<Maximum>> will be replaced by the progressbar respective values.
  39988. ctl32_name
  39989. ctl32_version
  39990. *ctl32_update 
  39991. *ctl32_declares 
  39992. *uformatasbytes 
  39993. *ctl32_init 
  39994. *ctl32_bind 
  39995. *ctl32_unbind 
  39996. ctl32.h
  39997. ctl32_progressbar
  39998. ctl32_controlhwnd^
  39999. ctl32_dwexstyle^
  40000. ctl32_lpclassname^
  40001. ctl32_dwstyle^
  40002. ctl32_hinstance^
  40003. ctl32_creating^
  40004. ctl32_name
  40005. ctl32_hmenu^
  40006. ctl32_lpparam^
  40007. ctl32_lpwindowname^
  40008. ctl32_oldstep^
  40009. ctl32_version
  40010. ctl32_proxyhwnd^
  40011. ctl32_left^
  40012. ctl32_top^
  40013. ctl32_width^
  40014. ctl32_height^
  40015. builderx
  40016. ctl32_resize^
  40017. step_assign^
  40018. minimum_assign^
  40019. maximum_assign^
  40020. marquee_assign^
  40021. visible_assign^
  40022. ctl32_destroy^
  40023. ctl32_declaredlls^
  40024. ctl32_bindevents^
  40025. ctl32_unbindevents^
  40026. marqueeanimationspeed_assign^
  40027. hwnd_access^
  40028. value_access^
  40029. value_assign^
  40030. percent_access^
  40031. smooth_assign^
  40032. backcolor_assign^
  40033. barcolor_assign^
  40034. play_assign^
  40035. scrolling_assign^
  40036. percent_assign^
  40037. max_assign^
  40038. min_assign^
  40039. hwnd_assign^
  40040. orientation_assign^
  40041. vertical_assign^
  40042. bordercolor_assign^
  40043. ctl32_setborder^
  40044. StatusBarText^
  40045. Picture^
  40046. Click^
  40047. ControlCount^
  40048. Controls^
  40049. DblClick^
  40050. ColorSource^
  40051. Drag^
  40052. DragDrop^
  40053. DragIcon^
  40054. DragMode^
  40055. DragOver^
  40056. GotFocus^
  40057. LostFocus^
  40058. MiddleClick^
  40059. MouseDown^
  40060. MouseEnter^
  40061. MouseIcon^
  40062. MouseLeave^
  40063. MouseMove^
  40064. MousePointer^
  40065. MouseUp^
  40066. MouseWheel^
  40067. OLECompleteDrag^
  40068. OLEDrag^
  40069. OLEDragDrop^
  40070. OLEDragMode^
  40071. OLEDragOver^
  40072. OLEDragPicture^
  40073. OLEDropEffects^
  40074. OLEDropHasData^
  40075. OLEDropMode^
  40076. OLEGiveFeedback^
  40077. OLESetData^
  40078. OLEStartDrag^
  40079. Objects^
  40080. RightClick^
  40081. Style^
  40082. BorderWidth^
  40083. ForeColor^
  40084. AddProperty^
  40085. ActiveControl^
  40086. Draw^
  40087. HelpContextID^
  40088. Move^
  40089. Moved^
  40090. Refresh^
  40091. ResetToDefault^
  40092. Resize^
  40093. SaveAsClass^
  40094. SetFocus^
  40095. ShowWhatsThis^
  40096. SpecialEffect^
  40097. TabStop^
  40098. ToolTipText^
  40099. WhatsThisHelpID^
  40100. WriteExpression^
  40101. WriteMethod^
  40102. Pixels
  40103. Class
  40104. control
  40105. ctl32_progressbar
  40106. AutoSize = .T.
  40107. FontName = "Tahoma"
  40108. FontSize = 8
  40109. FontStrikethru = .F.
  40110. FontUnderline = .F.
  40111. Anchor = 7
  40112. BackStyle = 0
  40113. Caption = "ctl32_ProgressBar"
  40114. Height = 96
  40115. Left = 0
  40116. Top = 18
  40117. Width = 16
  40118. ForeColor = 0,0,128
  40119. Rotation = 90
  40120. Name = "lblControlNameV"
  40121. ctl32_progressbar
  40122. lblControlNameV
  40123. label
  40124. label
  40125. ctl32_progressbar
  40126. tmrControlTimer
  40127. timer
  40128. ctl32.h
  40129. PROCEDURE Timer
  40130. If This.Parent.HWnd = 0 Then
  40131.     Return
  40132. Endif
  40133. This.Parent.stepit()
  40134. *This.Parent.Value = This.Parent.Value + This.Parent.Step
  40135. ENDPROC
  40136. label
  40137. timer
  40138. ctl32_progressbar
  40139. lblControlNameH
  40140. PROCEDURE ctl32_update
  40141. If Empty(This.BuddyControl)
  40142.   Return
  40143. Endif
  40144. If Type("This.LabelStyle") <> [C]
  40145.   WAIT ([LabelStyle Property must be Character: ] + Program()) WINDOW nowait
  40146.   Return
  40147. Endif
  40148. Local lcValue, lcMaximum, lcCaption
  40149. Do Case
  40150. Case This.LabelStyle = "N"    && Value
  40151.   lcValue = Transform((Evaluate(This.BuddyControl + ".Value")),"999,999,999,999")
  40152.   lcMaximum = Transform((Evaluate(This.BuddyControl + ".Maximum")),"999,999,999,999")
  40153.   lcMinimum = Transform((Evaluate(This.BuddyControl + ".Minimum")),"999,999,999,999")
  40154. Case This.LabelStyle = "P"    && Percent
  40155.   lcValue = Transform(Evaluate(This.BuddyControl + ".Percent"),"999%")
  40156.   lcMaximum = "100%"
  40157.   lcMinimum = "0%"
  40158. Case This.LabelStyle = "B"    && Bytes
  40159.   lcValue = This.uFormatAsBytes(Evaluate(This.BuddyControl + ".Value"))
  40160.   lcMaximum = This.uFormatAsBytes(Evaluate(This.BuddyControl + ".Maximum"))
  40161.   lcMinimum = This.uFormatAsBytes(Evaluate(This.BuddyControl + ".Minimum"))
  40162. Otherwise    && same as "N"
  40163.   lcValue = Transform((Evaluate(This.BuddyControl + ".Value")),"999,999,999,999")
  40164.   lcMaximum = Transform((Evaluate(This.BuddyControl + ".Maximum")),"999,999,999,999")
  40165.   lcMinimum = Transform((Evaluate(This.BuddyControl + ".Minimum")),"999,999,999,999")
  40166. Endcase
  40167. lcCaption = This.LabelCaption
  40168. lcCaption = Strtran(lcCaption ,"<<Value>>",Alltrim(lcValue),1,10,1)
  40169. lcCaption = Strtran(lcCaption ,"<<Maximum>>",Alltrim(lcMaximum),1,10,1)
  40170. lcCaption = Strtran(lcCaption ,"<<Minimum>>",Alltrim(lcMinimum),1,10,1)
  40171. This.Caption = m.lcCaption
  40172. This.Refresh
  40173. ENDPROC
  40174. PROCEDURE ctl32_declares
  40175. Local Array laDeclaredDlls(1,3)
  40176. Local lnLen
  40177. m.lnLen = Adlls(m.laDeclaredDlls)
  40178. If Ascan(m.laDeclaredDlls, "StrFormatByteSize", 1, m.lnLen , 2, 15) = 0
  40179.     Declare Integer StrFormatByteSize In shlwapi As StrFormatByteSize ;
  40180.         INTEGER qdw,;
  40181.         STRING @ pszBuf,;
  40182.         INTEGER uiBufSize
  40183. Endif
  40184. ENDPROC
  40185. PROCEDURE uformatasbytes
  40186. LPARAMETERS qdw
  40187. LOCAL pszBuf
  40188. m.pszBuf = SPACE(100)
  40189. StrFormatByteSize(m.qdw, @m.pszBuf, Len(m.pszBuf))
  40190. m.pszBuf = ALLTRIM(m.pszBuf)
  40191. * Remove chr(0)
  40192. m.pszBuf = Left(m.pszBuf,Len(m.pszBuf)-1)
  40193. RETURN ALLTRIM(m.pszBuf)
  40194. ENDPROC
  40195. PROCEDURE ctl32_init
  40196. This.Caption = ""
  40197. This.ctl32_Declares
  40198. This.ctl32_Bind
  40199. This.ctl32_Update
  40200. ENDPROC
  40201. PROCEDURE ctl32_bind
  40202. If Not Empty(This.BuddyControl) Then
  40203.   If Type(This.BuddyControl) = [U] Then
  40204.     This.BuddyControl = [ThisForm.] + This.BuddyControl
  40205.   Endif
  40206.   Bindevent(Evaluate(This.BuddyControl),"VALUE",This,"CTL32_UPDATE",1)
  40207. Endif
  40208. ENDPROC
  40209. PROCEDURE ctl32_unbind
  40210. If Not Empty(This.BuddyControl) Then
  40211.   Unbindevent(Evaluate(This.BuddyControl),"VALUE",This,"CTL32_UPDATE")
  40212. Endif
  40213. ENDPROC
  40214. PROCEDURE Init
  40215. This.ctl32_Init
  40216. ENDPROC
  40217. PROCEDURE Destroy
  40218. This.ctl32_Unbind
  40219. ENDPROC
  40220. (FontName = "Tahoma"
  40221. FontSize = 8
  40222. Alignment = 1
  40223. BorderStyle = 0
  40224. Caption = "ctl32_ProgressBar_Label"
  40225. Height = 16
  40226. Width = 300
  40227. _memberdata = 
  40228. buddycontrol = 
  40229. labelstyle = N
  40230. labelcaption = <<Value>>
  40231. ctl32_name = ctl32_ProgressBarLabel
  40232. ctl32_version = 1.1
  40233. Name = "ctl32_progressbarlabel"
  40234. PARENT
  40235. STEPIT
  40236. Timer,
  40237. gTop = 0
  40238. Left = -25
  40239. Height = 23
  40240. Width = 23
  40241. Enabled = .F.
  40242. Interval = 100
  40243. Name = "tmrControlTimer"
  40244. FontName = "Tahoma"
  40245. FontSize = 8
  40246. FontStrikethru = .F.
  40247. FontUnderline = .F.
  40248. Anchor = 7
  40249. BackStyle = 0
  40250. Caption = "ctl32_ProgressBar"
  40251. Height = 15
  40252. Left = 6
  40253. Top = 1
  40254. Width = 89
  40255. ForeColor = 0,0,128
  40256. Name = "lblControlNameH"
  40257. label
  40258. label
  40259. ctl32_controlhwnd CreateWindowEx return value.
  40260. ctl32_dwexstyle CreateWindowEx parameter.
  40261. ctl32_lpclassname CreateWindowEx parameter.
  40262. ctl32_dwstyle CreateWindowEx parameter.
  40263. ctl32_hosthwnd CreateWindowEx parameter.
  40264. ctl32_hinstance CreateWindowEx parameter.
  40265. ctl32_creating
  40266. minimum Specifies the lower limit of the value property. Must be a positive or negative number smaller than Maximum
  40267. maximum Specifies the upper limit of the value property. Must be a positive or negative number larger than minimum.
  40268. vertical Specifies if the progressbar is vertical or horizontal.
  40269. _memberdata XML Metadata for customizable properties
  40270. step Determines the value to use in the stepit method. Can be a positive or negative value.
  40271. marquee Especifies if the marquee style is active. When set to true, the Smooth property is set to false to avoid wrong display of bars when using XP with no themes.
  40272. ctl32_name Name of the control class
  40273. marqueeanimationspeed Specifies the speed of the marquee bar, in milliseconds.
  40274. hwnd Specifies the Window handle of the Control.
  40275. value Specifies the current value of the control.
  40276. percent Specifies the percent of the value property relative to the total of maximum - minimum. 
  40277. repeat Specifies if the controls rolls over to minimum when value reaches maximum. Use it with Play to display a self updating progressbar.
  40278. smooth Specifies if the progressbar is shown using segments, or using a continuous bar.
  40279. parenthwnd Especifies the handle of the parent window of the control.
  40280. ctl32_hmenu CreateWindowEx parameter.
  40281. ctl32_lpparam CreateWindowEx parameter.
  40282. ctl32_lpwindowname CreateWindowEx parameter.
  40283. barcolor Specifies the color of the progress bar. A value of -1 resets color to system default. Backcolor specifies the color of the background, a value of -1 resets color to system default.
  40284. play When True, fires the StepIt method every 100 milliseconds. To set the speed, change the value of the step property.
  40285. max For compatibility only. Use Maximum property instead.
  40286. min For compatibility only. Use Minimum property instead.
  40287. scrolling For compatibility only. Use Smooth property instead.
  40288. orientation For compatibility only. Use Vertical  property instead. 0: Horizontal, 1:Vertical
  40289. ctl32_oldstep Saves old Step value when the StepIt method is called with a parameter.
  40290. sizeadjust Adjusts Width/Height of Horizontal/Vertical ProgressBar so that bars show even and complete at the end/top. Use only with Themes applied in Windows XP.
  40291. themes Not Used
  40292. ctl32_version
  40293. ctl32_proxyhwnd Static window hwnd
  40294. flat Especifies if the flat style is active.
  40295. ctl32_left
  40296. ctl32_top
  40297. ctl32_width
  40298. ctl32_height
  40299. builderx
  40300. ctl32_flat
  40301. ctl32_backcolor
  40302. border
  40303. ctl32_formtype
  40304. ctl32_hwndparent
  40305. text Text string used to generate the caption. Check Help File
  40306. caption The Caption gets generated based on the string stored in the Text property
  40307. ctl32_oldproc
  40308. ctl32_pbproc
  40309. righttoleft Specifies if the control should draw right to left.
  40310. marqueespeed
  40311. *ctl32_resize Bound to Form.Resize
  40312. *step_assign 
  40313. *minimum_assign 
  40314. *maximum_assign 
  40315. *marquee_assign 
  40316. *visible_assign 
  40317. *ctl32_create 
  40318. *ctl32_destroy 
  40319. *ctl32_declaredlls DLL declarations.
  40320. *ctl32_bindevents Binds events.
  40321. *ctl32_unbindevents 
  40322. *marqueeanimationspeed_assign 
  40323. *stepit Increments the value of the control by the amount specified in step. If a numeric parameter is passed, that value is used instead of the value set in the step property.
  40324. *hwnd_access 
  40325. *value_access 
  40326. *value_assign 
  40327. *percent_access 
  40328. *smooth_assign 
  40329. *backcolor_assign 
  40330. *barcolor_assign 
  40331. *play_assign 
  40332. *scrolling_assign 
  40333. *percent_assign 
  40334. *max_assign 
  40335. *min_assign 
  40336. *hwnd_assign 
  40337. *reset Resets the Value property to the Minimum value.
  40338. *orientation_assign 
  40339. *vertical_assign 
  40340. *bordercolor_assign 
  40341. *repeat_assign 
  40342. *width_assign 
  40343. *height_assign 
  40344. *uisxp 
  40345. *themes_assign 
  40346. *flat_assign 
  40347. *border_assign 
  40348. *ctl32_settheme 
  40349. *ctl32_setborder 
  40350. *ctl32_createcaption 
  40351. *uformatasbytes 
  40352. *ustrtolong 
  40353. *ctl32_wm_paint 
  40354. *ctl32_setflat 
  40355. *righttoleft_assign 
  40356. *ctl32_setrighttoleft 
  40357. *marqueespeed_access 
  40358. *marqueespeed_assign 
  40359. CTL32_CREATING
  40360. CTL32_CONTROLHWND
  40361. CTL32_LEFT
  40362. LEFT    
  40363. CTL32_TOP
  40364. CTL32_WIDTH
  40365. WIDTH
  40366. CTL32_HEIGHT
  40367. HEIGHT
  40368. SETWINDOWPOS
  40369. m.vNewValb
  40370. Parameter must be Numeric: Ct
  40371. VNEWVAL
  40372. CTL32_CONTROLHWND
  40373. SENDMESSAGEN
  40374. m.vNewValb
  40375. Parameter must be Numeric: Ct
  40376. VNEWVAL
  40377. MINIMUM
  40378. VALUE
  40379. CTL32_CONTROLHWND
  40380. SENDMESSAGEN
  40381. MAXIMUM
  40382. m.vNewValb
  40383. Parameter must be Numeric: Ct
  40384. VNEWVAL
  40385. MAXIMUM
  40386. VALUE
  40387. CTL32_CONTROLHWND
  40388. SENDMESSAGEN
  40389. MINIMUM
  40390. m.vNewValb
  40391. m.vNewValb
  40392. Parameter must be Logical: Ct
  40393. VNEWVAL
  40394. MARQUEE
  40395. CTL32_CONTROLHWND
  40396. CTL32_DESTROY
  40397. CTL32_CREATEN
  40398. m.vNewValb
  40399. m.vNewValb
  40400. Parameter must be Logical: Ct
  40401. VNEWVAL
  40402. VISIBLE
  40403. CTL32_CONTROLHWND
  40404. _SHOWWINDOW
  40405. CTL32_PROXYHWND
  40406. msctls_progress32
  40407. Error Creating window 
  40408.  Host:
  40409. CTL32_CREATING
  40410. CTL32_DWEXSTYLE
  40411. CTL32_LPCLASSNAME
  40412. CTL32_LPWINDOWNAME
  40413. CTL32_DWSTYLE
  40414. CTL32_HWNDPARENT
  40415. CTL32_HOSTHWND
  40416. CTL32_LEFT
  40417. LEFT    
  40418. CTL32_TOP
  40419. CTL32_WIDTH
  40420. WIDTH
  40421. CTL32_HEIGHT
  40422. HEIGHT
  40423. MARQUEE
  40424. SMOOTH
  40425. VERTICAL
  40426. ORIENTATION
  40427. CTL32_HMENU
  40428. CTL32_HINSTANCE
  40429. GETWINDOWLONG
  40430. CTL32_LPPARAM
  40431. CTL32_CONTROLHWND
  40432. CREATEWINDOWEX
  40433. CTL32_NAME
  40434. CTL32_BINDEVENTS
  40435. CTL32_SETTHEME
  40436. MINIMUM
  40437. MAXIMUM
  40438. VALUE
  40439. CTL32_SETBORDER
  40440. MARQUEEANIMATIONSPEED
  40441. PLAY    
  40442. BACKCOLOR
  40443. BARCOLOR
  40444. VISIBLES
  40445. CTL32_CONTROLHWND
  40446. DESTROYWINDOW
  40447. CTL32_PROXYHWND
  40448. CallWindowProc
  40449. CallWindowProc
  40450. win32apiQ
  40451. CallWindowProc
  40452. CreateWindowEx
  40453. CreateWindowEx
  40454. win32apiQ
  40455. CreateWindowEx
  40456. DestroyWindow
  40457. DestroyWindow
  40458. win32apiQ
  40459. DestroyWindow
  40460. GetClientRect
  40461. GetClientRect
  40462. win32apiQ
  40463. GetClientRect
  40464. GetWindow
  40465. GetWindow
  40466. user32Q
  40467. GetWindow
  40468. GetWindowLong
  40469. GetWindowLong
  40470. win32apiQ
  40471. GetWindowLong
  40472. IsThemeActive
  40473. IsThemeActive
  40474. uxtheme.DllQ
  40475. IsThemeActive
  40476. SendMessageC
  40477. SendMessage
  40478. win32apiQ
  40479. SendMessageC
  40480. SendMessageN
  40481. SendMessage
  40482. win32apiQ
  40483. SendMessageN
  40484. SetWindowLong
  40485. SetWindowLong
  40486. win32apiQ
  40487. SetWindowLong
  40488. SetWindowPos
  40489. SetWindowPos
  40490. win32apiQ
  40491. SetWindowPos
  40492. SetWindowTheme
  40493. SetWindowTheme
  40494. UxThemeQ
  40495. SetWindowTheme
  40496. ShowWindow
  40497. ShowWindow
  40498. win32apiQ
  40499. ShowWindow
  40500. _ShowWindow
  40501. ShowWindow
  40502. win32apiQ
  40503. _ShowWindow
  40504. StrFormatByteSize
  40505. StrFormatByteSize
  40506. shlwapiQ
  40507. StrFormatByteSize
  40508. LADECLAREDDLLS
  40509. LNLEN
  40510. CALLWINDOWPROC
  40511. WIN32API
  40512. CREATEWINDOWEX
  40513. DESTROYWINDOW
  40514. GETCLIENTRECT    
  40515. GETWINDOW
  40516. USER32
  40517. GETWINDOWLONG
  40518. ISTHEMEACTIVE
  40519. UXTHEME
  40520. SENDMESSAGE
  40521. SENDMESSAGEC
  40522. SENDMESSAGEN
  40523. SETWINDOWLONG
  40524. SETWINDOWPOS
  40525. SETWINDOWTHEME
  40526. SHOWWINDOW
  40527. _SHOWWINDOW
  40528. STRFORMATBYTESIZE
  40529. SHLWAPI
  40530. Resize
  40531. ctl32_Resize
  40532. ctl32_Resize
  40533. ctl32_Resize
  40534. Value
  40535. ctl32_CreateCaption
  40536. RESIZE
  40537. CTL32_RESIZE
  40538. CTL32_RESIZE
  40539. CTL32_RESIZE
  40540. CTL32_CONTROLHWND
  40541. m.vNewValb
  40542. Parameter must be Numeric: Ct
  40543. VNEWVAL
  40544. MARQUEEANIMATIONSPEED
  40545. CTL32_CONTROLHWND
  40546. SENDMESSAGEN~
  40547. m.lnValb
  40548. LNVAL    
  40549. LNOLDSTEP
  40550. REPEAT
  40551. VALUE
  40552. MAXIMUM
  40553. MINIMUM
  40554. CTL32_OLDSTEP
  40555. CTL32_CONTROLHWND
  40556. CTL32_CONTROLHWNDs
  40557. NVALUE
  40558. CTL32_CREATING
  40559. CTL32_CONTROLHWND
  40560. VALUE
  40561. SENDMESSAGENU
  40562. m.vNewValb
  40563. Parameter must be Numeric: Ct
  40564. VNEWVAL
  40565. REPEAT
  40566. MAXIMUM
  40567. MINIMUM
  40568. VALUE
  40569. CTL32_CONTROLHWND
  40570. SENDMESSAGEN.
  40571. VALUE
  40572. MINIMUM
  40573. MAXIMUM
  40574. m.vNewValb
  40575. m.vNewValb
  40576. Parameter must be Logical: Ct
  40577. VNEWVAL
  40578. SMOOTH
  40579. CTL32_CONTROLHWND
  40580. CTL32_DESTROY
  40581. CTL32_CREATE,
  40582. m.vNewValb
  40583. Parameter for BackColor must be Numeric
  40584. VNEWVAL
  40585. CTL32_BACKCOLOR    
  40586. BACKCOLOR
  40587. CTL32_CONTROLHWND
  40588. SENDMESSAGEN
  40589. m.vNewValb
  40590. Parameter for BarColor must be Numeric
  40591. VNEWVAL
  40592. BARCOLOR
  40593. CTL32_CONTROLHWND
  40594. SENDMESSAGEN,
  40595. m.vNewValb
  40596. m.vNewValb
  40597. Parameter must be Logical: Ct
  40598. VNEWVAL
  40599. MARQUEE
  40600. VALUE
  40601. MINIMUM
  40602. TMRCONTROLTIMER
  40603. ENABLED
  40604. m.vNewValb
  40605. Parameter must be Numeric: Ct
  40606. VNEWVAL
  40607. SROLLING    
  40608. SCROLLING
  40609. SMOOTH
  40610. VNEWVAL
  40611. m.vNewValb
  40612. Parameter must be Numeric: Ct
  40613. VNEWVAL
  40614. MAXIMUM
  40615. m.vNewValb
  40616. Parameter must be Numeric: Ct
  40617. VNEWVAL
  40618. MINIMUM
  40619. VNEWVAL
  40620. VALUE
  40621. MINIMUM
  40622. m.vNewValb
  40623. Parameter must be Numeric: Ct
  40624. VNEWVAL
  40625. ORIENTATION
  40626. VERTICAL8
  40627. m.vNewValb
  40628. m.vNewValb
  40629. Parameter must be Logical: Ct
  40630. VNEWVAL
  40631. VERTICAL
  40632. ORIENTATION
  40633. CTL32_CONTROLHWND
  40634. CTL32_DESTROY
  40635. CTL32_CREATEL
  40636. VNEWVAL
  40637. BORDERCOLOR
  40638. m.vNewValb
  40639. m.vNewValb
  40640. Parameter must be Logical: Ct
  40641. VNEWVAL
  40642. REPEAT
  40643. VNEWVAL
  40644. WIDTH
  40645. SIZEADJUST
  40646. ORIENTATION
  40647. VERTICAL
  40648. VNEWVAL
  40649. HEIGHT
  40650. SIZEADJUST
  40651. ORIENTATION
  40652. VERTICALJ
  40653. m.vNewValb
  40654. m.vNewValb
  40655. Parameter must be Logical: Ct
  40656. VNEWVAL
  40657. THEMES
  40658. CTL32_SETTHEME)
  40659. VNEWVAL
  40660. CTL32_SETFLATC
  40661. VNEWVAL
  40662. BORDER
  40663. CTL32_CREATING
  40664. CTL32_SETBORDER
  40665. CTL32_CONTROLHWND
  40666. LLTHEMES
  40667. UISXP
  40668. ISTHEMEACTIVE
  40669. THEMES
  40670. THISFORM
  40671. SETWINDOWTHEME
  40672. CTL32_SETFLAT?
  40673. LNEXSTYLE
  40674. LLTHEMES
  40675. UISXP
  40676. ISTHEMEACTIVE
  40677. THEMES
  40678. THISFORM
  40679. BORDER
  40680. GETWINDOWLONG
  40681. CTL32_CONTROLHWND
  40682. SETWINDOWLONG
  40683. SETWINDOWPOS2
  40684. 999,999,999,999_
  40685. 999,999,999,999_
  40686. 999,999,999,999_
  40687. 999%_
  40688. <<ValueB>>C
  40689. <<ValueN>>C
  40690. <<ValueP>>C
  40691. <<MaximumB>>C
  40692. <<MaximumN>>C
  40693. <<MaximumP>>C
  40694. <<MinimumB>>C
  40695. <<MinimumN>>C
  40696. <<MinimumP>>C
  40697. CAPTION
  40698. LCBVAL
  40699. LCNVAL
  40700. LCPVAL
  40701. LCBMAX
  40702. LCNMAX
  40703. LCPMAX
  40704. LCBMIN
  40705. LCNMIN
  40706. LCPMIN    
  40707. LCCAPTION
  40708. VALUE
  40709. MAXIMUM
  40710. MINIMUM
  40711. PERCENT
  40712. UFORMATASBYTES
  40713. PSZBUF
  40714. STRFORMATBYTESIZE
  40715. INTEGER
  40716. TCLONGSTR
  40717. LNRETVAL
  40718. INTEGER
  40719. INTEGER
  40720. INTEGER
  40721. INTEGER
  40722. TNHWND
  40723. TNMSG
  40724. TNWPARAM
  40725. TNLPARAM
  40726. LNRESULT
  40727. CALLWINDOWPROC
  40728. CTL32_OLDPROC[
  40729. CTL32_CONTROLHWND    
  40730. LNEXSTYLE
  40731. LLTHEMES
  40732. UISXP
  40733. ISTHEMEACTIVE
  40734. THEMES
  40735. THISFORM
  40736. GETWINDOWLONG
  40737. SETWINDOWLONG
  40738. SETWINDOWPOS
  40739. m.vNewValb
  40740. m.vNewValb
  40741. Parameter must be Logical: Ct
  40742. VNEWVAL    
  40743. LNEXSTYLE
  40744. RIGHTTOLEFT
  40745. CTL32_SETRIGHTTOLEFT
  40746. RIGHTTOLEFT    
  40747. LNEXSTYLE
  40748. GETWINDOWLONG
  40749. CTL32_CONTROLHWND
  40750. SETWINDOWLONG
  40751. MARQUEEANIMATIONSPEED.
  40752. VNEWVAL
  40753. MARQUEESPEED
  40754. MARQUEEANIMATIONSPEED
  40755. CTL32_DESTROY
  40756. ThisFormb
  40757. USAGE: _Screen.Newobject("oProgressBar","ctl32_progressbar","ctl32_progressbar.vcx")
  40758. TNPARENTHWND
  40759. LBLCONTROLNAMEH
  40760. CAPTION
  40761. LBLCONTROLNAMEV    
  40762. BACKSTYLE
  40763. CTL32_DECLAREDLLS
  40764. CTL32_OLDPROC
  40765. GETWINDOWLONG
  40766. CTL32_FORMTYPE
  40767. THISFORM
  40768. SHOWWINDOW
  40769. CTL32_HOSTHWND
  40770. CTL32_DESTROY    
  40771. GETWINDOW
  40772. PARENT    
  40773. BASECLASS
  40774. SIZEADJUST
  40775. ORIENTATION
  40776. VERTICAL
  40777. HEIGHT
  40778. WIDTH
  40779. CTL32_CREATE
  40780. ctl32_resize,
  40781. step_assignO
  40782. minimum_assign0
  40783. maximum_assignl
  40784. marquee_assign
  40785. visible_assign
  40786. ctl32_create
  40787. ctl32_destroy
  40788. ctl32_declaredlls
  40789. ctl32_bindeventsf
  40790. ctl32_unbindevents
  40791. marqueeanimationspeed_assign
  40792. stepit
  40793. hwnd_access
  40794. value_access
  40795. value_assign
  40796. percent_access0
  40797. smooth_assign
  40798. backcolor_assign
  40799. barcolor_assign`
  40800. play_assign
  40801. scrolling_assign/"
  40802. percent_assign    #
  40803. max_assign$#
  40804. min_assign
  40805. hwnd_assignf$
  40806. reset
  40807. orientation_assign
  40808. vertical_assign
  40809. bordercolor_assign
  40810. repeat_assign
  40811. width_assignf(
  40812. height_assign))
  40813. uisxp
  40814. themes_assignA*
  40815. flat_assignA+
  40816. border_assign
  40817. ctl32_settheme
  40818. ctl32_setborderH-
  40819. ctl32_createcaption
  40820. uformatasbytes
  40821. ustrtolong
  40822. ctl32_wm_paint
  40823. ctl32_setflat
  40824. righttoleft_assignt7
  40825. ctl32_setrighttoleft
  40826. marqueespeed_access
  40827. marqueespeed_assign
  40828. DestroyE:
  40829. Initn:
  40830. PROCEDURE ctl32_resize
  40831. *!* If we are in the Control Init Stage, or
  40832. *!* we do not have a handle to the Control yet, just return:
  40833. If This.ctl32_Creating = TRUE Or This.ctl32_ControlHwnd = 0 Then
  40834.   Return
  40835. Endif
  40836. *!* Else, resize the Control Window to its container size:
  40837. With This
  40838.     .ctl32_Left = .Left
  40839.     .ctl32_Top = .Top
  40840.     .ctl32_Width = .Width
  40841.     .ctl32_Height = .Height
  40842.   SetWindowPos(.ctl32_ControlHwnd, 0,;
  40843.     .ctl32_Left, ;
  40844.     .ctl32_Top, ;
  40845.     .ctl32_Width, ;
  40846.     .ctl32_Height, ;
  40847.     SWP_NOZORDER)
  40848. Endwith
  40849. ENDPROC
  40850. PROCEDURE step_assign
  40851. Lparameters vNewVal
  40852. If Type("m.vNewVal") <> [N]
  40853.     Messagebox([Parameter must be Numeric: ] + Program(), 16)
  40854.     Return
  40855. Endif
  40856. This.Step = m.vNewVal
  40857. If This.ctl32_ControlHwnd = 0 Then
  40858.     Return
  40859. Endif
  40860. *!* Set Step Value
  40861. SendMessageN(This.ctl32_ControlHwnd, PBM_SETSTEP , This.Step, 0)
  40862. ENDPROC
  40863. PROCEDURE minimum_assign
  40864. Lparameters vNewVal
  40865. If Type("m.vNewVal") <> [N]
  40866.   Messagebox([Parameter must be Numeric: ] + Program(), 16)
  40867.   Return
  40868. Endif
  40869. This.Minimum = m.vNewVal
  40870. This.Min = m.vNewVal
  40871. *!* If actual Value is less than new Minimum, set value to new Minimum
  40872. If This.Value < This.Minimum Then
  40873.   This.Value =  This.Minimum
  40874. Endif
  40875. If This.ctl32_ControlHwnd = 0 Then
  40876.     Return
  40877. Endif
  40878. *!* Set Minimum and Maximum values:
  40879. SendMessageN(This.ctl32_ControlHwnd, PBM_SETRANGE32, This.Minimum, This.maximum)
  40880. ENDPROC
  40881. PROCEDURE maximum_assign
  40882. Lparameters vNewVal
  40883. If Type("m.vNewVal") <> [N]
  40884.   Messagebox([Parameter must be Numeric: ] + Program(), 16)
  40885.   Return
  40886. Endif
  40887. This.Maximum = m.vNewVal
  40888. This.Max = m.vNewVal
  40889. *!* If actual Value is greater than new Maximum, set value to new Maximum
  40890. If This.Value > This.Maximum Then
  40891.   This.Value =  This.Maximum
  40892. Endif
  40893. If This.ctl32_ControlHwnd = 0 Then
  40894.     Return
  40895. ENDIF
  40896. *!* Set Minimum and Maximum values:
  40897. SendMessageN(This.ctl32_ControlHwnd, PBM_SETRANGE32, This.Minimum, This.Maximum)
  40898. ENDPROC
  40899. PROCEDURE marquee_assign
  40900. Lparameters vNewVal
  40901. If Type("m.vNewVal") = [N] Then
  40902.   If m.vNewVal = 0 Then
  40903.     m.vNewVal = FALSE
  40904.   Else
  40905.     m.vNewVal = TRUE
  40906.   Endif
  40907. ENDIF
  40908. If Type("m.vNewVal") <> [L] Then
  40909.   Messagebox([Parameter must be Logical: ] + Program(), 16)
  40910.   Return
  40911. Endif
  40912. This.Marquee = m.vNewVal
  40913. If This.Marquee = TRUE Then
  40914.   This.Play = FALSE
  40915. Endif
  40916. *!* Marquee change needs to recreate Control
  40917. If This.ctl32_ControlHwnd <> 0 Then
  40918.   This.ctl32_Destroy()
  40919.   This.ctl32_Create()
  40920. Endif
  40921. ENDPROC
  40922. PROCEDURE visible_assign
  40923. Lparameters vNewVal
  40924. If Type("m.vNewVal") = [N] Then
  40925.   If m.vNewVal = 0 Then
  40926.     m.vNewVal = FALSE
  40927.   Else
  40928.     m.vNewVal = TRUE
  40929.   Endif
  40930. ENDIF
  40931. If Type("m.vNewVal") <> [L] Then
  40932.   Messagebox([Parameter must be Logical: ] + Program(), 16)
  40933.   Return
  40934. Endif
  40935. This.Visible = m.vNewVal
  40936. If This.ctl32_ControlHwnd = 0 Then
  40937.   Return
  40938. ENDIF
  40939. If This.Visible  = TRUE Then
  40940.   _ShowWindow(This.ctl32_ProxyHwnd, SW_SHOWNA)
  40941.   _ShowWindow(This.ctl32_ControlHwnd, SW_SHOWNA)
  40942.   _ShowWindow(This.ctl32_ProxyHwnd, SW_HIDE)
  40943.   _ShowWindow(This.ctl32_ControlHwnd, SW_HIDE)
  40944. Endif
  40945. ENDPROC
  40946. PROCEDURE ctl32_create
  40947. With This
  40948.     If .ctl32_Creating Then
  40949.         Return
  40950.     Endif
  40951.     .ctl32_Creating = TRUE
  40952.     *!* Define parameters for progressbar CreateWindowEx:
  40953.     .ctl32_dwExStyle = 0
  40954.     .ctl32_lpClassName = [msctls_progress32]
  40955.     .ctl32_lpWindowName = .ctl32_lpClassName + Sys(2015)
  40956.     .ctl32_dwStyle = Bitor(WS_CHILD, WS_CLIPSIBLINGS)
  40957.     .ctl32_hWndParent = .ctl32_HostHwnd
  40958.     .ctl32_Left =  .Left
  40959.     .ctl32_Top = .Top
  40960.     .ctl32_Width = .Width
  40961.     .ctl32_Height = .Height
  40962.     *!* Setup Control specific Styles that have to be set at window creation:
  40963.     *!* Marquee
  40964.     If .Marquee = TRUE Then
  40965.         .ctl32_dwStyle = Bitor(.ctl32_dwStyle, PBS_MARQUEE)
  40966.     Endif
  40967.     *!* Smooth
  40968.     If .Smooth = TRUE
  40969.         .ctl32_dwStyle = Bitor(.ctl32_dwStyle, PBS_SMOOTH)
  40970.     Endif
  40971.     *!* Orientation
  40972.     If .Vertical = TRUE Or .Orientation <> 0 Then
  40973.         .ctl32_dwStyle = Bitor(.ctl32_dwStyle, PBS_VERTICAL)
  40974.     Endif
  40975.     .ctl32_hMenu = 0
  40976.     .ctl32_hInstance = GetWindowLong(.ctl32_HostHwnd, GWL_HINSTANCE)
  40977.     .ctl32_lpParam = 0
  40978.     .ctl32_ControlHwnd = CreateWindowEx( ;
  40979.         .ctl32_dwExStyle, ;
  40980.         .ctl32_lpClassName, ;
  40981.         .ctl32_lpWindowName, ;
  40982.         .ctl32_dwStyle, ;
  40983.         .ctl32_Left, ;
  40984.         .ctl32_Top, ;
  40985.         .ctl32_Width, ;
  40986.         .ctl32_Height, ;
  40987.         .ctl32_hWndParent,  ;
  40988.         .ctl32_hMenu, ;
  40989.         .ctl32_hInstance, ;
  40990.         .ctl32_lpParam)
  40991.     *!* If the handle to the Control is 0 then we have a problem!
  40992.     If .ctl32_ControlHwnd = 0
  40993.         Messagebox([Error Creating window ] + .ctl32_lpClassName + [ Host:] + Transform(.ctl32_HostHwnd), 0 + 16, .ctl32_Name)
  40994.     Endif
  40995.     .ctl32_BindEvents()
  40996.     *!* Send Theme message to control:
  40997.     .ctl32_SetTheme()
  40998.     *!* Set Control Minimum and Maximum values:
  40999.     .Min = .Minimum
  41000.     .Max = .Maximum
  41001.     *!* Set Control Step Value
  41002.     .Step = .Step
  41003.     *!* Set Control Value to the Container Value property
  41004.     .Value = .Value
  41005.     *!* .ctl32_SetFlat() Already called by ctl32_SetTheme()
  41006.     .ctl32_SetBorder()
  41007.     *!* Set MarqueeAnimationSpeed Value
  41008.     .MarqueeAnimationSpeed = .MarqueeAnimationSpeed
  41009.     *!* Set Play state
  41010.     .Play = .Play
  41011.     *!* Set Colors
  41012.     .BackColor = .BackColor
  41013.     .BarColor = .BarColor
  41014.     *!* Set Visible state
  41015.     .Visible = .Visible
  41016.     *!* We finish Initialization State
  41017.     .ctl32_Creating = FALSE
  41018. Endwith
  41019. ENDPROC
  41020. PROCEDURE ctl32_destroy
  41021. *!*    Destroy Windows
  41022. If This.ctl32_ControlHwnd > 0 Then
  41023.     DestroyWindow(This.ctl32_ControlHwnd)
  41024. Endif
  41025. If This.ctl32_ProxyHwnd > 0 Then
  41026.     DestroyWindow(This.ctl32_ProxyHwnd)
  41027. Endif
  41028. ENDPROC
  41029. PROCEDURE ctl32_declaredlls
  41030. *!* 20060516 Commented out all unused API declarations
  41031. Local Array laDeclaredDlls(1,3)
  41032. Local lnLen
  41033. m.lnLen = Adlls(m.laDeclaredDlls)
  41034. If Ascan(m.laDeclaredDlls, "CallWindowProc", 1, m.lnLen , 2, 15) = 0
  41035.     Declare Integer CallWindowProc In win32api As CallWindowProc;
  41036.         INTEGER lpPrevWndFunc,;
  41037.         INTEGER HWnd,;
  41038.         INTEGER msg,;
  41039.         INTEGER wParam,;
  41040.         INTEGER Lparam
  41041. Endif
  41042. *!*    If Ascan(m.laDeclaredDlls, "ChildWindowFromPoint", 1, m.lnLen , 2, 15) = 0
  41043. *!*        Declare Integer ChildWindowFromPoint In win32api ;
  41044. *!*            INTEGER hWndParent,;
  41045. *!*            INTEGER px,;
  41046. *!*            INTEGER py
  41047. *!*    Endif
  41048. If Ascan(m.laDeclaredDlls, "CreateWindowEx", 1, m.lnLen , 2, 15) = 0
  41049.     Declare Integer CreateWindowEx In win32api As CreateWindowEx;
  41050.         INTEGER dwExStyle,;
  41051.         STRING lpClassName,;
  41052.         STRING lpWindowName,;
  41053.         INTEGER dwStyle,;
  41054.         INTEGER x,;
  41055.         INTEGER Y,;
  41056.         INTEGER nWidth,;
  41057.         INTEGER nHeight,;
  41058.         INTEGER hWndParent,;
  41059.         INTEGER hMenu,;
  41060.         INTEGER hInstance,;
  41061.         INTEGER lpParam
  41062. Endif
  41063. If Ascan(m.laDeclaredDlls, "DestroyWindow", 1, m.lnLen , 2, 15) = 0
  41064.     Declare Integer DestroyWindow In win32api As DestroyWindow;
  41065.         INTEGER HWnd
  41066. Endif
  41067. If Ascan(m.laDeclaredDlls, "GetClientRect", 1, m.lnLen , 2, 15) = 0
  41068.     Declare Integer GetClientRect In win32api As GetClientRect;
  41069.         INTEGER HWnd,;
  41070.         STRING @ lpRect
  41071. Endif
  41072. *!*    If Ascan(m.laDeclaredDlls, "GetSysColor", 1, m.lnLen , 2, 15) = 0
  41073. *!*        Declare Integer GetSysColor In win32api ;
  41074. *!*            INTEGER nIndex
  41075. *!*    Endif
  41076. If Ascan(m.laDeclaredDlls, "GetWindow", 1, m.lnLen , 2, 15) = 0
  41077.     Declare Integer GetWindow In user32 As GetWindow;
  41078.         INTEGER HWnd,;
  41079.         INTEGER wCmd
  41080. Endif
  41081. If Ascan(m.laDeclaredDlls, "GetWindowLong", 1, m.lnLen , 2, 15) = 0
  41082.     Declare Integer GetWindowLong In win32api As GetWindowLong;
  41083.         INTEGER HWnd, ;
  41084.         INTEGER nIndex
  41085. Endif
  41086. If Not Val(Os(3)) + Val(Os(4))/100 < 5.01 Then
  41087.     If Ascan(m.laDeclaredDlls, "IsThemeActive", 1, m.lnLen , 2, 15) = 0
  41088.         Declare Integer IsThemeActive In uxtheme.Dll As IsThemeActive
  41089.     Endif
  41090. Endif
  41091. *!*    If Ascan(m.laDeclaredDlls, "PostMessage", 1, m.lnLen , 2, 15) = 0
  41092. *!*        Declare Integer PostMessage In win32api ;
  41093. *!*            INTEGER HWnd,;
  41094. *!*            INTEGER Msg,;
  41095. *!*            INTEGER wParam,;
  41096. *!*            INTEGER Lparam
  41097. *!*    Endif
  41098. *!*    If Ascan(m.laDeclaredDlls, "RedrawWindow", 1, m.lnLen , 2, 15) = 0
  41099. *!*        Declare Integer RedrawWindow In win32api ;
  41100. *!*            INTEGER HWnd,;
  41101. *!*            STRING @ lprcUpdate,;
  41102. *!*            INTEGER hrgnUpdate,;
  41103. *!*            INTEGER fuRedraw
  41104. *!*    Endif
  41105. If Ascan(m.laDeclaredDlls, [SendMessageC], 1, m.lnLen , 2, 15) = 0
  41106.     Declare Integer SendMessage In win32api As SendMessageC ;
  41107.         INTEGER HWnd,;
  41108.         INTEGER Msg,;
  41109.         INTEGER wParam,;
  41110.         STRING @ Lparam
  41111. ENDIF
  41112. If Ascan(m.laDeclaredDlls, "SendMessageN", 1, m.lnLen , 2, 15) = 0
  41113.     Declare Integer SendMessage In win32api As SendMessageN;
  41114.         INTEGER HWnd,;
  41115.         INTEGER Msg,;
  41116.         INTEGER wParam,;
  41117.         INTEGER Lparam
  41118. Endif
  41119. If Ascan(m.laDeclaredDlls, "SetWindowLong", 1, m.lnLen , 2, 15) = 0
  41120.     Declare Integer SetWindowLong In win32api As SetWindowLong;
  41121.         INTEGER HWnd,;
  41122.         INTEGER nIndex,;
  41123.         INTEGER dwNewLong
  41124. Endif
  41125. If Ascan(m.laDeclaredDlls, "SetWindowPos", 1, m.lnLen , 2, 15) = 0
  41126.     Declare Integer SetWindowPos In win32api As SetWindowPos;
  41127.         INTEGER HWnd,;
  41128.         INTEGER hWndInsertAfter,;
  41129.         INTEGER x,;
  41130.         INTEGER Y,;
  41131.         INTEGER cx,;
  41132.         INTEGER cy,;
  41133.         INTEGER wFlags
  41134. Endif
  41135. If Val(Os(3)) + Val(Os(4))/100 >= 5.01 Then
  41136.     If Ascan(m.laDeclaredDlls, "SetWindowTheme", 1, m.lnLen , 2, 15) = 0
  41137.         Declare Integer SetWindowTheme In UxTheme As SetWindowTheme;
  41138.             INTEGER HWnd,;
  41139.             STRING pszSubAppName,;
  41140.             STRING pszSubIdList
  41141.     Endif
  41142. Endif
  41143. *#beautify keyword_nochange
  41144. If Ascan(m.laDeclaredDlls, "ShowWindow", 1, m.lnLen , 2, 15) = 0
  41145.     Declare Integer ShowWindow In win32api As ShowWindow ;
  41146.         INTEGER Hwnd,;
  41147.         INTEGER nCmdShow
  41148. ENDIF
  41149. If Ascan(m.laDeclaredDlls, "_ShowWindow", 1, m.lnLen , 2, 15) = 0
  41150.     Declare Integer ShowWindow In win32api As _ShowWindow ;
  41151.         INTEGER Hwnd,;
  41152.         INTEGER nCmdShow
  41153. ENDIF
  41154. *#beautify
  41155. If Ascan(m.laDeclaredDlls, "StrFormatByteSize", 1, m.lnLen , 2, 15) = 0
  41156.     Declare Integer StrFormatByteSize In shlwapi As StrFormatByteSize ;
  41157.         INTEGER qdw,;
  41158.         STRING @ pszBuf,;
  41159.         INTEGER uiBufSize
  41160. Endif
  41161. ENDPROC
  41162. PROCEDURE ctl32_bindevents
  41163. Bindevent(This, [Resize], This, [ctl32_Resize], 1)
  41164. Bindevent(This, [Top],    This, [ctl32_Resize], 1)
  41165. Bindevent(This, [Left],   This, [ctl32_Resize], 1)
  41166. Bindevent(This, [Value],  This, [ctl32_CreateCaption], 1)
  41167. *!*    ?This.ctl32_Hosthwnd, This.ctl32_Controlhwnd 
  41168. *!* Bindevent(This.ctl32_Controlhwnd  , WM_PAINT, This, [ctl32_WM_Paint], 1)
  41169. ENDPROC
  41170. PROCEDURE ctl32_unbindevents
  41171. If This.ctl32_ControlHwnd = 0 Then
  41172.   Return
  41173. Endif
  41174. Unbindevent(This, [RESIZE], This, [CTL32_RESIZE])
  41175. Unbindevent(This, [TOP], This, [CTL32_RESIZE])
  41176. Unbindevent(This, [LEFT], This, [CTL32_RESIZE])
  41177. ENDPROC
  41178. PROCEDURE marqueeanimationspeed_assign
  41179. Lparameters vNewVal
  41180. If Type("m.vNewVal") <> [N]
  41181.   Messagebox([Parameter must be Numeric: ] + Program(), 16)
  41182.   Return
  41183. Endif
  41184. This.MarqueeAnimationSpeed = m.vNewVal
  41185. If This.ctl32_ControlHwnd = 0 Then
  41186.     Return
  41187. ENDIF
  41188. SendMessageN(This.ctl32_ControlHwnd, PBM_SETMARQUEE, 1, This.MarqueeAnimationSpeed)
  41189. ENDPROC
  41190. PROCEDURE stepit
  41191. Lparameters lnVal
  41192. Local lnOldStep
  41193. *!* If no numeric parameter, use actual step value:
  41194. If Type("m.lnVal") <> "N"
  41195.     m.lnVal = This.Step
  41196. Endif
  41197. If This.Repeat = FALSE And This.Value + m.lnVal > This.Maximum Then
  41198.     This.Value = This.Maximum
  41199.     Return
  41200. Endif
  41201. If This.Repeat = FALSE And This.Value + m.lnVal < This.Minimum Then
  41202.     This.Value = This.Minimum
  41203.     Return
  41204. Endif
  41205. *!* If parameter is different from actual step value:
  41206. If m.lnVal <> This.Step Then
  41207.     This.ctl32_OldStep = This.Step
  41208.     This.Step = m.lnVal
  41209.     This.ctl32_OldStep = 0
  41210. Endif
  41211. If This.ctl32_ControlHwnd <> 0 Then
  41212.     *!* Send StepIt message:
  41213.     This.Value = This.Value + This.Step
  41214.     *SendMessageN(This.ctl32_ControlHwnd, PBM_STEPIT, 0, 0)
  41215. Endif
  41216. *!* Reset Step Value if old value saved:
  41217. If This.ctl32_OldStep <> 0 Then
  41218.     This.Step = This.ctl32_OldStep
  41219. Endif
  41220. *!* Update Container Value Property with the position property of Control,
  41221. *!* forcing Access and Assign Events to fire:
  41222. *!* This.Value = This.Value
  41223. ENDPROC
  41224. PROCEDURE hwnd_access
  41225. *!* Returns the HWnd of the Control
  41226. RETURN This.ctl32_ControlHwnd
  41227. ENDPROC
  41228. PROCEDURE value_access
  41229. Local nValue
  41230. *!* If setting up Control, use Value of Container, not Value of Control
  41231. If This.ctl32_Creating = TRUE OR This.ctl32_ControlHWnd = 0 Then
  41232.   m.nValue = This.Value
  41233.   *!* Ask Control for Value to return:
  41234.   m.nValue = SendMessageN(This.ctl32_ControlHwnd, PBM_GETPOS, 0, 0)
  41235. Endif
  41236. Return m.nValue
  41237. ENDPROC
  41238. PROCEDURE value_assign
  41239. Lparameters vNewVal
  41240. If Type("m.vNewVal") <> [N]
  41241.   Messagebox([Parameter must be Numeric: ] + Program(), 16)
  41242.   Return
  41243. Endif
  41244. If This.Repeat = FALSE
  41245.   If m.vNewVal > This.Maximum Then
  41246.     Return
  41247.   Endif
  41248.   If m.vNewVal < This.Minimum Then
  41249.     Return
  41250.   Endif
  41251.   If m.vNewVal > This.Maximum Then
  41252.     m.vNewVal = This.Minimum
  41253.   Endif
  41254.   If m.vNewVal < This.Minimum Then
  41255.     m.vNewVal = This.Maximum
  41256.   Endif
  41257. Endif
  41258. This.Value = m.vNewVal
  41259. If This.ctl32_ControlHWnd <> 0 Then
  41260.   SendMessageN(This.ctl32_ControlHwnd, PBM_SETPOS, m.vNewVal, 0)
  41261. Endif
  41262. ENDPROC
  41263. PROCEDURE percent_access
  41264. Return Int(100 * (This.Value - This.Minimum) / (Abs(This.Maximum - This.Minimum)))
  41265. ENDPROC
  41266. PROCEDURE smooth_assign
  41267. Lparameters vNewVal
  41268. If Type("m.vNewVal") = [N] Then
  41269.     If m.vNewVal = 0 Then
  41270.         m.vNewVal = FALSE
  41271.     Else
  41272.         m.vNewVal = TRUE
  41273.     Endif
  41274. Endif
  41275. If Type("m.vNewVal") <> [L] Then
  41276.     Messagebox([Parameter must be Logical: ] + Program(), 16)
  41277.     Return
  41278. Endif
  41279. If This.Smooth = m.vNewVal Then
  41280.     Return
  41281. Endif
  41282. This.Smooth = m.vNewVal
  41283. *!* Smooth change needs to recreate Control
  41284. If This.ctl32_ControlHwnd <> 0 Then
  41285.     This.ctl32_destroy()
  41286.     This.ctl32_Create()
  41287. Endif
  41288. ENDPROC
  41289. PROCEDURE backcolor_assign
  41290. Lparameters vNewVal
  41291. If Type("m.vNewVal") <> [N]
  41292.     Messagebox([Parameter for BackColor must be Numeric])
  41293. Endif
  41294. If m.vNewVal > 16777215 Then
  41295.     m.vNewVal = -1
  41296. Endif
  41297. This.ctl32_BackColor = m.vNewVal
  41298. This.BackColor= m.vNewVal
  41299. If This.ctl32_ControlHwnd = 0 Then
  41300.     Return
  41301. Endif
  41302. If This.ctl32_BackColor = -1 Then
  41303.     SendMessageN(This.ctl32_ControlHwnd, PBM_SETBKCOLOR, 0, CLR_DEFAULT)
  41304.     SendMessageN(This.ctl32_ControlHwnd, PBM_SETBKCOLOR, 0, This.BackColor)
  41305. Endif
  41306. Return
  41307. ENDPROC
  41308. PROCEDURE barcolor_assign
  41309. Lparameters vNewVal
  41310. If Type("m.vNewVal") <> [N]
  41311.     Messagebox([Parameter for BarColor must be Numeric])
  41312. Endif
  41313. If m.vNewVal > 16777215 Then
  41314.     m.vNewVal = -1
  41315. Endif
  41316. This.BarColor = m.vNewVal
  41317. If This.ctl32_ControlHwnd = 0 Then
  41318.     Return
  41319. Endif
  41320. If This.BarColor = -1 Then
  41321.     SendMessageN(This.ctl32_ControlHwnd, PBM_SETBARCOLOR, 0, CLR_DEFAULT)
  41322.     SendMessageN(This.ctl32_ControlHwnd, PBM_SETBARCOLOR, 0, This.BarColor)
  41323. Endif
  41324. Return
  41325. ENDPROC
  41326. PROCEDURE play_assign
  41327. Lparameters vNewVal
  41328. If Type("m.vNewVal") = [N] Then
  41329.   If m.vNewVal = 0 Then
  41330.     m.vNewVal = FALSE
  41331.   Else
  41332.     m.vNewVal = TRUE
  41333.   Endif
  41334. Endif
  41335. If Type("m.vNewVal") <> [L] Then
  41336.   Messagebox([Parameter must be Logical: ] + Program(), 16)
  41337.   Return
  41338. Endif
  41339. If m.vNewVal = TRUE And This.Marquee = TRUE Then
  41340.   Return
  41341. Endif
  41342. This.Play = m.vNewVal
  41343. If This.Play = TRUE Then
  41344.   This.Value = This.Minimum
  41345. Endif
  41346. This.tmrControlTimer.Enabled = This.Play
  41347. ENDPROC
  41348. PROCEDURE scrolling_assign
  41349. Lparameters vNewVal
  41350. If Type("m.vNewVal") <> [N]
  41351.   Messagebox([Parameter must be Numeric: ] + Program(), 16)
  41352.   Return
  41353. Endif
  41354. This.Srolling = m.vNewVal
  41355. If This.Scrolling = 0 Then
  41356.   This.Smooth = FALSE
  41357.   This.Smooth = TRUE
  41358. Endif
  41359. ENDPROC
  41360. PROCEDURE percent_assign
  41361. Lparameters vNewVal
  41362. Return
  41363. ENDPROC
  41364. PROCEDURE max_assign
  41365. Lparameters vNewVal
  41366. If Type("m.vNewVal") <> [N]
  41367.   Messagebox([Parameter must be Numeric: ] + Program(), 16)
  41368.   Return
  41369. Endif
  41370. This.Max = m.vNewVal
  41371. This.Maximum = m.vNewVal
  41372. ENDPROC
  41373. PROCEDURE min_assign
  41374. LPARAMETERS vNewVal
  41375. If Type("m.vNewVal") <> [N]
  41376.   Messagebox([Parameter must be Numeric: ] + Program(), 16)
  41377.   Return
  41378. Endif
  41379. This.Min = m.vNewVal
  41380. This.Minimum = m.vNewVal
  41381. ENDPROC
  41382. PROCEDURE hwnd_assign
  41383. Lparameters vNewVal
  41384. Return
  41385. ENDPROC
  41386. PROCEDURE reset
  41387. This.Value = This.Minimum
  41388. ENDPROC
  41389. PROCEDURE orientation_assign
  41390. Lparameters vNewVal
  41391. If Type("m.vNewVal") <> [N]
  41392.   Messagebox([Parameter must be Numeric: ] + Program(), 16)
  41393.   Return
  41394. Endif
  41395. This.Orientation = m.vNewVal
  41396. If This.Orientation = 0 Then
  41397.   This.Vertical = FALSE
  41398.   This.Vertical = TRUE
  41399. Endif
  41400. ENDPROC
  41401. PROCEDURE vertical_assign
  41402. Lparameters vNewVal
  41403. If Type("m.vNewVal") = [N] Then
  41404.   If m.vNewVal = 0 Then
  41405.     m.vNewVal = FALSE
  41406.   Else
  41407.     m.vNewVal = TRUE
  41408.   Endif
  41409. ENDIF
  41410. If Type("m.vNewVal") <> [L] Then
  41411.   Messagebox([Parameter must be Logical: ] + Program(), 16)
  41412.   Return
  41413. Endif
  41414. This.Vertical = m.vNewVal
  41415. If This.Vertical = TRUE Then
  41416.   This.Orientation = 1
  41417.   This.Orientation = 0
  41418. Endif
  41419. *!* Vertical change needs to recreate Control
  41420. If This.ctl32_ControlHwnd <> 0 Then
  41421.   This.ctl32_destroy()
  41422.   This.ctl32_Create()
  41423. Endif
  41424. ENDPROC
  41425. PROCEDURE bordercolor_assign
  41426. LPARAMETERS vNewVal
  41427. If m.vNewVal = -1 Then
  41428.   m.vNewVal = RGB(0,0,0)
  41429. Endif
  41430. THIS.BorderColor = m.vNewVal
  41431. ENDPROC
  41432. PROCEDURE repeat_assign
  41433. LPARAMETERS vNewVal
  41434. If Type("m.vNewVal") = [N] Then
  41435.   If m.vNewVal = 0 Then
  41436.     m.vNewVal = FALSE
  41437.   Else
  41438.     m.vNewVal = TRUE
  41439.   Endif
  41440. ENDIF
  41441. If Type("m.vNewVal") <> [L] Then
  41442.   Messagebox([Parameter must be Logical: ] + Program(), 16)
  41443.   Return
  41444. Endif
  41445. THIS.Repeat = m.vNewVal
  41446. ENDPROC
  41447. PROCEDURE width_assign
  41448. Lparameters vNewVal
  41449. *To do: Modify this routine for the Assign method
  41450. This.Width = m.vNewVal
  41451. With This
  41452.     If .SizeAdjust = TRUE Then
  41453.         If .Orientation = 0 Or .Vertical = FALSE Then
  41454.             .Width = Round((.Width - 5)/8,0) * 8 + 5
  41455.         Endif
  41456.     Endif
  41457. Endwith
  41458. ENDPROC
  41459. PROCEDURE height_assign
  41460. Lparameters vNewVal
  41461. This.Height = m.vNewVal
  41462. With This
  41463.     If .SizeAdjust = TRUE Then
  41464.         If .Orientation = 1 Or .Vertical = TRUE Then
  41465.             .Height = Round((.Height - 8)/8,0) * 8 + 5
  41466.         Endif
  41467.     Endif
  41468. Endwith
  41469. ENDPROC
  41470. PROCEDURE uisxp
  41471. *!*    Check OS Version and return TRUE if XP or greater - 5.01 is Windows XP
  41472. LOCAL lcXP
  41473. m.lcXP = IIF(Val(Os(3)) + Val(Os(4))/100 < 5.01, FALSE, TRUE)
  41474. Return m.lcXP
  41475. ENDPROC
  41476. PROCEDURE themes_assign
  41477. Lparameters vNewVal
  41478. If Type("m.vNewVal") = [N] Then
  41479.     If m.vNewVal = 0 Then
  41480.         m.vNewVal = FALSE
  41481.     Else
  41482.         m.vNewVal = TRUE
  41483.     Endif
  41484. Endif
  41485. If Type("m.vNewVal") <> [L] Then
  41486.     Messagebox([Parameter must be Logical: ] + Program(), 16)
  41487.     Return
  41488. Endif
  41489. This.Themes = m.vNewVal
  41490. This.ctl32_SetTheme()
  41491. ENDPROC
  41492. PROCEDURE flat_assign
  41493. Lparameters vNewVal
  41494. This.Flat = m.vNewVal
  41495. This.ctl32_SetFlat()
  41496. ENDPROC
  41497. PROCEDURE border_assign
  41498. Lparameters vNewVal
  41499. This.Border = m.vNewVal
  41500. If This.ctl32_Creating = TRUE Then
  41501.     Return
  41502. Endif
  41503. This.ctl32_SetBorder()
  41504. ENDPROC
  41505. PROCEDURE ctl32_settheme
  41506. If This.ctl32_ControlHwnd = 0 Then
  41507.     Return
  41508. Endif
  41509. Local llThemes
  41510. m.llThemes = This.uIsXP() And isThemeActive() = 1 And _Screen.Themes And Thisform.Themes  And This.Themes
  41511. If This.uIsXP() = TRUE
  41512.     If m.llThemes = TRUE Then
  41513.         SetWindowTheme(This.ctl32_ControlHwnd, Null, Null)
  41514.     Else
  41515.         SetWindowTheme(This.ctl32_ControlHwnd, Null, "")
  41516.         *This.ctl32_SetBackColor()
  41517.     Endif
  41518.     This.ctl32_SetFlat()
  41519. Endif
  41520. ENDPROC
  41521. PROCEDURE ctl32_setborder
  41522. Local lnExStyle
  41523. Local llThemes
  41524. m.llThemes = This.uIsXP() And isThemeActive() = 1 And _Screen.Themes And Thisform.Themes  And This.Themes
  41525. With This
  41526.     If .Border = TRUE And m.llThemes = FALSE Then
  41527.         m.lnExStyle = GetWindowLong(.ctl32_ControlHwnd, GWL_STYLE)
  41528.         m.lnExStyle = Bitset(m.lnExStyle, WS_BORDER_BIT)
  41529.         SetWindowLong(.ctl32_ControlHwnd, GWL_STYLE, m.lnExStyle)
  41530.     Else
  41531.         m.lnExStyle = GetWindowLong(.ctl32_ControlHwnd, GWL_STYLE)
  41532.         m.lnExStyle = BitClear(m.lnExStyle, WS_BORDER_BIT)
  41533.         SetWindowLong(.ctl32_ControlHwnd, GWL_STYLE, m.lnExStyle)
  41534.     Endif
  41535.     *!* Refresh control window so frame change gets redrawn
  41536.     SetWindowPos(.ctl32_ControlHwnd, ;
  41537.         HWND_TOP, ;
  41538.         0, ;
  41539.         0, ;
  41540.         0, ;
  41541.         0, ;
  41542.         BITOR(SWP_NOMOVE, SWP_NOSIZE, SWP_NOZORDER, SWP_FRAMECHANGED))
  41543. Endwith
  41544. ENDPROC
  41545. PROCEDURE ctl32_createcaption
  41546. *!* Bindevent(This, [Value],  This, [ctl32_CreateCaption], 1)
  41547. If Empty(This.Text) Then
  41548.     This.Caption = []
  41549.     Return
  41550. Endif
  41551. Local ;
  41552.     lcBVal, ;
  41553.     lcNVal, ;
  41554.     lcPVal, ;
  41555.     lcBMax, ;
  41556.     lcNMax, ;
  41557.     lcPMax, ;
  41558.     lcBMin, ;
  41559.     lcNMin, ;
  41560.     lcPMin, ;
  41561.     lcCaption
  41562. m.lcNVal = Transform(This.Value,   "999,999,999,999")
  41563. m.lcNMax = Transform(This.Maximum, "999,999,999,999")
  41564. m.lcNMin = Transform(This.Minimum, "999,999,999,999")
  41565. m.lcPVal = Transform(This.Percent, "999%")
  41566. m.lcPMax = "100%"
  41567. m.lcPMin = "0%"
  41568. m.lcBVal = This.uFormatAsBytes(This.Value)
  41569. m.lcBMax = This.uFormatAsBytes(This.Maximum)
  41570. m.lcBMin = This.uFormatAsBytes(This.Minimum)
  41571. m.lcCaption = This.Text
  41572. m.lcCaption = Strtran(m.lcCaption , "<<ValueB>>",   Alltrim(m.lcBVal), 1, 10, 1)
  41573. m.lcCaption = Strtran(m.lcCaption , "<<ValueN>>",   Alltrim(m.lcNVal), 1, 10, 1)
  41574. m.lcCaption = Strtran(m.lcCaption , "<<ValueP>>",   Alltrim(m.lcPVal), 1, 10, 1)
  41575. m.lcCaption = Strtran(m.lcCaption , "<<MaximumB>>", Alltrim(m.lcBMax), 1, 10, 1)
  41576. m.lcCaption = Strtran(m.lcCaption , "<<MaximumN>>", Alltrim(m.lcNMax), 1, 10, 1)
  41577. m.lcCaption = Strtran(m.lcCaption , "<<MaximumP>>", Alltrim(m.lcPMax), 1, 10, 1)
  41578. m.lcCaption = Strtran(m.lcCaption , "<<MinimumB>>", Alltrim(m.lcBMin), 1, 10, 1)
  41579. m.lcCaption = Strtran(m.lcCaption , "<<MinimumN>>", Alltrim(m.lcNMin), 1, 10, 1)
  41580. m.lcCaption = Strtran(m.lcCaption , "<<MinimumP>>", Alltrim(m.lcPMin), 1, 10, 1)
  41581. This.Caption = lcCaption
  41582. ENDPROC
  41583. PROCEDURE uformatasbytes
  41584. Lparameters qdw
  41585. Local pszBuf
  41586. m.pszBuf = Replicate(Chr(0), 254)
  41587. StrFormatByteSize(m.qdw, @m.pszBuf, Len(m.pszBuf))
  41588. m.pszBuf = Alltrim(m.pszBuf)
  41589. * Remove chr(0)
  41590. m.pszBuf = Left(m.pszBuf,Len(m.pszBuf)-1)
  41591. Return Alltrim(m.pszBuf)
  41592. ENDPROC
  41593. PROCEDURE ustrtolong
  41594. *!*    This function converts a four bytes long String to a Long
  41595. Lparameters tcLongStr
  41596. Local lnx, lnRetval As Integer
  41597. *!* Bug Fixed - Doru Constantin
  41598. If Version(5) >= 900 Then
  41599.     m.lnRetval = CToBin(m.tcLongStr,[4RS])
  41600.     m.lnRetval = 0
  41601.     For m.lnx = 0 To 24 Step 8
  41602.         m.lnRetval = m.lnRetval + (Asc(m.tcLongStr) * (2^m.lnx))
  41603.         m.tcLongStr = Right(m.tcLongStr, Len(m.tcLongStr) - 1)
  41604.     Next
  41605. Endif
  41606. Return m.lnRetval
  41607. ENDPROC
  41608. PROCEDURE ctl32_wm_paint
  41609. Lparameters tnHWnd As Integer, tnMsg As Integer, tnwParam As Integer, tnLparam As Integer
  41610. If tnHWnd <> _Screen.HWnd Then
  41611.     ?Transform(tnHWnd,"@0")
  41612. Endif
  41613. With This
  41614.     *!*        If tnMsg = WM_PAINT Then
  41615.     *!*            .CTL32_DrawBorder()
  41616.     *!*        Endif
  41617.     *!*    *SetWindowLong(THIS.ctl32_ControlHwnd, GWL_WNDPROC, This.ctl32_pbProc)
  41618.     m.lnResult  = CallWindowProc(This.ctl32_OldProc, tnHWnd, tnMsg, tnwParam, tnLparam)
  41619.     *!*    *SetWindowLong(THIS.ctl32_ControlHwnd, GWL_WNDPROC, This.ctl32_OldProc)
  41620.     *!*    *This.ctl32_pbProc = SetWindowLong(THIS.ctl32_ControlHwnd, GWL_WNDPROC, This.ctl32_OldProc)
  41621. Endwith
  41622. Return m.lnResult
  41623. ENDPROC
  41624. PROCEDURE ctl32_setflat
  41625. If This.ctl32_ControlHwnd = 0 Then
  41626.     Return
  41627. Endif
  41628. Local lnExStyle
  41629. Local llThemes
  41630. m.llThemes = This.uIsXP() And isThemeActive() = 1 And _Screen.Themes And Thisform.Themes  And This.Themes
  41631. With This
  41632.     If .Flat = TRUE Or m.llThemes = TRUE Then
  41633.         m.lnExStyle = GetWindowLong(.ctl32_ControlHwnd, GWL_EXSTYLE)
  41634.         m.lnExStyle = Bitclear(m.lnExStyle, WS_EX_STATICEDGE_BIT) && WS_EX_STATICEDGE
  41635.         SetWindowLong(.ctl32_ControlHwnd, GWL_EXSTYLE, m.lnExStyle)
  41636.     Else
  41637.         m.lnExStyle = GetWindowLong(.ctl32_ControlHwnd, GWL_EXSTYLE)
  41638.         m.lnExStyle = Bitset(m.lnExStyle, WS_EX_STATICEDGE_BIT)      && WS_EX_STATICEDGE
  41639.         SetWindowLong(.ctl32_ControlHwnd, GWL_EXSTYLE, m.lnExStyle)
  41640.     Endif
  41641.     *!* Refresh control window so frame change gets redrawn
  41642.     SetWindowPos(.ctl32_ControlHwnd, ;
  41643.         HWND_TOP, ;
  41644.         0, ;
  41645.         0, ;
  41646.         0, ;
  41647.         0, ;
  41648.         BITOR(SWP_NOMOVE, SWP_NOSIZE, SWP_NOZORDER, SWP_FRAMECHANGED))
  41649. Endwith
  41650. ENDPROC
  41651. PROCEDURE righttoleft_assign
  41652. Lparameters vNewVal
  41653. Local lnExStyle
  41654. If Type("m.vNewVal") = [N] Then
  41655.     If m.vNewVal = 0 Then
  41656.         m.vNewVal = FALSE
  41657.     Else
  41658.         m.vNewVal = TRUE
  41659.     Endif
  41660. Endif
  41661. If Type("m.vNewVal") <> [L] Then
  41662.     Messagebox([Parameter must be Logical: ] + Program(), 16)
  41663.     Return
  41664. Endif
  41665. This.RightToLeft = m.vNewVal
  41666. This.ctl32_SetRightToLeft()
  41667. This.ctl32_SetRightToLeft()
  41668. ENDPROC
  41669. PROCEDURE ctl32_setrighttoleft
  41670. With This
  41671.     If .RightToLeft = FALSE Then
  41672.         m.lnExStyle = GetWindowLong(.ctl32_ControlHwnd, GWL_EXSTYLE)
  41673.         m.lnExStyle = Bitclear(m.lnExStyle, WS_EX_LAYOUTRTL_BIT) && WS_EX_LAYOUTRTL
  41674.         SetWindowLong(.ctl32_ControlHwnd, GWL_EXSTYLE, m.lnExStyle)
  41675.     Else
  41676.         m.lnExStyle = GetWindowLong(.ctl32_ControlHwnd, GWL_EXSTYLE)
  41677.         m.lnExStyle = Bitset(m.lnExStyle, WS_EX_LAYOUTRTL_BIT) && WS_EX_LAYOUTRTL
  41678.         SetWindowLong(.ctl32_ControlHwnd, GWL_EXSTYLE, m.lnExStyle)
  41679.     Endif
  41680. Endwith
  41681. ENDPROC
  41682. PROCEDURE marqueespeed_access
  41683. Return This.MarqueeAnimationSpeed
  41684. ENDPROC
  41685. PROCEDURE marqueespeed_assign
  41686. LPARAMETERS vNewVal
  41687. THIS.marqueespeed = m.vNewVal
  41688. This.MarqueeAnimationSpeed = m.vNewVal
  41689. ENDPROC
  41690. PROCEDURE Destroy
  41691. This.Ctl32_Destroy()
  41692. ENDPROC
  41693. PROCEDURE Init
  41694. *!*    Ctl32_ProgressBar
  41695. *!*    Control creado por Carlos Alloatti - calloatti@gmail.com
  41696. *!*    Utiliza funciones API de Windows
  41697. *!*    Probado con Windows XP, 98 y VFP 9
  41698. *!*    Versi
  41699. n  1.00 - 2005-12-01
  41700. *!*    Versi
  41701. n  2.00 - 2006-04-01
  41702. *!*    Versi
  41703. n  3.00 - 2006-05-01
  41704. *!* This parameter is passed from host ctl32 control
  41705. Lparameters tnParentHwnd
  41706. This.lblControlNameH.Caption = ""
  41707. This.lblControlNameV.Caption = ""
  41708. This.BackStyle = 0
  41709. With This
  41710.     *!* Check if object instantiated with a -1 parameter, that means no Init yet
  41711.     If Pcount() > 0 And m.tnParentHwnd = -1 Then
  41712.         Return
  41713.     Endif
  41714.     If Type([ThisForm]) <> [O] Then
  41715.         Messagebox([USAGE: _Screen.Newobject("oProgressBar","ctl32_progressbar","ctl32_progressbar.vcx")],16)
  41716.         Return
  41717.     Endif
  41718.     .ctl32_declaredlls()
  41719.     *!* Save VFP Proc
  41720.     .ctl32_OldProc = GetWindowLong(_vfp.HWnd, GWL_WNDPROC)
  41721.     *!* Determine the type of container the StaturBar is in:
  41722.     *!*    CTL32_FORMTYPE_DEFAULT              0
  41723.     *!*    CTL32_FORMTYPE_TOPLEVEL      1
  41724.     *!*    CTL32_FORMTYPE_SCREEN            2
  41725.     .ctl32_FormType = CTL32_FORMTYPE_DEFAULT
  41726.     *!*    If container is a TLF, must have ShowWindow = 2
  41727.     If Thisform.ShowWindow = SHOWWINDOW_ASTOPLEVELFORM Then
  41728.         This.ctl32_FormType = CTL32_FORMTYPE_TOPLEVEL
  41729.     Endif
  41730.     *!*    If ThisForm.Name equals the _Screen.Name, then container is _Screen
  41731.     If Thisform.Name = _Screen.Name Then
  41732.         This.ctl32_FormType = CTL32_FORMTYPE_SCREEN
  41733.     Endif
  41734.     If Pcount() > 0 Then
  41735.         .ctl32_HostHwnd = m.tnParentHwnd
  41736.         *!*    Just in case its geting recreated by a parent ctl32_statusbar
  41737.         This.ctl32_Destroy()
  41738.     Else
  41739.         If .ctl32_FormType = CTL32_FORMTYPE_TOPLEVEL Then    && TLF
  41740.             *!* Get Hwnd of client window of Top Level Form //Craig Boyd//
  41741.             If Version(5) >= 900 Then
  41742.                 .ctl32_HostHwnd = Sys(2327, Sys(2325, Sys(2326, Thisform.HWnd)))
  41743.             Else
  41744.                 .ctl32_HostHwnd = GetWindow(Thisform.HWnd, GW_CHILD)
  41745.             Endif
  41746.         Else
  41747.             .ctl32_HostHwnd = Thisform.HWnd
  41748.         Endif
  41749.     Endif
  41750.     If .Parent.BaseClass <> "Form" And .ctl32_HostHwnd = 0 Then
  41751.         Return
  41752.     Endif
  41753.     If .SizeAdjust = TRUE Then
  41754.         If .Orientation = 1 Or .Vertical = TRUE Then
  41755.             .Height = Round((.Height - 8)/8,0) * 8 + 5
  41756.         Else
  41757.             .Width = Round((.Width - 5)/8,0) * 8 + 5
  41758.         Endif
  41759.     Endif
  41760.     .ctl32_Create()
  41761. Endwith
  41762. ENDPROC
  41763. GWidth = 301
  41764. Height = 18
  41765. ForeColor = 0,0,0
  41766. ctl32_controlhwnd = 0
  41767. ctl32_dwexstyle = 0
  41768. ctl32_dwstyle = 0
  41769. ctl32_hosthwnd = 0
  41770. ctl32_hinstance = 0
  41771. minimum = 0
  41772. maximum = 100
  41773. step = 1
  41774. ctl32_name = ctl32_progressbar
  41775. marqueeanimationspeed = 100
  41776. hwnd = 0
  41777. value = 0
  41778. percent = 0
  41779. parenthwnd = 0
  41780. ctl32_hmenu = 0
  41781. ctl32_lpparam = 0
  41782. ctl32_lpwindowname = 0
  41783. barcolor = -1
  41784. max = 0
  41785. min = 0
  41786. scrolling = 0
  41787. orientation = 0
  41788. ctl32_oldstep = 0
  41789. themes = .T.
  41790. ctl32_version = 3.0
  41791. ctl32_proxyhwnd = 0
  41792. flat = .F.
  41793. ctl32_left = 0
  41794. ctl32_top = 0
  41795. ctl32_width = 0
  41796. ctl32_height = 0
  41797. builderx = (home() + "wizards\ctl32_progressbar_builder.app")
  41798. ctl32_backcolor = 0
  41799. border = .F.
  41800. ctl32_formtype = 0
  41801. ctl32_hwndparent = 0
  41802. text = 
  41803. caption = 
  41804. ctl32_oldproc = 
  41805. ctl32_pbproc = 
  41806. righttoleft = .F.
  41807. marqueespeed = 100
  41808. Name = "ctl32_progressbar"
  41809. control
  41810. This.LabelStyleb
  41811. LabelStyle Property must be Character: Ct
  41812. .Value
  41813. 999,999,999,999_
  41814. .Maximum
  41815. 999,999,999,999_
  41816. .Minimum
  41817. 999,999,999,999_
  41818. .Percent
  41819. 999%_
  41820. .Value
  41821. .Maximum
  41822. .Minimum
  41823. .Value
  41824. 999,999,999,999_
  41825. .Maximum
  41826. 999,999,999,999_
  41827. .Minimum
  41828. 999,999,999,999_
  41829. <<Value>>C
  41830. <<Maximum>>C
  41831. <<Minimum>>C
  41832. BUDDYCONTROL
  41833. LCVALUE    
  41834. LCMAXIMUM    
  41835. LCCAPTION
  41836. LABELSTYLE    
  41837. LCMINIMUM
  41838. UFORMATASBYTES
  41839. LABELCAPTION
  41840. CAPTION
  41841. REFRESH
  41842. StrFormatByteSize
  41843. StrFormatByteSize
  41844. shlwapiQ
  41845. StrFormatByteSize
  41846. LADECLAREDDLLS
  41847. LNLEN
  41848. STRFORMATBYTESIZE
  41849. SHLWAPI}
  41850. PSZBUF
  41851. STRFORMATBYTESIZE1
  41852. CAPTION
  41853. CTL32_DECLARES
  41854. CTL32_BIND
  41855. CTL32_UPDATE
  41856. ThisForm.
  41857. VALUE
  41858. CTL32_UPDATE
  41859. BUDDYCONTROLE
  41860. VALUE
  41861. CTL32_UPDATE
  41862. BUDDYCONTROL
  41863. CTL32_INIT
  41864. CTL32_UNBIND
  41865. ctl32_update,
  41866. ctl32_declares
  41867. uformatasbytes
  41868. ctl32_init
  41869. ctl32_bind
  41870. ctl32_unbind
  41871. Init    
  41872. Destroy,
  41873. TALKv
  41874. ClsCPZero
  41875. SET TALK &mtalk
  41876. FNAME
  41877. CPBYTE
  41878. MTALK
  41879. SET_CPW
  41880. error_array[C
  41881. The table could not be opened.
  41882. Invalid code page specified.
  41883. Not a FoxPro table.
  41884. cpnums[C
  41885. ADDPROPERTY
  41886. ERROR_ARRAY
  41887. CPNUMS
  41888. DBF|SCX|VCX|FRX|LBX|MNX
  41889. Table:
  41890. FNAME
  41891. CPBYTE
  41892. FP_IN
  41893. FOUND_ONE
  41894. OUTBYTE
  41895. CPNUMS
  41896. ERRORMSG
  41897. ERROR_ARRAY
  41898. INIT0
  41899. SET_CP
  41900. DESTROY
  41901. errormsg
  41902. MOLDTALK    
  41903. ClsCPZero
  41904. session
  41905. PLATFORM
  41906. UNIQUEID
  41907. TIMESTAMP
  41908. CLASS
  41909. CLASSLOC
  41910. BASECLASS
  41911. OBJNAME
  41912. PARENT
  41913. PROPERTIES
  41914. PROTECTED
  41915. METHODS
  41916. OBJCODE
  41917. RESERVED1
  41918. RESERVED2
  41919. RESERVED3
  41920. RESERVED4
  41921. RESERVED5
  41922. RESERVED6
  41923. RESERVED7
  41924. RESERVED8
  41925.  COMMENT Class               
  41926.  WINDOWS _1DH1108MW1027325085Z
  41927.  COMMENT RESERVED            
  41928.  WINDOWS _17X12M0M51027478705F
  41929.  WINDOWS _17X136SEA1027478705`
  41930.  WINDOWS _17X136SEQ 879329379
  41931.  WINDOWS _17X136SER1027478705U
  41932.  WINDOWS _17X136SES1027344043
  41933.  WINDOWS _17X136SET1027344043"    
  41934.  COMMENT RESERVED            
  41935.  WINDOWS _11R0TYA321027478809
  41936.  COMMENT RESERVED            
  41937.  WINDOWS _1DH112XF91061424829H
  41938.  COMMENT RESERVED            
  41939. VERSION =   3.00
  41940. pr_proofshape
  41941. Pixels
  41942. Class
  41943. shape
  41944. pr_proofshape
  41945. <pageno Provides the current page number for report output.
  41946. shape
  41947. pr_proofsheet
  41948. ;Height = 110
  41949. Width = 85
  41950. pageno = 0
  41951. Name = "proofshape"
  41952. Pixels
  41953. Class
  41954. pr_foxyhelper.vcx
  41955. "Tahoma, 0, 8, 5, 13, 11, 23, 2, 0
  41956. pr_baseform
  41957. frxpreview.h
  41958. Pixels
  41959. Class
  41960. pr_baseform
  41961. iscreendpi
  41962. *checkforlargefonts Called in the Init() to set font attributes if Large Fonts are detected.
  41963. Height = 238
  41964. Width = 367
  41965. DoCreate = .T.
  41966. AutoCenter = .T.
  41967. Caption = "Form"
  41968. FontName = "Tahoma"
  41969. FontSize = 8
  41970. Icon = 
  41971. screendpi = 96
  41972. Name = "pr_baseform"
  41973. !Arial, 0, 9, 5, 15, 12, 32, 3, 0
  41974. shape
  41975. shape
  41976. pr_gotopageform
  41977. spinner
  41978. CTahoma, 0, 8, 5, 13, 11, 23, 2, 0
  41979. Arial, 0, 9, 5, 15, 12, 32, 3, 0
  41980. pr_gotopageform
  41981. frxpreview.h
  41982. Pixels
  41983. Class
  41984. pr_baseform
  41985. pr_gotopageform
  41986. .PROCEDURE Click
  41987. THIS.Parent.Hide()
  41988. ENDPROC
  41989. pr_gotopageform
  41990.     cmdCancel
  41991. fHeight = 21
  41992. InputMask = "9999"
  41993. Left = 64
  41994. Top = 36
  41995. Width = 126
  41996. ZOrderSet = 1
  41997. Name = "spnPageno"
  41998. commandbutton
  41999. gTop = 15
  42000. Left = 12
  42001. Height = 66
  42002. Width = 224
  42003. BackStyle = 0
  42004. ZOrderSet = 0
  42005. Style = 3
  42006. Name = "Shp1"
  42007. lblCaption
  42008. pr_gotopageform
  42009. commandbutton
  42010. |pageno Provides the current page number for report output.
  42011. pagetotal Provides a PageTotal for report output.
  42012. oparentform
  42013. spinner
  42014. tTop = 47
  42015. Left = 248
  42016. Height = 27
  42017. Width = 84
  42018. Cancel = .T.
  42019. Caption = "Cancel"
  42020. ZOrderSet = 4
  42021. Name = "cmdCancel"
  42022. commandbutton
  42023. commandbutton
  42024. pr_gotopageform
  42025. cmdOK
  42026. label
  42027. pr_proofsheet
  42028. mTop = 15
  42029. Left = 248
  42030. Height = 27
  42031. Width = 84
  42032. Caption = "OK"
  42033. Default = .T.
  42034. ZOrderSet = 3
  42035. Name = "cmdOK"
  42036.     spnPageno
  42037. ]Caption = " Go to page "
  42038. Left = 20
  42039. Top = 8
  42040. ZOrderSet = 2
  42041. Style = 3
  42042. Name = "lblCaption"
  42043. pr_gotopageform
  42044. PARENT
  42045. Click,
  42046. label
  42047. 5currentpage
  42048. reportlistener
  42049. *execute 
  42050. *setreport 
  42051. `PROCEDURE Click
  42052. THIS.Parent.pageNo = THIS.Parent.spnPageNo.Value
  42053. THIS.Parent.Hide()
  42054. ENDPROC
  42055. bPROCEDURE Click
  42056. THISFORM.CurrentPage = THIS.PageNo
  42057. THISFORM.Hide()
  42058. activate screen
  42059. ENDPROC
  42060. frxpreview.h
  42061. foxpro_reporting.h
  42062. frxpreview_loc.h
  42063. PROCEDURE LostFocus
  42064. if THIS.Value < THIS.SpinnerLowValue
  42065.     THIS.Value = 1
  42066. endif
  42067. if THIS.Value > THIS.SpinnerHighValue
  42068.     THIS.Value = THIS.SpinnerHighValue
  42069. endif
  42070. dodefault()
  42071. ENDPROC
  42072. PARENT
  42073. PAGENO    
  42074. SPNPAGENO
  42075. VALUE
  42076. Click,
  42077. Top = 14
  42078. Left = 12
  42079. Height = 92
  42080. Width = 345
  42081. ShowWindow = 1
  42082. DoCreate = .T.
  42083. AutoCenter = .F.
  42084. BorderStyle = 2
  42085. Closable = .F.
  42086. MaxButton = .F.
  42087. MinButton = .F.
  42088. AlwaysOnTop = .T.
  42089. AllowOutput = .F.
  42090. pageno = 0
  42091. pagetotal = 0
  42092. oparentform = (.NULL.)
  42093. Name = "pr_gotopageform"
  42094. PROCEDURE Show
  42095. LPARAMETERS nStyle
  42096. *-----------------------------------------
  42097. * Fix for SP1: Handle positioning in top-level form
  42098. * See frxPreviewForm::ActionGoToPage()
  42099. * Addresses bug# 474691
  42100. *-----------------------------------------
  42101. THIS.pageNo    = THIS.oParentForm.currentPage
  42102. THIS.pageTotal = THIS.oParentForm.pageTotal
  42103. THIS.Caption   = DEFAULT_MBOX_TITLE_LOC
  42104. THIS.lblCaption.Caption = REPORT_PREVIEW_GOTO_PAGE_LOC + " " + "(1-" + transform(THIS.pageTotal) + ")"
  42105. if THIS.oParentForm.ShowWindow = 2 && as top-level form
  42106.     *-----------------------------------
  42107.     * If parent preview window is a top-level form,
  42108.     * center the child window in the view port:
  42109.     *-----------------------------------
  42110.     THIS.AutoCenter = .F.
  42111.     THIS.Left = THIS.oParentForm.ViewPortLeft + int(THIS.oParentForm.Width/2  - THIS.Width/2)  
  42112.     THIS.Top  = THIS.oParentForm.ViewPortTop  + int(THIS.oParentForm.Height/2 - THIS.Height/2)
  42113.     THIS.AutoCenter = .T.
  42114. endif
  42115. *--------------
  42116. THIS.spnPageNo.SpinnerLowValue = 1
  42117. THIS.spnPageNo.SpinnerHighValue = THIS.pageTotal
  42118. *THIS.spnPageNo.KeyboardLowValue = 1
  42119. *THIS.spnPageNo.KeyboardHighValue = THIS.pageTotal
  42120. THIS.spnPageNo.Value = THIS.pageNo
  42121. dodefault(m.nStyle)
  42122. ENDPROC
  42123. Height = 274
  42124. Width = 622
  42125. DoCreate = .T.
  42126. AutoCenter = .T.
  42127. Caption = "Report Proof Sheet"
  42128. currentpage = 0
  42129. reportlistener = .NULL.
  42130. Name = "pr_proofsheet"
  42131. VALUE
  42132. SPINNERLOWVALUE
  42133. SPINNERHIGHVALUE    
  42134. LostFocus,
  42135. THISFORM
  42136. CURRENTPAGE
  42137. PAGENO
  42138. Click,
  42139. frxpreview.h
  42140. foxpro_reporting.h
  42141. frxpreview_loc.h
  42142. MPROCEDURE checkforlargefonts
  42143. *====================================================================
  42144. * CheckForLargeFonts()
  42145. * This is invoked from the .Init() to set all contained objects to
  42146. * use the "large font"-safe font, "MS Shell Dlg" which maps to the 
  42147. * appropriate font in Windows.
  42148. *====================================================================
  42149. *----------------------------------------------------------------
  42150. * Initial, default font setting:
  42151. *----------------------------------------------------------------
  42152. do case 
  42153. case OS(3) = "6" or DEBUG_FORCE_SEGOE_UI
  42154.     THIS.SetAll("FontName","Segoe UI")
  42155.     THIS.SetAll("FontSize",9)
  42156.     THIS.SetAll("Margin",0,"txt")
  42157.     THIS.SetAll("Margin",0,"edt")
  42158.     THIS.SetAll("Margin",0,"Editbox")
  42159.     THIS.SetAll("Margin",0,"Textbox")
  42160. case OS(3) = "5"
  42161.     THIS.SetAll("FontName","MS Shell Dlg 2")
  42162.     THIS.SetAll("FontSize",8)
  42163. otherwise
  42164.     THIS.SetAll("FontName","Tahoma")
  42165.     THIS.SetAll("FontSize",8)
  42166. endcase
  42167. *----------------------------------------------------------------
  42168. * Optional Fontname override:
  42169. *----------------------------------------------------------------
  42170. if not empty(DIALOG_FONTNAME_OVERRIDE)
  42171.     THIS.SetAll("FontName", DIALOG_FONTNAME_OVERRIDE )
  42172.     THIS.FontName = DIALOG_FONTNAME_OVERRIDE
  42173. endif    
  42174. *----------------------------------------------------------------
  42175. * Adjustments for "large fonts":
  42176. *----------------------------------------------------------------
  42177. do case
  42178. case DIALOG_FONTSIZE_OVERRIDE > 0
  42179.     *----------------------------------------------------------------
  42180.     * We can force the use of a specific font size:
  42181.     *----------------------------------------------------------------
  42182.     this.SetAll("FontSize", DIALOG_FONTSIZE_OVERRIDE )
  42183.     this.FontSize = DIALOG_FONTSIZE_OVERRIDE 
  42184. *-----------------------
  42185. * SP1 Fix: 
  42186. *-----------------------
  42187. case DEBUG_FORCE_LARGE_FONTS or ;
  42188.      (DIALOG_ADJUST_FOR_LARGE_FONTS and THIS.screenDPI >= 120)
  42189.     *----------------------------------------------------------------
  42190.     * Use a slightly larger font in 120 dpi to match the other 
  42191.     * native VFP dialogs
  42192.     *----------------------------------------------------------------
  42193.     this.SetAll("FontSize", 10 )
  42194.     this.FontSize = 10
  42195. endcase
  42196. ENDPROC
  42197. PROCEDURE Init
  42198. *====================================================================
  42199. * Init()
  42200. * Make sure that if large fonts are in effect, to switch all controls
  42201. * to use a large-font-safe font.
  42202. *====================================================================
  42203. *---------------------------------
  42204. * SP1 - improve "large font" handling:
  42205. * Determine the screen DPI:
  42206. *---------------------------------
  42207. #define LOGPIXELSX 88
  42208. declare integer GetDeviceCaps in WIN32API integer HDC, integer item
  42209. declare integer GetDC         in WIN32API integer hWnd
  42210. declare integer ReleaseDC     in WIN32API integer hWnd, integer HDC
  42211. local hdc, screenDPI
  42212. hdc    = GetDC(0)
  42213. THIS.screenDPI = GetDeviceCaps( m.hdc, LOGPIXELSX )
  42214. ReleaseDC( 0, m.hdc )
  42215. *---------------------------------
  42216. * Adjust object font sizes if necessary:
  42217. *---------------------------------
  42218. this.checkForLargeFonts()
  42219. ENDPROC
  42220. OREPORT
  42221. REPORTLISTENER
  42222. REPORTLISTENERx
  42223. ProofShape
  42224. proofsheet.vcx
  42225. NSTYLE
  42226. IROWOFFSET
  42227. ICOLOFFSET    
  42228. ICOLCOUNT
  42229. REPORTLISTENER
  42230. OUTPUTPAGECOUNT    
  42231. NEWOBJECT
  42232. OBJECTS
  42233. VISIBLE
  42234. PAGENO
  42235. HEIGHT
  42236. WIDTHh
  42237. REPORTLISTENER
  42238. OUTPUTPAGECOUNT
  42239. OUTPUTPAGE
  42240. OBJECTS
  42241. HIDE    
  42242. setreport,
  42243. Destroyk
  42244. Paint
  42245. QueryUnloadQ
  42246. FontName
  42247. Segoe UI
  42248. FontSize
  42249. Margin
  42250. Margin
  42251. Margin
  42252. Editbox
  42253. Margin
  42254. Textbox
  42255. FontName
  42256. MS Shell Dlg 2
  42257. FontSize
  42258. FontName
  42259. Tahoma
  42260. FontSize
  42261. FontName
  42262. FontSize
  42263. FontSize
  42264. SETALL
  42265. FONTNAME
  42266. FONTSIZE    
  42267. SCREENDPI
  42268. GetDeviceCaps
  42269. WIN32API
  42270. GetDC
  42271. WIN32API
  42272. ReleaseDC
  42273. WIN32API
  42274. GETDEVICECAPS
  42275. WIN32API
  42276. GETDC    
  42277. RELEASEDC
  42278. SCREENDPI
  42279. CHECKFORLARGEFONTS
  42280. checkforlargefonts,
  42281. Report Preview
  42282. Go to page number:
  42283. NSTYLE
  42284. PAGENO
  42285. OPARENTFORM
  42286. CURRENTPAGE    
  42287. PAGETOTAL
  42288. CAPTION
  42289. LBLCAPTION
  42290. SHOWWINDOW
  42291. AUTOCENTER
  42292. VIEWPORTLEFT
  42293. WIDTH
  42294. VIEWPORTTOP
  42295. HEIGHT    
  42296. SPNPAGENO
  42297. SPINNERLOWVALUE
  42298. SPINNERHIGHVALUE
  42299. VALUE
  42300. Show,
  42301. @PROCEDURE setreport
  42302. lparameters oReport
  42303. THIS.ReportListener = m.oReport
  42304. ENDPROC
  42305. PROCEDURE Destroy
  42306. THIS.ReportListener = null
  42307. ENDPROC
  42308. PROCEDURE Show
  42309. LPARAMETERS nStyle
  42310. #define SPACE_PIXELS 10
  42311. iRowOffset = SPACE_PIXELS
  42312. iColOffset = SPACE_PIXELS
  42313. iColCount  = 6
  42314. for m.i = 1 to min(36,THIS.ReportListener.OutputPageCount)
  42315.     THIS.NewObject(sys(2015),"ProofShape","proofsheet.vcx")
  42316.     THIS.Objects[m.i].Visible = .T.
  42317.     THIS.Objects[m.i].PageNo = m.i
  42318.     * Arrange shapes on form:
  42319.     THIS.Objects[m.i].Top  = iRowOffset
  42320.     THIS.Objects[m.i].Left = iColOffset
  42321.     if mod(m.i,iColCount) = 0
  42322.         iRowOffset = iRowOffset + SPACE_PIXELS + THIS.Objects[m.i].Height
  42323.         iColOffset = SPACE_PIXELS
  42324.     else
  42325.         iColOffset = iColOffset + THIS.Objects[m.i].Width + SPACE_PIXELS
  42326.     endif
  42327. endfor
  42328. dodefault(nStyle)
  42329. ENDPROC
  42330. PROCEDURE Paint
  42331. if not isnull( THIS.ReportListener )
  42332.     for m.i = 1 to min(36,THIS.ReportListener.OutputPageCount)
  42333.         THIS.ReportListener.OutputPage( m.i, THIS.Objects[m.i],2)
  42334.     endfor
  42335. endif
  42336. ENDPROC
  42337. PROCEDURE QueryUnload
  42338. THIS.Hide()
  42339. activate screen
  42340. ENDPROC
  42341. PLATFORM
  42342. UNIQUEID
  42343. TIMESTAMP
  42344. CLASS
  42345. CLASSLOC
  42346. BASECLASS
  42347. OBJNAME
  42348. PARENT
  42349. PROPERTIES
  42350. PROTECTED
  42351. METHODS
  42352. OBJCODE
  42353. RESERVED1
  42354. RESERVED2
  42355. RESERVED3
  42356. RESERVED4
  42357. RESERVED5
  42358. RESERVED6
  42359. RESERVED7
  42360. RESERVED8
  42361.  COMMENT Class               
  42362.  WINDOWS _1PC0NFKPY 877020253)
  42363.  COMMENT RESERVED            
  42364.  WINDOWS _1Q40K9H6C 877293344
  42365.  COMMENT RESERVED            
  42366.  WINDOWS _1Q20UZXVD 878213316E
  42367.  COMMENT RESERVED            
  42368.  WINDOWS _1PQ0P76WP 878213455
  42369.  COMMENT RESERVED            
  42370.  WINDOWS _14110GV5X 894986900}
  42371.  COMMENT RESERVED            
  42372.  WINDOWS _1QM0BUK5J 923837222
  42373.  COMMENT RESERVED            
  42374.  WINDOWS _2220SN8V0 924994991
  42375.  COMMENT RESERVED            
  42376.  WINDOWS _1Q210400D1059808531H
  42377.  COMMENT RESERVED            
  42378.  WINDOWS _13T0OHG0F1065533100U
  42379.  COMMENT RESERVED            
  42380.  WINDOWS _1530WWJY41065533134D
  42381.  COMMENT RESERVED            
  42382.  WINDOWS _13E0OB2YR1065533157
  42383.  COMMENT RESERVED            
  42384.  WINDOWS _16E19GTD61065533169j
  42385.  COMMENT RESERVED            
  42386.  WINDOWS _13T0MHHPZ1092440736v
  42387.  COMMENT RESERVED            
  42388.  WINDOWS _1L50OW0FK1092440808
  42389.  WINDOWS _1L50TVYFO1092440808t
  42390.  WINDOWS _1L50TX61Q1092440808R
  42391.  WINDOWS _1L50UUD6E1092440808
  42392.  COMMENT RESERVED            
  42393.  WINDOWS _1L50OW0FK1092440819
  42394.  WINDOWS _31E1B3BDT1092440819
  42395.  WINDOWS _31E1B3BEU1092440819
  42396.  COMMENT RESERVED            
  42397.  WINDOWS _1L50LCL981097383764
  42398.  COMMENT RESERVED            
  42399.  WINDOWS _31B1DMQ8L1117436892f
  42400.  COMMENT RESERVED            
  42401.  WINDOWS _39L029YY01123990411H
  42402.  COMMENT RESERVED            
  42403.  WINDOWS _19G1CFR951124206992G
  42404.  COMMENT RESERVED            
  42405.  WINDOWS _3101B46YT1126279900
  42406.  COMMENT RESERVED            
  42407. VERSION =   3.00
  42408. fxabstract
  42409. Pixels
  42410. Custom-derived class, supplying an abstract instance of the required interface to implement an FX or GFX object. For use with FXListener as a report decorator.
  42411. reportlisteners.h
  42412. foxpro_reporting.h&
  42413. reportlisteners_locs.h.
  42414. gfxoutputclip
  42415. pr_htmllistener15
  42416. reportlisteners.h
  42417. reportlisteners.h
  42418. fxmemberdatascript
  42419. fxabstract
  42420. Pixels
  42421. Class
  42422. Class
  42423. ZExecutes script stored in FRX Memberdata, reading it from a cursor in the FRX datasession.
  42424. Pixels
  42425. reportlisteners.h
  42426. custom
  42427. Class
  42428. fxmemberdatascript
  42429. custom
  42430. gfxoutputclip
  42431. Pixels
  42432. PR_ReportListener.vcx
  42433. custom
  42434. Class
  42435. custom
  42436. fxabstract
  42437. o_memberdata XML Metadata for customizable properties
  42438. *applyfx Required method to implement the FX interface.
  42439. PROCEDURE applyfx
  42440. LPARAMETERS m.toListener, m.tcMethodToken,;
  42441.             m.tP1, m.tP2, m.tP3, m.tP4, m.tP5, m.tP6, ;
  42442.             m.tP7, m.tP8, m.tP9, m.tP10, m.tP11, m.tP12
  42443.             
  42444. ENDPROC
  42445. _memberdata = <VFPData><memberdata name="applyfx" type="property" display="applyFX" favorites="True"/></VFPData>
  42446. Name = "fxabstract"
  42447. custom
  42448. VNEWVAL
  42449. SHOWDATASESSIONISSUE
  42450. BEFOREREPORT
  42451. This report does not use a private data session,C
  42452. so you won't see the problem.
  42453. BEFOREBAND
  42454. working here... 
  42455. AFTERREPORT
  42456. TOLISTENER
  42457. TCMETHODTOKEN
  42458. SHOWDATASESSIONISSUE
  42459. CURRENTDATASESSION
  42460. COMMANDCLAUSES
  42461. STARTDATASESSION
  42462. DOSTATUS
  42463. REMOVECOLLECTIONMEMBER
  42464. showdatasessionissue_assign,
  42465. applyfx
  42466. fxabstract
  42467. PR_ReportListener.vcx
  42468. dbflistener
  42469. reportlisteners.h
  42470. foxpro_reporting.h&
  42471. reportlisteners_locs.h.
  42472. pr_xmldisplaylistener
  42473. reportlisteners.h
  42474. pr_htmllistener15
  42475. reportlistener
  42476. Pixels
  42477. fxresetpagetotal
  42478. custom
  42479. Class
  42480. pr_reportlistener.vcx
  42481. pr_htmllistener
  42482. reportlisteners.h
  42483. foxpro_reporting.h&
  42484. reportlisteners_locs.h.
  42485. reportlisteners.h
  42486. Boldpageimagetype
  42487. oldtextareasetting
  42488. getdefaultuserxsltasstring
  42489. Class
  42490. Pixels
  42491. Jresetcount
  42492. oldpass
  42493. dothisrun
  42494. resetalias
  42495. dobeforeband
  42496. dobeforereport
  42497. fxresetpagetotal
  42498. foxylistener
  42499. Pixels
  42500. Class
  42501. debuglistener
  42502. dbflistener
  42503. foxylistener
  42504. gTunes XML settings suitably for presentation output needs, and adds image-file-publishing capabilities.
  42505. pr_xmllistener
  42506. reportlistener
  42507. pr_reportlistener.vcx
  42508. _reportlistener
  42509. reportlisteners.h
  42510. $targetalias
  42511. dodebugcommandclauses
  42512. Pixels
  42513. jProvides debugging output to help developers understand what happens during an object-assisted report run.
  42514. Class
  42515. !Arial, 0, 9, 5, 15, 12, 32, 3, 0
  42516. pr_xmldisplaylistener
  42517.     foxytherm
  42518. reportlistener
  42519. pr_reportlistener.vcx
  42520. gfxnorender
  42521. reportlisteners.h
  42522. reportlisteners.h
  42523. utilityreportlistener
  42524. debuglistener
  42525. reportlisteners.h
  42526. foxpro_reporting.h&
  42527. reportlisteners_locs.h.
  42528. ,listener
  42529. norenderdataalias
  42530. omitrendering
  42531. Pixels
  42532. pr_xmllistener
  42533. reportlisteners.h
  42534. Class
  42535. reportlistener
  42536. PR_ReportListener.vcx
  42537. reportlisteners.h
  42538. foxpro_reporting.h&
  42539. reportlisteners_locs.h.
  42540. Conditionally eliminates default rendering behavior for report layout controls by evaluating a ReportListener-referencing expression specified in MemberData.
  42541. Pixels
  42542. cincludeloadandunload Indicates whether the debug information should include values from the LoadReport and UnloadReport events.
  42543. verbose Specifies whether the DebugListener should include extended information about parameter values of object type, as well as page, alias, and recno() information for each event or method.
  42544. targetalias Holds the target alias during the processing of a detail band.
  42545. *dodebug Provides debug information for a ReportListener event or method.
  42546. *dodebugcommandclauses Provides debug information for the CommandClauses object and ReportListener member properties.
  42547. *verbose_assign 
  42548. vsuccessorsys2024
  42549. currentrecord
  42550. designateddriver
  42551. drivingaliascurrentrecno
  42552. escapereference
  42553. frxbandrecno
  42554. onescapecommand
  42555. percentdone
  42556. setescape
  42557. setnotifycursor
  42558. isrunning
  42559. drivingalias
  42560. getparentwindowref
  42561. getreportscopedriver
  42562. resetuserfeedback
  42563. setthermformcaption
  42564. synchstatus
  42565. pushuserfeedbackglobalsets
  42566. popuserfeedbackglobalsets
  42567. synchuserinterface
  42568. setupreport
  42569. Pixels
  42570. dFX interface-conformant object derived from form class, providing user feedback during a report run.
  42571. Class
  42572.     foxytherm
  42573.     foxytherm.
  42574. &Provides XML output from a report run.
  42575. HAlignment = 2
  42576. Left = 98
  42577. Top = 13
  42578. Visible = .F.
  42579. Name = "ThermLabel"
  42580. ThermLabel
  42581. label
  42582. pr_ctl32_progressbar.vcx
  42583. Class
  42584. ctl32_progressbarlabel
  42585. Top = 2
  42586. Left = 1
  42587. Visible = .F.
  42588. Name = "Therm"
  42589. lblControlNameH.Name = "lblControlNameH"
  42590. tmrControlTimer.Name = "tmrControlTimer"
  42591. lblControlNameV.Name = "lblControlNameV"
  42592. fxabstract
  42593. gfxnorender
  42594. custom
  42595.     foxytherm.
  42596. jpgclsid
  42597. oldsendgdiplusimage
  42598. oldexternalfilelocation
  42599. imagefieldinstance
  42600. imagefieldtofile
  42601. utilityimage
  42602. checkreportforgeneralfields
  42603. initializefilecopysettings
  42604. adjustshapeaspectratio
  42605. Therm
  42606. control
  42607. pr_ctl32_progressbar.vcx
  42608. ctl32_progressbar
  42609. reportlisteners.h
  42610. foxpro_reporting.h&
  42611. reportlisteners_locs.h.
  42612. 8listener Holds a ReportListener reference during applyFX processing for use in evaluating "Render When" conditions.
  42613. norenderdataalias Alias of private cursor for gfxNoRender subset of memberdata.
  42614. *omitrendering Evaluates Rendering requirements, returning True or False, in both current and frx data sessions.
  42615. gfxexample
  42616. Pixels
  42617. Example GFX class to show technique the object can use to remove itself from FXListener's collection at the conclusion of a report run. This technique is critical to safe use of FX and GFX objects that do not closely monitor their use of datasessions. 
  42618. Class
  42619. fxabstract
  42620. gfxexample
  42621. custom
  42622. RENDER
  42623. DATASESSIONv
  42624. Microsoft.VFP.Reporting.Builder.Rotate
  42625. TOLISTENER
  42626. TCMETHODTOKEN
  42627. TP12    
  42628. LISESSION
  42629. LIANGLE
  42630. LISELECT
  42631. LIFRXRECNO
  42632. LIRETURN
  42633. FFCGRAPHICS    
  42634. GETHANDLE
  42635. NEXTERNALGDIPLUSGFX    
  42636. SETHANDLE
  42637. FRXDATASESSION
  42638. MEMBERDATAALIAS
  42639. GETFRXRECNO
  42640. FRXRECNO
  42641. EXECUTE
  42642. TRANSLATETRANSFORM
  42643. ROTATETRANSFORM
  42644. applyfx,
  42645. reportlisteners.h
  42646. reportlisteners.h
  42647. foxpro_reporting.h&
  42648. reportlisteners_locs.h.
  42649. fxlistener
  42650. reportlisteners.h
  42651. Pixels
  42652. Class
  42653. _reportlistener
  42654. !Arial, 0, 9, 5, 15, 12, 32, 3, 0
  42655. pr_utilityreportlistener
  42656. fxtherm
  42657. reportlisteners.h
  42658. ReportListener supplying the means to decorate base report content during a report run, using two member collections: FXs (adjust content and format instructions) and GFXs (adjust or replace GDIPlus-graphics rendering).
  42659. pr_xmllistener
  42660. showdatasessionissue Toggles demonstration of proper datasession handling in this example GFX class.
  42661. *showdatasessionissue_assign 
  42662. reportlistener
  42663. PR_ReportListener.vcx
  42664. Pixels
  42665. dFX interface-conformant object derived from form class, providing user feedback during a report run.
  42666. Class
  42667. fxlistener
  42668. reportlistener
  42669. showdatasessionissue = .T.
  42670. _memberdata = <VFPData><memberdata name="applyfx" type="property" display="applyFX" favorites="True"/><memberdata name="showdatasessionissue" display="showDataSessionIssue" favorites="True" type="property"/></VFPData>
  42671. Name = "gfxexample"
  42672. fxtherm
  42673. fxtherm.
  42674. THERMSHAPE
  42675. PR_ReportListener.vcx
  42676. pr_reportlistener.vcx
  42677. pr_reportlistener.vcx
  42678. reportlisteners.h
  42679. foxpro_reporting.h&
  42680. reportlisteners_locs.h.
  42681. reportlisteners.h
  42682. foxpro_reporting.h&
  42683. reportlisteners_locs.h.
  42684. shape
  42685. shape
  42686. fxtherm.
  42687. pr_updatelistener
  42688. Provides page count & total in any report. Runs if _ResetPageTotal var exists, also fills vars _ReportPageNo & _ReportPageTotal if available. Results are similar to system variables _PAGENO & _PAGETOTAL, but accurate in reports that reset _PAGENO on band.
  42689. scriptalias
  42690. usememberdata
  42691. processmemberdatascript
  42692. processdynamicmethodscript
  42693. gatherscripts
  42694. adjustdynamiccalls
  42695. findparametersstatement
  42696. reportlisteners.h
  42697. Pixels
  42698. 8Provides user feedback while report output is generated.
  42699.     gfxrotate
  42700. reportlisteners.h
  42701. Pixels
  42702. oimagesrc
  42703. oimagedest
  42704. oprivategraphics
  42705. opoint
  42706. orect
  42707. lonthisrun
  42708. iimageinstanceindex
  42709. snamespace
  42710. simagepath
  42711. simagefullpath
  42712. aimagecopies
  42713. saveimageclips
  42714. getimageext
  42715. setup
  42716. listenersupportssaveclip
  42717. cleanup
  42718. resetcount Internal processing variable.
  42719. oldpass Internal processing variable.
  42720. dothisrun Holds assessment of whether this object must perform its function during the current report run.
  42721. resetalias Alias of cursor used to accumulate page counts for groups.
  42722. *dobeforeband Accumulates page counts into the ResetAlias cursor as the report run progresses.
  42723. *dobeforereport Initializes page count activity at the start of a report run.
  42724. thermform
  42725. setnotifycursor
  42726. setescape
  42727. escapereference
  42728. onescapecommand
  42729. percentdone
  42730. currentrecord
  42731. drivingaliascurrentrecno
  42732. frxbandrecno
  42733. designateddriver
  42734. successorsys2024
  42735. createtherm
  42736. getparentwindowref
  42737. setthermformcaption
  42738. resetuserfeedback
  42739. getreportscopedriver
  42740. synchstatus
  42741. Pixels
  42742. eApplies custom specifications, tuned to HTML production, to its parent class' XML generation process.
  42743. Class
  42744. wHeight = 17
  42745. Width = 98
  42746. listener = (.NULL.)
  42747. norenderdataalias = ("GNR"+SYS(2015))
  42748. _memberdata = <VFPData><memberdata name="applyfx" type="property" display="applyFX" favorites="True"/><memberdata name="omitrendering" display="omitRendering" type="method"/><memberdata name="norenderdataalias" display="noRenderDataAlias" type="property"/></VFPData>
  42749. Name = "gfxnorender"
  42750. Class
  42751. _reportlistener
  42752. pr_updatelistener
  42753. pr_xmldisplaylistener
  42754. pr_htmllistener
  42755. reportlistener
  42756. pr_reportlistener.vcx
  42757. reportlisteners.h
  42758. foxpro_reporting.h&
  42759. reportlisteners_locs.h.
  42760. `Height = 23
  42761. Width = 23
  42762. FRXDataSession = -1
  42763. includeloadandunload = .T.
  42764. targetalias = ("")
  42765. _memberdata = 
  42766.      461<VFPData><memberdata name="verbose" type="property" display="verbose" favorites="True" /><memberdata name="dodebug" type="method" display="doDebug" favorites="True" /><memberdata name="dodebugcommandclauses" type="method" display="doDebugCommandClauses" favorites="False" /><memberdata name="targetalias" type="property" display="targetAlias" /><memberdata name="includeloadandunload" type="property" display="includeLoadAndUnload" favorites="True" /></VFPData>
  42767. Name = "debuglistener"
  42768. uscriptalias The alias of a cursor holding script information during the report run.
  42769. removescriptonfailure Indicates whether any script failure should remove the  failed script for the balance of the report run. If .F., this script continues to be executed for additional report events and errors are handled silently. Defaults to .T.. 
  42770. *usememberdata Evaluates whether the current event and the current FRX layout element have MemberData that this class can process and positions the MemberData and Scripting cursors appropriately.
  42771. *processmemberdatascript Executes MemberData script from the main MemberData row for the current FRX layout element.
  42772. *processdynamicmethodscript Processes specialized MemberData rows for the current layout control for dynamic methods EvaluateContents and AdjustObjectSize.
  42773. *gatherscripts Sets up script elements at the beginning of a report run.
  42774. *adjustdynamiccalls Ensures that dynamic method calls are made if there is relevant MemberData script attached to them.
  42775. *removescriptonfailure_assign 
  42776. *findparametersstatement Checks FX scripts for a parameter statement as required for ApplyFX() method.
  42777. scriptalias = ("S"+SYS(2015))
  42778. removescriptonfailure = .T.
  42779. _memberdata = 
  42780.      783<VFPData><memberdata name="applyfx" type="property" display="applyFX" favorites="True"/><memberdata name="gatherscripts" type="method" display="gatherScripts"/><memberdata name="processmemberdatascript" type="method" display="processMemberDataScript"/><memberdata name="processdynamicmethodscript" type="method" display="processDynamicMethodScript"/><memberdata name="usememberdata" type="method" display="useMemberData"/><memberdata name="scriptalias" display="scriptAlias" type="property"/><memberdata name="adjustdynamiccalls" type="method" display="adjustDynamicCalls"/><memberdata name="removescriptonfailure" display="removeScriptOnFailure" type="property" favorites="True"/><memberdata name="findparametersstatement" type="method" display="findParametersStatement"/></VFPData>
  42781. Name = "fxmemberdatascript"
  42782. resetcount = 0
  42783. oldpass = 0
  42784. dothisrun = .F.
  42785. resetalias = ("GR"+SYS(2015))
  42786. _memberdata = 
  42787.      524<VFPData><memberdata name="applyfx" type="property" display="applyFX" favorites="True"/><memberdata name="dothisrun" type="property" display="doThisRun" favorites="True"/><memberdata name="oldpass" type="property" display="oldPass"/> <memberdata name="resetcount" type="property" display="resetCount"/><memberdata name="resetalias" type="property" display="resetAlias"/><memberdata name="dobeforeband" type="method" display="doBeforeBand"/><memberdata name="dobeforereport" type="method" display="doBeforeReport"/></VFPData>
  42788. Name = "fxresetpagetotal"
  42789. PROCEDURE dobeforeband
  42790. LPARAMETERS m.toListener,m.tnBandCode
  42791. LOCAL m.liSession, m.liSelect
  42792. IF m.tnBandCode = 1 && pageheader
  42793.    m.liSession = SET("DATASESSION")
  42794.    SET DATASESSION TO (m.toListener.FRXDataSession )
  42795.    liSelect = SELECT(0)      
  42796.    SELECT (THIS.resetAlias)
  42797.    IF _PAGENO = 1 && user reset occurred
  42798.       IF THIS.oldPass = 0 AND toListener.CurrentPass = 1
  42799.          * we're entering the rendering pass
  42800.          THIS.resetCount = 1
  42801.          THIS.oldPass = 1
  42802.          IF TYPE("_ReportPageTotal") = "N"
  42803.             CALCULATE SUM(ResetPageTotal) TO _ReportPageTotal
  42804.          ENDIF
  42805.       ELSE
  42806.          THIS.resetCount = THIS.resetCount + 1       
  42807.       ENDIF
  42808.       IF m.toListener.CurrentPass = 0 
  42809.          INSERT INTO (THIS.resetAlias) VALUES (THIS.ResetCount, 1)
  42810.       ENDIF          
  42811.    ELSE
  42812.       * we're not starting a set of page numbers,
  42813.       * so we need to keep track of the pages in 
  42814.       * this particular group.
  42815.       IF m.toListener.CurrentPass = 0
  42816.          SEEK THIS.ResetCount 
  42817.          REPLACE ResetPageTotal WITH ResetPageTotal + 1 
  42818.       ENDIF              
  42819.    ENDIF
  42820.    IF m.toListener.CurrentPass = 1
  42821.       * make the current group's page total available
  42822.       * for display/output
  42823.       SEEK THIS.ResetCount 
  42824.       _ResetPageTotal = ResetPageTotal
  42825.       _ReportPageNo = m.toListener.PageNo && don't even worry about whether the var has been declared
  42826.    ENDIF
  42827.    SELECT (m.liSelect)
  42828.    SET DATASESSION TO (m.toListener.CurrentDataSession)
  42829. ENDIF     
  42830. ENDPROC
  42831. PROCEDURE dobeforereport
  42832. LPARAMETERS m.toListener
  42833. LOCAL liSession, liSelect
  42834. liSession = SET("DATASESSION")
  42835. SET DATASESSION TO (m.toListener.FRXDataSession )
  42836. liSelect = SELECT(0)      
  42837. SELECT 0
  42838. CREATE CURSOR (THIS.resetAlias) (ResetsNo i, ResetPageTotal i)
  42839. INDEX ON ResetsNo TAG Resets
  42840. THIS.resetCount = 0
  42841. THIS.oldPass = 0
  42842. _ResetPageTotal = 0
  42843. SELECT (liSelect)
  42844. SET DATASESSION TO (m.toListener.CurrentDataSession)
  42845. ENDPROC
  42846. PROCEDURE applyfx
  42847. LPARAMETERS m.toListener, m.tcMethodToken, ;
  42848.             m.tP1, m.tP2, m.tP3, m.tP4, m.tP5, m.tP6,   ;
  42849.             m.tP7, m.tP8, m.tP9, m.tP10, m.tP11, m.tP12
  42850.             
  42851. DO CASE
  42852.    CASE m.tcMethodToken == "BEFOREREPORT" AND ;
  42853.         TYPE("_ResetPageTotal") # "U"
  42854.        * we can turn on behavior explicitly
  42855.         toListener.TwoPassProcess = .T.
  42856.         THIS.doThisRun = .T.
  42857.         THIS.doBeforeReport(toListener)
  42858.    CASE m.tcMethodToken == "BEFOREREPORT" AND ;
  42859.        (TYPE("_ResetPageTotal") = "U")
  42860.         THIS.doThisRun = .F.
  42861.    CASE NOT THIS.DoThisRun          
  42862.         * do nothing
  42863.    CASE m.tcMethodToken == "BEFOREBAND"
  42864.         THIS.doBeforeBand(toListener,tP1)          
  42865.    OTHERWISE
  42866.         * do nothing
  42867. ENDCASE
  42868.                         
  42869. ENDPROC
  42870. ;PROCEDURE showdatasessionissue_assign
  42871. LPARAMETERS m.vNewVal
  42872. IF VARTYPE(m.vNewVal) = "L"
  42873.   THIS.showDataSessionIssue = m.vNewVal
  42874. ENDIF  
  42875. ENDPROC
  42876. PROCEDURE applyfx
  42877. LPARAMETERS m.toListener, m.tcMethodToken,;
  42878.             m.tP1, m.tP2, m.tP3, m.tP4, m.tP5, m.tP6,;
  42879.             m.tP7, m.tP8, m.tP9, m.tP10, m.tP11, m.tP12
  42880.             
  42881. IF m.tcMethodToken == "BEFOREREPORT" AND ;
  42882.    THIS.showDataSessionIssue AND ;
  42883.    (m.toListener.CurrentDataSession = m.toListener.CommandClauses.StartDataSession)
  42884.    MESSAGEBOX("This report does not use a private data session," + CHR(13) + ;
  42885.               "so you won't see the problem.")                          
  42886. ENDIF              
  42887. IF m.tcMethodToken == "BEFOREBAND" 
  42888.    SET DATASESSION TO (m.toListener.CurrentDataSession)
  42889.    m.toListener.doStatus("working here... ")
  42890.    IF THIS.showDataSessionIssue 
  42891.       * no switch back here.
  42892. *!*       ELSE
  42893. *!*          SET DATASESSION TO (m.toListener.ListenerDataSession)
  42894.    ENDIF      
  42895. ENDIF               
  42896. IF (NOT THIS.showDataSessionIssue) AND ;
  42897.    m.tcMethodToken == "AFTERREPORT"
  42898.    * if the following is not included,
  42899.    * a "stuck" datasession results unless
  42900.    * some additional object later in 
  42901.    * the collection did the switch back
  42902.    m.toListener.removeCollectionMember(THIS.Name,.T.)
  42903.    RELEASE THIS
  42904. ENDIF
  42905. ENDPROC
  42906. Provides copy-to-image file for designated page regions during a report run, so you can export the rendered regions for embedding in output targets. Alternative to xmlDisplayListener.copyImageFilesToExternalFileLocation handling custom-rendered content.
  42907. DATASESSIONv
  42908. TOLISTENER
  42909. TCEXPR
  42910. LLNORENDER    
  42911. LISESSION
  42912. LISTENER
  42913. CURRENTDATASESSION
  42914. FRXDATASESSION
  42915. EXCEPTION
  42916. RENDER
  42917. DATASESSIONv
  42918. LOADREPORT
  42919. 09.00.0000.3504
  42920. DATASESSIONv
  42921. Microsoft.VFP.Reporting.Builder.AdvancedProperty
  42922. ListenerRef.Preprocess.NoRenderWhen
  42923. Microsoft.VFP.Reporting.Builder.AdvancedProperty
  42924. ListenerRef.Preprocess.NoRenderWhen
  42925. BEFOREREPORT
  42926. DATASESSIONv
  42927. (ExecWhen == '
  42928. ListenerRef.Preprocess.NoRenderWhen
  42929. ' OR 
  42930.  ExecWhen == '
  42931. ListenerRef.NoRenderWhen
  42932. SELECT FrxRecno,ExecWhen,Execute,  IIF(ExecWhen == "ListenerRef.Preprocess.NoRenderWhen", .T., .F.) AS PreProcess  FROM (m.toListener.MemberDataAlias)  INTO CURSOR (THIS.noRenderDataAlias)  WHERE Type = "R"  AND  Name == "Microsoft.VFP.Reporting.Builder.AdvancedProperty" AND  (NOT EMPTY(Execute)) AND &lcConditions.           
  42933. UNLOADREPORT
  42934. DATASESSIONv
  42935. TOLISTENER
  42936. TCMETHODTOKEN
  42937. TP12    
  42938. LISESSION
  42939. LISELECT
  42940. LIFRXRECNO
  42941. LIRETURN
  42942. LLNORENDER
  42943. LLSWAP
  42944. LCCONDITIONS
  42945. FFCGRAPHICS
  42946. FRXDATASESSION
  42947. NORENDERDATAALIAS
  42948. GETFRXRECNO
  42949. FRXRECNO
  42950. PREPROCESS
  42951. OMITRENDERING
  42952. EXECUTE
  42953. COMMANDCLAUSES
  42954. ISDESIGNERLOADED
  42955. COMMANDCLAUSESFILE
  42956. FRXCURSOR
  42957. UNPACKFRXMEMBERDATA
  42958. MEMBERDATAALIAS
  42959. EXECWHEN
  42960. ISFRXSWAPCOPYPRESENT
  42961. PREPAREFRXSWAPCOPY
  42962. LIRECNO
  42963. REMOVEFRXSWAPCOPY
  42964. LISTENER
  42965. omitrendering,
  42966. applyfx
  42967. Destroy+
  42968. TOLISTENER
  42969. TCMETHODTOKEN
  42970. applyfx,
  42971.  noutfile
  42972. npagewidth
  42973. npageheight
  42974. nscreendpi
  42975. ldebug
  42976. ctargetfilename
  42977. oactivelistener
  42978. ldefaultmode
  42979. nimgcounter
  42980. _ctempfolder
  42981. oimages
  42982. cexternalfilelocation
  42983. lcopyimagefilestoexternalfilelocation
  42984. lobjtypemode
  42985. lopenviewer
  42986. targetfilename
  42987. lquietmode2
  42988. *outputfromdata 
  42989. *getbandname 
  42990. *getfontstyle 
  42991. *rgbtohex 
  42992. *getcontinuationtype 
  42993. *getpageimg 
  42994. *getpicturefromlistener 
  42995. *processimages 
  42996. *processtext 
  42997. *processlines 
  42998. *processshapes 
  42999. *getlinescnt 
  43000. *cropimage 
  43001. ^apagesimgs[1,0] 
  43002. *renderhtml 
  43003. *prepareoutput 
  43004. reportlistener
  43005. 1DefTop = 
  43006. DefLeft = 
  43007. DefHeight = 
  43008. Top = (THISFORM.ThermBack.Top + 1)
  43009. Left = (THISFORM.ThermBack.Left + 1)
  43010. Height = (THISFORM.ThermBack.Height -2)
  43011. Width = 0
  43012. BorderStyle = 0
  43013. DrawMode = 14
  43014. FillStyle = 0
  43015. Visible = .T.
  43016. BackColor = (THISFORM.BackColor)
  43017. FillColor = 178,180,191
  43018. Name = "THERMSHAPE"
  43019. pr_utilityreportlistener
  43020. reportlisteners.h
  43021. Pixels
  43022. Class
  43023. vsuccessorsys2024
  43024. currentrecord
  43025. designateddriver
  43026. drivingaliascurrentrecno
  43027. escapereference
  43028. frxbandrecno
  43029. onescapecommand
  43030. percentdone
  43031. setescape
  43032. setnotifycursor
  43033. isrunning
  43034. drivingalias
  43035. getparentwindowref
  43036. getreportscopedriver
  43037. resetuserfeedback
  43038. setthermformcaption
  43039. synchstatus
  43040. pushuserfeedbackglobalsets
  43041. popuserfeedbackglobalsets
  43042. synchuserinterface
  43043. setupreport
  43044. Changes default rendering behavior for report layout controls by rotating them according to a MemberData-specified number of degrees.
  43045. Class
  43046. fxabstract
  43047.     gfxrotate
  43048. Name = "gfxrotate"
  43049. custom
  43050. pr_reportlistener.vcx
  43051. AutoSize = .T.
  43052. DefTop = 
  43053. BackStyle = 1
  43054. Caption = ""
  43055. Left = 8
  43056. Top = ( (THISFORM.Height - THIS.Height) /2)
  43057. Visible = .T.
  43058. Width = 2
  43059. ForeColor = 0,0,0
  43060. Name = "THERMLABEL"
  43061. THERMLABEL
  43062. label
  43063. label
  43064. fxtherm.
  43065.     THERMBACK
  43066. fxlistener
  43067. DefTop = 
  43068. DefLeft = 
  43069. DefHeight = 
  43070. DefWidth = 
  43071. Top = 5
  43072. Left = 0
  43073. Height = 30
  43074. Width = 276
  43075. BackStyle = 0
  43076. Visible = .T.
  43077. Name = "THERMBACK"
  43078. shape
  43079. reportlisteners.h
  43080. foxpro_reporting.h&
  43081. reportlisteners_locs.h.
  43082. reportlisteners.h
  43083. foxpro_reporting.h&
  43084. reportlisteners_locs.h.
  43085. reportlisteners.h
  43086. foxpro_reporting.h&
  43087. reportlisteners_locs.h.
  43088. configurationtable
  43089. pageimageextension
  43090. opentargetfile
  43091. closetargetfile
  43092. getpageimageextension
  43093. generatepageimagefilename
  43094. supportspageimages
  43095. outputpageimage
  43096. makeexternalfilelocationreachable
  43097. UAdds configuration table handling and output target file handling to fxListener class
  43098. reportlisteners.h
  43099. foxpro_reporting.h
  43100. reportlisteners_locs.h
  43101. pr_utilityreportlistener
  43102. createhelperobjects
  43103. needgfxs
  43104. sendfx
  43105. checkcollectionmembers
  43106. uppermethodname
  43107. getfeedbackfxobject
  43108. getobjectinstance
  43109. getmemberdatascriptfxobject
  43110. creatememberdatacursor
  43111. getrotategfxobject
  43112. evaluateuserexpression
  43113. getnorendergfxobject
  43114. ensurecollection
  43115. pr_reportlistener.vcx
  43116. dbflistener
  43117. Pixels
  43118. Class
  43119. _reportlistener
  43120. reportlistener
  43121. shape
  43122. reportlistener
  43123. Class
  43124. Pixels
  43125. pr_reportlistener.vcx
  43126. reportlistener
  43127. Adds error handling, session handling, and other common report run-time tasks to ReportListener base class.  Provides the ability to chain a series of reports as well as the means to delegate or share output activities to a chain of Listener-successors.
  43128. FRXDataSession = -1
  43129. QuietMode = .T.
  43130. noutfile = -1
  43131. npagewidth = 0
  43132. npageheight = 0
  43133. nscreendpi = 0
  43134. ldebug = .F.
  43135. ctargetfilename = 
  43136. oactivelistener = .NULL.
  43137. ldefaultmode = .F.
  43138. nimgcounter = 0
  43139. nx0 = 0
  43140. ny0 = 0
  43141. nw0 = 0
  43142. nh0 = 0
  43143. _ctempfolder = .F.
  43144. oimages = 
  43145. cexternalfilelocation = 
  43146. lcopyimagefilestoexternalfilelocation = .T.
  43147. lobjtypemode = .F.
  43148. lopenviewer = .F.
  43149. targetfilename = .F.
  43150. lquietmode2 = .F.
  43151. _memberdata = 
  43152.      301<VFPData><memberdata name="prepareoutput" display="PrepareOutput"/><memberdata name="lobjtypemode" display="lObjTypeMode"/><memberdata name="lopenviewer" display="lOpenViewer"/><memberdata name="targetfilename" display="TargetFileName"/><memberdata name="lquietmode2" display="lQuietMode2"/></VFPData>
  43153. Name = "pr_htmllistener15"
  43154. fxlistener
  43155. dbflistener
  43156. reportlistener
  43157. pr_reportlistener.vcx
  43158. pagenodes
  43159. currentband
  43160. currentpage
  43161. columnnodes
  43162. currentcolumn
  43163. datanodes
  43164. includepage
  43165. evaluatecontentsvalues
  43166. applyrdltransform
  43167. successorgfxnorender
  43168. xmlrawtag
  43169. xmlrawnode
  43170. xmlrawconv
  43171. writeraw
  43172. resetreport
  43173. verifynodenames
  43174. verifyattributenames
  43175. loadprocessorobject
  43176. getrawformattinginfo
  43177. getvfprdlcontents
  43178. getpathedimageinfo
  43179. applyusertransformtooutput
  43180. getdefaultuserxslt
  43181. setdomformattinginfo
  43182. synchxsltprocessoruser
  43183. insertxmlconfigrecords
  43184. getfrxlayoutobjectfieldlist
  43185. preparefrxcopy
  43186. removefrxcopy
  43187. getrunnodecontents
  43188. addrunnode
  43189. initializeformattingchangescursor
  43190. formatdatavalue
  43191. evaluatestringtoboolean
  43192. fixmsxmlobjectfordtds
  43193. frxcharsetsinuse
  43194. verifytargetfile
  43195. TVVALUE
  43196. GDIPLUSLIBI
  43197. TVVALUE
  43198. MIMETYPE9
  43199. TVVALUE
  43200. FORCEON
  43201. EXCEPTION
  43202. DATASESSIONv
  43203. BEFOREREPORT
  43204. RENDER
  43205. AFTERREPORT
  43206. TOLISTENER
  43207. TCMETHODTOKEN
  43208. TP12    
  43209. LISESSION
  43210. LISELECT
  43211. LIFRXRECNO
  43212. LVRETURN
  43213. LIDRIVER
  43214. LISTENERSUPPORTSSAVECLIP
  43215. FRXDATASESSION
  43216. AIMAGECOPIES
  43217. IIMAGEINSTANCEINDEX
  43218. MEMBERDATAALIAS
  43219. SNAMESPACE
  43220. LONTHISRUN
  43221. FORCEON
  43222. SETUP
  43223. FFCGRAPHICS
  43224. GETFRXRECNO
  43225. FRXRECNO
  43226. SETUPIMAGECLIP
  43227. OBJTYPE
  43228. SAVEIMAGECLIPS
  43229. CLEANUPX
  43230. IIMAGEINSTANCEINDEX
  43231. AIMAGECOPIES
  43232. NPAGENO
  43233. EDEVICE
  43234. NDEVICETYPE
  43235. NLEFT
  43236. NWIDTH
  43237. NHEIGHT    
  43238. NCLIPLEFT
  43239. NCLIPTOP
  43240. NCLIPWIDTH
  43241. NCLIPHEIGHT
  43242. LABIND
  43243. SAVEIMAGECLIPS
  43244. TOLISTENER
  43245. TNLEFT
  43246. TNTOP
  43247. TNWIDTH
  43248. TNHEIGHT
  43249. TVCONTENTSTOBERENDERED
  43250. TLIMAGECONTROL
  43251. LCFILENAME
  43252. IIMAGEINSTANCEINDEX
  43253. AIMAGECOPIES
  43254. CLASS
  43255. GETIMAGEEXT
  43256. SIMAGEPATH
  43257. PAGENO
  43258. targetFileName
  43259. OutputPage
  43260. outputPageClip
  43261. TOLISTENER
  43262. TIPAGE
  43263. LISTENERSUPPORTSSAVECLIP
  43264. LCTEMPFILE
  43265. LIPAGEINDEX
  43266. LIIMAGEINDEX
  43267. LISTARTPAGE    
  43268. LIENDPAGE
  43269. OPOINT
  43270. PAGETOTAL
  43271. SIMAGEFULLPATH
  43272. TARGETFILENAME
  43273. SIMAGEPATH
  43274. AIMAGECOPIES
  43275. IIMAGEINSTANCEINDEX
  43276. OUTPUTPAGE    
  43277. OIMAGESRC
  43278. CREATEFROMFILE
  43279. OIMAGEDEST
  43280. CREATE
  43281. MARGIN
  43282. OPRIVATEGRAPHICS
  43283. CREATEFROMIMAGE
  43284. ORECT
  43285. DRAWIMAGEPORTIONAT
  43286. SAVETOFILE
  43287. MIMETYPE!
  43288. MIMETYPE
  43289. gpPoint
  43290. _gdiplus.vcx
  43291. gpPoint
  43292. externalFileLocation
  43293. OutputPage
  43294. outputPageClip
  43295. gpBitMap
  43296. gpBitMap
  43297. gpPoint
  43298. gpRectangle
  43299. gpGraphics
  43300. TOLISTENER
  43301. LONTHISRUN
  43302. GDIPLUSLIB
  43303. FFCGRAPHICS
  43304. CLASSLIBRARY
  43305. LOTEMP
  43306. GDIPLUSLIBMODULE
  43307. EXTERNALFILELOCATION
  43308. SIMAGEPATH
  43309. SIMAGEFULLPATH
  43310. LISTENERSUPPORTSSAVECLIP    
  43311. OIMAGESRC
  43312. OIMAGEDEST
  43313. OPOINT
  43314. ORECT
  43315. OPRIVATEGRAPHICSv
  43316. TVVALUE
  43317. GDIPLUSLIBMODULE
  43318. TOLISTENER
  43319. TLACTINPAGEDMODE
  43320. LISTENERTYPE
  43321. TOLISTENER
  43322. LONTHISRUN
  43323. LISTENERSUPPORTSSAVECLIP
  43324. SIMAGEPATH
  43325. SIMAGEFULLPATH    
  43326. OIMAGESRC
  43327. OIMAGEDEST
  43328. OPRIVATEGRAPHICS
  43329. OPOINT
  43330. ORECT;
  43331. TVNEWVAL
  43332. MARGIN.
  43333. Spacefold.LSN.gfxOutputClip
  43334. SNAMESPACE
  43335. CLEANUP
  43336. gdipluslib_assign,
  43337. mimetype_assign
  43338. forceon_assign`
  43339. applyfx
  43340. getcurrentclipfilename
  43341. outputpageclip
  43342. setupimageclip
  43343. saveimageclipsH
  43344. getimageext
  43345. setup
  43346. gdipluslibmodule_assign
  43347. listenersupportssaveclipl
  43348. cleanupB
  43349. margin_assignp
  43350. Destroy
  43351. reportlisteners.h
  43352. foxpro_reporting.h&
  43353. reportlisteners_locs.h.
  43354. lobjtypemode
  43355. *drawstringjustified 
  43356. *drawstringintf 
  43357. *tfprocess 
  43358. *tfaddtoarray 
  43359. ^atfwords[1,0] 
  43360. *tfaddtooutput 
  43361. *makepdfoffline 
  43362. *makertfoffline 
  43363. *makexlsoffline 
  43364. *makehtmloffline 
  43365. *makeimgoffline 
  43366. isrunning
  43367. lasterrormessage
  43368. isrunningreports
  43369. reportfilenames
  43370. reportclauses
  43371. listeners
  43372. drivingalias
  43373. runcollector
  43374. frxheaderrecno
  43375. pushglobalsets
  43376. popglobalsets
  43377. setfrxdatasessionenvironment
  43378. resetdatasession
  43379. setfrxdatasession
  43380. setcurrentdatasession
  43381. getfrxstartupinfo
  43382. setfrxrunstartupconditions
  43383. resetdynamicmethodcalls
  43384. resetcalladjustobjectsize
  43385. resetcallevaluatecontents
  43386. resetruncollector
  43387. fillruncollector
  43388. adjustreportpagesinfo
  43389. FRXDataSession = -1
  43390. jpgclsid = (.NULL.)
  43391. oldsendgdiplusimage = 0
  43392. oldexternalfilelocation = ("")
  43393. imagefieldinstance = 0
  43394. imagefieldtofile = ("")
  43395. imagesrcattr = ("img")
  43396. imagefilebasename = ("")
  43397. utilityimage = .NULL.
  43398. fillalphaattr = ("FA")
  43399. fillredattr = ("FR")
  43400. fillgreenattr = ("FG")
  43401. fillblueattr = ("FB")
  43402. penalphaattr = ("PA")
  43403. penredattr = ("PR")
  43404. pengreenattr = ("PG")
  43405. penblueattr = ("PB")
  43406. fontnameattr = ("FNAME")
  43407. fontstyleattr = ("FSTYLE")
  43408. fontsizeattr = ("FSIZE")
  43409. externalfilelocation = ("")
  43410. includeformattinginlayoutobjects = .T.
  43411. includebandswithnoobjects = .T.
  43412. _memberdata = 
  43413.     1925<VFPData> <memberdata name="copyimagefilestoexternalfilelocation" type="property" display="copyImageFilesToExternalFileLocation" favorites="True" /> <memberdata name="imagefieldinstance" type="property" display="imageFieldInstance"  /> <memberdata name="imagefieldtofile" type="property" display="imageFieldToFile"  /> <memberdata name="imagefilebasename" type="property" display="imageFileBaseName" favorites="True" /> <memberdata name="imagesrcattr" type="property" display="imageSrcAttr" favorites="True" /> <memberdata name="jpgclsid" type="property" display="JPGclsid" /> <memberdata name="oldexternalfilelocation" type="property" display="oldExternalFileLocation"  /> <memberdata name="oldsendgdiplusimage" type="property" display="oldSendGDIPlusImage"/> <memberdata name="checkreportforgeneralfields" type="method" display="checkReportForGeneralFields" /><memberdata name="initializefilecopysettings" type="method" display="initializeFileCopySettings" /><memberdata name="utilityimage" type="property" display="utilityImage" /><memberdata name="adjustshapeaspectratio" type="method" display="adjustShapeAspectRatio" /><memberdata name="fillalphaattr" display="fillAlphaAttr" type="property"/><memberdata name="fillredattr" display="fillRedAttr" type="property"/><memberdata name="fillgreenattr" display="fillGreenAttr" type="property"/><memberdata name="fillblueattr" display="fillBlueAttr" type="property"/><memberdata name="penalphaattr" display="penAlphaAttr" type="property"/><memberdata name="penredattr" display="penRedAttr" type="property"/><memberdata name="pengreenattr" display="penGreenAttr" type="property"/><memberdata name="penblueattr" display="penBlueAttr" type="property"/><memberdata name="fontnameattr" display="fontNameAttr" type="property"/><memberdata name="fontstyleattr" display="fontStyleAttr" type="property"/><memberdata name="fontsizeattr" display="fontSizeAttr" type="property"/></VFPData>
  43414. Name = "xmldisplaylistener"
  43415. PROCEDURE usememberdata
  43416. LPARAMETERS m.tiFRXRecno
  43417. LOCAL m.llUseMemberData, m.liSelect
  43418. IF (m.tiFRXRecno > 0) 
  43419.    IF USED(THIS.scriptAlias) 
  43420.       m.liSelect = SELECT(0)
  43421.       SELECT (THIS.scriptAlias)
  43422.       m.llUseMemberData = ;
  43423.          SEEK(m.tiFRXRecno,THIS.scriptAlias,"FRXRecno") 
  43424.       SELECT (m.liSelect)    
  43425.    ENDIF
  43426. ENDIF
  43427. RETURN m.llUseMemberData
  43428. ENDPROC
  43429. PROCEDURE processmemberdatascript
  43430. LPARAMETERS m.toListener, m.tcMethodToken,;
  43431.             m.tP1, m.tP2, m.tP3, m.tP4, m.tP5, m.tP6, ;
  43432.             m.tP7, m.tP8, m.tP9, m.tP10, m.tP11, m.tP12
  43433.             
  43434. * we are already positioned on the correct MemberData record
  43435. * in the FRXDataSession in the script alias
  43436. * by the calling method.
  43437. IF (NOT EOF(THIS.scriptAlias))
  43438.    LOCAL llExecute, lcExecute, lcExecWhen
  43439.    m.lcExecute = EVALUATE(THIS.scriptAlias + ".Execute")
  43440.    m.lcExecWhen = EVALUATE(THIS.scriptAlias + ".ExecWhen")
  43441.    SET DATASESSION TO (m.toListener.CurrentDataSession)
  43442.    DO CASE
  43443.    CASE EMPTY(m.lcExecute)
  43444.        * nothing to execute
  43445.    CASE EMPTY(m.lcExecWhen)
  43446.        * always execute
  43447.        m.llExecute = .T.
  43448.    CASE UPPER(m.lcExecWhen)== m.tcMethodToken
  43449.         * simple event evaluation
  43450.         * ExecWhen contains an event name
  43451.         * Note that each event, via script,
  43452.         * could potentially change the contents of
  43453.         * ExecWhen to hold another value (the next
  43454.         * event during which this script should be evaluated)
  43455.         m.llExecute = .T.
  43456.    CASE (TYPE(m.lcExecWhen) = "L") AND ;
  43457.         EVALUATE(m.lcExecWhen)
  43458.         * ExecWhen contains a logical expression to be evaluated
  43459.         m.llExecute = .T.
  43460.    CASE ATC("|"+m.tcMethodToken+"|","|" + m.lcExecWhen + "|") > 0
  43461.         * ExecWhen contains a delimited string of events
  43462.         m.llExecute = .T.
  43463.    ENDCASE
  43464.    IF m.llExecute 
  43465.       TRY
  43466.          ExecScript(m.lcExecute,;
  43467.                     THIS, m.toListener, m.tcMethodToken,;
  43468.                     @tP1, @tP2, @tP3, @tP4, @tP5, @tP6, ;
  43469.                     @tP7, @tP8, @tP9, @tP10, @tP11, @tP12)
  43470.       CATCH TO err
  43471.          IF THIS.removeScriptOnFailure AND ;
  43472.             (m.toListener.FRXDataSession > 0)
  43473.              SET DATASESSION TO (m.toListener.FRXDataSession)
  43474.              REPLACE Execute WITH "" IN (THIS.scriptAlias)
  43475.          ENDIF      
  43476.          #IF OUTPUTCLASS_DEBUGGING 
  43477.              SUSPEND
  43478.          #ENDIF
  43479.       ENDTRY                    
  43480.    ENDIF
  43481.    IF m.toListener.FRXDataSession > 0
  43482.       SET DATASESSION TO (m.toListener.FRXDataSession)
  43483.    ENDIF      
  43484. ENDIF   
  43485. ENDPROC
  43486. PROCEDURE processdynamicmethodscript
  43487. LPARAMETERS m.toListener,  m.tnFRXRecno, m.toProps 
  43488. * we are already positioned on the correct MemberData record
  43489. * in the script alias and in the FRXDataSession
  43490. * by the calling method.
  43491. IF (NOT EOF(THIS.scriptAlias))
  43492.    LOCAL lcScript
  43493.    m.lcScript = EVALUATE(THIS.scriptAlias + ".UserScript" ) 
  43494.    IF NOT EMPTY(m.lcScript)
  43495.       TRY
  43496.          EXECSCRIPT(m.lcScript,m.toListener, m.tnFRXRecno, m.toProps )
  43497.       CATCH TO err
  43498.          IF THIS.removeScriptOnFailure AND ;
  43499.             (m.toListener.FRXDataSession > 0)
  43500.              SET DATASESSION TO (m.toListener.FRXDataSession)
  43501.              REPLACE UserScript WITH "" IN (THIS.scriptAlias)
  43502.          ENDIF
  43503.          #IF OUTPUTCLASS_DEBUGGING 
  43504.              SUSPEND
  43505.          #ENDIF
  43506.       FINALLY
  43507.          IF m.toListener.FRXDataSession > 0
  43508.             SET DATASESSION TO (m.toListener.FRXDataSession)
  43509.          ENDIF
  43510.       ENDTRY
  43511.    ENDIF
  43512. ENDIF
  43513. ENDPROC
  43514. PROCEDURE gatherscripts
  43515. LPARAMETERS m.toListener
  43516. LOCAL lcTemp1, lcTemp2, lcTemp3, liSelect
  43517. SET DATASESSION TO (m.toListener.FRXDataSession)
  43518. m.liSelect = SELECT(0)
  43519. SELECT 0
  43520. CREATE CURSOR (THIS.scriptAlias) ;
  43521.    (FRXRecno i, ExecWhen M, Execute M, UserScript M)
  43522. IF USED(m.toListener.MemberDataAlias) AND ;
  43523.    RECCOUNT(m.toListener.MemberDataAlias) > 0
  43524.    SELECT FRX   
  43525.    GO TOP
  43526.    SCAN FOR Platform = FRX_PLATFORM_WINDOWS AND NOT EMPTY(Style)
  43527.       SELECT (m.toListener.MemberDataAlias)
  43528.       LOCATE FOR FRXRecno = RECNO("FRX") AND ;
  43529.          EMPTY(Name) AND Type = FRX_BLDR_MEMBERDATATYPE   
  43530.       m.lcTemp1 = ExecWhen         
  43531.       m.lcTemp2 = Execute         
  43532.       m.lcTemp3 = ""
  43533.       IF NOT EMPTY(m.lcTemp2)
  43534.          IF NOT THIS.findParametersStatement(m.lcTemp2)
  43535.             * add a parameters statement
  43536.             m.lcTemp2 =  "LPARAMETERS toFX, toListener, tcMethodToken,;"+ CHR(13) + CHR(10) + ;
  43537.                          "tP1, tP2, tP3, tP4, tP5, tP6,"+;
  43538.                          "tP7, tP8, tP9, tP10, tP11, tP12" + CHR(13) + CHR(10) + ;
  43539.                          m.lcTemp2  
  43540.          ENDIF            
  43541.       ENDIF        
  43542.       DO CASE
  43543.       CASE INLIST(FRX.ObjType,FRX_OBJTYP_LINE,FRX_OBJTYP_RECTANGLE,FRX_OBJTYP_PICTURE)
  43544.           LOCATE FOR FRXRecno = RECNO("FRX") AND ;
  43545.                      Type = FRX_BLDR_MEMBERDATATYPE   AND ;
  43546.                      Name == FRX_BLDR_NAMESPACE_ADJUSTOBJECTSIZE 
  43547.           IF NOT EOF()           
  43548.              m.lcTemp3 = ;
  43549.                m.toListener.FRXCursor.GenerateAdjustObjectSizeScript("frx",m.toListener.MemberDataAlias,m.toListener.FRXDataSession)
  43550.           ENDIF               
  43551.       CASE FRX.ObjType = FRX_OBJTYP_FIELD 
  43552.           LOCATE FOR FRXRecno = RECNO("FRX") AND ;
  43553.                      Type = FRX_BLDR_MEMBERDATATYPE   AND ;
  43554.                      Name == FRX_BLDR_NAMESPACE_EVALUATECONTENTS
  43555.           IF NOT EOF()           
  43556.              m.lcTemp3 = ;          
  43557.                m.toListener.FRXCursor.GenerateEvaluateContentsScript("frx",m.toListener.MemberDataAlias,m.toListener.FRXDataSession)         
  43558.           ENDIF               
  43559.       OTHERWISE
  43560.           m.lcTemp3 = ""
  43561.       ENDCASE            
  43562.       SET DATASESSION TO (m.toListener.FRXDataSession)      
  43563.       IF NOT EMPTY(m.lcTemp1 + m.lcTemp2 + m.lcTemp3)
  43564.          INSERT INTO (THIS.scriptAlias) ;
  43565.             VALUES (RECNO("FRX"),m.lcTemp1, m.lcTemp2, m.lcTemp3)
  43566.       ENDIF                   
  43567.       SELECT FRX      
  43568.    ENDSCAN
  43569. ENDIF
  43570. SELECT (THIS.scriptAlias)
  43571. INDEX ON FrxRecno TAG FrxRecno
  43572. SELECT (m.liSelect)
  43573. ENDPROC
  43574. PROCEDURE adjustdynamiccalls
  43575. LPARAMETERS m.toListener
  43576. * change m.toListener.CallEvaluateContents and 
  43577. * m.toListener.CallAdjustObjectSize if necessary
  43578. SET DATASESSION TO (m.toListener.FRXDataSession)
  43579. IF INLIST(m.toListener.callEvaluateContents,;
  43580.           LISTENER_CALLDYNAMICMETHOD_CHECK_CODE,;
  43581.           LISTENER_CALLDYNAMICMETHOD_NEVER) 
  43582.    SELECT FRX    
  43583.    GO TOP
  43584.    SCAN FOR ObjType = FRX_OBJTYP_FIELD AND Platform = FRX_PLATFORM_WINDOWS
  43585.       IF THIS.useMemberData(RECNO())
  43586.          SELECT (THIS.scriptAlias)
  43587.          IF ATC("EvaluateContents",ExecWhen) > 0 OR ;
  43588.             ATC("EvaluateContents",Execute) > 0 OR ;
  43589.             (NOT EMPTY(UserScript))
  43590.             * UserScript for a Field-type item
  43591.             * has to be EvaluateContents
  43592.             m.toListener.callEvaluateContents = LISTENER_CALLDYNAMICMETHOD_ALWAYS
  43593.             EXIT
  43594.          ENDIF
  43595.       ENDIF    
  43596.       SELECT FRX
  43597.    ENDSCAN
  43598. ENDIF          
  43599. IF INLIST(m.toListener.callAdjustObjectSize,;
  43600.           LISTENER_CALLDYNAMICMETHOD_CHECK_CODE,;
  43601.           LISTENER_CALLDYNAMICMETHOD_NEVER) 
  43602.    SELECT FRX    
  43603.    GO TOP
  43604.    SCAN FOR Platform = FRX_PLATFORM_WINDOWS AND INLIST(ObjType,FRX_OBJTYP_LINE,FRX_OBJTYP_RECTANGLE,FRX_OBJTYP_PICTURE)          
  43605.       IF THIS.useMemberData(RECNO())
  43606.          SELECT (THIS.scriptAlias)
  43607.          IF ATC("AdjustObjectSize",ExecWhen) > 0 OR ;
  43608.             ATC("AdjustObjectSize",Execute) > 0 OR ;
  43609.             (NOT EMPTY(UserScript))
  43610.             * UserScript for a Shape-Picture-type item
  43611.             * has to be AdjustObjectSize
  43612.             m.toListener.callAdjustObjectSize = LISTENER_CALLDYNAMICMETHOD_ALWAYS
  43613.             EXIT
  43614.          ENDIF
  43615.       ENDIF    
  43616.       SELECT FRX
  43617.    ENDSCAN
  43618. ENDIF          
  43619. ENDPROC
  43620. PROCEDURE removescriptonfailure_assign
  43621. LPARAMETERS vNewVal
  43622. IF VARTYPE(m.vNewVal) = "L"
  43623.    THIS.removeScriptOnFailure = m.vNewVal
  43624. ENDIF   
  43625. ENDPROC
  43626. PROCEDURE findparametersstatement
  43627. LPARAMETERS m.tcScript
  43628. LOCAL laLines[1], liLine, lcLine, llFound
  43629. IF VARTYPE(m.tcScript) = "C" AND NOT EMPTY(m.tcScript) 
  43630.    FOR m.liLine = 1 TO ALINES(laLines,CHRTRAN(m.tcScript,CHR(10),CHR(13)),1+4,CHR(13))
  43631.       m.lcLine = ALLTRIM(UPPER(m.laLines[liLine]))
  43632.       DO CASE
  43633.       CASE LEFT(m.lcLine,1) == "*" OR LEFT(m.lcLine,2) == REPLICATE(CHR(38),2)
  43634.          * skip leading comments
  43635.       CASE BETWEEN(ATC("PARAM",m.lcLine),1,2)
  43636.          m.llFound = .T.
  43637.          EXIT
  43638.       OTHERWISE
  43639.          EXIT
  43640.       ENDCASE
  43641.    ENDFOR
  43642. ENDIF   
  43643. RETURN m.llFound 
  43644. ENDPROC
  43645. PROCEDURE applyfx
  43646. LPARAMETERS m.toListener, m.tcMethodToken,;
  43647.             m.tP1, m.tP2, m.tP3, m.tP4, m.tP5, m.tP6, ;
  43648.             m.tP7, m.tP8, m.tP9, m.tP10, m.tP11, m.tP12
  43649.    IF m.toListener.FRXDataSession > 0
  43650.       SET DATASESSION TO (m.toListener.FRXDataSession)
  43651.    ENDIF      
  43652.    LOCAL m.liFRXRecno
  43653.    IF m.tcMethodToken == "BEFOREREPORT"
  43654.       THIS.gatherScripts(m.toListener)
  43655.       THIS.adjustDynamicCalls(m.toListener)
  43656.    ENDIF
  43657.    IF m.toListener.FRXDataSession > 0
  43658.       SET DATASESSION TO (m.toListener.FRXDataSession)
  43659.    ENDIF
  43660.    m.liFRXRecno = m.toListener.getFRXRecno(m.tcMethodToken,m.tP1, m.tP2)
  43661.    IF USED("FRX") AND m.liFRXRecno > 0
  43662.       GO (m.liFRXRecno) IN FRX
  43663.    ENDIF
  43664.             
  43665.    IF THIS.useMemberData(m.liFRXRecno)
  43666.       THIS.processMemberDataScript(m.toListener, m.tcMethodToken,;
  43667.                @m.tP1, @m.tP2, @m.tP3, @m.tP4, @m.tP5, @m.tP6, ;
  43668.                @m.tP7, @m.tP8, @m.tP9, @m.tP10, @m.tP11, @m.tP12)
  43669.       IF INLIST(m.tcMethodToken,"EVALUATECONTENTS","ADJUSTOBJECTSIZE")
  43670.          THIS.processDynamicMethodScript(m.toListener,m.tP1, m.tP2)
  43671.       ENDIF  
  43672.    ENDIF    
  43673.    IF m.toListener.FRXDataSession > 0
  43674.       SET DATASESSION TO (m.toListener.FRXDataSession)
  43675.    ENDIF
  43676.    IF USED("FRX")
  43677.       SELECT FRX        
  43678.    ENDIF      
  43679.    SET DATASESSION TO (m.toListener.ListenerDataSession)
  43680. CATCH TO err
  43681.    #IF OUTPUTCLASS_DEBUGGING 
  43682.        SUSPEND
  43683.    #ENDIF
  43684. ENDTRY            
  43685. ENDPROC
  43686. oimagesrc Helper object for image-copy process.
  43687. oimagedest Helper object for image-copy process.
  43688. oprivategraphics Helper object for image-copy process.
  43689. opoint Helper object for image-copy process.
  43690. orect Helper object for image-copy process.
  43691. lonthisrun Logical value determining whether the object should take action during this run.
  43692. iimageinstanceindex Index of the current image copy file.
  43693. margin Integer value of frame margin to add to both width and height when determining the clip coordinates for the current portion of the page to be copied.
  43694. snamespace Reporting Memberdata namespace for which the object will look when determining whether a layout control's page region has been  explicitly tagged for copy to an image file.
  43695. mimetype Mimetype to use for image-copy files the object creates.
  43696. forceon Require this object to turn itself on for a report run, even if it does not see any objects tagged for its attention with the Memberdata values it expects. 
  43697. gdipluslib Class library to use for instantation of point, rect, and other helper objects.
  43698. _memberdata XML Metadata for customizable properties
  43699. gdipluslibmodule Optional APP or EXE file (module) from which to instantiate helper objects in the gdiPlusLib class library.
  43700. simagepath Potentially relative path to which image copy files are saved, determined by ReportListener's externalFileLocation property (which may be relative) if it exists and is in use.
  43701. simagefullpath Full path to which image copy files are saved, determined by ReportListener's externalFileLocation and targetFileName properties if they exist and are in use.
  43702. ^aimagecopies[1,6] Collection of values about each image copy the object makes during a report run (each row contains PageNo, output filename, and Left,Top,Width,Height values for the copy).
  43703. *gdipluslib_assign 
  43704. *mimetype_assign 
  43705. *forceon_assign 
  43706. *applyfx Implementation of required method for the FX interface.
  43707. *getcurrentclipfilename Provides generated output image copy filename for the current copy action.
  43708. *outputpageclip Bindable procedure to save image copy files at the correct moment (the OutputPage event) during a paged report run.
  43709. *setupimageclip Saves a row to the aImageCopies array during rendering procedures when a page region is marked for an image copy, for later use in image copy procedures.
  43710. *saveimageclips Performs image copy procedures on the page regions requested for one or more pages.
  43711. *getimageext Derive file extension from current mimetype value.
  43712. *setup Setup code for each report run specific to this object.
  43713. *gdipluslibmodule_assign 
  43714. *listenersupportssaveclip Evaluates whether the object can handle image copy processing in the current ReportListener output mode and during the current ReportListener event.
  43715. *cleanup Cleanup code for each report run specific to this object.
  43716. *margin_assign 
  43717. DATASESSIONv
  43718. _ReportPageTotalb
  43719. TOLISTENER
  43720. TNBANDCODE    
  43721. LISESSION
  43722. LISELECT
  43723. FRXDATASESSION
  43724. RESETALIAS
  43725. OLDPASS
  43726. CURRENTPASS
  43727. RESETCOUNT
  43728. RESETPAGETOTAL
  43729. _REPORTPAGETOTAL
  43730. _RESETPAGETOTAL
  43731. _REPORTPAGENO
  43732. PAGENO
  43733. CURRENTDATASESSION
  43734. DATASESSIONv
  43735. TOLISTENER    
  43736. LISESSION
  43737. LISELECT
  43738. FRXDATASESSION
  43739. RESETALIAS
  43740. RESETSNO
  43741. RESETPAGETOTAL
  43742. RESETS
  43743. RESETCOUNT
  43744. OLDPASS
  43745. _RESETPAGETOTAL
  43746. CURRENTDATASESSIONj
  43747. BEFOREREPORT
  43748. _ResetPageTotalb
  43749. BEFOREREPORT
  43750. _ResetPageTotalb
  43751. BEFOREBAND
  43752. TOLISTENER
  43753. TCMETHODTOKEN
  43754. TWOPASSPROCESS
  43755. THIS    
  43756. DOTHISRUN
  43757. DOBEFOREREPORT
  43758. DOBEFOREBAND
  43759. dobeforeband,
  43760. dobeforereport
  43761. applyfx|
  43762. )jpgclsid Provides the GUID used when accessing GDI+ to request a file to be saved as JPG type.
  43763. oldsendgdiplusimage Saves the user's preference for GDIPlus image handle receipt if the Listener has to temporary change this setting to generate image files from non-filebased images.
  43764. oldexternalfilelocation Saves the user's old externalFileLocation information during a report run, if the Listener has to temporarily change it to generate  image files from non-filebased images.
  43765. imagefieldinstance Keeps count of image instances for use in generating unique filenames for disk versions of non-filebased images in the report.
  43766. imagefieldtofile Holds generated filename for image being rendered to disk from a non-filebased image.
  43767. imagesrcattr Supplies the name of the XML attribute used to show filename copied, or generated for non-filebased images, at runtime.
  43768. imagefilebasename Assigns an optional  prefix to be added to generated image file names when image files are saved to disk during the rendering of general fields in a report run
  43769. copyimagefilestoexternalfilelocation Indicates whether file-based images should be copied to a  common location from their original locations on your disk, for reference  as image sources in the XML output.
  43770. utilityimage Utility image object for handling aspect ratio of scale-and-retain filebased images.
  43771. fillalphaattr Supplies the name of the XML attribute used to show the Fill-Alpha  value provided to a field control layout object by EvaluateContents processing.
  43772. fillredattr Supplies the name of the XML attribute used to show the Fill-Red value provided to a field control layout object by EvaluateContents processing.
  43773. fillgreenattr Supplies the name of the XML attribute used to show the Fill-Green value provided to a field control layout object by EvaluateContents processing.
  43774. fillblueattr Supplies the name of the XML attribute used to show the Fill-Blue value provided to a field control layout object by EvaluateContents processing.
  43775. penalphaattr Supplies the name of the XML attribute used to show the Pen-Alpha value provided to a field control layout object by EvaluateContents processing.
  43776. penredattr Supplies the name of the XML attribute used to show the Pen-Red value provided to a field control layout object by EvaluateContents processing.
  43777. pengreenattr Supplies the name of the XML attribute used to show the Pen-Green value provided to a field control layout object by EvaluateContents processing.
  43778. penblueattr Supplies the name of the XML attribute used to show the Pen-Blue value provided to a field control layout object by EvaluateContents processing.
  43779. fontnameattr Supplies the name of the XML attribute used to show the Font-Name value provided to a field control layout object by EvaluateContents processing.
  43780. fontstyleattr Supplies the name of the XML attribute used to show the Font-Style value provided to a field control layout object by EvaluateContents processing.
  43781. fontsizeattr Supplies the name of the XML attribute used to show the Font-Size value provided to a field control layout object by EvaluateContents processing.
  43782. *checkreportforgeneralfields Performs startup chores necessary to save out copies of general fields on disk when a report is rendered.
  43783. *imagesrcattr_assign 
  43784. *imagefilebasename_assign 
  43785. *copyimagefilestoexternalfilelocation_assign 
  43786. *initializefilecopysettings Provides required environment settings for non-filebased images to be copied to files at runtime.
  43787. *adjustshapeaspectratio Adjust the height and width for the rendered contents of a Picture layout control to give accurate aspect ratio for the current file.
  43788. *fillalphaattr_assign 
  43789. *fillredattr_assign 
  43790. *fillgreenattr_assign 
  43791. *fillblueattr_assign 
  43792. *penalphaattr_assign 
  43793. *penredattr_assign 
  43794. *pengreenattr_assign 
  43795. *penblueattr_assign 
  43796. *fontnameattr_assign 
  43797. *fontstyleattr_assign 
  43798. *fontsizeattr_assign 
  43799. }oimagesrc = NULL
  43800. oimagedest = NULL
  43801. oprivategraphics = NULL
  43802. opoint = NULL
  43803. orect = NULL
  43804. lonthisrun = .F.
  43805. iimageinstanceindex = 0
  43806. margin = 10
  43807. snamespace = ("")
  43808. mimetype = ("image/png")
  43809. forceon = .F.
  43810. gdipluslib = ("")
  43811. _memberdata = 
  43812.     2083<VFPData><memberdata name="forceon" type="property" display="forceOn" favorites="True"/><memberdata name="gdipluslib" type="property" display="gdiPlusLib" favorites="True"/><memberdata name="iimageinstanceimage" type="property" display="iImageInstanceimage"/><memberdata name="mimetype" type="property" display="mimetype" favorites="True"/><memberdata name="aimagecopies" type="property" display="aImageCopies"/><memberdata name="iimageinstanceindex" type="property" display="iImageInstanceIndex"/><memberdata name="margin" type="property" display="margin" favorites="True"/><memberdata name="lonthisrun" type="property" display="lOnThisRun"/><memberdata name="lthisruninpagedmode" type="property" display="lThisRunInPagedMode"/><memberdata name="oimagedest" type="property" display="oImageDest"/><memberdata name="oimagesrc" type="property" display="oImageSrc"/><memberdata name="opoint" type="property" display="oPoint"/><memberdata name="oprivategraphics" type="property" display="oPrivateGraphics"/><memberdata name="orect" type="property" display="oRect"/><memberdata name="snamespace" type="property" display="sNamespace"/><memberdata name="applyfx" type="method" display="applyFX"/><memberdata name="getcurrentclipfilename" type="method" display="getCurrentClipFileName" favorites="True"/><memberdata name="outputpageclip" type="method" display="outputPageClip" favorites="True"/><memberdata name="setupimageclip" type="method" display="setupImageClip" favorites="True"/><memberdata name="saveimageclips" type="method" display="saveImageClips"/><memberdata name="getimageext" type="method" display="getImageExt"/><memberdata name="setup" type="method" display="setup"/><memberdata name="gdipluslibmodule" type="property" display="gdiPlusLibModule" favorites="True"/><memberdata name="listenersupportssaveclip" type="method" display="listenerSupportsSaveClip"/><memberdata name="cleanup" type="method" display="cleanup"/><memberdata name="simagepath" type="property" display="sImagePath"/><memberdata name="simagefullpath" type="property" display="sImageFullPath"/></VFPData>
  43813. gdipluslibmodule = ("")
  43814. simagepath = ("")
  43815. simagefullpath = ("")
  43816. Name = "gfxoutputclip"
  43817. FRXRecno
  43818. TIFRXRECNO
  43819. LLUSEMEMBERDATA
  43820. LISELECT
  43821. SCRIPTALIAS
  43822. .Execute
  43823. .ExecWhen
  43824. TOLISTENER
  43825. TCMETHODTOKEN
  43826. SCRIPTALIAS    
  43827. LLEXECUTE    
  43828. LCEXECUTE
  43829. LCEXECWHEN
  43830. CURRENTDATASESSION
  43831. REMOVESCRIPTONFAILURE
  43832. FRXDATASESSION
  43833. EXECUTE
  43834. .UserScript
  43835. TOLISTENER
  43836. TNFRXRECNO
  43837. TOPROPS
  43838. SCRIPTALIAS
  43839. LCSCRIPT
  43840. REMOVESCRIPTONFAILURE
  43841. FRXDATASESSION
  43842. USERSCRIPT
  43843. WINDOWS
  43844. LPARAMETERS toFX, toListener, tcMethodToken,;C
  43845. tP1, tP2, tP3, tP4, tP5, tP6,
  43846. tP7, tP8, tP9, tP10, tP11, tP12
  43847. Microsoft.VFP.Reporting.Builder.AdjustObjectSize
  43848. Microsoft.VFP.Reporting.Builder.EvaluateContents
  43849. TOLISTENER
  43850. LCTEMP1
  43851. LCTEMP2
  43852. LCTEMP3
  43853. LISELECT
  43854. FRXDATASESSION
  43855. SCRIPTALIAS
  43856. FRXRECNO
  43857. EXECWHEN
  43858. EXECUTE
  43859. USERSCRIPT
  43860. MEMBERDATAALIAS
  43861. PLATFORM
  43862. STYLE
  43863. FINDPARAMETERSSTATEMENT
  43864. OBJTYPE    
  43865. FRXCURSOR
  43866. GENERATEADJUSTOBJECTSIZESCRIPT
  43867. GENERATEEVALUATECONTENTSSCRIPT
  43868. WINDOWS
  43869. EvaluateContents
  43870. EvaluateContents
  43871. WINDOWS
  43872. AdjustObjectSize
  43873. AdjustObjectSize
  43874. TOLISTENER
  43875. FRXDATASESSION
  43876. CALLEVALUATECONTENTS
  43877. OBJTYPE
  43878. PLATFORM
  43879. USEMEMBERDATA
  43880. SCRIPTALIAS
  43881. EXECWHEN
  43882. EXECUTE
  43883. USERSCRIPT
  43884. CALLADJUSTOBJECTSIZE7
  43885. VNEWVAL
  43886. REMOVESCRIPTONFAILURE-
  43887. PARAM
  43888. TCSCRIPT
  43889. LALINES
  43890. LILINE
  43891. LCLINE
  43892. LLFOUND
  43893. BEFOREREPORT
  43894. EVALUATECONTENTS
  43895. ADJUSTOBJECTSIZE
  43896. TOLISTENER
  43897. TCMETHODTOKEN
  43898. FRXDATASESSION
  43899. LIFRXRECNO
  43900. GATHERSCRIPTS
  43901. ADJUSTDYNAMICCALLS
  43902. GETFRXRECNO
  43903. USEMEMBERDATA
  43904. PROCESSMEMBERDATASCRIPT
  43905. PROCESSDYNAMICMETHODSCRIPT
  43906. LISTENERDATASESSION
  43907. usememberdata,
  43908. processmemberdatascript
  43909. processdynamicmethodscript~
  43910. gatherscripts$
  43911. adjustdynamiccallsk
  43912. removescriptonfailure_assign
  43913. findparametersstatemente
  43914. applyfx
  43915. cssclassattr Supplies the name of the XML attribute used to supply HTML CSS class information to the node representing a layout control, supplementing FRX design instructions.
  43916. anchorattr Supplies the name of the XML attribute used to supply HTML anchor instructions to the node representing an FRX layout control or band.
  43917. titleattr Supplies the name of the XML attribute used to supply alternate text or tooltip information to a node representing an FRX layout control.
  43918. linkattr Supplies the name of the XML attribute used to supply HTML link information to the node representing a layout control containing an image or non-TEXTAREA text.
  43919. cssclassoverrideattr Supplies the name of the XML attribute used to supply HTML CSS class information to the node representing a layout control, overriding FRX design instructions.
  43920. oldpageimagetype Saves the user's preferred PageImageType settings during a run, if the Listener adjusts it to match HTML Page Link memberdata contents it finds in this report.
  43921. oldtextareasetting Saves the user's pre-report XSLTParameters useTextAreaForStretchingText value, if the Listener adjusts the value to match memberdata settings it finds in the current report.
  43922. lobjtypemode
  43923. lopenviewer
  43924. *getdefaultuserxsltasstring Supplies default User XSLT document o the getDefaultUserXslt method as a string.
  43925. *cssclassattr_assign 
  43926. *anchorattr_assign 
  43927. *titleattr_assign 
  43928. *linkattr_assign 
  43929. *cssclassoverrideattr_assign 
  43930. *urlstringencode Encode string for purposes of using it as part of a link in an HTML page.
  43931. *pathencode Encodes sections of a URL path re-creates the URL from the elements, and optionally re-encodes suitable for including in well-formed XML.
  43932. *updateproperties 
  43933. lexpandfields
  43934. _ndatasessionmode
  43935. *storefrxdata 
  43936. *getfullfrxdata 
  43937. *erasetempfiles 
  43938. *updateproperties 
  43939. *getdynamicsfromfrx 
  43940. *getprinterinfo 
  43941. *getstringfromxml 
  43942. *processdynamics 
  43943. *onpreviewclose_bind 
  43944. *addtolog 
  43945. *updatereportusedspace 
  43946. *ishalfpage 
  43947. FRXDataSession = -1
  43948. thermform = .NULL.
  43949. thermformheight = 40
  43950. thermformwidth = 356
  43951. thermmargin = 5
  43952. thermformcaption = ("")
  43953. reportstartrundatetime = (DTOT({}))
  43954. reportstoprundatetime = (DTOT({}))
  43955. includeseconds = .T.
  43956. secondstext = ("secs")
  43957. escapereference = ("")
  43958. onescapecommand = ("")
  43959. thermcaption = 
  43960.      284[m.cMessage+ " "+ TRANSFORM(THIS.PercentDone,"999"+IIF(THIS.ThermPrecision=0,"","."+REPL("9",THIS.ThermPrecision))) + "%" + IIF(NOT THIS.IncludeSeconds, "" , " "+TRANSFORM(IIF(THIS.IsRunning,DATETIME(), THIS.ReportStopRunDateTime)-THIS.ReportStartRunDateTime)+" " + THIS.SecondsText)]
  43961. initstatustext = ("")
  43962. prepassstatustext = ("")
  43963. runstatustext = ("")
  43964. percentdone = (0)
  43965. currentrecord = (0)
  43966. drivingaliascurrentrecno = (0)
  43967. frxbandrecno = (0)
  43968. designateddriver = ("")
  43969. successorsys2024 = ("N")
  43970. thermprecision = (0)
  43971. _memberdata = 
  43972.     2919<VFPData><memberdata name="percentdone" type="property" display="percentDone" favorites="False" /> <memberdata name="createtherm" type="method" display="createTherm" favorites="False" /> <memberdata name="currentrecord" type="property" display="currentRecord" favorites="False" /><memberdata name="designateddriver" type="property" display="designatedDriver" favorites="False" /> <memberdata name="drivingaliascurrentrecno" type="property" display="drivingAliasCurrentRecno" favorites="False" /> <memberdata name="escapereference" type="property" display="escapeReference" favorites="False" /> <memberdata name="frxbandrecno" type="property" display="frxBandRecno" favorites="False" /> <memberdata name="getparentwindowref" type="method" display="getParentWindowRef" favorites="False" /> <memberdata name="getreportscopedriver" type="method" display="getReportScopeDriver" favorites="False"/><memberdata name="includeseconds" type="property" display="includeSeconds" favorites="True" /> <memberdata name="initstatustext" type="property" display="initStatusText" favorites="True" /> <memberdata name="onescapecommand" type="property" display="onEscapeCommand" favorites="False" /> <memberdata name="prepassstatustext" type="property" display="prepassStatusText" favorites="True" /> <memberdata name="reportstartrundatetime" type="property" display="reportStartRunDatetime" favorites="True" /> <memberdata name="reportstoprundatetime" type="property" display="reportStopRunDatetime" favorites="True" /> <memberdata name="resetuserfeedback" type="method" display="resetUserFeedback" favorites="False" /> <memberdata name="runstatustext" type="property" display="runStatusText" favorites="True" /> <memberdata name="secondstext" type="property" display="secondsText" favorites="True" /> <memberdata name="setescape" type="property" display="setEscape" favorites="False" /> <memberdata name="setnotifycursor" type="property" display="setNotifyCursor" favorites="False" /> <memberdata name="setthermformcaption" type="method" display="setThermformCaption" favorites="False" /> <memberdata name="thermcaption" type="property" display="thermCaption" favorites="True" /> <memberdata name="thermprecision" type="property" display="thermPrecision" favorites="True" /> <memberdata name="thermform" type="property" display="thermForm" favorites="False" /> <memberdata name="thermformcaption" type="property" display="thermFormCaption" favorites="True" /> <memberdata name="thermformheight" type="property" display="thermFormHeight" favorites="True" /> <memberdata name="thermformwidth" type="property" display="thermFormWidth" favorites="True" /> <memberdata name="thermmargin" type="property" display="thermMargin" favorites="True" /> <memberdata name="synchstatus" type="method" display="synchStatus" favorites="False" /><memberdata name="successorsys2024" type="property" display="successorSys2024" favorites="False" /></VFPData>
  43973. Name = "updatelistener"
  43974. xmlmode 0 = data only, 1 = RDL only, 2 = data and RDL
  43975. includebreaksindata 0 = provide page band nodes positioned along with other bands in the datastream, wherever they happen to occur, 1 = no pagebreak info, no page header and footer info, 2 = collection of pages with page headers and footers data
  43976. pagenodes Holds page-level output during a report run.
  43977. currentband Holds information about the band for which output is currently being generated during a report run.
  43978. currentdocument Holds information about the XML document for which output is currently being generated during a report run.
  43979. currentpage Holds information about the page for which output is currently being generated during a report run.
  43980. columnnodes Holds column-level output during a report run.
  43981. currentcolumn Holds information about the column for which output is currently being generated during a report run.
  43982. idattribute Supplies the name of the XML attribute used to provide the FRX record number for a layout object or page number of a formatting band (column or page) object.
  43983. idrefattribute Supplies the name of the XML attribute used to provide the current page for a layout object or FRX record number of a formatting band (column or page) object.
  43984. xsltprocessorrdl Holds an RDL-specific processor object, reserved for future use.
  43985. xsltprocessoruser Holds a user-definable processor object which, if filled and available at the end of a run, can be used automatically by XML Listener to transform the raw XML document to requirements.
  43986. datanodes Holds non-formatting output (title, detail, group, and summary band objects) during a report run.
  43987. includeformattinginlayoutobjects Indicates whether formatting information such as positioning attributes should be included in the report XML.
  43988. includebandswithnoobjects Indicates whether band-level information for bands with no contents should be included in the XML.
  43989. nopageeject Indicates whether the XML Listener should consider the current report run to be continued.  Can be used without NOPAGEEJECT on the REPORT FORM command.
  43990. topattr Supplies the name of the XML attribute used to show topmost position for a layout object.
  43991. leftattr Supplies the name of the XML attribute used to show leftmost position for a layout object.
  43992. heightattr Supplies the name of the XML attribute used to show height for a layout object.
  43993. widthattr Supplies the name of the XML attribute used to show width for a layout object.
  43994. contattr Supplies the name of the attribute used to show continuation type for a layout object that can span bands or pages.
  43995. includedatasourcesinvfprdl Indicates whether information about the source tables, relations, indexes, etc should be included in the VFPRDL metadata section of the report XML.
  43996. applyusertransform Indicates whether XMLListener should automatically apply an XSLT transform at the conclusion of a report run.
  43997. xsltparameters Holds an optional parameter collection passed to the ApplyXSLT method when XMLListener automatically  applies a user XSLT transformation at the conclusion of a report run.
  43998. includepage Evaluates whether the current page is part of the output page set and should be included in the XML document result.
  43999. includedatatypeattributes Indicates whether Data Type and Text information available in EvaluateContents should be included in the XML nodes generated for Field controls.
  44000. datatypeattr Supplies the name of the XML attribute used to show the datatype of the evaluated expression for a field control layout object.
  44001. datatextattr Supplies the name of the XML attribute used to show the TRANSFORM'd value of the evaluated expression for a field control layout object.
  44002. formattingchanges Reference in which classes can store information about actions taken to apply dynamic changes to layout controls' formatting attributes, for later use during Render event.
  44003. evaluatecontentsvalues An EMPTY object reference to hold changed formatting values during Rendering.
  44004. pageimageattr Supplies the name of the XML attribute used to show the filename for an associated generated page image file.
  44005. applyrdltransform Indicates whether an RDL-Only transformation is available and should be applied to XML output after an RDL-Only report run.
  44006. successorgfxnorender Private gfxNoRender object instance used for rendering checks specific to this output target when this reportListener is a Successor.
  44007. *xmlrawtag Used to formulate the contents of an XML tag when XML Listener is writing the XML document as raw data to a file.
  44008. *xmlrawnode Used to formulate the contents of an XML element  node when XML Listener is writing the XML document as raw data to a file.
  44009. *xmlrawconv Used to convert any control characters to entity references when XML Listener is writing raw XML data to a file.
  44010. *writeraw Used to write raw XML data to a file.
  44011. *includebreaksindata_assign 
  44012. *xmlmode_assign 
  44013. *resetreport Resets information for a report-level node during the production of an XML document that may span multiple reports.
  44014. *applyxslt Provides generic facilities for applying XSLT to XML.
  44015. *currentdocument_assign 
  44016. *idattribute_assign 
  44017. *idrefattribute_assign 
  44018. *xsltprocessorrdl_assign 
  44019. *xsltprocessoruser_assign 
  44020. *resetdocument Resets the XML document after a report run.
  44021. *verifyncname Generic method to validate strings as XML-standard NCNames.
  44022. *includeformattinginlayoutobjects_assign 
  44023. *includebandswithnoobjects_assign 
  44024. *verifynodenames Method called during XML Listener's augmented version of VerifyConfigTable to check all node values in the configuration table for XML validity.
  44025. *verifyattributenames Hook method called during XML Listener's augmented version of VerifyConfigTable, allowing subclasses to verify attribute names should they decide to store them in the configuration table similar to node names.
  44026. *nopageeject_assign 
  44027. *loadprocessorobject Provides a generic means to load an XSLT processor object from a string representing an XSLT document or a filename.
  44028. *getrawformattinginfo Formulates the appropriate formatting attributes for an element when XMLListener is streaming XML to a file.
  44029. *topattr_assign 
  44030. *leftattr_assign 
  44031. *heightattr_assign 
  44032. *widthattr_assign 
  44033. *contattr_assign 
  44034. *getvfprdlcontents Translates report definition layout metadata, from the FRX and the current report run, into an XML format useful to other applications.
  44035. *includedatasourcesinvfprdl_assign 
  44036. *getpathedimageinfo Supplies a fully-pathed filename for an image file included in the report, using the original relative-path information stored in the FRX.
  44037. *applyusertransformtooutput Applies a user-specified XSLT to XML output at the conclusion of a report run.
  44038. *applyusertransform_assign 
  44039. *getdefaultuserxslt Provides a hook for subclasses to supply their preferred XSLT document for use when XMLListener automatically applies XSLT at the end of a report run.
  44040. *setdomformattinginfo Formulates the appropriate formatting attributes for an element when XMLListener is using the DOM to create XML.
  44041. *synchxsltprocessoruser Can be called in the assign of any Attribute-setting property to synchronize the XSLT associated with the class witht he new attribute values.
  44042. *insertxmlconfigrecords Adds a record to the configuration table describing a default XML node when XML Listener is creating or editing a shared configuration table.
  44043. *xsltparameters_assign 
  44044. *getfrxlayoutobjectfieldlist Provides fields list to the getVFPRdlContents method, in a suitable comma-delimited format for inclusion as a macro in SQL SELECT statement from FRX cursor and related Bands and Objects cursors.
  44045. *preparefrxcopy Prepares FRX alias or copy for use in creating VFP-RDL contents.
  44046. *removefrxcopy Removes FRX copy used in preparing VFP-RDL.
  44047. *adjustxsltparameter Adds, changes, or removes a parameter in the XSLT Parameter Collection, creating the collection if necessary. Params: tvValue, tsKey, tlRemoveOnly.
  44048. *getrunnodecontents Translates information dynamically generated and provided in the runCollector member into an XML format useful to other applications.
  44049. *addrunnode Adds a node to the Run portion of the XML document, looking for value results in both FRX and Report Run (Current) Data sessions.
  44050. *includedatatypeattributes_assign 
  44051. *datatypeattr_assign 
  44052. *datatextattr_assign 
  44053. *initializeformattingchangescursor Evaluates requirements for a cursor to hold information gathered for Field layout controls during this report run and creates it if necessary.
  44054. *formatdatavalue Provides opportunity to re-format data value delivered in EvaluateContents appropriately for text/TRANSFORM'd version.
  44055. *pageimageattr_assign 
  44056. *evaluatestringtoboolean Casts a string to .T. or .F..
  44057. *applyrdltransform_access 
  44058. *fixmsxmlobjectfordtds Adjust MSXML document objects to load XML with embedded DTDs properly.
  44059. *frxcharsetsinuse Determine whether the FRX for a report run has layout elements with explicit charset instructions.
  44060. thermform Holds an object reference to the user feedback form.
  44061. thermformheight Holds the height of the user feedback form, in pixels.  
  44062. thermformwidth Holds the width of the user feedback form, in pixels.  
  44063. thermmargin Holds the value (in pixels) used to determine the difference between the size of the user feedback window and the thermometer bar it displays.
  44064. thermformcaption Holds the value used to set the title of the user feedback form.
  44065. reportstartrundatetime A datetime value indicating when the last report generation run began.
  44066. reportstoprundatetime A datetime value for use at the conclusion of a report run, empty during a report, storing when the last report generation run ended.
  44067. includeseconds Indicates whether the default user feedback message should include timing data.
  44068. secondstext Provides the text message included to describe the time value in the default user feedback message during a report, when IncludeSeconds is .T.
  44069. setnotifycursor Saves the state of SET NOTIFY CURSOR previous to the report run, for later restoration.
  44070. setescape Saves the state of SET ESCAPE previous to the report run, for later restoration.
  44071. escapereference Holds the name of a public variable used to facilitate interrupting a report run.
  44072. onescapecommand Saves the user's previous ON ESCAPE command, if any, for restoration after the report run.
  44073. thermcaption Holds an evaluated expression for use in the user feedback message shown during a report run. If this expression includes "cMessage", the contents of the argument provided to DoStatus will be included in the result of the evaluation.
  44074. initstatustext Provides the user message shown when user feedback first appears.
  44075. prepassstatustext User feedback message for use when the report is in a pre-generation pass to calculate _RECORDTOTAL.
  44076. runstatustext Provides a user message shown during the course of a report run.
  44077. percentdone Calculation of the ratio between the number of records, or pages, already generated to the number of records, or pages, in the total report.
  44078. currentrecord Holds the current record relative to the recordtotal in scope for the current report run.
  44079. drivingaliascurrentrecno Holds the RECNO() value in the cursor driving the report run, to assist in determining when to trigger a change in the user feedback.
  44080. frxbandrecno Holds the RECNO() of the band-describing record in the FRX table this class has determined is optimal for triggering a change in user feedback during a report run.
  44081. designateddriver Original selected alias for the report.
  44082. successorsys2024 Allows UpdateListener to "remember" if it has cancelled a report between the two report passes if it is in a two-pass process report, if it is a Successor.
  44083. thermprecision The number of places (precision) to use for evaluating and (by default) showing the percentage done.
  44084. *createtherm Creates and configures the "update" feedback window.
  44085. *secondstext_assign 
  44086. *thermformcaption_assign 
  44087. *thermformheight_assign 
  44088. *thermformwidth_assign 
  44089. *thermmargin_assign 
  44090. *includeseconds_assign 
  44091. *getparentwindowref Provides a window reference for the top form in which the user feedback window should appear.
  44092. *setthermformcaption Sets the user feedback window title using the ThermFormCaption property.
  44093. *thermcaption_assign 
  44094. *initstatustext_assign 
  44095. *prepassstatustext_assign 
  44096. *runstatustext_assign 
  44097. *resetuserfeedback Sets user feedback to an initialized state.
  44098. *getreportscopedriver Adjusts the alias driving CommandClauses.RecordTotal at the beginning of a report  when the DrivingAlias is engaged in one-to-many relationships.
  44099. *synchstatus Compares driving recno with currrently-saved information to evaluate need to update user feedback.
  44100. *thermprecision_assign 
  44101. FRXDataSession = -1
  44102. readconfiguration = (0)
  44103. targetfileext = ("TXT")
  44104. targetfilename = (FORCEPATH(SYS(2015),SYS(2023)))
  44105. targethandle = -1
  44106. configurationobjtype = 1000
  44107. configurationtable = ("")
  44108. externalfilelocation = ("")
  44109. pageimagetype = 0
  44110. pageimageextension = ("")
  44111. currentpageimagefilename = ("")
  44112. _memberdata = 
  44113.     2143<VFPData>
  44114.  <memberdata name="closetargetfile" type="method" display="closeTargetFile" favorites="False" />
  44115.  <memberdata name="configurationobjtype" type="property" display="configurationObjtype" favorites="True" />
  44116.  <memberdata name="configurationtable" type="property" display="configurationTable" favorites="False" />
  44117.  <memberdata name="createconfigtable" type="method" display="createConfigTable" favorites="True" />
  44118.  <memberdata name="getconfigtable" type="method" display="getConfigTable" favorites="True" />
  44119.  <memberdata name="opentargetfile" type="method" display="openTargetFile" favorites="False" />
  44120.  <memberdata name="readconfiguration" type="property" display="readConfiguration" favorites="True" />
  44121.  <memberdata name="setconfiguration" type="method" display="setConfiguration" favorites="True" />
  44122.  <memberdata name="targetfileext" type="property" display="targetFileExt" favorites="True" />
  44123.  <memberdata name="targetfilename" type="property" display="targetFileName" favorites="True" />
  44124.  <memberdata name="targethandle" type="property" display="targetHandle" favorites="True" />
  44125.  <memberdata name="verifyconfigtable" type="property" display="verifyConfigTable" favorites="True" />
  44126.  <memberdata name="verifytargetfile" type="method" display="verifyTargetFile" favorites="True" />
  44127. <memberdata name="externalfilelocation" type="property" display="externalFileLocation" favorites="True" />
  44128. <memberdata name="pageimagetype" type="property" display="pageImageType" favorites="True"/>
  44129. <memberdata name="getpageimageextension" type="method" display="getPageImageExtension"/>
  44130. <memberdata name="pageimageextension" type="property" display="pageImageExtension"/>
  44131. <memberdata name="generatepageimagefilename" type="method" 
  44132. display="generatePageImageFileName"/>
  44133. <memberdata name="supportspageimages" type="method" display="supportsPageImages"/>
  44134. <memberdata name="outputpageimage" type="method" display="outputPageImage"/>
  44135. <memberdata name="currentpageimagefilename" display="currentPageImageFilename" type="property"/>
  44136. <memberdata name="makeexternalfilelocationreachable" display="makeExternalFileLocationReachable" type="method"/>
  44137. </VFPData>
  44138. Name = "utilityreportlistener"
  44139. o_memberdata XML Metadata for customizable properties
  44140. successorsys2024 Allows UpdateListener to "remember" if it has cancelled a report between the two report passes if it is in a two-pass process report, if it is a Successor.
  44141. currentrecord Holds the current record relative to the recordtotal in scope for the current report run.
  44142. designateddriver Original selected alias for the report.
  44143. drivingaliascurrentrecno Holds the RECNO() value in the cursor driving the report run, to assist in determining when to trigger a change in the user feedback.
  44144. escapereference Holds the name of a public variable used to facilitate interrupting a report run.
  44145. frxbandrecno Holds the RECNO() of the band-describing record in the FRX table this class has determined is optimal for triggering a change in user feedback during a report run.
  44146. includeseconds Indicates whether the default user feedback message should include timing data.
  44147. initstatustext Provides the user message shown when user feedback first appears.
  44148. onescapecommand Saves the user's previous ON ESCAPE command, if any, for restoration after the report run.
  44149. percentdone Calculation of the ratio between the number of records, or pages, already generated to the number of records, or pages, in the total report.
  44150. prepassstatustext User feedback message for use when the report is in a pre-generation pass to calculate _RECORDTOTAL.
  44151. reportstartrundatetime A datetime value indicating when the last report generation run began.
  44152. reportstoprundatetime A datetime value for use at the conclusion of a report run, empty during a report, storing when the last report generation run ended.
  44153. runstatustext Provides a user message shown during the course of a report run.
  44154. secondstext Provides the text message included to describe the time value in the default user feedback message during a report, when IncludeSeconds is .T.
  44155. thermcaption Holds an evaluated expression for use in the user feedback message shown during a report run. If this expression includes "cMessage", the contents of the argument provided to DoStatus will be included in the result of the evaluation.
  44156. thermformcaption Holds the value used to set the title of the user feedback form.
  44157. thermformheight Holds the height of the user feedback form, in pixels.  
  44158. thermformwidth Holds the width of the user feedback form, in pixels.  
  44159. thermmargin Holds the value (in pixels) used to determine the difference between the size of the user feedback window and the thermometer bar it displays.
  44160. setescape Saves the state of SET ESCAPE previous to the report run, for later restoration.
  44161. setnotifycursor Saves the state of SET NOTIFY CURSOR previous to the report run, for later restoration.
  44162. isrunning Indicates whether a report run is in progress.
  44163. drivingalias Stores the effective driving alias for a report from the point of view of the therm update.
  44164. thermprecision The number of places (precision) to use for evaluating and (by default) showing the percentage done.
  44165. persistbetweenruns Allows the therm window to continue to exist (maintaining its end-of-run contents) after the run of the report.  It may potentially show up on the automatic _MWINDOW list if this is turned on.
  44166. ndelay
  44167. *applyfx Implements required API for an object included in the FXListener FXs collection.
  44168. *includeseconds_assign 
  44169. *initstatustext_assign 
  44170. *prepassstatustext_assign 
  44171. *runstatustext_assign 
  44172. *secondstext_assign 
  44173. *thermcaption_assign 
  44174. *thermformcaption_assign 
  44175. *thermformheight_assign 
  44176. *thermformwidth_assign 
  44177. *thermmargin_assign 
  44178. *getparentwindowref Provides a window reference for the top form in which the user feedback window should appear.
  44179. *getreportscopedriver Adjusts the alias driving CommandClauses.RecordTotal at the beginning of a report  when the DrivingAlias is engaged in one-to-many relationships.
  44180. *resetuserfeedback Sets user feedback to an initialized state.
  44181. *setthermformcaption Sets the user feedback window title using the ThermFormCaption property.
  44182. *synchstatus Compares driving recno with currrently-saved information to evaluate need to update user feedback.
  44183. *dostatus Delegate for ReportListener DoStatus method.
  44184. *clearstatus Delegate for ReportListener ClearStatus method.
  44185. *updatestatus Delegate for ReportListener UpdateStatus method.
  44186. *pushuserfeedbackglobalsets Handles non-session-specific user feedback SETtings and behavior.
  44187. *popuserfeedbackglobalsets Handles non-session-specific user feedback SETtings and behavior.
  44188. *synchuserinterface Set up therm form to match latest user specifications.
  44189. *setupreport Handles ReportListener's BeforeReport status preparation chores.
  44190. *thermprecision_assign 
  44191. *persistbetweenruns_assign 
  44192. *createtherm 
  44193. *bringwindowtofront 
  44194. readconfiguration Indicates the conditions under which SetConfiguration code will run. 0=never, 1 = when the class instance Init runs, 2 = when the class instance runs BeforeReport, 3 = at both Init and BeforeReport.
  44195. targetfileext Provides the default file extension for file output.
  44196. targetfilename Provides the filename to which output will be written.  A unique name is generated for the class instance, which will be overwritten for successive report runs if not adjusted by the user.
  44197. targethandle Provides a low-level file handle, to which output is written directly when the class provides raw data to the file, otherwise reserves the file during the report run so other applications don't write to it .
  44198. configurationobjtype Holds the reserved value used to indicate that a configuration table row provides dynamic configuration information at runtime.
  44199. configurationtable Holds the name of the current configuration table.
  44200. externalfilelocation Assigns a  UNC or file system path, either relative to the main output target or absolute, the file-outputting process uses for external files, such as images, it creates along with the main output target. 
  44201. pageimagetype Indicates a type of image file you want generated for each output page in a report run at the conclusion of a chained report set.
  44202. pageimageextension Caches appropriate image file extension for current pageImageType.
  44203. currentpageimagefilename Provides the filename for the generated page image file for the current page during a report run, including the externalFileLocation path, which may be relative.
  44204. *readconfiguration_assign 
  44205. *setconfiguration Checks the current configuration table for dynamic information in records of appropriate type, and executes these instructions if found.
  44206. *getconfigtable Assesses and provides the name of the current configuration table, optionally creating it on disk if it is not available. 
  44207. *createconfigtable Creates a configuration table on demand.
  44208. *opentargetfile Initializes a file for output purposes.
  44209. *verifytargetfile Assures that the nominated filename and its network location are available at the beginning of a file-based report run.
  44210. *targetfileext_assign 
  44211. *targetfilename_assign 
  44212. *targethandle_assign 
  44213. *closetargetfile Finalizes file output.
  44214. *verifyconfigtable Ascertains that the format and and contents of the configuration meet requirements, adjusting it if necessary.
  44215. *configurationobjtype_access 
  44216. *externalfilelocation_assign 
  44217. *pageimagetype_assign 
  44218. *getpageimageextension Provides the appropriate file extension for the current pageImageType value.
  44219. *generatepageimagefilename Creates a filename for a generated page image file.
  44220. *supportspageimages Evaluates whether the current reporting mode supports generating page images.
  44221. *outputpageimage Use OutputPage method to create a page image file according to current report's requirements.
  44222. *currentpageimagefilename_assign 
  44223. *makeexternalfilelocationreachable Checks to see if the externalFileLocation (which may be relative to the current targetfilename) exists in the current environment, adjusting if necessary when the output process determines the need to create ancillary output files along with main target.
  44224. THIS.CommandClauses.Fileb
  44225. LIGENERALFIELDS
  44226. LLOPENED
  44227. COMMANDCLAUSES
  44228. SETFRXDATASESSION
  44229. OBJTYPE
  44230. OFFSET
  44231. RESETDATASESSIONd
  44232. VNEWVAL
  44233. THIS    
  44234. ISRUNNING
  44235. VERIFYNCNAME
  44236. IMAGESRCATTR
  44237. SYNCHXSLTPROCESSORUSER4
  44238. ?*"<>|
  44239. VNEWVAL
  44240. IMAGEFILEBASENAME
  44241. copyImageFiles
  44242. VNEWVAL
  44243. THIS    
  44244. ISRUNNING$
  44245. COPYIMAGEFILESTOEXTERNALFILELOCATION
  44246. ADJUSTXSLTPARAMETER!
  44247. MAKEEXTERNALFILELOCATIONREACHABLE*
  44248. GdipSaveImageToFile
  44249. GDIPLUS.DLL
  44250. CLSIDFromString
  44251. ole32
  44252. {557CF401-1A04-11D3-9A73-0000F81EF32E}
  44253. GDIPSAVEIMAGETOFILE
  44254. GDIPLUS
  44255. JPGCLSID
  44256. CLSIDFROMSTRING
  44257. OLE32
  44258. SENDGDIPLUSIMAGE!
  44259. MAKEEXTERNALFILELOCATIONREACHABLE
  44260. TNWIDTH
  44261. TNHEIGHT
  44262. UTILITYIMAGE
  44263. LLADJUSTHEIGHT
  44264. LLADJUSTWIDTH
  44265. HEIGHT
  44266. WIDTHd
  44267. VNEWVAL
  44268. THIS    
  44269. ISRUNNING
  44270. VERIFYNCNAME
  44271. FILLALPHAATTR
  44272. SYNCHXSLTPROCESSORUSERd
  44273. VNEWVAL
  44274. THIS    
  44275. ISRUNNING
  44276. VERIFYNCNAME
  44277. FILLREDATTR
  44278. SYNCHXSLTPROCESSORUSERd
  44279. VNEWVAL
  44280. THIS    
  44281. ISRUNNING
  44282. VERIFYNCNAME
  44283. FILLGREENATTR
  44284. SYNCHXSLTPROCESSORUSERd
  44285. VNEWVAL
  44286. THIS    
  44287. ISRUNNING
  44288. VERIFYNCNAME
  44289. FILLBLUEATTR
  44290. SYNCHXSLTPROCESSORUSERd
  44291. VNEWVAL
  44292. THIS    
  44293. ISRUNNING
  44294. VERIFYNCNAME
  44295. PENALPHAATTR
  44296. SYNCHXSLTPROCESSORUSERd
  44297. VNEWVAL
  44298. THIS    
  44299. ISRUNNING
  44300. VERIFYNCNAME
  44301. PENREDATTR
  44302. SYNCHXSLTPROCESSORUSERd
  44303. VNEWVAL
  44304. THIS    
  44305. ISRUNNING
  44306. VERIFYNCNAME
  44307. PENGREENATTR
  44308. SYNCHXSLTPROCESSORUSERd
  44309. VNEWVAL
  44310. THIS    
  44311. ISRUNNING
  44312. VERIFYNCNAME
  44313. PENBLUEATTR
  44314. SYNCHXSLTPROCESSORUSERd
  44315. VNEWVAL
  44316. THIS    
  44317. ISRUNNING
  44318. VERIFYNCNAME
  44319. FONTNAMEATTR
  44320. SYNCHXSLTPROCESSORUSERd
  44321. VNEWVAL
  44322. THIS    
  44323. ISRUNNING
  44324. VERIFYNCNAME
  44325. FONTSTYLEATTR
  44326. SYNCHXSLTPROCESSORUSERd
  44327. VNEWVAL
  44328. THIS    
  44329. ISRUNNING
  44330. VERIFYNCNAME
  44331. FONTSIZEATTR
  44332. SYNCHXSLTPROCESSORUSER]
  44333. VNEWVAL
  44334. LCVAL
  44335. PAGEIMAGEATTR
  44336. SYNCHXSLTPROCESSORUSER_
  44337. VNEWVAL
  44338. LCVAL
  44339. DATATYPEATTR
  44340. SYNCHXSLTPROCESSORUSER_
  44341. VNEWVAL
  44342. LCVAL
  44343. DATATEXTATTR
  44344. SYNCHXSLTPROCESSORUSER*
  44345. NFRXRECNO
  44346. OOBJPROPERTIES
  44347. SETFRXDATASESSION
  44348. FORMATTINGCHANGES
  44349. RELOAD
  44350. FILLRED
  44351. FILLGREEN
  44352. FILLBLUE
  44353. FILLALPHA
  44354. PENRED
  44355. PENGREEN
  44356. PENBLUE
  44357. PENALPHA
  44358. FNAME
  44359. FONTNAME
  44360. FSTYLE    
  44361. FONTSTYLE
  44362. FSIZE
  44363. FONTSIZE
  44364. RESETDATASESSIONc
  44365. CALLEVALUATECONTENTS
  44366. FORMATTINGCHANGES
  44367. FRXRECNO
  44368. RELOAD
  44369. DTEXT
  44370. DTYPE
  44371. FNAME
  44372. FSTYLE
  44373. FSIZE(
  44374. JPGCLSID
  44375. FORMATTINGCHANGES
  44376. UTILITYIMAGE_
  44377. VNEWVAL
  44378. LCVAL
  44379. CONTATTR
  44380. SYNCHXSLTPROCESSORUSER_
  44381. VNEWVAL
  44382. LCVAL
  44383. THIS    
  44384. WIDTHATTR
  44385. SYNCHXSLTPROCESSORUSER_
  44386. VNEWVAL
  44387. LCVAL
  44388. HEIGHTATTR
  44389. SYNCHXSLTPROCESSORUSER_
  44390. VNEWVAL
  44391. LCVAL
  44392. LEFTATTR
  44393. SYNCHXSLTPROCESSORUSER_
  44394. VNEWVAL
  44395. LCVAL
  44396. TOPATTR
  44397. SYNCHXSLTPROCESSORUSER_
  44398. VNEWVAL
  44399. LCVAL
  44400. IDATTRIBUTE
  44401. SYNCHXSLTPROCESSORUSER_
  44402. VNEWVAL
  44403. LCVAL
  44404. IDREFATTRIBUTE
  44405. SYNCHXSLTPROCESSORUSERT
  44406. XML Display Listener
  44407. APPNAME
  44408. HADERROR!
  44409. FRXRecno
  44410. TNLEFT
  44411. TNTOP
  44412. TNWIDTH
  44413. TNHEIGHT
  44414. TNOBJECTCONTINUATIONTYPE
  44415. LCINFO
  44416. ADJUSTSHAPEASPECTRATIO
  44417. IMAGEFIELDTOFILE
  44418. IMAGESRCATTR
  44419. SETFRXDATASESSION
  44420. FORMATTINGCHANGES
  44421. RELOAD
  44422. PENALPHAATTR
  44423. PENREDATTR
  44424. PENGREENATTR
  44425. PENBLUEATTR
  44426. FILLALPHAATTR
  44427. FILLREDATTR
  44428. FILLGREENATTR
  44429. FILLBLUEATTR
  44430. FONTNAMEATTR
  44431. FNAME
  44432. FONTSIZEATTR
  44433. FSIZE
  44434. FONTSTYLEATTR
  44435. FSTYLE
  44436. FRXRecno
  44437. TONODE
  44438. TNLEFT
  44439. TNTOP
  44440. TNWIDTH
  44441. TNHEIGHT
  44442. TNOBJECTCONTINUATIONTYPE
  44443. ADJUSTSHAPEASPECTRATIO
  44444. IMAGEFIELDTOFILE
  44445. SETATTRIBUTE
  44446. IMAGESRCATTR
  44447. SETFRXDATASESSION
  44448. FORMATTINGCHANGES
  44449. RELOAD
  44450. PENALPHAATTR
  44451. PENREDATTR
  44452. PENGREENATTR
  44453. PENBLUEATTR
  44454. FILLALPHAATTR
  44455. FILLREDATTR
  44456. FILLGREENATTR
  44457. FILLBLUEATTR
  44458. FONTNAMEATTR
  44459. FNAME
  44460. FONTSIZEATTR
  44461. FSIZE
  44462. FONTSTYLEATTR
  44463. FSTYLE
  44464. Image
  44465. NFRXRECNO
  44466. NLEFT
  44467. NWIDTH
  44468. NHEIGHT
  44469. NOBJECTCONTINUATIONTYPE
  44470. CCONTENTSTOBERENDERED
  44471. GDIPLUSIMAGE
  44472. LLCOPYIMAGE
  44473. LCFILE
  44474. LIDEFAULTBEHAVIOR
  44475. JPGCLSID
  44476. INITIALIZEFILECOPYSETTINGS
  44477. SETFRXDATASESSION
  44478. COPYIMAGEFILESTOEXTERNALFILELOCATION
  44479. OBJTYPE
  44480. OFFSET
  44481. GENERAL
  44482. UTILITYIMAGE
  44483. PICTURE
  44484. SETCURRENTDATASESSION
  44485. EXTERNALFILELOCATION
  44486. TARGETFILENAME
  44487. IMAGEFIELDTOFILE
  44488. SENDGDIPLUSIMAGE
  44489. GDIPSAVEIMAGETOFILE
  44490. IMAGEFILEBASENAME
  44491. IMAGEFIELDINSTANCE
  44492. RESETDATASESSION
  44493. STRING
  44494. EXCEPTION
  44495. THIS.CommandClauses.NoPageEjectb
  44496. OTEMPIMAGESCOLLECTION
  44497. LCITEM
  44498. LOEXC
  44499. NOPAGEEJECT
  44500. COMMANDCLAUSES
  44501. OLDEXTERNALFILELOCATION
  44502. EXTERNALFILELOCATION
  44503. OLDSENDGDIPLUSIMAGE
  44504. SENDGDIPLUSIMAGE
  44505. RESETDATASESSIONj
  44506. ImageFieldInstance
  44507. ImageFieldToFile
  44508. UtilityImage
  44509. RESETTODEFAULT
  44510. XMLMODE
  44511. OLDSENDGDIPLUSIMAGE
  44512. SENDGDIPLUSIMAGE
  44513. OLDEXTERNALFILELOCATION
  44514. EXTERNALFILELOCATION
  44515. JPGCLSID
  44516. CHECKREPORTFORGENERALFIELDS
  44517. INITIALIZEFILECOPYSETTINGS
  44518. RESETDATASESSION
  44519. externalFileLocation
  44520. copyImageFilesToExternalFileLocation
  44521. imageFileBaseName
  44522. TCNODENAME
  44523. TLASSTRING
  44524. COMMANDCLAUSES
  44525. EXTERNALFILELOCATION$
  44526. COPYIMAGEFILESTOEXTERNALFILELOCATION
  44527. IMAGEFILEBASENAME$
  44528. TLCALLEDEARLY
  44529. RESETDATASESSION
  44530. checkreportforgeneralfields,
  44531. imagesrcattr_assign
  44532. imagefilebasename_assign
  44533. copyimagefilestoexternalfilelocation_assign
  44534. initializefilecopysettings
  44535. adjustshapeaspectratio
  44536. fillalphaattr_assign
  44537. fillredattr_assignk
  44538. fillgreenattr_assign     
  44539. fillblueattr_assign
  44540. penalphaattr_assign
  44541. penredattr_assignC
  44542. pengreenattr_assign
  44543. penblueattr_assign
  44544. fontnameattr_assignb
  44545. fontstyleattr_assign
  44546. fontsizeattr_assign
  44547. pageimageattr_assign
  44548. datatypeattr_assign#
  44549. datatextattr_assign
  44550. EvaluateContentsa
  44551. initializeformattingchangescursor
  44552. Destroy
  44553. contattr_assign
  44554. widthattr_assign|
  44555. heightattr_assign
  44556. leftattr_assign
  44557. topattr_assignP
  44558. idattribute_assign
  44559. idrefattribute_assign
  44560. Init)
  44561. getrawformattinginfo
  44562. setdomformattinginfoC
  44563. Render
  44564. UnloadReport[(
  44565. resetdocument
  44566. BeforeReport
  44567. getvfprdlcontentsb,
  44568. AfterReport
  44569. +tPROCEDURE dodebug
  44570. LPARAMETERS m.p0, m.pcount, m.p1, m.p2, m.p3, m.p4, m.p5, m.p6, m.p7, m.p8, m.p9, m.p10, m.p11, m.p12
  44571. IF THIS.TargetHandle > 0 
  44572.    LOCAL m.liIndex, m.loObj, m.lvParam, m.liObjIndex, m.liMembers, laMembers[1]
  44573.    FWRITE( THIS.TargetHandle, m.p0 )
  44574.    FOR m.liIndex = 1 TO m.pcount
  44575.       m.lvParam = EVAL("p"+TRANS(liIndex))
  44576.       IF THIS.Verbose AND VARTYPE(m.lvParam) = "O"
  44577.          m.liMembers = AMEMBERS(laMembers, m.lvParam) && ,0,"G"
  44578.          FOR m.liIndex = 1 TO m.liMembers
  44579.             IF TYPE("lvParam."+laMembers[m.liIndex]) # "U"
  44580.                FWRITE(THIS.TargetHandle, ;
  44581.                   ",Obj."+laMembers[m.liIndex]+"="+TRANSFORM(EVAL("lvParam."+laMembers[m.liIndex])) )
  44582.             ENDIF
  44583.      
  44584.          ENDFOR
  44585.       ELSE
  44586.          FWRITE(THIS.TargetHandle, ","+TRANSF(m.lvParam))
  44587.       ENDIF
  44588.    ENDFOR
  44589.    FPUTS(THIS.TargetHandle, "")
  44590.    IF THIS.Verbose
  44591.       THIS.setCurrentDataSession()
  44592.       FWRITE(THIS.TargetHandle, ;
  44593.           "Listener.PageNo=" + IIF(THIS.sharedPageNo=0,;
  44594.                                    TRANSFORM(THIS.PageNo),  ;
  44595.                                    TRANSFORM(THIS.sharedPageNo))+ ", " + ;
  44596.           "_PAGENO="+TRANSFORM(_PAGENO))
  44597.       IF (NOT EMPTY(THIS.DrivingAlias)) AND USED(THIS.DrivingAlias)
  44598.          FWRITE(THIS.TargetHandle, ", " + THIS.DrivingAlias + " recno=" + TRANSFORM(RECNO(THIS.Drivingalias)))   
  44599.       ENDIF   
  44600.       
  44601.       IF NOT EMPTY(THIS.TargetAlias)
  44602.       
  44603.          FWRITE(THIS.TargetHandle, ", TargetAlias=" + THIS.TargetAlias + ", targetRecno=" + TRANSFORM(RECNO(THIS.TargetAlias)))         
  44604.       
  44605.       ENDIF
  44606.       FPUTS(THIS.TargetHandle, "")   
  44607.       THIS.resetDataSession()
  44608.    ENDIF
  44609.    FFLUSH(THIS.targetHandle)
  44610. ENDIF   
  44611. ENDPROC
  44612. PROCEDURE dodebugcommandclauses
  44613. LPARAMETERS m.tvCommand, m.tcHeader
  44614. IF VARTYPE(m.tvCommand) = "O" AND THIS.TargetHandle > 0 
  44615.    LOCAL m.liIndex, laMembers[1], m.liMembers
  44616.    FPUTS( THIS.TargetHandle, REPL("-",30) )   
  44617.    FPUTS( THIS.TargetHandle, "MEMBERS:" )
  44618.    m.liMembers = AMEMBERS(laMembers, THIS) && ,0,"G"
  44619.    FOR m.liIndex = 1 TO m.liMembers
  44620.       IF TYPE("THIS."+laMembers[m.liIndex]) # "U"
  44621.          FPUTS(THIS.TargetHandle, "."+laMembers[m.liIndex]+"="+TRANSFORM(EVAL("THIS."+laMembers[m.liIndex])) )
  44622.       ENDIF
  44623.    ENDFOR
  44624.    FPUTS( THIS.TargetHandle, REPL("-",30) )   
  44625.    FPUTS( THIS.TargetHandle, tcHeader )
  44626.       
  44627.    m.liMembers = AMEMBERS(laMembers, m.tvCommand)   
  44628.    IF m.liMembers = 0
  44629.       FPUTS(THIS.TargetHandle, "... NO MEMBERS")
  44630.    ELSE
  44631.       FOR m.liIndex = 1 TO m.liMembers
  44632.         FPUTS(THIS.TargetHandle, "."+laMembers[m.liIndex]+"="+TRANSFORM(EVAL("tvCommand."+laMembers[m.liIndex])) )
  44633.       ENDFOR
  44634.      
  44635.    ENDIF   
  44636.    FPUTS( THIS.TargetHandle, REPL("-",30) )      
  44637.    FFLUSH(THIS.targetHandle)
  44638. ENDIF
  44639. ENDPROC
  44640. PROCEDURE verbose_assign
  44641. LPARAMETERS m.vNewVal
  44642. IF VARTYPE(m.vNewVal) = "L"
  44643.    THIS.Verbose = m.vNewVal
  44644. ENDIF   
  44645. ENDPROC
  44646. PROCEDURE OutputPage
  44647. LPARAMETERS  m.p1, m.p2, m.p3, m.p4, m.p5, m.p6, m.p7, m.p8, m.p9, m.p10, m.p11, m.p12
  44648. THIS.DoDebug(PROGRAM(), PCOUNT(), ;
  44649.     m.p1, m.p2, m.p3, m.p4, m.p5, m.p6, m.p7, m.p8, m.p9, m.p10, m.p11, m.p12)
  44650. ENDPROC
  44651. PROCEDURE IncludePageInOutput
  44652. LPARAMETERS  m.p1, m.p2, m.p3, m.p4, m.p5, m.p6, m.p7, m.p8, m.p9, m.p10, m.p11, m.p12
  44653. THIS.DoDebug(PROGRAM(), PCOUNT(), ;
  44654.     m.p1, m.p2, m.p3, m.p4, m.p5, m.p6, m.p7, m.p8, m.p9, m.p10, m.p11, m.p12)
  44655. RETURN DODEFAULT(m.p1)
  44656. ENDPROC
  44657. PROCEDURE EvaluateContents
  44658. LPARAMETERS  m.p1, m.p2, m.p3, m.p4, m.p5, m.p6, m.p7, m.p8, m.p9, m.p10, m.p11, m.p12
  44659. DODEFAULT(m.p1, m.p2)
  44660. THIS.DoDebug(PROGRAM(), PCOUNT(), ;
  44661.     m.p1, m.p2, m.p3, m.p4, m.p5, m.p6, m.p7, m.p8, m.p9, m.p10, m.p11, m.p12)
  44662. ENDPROC
  44663. PROCEDURE CancelReport
  44664. LPARAMETERS  m.p1, m.p2, m.p3, m.p4, m.p5, m.p6, m.p7, m.p8, m.p9, m.p10, m.p11, m.p12
  44665. THIS.DoDebug(PROGRAM(), PCOUNT(), ;
  44666.      m.p1, m.p2, m.p3, m.p4, m.p5, m.p6, m.p7, m.p8, m.p9, m.p10, m.p11, m.p12)
  44667. DODEFAULT()
  44668. ENDPROC
  44669. PROCEDURE UnloadReport
  44670. LPARAMETERS  m.p1, m.p2, m.p3, m.p4, m.p5, m.p6, m.p7, m.p8, m.p9, m.p10, m.p11, m.p12
  44671. IF THIS.includeLoadAndUnload 
  44672.    LOCAL lcProgram
  44673.    lcProgram = PROGRAM()
  44674.    THIS.DoDebug(lcProgram, PCOUNT(),;
  44675.         m.p1, m.p2, m.p3, m.p4, m.p5, m.p6, m.p7, m.p8, m.p9, m.p10, m.p11, m.p12)
  44676.    THIS.DoDebugCommandClauses(THIS.CommandClauses,m.lcProgram+ " current CommandClauses")
  44677. ENDIF   
  44678. IF THIS.TargetHandle > 0 AND (NOT THIS.CommandClauses.NoPageEject)
  44679.    THIS.CloseTargetFile()
  44680.    IF NOT THIS.QuietMode
  44681.       MODI FILE (THIS.Targetfilename) NOWAIT
  44682.    ENDIF
  44683. ENDIF   
  44684. DODEFAULT()
  44685. ENDPROC
  44686. PROCEDURE LoadReport
  44687. LPARAMETERS  m.p1, m.p2, m.p3, m.p4, m.p5, m.p6, m.p7, m.p8, m.p9, m.p10, m.p11, m.p12
  44688. DODEFAULT()
  44689. IF THIS.IncludeLoadandUnload 
  44690.   IF THIS.TargetHandle = -1
  44691.      THIS.OpenTargetFile()
  44692.   ENDIF
  44693.   THIS.DoDebug(PROGRAM(), PCOUNT(), ;
  44694.       m.p1, m.p2, m.p3, m.p4, m.p5, m.p6, m.p7, m.p8, m.p9, m.p10, m.p11, m.p12)
  44695.   THIS.DoDebugCommandClauses(THIS.CommandClauses,PROGRAM()+ " received CommandClauses")
  44696. ENDIF  
  44697. ENDPROC
  44698. PROCEDURE WriteMethod
  44699. LPARAMETERS  m.p1, m.p2, m.p3, m.p4, m.p5, m.p6, m.p7, m.p8, m.p9, m.p10, m.p11, m.p12
  44700. THIS.DoDebug(PROGRAM(), PCOUNT(), ;
  44701.      m.p1, m.p2, m.p3, m.p4, m.p5, m.p6, m.p7, m.p8, m.p9, m.p10, m.p11, m.p12)
  44702. ENDPROC
  44703. PROCEDURE WriteExpression
  44704. LPARAMETERS  m.p1, m.p2, m.p3, m.p4, m.p5, m.p6, m.p7, m.p8, m.p9, m.p10, m.p11, m.p12
  44705. THIS.DoDebug(PROGRAM(), PCOUNT(), ;
  44706.      m.p1, m.p2, m.p3, m.p4, m.p5, m.p6, m.p7, m.p8, m.p9, m.p10, m.p11, m.p12)
  44707. ENDPROC
  44708. PROCEDURE UpdateStatus
  44709. LPARAMETERS  m.p1, m.p2, m.p3, m.p4, m.p5, m.p6, m.p7, m.p8, m.p9, m.p10, m.p11, m.p12
  44710. THIS.DoDebug(PROGRAM(), PCOUNT(), ;
  44711.      m.p1, m.p2, m.p3, m.p4, m.p5, m.p6, m.p7, m.p8, m.p9, m.p10, m.p11, m.p12)
  44712. DODEFAULT()
  44713. ENDPROC
  44714. PROCEDURE SupportsListenerType
  44715. LPARAMETERS  m.p1, m.p2, m.p3, m.p4, m.p5, m.p6, m.p7, m.p8, m.p9, m.p10, m.p11, m.p12
  44716. THIS.DoDebug(PROGRAM(), PCOUNT(), ;
  44717.     m.p1, m.p2, m.p3, m.p4, m.p5, m.p6, m.p7, m.p8, m.p9, m.p10, m.p11, m.p12)
  44718. ENDPROC
  44719. PROCEDURE SaveAsClass
  44720. LPARAMETERS  m.p1, m.p2, m.p3, m.p4, m.p5, m.p6, m.p7, m.p8, m.p9, m.p10, m.p11, m.p12
  44721. THIS.DoDebug(PROGRAM(), PCOUNT(), ;
  44722.     m.p1, m.p2, m.p3, m.p4, m.p5, m.p6, m.p7, m.p8, m.p9, m.p10, m.p11, m.p12)
  44723. ENDPROC
  44724. PROCEDURE ResetToDefault
  44725. LPARAMETERS  m.p1, m.p2, m.p3, m.p4, m.p5, m.p6, m.p7, m.p8, m.p9, m.p10, m.p11, m.p12
  44726. THIS.DoDebug(PROGRAM(), PCOUNT(), ;
  44727.     m.p1, m.p2, m.p3, m.p4, m.p5, m.p6, m.p7, m.p8, m.p9, m.p10, m.p11, m.p12)
  44728. ENDPROC
  44729. PROCEDURE ReadMethod
  44730. LPARAMETERS  m.p1, m.p2, m.p3, m.p4, m.p5, m.p6, m.p7, m.p8, m.p9, m.p10, m.p11, m.p12
  44731. THIS.DoDebug(PROGRAM(), PCOUNT(), ;
  44732.      m.p1, m.p2, m.p3, m.p4, m.p5, m.p6, m.p7, m.p8, m.p9, m.p10, m.p11, m.p12)
  44733. ENDPROC
  44734. PROCEDURE ReadExpression
  44735. LPARAMETERS  m.p1, m.p2, m.p3, m.p4, m.p5, m.p6, m.p7, m.p8, m.p9, m.p10, m.p11, m.p12
  44736. THIS.DoDebug(PROGRAM(), PCOUNT(), ;
  44737.      m.p1, m.p2, m.p3, m.p4, m.p5, m.p6, m.p7, m.p8, m.p9, m.p10, m.p11, m.p12)
  44738. ENDPROC
  44739. PROCEDURE OnPreviewClose
  44740. LPARAMETERS  m.p1, m.p2, m.p3, m.p4, m.p5, m.p6, m.p7, m.p8, m.p9, m.p10, m.p11, m.p12
  44741. THIS.DoDebug(PROGRAM(), PCOUNT(), ;
  44742.     m.p1, m.p2, m.p3, m.p4, m.p5, m.p6, m.p7, m.p8, m.p9, m.p10, m.p11, m.p12)
  44743. ENDPROC
  44744. PROCEDURE ClearStatus
  44745. LPARAMETERS m.p1, m.p2, m.p3, m.p4, m.p5, m.p6, m.p7, m.p8, m.p9, m.p10, m.p11, m.p12
  44746. THIS.DoDebug(PROGRAM(), PCOUNT(), ;
  44747.     m.p1, m.p2, m.p3, m.p4, m.p5, m.p6, m.p7, m.p8, m.p9, m.p10, m.p11, m.p12)
  44748. DODEFAULT()
  44749. ENDPROC
  44750. PROCEDURE Render
  44751. LPARAMETERS  m.p1, m.p2, m.p3, m.p4, m.p5, m.p6, m.p7, m.p8, m.p9, m.p10, m.p11, m.p12
  44752. IF DODEFAULT( m.p1, @m.p2, @m.p3, @m.p4, @m.p5, @m.p6, @m.p7,@m.p8) #  OUTPUTFX_BASERENDER_NORENDER
  44753.     THIS.DoDebug(PROGRAM(), PCOUNT(), ;
  44754.         m.p1, m.p2, m.p3, m.p4, m.p5, m.p6, m.p7, m.p8, m.p9, m.p10, m.p11, m.p12)
  44755. ENDIF
  44756. ENDPROC
  44757. PROCEDURE DoStatus
  44758. LPARAMETERS  m.p1, m.p2, m.p3, m.p4, m.p5, m.p6, m.p7, m.p8, m.p9, m.p10, m.p11, m.p12
  44759. THIS.DoDebug(PROGRAM(), PCOUNT(), ;
  44760.      m.p1, m.p2, m.p3, m.p4, m.p5, m.p6, m.p7, m.p8, m.p9, m.p10, m.p11, m.p12)
  44761. DODEFAULT(m.p1)
  44762. ENDPROC
  44763. PROCEDURE BeforeBand
  44764. LPARAMETERS  m.p1, m.p2, m.p3, m.p4, m.p5, m.p6, m.p7, m.p8, m.p9, m.p10, m.p11, m.p12
  44765. THIS.DoDebug(PROGRAM(), PCOUNT(), ;
  44766.     m.p1, m.p2, m.p3, m.p4, m.p5, m.p6, m.p7, m.p8, m.p9, m.p10, m.p11, m.p12)
  44767. DODEFAULT(m.p1, m.p2)
  44768. IF THIS.Verbose
  44769.    THIS.TargetAlias = ""
  44770.    IF m.p1 = FRX_OBJCOD_DETAIL
  44771.       THIS.SetFRXDataSession()
  44772.       GO m.p2 IN FRX
  44773.       IF NOT EMPTY(FRX.Expr)
  44774.          THIS.TargetAlias = UPPER(EVALUATE(FRX.Expr))
  44775.       ENDIF
  44776.       THIS.resetDataSession()
  44777.    ENDIF
  44778. ENDIF   
  44779. ENDPROC
  44780. PROCEDURE AfterBand
  44781. LPARAMETERS  m.p1, m.p2, m.p3, m.p4, m.p5, m.p6, m.p7, m.p8, m.p9, m.p10, m.p11, m.p12
  44782. THIS.DoDebug(PROGRAM(), PCOUNT(), ;
  44783.      m.p1, m.p2, m.p3, m.p4, m.p5, m.p6, m.p7, m.p8, m.p9, m.p10, m.p11, m.p12)
  44784. DODEFAULT(m.p1, m.p2)
  44785. ENDPROC
  44786. PROCEDURE AdjustObjectSize
  44787. LPARAMETERS  m.p1, m.p2, m.p3, m.p4, m.p5, m.p6, m.p7, m.p8, m.p9, m.p10, m.p11, m.p12
  44788. DODEFAULT(m.p1, m.p2)
  44789. THIS.DoDebug(PROGRAM(), PCOUNT(), ;
  44790.      m.p1, m.p2, m.p3, m.p4, m.p5, m.p6, m.p7, m.p8, m.p9, m.p10, m.p11, m.p12)
  44791. ENDPROC
  44792. PROCEDURE AddProperty
  44793. LPARAMETERS  m.p1, m.p2, m.p3, m.p4, m.p5, m.p6, m.p7, m.p8, m.p9, m.p10, m.p11, m.p12
  44794. THIS.DoDebug(PROGRAM(), PCOUNT(), ;
  44795.              m.p1, m.p2, m.p3, m.p4, m.p5, m.p6, m.p7, m.p8, m.p9, m.p10, m.p11, m.p12)
  44796. ENDPROC
  44797. PROCEDURE AfterReport
  44798. LPARAMETERS  m.p1, m.p2, m.p3, m.p4, m.p5, m.p6, m.p7, m.p8, m.p9, m.p10, m.p11, m.p12
  44799. LOCAL m.lcProgram
  44800. m.lcProgram = PROGRAM()
  44801. THIS.DoDebug(m.lcProgram, PCOUNT(), ;
  44802.    m.p1, m.p2, m.p3, m.p4, m.p5, m.p6, m.p7, m.p8, m.p9, m.p10, m.p11, m.p12)
  44803. THIS.DoDebugCommandClauses(THIS.CommandClauses,m.lcProgram+ " current CommandClauses")
  44804. IF NOT (THIS.IncludeLoadAndUnload OR THIS.CommandClauses.NoPageEject)
  44805.    THIS.CloseTargetFile()
  44806.    IF NOT THIS.QuietMode
  44807.       MODI COMM (THIS.TargetFileName) NOWAIT
  44808.    ENDIF   
  44809. ENDIF   
  44810. DODEFAULT()
  44811. ENDPROC
  44812. PROCEDURE BeforeReport
  44813. LPARAMETERS m.p1, m.p2, m.p3, m.p4, m.p5, m.p6, m.p7, m.p8, m.p9, m.p10, m.p11, m.p12
  44814.    LOCAL m.lcProgram
  44815.    m.lcProgram = PROGRAM()
  44816.    DODEFAULT()
  44817.    IF THIS.Verbose
  44818.       THIS.setCurrentDataSession()
  44819.    ENDIF
  44820.    IF THIS.TargetHandle = -1 
  44821.       THIS.OpenTargetFile()
  44822.    ENDIF
  44823.   THIS.DoDebug(PROGRAM(), PCOUNT(), ;
  44824.        m.p1, m.p2, m.p3, m.p4, m.p5, m.p6, m.p7, m.p8, m.p9, m.p10, m.p11, m.p12)
  44825.   THIS.DoDebugCommandClauses(THIS.CommandClauses,m.lcProgram+ " received CommandClauses")
  44826.    IF THIS.verbose
  44827.       THIS.resetDataSession()
  44828.    ENDIF      
  44829. ENDPROC
  44830. PROCEDURE opentargetfile
  44831. IF WEXIST(JUSTSTEM(THIS.targetFileName))
  44832.    * because of the MODI FILE NOWAIT,
  44833.    * generate a new filename:
  44834.    THIS.targetFileName = SYS(2015)
  44835. ENDIF
  44836. DODEFAULT()   
  44837. ENDPROC
  44838. PROCEDURE Init
  44839. IF DODEFAULT()
  44840.    THIS.AppName = OUTPUTCLASS_APPNAME_LOC
  44841.    RETURN NOT THIS.hadError 
  44842.    RETURN .F.   
  44843. ENDIF
  44844. ENDPROC
  44845. Height = 25
  44846. Width = 356
  44847. ShowWindow = 1
  44848. ShowInTaskBar = .F.
  44849. DoCreate = .T.
  44850. AutoCenter = .T.
  44851. BorderStyle = 2
  44852. Caption = "ThermForm"
  44853. ControlBox = .F.
  44854. HalfHeightCaption = .T.
  44855. MaxButton = .F.
  44856. MinButton = .F.
  44857. Visible = .F.
  44858. AlwaysOnTop = .T.
  44859. AllowOutput = .F.
  44860. _memberdata = 
  44861.     3586<VFPDATA><memberdata name="applyfx" display="applyFX" type="method"/><memberdata name="percentdone" type="property" display="percentDone" favorites="False"/><memberdata name="currentrecord" type="property" display="currentRecord" favorites="False"/><memberdata name="designateddriver" type="property" display="designatedDriver" favorites="False"/><memberdata name="drivingaliascurrentrecno" type="property" display="drivingAliasCurrentRecno" favorites="False"/><memberdata name="escapereference" type="property" <VFPDATA><memberdata name="applyfx" display="applyFX" type="method"/><memberdata name="percentdone" type="property" display="percentDone" favorites="False"/><memberdata name="currentrecord" type="property" display="currentRecord" favorites="False"/><memberdata name="designateddriver" type="property" display="designatedDriver" favorites="False"/><memberdata name="drivingaliascurrentrecno" type="property" display="drivingAliasCurrentRecno" favorites="False"/><memberdata name="escapereference" type="property" <VFPDATA><memberdata name="applyfx" display="applyFX" type="method"/><memberdata name="percentdone" type="property" display="percentDone" favorites="False"/><memberdata name="currentrecord" type="property" display="currentRecord" favorites="False"/><memberdata name="designateddriver" type="property" display="designatedDriver" favorites="False"/><memberdata name="drivingaliascurrentrecno" type="property" display="drivingAliasCurrentRecno" favorites="False"/><memberdata name="escapereference" type="property" <VFPDATA><memberdata name="applyfx" display="applyFX" type="method"/><memberdata name="percentdone" type="property" display="percentDone" favorites="False"/><memberdata name="currentrecord" type="property" display="currentRecord" favorites="False"/><memberdata name="designateddriver" type="property" display="designatedDriver" favorites="False"/><memberdata name="drivingaliascurrentrecno" type="property" display="drivingAliasCurrentRecno" favorites="False"/><memberdata name="escapereference" type="property" <VFPDATA><memberdata name="applyfx" display="applyFX" type="method"/><memberdata name="percentdone" type="property" display="percentDone" favorites="False"/><memberdata name="currentrecord" type="property" display="currentRecord" favorites="False"/><memberdata name="designateddriver" type="property" display="designatedDriver" favorites="False"/><memberdata name="drivingaliascurrentrecno" type="property" display="drivingAliasCurrentRecno" favorites="False"/><memberdata name="escapereference" type="property" <VFPDATA><memberdata name="applyfx" display="applyFX" type="method"/><memberdata name="percentdone" type="property" display="percentDone" favorites="False"/><memberdata name="currentrecord" type="property" display="currentRecord" favorites="False"/><memberdata name="designateddriver" type="property" display="designatedDriver" favorites="False"/><memberdata name="drivingaliascurrentrecno" type="property" display="drivingAliasCurrentRecno" favorites="False"/><memberdata name="escapereference" type="property" <VFPDATA><memberdata name="applyfx" display="applyFX" type="method"/><memberdata name="percentdone" type="property" display="percentDone" favorites="False"/><memberdata name="currentrecord" type="property" display="currentRecord" favorites="False"/><memberdata name="designateddriver" type="property" display="designatedDriver" favorites="False"/><memberdata name="drivingaliascurrentrecno" type="property" display="drivingAliasCurrentRecno" favorites="False"/><memberdata name="escapereference" type="property" <V
  44862. successorsys2024 = ("N")
  44863. currentrecord = (0)
  44864. designateddriver = ("")
  44865. drivingaliascurrentrecno = (0)
  44866. escapereference = ("")
  44867. frxbandrecno = (0)
  44868. includeseconds = .T.
  44869. initstatustext = ("")
  44870. onescapecommand = ("")
  44871. percentdone = (0)
  44872. prepassstatustext = ("")
  44873. reportstartrundatetime = (DTOT({}))
  44874. reportstoprundatetime = (DTOT({}))
  44875. runstatustext = ("secs")
  44876. secondstext = ("")
  44877. thermcaption = 
  44878.      284[m.cMessage+ " "+ TRANSFORM(THIS.PercentDone,"999"+IIF(THIS.ThermPrecision=0,"","."+REPL("9",THIS.ThermPrecision))) + "%" + IIF(NOT THIS.IncludeSeconds, "" , " "+TRANSFORM(IIF(THIS.IsRunning,DATETIME(), THIS.ReportStopRunDateTime)-THIS.ReportStartRunDateTime)+" " + THIS.SecondsText)]
  44879. thermformcaption = ("")
  44880. thermformheight = (40)
  44881. thermformwidth = (356)
  44882. thermmargin = (5)
  44883. setescape = .F.
  44884. setnotifycursor = .F.
  44885. isrunning = .F.
  44886. drivingalias = ("")
  44887. thermprecision = (0)
  44888. persistbetweenruns = .F.
  44889. ndelay = 3
  44890. Name = "foxytherm"
  44891. B_memberdata XML Metadata for customizable properties
  44892. successorsys2024 Allows UpdateListener to "remember" if it has cancelled a report between the two report passes if it is in a two-pass process report, if it is a Successor.
  44893. currentrecord Holds the current record relative to the recordtotal in scope for the current report run.
  44894. designateddriver Original selected alias for the report.
  44895. drivingaliascurrentrecno Holds the RECNO() value in the cursor driving the report run, to assist in determining when to trigger a change in the user feedback.
  44896. escapereference Holds the name of a public variable used to facilitate interrupting a report run.
  44897. frxbandrecno Holds the RECNO() of the band-describing record in the FRX table this class has determined is optimal for triggering a change in user feedback during a report run.
  44898. includeseconds Indicates whether the default user feedback message should include timing data.
  44899. initstatustext Provides the user message shown when user feedback first appears.
  44900. onescapecommand Saves the user's previous ON ESCAPE command, if any, for restoration after the report run.
  44901. percentdone Calculation of the ratio between the number of records, or pages, already generated to the number of records, or pages, in the total report.
  44902. prepassstatustext User feedback message for use when the report is in a pre-generation pass to calculate _RECORDTOTAL.
  44903. reportstartrundatetime A datetime value indicating when the last report generation run began.
  44904. reportstoprundatetime A datetime value for use at the conclusion of a report run, empty during a report, storing when the last report generation run ended.
  44905. runstatustext Provides a user message shown during the course of a report run.
  44906. secondstext Provides the text message included to describe the time value in the default user feedback message during a report, when IncludeSeconds is .T.
  44907. thermcaption Holds an evaluated expression for use in the user feedback message shown during a report run. If this expression includes "cMessage", the contents of the argument provided to DoStatus will be included in the result of the evaluation.
  44908. thermformcaption Holds the value used to set the title of the user feedback form.
  44909. thermformheight Holds the height of the user feedback form, in pixels.  
  44910. thermformwidth Holds the width of the user feedback form, in pixels.  
  44911. thermmargin Holds the value (in pixels) used to determine the difference between the size of the user feedback window and the thermometer bar it displays.
  44912. setescape Saves the state of SET ESCAPE previous to the report run, for later restoration.
  44913. setnotifycursor Saves the state of SET NOTIFY CURSOR previous to the report run, for later restoration.
  44914. isrunning Indicates whether a report run is in progress.
  44915. drivingalias Stores the effective driving alias for a report from the point of view of the therm update.
  44916. thermprecision The number of places (precision) to use for evaluating and (by default) showing the percentage done.
  44917. persistbetweenruns Allows the therm window to continue to exist (maintaining its end-of-run contents) after the run of the report.  It may potentially show up on the automatic _MWINDOW list if this is turned on.
  44918. *applyfx Implements required API for an object included in the FXListener FXs collection.
  44919. *includeseconds_assign 
  44920. *initstatustext_assign 
  44921. *prepassstatustext_assign 
  44922. *runstatustext_assign 
  44923. *secondstext_assign 
  44924. *thermcaption_assign 
  44925. *thermformcaption_assign 
  44926. *thermformheight_assign 
  44927. *thermformwidth_assign 
  44928. *thermmargin_assign 
  44929. *getparentwindowref Provides a window reference for the top form in which the user feedback window should appear.
  44930. *getreportscopedriver Adjusts the alias driving CommandClauses.RecordTotal at the beginning of a report  when the DrivingAlias is engaged in one-to-many relationships.
  44931. *resetuserfeedback Sets user feedback to an initialized state.
  44932. *setthermformcaption Sets the user feedback window title using the ThermFormCaption property.
  44933. *synchstatus Compares driving recno with currrently-saved information to evaluate need to update user feedback.
  44934. *dostatus Delegate for ReportListener DoStatus method.
  44935. *clearstatus Delegate for ReportListener ClearStatus method.
  44936. *updatestatus Delegate for ReportListener UpdateStatus method.
  44937. *pushuserfeedbackglobalsets Handles non-session-specific user feedback SETtings and behavior.
  44938. *popuserfeedbackglobalsets Handles non-session-specific user feedback SETtings and behavior.
  44939. *synchuserinterface Set up therm form to match latest user specifications.
  44940. *setupreport Handles ReportListener's BeforeReport status preparation chores.
  44941. *thermprecision_assign 
  44942. *persistbetweenruns_assign 
  44943. PROCEDURE omitrendering
  44944. LPARAMETERS m.toListener, m.tcExpr
  44945. LOCAL m.llNoRender, m.liSession
  44946. IF VARTYPE(m.tcExpr) = "C"
  44947.    m.liSession = SET("DATASESSION")
  44948.    THIS.listener = m.toListener               
  44949.    SET DATASESSION TO m.toListener.CurrentDataSession
  44950.    IF TYPE(m.tcExpr) = "L"
  44951.       m.llNoRender = EVALUATE(m.tcExpr)
  44952.       SET DATASESSION TO m.toListener.FRXDataSession               
  44953.    ELSE
  44954.       SET DATASESSION TO m.toListener.FRXDataSession
  44955.       IF TYPE(m.tcExpr) = "L"
  44956.          m.llNoRender = EVALUATE(m.tcExpr)                 
  44957.      ENDIF
  44958.    ENDIF
  44959.    THIS.listener = NULL
  44960.    SET DATASESSION TO (m.liSession)
  44961. ENDIF            
  44962. RETURN m.llNoRender
  44963. ENDPROC
  44964. PROCEDURE applyfx
  44965. LPARAMETERS m.toListener, m.tcMethodToken, ;
  44966.             m.tP1, m.tP2, m.tP3, m.tP4, m.tP5, m.tP6, ;
  44967.             m.tP7, m.tP8, m.tP9, m.tP10, m.tP11, m.tP12
  44968. LOCAL m.liSession, m.liSelect, m.liFRXRecno, m.liReturn, ;
  44969.       m.llNoRender, m.llSwap, m.lcConditions, m.err AS Exception 
  44970. m.liReturn = OUTPUTFX_DEFAULT_RENDER_BEHAVIOR  
  44971. DO CASE
  44972. CASE m.tcMethodToken == "RENDER" AND ;
  44973.    NOT ISNULL(m.toListener.FFCGraphics)
  44974.    TRY
  44975.       m.liSession = SET("DATASESSION")
  44976.       SET DATASESSION TO m.toListener.FRXDataSession
  44977.       m.liSelect = SELECT(0)
  44978.       IF USED(THIS.noRenderDataAlias) 
  44979.          SELECT (THIS.noRenderDataAlias)
  44980.          m.liFRXRecno =  m.toListener.getFRXRecno(m.tcMethodToken,m.tP1, m.tP2)
  44981.          LOCATE FOR FrxRecno = m.liFRXRecno AND PreProcess 
  44982.          * there won't be any if it's a Sedna-type build, unless it was a built-in report
  44983.          * to another app and we couldn't make the swap.                    
  44984.          IF FOUND()
  44985.             m.llNoRender = THIS.omitRendering(m.toListener, ALLTRIM(Execute))
  44986.          ENDIF                          
  44987.          IF NOT (m.llNoRender)
  44988.             * rendering override for this instance in the report
  44989.             LOCATE FOR FrxRecno = m.liFRXRecno AND NOT PreProcess
  44990.             IF FOUND()        
  44991.                m.llNoRender = THIS.omitRendering(m.toListener, ALLTRIM(Execute))
  44992.             ENDIF   
  44993.          ENDIF           
  44994.          IF m.llNoRender
  44995.             m.liReturn = OUTPUTFX_BASERENDER_NORENDER
  44996.          ENDIF
  44997.       ENDIF
  44998.    CATCH TO m.err 
  44999.       #IF OUTPUTCLASS_DEBUGGING
  45000.          m.toListener.DoMessage(m.err.Message)
  45001.       #ELSE
  45002.          * could expose this error but won't,
  45003.          * we'll just swallow it
  45004.          * code line here for suspend capabilities
  45005.          m.liReturn = m.liReturn
  45006.       #ENDIF
  45007.    FINALLY
  45008.        SELECT (m.liSelect)
  45009.        SET DATASESSION TO (m.liSession)
  45010.    ENDTRY            
  45011. CASE m.tcMethodToken == "LOADREPORT" AND ;
  45012.     VERSION(4) > "09.00.0000.3504" AND ;
  45013.    (NOT m.toListener.CommandClauses.IsDesignerLoaded) AND ;
  45014.    FILE(m.toListener.CommandClauses.File)
  45015.     * We can't do this in a design session because
  45016.     * of the Designer's lock on the original file.
  45017.     * We also can't do this in SP1 or below, 
  45018.     * or when the report is built in to a different app.
  45019.     * (Note the use of FILE() rather than SYS(2000) here, 
  45020.     * it's okay if it's not on disk.)
  45021.     * We will still handle this at render time if we can't make the swap;
  45022.     * (we just won't get the performance benefits of preprocess-deletion)
  45023.    TRY
  45024.       m.liSession = SET("DATASESSION")
  45025.       SET DATASESSION TO m.toListener.FRXDataSession
  45026.       m.liSelect = SELECT(0)
  45027.       * nb: this is before memberdata is normally available.
  45028.       SELECT 0
  45029.         
  45030.       USE (m.toListener.CommandClausesFile) ;
  45031.           AGAIN NOUPDATE SHARED ALIAS  FRX
  45032.       m.toListener.FRXCursor.UnpackFrxMemberData("FRX",;
  45033.                    m.toListener.MemberDataAlias, m.toListener.FRXDataSession)
  45034.       USE IN FRX
  45035.       IF USED(m.toListener.MemberDataAlias) 
  45036.          SELECT (m.toListener.MemberDataAlias)
  45037.          LOCATE FOR Type = FRX_BLDR_MEMBERDATATYPE AND ;
  45038.                     Name == FRX_BLDR_NAMESPACE_ADVANCEDPROPS AND ;
  45039.                     ExecWhen == FRX_BLDR_ADVPROP_PREPROCESS_NORENDER AND ;
  45040.                     NOT EMPTY(Execute)  
  45041.          IF FOUND()           
  45042.             * check to see if we are already working on 
  45043.             * a temporary report.
  45044.             IF (NOT m.toListener.isFRXSwapCopyPresent())
  45045.                * must perform the swap, storing
  45046.                * CommandClauses.File for later use
  45047.                m.llSwap = .T.               
  45048.                m.toListener.prepareFRXSwapCopy(,,.T.)
  45049.             ENDIF   
  45050.             * After creating swap report or ascertaining that
  45051.             * we are already working with a temp report, 
  45052.             * delete the items in that report as required.
  45053.             * BUT FIRST make sure the swap went through as planned.
  45054.             IF m.llSwap AND ;
  45055.                (EMPTY(m.toListener.CommandClauses.File) OR ;
  45056.                 EMPTY(SYS(2000,m.toListener.CommandClauses.File)))
  45057.                m.llSwap = .F.
  45058.                m.toListener.CommandClauses.File = ;
  45059.                  m.toListener.commandClausesFile
  45060.             ENDIF
  45061.             * now if we're positive we're in the right place
  45062.             * and that we have possible memberdata content
  45063.             * we can start deleting records out of the swap copy:
  45064.             IF USED(m.toListener.MemberDataAlias) AND ;
  45065.                NOT (m.toListener.CommandClauses.File == ;
  45066.                     m.toListener.commandClausesFile)
  45067.                USE (m.toListener.CommandClauses.File) IN 0 ;
  45068.                       AGAIN EXCLU ALIAS FRX 
  45069.                       * can't do a NOUP to do the delete.
  45070.                       * since we're in a private copy,  
  45071.                       * we switch this to an
  45072.                       * EXCLU and PACK although it doesn't appear
  45073.                       * to be necessary for the engine's POV.
  45074.                       * This means users of this copy of the 
  45075.                       * FRX don't have to pay attention to
  45076.                       * whether some records are potentially-deleted.
  45077.                SELECT (m.toListener.MemberDataAlias)                
  45078.                SCAN FOR Type = FRX_BLDR_MEMBERDATATYPE AND ;
  45079.                         Name == FRX_BLDR_NAMESPACE_ADVANCEDPROPS AND ;
  45080.                         ExecWhen == FRX_BLDR_ADVPROP_PREPROCESS_NORENDER AND ;
  45081.                         NOT EMPTY(Execute)  
  45082.                   m.liRecno = FRXRecno                    
  45083.                   m.llNoRender = THIS.omitRendering(m.toListener,ALLTRIM(Execute))
  45084.                   IF m.llNoRender
  45085.                      SELECT FRX
  45086.                      DELETE ALL FOR RECNO() = m.liRecno
  45087.                      SELECT (m.toListener.MemberDataAlias)
  45088.                   ENDIF   
  45089.                ENDSCAN
  45090.                SELECT FRX
  45091.                PACK
  45092.             ENDIF   
  45093.          ENDIF
  45094.       ENDIF
  45095.    CATCH TO m.err 
  45096.       * revert the swap if we did one
  45097.       * being careful not to remove the original report
  45098.       #IF OUTPUTCLASS_DEBUGGING
  45099.       m.toListener.DoMessage(OUTPUTFX_CONDITIONALRENDERING_UNAVAILABLE_LOC + ;
  45100.                              CHR(13) + m.err.Message )
  45101.       #ENDIF
  45102.       IF m.llSwap 
  45103.           m.toListener.removeFRXSwapCopy(,OUTPUTCLASS_DEBUGGING )           
  45104.       ENDIF   
  45105.    FINALLY
  45106.        IF USED("FRX")
  45107.           USE IN FRX
  45108.        ENDIF
  45109.        * we must close this early version of the
  45110.        * memberdata cursor -- later its frxrecno values
  45111.        * will be re-created correctly
  45112.        IF USED(m.toListener.MemberDataAlias)
  45113.           USE IN (m.toListener.MemberDataAlias)
  45114.        ENDIF
  45115.        SELECT (m.liSelect)
  45116.        SET DATASESSION TO (m.liSession)
  45117.    ENDTRY            
  45118. CASE m.tcMethodToken == "BEFOREREPORT"
  45119.    m.liSession = SET("DATASESSION")
  45120.    SET Datasession TO m.toListener.FRXDataSession  
  45121.    IF USED(m.toListener.MemberDataAlias)
  45122.       m.liSelect = SELECT(0)
  45123.       m.lcConditions = "(ExecWhen == '" + FRX_BLDR_ADVPROP_PREPROCESS_NORENDER + "' OR " + ;
  45124.                        " ExecWhen == '" + FRX_BLDR_ADVPROP_INSTANCE_NORENDER +"' ) "
  45125.       SELECT FrxRecno,ExecWhen,Execute, ;
  45126.             IIF(ExecWhen == FRX_BLDR_ADVPROP_PREPROCESS_NORENDER, .T., .F.) AS PreProcess ;
  45127.          FROM (m.toListener.MemberDataAlias) ;
  45128.          INTO CURSOR (THIS.noRenderDataAlias) ;         
  45129.          WHERE Type = FRX_BLDR_MEMBERDATATYPE AND ;
  45130.                Name == FRX_BLDR_NAMESPACE_ADVANCEDPROPS AND ;
  45131.                (NOT EMPTY(Execute)) AND &lcConditions.           
  45132.       IF RECCOUNT(THIS.noRenderDataAlias) = 0
  45133.          USE IN (THIS.noRenderDataAlias)
  45134.       ELSE
  45135.          SELECT (THIS.noRenderDataAlias)
  45136.          INDEX ON FrxRecno TAG FrxRecno
  45137.       ENDIF                    
  45138.       SELECT (m.liSelect)
  45139.    ENDIF   
  45140.    SET Datasession TO (m.liSession)
  45141. CASE m.tcMethodToken == "UNLOADREPORT"
  45142.    * if swap was performed, and if the temporary
  45143.    * report is still "in place" 
  45144.    * as commandClausesFile 
  45145.    * get rid of temporary report 
  45146.    * if there is one and if it still exists
  45147.    * and return CommandClauses.File to its original value
  45148.    * it should not matter what order objects handle this
  45149.    IF m.toListener.isFRXSwapCopyPresent()
  45150.       m.liSession = SET("DATASESSION")
  45151.       SET DATASESSION TO m.toListener.FRXDataSession
  45152.       IF USED(THIS.noRenderDataAlias)
  45153.          USE IN (THIS.noRenderDataAlias)
  45154.       ENDIF
  45155.       m.liSelect = SELECT(0)
  45156.       IF USED("FRX")
  45157.          m.llSwap = .T.
  45158.          SELECT FRX
  45159.          USE
  45160.       ENDIF              
  45161.       m.toListener.removeFRXSwapCopy(,OUTPUTCLASS_DEBUGGING )           
  45162.       IF m.llSwap
  45163.         SELECT 0
  45164.         USE (m.toListener.CommandClauses.File) ALIAS FRX NOUPDATE
  45165.       ENDIF
  45166.       SELECT (m.liSelect)
  45167.       SET DATASESSION TO (m.liSession)
  45168.    ENDIF           
  45169. ENDCASE   
  45170. RETURN  m.liReturn
  45171. ENDPROC
  45172. PROCEDURE Destroy
  45173. THIS.listener = NULL
  45174. ENDPROC
  45175. ListenerType = 3
  45176. FRXDataSession = -1
  45177. lobjtypemode = .F.
  45178. lexpandfields = .F.
  45179. _memberdata = 
  45180.      777<VFPData><memberdata name="drawstringjustified" display="DrawStringJustified"/><memberdata name="lexpandfields" display="lExpandFields"/><memberdata name="drawstringintf" display="DrawStringInTF"/><memberdata name="tfprocess" display="TFProcess"/><memberdata name="tfaddtoarray" display="TFAddToArray"/><memberdata name="atfwords" display="aTFWords"/><memberdata name="tfaddtooutput" display="TFAddToOutput"/><memberdata name="lobjtypemode" display="lObjTypeMode"/><memberdata name="makepdfoffline" display="MakePDFOffline"/><memberdata name="makertfoffline" display="MakeRTFOffline"/><memberdata name="makexlsoffline" display="MakeXLSOffline"/><memberdata name="makehtmloffline" display="MakeHTMLOffline"/><memberdata name="makeimgoffline" display="MakeImgOffline"/></VFPData>
  45181. Name = "foxylistener"
  45182. PROCEDURE applyfx
  45183. LPARAMETERS m.toListener, m.tcMethodToken, ;
  45184.             m.tP1, m.tP2, m.tP3, m.tP4, m.tP5, m.tP6, ;
  45185.             m.tP7, m.tP8, m.tP9, m.tP10, m.tP11, m.tP12
  45186. LOCAL liSession, liAngle, liSelect, liFRXRecno, liReturn 
  45187. m.liReturn = OUTPUTFX_DEFAULT_RENDER_BEHAVIOR  
  45188. IF m.tcMethodToken == "RENDER" AND ;
  45189.    NOT ISNULL(m.toListener.FFCGraphics)
  45190.     IF toListener.FFCGraphics.GetHandle() = 0
  45191.         IF This.nExternalGdiPlusGfx > 0
  45192.             toListener.FFCGraphics.SetHandle(This.nExternalGdiPlusGfx)
  45193.         ELSE 
  45194.             RETURN 
  45195.         ENDIF 
  45196.     ENDIF 
  45197.    TRY
  45198.       m.liSession = SET("DATASESSION")
  45199.       IF m.toListener.FRXDataSession > -1
  45200.          SET DATASESSION TO m.toListener.FRXDataSession
  45201.       ENDIF         
  45202.       m.liSelect = SELECT(0)
  45203.       IF USED(m.toListener.MemberDataAlias) 
  45204.          SELECT (m.toListener.MemberDataAlias)
  45205.          m.liFRXRecno =  m.toListener.getFRXRecno(m.tcMethodToken,m.tP1, m.tP2)
  45206.          LOCATE FOR FrxRecno = m.liFRXRecno AND ;
  45207.                     Type = FRX_BLDR_MEMBERDATATYPE AND ;
  45208.                     Name == FRX_BLDR_NAMESPACE_ROTATE AND ;
  45209.                     NOT EMPTY(Execute)  
  45210. * Fix by CChalom                    
  45211. *        IF FOUND() AND NOT EMPTY(INT(VAL(Execute))) AND m.toListener.FFCGraphics.GdipHandle > 0
  45212.          IF FOUND() AND NOT EMPTY(INT(VAL(Execute))) AND m.toListener.FFCGraphics.GetHandle() > 0
  45213.             m.liAngle = INT(VAL(Execute))
  45214.             m.toListener.FFCGraphics.TranslateTransform(tP2, tP3)
  45215.             m.toListener.FFCGraphics.RotateTransform(m.liAngle)
  45216.             m.liReturn = OUTPUTFX_BASERENDER_RENDER_BEFORE_RESTORE 
  45217.             m.toListener.FFCGraphics.TranslateTransform(-tP2, -tP3)
  45218.          ENDIF
  45219.       ENDIF
  45220.    CATCH TO err
  45221.       * could expose the error but won't,
  45222.       * we'll just swallow it
  45223.    FINALLY
  45224.        SELECT (m.liSelect)
  45225.        SET DATASESSION TO (m.liSession)
  45226.    ENDTRY            
  45227. ENDIF   
  45228. RETURN  m.liReturn
  45229. ENDPROC
  45230. Height = 23
  45231. Width = 23
  45232. FRXDataSession = -1
  45233. xmlmode = 2
  45234. includebreaksindata = 0
  45235. pagenodes = (NULL)
  45236. currentband = (NULL)
  45237. currentdocument = (NULL)
  45238. currentpage = (NULL)
  45239. columnnodes = (NULL)
  45240. currentcolumn = (NULL)
  45241. idattribute = ("id")
  45242. idrefattribute = ("idref")
  45243. xsltprocessorrdl = (NULL)
  45244. xsltprocessoruser = (NULL)
  45245. datanodes = (NULL)
  45246. nopageeject = .F.
  45247. topattr = ("t")
  45248. leftattr = ("l")
  45249. heightattr = ("h")
  45250. widthattr = ("w")
  45251. contattr = ("c")
  45252. xsltparameters = (NULL)
  45253. includepage = .T.
  45254. includedatatypeattributes = .F.
  45255. datatypeattr = ("DTYPE")
  45256. datatextattr = ("DTEXT")
  45257. formattingchanges = (.NULL.)
  45258. evaluatecontentsvalues = (.NULL.)
  45259. pageimageattr = ("PLINK")
  45260. applyrdltransform = .F.
  45261. successorgfxnorender = (.NULL.)
  45262. targetfileext = ("XML")
  45263. _memberdata = 
  45264.     5491<VFPData><memberdata name="applyusertransform" type="property" display="applyUserTransform" favorites="True"/><memberdata name="applyusertransformtooutput" type="method" display="applyUserTransformToOutput"/><memberdata name="applyxslt" type="method" display="applyXslt" favorites="True"/><memberdata name="columnnodes" type="property" display="columnNodes"/><memberdata name="contattr" type="property" display="contAttr" favorites="True"/><memberdata name="currentband" type="property" display="currentBand"/><memberdata name="currentcolumn" type="property" display="currentColumn"/><memberdata name="includepage" type="property" display="includePage"/><memberdata name="currentdocument" type="property" display="currentDocument" favorites="True"/><memberdata name="currentpage" type="property" display="currentPage"/><memberdata name="datanodes" type="property" display="dataNodes"/><memberdata name="getdefaultuserxslt" type="method" display="getDefaultUserXslt"/><memberdata name="preparefrxcopy" type="method" display="prepareFrxCopy"/><memberdata name="removefrxcopy" type="method" display="removeFrxCopy"/><memberdata name="getpathedimageinfo" type="method" display="getPathedImageInfo"/><memberdata name="getrawformattinginfo" type="method" display="getRawFormattingInfo"/><memberdata name="getvfprdlcontents" type="method" display="getVFPRdlContents"/><memberdata name="getfrxlayoutobjectfieldlist" type="method" display="getFrxLayoutObjectFieldlist"/><memberdata name="heightattr" type="property" display="heightAttr" favorites="True"/><memberdata name="idattribute" type="property" display="idAttribute" favorites="True"/><memberdata name="idrefattribute" type="property" display="idrefAttribute" favorites="True"/><memberdata name="includebandswithnoobjects" type="property" display="includeBandsWithNoObjects" favorites="True"/><memberdata name="includebreaksindata" type="property" display="includeBreaksInData" favorites="True"/><memberdata name="includedatasourcesinvfprdl" type="property" display="includeDataSourcesInVfpRdl" favorites="True"/><memberdata name="includeformattinginlayoutobjects" type="property" display="includeFormattingInLayoutObjects" favorites="True"/><memberdata name="insertxmlconfigrecords" type="method" display="insertXmlConfigRecords"/><memberdata name="leftattr" type="property" display="leftAttr" favorites="True"/><memberdata name="loadprocessorobject" type="method" display="loadProcessorObject"/><memberdata name="nopageeject" type="property" display="noPageEject" favorites="True"/><memberdata name="pagenodes" type="property" display="pageNodes"/><memberdata name="resetdocument" type="method" display="resetDocument" favorites="True"/><memberdata name="resetreport" display="resetReport" type="method"/><memberdata name="setdomformattinginfo" type="method" display="setDOMFormattingInfo"/><memberdata name="setfrxdatasession" type="method" display="setFRXDataSession"/><memberdata name="synchxsltprocessoruser" type="method" display="synchXsltProcessorUser"/><memberdata name="topattr" type="property" display="topAttr" favorites="True"/><memberdata name="verifyattributenames" type="method" display="verifyAttributeNames"/><memberdata name="verifyncname" type="method" display="verifyNCName" favorites="True"/><memberdata name="verifynodenames" type="method" display="verifyNodeNames"/><memberdata name="widthattr" type="property" display="widthAttr" favorites="True"/><memberdata name="writeraw" type="method" display="writeRaw"/><memberdata name="xmlmode" type="property" display="xmlMode" favorites="True"/><memberdata name="xmlrawconv" type="method" display="xmlRawConv"/><memberdata name="xmlrawnode" type="method" display="xmlRawNode"/><memberdata name="xmlrawtag" type="method" display="xmlRawTag"/><memberdata name="xsltparameters" type="property" display="xsltParameters" favorites="True"/><memberdata name="xsltprocessorrdl" type="property" display="xsltProcessorRdl" favorites="True"/><memberdata name="xsltprocessoruser" type="property" display="xsltProcessorUser" favorites="True"/>
  45265. <memberdata name="adjustxsltparameter" type="method" display="adjustXSLTParameter" favorites="True"/>
  45266. <memberdata name="getrunnodecontents" display="getRunNodeContents" type="method"/><memberdata name="addrunnode" display="addRunNode" type="method"/><memberdata name="includedatatypeattributes" display="includeDataTypeAttributes" type="property" favorites="True"/><memberdata name="datatypeattr" type="property" display="dataTypeAttr" favorites="True"/><memberdata name="datatextattr" type="property" display="dataTextAttr" favorites="True"/><memberdata 
  45267. name="formattingchanges" type="property" display="formattingChanges" /> <memberdata name="initializeformattingchangescursor" type="method" display="initializeFormattingChangesCursor"/><memberdata name="evaluatecontentsvalues" display="evaluateContentsValues" type="property"/><memberdata name="formatdatavalue" display="formatDataValue" type="method"/><memberdata name="pageimageattr" type="property" display="pageImageAttr" favorites="True"/>
  45268. <memberdata name="evaluatestringtoboolean" display="evaluateStringToBoolean" type="property"/><memberdata name="applyrdltransform" display="applyRDLTransform" type="property"/>
  45269. <memberdata name="successorgfxnorender" display="successorGFXNoRender" type="property"/><memberdata name="fixmsxmlobjectfordtds" display="fixMSXMLObjectForDTDs" type="method"/><memberdata name="frxcharsetsinuse" display="frxCharsetsInUse" type="method"/>
  45270. </VFPData>
  45271. runcollectorresetlevel = 1
  45272. Name = "xmllistener"
  45273. lvParam.C
  45274. ,Obj.C
  45275. lvParam.C
  45276. Listener.PageNo=C
  45277. _PAGENO=
  45278.  recno=
  45279. , TargetAlias=
  45280. , targetRecno=
  45281. PCOUNT
  45282. TARGETHANDLE
  45283. LIINDEX
  45284. LOOBJ
  45285. LVPARAM
  45286. LIOBJINDEX    
  45287. LIMEMBERS    
  45288. LAMEMBERS
  45289. VERBOSE
  45290. SETCURRENTDATASESSION
  45291. SHAREDPAGENO
  45292. PAGENO
  45293. DRIVINGALIAS
  45294. TARGETALIAS
  45295. RESETDATASESSION
  45296. MEMBERS:
  45297. THIS.C
  45298. THIS.C
  45299. ... NO MEMBERS
  45300. tvCommand.C
  45301. TVCOMMAND
  45302. TCHEADER
  45303. TARGETHANDLE
  45304. LIINDEX    
  45305. LAMEMBERS    
  45306. LIMEMBERS9
  45307. VNEWVAL
  45308. VERBOSE
  45309. DODEBUG
  45310. DODEBUG
  45311. DODEBUG
  45312. DODEBUGe
  45313.  current CommandClauses
  45314. INCLUDELOADANDUNLOAD    
  45315. LCPROGRAM
  45316. DODEBUG
  45317. DODEBUGCOMMANDCLAUSES
  45318. COMMANDCLAUSES
  45319. TARGETHANDLE
  45320. NOPAGEEJECT
  45321. CLOSETARGETFILE    
  45322. QUIETMODE
  45323. TARGETFILENAME
  45324.  received CommandClauses
  45325. INCLUDELOADANDUNLOAD
  45326. TARGETHANDLE
  45327. OPENTARGETFILE
  45328. DODEBUG
  45329. DODEBUGCOMMANDCLAUSES
  45330. COMMANDCLAUSES
  45331. DODEBUG
  45332. DODEBUG
  45333. DODEBUG
  45334. DODEBUG
  45335. DODEBUG
  45336. DODEBUG
  45337. DODEBUG
  45338. DODEBUG
  45339. DODEBUG
  45340. DODEBUG
  45341. DODEBUG
  45342. DODEBUGO
  45343. DODEBUG
  45344. VERBOSE
  45345. TARGETALIAS
  45346. SETFRXDATASESSION
  45347. RESETDATASESSION
  45348. DODEBUG
  45349. DODEBUG
  45350. DODEBUGS
  45351.  current CommandClauses
  45352. LCPROGRAM
  45353. DODEBUG
  45354. DODEBUGCOMMANDCLAUSES
  45355. COMMANDCLAUSES
  45356. INCLUDELOADANDUNLOAD
  45357. NOPAGEEJECT
  45358. CLOSETARGETFILE    
  45359. QUIETMODE
  45360. TARGETFILENAMEd
  45361.  received CommandClauses
  45362. LCPROGRAM
  45363. VERBOSE
  45364. SETCURRENTDATASESSION
  45365. TARGETHANDLE
  45366. OPENTARGETFILE
  45367. DODEBUG
  45368. DODEBUGCOMMANDCLAUSES
  45369. COMMANDCLAUSES
  45370. RESETDATASESSION8
  45371. TARGETFILENAMEW
  45372. VFP Report Output Class
  45373. APPNAME
  45374. HADERROR
  45375. dodebug,
  45376. dodebugcommandclausesZ
  45377. verbose_assign
  45378. OutputPage
  45379. IncludePageInOutput
  45380. EvaluateContents
  45381. CancelReport
  45382. UnloadReport
  45383. LoadReport8
  45384. WriteMethod
  45385. WriteExpression
  45386. UpdateStatus
  45387. SupportsListenerType
  45388. SaveAsClass
  45389. ResetToDefault
  45390. ReadMethod
  45391. ReadExpression
  45392. OnPreviewClosen
  45393. ClearStatus\
  45394. RenderS
  45395. DoStatus
  45396. BeforeBand
  45397. AfterBand^
  45398. AdjustObjectSizea
  45399. AddPropertyd
  45400. AfterReportR
  45401. BeforeReportl!
  45402. opentargetfile
  45403. ZListenerType = 2
  45404. FRXDataSession = -1
  45405. cssclassattr = ("css")
  45406. anchorattr = ("anchor")
  45407. titleattr = ("title")
  45408. linkattr = ("hlink")
  45409. cssclassoverrideattr = ("CSS")
  45410. oldpageimagetype = -1
  45411. oldtextareasetting = -1
  45412. lobjtypemode = .F.
  45413. lopenviewer = .F.
  45414. applyusertransform = .T.
  45415. targetfileext = ("HTM")
  45416. _memberdata = 
  45417.     2036<VFPData>
  45418.     <memberdata name="imagefieldinstance" type="property" display="imageFieldInstance" favorites="False"/>
  45419.     <memberdata name="imagefieldtofile" type="property" display="imageFieldToFile" favorites="False"/>
  45420.     <memberdata name="imagefilebasename" type="property" display="imageFileBaseName" favorites="True"/>
  45421.     <memberdata name="imagesrcattr" type="property" display="imageSrcAttr" favorites="True"/>
  45422.     <memberdata name="jpgclsid" type="property" display="JPGclsid" favorites="False"/>
  45423.     <memberdata name="oldexternalfilelocation" type="property" display="oldExternalFileLocation" favorites="False"/>
  45424.     <memberdata name="oldsendgdiplusimage" type="property" display="oldSendGDIPlusImage" favorites="False"/>
  45425.     <memberdata name="checkreportforgeneralfields" type="method" display="checkReportForGeneralFields" favorites="False"/><memberdata name="getdefaultuserxsltasstring" type="method" display="getDefaultUserXsltAsString" favorites="False"/><memberdata name="initializefilecopysettings" type="method" display="initializeFileCopySettings" favorites="False"/><memberdata name="titleattr" display="titleAttr" type="property" favorites="True"/><memberdata name="linkattr" display="linkAttr" type="property" favorites="True"/><memberdata name="cssclassattr" display="cssClassAttr" type="property" favorites="True"/><memberdata name="cssclassoverrideattr" display="cssClassOverrideAttr" type="property" favorites="True"/><memberdata name="anchorattr" display="anchorAttr" type="property" favorites="True"/><memberdata name="oldpageimagetype" display="oldPageImageType" type="property"/><memberdata name="oldtextareasetting" display="oldTextAreaSetting" type="property"/><memberdata name="urlstringencode" type="method" favorites="True" display="urlStringEncode"/><memberdata name="pathencode" type="method" favorites="True" display="pathEncode"/><memberdata name="lobjtypemode" display="lObjTypeMode"/><memberdata name="updateproperties" display="UpdateProperties"/><memberdata name="lopenviewer" display="lOpenViewer"/></VFPData>
  45426. Name = "pr_htmllistener"
  45427. Height = 40
  45428. Width = 356
  45429. DoCreate = .T.
  45430. AutoCenter = .T.
  45431. BorderStyle = 2
  45432. Caption = "ThermForm"
  45433. ControlBox = .F.
  45434. HalfHeightCaption = .T.
  45435. MaxButton = .F.
  45436. MinButton = .F.
  45437. AlwaysOnTop = .T.
  45438. AllowOutput = .F.
  45439. _memberdata = 
  45440.     3665<VFPDATA><memberdata name="applyfx" display="applyFX" type="method"/>
  45441. <memberdata name="percentdone" type="property" display="percentDone" favorites="False" /> <memberdata name="currentrecord" type="property" display="currentRecord" favorites="False" /><memberdata name="designateddriver" type="property" display="designatedDriver" favorites="False" /> <memberdata name="drivingaliascurrentrecno" type="property" display="drivingAliasCurrentRecno" favorites="False" /> <memberdata name="escapereference" type="property" display="escapeReference" favorites="False" /> <memberdata name="frxbandrecno" type="property" display="frxBandRecno" favorites="False" /> <memberdata name="getparentwindowref" type="method" display="getParentWindowRef" favorites="False" /> <memberdata name="getreportscopedriver" type="method" display="getReportScopeDriver" favorites="False"/><memberdata name="includeseconds" type="property" display="includeSeconds" favorites="True" /> <memberdata name="initstatustext" type="property" display="initStatusText" favorites="True" /> <memberdata name="onescapecommand" type="property" display="onEscapeCommand" favorites="False" /> <memberdata name="prepassstatustext" type="property" display="prepassStatusText" favorites="True" /> <memberdata name="reportstartrundatetime" type="property" display="reportStartRunDatetime" favorites="True" /> <memberdata name="reportstoprundatetime" type="property" display="reportStopRunDatetime" favorites="True" /> <memberdata name="resetuserfeedback" type="method" display="resetUserFeedback" favorites="False" /> <memberdata name="runstatustext" type="property" display="runStatusText" favorites="True" /> <memberdata name="secondstext" type="property" display="secondsText" favorites="True" /> <memberdata name="setescape" type="property" display="setEscape" favorites="False" /> <memberdata name="setnotifycursor" type="property" display="setNotifyCursor" favorites="False" /> <memberdata name="setthermformcaption" type="method" display="setThermformCaption" favorites="False" /> <memberdata name="thermcaption" type="property" display="thermCaption" favorites="True" /> <memberdata name="thermform" type="property" display="thermForm" favorites="False" /> <memberdata name="thermformcaption" type="property" display="thermFormCaption" favorites="True" /> <memberdata name="thermformheight" type="property" display="thermFormHeight" favorites="True" /> <memberdata name="thermformwidth" type="property" display="thermFormWidth" favorites="True" /> 
  45442. <memberdata name="thermprecision" type="property" display="thermPrecision" favorites="True" /> <memberdata name="thermmargin" type="property" display="thermMargin" favorites="True" /> <memberdata name="synchstatus" type="method" display="synchStatus" favorites="False" /><memberdata name="successorsys2024" type="property" display="successorSys2024" favorites="False" /><memberdata name="dostatus" type="method" display="doStatus" favorites="True" /><memberdata name="clearstatus" type="method" display="clearStatus" favorites="True" /><memberdata name="updatestatus" type="method" display="updateStatus" favorites="True" /><memberdata name="pushuserfeedbackglobalsets" display="pushUserFeedbackGlobalSets" type="method"/><memberdata name="popuserfeedbackglobalsets" display="popUserFeedbackGlobalSets" type="method"/><memberdata name="synchuserinterface" display="synchUserInterface" type="method"/><memberdata name="setupreport" type="method" display="setupReport"/><memberdata name="drivingalias" type="method" display="drivingAlias"/><memberdata name="persistbetweenruns" display="persistBetweenRuns" type="property" favorites="True"/>
  45443. </VFPDATA>
  45444. successorsys2024 = ("N")
  45445. currentrecord = (0)
  45446. designateddriver = ("")
  45447. drivingaliascurrentrecno = (0)
  45448. escapereference = ("")
  45449. frxbandrecno = (0)
  45450. includeseconds = .T.
  45451. initstatustext = ("")
  45452. onescapecommand = ("")
  45453. percentdone = (0)
  45454. prepassstatustext = ("")
  45455. reportstartrundatetime = (DTOT({}))
  45456. reportstoprundatetime = (DTOT({}))
  45457. runstatustext = ("secs")
  45458. secondstext = ("")
  45459. thermcaption = 
  45460.      284[m.cMessage+ " "+ TRANSFORM(THIS.PercentDone,"999"+IIF(THIS.ThermPrecision=0,"","."+REPL("9",THIS.ThermPrecision))) + "%" + IIF(NOT THIS.IncludeSeconds, "" , " "+TRANSFORM(IIF(THIS.IsRunning,DATETIME(), THIS.ReportStopRunDateTime)-THIS.ReportStartRunDateTime)+" " + THIS.SecondsText)]
  45461. thermformcaption = ("")
  45462. thermformheight = (40)
  45463. thermformwidth = (356)
  45464. thermmargin = (5)
  45465. setescape = .F.
  45466. setnotifycursor = .F.
  45467. isrunning = .F.
  45468. drivingalias = ("")
  45469. thermprecision = (2)
  45470. persistbetweenruns = .F.
  45471. Name = "fxtherm"
  45472. PROCEDURE checkreportforgeneralfields
  45473. LOCAL m.liGeneralFields, m.lcID, m.llOpened
  45474. m.liGeneralFields = 0
  45475. IF TYPE("THIS.CommandClauses.File") = "C" AND ;
  45476.    (NOT EMPTY(THIS.CommandClauses.File)) AND ;
  45477.    (FILE(THIS.CommandClauses.File)) && NB this is done before setting up dummy CommandClauses
  45478.    THIS.SetFRXDataSession()
  45479.    IF USED("FRX") 
  45480.       * this will be true
  45481.       * if we call in BeforeReport,
  45482.       * but that seems to cause a problem,
  45483.       * when we re-assign SendGDIPlusImage
  45484.       * so we're likely to call earlier,
  45485.       * in the LoadReport method
  45486.       SELECT FRX
  45487.    ELSE
  45488.       USE (THIS.CommandClauses.File) SHARED NOUPDATE ALIAS FRX IN 0
  45489.       SELECT FRX
  45490.       m.llOpened = .T.
  45491.    ENDIF   
  45492.    COUNT FOR ObjType = FRX_OBJTYP_PICTURE  AND  ;
  45493.            Offset =  FRX_PICTURE_SOURCE_GENERAL TO ;
  45494.              m.liGeneralFields
  45495.    IF m.llOpened
  45496.       USE IN FRX         
  45497.    ENDIF
  45498.    THIS.ResetDataSession()
  45499. ENDIF  
  45500. RETURN ( m.liGeneralFields > 0 )
  45501. ENDPROC
  45502. PROCEDURE imagesrcattr_assign
  45503. LPARAMETERS m.vNewVal
  45504. IF (NOT THIS.IsRunning) AND THIS.VerifyNCName(m.vNewVal) AND ;
  45505.    (NOT m.vNewVal == THIS.imageSrcAttr)
  45506.    THIS.imageSrcAttr = m.vNewVal
  45507.    THIS.SynchXSLTProcessorUser()
  45508. ENDIF      
  45509. ENDPROC
  45510. PROCEDURE imagefilebasename_assign
  45511. LPARAMETERS m.vNewVal
  45512. THIS.ImageFileBaseName = ALLTR(CHRTRAN(JUSTSTEM(TRANSFORM(m.vNewVal)),;
  45513.                          OUTPUTCLASS_FILENAME_CHARS_DISALLOWED,"_"))
  45514. ENDPROC
  45515. PROCEDURE copyimagefilestoexternalfilelocation_assign
  45516. LPARAMETERS m.vNewVal
  45517. IF NOT THIS.IsRunning and VARTYPE(m.vNewVal) = "L"
  45518.    IF NOT (m.vNewVal = THIS.CopyImageFilesToExternalFileLocation)
  45519.       THIS.CopyImageFilesToExternalFileLocation = m.vNewVal
  45520.       THIS.adjustXSLTParameter(IIF(m.vNewVal,"1","0"),"copyImageFiles")
  45521.       IF THIS.CopyImageFilesToExternalFileLocation 
  45522.          THIS.makeExternalFileLocationReachable()
  45523.       ENDIF
  45524.    ENDIF   
  45525. ENDIF   
  45526. ENDPROC
  45527. PROCEDURE initializefilecopysettings
  45528. #define CLSID_JPG     "{557CF401-1A04-11D3-9A73-0000F81EF32E}"
  45529. DECLARE INTEGER GdipSaveImageToFile in GDIPLUS.DLL  ;
  45530.        integer image,string filename,string @ CLSID_clsidEncoder,integer encoderParams        
  45531. LOCAL m.lcID
  45532. IF ISNULL(THIS.Jpgclsid) OR EMPTY(THIS.Jpgclsid)
  45533.    DECLARE integer CLSIDFromString IN ole32 string,string @
  45534.    m.lcID = SPACE(20)
  45535.    CLSIDFromString(STRCONV(CLSID_JPG ,STRCONV_DBCS_UNICODE),@m.lcID)      
  45536.    THIS.Jpgclsid = m.lcID
  45537.    m.lcID = ""
  45538. ENDIF
  45539. IF THIS.SendGDIPlusImage < LISTENER_SEND_GDI_IMAGE_HANDLE 
  45540.    THIS.SendGDIPlusImage =   LISTENER_SEND_GDI_IMAGE_HANDLE
  45541. ENDIF   
  45542. THIS.makeExternalFileLocationReachable()
  45543. ENDPROC
  45544. PROCEDURE adjustshapeaspectratio
  45545. LPARAMETERS m.tnWidth, m.tnHeight
  45546. IF VARTYPE(THIS.utilityImage) = "O"
  45547.     * the image is coming from a file of some sort
  45548.     * and we need to scale-and-retain
  45549.     LOCAL m.llAdjustHeight, m.llAdjustWidth
  45550.     DO CASE
  45551.         CASE (tnWidth > tnHeight)
  45552.             * use 100% of the width of the space and scale the height
  45553.             m.llAdjustHeight = .T.
  45554.         CASE (tnWidth < tnHeight)
  45555.             * use 100% of the height of the space and scale the width
  45556.             m.llAdjustWidth = .T.
  45557.         CASE (m.tnWidth = m.tnHeight)
  45558.             DO CASE
  45559.                 CASE THIS.utilityImage.HEIGHT > THIS.utilityImage.WIDTH
  45560.                     m.llAdjustWidth = .T.
  45561.                 CASE THIS.utilityImage.HEIGHT < THIS.utilityImage.WIDTH
  45562.                     m.llAdjustHeight = .T.
  45563.                 OTHERWISE
  45564.                     * both square, don't do adjustment
  45565.             ENDCASE
  45566.     ENDCASE
  45567.     *!* ----------------------------------------------------------------------
  45568.     *!* ----------------------------------------------------------------------
  45569.     *!* 2011-08-12 - Jacques Parent
  45570.     *!* Added MIN() with the currect tnHeight/tnWidth.
  45571.     *!* Sometime, if the report place is much larger than the image
  45572.     *!* ieself, the result is a picture much bigger as what is supposed to.
  45573.     *!* ----------------------------------------------------------------------
  45574.     *!* Example:  place of W = 1500 H = 300, but picture of PW = 600 PH = 200
  45575.     *!* Since W > H, then ajust H
  45576.     *!* IF H = W * (PH/PW), then 1500 * (200/600), so 1500 * 0.33333 = 500
  45577.     *!* In nthis case, even if the place in the report is 300, the picture 
  45578.     *!* will be displayed with a height of 500.
  45579.     *!* Adding a MIN get this fixed.
  45580.     *!* ----------------------------------------------------------------------
  45581.     *!* ----------------------------------------------------------------------
  45582.     IF m.llAdjustWidth
  45583.         m.tnWidth = MIN(m.tnHeight *  ;
  45584.             (THIS.utilityImage.WIDTH / THIS.utilityImage.HEIGHT), m.tnWidth)
  45585.     ENDIF
  45586.     IF m.llAdjustHeight
  45587.         m.tnHeight = MIN(m.tnWidth * ;
  45588.             (THIS.utilityImage.HEIGHT / THIS.utilityImage.WIDTH), m.tnHeight)
  45589.     ENDIF
  45590. ENDIF
  45591. ENDPROC
  45592. PROCEDURE fillalphaattr_assign
  45593. LPARAMETERS m.vNewVal
  45594. IF (NOT THIS.IsRunning) AND THIS.VerifyNCName(m.vNewVal) ;
  45595.    AND NOT (m.vNewVal == THIS.fillAlphaAttr)
  45596.    THIS.fillAlphaAttr = m.vNewVal
  45597.    THIS.SynchXSLTProcessorUser()
  45598. ENDIF   
  45599. ENDPROC
  45600. PROCEDURE fillredattr_assign
  45601. LPARAMETERS m.vNewVal
  45602. IF (NOT THIS.IsRunning) AND THIS.VerifyNCName(m.vNewVal);
  45603.    AND NOT (m.vNewVal == THIS.fillRedAttr)
  45604.    THIS.fillRedAttr = m.vNewVal
  45605.    THIS.synchXsltProcessorUser()
  45606. ENDIF   
  45607. ENDPROC
  45608. PROCEDURE fillgreenattr_assign
  45609. LPARAMETERS m.vNewVal
  45610. IF (NOT THIS.IsRunning) AND THIS.VerifyNCName(m.vNewVal);
  45611.    AND NOT (m.vNewVal == THIS.fillGreenAttr)
  45612.    THIS.fillGreenAttr = m.vNewVal
  45613.    THIS.synchXsltProcessorUser()
  45614. ENDIF   
  45615. ENDPROC
  45616. PROCEDURE fillblueattr_assign
  45617. LPARAMETERS m.vNewVal
  45618. IF (NOT THIS.IsRunning) AND THIS.VerifyNCName(m.vNewVal);
  45619.    AND NOT (m.vNewVal == THIS.fillBlueAttr)
  45620.    THIS.fillBlueAttr = m.vNewVal
  45621.    THIS.synchXsltProcessorUser()
  45622. ENDIF   
  45623. ENDPROC
  45624. PROCEDURE penalphaattr_assign
  45625. LPARAMETERS m.vNewVal
  45626. IF (NOT THIS.IsRunning) AND THIS.VerifyNCName(m.vNewVal);
  45627.    AND NOT (m.vNewVal == THIS.penAlphaAttr)
  45628.    THIS.penAlphaAttr = m.vNewVal
  45629.    THIS.synchXsltProcessorUser()
  45630. ENDIF   
  45631. ENDPROC
  45632. PROCEDURE penredattr_assign
  45633. LPARAMETERS m.vNewVal
  45634. IF (NOT THIS.IsRunning) AND THIS.VerifyNCName(m.vNewVal);
  45635.    AND NOT (m.vNewVal == THIS.penRedAttr)
  45636.    THIS.penRedAttr = m.vNewVal
  45637.    THIS.synchXsltProcessorUser()
  45638. ENDIF   
  45639. ENDPROC
  45640. PROCEDURE pengreenattr_assign
  45641. LPARAMETERS m.vNewVal
  45642. IF (NOT THIS.IsRunning) AND THIS.VerifyNCName(m.vNewVal);
  45643.    AND NOT (m.vNewVal == THIS.penGreenAttr)
  45644.    THIS.penGreenAttr = m.vNewVal
  45645.    THIS.synchXsltProcessorUser()
  45646. ENDIF   
  45647. ENDPROC
  45648. PROCEDURE penblueattr_assign
  45649. LPARAMETERS m.vNewVal
  45650. IF (NOT THIS.IsRunning) AND THIS.VerifyNCName(m.vNewVal);
  45651.    AND NOT (m.vNewVal == THIS.penBlueAttr)
  45652.    THIS.penBlueAttr = m.vNewVal
  45653.    THIS.synchXsltProcessorUser()
  45654. ENDIF   
  45655. ENDPROC
  45656. PROCEDURE fontnameattr_assign
  45657. LPARAMETERS m.vNewVal
  45658. IF (NOT THIS.IsRunning) AND THIS.VerifyNCName(m.vNewVal);
  45659.    AND NOT (m.vNewVal == THIS.fontNameAttr)
  45660.    THIS.fontNameAttr = m.vNewVal
  45661.    THIS.synchXsltProcessorUser()
  45662. ENDIF   
  45663. ENDPROC
  45664. PROCEDURE fontstyleattr_assign
  45665. LPARAMETERS m.vNewVal
  45666. IF (NOT THIS.IsRunning) AND THIS.VerifyNCName(m.vNewVal);
  45667.    AND NOT (m.vNewVal == THIS.fontStyleAttr)
  45668.    THIS.fontStyleAttr = m.vNewVal
  45669.    THIS.synchXsltProcessorUser()
  45670. ENDIF   
  45671. ENDPROC
  45672. PROCEDURE fontsizeattr_assign
  45673. LPARAMETERS m.vNewVal
  45674. IF (NOT THIS.IsRunning) AND THIS.VerifyNCName(m.vNewVal);
  45675.    AND NOT (m.vNewVal == THIS.fontSizeAttr)
  45676.    THIS.fontSizeAttr = m.vNewVal
  45677.    THIS.synchXsltProcessorUser()
  45678. ENDIF   
  45679. ENDPROC
  45680. PROCEDURE pageimageattr_assign
  45681. LPARAMETERS vNewVal
  45682. LOCAL m.lcVal
  45683. m.lcVal = THIS.pageImageAttr
  45684. DODEFAULT(m.vNewVal)
  45685. IF NOT (m.lcVal == THIS.pageImageAttr)
  45686.    THIS.SynchXSLTProcessorUser()
  45687. ENDIF  
  45688. ENDPROC
  45689. PROCEDURE datatypeattr_assign
  45690. LPARAMETERS m.vNewVal
  45691. LOCAL m.lcVal
  45692. m.lcVal = THIS.dataTypeAttr 
  45693. DODEFAULT(m.vNewVal)
  45694. IF NOT (m.lcVal == THIS.dataTypeAttr )
  45695.    THIS.SynchXSLTProcessorUser()
  45696. ENDIF   
  45697. ENDPROC
  45698. PROCEDURE datatextattr_assign
  45699. LPARAMETERS m.vNewVal
  45700. LOCAL m.lcVal
  45701. m.lcVal = THIS.dataTextAttr 
  45702. DODEFAULT(m.vNewVal)
  45703. IF NOT (m.lcVal == THIS.dataTextAttr)
  45704.    THIS.SynchXSLTProcessorUser()
  45705. ENDIF   
  45706. ENDPROC
  45707. PROCEDURE EvaluateContents
  45708. LPARAMETERS m.nFRXRecno, m.oObjProperties
  45709. IF DODEFAULT(m.nFRXRecno,m.oObjProperties)
  45710.    THIS.setFRXDataSession()
  45711.    IF USED(THIS.formattingChanges) AND NOT(EOF(THIS.formattingChanges))
  45712.       SELECT (THIS.formattingChanges) 
  45713.       WITH m.oObjProperties
  45714.          IF .Reload       
  45715.               REPLACE Reload WITH .T., ;
  45716.                    FR WITH .FillRed, ;
  45717.                    FG WITH .FillGreen, ;
  45718.                    FB WITH .FillBlue, ;
  45719.                    FA WITH .FillAlpha, ;
  45720.                    PR WITH .PenRed, ;
  45721.                    PG WITH .PenGreen, ;
  45722.                    PB WITH .PenBlue, ;
  45723.                    PA WITH .PenAlpha, ;
  45724.                    FNAME WITH .FontName, ;
  45725.                    FSTYLE WITH .FontStyle, ;
  45726.                    FSIZE WITH .FontSize
  45727.          ENDIF
  45728.       ENDWITH         
  45729.       SELECT FRX
  45730.    ENDIF
  45731.    THIS.resetDataSession() 
  45732. ENDIF   
  45733.            
  45734. ENDPROC
  45735. PROCEDURE initializeformattingchangescursor
  45736. DODEFAULT()
  45737. IF THIS.CallEvaluateContents = LISTENER_CALLDYNAMICMETHOD_ALWAYS
  45738.    IF USED(THIS.formattingChanges)
  45739.       USE IN (THIS.formattingChanges) && override, faster to re-create
  45740.       CREATE CURSOR (THIS.FormattingChanges) ;
  45741.              (FRXRecno i, ;
  45742.               Reload l, ;
  45743.               DText M, ;
  45744.               DType c(1), ;
  45745.               FA i, ;              
  45746.               FR i, ;
  45747.               FG i, ;              
  45748.               FB i, ;
  45749.               PA i, ;              
  45750.               PR i, ;
  45751.               PG i, ;              
  45752.               PB i, ;
  45753.               FName v(50), ;
  45754.               FStyle i, ;
  45755.               FSize i ; 
  45756.               )
  45757.     ELSE
  45758.        CREATE CURSOR (THIS.FormattingChanges) ;
  45759.              (FRXRecno i, ;
  45760.               Reload l, ;
  45761.               FA i, ;              
  45762.               FR i, ;
  45763.               FG i, ;              
  45764.               FB i, ;
  45765.               PA i, ;              
  45766.               PR i, ;
  45767.               PG i, ;              
  45768.               PB i, ;
  45769.               FName v(50), ;
  45770.               FStyle i, ;
  45771.               FSize i ; 
  45772.               )
  45773.     ENDIF              
  45774. ENDIF
  45775. ENDPROC
  45776. PROCEDURE Destroy
  45777. STORE NULL TO ;
  45778.    THIS.JPGclsid, ;
  45779.    THIS.FormattingChanges, ;
  45780.    THIS.UtilityImage
  45781. DODEFAULT()
  45782. ENDPROC
  45783. PROCEDURE contattr_assign
  45784. LPARAMETERS m.vNewVal
  45785. LOCAL m.lcVal
  45786. m.lcVal = THIS.ContAttr
  45787. DODEFAULT(m.vNewVal)
  45788. IF NOT (m.lcVal == THIS.ContAttr)
  45789.    THIS.SynchXSLTProcessorUser()
  45790. ENDIF   
  45791. ENDPROC
  45792. PROCEDURE widthattr_assign
  45793. LPARAMETERS m.vNewVal
  45794. LOCAL m.lcVal
  45795. m.lcVal = THIS.WidthAttr
  45796. DODEFAULT(m.vNewVal)
  45797. IF NOT (m.lcVal == THIS.WidthAttr)
  45798.    THIS.SynchXSLTProcessorUser()
  45799. ENDIF   
  45800. ENDPROC
  45801. PROCEDURE heightattr_assign
  45802. LPARAMETERS m.vNewVal
  45803. LOCAL m.lcVal
  45804. m.lcVal = THIS.HeightAttr
  45805. DODEFAULT(m.vNewVal)
  45806. IF NOT (m.lcVal == THIS.HeightAttr)
  45807.    THIS.SynchXSLTProcessorUser()
  45808. ENDIF   
  45809. ENDPROC
  45810. PROCEDURE leftattr_assign
  45811. LPARAMETERS m.vNewVal
  45812. LOCAL m.lcVal
  45813. m.lcVal = THIS.LeftAttr
  45814. DODEFAULT(m.vNewVal)
  45815. IF NOT (m.lcVal == THIS.LeftAttr)
  45816.    THIS.SynchXSLTProcessorUser()
  45817. ENDIF   
  45818. ENDPROC
  45819. PROCEDURE topattr_assign
  45820. LPARAMETERS m.vNewVal
  45821. LOCAL m.lcVal
  45822. m.lcVal = THIS.TopAttr
  45823. DODEFAULT(m.vNewVal)
  45824. IF NOT (m.lcVal == THIS.TopAttr)
  45825.    THIS.SynchXSLTProcessorUser()
  45826. ENDIF   
  45827. ENDPROC
  45828. PROCEDURE idattribute_assign
  45829. LPARAMETERS m.vNewVal
  45830. LOCAL m.lcVal
  45831. m.lcVal = THIS.IdAttribute
  45832. DODEFAULT(m.vNewVal)
  45833. IF NOT (m.lcVal == THIS.IdAttribute)
  45834.    THIS.SynchXSLTProcessorUser()
  45835. ENDIF   
  45836. ENDPROC
  45837. PROCEDURE idrefattribute_assign
  45838. LPARAMETERS m.vNewVal
  45839. LOCAL m.lcVal
  45840. m.lcVal = THIS.IdRefAttribute
  45841. DODEFAULT(m.vNewVal)
  45842. IF NOT (m.lcVal == THIS.IdRefAttribute)
  45843.    THIS.SynchXSLTProcessorUser()
  45844. ENDIF   
  45845. ENDPROC
  45846. PROCEDURE Init
  45847. IF DODEFAULT()
  45848.    THIS.AppName = OUTPUTXMLDISPLAY_APPNAME_LOC
  45849.    RETURN .F.   
  45850. ENDIF
  45851. RETURN NOT THIS.HadError
  45852. ENDPROC
  45853. PROCEDURE getrawformattinginfo
  45854. LPARAMETERS m.tnLeft, m.tnTop, m.tnWidth, m.tnHeight, m.tnObjectContinuationType
  45855. LOCAL m.lcInfo
  45856. THIS.adjustShapeAspectRatio (@tnWidth, @tnHeight)
  45857. m.lcInfo = DODEFAULT(m.tnLeft, m.tnTop, m.tnWidth, m.tnHeight, m.tnObjectContinuationType)
  45858. IF NOT EMPTY(THIS.ImageFieldtoFile) 
  45859.    m.lcInfo = m.lcInfo + " "+THIS.ImageSrcAttr+"='"+THIS.ImageFieldtoFile+"'"
  45860. ENDIF   
  45861. THIS.setFRXDataSession()
  45862. IF USED(THIS.formattingChanges) AND ;
  45863.    SEEK(RECNO("FRX"),THIS.formattingChanges,"FRXRecno")          
  45864.    SELECT (THIS.formattingChanges)
  45865.    IF Reload
  45866.       m.lcInfo = m.lcInfo + " "+THIS.penAlphaAttr+"='"+TRANSFORM(PA)+"'"      
  45867.       m.lcInfo = m.lcInfo + " "+THIS.penRedAttr+"='"+TRANSFORM(PR)+"'"      
  45868.       m.lcInfo = m.lcInfo + " "+THIS.penGreenAttr+"='"+TRANSFORM(PG)+"'"      
  45869.       m.lcInfo = m.lcInfo + " "+THIS.penBlueAttr+"='"+TRANSFORM(PB)+"'"                                       
  45870.       m.lcInfo = m.lcInfo + " "+THIS.fillAlphaAttr+"='"+TRANSFORM(FA)+"'"      
  45871.       m.lcInfo = m.lcInfo + " "+THIS.fillRedAttr+"='"+TRANSFORM(FR)+"'"      
  45872.       m.lcInfo = m.lcInfo + " "+THIS.fillGreenAttr+"='"+TRANSFORM(FG)+"'"      
  45873.       m.lcInfo = m.lcInfo + " "+THIS.fillBlueAttr+"='"+TRANSFORM(FB)+"'"                                       
  45874.       m.lcInfo = m.lcInfo + " "+THIS.fontNameAttr+"='"+TRANSFORM(FNAME)+"'"   
  45875.       m.lcInfo = m.lcInfo + " "+THIS.fontSizeAttr+"='"+TRANSFORM(FSIZE)+"'"   
  45876.       m.lcInfo = m.lcInfo + " "+THIS.fontStyleAttr+"='"+TRANSFORM(FSTYLE)+"'"                         
  45877.    ENDIF
  45878.    SELECT FRX
  45879. ENDIF
  45880. RETURN m.lcInfo
  45881. ENDPROC
  45882. PROCEDURE setdomformattinginfo
  45883. LPARAMETERS m.toNode, m.tnLeft, m.tnTop, m.tnWidth,m.tnHeight, m.tnObjectContinuationType
  45884. THIS.adjustShapeAspectRatio (@m.tnWidth, @m.tnHeight)
  45885. DODEFAULT( m.toNode, m.tnLeft, m.tnTop, m.tnWidth,m.tnHeight, m.tnObjectContinuationType)
  45886. IF NOT EMPTY(THIS.ImageFieldtoFile) 
  45887.    m.toNode.SetAttribute(THIS.ImageSrcAttr,THIS.ImageFieldtoFile )                  
  45888. ENDIF   
  45889. THIS.setFRXDataSession()
  45890. IF USED(THIS.formattingChanges) AND ;
  45891.    SEEK(RECNO("FRX"),THIS.formattingChanges,"FRXRecno")          
  45892.    SELECT (THIS.formattingChanges)
  45893.    IF Reload
  45894.       WITH m.toNode
  45895.           .setAttribute(THIS.penAlphaAttr,PA)
  45896.           .setAttribute(THIS.penRedAttr,PR)
  45897.           .setAttribute(THIS.penGreenAttr,PG)
  45898.           .setAttribute(THIS.penBlueAttr,PB)
  45899.           .setAttribute(THIS.fillAlphaAttr,FA)
  45900.           .setAttribute(THIS.fillRedAttr,FR)
  45901.           .setAttribute(THIS.fillGreenAttr,FG)
  45902.           .setAttribute(THIS.fillBlueAttr,FB)
  45903.           .setAttribute(THIS.fontNameAttr,FNAME)          
  45904.           .setAttribute(THIS.fontSizeAttr,FSIZE)          
  45905.           .setAttribute(THIS.fontStyleAttr,FSTYLE)                              
  45906.       ENDWITH
  45907.    ENDIF
  45908.    SELECT FRX
  45909. ENDIF
  45910. ENDPROC
  45911. PROCEDURE Render
  45912. LPARAMETERS m.nFRXRecNo,m.nLeft,m.nTop,m.nWidth,m.nHeight, ;
  45913.             m.nObjectContinuationType, m.cContentsToBeRendered, m.GDIPlusImage
  45914. LOCAL m.llCopyImage, m.lcFile, m.liDefaultBehavior
  45915. IF m.GDIPlusImage > 0 AND ;
  45916.   (ISNULL(THIS.Jpgclsid) OR EMPTY(THIS.Jpgclsid))
  45917.    * we didn't have any general fields but we do have
  45918.    * an image control, referenced as an expression,
  45919.    * they have explicitly turned on SendGDIPlusImage, and
  45920.    * this is the first time we're hitting an image control:
  45921.    THIS.initializeFileCopySettings()
  45922. ENDIF    
  45923. THIS.SetFRXDataSession()
  45924. GO m.nFRXRecNo IN FRX
  45925. IF THIS.CopyImageFilesToExternalFileLocation 
  45926.     IF (FRX.ObjType = FRX_OBJTYP_PICTURE) AND ;
  45927.        FRX.Offset # FRX_PICTURE_SOURCE_GENERAL AND ;
  45928.        FILE(m.cContentsToBeRendered)
  45929.        * use FILE() function here,
  45930.        * need to find if it is
  45931.        * built into an app
  45932.        m.llCopyImage = .T.
  45933.     ENDIF
  45934. ENDIF   
  45935. IF (FRX.ObjType = FRX_OBJTYP_PICTURE) AND ;
  45936.     FRX.General = FRX_PICTUREMODE_SCALE_KEEP_SHAPE AND ;
  45937.     FRX.Offset # FRX_PICTURE_SOURCE_GENERAL AND ;
  45938.     FILE(m.cContentsToBeRendered)
  45939.     * NB: doing this *only* when necessary for re-scaling.
  45940.     * see above for why FILE() function -- this will work
  45941.     * with the image object.
  45942.     *!* -----------------------------------------
  45943.     *!* -----------------------------------------
  45944.     *!* 2011-08-18 - Jacques Parent
  45945.     *!* -----------------------------------------
  45946.     *!* Eliminate the LOADPICTURE that only use BMP, ICO ans WMF
  45947.     *!* Instead, open the image file with the IMAGE object
  45948.     THIS.utilityImage = CreateObject("Image")
  45949.     THIS.utilityImage.Picture = m.cContentsToBeRendered
  45950.     *!*        THIS.utilityImage = NewObject("GpBitmap", "_GdiPlus.vcx")
  45951.     *!*        THIS.utilityImage.CreateFromFile(m.cContentsToBeRendered)
  45952.     *!* -----------------------------------------
  45953.     *!* -----------------------------------------
  45954. ENDIF    
  45955. THIS.SetCurrentDataSession()   
  45956. DO CASE
  45957. CASE m.llCopyImage
  45958.    m.lcFile = FORCEPATH(m.cContentsToBeRendered, ;
  45959.             FULLPATH(THIS.ExternalFileLocation,ADDBS(JUSTPATH(THIS.TargetFileName))))
  45960.             
  45961.    IF EMPTY(SYS(2000,m.lcFile))
  45962.       * used to be:
  45963.       * COPY FILE (cContentsToBeRendered) TO (lcFile)
  45964.       * to handle files built into an app
  45965.       
  45966.       STRTOFILE(FILETOSTR(m.cContentsToBeRendered),m.lcFile)
  45967.    ENDIF   
  45968.    IF EMPTY(SYS(2000,m.lcFile))
  45969.       THIS.ImageFieldToFile = ""
  45970.    ELSE
  45971.       THIS.ImageFieldToFile = JUSTFNAME(m.lcFile)
  45972.    ENDIF
  45973. CASE THIS.SendGDIPlusImage > LISTENER_SEND_GDI_IMAGE_NONE  AND ;
  45974.    m.GDIPlusImage > 0  AND ;
  45975.    GdipSaveImageToFile(m.GDIPlusImage,;
  45976.        STRCONV(FORCEPATH(THIS.ImageFileBaseName + "_"+ ;
  45977.                          TRANSFORM(THIS.ImageFieldInstance+1)+".jpg",;
  45978.                          FULLPATH(THIS.ExternalFileLocation,ADDBS(JUSTPATH(THIS.TargetFileName))))+CHR(0), ;
  45979.                STRCONV_DBCS_UNICODE) ,THIS.JPGCLSID,0) = 0
  45980.    THIS.ImageFieldInstance = THIS.ImageFieldInstance + 1       
  45981.    THIS.ImageFieldToFile = THIS.ImageFileBaseName +"_"+ ;
  45982.                            TRANSFORM(THIS.ImageFieldInstance)+".jpg"
  45983. OTHERWISE
  45984.    THIS.ImageFieldToFile = ""
  45985. ENDCASE
  45986. m.liDefaultBehavior = DODEFAULT(m.nFRXRecNo, @m.nLeft,@m.nTop,@m.nWidth,@m.nHeight, ;
  45987.           @m.nObjectContinuationType, @m.cContentsToBeRendered, @m.GDIPlusImage)
  45988.           
  45989. THIS.ImageFieldToFile = ""
  45990. *!* -----------------------------------------
  45991. *!* -----------------------------------------
  45992. *!* 2011-08-18 - Jacques Parent
  45993. *!* -----------------------------------------
  45994. *!* Just make sure to clear up the the picture
  45995. *!* by destroying the image object AND by
  45996. *!* clearing the resources for the image
  45997. IF NOT ISNULL(THIS.UtilityImage)
  45998.     THIS.UtilityImage = NULL
  45999.     CLEAR RESOURCES (m.cContentsToBeRendered)
  46000. ENDIF
  46001. *!* -----------------------------------------
  46002. *!* -----------------------------------------
  46003. THIS.resetDataSession()
  46004. RETURN m.liDefaultBehavior
  46005. ENDPROC
  46006. PROCEDURE UnloadReport
  46007. DODEFAULT()
  46008. *!* 2011-08-12 - Jacques Parent - Cleanup ehe Temp Image collection
  46009. WITH This
  46010.     If VARTYPE(.oTempImagesCollection) = "O" Then && Cleanup Temporary Images Files
  46011.         LOCAL lcItem AS String
  46012.         FOR EACH lcItem IN .oTempImagesCollection FOXOBJECT
  46013.             *!* 2010-08-25 - Jacques Parent - Add TRY CATCH ENDTRY to catch error message
  46014.             IF VARTYPE(lcItem) = "C" AND FILE(lcItem)
  46015.                 LOCAL loExc as Exception 
  46016.                 TRY
  46017.                     DELETE FILE (lcItem)
  46018.                 CATCH TO loExc
  46019.                     * SET STEP ON 
  46020.                 ENDTRY
  46021.             ENDIF
  46022.         ENDFOR
  46023.         .oTempImagesCollection = Null
  46024.     ENDIF
  46025. ENDWITH
  46026. IF NOT (THIS.noPageEject OR ;
  46027.  ((TYPE("THIS.CommandClauses.NoPageEject") = "L") AND ;
  46028.    THIS.CommandClauses.NoPageEject))
  46029.    IF NOT ISNULL(THIS.OldExternalFileLocation)
  46030.       * even if empty
  46031.       THIS.ExternalFileLocation = THIS.OldExternalFileLocation
  46032.       THIS.OldExternalFileLocation = NULL    
  46033.    ENDIF      
  46034.    IF NOT (THIS.OldSendGDIPlusImage = THIS.SendGDIPlusImage)
  46035.       THIS.SendGDIPlusImage = THIS.OldSendGDIPlusImage
  46036.    ENDIF   
  46037. ENDIF   
  46038. THIS.resetDataSession()
  46039. ENDPROC
  46040. PROCEDURE resetdocument
  46041. THIS.ResetToDefault("ImageFieldInstance")
  46042. THIS.ResetToDefault("ImageFieldToFile")
  46043. THIS.ResetToDefault("UtilityImage")
  46044. DODEFAULT()
  46045. ENDPROC
  46046. PROCEDURE BeforeReport
  46047. IF THIS.XMLMode # OUTPUTXML_RDL_ONLY
  46048.    THIS.oldSendGDIPlusImage = THIS.SendGDIPlusImage     
  46049.    THIS.oldExternalFileLocation =  THIS.ExternalFileLocation    
  46050.    THIS.JPGclsid = NULL && force reinitialization for each report
  46051.                         && on possible discovery of an image control mid-way
  46052.    IF THIS.checkReportForGeneralFields() 
  46053.       THIS.initializeFileCopySettings()
  46054.    ENDIF    
  46055. ENDIF   
  46056. DODEFAULT()
  46057. THIS.resetDataSession()
  46058. ENDPROC
  46059. PROCEDURE getvfprdlcontents
  46060. LPARAMETERS m.tcNodeName, m.tlAsString
  46061. IF VARTYPE(THIS.CommandClauses) = "O"
  46062.    ADDPROPERTY(THIS.CommandClauses,;
  46063.              "externalFileLocation", ;
  46064.              THIS.externalFileLocation)
  46065.              
  46066.    ADDPROPERTY(THIS.CommandClauses, ;
  46067.             "copyImageFilesToExternalFileLocation", ;
  46068.             THIS.copyImageFilesToExternalFileLocation) 
  46069.             
  46070.    ADDPROPERTY(THIS.CommandClauses, ;
  46071.             "imageFileBaseName", ;
  46072.             THIS.imageFileBaseName)             
  46073. ENDIF            
  46074.             
  46075. RETURN DODEFAULT(m.tcNodeName, m.tlAsString)                         
  46076. ENDPROC
  46077. PROCEDURE AfterReport
  46078. LPARAMETERS tlCalledEarly
  46079. DODEFAULT(tlCalledEarly)
  46080. THIS.resetDataSession() 
  46081. ENDPROC
  46082. PROCEDURE gdipluslib_assign
  46083. LPARAMETERS m.tvValue
  46084. IF VARTYPE(m.tvValue) = "C"
  46085.    m.tvValue = ALLTRIM(m.tvValue)
  46086.    DO CASE
  46087.    CASE(EMPTY(m.tvValue) OR FILE(m.tvValue))
  46088.        THIS.gdiPlusLib = m.tvValue
  46089.    CASE FILE(FORCEEXT(m.tvValue,"VCX"))
  46090.        THIS.gdiPlusLib = FORCEEXT(m.tvValue,"VCX")
  46091.    ENDCASE    
  46092. ENDIF   
  46093. ENDPROC
  46094. PROCEDURE mimetype_assign
  46095. LPARAMETERS m.tvValue
  46096. IF VARTYPE(m.tvValue) = "C" AND "/" $ m.tvValue
  46097.    THIS.mimetype = ALLTRIM(m.tvValue)
  46098. ENDIF
  46099. ENDPROC
  46100. PROCEDURE forceon_assign
  46101. LPARAMETERS m.tvValue
  46102. IF VARTYPE(m.tvValue) = "L"
  46103.    THIS.forceOn = m.tvValue
  46104. ENDIF
  46105. ENDPROC
  46106. PROCEDURE applyfx
  46107. LPARAMETERS m.toListener, m.tcMethodToken, ;
  46108.             m.tP1, m.tP2, m.tP3, m.tP4, m.tP5, m.tP6, ;
  46109.             m.tP7, m.tP8, m.tP9, m.tP10, m.tP11, m.tP12
  46110.          
  46111. LOCAL m.liSession, m.liSelect, m.liFRXRecno, m.lvReturn, ;
  46112.       m.liDriver, m.err AS EXCEPTION
  46113. m.lvReturn = .T.
  46114. IF THIS.listenerSupportsSaveClip(m.toListener)
  46115.    TRY
  46116.       m.liSession = SET("DATASESSION")
  46117.       IF m.toListener.FRXDATASESSION > -1
  46118.          SET DATASESSION TO m.toListener.FRXDATASESSION
  46119.          m.liSelect = SELECT(0)
  46120.          DO CASE
  46121.          CASE m.tcMethodToken == "BEFOREREPORT"
  46122.             THIS.aImageCopies = .F.
  46123.             THIS.iImageInstanceIndex = 0
  46124.             IF USED (m.toListener.MemberDataAlias)
  46125.                SELECT (m.toListener.MemberDataAlias)
  46126.                LOCATE FOR ;
  46127.                   NAME == THIS.sNameSpace 
  46128.                THIS.lOnThisRun = (FOUND() OR THIS.forceOn)
  46129.                IF THIS.lOnThisRun
  46130.                   THIS.Setup(m.toListener)
  46131.                ENDIF   
  46132.             ENDIF
  46133.          CASE m.tcMethodToken == "RENDER" AND ;
  46134.               NOT ISNULL(m.toListener.FFCGraphics) AND ;
  46135.               THIS.lOnThisRun
  46136.             m.lvReturn = OUTPUTFX_DEFAULT_RENDER_BEHAVIOR
  46137.             m.liFRXRecno =  m.toListener.getFRXRecno(m.tcMethodToken,m.tP1, m.tP2)
  46138.             GO m.liFRXRecNo IN FRX
  46139.             SELECT (m.toListener.MemberDataAlias)
  46140.             LOCATE FOR FRXRecno = m.liFRXRecno AND ;
  46141.                    NAME == THIS.sNameSpace
  46142.             IF FOUND()
  46143.                THIS.setupImageClip(m.toListener, ;
  46144.                    m.tP2, m.tP3, m.tP4, m.tP5, @m.tP7, ;
  46145.                    (FRX.ObjType = FRX_OBJTYP_PICTURE))
  46146.             ENDIF    
  46147.          CASE m.tcMethodToken == "AFTERREPORT"
  46148.             IF THIS.listenerSupportsSaveClip(m.toListener,.F.)
  46149.                THIS.saveImageClips(m.toListener)
  46150.             ENDIF
  46151.             THIS.Cleanup(m.toListener)
  46152.          ENDCASE
  46153.      ELSE
  46154.          THIS.lOnThisRun = .F.   
  46155.      ENDIF   
  46156.          
  46157.   CATCH TO m.err
  46158.      #IF OUTPUTCLASS_DEBUGGING
  46159.          SUSPEND
  46160.      #ENDIF
  46161.   FINALLY
  46162.      IF VARTYPE(m.err) = "O" 
  46163.         *&* this object cleans up after an error --
  46164.         *&* doesn't provide a choice, although it could.
  46165.         THIS.Cleanup(m.toListener)
  46166.      ENDIF
  46167.      IF m.toListener.FRXDataSession # -1
  46168.         SET DATASESSION TO m.toListener.FrxDataSession
  46169.         SELECT (m.liSelect)
  46170.         SET DATASESSION TO (m.liSession)
  46171.      ENDIF   
  46172.   ENDTRY
  46173. ENDIF
  46174. RETURN  m.lvReturn
  46175.       
  46176.          
  46177.          
  46178. ENDPROC
  46179. PROCEDURE getcurrentclipfilename
  46180. IF THIS.iImageInstanceIndex = 0 OR ;
  46181.    EMPTY(THIS.aImageCopies[THIS.iImageInstanceIndex,2])
  46182.    RETURN ""
  46183.    RETURN THIS.aImageCopies[THIS.iImageInstanceIndex,2]
  46184. ENDIF   
  46185. ENDPROC
  46186. PROCEDURE outputpageclip
  46187. LPARAMETERS m.nPageNo, ;
  46188.             m.eDevice, ;
  46189.             m.nDeviceType, ;
  46190.             m.nleft, m.nTop, m.nWidth, m.nHeight, ;
  46191.             m.nClipLeft,m.nClipTop, m.nClipWidth, m.nClipHeight
  46192.   LOCAL m.laBind[1]
  46193.   AEVENTS(m.laBind,0)
  46194.   THIS.saveImageClips(laBind[1],m.nPageNo)
  46195. ENDPROC
  46196. PROCEDURE setupimageclip
  46197. LPARAMETERS m.toListener, ;
  46198.             m.tnLeft, m.tnTop, m.tnWidth, m.tnHeight, ;
  46199.             m.tvContentsToBeRendered, m.tlImageControl
  46200. LOCAL m.lcFileName
  46201. THIS.iImageInstanceIndex = THIS.iImageInstanceIndex + 1
  46202. DIME THIS.aImageCopies[THIS.iImageInstanceIndex,6]
  46203.        
  46204. * create a file name based on THIS.Name and THIS.iImageInstanceIndex
  46205. * unless the name of the object is the name of the class, which
  46206. * may happen if it is a privately-owned object
  46207. IF UPPER(THIS.Name) == UPPER(THIS.Class)
  46208.    m.lcFileName = "C"+SYS(2015)
  46209.    m.lcFileName = THIS.Name   
  46210. ENDIF
  46211. m.lcFileName = FORCEPATH(FORCEEXT(;
  46212.                m.lcFileName + "_"+TRANSFORM(THIS.iImageInstanceIndex), ;
  46213.               THIS.getImageExt()),THIS.sImagePath)                    
  46214. IF m.tlImageControl  
  46215.    m.tvContentsToBeRendered = m.lcFileName
  46216.    #IF OUTPUTCLASS_DEBUGGING
  46217.        m.tvContentsToBeRendered = STRCONV(m.lcFileName,STRCONV_DBCS_UNICODE)
  46218.    #ENDIF 
  46219. ENDIF   
  46220.      
  46221. THIS.aImageCopies[THIS.iImageInstanceIndex,1] = m.toListener.PageNo
  46222. THIS.aImageCopies[THIS.iImageInstanceIndex,2] = m.lcFileName
  46223. THIS.aImageCopies[THIS.iImageInstanceIndex,3] = m.tnLeft
  46224. THIS.aImageCopies[THIS.iImageInstanceIndex,4] = m.tnTop
  46225. THIS.aImageCopies[THIS.iImageInstanceIndex,5] = m.tnWidth
  46226. THIS.aImageCopies[THIS.iImageInstanceIndex,6] = m.tnHeight     
  46227. ENDPROC
  46228. PROCEDURE saveimageclips
  46229. LPARAMETERS m.toListener, m.tiPage
  46230. IF NOT THIS.listenerSupportsSaveClip(m.toListener)
  46231.    RETURN .F.
  46232. ENDIF
  46233. LOCAL m.lcTempfile, m.liPageIndex, m.liImageIndex, m.liStartPage, m.liEndPage
  46234. m.lcTempFile = FORCEEXT(FORCEPATH(SYS(2015),SYS(2023)),"EMF") && always goes to temp dir
  46235. THIS.oPoint.Set(0,0)
  46236. IF THIS.listenerSupportsSaveClip(m.toListener, .T.) 
  46237.    m.liStartPage = VAL(TRANSFORM(m.tiPage))
  46238.    m.liEndPage  = m.liStartPage
  46239.    UNBINDEVENTS(THIS)
  46240.    * avoid recursion the easy way.
  46241.    m.liStartPage = 1
  46242.    m.liEndPage = m.toListener.PageTotal
  46243. ENDIF
  46244. IF EMPTY(THIS.sImageFullPath)
  46245.    * should just happen the first time through
  46246.    * in paged mode
  46247.    IF PEMSTATUS(m.toListener,"targetFileName",5) AND ;
  46248.       NOT EMPTY(JUSTPATH(m.toListener.targetFileName))
  46249.       THIS.sImageFullPath = FULLPATH(THIS.sImagePath,m.toListener.targetFileName)
  46250.    ELSE
  46251.       THIS.sImageFullPath = FULLPATH(THIS.sImagePath)
  46252.    ENDIF   
  46253. ENDIF   
  46254. m.liImageIndex = ASCAN(THIS.aImageCopies,m.liStartPage,1,THIS.iImageInstanceIndex,1,8)
  46255. IF m.liImageIndex > 0
  46256.    FOR m.liPageIndex = m.liStartPage TO m.liEndPage
  46257.        m.toListener.OutputPage(m.liPageIndex,m.lcTempFile,100)
  46258.        THIS.oImageSrc.CreateFromFile(m.lcTempFile)
  46259.        DO WHILE m.liImageIndex <= THIS.iImageInstanceIndex
  46260.           IF THIS.aImageCopies[m.liImageIndex,1] > m.liPageIndex
  46261.               EXIT
  46262.           ENDIF
  46263.           THIS.oImageDest.Create(CEILING(THIS.aImageCopies[m.liImageIndex,5]/10) + ;
  46264.                                  THIS.margin,;
  46265.                                  CEILING(THIS.aImageCopies[liImageIndex,6]/10) + ;
  46266.                                  THIS.margin)
  46267.           THIS.oPrivateGraphics.CreateFromImage(THIS.oImageDest)
  46268.           THIS.oRect.Set(FLOOR(THIS.aImageCopies[m.liImageIndex,3]/10) ,;
  46269.                          FLOOR(THIS.aImageCopies[m.liImageIndex,4]/10) ,;
  46270.                          CEILING(THIS.aImageCopies[m.liImageIndex,5]/10  + ;
  46271.                          THIS.margin),;
  46272.                          CEILING(THIS.aImageCopies[liImageIndex,6]/10) + ;
  46273.                          THIS.margin)
  46274.           THIS.oPrivateGraphics.DrawImagePortionAt(;
  46275.                     THIS.oImageSrc, THIS.oPoint, THIS.oRect, 2)
  46276.           THIS.oImageDest.SaveToFile(FORCEPATH(THIS.aImageCopies[m.liImageIndex,2], ;
  46277.                                                THIS.sImageFullPath), ;
  46278.                                      THIS.mimetype) 
  46279.           m.liImageIndex = m.liImageIndex + 1 
  46280.        ENDDO
  46281.     NEXT
  46282.     ERASE (m.lcTempFile)
  46283. ENDIF   
  46284. IF THIS.listenerSupportsSaveClip(m.toListener,.T.) 
  46285.    BINDEVENT(m.toListener,"OutputPage",THIS,"outputPageClip")
  46286. ENDIF
  46287. ENDPROC
  46288. PROCEDURE getimageext
  46289. *&* override as you see fit.
  46290. RETURN SUBSTR(THIS.mimetype,RAT("/",THIS.mimetype) + 1)
  46291. ENDPROC
  46292. PROCEDURE setup
  46293. LPARAMETERS m.toListener
  46294. IF VARTYPE(m.toListener) # "O" 
  46295.    THIS.lOnThisRun = .F.
  46296.    * early quit
  46297. ENDIF
  46298. IF THIS.lOnThisRun 
  46299.    IF EMPTY(THIS.gdiPlusLib) OR ;
  46300.       NOT FILE(THIS.gdiPlusLib)
  46301.       IF ISNULL(m.toListener.FFCGraphics)
  46302.          THIS.lOnThisRun = .F.
  46303.       ELSE
  46304.          THIS.gdiPlusLib = m.toListener.FFCGraphics.ClassLibrary
  46305.       ENDIF         
  46306.    ENDIF
  46307.    * test:
  46308.    LOCAL loTemp
  46309.    TRY
  46310.       loTemp = NEWOBJECT("gpPoint",THIS.gdiPlusLib,THIS.gdiPlusLibModule)
  46311.    CATCH WHEN .T.
  46312.       THIS.gdiPlusLib = "_gdiplus.vcx"
  46313.       IF FILE(THIS.gdiPlusLib)
  46314.          THIS.gdiPlusLib = ""
  46315.       ELSE
  46316.          THIS.gdiPlusLib = _REPORTOUTPUT
  46317.       ENDIF 
  46318.       * one more try  
  46319.       TRY
  46320.          loTemp = NEWOBJECT("gpPoint",THIS.gdiPlusLib,THIS.gdiPlusLibModule)
  46321.       CATCH WHEN .T.
  46322.          loTemp = NULL
  46323.       ENDTRY
  46324.    FINALLY
  46325.       IF VARTYPE(loTemp) # "O"
  46326.          THIS.lOnThisRun = .F.
  46327.       ENDIF
  46328.       loTemp = NULL
  46329.    ENDTRY      
  46330. ENDIF
  46331. IF THIS.lOnThisRun   
  46332.    IF PEMSTATUS(m.toListener,"externalFileLocation",5) AND ;
  46333.       (NOT EMPTY(m.toListener.externalFileLocation)) 
  46334.       THIS.sImagePath = ADDBS(m.toListener.externalFileLocation)
  46335.    ELSE
  46336.       STORE SYS(2023) TO THIS.sImagePath, THIS.sImageFullPath 
  46337.    ENDIF
  46338.    IF THIS.listenerSupportsSaveClip(m.toListener,.T.)
  46339.       * page-at-a-time mode
  46340.       * bind to outputpage event
  46341.       BINDEVENT(m.toListener,"OutputPage",THIS,"outputPageClip")
  46342.    ENDIF
  46343.    IF VARTYPE(THIS.oImageSrc) # "O"
  46344.       THIS.oImageSrc = NEWOBJECT("gpBitMap",THIS.gdiPlusLib,THIS.gdiPlusLibModule)
  46345.    ENDIF                             
  46346.    IF VARTYPE(THIS.oImageDest) # "O"
  46347.        THIS.oImageDest = NEWOBJECT("gpBitMap",THIS.gdiPlusLib,THIS.gdiPlusLibModule)
  46348.    ENDIF                    
  46349.    IF VARTYPE(THIS.oPoint) # "O"
  46350.       THIS.oPoint = NEWOBJECT("gpPoint",THIS.gdiPlusLib,THIS.gdiPlusLibModule)
  46351.    ENDIF         
  46352.    IF VARTYPE(THIS.oRect) # "O"
  46353.       THIS.oRect = NEWOBJECT("gpRectangle",THIS.gdiPlusLib,THIS.gdiPlusLibModule)
  46354.    ENDIF        
  46355.    IF VARTYPE(THIS.oPrivateGraphics) # "O"
  46356.       THIS.oPrivateGraphics = NEWOBJECT("gpGraphics",THIS.gdiPlusLib,THIS.gdiPlusLibModule)
  46357.    ENDIF
  46358.  ENDIF   
  46359. ENDPROC
  46360. PROCEDURE gdipluslibmodule_assign
  46361. LPARAMETERS m.tvValue
  46362. IF VARTYPE(m.tvValue) = "C"
  46363.    m.tvValue = ALLTRIM(m.tvValue)
  46364.    IF(EMPTY(m.tvValue) OR (NOT EMPTY(SYS(2000,(m.tvValue)))))
  46365.        THIS.gdiPlusLibModule = m.tvValue
  46366.    ENDIF
  46367. ENDIF   
  46368. ENDPROC
  46369. PROCEDURE listenersupportssaveclip
  46370. LPARAMETERS m.toListener,m.tlActInPagedMode
  46371. DO CASE
  46372. CASE m.toListener.ListenerType = LISTENER_TYPE_DEF
  46373.    RETURN .F.
  46374. CASE PCOUNT() < 2
  46375.    RETURN m.toListener.ListenerType # LISTENER_TYPE_DEF
  46376. CASE tlActInPagedMode
  46377.    RETURN INLIST(m.toListener.ListenerType,LISTENER_TYPE_PRN,LISTENER_TYPE_PAGED)
  46378. OTHERWISE
  46379.    RETURN INLIST(m.toListener.ListenerType,LISTENER_TYPE_PRV,LISTENER_TYPE_ALLPGS)
  46380. ENDCASE    
  46381. ENDPROC
  46382. PROCEDURE cleanup
  46383. LPARAMETERS m.toListener
  46384. IF THIS.lOnThisRun AND VARTYPE(m.toListener) = "O" AND ;
  46385.    THIS.listenerSupportsSaveClip(m.toListener,.T.)
  46386.    UNBINDEVENTS(THIS)
  46387. ENDIF
  46388. THIS.lOnThisRun = .F.
  46389. STORE "" TO ;
  46390.       THIS.sImagePath, ;
  46391.       THIS.sImageFullPath
  46392. STORE NULL TO  ;
  46393.       THIS.oImageSrc, ;
  46394.       THIS.oImageDest, THIS.oPrivateGraphics, ;
  46395.       THIS.oPoint, THIS.oRect 
  46396. ENDPROC
  46397. PROCEDURE margin_assign
  46398. LPARAMETERS m.tvNewVal
  46399. IF VARTYPE(m.tvNewVal) = "N"
  46400.    THIS.margin = INT(m.tvNewVal)
  46401. ENDIF   
  46402. ENDPROC
  46403. PROCEDURE Init
  46404.        #DEFINE THISNAMESPACE         "Spacefold.LSN.gfxOutputClip"
  46405.        
  46406.        *&* An appropriate namespace must be defined for cases in which
  46407.        *&* you want to use this gfx on its own and share it
  46408.        *&* by placing it in the GFXs collection.
  46409.        *&* You can set the outputclip behavior to occur only 
  46410.        *&* after all other rendering is through, and
  46411.        *&* also ensure availability of the clip files and
  46412.        *&* clip file names to all Successors, by using this 
  46413.        *&* approach.  Simply add memberdata to the layout elements
  46414.        *&* you want clipped (no other memberdata property besides 
  46415.        *&* the name attribute is needed by this object).
  46416.        *&* The layout elements to be clipped
  46417.        *&* can be of any report control type.
  46418.        
  46419.        *&* However, this object can be invoked explicitly, even
  46420.        *&* when shared, by a custom rendering extension
  46421.        *&* using "ForceOn" behavior, and without
  46422.        *&* any memberdata instructions in the report.
  46423.        *&* It is also constructed to be 
  46424.        *&* well-behaved if multiple custom rendering extensions
  46425.        *&* keeps private copies and invoke them explicitly
  46426.        *&* rather than putting a shared copy in the GFXs collection.
  46427.        
  46428.        *&* Now that you have read this note <g>
  46429.        *&* and if you want this object to work on its
  46430.        *&* own in the GFXs collection as a shared worker object,
  46431.        *&* you can :
  46432.        *&* override the Init in your subclass with 
  46433.        *&* an appropriate namespace value 
  46434.        *&* OR         
  46435.        *&* uncomment the IF/ENDIF below and set 
  46436.        *&* an appropriate default property definition
  46437.        *&* in your subclass.     
  46438.        *&* IF VARTYPE(THIS.sNamespace) # "C" OR EMPTY(THIS.sNamespace)
  46439.           THIS.sNameSpace = THISNAMESPACE 
  46440.        *&* ENDIF 
  46441. ENDPROC
  46442. PROCEDURE Destroy
  46443. THIS.Cleanup()
  46444. ENDPROC
  46445. Datasessionv
  46446. TNFRXRECNO
  46447. TNLEFT
  46448. TNTOP
  46449. TNWIDTH
  46450. TNHEIGHT
  46451. TNOBJECTCONTINUATIONTYPE
  46452. TCCONTENTSTOBERENDERED
  46453. TIGDIPLUSIMAGE
  46454. TWOPASSPROCESS
  46455. CURRENTPASS
  46456. LCCONTENTS
  46457. LNREC
  46458. LNSELECT    
  46459. LNSESSION
  46460. LLDYNAMICS
  46461. _GOFP
  46462. NSEARCHPAGES
  46463. PAGENO
  46464. LSTOREDATA
  46465. NFOXYDRIVINGDATASESSION
  46466. LOEXC
  46467. LCTESTCONTENTS
  46468. LCNEWCONTENTS
  46469. LCNEWUNCONTENTS
  46470. LNROTATE
  46471. LNDYNAMICS
  46472. GETDYNAMICSFROMFRX
  46473. RESETDATASESSION
  46474. COUTPUTALIAS
  46475. SETCURRENTDATASESSION
  46476. SETFRXDATASESSION    
  46477. NFRXINDEXZ
  46478. The helper 'Rendering' cursor is not available.
  46479. Error
  46480. The helper 'FRX' cursor is not available.
  46481. Error
  46482. EXCEPTION
  46483. TempFRX
  46484. TempFRX
  46485. TempFRX
  46486. TempFRX
  46487. TempFrx 
  46488. Error creating report data. The output will not be rendered correctly.
  46489. Error
  46490. TempFRXW
  46491. Error getting report informationC
  46492. Line: 
  46493. Please inform the details to   vfpimaging@hotmail.com
  46494. FoxyPreviewer Error
  46495. RESETDATASESSION
  46496. COUTPUTALIAS    
  46497. CFRXALIAS
  46498. CFULLOUTPUTALIAS
  46499. LNSELECT
  46500. LCFULLOUTPUT
  46501. LOEXC    
  46502. LNALIASES
  46503. AFRXTABLES
  46504. LATEMPDATA
  46505. NRECNO
  46506. TEMPFRX
  46507. RESETRPT
  46508. OBJTYPE
  46509. WIDTH
  46510. FRXWIDTH
  46511. HEIGHT    
  46512. FRXHEIGHT
  46513. FRXTOP
  46514. FRXRECNO
  46515. FRXINDEX
  46516. CAUXFULLOUTPUTALIAS
  46517. DYNAMICS
  46518. PROCESSDYNAMICS
  46519. ERRORNO
  46520. MESSAGE
  46521. LINENO
  46522. LINECONTENTS
  46523. RESETDATASESSION
  46524. AFRXTABLES
  46525. COUTPUTALIAS
  46526. CFULLOUTPUTALIAS    
  46527. CFRXALIAS
  46528. CAUXFULLOUTPUTALIAS
  46529. FXTHERM
  46530. FOXYTHERM
  46531. LCTHERMCLASS
  46532. LOEXC
  46533. _GOFP
  46534. LCOMPLETEMODE
  46535. OFOXYPREVIEWER
  46536. THIS    
  46537. QUIETMODE
  46538. LQUIETMODE    
  46539. SUCCESSOR
  46540. CSUCCESSOR
  46541. LEXPANDFIELDS
  46542. LNTYPE
  46543. NTHERMTYPE
  46544. FXFEEDBACKCLASS
  46545. _ODESTSCREEN
  46546. COMMANDCLAUSES
  46547. WINDOW
  46548. LWAITFORNEXTREPORT
  46549. NOPAGEEJECT
  46550. Datasessionv
  46551. name="Microsoft.VFP.Reporting.Builder.
  46552. ROTATE
  46553.  execute="
  46554. execwhen="
  46555. ROTATE
  46556. EVALUATECONTENTS
  46557.  script="
  46558. TNRECNO
  46559. TCNEWCONTENTS
  46560. TNROTATE    
  46561. LNSESSION
  46562. LNSELECT
  46563. LCDYNAMICS    
  46564. LNOBJTYPE
  46565. LCSTYLE
  46566. SETFRXDATASESSION
  46567. OBJTYPE
  46568. STYLE
  46569. CMAINALIAS
  46570. LCEXECWHEN    
  46571. LCDYNTYPE
  46572. LLTRUE
  46573. LCSCRIPT
  46574. LCNEWCONTENTS
  46575. GETSTRINGFROMXML
  46576. LOEXC
  46577. ORIENTATION
  46578. PAPERSIZE
  46579. DEVICE
  46580. LNSETTINGS
  46581. LNORIENTATION
  46582. LCPRINTERNAME
  46583. LNORIENTATIONLINE
  46584. LNPAPERSIZE
  46585. LNPAPERSIZELINE
  46586. LCPRINTERNAMELINE
  46587. OBJTYPE
  46588. OBJCODE
  46589. LASETTINGS
  46590. NPRTORIENTATION
  46591. NPRTPAPERSIZE
  46592. LNPRINTERNAMELINE
  46593. CPRTPRINTERNAME
  46594. m.tcText = STRTRAN(m.tcText, [&] , [&]) 
  46595. m.tcText = STRTRAN(m.tcText, [ ], [ ])
  46596. m.tcText = STRTRAN(m.tcText, [<]  , [<])
  46597. m.tcText = STRTRAN(m.tcText, [>]  , [>])
  46598. m.tcText = STRTRAN(m.tcText, ["], ["])
  46599. TCTEXT
  46600. <reportdata name="Microsoft.VFP.Reporting.Builder.
  46601. BOOLEAN
  46602. _TempDynamics
  46603. _TempDynamics
  46604. _TempDynamicsN
  46605. LCSTYLE
  46606. LCDYNAMICSTRING
  46607. LOEXC
  46608. STYLE
  46609. LBRETURN
  46610. LNSELECT
  46611. LNRECS
  46612. LNRECDYN
  46613. DYNAMICS
  46614. _TEMPDYNAMICS
  46615. CFULLOUTPUTALIAS
  46616. OBJTYPE
  46617. FNAME
  46618. FONTFACE
  46619. FSIZE
  46620. FONTSIZE
  46621. FSTYLE    
  46622. FONTSTYLE
  46623. LNPENRGB
  46624. LNPENR
  46625. LNPENG
  46626. LNPENB
  46627. PENRGB
  46628. PENRED
  46629. PENGREEN
  46630. PENBLUE    
  46631. LNFILLRGB
  46632. LNFILLR
  46633. LNFILLG
  46634. LNFILLB
  46635. FILLRGB
  46636. FILLRED    
  46637. FILLGREEN
  46638. FILLBLUE
  46639. FILLA
  46640. MODE    
  46641. OBJ_IMAGE'
  46642. LPRINT
  46643. ERASETEMPFILES    
  46644. NFRXINDEX
  46645. Datasessionv
  46646. Select: 
  46647. Alias: 
  46648. Session: 
  46649. c:\FoxyPreviewer_Log.txta
  46650. TCINFO
  46651. TCMETHOD
  46652. LNSELECT
  46653. LCALIAS
  46654. LNDATASESSION
  46655. LCTEXT
  46656. CRLF5
  46657. Datasessionv
  46658. THIS    
  46659. PAGETOTAL    
  46660. LNSESSION
  46661. RESETDATASESSION
  46662. LLERROR
  46663. COUTPUTALIAS
  46664. LAHEIGHT
  46665. MAXHEIGHT
  46666. CONTENTS
  46667. LNREPORTHEIGHT
  46668. GETPAGEHEIGHT5
  46669. NBANDOBJCODE    
  46670. NFRXRECNO
  46671. LEMPTYREPORT
  46672. LSTOREDATA    
  46673. AFRXPAGES    
  46674. NFRXINDEX    
  46675. PAGETOTAL
  46676. OFOXYPREVIEWER
  46677. LREPEATINPAGE
  46678. LHALFHEIGHTREPORT
  46679. ISHALFPAGE
  46680. LEMPTYREPORT
  46681. ERASETEMPFILES
  46682. UPDATEPROPERTIES
  46683. LISTENERTYPE
  46684. COMMANDCLAUSES
  46685. PREVIEW
  46686. OUTPUTTO
  46687. LSTOREDATA
  46688. cOutputAlias
  46689. cAuxFullOutputAlias
  46690. lDeleteOnDestroya
  46691. cMainAlias
  46692. nStartingSession
  46693. nStartingRecNo
  46694. cStartingAlias
  46695. lStoreDataa
  46696. cFullOutputAlias
  46697. cFRXDBF
  46698. cFRXAlias
  46699. aFRXTables[1]
  46700. nFRXIndex
  46701. nPrtOrientation
  46702. nPrtPaperSize
  46703. cPrtPrinterName
  46704. aFRXPages[1]
  46705. lWaitForNextReport-
  46706. lEmptyReporta
  46707. OnPreviewClose
  46708. OnPreviewClose_Bind
  46709. ADDPROPERTY
  46710. _GOFP    
  46711. QUIETMODE
  46712. LQUIETMODE
  46713. LSTOREDATAO
  46714. Datasessionv
  46715. Datasessionv
  46716. TEMP5
  46717. Error creating temporary FRX table
  46718. LSTOREDATA
  46719. LCTABLE
  46720. LCALIAS
  46721. LLHELPER
  46722. LNSELECT    
  46723. LNSESSION
  46724. LNINDEX
  46725. _GOFP
  46726. OFOXYPREVIEWER
  46727. _NDATASESSIONMODE    
  46728. NFRXINDEX
  46729. _COUTPUTALIAS
  46730. COUTPUTALIAS    
  46731. _OALIASES
  46732. _NINDEX
  46733. CMAINALIAS
  46734. SETCURRENTDATASESSION
  46735. LCSTARTINGALIAS
  46736. CSTARTINGALIAS
  46737. NSTARTINGSESSION
  46738. NSTARTINGRECNO
  46739. CFOXYDRIVINGALIAS
  46740. SETFRXDATASESSION
  46741. GETPRINTERINFO    
  46742. AFRXPAGES
  46743. NPRTORIENTATION
  46744. NPRTPAPERSIZE    
  46745. LCFRXDBF0
  46746. LCFRXALIAS
  46747. LCFRXALIAS0
  46748. RESETDATASESSION    
  46749. CFRXALIAS
  46750. AFRXTABLES
  46751. FRXRECNO
  46752. DBFRECNO
  46753. WIDTH
  46754. HEIGHT
  46755. CONTTYPE
  46756. CONTENTS
  46757. UNCONTENTS
  46758. FRXINDEX
  46759. DYNAMICS
  46760. ROTATE
  46761. TNFRXRECNO
  46762. TNLEFT
  46763. TNTOP
  46764. TNWIDTH
  46765. TNHEIGHT
  46766. TNOBJECTCONTINUATIONTYPE
  46767. TCCONTENTSTOBERENDERED
  46768. TIGDIPLUSIMAGE
  46769. LSTOREDATA
  46770. STOREFRXDATA
  46771. storefrxdata,
  46772. getfullfrxdata`
  46773. erasetempfiles
  46774. updatepropertiesz
  46775. getdynamicsfromfrx
  46776. getprinterinfo
  46777. getstringfromxmlw
  46778. processdynamics
  46779. onpreviewclose_bind
  46780. addtolog3!
  46781. ishalfpage
  46782. BeforeBandO$
  46783. AfterReport
  46784. LoadReport
  46785. BeforeReport *
  46786. Render
  46787. <?xml version="1.0"?>
  46788. <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  46789.   <xsl:output method="html" version="1.0" encoding="UTF-8" indent="no" doctype-public="-//W3C//DTD HTML 4.01//EN" doctype-system="http://www.w3.org/TR/html4/strict.dtd"/>
  46790.   <xsl:param name="externalFileLocation"/>
  46791.   <!--select="'./whatever/'" or 'http://something/myimages/' or "'./'" or... -->
  46792.   <xsl:param name="copyImageFiles" select="0"/>
  46793.   <xsl:param name="generalFieldDPI" select="96"/>
  46794.   <xsl:param name="fillPatternShade" select="180*3"/>
  46795.   <xsl:param name="fillPatternOffset" select="128"/>
  46796.   <xsl:param name="numberPrecision" select="5"/>
  46797.   <xsl:param name="fieldAlphaOpacityOffset" select="75"/>
  46798.   <xsl:param name="fieldAlphaOpacityShade" select="180*3"/>
  46799.   <xsl:param name="useTextAreaForStretchingText" select="1"/>
  46800.   <xsl:param name="hideScrollbarsForTextAreas" select="0"/>
  46801.   <xsl:param name="PageTitlePrefix_LOC" select="''"/>
  46802. <!--    <xsl:param name="unpagedModeIncludesOnePageHeader" select="0"/> -->
  46803.   <xsl:param name="unpagedModeIncludesTitle" select="1"/>
  46804.   <xsl:param name="noBody" select="0"/>
  46805.   <xsl:param name="useDynamicTextAttributes" select="1"/>
  46806.   <xsl:param name="anchorAttrName" select="1"/>   
  46807.   <!-- id is theoretically better if you wanted to write
  46808.    script against this element, or in case name is 
  46809.    deprecated in a future version of the standard, 
  46810.    but a value of 1 forces name to be used instead. 
  46811.    Current-newer browsers will be okay with this, and older 
  46812.    browsers might prefer it. -->
  46813.   <xsl:variable name="FRUs" select="10000"/>
  46814.   <xsl:variable name="printDPI" select="960"/>
  46815.   <xsl:variable name="FRUsInPixelsat96DPI" select="104.167"/>
  46816.   <xsl:variable name="imagePixelRatio" select="$generalFieldDPI div $printDPI"/>
  46817.   <xsl:variable name="zeros" select="substring('0000000000000000000000000',1,$numberPrecision)"/>
  46818.   <xsl:variable name="thisPageHeight">
  46819.     <xsl:value-of select="number(/Reports/VFP-Report/VFP-RDL/VFPDataSet/VFPFRXPrintJob/@pageheight  div $printDPI)"/>
  46820.   </xsl:variable>
  46821.   <xsl:variable name="lineNodeName" select="/Reports/VFP-Report/VFP-RDL/VFPDataSet/VFPFRXLayoutNode[type=6]/name"/>
  46822.   <xsl:variable name="labelNodeName" select="/Reports/VFP-Report/VFP-RDL/VFPDataSet/VFPFRXLayoutNode[type=5]/name"/>
  46823.   <xsl:variable name="fieldNodeName" select="/Reports/VFP-Report/VFP-RDL/VFPDataSet/VFPFRXLayoutNode[type=8]/name"/>
  46824.   <xsl:variable name="shapeNodeName" select="/Reports/VFP-Report/VFP-RDL/VFPDataSet/VFPFRXLayoutNode[type=7]/name"/>
  46825.   <xsl:variable name="pictureNodeName" select="/Reports/VFP-Report/VFP-RDL/VFPDataSet/VFPFRXLayoutNode[type=17]/name"/>
  46826.   <xsl:variable name="detailNodeName" select="/Reports/VFP-Report/VFP-RDL/VFPDataSet/VFPFRXLayoutNode[code=4]/name"/>
  46827.   <xsl:variable name="detailHeaderNodeName" select="/Reports/VFP-Report/VFP-RDL/VFPDataSet/VFPFRXLayoutNode[code=9]/name"/>
  46828.   <xsl:variable name="detailFooterNodeName" select="/Reports/VFP-Report/VFP-RDL/VFPDataSet/VFPFRXLayoutNode[code=10]/name"/>
  46829.   <xsl:variable name="pageHeaderNodeName" select="/Reports/VFP-Report/VFP-RDL/VFPDataSet/VFPFRXLayoutNode[code=1]/name"/>
  46830.   <xsl:variable name="pageFooterNodeName" select="/Reports/VFP-Report/VFP-RDL/VFPDataSet/VFPFRXLayoutNode[code=7]/name"/>
  46831.   <xsl:variable name="columnHeaderNodeName" select="/Reports/VFP-Report/VFP-RDL/VFPDataSet/VFPFRXLayoutNode[code=2]/name"/>
  46832.   <xsl:variable name="columnFooterNodeName" select="/Reports/VFP-Report/VFP-RDL/VFPDataSet/VFPFRXLayoutNode[code=6]/name"/>
  46833.   <xsl:variable name="groupHeaderNodeName" select="/Reports/VFP-Report/VFP-RDL/VFPDataSet/VFPFRXLayoutNode[code=3]/name"/>
  46834.   <xsl:variable name="groupFooterNodeName" select="/Reports/VFP-Report/VFP-RDL/VFPDataSet/VFPFRXLayoutNode[code=5]/name"/>
  46835.   <xsl:variable name="titleNodeName" select="/Reports/VFP-Report/VFP-RDL/VFPDataSet/VFPFRXLayoutNode[code=0]/name"/>
  46836.   <xsl:variable name="summaryNodeName" select="/Reports/VFP-Report/VFP-RDL/VFPDataSet/VFPFRXLayoutNode[code=8]/name"/>
  46837.   <xsl:variable name="anchorAttr">
  46838.   <xsl:choose>
  46839.   <xsl:when test="$anchorAttrName=1">name</xsl:when>
  46840.   <xsl:otherwise>id</xsl:otherwise>
  46841.   </xsl:choose> 
  46842.   </xsl:variable>
  46843.   <xsl:key name="Layout" match="/Reports/VFP-Report/VFP-RDL/VFPDataSet/VFPFRXLayoutObject[platform='WINDOWS']" use="concat(frxrecno,../../@id)"/>
  46844.   <xsl:template match="/">
  46845.       <xsl:choose>
  46846.         <xsl:when test="number($noBody)=1">
  46847.         <div>
  46848.          <meta http-equiv="Content-Type"  content="text/html; charset=UTF-8"/>        
  46849.           <xsl:call-template name="renderStyles"/>
  46850.           <xsl:call-template name="body"/>
  46851.          </div>
  46852.         </xsl:when>
  46853.         <xsl:otherwise>
  46854.           <xsl:apply-templates select="/" mode="full"/>
  46855.         </xsl:otherwise>
  46856.       </xsl:choose>
  46857.   </xsl:template>
  46858.   <xsl:template match="/" mode="full">
  46859.     <html>
  46860.        <xsl:if test="/Reports/VFP-Report[1]/VFP-RDL/VFPDataSet/VFPFRXLayoutObject[objtype=1 and (fontcharset=177 or fontcharset=178)]">
  46861.        <xsl:attribute name="dir">rtl</xsl:attribute>
  46862.        </xsl:if>
  46863.       <head>
  46864.         <meta  http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
  46865. <xsl:comment> 
  46866. the above repeated-explicit declaration is necessary because 
  46867. some versions of MSXML xslt processing don't include the 
  46868. charset as required by the XSLT standard when method="html".  
  46869. Explicitly including the META creates a doubled meta content-type tag, 
  46870. but we do need the encoding to be specified properly and the doubled tag is okay. 
  46871. </xsl:comment>
  46872.         <meta name="description" 
  46873. content="{/Reports/VFP-Report[1]/Run/property[@id='description']/.}"/>
  46874.         <meta name="author" 
  46875. content="{/Reports/VFP-Report[1]/Run/property[@id='author']/.}"/>
  46876.         <meta name="copyright" 
  46877. content="{/Reports/VFP-Report[1]/Run/property[@id='copyright']/.}"/>
  46878.         <meta name="date" 
  46879. content="{/Reports/VFP-Report[1]/Run/property[@id='date']/.}"/>
  46880.         <xsl:if test="/Reports/VFP-Report/Run/property[@id='keywords']">
  46881.         <meta name="keywords">
  46882.         <xsl:attribute name="content">
  46883.          <xsl:for-each select="/Reports/VFP-Report/Run/property[@id='keywords']">
  46884.          <xsl:value-of select="."/><xsl:if test="not(position()=last())">,</xsl:if>
  46885.         </xsl:for-each>
  46886.         </xsl:attribute>
  46887.         </meta> 
  46888.         </xsl:if>
  46889.         <xsl:if test="/Reports/VFP-Report/Run/property[@id='http-equiv']">
  46890.             <xsl:for-each select="/Reports/VFP-Report/Run/property[@id='http-equiv']//meta">
  46891.           <xsl:variable name="thisMeta" select="concat(ancestor-or-self::*[@id='http-equiv']/@id ,'.',@name)"/>
  46892.           <!-- the extra Run nodes being looked up are potentially evaluated, not original values of the property, 
  46893.           so we can account for expressions -->
  46894.           <meta  http-equiv="{@name}" content="{/Reports/VFP-Report/Run/property[@id=$thisMeta]}"/>
  46895.           </xsl:for-each>
  46896.         </xsl:if>
  46897.         <title>
  46898.           <xsl:choose>
  46899.           <xsl:when test="/Reports/VFP-Report[1]/Run/property[@id='title']">
  46900.             <xsl:value-of select="/Reports/VFP-Report[1]/Run/property[@id='title']/."/>
  46901.           </xsl:when>
  46902.           <xsl:otherwise>
  46903.             <!-- default/VFP 9.0 RTM handling -->
  46904.              <xsl:value-of select="$PageTitlePrefix_LOC"/>
  46905.              <xsl:if test="string-length(/Reports/VFP-Report[1]/VFP-RDL/VFPDataSet/VFPFRXPrintJob/@name) = 0">
  46906.                <xsl:value-of select="/Reports/VFP-Report[1]/VFP-RDL/@id"/>
  46907.              </xsl:if>
  46908.              <xsl:value-of select="/Reports/VFP-Report[1]/VFP-RDL/VFPDataSet/VFPFRXPrintJob/@name"/>
  46909.           </xsl:otherwise>
  46910.           </xsl:choose>
  46911.         </title>
  46912.         <xsl:call-template name="renderStyles"/>
  46913.       </head>
  46914.       <body>
  46915.         <xsl:call-template name="body"/>
  46916.       </body>
  46917.     </html>
  46918.   </xsl:template>
  46919.   <xsl:template name="renderStyles">
  46920.      <xsl:call-template name="DocumentStyles"/>
  46921.     <xsl:for-each select="/Reports/VFP-Report">
  46922.       <xsl:call-template name="Styles">
  46923.         <xsl:with-param name="thisReport" select="position()"/>
  46924.         <xsl:with-param name="thisReportID" select="./VFP-RDL/@id"/>
  46925.       </xsl:call-template>
  46926.       <!--        <xsl:call-template name="Script"/> avoid security problems: no script, not even a lone comment indicating TBD -->
  46927.     </xsl:for-each>
  46928.   </xsl:template>
  46929.   <xsl:template name="body">
  46930.     <xsl:for-each select="/Reports/VFP-Report">
  46931.       <xsl:variable name="thisReport" select="position()"/>
  46932.       <xsl:variable name="thisReportID" select="./VFP-RDL/@id"/>
  46933.       <xsl:variable name="thisReportRangeFrom" select="number(./VFP-RDL/VFPDataSet/VFPFRXCommand/@RANGEFROM)"/>
  46934.       <xsl:variable name="separateTitlePage" select="./Data/*[name()=$titleNodeName] and ./VFP-RDL/VFPDataSet/VFPFRXLayoutObject[bandtype='0' and pagebreak='true']"/>
  46935.       <xsl:variable name="separateSummaryPage" select="./Data/*[name()=$summaryNodeName] and ./VFP-RDL/VFPDataSet/VFPFRXLayoutObject[bandtype='8' and pagebreak='true' and ejectbefor='false']"/>
  46936.       <xsl:variable name="reportPages" select="count(./Data/*[(name()=$pageHeaderNodeName) or (name()=$titleNodeName and $separateTitlePage=true()) or  (name()=$summaryNodeName and $separateSummaryPage=true())])"/>
  46937.       <div>
  46938.         <xsl:if test="number($noBody)=1">
  46939.           <xsl:attribute name="style">
  46940.                position=relative;height=<xsl:value-of select="$reportPages * $thisPageHeight"/>in;
  46941.                </xsl:attribute>
  46942.         </xsl:if>
  46943.         <xsl:choose>
  46944.           <xsl:when test="./Data/*[name() = $pageHeaderNodeName]">
  46945.             <xsl:if test="$separateTitlePage">
  46946.               <xsl:apply-templates select="./Data/*[name()=$titleNodeName]" mode="titlesummarypage">
  46947.                 <xsl:with-param name="thisReport" select="$thisReport"/>
  46948.                 <xsl:with-param name="thisReportID" select="$thisReportID"/>
  46949.               </xsl:apply-templates>
  46950.             </xsl:if>
  46951.             <xsl:apply-templates select="./Data/*[name()=$pageHeaderNodeName]" mode="page">
  46952.               <xsl:with-param name="thisReport" select="$thisReport"/>
  46953.               <xsl:with-param name="thisReportID" select="$thisReportID"/>
  46954.               <xsl:with-param name="thisReportRangeFrom" select="$thisReportRangeFrom"/>
  46955.             </xsl:apply-templates>
  46956.             <xsl:if test="$separateSummaryPage">
  46957.               <xsl:apply-templates select="./Data/*[name()=$summaryNodeName]" mode="titlesummarypage">
  46958.                 <xsl:with-param name="thisReport" select="$thisReport"/>
  46959.                 <xsl:with-param name="thisReportID" select="$thisReportID"/>
  46960.               </xsl:apply-templates>
  46961.             </xsl:if>
  46962.           </xsl:when>
  46963.           <xsl:otherwise>
  46964.             <!-- unpaginated-->
  46965.             <xsl:variable name="thisPageHeaderHeight" select="/Reports/VFP-Report[$thisReport]/VFP-RDL/VFPDataSet/VFPFRXLayoutObject[bandlabel='Page Header'][1]/height  div $FRUs"/>
  46966.             <xsl:variable name="thisReportPageHeight" select="number($thisPageHeight - ( $thisPageHeaderHeight +  (/Reports/VFP-Report[$thisReport]/VFP-RDL/VFPDataSet/VFPFRXLayoutObject[bandlabel='Page Footer'][1]/height div $FRUs)) )"/>
  46967.             <xsl:if test="./Data/Pages/*[name() = $pageHeaderNodeName]"> <!-- $unpagedModeIncludesOnePageHeader=1" -->
  46968.               <!-- show the contents of the first page header -->
  46969.               <xsl:apply-templates mode="formattingBand" select="./Data/Pages/*[@idref = /Reports/VFP-Report[$thisReport]/VFP-RDL/VFPDataSet/VFPFRXLayoutObject[bandlabel='Page Header']/frxrecno][1]">
  46970.                 <xsl:with-param name="thisReport" select="$thisReport"/>
  46971.                 <xsl:with-param name="thisReportID" select="$thisReportID"/>
  46972.                 <xsl:with-param name="thisReportPageHeight" select="$thisReportPageHeight"/>
  46973.                 <xsl:with-param name="thisPageHeight" select="$thisPageHeight"/>
  46974.               </xsl:apply-templates>
  46975.             </xsl:if>
  46976.             
  46977.             <!-- the @id criteria below leaves out the Pages and Columns collections, if any -->
  46978.             <!-- we could add in an initial page header but then we'd have to do the additional work to handle any title, etc; all the height offsets will change -->
  46979.             <xsl:apply-templates select="./Data/*[@idref and ($unpagedModeIncludesTitle=1 or not(name() = $titleNodeName))]" mode="unpagedBand">
  46980.               <xsl:with-param name="thisReport" select="$thisReport"/>
  46981.               <xsl:with-param name="thisReportID" select="$thisReportID"/>
  46982.               <xsl:with-param name="thisPageHeight" select="$thisPageHeight"/>
  46983.               <xsl:with-param name="thisReportPageHeight" select="$thisReportPageHeight"/>
  46984.               <xsl:with-param name="thisPageHeaderHeight" select="$thisPageHeaderHeight"/>
  46985.             </xsl:apply-templates>
  46986.           </xsl:otherwise>
  46987.         </xsl:choose>
  46988.       </div>
  46989.     </xsl:for-each>
  46990.   </xsl:template>
  46991.   <xsl:template match="/Reports/VFP-Report/Data/*" mode="titlesummarypage">
  46992.     <xsl:param name="thisReport" select="1"/>
  46993.     <xsl:param name="thisReportID"/>
  46994.     <xsl:param name="thisReportRangeFrom" select="1"/>
  46995.     <xsl:variable name="thisBand" select="@id"/>
  46996.     <div>
  46997.       <xsl:attribute name="style"> width:100%;top:<xsl:value-of select="$thisPageHeight * (number( ./@idref) -$thisReportRangeFrom)"/>in; position:absolute; </xsl:attribute>
  46998.       <xsl:apply-templates select="." mode="band">
  46999.         <xsl:with-param name="thisReport" select="$thisReport"/>
  47000.         <xsl:with-param name="thisReportID" select="$thisReportID"/>
  47001.       </xsl:apply-templates>
  47002.       <xsl:if test="/Reports/VFP-Report[$thisReport]/VFP-RDL/VFPDataSet/VFPFRXLayoutObject[frxrecno=$thisBand and ejectafter='true']">
  47003.         <!-- page footer for this summary page -->
  47004.         <xsl:apply-templates select="/Reports/VFP-Report[$thisReport]/Data/*[name()=$pageFooterNodeName][position()=last()]" mode="band">
  47005.           <xsl:with-param name="thisReport" select="$thisReport"/>
  47006.           <xsl:with-param name="thisReportID" select="$thisReportID"/>
  47007.         </xsl:apply-templates>
  47008.       </xsl:if>
  47009.     </div>
  47010.   </xsl:template>
  47011.   <xsl:template match="/Reports/VFP-Report/Data/*" mode="page">
  47012.     <xsl:param name="thisReport" select="1"/>
  47013.     <xsl:param name="thisReportID"/>
  47014.     <xsl:param name="thisReportRangeFrom" select="1"/>
  47015.     <xsl:variable name="thisPage" select="@id"/>
  47016.     <div>
  47017.       <xsl:attribute name="style"> width:100%;top:<xsl:value-of select="$thisPageHeight * ($thisPage -$thisReportRangeFrom)"/>in;position:absolute; </xsl:attribute>
  47018.       <xsl:apply-templates select="." mode="band">
  47019.         <xsl:with-param name="thisReport" select="$thisReport"/>
  47020.         <xsl:with-param name="thisReportID" select="$thisReportID"/>
  47021.       </xsl:apply-templates>
  47022.       <xsl:if test="$thisPage = 1 and /Reports/VFP-Report[$thisReport]/Data/*[name()=$titleNodeName] and /Reports/VFP-Report[$thisReport]/VFP-RDL/VFPDataSet/VFPFRXLayoutObject[bandtype='0' and pagebreak='false']">
  47023.         <xsl:apply-templates select="/Reports/VFP-Report[$thisReport]/Data/*[name()=$titleNodeName]" mode="band">
  47024.           <xsl:with-param name="thisReport" select="$thisReport"/>
  47025.           <xsl:with-param name="thisReportID" select="$thisReportID"/>
  47026.         </xsl:apply-templates>
  47027.       </xsl:if>
  47028.       <xsl:apply-templates select="/Reports/VFP-Report/Data/*[( (@id=$thisPage and contains(concat('|',$pageFooterNodeName,'|',$columnHeaderNodeName,'|',$columnFooterNodeName,'|'),concat('|',name(),'|'))) or (@idref=$thisPage and contains(concat('|',$detailHeaderNodeName,'|',$detailFooterNodeName,'|',$detailNodeName,'|',$groupHeaderNodeName,'|',$groupFooterNodeName,'|',$summaryNodeName,'|'),concat('|',name(),'|'))) )]" mode="band">
  47029.         <xsl:with-param name="thisReport" select="$thisReport"/>
  47030.         <xsl:with-param name="thisReportID" select="$thisReportID"/>
  47031.       </xsl:apply-templates>
  47032.     </div>
  47033.   </xsl:template>
  47034.   <xsl:template match="/Reports/VFP-Report/Data/Pages/*" mode="formattingBand">
  47035.     <xsl:param name="thisReport" select="1"/>
  47036.     <xsl:param name="thisReportID"/>
  47037.     <xsl:param name="thisPageHeight"/>
  47038.     <xsl:param name="thisReportPageHeight"/>
  47039.     <xsl:variable name="thisPage" select="@id"/>
  47040.     <xsl:variable name="thisPageRenderOffset" select="(($thisPage - 1) * $thisReportPageHeight)  + sum((/Reports/VFP-Report[position() < $thisReport]/VFP-RDL/VFPDataSet/VFPFRXLayoutObject[bandlabel='Page Header']/height) ) "/>
  47041.     <xsl:for-each select="./*">
  47042.       <xsl:variable name="thisID" select="translate(@id,'+','')"/>
  47043.       <xsl:call-template name="Render">
  47044.         <xsl:with-param name="thisID" select="$thisID"/>
  47045.         <xsl:with-param name="thisZ" select="position()"/>
  47046.         <xsl:with-param name="thisPage" select="../@idref"/>
  47047.         <xsl:with-param name="thisReport" select="$thisReport"/>
  47048.         <xsl:with-param name="thisReportID" select="$thisReportID"/>
  47049.         <xsl:with-param name="topOffset" select="number($thisPageRenderOffset) * $printDPI"/>
  47050.       </xsl:call-template>
  47051.     </xsl:for-each>
  47052.   </xsl:template>
  47053.   <xsl:template match="/Reports/VFP-Report/Data/*" mode="unpagedBand">
  47054.       <xsl:param name="thisReport" select="1"/>
  47055.     <xsl:param name="thisReportID"/>
  47056.     <xsl:param name="thisPageHeight"/>
  47057.     <xsl:param name="thisReportPageHeight"/>
  47058.     <xsl:param name="thisPageHeaderHeight"/>
  47059.     <xsl:variable name="thisPage" select="@idref"/>
  47060.     <xsl:variable name="thisPageRenderOffset">
  47061.       <xsl:choose>
  47062.         <xsl:when test="../Pages/*[name() = $pageHeaderNodeName]"> <!-- $unpagedModeIncludesOnePageHeader=1" -->
  47063.           <xsl:value-of select="(($thisPage - 1) * $thisReportPageHeight) + (sum(/Reports/VFP-Report[position() < $thisReport]/VFP-RDL/VFPDataSet/VFPFRXLayoutObject[bandlabel='Page Header'][1]/height)div $FRUs)  + $thisPageHeaderHeight "/>
  47064.         </xsl:when>
  47065.         <xsl:otherwise>
  47066.           <xsl:value-of select="(($thisPage - 1) * $thisReportPageHeight) -($thisPageHeaderHeight*$thisPage)  "/>
  47067.         </xsl:otherwise>
  47068.       </xsl:choose>
  47069.     </xsl:variable>
  47070.     <xsl:call-template name="addAnchor"/>
  47071.     <xsl:for-each select="./*">
  47072.       <xsl:variable name="thisID" select="translate(@id,'+','')"/>
  47073.       <xsl:call-template name="Render">
  47074.         <xsl:with-param name="thisID" select="$thisID"/>
  47075.         <xsl:with-param name="thisZ" select="position()"/>
  47076.         <xsl:with-param name="thisPage" select="../@idref"/>
  47077.         <xsl:with-param name="thisReport" select="$thisReport"/>
  47078.         <xsl:with-param name="thisReportID" select="$thisReportID"/>
  47079.         <xsl:with-param name="topOffset" select="number($thisPageRenderOffset) * $printDPI"/>
  47080.       </xsl:call-template>
  47081.     </xsl:for-each>
  47082.   </xsl:template>
  47083.   <xsl:template match="/Reports/VFP-Report/Data/*" mode="band">
  47084.     <xsl:param name="thisReport" select="1"/>
  47085.     <xsl:param name="thisReportID"/>
  47086.     <xsl:call-template name="addAnchor"/>
  47087.     <xsl:for-each select="./*">
  47088.       <xsl:variable name="thisID" select="translate(@id,'+','')"/>
  47089.       <!--        <xsl:if test="key('Layout',concat($thisID, $thisReportID))/vpos > key('Layout',preceding-sibling::*/concat(@id,$thisReportID))/vpos"><div style="position=absolute;"/></xsl:if>  -->
  47090.       <xsl:call-template name="Render">
  47091.         <xsl:with-param name="thisID" select="$thisID"/>
  47092.         <xsl:with-param name="thisZ" select="position()"/>
  47093.         <xsl:with-param name="thisPage" select="../@idref"/>
  47094.         <xsl:with-param name="thisReport" select="$thisReport"/>
  47095.         <xsl:with-param name="thisReportID" select="$thisReportID"/>
  47096.       </xsl:call-template>
  47097.     </xsl:for-each>
  47098.   </xsl:template>
  47099.   <xsl:template name="Render">
  47100.     <xsl:param name="thisID"/>
  47101.     <xsl:param name="thisZ"/>
  47102.     <xsl:param name="thisPage"/>
  47103.     <xsl:param name="thisReport" select="1"/>
  47104.     <xsl:param name="thisReportID" select="1"/>
  47105.     <xsl:param name="topOffset" select="0"/>
  47106.     <xsl:call-template name="addAnchor"/>
  47107.     <xsl:choose>
  47108.       <xsl:when test="name()=$lineNodeName and key('Layout',concat($thisID, $thisReportID))/height <  key('Layout',concat($thisID, $thisReportID))/width">
  47109.         <hr>
  47110.           <xsl:call-template name="addClassAttribute">
  47111.              <xsl:with-param name="default" select="concat('FRX',$thisReport,'_',$thisID)"/>
  47112.         </xsl:call-template>
  47113.         <xsl:call-template name="addTitleAttribute"/>
  47114.           <xsl:call-template name="addStyleAttribute">
  47115.             <xsl:with-param name="topOffset" select="$topOffset"/>
  47116.             <xsl:with-param name="thisZ" select="$thisZ"/>
  47117.             <xsl:with-param name="thisReportID" select="$thisReportID"/>
  47118.            <xsl:with-param name="thisID" select="$thisID"/>
  47119.            <xsl:with-param name="styleType" select="'HR'"/>
  47120.           </xsl:call-template>
  47121.         </hr>
  47122.       </xsl:when>
  47123.       <xsl:when test="name()=$lineNodeName">
  47124.         <!-- vertical line -->
  47125.         <span>
  47126.           <xsl:call-template name="addClassAttribute">
  47127.             <xsl:with-param name="default" select="concat('FRX',$thisReport,'_',$thisID)"/> 
  47128.         </xsl:call-template>
  47129.           <xsl:call-template name="addTitleAttribute"/>
  47130.           <xsl:call-template name="addStyleAttribute">
  47131.             <xsl:with-param name="topOffset" select="$topOffset"/>
  47132.             <xsl:with-param name="thisZ" select="$thisZ"/>
  47133.             <xsl:with-param name="thisReportID" select="$thisReportID"/>
  47134.            <xsl:with-param name="thisID" select="$thisID"/>
  47135.               <xsl:with-param name="styleType" select="'VR'"/>
  47136.           </xsl:call-template>
  47137.         </span>
  47138.       </xsl:when>
  47139.       <xsl:when test="$useTextAreaForStretchingText=1 and string-length(@hlink) = 0  and name()=$fieldNodeName and key('Layout',concat($thisID, $thisReportID))[stretch='true']">
  47140.         <textarea readonly="readonly" rows="0" cols="0">
  47141.           <xsl:call-template name="addClassAttribute">
  47142.              <xsl:with-param name="default" select="concat('FRX',$thisReport,'_',$thisID)"/> 
  47143.         </xsl:call-template>
  47144.           <xsl:call-template name="addTitleAttribute"/>
  47145.           <xsl:call-template name="addStyleAttribute">
  47146.             <xsl:with-param name="topOffset" select="$topOffset"/>
  47147.             <xsl:with-param name="thisZ" select="$thisZ"/>
  47148.             <xsl:with-param name="thisReportID" select="$thisReportID"/>
  47149.           <xsl:with-param name="thisID" select="$thisID"/>
  47150.           <xsl:with-param name="styleType" select="'TextArea'"/>
  47151.           </xsl:call-template>
  47152.           <xsl:value-of select="."/>
  47153.         </textarea>
  47154.       </xsl:when>
  47155.       <xsl:otherwise>
  47156.         <div>
  47157.            <xsl:choose>
  47158.              <xsl:when test="@c=1">
  47159.                 <xsl:call-template name="addClassAttribute">
  47160.                    <xsl:with-param name="default" select="concat('FRX',$thisReport,'_',$thisID,'T')"/> 
  47161.                 </xsl:call-template>
  47162.              </xsl:when>
  47163.              <xsl:when test="@c=2">
  47164.                 <xsl:call-template name="addClassAttribute">
  47165.                    <xsl:with-param name="default" select="concat('FRX',$thisReport,'_',$thisID,'M')"/> 
  47166.                 </xsl:call-template>
  47167.              </xsl:when>
  47168.              <xsl:when test="@c=3">
  47169.                 <xsl:call-template name="addClassAttribute">
  47170.                    <xsl:with-param name="default" select="concat('FRX',$thisReport,'_',$thisID,'B')"/> 
  47171.                 </xsl:call-template>
  47172.              </xsl:when>
  47173.              <xsl:otherwise>
  47174.                 <xsl:call-template name="addClassAttribute">
  47175.                    <xsl:with-param name="default" select="concat('FRX',$thisReport,'_',$thisID)"/> 
  47176.                 </xsl:call-template>
  47177.              </xsl:otherwise>
  47178.            </xsl:choose>
  47179.           <xsl:call-template name="addTitleAttribute"/>
  47180.           <xsl:call-template name="addStyleAttribute">
  47181.             <xsl:with-param name="topOffset" select="$topOffset"/>
  47182.             <xsl:with-param name="thisZ" select="$thisZ"/>
  47183.             <xsl:with-param name="thisReportID" select="$thisReportID"/>
  47184.           <xsl:with-param name="thisID" select="$thisID"/>
  47185.           <xsl:with-param name="styleType" select="'Div'"/>
  47186.           </xsl:call-template>
  47187.           <xsl:choose>
  47188.             <xsl:when test="name()=$shapeNodeName or name()=$lineNodeName">
  47189.               <!-- nothing -->
  47190.             </xsl:when>
  47191.             <xsl:when test="name()=$pictureNodeName and string-length(@hlink) > 0">
  47192.               <a href="{@hlink}">
  47193.                 <xsl:call-template name="renderPicture">
  47194.             <xsl:with-param name="thisReportID" select="$thisReportID"/>
  47195.             <xsl:with-param name="thisID" select="$thisID"/>
  47196.                 </xsl:call-template>
  47197.               </a>
  47198.             </xsl:when>
  47199.             <xsl:when test="name()=$pictureNodeName and string-length(@PLINK) > 0">
  47200.               <a href="{translate(@PLINK,'\','/')}"  target="blank">
  47201.                 <xsl:call-template name="renderPicture">
  47202.             <xsl:with-param name="thisReportID" select="$thisReportID"/>
  47203.             <xsl:with-param name="thisID" select="$thisID"/>
  47204.                 </xsl:call-template>
  47205.               </a>
  47206.             </xsl:when>
  47207.             <xsl:when test="name()=$pictureNodeName">
  47208.               <xsl:call-template name="renderPicture">
  47209.             <xsl:with-param name="thisReportID" select="$thisReportID"/>
  47210.             <xsl:with-param name="thisID" select="$thisID"/>
  47211.               </xsl:call-template>
  47212.             </xsl:when>
  47213.             <xsl:when test="string-length(@hlink) > 0">
  47214.               <a href="{@hlink}">
  47215.                 <xsl:call-template name="replaceText"/>
  47216.               </a>
  47217.             </xsl:when>
  47218.             <xsl:when test="string-length(@PLINK) > 0">
  47219.               <a href="{translate(@PLINK,'\','/')}" target="blank">
  47220.                 <xsl:call-template name="replaceText"/>
  47221.               </a>
  47222.             </xsl:when>
  47223.             <xsl:otherwise>
  47224.               <xsl:call-template name="replaceText"/>
  47225.             </xsl:otherwise>
  47226.           </xsl:choose>
  47227.         </div>
  47228.       </xsl:otherwise>
  47229.     </xsl:choose>
  47230.     <!-- /xsl:if -->
  47231.   </xsl:template>
  47232.   <xsl:template name="getCSSName">
  47233.   <xsl:param name="thisReport" select="1"/>
  47234.   <xsl:param name="thisItem" select="0"/>
  47235.   <xsl:param name="itemType" select="''"/>
  47236.   <xsl:param name="firstPass" select="1"/>
  47237.   <xsl:variable name="subst" select="/Reports/VFP-Report[$thisReport]/Data/*/*[@id=$thisItem]/@css"/>
  47238.     <xsl:choose>
  47239.      <xsl:when test="number($firstPass)=1 or string-length($subst) = 0"><xsl:value-of select="concat('.FRX',$thisReport,'_',$thisItem,$itemType)"/></xsl:when>
  47240.      <xsl:otherwise>.<xsl:value-of select="$subst"/></xsl:otherwise>
  47241.      </xsl:choose>
  47242.   </xsl:template>
  47243.   <xsl:template match="VFPFRXLayoutObject" mode="imagestyles">
  47244.     <xsl:param name="thisReport" select="1"/>
  47245.     <xsl:param name="firstPass" select="1"/>
  47246.      <xsl:call-template name="getCSSName">
  47247.      <xsl:with-param name="thisReport" select="$thisReport"/>
  47248.      <xsl:with-param name="thisItem" select="frxrecno"/>
  47249.      <xsl:with-param name="firstPass" select="$firstPass"/>
  47250.      </xsl:call-template>{
  47251.   position: absolute;overflow: hidden;width: <xsl:call-template name="setPrecision"><xsl:with-param name="theNumber" select="width div $FRUs"/></xsl:call-template>in;height: <xsl:call-template name="setPrecision"><xsl:with-param name="theNumber" select="height div $FRUs"/></xsl:call-template>in;
  47252.   <!-- <xsl:if test="offset=0">
  47253. left: <xsl:value-of select="hpos div $FRUs"/>in; 
  47254. </xsl:if>
  47255. <xsl:if test="offset=2">
  47256. left: <xsl:value-of select="hpos div $FRUs"/>in; 
  47257. </xsl:if> -->
  47258.  </xsl:template>
  47259.   <xsl:template match="VFPFRXLayoutObject" mode="shapestyles">
  47260.    <xsl:param name="thisReport" select="1"/>
  47261.    <xsl:param name="firstPass" select="1"/>
  47262.      <xsl:call-template name="getCSSName">
  47263.      <xsl:with-param name="thisReport" select="$thisReport"/>
  47264.      <xsl:with-param name="thisItem" select="frxrecno"/>
  47265.      <xsl:with-param name="firstPass" select="$firstPass"/>
  47266.      </xsl:call-template>{
  47267.        position: absolute ;font-size:1pt; border: <xsl:value-of select="pensize"/>px <xsl:call-template name="pattern"/><xsl:call-template name="pencolor"/>;<xsl:if test="(mode=0 and not(fillpat=0)) or (mode=1 and fillpat=1)">background-color:<xsl:call-template name="fillcolor"/>;</xsl:if>width: <xsl:call-template name="setPrecision"> <xsl:with-param name="theNumber" select="width div $FRUs"/></xsl:call-template>in;left: <xsl:call-template name="setPrecision"><xsl:with-param name="theNumber" select="hpos div $FRUs"/></xsl:call-template>in;
  47268.       }
  47269.       <!--    <xsl:if test="stretch='true'">
  47270. overflow: auto;
  47271.    </xsl:if> -->
  47272.   </xsl:template>
  47273.   <xsl:template match="VFPFRXLayoutObject" mode="shapestylesT">
  47274.     <xsl:param name="thisReport" select="1"/>
  47275.    <xsl:param name="firstPass" select="1"/>
  47276.      <xsl:call-template name="getCSSName">
  47277.      <xsl:with-param name="thisReport" select="$thisReport"/>
  47278.      <xsl:with-param name="thisItem" select="frxrecno"/>
  47279.      <xsl:with-param name="itemType" select="'T'"/>
  47280.      <xsl:with-param name="firstPass" select="$firstPass"/>
  47281.      </xsl:call-template>{
  47282.    position: absolute ;font-size:1pt; border-left: <xsl:value-of select="pensize"/>px <xsl:call-template name="pattern"/><xsl:call-template name="pencolor"/>;border-right: <xsl:value-of select="pensize"/>px <xsl:call-template name="pattern"/><xsl:call-template name="pencolor"/>;border-top: <xsl:value-of select="pensize"/>px <xsl:call-template name="pattern"/><xsl:call-template name="pencolor"/>;<xsl:if test="(mode=0 and not(fillpat=0)) or (mode=1 and fillpat=1)">background-color:<xsl:call-template name="fillcolor"/>;</xsl:if>width: <xsl:call-template name="setPrecision"> <xsl:with-param name="theNumber" select="width div $FRUs"/></xsl:call-template>in;left: <xsl:call-template name="setPrecision"><xsl:with-param name="theNumber" select="hpos div $FRUs"/></xsl:call-template>in;
  47283.       }
  47284.       <!--    <xsl:if test="stretch='true'">
  47285. overflow: auto;
  47286.    </xsl:if> -->
  47287.   </xsl:template>
  47288.   <xsl:template match="VFPFRXLayoutObject" mode="shapestylesM">
  47289.     <xsl:param name="thisReport" select="1"/>
  47290.    <xsl:param name="firstPass" select="1"/>
  47291.      <xsl:call-template name="getCSSName">
  47292.      <xsl:with-param name="thisReport" select="$thisReport"/>
  47293.      <xsl:with-param name="thisItem" select="frxrecno"/>
  47294.      <xsl:with-param name="itemType" select="'M'"/>
  47295.      <xsl:with-param name="firstPass" select="$firstPass"/>
  47296.      </xsl:call-template>{
  47297.    position: absolute ;font-size:1pt; border-left: <xsl:value-of select="pensize"/>px <xsl:call-template name="pattern"/><xsl:call-template name="pencolor"/>;border-right: <xsl:value-of select="pensize"/>px <xsl:call-template name="pattern"/><xsl:call-template name="pencolor"/>;<xsl:if test="(mode=0 and not(fillpat=0)) or (mode=1 and fillpat=1)">background-color:<xsl:call-template name="fillcolor"/>;</xsl:if>width: <xsl:call-template name="setPrecision"> <xsl:with-param name="theNumber" select="width div $FRUs"/></xsl:call-template>in;left: <xsl:call-template name="setPrecision"><xsl:with-param name="theNumber" select="hpos div $FRUs"/></xsl:call-template>in;
  47298.       }
  47299.       <!--    <xsl:if test="stretch='true'">
  47300. overflow: auto;
  47301.    </xsl:if> -->
  47302.   </xsl:template>
  47303.   <xsl:template match="VFPFRXLayoutObject" mode="shapestylesB">
  47304.     <xsl:param name="thisReport" select="1"/>
  47305.    <xsl:param name="firstPass" select="1"/>
  47306.      <xsl:call-template name="getCSSName">
  47307.      <xsl:with-param name="thisReport" select="$thisReport"/>
  47308.      <xsl:with-param name="thisItem" select="frxrecno"/>
  47309.      <xsl:with-param name="itemType" select="'B'"/>
  47310.      <xsl:with-param name="firstPass" select="$firstPass"/>
  47311.      </xsl:call-template>{
  47312.    position: absolute ;font-size:1pt; border-left: <xsl:value-of select="pensize"/>px <xsl:call-template name="pattern"/><xsl:call-template name="pencolor"/>;border-right: <xsl:value-of select="pensize"/>px <xsl:call-template name="pattern"/><xsl:call-template name="pencolor"/>;border-bottom: <xsl:value-of select="pensize"/>px <xsl:call-template name="pattern"/><xsl:call-template name="pencolor"/>;<xsl:if test="(mode=0 and not(fillpat=0)) or (mode=1 and fillpat=1)">background-color:<xsl:call-template name="fillcolor"/>;</xsl:if>width: <xsl:call-template name="setPrecision"> <xsl:with-param name="theNumber" select="width div $FRUs"/></xsl:call-template>in;left: <xsl:call-template name="setPrecision"><xsl:with-param name="theNumber" select="hpos div $FRUs"/></xsl:call-template>in;
  47313.       }
  47314.       <!--    <xsl:if test="stretch='true'">
  47315. overflow: auto;
  47316.    </xsl:if> -->
  47317.   </xsl:template>
  47318.   <xsl:template match="VFPFRXLayoutObject" mode="textstyles">
  47319.     <xsl:param name="thisReport" select="1"/>
  47320.     <xsl:param name="firstPass" select="1"/>
  47321.      <xsl:call-template name="getCSSName">
  47322.      <xsl:with-param name="thisReport" select="$thisReport"/>
  47323.      <xsl:with-param name="thisItem" select="frxrecno"/>
  47324.      <xsl:with-param name="firstPass" select="$firstPass"/>
  47325.      </xsl:call-template>{
  47326.   <xsl:call-template name="getTextAlignment"/>vertical-align: top; font-family: "<xsl:value-of select="fontface"/>"; font-size: <xsl:value-of select="fontsize"/>pt; border: 0px none; padding: 0px; margin: 0px;<xsl:call-template name="getFontAttributes"/>color:<xsl:call-template name="pencolor"/>;<xsl:choose>
  47327.       <xsl:when test="mode mod 2 = 1">background-color:transparent;</xsl:when>
  47328.       <xsl:otherwise>background-color: <xsl:call-template name="fillcolor"/>;</xsl:otherwise>
  47329.     </xsl:choose><xsl:choose>
  47330.       <xsl:when test="stretch='true' and objtype=8 and $useTextAreaForStretchingText=1 and $hideScrollbarsForTextAreas=1"> overflow:hidden;margin-top:4px;</xsl:when>
  47331.       <xsl:when test="stretch='true' and objtype=8 and $useTextAreaForStretchingText=1"> overflow: auto;margin-top:4px;</xsl:when>
  47332.       <xsl:otherwise>overflow:hidden;</xsl:otherwise>
  47333.     </xsl:choose> position: absolute;
  47334.    }   
  47335.     <!-- tbd, make vertical-align more dynamic -->  
  47336.   </xsl:template>
  47337.   <xsl:template match="VFPFRXLayoutObject" mode="linestyles">
  47338.     <xsl:param name="thisReport" select="1"/>
  47339.    <xsl:param name="firstPass" select="1"/>
  47340.      <xsl:call-template name="getCSSName">
  47341.      <xsl:with-param name="thisReport" select="$thisReport"/>
  47342.      <xsl:with-param name="thisItem" select="frxrecno"/>
  47343.       <xsl:with-param name="firstPass" select="$firstPass"/>
  47344.      </xsl:call-template>{
  47345.    position:absolute;font-size:1pt;border: <xsl:value-of select="pensize"/>px <xsl:call-template name="pattern"/><xsl:call-template name="pencolor"/>;left: <xsl:value-of select="hpos div $FRUs"/>in;
  47346.       <xsl:choose>
  47347.       <xsl:when test="height < width"> width: <xsl:value-of select="width div $FRUs"/>in;
  47348.   height: <xsl:value-of select="floor(height div $FRUsInPixelsat96DPI)"/>px; margin: 0px;</xsl:when>
  47349.       <xsl:otherwise>  height: <xsl:value-of select="height div $FRUs"/>in;
  47350.   width: <xsl:value-of select="floor(width div $FRUsInPixelsat96DPI)"/>px;  </xsl:otherwise>
  47351.     </xsl:choose>
  47352.   </xsl:template>
  47353.   <xsl:template name="pattern">
  47354.     <xsl:choose>
  47355.       <xsl:when test="penpat=0"> none </xsl:when>
  47356.       <xsl:when test="penpat=1"> dotted </xsl:when>
  47357.       <xsl:when test="penpat=2"> dashed </xsl:when>
  47358.       <xsl:otherwise> solid </xsl:otherwise>
  47359.     </xsl:choose>
  47360.   </xsl:template>
  47361.   <xsl:template name="pencolor">#<xsl:call-template name="getHexColorValue">
  47362.       <xsl:with-param name="theNumber" select="penred"/>
  47363.     </xsl:call-template>
  47364.     <xsl:call-template name="getHexColorValue">
  47365.       <xsl:with-param name="theNumber" select="pengreen"/>
  47366.     </xsl:call-template>
  47367.     <xsl:call-template name="getHexColorValue">
  47368.       <xsl:with-param name="theNumber" select="penblue"/>
  47369.     </xsl:call-template>
  47370.   </xsl:template>
  47371.   <xsl:template name="fillcolor">#<xsl:call-template name="getHexColorValue">
  47372.       <xsl:with-param name="theNumber" select="fillred"/>
  47373.       <xsl:with-param name="fill" select="1"/>
  47374.     </xsl:call-template>
  47375.     <xsl:call-template name="getHexColorValue">
  47376.       <xsl:with-param name="theNumber" select="fillgreen"/>
  47377.       <xsl:with-param name="fill" select="1"/>
  47378.     </xsl:call-template>
  47379.     <xsl:call-template name="getHexColorValue">
  47380.       <xsl:with-param name="theNumber" select="fillblue"/>
  47381.       <xsl:with-param name="fill" select="1"/>
  47382.     </xsl:call-template>
  47383.   </xsl:template>
  47384.   <xsl:template name="getFontAttributes">
  47385.     <xsl:param name="theStyles" select="0"/>
  47386.     <xsl:choose>
  47387.       <xsl:when test="fontbold='true'">font-weight: bold;</xsl:when>
  47388.       <xsl:otherwise>font-weight: normal;</xsl:otherwise>
  47389.     </xsl:choose>
  47390.     <xsl:if test="fontstrikethrough='true' or fontunderline='true'">text-decoration: <xsl:if test="fontstrikethrough='true'">line-through </xsl:if>
  47391.       <xsl:if test="fontunderline='true'">underline</xsl:if>;</xsl:if>
  47392.     <xsl:if test="fontitalic='true'">font-style: italic;</xsl:if>
  47393.   </xsl:template>
  47394.   <xsl:template name="getHexColorValue">
  47395.     <xsl:param name="theNumber" select="-1"/>
  47396.     <xsl:param name="fill" select="0"/>
  47397.     <xsl:variable name="useNumber">
  47398.       <xsl:choose>
  47399.         <xsl:when test="$fill=1 and fillpat > 1 and ((fillred+fillblue+fillgreen) < $fillPatternShade)">
  47400.           <xsl:choose>
  47401.             <xsl:when test="($fillPatternOffset + $theNumber) > 254">255</xsl:when>
  47402.             <xsl:otherwise>
  47403.               <xsl:value-of select="$fillPatternOffset + $theNumber"/>
  47404.             </xsl:otherwise>
  47405.           </xsl:choose>
  47406.         </xsl:when>
  47407.         <xsl:otherwise>
  47408.           <xsl:value-of select="$theNumber"/>
  47409.         </xsl:otherwise>
  47410.       </xsl:choose>
  47411.     </xsl:variable>
  47412.     <xsl:choose>
  47413.       <xsl:when test="$useNumber=-1 and $fill=1">FF</xsl:when>
  47414.       <xsl:when test="$useNumber=-1">00</xsl:when>
  47415.       <xsl:otherwise>
  47416.         <xsl:call-template name="getHexForNumber">
  47417.           <xsl:with-param name="theNumber" select="floor($useNumber div 16)"/>
  47418.         </xsl:call-template>
  47419.         <xsl:call-template name="getHexForNumber">
  47420.           <xsl:with-param name="theNumber" select="round($useNumber mod 16)"/>
  47421.         </xsl:call-template>
  47422.       </xsl:otherwise>
  47423.     </xsl:choose>
  47424.   </xsl:template>
  47425.   <xsl:template name="setPrecision">
  47426.     <xsl:param name="theNumber" select="-1"/>
  47427.     <xsl:choose>
  47428.       <xsl:when test="$numberPrecision = -1 or not(contains(string($theNumber),'.'))">
  47429.         <xsl:value-of select="$theNumber"/>
  47430.       </xsl:when>
  47431.       <xsl:when test="$numberPrecision > 0">
  47432.         <!--        <xsl:value-of select="concat(string(floor($theNumber)),'.',substring(substring-after(string($theNumber),'.'),1,$numberPrecision))"/>  -->
  47433.         <xsl:value-of select="format-number($theNumber,concat('##0.',$zeros))"/>
  47434.       </xsl:when>
  47435.       <xsl:when test="$numberPrecision=0">
  47436.         <xsl:value-of select="round($theNumber)"/>
  47437.       </xsl:when>
  47438.       <xsl:otherwise>
  47439.         <!-- shouldn't happen-->
  47440.         <xsl:value-of select="$theNumber"/>
  47441.       </xsl:otherwise>
  47442.     </xsl:choose>
  47443.   </xsl:template>
  47444.   <xsl:template name="getHexForNumber">
  47445.     <xsl:param name="theNumber" select="-1"/>
  47446.     <xsl:choose>
  47447.       <xsl:when test="$theNumber=-1">00</xsl:when>
  47448.       <xsl:when test="$theNumber < 10">
  47449.         <xsl:value-of select="$theNumber"/>
  47450.       </xsl:when>
  47451.       <xsl:when test="$theNumber = 10">A</xsl:when>
  47452.       <xsl:when test="$theNumber = 11">B</xsl:when>
  47453.       <xsl:when test="$theNumber = 12">C</xsl:when>
  47454.       <xsl:when test="$theNumber = 13">D</xsl:when>
  47455.       <xsl:when test="$theNumber = 14">E</xsl:when>
  47456.       <xsl:when test="$theNumber = 15">F</xsl:when>
  47457.     </xsl:choose>
  47458.   </xsl:template>
  47459.   <xsl:template name="getTextAlignment">text-align:<xsl:choose>
  47460.       <xsl:when test="objtype=5"><!-- picture field empty for left (default), @I for centered and @J right -->
  47461.         <xsl:choose>
  47462.           <xsl:when test="string-length(picture) = 0">left;</xsl:when>
  47463.           <xsl:when test="contains(picture,'@J')">right;</xsl:when>
  47464.           <xsl:otherwise>center;</xsl:otherwise>
  47465.         </xsl:choose>
  47466.       </xsl:when>
  47467.       <xsl:otherwise>
  47468.         <xsl:choose>
  47469.           <xsl:when test="offset=0">left;</xsl:when>
  47470.           <xsl:when test="offset=1">right;</xsl:when>
  47471.           <xsl:otherwise>center;</xsl:otherwise>
  47472.         </xsl:choose>
  47473.       </xsl:otherwise>
  47474.     </xsl:choose>
  47475.     <!-- don't include direction at all if you want context -->
  47476.     <xsl:if test="mode < 4">direction:<xsl:choose>
  47477.         <xsl:when test="mode > 1">rtl;</xsl:when>
  47478.         <xsl:otherwise>ltr;</xsl:otherwise>
  47479.       </xsl:choose>
  47480.     </xsl:if>
  47481.   </xsl:template>
  47482.   <xsl:template name="ExternalStyleSheets">
  47483.     <xsl:param name="thisReportNode" select="/Reports/VFP-Report[1]"/>
  47484.     <xsl:param name="thisReportID" select="'this report'"/>
  47485.    <xsl:if test="count($thisReportNode/Run/property[@id='css_sheet']) > 0">
  47486.    <xsl:comment>
  47487.    External stylesheet(s) for <xsl:value-of select="$thisReportID"/>
  47488.    </xsl:comment>
  47489.    <xsl:for-each select="$thisReportNode/Run/property[@id='css_sheet']">
  47490.       <link type="text/css" href="{./text()}" rel="stylesheet"/>
  47491.    </xsl:for-each>
  47492.    </xsl:if>   
  47493.   </xsl:template>
  47494.   <xsl:template name="DocumentStyles">
  47495.   <xsl:comment>Global document styles, if any</xsl:comment>
  47496.     <style type="text/css">
  47497.      <xsl:comment><xsl:if test="/Reports/VFP-Report[1]/VFP-RDL/VFPDataSet/VFPFRXLayoutObject[objtype=1 and (fontcharset=177 or fontcharset=178)]">
  47498.      <xsl:if test="number($noBody)!=1">html{direction:rtl;} 
  47499.      body{direction:rtl;}</xsl:if>
  47500.      div{direction:rtl;} 
  47501.      span{direction:rtl;}
  47502.      </xsl:if>
  47503.      </xsl:comment>
  47504.     </style>
  47505.   </xsl:template>
  47506.   <xsl:template name="Styles">
  47507.     <xsl:param name="thisReport" select="1"/>
  47508.     <xsl:param name="thisReportID"/>
  47509.     <xsl:comment>
  47510.     Styles for report # <xsl:value-of select="$thisReport"/>  in this run, 
  47511.     <xsl:value-of select="$thisReportID"/>
  47512.     </xsl:comment>
  47513.     <style type="text/css">
  47514.       <xsl:comment>
  47515.         <xsl:apply-templates select="./VFP-RDL/VFPDataSet/VFPFRXLayoutObject[objtype=6]" mode="linestyles">
  47516.           <xsl:with-param name="thisReport" select="$thisReport"/>
  47517.         </xsl:apply-templates>
  47518.       
  47519.       <xsl:for-each select="./VFP-RDL/VFPDataSet/VFPFRXLayoutObject[objtype=6]">
  47520.         <xsl:variable name="frxrecno" select="frxrecno"/>
  47521.         <xsl:if test="/Reports/VFP-Report[$thisReport]/Data/*/*[@id=$frxrecno]/@css">
  47522.               <xsl:apply-templates select="." mode="linestyles">
  47523.               <xsl:with-param name="thisReport" select="$thisReport"/>
  47524.                  <xsl:with-param name="firstPass" select="0"/>
  47525.               </xsl:apply-templates>
  47526.         </xsl:if>
  47527.       </xsl:for-each>
  47528.         
  47529.         <xsl:apply-templates select="./VFP-RDL/VFPDataSet/VFPFRXLayoutObject[objtype=7]" mode="shapestyles">
  47530.           <xsl:with-param name="thisReport" select="$thisReport"/>
  47531.         </xsl:apply-templates>
  47532.         <xsl:apply-templates select="./VFP-RDL/VFPDataSet/VFPFRXLayoutObject[objtype=7]" mode="shapestylesT">
  47533.           <xsl:with-param name="thisReport" select="$thisReport"/>
  47534.         </xsl:apply-templates>
  47535.         <xsl:apply-templates select="./VFP-RDL/VFPDataSet/VFPFRXLayoutObject[objtype=7]" mode="shapestylesM">
  47536.           <xsl:with-param name="thisReport" select="$thisReport"/>
  47537.         </xsl:apply-templates>
  47538.         <xsl:apply-templates select="./VFP-RDL/VFPDataSet/VFPFRXLayoutObject[objtype=7]" mode="shapestylesB">
  47539.           <xsl:with-param name="thisReport" select="$thisReport"/>
  47540.         </xsl:apply-templates>
  47541.       <xsl:for-each select="./VFP-RDL/VFPDataSet/VFPFRXLayoutObject[objtype=7]">
  47542.          <xsl:variable name="frxrecno" select="frxrecno"/>
  47543.         <xsl:if test="/Reports/VFP-Report[$thisReport]/Data/*/*[@id=$frxrecno]/@css">
  47544.               <xsl:apply-templates select="." mode="shapestyles">
  47545.                 <xsl:with-param name="thisReport" select="$thisReport"/>
  47546.                 <xsl:with-param name="firstPass" select="0"/>
  47547.               </xsl:apply-templates>
  47548.         </xsl:if>
  47549.       </xsl:for-each>
  47550.         <xsl:apply-templates select="./VFP-RDL/VFPDataSet/VFPFRXLayoutObject[contains('|5|8|',concat('|',./objtype,'|'))]" mode="textstyles">
  47551.           <xsl:with-param name="thisReport" select="$thisReport"/>
  47552.         </xsl:apply-templates>
  47553.       <xsl:for-each select="./VFP-RDL/VFPDataSet/VFPFRXLayoutObject[contains('|5|8|',concat('|',./objtype,'|'))]">
  47554.         <xsl:variable name="frxrecno" select="frxrecno"/>
  47555.         <xsl:if test="/Reports/VFP-Report[$thisReport]/Data/*/*[@id=$frxrecno]/@css">
  47556.               <xsl:apply-templates select="." mode="textstyles">
  47557.               <xsl:with-param name="thisReport" select="$thisReport"/>
  47558.                  <xsl:with-param name="firstPass" select="0"/>
  47559.               </xsl:apply-templates>
  47560.         </xsl:if>
  47561.       </xsl:for-each>
  47562.         
  47563.         <xsl:apply-templates select="./VFP-RDL/VFPDataSet/VFPFRXLayoutObject[objtype=17]" mode="imagestyles">
  47564.           <xsl:with-param name="thisReport" select="$thisReport"/>
  47565.         </xsl:apply-templates>
  47566.       <xsl:for-each select="./VFP-RDL/VFPDataSet/VFPFRXLayoutObject[objtype=17]">
  47567.         <xsl:variable name="frxrecno" select="frxrecno"/>
  47568.         <xsl:if test="/Reports/VFP-Report[$thisReport]/Data/*/*[@id=$frxrecno]/@css">
  47569.               <xsl:apply-templates select="." mode="imagestyles">
  47570.               <xsl:with-param name="thisReport" select="$thisReport"/>
  47571.                  <xsl:with-param name="firstPass" select="0"/>
  47572.               </xsl:apply-templates>
  47573.         </xsl:if>
  47574.       </xsl:for-each>
  47575.       </xsl:comment>
  47576.     </style>
  47577.    <xsl:call-template name="ExternalStyleSheets">
  47578.    <xsl:with-param name="thisReportNode" select="/Reports/VFP-Report[$thisReport]"/> 
  47579.    <xsl:with-param name="thisReportID" select="$thisReportID"/>
  47580.    </xsl:call-template>
  47581.   </xsl:template>
  47582.   <xsl:template name="replaceText">
  47583.     <xsl:choose>
  47584.       <xsl:when test="$useTextAreaForStretchingText=1">
  47585.         <xsl:value-of select="."/>
  47586.       </xsl:when>
  47587.       <xsl:otherwise>
  47588.         <xsl:call-template name="replaceWhiteSpace">
  47589.           <xsl:with-param name="string" select="."/>
  47590.         </xsl:call-template>
  47591.       </xsl:otherwise>
  47592.     </xsl:choose>
  47593.   </xsl:template>
  47594.   <xsl:template name="renderPicture">
  47595.   <xsl:param name="thisReportID"/>
  47596.   <xsl:param name="thisID"/>
  47597.     <img>
  47598.       <xsl:attribute name="alt"><xsl:choose><xsl:when test="@alt"><xsl:value-of select="@alt"/></xsl:when><xsl:otherwise><xsl:value-of select="key('Layout',concat($thisID, $thisReportID))/unpathedimg"/></xsl:otherwise></xsl:choose></xsl:attribute>
  47599.       <xsl:variable name="srcImage">
  47600.    <xsl:choose>
  47601.           <xsl:when test="@img and $externalFileLocation">
  47602.             <xsl:value-of select="translate(concat($externalFileLocation,@img),'\','/')"/>
  47603.           </xsl:when>
  47604.           <xsl:when test="@img and not(contains(./@img,':'))">
  47605.                <xsl:value-of select="translate(@img,'\','/')"/>
  47606.           </xsl:when>
  47607.           <xsl:when test="@img">
  47608.             <xsl:value-of select="concat('file://',translate(@img,'\','/'))"/>
  47609.           </xsl:when>
  47610.           <xsl:when test="$copyImageFiles = '1'">
  47611.             <xsl:value-of select="translate(concat($externalFileLocation,key('Layout',concat($thisID, $thisReportID))/unpathedimg),'\','/')"/>
  47612.           </xsl:when>
  47613.           <xsl:when test="string-length(./text()) > 0 and not(contains(./text(),':')) ">
  47614.             <xsl:value-of select="translate(./text(),'\','/')"/>
  47615.           </xsl:when>
  47616.           <xsl:when test="string-length(./text()) > 0">
  47617.             <xsl:value-of select="concat('file://',translate(./text(),'\','/'))"/>
  47618.           </xsl:when>
  47619.           <xsl:otherwise>
  47620.             <xsl:value-of select="concat('file://',translate(key('Layout',concat($thisID, $thisReportID))/pathedimg,'\','/'))"/>
  47621.           </xsl:otherwise>
  47622.         </xsl:choose>
  47623.       </xsl:variable>
  47624.       <xsl:attribute name="src"><xsl:value-of select="$srcImage"/></xsl:attribute>
  47625.       <xsl:attribute name="style"><xsl:variable name="imgGeneral" select="key('Layout',concat($thisID, $thisReportID))"/><xsl:choose><xsl:when test="$imgGeneral/general='0' "><!-- clip top, right, bottom, left -->
  47626.  clip: rect(0in,<xsl:call-template name="setPrecision"><xsl:with-param name="theNumber" select="@w div $printDPI"/></xsl:call-template>in,<xsl:value-of select="@h div $printDPI"/>in,0in);
  47627.  </xsl:when><xsl:when test="$imgGeneral/general='1'"><!-- scale and retain --><xsl:choose><xsl:when test="@h > @w">
  47628.  width:100%;
  47629.  </xsl:when><xsl:otherwise>
  47630.  height:100%;
  47631.  </xsl:otherwise></xsl:choose></xsl:when><xsl:otherwise><!-- stretch to fill frame -->
  47632.  height: <xsl:call-template name="setPrecision"><xsl:with-param name="theNumber" select="@h div $printDPI"/></xsl:call-template>in;    
  47633. width: <xsl:call-template name="setPrecision"><xsl:with-param name="theNumber" select="@w div $printDPI"/></xsl:call-template>in;    
  47634.  </xsl:otherwise></xsl:choose></xsl:attribute>
  47635.     </img>
  47636.   </xsl:template>
  47637.   <xsl:template name="addClassAttribute">
  47638.   <xsl:param name="item" select="."/>
  47639.   <xsl:param name="default" select="''"/>
  47640.   <xsl:attribute name="class"><xsl:choose>
  47641.   <xsl:when test="string-length($item/@CSS) > 0">
  47642.   <xsl:value-of select="$item/@CSS"/>
  47643.   </xsl:when>
  47644.   <xsl:when test="string-length($item/@css) = 0">
  47645.   <xsl:value-of select="$default"/>
  47646.   </xsl:when>
  47647.   <xsl:otherwise>
  47648.   <xsl:value-of select="$item/@css"/>
  47649.   </xsl:otherwise>
  47650.   </xsl:choose></xsl:attribute>
  47651.   </xsl:template>
  47652.   <xsl:template name="addTitleAttribute">
  47653.     <xsl:param name="item" select="."/>
  47654.     <xsl:if test="string-length($item/@title) > 0">
  47655.       <xsl:attribute name="title"><xsl:value-of select="$item/@title"/></xsl:attribute>
  47656.     </xsl:if>
  47657.   </xsl:template>
  47658.   <xsl:template name="addAnchor">
  47659.     <xsl:param name="item" select="."/>
  47660.     <xsl:if test="string-length($item/@anchor) > 0">
  47661.       <a>
  47662.      <xsl:attribute name="{$anchorAttr}"><xsl:value-of select="$item/@anchor"/></xsl:attribute> 
  47663.         <xsl:text disable-output-escaping="yes">&nbsp;</xsl:text>
  47664.       </a>
  47665.     </xsl:if>
  47666.   </xsl:template>
  47667.   <xsl:template name="addStyleAttribute">
  47668.     <xsl:param name="topOffset" select="0"/>
  47669.     <xsl:param name="thisZ" select="1"/>
  47670.     <xsl:param name="thisReportID"/>
  47671.     <xsl:param name="thisID"/>
  47672.     <xsl:param name="styleType" select="'Div'"/>
  47673. <!-- do NOT mess around with the white space in here, even though it 
  47674. looks ugly the way it is!! -->
  47675. <xsl:attribute name="style">z-Index:<xsl:value-of select="$thisZ"/>;left:<xsl:call-template name="setPrecision"><xsl:with-param name="theNumber" select="@l div $printDPI"/></xsl:call-template>in;
  47676. top:<xsl:choose>
  47677.   <xsl:when test="styleType='TextArea'"><xsl:call-template name="setPrecision"><xsl:with-param name="theNumber" select="((@t  + $topOffset) div $printDPI) - .1"/></xsl:call-template></xsl:when>
  47678.   <xsl:otherwise><xsl:call-template name="setPrecision"><xsl:with-param name="theNumber" select="(@t +$topOffset) div $printDPI"/></xsl:call-template></xsl:otherwise>
  47679. </xsl:choose>in;<xsl:choose>
  47680.   <xsl:when test="$styleType='VR'">width:0in;</xsl:when>
  47681.   <xsl:when test="$styleType='TextArea'">width:<xsl:call-template name="setPrecision"><xsl:with-param name="theNumber" select="@w div $printDPI"/></xsl:call-template>in;</xsl:when>
  47682. <xsl:when test="$styleType='Div'">width:<xsl:call-template name="setPrecision"><xsl:with-param name="theNumber" select="@w div $printDPI"/></xsl:call-template>in;height:<xsl:call-template name="setPrecision"><xsl:with-param name="theNumber" select="@h div $printDPI"/></xsl:call-template>in;</xsl:when></xsl:choose><xsl:if test="not($styleType='Div')">height:<xsl:call-template name="setPrecision"><xsl:with-param name="theNumber" select="@h div $printDPI"/></xsl:call-template>in;</xsl:if>
  47683. <xsl:if test="$useDynamicTextAttributes=1 and key('Layout',concat($thisID,$thisReportID))[objtype=5 or objtype=8]">
  47684. <xsl:call-template name="addDynamicTextStyleAttributes"/>
  47685. </xsl:if>
  47686. </xsl:attribute>
  47687.     </xsl:template>
  47688.     <xsl:template name="addDynamicTextStyleAttributes">
  47689.   <!-- dynamic values for font, omit these attributes if they don't appear on each object-->
  47690.   <xsl:if test="@FNAME">
  47691.     font-family:'<xsl:value-of select="@FNAME"/>';font-size:<xsl:value-of select="@FSIZE"/>pt;
  47692.     <xsl:if test="((@FSTYLE div 128) mod 2 = 1) or ( (@FSTYLE div 4) mod 2 = 1)">text-decoration:<xsl:if test="((@FSTYLE div 128) mod 2 = 1)">line-through</xsl:if><xsl:if test="( (@FSTYLE div 8) mod 2 = 1)">underline</xsl:if>;</xsl:if>
  47693.     font-weight:<xsl:choose><xsl:when test="@FSTYLE mod 2 = 1">bold</xsl:when><xsl:otherwise>normal</xsl:otherwise></xsl:choose>;
  47694.     font-style:<xsl:choose><xsl:when test="(@FSTYLE div 2) mod 2 =1">italic</xsl:when><xsl:otherwise>normal</xsl:otherwise></xsl:choose>;
  47695.    background-color:<xsl:call-template name="getAlphaColor">
  47696.    <xsl:with-param name="alpha" select="@FA"/>
  47697.    <xsl:with-param name="r" select="@FR"/>
  47698.    <xsl:with-param name="g" select="@FG"/>
  47699.    <xsl:with-param name="b" select="@FB"/>
  47700.    </xsl:call-template>;color:<xsl:call-template name="getAlphaColor"/>;
  47701.     </xsl:if>
  47702.     </xsl:template>
  47703.    <xsl:template name="getAlphaColor">
  47704.    <xsl:param name="alpha" select="@PA"/>
  47705.    <xsl:param name="r" select="@PR"/>
  47706.    <xsl:param name="g" select="@PG"/>
  47707.    <xsl:param name="b" select="@PB"/>
  47708.    <xsl:choose>
  47709.    <xsl:when test="$alpha=0">transparent</xsl:when>
  47710.    <xsl:when test="$alpha=255 or ($r+$g+$b > $fieldAlphaOpacityShade)"><xsl:value-of select="concat('rgb(',$r,',',$g,',',$b,')')"/></xsl:when>
  47711.    <xsl:otherwise><xsl:value-of select="concat('rgb(',$r+$fieldAlphaOpacityOffset,',',$g+$fieldAlphaOpacityOffset,',',$b+$fieldAlphaOpacityOffset,')')"/></xsl:otherwise>
  47712.    </xsl:choose>
  47713.    </xsl:template>
  47714.     <xsl:template name="replaceWhiteSpace">
  47715.     <xsl:param name="string" select="."/>
  47716.     <xsl:choose>
  47717.       <xsl:when test="contains($string,' ')">
  47718.         <xsl:call-template name="replaceWhiteSpace">
  47719.           <xsl:with-param name="string" select="substring-before($string, ' ')"/>
  47720.         </xsl:call-template>
  47721.         <br/>
  47722.         <xsl:call-template name="replaceWhiteSpace">
  47723.           <xsl:with-param name="string" select="substring-after($string, ' ')"/>
  47724.         </xsl:call-template>
  47725.       </xsl:when>
  47726.       <xsl:otherwise>
  47727.         <xsl:value-of select="$string"/>
  47728.       </xsl:otherwise>
  47729.     </xsl:choose>
  47730.   </xsl:template>
  47731.   <xsl:template name="Script">
  47732.     <script language="JavaScript">
  47733.       <xsl:comment>
  47734.      //TBD
  47735.       </xsl:comment>
  47736.     </script>
  47737.   </xsl:template>
  47738.   <xsl:template match="*|@*" mode="debug">
  47739.    <xsl:copy-of select="."/>
  47740.   </xsl:template> 
  47741. </xsl:stylesheet>
  47742. LCRESULTd
  47743. VNEWVAL
  47744. THIS    
  47745. ISRUNNING
  47746. VERIFYNCNAME
  47747. CSSCLASSATTR
  47748. SYNCHXSLTPROCESSORUSERd
  47749. VNEWVAL
  47750. THIS    
  47751. ISRUNNING
  47752. VERIFYNCNAME
  47753. ANCHORATTR
  47754. SYNCHXSLTPROCESSORUSERd
  47755. VNEWVAL
  47756. THIS    
  47757. ISRUNNING
  47758. VERIFYNCNAME    
  47759. TITLEATTR
  47760. SYNCHXSLTPROCESSORUSERd
  47761. VNEWVAL
  47762. THIS    
  47763. ISRUNNING
  47764. VERIFYNCNAME
  47765. LINKATTR
  47766. SYNCHXSLTPROCESSORUSERd
  47767. VNEWVAL
  47768. THIS    
  47769. ISRUNNING
  47770. VERIFYNCNAME
  47771. CSSCLASSOVERRIDEATTR
  47772. SYNCHXSLTPROCESSORUSER
  47773. ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
  47774. .?=&#
  47775. TCVALUE
  47776. TLENCODEURLCONTROLCHARS
  47777. TLENCODESPACE
  47778. LCRESULT
  47779. LCCHAR
  47780. LCOKCHARS
  47781. TCVAL
  47782. TLXMLENCODE
  47783. LCVAL    
  47784. LCTEMPVAL
  47785. LAVALS
  47786. LIINDEX
  47787. LISEPARATORS
  47788. URLSTRINGENCODE
  47789. XMLRAWCONVH
  47790. LOBJTYPEMODE
  47791. OFOXYPREVIEWER
  47792. COMMANDCLAUSES
  47793. LOPENVIEWER
  47794. PREVIEW
  47795. TOFILE
  47796. TARGETFILENAME    
  47797. CDESTFILE
  47798. LCDESTFILE
  47799. COUTPUTPATH
  47800. LCFILE
  47801. _REPORTLISTENER
  47802. CANCELREPORT    
  47803. QUIETMODE
  47804. LQUIETMODE
  47805. Microsoft.XMLDOM
  47806. Microsoft.XMLDOM
  47807. Microsoft.VFP.Reporting.Builder.AdvancedProperty
  47808. HTML.Metatag.HTTP-EQUIV
  47809. /VFPData/reportdata
  47810. [@name='
  47811. ' and @execwhen='
  47812. HTML.Metatag.HTTP-EQUIV
  47813. ']/@execute
  47814. //meta
  47815. content
  47816. HTML.Metatag.HTTP-EQUIV
  47817. HTML.Metatag.HTTP-EQUIV
  47818. RUNCOLLECTOR
  47819. SETFRXDATASESSION
  47820. MEMBERDATAALIAS
  47821. LVVALUE
  47822. LCEXPR
  47823. LISELECT
  47824. LOXML    
  47825. LOXMLTEMP
  47826. LONODE
  47827. FRXHEADERRECNO
  47828. LOADXML
  47829. STYLE
  47830. FRXRECNO
  47831. EXECWHEN
  47832. DECLASS
  47833. EXECUTE
  47834. SELECTSINGLENODE
  47835. SELECTNODES
  47836. GETATTRIBUTE
  47837. EVALUATEUSEREXPRESSION
  47838. GETKEY
  47839. FRXRecno
  47840. Microsoft.VFP.Reporting.Builder.AdvancedProperty
  47841. HTML.CSSClass.OverrideFRX
  47842. Microsoft.VFP.Reporting.Builder.AdvancedProperty
  47843. HTML.CSSClass.ExtendFRX
  47844. Microsoft.VFP.Reporting.Builder.AdvancedProperty
  47845. HTML.Link
  47846. Microsoft.VFP.Reporting.Builder.AdvancedProperty
  47847. HTML.Alt-Title
  47848. Microsoft.VFP.Reporting.Builder.AdvancedProperty
  47849. HTML.Anchor
  47850. TNLEFT
  47851. TNTOP
  47852. TNWIDTH
  47853. TNHEIGHT
  47854. TNOBJECTCONTINUATIONTYPE
  47855. LCINFO
  47856. LCVAL
  47857. LIRECNO
  47858. SETFRXDATASESSION
  47859. MEMBERDATAALIAS
  47860. FRXRECNO
  47861. EXECWHEN
  47862. DECLASS
  47863. EVALUATEUSEREXPRESSION
  47864. EXECUTE
  47865. CSSCLASSOVERRIDEATTR
  47866. CSSCLASSATTR
  47867. LINKATTR
  47868. PATHENCODE    
  47869. TITLEATTR
  47870. ANCHORATTR
  47871. @id='description'
  47872. @id='
  47873. Document.Description
  47874. @id='author'
  47875. @id='
  47876. Document.Author
  47877. @id='keywords'
  47878. @id='
  47879. Document.Keywords
  47880. @id='title'
  47881. @id='
  47882. Document.Title
  47883. @id='copyright'
  47884. @id='
  47885. Document.Copyright
  47886. @id='date'
  47887. @id='
  47888. Document.Date
  47889. @id='css_sheet'
  47890. @id='
  47891. HTML.CSSFile
  47892. @id='http-equiv'
  47893. @id='
  47894. HTML.Metatag.HTTP-EQUIV
  47895. @idref
  47896. @DTEXT
  47897. @DTYPE
  47898. @PLINK
  47899. @FNAME
  47900. @FSIZE
  47901. @FSTYLE
  47902. @title
  47903. @anchor
  47904. @hlink
  47905. LCRESULT
  47906. GETDEFAULTUSERXSLTASSTRING
  47907. HEIGHTATTR    
  47908. WIDTHATTR
  47909. LEFTATTR
  47910. TOPATTR
  47911. CONTATTR
  47912. IDREFATTRIBUTE
  47913. IDATTRIBUTE
  47914. IMAGESRCATTR
  47915. DATATEXTATTR
  47916. DATATYPEATTR
  47917. PAGEIMAGEATTR
  47918. PENALPHAATTR
  47919. PENREDATTR
  47920. PENGREENATTR
  47921. PENBLUEATTR
  47922. FILLALPHAATTR
  47923. FILLREDATTR
  47924. FILLGREENATTR
  47925. FILLBLUEATTR
  47926. FONTNAMEATTR
  47927. FONTSIZEATTR
  47928. FONTSTYLEATTR    
  47929. TITLEATTR
  47930. CSSCLASSATTR
  47931. CSSCLASSOVERRIDEATTR
  47932. ANCHORATTR
  47933. LINKATTR
  47934. XSLTPROCESSORUSERM
  47935. HTML Listener
  47936. APPNAME
  47937. HADERROR7
  47938. FRXRecno
  47939. Microsoft.VFP.Reporting.Builder.AdvancedProperty
  47940. HTML.CSSClass.OverrideFRX
  47941. Microsoft.VFP.Reporting.Builder.AdvancedProperty
  47942. HTML.CSSClass.ExtendFRX
  47943. Microsoft.VFP.Reporting.Builder.AdvancedProperty
  47944. HTML.Link
  47945. Microsoft.VFP.Reporting.Builder.AdvancedProperty
  47946. HTML.Alt-Title
  47947. Microsoft.VFP.Reporting.Builder.AdvancedProperty
  47948. HTML.Anchor
  47949. TONODE
  47950. TNLEFT
  47951. TNTOP
  47952. TNWIDTH
  47953. TNHEIGHT
  47954. TNOBJECTCONTINUATIONTYPE
  47955. LCVAL
  47956. LIRECNO
  47957. SETFRXDATASESSION
  47958. MEMBERDATAALIAS
  47959. FRXRECNO
  47960. EXECWHEN
  47961. DECLASS
  47962. EVALUATEUSEREXPRESSION
  47963. EXECUTE
  47964. SETATTRIBUTE
  47965. CSSCLASSOVERRIDEATTR
  47966. CSSCLASSATTR
  47967. LINKATTR
  47968. PATHENCODE    
  47969. TITLEATTR
  47970. ANCHORATTR
  47971. Microsoft.VFP.Reporting.Builder.AdvancedProperty
  47972. HTML.PrintablePageLink
  47973. Microsoft.VFP.Reporting.Builder.AdvancedProperty
  47974. HTML.TextAreasOff
  47975. useTextAreaForStretchingText
  47976. useTextAreaForStretchingText
  47977. useTextAreaForStretchingText
  47978. OLDPAGEIMAGETYPE
  47979. XMLMODE    
  47980. LLSETTING
  47981. LISELECT
  47982. SETFRXDATASESSION
  47983. MEMBERDATAALIAS
  47984. EXECWHEN
  47985. EVALUATESTRINGTOBOOLEAN
  47986. EXECUTE
  47987. PAGEIMAGETYPE
  47988. LISTENERTYPE
  47989. SUPPORTSPAGEIMAGES!
  47990. MAKEEXTERNALFILELOCATIONREACHABLE
  47991. ISSUCCESSOR
  47992. COMMANDCLAUSES
  47993. NOPAGEEJECT
  47994. XSLTPARAMETERS
  47995. GETKEY
  47996. OLDTEXTAREASETTING
  47997. ADJUSTXSLTPARAMETER
  47998. RESETDATASESSION
  47999. TLCALLEDEARLY
  48000. OLDPAGEIMAGETYPE
  48001. PAGEIMAGETYPE
  48002. RESETDATASESSION
  48003. LOBJTYPEMODE
  48004. LLSAVED
  48005. TARGETFILENAME
  48006. OFOXYPREVIEWER
  48007. LSAVED
  48008. LOPENVIEWER    
  48009. SHELLEXECh
  48010. useTextAreaForStretchingText
  48011. OLDTEXTAREASETTING
  48012. ADJUSTXSLTPARAMETER
  48013. UPDATEPROPERTIES
  48014. getdefaultuserxsltasstring,
  48015. cssclassattr_assign
  48016. anchorattr_assign6
  48017. titleattr_assign
  48018. linkattr_assign
  48019. cssclassoverrideattr_assignO
  48020. urlstringencode
  48021. pathencode
  48022. updateproperties
  48023. fillruncollector
  48024. getrawformattinginfo
  48025. getdefaultuserxslt
  48026. setdomformattinginfo
  48027. BeforeReport{
  48028. AfterReport
  48029. applyusertransformtooutput
  48030. LoadReport
  48031. Invalid parameter. Report listener not available
  48032. Error
  48033. The helper FRX table is not available. Output can't be created
  48034. Error
  48035. Datasessionv
  48036. <!DOCTYPE html><html><head><META http-equiv="Content-Type" content="text/html">
  48037. <title>
  48038. </title></head><body>
  48039. %  - 
  48040. 100%  - CCC
  48041. </body></html>
  48042. TOLISTENER
  48043. TCOUTPUTDBF
  48044. TNWIDTH
  48045. TNHEIGHT    
  48046. CFRXALIAS
  48047. LQUIETMODE2
  48048. LNSECS
  48049. DOFOXYTHERM
  48050. OFOXYPREVIEWER
  48051. _INITSTATUSTEXT
  48052. LNSELECT
  48053. LNORIGDATASESSION
  48054. LISTENERDATASESSION
  48055. LDEFAULTMODE
  48056. NPAGEHEIGHT
  48057. NSCREENDPI
  48058. NPAGEWIDTH
  48059. NOUTFILE
  48060. CTARGETFILENAME
  48061. CHTML
  48062. LNPGFROM
  48063. LNPGTO
  48064. COMMANDCLAUSES    
  48065. RANGEFROM
  48066. RANGETO
  48067. _GOFP
  48068. _CLAUSENRANGETO
  48069. RENDERHTML
  48070. FRXRECNO
  48071. WIDTH
  48072. HEIGHT
  48073. CONTTYPE
  48074. UNCONTENTS    
  48075. LNPERCENT
  48076. LNLASTPERCENT
  48077. LNDELAY    
  48078. LNTOTRECS
  48079. LNREC
  48080. _SECONDSTEXT
  48081. _RUNSTATUSTEXT
  48082. LLSAVED
  48083. LCFILE
  48084. APAGESIMGS
  48085. LOBJTYPEMODE
  48086. LSAVED
  48087. LOPENVIEWER    
  48088. SHELLEXEC)
  48089. FRX_OBJCOD_TITLE
  48090. FRX_OBJCOD_PAGEHEADER
  48091. FRX_OBJCOD_COLHEADER
  48092. FRX_OBJCOD_GROUPHEADER
  48093. FRX_OBJCOD_DETAIL
  48094. FRX_OBJCOD_GROUPFOOTER
  48095. FRX_OBJCOD_COLFOOTER
  48096. FRX_OBJCOD_PAGEFOOTER
  48097. FRX_OBJCOD_SUMMARY
  48098. FRX_OBJCOD_DETAILHEADER
  48099. FRX_OBJCOD_DETAILFOOTER
  48100. NBANDOBJCODE1
  48101. NFONTSTYLE
  48102. CSTYLE[
  48103. NGREEN
  48104. NBLUE
  48105. LISTENER_CONTINUATION_NONE
  48106. LISTENER_CONTINUATION_START
  48107. LISTENER_CONTINUATION_MIDDLE
  48108. LISTENER_CONTINUATION_END
  48109. NOBJECTCONTINUATIONTYPE
  48110. REPORTLISTENER
  48111. TEMP5
  48112. LOLISTENER
  48113. LNPAGE
  48114. COMMANDCLAUSES    
  48115. RANGEFROM
  48116. APAGESIMGS
  48117. LNDEVICETYPE
  48118. LCFILE
  48119. LNHANDLE
  48120. OUTPUTPAGE
  48121. TNWIDTH
  48122. TNHEIGHT
  48123. TCFILE
  48124. LCFILE
  48125. GETPAGEIMG
  48126. LNHOR
  48127. LNVERT    
  48128. LCNEWFILE    
  48129. CROPIMAGE
  48130. _IMAGES
  48131. _IMAGES
  48132. IMAGE
  48133. Image
  48134. <img src="
  48135. " width="
  48136. " height="
  48137. " alt="">
  48138. <span style="position:absolute;left:C
  48139. px;top:
  48140. clip: rect(0 
  48141. px 0);
  48142. </span>
  48143. IMAGE
  48144. Image
  48145. <img src="
  48146. " width="
  48147. " height="
  48148. " alt="">
  48149. <span style="position:absolute;left:C
  48150. px;top:
  48151. clip: rect(0 
  48152. px 0);
  48153. </span>
  48154. <img src="
  48155. " width="
  48156. " height="
  48157. " alt="">
  48158. <span style="position:absolute;left:C
  48159. px;top:
  48160. px;">
  48161. </span>
  48162. TNLEFT
  48163. TNTOP
  48164. TNWIDTH
  48165. TNHEIGHT
  48166. CCONTENTSTOBERENDERED
  48167. LCFILE
  48168. LCPATH
  48169. LCSHORTPATH
  48170. LCIMAGECOPY
  48171. LCPATHLOCATION
  48172. CTARGETFILENAME
  48173. CEXTERNALFILELOCATION
  48174. NIMGCOUNTER
  48175. GETPICTUREFROMLISTENER
  48176. PR_PATHFILEEXISTS
  48177. LCHTML    
  48178. LCIMGHTML
  48179. GENERAL
  48180. LNWIDTH
  48181. LNHEIGHT
  48182. LNPICTWIDTH
  48183. LNPICTHEIGHT
  48184. LOVFPIMG
  48185. PICTURE
  48186. WIDTH
  48187. HEIGHT
  48188. LNHORFACTOR
  48189. LNVERTFACTOR
  48190. LNRESIZEFACTOR
  48191. LNISOWIDTH
  48192. LNISOHEIGHTN
  48193. lcText = STRTRAN(lcOrigText, [&], [&]) 
  48194. lcText = STRTRAN(lcText, [<], [<])
  48195. lcText = STRTRAN(lcText, [>], [>])
  48196. text-align: left;
  48197. text-align: right;
  48198. text-align: center;
  48199. white-space:normal;
  48200. overflow:hidden ;
  48201. white-space:nowrap;
  48202. white-space:normal;
  48203. <span style="
  48204. position:absolute;left:
  48205. px;top:
  48206. width:
  48207. px;height:
  48208. background-color:
  48209. font-family:
  48210. font-size:
  48211. color:
  48212. </span>
  48213. TNLEFT
  48214. TNTOP
  48215. TNWIDTH
  48216. TNHEIGHT
  48217. CCONTENTSTOBERENDERED
  48218. LCHTML
  48219. LCTEXT
  48220. LCORIGTEXT
  48221. LCALIGN
  48222. OFFSET    
  48223. LCFILLHEX    
  48224. LCPRESPAN
  48225. LCPOSTSPAN    
  48226. LCFOREHEX    
  48227. LCPREFONT
  48228. LCPOSTFONT
  48229. FILLRED    
  48230. FILLGREEN
  48231. FILLBLUE
  48232. RGBTOHEX
  48233. PENRED
  48234. PENGREEN
  48235. PENBLUE
  48236. STRETCH
  48237. LCWWRAP
  48238. LNLINES
  48239. GETLINESCNT
  48240. FONTFACE
  48241. FONTSIZE    
  48242. FONTSTYLE
  48243. LCFONTSTYLE
  48244. LCPRESTYLE
  48245. LCPOSTSTYLE
  48246. GETFONTSTYLE(
  48247. <span style="position:absolute;left:C
  48248. px;top:
  48249. px;width:
  48250. height:
  48251. px;text-align: left;border:1px solid 
  48252. <font face="Arial" fontsize=10 color=#000000></font></span>
  48253. TNLEFT
  48254. TNTOP
  48255. TNWIDTH
  48256. TNHEIGHT
  48257. LCHTML
  48258. RGBTOHEX
  48259. PENRED
  48260. PENGREEN
  48261. PENBLUEZ
  48262. background-color:
  48263. border-left:C
  48264.  solid;
  48265. border-right:
  48266.  solid;
  48267. border-top:
  48268.  solid;
  48269. border-left:C
  48270.  solid;
  48271. border-right:
  48272.  solid;
  48273. border-left:C
  48274.  solid;
  48275. border-right:
  48276.  solid;
  48277. border-bottom:
  48278.  solid;
  48279. border:C
  48280.  solid;
  48281. <span style="position:absolute;left:C
  48282. px;top:
  48283. px;width:
  48284. height:
  48285. px;text-align: left;
  48286. </span>
  48287. TNLEFT
  48288. TNTOP
  48289. TNWIDTH
  48290. TNHEIGHT
  48291. TNOBJECTCONTINUATIONTYPE    
  48292. LCFILLHEX
  48293. FILLPAT
  48294. FILLRED    
  48295. FILLGREEN
  48296. FILLBLUE
  48297. RGBTOHEX
  48298. LCBORDERHEX
  48299. PENPAT
  48300. PENRED
  48301. PENGREEN
  48302. PENBLUE
  48303. PENSIZE
  48304. LCHTML3
  48305. GPRECTANGLE
  48306. \ffc\_Gdiplus.vcx
  48307. GPRectangle
  48308. _Gdiplus.vcx
  48309. GPFont
  48310. _Gdiplus.vcx
  48311. GPGRAPHICS
  48312. \ffc\_Gdiplus.vcx
  48313. GpGraphics
  48314. _Gdiplus.vcx
  48315. 333333
  48316. GPSIZE
  48317. \ffc\_Gdiplus.vcx
  48318. TCTEXT
  48319. TCFONTNAME
  48320. TNSIZE
  48321. TCSTYLE
  48322. TNLEFT
  48323. TNTOP
  48324. TNWIDTH
  48325. TNHEIGHT
  48326. LOFONT
  48327. LNCHARS
  48328. LNLINES
  48329. LNHEIGHT
  48330. LNWIDTH
  48331. LNFACTOR
  48332. LORECT
  48333. CREATE
  48334. LOGFX
  48335. CREATEFROMHWND
  48336. PAGEUNIT    
  48337. PAGESCALE
  48338. LOSIZE
  48339. MEASURESTRINGA    
  48340. GDIPRECTF
  48341. STRING
  48342. INTEGER
  48343. INTEGER
  48344. GPBITMAP
  48345. ffc\_gdiplus.vcx
  48346. GpBitmap
  48347. _GdiPlus.vcx
  48348. GdipCloneBitmapAreaI
  48349. GDIPLUS.DLLQ
  48350. pdfxGdipCloneBitmapAreaI
  48351. GPBITMAP
  48352. ffc\_gdiplus.vcx
  48353. GpBitmap
  48354. _GdiPlus.vcx
  48355. image/png
  48356. image/jpeg6
  48357. LCFILE
  48358. LNWIDTH
  48359. LNHEIGHT    
  48360. TCNEWFILE
  48361. _CTEMPFOLDER
  48362. LCEXT
  48363. LOBMP
  48364. CREATEFROMFILE
  48365. IMAGEHEIGHT
  48366. IMAGEWIDTH
  48367. LHBITMAP
  48368. LNSTATUS
  48369. GDIPCLONEBITMAPAREAI
  48370. GDIPLUS
  48371. PDFXGDIPCLONEBITMAPAREAI
  48372. PIXELFORMAT    
  48373. GETHANDLE    
  48374. LOCROPPED    
  48375. SETHANDLE
  48376. SETRESOLUTION
  48377. HORIZONTALRESOLUTION
  48378. VERTICALRESOLUTION    
  48379. LCENCODER
  48380. LCCROPPEDFILE
  48381. SAVETOFILE
  48382. OIMAGES
  48383. <!-- nLeft:C
  48384. , nTop:
  48385. , nWidth:
  48386. , nHeight:
  48387. , ContinuationType:
  48388. , cContents:
  48389. NFRXRECNO
  48390. NLEFT
  48391. NWIDTH
  48392. NHEIGHT
  48393. NOBJECTCONTINUATIONTYPE
  48394. CCONTENTSTOBERENDERED
  48395. GDIPLUSIMAGE
  48396. LCDEBUGINFO
  48397. LCHTML
  48398. LDEBUG
  48399. GETCONTINUATIONTYPE
  48400. NOUTFILE
  48401. LNADJUST
  48402. NSCREENDPI
  48403. NPAGEHEIGHT
  48404. COMMANDCLAUSES    
  48405. RANGEFROM
  48406. OBJTYPE
  48407. PROCESSLINES
  48408. PROCESSSHAPES
  48409. PROCESSTEXT
  48410. PROCESSIMAGES
  48411. LCOUTPUTDBF
  48412. LNWIDTH
  48413. LNHEIGHT
  48414. GETFULLFRXDATA
  48415. GETPAGEWIDTH
  48416. GETPAGEHEIGHT
  48417. OUTPUTFROMDATA
  48418. LDEFAULTMODE
  48419. PREPAREOUTPUT
  48420. <!-- AfterBand:
  48421. pagefooter
  48422. NBANDOBJCODE    
  48423. NFRXRECNO
  48424. CBAND
  48425. FRXDATASESSION
  48426. GETBANDNAME
  48427. LDEBUG
  48428. NOUTFILE
  48429. CURRENTDATASESSION
  48430. <!-- BeforeBand:C
  48431. NBANDOBJCODE    
  48432. NFRXRECNO
  48433. FRXDATASESSION
  48434. LDEBUG
  48435. NOUTFILE
  48436. GETBANDNAME
  48437. CURRENTDATASESSION
  48438. NOUTFILE
  48439. GetDeviceCaps
  48440. WIN32API
  48441. GetDC
  48442. WIN32API
  48443. Collection
  48444. GETDEVICECAPS
  48445. WIN32API
  48446. GETDC
  48447. LNSCREENDPI
  48448. NSCREENDPI
  48449. LDEBUG
  48450. _CTEMPFOLDER
  48451. OIMAGES
  48452. LOBJTYPEMODE
  48453. OFOXYPREVIEWER
  48454. COMMANDCLAUSES
  48455. LOPENVIEWER
  48456. PREVIEW
  48457. TOFILE
  48458. CTARGETFILENAME    
  48459. CDESTFILE
  48460. LCDESTFILE
  48461. COUTPUTPATH
  48462. LCFILE
  48463. _REPORTLISTENER
  48464. CANCELREPORT
  48465. LQUIETMODE2
  48466. LQUIETMODE
  48467. outputfromdata,
  48468. getbandname{
  48469. getfontstyle
  48470. rgbtohex
  48471. getcontinuationtypes
  48472. getpageimg
  48473. getpicturefromlistener
  48474. processimages'
  48475. processtext
  48476. processlines
  48477. processshapes
  48478. getlinescnt3'
  48479. cropimageS*
  48480. renderhtml
  48481. prepareoutput33
  48482. LoadReport
  48483. AfterReportP4
  48484. AfterBand
  48485. BeforeBand
  48486. Destroy
  48487. updateproperties
  48488. GPFONT
  48489. \ffc\_gdiplus.vcx
  48490. GPSOLIDBRUSH
  48491. \ffc\_gdiplus.vcx
  48492. GPRECTANGLE
  48493. \ffc\_gdiplus.vcx
  48494. BOOLEAN
  48495. GPGRAPHICS
  48496. \ffc\_gdiplus.vcx
  48497. XFCGRAPHICSSTATE
  48498. EXCEPTION
  48499.  <CR> 
  48500.  <CR> 
  48501.  <CR> 
  48502.  <LASTWORD> 
  48503. <LASTWORD>
  48504. <LASTWORD>
  48505. EXCEPTION
  48506. Error drawing the justified string !C
  48507. Line: 
  48508. String that generated the error
  48509. TCSTRING
  48510. TOFONT
  48511. TOBRUSH
  48512. TORECTANGLE
  48513. TLJUSTLAST
  48514. TOGFX
  48515. LHFONT
  48516. LHGRAPHICS
  48517. LHBRUSH
  48518. LCRECTF
  48519. LNSPACEWIDTH
  48520. LNLINEHEIGHT
  48521. LCTEXT
  48522. LOGFXSTATE
  48523. LHTEMPSTRFORMAT
  48524. LHSTRINGFORMAT
  48525. LHLEFTALIGNHANDLE
  48526. LHRIGHTALIGNHANDLE
  48527. LNWORDS
  48528. LNWORDWIDTH
  48529. LNCHARS
  48530. LCCURRWORD    
  48531. LCCUTWORD
  48532. LNREDUCE
  48533. LLENDOFSENTENCE
  48534. LNWORDSWIDTH
  48535. LNWORDSINLINE
  48536. LNCURRWORD
  48537. LNCURRLINE
  48538. LNWIDTHOFBETWEEN
  48539. LNSTRINGFORMATHANDLE
  48540. LLLAST
  48541. LOEXC
  48542. LHGFXSTATE
  48543. SAVE    
  48544. GETHANDLE    
  48545. GETHEIGHT
  48546. XFCGDIPSETTEXTRENDERINGHINT(
  48547. XFCGDIPSTRINGFORMATGETGENERICTYPOGRAPHIC
  48548. XFCGDIPCLONESTRINGFORMAT
  48549. XFCGDIPDELETESTRINGFORMAT
  48550. XFCGDIPSETSTRINGFORMATFLAGS
  48551. XFCGDIPCREATESTRINGFORMAT
  48552. XFCGDIPSETSTRINGFORMATALIGN
  48553. PCBOUNDINGBOX
  48554. XFCGDIPMEASURESTRING
  48555. LAWORDS
  48556. RESTORE
  48557. LLLASTLINE
  48558. LCCHAR
  48559. XFCGDIPDRAWSTRING
  48560. ERRORNO
  48561. MESSAGE
  48562. LINENO
  48563. LINECONTENTS
  48564. LCMSG
  48565. ZZZZZZZZFOXYPREVIEWER
  48566. EXCEPTION
  48567. GPGRAPHICS
  48568. \FFC\_GdiPlus.vcx
  48569. GPFont
  48570. GPFont
  48571. GPFont
  48572. gpColorC
  48573. gpSolidBrush
  48574. ffffff
  48575. gpColorC
  48576. gpSolidBrush
  48577. TNFRXRECNO
  48578. TNLEFT
  48579. TNTOP
  48580. TNWIDTH
  48581. TNHEIGHT
  48582. TNOBJECTCONTINUATIONTYPE
  48583. TCCONTENTSTOBERENDERED
  48584. TIGDIPLUSIMAGE
  48585. TCFULLTEXT
  48586. TCFONTNAME0
  48587. TNFONTSIZE0
  48588. TNFONTSTYLE0
  48589. TNFILLRED0
  48590. TNFILLGREEN0
  48591. TNFILLBLUE0    
  48592. TNPENRED0
  48593. TNPENGREEN0
  48594. TNPENBLUE0
  48595. LCSTEP
  48596. LOFRXRECORD
  48597. LNSELECT
  48598. THIS    
  48599. CFRXALIAS
  48600. LOFRXREC
  48601. LOEXC
  48602. LHTEMPSTRFORMAT
  48603. LHSTRINGFORMAT
  48604. LHLEFTALIGNHANDLE
  48605. LHRIGHTALIGNHANDLE
  48606. LCRECTF
  48607. PCBOUNDINGBOX
  48608. LOGFX
  48609. OGDIGRAPHICS
  48610. LHGFX
  48611. LHFONT    
  48612. GETHANDLE
  48613. LHGFXSTATE
  48614. XFCGDIPSETTEXTRENDERINGHINT(
  48615. XFCGDIPSTRINGFORMATGETGENERICTYPOGRAPHIC
  48616. XFCGDIPCLONESTRINGFORMAT
  48617. XFCGDIPDELETESTRINGFORMAT
  48618. XFCGDIPSETSTRINGFORMATFLAGS
  48619. XFCGDIPCREATESTRINGFORMAT
  48620. XFCGDIPSETSTRINGFORMATALIGN
  48621. XFCGDIPSETSTRINGFORMATLINEALIGN    
  48622. TFPROCESS
  48623. LNWORDS
  48624. LNMAXHEIGHT
  48625. ATFWORDS
  48626. LCWORD
  48627. LCFONT
  48628. LNFONTSIZE
  48629. LCFONTSTYLE
  48630. LNRED
  48631. LNGREEN
  48632. LNBLUE    
  48633. LNBACKRED
  48634. LNBACKGREEN
  48635. LNBACKBLUE
  48636. LNSTYLE
  48637. LNLINEHEIGHT
  48638. LNWORDWIDTH
  48639. LNWORDHEIGHT
  48640. LNFONTHEIGHT
  48641. LOFONT
  48642. CREATE    
  48643. GETHEIGHT
  48644. XFCGDIPMEASURESTRING
  48645. LOCOLOR
  48646. LOBRUSH
  48647. LNXNEXT
  48648. LNCURRLINE
  48649. LALINES
  48650. LCOLDFORMAT
  48651. LCNEXTFORMAT    
  48652. LCOLDWORD
  48653. LCNEXTWORD
  48654. LNCOUNT
  48655. LCCURRWORD
  48656. LNCURRWIDTH
  48657. LANEWWORDS
  48658. LNPREVLINE
  48659. RESTORE
  48660. LNSTRINGFORMATHANDLE
  48661. LOFONT1
  48662. LHFONT1
  48663. LOBACKCOLOR
  48664. LOBACKBRUSH
  48665. FILLRECTANGLE
  48666. XFCGDIPDRAWSTRING
  48667. TFADDTOOUTPUT<$
  48668.  [CR] 
  48669.  [CR] 
  48670.  [CR] 
  48671.  [CR] 
  48672.  [CR] 
  48673.  [CR] 
  48674. CCCCC
  48675. CCCCC
  48676. <color=
  48677. <fname=
  48678. <fsize=
  48679. CCCCC
  48680. <fstyle=
  48681. CCCCC
  48682. <fontname=
  48683. <fontsize=
  48684. CCCCC
  48685. <highlight=
  48686. <fontstyle=
  48687. <color=
  48688. </color>
  48689. <highlight=
  48690. </highlight>
  48691. <fontname=
  48692. </fontname>
  48693. <fontsize=
  48694. </fontsize>
  48695. <fontstyle=
  48696. </fontstyle>
  48697. <fname=
  48698. </fname>
  48699. <fsize=
  48700. </fsize>
  48701. <fstyle=
  48702. </fstyle>
  48703. <color=
  48704. <highlight=
  48705. <fname=
  48706. <fontname=
  48707. <fsize=
  48708. <fontsize=
  48709. <fstyle=
  48710. <fontstyle=
  48711. </color>
  48712. </highlight>
  48713. </fname>
  48714. </fontname>
  48715. </fsize>
  48716. </fontsize>
  48717. </fstyle>
  48718. </fontstyle>
  48719. <color=
  48720. <highlight=
  48721. <fontname=
  48722. <fontsize=
  48723. <fontstyle=
  48724. <fname=
  48725. <fsize=
  48726. <fstyle=
  48727. </color>
  48728. </highlight>
  48729. </fontname>
  48730. </fontsize>
  48731. </fontstyle>
  48732. </fname>
  48733. </fsize>
  48734. </fstyle>
  48735. <color=
  48736. <highlight=
  48737. <fname=
  48738. <fontname=
  48739. <fsize=
  48740. <fontsize=
  48741. <fstyle=
  48742. <fontstyle=
  48743. </color>
  48744. </highlight>
  48745. </fname>
  48746. </fontname>
  48747. </fsize>
  48748. </fontsize>
  48749. </fstyle>
  48750. </fontstyle>
  48751. TCSTRING
  48752. TLRETURNVANILLASTRING
  48753. LCRESULTSTRING
  48754. LCCOLORSTACK
  48755. LCHIGHLIGHTSTACK
  48756. LCFONTNAMESTACK
  48757. LCFONTSIZESTACK
  48758. LCFONTSTYLESTACK
  48759. LLBOLD
  48760. LLITALIC
  48761. LLUNDERLINE
  48762. LLSTRIKETHRU
  48763. LLCOLOR
  48764. LLHIGHLIGHT
  48765. LLFONTNAME
  48766. LLFONTSIZE
  48767. LLFONTSTYLE
  48768. LLWHITESTYLED
  48769. LCPARAMWORD
  48770. LCPARAMFNAME
  48771. LNPARAMFSIZE
  48772. LCPARAMFSTYLE
  48773. LNPARAMCRED
  48774. LNPARAMCGREEN
  48775. LNPARAMCBLUE
  48776. LNPARAMHRED
  48777. LNPARAMHGREEN
  48778. LNPARAMHBLUE
  48779. LCWHITEFNAME
  48780. LNWHITEFSIZE
  48781. LCWHITEFSTYLE
  48782. LNWHITECRED
  48783. LNWHITECGREEN
  48784. LNWHITECBLUE
  48785. LNWHITEHRED
  48786. LNWHITEHGREEN
  48787. LNWHITEHBLUE
  48788. LNWORDS
  48789. LCWORD    
  48790. LCWORDLOW
  48791. LCCOLORVALUE
  48792. LCTAGVALUE
  48793. LCSTYLE
  48794. LNKSTART    
  48795. LCKSTRING
  48796. LCKCHUNK    
  48797. LCKTAGPRE
  48798. LCKTAGVALUE
  48799. LCTEMPSTRING
  48800. LCNEXTCHAR
  48801. ATFWORDS
  48802. INTEGER
  48803. ffffff
  48804. TNRECNO
  48805. TNOBJECTCONTINUATIONTYPE
  48806. TCWORD
  48807. TIGDIPLUSIMAGE
  48808. TCFONT
  48809. TNFONTSIZE
  48810. TNFONTSTYLE
  48811. TNPENRED
  48812. TNPENGREEN    
  48813. TNPENBLUE    
  48814. TNFILLRED
  48815. TNFILLGREEN
  48816. TNFILLBLUE
  48817. TOFRX
  48818. LNSELECT
  48819. LNRECNO
  48820. CAUXFULLOUTPUTALIAS
  48821. NRECNO
  48822. FRXWIDTH    
  48823. FRXHEIGHT
  48824. FRXTOP
  48825. FRXRECNO
  48826. DBFRECNO
  48827. CONTTYPE
  48828. CONTENTS
  48829. UNCONTENTS
  48830. FRXINDEX
  48831. DYNAMICS
  48832. ROTATE    
  48833. CFRXALIAS
  48834. COUTPUTALIAS
  48835. PAGENO
  48836. FONTFACE
  48837. FONTSIZE    
  48838. FONTSTYLE
  48839. PENRED
  48840. PENGREEN
  48841. PENBLUE
  48842. FILLRED    
  48843. FILLGREEN
  48844. FILLBLUE
  48845. WIDTH
  48846. HEIGHT
  48847. PdfListener
  48848. PR_PDFx.vcx
  48849. PdfListener
  48850. PR_PDFx.vcx
  48851. Helvetica
  48852. PDFasImageListener
  48853. PR_Pdfx.vcx
  48854. PDFasImageListener
  48855. PR_PDFx.vcx
  48856. TCFILE
  48857. OFOXYPREVIEWER    
  48858. CDESTFILE
  48859. LNPGMODE
  48860. NPDFPAGEMODE
  48861. LNTYPE
  48862. LPDFASIMAGE
  48863. LOLISTENER    
  48864. CCODEPAGE
  48865. CTARGETFILENAME
  48866. LEMBEDFONT
  48867. LPDFEMBEDFONTS    
  48868. LCANPRINT
  48869. LPDFCANPRINT
  48870. LCANEDIT
  48871. LPDFCANEDIT
  48872. LCANCOPY
  48873. LPDFCANCOPY
  48874. LCANADDNOTES
  48875. LPDFCANADDNOTES
  48876. LENCRYPTDOCUMENT
  48877. LPDFENCRYPTDOCUMENT
  48878. CMASTERPASSWORD
  48879. CPDFMASTERPASSWORD
  48880. CUSERPASSWORD
  48881. CPDFUSERPASSWORD
  48882. LSHOWERRORS
  48883. LPDFSHOWERRORS
  48884. CSYMBOLFONTSLIST
  48885. CPDFSYMBOLFONTSLIST
  48886. CPDFAUTHOR    
  48887. CPDFTITLE
  48888. CPDFSUBJECT
  48889. CPDFKEYWORDS
  48890. CPDFCREATOR
  48891. LREPLACEFONTS
  48892. LPDFREPLACEFONTS    
  48893. NPAGEMODE
  48894. CDEFAULTFONT
  48895. CPDFDEFAULTFONT    
  48896. QUIETMODE
  48897. LQUIETMODE
  48898. LCOUTPUTDBF
  48899. LNWIDTH
  48900. LNHEIGHT
  48901. LLHASFJ
  48902. GETFULLFRXDATA    
  48903. OLISTENER
  48904. LHASFJ
  48905. GETPAGEWIDTH
  48906. GETPAGEHEIGHT
  48907. OUTPUTFROMDATA
  48908. DOFOXYTHERMp
  48909. REPORTLISTENER
  48910. RTFreportlistener
  48911. PR_RTFListener
  48912. TCFILE
  48913. OFOXYPREVIEWER    
  48914. CDESTFILE
  48915. LORTFLISTENER
  48916. TARGETFILENAME    
  48917. QUIETMODE
  48918. LQUIETMODE
  48919. LCOUTPUTDBF
  48920. LNWIDTH
  48921. LNHEIGHT
  48922. GETFULLFRXDATA
  48923. GETPAGEWIDTH
  48924. GETPAGEHEIGHT
  48925. OUTPUTFROMDATA
  48926. DOFOXYTHERM>
  48927. ExcelListener
  48928. ExcelListener
  48929. pr_ExcelListener.vcx
  48930. Sheet
  48931. PREPDATA
  48932. PLEASEWAIT
  48933. TCFILE
  48934. _GOFP
  48935. OFOXYPREVIEWER    
  48936. CDESTFILE
  48937. LOXLSLISTENER
  48938. CWORKBOOKFILE
  48939. CWORKSHEETNAME    
  48940. CCODEPAGE
  48941. LCONVERTTOXLS
  48942. LEXCELCONVERTTOXLS
  48943. LREPEATHEADERS
  48944. LEXCELREPEATHEADERS
  48945. LREPEATFOOTERS
  48946. LEXCELREPEATFOOTERS
  48947. LHIDEPAGENO
  48948. LEXCELHIDEPAGENO
  48949. LALIGNLEFT
  48950. LEXCELALIGNLEFT
  48951. NEXCELSAVEFORMAT
  48952. LQUIETMODE
  48953. DOFOXYTHERM
  48954. GETLOC
  48955. _RUNSTATUSTEXT
  48956. LCOUTPUTDBF
  48957. LNWIDTH
  48958. LNHEIGHT
  48959. GETFULLFRXDATA
  48960. OUTPUTFROMDATAx
  48961. REPORTLISTENER
  48962. pr_HTMLListener2
  48963. PR_HTMLListener2
  48964. TCFILE
  48965. TLTEMP
  48966. OFOXYPREVIEWER    
  48967. CDESTFILE
  48968. LOHTMLLISTENER
  48969. CTARGETFILENAME    
  48970. QUIETMODE
  48971. LQUIETMODE
  48972. LCOUTPUTDBF
  48973. LNWIDTH
  48974. LNHEIGHT
  48975. GETFULLFRXDATA
  48976. GETPAGEWIDTH
  48977. GETPAGEHEIGHT
  48978. OUTPUTFROMDATA
  48979. DOFOXYTHERM
  48980. bitmap
  48981. TCFILE
  48982. TCFORMAT
  48983. LCFILEFORMAT
  48984. LCDESTFILE
  48985. LNPAGECOUNT
  48986. LNFILETYPE
  48987. LNDEVICETYPE
  48988. THIS    
  48989. PAGETOTAL
  48990. LNPAGENO
  48991. OUTPUTPAGE
  48992. LCPATHFILE
  48993. LCDESTFILE2
  48994. LCINDEX
  48995. DataSessionv
  48996. m.oObjProperties.Text = SPACE(1) + ALLTRIM(TRANSFORM(m.lnValue, &lcFormat.))
  48997. NFRXRECNO
  48998. OOBJPROPERTIES
  48999. VALUE
  49000. LCFORMAT
  49001. LNVALUE
  49002. ARECORDS
  49003. NADJ    
  49004. LNSESSION
  49005. LNSELECT
  49006. SETFRXDATASESSION
  49007. PICTURE
  49008. RELOAD
  49009. LOEXC
  49010. oGDIGraphics
  49011. aRecords[1]
  49012. lHasFJ-
  49013. lNewPage-
  49014. lHasUserFld-
  49015. ADDPROPERTY
  49016. GPGraphics
  49017. GPGraphics
  49018. _GdiPlus.vcx
  49019. USER/
  49020. <FJ>C
  49021. <TF>C
  49022. <UC>C
  49023. OGDIGRAPHICS
  49024. SETFRXDATASESSION
  49025. LHASUSERFLD
  49026. LNADJ    
  49027. LNOLDSIZE
  49028. ARECORDS
  49029. LHASFJ
  49030. RESETDATASESSION
  49031. PREPAREWATERMARK
  49032. NBANDOBJCODE    
  49033. NFRXRECNO
  49034. LHASFJ
  49035. LEXPANDFIELDS
  49036. CALLEVALUATECONTENTS
  49037. LNEWPAGE
  49038. ISSUCCESSOR
  49039. SHAREDGDIPLUSGRAPHICS
  49040. GDIPLUSGRAPHICS
  49041. OGDIGRAPHICS    
  49042. SETHANDLEC
  49043. GPRECTANGLE
  49044. GPRectangle
  49045. GPBITMAP
  49046. FFC\_Gdiplus.vcx
  49047. GpBitmap
  49048. GPGRAPHICS
  49049. FFC\_Gdiplus.vcx
  49050. GPGRAPHICS
  49051. \FFC\_GdiPlus.vcx
  49052. GPRECTANGLE
  49053. \FFC\_GdiPlus.vcx
  49054. GPFONT
  49055. \FFC\_GdiPlus.vcx
  49056. GPSOLIDBRUSH
  49057. \FFC\_GdiPlus.vcx
  49058. GPCOLOR
  49059. \FFC\_GdiPlus.vcx
  49060. <TF>C
  49061. <UC>C
  49062. GPRectangle
  49063. GPFont
  49064. gpColor
  49065. gpSolidBrush
  49066. gpColor
  49067. gpSolidBrush
  49068. TNFRXRECNO
  49069. TNLEFT
  49070. TNTOP
  49071. TNWIDTH
  49072. TNHEIGHT
  49073. TNOBJECTCONTINUATIONTYPE
  49074. TCCONTENTSTOBERENDERED
  49075. TIGDIPLUSIMAGE
  49076. ARECORDS
  49077. LNEWPAGE
  49078. LUSINGWATERMARK
  49079. OGDIGRAPHICS    
  49080. SETHANDLE
  49081. ISSUCCESSOR
  49082. SHAREDGDIPLUSGRAPHICS
  49083. GDIPLUSGRAPHICS
  49084. LNWIDTH
  49085. LNHEIGHT
  49086. NWATERMARKWIDTHRATIO
  49087. NWATERMARKHEIGHTRATIO
  49088. LORECT
  49089. SHAREDPAGEWIDTH
  49090. SHAREDPAGEHEIGHT
  49091. LOBMP
  49092. OWATERMARKBMP
  49093. CREATEFROMFILE
  49094. CWATERMARKIMAGE
  49095. LOGFX
  49096. DRAWIMAGESCALED
  49097. LOOBJECT
  49098. LCTEXT
  49099. LLFLAG
  49100. LOFONT
  49101. LOBRUSH
  49102. LOCOLOR
  49103. LNALPHA
  49104. LLSTOREDATA
  49105. LSTOREDATA
  49106. STOREFRXDATA
  49107. LHASFJ
  49108. DRAWSTRINGINTF
  49109. FONTNAME
  49110. FONTSIZE    
  49111. FONTSTYLE
  49112. FILLRED    
  49113. FILLGREEN
  49114. FILLBLUE
  49115. PENRED
  49116. PENGREEN
  49117. PENBLUE
  49118. CREATE    
  49119. FILLALPHA
  49120. FILLRECTANGLE
  49121. PENALPHA
  49122. DRAWSTRINGJUSTIFIED    
  49123. LCUNICODE
  49124. LCINVERT
  49125. LCCURRVALUE
  49126. DRAWSTRINGW{
  49127. BITMAP
  49128. OGDIGRAPHICS    
  49129. SETHANDLE
  49130. LOBJTYPEMODE
  49131. COMMANDCLAUSES
  49132. LLOPENVIEWER
  49133. LCTARGETFILE
  49134. LCDESTFILE
  49135. PREVIEW
  49136. OUTPUTTYPE
  49137. LCTARGETFILENAME
  49138. TOFILE    
  49139. LCFILEEXT
  49140. MAKEPDFOFFLINE
  49141. MAKEHTMLOFFLINE
  49142. MAKERTFOFFLINE
  49143. MAKEXLSOFFLINE
  49144. MAKEIMGOFFLINE
  49145. LLSAVED
  49146. OFOXYPREVIEWER
  49147. LSAVED    
  49148. SHELLEXEC
  49149. drawstringjustified,
  49150. drawstringintf
  49151. tfprocess
  49152. tfaddtooutput
  49153. makepdfofflined_
  49154. makertfoffline
  49155. makexlsoffline)j
  49156. makehtmloffline
  49157. makeimgofflineUp
  49158. EvaluateContents
  49159. InitKw
  49160. BeforeReport
  49161. BeforeBand
  49162. Render
  49163. AfterReportA
  49164. _GDIPLUS.VCX
  49165. DATASESSIONv
  49166. GpGraphics
  49167. _GDIPlus.VCX
  49168. TLCALLEDFROMBEFOREREPORT
  49169. _GDIPLUS
  49170. LISESSION
  49171. RESETDATASESSION
  49172. ENSURECOLLECTION
  49173. FFCGRAPHICS
  49174. COUNT
  49175. GETOBJECTINSTANCE
  49176. QUIETONERROR    
  49177. QUIETMODE[
  49178. TCPROGRAM
  49179. TCPROGRAM
  49180. LIRENDERBEHAVIOR
  49181. LITEMP
  49182. LCMETHODTOKEN
  49183. ISSUCCESSOR
  49184. UPPERMETHODNAME
  49185. COUNT
  49186. SETCURRENTDATASESSION
  49187. APPLYFX
  49188. NEEDGFXS
  49189. COLLECTION
  49190. ApplyFX
  49191. ApplyFX
  49192. TLCALLEDFROMBEFOREREPORT
  49193. LIINDEX
  49194. GETFEEDBACKFXOBJECT
  49195. GETMEMBERDATASCRIPTFXOBJECT
  49196. GETROTATEGFXOBJECT
  49197. GETNORENDERGFXOBJECT
  49198. COUNT
  49199. REMOVE
  49200. GFXSF
  49201. TCPROGRAM    
  49202. LCPROGRAM9
  49203. VNEWVAL
  49204. CANCELREQUESTEDE
  49205. VNEWVAL
  49206. FXFEEDBACKCLASSC
  49207. VNEWVAL
  49208. FXFEEDBACKCLASSLIB7
  49209. VNEWVAL
  49210. FXFEEDBACKMODULE
  49211. THIS.CommandClauses.NoDialogb
  49212. TLQUIET
  49213. THIS    
  49214. QUIETMODE
  49215. ISSUCCESSOR
  49216. COMMANDCLAUSES
  49217. NODIALOG
  49218. ADDCOLLECTIONMEMBER
  49219. FXFEEDBACKCLASS
  49220. FXFEEDBACKCLASSLIB
  49221. FXFEEDBACKMODULE!
  49222. CHECKCOLLECTIONFORSPECIFIEDMEMBER    
  49223. STARTMODE
  49224. classPath
  49225. VNEWVAL
  49226. THIS    
  49227. CLASSPATH
  49228. RESETTODEFAULT
  49229. A required helper object is not defined.C
  49230. This report run may be missing some features,
  49231. or it may not conclude successfully.
  49232. DATASESSIONv
  49233.  ALIAS 
  49234. CLASSLIBv
  49235.  ALIAS 
  49236. CLASSLIBv
  49237. PROCEDUREv
  49238. PROCEDUREv
  49239. A required helper object is not available.C
  49240. Class: 
  49241.  Library: 
  49242. This report run may be missing some features,
  49243. or it may not conclude successfully.
  49244. TCCLASS
  49245. TCCLASSLIB
  49246. TCMODULE
  49247. TLASSIGNUNIQUENAMETOOBJECT
  49248. TCNAMEPREFIX
  49249. TLMANDATORYOBJECT
  49250. THIS    
  49251. DOMESSAGE
  49252. LCFORCEVCX
  49253. LCFORCEFXP
  49254. LCUSETHISLIB
  49255. LCEXTERNALSPATH    
  49256. LISESSION
  49257. RESETDATASESSION
  49258. GETPATHFOREXTERNALS    
  49259. CLASSPATH
  49260. TCCLASS
  49261. TCCLASSLIB
  49262. TLINGFX
  49263. TLRETURNREF
  49264. LIINDEX
  49265. LCFORCEVCX
  49266. LCCLASSLIB
  49267. LCCLASS    
  49268. LCTHISLIB
  49269. LLFOUND
  49270. LOREF
  49271. ENSURECOLLECTION
  49272. LCFORCEFXP
  49273. COUNT
  49274. CLASSLIBRARY
  49275. CLASS
  49276. ApplyFX
  49277. TCCLASS
  49278. TCCLASSLIB
  49279. TCMODULE
  49280. TLSINGLETON
  49281. TLINGFX
  49282. TLREQUIRED
  49283. LEXISTS
  49284. LIRETURN
  49285. THIS!
  49286. CHECKCOLLECTIONFORSPECIFIEDMEMBER
  49287. ENSURECOLLECTION
  49288. GETOBJECTINSTANCE
  49289. LILEVEL
  49290. LCSYS16
  49291. LCPATH
  49292. THIS    
  49293. CLASSPATH
  49294. CLASSLIBRARY
  49295. GpGraphics
  49296. TVNEWVAL
  49297. THIS    
  49298. ISRUNNING
  49299. FFCGRAPHICS
  49300. LADUMMYo
  49301. Class to handle scripting during C
  49302. report generation process is not available.
  49303. Report run may not provide expected dynamic behavior.
  49304. SETFRXDATASESSION
  49305. MEMBERDATAALIAS
  49306. EXECUTE
  49307. ADDCOLLECTIONMEMBER
  49308. FXMEMBERDATASCRIPTCLASS
  49309. FXMEMBERDATASCRIPTCLASSLIB
  49310. FXMEMBERDATASCRIPTMODULE!
  49311. CHECKCOLLECTIONFORSPECIFIEDMEMBER    
  49312. DOMESSAGE
  49313. VNEWVAL
  49314. FXMEMBERDATASCRIPTCLASSC
  49315. VNEWVAL
  49316. FXMEMBERDATASCRIPTCLASSLIB7
  49317. VNEWVAL
  49318. FXMEMBERDATASCRIPTMODULE
  49319. FRXCursor
  49320. _FRXCURSOR.VCX
  49321. THIS    
  49322. ISRUNNING    
  49323. FRXCURSOR
  49324. LOADFRXCURSOR
  49325. GETOBJECTINSTANCE    
  49326. QUIETMODE?
  49327. VNEWVAL
  49328. THIS    
  49329. ISRUNNING    
  49330. FRXCURSORD
  49331. VNEWVAL
  49332. THIS    
  49333. ISRUNNING
  49334. LOADFRXCURSORE
  49335. VNEWVAL
  49336. MEMBERDATAALIAS
  49337. WINDOWS
  49338. UnpackFRXMemberdata
  49339. Class to handle scripting during C
  49340. report generation process is not available.
  49341. Report run may not provide expected dynamic behavior.
  49342. PLATFORM
  49343. STYLE
  49344. LOADFRXCURSOR    
  49345. FRXCURSOR
  49346. UNPACKFRXMEMBERDATA
  49347. MEMBERDATAALIAS
  49348. FRXDATASESSION    
  49349. DOMESSAGEK
  49350. TVNEWVAL
  49351. RUNCOLLECTORRESETLEVEL
  49352. BEFOREREPORT
  49353. AFTERREPORT
  49354. LOADREPORT
  49355. UNLOADREPORT
  49356. DATASESSIONv
  49357. WINDOWS
  49358. BEFOREBAND
  49359. AFTERBAND
  49360. TCMETHODTOKEN
  49361. LIFRXRECNO    
  49362. LISESSION
  49363. FRXHEADERRECNO
  49364. SETFRXDATASESSION
  49365. OBJTYPE
  49366. PLATFORM
  49367. Microsoft.VFP.Reporting.Builder.Rotate
  49368. Class to handle rotation during C
  49369. report generation process is not available.
  49370. Report layout controls will not rotate.
  49371. SETFRXDATASESSION
  49372. MEMBERDATAALIAS
  49373. EXECUTE
  49374. ADDCOLLECTIONMEMBER
  49375. GFXROTATECLASS
  49376. GFXROTATECLASSLIB
  49377. GFXROTATEMODULE!
  49378. CHECKCOLLECTIONFORSPECIFIEDMEMBER    
  49379. DOMESSAGE
  49380. VNEWVAL
  49381. GFXROTATECLASSE
  49382. VNEWVAL
  49383. GFXROTATECLASSLIB9
  49384. VNEWVAL
  49385. GFXROTATEMODULE]
  49386. TCNAME
  49387. TLINGFX
  49388. TLNAMEISCLASS
  49389. LIINDEX
  49390. LLFOUND
  49391. LCNAME
  49392. COUNT
  49393. CLASS
  49394. REMOVE
  49395. reportStopRunDatetime
  49396. THIS!
  49397. CHECKCOLLECTIONFORSPECIFIEDMEMBER
  49398. FXFEEDBACKCLASS
  49399. FXFEEDBACKCLASSLIB
  49400. REPORTSTOPRUNDATETIME
  49401. reportStartRunDatetime
  49402. THIS!
  49403. CHECKCOLLECTIONFORSPECIFIEDMEMBER
  49404. FXFEEDBACKCLASS
  49405. FXFEEDBACKCLASSLIB
  49406. REPORTSTARTRUNDATETIME
  49407. DATASESSIONv
  49408. THIS.CommandClauses.StartDatasessionb
  49409. TVVALUEEXPR    
  49410. LISESSION
  49411. LVVALUE
  49412. SETCURRENTDATASESSION
  49413. SETFRXDATASESSION
  49414. RESETDATASESSION
  49415. COMMANDCLAUSES
  49416. STARTDATASESSION
  49417. LISTENERDATASESSION9
  49418. VNEWVAL
  49419. GFXNORENDERCLASS9
  49420. VNEWVAL
  49421. GFXNORENDERCLASSLIB9
  49422. VNEWVAL
  49423. GFXNORENDERMODULE
  49424. ListenerRef.Preprocess.NoRenderWhen
  49425. Microsoft.VFP.Reporting.Builder.AdvancedProperty
  49426. ListenerRef.NoRenderWhen
  49427. ListenerRef.Preprocess.NoRenderWhen
  49428. Class or behavior to handle conditional rendering during C
  49429. report generation process is not available during this run.
  49430. Some report layout controls may appear unexpectedly in the output.
  49431. GFXNORENDERCLASS
  49432. LLNEEDTHISGFX
  49433. LLOPENEDMEMBERDATA
  49434. SETFRXDATASESSION
  49435. MEMBERDATAALIAS
  49436. COMMANDCLAUSES
  49437. ISDESIGNERLOADED!
  49438. CHECKCOLLECTIONFORSPECIFIEDMEMBER
  49439. GFXNORENDERCLASSLIB
  49440. STYLE
  49441. LOADFRXCURSOR
  49442. EXECWHEN
  49443. EXECUTE
  49444. ADDCOLLECTIONMEMBER
  49445. GFXNORENDERMODULE    
  49446. DOMESSAGE
  49447. COLLECTION
  49448. Collection
  49449. COLLECTION
  49450. Collection
  49451. TLGFXS
  49452. GFXS    
  49453. BASECLASS
  49454. TNHANDLE
  49455. FFCGRAPHICS    
  49456. SETHANDLE
  49457. SHAREDGDIPLUSGRAPHICS
  49458. NEXTERNALGDIPLUSGFX
  49459. VNEWVAL
  49460. LOADFRXCURSOR    
  49461. FRXCURSOR    
  49462. QUIETMODE
  49463. FFCGRAPHICS
  49464. QUIETONERROR
  49465. SENDFX
  49466. SENDFX%
  49467. CMESSAGE
  49468. SENDFXx
  49469. FX-Update Listener
  49470. APPNAME
  49471. CREATEHELPEROBJECTS
  49472. HADERROR|
  49473. CALLADJUSTOBJECTSIZE
  49474. CALLEVALUATECONTENTS
  49475. COMMANDCLAUSESFILE
  49476. COMMANDCLAUSES
  49477. SETFRXDATASESSIONENVIRONMENT
  49478. CREATEHELPEROBJECTS
  49479. CHECKCOLLECTIONMEMBERS
  49480. SENDFX
  49481. memberDataAlias
  49482. SETFRXDATASESSION
  49483. ISSUCCESSOR
  49484. CREATEMEMBERDATACURSOR    
  49485. SUCCESSOR
  49486. ADDPROPERTY
  49487. MEMBERDATAALIAS
  49488. CHECKCOLLECTIONMEMBERS
  49489. CREATEHELPEROBJECTS
  49490. SENDFX
  49491. SENDFX?
  49492. SENDFX
  49493. COMMANDCLAUSES
  49494. COMMANDCLAUSESFILE
  49495. NBANDOBJCODE    
  49496. NFRXRECNO
  49497. COUNT
  49498. FFCGRAPHICS    
  49499. SETHANDLE
  49500. GDIPLUSGRAPHICS
  49501. SENDFXF
  49502. NBANDOBJCODE    
  49503. NFRXRECNO
  49504. SENDFX
  49505. NFRXRECNO
  49506. OOBJPROPERTIES
  49507. SENDFX    
  49508. SUCCESSOR
  49509. SETSUCCESSORDYNAMICPROPERTIES
  49510. EVALUATECONTENTS
  49511. NFRXRECNO
  49512. OOBJPROPERTIES
  49513. SENDFX    
  49514. SUCCESSOR
  49515. SETSUCCESSORDYNAMICPROPERTIES
  49516. ADJUSTOBJECTSIZE
  49517. NFRXRECNO
  49518. NLEFT
  49519. NWIDTH
  49520. NHEIGHT
  49521. NOBJECTCONTINUATIONTYPE
  49522. CCONTENTSTOBERENDERED
  49523. GDIPLUSIMAGE
  49524. LIDEFAULTBEHAVIOR
  49525. LLNEEDGFXS
  49526. LNSTATE
  49527. LHGFX
  49528. GDIPLUSGRAPHICS
  49529. ISSUCCESSOR
  49530. COUNT
  49531. NEEDGFXS
  49532. FFCGRAPHICS    
  49533. SETHANDLE
  49534. SENDFX
  49535. RESTORE    
  49536. SUCCESSOR
  49537. SETSUCCESSORDYNAMICPROPERTIES
  49538. RENDER/
  49539. FFCGRAPHICS    
  49540. FRXCURSORg
  49541. COUNT
  49542. SENDFX
  49543. CANCELREQUESTED
  49544. createhelperobjects,
  49545. needgfxs
  49546. sendfx
  49547. checkcollectionmembers"
  49548. uppermethodnamex
  49549. cancelrequested_assign
  49550. fxfeedbackclass_assign5    
  49551. fxfeedbackclasslib_assign
  49552. fxfeedbackmodule_assign
  49553. getfeedbackfxobjectd
  49554. classpath_assign
  49555. getobjectinstance
  49556. checkcollectionforspecifiedmember
  49557. addcollectionmember}
  49558. getpathforexternals
  49559. ffcgraphics_assign
  49560. getmemberdatascriptfxobject%
  49561. fxmemberdatascriptclass_assignb
  49562. fxmemberdatascriptclasslib_assign
  49563. fxmemberdatascriptmodule_assignE
  49564. frxcursor_access
  49565. frxcursor_assign
  49566. loadfrxcursor_assign
  49567. memberdataalias_assign
  49568. creatememberdatacursor
  49569. runcollectorresetlevel_assign
  49570. getfrxrecno
  49571. getrotategfxobject
  49572. gfxrotateclass_assignG)
  49573. gfxrotateclasslib_assign
  49574. gfxrotatemodule_assign
  49575. removecollectionmemberw*
  49576. reportstoprundatetime_accessP,
  49577. reportstartrundatetime_accessx-
  49578. evaluateuserexpression
  49579. gfxnorenderclass_assign
  49580. gfxnorenderclasslib_assignf1
  49581. gfxnorendermodule_assign
  49582. getnorendergfxobject&2
  49583. ensurecollection
  49584. setgdiplusgraphics
  49585. quietmode_assign
  49586. ClearStatusx9
  49587. resetcallevaluatecontents
  49588. resetcalladjustobjectsize
  49589. UpdateStatus
  49590. DoStatus
  49591. LoadReport
  49592. BeforeReport
  49593. AfterReport<=
  49594. UnloadReportm=
  49595. BeforeBand
  49596. AfterBand
  49597. EvaluateContents>?
  49598. AdjustObjectSize.@
  49599. Render
  49600. DestroygE
  49601. CancelReport
  49602. DOSTATUS
  49603. UPDATESTATUS
  49604. CLEARSTATUS
  49605. AFTERBAND
  49606. AFTERREPORT
  49607. m.toListener.CommandClauses.RecordTotalb
  49608. BEFOREBAND
  49609. DATASESSIONv
  49610. BEFOREREPORT
  49611. CANCELREPORT
  49612. DATASESSIONv
  49613. LOADREPORT
  49614. reportStartRunDatetime
  49615. m.toListener.CommandClauses.NoDialogb
  49616. UNLOADREPORT
  49617. reportStopRunDatetime
  49618. TOLISTENER
  49619. TCMETHODTOKEN
  49620. MOVABLE    
  49621. LISESSION
  49622. DOSTATUS
  49623. UPDATESTATUS
  49624. CLEARSTATUS
  49625. SYNCHSTATUS    
  49626. ISRUNNING
  49627. CURRENTRECORD
  49628. COMMANDCLAUSES
  49629. RECORDTOTAL
  49630. DESIGNATEDDRIVER
  49631. DRIVINGALIAS
  49632. SUCCESSORSYS2024
  49633. VISIBLE
  49634. REPORTSTOPRUNDATETIME
  49635. POPUSERFEEDBACKGLOBALSETS
  49636. CURRENTPASS
  49637. CURRENTDATASESSION
  49638. SETUPREPORT    
  49639. QUIETMODE    
  49640. PAGELIMIT
  49641. PAGENO
  49642. ALLOWMODALMESSAGES    
  49643. DOMESSAGE
  49644. CANCELQUERYTEXT
  49645. ATTENTIONTEXT
  49646. CANCELREQUESTED
  49647. ISSUCCESSOR
  49648. REPORTINCOMPLETETEXT
  49649. RESETUSERFEEDBACK
  49650. ADDPROPERTY
  49651. REPORTSTARTRUNDATETIME
  49652. NODIALOG
  49653. INITSTATUSTEXT
  49654. PUSHUSERFEEDBACKGLOBALSETS
  49655. PERSISTBETWEENRUNS
  49656. LISTENERDATASESSION
  49657. RELEASE9
  49658. VNEWVAL
  49659. INCLUDESECONDS9
  49660. VNEWVAL
  49661. INITSTATUSTEXT9
  49662. VNEWVAL
  49663. PREPASSSTATUSTEXT
  49664. VNEWVAL
  49665. RUNSTATUSTEXT
  49666. VNEWVAL
  49667. SECONDSTEXT
  49668. VNEWVAL
  49669. LCTYPE
  49670. CMESSAGE
  49671. THERMCAPTIONF
  49672. VNEWVAL
  49673. THERMFORMCAPTION
  49674. SETTHERMFORMCAPTION
  49675. VNEWVAL
  49676. THERMFORMHEIGHT
  49677. THERMMARGIN
  49678. SYNCHUSERINTERFACE
  49679. VNEWVAL
  49680. THERMFORMWIDTH
  49681. THERMMARGIN
  49682. SYNCHUSERINTERFACE~
  49683. VNEWVAL
  49684. THERMFORMHEIGHT
  49685. THERMFORMWIDTH
  49686. THERMMARGIN
  49687. SYNCHUSERINTERFACE
  49688. _SCREEN.ActiveFormb
  49689. THIS.CommandClauses.InWindowb
  49690. THIS.CommandClauses.Windowb
  49691. _SCREEN.ActiveFormb
  49692. _SCREEN.ActiveFormb
  49693. LOFORM    
  49694. LOTOPFORM
  49695. LCINWINDOW
  49696. ACTIVEFORM
  49697. SHOWWINDOW
  49698. COMMANDCLAUSES
  49699. INWINDOW
  49700. WINDOW
  49701. FORMS
  49702. NAME    
  49703. FORMCOUNT6
  49704. WINDOWS
  49705. SKIPv
  49706. TOLISTENER
  49707. LISELECT
  49708. LCALIAS
  49709. LISKIPS
  49710. LASKIPS
  49711. FRXDATASESSION
  49712. DESIGNATEDDRIVER
  49713. DRIVINGALIAS
  49714. OBJTYPE
  49715. OBJCODE
  49716. CURRENTDATASESSION
  49717. PLATFORM
  49718. TLRESETTIMES
  49719. CURRENTRECORD
  49720. PERCENTDONE
  49721. REPORTSTARTRUNDATETIME
  49722. REPORTSTOPRUNDATETIME
  49723. THERMFORMCAPTION
  49724. SYNCHUSERINTERFACE'
  49725. TCCOMMANDCLAUSESFILE
  49726. TCPRINTJOBNAME
  49727. THERMFORMCAPTION
  49728. CNAME
  49729. OFOXYPREVIEWER
  49730. CTITLE
  49731. CANCELINSTRTEXT
  49732. CAPTION@
  49733. TOLISTENER
  49734. NBANDOBJCODE    
  49735. NFRXRECNO
  49736. THIS    
  49737. ISRUNNING
  49738. FRXBANDRECNO
  49739. CURRENTDATASESSION
  49740. DRIVINGALIASCURRENTRECNO
  49741. DRIVINGALIAS
  49742. CURRENTRECORD
  49743. COMMANDCLAUSES
  49744. RECORDTOTAL
  49745. CURRENTPASS
  49746. TWOPASSPROCESS
  49747. RESETUSERFEEDBACK
  49748. UPDATESTATUS
  49749. LISTENERDATASESSION
  49750. MACDESKTOP
  49751. SCREEN
  49752. MACDESKTOP
  49753. SCREEN
  49754. TOLISTENER
  49755. CMESSAGE
  49756. LOPARENTFORM    
  49757. LCCAPTION
  49758. LCPARENTFORMNAME    
  49759. QUIETMODE
  49760. THIS    
  49761. ISRUNNING
  49762. COMMANDCLAUSES
  49763. NODIALOG
  49764. NLASTPERCENT
  49765. PERCENTDONE
  49766. NDELAY
  49767. THERMCAPTION
  49768. CLOSABLE
  49769. THERM
  49770. VALUE
  49771. THERMLABEL
  49772. CAPTION
  49773. VISIBLE
  49774. GETPARENTWINDOWREF
  49775. DESKTOP
  49776. MACDESKTOP
  49777. SHOWWINDOW
  49778. ALWAYSONTOP
  49779. AUTOCENTER.
  49780. TOLISTENER
  49781. VISIBLE>
  49782. TOLISTENER
  49783. THIS    
  49784. ISRUNNING
  49785. LIRECTOTAL
  49786. LNNEWPERCENT
  49787. LLSHOW
  49788. COMMANDCLAUSES
  49789. RECORDTOTAL
  49790. CURRENTRECORD
  49791. THERMPRECISION
  49792. PERCENTDONE
  49793. DOSTATUS
  49794. CURRENTPASS
  49795. TWOPASSPROCESS
  49796. PREPASSSTATUSTEXT
  49797. RUNSTATUSTEXTM
  49798. Notify
  49799. ESCAPE
  49800. PUBLIC &lcRef.   
  49801. ON ESCAPE &lcRef..CancelReport()      
  49802. ESCAPEv
  49803. TOLISTENER    
  49804. STARTMODE
  49805. LCREF
  49806. SETNOTIFYCURSOR
  49807. ONESCAPECOMMAND
  49808. ESCAPEREFERENCE    
  49809. SETESCAPE
  49810. RELEASE &lcRef.
  49811. ON ESCAPE &lcRef
  49812. STARTMODE
  49813. LCREF
  49814. ESCAPEREFERENCE
  49815. ONESCAPECOMMAND
  49816. SETNOTIFYCURSOR    
  49817. SETESCAPE
  49818. m.toListener.CommandClauses.Summaryb
  49819. Summary-
  49820. m.toListener.CommandClauses.RecordTotalb
  49821. RecordTotal
  49822. m.toListener.CommandClauses.NoDialogb
  49823. NoDialog-
  49824. WINDOWS
  49825. WINDOWS
  49826. WINDOWS
  49827. WINDOWS
  49828. WINDOWS
  49829. TOLISTENER
  49830. LLFRXAVAILABLE
  49831. LCALIAS
  49832. THIS    
  49833. ISRUNNING
  49834. CURRENTDATASESSION
  49835. DRIVINGALIAS
  49836. FRXDATASESSION
  49837. GETREPORTSCOPEDRIVER
  49838. SETTHERMFORMCAPTION
  49839. COMMANDCLAUSES
  49840. PRINTJOBNAME
  49841. FRXBANDRECNO
  49842. SUMMARY
  49843. OBJTYPE
  49844. OBJCODE
  49845. PLATFORM
  49846. DRIVINGALIASCURRENTRECNO
  49847. LISTENERDATASESSION=
  49848. VNEWVAL
  49849. THERMPRECISION7
  49850. VNEWVAL
  49851. PERSISTBETWEENRUNS
  49852. GetSysColor
  49853. Win32API
  49854. toListener.CommandClauses.StartDataSessionb
  49855. DATASESSIONv
  49856. TOLISTENER
  49857. GETSYSCOLOR
  49858. WIN32API
  49859. LITHERMTOP
  49860. LITHERMLEFT
  49861. LITHERMWIDTH
  49862. LITHERMHEIGHT    
  49863. LISESSION
  49864. COMMANDCLAUSES
  49865. STARTDATASESSION
  49866. RESETDATASESSION
  49867. THERMMARGIN    
  49868. SCALEMODE
  49869. HEIGHT
  49870. THERMFORMHEIGHT
  49871. HALFHEIGHTCAPTION
  49872. WIDTH
  49873. THERMFORMWIDTH
  49874. AUTOCENTER
  49875. BORDERSTYLE
  49876. CONTROLBOX
  49877. CLOSABLE    
  49878. ISRUNNING    
  49879. MAXBUTTON    
  49880. MINBUTTON
  49881. ALWAYSONTOP
  49882. ALLOWOUTPUT
  49883. THERMLABEL
  49884. VISIBLE
  49885. FONTBOLD
  49886. ALIGNMENT
  49887. SETTHERMFORMCAPTION
  49888. THERM
  49889. CAPTION
  49890. RUNSTATUSTEXT
  49891. BringWindowToTop
  49892. Win32API
  49893. ShowWindow
  49894. Win32API
  49895. GetCurrentThreadId
  49896. kernel32
  49897. GetWindowThreadProcessId
  49898. user32
  49899. GetCurrentThreadId
  49900. kernel32
  49901. AttachThreadInput
  49902. user32
  49903. GetForegroundWindow
  49904. user32
  49905. FindWindow
  49906. Win32API
  49907. BRINGWINDOWTOTOP
  49908. WIN32API
  49909. SHOWWINDOW
  49910. GETCURRENTTHREADID
  49911. KERNEL32
  49912. GETWINDOWTHREADPROCESSID
  49913. USER32
  49914. ATTACHTHREADINPUT
  49915. GETFOREGROUNDWINDOW
  49916. FINDWINDOW
  49917. LNHWND
  49918. CAPTION
  49919. LNFORETHREAD
  49920. LNAPPTHREAD
  49921. nLastPercent
  49922. CancelInstrText
  49923. CancelQueryText
  49924. ReportIncompleteText
  49925. AttentionText
  49926. INITSTATUS
  49927. PREPSTATUS
  49928. RUNSTATUS
  49929. SECONDS
  49930. CANCELINST
  49931. CANCELQUER
  49932. REPINCOMPL
  49933. ATTENTION
  49934. Initializing... 
  49935. Running calculation prepass... 
  49936. Creating output... 
  49937. sec(s)
  49938. Press Esc to cancel... 
  49939. Stop report execution?C
  49940. (If you press 'No', report execution will continue.)
  49941. Report execution was cancelled.C
  49942. Your results are not complete.
  49943. Attention
  49944. FindWindow
  49945. user32
  49946. SetParent
  49947. User32
  49948. m.cMessage+ " "+ 
  49949. TRANSFORM(THIS.PercentDone,"999"+ 
  49950. IIF(THIS.ThermPrecision=0,"","."+REPL("9",THIS.ThermPrecision))) + "%" 
  49951. + IIF(NOT THIS.IncludeSeconds, "" , "   "+
  49952. TRANSFORM(IIF(THIS.IsRunning,DATETIME(), THIS.ReportStopRunDateTime)-
  49953. THIS.ReportStartRunDateTime)+" " + THIS.SecondsText)
  49954. ADDPROPERTY
  49955. VISIBLE
  49956. _GOFP
  49957. INITSTATUSTEXT
  49958. GETLOC
  49959. PREPASSSTATUSTEXT
  49960. RUNSTATUSTEXT
  49961. SECONDSTEXT
  49962. CANCELINSTRTEXT
  49963. CANCELQUERYTEXT
  49964. REPORTINCOMPLETETEXT
  49965. ATTENTIONTEXT
  49966. OFOXYPREVIEWER
  49967. _INITSTATUSTEXT
  49968. _PREPASSSTATUSTEXT
  49969. _RUNSTATUSTEXT
  49970. _SECONDSTEXT
  49971. _CANCELINSTRTEXT
  49972. _CANCELQUERYTEXT
  49973. _REPORTINCOMPLETETEXT
  49974. _ATTENTIONTEXT
  49975. NTHERMFORMWIDTH
  49976. THERMFORMWIDTH
  49977. CREATETHERM
  49978. _ODESTSCREEN
  49979. LCTITLE
  49980. LNDESTHWND
  49981. FINDWINDOW
  49982. USER32    
  49983. SETPARENT
  49984. THERMCAPTION
  49985. RESETUSERFEEDBACK
  49986. applyfx,
  49987. includeseconds_assign
  49988. initstatustext_assign
  49989. prepassstatustext_assign{
  49990. runstatustext_assign
  49991. secondstext_assign
  49992. thermcaption_assignT
  49993. thermformcaption_assign 
  49994. thermformheight_assign
  49995. thermformwidth_assign
  49996. thermmargin_assigny
  49997. getparentwindowrefL
  49998. getreportscopedriver
  49999. resetuserfeedback
  50000. setthermformcaption
  50001. synchstatus>
  50002. dostatus
  50003. clearstatus
  50004. updatestatus
  50005. pushuserfeedbackglobalsets
  50006. popuserfeedbackglobalsets
  50007. setupreport
  50008. thermprecision_assign
  50009. persistbetweenruns_assignQ+
  50010. createtherm
  50011. bringwindowtofront}0
  50012. InitY3
  50013. DOSTATUS
  50014. UPDATESTATUS
  50015. CLEARSTATUS
  50016. AFTERBAND
  50017. AFTERREPORT
  50018. m.toListener.CommandClauses.RecordTotalb
  50019. BEFOREBAND
  50020. DATASESSIONv
  50021. BEFOREREPORT
  50022. CANCELREPORT
  50023. DATASESSIONv
  50024. LOADREPORT
  50025. reportStartRunDatetime
  50026. m.toListener.CommandClauses.NoDialogb
  50027. UNLOADREPORT
  50028. reportStopRunDatetime
  50029. TOLISTENER
  50030. TCMETHODTOKEN
  50031. TP12    
  50032. LISESSION
  50033. DOSTATUS
  50034. UPDATESTATUS
  50035. CLEARSTATUS
  50036. SYNCHSTATUS    
  50037. ISRUNNING
  50038. CURRENTRECORD
  50039. COMMANDCLAUSES
  50040. RECORDTOTAL
  50041. DESIGNATEDDRIVER
  50042. DRIVINGALIAS
  50043. SUCCESSORSYS2024
  50044. VISIBLE
  50045. REPORTSTOPRUNDATETIME
  50046. POPUSERFEEDBACKGLOBALSETS
  50047. CURRENTPASS
  50048. CURRENTDATASESSION
  50049. SETUPREPORT    
  50050. QUIETMODE    
  50051. PAGELIMIT
  50052. PAGENO
  50053. ALLOWMODALMESSAGES    
  50054. DOMESSAGE
  50055. CANCELQUERYTEXT
  50056. ATTENTIONTEXT
  50057. CANCELREQUESTED
  50058. ISSUCCESSOR
  50059. REPORTINCOMPLETETEXT
  50060. RESETUSERFEEDBACK
  50061. ADDPROPERTY
  50062. REPORTSTARTRUNDATETIME
  50063. NODIALOG
  50064. INITSTATUSTEXT
  50065. PUSHUSERFEEDBACKGLOBALSETS
  50066. PERSISTBETWEENRUNS
  50067. LISTENERDATASESSION
  50068. RELEASE9
  50069. VNEWVAL
  50070. INCLUDESECONDS9
  50071. VNEWVAL
  50072. INITSTATUSTEXT9
  50073. VNEWVAL
  50074. PREPASSSTATUSTEXT
  50075. VNEWVAL
  50076. RUNSTATUSTEXT
  50077. VNEWVAL
  50078. SECONDSTEXT
  50079. VNEWVAL
  50080. LCTYPE
  50081. CMESSAGE
  50082. THERMCAPTIONF
  50083. VNEWVAL
  50084. THERMFORMCAPTION
  50085. SETTHERMFORMCAPTION
  50086. VNEWVAL
  50087. THERMFORMHEIGHT
  50088. THERMMARGIN
  50089. SYNCHUSERINTERFACE
  50090. VNEWVAL
  50091. THERMFORMWIDTH
  50092. THERMMARGIN
  50093. SYNCHUSERINTERFACE~
  50094. VNEWVAL
  50095. THERMFORMHEIGHT
  50096. THERMFORMWIDTH
  50097. THERMMARGIN
  50098. SYNCHUSERINTERFACE
  50099. _SCREEN.ActiveFormb
  50100. THIS.CommandClauses.InWindowb
  50101. THIS.CommandClauses.Windowb
  50102. _SCREEN.ActiveFormb
  50103. _SCREEN.ActiveFormb
  50104. LOFORM    
  50105. LOTOPFORM
  50106. LCINWINDOW
  50107. ACTIVEFORM
  50108. SHOWWINDOW
  50109. COMMANDCLAUSES
  50110. INWINDOW
  50111. WINDOW
  50112. FORMS
  50113. NAME    
  50114. FORMCOUNT6
  50115. WINDOWS
  50116. SKIPv
  50117. TOLISTENER
  50118. LISELECT
  50119. LCALIAS
  50120. LISKIPS
  50121. LASKIPS
  50122. FRXDATASESSION
  50123. DESIGNATEDDRIVER
  50124. DRIVINGALIAS
  50125. OBJTYPE
  50126. OBJCODE
  50127. CURRENTDATASESSION
  50128. PLATFORM
  50129. TLRESETTIMES
  50130. CURRENTRECORD
  50131. PERCENTDONE
  50132. REPORTSTARTRUNDATETIME
  50133. REPORTSTOPRUNDATETIME
  50134. THERMFORMCAPTION
  50135. SYNCHUSERINTERFACE
  50136. TCCOMMANDCLAUSESFILE
  50137. TCPRINTJOBNAME
  50138. THERMFORMCAPTION
  50139. CNAME
  50140. CANCELINSTRTEXT
  50141. CAPTION@
  50142. TOLISTENER
  50143. NBANDOBJCODE    
  50144. NFRXRECNO
  50145. THIS    
  50146. ISRUNNING
  50147. FRXBANDRECNO
  50148. CURRENTDATASESSION
  50149. DRIVINGALIASCURRENTRECNO
  50150. DRIVINGALIAS
  50151. CURRENTRECORD
  50152. COMMANDCLAUSES
  50153. RECORDTOTAL
  50154. CURRENTPASS
  50155. TWOPASSPROCESS
  50156. RESETUSERFEEDBACK
  50157. UPDATESTATUS
  50158. LISTENERDATASESSION
  50159. MACDESKTOP
  50160. SCREEN
  50161. MACDESKTOP
  50162. SCREEN
  50163. TOLISTENER
  50164. CMESSAGE
  50165. LOPARENTFORM    
  50166. LCCAPTION
  50167. LCPARENTFORMNAME    
  50168. QUIETMODE
  50169. THIS    
  50170. ISRUNNING
  50171. COMMANDCLAUSES
  50172. NODIALOG
  50173. THERMCAPTION
  50174. CLOSABLE
  50175. MOVABLE
  50176. THERMSHAPE
  50177. WIDTH
  50178. PERCENTDONE    
  50179. THERMBACK
  50180. VISIBLE
  50181. GETPARENTWINDOWREF
  50182. DESKTOP
  50183. MACDESKTOP
  50184. SHOWWINDOW
  50185. ALWAYSONTOP
  50186. AUTOCENTER
  50187. THERMLABEL
  50188. CAPTION
  50189. LEFT.
  50190. TOLISTENER
  50191. VISIBLE>
  50192. TOLISTENER
  50193. THIS    
  50194. ISRUNNING
  50195. LIRECTOTAL
  50196. LNNEWPERCENT
  50197. LLSHOW
  50198. COMMANDCLAUSES
  50199. RECORDTOTAL
  50200. CURRENTRECORD
  50201. THERMPRECISION
  50202. PERCENTDONE
  50203. DOSTATUS
  50204. CURRENTPASS
  50205. TWOPASSPROCESS
  50206. PREPASSSTATUSTEXT
  50207. RUNSTATUSTEXTM
  50208. Notify
  50209. ESCAPE
  50210. PUBLIC &lcRef.   
  50211. ON ESCAPE &lcRef..CancelReport()      
  50212. ESCAPEv
  50213. TOLISTENER    
  50214. STARTMODE
  50215. LCREF
  50216. SETNOTIFYCURSOR
  50217. ONESCAPECOMMAND
  50218. ESCAPEREFERENCE    
  50219. SETESCAPE
  50220. RELEASE &lcRef.
  50221. ON ESCAPE &lcRef
  50222. STARTMODE
  50223. LCREF
  50224. ESCAPEREFERENCE
  50225. ONESCAPECOMMAND
  50226. SETNOTIFYCURSOR    
  50227. SETESCAPE
  50228. GetSysColor
  50229. Win32API
  50230. GETSYSCOLOR
  50231. WIN32API
  50232. LITHERMTOP
  50233. LITHERMLEFT
  50234. LITHERMWIDTH
  50235. LITHERMHEIGHT
  50236. HEIGHT
  50237. THERMFORMHEIGHT
  50238. WIDTH
  50239. THERMFORMWIDTH
  50240. CONTROLBOX
  50241. CLOSABLE
  50242. MOVABLE
  50243. THERMMARGIN
  50244. SETTHERMFORMCAPTION    
  50245. THERMBACK
  50246. THERMLABEL
  50247. PARENT    
  50248. FORECOLOR
  50249. THERMSHAPE    
  50250. BACKCOLOR    
  50251. FILLCOLOR
  50252. m.toListener.CommandClauses.Summaryb
  50253. Summary-
  50254. m.toListener.CommandClauses.RecordTotalb
  50255. RecordTotal
  50256. m.toListener.CommandClauses.NoDialogb
  50257. NoDialog-
  50258. WINDOWS
  50259. WINDOWS
  50260. WINDOWS
  50261. WINDOWS
  50262. WINDOWS
  50263. TOLISTENER
  50264. LLFRXAVAILABLE
  50265. LCALIAS
  50266. THIS    
  50267. ISRUNNING
  50268. CURRENTDATASESSION
  50269. DRIVINGALIAS
  50270. FRXDATASESSION
  50271. GETREPORTSCOPEDRIVER
  50272. SETTHERMFORMCAPTION
  50273. COMMANDCLAUSES
  50274. PRINTJOBNAME
  50275. FRXBANDRECNO
  50276. SUMMARY
  50277. OBJTYPE
  50278. OBJCODE
  50279. PLATFORM
  50280. DRIVINGALIASCURRENTRECNO
  50281. LISTENERDATASESSION=
  50282. VNEWVAL
  50283. THERMPRECISION7
  50284. VNEWVAL
  50285. PERSISTBETWEENRUNS
  50286. CancelInstrText
  50287. CancelQueryText
  50288. ReportIncompleteText
  50289. AttentionText
  50290. INITSTATUS
  50291. PREPSTATUS
  50292. RUNSTATUS
  50293. SECONDS
  50294. CANCELINST
  50295. CANCELQUER
  50296. REPINCOMPL
  50297. ATTENTION
  50298. Initializing... 
  50299. Running calculation prepass... 
  50300. Creating output... 
  50301. sec(s)
  50302. Press Esc to cancel... 
  50303. Stop report execution?C
  50304. (If you press 'No', report execution will continue.)
  50305. Report execution was cancelled.C
  50306. Your results are not complete.
  50307. Attention
  50308. m.cMessage+ " "+ 
  50309. TRANSFORM(THIS.PercentDone,"999"+ 
  50310. IIF(THIS.ThermPrecision=0,"","."+REPL("9",THIS.ThermPrecision))) + "%" 
  50311. + IIF(NOT THIS.IncludeSeconds, "" , "   "+
  50312. TRANSFORM(IIF(THIS.IsRunning,DATETIME(), THIS.ReportStopRunDateTime)-
  50313. THIS.ReportStartRunDateTime)+" " + THIS.SecondsText)
  50314. ADDPROPERTY
  50315. _GOFP
  50316. INITSTATUSTEXT
  50317. GETLOC
  50318. PREPASSSTATUSTEXT
  50319. RUNSTATUSTEXT
  50320. SECONDSTEXT
  50321. CANCELINSTRTEXT
  50322. CANCELQUERYTEXT
  50323. REPORTINCOMPLETETEXT
  50324. ATTENTIONTEXT
  50325. THERMCAPTION
  50326. RESETUSERFEEDBACK
  50327. applyfx,
  50328. includeseconds_assign
  50329. initstatustext_assign
  50330. prepassstatustext_assignd
  50331. runstatustext_assign
  50332. secondstext_assign
  50333. thermcaption_assign=
  50334. thermformcaption_assign    
  50335. thermformheight_assign
  50336. thermformwidth_assignv
  50337. thermmargin_assignb
  50338. getparentwindowref5
  50339. getreportscopedriver
  50340. resetuserfeedbackw
  50341. setthermformcaption
  50342. synchstatus
  50343. dostatus
  50344. clearstatusE
  50345. updatestatus
  50346. pushuserfeedbackglobalsets
  50347. popuserfeedbackglobalsetsX#
  50348. synchuserinterface
  50349. setupreport
  50350. thermprecision_assign
  50351. persistbetweenruns_assign
  50352. Initd.
  50353. VNEWVAL
  50354. THIS    
  50355. ISRUNNING
  50356. READCONFIGURATION2
  50357. OutputConfig
  50358. OutputConfig
  50359. OutputConfig
  50360. ObjCode
  50361. OutputConfig
  50362. PROPERTY
  50363. THIS.
  50364. |METHOD|
  50365. |EVENT|
  50366. THIS.
  50367. TLCALLEDFROMINIT
  50368. THIS    
  50369. ISRUNNING
  50370. LISELECT
  50371. LCPEM
  50372. LLOPENED
  50373. LCORDER
  50374. LITYPE
  50375. LLQUIET    
  50376. QUIETMODE
  50377. GETCONFIGTABLE
  50378. CONFIGURATIONTABLE
  50379. OBJCODE
  50380. HADERROR
  50381. VERIFYCONFIGTABLE
  50382. OUTPUTCONFIG
  50383. CONFIGURATIONOBJTYPE
  50384. OBJTYPE
  50385. OBJNAME
  50386. OBJVALUE
  50387. FoxyOutputConfig
  50388. FoxyOutputConfig
  50389. _ReportOutputConfig
  50390. FoxyOutputConfig
  50391. Configuration table 
  50392.  was created.
  50393. TLFORCEEXTERNAL
  50394. LCDBF
  50395. LCPATH
  50396. LLISDBF
  50397. THIS    
  50398. ISRUNNING
  50399. GETPATHFOREXTERNALS
  50400. CREATECONFIGTABLE    
  50401. DOMESSAGE
  50402. CONFIGURATIONTABLEP
  50403. DoMessage
  50404. "Welcome to the demo run!",64
  50405. Sample initialization/config method call
  50406. TargetFileName
  50407. "xxx"
  50408. Sample initialization/config property
  50409. TCDBF
  50410. TLOVERWRITE
  50411. LISELECT
  50412. LCFILE
  50413. OBJTYPE
  50414. OBJCODE
  50415. OBJNAME
  50416. OBJVALUE
  50417. OBJINFO    
  50418. ONDELETED
  50419. File 
  50420.  cannot be created.
  50421. File 
  50422.  cannot be created.
  50423. VERIFYTARGETFILE
  50424. TARGETHANDLE
  50425. TARGETFILENAME
  50426. HADERROR    
  50427. DOMESSAGE
  50428. LASTERRORMESSAGEA
  50429. ?*"<>|
  50430. ?*"<>|
  50431. LCFILE
  50432. TARGETFILENAME
  50433. TARGETFILEEXTD
  50434. VNEWVAL
  50435. THIS    
  50436. ISRUNNING
  50437. TARGETFILEEXTD
  50438. VNEWVAL
  50439. THIS    
  50440. ISRUNNING
  50441. TARGETFILENAMED
  50442. VNEWVAL
  50443. THIS    
  50444. ISRUNNING
  50445. TARGETHANDLE
  50446.  created your report as
  50447. However, an error occurred during processing.
  50448. Report execution was cancelled.
  50449. Your results are not complete.
  50450.  created your report as
  50451. However, an error occurred during processing.
  50452. Report execution was cancelled.
  50453. Your results are not complete.
  50454.  was not able to create your report.
  50455.  was not able to create your report.
  50456. LADUMMY
  50457. TARGETHANDLE
  50458. TARGETFILENAME
  50459. HADERROR    
  50460. DOMESSAGE
  50461. APPNAME
  50462. LASTERRORMESSAGEB
  50463. .OBJTYPE
  50464. .OBJCODE
  50465. .OBJNAME
  50466. .OBJVALUE
  50467. .OBJINFO
  50468. Configuration table is not in correct format.
  50469. EXACTv
  50470. OBJTYPE
  50471. OBJCODE
  50472. OBJNAME
  50473. OBJVALUE
  50474. DELETED()
  50475. SAFETYv
  50476. Configuration table is missing C
  50477. one or more required indexes.
  50478. TCALIAS
  50479. TCFAILUREMSGTABLE
  50480. TCFAILUREMSGINDEXES
  50481. LCTABLE    
  50482. LCMESSAGE
  50483. LCALIAS
  50484. LISELECT
  50485. LLRETURN
  50486. LITAGCOUNT
  50487. LAREQUIRED
  50488. LAKEYS
  50489. LIFOUND
  50490. LLEXACTOFF
  50491. LLSAFETYON
  50492. OBJTYPE
  50493. OBJCODE
  50494. OBJNAME
  50495. OBJVALUE    
  50496. ONDELETED
  50497. THIS    
  50498. DOMESSAGE
  50499. LASTERRORMESSAGE
  50500. VNEWVAL
  50501. THIS    
  50502. ISRUNNING
  50503. EXTERNALFILELOCATION{
  50504. VNEWVAL
  50505. PAGEIMAGETYPE
  50506. PAGEIMAGEEXTENSION
  50507. GETPAGEIMAGEEXTENSION
  50508. LCEXT
  50509. PAGEIMAGETYPE
  50510. TIPAGE
  50511. TLFULLPATH
  50512. LCFILENAME
  50513. TARGETFILENAME
  50514. PAGEIMAGEEXTENSION
  50515. EXTERNALFILELOCATION
  50516. OUTPUTPAGE
  50517. AFTERREPORT
  50518. UNLOADREPORT
  50519. TCMETHODTOKEN
  50520. ISSUCCESSOR
  50521. PAGEIMAGETYPE
  50522. LISTENERTYPEd
  50523. TIPAGE
  50524. LCFILE
  50525. LLERROR
  50526. PAGEIMAGETYPE
  50527. GENERATEPAGEIMAGEFILENAME
  50528. OUTPUTPAGEQ
  50529. TVNEWVAL
  50530. CURRENTPAGEIMAGEFILENAME
  50531. EXTERNALFILELOCATION
  50532. TARGETFILENAME    
  50533. LLRUNNING    
  50534. ISRUNNING
  50535. You have asked for page image files to be generated, C
  50536. but this report run is not in a mode that currently supports 
  50537. this feature.
  50538. Your main output file will be generated without them.
  50539. NBANDOBJCODE    
  50540. NFRXRECNO
  50541. SUPPORTSPAGEIMAGES
  50542. LCFILE
  50543. LIPAGENO
  50544. PAGEIMAGETYPE
  50545. COMMANDCLAUSES    
  50546. RANGEFROM
  50547. ISSUCCESSOR
  50548. SHAREDPAGENO
  50549. PAGENO
  50550. GENERATEPAGEIMAGEFILENAME
  50551. CURRENTPAGEIMAGEFILENAME    
  50552. SUCCESSOR
  50553. TWOPASSPROCESS
  50554. CURRENTPASS    
  50555. DOMESSAGE
  50556. currentPageImageFilename
  50557. CURRENTPAGEIMAGEFILENAME
  50558. PAGEIMAGETYPE
  50559. SUPPORTSPAGEIMAGES
  50560. ISSUCCESSOR
  50561. LISTENERTYPE!
  50562. MAKEEXTERNALFILELOCATIONREACHABLE    
  50563. SUCCESSOR
  50564. ADDPROPERTY
  50565. READCONFIGURATION
  50566. SETCONFIGURATION
  50567. RESETDATASESSION
  50568. CLOSETARGETFILE}
  50569. FileOutput Listener
  50570. APPNAME
  50571. READCONFIGURATION
  50572. SETCONFIGURATION
  50573. HADERROR
  50574. AFTERREPORT
  50575. COMMANDCLAUSES
  50576. NOPAGEEJECT
  50577. SUPPORTSPAGEIMAGES
  50578. LCFILELOCATION
  50579. LIPAGE
  50580. LCFILE
  50581. EXTERNALFILELOCATION!
  50582. MAKEEXTERNALFILELOCATIONREACHABLE
  50583. OUTPUTPAGECOUNT
  50584. OUTPUTPAGEIMAGE
  50585. OUTPUTPAGE
  50586. NPAGENO
  50587. EDEVICE
  50588. NDEVICETYPE
  50589. NLEFT
  50590. NWIDTH
  50591. NHEIGHT    
  50592. NCLIPLEFT
  50593. NCLIPTOP
  50594. NCLIPWIDTH
  50595. NCLIPHEIGHT
  50596. SUPPORTSPAGEIMAGES
  50597. OUTPUTPAGEIMAGE
  50598. readconfiguration_assign,
  50599. setconfiguration
  50600. getconfigtable
  50601. createconfigtable 
  50602. opentargetfile
  50603. verifytargetfile
  50604. targetfileext_assignx
  50605. targetfilename_assign
  50606. targethandle_assign[
  50607. closetargetfile
  50608. verifyconfigtable
  50609. configurationobjtype_access
  50610. externalfilelocation_assign%
  50611. pageimagetype_assign
  50612. getpageimageextension
  50613. generatepageimagefilename
  50614. supportspageimages
  50615. outputpageimage
  50616. currentpageimagefilename_assign
  50617. makeexternalfilelocationreachable
  50618. BeforeBand*!
  50619. BeforeReport'%
  50620. setfrxdatasessionenvironment
  50621. Destroy!'
  50622. InitU'
  50623. AfterReport
  50624. OutputPage
  50625. fxs A collection of FX objects, required interface: PROCEDURE ApplyFX(toListener, tcMethodToken,tP1, tP2, tP3, tP4, tP5, tP6, tP7, tP8, tP9, tP10, tP11, tP12) Return value ignored
  50626. gfxs A collection of GFX objects, required interface: PROCEDURE ApplyFX(toListener, tcMethodToken,P1, tP2, tP3, tP4, tP5, tP6, tP7, tP8, tP9, tP10, tP11, tP12) Return value significant to Render method.
  50627. ffcgraphics A reference to an FFCGraphic object created during the run and provided to members of the GFXs collection. Validated as instance of GpGraphics from the FFC _GDIPLUS.VCX or a class derived from GpGraphics.
  50628. cancelrequested Notification flag for FX objects to request a report cancellation.
  50629. fxfeedbackclass Class to instantiate in FX collection for user feedback (defaults to fxTherm).
  50630. fxfeedbackclasslib Class library from which to instantiate FX collection object providing user feedback.
  50631. fxfeedbackmodule Application module (APP or EXE)  from which to instantiate FX collection object providing user feedback.
  50632. classpath Provides optional location specifying path for loading objects from external libraries.
  50633. fxmemberdatascriptclass Class to instantiate in FX collection for memberdata-based script handling (defaults to fxMemberDataScript).
  50634. fxmemberdatascriptclasslib Class library from which to instantiate FX collection object providing memberdata-based script-handling.
  50635. fxmemberdatascriptmodule Application module (APP or EXE)  from which to instantiate FX collection object providing memberdata-based script-handling.
  50636. frxcursor Holds a reference to an FRXCursor helper object to aid in run-time calculations related to FRX metadata, structure, and memberdata.
  50637. loadfrxcursor Determines whether this class should dynamically load an instance of the helper class FRXCursor when attempting to access a reference to it.
  50638. memberdataalias Alias of cursor holding memberdata in the FRXDataSession, read from the FRX table's Style field for easy access by other objects.
  50639. runcollectorresetlevel Indicates how often the runCollector member should be automatically reset by the reportListener (0=never, 1=after each report, 2=after a chained report run).
  50640. gfxrotateclass Class to instantiate in GFX collection for rotating layout controls (defaults to gfxRotate).
  50641. gfxrotateclasslib Class library from which to instantiate GFX collection object providing rotation.
  50642. gfxrotatemodule Application module (APP or EXE)  from which to instantiate GFX collection object providing rotation.
  50643. reportstoprundatetime A datetime value for use at the conclusion of a report run, storing when the last report generation run ended, if the feedback member object has been instantiated and provides a property with a matching name. Readonly.
  50644. reportstartrundatetime A datetime value indicating when the last report generation run began, if the feedback member object has been instantiated and provides a property with a matching name. Readonly.
  50645. gfxnorenderclass Class to instantiate in GFX collection for conditionally eliminating baseclass rendering of various layout controls (defaults to gfxNoRender, if empty conditional rendering is turned off).
  50646. gfxnorenderclasslib Class library from which to instantiate GFX collection object providing conditional baseclass rendering.
  50647. gfxnorendermodule Application module (APP or EXE) from which to instantiate GFX collection object providing conditional baseclass rendering.
  50648. nexternalgdiplusgfx
  50649. *createhelperobjects Creates FXs and GFXs collections, and additional required object members such as the FFCGraphics object.
  50650. *needgfxs Hook method to evaluate whether this method needs to call the GFXs collection members for rendering purposes.
  50651. *sendfx Applies FXs and GFXs collection members when an event or method is called.  Returns value to indicate how default render behavior should work when invoked during Render event.
  50652. *checkcollectionmembers Eliminates members of FXs and GFXs collections in LoadReport and again in BeforeReport if they do not match required interfaces. Verifies availability of appropriate members.
  50653. *uppermethodname Passed a string such as PROGRAM(), returns an upper-case version of the method name with prefixes removed.  Utility method for use  when applying FX and GFX instructions.
  50654. *cancelrequested_assign 
  50655. *fxfeedbackclass_assign 
  50656. *fxfeedbackclasslib_assign 
  50657. *fxfeedbackmodule_assign 
  50658. *getfeedbackfxobject Instantiates FX object to provide user feedback.
  50659. *classpath_assign 
  50660. *getobjectinstance Provides a method for instancing classes as helper/member objects or FX/GFX collection members using specific path priorities.
  50661. *checkcollectionforspecifiedmember Checks FX or GFX collection for instance of specified class by class and (if specified) by class library name. Returns logical (.F. if not found) or object reference (NULL if not found).
  50662. *addcollectionmember Adds instance of specified class in specified class library  to FX or GFX collection. Params: tcClass, tcClassLib,tcModule,tlSingleton, tlInGFX, tlRequired
  50663. *getpathforexternals Determines the location at which the current configuration table and any other required external files will be expected.
  50664. *ffcgraphics_assign 
  50665. *getmemberdatascriptfxobject Instantiates FX object to provide memberdata-based script handling.
  50666. *fxmemberdatascriptclass_assign 
  50667. *fxmemberdatascriptclasslib_assign 
  50668. *fxmemberdatascriptmodule_assign 
  50669. *frxcursor_access 
  50670. *frxcursor_assign 
  50671. *loadfrxcursor_assign 
  50672. *memberdataalias_assign 
  50673. *creatememberdatacursor Creates a cursor in the FRX datasession to hold extended information about FRX data rows.
  50674. *runcollectorresetlevel_assign 
  50675. *getfrxrecno Determine the current FRX cursor row number from the parameters passed to a ReportListener event.
  50676. *getrotategfxobject Instantiates GFX object to provide memberdata-based rotation of layout controls.
  50677. *gfxrotateclass_assign 
  50678. *gfxrotateclasslib_assign 
  50679. *gfxrotatemodule_assign 
  50680. *removecollectionmember Provides a way to remove an FX or GFX object from FXListener's collections by object instance name or class name.
  50681. *reportstoprundatetime_access 
  50682. *reportstartrundatetime_access 
  50683. *evaluateuserexpression Attempts to evaluate a user-provided expression in various report run datasessions and return a valid result.
  50684. *gfxnorenderclass_assign 
  50685. *gfxnorenderclasslib_assign 
  50686. *gfxnorendermodule_assign 
  50687. *getnorendergfxobject Instantiates GFX object to provide memberdata-specified conditional baseclass rendering.
  50688. *ensurecollection Ensures valid object collections for GFXs and FXs member references.
  50689. *setgdiplusgraphics 
  50690. FRXDataSession = -1
  50691. fxs = (NULL)
  50692. gfxs = (NULL)
  50693. ffcgraphics = (NULL)
  50694. cancelrequested = .F.
  50695. fxfeedbackclass = ("FoxyTherm")
  50696. fxfeedbackclasslib = (THIS.ClassLibrary)
  50697. fxfeedbackmodule = ("")
  50698. classpath = ("")
  50699. fxmemberdatascriptclass = ("fxMemberDataScript")
  50700. fxmemberdatascriptclasslib = (THIS.ClassLibrary)
  50701. fxmemberdatascriptmodule = ("")
  50702. frxcursor = (NULL)
  50703. memberdataalias = ("M"+SYS(2015))
  50704. runcollectorresetlevel = 0
  50705. gfxrotateclass = ("gfxRotate")
  50706. gfxrotateclasslib = (THIS.ClassLibrary)
  50707. gfxrotatemodule = ("")
  50708. reportstoprundatetime = (DTOT({}))
  50709. reportstartrundatetime = (DTOT({}))
  50710. gfxnorenderclass = ("gfxNoRender")
  50711. gfxnorenderclasslib = (THIS.ClassLibrary)
  50712. gfxnorendermodule = ("")
  50713. nexternalgdiplusgfx = 0
  50714. _memberdata = 
  50715.     4075<VFPData><memberdata name="fxs" type="property" display="FXs" favorites="True"/><memberdata name="gfxs" type="property" display="GFXs" favorites="True"/><memberdata name="ffcgraphics" type="property" display="FFCGraphics" favorites="True"/><memberdata name="createhelperobjects" type="method" display="createHelperObjects"/><memberdata name="needgfxs" type="method" display="needGFXs"/><memberdata name="sendfx" type="method" display="sendFX"/><memberdata name="checkcollectionmembers" type="method" display="checkCollectionMembers"/><memberdata name="uppermethodname" type="method" display="upperMethodName" favorites="True"/><memberdata name="cancelrequested" type="property" display="cancelRequested"/><memberdata name="fxmemberdatascriptclass" type="property" display="fxMemberDataScriptClass" favorites="True"/><memberdata name="fxmemberdatascriptclasslib" type="property" display="fxMemberDataScriptClassLib" favorites="True"/><memberdata name="fxmemberdatascriptmodule" type="property" display="fxMemberDataScriptModule" favorites="True"/><memberdata name="fxfeedbackclass" type="property" display="fxFeedbackClass" favorites="True"/><memberdata name="fxfeedbackclasslib" type="property" display="fxFeedbackClassLib" favorites="True"/><memberdata name="fxfeedbackmodule" type="property" display="fxFeedbackModule" favorites="True"/><memberdata name="getmemberdatascriptfxobject" type="method" display="getMemberDataScriptFXObject" favorites="True"/><memberdata name="getfeedbackfxobject" type="method" display="getFeedbackFXObject" favorites="True"/><memberdata name="classpath" type="property" display="classPath" favorites="True"/><memberdata name="getobjectinstance" type="method" display="getObjectInstance" favorites="True"/>
  50716.     <memberdata name="checkcollectionforspecifiedmember" type="method" display="checkCollectionForSpecifiedMember" favorites="True"/><memberdata name="addcollectionmember" type="method" display="addCollectionMember" favorites="True"/>
  50717.     <memberdata name="getpathforexternals" type="method" display="getPathForExternals" favorites="True"/>
  50718.     <memberdata name="loadfrxcursor" type="property" display="loadFrxCursor" favorites="True"/>
  50719.     <memberdata name="frxcursor" type="property" display="frxCursor" favorites="True"/>
  50720.     <memberdata name="memberdataalias" type="property" display="memberDataAlias" favorites="True"/>
  50721.     <memberdata name="creatememberdatacursor" type="method" display="createMemberDataCursor"/><memberdata name="runcollectorresetlevel" type="property" favorites="True" display="runCollectorResetLevel"/><memberdata name="getfrxrecno" type="method" display="getFRXRecno" favorites="True"/><memberdata name="getrotategfxobject" type="method" display="getRotateGFXObject" favorites="True"/><memberdata name="gfxrotateclass" type="property" display="gfxRotateClass" favorites="True"/><memberdata name="gfxrotateclasslib" type="property" display="gfxRotateClassLib" favorites="True"/><memberdata name="gfxrotatemodule" type="property" display="gfxRotateModule" favorites="True"/><memberdata name="removecollectionmember" display="removeCollectionMember" type="method" favorites="True"/>
  50722.     <memberdata name="reportstartrundatetime" type="property" display="reportStartRunDatetime" favorites="True"/>
  50723.     <memberdata name="reportstoprundatetime" type="property" display="reportStopRunDatetime" favorites="True"/><memberdata name="evaluateuserexpression" display="evaluateUserExpression" type="method"/><memberdata name="getnorendergfxobject" type="method" display="getNoRenderGFXObject" favorites="True"/><memberdata name="gfxnorenderclass" type="property" display="gfxNoRenderClass" favorites="True"/><memberdata name="gfxnorenderclasslib" type="property" display="gfxNoRenderClassLib" favorites="True"/><memberdata name="gfxnorendermodule" type="property" display="gfxNoRenderModule" favorites="True"/><memberdata name="ensurecollection" type="method" display="ensureCollection"/>
  50724.     <memberdata name="setgdiplusgraphics" display="SetGdiPlusGraphics"/><memberdata name="nexternalgdiplusgfx" display="nExternalGdiPlusGfx"/></VFPData>
  50725. Name = "fxlistener"
  50726. ";lignoreerrors Provides a flag to determine how this class handles activities subsequent to an error.
  50727. appname Localizable application name string for use in user feedback.
  50728. isrunning Provides a flag to indicate whether a report run is underway.  When IsRunning is true, the class may wish to disallow certain activities or method calls.
  50729. lasterrormessage
  50730. isrunningreports Provides a flag to indicate this ReportListener is running a series of reports using its collection.
  50731. reportfilenames Stores the filenames of reports to be managed and executed in a series.
  50732. reportclauses Stores REPORT FORM command clauses associated with each report in the ReportFileNames collection.
  50733. listeners Collection of ReportListeners associated with each report in this Listener's ReportFileNames collection.
  50734. listenerdatasession Saves the DataSessionID in which the Listener originated.
  50735. reportusesprivatedatasession Provides a flag to indicate whether this report shares the data session from which it was executed or maintains a private data session.
  50736. issuccessor Indicates whether this Listener is chained to one or more others to provide output during a report run.  When .T., this Listener was not the object referenced in the REPORT FORM command OBJECT clauses.
  50737. successor An object reference to the next Listener in a succession chain.
  50738. sharedgdiplusgraphics Provides a readwrite copy of the the Engine's GDIPlusGraphics handle which the Listener can share with a succession chain.
  50739. sharedpageheight Shares information gathered by the GetPageHeight method with other Listeners linked in a succession chain.
  50740. sharedpagewidth Shares information gathered by the GetPageWidth method with other Listeners linked in a succession chain.
  50741. drivingalias Holds the alias of the table or cursor driving the report scope.
  50742. _memberdata XML Metadata for customizable properties
  50743. sharedoutputpagecount Provides a readwrite copy of the the Engine's OutputPageCount property which the Listener can share with a succession chain.
  50744. sharedpageno Provides a readwrite copy of the the Engine's PageNo property which the Listener can share with a succession chain.
  50745. sharedpagetotal Provides a readwrite copy of the the Engine's PageTotal property which the Listener can share with a succession chain.
  50746. pagelimit If > 0, represents the highest number of pages allowed in a report run (potentially across multiple reports using NOPAGEEJECT).  Especially useful for ListenerTypes 1 and 3, to avoid GDI resource issues, but can provide abbreviated results for any type
  50747. pagetoplimit If > 0, represents the highest number of pages for "top" section of report run (potentially across multiple reports using NOPAGEEJECT).   Use with pageTailLimit or alone. No user feedback provided.
  50748. pagetaillimit If > 0, represents the lowest number of pages for "tail" section of report run (potentially across multiple reports using NOPAGEEJECT).   Use with pageTopLimit or alone. No user feedback provided. 
  50749. pagelimitquietmode Indicates whether the class provides user feedback when the report results are limited because the run exceeded the specified pageLimit.
  50750. pagelimitinsiderange If .T., indicates that pageTopLimit and pageTailLimit provide an inside range rather than beginning and end of report contents.  Makes pageTopLimit and pageTailLimit similar to RANGE clause, but active over multiple reports with NOPAGEEJECT.
  50751. runcollector Placeholder available to hold extension output generated during a report run. Property may contain an alias for a cursor holding property names and values, a collection object reference, or an empty-type object reference.
  50752. frxheaderrecno Stores the header record number for the Windows platform in cross-platform FRXs.
  50753. sharedlistenertype Provides a readwrite copy of the the Engine's ListenerType property which the Listener can share with a succession chain.
  50754. commandclausesfile Allows saving and restoring of the original CommandClauses.File value by any derived class that permits dynamic FRX-fileswapping during LoadReport.
  50755. haderror Provides a flag indicating whether an error occurred.
  50756. cfoxydrivingalias
  50757. cfoxydrivingdatasession
  50758. nfoxydrivingdatasession
  50759. *allowmodalmessages_assign 
  50760. *lignoreerrors_assign 
  50761. *prepareerrormessage Organizes common error information values (nError, cMethod, nLine, cName, cMessage, cCodeLine) into a coherent string for presentation to the user.
  50762. *pushglobalsets Provides a hook for Listeners to save global settings not scoped to a data session for later restoration with PopGlobalSets.
  50763. *popglobalsets Provides a hook for Listeners to restore global settings not scoped to a data session after saving them with PushGlobalSets.
  50764. *clearerrors Resets the class's error status.
  50765. *getlasterrormessage Provides information about the last error that occurred.
  50766. *addreport Adds to the class's collection of ReportFileNames, optionally associating REPORT FORM clauses and a listener for the specified report.
  50767. *removereports Removes report filenames as well as associated clauses and listeners from this Listeners' various collections.
  50768. *runreports Executes a series of REPORT FORM commands according to the instructions in the ReportFileNames, ReportClauses, and Listeners collections.  Optionally clears collection after run and issues the REPORT FORM commands without OBJECTreferences.
  50769. *setfrxdatasessionenvironment Provides a hook for classes to determine the datasession-scoped SETs they wish to add to the private FRX data session.
  50770. ^reportpages[1,0] Holds accumulated page count  info when this class runs a collection of reports as a series. Can be used in report expressions or checked after a report run (if .removeReports has not been called).  Set in adjustReportPagesInfo.
  50771. *invokeoncurrentpass Provides a hook for listeners to evaluate whether they wish to generate output or perform other actions during the current report execution pass.
  50772. *resetdatasession Sets the DataSessionID to the session where the Listener originated.
  50773. *setfrxdatasession Sets the DataSessionID to the data session in which the Engine has opened a readonly copy of the report file as a table for the Listener's use.
  50774. *setcurrentdatasession Sets the DataSessionID to the data session holding report's data tables.
  50775. *quietmode_assign 
  50776. *issuccessor_assign 
  50777. *successor_assign 
  50778. *getfrxstartupinfo Provides a hook for gathering FRX information during BeforeReport method processing.
  50779. *setsuccessordynamicproperties Provides a hook for the Listener to share information changed by the Engine with a succession of Listeners, during the run of a report.
  50780. *appname_assign 
  50781. *sharedgdiplusgraphics_assign 
  50782. *sharedpageheight_assign 
  50783. *sharedpagewidth_assign 
  50784. *listenertype_assign 
  50785. *outputtype_assign 
  50786. *sharedoutputpagecount_assign Provides a readwrite copy of the the Engine's OutputPageCount property which the Listener can share with a succession chain.
  50787. *sharedpageno_assign 
  50788. *sharedpagetotal_assign 
  50789. *setfrxrunstartupconditions Hook method called in BeforeReport, allowing you to set up CommandClauses properties or other attributes required by your class.
  50790. *pagelimit_assign 
  50791. *pagetoplimit_assign 
  50792. *pagetaillimit_assign 
  50793. *pagelimitquietmode_assign 
  50794. *pagelimitinsiderange_assign 
  50795. *resetdynamicmethodcalls Evaluates whether AdjustObjectSize and EvaluateContents methods should be called for a report run, for this reportlistener's activity or as requested by Successor chain.
  50796. *resetcalladjustobjectsize Evaluates whether this reportlistener's activity requires calls to AdjustObjectSize method for any layout controls on this report run.
  50797. *resetcallevaluatecontents Evaluates whether this reportlistener's activity requires calls to EvaluateContents method for any layout controls on this report run.
  50798. *resetruncollector Abstract method to clean up runCollector object at whatever point is appropriate in a given implementation.
  50799. *fillruncollector Abstract method to set up up runCollector object with contents at whatever point is appropriate in a given implementation.
  50800. *sharedlistenertype_assign 
  50801. *commandclausesfile_assign 
  50802. *preparefrxswapcopy Provides an FRX copy on disk, in the same path/location as the original FRX if possible to support relative file references, for use during a report run.  Returns fully-qualified temporary file name it generates for the copy.
  50803. *removefrxswapcopy Removes an FRX file and its matching FRT file from disk, if present.
  50804. *isfrxswapcopypresent Indicates whether the original CommandClauses.File value has been swapped for a temporary copy during a report run.
  50805. *adjustreportpagesinfo Hook to allow subclasses to decide how to associate the page numbers for each report in a collection with the member array representing page numbers, during the runReports method.
  50806. *shellexec 
  50807. *preparewatermark 
  50808. Height = 23
  50809. Width = 23
  50810. FRXDataSession = -1
  50811. AllowModalMessages = (INLIST(_VFP.Startmode, 0, 4))
  50812. QuietMode = (NOT INLIST(_VFP.Startmode, 0, 4))
  50813. appname = ("VFP Report Listener")
  50814. lasterrormessage = ("")
  50815. reportfilenames = (NULL)
  50816. reportclauses = (NULL)
  50817. listeners = (NULL)
  50818. listenerdatasession = 1
  50819. successor = (NULL)
  50820. sharedgdiplusgraphics = 0
  50821. sharedpageheight = 0
  50822. sharedpagewidth = 0
  50823. drivingalias = ("")
  50824. _memberdata = 
  50825.     5455<VFPData><memberdata name="addreport" type="method" display="addReport" favorites="True"/><memberdata name="appname" type="property" display="appName" favorites="True"/><memberdata name="clearerrors" type="method" display="clearErrors" favorites="True"/><memberdata name="drivingalias" type="property" display="drivingAlias" favorites="False"/><memberdata name="getfrxstartupinfo" type="method" display="getFRXStartupInfo" favorites="False"/><memberdata name="getlasterrormessage" type="method" display="getLastErrorMessage" favorites="True"/><memberdata name="invokeoncurrentpass" type="method" display="invokeOnCurrentPass" favorites="True"/><memberdata name="isrunning" type="property" display="isRunning" favorites="False"/><memberdata name="isrunningreports" type="property" display="isRunningReports" favorites="False"/><memberdata name="issuccessor" type="property" display="isSuccessor" favorites="True"/><memberdata name="lasterrormessage" type="property" display="lastErrorMessage" favorites="False"/><memberdata name="lignoreerrors" type="property" display="lIgnoreErrors" favorites="False"/><memberdata name="listeners" type="property" display="listeners" favorites="False"/><memberdata name="popglobalsets" type="method" display="popGlobalSets" favorites="False"/><memberdata name="prepareerrormessage" type="method" display="prepareErrorMessage" favorites="True"/><memberdata name="pushglobalsets" type="method" display="pushGlobalSets" favorites="False"/><memberdata name="removereports" type="method" display="removeReports" favorites="True"/><memberdata name="reportclauses" type="property" display="reportClauses" favorites="False"/><memberdata name="reportfilenames" type="property" display="reportFilenames" favorites="False"/><memberdata name="reportpages" type="property" display="reportPages" favorites="False"/><memberdata name="reportusesprivatedatasession" type="property" display="reportUsesPrivateDataSession" favorites="True"/><memberdata name="resetdatasession" type="method" display="resetDataSession" favorites="False"/><memberdata name="runreports" type="method" display="runReports" favorites="True"/><memberdata name="setcurrentdatasession" type="method" display="setCurrentDataSession" favorites="False"/><memberdata name="setfrxdatasession" type="method" display="setFRXDataSession" favorites="False"/><memberdata name="setfrxdatasessionenvironment" type="method" display="setFRXDataSessionEnvironment" favorites="False"/><memberdata name="setsuccessordynamicproperties" type="method" display="setSuccessorDynamicProperties" favorites="True"/><memberdata name="sharedgdiplusgraphics" type="property" display="sharedGdiplusGraphics" favorites="True"/><memberdata name="sharedpagetotal" type="property" display="sharedPageTotal" favorites="True"/><memberdata name="sharedoutputpagecount" type="property" display="sharedOutputPageCount" favorites="True"/><memberdata name="sharedpageno" type="property" display="sharedPageNo" favorites="True"/><memberdata name="sharedpageheight" type="property" display="sharedPageHeight" favorites="True"/><memberdata name="sharedpagewidth" type="property" display="sharedPageWidth" favorites="True"/><memberdata name="listenerdatasession" type="property" display="listenerDataSession" favorites="False"/><memberdata name="successor" type="property" display="successor" favorites="True"/><memberdata name="setfrxrunstartupconditions" type="method" display="setFRXRunStartupConditions"/><memberdata name="pagelimit" type="property" display="pageLimit" favorites="True"/><memberdata name="pagetoplimit" type="property" display="pageTopLimit" favorites="True"/><memberdata name="pagetaillimit" type="property" display="pageTailLimit" favorites="True"/><memberdata name="pagelimitquietmode" type="property" display="pageLimitQuietMode" favorites="True"/><memberdata name="pagelimitinsiderange" type="property" display="pageLimitInsideRange" favorites="True"/><memberdata name="resetdynamicmethodcalls" type="method" display="resetDynamicMethodCalls"/><memberdata name="resetcallevaluatecontents" type="method" display="resetCallEvaluateContents"/><memberdata name="resetcalladjustobjectsize" type="method" display="resetCallAdjustObjectSize"/><memberdata name="runcollector" display="runCollector" type="property" favorites="True"/><memberdata name="resetruncollector" display="resetRunCollector" type="method"/><memberdata name="fillruncollector" display="fillRunCollector" type="method"/><memberdata name="frxheaderrecno" display="frxHeaderRecno" type="property"/><memberdata name="sharedlistenertype" display="sharedListenerType" type="property"/><memberdata name="commandclausesfile" display="commandClausesFile" type="property" favorites="True"/><memberdata name="preparefrxswapcopy" display="prepareFRXSwapCopy" type="method"/><memberdata name="removefrxswapcopy" display="removeFRXSwapCopy" type="method"/>
  50826.     <memberdata name="isfrxswapcopypresent" display="isFRXSwapCopyPresent" type="method"/>
  50827.     <memberdata name="adjustreportpagesinfo" display="adjustReportPagesInfo" type="method"/>
  50828.     <memberdata name="haderror" display="hadError"/><memberdata name="shellexec" display="ShellExec"/><memberdata name="cfoxydrivingalias" display="cFoxyDrivingAlias"/><memberdata name="cfoxydrivingdatasession" display="cFoxyDrivingDataSession"/><memberdata name="nfoxydrivingdatasession" display="nFoxyDrivingDataSession"/><memberdata name="preparewatermark" display="PrepareWaterMark"/></VFPData>
  50829. sharedoutputpagecount = 0
  50830. sharedpageno = 0
  50831. sharedpagetotal = 0
  50832. pagelimit = -1
  50833. pagetoplimit = -1
  50834. pagetaillimit = -1
  50835. pagelimitquietmode = .F.
  50836. pagelimitinsiderange = .F.
  50837. runcollector = (NULL)
  50838. frxheaderrecno = 1
  50839. sharedlistenertype = -1
  50840. commandclausesfile = .NULL.
  50841. haderror = .F.
  50842. cfoxydrivingalias = 
  50843. cfoxydrivingdatasession = 
  50844. nfoxydrivingdatasession = 0
  50845. Name = "_reportlistener"
  50846. ^5PROCEDURE createtherm
  50847. #define CTLCOLOR_MSGBOX             0
  50848. #define CTLCOLOR_EDIT               1
  50849. #define CTLCOLOR_LISTBOX            2
  50850. #define CTLCOLOR_BTN                3
  50851. #define CTLCOLOR_DLG                4
  50852. #define CTLCOLOR_SCROLLBAR          5
  50853. #define CTLCOLOR_STATIC             6
  50854. #define CTLCOLOR_MAX                7
  50855. #define COLOR_SCROLLBAR             0
  50856. #define COLOR_BACKGROUND            1
  50857. #define COLOR_ACTIVECAPTION         2
  50858. #define COLOR_INACTIVECAPTION       3
  50859. #define COLOR_MENU                  4
  50860. #define COLOR_WINDOW                5
  50861. #define COLOR_WINDOWFRAME           6
  50862. #define COLOR_MENUTEXT              7
  50863. #define COLOR_WINDOWTEXT            8
  50864. #define COLOR_CAPTIONTEXT           9
  50865. #define COLOR_ACTIVEBORDER         10
  50866. #define COLOR_INACTIVEBORDER       11
  50867. #define COLOR_APPWORKSPACE         12
  50868. #define COLOR_HIGHLIGHT            13
  50869. #define COLOR_HIGHLIGHTTEXT        14
  50870. #define COLOR_BTNFACE              15
  50871. #define COLOR_BTNSHADOW            16
  50872. #define COLOR_GRAYTEXT             17
  50873. #define COLOR_BTNTEXT              18
  50874. #define COLOR_INACTIVECAPTIONTEXT  19
  50875. #define COLOR_BTNHIGHLIGHT         20
  50876. #if("4" $ OS())
  50877. #define COLOR_3DDKSHADOW           21
  50878. #define COLOR_3DLIGHT              22
  50879. #define COLOR_INFOTEXT             23
  50880. #define COLOR_INFOBK               24
  50881. #define COLOR_DESKTOP           COLOR_BACKGROUND
  50882. #define COLOR_3DFACE            COLOR_BTNFACE
  50883. #define COLOR_3DSHADOW          COLOR_BTNSHADOW
  50884. #define COLOR_3DHIGHLIGHT       COLOR_BTNHIGHLIGHT
  50885. #define COLOR_3DHILIGHT         COLOR_BTNHIGHLIGHT
  50886. #define COLOR_BTNHILIGHT        COLOR_BTNHIGHLIGHT
  50887. #endif
  50888. IF ISNULL(THIS.ThermForm)
  50889.   DECLARE INTEGER GetSysColor IN Win32API INTEGER  
  50890.   LOCAL m.liThermTop, m.liThermLeft, m.liThermWidth, m.liThermHeight, m.liSession
  50891.   m.liSession = SET("DATASESSION")  
  50892.   THIS.resetDataSession()
  50893.   THIS.ThermForm = CREATEOBJECT("FORM")
  50894.   WITH THIS.ThermForm
  50895.      .ScaleMode = SCALEMODE_PIXELS   
  50896.      .Height = THIS.ThermFormHeight
  50897.      .HalfHeightCaption = .T.
  50898.      .Width = THIS.ThermFormWidth
  50899.      .AutoCenter = .T.
  50900.      .BorderStyle = BORDER_DOUBLE  && fixed dialog
  50901.      .ControlBox = .F.
  50902.      .Closable = (NOT THIS.IsRunning)
  50903.      .MaxButton = .F.
  50904.      .MinButton = .F.
  50905.      .Movable = (NOT THIS.IsRunning)
  50906.      .AlwaysOnTop = .T.
  50907.      .AllowOutput = .F.
  50908.      .AddObject("ThermBack","shape")
  50909.      .AddObject("ThermLabel","label")
  50910.      .AddObject("ThermShape","shape")
  50911.      m.liThermHeight = .Height - (THIS.ThermMargin* 2)
  50912.      m.liThermWidth =  .Width - (THIS.ThermMargin*2)
  50913.   ENDWITH
  50914.   THIS.setCurrentDataSession()
  50915.   THIS.SetThermFormCaption()    
  50916.   m.liThermTop = THIS.ThermMargin
  50917.   m.liThermLeft = THIS.ThermMargin  
  50918.   WITH THIS.ThermForm.ThermBack
  50919.      .Top = m.liThermTop     
  50920.      .Left = m.liThermLeft
  50921.      .Height = m.liThermHeight
  50922.      .Width = m.liThermWidth
  50923.      .Visible = .T.
  50924.      .BorderStyle = BORDER_SINGLE
  50925.      .BackStyle = 0     
  50926.   ENDWITH
  50927.   WITH THIS.ThermForm.ThermLabel
  50928.      .Top = (.Parent.Height - .Height) /2
  50929.      .Autosize = .T.
  50930.      .BackStyle = FILLSTYLE_SOLID      
  50931.      .Caption = ""
  50932.      .Visible = .T.
  50933.      .ForeColor = GetSysColor( COLOR_MENUTEXT )
  50934.   ENDWITH
  50935.   WITH THIS.ThermForm.ThermShape
  50936.      .Top = m.liThermTop +1    
  50937.      .Left = m.liThermLeft+1
  50938.      .Height = m.liThermHeight -2
  50939.      .Width = 0
  50940.      .Visible = .T.
  50941.      .BorderStyle = BORDER_NONE
  50942.      .BackStyle = FILLSTYLE_SOLID         
  50943.      .FillStyle = FILLSTYLE_SOLID    
  50944.      .BackColor = .Parent.BackColor
  50945.      .FillColor = GetSysColor(COLOR_HIGHLIGHT)
  50946.      .DrawMode = DRAWMODE_MERGE_PEN_NOT 
  50947.   ENDWITH
  50948.   SET DATASESSION TO (m.liSession)
  50949. ENDIF
  50950. RETURN NOT ISNULL(THIS.ThermForm)
  50951. ENDPROC
  50952. PROCEDURE secondstext_assign
  50953. LPARAMETERS m.vNewVal
  50954. IF VARTYPE(m.vNewVal) = "C"
  50955.    THIS.SecondsText = m.vNewVal
  50956. ENDIF   
  50957. ENDPROC
  50958. PROCEDURE thermformcaption_assign
  50959. LPARAMETERS m.vNewVal
  50960. IF VARTYPE(m.vNewVal) = "C"
  50961.    THIS.ThermFormCaption = m.vNewVal
  50962.    THIS.SetThermFormCaption()
  50963. ENDIF   
  50964. ENDPROC
  50965. PROCEDURE thermformheight_assign
  50966. LPARAMETERS m.vNewVal
  50967. IF (NOT THIS.IsRunning) AND VARTYPE(m.vNewVal) = "N" AND ;
  50968.    BETWEEN(m.vNewVal,30,SYSMETRIC(SYSMETRIC_SCREENHEIGHT )-30)  AND ;
  50969.    INT(m.vNewVal) # THIS.ThermFormHeight
  50970.    THIS.thermformheight = INT(m.vNewVal)
  50971.    IF THIS.ThermMargin > THIS.ThermFormHeight/4
  50972.       THIS.ThermMargin = THIS.ThermFormHeight/4
  50973.    ENDIF   
  50974.    THIS.thermForm = NULL
  50975. ENDIF   
  50976. ENDPROC
  50977. PROCEDURE thermformwidth_assign
  50978. LPARAMETERS m.vNewVal
  50979. IF (NOT THIS.IsRunning) AND VARTYPE(m.vNewVal) = "N" AND ;
  50980.    BETWEEN(m.vNewVal,100,SYSMETRIC( SYSMETRIC_SCREENWIDTH  )-100) AND ;
  50981.    INT(m.vNewVal) # THIS.ThermFormWidth 
  50982.    THIS.thermformwidth = INT(m.vNewVal)
  50983.    IF THIS.ThermMargin > THIS.ThermFormWidth/4
  50984.       THIS.ThermMargin = THIS.ThermFormWidth/4
  50985.    ENDIF   
  50986.    THIS.ThermForm = NULL
  50987. ENDIF   
  50988. ENDPROC
  50989. PROCEDURE thermmargin_assign
  50990. LPARAMETERS m.vNewVal
  50991. IF (NOT THIS.IsRunning) AND VARTYPE(m.vNewVal) = "N" AND ;
  50992.    BETWEEN(m.vNewVal,1,MIN(THIS.ThermFormHeight/4,THIS.ThermFormWidth/4)) AND ;
  50993.    INT(m.vNewVal) # THIS.ThermMargin
  50994.    THIS.thermmargin = INT(m.vNewVal)
  50995.    THIS.thermForm = NULL
  50996. ENDIF   
  50997. ENDPROC
  50998. PROCEDURE includeseconds_assign
  50999. LPARAMETERS m.vNewVal
  51000. IF VARTYPE(m.vNewVal) = "L"
  51001.    THIS.includeseconds = m.vNewVal
  51002. ENDIF   
  51003. ENDPROC
  51004. PROCEDURE getparentwindowref
  51005. LOCAL m.loForm, m.loTopForm, m.lcInWindow
  51006. * first top form in the list
  51007. * will be the current top form.
  51008. ASSERT TYPE("_SCREEN.ActiveForm") # "O"  OR ;
  51009.        INLIST(_SCREEN.ActiveForm.ShowWindow, 0,1,2)
  51010. m.loTopForm = NULL
  51011. IF TYPE("THIS.CommandClauses.InWindow") = "C"
  51012.    m.lcInWindow = UPPER(ALLTRIM(THIS.CommandClauses.InWindow))
  51013. ENDIF   
  51014. IF EMPTY(lcInWindow) AND TYPE("THIS.CommandClauses.Window") = "C"
  51015.    m.lcInWindow = UPPER(ALLTRIM(THIS.CommandClauses.Window))
  51016. ENDIF   
  51017. IF NOT EMPTY(m.lcInWindow) 
  51018.      FOR EACH m.loForm IN _SCREEN.Forms  FOXOBJECT
  51019.         IF m.loForm.ShowWindow = 2  AND ;
  51020.            UPPER(m.loForm.Name) == m.lcInWindow
  51021.            m.loTopForm = m.loForm
  51022.            EXIT
  51023.         ENDIF
  51024.      ENDFOR
  51025.      
  51026. ENDIF
  51027. DO CASE
  51028. CASE VARTYPE(m.loTopForm) = "O"
  51029.     * already found
  51030. CASE _SCREEN.FormCount = 0 OR ;
  51031.      (TYPE("_SCREEN.ActiveForm") = "O" AND ;
  51032.      _SCREEN.ActiveForm.ShowWindow = 0 )     && ShowWindow In Screen
  51033.              
  51034.      m.loTopForm = _SCREEN
  51035. CASE (TYPE("_SCREEN.ActiveForm") = "O" AND ;
  51036.       _SCREEN.ActiveForm.ShowWindow = 2 )    && ShowWindow As Top Form
  51037.      m.loTopForm = _SCREEN.ActiveForm
  51038.              
  51039. OTHERWISE 
  51040.                                                
  51041.      FOR EACH m.loForm IN _SCREEN.Forms  FOXOBJECT
  51042.         IF m.loForm.ShowWindow = 2 
  51043.            m.loTopForm = m.loForm
  51044.            EXIT
  51045.         ENDIF
  51046.      ENDFOR
  51047.              
  51048.      IF VARTYPE(m.loTopForm) # "O"
  51049.         m.loTopForm = _SCREEN
  51050.      ENDIF
  51051.                   
  51052. ENDCASE
  51053. IF VARTYPE(m.loTopForm) # "O" OR ;
  51054.    EMPTY(m.loTopForm.Name)
  51055.    m.loTopForm = NULL
  51056. ENDIF
  51057. RETURN m.loTopForm     
  51058. ENDPROC
  51059. PROCEDURE setthermformcaption
  51060. IF NOT ISNULL(THIS.ThermForm)
  51061.    IF EMPTY(THIS.ThermFormCaption)
  51062.       
  51063.       IF TYPE("THIS.CommandClauses.File") = "C"
  51064.          LOCAL m.cName
  51065.          IF EMPTY(THIS.PrintJobName)
  51066.             m.cName = PROPER(JUSTFNAME(THIS.CommandClauses.File))
  51067.          ELSE
  51068.             m.cName = THIS.PrintJobName
  51069.          ENDIF   
  51070.          THIS.ThermForm.Caption = ;
  51071.             m.cName + ": " + OUTPUTCLASS_CANCEL_INSTRUCTIONS_LOC
  51072.       ELSE
  51073.          THIS.ThermForm.Caption = ""
  51074.       ENDIF
  51075.    ELSE   
  51076.       THIS.ThermForm.Caption = THIS.ThermFormCaption
  51077.    ENDIF
  51078. ENDIF   
  51079. ENDPROC
  51080. PROCEDURE thermcaption_assign
  51081. LPARAMETERS m.vNewVal
  51082. IF VARTYPE(m.vNewVal) = "C"
  51083.    LOCAL m.lcType, m.cMessage
  51084.    m.cMessage = ""
  51085.    TRY 
  51086.     m.lcType = VARTYPE(EVALUATE(m.vNewVal))
  51087.       IF m.lcType = "C"
  51088.         THIS.ThermCaption = m.vNewVal
  51089.     ENDIF
  51090.    CATCH 
  51091.    ENDTRY     
  51092. ENDIF   
  51093. ENDPROC
  51094. PROCEDURE initstatustext_assign
  51095. LPARAMETERS m.vNewVal
  51096. IF VARTYPE(m.vNewVal) = "C"
  51097.    THIS.InitStatusText = m.vNewVal
  51098. ENDIF   
  51099. ENDPROC
  51100. PROCEDURE prepassstatustext_assign
  51101. LPARAMETERS m.vNewVal
  51102. IF VARTYPE(m.vNewVal) = "C"
  51103.    THIS.PrepassStatusText = m.vNewVal
  51104. ENDIF   
  51105. ENDPROC
  51106. PROCEDURE runstatustext_assign
  51107. LPARAMETERS m.vNewVal
  51108. IF VARTYPE(m.vNewVal) = "C"
  51109.    THIS.RunStatusText = m.vNewVal
  51110. ENDIF   
  51111. ENDPROC
  51112. PROCEDURE resetuserfeedback
  51113. LPARAMETERS m.tlResetTimes
  51114. THIS.CurrentRecord = 0
  51115. THIS.PercentDone = 0
  51116. IF m.tlResetTimes
  51117.    THIS.ReportStartRunDateTime= DATETIME()
  51118.    THIS.ReportStopRunDateTime= DTOT({})
  51119. ENDIF   
  51120. ENDPROC
  51121. PROCEDURE getreportscopedriver
  51122. LOCAL m.liSelect, m.lcAlias, ;
  51123.       m.liSkips,  laSkips[1]
  51124. THIS.designatedDriver = THIS.drivingAlias
  51125. * used later if we have to cancel report as
  51126. * a Successor
  51127. THIS.setFRXDataSession()
  51128. IF USED("frx")
  51129.    m.liSelect = SELECT(0)
  51130.    m.lcAlias = ""
  51131.    SELECT FRX
  51132.    * first look for any target alias that
  51133.    * is the same as the driver
  51134.    SCAN ALL FOR ObjType = FRX_OBJTYP_BAND AND ;
  51135.            Objcode = FRX_OBJCOD_DETAIL AND ;
  51136.            TYPE(Expr) = "C" AND ;
  51137.            NOT (EMPTY(Expr)  OR DELETED())
  51138.        m.lcAlias = ALLTRIM(Expr)
  51139.        THIS.setCurrentDataSession()
  51140.        m.lcAlias = UPPER(EVALUATE(m.lcAlias)) 
  51141.        THIS.setFRXDataSession()
  51142.        IF m.lcAlias == UPPER(THIS.drivingAlias)
  51143.           EXIT
  51144.        ENDIF
  51145.    ENDSCAN
  51146.    IF m.lcAlias == UPPER(THIS.drivingAlias)
  51147.       SELECT (m.liSelect)
  51148.       * if the driver is also a target alias,
  51149.       * don't touch.
  51150.       * otherwise:
  51151.    ELSE 
  51152.       LOCATE FOR ObjType = FRX_OBJTYP_BAND AND ;
  51153.               Objcode = FRX_OBJCOD_DETAIL AND ;
  51154.               Platform = FRX_PLATFORM_WINDOWS AND ;
  51155.               NOT (EMPTY(Expr) OR DELETED())
  51156.       IF FOUND()
  51157.          * use the first detail band, on the theory
  51158.          * that people are going to put pre-processing 
  51159.          * calculations before other bands, 
  51160.          * so an early band has the best chance to be
  51161.          * the right driver.
  51162.          m.lcAlias = ALLTRIM(Expr)
  51163.          THIS.setCurrentDataSession()
  51164.          THIS.drivingAlias = UPPER(EVALUATE(m.lcAlias))
  51165.          THIS.setFRXDataSession()
  51166.          SELECT (m.liSelect)
  51167.       ELSE   
  51168.          * adjust the driver based on any
  51169.          * one to many relationships we can find.
  51170.          SELECT (m.liSelect)
  51171.          THIS.setCurrentDataSession()
  51172.          m.lcAlias = THIS.drivingAlias
  51173.          m.liSelect = SELECT(0)
  51174.          DO WHILE NOT EMPTY(m.lcAlias)
  51175.             SELECT (m.lcAlias)
  51176.             m.liSkips = ALINES(laSkips,SET("SKIP"),",")
  51177.             IF m.liSkips = 0 OR EMPTY(laSkips[1])
  51178.                THIS.drivingAlias = m.lcAlias
  51179.                m.lcAlias = ""
  51180.             ELSE
  51181.                m.lcAlias = laSkips[1]
  51182.                * it doesn't really matter how many lines there
  51183.                * are in the array; this is not going to be perfect
  51184.                * but we can't predict which child 
  51185.                * has the most records.
  51186.             ENDIF
  51187.          ENDDO
  51188.          SELECT (m.liSelect)
  51189.       ENDIF   
  51190.    ENDIF  
  51191.    RETURN .F.    
  51192. ENDIF
  51193. ENDPROC
  51194. PROCEDURE synchstatus
  51195. LPARAMETERS m.nBandObjCode, m.nFRXRecNo
  51196. IF THIS.isRunning AND (NOT THIS.hadError) AND ;
  51197.    THIS.frxBandRecno = m.nFRXRecNo
  51198.    THIS.setCurrentDataSession() 
  51199.    IF THIS.drivingAliasCurrentRecno  # RECNO(THIS.drivingAlias)
  51200.       THIS.currentRecord = THIS.CurrentRecord + 1
  51201.       THIS.drivingAliasCurrentRecno = RECNO(THIS.drivingAlias)
  51202.    ENDIF   
  51203.    IF THIS.currentRecord >= THIS.CommandClauses.RecordTotal
  51204.       IF THIS.CurrentPass = 0 AND THIS.TwoPassProcess
  51205.          THIS.resetUserFeedback() 
  51206.       ELSE
  51207.          THIS.currentRecord = THIS.CommandClauses.RecordTotal
  51208.       ENDIF
  51209.    ENDIF
  51210.    THIS.UpdateStatus()
  51211.    THIS.resetDataSession()
  51212. ENDIF  
  51213. ENDPROC
  51214. PROCEDURE thermprecision_assign
  51215. LPARAMETERS m.vNewVal
  51216. IF VARTYPE(m.vNewVal) = "N" 
  51217.    THIS.thermPrecision  = ABS(INT(m.vNewVal))
  51218. ENDIF 
  51219. ENDPROC
  51220. PROCEDURE setfrxrunstartupconditions
  51221. DODEFAULT()
  51222. IF TYPE("THIS.CommandClauses.Summary") # "L"
  51223.    ADDPROPERTY(THIS.CommandClauses,"Summary",.F.)
  51224. ENDIF   
  51225. IF TYPE("THIS.CommandClauses.RecordTotal") # "N"
  51226.    ADDPROPERTY(THIS.CommandClauses,"RecordTotal",0)
  51227. ENDIF   
  51228. ENDPROC
  51229. PROCEDURE BeforeBand
  51230. LPARAMETERS m.nBandObjCode, m.nFRXRecNo
  51231. DODEFAULT(m.nBandObjCode, m.nFRXRecNo)
  51232. IF THIS.successorSys2024 = "Y" AND ;
  51233.    THIS.CurrentPass = LISTENER_FULLPASS
  51234.    * user cancelled during the prepass,
  51235.    * we need to re-cancel.
  51236.    THIS.setCurrentDataSession()
  51237.    IF USED(THIS.designatedDriver)
  51238.       GO BOTTOM IN (THIS.designatedDriver)
  51239.    ENDIF   
  51240. ENDIF   
  51241. THIS.synchStatus(m.nBandObjCode,m.nFRXRecNo)
  51242. THIS.resetDataSession()
  51243. ENDPROC
  51244. PROCEDURE UnloadReport
  51245. IF THIS.IsRunning
  51246.    THIS.IsRunning = .F.
  51247.    THIS.PopGlobalSets()
  51248. ENDIF   
  51249. THIS.ReportStopRunDateTime = DATETIME()
  51250. THIS.ClearStatus() 
  51251. THIS.ThermForm = NULL  
  51252. DODEFAULT()
  51253. THIS.resetDataSession()
  51254. ENDPROC
  51255. PROCEDURE DoStatus
  51256. LPARAMETERS m.cMessage
  51257. LOCAL m.loParentForm, m.lcCaption, m.lcParentFormName
  51258. NODEFAULT
  51259. IF (NOT (THIS.QuietMode or ;
  51260.    (THIS.IsRunning AND THIS.CommandClauses.NoDialog)))
  51261.    IF EMPTY(m.cMessage) OR ISNULL(m.cMessage)
  51262.       m.cMessage = ""
  51263.    ENDIF
  51264.    m.lcCaption = EVALUATE(THIS.ThermCaption)
  51265.    IF ((NOT ISNULL(THIS.ThermForm)) OR (THIS.CreateTherm()) )
  51266.       WITH THIS.ThermForm
  51267.       
  51268.          IF THIS.IsRunning
  51269.             .Closable = .F.
  51270.             .Movable = .F.
  51271.          ENDIF
  51272.       
  51273.         .ThermShape.Width = MAX( (((THIS.PercentDone/100) * .ThermBack.Width)-2) ,0)
  51274.       
  51275.         IF NOT .Visible
  51276.         
  51277.            m.loParentForm = THIS.GetParentWindowRef()
  51278.            
  51279.            DO CASE
  51280.            CASE VARTYPE(m.loParentForm) # "O" AND (NOT _SCREEN.Visible)
  51281.               m.lcParentFormName = "MACDESKTOP"
  51282.            CASE VARTYPE(m.loParentForm) # "O"
  51283.               m.lcParentFormName = "SCREEN"              
  51284.            CASE (NOT m.loParentForm.Visible) AND ;
  51285.               (m.loParentForm.DeskTop OR NOT EMPTY(m.loParentForm.MacDesktop) OR ;
  51286.               m.loParentForm.ShowWindow = 2 OR (NOT _SCREEN.Visible))
  51287.               * in many cases, 
  51288.               * they've probably made a programming error,
  51289.               * the parent should be visible according to
  51290.               * the requirements of REPORT FORM ... IN WINDOW
  51291.               * if it's a WINDOW clause they
  51292.               * have no need to show it, might not be an error
  51293.               * Either way, they should see the therm
  51294.               * to know that the report is progressing                
  51295.               m.lcParentFormName = "MACDESKTOP"
  51296.            CASE (NOT m.loParentForm.Visible) 
  51297.               * same comment as above
  51298.               m.lcParentFormName = "SCREEN"
  51299.            OTHERWISE
  51300.               m.lcParentFormName = m.loParentForm.Name
  51301.            ENDCASE
  51302.            
  51303.            SHOW WINDOW (.Name) IN WINDOW (m.lcParentFormName) 
  51304.            .AlwaysOnTop = .T.
  51305.            .AutoCenter = .T.
  51306.            .Visible = .T.
  51307.         
  51308.         ENDIF
  51309.         .ThermLabel.Visible = .F.
  51310.         .ThermLabel.Caption = m.lcCaption     
  51311.         .ThermLabel.Left = (.Width - .ThermLabel.Width) /2  && must be after visible        
  51312.         .ThermLabel.Visible = .T.     
  51313.       
  51314.       ENDWITH
  51315.    ENDIF
  51316. ENDIF   
  51317. ENDPROC
  51318. PROCEDURE ClearStatus
  51319. NODEFAULT
  51320. IF NOT ISNULL(THIS.ThermForm) 
  51321.    IF THIS.ThermForm.Visible
  51322.       THIS.ThermForm.Visible = .F.
  51323.    ENDIF
  51324. ENDIF
  51325. IF NOT ISNULL(THIS.Successor)
  51326.    THIS.Successor.ClearStatus()
  51327. ENDIF
  51328. ENDPROC
  51329. PROCEDURE BeforeReport
  51330. DODEFAULT()
  51331. * THIS.ResetUserFeedback(.T.)
  51332. THIS.DrivingAliasCurrentRecno = 0
  51333. THIS.IsRunning = .T.
  51334. THIS.resetDataSession()
  51335. ENDPROC
  51336. PROCEDURE Init
  51337. IF DODEFAULT() 
  51338.    THIS.InitStatusText = OUTPUTCLASS_INITSTATUS_LOC
  51339.    THIS.PrepassStatusText = OUTPUTCLASS_PREPSTATUS_LOC
  51340.    THIS.RunStatusText =  OUTPUTCLASS_RUNSTATUS_LOC
  51341.    THIS.SecondsText = OUTPUTCLASS_TIME_SECONDS_LOC
  51342.    THIS.thermCaption = OUTPUTCLASS_THERMCAPTION_LOC 
  51343.    RETURN (NOT THIS.HadError)
  51344.    RETURN .F.
  51345. ENDIF
  51346. ENDPROC
  51347. PROCEDURE AfterReport
  51348. IF SYS(2024) # "Y" 
  51349.    IF THIS.IsRunning OR TYPE("THIS.CommandClauses.RecordTotal") = "N"
  51350.       THIS.CurrentRecord = THIS.CommandClauses.RecordTotal
  51351.    ENDIF   
  51352.    THIS.UpdateStatus() 
  51353. ENDIF
  51354. THIS.IsRunning = .F.
  51355. THIS.ClearStatus() 
  51356. THIS.designatedDriver = ""
  51357. THIS.successorSys2024 = "N"
  51358. THIS.ThermForm = NULL  
  51359. THIS.ReportStopRunDateTime = DATETIME()
  51360. THIS.PopGlobalSets()
  51361. DODEFAULT()
  51362. ENDPROC
  51363. PROCEDURE CancelReport
  51364. IF THIS.IsRunning AND ;
  51365.    (THIS.QuietMode OR ;
  51366.    (THIS.pageLimit > 0 AND THIS.PageNo > THIS.pageLimit) OR ;
  51367.     (NOT THIS.AllowModalMessages) OR ;
  51368.     THIS.DoMessage(OUTPUTCLASS_REPORT_CANCELQUERY_LOC,;
  51369.                    MB_ICONQUESTION+MB_YESNO) =  IDYES )
  51370.    IF THIS.isSuccessor AND NOT EMPTY(THIS.designatedDriver)
  51371.       * make an exception for this Listener
  51372.       * to the rule that Successors don't 
  51373.       * handle cancelling the report, because
  51374.       * this guy's job is to handle user intervention:
  51375.       THIS.successorSys2024 = "Y"
  51376.       LOCAL m.liSession
  51377.       m.liSession = SET("DATASESSION")
  51378.       THIS.setCurrentDataSession()
  51379.       IF USED(THIS.designatedDriver)
  51380.          GO BOTTOM IN (THIS.designatedDriver)
  51381.       ENDIF   
  51382.       SET DATASESSION TO (m.liSession)
  51383.    ENDIF
  51384.       
  51385.    DODEFAULT() 
  51386.    IF SYS(2024) = "Y"  OR THIS.IsSuccessor
  51387.       THIS.ThermForm = NULL
  51388.       IF (THIS.pageLimit = -1 OR THIS.PageNo <= THIS.pageLimit)
  51389.          THIS.DoMessage(OUTPUTCLASS_REPORT_INCOMPLETE_LOC, ;
  51390.                         MB_ICONEXCLAMATION)
  51391.          THIS.lastErrorMessage = OUTPUTCLASS_REPORT_INCOMPLETE_LOC                        
  51392.       ENDIF                        
  51393.    ENDIF
  51394.    NODEFAULT   
  51395. ENDIF
  51396. ENDPROC
  51397. PROCEDURE pushglobalsets
  51398. DODEFAULT()
  51399. IF (NOT INLIST(_VFP.StartMode,2,3,5))
  51400.    PUSH KEY CLEAR
  51401.    LOCAL m.lcRef
  51402.    SET MESSAGE TO ""
  51403.    THIS.SetNotifyCursor = (SET("Notify",2) = "ON")
  51404.    IF THIS.SetNotifyCursor
  51405.       SET NOTIFY CURSOR OFF
  51406.    ENDIF   
  51407.    THIS.OnEscapeCommand = ON("ESCAPE")   
  51408.    m.lcRef = SYS(2015)   
  51409.    PUBLIC &lcRef.   
  51410.    STORE THIS TO (m.lcRef)
  51411.    ON ESCAPE &lcRef..CancelReport()      
  51412.    THIS.EscapeReference = m.lcRef   
  51413.    THIS.SetEscape = (SET("ESCAPE")="OFF") 
  51414.    IF THIS.SetEscape
  51415.       SET ESCAPE ON
  51416.    ENDIF   
  51417. ENDIF   
  51418. ENDPROC
  51419. PROCEDURE popglobalsets
  51420. DODEFAULT()
  51421. IF (NOT INLIST(_VFP.StartMode,2,3,5))
  51422.    LOCAL m.lcRef
  51423.    m.lcRef = THIS.EscapeReference
  51424.    IF (NOT EMPTY(m.lcRef)) AND ;
  51425.        TYPE(m.lcRef) = "O"
  51426.       * push occurred earlier
  51427.       STORE NULL TO (m.lcRef)
  51428.       RELEASE &lcRef.
  51429.       THIS.escapeReference = ""
  51430.       m.lcRef = THIS.OnEscapeCommand
  51431.       ON ESCAPE &lcRef
  51432.       POP KEY
  51433.       IF THIS.SetNotifyCursor
  51434.          SET NOTIFY CURSOR ON
  51435.       ENDIF   
  51436.       IF THIS.SetEscape 
  51437.          SET ESCAPE OFF
  51438.       ENDIF   
  51439.    ENDIF   
  51440. ENDIF   
  51441. ENDPROC
  51442. PROCEDURE getfrxstartupinfo
  51443. DODEFAULT()
  51444. LOCAL m.llFRXAvailable, m.lcAlias
  51445. m.llFRXAvailable = THIS.getReportScopeDriver() 
  51446. IF m.llFRXAvailable
  51447.    THIS.SetFRXDataSession()
  51448.    THIS.FRXBandRecno = 0
  51449.    SELECT FRX
  51450.    IF THIS.CommandClauses.Summary
  51451.       * don't use groups unless
  51452.       * we're forced to by Summary.
  51453.       * Group usage will not work if
  51454.       * there's a group on .T. or some
  51455.       * other nonsensical expression that
  51456.       * doesn't change.
  51457.       LOCATE FOR ObjType = FRX_OBJTYP_BAND AND ;
  51458.           Objcode = FRX_OBJCOD_GROUPHEADER AND ;
  51459.           Platform = FRX_PLATFORM_WINDOWS AND ;
  51460.           NOT DELETED()
  51461.       DO WHILE NOT EOF()
  51462.          * find the innermost group
  51463.          THIS.FRXBandRecno = RECNO()
  51464.          CONTINUE
  51465.       ENDDO        
  51466.       
  51467.       IF THIS.frxBandRecno = 0
  51468.          * no groups in a Summary report
  51469.          * doesn't make a lot of sense, but
  51470.          * can happen.
  51471.           LOCATE FOR ObjType = FRX_OBJTYP_BAND AND ;
  51472.              Objcode = FRX_OBJCOD_PAGEHEADER AND ;
  51473.              Platform = FRX_PLATFORM_WINDOWS AND ;
  51474.              NOT DELETED()
  51475.           IF NOT EOF()
  51476.              THIS.FRXBandRecno = RECNO()
  51477.           ENDIF     
  51478.       ENDIF
  51479.    ENDIF
  51480.       
  51481.    IF THIS.FRXBandRecno = 0
  51482.       * not a Summary report.
  51483.       * look for the appropriate detail
  51484.       * using the report driver
  51485.       LOCATE FOR ObjType = FRX_OBJTYP_BAND AND ;
  51486.                  Objcode = FRX_OBJCOD_DETAIL AND ;
  51487.                  Platform = FRX_PLATFORM_WINDOWS AND ;
  51488.                  TYPE(Expr) = "C" AND ;
  51489.                  NOT (EMPTY(Expr) OR DELETED())
  51490.        DO WHILE NOT EOF()
  51491.           m.lcAlias = ALLTRIM(Expr)
  51492.           THIS.SetCurrentDataSession()             
  51493.           m.lcAlias = UPPER(EVALUATE(m.lcAlias))
  51494.           THIS.SetFRXDataSession()                          
  51495.           IF m.lcAlias == UPPER(THIS.DrivingAlias)             
  51496.              THIS.FRXBandRecno = RECNO()
  51497.           ENDIF   
  51498.           CONTINUE && try not to use the first detail band
  51499.        ENDDO
  51500.    ENDIF   
  51501.    IF THIS.frxBandRecno = 0
  51502.       * couldn't match up a band with
  51503.       * the known driver
  51504.       LOCATE FOR ObjType = FRX_OBJTYP_BAND AND ;
  51505.            Objcode = FRX_OBJCOD_DETAIL AND ;
  51506.            Platform = FRX_PLATFORM_WINDOWS AND ;
  51507.            EMPTY(Expr) AND NOT DELETED()
  51508.       IF NOT EOF()
  51509.          THIS.FRXBandRecno = RECNO()      
  51510.       ELSE
  51511.          IF THIS.FRXBandRecno = 0 
  51512.             LOCATE FOR ObjType = FRX_OBJTYP_BAND AND ;
  51513.                  Platform = FRX_PLATFORM_WINDOWS AND ;
  51514.                  Objcode = FRX_OBJCOD_DETAIL AND ;
  51515.                  NOT DELETED()
  51516.             IF NOT EOF()
  51517.                THIS.FRXBandRecno = RECNO()
  51518.             ENDIF  
  51519.          ENDIF               
  51520.       ENDIF        
  51521.    ENDIF   
  51522. ENDIF
  51523. THIS.setCurrentDataSession()
  51524. ENDPROC
  51525. PROCEDURE UpdateStatus
  51526. NODEFAULT
  51527. * the THIS.IsRunning check here
  51528. * make sure that this code doesn't
  51529. * run if the Engine calls UpdateStatus
  51530. * after we're through
  51531. IF THIS.isRunning
  51532.    LOCAL m.liRecTotal, m.lnNewPercent, m.llShow
  51533.    m.liRecTotal = THIS.CommandClauses.RecordTotal 
  51534.    IF m.liRecTotal > 0 
  51535.       m.lnNewPercent = ROUND(THIS.CurrentRecord/m.liRecTotal,(THIS.ThermPrecision + 2) ) * 100
  51536.       IF (THIS.PercentDone # m.lnNewPercent)
  51537.          THIS.PercentDone = m.lnNewPercent
  51538.          m.llShow = .T.
  51539.          #IF OUTPUTCLASS_DEBUGGING 
  51540.              ? THIS.PercentDone, THIS.CurrentRecord, m.liRecTotal, THIS.PageTotal
  51541.              ? REPL(OUTPUTCLASS_STATUSCHAR_PCT_DONE,INT(THIS.PercentDone/100* OUTPUTCLASS_ONE_HUNDRED_PCT_MARK))+ ;
  51542.                REPL(OUTPUTCLASS_STATUSCHAR_PCT_NOT_DONE,MAX(FLOOR(OUTPUTCLASS_ONE_HUNDRED_PCT_MARK - ;
  51543.                                                             (OUTPUTCLASS_ONE_HUNDRED_PCT_MARK *THIS.PercentDone/100)),0) ) 
  51544.          #ENDIF                
  51545.       ENDIF
  51546.    ELSE
  51547.       m.llShow = .T.         
  51548.    ENDIF   
  51549.    IF m.llShow
  51550.       THIS.DoStatus( IIF(THIS.CurrentPass = LISTENER_PREPASS  AND THIS.TwoPassProcess,;
  51551.                      THIS.PrepassStatusText, ;
  51552.                      THIS.RunStatusText) )
  51553.    ENDIF                     
  51554. ENDIF   
  51555. ENDPROC
  51556. PROCEDURE LoadReport
  51557. IF DODEFAULT()
  51558.    THIS.ResetUserFeedback(.T.)
  51559.    IF NOT (THIS.QuietMode OR ;
  51560.            (TYPE("THIS.CommandClauses.NoDialog") = "L" AND ;
  51561.            THIS.CommandClauses.NoDialog) )
  51562.       THIS.DoStatus(THIS.initStatusText) 
  51563.       * NB: a user can call LoadReport manually,
  51564.       * hence the need for a TYPE() check here.
  51565.    ENDIF   
  51566.    THIS.PushGlobalSets()
  51567.    THIS.ClearStatus()
  51568.    RETURN .F.
  51569. ENDIF
  51570. ENDPROC
  51571. PROCEDURE AfterBand
  51572. LPARAMETERS m.nBandObjCode, m.nFRXRecNo
  51573. DODEFAULT(m.nBandObjCode, m.nFRXRecNo)
  51574. THIS.synchStatus(m.nBandObjCode,m.nFRXRecNo)
  51575. THIS.resetDataSession()
  51576. ENDPROC
  51577. PROCEDURE Destroy
  51578. STORE NULL TO THIS.thermForm 
  51579. DODEFAULT()
  51580. ENDPROC
  51581. PROCEDURE readconfiguration_assign
  51582. LPARAMETERS m.vNewVal
  51583. IF VARTYPE(m.vNewVal) = "N" AND NOT THIS.IsRunning
  51584.    THIS.ReadConfiguration = m.vNewVal
  51585. ENDIF   
  51586. ENDPROC
  51587. PROCEDURE setconfiguration
  51588. LPARAMETERS m.tlCalledFromInit
  51589. IF NOT THIS.IsRunning 
  51590.    * do some config work, don't change sessions --
  51591.    * at this point we don't have our private session
  51592.    * if we're being called in the Init
  51593.    LOCAL m.liSelect, m.lcPEM, m.llOpened, m.lcOrder, m.liType, m.llQuiet
  51594.    m.liSelect = SELECT(0)
  51595.    IF NOT USED("OutputConfig")
  51596.       * if called from Init, 
  51597.       * do this in quietmode
  51598.       * because the caller has no
  51599.       * opportunity to 
  51600.       * turn off the message
  51601.       m.llQuiet = (m.tlCalledFromInit AND NOT THIS.QuietMode)
  51602.       IF m.llQuiet
  51603.          THIS.QuietMode = .T.
  51604.       ENDIF
  51605.       THIS.GetConfigTable()
  51606.       IF m.llQuiet
  51607.          THIS.QuietMode = .F.
  51608.       ENDIF
  51609.         * CChalom
  51610.         * Sometimes users erase one of the Configuration table files, like the CDX, FPT or DBF
  51611.         * So let's check if it's safe
  51612.         IF FILE(THIS.ConfigurationTable) AND ;
  51613.                 FILE(FORCEEXT(THIS.ConfigurationTable, "CDX")) AND ;
  51614.                 FILE(FORCEEXT(THIS.ConfigurationTable, "FPT"))
  51615.             USE (THIS.ConfigurationTable) ALIAS "OutputConfig" IN 0 AGAIN NOUPDATE SHARED
  51616.             m.llOpened = .T.
  51617.         ELSE 
  51618.             m.llOpened = .F.
  51619.         ENDIF
  51620.    ELSE 
  51621.       m.lcOrder = ORDER("OutputConfig")
  51622.       SET ORDER TO ObjCode
  51623.    ENDIF
  51624.    IF (NOT THIS.HadError) AND THIS.VerifyConfigTable("OutputConfig")
  51625.       SELECT OutputConfig
  51626.       m.liType = THIS.ConfigurationObjtype
  51627.       SCAN FOR ObjType = m.liType AND ;
  51628.             NOT(DELETED() OR ;
  51629.                 ObjName == "" OR ;
  51630.                 ObjValue =="" )
  51631.           
  51632.          IF PEMSTATUS(THIS,ObjName,5) 
  51633.             m.lcPEM = UPPER(PEMSTATUS(THIS,ObjName,3))
  51634.             DO CASE
  51635.             CASE lcPEM == "PROPERTY"
  51636.                STORE EVAL(ObjValue) TO ("THIS."+ObjName)
  51637.             CASE INLIST("|"+lcPEM+"|","|METHOD|","|EVENT|")
  51638.                EVAL("THIS."+ObjName+"("+ObjValue+")")
  51639.             OTHERWISE
  51640.             ENDCASE
  51641.           ENDIF
  51642.       ENDSCAN
  51643.       IF m.llOpened
  51644.          USE IN OutputConfig
  51645.       ELSE
  51646.          SET ORDER TO (m.lcOrder) IN OutputConfig   
  51647.       ENDIF   
  51648.    ENDIF   
  51649.    SELECT (m.liSelect)
  51650. ENDIF   
  51651. ENDPROC
  51652. PROCEDURE getconfigtable
  51653. LPARAMETERS m.tlForceExternal
  51654. LOCAL m.lcDBF, m.lcPath
  51655. m.lcDBF = ""
  51656. IF m.tlForceExternal OR (NOT EMPTY(SYS(2000,FULLPATH(FORCEEXT(OUTPUTCLASS_EXTERNALDBF,"DBF")))))
  51657.    m.lcDBF = FULLPATH(FORCEEXT(OUTPUTCLASS_EXTERNALDBF,"DBF"))
  51658.    m.lcDBF = FORCEEXT(OUTPUTCLASS_INTERNALDBF,"DBF")
  51659. ENDIF
  51660. * CChalom
  51661. * Sometimes users erase one of the COnfiguration table files, like the CDX, FPT or DBF
  51662. * So let's check if it's safe
  51663. LOCAL llIsDBF
  51664. llIsDBF = FILE(m.lcDBF) AND ;
  51665.             FILE(FORCEEXT(m.lcDBF, "CDX")) AND ;
  51666.             FILE(FORCEEXT(m.lcDBF, "FPT"))
  51667. IF NOT llIsDBF && One or more files are missing, so it's safer to delete them all
  51668.     TRY 
  51669.         DELETE FILE (m.lcDBF)
  51670.     CATCH 
  51671.     ENDTRY
  51672.     TRY 
  51673.         DELETE FILE (FORCEEXT(m.lcDBF, "CDX"))
  51674.     CATCH 
  51675.     ENDTRY
  51676.     TRY 
  51677.         DELETE FILE (FORCEEXT(m.lcDBF, "FPT"))
  51678.     CATCH 
  51679.     ENDTRY
  51680. ENDIF 
  51681. * IF NOT (FILE(m.lcDBF) OR THIS.IsRunning)
  51682. IF NOT (llIsDBF OR THIS.IsRunning)
  51683.       m.lcPath = THIS.GetPathForExternals()
  51684.       * this may be the internal *or* external dbf name;
  51685.       * we could be testing and not yet built into an app,
  51686.       * so accept either, before the next test:
  51687.       m.lcDBF = FORCEPATH(m.lcDBF,m.lcPath) 
  51688.       
  51689.       IF NOT FILE(m.lcDBF)
  51690.          * now force to the external name:
  51691.          m.lcDBF = FORCEEXT(FORCEPATH(OUTPUTCLASS_EXTERNALDBF,m.lcPath),"DBF")
  51692.          * now check again
  51693.          IF NOT FILE(m.lcDBF)
  51694.             THIS.CreateConfigTable(m.lcDBF)
  51695.             IF FILE(m.lcDBF)
  51696.                THIS.DoMessage(OUTPUTCLASS_CONFIGTABLECREATED_LOC)
  51697.             ENDIF
  51698.          ENDIF
  51699.       ENDIF
  51700. ENDIF 
  51701. IF NOT FILE(m.lcDBF)
  51702.    m.lcDBF = ""
  51703. ENDIF  
  51704. THIS.ConfigurationTable = m.lcDBF
  51705. RETURN m.lcDBF
  51706. ENDPROC
  51707. PROCEDURE createconfigtable
  51708. LPARAMETERS m.tcDBF, m.tlOverWrite
  51709. LOCAL m.liSelect, m.lcFile
  51710. m.lcFile = FORCEEXT(m.tcDBF,"DBF")
  51711. IF (NOT EMPTY(SYS(2000,m.lcFile))) AND m.tlOverWrite
  51712.    ERASE (m.lcFile) RECYCLE
  51713.    ERASE (FORCEEXT(m.lcFile,"FPT")) RECYCLE
  51714.    ERASE (FORCEEXT(m.lcFile,"CDX")) RECYCLE   
  51715. ENDIF   
  51716. m.liSelect = SELECT(0)
  51717. SELECT 0
  51718. CREATE TABLE (m.lcFile) FREE ;
  51719.    (objtype i, ;
  51720.     objcode i, ;
  51721.     objname v(60), ;
  51722.     objvalue v(60), ;
  51723.     objinfo m)
  51724. IF NOT EMPTY(ALIAS()) && can happen if SAFETY ON and they decide not to overwrite    
  51725.    INDEX ON Objtype TAG ObjType
  51726.    INDEX ON ObjCode TAG ObjCode
  51727.    INDEX ON ObjName TAG ObjName
  51728.    INDEX ON ObjValue TAG ObjValue
  51729.    INDEX ON DELETED() TAG OnDeleted    
  51730.    INSERT INTO (ALIAS()) VALUES ;
  51731.       (OUTPUTCLASS_OBJTYPE_CONFIG,0,'DoMessage','"Welcome to the demo run!",64','Sample initialization/config method call')
  51732.    DELETE NEXT 1
  51733.    INSERT INTO (ALIAS()) VALUES ;
  51734.      (OUTPUTCLASS_OBJTYPE_CONFIG,0,'TargetFileName','"xxx"','Sample initialization/config property')
  51735.    DELETE NEXT 1
  51736.    USE
  51737. ENDIF   
  51738. SELECT (m.liSelect)   
  51739. ENDPROC
  51740. PROCEDURE opentargetfile
  51741.    THIS.VerifyTargetFile() 
  51742.    THIS.TargetHandle = FCREATE(THIS.TargetFileName)
  51743.    IF THIS.TargetHandle < 0 OR THIS.HadError
  51744.       THIS.HadError = .T.
  51745.       THIS.DoMessage(OUTPUTCLASS_NOFILECREATE_LOC,MB_ICONSTOP )
  51746.       THIS.lastErrorMessage = OUTPUTCLASS_NOFILECREATE_LOC
  51747.    ENDIF
  51748. RETURN (NOT THIS.HadError)
  51749.      
  51750. ENDPROC
  51751. PROCEDURE verifytargetfile
  51752. LOCAL m.lcFile
  51753. m.lcFile =  ALLTR(CHRTRAN(CHRTRAN(THIS.TargetFileName,;
  51754.                        OUTPUTCLASS_FILENAME_CHARS_DISALLOWED,"_"),"/","\"))
  51755. * embracing chrtran for slashes is necessary because of FULLPATH behavior.
  51756. IF NOT DIRECTORY(JUSTPATH(m.lcFile))
  51757.    m.lcFile = FULLPATH(ALLTR(m.lcFile))
  51758. ENDIF   
  51759. IF DIRECTORY(m.lcFile)
  51760.    * we have to generate a filename
  51761.    m.lcFile = FORCEPATH(SYS(2015), m.lcFile)
  51762. ENDIF
  51763. THIS.TargetFileName = m.lcFile   
  51764. IF JUSTEXT(THIS.TargetFileName) == "" AND ;
  51765.    RIGHT(THIS.TargetFileName,1) # "."      
  51766.    THIS.TargetFileExt = CHRTRAN(THIS.TargetFileExt,;
  51767.                         OUTPUTCLASS_FILENAME_CHARS_DISALLOWED,"_")
  51768.    THIS.TargetFileName = FORCEEXT(THIS.TargetFileName, ;
  51769.                                     THIS.TargetFileExt)
  51770. ENDIF                                 
  51771. IF NOT EMPTY(SYS(2000,THIS.TargetFileName))
  51772.    ERASE (THIS.TargetFileName) NORECYCLE
  51773. ENDIF
  51774. ENDPROC
  51775. PROCEDURE targetfileext_assign
  51776. LPARAMETERS m.vNewVal
  51777. IF VARTYPE(m.vNewVal) = "C" AND NOT THIS.IsRunning
  51778.    THIS.targetfileext = m.vNewVal
  51779. ENDIF   
  51780. ENDPROC
  51781. PROCEDURE targetfilename_assign
  51782. LPARAMETERS m.vNewVal
  51783. IF VARTYPE(m.vNewVal) = "C" AND NOT THIS.IsRunning
  51784.    THIS.targetfilename = m.vNewVal
  51785. ENDIF   
  51786. ENDPROC
  51787. PROCEDURE targethandle_assign
  51788. LPARAMETERS m.vNewVal
  51789. * Readonly during report run
  51790. IF VARTYPE(m.vNewVal) = "N" AND NOT THIS.IsRunning
  51791.    THIS.targethandle = m.vNewVal
  51792. ENDIF   
  51793. ENDPROC
  51794. PROCEDURE closetargetfile
  51795.    LOCAL laDummy[1]
  51796.      
  51797.    IF THIS.TargetHandle > -1    
  51798.       =FCLOSE(THIS.TargetHandle)
  51799.       THIS.TargetHandle = -1
  51800.      
  51801.       IF ADIR(laDummy,THIS.TargetFileName) = 1 AND ;
  51802.          laDummy[1,2] > 0
  51803.          * NB: have to check this as well as
  51804.          * error because some COM errors may not
  51805.          * end up in THIS.HadError.
  51806.           * if continuation, update status rather than
  51807.           * modal message
  51808.          IF THIS.HadError
  51809.             THIS.DoMessage(OUTPUTCLASS_CREATEERRORS_LOC,MB_ICONEXCLAMATION  )
  51810.             THIS.lastErrorMessage = OUTPUTCLASS_CREATEERRORS_LOC
  51811.         ELSE
  51812.             *IF THIS.DoMessage( OUTPUTCLASS_SUCCESS_LOC + ;
  51813.                             IIF(SYS(2024)="Y",CHR(13)+OUTPUTCLASS_REPORT_INCOMPLETE_LOC,""),;
  51814.                             MB_ICONINFORMATION + MB_YESNO ) = IDYES
  51815.             *   _CLIPTEXT = THIS.TargetFileName
  51816.             * ENDIF
  51817.          ENDIF
  51818.       ELSE
  51819.          THIS.DoMessage(OUTPUTCLASS_NOCREATE_LOC,MB_ICONSTOP )
  51820.          THIS.lastErrorMessage = OUTPUTCLASS_NOCREATE_LOC
  51821.        
  51822.       ENDIF                 
  51823.      
  51824.    ENDIF
  51825. ENDPROC
  51826. PROCEDURE verifyconfigtable
  51827. LPARAMETERS m.tcAlias, m.tcFailureMsgTable, m.tcFailureMsgIndexes
  51828. IF EMPTY(m.tcAlias) OR VARTYPE(m.tcAlias) # "C"
  51829.    RETURN .F.
  51830. ENDIF
  51831. LOCAL m.lcTable, m.lcMessage, m.lcAlias, m.liSelect, ;
  51832.       m.llReturn, m.liTagCount, laRequired[1], laKeys[1], ;
  51833.       m.liFound, m.llExactOff, m.llSafetyOn
  51834. m.llReturn = ;
  51835.        TYPE(m.tcAlias+".OBJTYPE") = "N" AND ;
  51836.        TYPE(m.tcAlias+".OBJCODE") = "N" AND ;  
  51837.        TYPE(m.tcAlias+".OBJNAME") = "C" AND ;
  51838.        TYPE(m.tcAlias+".OBJVALUE") = "C" AND ;
  51839.        TYPE(m.tcAlias+".OBJINFO") = "M" 
  51840.        
  51841. * additional fields may be included and order
  51842. * is not significant
  51843.        
  51844. IF NOT m.llReturn
  51845.    m.lcMessage = IIF(EMPTY(m.tcFailureMsgTable),;
  51846.                          OUTPUTCLASS_CONFIGTABLEWRONG_LOC, ;
  51847.                          m.tcFailureMsgTable)  + ;
  51848.                CHR(13)+CHR(13)+ ;
  51849.                DBF(m.tcAlias)
  51850. ENDIF   
  51851. IF m.llReturn
  51852.    IF (SET("EXACT") = "OFF")
  51853.       SET EXACT ON
  51854.       m.llExactOff = .T.
  51855.    ENDIF
  51856.    m.liSelect = SELECT(0)
  51857.    SELECT (m.tcAlias)
  51858.    * check for required keys...
  51859.    DIME laRequired[5]
  51860.    laRequired[1] = "OBJTYPE"
  51861.    laRequired[2] = "OBJCODE"
  51862.    laRequired[3] = "OBJNAME"
  51863.    laRequired[4] = "OBJVALUE"
  51864.    laRequired[5] = "DELETED()"   
  51865.    IF TAGCOUNT() > 0
  51866.       DIME laKeys[TAGCOUNT()]
  51867.       FOR m.liTagCount = 1 TO TAGCOUNT()
  51868.           laKeys[m.liTagCount] = UPPER(KEY(m.liTagCount))
  51869.       ENDFOR
  51870.       FOR m.liTagCount = 1 TO ALEN(laRequired)
  51871.          m.liFound = ASCAN(laKeys,UPPER(laRequired[m.liTagCount]))
  51872.          IF m.liFound = 0
  51873.             m.llReturn = .F.
  51874.             EXIT
  51875.          ENDIF
  51876.       ENDFOR
  51877.    ELSE
  51878.       m.llReturn = .F.
  51879.    ENDIF      
  51880.    IF NOT m.llReturn
  51881.      m.llSafetyOn = (SET("SAFETY") = "ON")
  51882.      SET SAFETY OFF
  51883.      TRY
  51884.          USE (DBF(m.tcAlias)) EXCLU ALIAS (m.tcAlias)
  51885.          INDEX ON Objtype TAG ObjType
  51886.          INDEX ON ObjCode TAG ObjCode
  51887.          INDEX ON ObjName TAG ObjName
  51888.          INDEX ON ObjValue TAG ObjValue
  51889.          INDEX ON DELETED() TAG OnDeleted    
  51890.          m.llReturn = .T.
  51891.       CATCH
  51892.       ENDTRY   
  51893.       
  51894.       IF m.llSafetyOn
  51895.          SET SAFETY ON
  51896.       ENDIF
  51897.       
  51898.       IF m.llReturn
  51899.          DIME laKeys[TAGCOUNT()]
  51900.          FOR m.liTagCount = 1 TO TAGCOUNT()
  51901.              laKeys[m.liTagCount] = UPPER(KEY(m.liTagCount))
  51902.          ENDFOR
  51903.          FOR m.liTagCount = 1 TO ALEN(laRequired)
  51904.             m.liFound = ASCAN(laKeys,UPPER(laRequired[m.liTagCount]))
  51905.             IF m.liFound = 0
  51906.                m.llReturn = .F.
  51907.                EXIT
  51908.             ENDIF
  51909.          ENDFOR
  51910.       ENDIF
  51911.       USE (DBF(m.tcAlias)) SHARED ALIAS (m.tcAlias)
  51912.    ENDIF
  51913.    IF NOT m.llReturn
  51914.       m.lcMessage =  IIF(EMPTY(m.tcFailureMsgIndexes),;
  51915.                          OUTPUTCLASS_CONFIGINDEXMISSING_LOC, ;
  51916.                          m.tcFailureMsgTable) + CHR(13) 
  51917.       FOR m.liTagCount = 1 TO ALEN(laRequired)
  51918.           m.lcMessage = m.lcMessage +  CHR(13) + ;
  51919.                       laRequired[m.liTagCount] 
  51920.       ENDFOR
  51921.    ENDIF
  51922.    IF m.llExactOff
  51923.       SET EXACT OFF
  51924.    ENDIF
  51925.    SELECT (m.liSelect) 
  51926. ENDIF
  51927. IF NOT(m.llReturn)
  51928.    THIS.DoMessage(m.lcMessage,MB_ICONSTOP )
  51929.    THIS.lastErrorMessage = m.lcMessage
  51930. ENDIF   
  51931. RETURN m.llReturn       
  51932. ENDPROC
  51933. PROCEDURE configurationobjtype_access
  51934. * readonly property
  51935. RETURN OUTPUTCLASS_OBJTYPE_CONFIG
  51936. ENDPROC
  51937. PROCEDURE externalfilelocation_assign
  51938. LPARAMETERS m.vNewVal
  51939. IF THIS.isRunning AND NOT EMPTY(THIS.externalFileLocation)
  51940.    RETURN
  51941. ENDIF   
  51942. IF VARTYPE(m.vNewVal) = "C"
  51943.    THIS.externalFileLocation = ALLTRIM(m.vNewVal)
  51944.    IF NOT EMPTY(THIS.externalFileLocation)
  51945.          THIS.externalFileLocation = ADDBS(THIS.externalFileLocation)
  51946.    ENDIF 
  51947. ENDIF   
  51948. ENDPROC
  51949. PROCEDURE pageimagetype_assign
  51950. LPARAMETERS m.vNewVal
  51951. IF VARTYPE(m.vNewVal) = "N" AND ;
  51952.    (m.vNewVal = 0 OR ;
  51953.    INLIST(m.vNewVal,;
  51954.           LISTENER_DEVICE_TYPE_EMF,;
  51955.           LISTENER_DEVICE_TYPE_TIF,;
  51956.           LISTENER_DEVICE_TYPE_JPG,;
  51957.           LISTENER_DEVICE_TYPE_GIF,;
  51958.           LISTENER_DEVICE_TYPE_PNG,;
  51959.           LISTENER_DEVICE_TYPE_BMP,;
  51960.           LISTENER_DEVICE_TYPE_MTIF))
  51961.    THIS.pageImageType = m.vNewVal
  51962.    THIS.pageImageExtension = THIS.getPageImageExtension() 
  51963. ENDIF
  51964. ENDPROC
  51965. PROCEDURE getpageimageextension
  51966. LOCAL lcExt
  51967. m.lcExt = ""
  51968. DO CASE
  51969. CASE INLIST(THIS.pageImageType,;
  51970.             LISTENER_DEVICE_TYPE_TIF,;
  51971.             LISTENER_DEVICE_TYPE_MTIF)
  51972.    m.lcExt = "TIF"            
  51973. CASE THIS.pageImageType = LISTENER_DEVICE_TYPE_JPG
  51974.    m.lcExt = "JPG"
  51975. CASE THIS.pageImageType = LISTENER_DEVICE_TYPE_GIF
  51976.    m.lcExt = "GIF"
  51977. CASE THIS.pageImageType = LISTENER_DEVICE_TYPE_PNG
  51978.    m.lcExt = "PNG"
  51979. CASE THIS.pageImageType = LISTENER_DEVICE_TYPE_BMP
  51980.    m.lcExt = "BMP"
  51981. ENDCASE
  51982. RETURN m.lcExt
  51983. ENDPROC
  51984. PROCEDURE generatepageimagefilename
  51985. LPARAMETERS m.tiPage, m.tlFullPath
  51986. LOCAL lcFileName
  51987. m.lcFileName = FORCEEXT(JUSTSTEM(THIS.targetFileName) + ;
  51988.                         "_" + ;
  51989.                         PADL(TRANSFORM(m.tiPage),;
  51990.                              OUTPUTFILE_MAX_FILEPLACES ,"0"), ;
  51991.                         THIS.pageImageExtension)
  51992. IF m.tlFullPath
  51993.    RETURN  FULLPATH(FORCEPATH( m.lcFileName,THIS.ExternalFileLocation),;
  51994.                     ADDBS(JUSTPATH(THIS.TargetFileName)))
  51995.    RETURN FORCEPATH(m.lcFileName,THIS.externalFileLocation)
  51996. ENDIF          
  51997.        
  51998.         
  51999. ENDPROC
  52000. PROCEDURE supportspageimages
  52001. LPARAMETERS tcMethodToken
  52002. DO CASE
  52003. CASE THIS.isSuccessor OR EMPTY(THIS.pageImageType)
  52004.    RETURN .F.    
  52005. CASE EMPTY(m.tcMethodToken)
  52006.    RETURN THIS.ListenerType # LISTENER_TYPE_DEF
  52007.         * this indicates the set we are supporting in total
  52008. CASE m.tcMethodToken = "OUTPUTPAGE"
  52009.    RETURN INLIST(THIS.ListenerType,LISTENER_TYPE_PRN,LISTENER_TYPE_PAGED)
  52010. CASE INLIST(m.tcMethodToken,"AFTERREPORT","UNLOADREPORT")
  52011.    RETURN INLIST(THIS.ListenerType,LISTENER_TYPE_PRV,LISTENER_TYPE_ALLPGS)
  52012. ENDCASE  
  52013. ENDPROC
  52014. PROCEDURE outputpageimage
  52015. LPARAMETERS m.tiPage
  52016. LOCAL m.lcFile, m.llError
  52017.    IF THIS.pageImageType = LISTENER_DEVICE_TYPE_MTIF 
  52018.       m.lcFile = THIS.generatePageImageFilename(1, .T.) 
  52019.       IF m.tiPage = 1 
  52020.          IF NOT EMPTY(SYS(2000,m.lcFile))
  52021.             ERASE (m.lcFile) NORECYCLE
  52022.          ENDIF
  52023.          THIS.OutputPage(m.tiPage,m.lcFile,LISTENER_DEVICE_TYPE_TIF )
  52024.       ELSE
  52025.          THIS.OutputPage(m.tiPage,m.lcFile,LISTENER_DEVICE_TYPE_MTIF )
  52026.       ENDIF   
  52027.    ELSE
  52028.       m.lcFile = THIS.generatePageImageFilename(m.tiPage, .T.)   
  52029.       IF NOT EMPTY(SYS(2000,m.lcFile))
  52030.          ERASE (m.lcFile) NORECYCLE
  52031.       ENDIF
  52032.       THIS.OutputPage(m.tiPage,m.lcFile,THIS.pageImageType)
  52033.    ENDIF   
  52034. CATCH WHEN .T.
  52035.    m.llError = .T.
  52036. ENDTRY
  52037. RETURN (NOT m.llError)
  52038. ENDPROC
  52039. PROCEDURE currentpageimagefilename_assign
  52040. LPARAMETERS m.tvNewVal
  52041. IF VARTYPE(m.tvNewVal) # "C"
  52042.    THIS.currentPageImageFilename = ""
  52043.    THIS.currentPageImageFilename = m.tvNewVal
  52044. ENDIF   
  52045. ENDPROC
  52046. PROCEDURE makeexternalfilelocationreachable
  52047. IF EMPTY(THIS.externalFileLocation) 
  52048.    THIS.externalFileLocation = "."
  52049. ENDIF
  52050. IF NOT DIRECTORY(FULLPATH(THIS.ExternalFileLocation,ADDBS(JUSTPATH(THIS.TargetFileName))))     
  52051.    TRY
  52052.      MD (FULLPATH(THIS.ExternalFileLocation,ADDBS(JUSTPATH(THIS.TargetFileName))))     
  52053.    CATCH
  52054.      LOCAL m.llRunning 
  52055.      m.llRunning = THIS.isRunning
  52056.      THIS.isRunning = .F.
  52057.      THIS.externalFileLocation = "."
  52058.      THIS.isRunning = m.llRunning
  52059.    ENDTRY
  52060. ENDIF
  52061. ENDPROC
  52062. PROCEDURE BeforeBand
  52063. LPARAMETERS m.nBandObjCode, m.nFRXRecNo
  52064. IF (m.nBandObjCode = FRX_OBJCOD_PAGEHEADER OR ;
  52065.     m.nBandObjCode = FRX_OBJCOD_TITLE) AND ;
  52066.    THIS.supportsPageImages() 
  52067.    * Note: this assignment does not occur in 
  52068.    * OutputPageImage, because we don't know
  52069.    * what listener mode (PRN vs cached) we're in.
  52070.    * The point of this property is to make the value
  52071.    * available either way, as it will eventually be
  52072.    * used by OutputPageImage no matter when that occurs,
  52073.    * during the run of the report.
  52074.    LOCAL lcFile, liPageNo
  52075.    m.lcFile = ""
  52076.    DO CASE
  52077.    CASE THIS.pageImageType = LISTENER_DEVICE_TYPE_MTIF 
  52078.       m.liPageNo = 1
  52079.    CASE THIS.CommandClauses.RangeFrom < 2 
  52080.       IF THIS.isSuccessor
  52081.          m.liPageNo = THIS.sharedPageNo
  52082.       ELSE
  52083.          m.liPageNo = THIS.PageNo      
  52084.       ENDIF   
  52085.    OTHERWISE      
  52086.       IF THIS.isSuccessor
  52087.          m.liPageNo = (THIS.sharedPageNo - THIS.CommandClauses.RangeFrom) + 1       
  52088.       ELSE
  52089.          m.liPageNo = (THIS.PageNo - THIS.CommandClauses.RangeFrom) + 1 
  52090.       ENDIF   
  52091.    ENDCASE
  52092.    m.lcFile = THIS.generatePageImageFileName(m.liPageNo)
  52093.    THIS.currentPageImageFilename = m.lcFile
  52094.    IF NOT ISNULL(THIS.successor)
  52095.       THIS.successor.currentPageImageFilename = m.lcFile
  52096.    ENDIF   
  52097. ENDIF
  52098. IF THIS.sharedPageNo  = 1 AND ;
  52099.    m.nBandObjCode = FRX_OBJCOD_PAGEHEADER AND ;   
  52100.    (NOT EMPTY(THIS.pageImageType)) AND ;
  52101.    (EMPTY(THIS.currentPageImageFilename)) AND ;
  52102.    ((NOT THIS.TwoPassProcess) OR THIS.CurrentPass = LISTENER_FULLPASS)
  52103.    THIS.DoMessage(OUTPUTFILE_NOIMAGEFILES_LOC,MB_ICONEXCLAMATION)     
  52104. ENDIF   
  52105. DODEFAULT(m.nBandObjCode, m.nFRXRecNo)
  52106. ENDPROC
  52107. PROCEDURE BeforeReport
  52108. THIS.currentPageImageFilename =""
  52109. IF (NOT EMPTY(THIS.pageImageType)) AND ;
  52110.    (NOT THIS.supportsPageImages()) 
  52111.    IF (NOT THIS.isSuccessor)
  52112.      THIS.ListenerType = LISTENER_TYPE_PAGED
  52113.    ENDIF 
  52114. ENDIF
  52115. IF THIS.supportsPageImages()
  52116.    THIS.makeExternalFileLocationReachable()
  52117. ENDIF   
  52118. IF NOT ISNULL(THIS.successor)
  52119.    THIS.successor.AddProperty("currentPageImageFilename","")
  52120. ENDIF
  52121. DODEFAULT()
  52122.  IF INLIST(THIS.ReadConfiguration,;
  52123.                   OUTPUTCLASS_READCONFIG_REPORT,;
  52124.                   OUTPUTCLASS_READCONFIG_BOTH)
  52125.      THIS.SetConfiguration()
  52126. ENDIF   
  52127. THIS.resetDataSession()
  52128. ENDPROC
  52129. PROCEDURE setfrxdatasessionenvironment
  52130. DODEFAULT()
  52131. SET DELETED ON
  52132. SET EXCLUSIVE OFF
  52133. SET TALK OFF
  52134. ENDPROC
  52135. PROCEDURE Destroy
  52136. THIS.CloseTargetFile()
  52137. DODEFAULT()
  52138. ENDPROC
  52139. PROCEDURE Init
  52140. IF DODEFAULT()
  52141.    * NB: this one doesn't necessarily need its
  52142.    * own AppName LOC'd value, because
  52143.    * it is basically an abstract layer 
  52144.    * and should not be instantiated directly.
  52145.    * Doesn't hurt, though.
  52146.    THIS.appName = OUTPUTFILE_APPNAME_LOC
  52147.    IF INLIST(THIS.ReadConfiguration,;
  52148.                   OUTPUTCLASS_READCONFIG_INIT,;
  52149.                   OUTPUTCLASS_READCONFIG_BOTH)
  52150.      THIS.SetConfiguration(.T.)
  52151.    ENDIF   
  52152.    RETURN .F.   
  52153. ENDIF
  52154. RETURN NOT THIS.HadError
  52155. ENDPROC
  52156. PROCEDURE AfterReport
  52157. DODEFAULT()
  52158. IF (NOT THIS.CommandClauses.NOPAGEEJECT) AND ;
  52159.    THIS.supportsPageImages("AFTERREPORT")
  52160.    LOCAL m.lcFileLocation, m.liPage,  m.lcFile
  52161.    m.lcFileLocation = THIS.ExternalFileLocation
  52162.    THIS.makeExternalFileLocationReachable()
  52163.    FOR m.liPage = 1 TO THIS.OutputPageCount 
  52164.       IF NOT THIS.outputPageImage(m.liPage)
  52165.          EXIT
  52166.       ENDIF
  52167.    NEXT   
  52168.    THIS.externalFileLocation = m.lcFileLocation
  52169. ENDIF
  52170. ENDPROC
  52171. PROCEDURE OutputPage
  52172. LPARAMETERS nPageNo, eDevice, nDeviceType, nLeft, nTop, nWidth, nHeight, nClipLeft, nClipTop, nClipWidth, nClipHeight
  52173. IF THIS.supportsPageImages("OUTPUTPAGE")
  52174.    IF m.nDeviceType < 100
  52175.       * ascertain that this is the native call; have to make
  52176.       * sure it's not recursive... 
  52177.       THIS.OutputPageImage(m.nPageNo)
  52178.    ENDIF
  52179.    IF m.nDeviceType > 99
  52180.       DODEFAULT(nPageNo, eDevice, nDeviceType)   
  52181.    ENDIF
  52182. ENDIF
  52183. ENDPROC
  52184. VNEWVAL
  52185. ALLOWMODALMESSAGES9
  52186. VNEWVAL
  52187. LIGNOREERRORS,
  52188. Error:           
  52189. Method:       
  52190. Line:            
  52191. NERROR
  52192. CMETHOD
  52193. NLINE
  52194. CNAME
  52195. CMESSAGE    
  52196. CCODELINE
  52197. LCERRORMESSAGE
  52198. LCCODELINEMSG
  52199. HADERROR
  52200. LASTERRORMESSAGE
  52201. LASTERRORMESSAGEM
  52202. DATASESSIONv
  52203. Collection
  52204. Collection
  52205. Collection
  52206. toListener.BaseClassb
  52207. REPORTLISTENER
  52208. TCFRXNAME    
  52209. TCCLAUSES
  52210. TOLISTENER
  52211. REPORTFILENAMES
  52212. REPORTCLAUSES    
  52213. LISTENERS    
  52214. LISESSION
  52215. RESETDATASESSION
  52216. REPORTPAGES
  52217. COUNT    
  52218. BASECLASSi
  52219. ISRUNNINGREPORTS
  52220. REPORTFILENAMES
  52221. REPORTCLAUSES    
  52222. LISTENERS
  52223. REPORTPAGESP
  52224.  OBJE C
  52225.  OBJEC 
  52226. REPORT FORM (THIS.ReportFileNames[m.liIndex]) &lcClauses
  52227.  OBJECT 
  52228.  OBJE 
  52229.  OBJEC 
  52230.  OBJE 
  52231.  OBJE 
  52232.  TYPE 
  52233.  TYPE 
  52234. _oReportOutput['
  52235. REPORT FORM (THIS.ReportFileNames[m.liIndex]) &lcClauses  OBJECT THIS
  52236. REPORT FORM (THIS.ReportFileNames[m.liIndex]) &lcClauses  OBJECT m.loListener
  52237. TLREMOVEREPORTSAFTERRUN
  52238. TLOMITLISTENERREFERENCES
  52239. ISRUNNINGREPORTS
  52240. REPORTFILENAMES
  52241. COUNT
  52242. OERROR
  52243. LIINDEX    
  52244. LCCLAUSES
  52245. LOLISTENER
  52246. LCPARSE
  52247. REPORTCLAUSES    
  52248. LISTENERS
  52249. ADJUSTREPORTPAGESINFO
  52250. LCERRMSG
  52251. PREPAREERRORMESSAGE
  52252. ERRORNO    
  52253. PROCEDURE
  52254. LINENO
  52255. APPNAME
  52256. MESSAGE
  52257. LINECONTENTS    
  52258. DOMESSAGE
  52259. LASTERRORMESSAGE
  52260. REMOVEREPORTS
  52261. SETFRXDATASESSION
  52262. lDefaultMode
  52263. listenerDataSession
  52264. LDEFAULTMODE
  52265. LISTENERDATASESSION
  52266. RESETTODEFAULT
  52267. lDefaultMode
  52268. DATASESSIONv
  52269. FRXDataSession
  52270. LDEFAULTMODE
  52271. FRXDATASESSION
  52272. RESETTODEFAULT
  52273. RESETDATASESSION
  52274. lDefaultMode
  52275. DATASESSIONv
  52276. CurrentDataSession
  52277. LDEFAULTMODE
  52278. CURRENTDATASESSION
  52279. RESETTODEFAULT
  52280. RESETDATASESSION9
  52281. VNEWVAL
  52282. THIS    
  52283. QUIETMODE9
  52284. VNEWVAL
  52285. ISSUCCESSORr
  52286. REPORTLISTENER
  52287. VNEWVAL
  52288. THIS    
  52289. ISRUNNING    
  52290. BASECLASS    
  52291. SUCCESSOR2
  52292. WINDOWS
  52293. WINDOWS
  52294. Datasessionv
  52295. SETFRXDATASESSION
  52296. OBJTYPE
  52297. PLATFORM
  52298. REPORTUSESPRIVATEDATASESSION
  52299. ENVIRON
  52300. FRXHEADERRECNO
  52301. SETCURRENTDATASESSION
  52302. DRIVINGALIAS
  52303. CFOXYDRIVINGALIAS
  52304. NFOXYDRIVINGDATASESSION
  52305. ISSUCCESSOR
  52306. SHAREDOUTPUTPAGECOUNT
  52307. OUTPUTPAGECOUNT
  52308. SHAREDPAGETOTAL    
  52309. PAGETOTAL
  52310. SHAREDPAGENO
  52311. PAGENO
  52312. SHAREDGDIPLUSGRAPHICS
  52313. GDIPLUSGRAPHICS    
  52314. SUCCESSOR
  52315. CURRENTPASS
  52316. TWOPASSPROCESS
  52317. CALLEVALUATECONTENTS
  52318. CALLADJUSTOBJECTSIZE9
  52319. VNEWVAL
  52320. APPNAME9
  52321. VNEWVAL
  52322. SHAREDGDIPLUSGRAPHICS9
  52323. VNEWVAL
  52324. SHAREDPAGEHEIGHT9
  52325. VNEWVAL
  52326. SHAREDPAGEWIDTHD
  52327. VNEWVAL
  52328. SUPPORTSLISTENERTYPE    
  52329. ISRUNNING
  52330. LISTENERTYPEt
  52331. VNEWVAL
  52332. THIS    
  52333. ISRUNNING
  52334. OUTPUTTYPE
  52335. SUPPORTSLISTENERTYPE
  52336. LISTENERTYPE9
  52337. VNEWVAL
  52338. SHAREDOUTPUTPAGECOUNT9
  52339. VNEWVAL
  52340. SHAREDPAGENO9
  52341. VNEWVAL
  52342. SHAREDPAGETOTAL
  52343. Empty
  52344. THIS.CommandClauses.NoDialogb
  52345. NoDialog-
  52346. COMMANDCLAUSESc
  52347. THIS    
  52348. PAGELIMITc
  52349. PAGETOPLIMITc
  52350. PAGETAILLIMIT9
  52351. PAGELIMITQUIETMODE9
  52352. PAGELIMITINSIDERANGE 
  52353. CallAdjustObjectSize
  52354. CallEvaluateContents
  52355. CALLADJUSTOBJECTSIZE
  52356. RESETCALLADJUSTOBJECTSIZE
  52357. CALLEVALUATECONTENTS
  52358. RESETCALLEVALUATECONTENTS    
  52359. SUCCESSOR
  52360. VNEWVAL
  52361. SHAREDLISTENERTYPEZ
  52362. TVNEWVAL
  52363. COMMANDCLAUSESFILE
  52364. DATASESSIONv
  52365. SAFETYv
  52366. TCPATH
  52367. TLKEEPCOPYOPEN"
  52368. TLADJUSTCOMMANDCLAUSESINLOADREPORT
  52369. LCPATH
  52370. LCFILE    
  52371. LISESSION
  52372. LCALIAS
  52373. LISELECT
  52374. LLSAFETY
  52375. SETFRXDATASESSION
  52376. COMMANDCLAUSES
  52377. ONEFIELD
  52378.  RECYCLE
  52379. ERASE (FORCEEXT(m.tcFile,"FRX")) &lcRecycle
  52380. ERASE (FORCEEXT(m.tcFile,"FRT")) &lcRecycle
  52381. TCFILE    
  52382. TLRECYCLE
  52383. LCRECYLE
  52384. LLRESETTINGSHAREDCOPY
  52385. ISFRXSWAPCOPYPRESENT
  52386. COMMANDCLAUSES
  52387. FILE    
  52388. LCRECYCLE
  52389. COMMANDCLAUSESFILEb
  52390. THIS.commandClauses.Fileb
  52391. COMMANDCLAUSESFILE
  52392. COMMANDCLAUSES
  52393. FILEk
  52394. TIREPORTINDEX    
  52395. TCCLAUSES
  52396. TOLISTENER
  52397. REPORTPAGES
  52398. REPORTFILENAMES
  52399. COUNT
  52400. PAGENO%
  52401. STRING
  52402. STRING
  52403. STRING
  52404. ShellExecute
  52405. SHELL32.Dll
  52406. FindWindow
  52407. WIN32API
  52408. LCLINK
  52409. LCACTION
  52410. LCPARMS
  52411. SHELLEXECUTE
  52412. SHELL32
  52413. FINDWINDOW
  52414. WIN32API
  52415. CAPTIONs
  52416. GPBITMAP
  52417. \ffc\_gdiplus.vcx
  52418. GpBitmap
  52419. COLORMATRIX
  52420. PR_GdiplusHelper.Prg
  52421. GpAttrib
  52422. PR_GdiplusHelper.Prg
  52423. 333333
  52424. 333333
  52425. 333333
  52426. OFOXYPREVIEWER
  52427. CWATERMARKIMAGE
  52428. NWATERMARKTYPE
  52429. NWATERMARKTRANSPARENCY
  52430. NWATERMARKWIDTHRATIO
  52431. NWATERMARKHEIGHTRATIO
  52432. LUSINGWATERMARK
  52433. LOBMP
  52434. CREATEFROMFILE
  52435. LOATT
  52436. LCMATRIX
  52437. COLORMATRIX
  52438. APPLYCOLORMATRIX
  52439. OWATERMARKBMP
  52440. DESTROYk
  52441. Your report exceeded a specified page limit (C
  52442. Report execution was cancelled.
  52443. Your results are not complete.
  52444. Your report exceeded a specified page limit (C
  52445. Report execution was cancelled.
  52446. Your results are not complete.
  52447. NPAGENO    
  52448. LLINCLUDE
  52449. ISSUCCESSOR    
  52450. PAGELIMIT
  52451. PAGENO
  52452. PAGELIMITQUIETMODE    
  52453. DOMESSAGE
  52454. LASTERRORMESSAGE
  52455. CANCELREPORT
  52456. PAGETOPLIMIT
  52457. PAGETAILLIMIT
  52458. PAGELIMITINSIDERANGE
  52459. Running calculation prepass... 
  52460. CMESSAGE
  52461. THIS    
  52462. QUIETMODE    
  52463. ISRUNNING
  52464. COMMANDCLAUSES
  52465. NODIALOG
  52466. TWOPASSPROCESS
  52467. CURRENTPASS
  52468. isSuccessora
  52469. commandClausesFile
  52470. CLEARERRORS
  52471. SETFRXDATASESSIONENVIRONMENT
  52472. RESETDATASESSION
  52473. FRXHEADERRECNO    
  52474. SUCCESSOR
  52475. ADDPROPERTY
  52476. COMMANDCLAUSESFILE
  52477. PRINTJOBNAME
  52478. COMMANDCLAUSES
  52479. LOADREPORT@
  52480. THIS    
  52481. SUCCESSOR
  52482. SETSUCCESSORDYNAMICPROPERTIES
  52483. CLEARSTATUS@
  52484. THIS    
  52485. SUCCESSOR
  52486. SETSUCCESSORDYNAMICPROPERTIES
  52487. UPDATESTATUS
  52488. ISSUCCESSOR
  52489. SHAREDPAGEWIDTH
  52490. GETPAGEWIDTH
  52491. SHAREDPAGEHEIGHT
  52492. GETPAGEHEIGHT
  52493. RESETDATASESSION    
  52494. SUCCESSOR
  52495. FRXDATASESSION
  52496. CURRENTDATASESSION
  52497. TWOPASSPROCESS
  52498. COMMANDCLAUSES
  52499. SETSUCCESSORDYNAMICPROPERTIES
  52500. UNLOADREPORTY
  52501. ISSUCCESSOR    
  52502. SUCCESSOR
  52503. SETSUCCESSORDYNAMICPROPERTIES
  52504. CANCELREPORTG
  52505. FRXDataSession
  52506. CurrentDataSession
  52507. ISSUCCESSOR
  52508. SHAREDPAGEWIDTH
  52509. GETPAGEWIDTH
  52510. SHAREDPAGEHEIGHT
  52511. GETPAGEHEIGHT    
  52512. SUCCESSOR
  52513. FRXDATASESSION
  52514. CURRENTDATASESSION
  52515. TWOPASSPROCESS
  52516. COMMANDCLAUSES
  52517. SETSUCCESSORDYNAMICPROPERTIES
  52518. AFTERREPORT
  52519. RESETTODEFAULT'
  52520. DATASESSIONv
  52521. lUsingWatermark-
  52522. cWatermarkImage
  52523. nWatermarkType
  52524. nWatermarkTransparency
  52525. nWatermarkWidthRatio
  52526. nWatermarkHeightRatio
  52527. oWatermarkBmp
  52528. VFP Report Output Class
  52529. CallEvaluateContents
  52530. CallEvaluateContents
  52531. CallAdjustObjectSize
  52532. CallAdjustObjectSize
  52533. LISTENERDATASESSION
  52534. ADDPROPERTY
  52535. APPNAME
  52536. CLASS
  52537. HADERROR_
  52538. NBANDOBJCODE    
  52539. NFRXRECNO
  52540. THIS    
  52541. SUCCESSOR
  52542. SETSUCCESSORDYNAMICPROPERTIES
  52543. BEFOREBAND
  52544. RESETDATASESSION
  52545. CMESSAGE
  52546. IPARAMS
  52547. CTITLE
  52548. THIS    
  52549. QUIETMODE    
  52550. ISRUNNING
  52551. COMMANDCLAUSES
  52552. NODIALOG
  52553. ALLOWMODALMESSAGES
  52554. APPNAME
  52555. DOSTATUSD
  52556. ERROR
  52557. ERROR()
  52558. nError
  52559. PROGRAM()
  52560. cMethod
  52561. LINENO()
  52562. nLine
  52563. &lcOnError
  52564. NERROR
  52565. CMETHOD
  52566. NLINE    
  52567. LCONERROR
  52568. LCERRORMSG
  52569. LCCODELINEMSG
  52570. HADERROR
  52571. LIGNOREERRORS    
  52572. STARTMODE
  52573. PREPAREERRORMESSAGE
  52574. LASTERRORMESSAGE    
  52575. DOMESSAGE%
  52576. sharedPageNo
  52577. sharedPageTotal
  52578. sharedOutputPageCount
  52579. sharedGDIPlusGraphics
  52580. sharedGDIPlusGraphics
  52581. sharedPageHeight
  52582. sharedPageWidth
  52583. sharedOutputPageCount
  52584. sharedPageNo
  52585. sharedPageTotal
  52586. sharedListenerType
  52587. SETFRXRUNSTARTUPCONDITIONS
  52588. GETFRXSTARTUPINFO
  52589. RESETDATASESSION
  52590. ISSUCCESSOR
  52591. SHAREDPAGEHEIGHT
  52592. GETPAGEHEIGHT
  52593. SHAREDPAGEWIDTH
  52594. GETPAGEWIDTH
  52595. SHAREDLISTENERTYPE
  52596. LISTENERTYPE
  52597. RESETTODEFAULT    
  52598. SUCCESSOR
  52599. ADDPROPERTY
  52600. SHAREDGDIPLUSGRAPHICS
  52601. SHAREDOUTPUTPAGECOUNT
  52602. SHAREDPAGENO
  52603. SHAREDPAGETOTAL
  52604. SETSUCCESSORDYNAMICPROPERTIES
  52605. FRXDATASESSION
  52606. CURRENTDATASESSION
  52607. TWOPASSPROCESS
  52608. COMMANDCLAUSES
  52609. COMMANDCLAUSESFILE
  52610. BEFOREREPORT
  52611. RESETDYNAMICMETHODCALLS
  52612. CALLEVALUATECONTENTS
  52613. CALLADJUSTOBJECTSIZEu
  52614. OWATERMARKBMP
  52615. DESTROY
  52616. RUNCOLLECTOR    
  52617. SUCCESSOR    
  52618. LISTENERS
  52619. REPORTCLAUSES
  52620. REPORTFILENAMES
  52621. PREVIEWCONTAINER
  52622. COMMANDCLAUSESR
  52623. NBANDOBJCODE    
  52624. NFRXRECNO
  52625. THIS    
  52626. SUCCESSOR
  52627. SETSUCCESSORDYNAMICPROPERTIES    
  52628. AFTERBAND
  52629. NFRXRECNO
  52630. NLEFT
  52631. NWIDTH
  52632. NHEIGHT
  52633. NOBJECTCONTINUATIONTYPE
  52634. CCONTENTSTOBERENDERED
  52635. GDIPLUSIMAGE
  52636. THIS    
  52637. SUCCESSOR
  52638. SETSUCCESSORDYNAMICPROPERTIES
  52639. RENDER
  52640. allowmodalmessages_assign,
  52641. lignoreerrors_assign
  52642. prepareerrormessage
  52643. pushglobalsetsv
  52644. popglobalsets}
  52645. clearerrors
  52646. getlasterrormessage
  52647. addreport
  52648. removereports
  52649. runreports
  52650. setfrxdatasessionenvironmentC
  52651. invokeoncurrentpassv
  52652. resetdatasession
  52653. setfrxdatasessionn
  52654. setcurrentdatasessionz
  52655. quietmode_assign~
  52656. issuccessor_assign
  52657. successor_assign.
  52658. getfrxstartupinfo
  52659. setsuccessordynamicproperties
  52660. appname_assign
  52661. sharedgdiplusgraphics_assign
  52662. sharedpageheight_assignh
  52663. sharedpagewidth_assign
  52664. listenertype_assign#
  52665. outputtype_assign
  52666. sharedoutputpagecount_assignk
  52667. sharedpageno_assign
  52668. sharedpagetotal_assign(
  52669. setfrxrunstartupconditions
  52670. pagelimit_assign
  52671. pagetoplimit_assign
  52672. pagetaillimit_assign
  52673. pagelimitquietmode_assign
  52674. pagelimitinsiderange_assign
  52675. resetdynamicmethodcalls\
  52676. resetcalladjustobjectsize
  52677. resetcallevaluatecontents
  52678. sharedlistenertype_assign
  52679. commandclausesfile_assignz
  52680. preparefrxswapcopy
  52681. removefrxswapcopy
  52682. isfrxswapcopypresent
  52683. adjustreportpagesinfoo'
  52684. shellexec7)
  52685. preparewatermark
  52686. IncludePageInOutput
  52687. DoStatus:3
  52688. LoadReportW4
  52689. ClearStatus
  52690. UpdateStatusX6
  52691. UnloadReport
  52692. CancelReport
  52693. AfterReporti9
  52694. BeforeBand
  52695. DoMessage
  52696. Error6@
  52697. BeforeReport
  52698. Destroy6G
  52699. AfterBand3H
  52700. Render
  52701. GetSysColor
  52702. Win32API
  52703. DATASESSIONv
  52704. ThermBack
  52705. shape
  52706. ThermLabel
  52707. label
  52708. ThermShape
  52709. shape
  52710. THIS    
  52711. THERMFORM
  52712. GETSYSCOLOR
  52713. WIN32API
  52714. LITHERMTOP
  52715. LITHERMLEFT
  52716. LITHERMWIDTH
  52717. LITHERMHEIGHT    
  52718. LISESSION
  52719. RESETDATASESSION    
  52720. SCALEMODE
  52721. HEIGHT
  52722. THERMFORMHEIGHT
  52723. HALFHEIGHTCAPTION
  52724. WIDTH
  52725. THERMFORMWIDTH
  52726. AUTOCENTER
  52727. BORDERSTYLE
  52728. CONTROLBOX
  52729. CLOSABLE    
  52730. ISRUNNING    
  52731. MAXBUTTON    
  52732. MINBUTTON
  52733. MOVABLE
  52734. ALWAYSONTOP
  52735. ALLOWOUTPUT    
  52736. ADDOBJECT
  52737. THERMMARGIN
  52738. SETCURRENTDATASESSION
  52739. SETTHERMFORMCAPTION    
  52740. THERMBACK
  52741. VISIBLE    
  52742. BACKSTYLE
  52743. THERMLABEL
  52744. PARENT
  52745. AUTOSIZE
  52746. CAPTION    
  52747. FORECOLOR
  52748. THERMSHAPE    
  52749. FILLSTYLE    
  52750. BACKCOLOR    
  52751. FILLCOLOR
  52752. DRAWMODE9
  52753. VNEWVAL
  52754. SECONDSTEXTF
  52755. VNEWVAL
  52756. THERMFORMCAPTION
  52757. SETTHERMFORMCAPTION
  52758. VNEWVAL
  52759. THIS    
  52760. ISRUNNING
  52761. THERMFORMHEIGHT
  52762. THERMMARGIN    
  52763. THERMFORM
  52764. VNEWVAL
  52765. THIS    
  52766. ISRUNNING
  52767. THERMFORMWIDTH
  52768. THERMMARGIN    
  52769. THERMFORM
  52770. VNEWVAL
  52771. THIS    
  52772. ISRUNNING
  52773. THERMFORMHEIGHT
  52774. THERMFORMWIDTH
  52775. THERMMARGIN    
  52776. THERMFORM9
  52777. VNEWVAL
  52778. INCLUDESECONDS
  52779. _SCREEN.ActiveFormb
  52780. THIS.CommandClauses.InWindowb
  52781. THIS.CommandClauses.Windowb
  52782. _SCREEN.ActiveFormb
  52783. _SCREEN.ActiveFormb
  52784. LOFORM    
  52785. LOTOPFORM
  52786. LCINWINDOW
  52787. ACTIVEFORM
  52788. SHOWWINDOW
  52789. COMMANDCLAUSES
  52790. INWINDOW
  52791. WINDOW
  52792. FORMS
  52793. NAME    
  52794. FORMCOUNT"
  52795. THIS.CommandClauses.Fileb
  52796. Press Esc to cancel... 
  52797. THIS    
  52798. THERMFORM
  52799. THERMFORMCAPTION
  52800. CNAME
  52801. PRINTJOBNAME
  52802. COMMANDCLAUSES
  52803. CAPTION
  52804. VNEWVAL
  52805. LCTYPE
  52806. CMESSAGE
  52807. THERMCAPTION9
  52808. VNEWVAL
  52809. INITSTATUSTEXT9
  52810. VNEWVAL
  52811. PREPASSSTATUSTEXT9
  52812. VNEWVAL
  52813. RUNSTATUSTEXTh
  52814. TLRESETTIMES
  52815. CURRENTRECORD
  52816. PERCENTDONE
  52817. REPORTSTARTRUNDATETIME
  52818. REPORTSTOPRUNDATETIME
  52819. WINDOWS
  52820. SKIPv
  52821. LISELECT
  52822. LCALIAS
  52823. LISKIPS
  52824. LASKIPS
  52825. DESIGNATEDDRIVER
  52826. DRIVINGALIAS
  52827. SETFRXDATASESSION
  52828. OBJTYPE
  52829. OBJCODE
  52830. SETCURRENTDATASESSION
  52831. PLATFORM
  52832. NBANDOBJCODE    
  52833. NFRXRECNO
  52834. THIS    
  52835. ISRUNNING
  52836. HADERROR
  52837. FRXBANDRECNO
  52838. SETCURRENTDATASESSION
  52839. DRIVINGALIASCURRENTRECNO
  52840. DRIVINGALIAS
  52841. CURRENTRECORD
  52842. COMMANDCLAUSES
  52843. RECORDTOTAL
  52844. CURRENTPASS
  52845. TWOPASSPROCESS
  52846. RESETUSERFEEDBACK
  52847. UPDATESTATUS
  52848. RESETDATASESSION=
  52849. VNEWVAL
  52850. THERMPRECISION
  52851. THIS.CommandClauses.Summaryb
  52852. Summary-
  52853. THIS.CommandClauses.RecordTotalb
  52854. RecordTotal
  52855. COMMANDCLAUSES
  52856. NBANDOBJCODE    
  52857. NFRXRECNO
  52858. SUCCESSORSYS2024
  52859. CURRENTPASS
  52860. SETCURRENTDATASESSION
  52861. DESIGNATEDDRIVER
  52862. SYNCHSTATUS
  52863. RESETDATASESSIONs
  52864. THIS    
  52865. ISRUNNING
  52866. POPGLOBALSETS
  52867. REPORTSTOPRUNDATETIME
  52868. CLEARSTATUS    
  52869. THERMFORM
  52870. RESETDATASESSION
  52871. MACDESKTOP
  52872. SCREEN
  52873. MACDESKTOP
  52874. SCREEN
  52875. CMESSAGE
  52876. LOPARENTFORM    
  52877. LCCAPTION
  52878. LCPARENTFORMNAME
  52879. THIS    
  52880. QUIETMODE    
  52881. ISRUNNING
  52882. COMMANDCLAUSES
  52883. NODIALOG
  52884. THERMCAPTION    
  52885. THERMFORM
  52886. CREATETHERM
  52887. CLOSABLE
  52888. MOVABLE
  52889. THERMSHAPE
  52890. WIDTH
  52891. PERCENTDONE    
  52892. THERMBACK
  52893. VISIBLE
  52894. GETPARENTWINDOWREF
  52895. DESKTOP
  52896. MACDESKTOP
  52897. SHOWWINDOW
  52898. ALWAYSONTOP
  52899. AUTOCENTER
  52900. THERMLABEL
  52901. CAPTION
  52902. LEFTm
  52903. THIS    
  52904. THERMFORM
  52905. VISIBLE    
  52906. SUCCESSOR
  52907. CLEARSTATUS7
  52908. DRIVINGALIASCURRENTRECNO    
  52909. ISRUNNING
  52910. RESETDATASESSION
  52911. Initializing... 
  52912. Running calculation prepass... 
  52913. Creating output... 
  52914. sec(s)
  52915. m.cMessage+ " "+ 
  52916. TRANSFORM(THIS.PercentDone,"999"+ 
  52917. IIF(THIS.ThermPrecision=0,"","."+REPL("9",THIS.ThermPrecision))) + "%" 
  52918. + IIF(NOT THIS.IncludeSeconds, "" , " "+
  52919. TRANSFORM(IIF(THIS.IsRunning,DATETIME(), THIS.ReportStopRunDateTime)-
  52920. THIS.ReportStartRunDateTime)+" " + THIS.SecondsText)
  52921. INITSTATUSTEXT
  52922. PREPASSSTATUSTEXT
  52923. RUNSTATUSTEXT
  52924. SECONDSTEXT
  52925. THERMCAPTION
  52926. HADERROR
  52927. THIS.CommandClauses.RecordTotalb
  52928. THIS    
  52929. ISRUNNING
  52930. CURRENTRECORD
  52931. COMMANDCLAUSES
  52932. RECORDTOTAL
  52933. UPDATESTATUS
  52934. CLEARSTATUS
  52935. DESIGNATEDDRIVER
  52936. SUCCESSORSYS2024    
  52937. THERMFORM
  52938. REPORTSTOPRUNDATETIME
  52939. POPGLOBALSETSp
  52940. Stop report execution?C
  52941. (If you press 'No', report execution will continue.)
  52942. DATASESSIONv
  52943. Report execution was cancelled.C
  52944. Your results are not complete.
  52945. Report execution was cancelled.C
  52946. Your results are not complete.
  52947. THIS    
  52948. ISRUNNING    
  52949. QUIETMODE    
  52950. PAGELIMIT
  52951. PAGENO
  52952. ALLOWMODALMESSAGES    
  52953. DOMESSAGE
  52954. ISSUCCESSOR
  52955. DESIGNATEDDRIVER
  52956. SUCCESSORSYS2024    
  52957. LISESSION
  52958. SETCURRENTDATASESSION    
  52959. THERMFORM
  52960. LASTERRORMESSAGEK
  52961. Notify
  52962. ESCAPE
  52963. PUBLIC &lcRef.   
  52964. ON ESCAPE &lcRef..CancelReport()      
  52965. ESCAPEv
  52966. STARTMODE
  52967. LCREF
  52968. SETNOTIFYCURSOR
  52969. ONESCAPECOMMAND
  52970. ESCAPEREFERENCE    
  52971. SETESCAPE
  52972. RELEASE &lcRef.
  52973. ON ESCAPE &lcRef
  52974. STARTMODE
  52975. LCREF
  52976. ESCAPEREFERENCE
  52977. ONESCAPECOMMAND
  52978. SETNOTIFYCURSOR    
  52979. SETESCAPE
  52980. WINDOWS
  52981. WINDOWS
  52982. WINDOWS
  52983. WINDOWS
  52984. WINDOWS
  52985. LLFRXAVAILABLE
  52986. LCALIAS
  52987. GETREPORTSCOPEDRIVER
  52988. SETFRXDATASESSION
  52989. FRXBANDRECNO
  52990. COMMANDCLAUSES
  52991. SUMMARY
  52992. OBJTYPE
  52993. OBJCODE
  52994. PLATFORM
  52995. SETCURRENTDATASESSION
  52996. DRIVINGALIAS
  52997. THIS    
  52998. ISRUNNING
  52999. LIRECTOTAL
  53000. LNNEWPERCENT
  53001. LLSHOW
  53002. COMMANDCLAUSES
  53003. RECORDTOTAL
  53004. CURRENTRECORD
  53005. THERMPRECISION
  53006. PERCENTDONE
  53007. DOSTATUS
  53008. CURRENTPASS
  53009. TWOPASSPROCESS
  53010. PREPASSSTATUSTEXT
  53011. RUNSTATUSTEXT
  53012. THIS.CommandClauses.NoDialogb
  53013. RESETUSERFEEDBACK    
  53014. QUIETMODE
  53015. COMMANDCLAUSES
  53016. NODIALOG
  53017. DOSTATUS
  53018. INITSTATUSTEXT
  53019. PUSHGLOBALSETS
  53020. CLEARSTATUSM
  53021. NBANDOBJCODE    
  53022. NFRXRECNO
  53023. SYNCHSTATUS
  53024. RESETDATASESSION
  53025. THIS    
  53026. THERMFORM
  53027. createtherm,
  53028. secondstext_assign\
  53029. thermformcaption_assign
  53030. thermformheight_assign5
  53031. thermformwidth_assign1
  53032. thermmargin_assign,    
  53033. includeseconds_assign
  53034. getparentwindowrefj
  53035. setthermformcaption
  53036. thermcaption_assignM
  53037. initstatustext_assign
  53038. prepassstatustext_assignu
  53039. runstatustext_assign
  53040. resetuserfeedback/
  53041. getreportscopedriver
  53042. synchstatus
  53043. thermprecision_assign
  53044. setfrxrunstartupconditions
  53045. BeforeBand
  53046. UnloadReport
  53047. DoStatus
  53048. ClearStatus
  53049. BeforeReport
  53050. Init4 
  53051. AfterReport
  53052. CancelReport4$
  53053. pushglobalsetsf'
  53054. popglobalsets
  53055. getfrxstartupinfof*
  53056. UpdateStatus7.
  53057. LoadReport
  53058. AfterBandA1
  53059. Destroy
  53060. qzPROCEDURE outputfromdata
  53061. LPARAMETERS toListener, tcOutputDBF, tnWidth, tnHeight
  53062. IF VARTYPE(toListener) <> "O"
  53063.     MESSAGEBOX("Invalid parameter. Report listener not available", 16, "Error")
  53064.     RETURN
  53065. ENDIF 
  53066. IF EMPTY(toListener.cFRXAlias)
  53067.     MESSAGEBOX("The helper FRX table is not available. Output can't be created", 16, "Error")
  53068.     RETURN
  53069. ENDIF 
  53070. * =DoFoxyTherm(90, "Texto label", "Titulo")
  53071. * =DoFoxyTherm(-1, "Teste2", "Titulo") && Continuo
  53072. * =DoFoxyTherm() && Desliga
  53073. IF NOT This.lQuietMode2  
  53074.     LOCAL lnSecs
  53075.     lnSecs = SECONDS()
  53076.     *!*    ._InitStatusText    = .GetLoc("INITSTATUS") + SPACE(1)
  53077.     *!*    ._RunStatusText     = .GetLoc("RUNSTATUS")  + SPACE(1)
  53078.     *!*    ._SecondsText       = .GetLoc("SECONDS")    + SPACE(1)
  53079.     =DoFoxyTherm(1, "0%", _Screen.oFoxyPreviewer._InitStatusText)
  53080. ENDIF 
  53081. LOCAL lnSelect, lnOrigDataSession
  53082. lnSelect          = SELECT()
  53083. lnOrigDataSession = SET("Datasession")
  53084. * Ensure we are at the correct DataSession
  53085. SET DATASESSION TO (toListener.ListenerDataSession)
  53086. * SET DATASESSION TO (toListener.CurrentDataSession)
  53087. SELECT (tcOutputDBF)
  53088. * Generate RTF using the stored information
  53089. This.lDefaultMode = .F.
  53090. * This.BeforeReport()
  53091. THIS.nPageHeight = CEILING(THIS.nScreenDPI * tnHeight / 960)
  53092. THIS.nPageWidth  = CEILING(THIS.nScreenDPI * tnWidth / 960)
  53093. THIS.nOutFile    = FCREATE(THIS.cTargetFileName) && .cOutFile)
  53094. LOCAL cHtml
  53095. cHtml = [<!DOCTYPE html><html><head><META http-equiv="Content-Type" content="text/html">] + ;
  53096.     [<title>] + This.cTargetFileName + [</title></head><body>]
  53097. FPUTS(THIS.nOutFile, cHtml)
  53098. LOCAL lnPgFrom, lnPgTo
  53099. lnPgFrom = toListener.COMMANDCLAUSES.RangeFrom  && _goFP._ClausenRangeFrom
  53100. lnPgTo   = IIF(toListener.COMMANDCLAUSES.RangeTo = -1, 999999, _goFP._ClausenRangeTo) && = loListener.COMMANDCLAUSES.RangeTo && -1 = All pages
  53101. && _goFP._ClausenRangeTo
  53102. * Initialize class
  53103. SELECT (tcOutputDBF)
  53104. IF This.lQuietMode2 
  53105.     SCAN
  53106.         IF BETWEEN(Page, lnPgFrom, lnPgTo)
  53107.             This.RenderHTML(FRXRECNO, Left, Top, Width, Height, ContType, UNContents, 0)
  53108.         ENDIF
  53109.     ENDSCAN
  53110. ELSE 
  53111.     LOCAL lnPercent, lnLastPercent, lnDelay, lnTotRecs, lnRec
  53112.     lnLastPercent = 0
  53113.     lnDelay       = 2
  53114.     lnTotRecs     = RECCOUNT()
  53115.     lnRec         = 0
  53116.     SCAN
  53117.         IF BETWEEN(Page, lnPgFrom, lnPgTo)
  53118.             lnRec = lnRec + 1
  53119.             lnPercent = CEILING(100*lnRec/lnTotRecs)
  53120.             IF (lnLastPercent > 0 AND ;
  53121.                     lnPercent - lnLastPercent < lnDelay  AND ;
  53122.                     lnPercent <> 100)
  53123.             ELSE 
  53124.                 =DoFoxyTherm(lnPercent, ;
  53125.                     ALLTRIM(TRANSFORM(lnPercent)) + "%  - " + TRANSFORM(FLOOR(SECONDS() - lnSecs)) + " " + _Screen.oFoxyPreviewer._SecondsText, ;
  53126.                     _Screen.oFoxyPreviewer._RunStatusText)
  53127.             ENDIF 
  53128.             lnLastPercent = lnPercent
  53129.             This.RenderHTML(FRXRECNO, Left, Top, Width, Height, ContType, UNContents, 0)
  53130.         ENDIF
  53131.     ENDSCAN
  53132.     =DoFoxyTherm(100, ;
  53133.         "100%  - " + TRANSFORM(CEILING(SECONDS() - lnSecs)) + " " + _Screen.oFoxyPreviewer._SecondsText, ;
  53134.                 _Screen.oFoxyPreviewer._RunStatusText)
  53135. ENDIF 
  53136. * Finalize
  53137. * This.AfterReport()
  53138. FPUTS(THIS.nOutFile, [</body></html>])
  53139. LOCAL llSaved
  53140. llSaved = FCLOSE(THIS.nOutFile)
  53141. * Delete the pages image files
  53142. LOCAL n, lcFile
  53143. FOR m.n = 1 TO ALEN(This.aPagesImgs,1)
  53144.     lcFile = This.aPagesImgs(m.n)
  53145.     IF NOT EMPTY(lcFile)
  53146.         TRY 
  53147.             DELETE FILE (lcFile)
  53148.         CATCH
  53149.         ENDTRY
  53150.     ENDIF
  53151. ENDFOR
  53152. USE IN SELECT(tcOutputDBF)
  53153. * Restore DataSession, ALias
  53154. SET DATASESSION TO (lnOrigDataSession)
  53155. SELECT (lnSelect)
  53156. IF NOT This.lQuietMode2
  53157.     =DoFoxyTherm()
  53158. ENDIF
  53159. IF llSaved
  53160.     IF This.lObjTypeMode
  53161.         _Screen.oFoxyPreviewer.lSaved = llSaved
  53162.     ENDIF
  53163.     IF This.lOpenViewer 
  53164.         This.ShellExec(This.cTargetFileName)
  53165.     ENDIF 
  53166. ENDIF 
  53167. RETURN
  53168. ENDPROC
  53169. PROCEDURE getbandname
  53170. LPARAMETERS nBandObjCode
  53171. DO CASE
  53172.     CASE nBandObjCode = FRX_OBJCOD_TITLE
  53173.         RETURN 'FRX_OBJCOD_TITLE'
  53174.     CASE nBandObjCode = FRX_OBJCOD_PAGEHEADER
  53175.         RETURN 'FRX_OBJCOD_PAGEHEADER'
  53176.     CASE nBandObjCode = FRX_OBJCOD_COLHEADER
  53177.         RETURN 'FRX_OBJCOD_COLHEADER'
  53178.     CASE nBandObjCode = FRX_OBJCOD_GROUPHEADER
  53179.         RETURN 'FRX_OBJCOD_GROUPHEADER'
  53180.     CASE nBandObjCode = FRX_OBJCOD_DETAIL
  53181.         RETURN 'FRX_OBJCOD_DETAIL'
  53182.     CASE nBandObjCode = FRX_OBJCOD_GROUPFOOTER
  53183.         RETURN 'FRX_OBJCOD_GROUPFOOTER'
  53184.     CASE nBandObjCode = FRX_OBJCOD_COLFOOTER
  53185.         RETURN 'FRX_OBJCOD_COLFOOTER'
  53186.     CASE nBandObjCode = FRX_OBJCOD_PAGEFOOTER
  53187.         RETURN 'FRX_OBJCOD_PAGEFOOTER'
  53188.     CASE nBandObjCode = FRX_OBJCOD_SUMMARY
  53189.         RETURN 'FRX_OBJCOD_SUMMARY'
  53190.     CASE nBandObjCode = FRX_OBJCOD_DETAILHEADER
  53191.         RETURN 'FRX_OBJCOD_DETAILHEADER'
  53192.     CASE nBandObjCode = FRX_OBJCOD_DETAILFOOTER
  53193.         RETURN 'FRX_OBJCOD_DETAILFOOTER'
  53194.     OTHERWISE
  53195.         RETURN ''
  53196. ENDCASE
  53197. ENDPROC
  53198. PROCEDURE getfontstyle
  53199. LPARAMETERS nFontStyle
  53200. LOCAL cStyle
  53201. cStyle = ''
  53202. * extended styles
  53203. IF nFontStyle = FRX_FONTSTYLE_UNDERLINED
  53204.     cStyle = 'U'
  53205.     nFontStyle = nFontStyle - FRX_FONTSTYLE_UNDERLINED
  53206. ENDIF
  53207. IF nFontStyle = FRX_FONTSTYLE_STRIKETHROUGH
  53208.     cStyle = cStyle + 'S'
  53209.     nFontStyle = nFontStyle - FRX_FONTSTYLE_STRIKETHROUGH
  53210. ENDIF
  53211. * standart styles
  53212. DO CASE
  53213.     CASE nFontStyle = FRX_FONTSTYLE_NORMAL
  53214.         cStyle = cStyle + 'N'
  53215.     CASE nFontStyle = FRX_FONTSTYLE_BOLD
  53216.         cStyle = cStyle + 'B'
  53217.     CASE nFontStyle = FRX_FONTSTYLE_ITALIC
  53218.         cStyle = cStyle + 'I'
  53219.     CASE nFontStyle = FRX_FONTSTYLE_BOLD + FRX_FONTSTYLE_ITALIC
  53220.         cStyle = cStyle + 'BI'
  53221. ENDCASE
  53222. RETURN cStyle
  53223. ENDPROC
  53224. PROCEDURE rgbtohex
  53225. LPARAMETERS nReg, nGreen, nBlue
  53226. RETURN [#] + RIGHT(TRANSFORM(MAX(nReg, 0), [@0]), 2) + ;
  53227.     RIGHT(TRANSFORM(MAX(nGreen, 0), [@0]), 2) + RIGHT(TRANSFORM(MAX(nBlue, 0), [@0]), 2)
  53228. ENDPROC
  53229. PROCEDURE getcontinuationtype
  53230. LPARAMETERS nObjectContinuationType
  53231. DO CASE
  53232.     CASE nObjectContinuationType = LISTENER_CONTINUATION_NONE
  53233.         RETURN 'LISTENER_CONTINUATION_NONE'
  53234.     CASE nObjectContinuationType = LISTENER_CONTINUATION_START
  53235.         RETURN 'LISTENER_CONTINUATION_START'
  53236.     CASE nObjectContinuationType = LISTENER_CONTINUATION_MIDDLE
  53237.         RETURN 'LISTENER_CONTINUATION_MIDDLE'
  53238.     CASE nObjectContinuationType = LISTENER_CONTINUATION_END
  53239.         RETURN 'LISTENER_CONTINUATION_END'
  53240.     OTHERWISE
  53241.         RETURN ''
  53242. ENDCASE
  53243. ENDPROC
  53244. PROCEDURE getpageimg
  53245. #DEFINE OutputJPEG     102
  53246. #DEFINE OutputPNG     104
  53247. LOCAL loListener as ReportListener 
  53248. * loListener = IIF(VARTYPE(This.oActiveListener)="O", This.oActiveListener, This)
  53249. loListener = This  && This.oActiveListener
  53250. LOCAL lnPage
  53251. lnPage = PAGE - loListener.CommandClauses.RangeFrom + 1
  53252. DIMENSION This.aPagesImgs(lnPage)
  53253. IF EMPTY(This.aPagesImgs(lnPage))
  53254.     LOCAL lnDeviceType, lcFile, lnDeviceType, lnHandle
  53255.     lnDeviceType = OutputJpeg  && OutputPNG
  53256.     lcFile = ADDBS(GETENV("TEMP")) + SYS(2015) + ".JPG" && ".PNG"
  53257.     loListener.OutputPage(lnPage, lcFile, lnDeviceType)
  53258.     This.aPagesImgs(lnPage) = lcFile
  53259. ENDIF 
  53260. RETURN This.aPagesImgs(lnPage)
  53261. ENDPROC
  53262. PROCEDURE getpicturefromlistener
  53263. * 2011/02/25 CChalom
  53264. * When we can't access the image from the EXE or from a General field, we still can get 
  53265. * an image of the object, and draw it to the PDF document
  53266. LPARAMETERS tnX, tnY, tnWidth, tnHeight, tcFile
  53267. LOCAL lcFile
  53268. lcFile = This.GetPageImg()
  53269. IF EMPTY(lcFile)
  53270.     RETURN .F. && Could not load image
  53271. ENDIF 
  53272. * Horizontal and Vertical factors to divide to convert to the correct coordinate 
  53273. LOCAL lnHor, lnVert
  53274. lnHor  = 9.972
  53275. lnVert = 9.996
  53276. lcNewFile = This.CropImage(lcFile, tnX / lnHor, tnY / lnVert, tnWidth / lnHor, tnHeight / lnVert, tcFile)
  53277. RETURN lcNewFile
  53278. ENDPROC
  53279. PROCEDURE processimages
  53280. LPARAMETERS tnLeft, tnTop, tnWidth, tnHeight, cContentsToBeRendered
  53281. * TODO:
  53282. * Manage new possibilities for storing images, using the new properties:
  53283. * cExternalFileLocation = ".\images"  
  53284. * lCopyImageFilesToExternalFileLocation = .T.
  53285. * Create Images directory
  53286. LOCAL lcFile, lcPath, lcShortPath, lcImageCopy, lcPathLocation
  53287. lcFile = This.cTargetFileName
  53288. IF EMPTY(This.cExternalFileLocation)
  53289.     lcPathLocation = JUSTSTEM(lcFile) + "_IMAGES"
  53290. ELSE 
  53291.     lcPathLocation = This.cExternalFileLocation
  53292. ENDIF
  53293. lcPath = ADDBS(JUSTPATH(lcFile)) + lcPathLocation
  53294. lcShortPath = lcPathLocation + "\" + JUSTFNAME(cContentsToBeRendered)
  53295. IF NOT DIRECTORY(lcPath)
  53296.     MKDIR (lcPath)
  53297. ENDIF
  53298. DO CASE
  53299. CASE EMPTY(cContentsToBeRendered)  && General field
  53300.     This.nImgCounter = This.nImgCounter + 1
  53301.     lcImageCopy = ADDBS(lcPath) + "_" + TRANSFORM(This.nImgCounter) + ".jpg"
  53302.     This.GetPictureFromListener(This.nX0, This.nY0, This.nW0, This.nH0, lcImageCopy)
  53303.     lcShortPath = JUSTSTEM(lcFile) + "_IMAGES" + "\" + "_" + TRANSFORM(This.nImgCounter) + ".jpg"
  53304. CASE NOT EMPTY(SYS(2000, cContentsToBeRendered))  && File is accessible in the disk
  53305.     lcImageCopy = ADDBS(lcPath) + JUSTFNAME(cContentsToBeRendered)
  53306.     IF PR_PathFileExists(lcImageCopy + CHR(0)) = 0 && PR_PathFileExists function in FoxyPreviewer.app
  53307. *    IF NOT FILE(lcImageCopy)
  53308.         COPY FILE (cContentsToBeRendered) TO (lcImageCopy)
  53309.     ENDIF
  53310. CASE EMPTY(SYS(2000, cContentsToBeRendered))  && Image embedded in EXE
  53311.     lcImageCopy = ADDBS(lcPath) + JUSTFNAME(cContentsToBeRendered)
  53312.     This.GetPictureFromListener(This.nX0, This.nY0, This.nW0, This.nH0, lcImageCopy)
  53313.     IF PR_PathFileExists(lcImageCopy + CHR(0)) = 0 && PR_PathFileExists function in FoxyPreviewer.app
  53314. *    IF NOT FILE(lcImageCopy)
  53315.         COPY FILE (cContentsToBeRendered) TO (lcImageCopy)
  53316.     ENDIF
  53317. OTHERWISE
  53318.     RETURN ""
  53319. ENDCASE
  53320. * If we could not generate the image copy, leave
  53321. IF PR_PathFileExists(lcImageCopy + CHR(0)) = 0 && PR_PathFileExists function in FoxyPreviewer.app
  53322.     RETURN ""
  53323. ENDIF    
  53324. LOCAL lcHTML, lcImgHTML
  53325. DO CASE
  53326. CASE General = 0        && Clip
  53327.     * Get the picture size
  53328.     LOCAL lnWidth, lnHeight, lnPictWidth, lnPictHeight, lcHTML
  53329.     LOCAL loVFPImg as Image
  53330.     loVFPImg = CREATEOBJECT("Image")
  53331.     loVFPImg.Picture = lcImageCopy
  53332.     lnWidth = loVFPImg.Width
  53333.     lnHeight = loVFPImg.Height
  53334.     loVFPImg = NULL
  53335.     CLEAR RESOURCES (lcImageCopy)
  53336.     lcImgHTML = [<img src="] + lcShortPath + [" width="] + TRANSFORM(lnWidth) + [" height="] + TRANSFORM(lnHeight) + [" alt="">]
  53337.     lcHTML = ;
  53338.         [<span style="position:absolute;left:] + TRANSFORM(tnLeft) + [px;top:] + TRANSFORM(tnTop) + [px;] + ;
  53339.         [clip: rect(0 ] + TRANSFORM(tnWidth) + [px ] + TRANSFORM(tnHeight) + [px 0);] + ;
  53340.         [">] + ;
  53341.         lcImgHTML + ;
  53342.         [</span>]
  53343. *!*    img {    position: absolute;    
  53344. *!*    clip: rect(0 100px 200px 0);    
  53345. *!*    /* clip: shape(top right bottom left); NB 'rect' is the only available option */}
  53346. * <span style="position:absolute;left:9px;top:400px;clip: rect(0 100px 50px 0);"><img src="TEST22222_IMAGES\pr_mail_32.bmp" width="234" height="64"></span>
  53347. CASE General = 1    && Isometric
  53348.     * Calculating the image size for isometric images
  53349.     * Get the picture size
  53350.     LOCAL lnWidth, lnHeight, lnPictWidth, lnPictHeight, lcHTML
  53351.     LOCAL loVFPImg as Image
  53352.     loVFPImg = CREATEOBJECT("Image")
  53353.     loVFPImg.Picture = lcImageCopy
  53354.     lnPictWidth  = loVFPImg.Width
  53355.     lnPictHeight = loVFPImg.Height
  53356.     loVFPImg     = NULL
  53357.     CLEAR RESOURCES (lcImageCopy)
  53358.     * Isometric Adjustment
  53359.     LOCAL lnHorFactor, lnVertFactor, lnResizeFactor, lnIsoWidth, lnIsoHeight
  53360.     m.lnHorFactor    = m.tnWidth  / m.lnPictWidth
  53361.     m.lnVertFactor   = m.tnHeight / m.lnPictHeight
  53362.     m.lnResizeFactor = MIN(m.lnHorFactor, m.lnVertFactor)
  53363.     m.lnIsoWidth     = m.lnPictWidth * m.lnResizeFactor
  53364.     m.lnIsoHeight = m.lnPictHeight * m.lnResizeFactor
  53365.     lcImgHTML = [<img src="] + lcShortPath + [" width="] + TRANSFORM(lnIsoWidth) + [" height="] + TRANSFORM(lnIsoHeight) +  [" alt="">]
  53366.     lcHTML = ;
  53367.         [<span style="position:absolute;left:] + TRANSFORM(tnLeft) + [px;top:] + TRANSFORM(tnTop) + [px;] + ;
  53368.         [clip: rect(0 ] + TRANSFORM(tnWidth) + [px ] + TRANSFORM(tnHeight) + [px 0);] + ;
  53369.         [">] + ;
  53370.         lcImgHTML + ;
  53371.         [</span>]
  53372. OTHERWISE 
  53373. *!*    CASE .General = 2    && Stretch
  53374.     lcImgHTML = [<img src="] + lcShortPath + [" width="] + TRANSFORM(tnWidth) + [" height="] + TRANSFORM(tnHeight) +  [" alt="">]
  53375.     lcHTML = ;
  53376.         [<span style="position:absolute;left:] + TRANSFORM(tnLeft) + [px;top:] + TRANSFORM(tnTop) + [px;">] + ;
  53377.         lcImgHTML + ;
  53378.         [</span>]
  53379. ENDCASE 
  53380. RETURN lcHTML
  53381. ENDPROC
  53382. PROCEDURE processtext
  53383. LPARAMETERS tnLeft, tnTop, tnWidth, tnHeight, cContentsToBeRendered
  53384. LOCAL lcHTML, lcText, lcOrigText
  53385. lcOrigText = ALLTRIM(STRCONV(cContentsToBeRendered, 6)) && STRCONV_UNICODE_UTF8) for Russian
  53386. IF EMPTY(lcOrigText)
  53387.     RETURN ""
  53388. ENDIF 
  53389. * Html special chars
  53390. lcText = STRTRAN(lcOrigText, [&], [&]) && first!
  53391. *lcText = STRTRAN(lcText, [ ], [ ])
  53392. lcText = STRTRAN(lcText, [<], [<])
  53393. lcText = STRTRAN(lcText, [>], [>])
  53394. * Alignment settings
  53395. *     Offset = 0 && Left Aligned
  53396. *     Offset = 1 && Right Aligned
  53397. *     Offset = 2 && Center Aligned
  53398. LOCAL lcAlign
  53399. DO CASE
  53400. CASE Offset = 0
  53401.     lcAlign = "text-align: left;"
  53402. CASE Offset = 1
  53403.     lcAlign = "text-align: right;"
  53404. CASE Offset = 2
  53405.     lcAlign = "text-align: center;"
  53406. OTHERWISE
  53407.     lcAlign = ""
  53408. ENDCASE
  53409. * css style for span to output
  53410. LOCAL lcFillHex, lcPreSpan, lcPostSpan, lcForeHex, lcPreFont, lcForeHex, lcPostFont 
  53411. * Mode: 0 = Opaque background; 1 = Transparent
  53412. DO CASE
  53413. *CASE (fillred = 255 AND fillgreen = 255 AND fillblue = 255) OR Mode = 1 && Transparent
  53414. *    lcFillHex = "" && white
  53415. CASE Mode = 1 && Transparent
  53416.     lcFillHex = "" && white
  53417. CASE fillred = -1   AND fillgreen = -1  AND fillblue = -1
  53418.     lcFillHex = THIS.RgbToHex(255,255,255) && White
  53419. *    lcFillHex = "" && white
  53420. OTHERWISE
  53421.     lcFillHex = THIS.RgbToHex(fillred, fillgreen, fillblue)
  53422. ENDCASE
  53423. IF PenRed = -1
  53424.     lcForeHex = THIS.RgbToHex(0, 0, 0)
  53425. ELSE 
  53426.     lcForeHex = THIS.RgbToHex(penred, pengreen, penblue)
  53427. ENDIF
  53428. IF Stretch
  53429.     lcWWrap = [white-space:normal;]
  53430. ELSE 
  53431.     * Get the quantity of lines needed
  53432.     LOCAL lnLines
  53433.     lnLines = 0
  53434.     lnLines = This.GetLinesCnt(lcOrigText, FontFace, FontSize, FontStyle, tnLeft, tnTop, tnWidth, tnHeight)
  53435.     IF lnLines <= 1
  53436.         lcWWrap = [overflow:hidden ;] + [white-space:nowrap;]
  53437.     ELSE 
  53438.         lcWWrap = [white-space:normal;]
  53439.     ENDIF 
  53440. ENDIF 
  53441. lcPreSpan = [<span style="] + ;
  53442.             [position:absolute;left:] + TRANSFORM(tnLeft) + [px;top:] + TRANSFORM(tnTop) + [px;] + ;
  53443.             [width:] + TRANSFORM(tnWidth) + [px;height:] + TRANSFORM(tnHeight) + [px;] + lcAlign + ;
  53444.             IIF(EMPTY(lcFillHex), "", [background-color:] + lcFillHex + [;]) + ;
  53445.             [font-family:] + ALLTRIM(FontFace) + [;] + [font-size:] + TRANSFORM(FONTSIZE+2) + [px;] + ;
  53446.             [color:] +  + lcForeHex + ";" + ;
  53447.             lcWWrap + ;
  53448.             [">]
  53449. lcPostSpan = [</span>]
  53450. *    [word-wrap:break-word;] + ;
  53451. *    [overflow:hidden ;] + ;
  53452. *    [white-space:normal;] + ;
  53453. *    [overflow: visible;] + ;
  53454. * Font attrib
  53455. lcForeHex = THIS.RgbToHex(penred, pengreen, penblue)
  53456. *lcPreFont = [<font face="] + ALLTRIM(FontFace) + [" fontsize=] + TRANSFORM(FONTSIZE-2) + [ color=] + lcForeHex + [>]
  53457. *lcPostFont = [</font>]
  53458. lcPreFont = ""
  53459. lcPostFont = ""
  53460. * Set Html font style
  53461. LOCAL lcFontStyle, lcPreStyle, lcPostStyle
  53462. lcFontStyle = THIS.GetFontStyle(FontStyle)
  53463. STORE '' TO lcPreStyle, lcPostStyle
  53464. IF AT('B', lcFontStyle) > 0
  53465.     lcPreStyle = [<b>]
  53466.     lcPostStyle = [</b>]
  53467. ENDIF
  53468. IF AT('I', lcFontStyle) > 0
  53469.     lcPreStyle = lcPreStyle + [<i>]
  53470.     lcPostStyle = [</i>] + lcPostStyle
  53471. ENDIF
  53472. IF AT('U', lcFontStyle) > 0
  53473.     lcPreStyle = lcPreStyle + [<u>]
  53474.     lcPostStyle = [</u>] + lcPostStyle
  53475. ENDIF
  53476. IF AT('S', lcFontStyle) > 0
  53477.     lcPreStyle = lcPreStyle + [<s>]
  53478.     lcPostStyle = [</s>] + lcPostStyle
  53479. ENDIF
  53480. * write to file
  53481. lcHtml = lcPreSpan + lcPreFont + lcPreStyle + lcText + lcPostStyle + lcPostFont + lcPostSpan
  53482. RETURN lcHTML
  53483. ENDPROC
  53484. PROCEDURE processlines
  53485. LPARAMETERS tnLeft, tnTop, tnWIdth, tnHeight
  53486. LOCAL lcHTML
  53487. *!*    lcHTML = ;
  53488. *!*        [<span style="position:absolute;left:] + TRANSFORM(tnLeft) + [px;top:] + TRANSFORM(tnTop) + [px;width:] + TRANSFORM(tnWidth) + [px;] + ;
  53489. *!*        [height:1px;text-align: left;border:1px solid ] + THIS.RgbToHex(MAX(penred,0), MAX(pengreen,0), MAX(penblue,0)) + [;">] + ;
  53490. *!*        [<font face="Arial" fontsize=10 color=#000000></font></span>]
  53491. * 2013-07-31 Removed the "fontsize=10" invalid attribute
  53492. * lcHTML = ;
  53493.     [<span style="position:absolute;left:] + TRANSFORM(tnLeft) + [px;top:] + TRANSFORM(tnTop) + [px;width:] + TRANSFORM(tnWidth) + [px;] + ;
  53494.     [height:] + TRANSFORM(tnHeight) + [px;text-align: left;border:1px solid ] + THIS.RgbToHex(MAX(penred,0), MAX(pengreen,0), MAX(penblue,0)) + [;">] + ;
  53495.     [<font face="Arial" fontsize=10 color=#000000></font></span>]
  53496. lcHTML = ;
  53497.     [<span style="position:absolute;left:] + TRANSFORM(tnLeft) + [px;top:] + TRANSFORM(tnTop) + [px;width:] + TRANSFORM(tnWidth) + [px;] + ;
  53498.     [height:] + TRANSFORM(tnHeight) + [px;text-align: left;border:1px solid ] + THIS.RgbToHex(MAX(penred,0), MAX(pengreen,0), MAX(penblue,0)) + [;">] + ;
  53499.     [<font face="Arial" fontsize=10 color=#000000></font></span>]
  53500. RETURN lcHTML
  53501. ENDPROC
  53502. PROCEDURE processshapes
  53503. LPARAMETERS tnLeft, tnTop, tnWidth, tnHeight, tnObjectContinuationType
  53504. *!* 2011-08-17 - Jacques Parent
  53505. *!* Added tnObjectContinuationType parameter
  53506. * Process Background information
  53507. LOCAL lcFillHex
  53508. * Mode    : 0 = Opaque background; 1 = Transparent
  53509. * FillPat : 0 = Transparent; others fill patterns (opaque)
  53510. DO CASE
  53511. CASE ((Mode = 1) OR (FillPat = 0)) AND (FillRed = -1) && Transparent
  53512.     lcFillHex = "" && white
  53513. CASE fillred = -1   AND fillgreen = -1  AND fillblue = -1
  53514.     * lcFillHex = "" && White
  53515.     lcFillHex = THIS.RgbToHex(255,255,255) && White
  53516. OTHERWISE
  53517.     lcFillHex = THIS.RgbToHex(fillred, fillgreen, fillblue)
  53518. ENDCASE
  53519. lcFillHex = IIF(EMPTY(lcFillHex), "", [background-color:] + lcFillHex + [;])
  53520. * Process Border color
  53521. LOCAL lcBorderHex
  53522. lcBorderHex = ""
  53523. * PenPat: 0 = Transparent (no border)
  53524. DO CASE
  53525. CASE PenPat = 0 && Transparent
  53526. CASE PenRed = -1
  53527.     lcBorderHex = THIS.RgbToHex(0,0,0) && Black
  53528. OTHERWISE
  53529.     lcBorderHex = THIS.RgbToHex(PenRed, PenGreen, PenBlue)
  53530. ENDCASE
  53531. IF NOT EMPTY(lcBorderHex)
  53532.     *!* --------------------------------------------------------------------------------------------------------
  53533.     *!* --------------------------------------------------------------------------------------------------------
  53534.     *!* --------------------------------------------------------------------------------------------------------
  53535.     *!* 2011-08-17 - Jacques Parent
  53536.     *!* In case tnObjectContinuationType is <> 0, we must deactivate some borders...
  53537.     DO CASE
  53538.         CASE tnObjectContinuationType == 1    && Top of box only
  53539.             lcBorderHex = [border-left:] + TRANSFORM(PenSize) + [px ] + lcBorderHex + [ solid;] +;
  53540.                           [border-right:] + TRANSFORM(PenSize) + [px ] + lcBorderHex + [ solid;] +;
  53541.                           [border-top:] + TRANSFORM(PenSize) + [px ] + lcBorderHex + [ solid;]
  53542.         CASE tnObjectContinuationType == 2    && Middle of box only
  53543.             lcBorderHex = [border-left:] + TRANSFORM(PenSize) + [px ] + lcBorderHex + [ solid;] +;
  53544.                           [border-right:] + TRANSFORM(PenSize) + [px ] + lcBorderHex + [ solid;]
  53545.         CASE tnObjectContinuationType == 3    && Bottom of box only
  53546.             lcBorderHex = [border-left:] + TRANSFORM(PenSize) + [px ] + lcBorderHex + [ solid;] +;
  53547.                           [border-right:] + TRANSFORM(PenSize) + [px ] + lcBorderHex + [ solid;] +;
  53548.                           [border-bottom:] + TRANSFORM(PenSize) + [px ] + lcBorderHex + [ solid;]
  53549.         OTHERWISE    && Complete box
  53550.             lcBorderHex = [border:] + TRANSFORM(PenSize) + [px ] + ;
  53551.                 lcBorderHex + [ solid;]
  53552.             * border:1px solid 
  53553.     ENDCASE
  53554.     *!* --------------------------------------------------------------------------------------------------------
  53555.     *!* --------------------------------------------------------------------------------------------------------
  53556.     *!* --------------------------------------------------------------------------------------------------------
  53557. ENDIF 
  53558. LOCAL lcHTML
  53559. lcHTML = ;
  53560.     [<span style="position:absolute;left:] + TRANSFORM(tnLeft) + [px;top:] + TRANSFORM(tnTop) + [px;width:] + TRANSFORM(tnWidth) + [px;] + ;
  53561.     [height:] + TRANSFORM(tnHeight) + [px;text-align: left;] + ;
  53562.     lcBorderHex + ;
  53563.     lcFillHex + [">] + [ ] + ;
  53564.     [</span>]
  53565. RETURN lcHTML
  53566. ENDPROC
  53567. PROCEDURE getlinescnt
  53568. LPARAMETERS tcText, tcFontName, tnSize, tcStyle, tnLeft, tnTop, tnWidth, tnHeight
  53569. LOCAL loFont, lnChars, lnLines, lnHeight, lnWidth, lnFactor
  53570. LOCAL loRect as GpRectangle OF HOME() + "\ffc\_Gdiplus.vcx"
  53571. loRect = NEWOBJECT("GPRectangle", "_Gdiplus.vcx", "", 0, 0, tnWidth, tnHeight)
  53572. * Create a font object using the text object's settings.
  53573. loFont = NEWOBJECT("GPFont", "_Gdiplus.vcx")
  53574. loFont.Create(tcFontName, tnSize, tcStyle, 3)
  53575. LOCAL loGfx as GpGraphics OF HOME() + "\ffc\_Gdiplus.vcx"
  53576. loGfx  = NEWOBJECT("GpGraphics", "_Gdiplus.vcx")
  53577. lnFactor = 1 && 10
  53578. loGfx.CreateFromHWND(_Screen.HWnd)
  53579. loGfx.PageUnit  = 1
  53580. loGfx.PageScale = 0.3
  53581. loRect.w = tnWidth  / lnFactor
  53582. loRect.h = tnHeight / lnFactor
  53583. LOCAL loSize as GpSize OF HOME() + "\ffc\_Gdiplus.vcx"
  53584. loSize = loGfx.MeasureStringA(tcText, loFont, loRect.GdipRectF, .F., @lnChars, @lnLines)
  53585. lnWidth  = loSize.w
  53586. lnHeight = loSize.h
  53587. RETURN lnLines
  53588. * loGfx.SetHandle(0)
  53589. *RETURN (lnHeight / 960) * 72 * lnFactor
  53590. ENDPROC
  53591. PROCEDURE cropimage
  53592. Lparameters lcFile As String, tnX, tnY, lnWidth As Integer, lnHeight As Integer, tcNewFile
  53593. IF EMPTY(tcNewFile)
  53594.     tcNewFile = FORCEEXT(This._cTempFolder + Sys(2015), lcEXT)
  53595. ENDIF
  53596. Local loBmp As gpBitmap OF HOME() + "ffc\_gdiplus.vcx"
  53597. loBmp = NEWOBJECT("GpBitmap", "_GdiPlus.vcx")
  53598. loBmp.CreateFromFile(lcFile)
  53599. lnHeight = MIN(lnHeight, loBmp.ImageHeight)
  53600. lnWidth  = MIN(lnWidth , loBmp.ImageWidth)
  53601. LOCAL lhBitmap, lnStatus
  53602. lhBitmap = 0
  53603. * Function used in the CropImage method
  53604. DECLARE Long GdipCloneBitmapAreaI IN GDIPLUS.DLL AS pdfxGdipCloneBitmapAreaI Long x, Long y, Long nWidth, Long Height, Long PixelFormat, Long srcBitmap, Long @dstBitmap
  53605. lnStatus = pdfxGdipCloneBitmapAreaI(tnX, tnY, lnWidth, lnHeight, loBmp.PixelFormat, loBmp.GetHandle(), @lhBitmap)
  53606. IF (lnStatus <> 0) OR (lhBitmap = 0)
  53607.     loBmp = NULL
  53608.     * lnHandle = 0
  53609.     RETURN ""
  53610. ENDIF 
  53611. LOCAL loCropped As gpBitmap OF HOME() + "ffc\_gdiplus.vcx"
  53612. loCropped = NEWOBJECT("GpBitmap", "_GdiPlus.vcx")
  53613. loCropped.SetHandle(lhBitmap, .T.)  && Owns handle, please destroy the Bmp object when releasing
  53614. loCropped.SetResolution(loBmp.HorizontalResolution, loBmp.VerticalResolution)
  53615. LOCAL lcEXT, lcEncoder
  53616. lcEXT = UPPER(JUSTEXT(lcFile))
  53617. lcEncoder = IIF(lcEXT = "PNG", "image/png", "image/jpeg")
  53618. LOCAL lcCroppedFile
  53619. lcCroppedFile = tcNewFile && FORCEEXT(This._cTempFolder + Sys(2015), lcEXT)
  53620. loCropped.SaveToFile(lcCroppedFile, lcEncoder)
  53621. loCropped = NULL
  53622. loBMP     = NULL
  53623. This.oImages.Add(lcCroppedFile)
  53624. RETURN lcCroppedFile
  53625. ENDPROC
  53626. PROCEDURE renderhtml
  53627. * 2011-07-14 CChalom:
  53628. * Introduced text alignment, Width and Height
  53629. * Adjusted positions
  53630. * Fixed transparent background texts
  53631. * Reduced FontSize in 2 points to make text fit in space
  53632. * Added lines
  53633. * Created separate methods to deal with different tasks
  53634. * TODO:
  53635. * Manage images and shapes
  53636. LPARAMETERS nFRXRecno, nLeft, nTop, nWidth, nHeight, nObjectContinuationType, cContentsToBeRendered, GDIPlusImage
  53637. This.nX0 = nLeft
  53638. This.nY0 = nTop
  53639. This.nW0 = nWidth
  53640. This.nH0 = nHeight
  53641. LOCAL lcDebugInfo, lcHTML
  53642. IF THIS.lDebug
  53643.     lcDebugInfo = [<!-- nLeft:] + TRANSFORM(nLeft) + [, nTop:] + TRANSFORM(nTop) + [, nWidth:] + ;
  53644.         TRANSFORM(nWidth) + [, nHeight:] + TRANSFORM(nHeight) + [, ContinuationType:] + ;
  53645.         THIS.GetContinuationType(nObjectContinuationType) + [, cContents:] + cContentsToBeRendered + [ -->]
  53646.     FPUTS(THIS.nOutFile, lcDebugInfo)
  53647. ENDIF
  53648. #Define OBJ_COMMENT                  0
  53649. #Define OBJ_LABEL                    5
  53650. #Define OBJ_LINE                     6
  53651. #Define OBJ_RECTANGLE                7
  53652. #Define OBJ_FIELD                    8
  53653. #Define OBJ_PICTURE                 17
  53654. #Define OBJ_VARIABLE                18
  53655. LOCAL lnAdjust
  53656. lnAdjust = 1.10
  53657. * dpi2pix
  53658. nLeft   = CEILING(CEILING(THIS.nScreenDPI * nLeft / 960) * lnAdjust)
  53659. nTop    = ROUND(THIS.nScreenDPI * nTop / 960, 0)
  53660. nWidth  = CEILING(CEILING(THIS.nScreenDPI * nWidth / 960) * lnAdjust)
  53661. nHeight = CEILING(THIS.nScreenDPI * nHeight / 960)
  53662. IF PAGE > 1
  53663. *    nTop = THIS.nPageHeight * (PAGE - This.oActiveListener.CommandClauses.RangeFrom) + nTop && Original -1
  53664.     nTop = THIS.nPageHeight * (PAGE - This.CommandClauses.RangeFrom) + nTop && Original -1
  53665. ENDIF
  53666. DO CASE
  53667. CASE ObjType = OBJ_LINE
  53668.     lcHTML = This.ProcessLines(nLeft, nTop, nWidth, nHeight)
  53669. CASE ObjType = OBJ_RECTANGLE
  53670.     lcHTML = This.ProcessShapes(nLeft, nTop, nWidth, nHeight, nObjectContinuationType)
  53671.     *!* 2011-08-17 - Jacques Parent
  53672.     *!* Added nObjectContinuationType parameter
  53673. CASE INLIST(ObjType, OBJ_LABEL, OBJ_FIELD)
  53674.     lcHTML = This.ProcessText(nLeft, nTop, nWidth, nHeight, cContentsToBeRendered)
  53675. CASE ObjType = OBJ_PICTURE
  53676.     lcHTML = This.ProcessImages(nLeft, nTop, nWidth, nHeight, cContentsToBeRendered)
  53677. OTHERWISE
  53678.     RETURN
  53679. ENDCASE
  53680. IF VARTYPE(lcHTML) <> "C"
  53681.     RETURN 
  53682. ENDIF
  53683. IF NOT EMPTY(lcHTML)
  53684.     =FPUTS(THIS.nOutFile, lcHtml)
  53685. ENDIF
  53686. ENDPROC
  53687. PROCEDURE prepareoutput
  53688. LOCAL lcOutputDBF, lnWidth, lnHeight
  53689. m.lcOutputDBF = This.GetFullFRXData()
  53690. IF NOT EMPTY(m.lcOutputDBF)
  53691.     m.lnWidth  = This.GETPAGEWIDTH()
  53692.     m.lnHeight = This.GETPAGEHEIGHT()
  53693.     This.OutputFromData(This, m.lcOutputDBF, m.lnWidth, m.lnHeight)
  53694. ENDIF
  53695. ENDPROC
  53696. PROCEDURE LoadReport
  53697. This.lDefaultMode = .T.
  53698. DODEFAULT()
  53699. ENDPROC
  53700. PROCEDURE AfterReport
  53701. This.PrepareOutput()
  53702. DODEFAULT()
  53703. ENDPROC
  53704. PROCEDURE AfterBand
  53705. LPARAMETERS nBandObjCode, nFRXRecno
  53706. DODEFAULT(nBandObjCode, nFRXRecno)
  53707. LOCAL cBand
  53708. SET DATASESSION TO THIS.FRXDATASESSION
  53709. GO nFRXRecno IN frx
  53710. cBand = THIS.GetBandName(nBandObjCode)
  53711. IF THIS.lDebug
  53712.     FPUTS(THIS.nOutFile, '<!-- AfterBand:' + cBand + ' -->')
  53713. ENDIF
  53714. IF ATC('pagefooter', cBand) > 0
  53715. * fputs(This.nOutFile, '<hr color = black>')
  53716. ENDIF
  53717. SET DATASESSION TO THIS.CURRENTDATASESSION
  53718. ENDPROC
  53719. PROCEDURE BeforeBand
  53720. LPARAMETERS nBandObjCode, nFRXRecno
  53721. DODEFAULT(nBandObjCode, nFRXRecno)
  53722. SET DATASESSION TO THIS.FRXDATASESSION
  53723. GO nFRXRecno IN frx
  53724. IF THIS.lDebug
  53725.     FPUTS(THIS.nOutFile, '<!-- BeforeBand:' + THIS.GetBandName(nBandObjCode) + ' -->')
  53726. ENDIF
  53727. SET DATASESSION TO THIS.CURRENTDATASESSION
  53728. ENDPROC
  53729. PROCEDURE Destroy
  53730. FCLOSE(This.nOutFile)
  53731. DODEFAULT()
  53732. ENDPROC
  53733. PROCEDURE Init
  53734. * Author: aMaximum
  53735. * Class adapted from the class posted at www.foxclub.ru
  53736. * Original info:
  53737. **************************************************
  53738. *-- Class: html_listener (c:\projects\vfp9_preview\html_listener.vcx)
  53739. *-- ParentClass: reportlistener
  53740. *-- BaseClass: reportlistener
  53741. *-- Time Stamp: 06/18/04 03:09:01 PM
  53742. * http://forum.foxclub.ru/read.php?29,144472
  53743. * http://translate.google.com/translate?js=n&prev=_t&hl=pt-BR&ie=UTF-8&layout=2&eotf=1&sl=ru&tl=en&u=http%3A%2F%2Fforum.foxclub.ru%2Fread.php%3F29%2C144472&act=url
  53744. * http://forum.foxclub.ru/read.php?29,144639,144728
  53745. * http://translate.google.com/translate?js=n&prev=_t&hl=pt-BR&ie=UTF-8&layout=2&eotf=1&sl=ru&tl=en&u=http%3A%2F%2Fforum.foxclub.ru%2Fread.php%3F29%2C144639%2C144728&act=url
  53746. * The report emerged, but the problem with the encoding of Russian letters. What is the trick?  
  53747. * Change in the method of render on strconv 
  53748. * cText = strconv (cContentsToBeRendered, 6)
  53749. *   Or changing 
  53750. * cHtml = [<html><head><META http-equiv="Content-Type" content="text/html;">] + ; 
  53751. *   to 
  53752. * cHtml = [<html><head><META http-equiv="Content-Type" content="text/html;charset=utf-8">] + ;
  53753. * and then there is a UNICODE conversion to UTF-8
  53754. DODEFAULT()
  53755. #define LOGPIXELSX 88
  53756. DECLARE INTEGER GetDeviceCaps IN WIN32API INTEGER HDC, INTEGER ITEM
  53757. DECLARE INTEGER GetDC IN WIN32API INTEGER HWND
  53758. LOCAL HDC, lnScreenDPI
  53759. HDC = GetDC(0)
  53760. lnScreenDPI = GetDeviceCaps( m.HDC, LOGPIXELSX )
  53761. THIS.nScreenDPI = lnScreenDPI
  53762. THIS.lDebug = .F. && VERSION(2) = 2
  53763. This._cTempFolder = ADDBS(SYS(2023)) && ADDBS(GETENV("TEMP"))
  53764. This.oImages = CREATEOBJECT("Collection")
  53765. ENDPROC
  53766. PROCEDURE updateproperties
  53767. DODEFAULT()
  53768. IF NOT This.lObjTypeMode OR (VARTYPE(_Screen.oFoxyPreviewer) <> "O")
  53769.     RETURN
  53770. ENDIF 
  53771. LOCAL loFP
  53772. loFP = _Screen.oFoxyPreviewer
  53773. IF VARTYPE(This.CommandClauses) = "O"
  53774.     *!*    IF This.CommandClauses.Preview
  53775.     *!*        This.lOpenViewer = .T.
  53776.     *!*    ELSE 
  53777.     *!*        This.lOpenViewer = NVL(loFP.lOpenViewer, .T.)
  53778.     *!*    ENDIF
  53779.     This.lOpenViewer = This.CommandClauses.Preview
  53780.     IF NOT EMPTY(This.CommandClauses.ToFile)
  53781.         This.cTargetFileName = This.CommandClauses.ToFile
  53782.     ELSE 
  53783.         IF VARTYPE(_Screen.oFoxyPreviewer) = "O" AND ;
  53784.                 NOT EMPTY(_Screen.oFoxyPreviewer.cDestFile) AND ;
  53785.                 EMPTY(This.cTargetFileName)
  53786.             LOCAL lcDestFile
  53787.             lcDestFile = _Screen.oFoxyPreviewer.cDestFile
  53788.             IF NOT "\" $ lcDestFile
  53789.                 lcDestFile = ALLTRIM(ADDBS(_Screen.oFoxyPreviewer.cOutputPath) + lcDestFile)
  53790.             ENDIF
  53791.             This.cTargetFileName = lcDestFile
  53792.         ELSE
  53793.             LOCAL lcFile
  53794.             lcFile = This.cTargetFileName
  53795.             IF EMPTY(lcFile)
  53796.                 lcFile = PUTFILE("","","HTM")
  53797.             ENDIF
  53798.             IF EMPTY(lcFile)
  53799.                 _ReportListener::CancelReport()
  53800.                 * This.CancelReport()
  53801.                 RETURN .F.
  53802.             ENDIF
  53803.             This.cTargetFileName = lcFile
  53804.         ENDIF
  53805.     ENDIF 
  53806. ENDIF
  53807. * This.QUIETMODE    = NVL(loFP.lQuietMode         , .F.)
  53808. This.lQuietMode2  = NVL(loFP.lQuietMode         , .F.)
  53809. ENDPROC
  53810. PROCEDURE xmlrawtag
  53811. LPARAMETERS m.tcNode, m.tlOpen, m.tcID, m.tcIDRef, m.tvFormatting
  53812. LOCAL m.lcNode
  53813. IF ISNULL(m.tlOpen) OR m.tlOpen
  53814.    m.lcNode = "<" + m.tcNode 
  53815.    IF NOT EMPTY(m.tcID)
  53816.       m.lcNode = m.lcNode + " "+THIS.idAttribute+"='"+m.tcID+"'"
  53817.    ENDIF
  53818.    IF NOT EMPTY(m.tcIDRef)
  53819.       m.lcNode = m.lcNode + " "+THIS.idRefAttribute+"='"+m.tcIDRef+"'"
  53820.    ENDIF
  53821.    IF NOT EMPTY(m.tvFormatting)
  53822.       m.lcNode = m.lcNode + " " + m.tvFormatting
  53823.    ENDIF
  53824.    IF ISNULL(m.tlOpen)
  53825.       m.lcNode = m.lcNode +  "/"
  53826.    ENDIF
  53827.    m.lcNode = m.lcNode + ">"
  53828.    m.lcNode = "</"+ m.tcNode + ">"   
  53829. ENDIF
  53830. RETURN m.lcNode
  53831. ENDPROC
  53832. PROCEDURE xmlrawnode
  53833. LPARAMETERS m.tcNode,m.tcValue, m.tvID, m.tvIDRef, m.tvFormatting
  53834. LOCAL m.lcValue, m.lcNode
  53835. IF PARAMETERS() < 2
  53836.    m.lcValue = ""
  53837.    m.lcValue = THIS.XMLRawConv(m.tcValue)
  53838. ENDIF
  53839. IF EMPTY(m.lcValue) 
  53840.   m.lcNode = THIS.XMLRawTag(m.tcNode,NULL, m.tvID, m.tvIDRef, m.tvFormatting)
  53841.   m.lcNode = THIS.XMLRawTag(m.tcNode, .T., m.tvID, m.tvIDRef, m.tvFormatting)+m.lcValue+THIS.XMLRawTag(m.tcNode)
  53842. ENDIF
  53843. RETURN m.lcNode
  53844. ENDPROC
  53845. PROCEDURE xmlrawconv
  53846. LPARAMETERS m.tcValue
  53847. LOCAL m.lcValue, m.liChar
  53848. * must have ampersand as the first STRTRAN()      
  53849. m.lcValue = STRTRAN(m.tcValue, '&', '&' )      
  53850. m.lcValue = STRTRAN(m.lcValue, '<', '<' )
  53851. m.lcValue = STRTRAN(m.lcValue, '>', '>' )
  53852. m.lcValue = STRTRAN(m.lcValue, '"', '"' )
  53853. m.lcValue = STRTRAN(m.lcValue, ['], ''' )
  53854. m.lcValue = CHRTRAN(m.lcValue, CHR(0)+CHR(4), "  ")
  53855. RETURN m.lcValue
  53856. * TBD: make any adjustments 
  53857. * and, if needed, for different element types if needed
  53858. ENDPROC
  53859. PROCEDURE writeraw
  53860. LPARAMETERS m.tcContents
  53861.  FWRITE(THIS.TargetHandle, m.tcContents) 
  53862. ENDPROC
  53863. PROCEDURE includebreaksindata_assign
  53864. LPARAMETERS m.vNewVal
  53865. * Readonly during report run
  53866. IF VARTYPE(m.vNewVal) = "N" AND ;
  53867.    INLIST(m.vNewVal, ;
  53868.           OUTPUTXML_BREAKS_INDATA,;
  53869.           OUTPUTXML_BREAKS_NONE, ;
  53870.           OUTPUTXML_BREAKS_COLLECTION) AND ;
  53871.    NOT THIS.IsRunning 
  53872.    THIS.IncludeBreaksInData = m.vNewVal
  53873. ENDIF   
  53874. ENDPROC
  53875. PROCEDURE xmlmode_assign
  53876. LPARAMETERS m.vNewVal
  53877. * Readonly during report run
  53878. IF NOT THIS.IsRunning
  53879.    IF VARTYPE(m.vNewVal) = "N" AND ;
  53880.       INLIST(m.vNewVal,;
  53881.              OUTPUTXML_DATA_ONLY,;
  53882.              OUTPUTXML_RDL_ONLY, ;
  53883.              OUTPUTXML_DATA_RDL)
  53884.       THIS.xmlmode = m.vNewVal
  53885.    ENDIF
  53886. ENDIF   
  53887. ENDPROC
  53888. PROCEDURE resetreport
  53889. THIS.IncludePage = .T.
  53890. THIS.IsRunning = .F.
  53891. THIS.DataNodes = NULL
  53892. THIS.PageNodes = NULL
  53893. THIS.ColumnNodes = NULL
  53894. THIS.CurrentBand = NULL
  53895. THIS.CurrentPage = NULL
  53896. THIS.CurrentColumn = NULL
  53897. THIS.evaluateContentsValues = NULL 
  53898. THIS.successorGFXNoRender = NULL
  53899. THIS.ClearStatus()   
  53900. ENDPROC
  53901. PROCEDURE applyxslt
  53902. LPARAMETERS m.tvSource, m.tvProcessor, m.tvParamCollection, m.tvFRXAlias
  53903. LOCAL m.loSource, m.loProcessor, m.lcReturn, m.llSuccess, m.liParam, m.liSession, m.llCharsetsInUse
  53904. m.lcReturn = ""
  53905. STORE NULL TO m.loSource, m.loProcessor
  53906. IF VARTYPE(m.tvSource) = "C" 
  53907.    * first param can be filename, string, or object
  53908.    * if filename or string, test existance
  53909.    * and try to load as a dom object
  53910. *   m.liSession = SET("DATASESSION")
  53911. *   THIS.resetDataSession()
  53912.    m.llCharsetsInUse = THIS.frxCharsetsInUse(m.tvFRXAlias)
  53913.    m.loSource = CREATEOBJECT(OUTPUTXML_DOMDOCUMENTOBJECT)
  53914.    THIS.fixMSXMLObjectForDTDs(m.loSource)
  53915.    DO CASE
  53916.    CASE FILE(m.tvSource) AND NOT m.llCharsetsInUse
  53917.       m.loSource.Load(m.tvSource)
  53918.    CASE FILE(m.tvSource) 
  53919.       *&* m.loSource.Load(m.tvSource) 
  53920.       *&* would introduce problems with the (multi) charset-handling
  53921.       *&* in FRX by engine
  53922.       *&* see notes below
  53923.       m.loSource.LoadXML(FILETOSTR(m.tvSource))
  53924.    OTHERWISE
  53925.       m.loSource.LoadXML(m.tvSource)
  53926.    ENDCASE
  53927. *   SET DATASESSION TO (m.liSession)
  53928.    IF NOT ISNULL(m.loSource) AND ;
  53929.       LEN(m.loSource.XML) > 0 AND ;
  53930.       EMPTY(m.loSource.parseError.reason)
  53931.       m.llSuccess = .T.
  53932.    ELSE
  53933.       m.loSource = NULL
  53934. *      IF NOT ISNULL(m.loSource)
  53935. *         THIS.LastErrorMessage = loSource.parseError.reason
  53936. *      ENDIF   
  53937.    ENDIF
  53938.    * if object, test nodetypestring availability
  53939.    * and then for document/tree shape.
  53940.    IF VARTYPE(m.tvSource) = "O"
  53941.       TRY 
  53942.          IF INLIST("|"+UPPER(m.tvSource.nodeTypeString)+"|", ;
  53943.                        "|DOCUMENT|","|ELEMENT|") && quick and dirty test for tree shape
  53944.             m.loSource = m.tvSource           
  53945.             m.llSuccess = .T.
  53946.          ENDIF
  53947.       ENDTRY
  53948.    ENDIF   
  53949. ENDIF
  53950. IF m.llSuccess 
  53951.    * for failed transformations, return source XML
  53952.    m.lcReturn = m.loSource.XML
  53953.    * as above
  53954.    * second param can be filename or object
  53955.    * if filename, as above
  53956.    *  if object, test for appropriate interface
  53957.    * figure out if it's a processor factory
  53958.    * or an instance (either dom or stylesheet)
  53959.    *  and error out if we can't figure it out
  53960.    m.llSuccess = .F.
  53961.    IF VARTYPE(m.tvProcessor) = "C"    
  53962.       m.loProcessor = THIS.LoadProcessorObject(m.tvProcessor)
  53963.       IF NOT ISNULL(m.loProcessor)
  53964.          m.loProcessor = m.loProcessor.createProcessor()      
  53965.       ENDIF
  53966.    ELSE
  53967.       IF VARTYPE(m.tvProcessor) = "O" 
  53968.          TRY
  53969.             IF VARTYPE(m.tvProcessor.styleSheet) = "O"
  53970.                m.loProcessor = m.tvProcessor
  53971.                * if the object was a processor object
  53972.                * get a stylesheet instance
  53973.                m.loProcessor = m.loProcessor.createProcessor()
  53974.             ENDIF   
  53975.          CATCH
  53976.             * just want to swallow the errors here because
  53977.             * of the primitive tests being used
  53978.          ENDTRY
  53979.       ENDIF
  53980.    ENDIF
  53981.    IF NOT ISNULL(m.loProcessor) 
  53982.       m.llSuccess = .T.
  53983.    ENDIF
  53984. ENDIF
  53985. IF m.llSuccess
  53986.             
  53987.    WITH m.loProcessor
  53988.       IF VARTYPE(m.tvParamCollection) = "O" AND ;
  53989.          UPPER(m.tvParamCollection.BaseClass) == "COLLECTION" AND ;
  53990.          m.tvParamCollection.Count > 0
  53991.          FOR m.liParam = 1 TO m.tvParamCollection.Count
  53992.             .AddParameter(m.tvParamCollection.GetKey(m.liParam), ;
  53993.                          m.tvParamCollection.Item(m.liParam))
  53994.          ENDFOR
  53995.       ENDIF   
  53996.       * always override for current external file location info, if we have one:
  53997.        IF NOT EMPTY(THIS.externalFileLocation)
  53998.           .AddParameter("externalFileLocation", THIS.externalFileLocation)
  53999.        ENDIF          
  54000.       .input = m.loSource
  54001.       .transform()
  54002.       m.lcReturn = .output
  54003.    ENDWITH
  54004. ENDIF
  54005. STORE NULL TO m.loSource, m.loProcessor
  54006. *&* Sedna change to 
  54007. *&* ensure UTF-8 File contents per documented
  54008. *&* behavior of this class.  xsl:output encoding is ignored
  54009. *&* by the msxml processor transform anyway when outputting
  54010. *&* to a string (see http://msdn2.microsoft.com/en-us/library/ms753765.aspx) 
  54011. *&* and as a result we are outputting a file with no encoding
  54012. *&* specified after the transform.  So we should ensure that it
  54013. *&* is in the default XML encoding when none is specified,
  54014. *&* which is UTF-8. But Fox has changed the UTF-16 return value 
  54015. *&* from the MSXML processor objects to DBCS.  We need to fix 
  54016. *&* that at the time we send to disk for other applications to 
  54017. *&* read, can't do it before this point.  We can't do it
  54018. *&* in cases where the user has marked explicit fontcharsets in
  54019. *&* the FRX, since this information is passed along in VFP-RDL XML
  54020. *&* and could be treated differently by different output mechanisms/XSLT.
  54021. *&* We will preserve original behavior in that case.
  54022. IF m.llCharsetsInUse
  54023.    RETURN m.lcReturn
  54024.    RETURN (STRCONV(m.lcReturn,STRCONV_DBCS_UTF8))
  54025. ENDIF   
  54026. ENDPROC
  54027. PROCEDURE currentdocument_assign
  54028. LPARAMETERS m.vNewVal
  54029. * TBD: evaluate for readonly status during the life of the report run
  54030. THIS.currentdocument = m.vNewVal
  54031. ENDPROC
  54032. PROCEDURE idattribute_assign
  54033. LPARAMETERS m.vNewVal
  54034. IF (NOT THIS.IsRunning) AND THIS.VerifyNCName(m.vNewVal)
  54035.    THIS.idattribute = m.vNewVal
  54036. ENDIF   
  54037. ENDPROC
  54038. PROCEDURE idrefattribute_assign
  54039. LPARAMETERS m.vNewVal
  54040. IF (NOT THIS.IsRunning) AND THIS.VerifyNCName(m.vNewVal)
  54041.    THIS.idrefattribute = m.vNewVal
  54042. ENDIF   
  54043. ENDPROC
  54044. PROCEDURE xsltprocessorrdl_assign
  54045. LPARAMETERS m.vNewVal
  54046. DO CASE
  54047. CASE VARTYPE(m.vNewVal) = "X"
  54048.    THIS.XSLTProcessorRDL = NULL
  54049. CASE VARTYPE(m.vNewVal) = "O" 
  54050.    TRY
  54051.      IF VARTYPE(m.vNewVal.stylesheet) = "O"
  54052.        THIS.XSLTProcessorRDL = m.vNewVal
  54053.      ENDIF
  54054.    CATCH 
  54055.    ENDTRY
  54056. CASE VARTYPE(m.vNewVal) = "C" 
  54057.    LOCAL m.loProcessor
  54058.    m.loProcessor = THIS.LoadProcessorObject(m.vNewVal)
  54059.    IF NOT ISNULL(m.loProcessor)
  54060.       THIS.XSLTProcessorRDL = m.loProcessor
  54061.    ENDIF
  54062. ENDCASE
  54063. ENDPROC
  54064. PROCEDURE xsltprocessoruser_assign
  54065. LPARAMETERS m.vNewVal
  54066. DO CASE
  54067. CASE VARTYPE(m.vNewVal) = "X"
  54068.    THIS.XSLTProcessorUser = NULL
  54069. CASE VARTYPE(m.vNewVal) = "O" 
  54070.    TRY
  54071.      IF VARTYPE(m.vNewVal.stylesheet) = "O"
  54072.        THIS.XSLTProcessorUser = m.vNewVal
  54073.      ENDIF
  54074.    CATCH 
  54075.    ENDTRY
  54076. CASE VARTYPE(m.vNewVal) = "C" 
  54077.    LOCAL m.loProcessor
  54078.    m.loProcessor = THIS.LoadProcessorObject(m.vNewVal)
  54079.    IF NOT ISNULL(m.loProcessor)
  54080.       THIS.XSLTProcessorUser = m.loProcessor
  54081.    ENDIF
  54082. ENDCASE
  54083. ENDPROC
  54084. PROCEDURE resetdocument
  54085. * Do *not* reset 
  54086. * page number/total
  54087. THIS.ResetReport()   
  54088. THIS.CloseTargetFile()
  54089. THIS.NoPageEject = .F.
  54090. IF THIS.HadError
  54091.    THIS.ResetToDefault("QuietMode")
  54092. ENDIF   
  54093. THIS.CurrentDocument = NULL
  54094. ENDPROC
  54095. PROCEDURE verifyncname
  54096. LPARAMETERS m.tcName
  54097. LOCAL m.llValid, m.liChar, m.lcChar
  54098. DO CASE 
  54099. CASE VARTYPE(m.tcName) # "C" OR EMPTY(m.tcName)
  54100.   * invalid
  54101. CASE LEFT(m.tcName,1) # "_" AND NOT ISALPHA(LEFT(m.tcName,1))
  54102.   * invalid
  54103. CASE LEFT(UPPER(m.tcName),3) = "XML"
  54104.   * invalid
  54105. OTHERWISE
  54106.   m.llValid = .T.  
  54107.   FOR m.liChar = 2 TO LEN(tcName)
  54108.      m.lcChar = SUBSTR(m.tcName,m.liChar,1)
  54109.      IF NOT (ISALPHA(m.lcChar) OR ;
  54110.              ISDIGIT(m.lcChar) OR ;
  54111.              INLIST(m.lcChar,".","-","_"))
  54112.         m.llValid = .F.
  54113.         EXIT
  54114.      ENDIF
  54115.   ENDFOR
  54116. ENDCASE
  54117. RETURN m.llValid 
  54118. ENDPROC
  54119. PROCEDURE includeformattinginlayoutobjects_assign
  54120. LPARAMETERS m.vNewVal
  54121. *TBD: evaluate whether
  54122. * it's okay to do this during a run?
  54123. IF VARTYPE(m.vNewVal) = "L"
  54124.    THIS.IncludeFormattingInLayoutObjects = m.vNewVal
  54125. ENDIF   
  54126. ENDPROC
  54127. PROCEDURE includebandswithnoobjects_assign
  54128. LPARAMETERS m.vNewVal
  54129. IF VARTYPE(m.vNewVal) = "L" AND NOT THIS.IsRunning 
  54130.    THIS.IncludeBandsWithNoObjects = m.vNewVal
  54131. ENDIF   
  54132. ENDPROC
  54133. PROCEDURE verifynodenames
  54134. IF NOT USED("Nodes")
  54135.    RETURN .F.
  54136. ENDIF
  54137. IF ISREADONLY("Nodes")
  54138.    RETURN .T.
  54139. ENDIF   
  54140. LOCAL m.liSelect, m.llSuccess
  54141. m.liSelect = SELECT(0)
  54142. m.llSuccess = .T.
  54143. SELECT Nodes
  54144. SCAN FOR BETWEEN(ObjType,OUTPUTXML_OBJTYPE_NODES,OUTPUTXML_OBJTYPE_NODES+99) ;
  54145.      AND NOT DELETED()
  54146.    IF NOT THIS.VerifyNCName(ObjValue)
  54147.       DELETE
  54148.       m.llSuccess = .F.
  54149.    ENDIF
  54150. ENDSCAN
  54151.                     
  54152. SELECT (m.liSelect)
  54153. RETURN m.llSuccess                    
  54154. ENDPROC
  54155. PROCEDURE verifyattributenames
  54156. * abstract
  54157. ENDPROC
  54158. PROCEDURE nopageeject_assign
  54159. LPARAMETERS m.vNewVal
  54160. IF VARTYPE(m.vNewVal) = "L" AND NOT THIS.IsRunning
  54161.    THIS.NoPageEject = m.vNewVal
  54162. ENDIF   
  54163. ENDPROC
  54164. PROCEDURE loadprocessorobject
  54165. LPARAMETERS m.tcVal
  54166. LOCAL m.loReturn
  54167. m.loReturn = NULL
  54168. IF VARTYPE(m.tcVal) = "C" AND NOT EMPTY(m.tcVal)
  54169.   LOCAL m.loProcessor, m.loStylesheet, m.liSession
  54170.   m.liSession = SET("DATASESSION")
  54171.   THIS.resetDataSession()
  54172.   m.loProcessor  = CREATEOBJECT(OUTPUTXML_XSLT_PROCESSOROBJECT)
  54173.   m.loStyleSheet = CREATEOBJECT(OUTPUTXML_DOMFREETHREADED_DOCUMENTOBJECT)
  54174.   THIS.fixMSXMLObjectForDTDs(m.loStyleSheet)
  54175.   SET DATASESSION TO (m.liSession)
  54176.   IF FILE(m.tcVal)
  54177.     m.loStyleSheet.Load(m.tcVal)
  54178.   ELSE
  54179.     * try to load it as a string
  54180.     m.loStyleSheet.LoadXML(m.tcVal)
  54181.   ENDIF
  54182.   IF LEN(m.loStyleSheet.XML) > 0 AND ;
  54183.      EMPTY(m.loStyleSheet.parseError.reason)
  54184.      m.loProcessor.styleSheet = loStyleSheet
  54185.      m.loReturn = m.loProcessor
  54186. *  ELSE     
  54187. *     THIS.LastErrorMessage = loSStyleSheet.parseError.reason
  54188.   ENDIF   
  54189. ENDIF
  54190. RETURN loReturn
  54191. ENDPROC
  54192. PROCEDURE getrawformattinginfo
  54193. LPARAMETERS m.tnLeft, m.tnTop, m.tnWidth, m.tnHeight, m.tnObjectContinuationType
  54194. LOCAL m.lcInfo
  54195. m.lcInfo = ""
  54196. m.lcInfo = m.lcInfo + " "+THIS.contAttr+"='"+TRANSFORM(m.tnObjectContinuationType)+"'"
  54197. IF THIS.IncludeFormattingInLayoutObjects
  54198.    m.lcInfo = m.lcInfo + " "+THIS.leftAttr+"='"+ TRANSFORM(m.tnLeft)+"'"
  54199.    m.lcInfo = m.lcInfo + " "+THIS.topAttr+"='"+TRANSFORM(m.tnTop)+"'"
  54200.    m.lcInfo = m.lcInfo + " "+THIS.widthAttr+"='"+TRANSFORM(m.tnWidth)+"'"      
  54201.    m.lcInfo = m.lcInfo + " "+THIS.heightAttr+"='"+TRANSFORM(m.tnHeight)+"'"     
  54202. ENDIF
  54203. THIS.setFRXDataSession()
  54204. m.llPageImages = (NOT EMPTY(THIS.currentPageImageFilename)) ;
  54205.                   AND USED(THIS.memberDataAlias)
  54206. IF THIS.includeDataTypeAttributes  OR m.llPageImages
  54207.    IF USED(THIS.FormattingChanges) AND ;
  54208.       SEEK(RECNO("FRX"),THIS.FormattingChanges,"FRXRecno") 
  54209.       SELECT (THIS.FormattingChanges)                  
  54210.       IF THIS.includeDataTypeAttributes
  54211.          IF EMPTY(DText)
  54212.             m.lcInfo = m.lcInfo + " "+THIS.dataTypeAttr+"='"+DType+"'"            
  54213.          ELSE
  54214.             m.lcInfo = m.lcInfo + " "+THIS.dataTypeAttr+"='"+DType+"'"      
  54215.             m.lcInfo = m.lcInfo + " "+THIS.dataTextAttr+"='"+THIS.xmlRawConv(DText)+"'"     
  54216.          ENDIF      
  54217.       ENDIF
  54218.    ENDIF      
  54219.    IF m.llPageImages AND SEEK(RECNO("FRX"),THIS.memberDataAlias,"FRXRecno")
  54220.       SELECT (THIS.memberDataAlias)
  54221.       LOCATE FOR FRXRecno = RECNO("FRX") AND ;
  54222.                  Type == FRX_BLDR_MEMBERDATATYPE AND ;
  54223.                  Name == FRX_BLDR_NAMESPACE_ADVANCEDPROPS AND ;
  54224.                  ExecWhen == FRX_BLDR_ADVPROP_HTML_PAGEIMAGEHREF AND ;
  54225.                  THIS.evaluateStringToBoolean(Execute) 
  54226.       IF FOUND()
  54227.          m.lcInfo = m.lcInfo + " " + THIS.pageImageAttr+"='"+ ;
  54228.                     THIS.currentPageImageFilename +"'"
  54229.       ENDIF
  54230.    ENDIF   
  54231.    SELECT FRX            
  54232. ENDIF   
  54233. RETURN m.lcInfo
  54234. ENDPROC
  54235. PROCEDURE topattr_assign
  54236. LPARAMETERS m.vNewVal
  54237. IF (NOT THIS.IsRunning) AND THIS.VerifyNCName(m.vNewVal)
  54238.    THIS.topAttr = m.vNewVal
  54239. ENDIF   
  54240. ENDPROC
  54241. PROCEDURE leftattr_assign
  54242. LPARAMETERS m.vNewVal
  54243. IF (NOT THIS.IsRunning) AND THIS.VerifyNCName(m.vNewVal)
  54244.    THIS.leftAttr = m.vNewVal
  54245. ENDIF   
  54246. ENDPROC
  54247. PROCEDURE heightattr_assign
  54248. LPARAMETERS m.vNewVal
  54249. IF (NOT THIS.IsRunning) AND THIS.VerifyNCName(m.vNewVal)
  54250.    THIS.heightAttr = m.vNewVal
  54251. ENDIF   
  54252. ENDPROC
  54253. PROCEDURE widthattr_assign
  54254. LPARAMETERS m.vNewVal
  54255. IF (NOT THIS.IsRunning) AND THIS.VerifyNCName(m.vNewVal)
  54256.    THIS.widthAttr = m.vNewVal
  54257. ENDIF   
  54258. ENDPROC
  54259. PROCEDURE contattr_assign
  54260. LPARAMETERS m.vNewVal
  54261. IF (NOT THIS.IsRunning) AND THIS.VerifyNCName(m.vNewVal)
  54262.    THIS.contAttr = m.vNewVal
  54263. ENDIF   
  54264. ENDPROC
  54265. PROCEDURE getvfprdlcontents
  54266. LPARAMETERS m.tcNodeName, m.tlAsString
  54267. * NB: no push/pop session here, don't bother
  54268. * because we're switching back and forth
  54269. * rapidly and not changing anything important
  54270. LOCAL m.liSelectCurrent, m.liSelectFRX, m.liSession, ;
  54271.       m.liFlds, m.liDBFS, m.liIndex1, m.liIndex2, laFlds[1], ;
  54272.       laDBFS[1], laRels[1], m.lcAlias, m.lcKey, m.llDesc, ;
  54273.       m.lcFilter, m.lcRel, m.liRels, m.lcSkip, m.lcResult, m.llWholePage
  54274. LOCAL m.oXA, m.oXT1, m.oXT2, m.oXT3, m.oXT4, m.oXT5,m.oXT6, ;
  54275.       m.oXML, m.oNode, m.oCommand
  54276. m.liSession = SET("DATASESSION")
  54277. THIS.setFRXDataSession()
  54278. m.liSelectFRX = SELECT(0)
  54279. IF THIS.IncludeDataSourcesInVFPRDL
  54280.    CREATE CURSOR VFPDataSource (the_alias c(200), rpt_driver l, the_dbf m, the_order m, order_desc l, the_filter m, the_skip m )
  54281.    CREATE CURSOR flds (the_alias c(200), the_field m, the_type c(1))
  54282.    CREATE CURSOR rels (the_parent c(200), the_target c(200), the_expr m)
  54283.    SELECT flds
  54284.    INDEX ON the_alias TAG the_alias
  54285.    SELECT rels
  54286.    INDEX ON the_parent TAG the_alias
  54287.    SELECT VFPDataSource
  54288.    SET RELATION TO the_alias INTO flds, the_alias INTO rels
  54289.    THIS.setCurrentDataSession() 
  54290.    m.liSelectCurrent = SELECT(0)
  54291.    m.liDBFS = AUSED(laDBFS) 
  54292.    FOR m.liIndex = 1 TO m.liDBFS
  54293.       THIS.setCurrentDataSession()
  54294.       m.lcAlias = laDBFs[m.liIndex,1]
  54295.       SELECT (m.lcAlias)
  54296.       m.lcDBF = DBF()
  54297.       m.liFlds = AFIELDS(laFlds)
  54298.       m.lcKey = SET("ORDER")
  54299.       m.llDesc =  (" DESC" $ UPPER(m.lcKey))   
  54300.       m.lcFilter = SET("FILTER")
  54301.       m.lcSkip = SET("SKIP")
  54302.       IF NOT EMPTY(m.lcKey)
  54303.          m.lcKey = STRTRAN(UPPER(m.lcKey),"TAG","")
  54304.          m.liIndex2 = ATC(" OF",m.lcKey)
  54305.          IF m.liIndex2 > 0
  54306.             m.lcKey = LEFT(m.lcKey,m.liIndex2)
  54307.          ENDIF
  54308.          m.lcKey = ALLTR(m.lcKey)
  54309.          m.liTag = TAGNO(m.lcKey)
  54310.          IF m.liTag > 0
  54311.             m.lcKey = KEY(m.liTag)
  54312.          ELSE
  54313.             m.lcKey = ""
  54314.          ENDIF
  54315.       ENDIF    
  54316.       m.liRels = 0
  54317.       STORE "" TO laRels
  54318.       DO WHILE .T.
  54319.          m.lcRel = RELATION(m.liRels + 1)
  54320.          IF EMPTY(m.lcRel)
  54321.             EXIT
  54322.          ELSE
  54323.             m.liRels = m.liRels + 1
  54324.             DIME laRels[m.liRels,3]
  54325.             laRels[m.liRels,1] = TARGET(m.liRels)
  54326.             laRels[m.liRels,2] = m.lcRel
  54327.          ENDIF
  54328.       ENDDO
  54329.       THIS.setFRXDataSession()
  54330.       INSERT INTO VFPDataSource VALUES (m.lcAlias, (UPPER(m.lcAlias)==UPPER(THIS.Drivingalias)), m.lcDBF, m.lcKey, m.llDesc, m.lcFilter, m.lcSkip)
  54331.       FOR m.liIndex2 = 1 TO m.liFlds
  54332.          INSERT INTO flds VALUES (m.lcAlias, laFlds[m.liIndex2,1], laFlds[m.liIndex2,2])
  54333.       ENDFOR
  54334.       FOR m.liIndex2 = 1 TO m.liRels
  54335.          INSERT INTO rels VALUES (m.lcAlias, laRels[m.liIndex2,1], laRels[m.liIndex2,2])   
  54336.       ENDFOR
  54337.    ENDFOR
  54338.    THIS.setCurrentDataSession()
  54339.    SELECT (m.liSelectCurrent)
  54340. ENDIF
  54341. THIS.setFRXDataSession()
  54342. m.lcAlias = THIS.prepareFrxCopy()
  54343. m.lcResult = THIS.getFRXLayoutObjectFieldList(m.lcAlias)
  54344. SELECT &lcResult ;
  54345.    FROM (m.lcAlias) ;
  54346.    LEFT JOIN Bands ON &lcAlias..UniqueID = Bands.UniqueID ;
  54347.    LEFT JOIN Objects ON &lcAlias..UniqueID = Objects.UniqueID ;
  54348.    WHERE Platform = FRX_PLATFORM_WINDOWS AND NOT DELETED() ;
  54349.    INTO CURSOR VFPFRXLayoutObject READWRITE
  54350. THIS.removeFRXCopy(m.lcAlias)   
  54351. SELECT VFPFRXLayoutObject
  54352. * get rid of compiled data:
  54353. IF TYPE("VFPFRXLayoutObject.Tag") # "U"
  54354.    REPLACE Tag WITH "" ALL FOR NOT INLIST(ObjType,FRX_OBJTYP_VARIABLE,FRX_OBJTYP_BAND,FRX_OBJTYP_DATAENV ,FRX_OBJTYP_DATAOBJ)
  54355. ENDIF
  54356. IF TYPE("VFPFRXLayoutObject.Tag2") # "U"
  54357.    REPLACE Tag2 WITH "" ALL FOR INLIST(ObjType,FRX_OBJTYP_REPORTHEADER,FRX_OBJTYP_DATAENV,FRX_OBJTYP_DATAOBJ)
  54358. ENDIF
  54359. IF TYPE("VFPFRXLayoutObject.Fontface") # "U"
  54360.    REPLACE Fontface WITH ""  ALL FOR INLIST(ObjType,FRX_OBJTYP_DATAENV,FRX_OBJTYP_DATAOBJ)
  54361. ENDIF   
  54362. GO TOP IN VFPFRXLayoutObject
  54363. m.llWholePage = VFPFRXLayoutObject.Top 
  54364. SELECT Nodes.ObjValue AS Name, ;
  54365.        Nodes.ObjType-OUTPUTXML_OBJTYPE_NODES AS Type, ;
  54366.        Nodes.ObjCode AS Code, ;
  54367.        Nodes.ObjInfo AS Info ;
  54368.     FROM Nodes ;   
  54369.     WHERE BETWEEN(ObjType,OUTPUTXML_OBJTYPE_NODES, OUTPUTXML_OBJTYPE_NODES+100) ;
  54370.     AND NOT DELETED() ;
  54371.     INTO CURSOR VFPFRXLayoutNode READWRITE
  54372. m.liFlds = AMEMBERS(laFlds, THIS,0)
  54373. FOR m.liIndex1 = 1 TO m.liFlds
  54374.    IF ATC("attr",laFlds[m.liIndex1]) > 1
  54375.       INSERT INTO VFPFRXLayoutNode VALUES ;
  54376.         (TRANSFORM(EVALUATE("THIS."+laFlds[m.liIndex1])),;
  54377.          0, ;
  54378.          OUTPUTXML_OBJCODE_ATTRIBMEMBER,;
  54379.          laFlds[m.liIndex1]+ " attribute nodename")
  54380.    ENDIF
  54381. ENDFOR   
  54382. m.oXA=CREATEOBJECT("XMLAdapter")
  54383. m.oXA.RespectCursorCP = .T.
  54384. m.oXT4 = m.oXA.AddTableSchema("VFPFRXLayoutObject")
  54385. m.oXT5 = m.oXA.AddTableSchema("VFPFRXLayoutNode")
  54386. IF USED(THIS.memberDataAlias) AND ;
  54387.    RECCOUNT(THIS.memberDataAlias) > 0
  54388.    m.oXT6 = m.oXA.AddTableSchema(THIS.memberDataAlias,.F.,;
  54389.                                  STRCONV("VFPFRXMemberData",STRCONV_DBCS_UNICODE))
  54390. ENDIF
  54391. m.oXA.RespectNesting=.T.
  54392. IF THIS.IncludeDataSourcesInVFPRDL
  54393.    m.oXT1=oXA.AddTableSchema("VFPDataSource")
  54394.    m.oXT2=oXA.AddTableSchema("flds")
  54395.    m.oXT3=oXA.AddTableSchema("rels")
  54396.    m.oXT1.Nest(m.oXT2)
  54397.    m.oXT1.Nest(m.oXT3)
  54398. ENDIF
  54399. m.oXA.XMLSchemaLocation = ""
  54400. m.oXA.ToXML("lcResult")
  54401. THIS.resetDataSession()
  54402. #IF OUTPUTXML = OUTPUTXML_DOM
  54403.    m.oXML = CREATEOBJECT(OUTPUTXML_DOMFREETHREADED_DOCUMENTOBJECT)
  54404. #ELSE
  54405.    m.oXML = CREATEOBJECT("Microsoft.XMLDOM")
  54406. #ENDIF      
  54407. THIS.setFRXDataSession()
  54408. m.oXML.LoadXML(m.lcResult)
  54409. m.oNode = m.oXML.SelectSingleNode("/./*")
  54410. IF NOT ISNULL(THIS.CommandClauses)
  54411.    m.oCommand = m.oXML.createElement("VFPFRXCommand")
  54412.    m.liFlds = AMEMBERS(laFlds, THIS.CommandClauses)   
  54413.    FOR m.liIndex1 = 1 TO m.liFlds
  54414.        m.lcKey = EVAL("THIS.CommandClauses."+laFlds[m.liIndex1]) 
  54415.        IF VARTYPE(m.lcKey) = "L"
  54416.           IF m.lcKey
  54417.              m.lcKey = "true"
  54418.           ELSE
  54419.              m.lcKey = "false"
  54420.           ENDIF
  54421.        ENDIF
  54422.        m.oCommand.SetAttribute(laFlds[m.liIndex1], TRANSFORM(m.lcKey))
  54423.    ENDFOR
  54424.    m.oCommand.SetAttribute("OutputType",TRANSFORM(THIS.OutputType))
  54425.    m.oCommand.SetAttribute("appName",THIS.appName)
  54426.    m.oCommand.SetAttribute("targetFileName",THIS.targetFileName)
  54427.    m.oNode.appendChild(m.oCommand)
  54428. ENDIF   
  54429. m.oCommand =  oXML.createElement("VFPFRXPrintJob")
  54430. m.oCommand.SetAttribute("pagewidth", THIS.SharedPageWidth)
  54431. m.oCommand.SetAttribute("pageheight", THIS.SharedPageHeight)
  54432. m.oCommand.SetAttribute("name",THIS.PrintJobName)
  54433. m.oCommand.SetAttribute("pagedesign",IIF(llWholePage,"whole","printable"))
  54434.    * if PROMPT was used this will probably work
  54435.    m.oCommand.SetAttribute("printresolution",TRANSFORM(PRTINFO(PRT_YRESOLUTION ,SET("PRINTER",3))))
  54436.    #IF .F. 
  54437.       * OUTPUTXML_RESOLUTIONFIX
  54438.       * try to reset based on current printer FRX information
  54439.       GO (THIS.frxHeaderRecno) IN FRX
  54440.       SELECT FRX
  54441.       m.liIndex = IIF(ALINES(laFlds,Picture,.T.) > 0, ASCAN(laFlds,"YRESOLUTION"),0) 
  54442.       IF m.liIndex = 0
  54443.          m.liIndex = IIF(ALINES(laFlds,Expr,.T.) > 0, ASCAN(laFlds,"YRESOLUTION"),0) 
  54444.       ENDIF
  54445.       IF m.liIndex > 0
  54446.          m.liIndex = VAL(ALLTRIM(SUBSTR(laFlds[liIndex],AT("=",laFlds[m.liIndex])+1)))
  54447.          IF m.liIndex > 0
  54448.             m.oCommand.SetAttribute("printresolution",TRANSFORM(m.liIndex))         
  54449.          ELSE
  54450.             m.oCommand.SetAttribute("printresolution","-1")                  
  54451.          ENDIF
  54452.       ENDIF
  54453.       IF USED("SetPrinter")
  54454.          USE IN SetPrinter
  54455.       ENDIF
  54456.    #ENDIF    
  54457. CATCH WHEN .T.
  54458.    * this can happen when there is no printer
  54459.    m.oCommand.SetAttribute("printresolution","-1") 
  54460. ENDTRY   
  54461. m.oNode.appendChild(m.oCommand)
  54462. IF THIS.IncludeDataSourcesInVFPRDL
  54463.    USE IN VFPDataSource
  54464.    USE IN flds
  54465.    USE IN rels
  54466. ENDIF   
  54467. USE IN VFPFRXLayoutObject
  54468. USE IN VFPFRXLayoutNode
  54469. STORE NULL TO ;
  54470.    m.oXA, m.oXT1, m.oXT2, m.oXT3, m.oXT4, m.oXT5, m.oXT6, m.oXML, m.oCommand
  54471. SELECT (m.liSelectFRX)
  54472. SET DATASESSION TO (m.liSession)
  54473. IF tlAsString
  54474.    RETURN m.oNode.XML
  54475.    RETURN m.oNode
  54476. ENDIF
  54477. ENDPROC
  54478. PROCEDURE includedatasourcesinvfprdl_assign
  54479. LPARAMETERS m.vNewVal
  54480. IF VARTYPE(m.vNewVal) = "L" 
  54481.    THIS.IncludeDataSourcesinVFPRDL = m.vNewVal
  54482. ENDIF   
  54483. ENDPROC
  54484. PROCEDURE getpathedimageinfo
  54485. LPARAMETERS m.tObjType, m.tName, m.tPicture, m.tOffset, m.tPathed
  54486. LOCAL m.lcReturn, m.lcFile
  54487. m.lcReturn = ""
  54488. IF m.tObjType =  FRX_OBJTYP_PICTURE  
  54489.    DO CASE
  54490.    CASE m.tOffset = 0 && literal filename
  54491.       m.lcReturn = STRTRAN(m.tPicture,["],[])
  54492.       IF m.tPathed
  54493.          m.lcReturn = FULLPATH(m.tPicture,THIS.CommandClauses.File)      
  54494.       ELSE
  54495.          m.lcReturn = JUSTFNAME(m.tPicture)
  54496.       ENDIF
  54497.    CASE m.tOffset = 1 && general field
  54498.       m.lcReturn = "["+m.tName+"]"
  54499.    CASE m.tOffset = 2 AND TYPE(m.tName)= "O" && imagecontrol
  54500.       m.lcReturn = "["+m.tName+"]"   
  54501.    CASE m.tOffset = 2 AND TYPE(m.tName) = "C" && expression
  54502.       m.lcFile = EVALUATE(m.tName)
  54503.       IF NOT FILE(m.lcFile)
  54504.          m.lcFile = EVALUATE(STRTRAN(m.tName,"()","")) && indirect
  54505.       ENDIF
  54506.       IF FILE(m.lcFile)
  54507.          IF m.tPathed
  54508.             m.lcReturn = FULLPATH(EVALUATE(m.tName))
  54509.          ELSE
  54510.             m.lcReturn = JUSTFNAME(EVALUATE(m.tName))
  54511.          ENDIF
  54512.       ELSE
  54513.          m.lcReturn =  "["+m.tName+"]" 
  54514.       ENDIF
  54515.    OTHERWISE
  54516.       m.lcReturn = "["+m.tName+"]"
  54517.    ENDCASE
  54518. ENDIF
  54519. m.lcReturn = PADR(CHRTRAN(m.lcReturn,"\","/"), OUTPUTXML_CHARFIELD_LIMIT)
  54520. RETURN m.lcReturn
  54521. ENDPROC
  54522. PROCEDURE applyusertransformtooutput
  54523. DO CASE
  54524. CASE (THIS.applyUserTransform AND NOT ;
  54525.    (ISNULL(THIS.XSLTProcessorUser))) OR ;
  54526.    THIS.applyRDLTransform 
  54527.    LOCAL m.lvProcessor
  54528.    * THIS.SaveTargetFileName is real
  54529.    * THIS.TargetFileName is TMP
  54530.    IF THIS.xmlMode = OUTPUTXML_RDL_ONLY
  54531.       m.lvProcessor = THIS.XSLTProcessorRDL
  54532.    ELSE
  54533.       m.lvProcessor = THIS.XSLTProcessorUser
  54534.    ENDIF   
  54535.    IF NOT EMPTY(SYS(2000,THIS.SaveTargetFileName))
  54536.       ERASE (THIS.SaveTargetFileName) NORECYCLE
  54537.    ENDIF
  54538.    *&* Sedna change to ensure better encoding behavior
  54539.    *&* See notes in .ApplyXSLT method
  54540.    STRTOFILE(THIS.ApplyXSLT(THIS.TargetFileName,m.lvProcessor, THIS.XSLTParameters), ;
  54541.              THIS.SaveTargetFileName)
  54542.    ERASE (THIS.TargetFileName) NORECYCLE
  54543.    THIS.TargetFileName = THIS.SaveTargetFileName
  54544.    RETURN .T.
  54545. CASE THIS.applyUserTransform && no processor but public property is still set
  54546.    IF NOT EMPTY(SYS(2000,THIS.SaveTargetFileName))
  54547.       ERASE (THIS.SaveTargetFileName) NORECYCLE
  54548.    ENDIF
  54549.    COPY FILE (THIS.TargetFileName) TO (THIS.SaveTargetFileName)
  54550.    ERASE (THIS.TargetFileName) NORECYCLE
  54551.    THIS.TargetFileName = THIS.SaveTargetFileName
  54552.    RETURN .F.  
  54553. OTHERWISE
  54554.    RETURN .F. 
  54555. ENDCASE
  54556. ENDPROC
  54557. PROCEDURE applyusertransform_assign
  54558. LPARAMETERS m.vNewVal
  54559. IF VARTYPE(m.vNewVal) = "L" AND NOT THIS.IsRunning
  54560.    THIS.applyUserTransform = m.vNewVal
  54561.    IF THIS.applyUserTransform AND ;
  54562.       (ISNULL(THIS.XSLTProcessorUser))
  54563.       THIS.GetDefaultUserXSLT()
  54564.    ENDIF   
  54565. ENDIF   
  54566. ENDPROC
  54567. PROCEDURE getdefaultuserxslt
  54568. ** this is an abstract method for use by subclasses
  54569. ENDPROC
  54570. PROCEDURE setdomformattinginfo
  54571. LPARAMETERS m.toNode, m.tnLeft, m.tnTop, m.tnWidth,m.tnHeight, m.tnObjectContinuationType
  54572. m.toNode.SetAttribute(THIS.ContAttr,TRANSFORM(m.tnObjectContinuationType))                  
  54573. IF THIS.IncludeFormattingInLayoutObjects
  54574.    m.toNode.SetAttribute(THIS.LeftAttr,TRANSFORM(m.tnLeft))
  54575.    m.toNode.SetAttribute(THIS.TopAttr,TRANSFORM(m.tnTop))
  54576.    m.toNode.SetAttribute(THIS.WidthAttr,TRANSFORM(m.tnWidth))             
  54577.    m.toNode.SetAttribute(THIS.HeightAttr,TRANSFORM(m.tnHeight))
  54578. ENDIF
  54579. LOCAL  m.llPageImages
  54580. THIS.setFRXDataSession()
  54581. m.llPageImages = (NOT EMPTY(THIS.currentPageImageFilename)) ;
  54582.                   AND USED(THIS.memberDataAlias)
  54583. IF THIS.includeDataTypeAttributes OR m.llPageImages
  54584.    IF USED(THIS.FormattingChanges) AND ;
  54585.       SEEK(RECNO("FRX"),THIS.FormattingChanges,"FRXRecno") 
  54586.       SELECT (THIS.FormattingChanges)    
  54587.       IF THIS.includeDataTypeAttributes                  
  54588.          IF EMPTY(DText)
  54589.             m.toNode.SetAttribute(THIS.dataTypeAttr,DType)
  54590.          ELSE
  54591.             m.toNode.SetAttribute(THIS.dataTypeAttr,DType)
  54592.             m.toNode.SetAttribute(THIS.dataTextAttr,DText)
  54593.          ENDIF      
  54594.       ENDIF
  54595.    ENDIF    
  54596.    IF m.llPageImages AND SEEK(RECNO("FRX"),THIS.memberDataAlias,"FRXRecno")
  54597.       SELECT (THIS.memberDataAlias)
  54598.       LOCATE FOR FRXRecno = RECNO("FRX") AND ;
  54599.                  Type == FRX_BLDR_MEMBERDATATYPE AND ;
  54600.                  Name == FRX_BLDR_NAMESPACE_ADVANCEDPROPS AND ;
  54601.                  ExecWhen == FRX_BLDR_ADVPROP_HTML_PAGEIMAGEHREF AND ;
  54602.                  INLIST(UPPER(Execute),"YES",".T.","TRUE","1") 
  54603.       IF FOUND()
  54604.          m.toNode.SetAttribute(THIS.pageImageAttr,;
  54605.                                THIS.currentPageImageFileName)
  54606.       ENDIF      
  54607.    ENDIF
  54608.    SELECT FRX              
  54609. ENDIF   
  54610. ENDPROC
  54611. PROCEDURE synchxsltprocessoruser
  54612. IF THIS.applyUserTransform AND NOT ISNULL(THIS.XSLTProcessorUser)
  54613.    THIS.XSLTProcessorUser = NULL
  54614.    THIS.applyUserTransform = .T. && kickstart
  54615. ENDIF 
  54616. ENDPROC
  54617. PROCEDURE insertxmlconfigrecords
  54618. * protected,
  54619. * assumes it is being called with config
  54620. * table already SELECTed.
  54621.    DELETE FOR ;
  54622.       BETWEEN(OBJTYPE,OUTPUTXML_OBJTYPE_NODES, OUTPUTXML_OBJTYPE_NODES + 100)
  54623.    INSERT INTO (ALIAS()) VALUES ;
  54624.     (OUTPUTXML_OBJTYPE_NODES+ FRX_OBJTYP_BAND, ;
  54625.       FRX_OBJCOD_TITLE,'','Title','Title Band nodename')
  54626.    INSERT INTO (ALIAS()) VALUES ;
  54627.     (OUTPUTXML_OBJTYPE_NODES+ FRX_OBJTYP_BAND,;
  54628.       FRX_OBJCOD_PAGEHEADER,'','PH','Page Header Band nodename')
  54629.    INSERT INTO (ALIAS()) VALUES ;
  54630.     (OUTPUTXML_OBJTYPE_NODES+ FRX_OBJTYP_BAND,;
  54631.       FRX_OBJCOD_COLHEADER,'','CH','Column Header Band nodename')
  54632.    INSERT INTO (ALIAS()) VALUES ;
  54633.     (OUTPUTXML_OBJTYPE_NODES+ FRX_OBJTYP_BAND,;
  54634.       FRX_OBJCOD_GROUPHEADER,'','GH','Group Header Band nodename')
  54635.    INSERT INTO (ALIAS()) VALUES ;
  54636.     (OUTPUTXML_OBJTYPE_NODES+ FRX_OBJTYP_BAND, ;
  54637.       FRX_OBJCOD_DETAIL,'','D','Detail Band nodename')
  54638.    INSERT INTO (ALIAS()) VALUES ;
  54639.     (OUTPUTXML_OBJTYPE_NODES+FRX_OBJTYP_BAND, ;
  54640.       FRX_OBJCOD_GROUPFOOTER,'','GF','Group Footer Band nodename')
  54641.    INSERT INTO (ALIAS()) VALUES ;
  54642.     (OUTPUTXML_OBJTYPE_NODES+ FRX_OBJTYP_BAND, ;
  54643.       FRX_OBJCOD_COLFOOTER,'','CF','Column Footer Band nodename')
  54644.    INSERT INTO (ALIAS()) VALUES ;
  54645.     (OUTPUTXML_OBJTYPE_NODES+ FRX_OBJTYP_BAND, ;
  54646.       FRX_OBJCOD_PAGEFOOTER,'','PF','Page Footer Band nodename')
  54647.    INSERT INTO (ALIAS()) VALUES ;
  54648.     (OUTPUTXML_OBJTYPE_NODES+ FRX_OBJTYP_BAND, ;
  54649.       FRX_OBJCOD_SUMMARY,'','Summary','Summary Band nodename')
  54650.    INSERT INTO (ALIAS()) VALUES ;
  54651.     (OUTPUTXML_OBJTYPE_NODES+ FRX_OBJTYP_BAND, ;
  54652.       FRX_OBJCOD_DETAILHEADER,'','DH','Detail Header Band nodename')
  54653.    INSERT INTO (ALIAS()) VALUES ;
  54654.     (OUTPUTXML_OBJTYPE_NODES+ FRX_OBJTYP_BAND, ;
  54655.       FRX_OBJCOD_DETAILFOOTER,'','DF','Detail Footer Band nodename')
  54656.    INSERT INTO (ALIAS()) VALUES ;
  54657.     (OUTPUTXML_OBJTYPE_NODES+ FRX_OBJTYP_REPORTHEADER,;
  54658.       FRX_OBJCOD_REPORTHEADER ,'','VFP-Report','Report root nodename')
  54659.    INSERT INTO (ALIAS()) VALUES ;
  54660.     (OUTPUTXML_OBJTYPE_NODES+ FRX_OBJTYP_LABEL, ;
  54661.       FRX_OBJCOD_OTHER,'','T','Text object nodename')
  54662.    INSERT INTO (ALIAS()) VALUES ;
  54663.     (OUTPUTXML_OBJTYPE_NODES+ FRX_OBJTYP_FIELD, ;
  54664.       FRX_OBJCOD_OTHER,'','E','Expression object nodename')
  54665.    INSERT INTO (ALIAS()) VALUES ;
  54666.     (OUTPUTXML_OBJTYPE_NODES+ FRX_OBJTYP_PICTURE,;
  54667.       FRX_OBJCOD_OTHER,'','P','Picture object nodename')
  54668.    INSERT INTO (ALIAS()) VALUES ;
  54669.     (OUTPUTXML_OBJTYPE_NODES+ FRX_OBJTYP_RECTANGLE,;
  54670.       FRX_OBJCOD_RECTANGLE,'','S','Shape object nodename')
  54671.    INSERT INTO (ALIAS()) VALUES ;
  54672.     (OUTPUTXML_OBJTYPE_NODES+ FRX_OBJTYP_LINE, ;
  54673.       FRX_OBJCOD_OTHER,'','L','Line object nodename')
  54674.    INSERT INTO (ALIAS()) VALUES ;
  54675.     (OUTPUTXML_OBJTYPE_NODES+ FRX_OBJTYP_VARIABLE,;
  54676.       FRX_OBJCOD_OTHER,'','V','Variable nodename')
  54677.    INSERT INTO (ALIAS()) VALUES ;
  54678.     (OUTPUTXML_OBJTYPE_NODES+ FRX_OBJTYP_FONTRES,;
  54679.       FRX_OBJCOD_OTHER,'','FontRes','FontResource nodename')
  54680.    INSERT INTO (ALIAS()) VALUES ;
  54681.     (OUTPUTXML_OBJTYPE_NODES+ FRX_OBJTYP_DATAENV,;
  54682.       FRX_OBJCOD_OTHER,'','DataEnv','DataEnvironment nodename')
  54683.    INSERT INTO (ALIAS()) VALUES ;
  54684.     (OUTPUTXML_OBJTYPE_NODES+ FRX_OBJTYP_DATAOBJ,;
  54685.       FRX_OBJCOD_OTHER,'','DE-Cursor','DE-Cursor nodename')
  54686.    INSERT INTO (ALIAS()) VALUES ;
  54687.     (OUTPUTXML_OBJTYPE_NODES+ FRX_OBJTYP_DATAOBJ, ;
  54688.       FRX_OBJCOD_OTHER+1,'','DE-Relation','DE-Relation nodename')
  54689.      * offset the DE Relation because
  54690.      * this information isn't in ObjType or ObjCode
  54691.      * as distinct from DE-Cursor other than in the Name field
  54692.    INSERT INTO (ALIAS()) VALUES ;
  54693.     (OUTPUTXML_OBJTYPE_NODES+ FRX_OBJTYP_GROUP, ;
  54694.       FRX_OBJCOD_OTHER,'','Group','Group selector nodename')
  54695.    INSERT INTO (ALIAS()) VALUES ;
  54696.     (OUTPUTXML_OBJTYPE_NODES, ;
  54697.      OUTPUTXML_OBJCODE_DOC,'','Reports','XML Document root nodename')
  54698.    INSERT INTO (ALIAS()) VALUES ;
  54699.     (OUTPUTXML_OBJTYPE_NODES,;
  54700.      OUTPUTXML_OBJCODE_DATA,'','Data','Report scope data root nodename')
  54701.    INSERT INTO (ALIAS()) VALUES ;
  54702.     (OUTPUTXML_OBJTYPE_NODES, ;
  54703.      OUTPUTXML_OBJCODE_RDL,'','VFP-RDL','RDL layout description root nodename')
  54704.    INSERT INTO (ALIAS()) VALUES ;
  54705.     (OUTPUTXML_OBJTYPE_NODES, ;
  54706.      OUTPUTXML_OBJCODE_PAGES,'','Pages','Pages collection root nodename')
  54707.    INSERT INTO (ALIAS()) VALUES ;
  54708.     (OUTPUTXML_OBJTYPE_NODES, ;
  54709.      OUTPUTXML_OBJCODE_COLS,'','Columns','Column collection root nodename')
  54710.    *&* Sedna     
  54711.    INSERT INTO (ALIAS()) VALUES ;
  54712.     (OUTPUTXML_OBJTYPE_NODES, ;
  54713.      OUTPUTXML_OBJCODE_RUN,'','Run','Run property set root nodename')
  54714. ENDPROC
  54715. PROCEDURE xsltparameters_assign
  54716. LPARAMETERS m.vNewVal
  54717. DO CASE
  54718. CASE VARTYPE(m.vNewVal) = "X"
  54719.   THIS.XSLTParameters= NULL
  54720. CASE VARTYPE(m.vNewVal) = "O" 
  54721.    TRY
  54722.      IF UPPER(m.vNewVal.BaseClass) == "COLLECTION" 
  54723.        THIS.XSLTParameters = m.vNewVal
  54724.      ENDIF
  54725.    CATCH 
  54726.    ENDTRY
  54727. OTHERWISE
  54728.   THIS.XSLTParameters= NULL
  54729. ENDCASE
  54730. ENDPROC
  54731. PROCEDURE getfrxlayoutobjectfieldlist
  54732. LPARAMETERS m.tcAlias
  54733. * frx
  54734. * PLATFORM,UNIQUEID,TIMESTAMP,OBJTYPE,OBJCODE,NAME,EXPR,VPOS,HPOS,HEIGHT,WIDTH,STYLE,
  54735. * PICTURE,ORDER,UNIQUE,COMMENT,ENVIRON,BOXCHAR,FILLCHAR,TAG,TAG2,PENRED,PENGREEN,PENBLUE,
  54736. * FILLRED,FILLGREEN,FILLBLUE,PENSIZE,PENPAT,FILLPAT,FONTFACE,FONTSTYLE,FONTSIZE,MODE,RULER,
  54737. * RULERLINES,GRID,GRIDV,GRIDH,FLOAT,STRETCH,STRETCHTOP,TOP,BOTTOM,SUPTYPE,SUPREST,NOREPEAT,RESETRPT,PAGEBREAK,COLBREAK,RESETPAGE,GENERAL,SPACING,DOUBLE,SWAPHEADER,SWAPFOOTER,EJECTBEFOR,EJECTAFTER,PLAIN,SUMMARY,ADDALIAS,OFFSET,TOPMARGIN,BOTMARGIN,TOTALTYPE,RESETTOTAL,RESOID,CURPOS,SUPALWAYS,SUPOVFLOW,SUPRPCOL,SUPGROUP,SUPVALCHNG,SUPEXPR,USER
  54738. * objects
  54739. * UNIQUEID,OBJTYPE,OBJCODE,EXPR,VPOS,HPOS,HEIGHT,WIDTH,OBJNAME,LOCALE_ID,START_BAND_ID,BAND_OFFSET,END_BAND_ID,BANDLABEL,SELECTED,OBJ_PICT,BAND_SEQ
  54740. * bands
  54741. * UNIQUEID,OBJTYPE,OBJCODE,EXPR,BANDLABEL,START,STOP,HEIGHT,P_START,P_STOP,P_HEIGHT,RESETTOTAL,BAND_SEQ,REL_BAND_ID
  54742. RETURN ;
  54743.        "RECNO() AS FrxRecno, "+m.tcAlias+".PLATFORM, "+m.tcAlias+".NAME,"+m.tcAlias+".EXPR,"+m.tcAlias+".OFFSET,"+m.tcAlias+".VPOS,"+m.tcAlias+".HPOS,"+m.tcAlias+".HEIGHT,"+;
  54744.        ""+m.tcAlias+".OBJTYPE, "+m.tcAlias+".TAG, "+m.tcAlias+".TAG2,"+m.tcAlias+".PENSIZE,"+m.tcAlias+".PENPAT,"+m.tcAlias+".FILLPAT,"+;
  54745.        ""+m.tcAlias+".WIDTH,"+m.tcAlias+".STYLE,"+m.tcAlias+".PICTURE,"+m.tcAlias+".ORDER,"+m.tcAlias+".COMMENT,"+m.tcAlias+".FILLCHAR,"+;       
  54746.        ""+m.tcAlias+".PENRED,"+m.tcAlias+".PENGREEN,"+m.tcAlias+".PENBLUE,"+m.tcAlias+".FILLRED,"+m.tcAlias+".FILLGREEN,"+m.tcAlias+".FILLBLUE,"+;
  54747.        ""+m.tcAlias+".FONTFACE, "+m.tcAlias+".FONTSTYLE,"+m.tcAlias+".FONTSIZE,"+m.tcAlias+".MODE,"+m.tcAlias+".FLOAT,"+m.tcAlias+".STRETCH,"+m.tcAlias+".STRETCHTOP,"+; 
  54748.        "BITTEST( "+m.tcAlias+".FONTSTYLE, 0 ) AS FontBold,"+ ;
  54749.        "BITTEST( "+m.tcAlias+".FONTSTYLE, 1 ) AS FontItalic,"+ ;
  54750.        "BITTEST( "+m.tcAlias+".FONTSTYLE, 3 ) AS FontUnderline,"+ ;
  54751.        "BITTEST( "+m.tcAlias+".FONTSTYLE, 7 ) AS FontStrikeThrough,"+ ;
  54752.        "THIS.GetPathedImageInfo("+m.tcAlias+".ObjType, "+m.tcAlias+".Name, "+m.tcAlias+".Picture, "+m.tcAlias+".Offset) AS UnpathedImg,"+ ;       
  54753.        "THIS.GetPathedImageInfo("+m.tcAlias+".ObjType, "+m.tcAlias+".Name, "+m.tcAlias+".Picture, "+m.tcAlias+".Offset, .T.) AS PathedImg,"+ ;
  54754.        ""+m.tcAlias+".TOP,"+m.tcAlias+".BOTTOM,"+m.tcAlias+".NOREPEAT,"+m.tcAlias+".PAGEBREAK,"+m.tcAlias+".COLBREAK,"+m.tcAlias+".RESETPAGE,"+m.tcAlias+".GENERAL,"+m.tcAlias+".SPACING,"+ ;
  54755.        ""+m.tcAlias+".SWAPHEADER,"+m.tcAlias+".SWAPFOOTER,"+m.tcAlias+".EJECTBEFOR,"+m.tcAlias+".EJECTAFTER,"+m.tcAlias+".TOTALTYPE,"+m.tcAlias+".RESETTOTAL,"+ ;
  54756.        "IIF("+m.tcAlias+".DOUBLE,"+m.tcAlias+".RESOID,1) AS FONTCHARSET,"+m.tcAlias+".SUPALWAYS,"+m.tcAlias+".SUPOVFLOW,"+m.tcAlias+".SUPRPCOL,"+m.tcAlias+".SUPGROUP,"+m.tcAlias+".SUPVALCHNG,"+m.tcAlias+".SUPEXPR,"+m.tcAlias+".USER,"+ ;
  54757.        "OBJECTS.UniqueID AS ObjID, OBJECTS.ObjName, Objects.Locale_ID,"+ ;
  54758.        "OBJECTS.START_BAND_ID,OBJECTS.BAND_OFFSET,OBJECTS.END_BAND_ID,"+ ;
  54759.        "BANDS.UNIQUEID AS BandID,BANDS.OBJCODE AS BandType,Bands.BANDLABEL,Bands.START,"+;
  54760.        "Bands.STOP,Bands.BAND_SEQ,Bands.REL_BAND_ID, ("+m.tcAlias+".ObjType=9 AND (NOT "+m.tcAlias+".Plain)) AS BandStretch"
  54761. ENDPROC
  54762. PROCEDURE preparefrxcopy
  54763. LOCAL m.lcAlias, m.lcFile
  54764. m.lcAlias = "FRX"
  54765. IF EMPTY(SYS(2000,THIS.CommandClauses.File)) AND ;
  54766.    USED("FRX")
  54767.    *&* streamlined in Sedna leveraging new superclass capabilities.   
  54768.    m.lcFile = THIS.prepareFRXSwapCopy(JUSTPATH(THIS.targetFileName),.T.)
  54769.    m.lcAlias = JUSTSTEM(m.lcFile)   
  54770.    * prepareFRXSwapCopy defines the file name suitably for the
  54771.    * above JUSTSTEM() evaluation -> alias to work all the time.
  54772.    SELECT FRX
  54773. ENDIF
  54774. RETURN m.lcAlias
  54775. ENDPROC
  54776. PROCEDURE removefrxcopy
  54777. LPARAMETERS m.tcAlias
  54778. LOCAL m.lcFile
  54779. IF m.tcAlias # "FRX"
  54780.    m.lcFile = DBF(m.tcAlias)
  54781.    USE IN (m.tcAlias)
  54782.    * streamlined in Sedna using
  54783.    * new superclass feature
  54784.    THIS.removeFRXSwapCopy(m.lcFile) 
  54785. ENDIF      
  54786. ENDPROC
  54787. PROCEDURE adjustxsltparameter
  54788. LPARAMETERS m.tvValue, m.tsKey, m.tlRemoveOnly
  54789. LOCAL m.liIndex, m.liSession
  54790. IF ISNULL(THIS.XSLTParameters) AND NOT m.tlRemoveOnly
  54791.    m.liSession = SET("DATASESSION")
  54792.    THIS.resetDataSession()
  54793.    THIS.XSLTParameters = CREATEOBJECT("Collection")
  54794.    SET DATASESSION TO (m.liSession)
  54795. ENDIF
  54796. IF NOT ISNULL(THIS.XSLTParameters)
  54797.    WITH THIS.XSLTParameters
  54798.       FOR m.liIndex = 1 TO .COUNT
  54799.           IF .GETKEY(m.liIndex) == m.tsKey
  54800.              .REMOVE(m.liIndex)
  54801.              EXIT
  54802.           ENDIF
  54803.       NEXT
  54804.       IF NOT (m.tlRemoveOnly)
  54805.          .ADD(m.tvValue,m.tsKey)
  54806.       ENDIF
  54807.    ENDWITH   
  54808. ENDIF
  54809. ENDPROC
  54810. PROCEDURE getrunnodecontents
  54811. LPARAMETERS m.tlAsString
  54812. LOCAL m.lcItem, m.oXML, m.lvValue, m.liSession
  54813. THIS.setFRXDataSession()
  54814. m.lcItem =  IIF(SEEK( OUTPUTXML_OBJTYPE_NODES+ OUTPUTXML_OBJCODE_RUN , ;
  54815.                       "Nodes","FrxNodes"), ;
  54816.                        Nodes.ObjValue, ;
  54817.                       OUTPUTXML_GOOFTAG)               
  54818.                
  54819. * Handles Cursor, Empty object, Collection
  54820. * Raw or dom method.
  54821. m.lcItem = "<"  + m.lcItem + "/>"
  54822. m.liSession = SET("DATASESSION")
  54823. THIS.resetDataSession()
  54824. #IF OUTPUTXML = OUTPUTXML_DOM
  54825.    m.oXML = CREATEOBJECT(OUTPUTXML_DOMFREETHREADED_DOCUMENTOBJECT)
  54826. #ELSE
  54827.    m.oXML = CREATEOBJECT("Microsoft.XMLDOM")
  54828. #ENDIF      
  54829. SET DATASESSION TO (m.liSession)
  54830. IF m.oXML.LoadXML(m.lcItem)
  54831.    THIS.setCurrentDataSession()
  54832.    DO CASE 
  54833.    CASE ISNULL(THIS.runCollector)
  54834.       m.oXML = NULL
  54835.    CASE VARTYPE(THIS.runCollector) = "C" 
  54836.       IF NOT (USED(THIS.runCollector) AND ;
  54837.               RECCOUNT(THIS.runCollector) > 0)
  54838.          * try FRX datasession
  54839.          THIS.setFRXDataSession()
  54840.       ENDIF        
  54841.       IF (USED(THIS.runCollector) AND ;
  54842.               RECCOUNT(THIS.runCollector) > 0)
  54843.          * two fields significant, first evaluates to property value, 
  54844.          * second is property name
  54845.          LOCAL m.lcField1, m.lcField2, m.liIndex, m.liSelect
  54846.          m.liSelect = SELECT(0)
  54847.          SELECT (THIS.runCollector)
  54848.          FOR m.liIndex = 1 TO FCOUNT()
  54849.              IF INLIST(TYPE(FIELD(m.liIndex)),"M","C")
  54850.                 IF EMPTY(m.lcField1)
  54851.                    m.lcField1 = FIELD(m.liIndex)
  54852.                 ELSE
  54853.                    m.lcField2 = FIELD(m.liIndex)
  54854.                    EXIT
  54855.                 ENDIF
  54856.              ENDIF
  54857.          ENDFOR
  54858.          IF (EMPTY(m.lcField1))
  54859.             m.oXML = NULL
  54860.          ELSE
  54861.             SCAN ALL FOR NOT DELETED()
  54862.                THIS.addRunNode(m.oXML,EVAL(m.lcField1),;
  54863.                             IIF(EMPTY(m.lcField2) OR EMPTY(EVAL(m.lcField2)), ;
  54864.                      "P" + TRANSFORM(RECNO()), EVAL(m.lcField2)))
  54865.             ENDSCAN
  54866.          ENDIF
  54867.       ENDIF         
  54868.       SELECT (m.liSelect)      
  54869.    CASE VARTYPE(THIS.runCollector) = "O" AND ;
  54870.        TYPE("THIS.runCollector.Baseclass") = "U"
  54871.          * empty object
  54872.        LOCAL m.liIndex, m.laMembers[1]
  54873.        IF AMEMBERS(m.laMembers,THIS.runCollector) = 0
  54874.           m.oXML = NULL
  54875.        ELSE
  54876.           FOR m.liIndex = 1 TO ALEN(m.laMembers)
  54877.              THIS.addRunNode(m.oXML,;
  54878.                              "THIS.runCollector." + m.laMembers[m.liIndex], ;
  54879.                              m.laMembers[m.liIndex])
  54880.           ENDFOR
  54881.        ENDIF          
  54882.    CASE VARTYPE(THIS.runCollector) = "O" AND ;
  54883.       UPPER(THIS.runCollector.BaseClass) == "COLLECTION"
  54884.       LOCAL m.liIndex
  54885.       IF THIS.runCollector.Count = 0
  54886.          m.oXML = NULL
  54887.       ELSE
  54888.          FOR m.liIndex = 1 TO THIS.runCollector.Count
  54889.             THIS.addRunNode(m.oXML,"THIS.runCollector[" + TRANSFORM(m.liIndex) + "]",;
  54890.                             IIF(EMPTY(THIS.runCollector.getKey[m.liIndex]), ;
  54891.                                 "P" + TRANSFORM(m.liIndex), ;
  54892.                                 THIS.runCollector.getKey[m.liIndex] ))
  54893.          ENDFOR
  54894.          
  54895.       ENDIF         
  54896.    OTHERWISE
  54897.       m.oXML = NULL
  54898.    ENDCASE      
  54899.    THIS.setFRXDataSession()
  54900.    DO CASE
  54901.    CASE ISNULL(m.oXML)
  54902.       RETURN NULL
  54903.    CASE m.tlAsString
  54904.       RETURN m.oXML.DocumentElement.XML   
  54905.    OTHERWISE
  54906.       RETURN m.oXML.DocumentElement
  54907.    ENDCASE
  54908.    RETURN NULL
  54909. ENDIF      
  54910. ENDPROC
  54911. PROCEDURE addrunnode
  54912. LPARAMETERS m.oXML, m.tvValueExpr, m.tcPropertyName
  54913. LOCAL m.oNode, m.vValue
  54914. m.oNode = m.oXML.createElement("property")
  54915. m.oNode.setAttribute("id",m.tcPropertyName)
  54916. m.vValue = THIS.evaluateUserExpression(m.tvValueExpr)
  54917. IF TYPE("m.vValue.XML") = "C" && xmlnode
  54918.    m.oNode.appendChild(m.vValue)
  54919.    m.oNode.Text = TRANSFORM(m.vValue)
  54920. ENDIF
  54921. m.vValue = NULL
  54922. m.oXML.DocumentElement.appendChild(m.oNode)
  54923. m.oNode = NULL
  54924. ENDPROC
  54925. PROCEDURE includedatatypeattributes_assign
  54926. LPARAMETERS m.tvNewVal
  54927. IF VARTYPE(m.tvNewVal) = "L"
  54928.    THIS.includeDataTypeAttributes = m.tvNewVal
  54929. ENDIF   
  54930. ENDPROC
  54931. PROCEDURE datatypeattr_assign
  54932. LPARAMETERS m.vNewVal
  54933. IF (NOT THIS.IsRunning) AND THIS.VerifyNCName(m.vNewVal)
  54934.    THIS.dataTypeAttr = m.vNewVal
  54935. ENDIF   
  54936. ENDPROC
  54937. PROCEDURE datatextattr_assign
  54938. LPARAMETERS m.vNewVal
  54939. IF (NOT THIS.IsRunning) AND THIS.VerifyNCName(m.vNewVal)
  54940.    THIS.dataTextAttr = m.vNewVal
  54941. ENDIF   
  54942. ENDPROC
  54943. PROCEDURE initializeformattingchangescursor
  54944. THIS.formattingChanges= "F"+SYS(2015)
  54945. IF THIS.includeDataTypeAttributes 
  54946.    CREATE CURSOR (THIS.formattingChanges) ;
  54947.              (FRXRecno i, ;
  54948.               DText M, ;
  54949.               DType C(1))
  54950. ENDIF 
  54951. ENDPROC
  54952. PROCEDURE formatdatavalue
  54953. LPARAMETERS m.tVal
  54954. IF INLIST(VARTYPE(m.tVal),"D","T")
  54955.    RETURN TTOC(m.tVal,3) 
  54956.    * a subclass could do more here
  54957.    RETURN TRANSFORM(m.tVal)
  54958. ENDIF
  54959. ENDPROC
  54960. PROCEDURE pageimageattr_assign
  54961. LPARAMETERS vNewVal
  54962. IF (NOT THIS.IsRunning) AND THIS.VerifyNCName(m.vNewVal)
  54963.    THIS.pageImageAttr = m.vNewVal
  54964. ENDIF   
  54965. ENDPROC
  54966. PROCEDURE evaluatestringtoboolean
  54967. LPARAMETERS tcVal
  54968. RETURN INLIST(UPPER(m.tcVal),"YES",".T.","TRUE","1")         
  54969. ENDPROC
  54970. PROCEDURE applyrdltransform_access
  54971. RETURN (THIS.XMLMode = OUTPUTXML_RDL_ONLY AND ;
  54972.        (NOT ISNULL(THIS.xsltProcessorRdl )))
  54973. ENDPROC
  54974. PROCEDURE fixmsxmlobjectfordtds
  54975. LPARAMETERS m.toXML
  54976. IF VARTYPE(m.toXML) = "O"
  54977.   TRY
  54978.      WITH m.toXML
  54979.         .validateOnParse = .F.
  54980.         .resolveExternals = .F.
  54981.         .setProperty("ProhibitDTD",.F.)
  54982.      ENDWITH
  54983.    CATCH WHEN .T. && Swallow any errors.
  54984.      *&* This fix primarily benefits
  54985.      *&* external usees of the ApplyXSLT public method;
  54986.      *&* it does not affect standard/automatic
  54987.      *&* usage of ApplyXSLT to VFP-RDL XML files.
  54988.      *&* It allows people to use the ApplyXSLT method
  54989.      *&* more flexibly when transforming XML data
  54990.      *&* between two schemas (standard B2B requirement).
  54991.      *&* However, the "ProhibitDTD" property
  54992.      *&* is not supported by the original 2003 msxml4.dll
  54993.      *&* distribution file.
  54994.      *&* The property will exist, and 
  54995.      *&* the behavior will be supported, if the user has
  54996.      *&* applied fixes and updates to MSXML as is usually
  54997.      *&* the case.
  54998.      *&* If the msxml4.dll file has been deployed using
  54999.      *&* an MSM supplied with VFP as part of a distribution
  55000.      *&* setup to a Vista machine, rather than as part of 
  55001.      *&* normal OS files in pre-Vista environments, this
  55002.      *&* may *not* be the case.
  55003.      *&* For information about updates and patches 
  55004.      *&* to msxml4.dll, 
  55005.      *&* see http://www.microsoft.com/downloads/details.aspx?FamilyID=24b7d141-6cdf-4fc4-a91b-6f18fe6921d4&DisplayLang=en#Instructions
  55006.      *&* Vulnerabilities in Microsoft XML Core Services 4.0 Could Allow Remote Code Execution (927978)
  55007.      *&* Note that msxml4.dll is a side-by-side installation file and 
  55008.      *&* the update will fail to occur properly if the DLL is currently locked
  55009.      *&* because an application is, or has been, using it.  This would including
  55010.      *&* loading VFP.
  55011.      *&* For instructions regarding "locked" file that may cause installation to fail
  55012.      *&* and how to get around it, see http://support.microsoft.com/?kbid=927978
  55013.      *&* To ensure that the updates have been applied, check the current date
  55014.      *&* of the msxml4.dll file in %windir%/system32 directory.
  55015.      *&* At this writing (Sedna development timeframe), the date of msxml4.dll is 11/2006.
  55016.    ENDTRY
  55017. ENDIF
  55018. ENDPROC
  55019. PROCEDURE frxcharsetsinuse
  55020. LPARAMETERS tcAlias
  55021. LOCAL m.liSession, m.liSelect, m.liTally, m.liRec, m.lcAlias, m.llSwitchSessions
  55022. IF VARTYPE(tcAlias) # "C" OR EMPTY(tcAlias) OR UPPER(ALLTRIM(tcAlias)) == "FRX"
  55023.    m.lcAlias = "FRX"
  55024.    m.llSwitchSessions = .T.
  55025.    m.lcAlias = ALLTRIM(tcAlias)
  55026. ENDIF   
  55027. m.liTally = 0
  55028. IF THIS.FRXDataSession > -1 AND m.llSwitchSessions
  55029.    m.liSession = SET("DATASESSION")
  55030.    THIS.setFRXDataSession()
  55031.    m.liSession = -1   
  55032. ENDIF   
  55033. IF USED(m.lcAlias)
  55034.    m.liSelect = SELECT(0)
  55035.    m.liRec = RECNO(m.lcAlias)
  55036.    SELECT (m.lcAlias)
  55037.    COUNT ALL FOR INLIST(ObjType,;
  55038.                         FRX_OBJTYP_LABEL,;
  55039.                         FRX_OBJTYP_FIELD) AND ;
  55040.                   Double AND Resoid # 1 ;
  55041.          TO m.liTally            
  55042.          *&* RESOID=1 indicates use of default locale, treat this like no charset indication
  55043.          *&* do not pay attention to header value, just text labels and expressions,
  55044.          *&* because the header value doesn't propagate to existing controls (even at designtime)
  55045.          *&* -- it just indicates the default for new objects.        
  55046.          *&* If you adjusted the FRX contents at runtime with new 
  55047.          *&* text controls, you might want to pay attention to the contents
  55048.          *&* of the header RESOID and DOUBLE values, though -- just as the design-time
  55049.          *&* components do.
  55050.   IF m.liRec > RECCOUNT()
  55051.      GO BOTTOM
  55052.      SKIP
  55053.   ELSE
  55054.      GO m.liRec
  55055.   ENDIF                   
  55056.   SELECT (m.liSelect)
  55057. ENDIF
  55058. IF m.liSession > -1
  55059.    SET DATASESSION TO (m.liSession)
  55060. ENDIF
  55061. RETURN (m.liTally > 0)
  55062. ENDPROC
  55063. PROCEDURE resetcallevaluatecontents
  55064. IF (THIS.CallEvaluateContents # LISTENER_CALLDYNAMICMETHOD_ALWAYS) AND ;
  55065.    THIS.includeDataTypeAttributes AND ;
  55066.    (THIS.xmlMode #  OUTPUTXML_RDL_ONLY)
  55067.    THIS.CallEvaluateContents = LISTENER_CALLDYNAMICMETHOD_ALWAYS
  55068. ENDIF
  55069. ENDPROC
  55070. PROCEDURE closetargetfile
  55071. LOCAL m.llResetQuietMode
  55072. m.llResetQuietMode =  ;
  55073.  ((NOT THIS.HadError) AND (NOT THIS.QuietMode) AND  ;
  55074.   (THIS.applyUserTransform OR THIS.applyRDLTransform ))
  55075. IF m.llResetQuietMode
  55076.    THIS.QuietMode = .T.
  55077. ENDIF
  55078. DODEFAULT()
  55079. IF m.llResetQuietMode
  55080.    THIS.QuietMode = .F.
  55081. ENDIF      
  55082. ENDPROC
  55083. PROCEDURE setfrxdatasessionenvironment
  55084. DODEFAULT()
  55085. SET EXACT ON
  55086. SET SYSFORMATS ON
  55087. SET CENTURY ON
  55088. SET SAFETY OFF
  55089. ENDPROC
  55090. PROCEDURE opentargetfile
  55091. #IF OUTPUTXML = OUTPUTXML_DOM
  55092.    THIS.VerifyTargetFile() 
  55093.    THIS.TargetHandle = 0
  55094.    RETURN (NOT THIS.HadError)
  55095. #ELSE
  55096.    RETURN DODEFAULT()   
  55097. #ENDIF
  55098. ENDPROC
  55099. PROCEDURE AfterBand
  55100. LPARAMETERS m.nBandObjCode, m.nFRXRecNo
  55101. DODEFAULT(m.nBandObjCode, m.nFRXRecNo)
  55102. IF THIS.InvokeOnCurrentPass() AND ;
  55103.    THIS.Targethandle > -1 
  55104.    LOCAL m.lcBand, m.loNode, m.lcID, m.lcIDRef, ;
  55105.          m.llFormatBreakBand, m.loObjects, m.llOmitBand
  55106.    THIS.SetFRXDataSession()   
  55107.    m.lcBand =  IIF(SEEK(OUTPUTXML_OBJTYPE_NODES+FRX_OBJTYP_BAND+ ;
  55108.                     OUTPUTXML_OBJTYPE_BANDOFFSET+nBandObjCode,;
  55109.                     "Nodes","FrxNodes"),;
  55110.                     Nodes.ObjValue, ;
  55111.                     OUTPUTXML_GOOFTAG)
  55112.                     
  55113.    GO m.nFRXRecNo IN FRX
  55114.    IF NOT THIS.IncludeBandsWithNoObjects 
  55115.       m.loObjects = THIS.FRXCursor.GetObjectsInBand(FRX.UniqueID,.F.,THIS.FRXDataSession)
  55116.       IF loObjects.Count = 0
  55117.           m.llOmitBand = .T.
  55118.       ENDIF
  55119.       m.loObjects = NULL
  55120.    ENDIF   
  55121.    THIS.SetCurrentDataSession()
  55122.       
  55123.    m.llFormatBreakBand = INLIST(m.nBandObjCode,;
  55124.                     FRX_OBJCOD_PAGEHEADER, ;
  55125.                     FRX_OBJCOD_PAGEFOOTER, ;
  55126.                     FRX_OBJCOD_COLHEADER, ;
  55127.                     FRX_OBJCOD_COLFOOTER)                 
  55128.                     
  55129.    * first evaluate THIS.IncludeBreaksInData 
  55130.    DO CASE
  55131.    CASE m.llOmitBand = .T.
  55132.       * nothing
  55133.    CASE THIS.IncludeBreaksInData = OUTPUTXML_BREAKS_INDATA OR ;
  55134.         NOT m.llFormatBreakBand   
  55135.       #IF OUTPUTXML = OUTPUTXML_RAW
  55136.          
  55137.          IF EMPTY(NVL(THIS.CurrentBand,"")) 
  55138.            * see continuation discussion in Render.
  55139.            * our fix there may have left us with
  55140.            * no band here
  55141.            * do nothing
  55142.          ELSE
  55143.          
  55144.             THIS.CurrentBand = NVL(THIS.CurrentBand,"") + ;
  55145.                THIS.XMLRawTag( m.lcBand, .F., m.lcID, m.lcIDRef ) 
  55146.             IF NOT (ISNULL(THIS.CurrentBand) OR EMPTY(THIS.CurrentBand))
  55147.                THIS.WriteRaw(THIS.CurrentBand)
  55148.                THIS.CurrentBand = ""
  55149.             ENDIF
  55150.          ENDIF    
  55151.                
  55152.       #ELIF OUTPUTXML = OUTPUTXML_DOTNET                       
  55153.       #ELSE
  55154.          * nothing to do here when using the DOM
  55155.          THIS.CurrentBand = NULL
  55156.       #ENDIF
  55157.    CASE THIS.IncludeBreaksInData = OUTPUTXML_BREAKS_COLLECTION
  55158.       * build the collection which will be inserted into the
  55159.       * data before finishing.
  55160.       * but the band output at this point is .F.
  55161.       #IF OUTPUTXML = OUTPUTXML_RAW
  55162.           IF INLIST( m.nBandObjCode, ;
  55163.                  FRX_OBJCOD_PAGEHEADER, ;
  55164.                  FRX_OBJCOD_PAGEFOOTER) 
  55165.              THIS.CurrentPage = NVL(THIS.CurrentPage,"")
  55166.              THIS.CurrentPage = THIS.CurrentPage +  ;
  55167.                                THIS.XMLRawTag( m.lcBand, .F., m.lcID, m.lcIDRef ) 
  55168.              THIS.PageNodes = THIS.PageNodes + THIS.CurrentPage
  55169.              THIS.CurrentPage = NULL
  55170.           ELSE
  55171.              THIS.CurrentColumn = NVL(THIS.CurrentColumn,"")
  55172.              THIS.CurrentColumn = THIS.CurrentColumn + ;
  55173.                                 THIS.XMLRawTag( m.lcBand, .F., m.lcID, m.lcIDRef ) 
  55174.              THIS.ColumnNodes = THIS.ColumnNodes + THIS.CurrentColumn
  55175.              THIS.CurrentColumn = NULL
  55176.           ENDIF
  55177.           
  55178.       #ELIF OUTPUTXML = OUTPUTXML_DOTNET 
  55179.       
  55180.       #ELSE
  55181.       
  55182.           * we leave THIS.CurrentBand alone in this case,
  55183.           * to use after the band has finished.
  55184.           IF INLIST( nBandObjCode, ;
  55185.                  FRX_OBJCOD_PAGEHEADER, ;
  55186.                  FRX_OBJCOD_PAGEFOOTER) 
  55187.              THIS.CurrentPage = NULL
  55188.           ELSE
  55189.              THIS.CurrentColumn = NULL
  55190.           ENDIF
  55191.           
  55192.       #ENDIF
  55193.    CASE INLIST( m.nBandObjCode, ;
  55194.                  FRX_OBJCOD_COLHEADER, ;
  55195.                  FRX_OBJCOD_COLFOOTER)   && XMLBREAKS_NONE and column band
  55196.        THIS.CurrentColumn = NULL
  55197.    OTHERWISE  && XMLBREAKS_NONE and page band
  55198.        THIS.CurrentPage = NULL
  55199.    ENDCASE
  55200.    THIS.resetDataSession()
  55201. ENDIF
  55202. IF INLIST(m.nBandObjCode,FRX_OBJCOD_PAGEFOOTER, FRX_OBJCOD_TITLE) 
  55203.    THIS.includePage = .F.
  55204. ENDIF
  55205. ENDPROC
  55206. PROCEDURE Destroy
  55207. DODEFAULT()
  55208. THIS.ResetDocument()
  55209. STORE NULL TO ;
  55210.    THIS.ColumnNodes, ;
  55211.    THIS.CurrentBand, ;
  55212.    THIS.CurrentColumn, ;
  55213.    THIS.CurrentDocument, ;
  55214.    THIS.CurrentPage, ;
  55215.    THIS.DataNodes, ;
  55216.    THIS.pageNodes, ;
  55217.    THIS.XSLTProcessorRDL, ;
  55218.    THIS.XSLTProcessorUser, ;
  55219.    THIS.xsltParameters 
  55220. ENDPROC
  55221. PROCEDURE createconfigtable
  55222. LPARAMETERS m.tcDBF, m.tlOverWrite
  55223. * table is being created from scratch,
  55224. * may be in a VCX in an unknown environment
  55225. * (definitely not in REPORTOUTPUT.APP!)
  55226. DODEFAULT(m.tcDBF, m.tlOverWrite)
  55227. IF NOT THIS.HadError
  55228.    LOCAL m.liSelect, m.llSafetyOn
  55229.    m.llSafetyOn = (SET("SAFETY") = "ON")
  55230.    SET SAFETY OFF
  55231.    m.liSelect = SELECT(0)
  55232.    SELECT 0
  55233.    USE (m.tcDBF) EXCLU  
  55234.    INDEX ON ObjType+ObjCode+ ;
  55235.       IIF(ObjType=FRX_OBJTYP_BAND+OUTPUTXML_OBJTYPE_NODES, ;
  55236.           OUTPUTXML_OBJTYPE_BANDOFFSET,0) ;
  55237.       TAG FRXNodes  
  55238.    IF m.llSafetyOn
  55239.       SET SAFETY ON
  55240.    ENDIF   
  55241.    THIS.InsertXMLConfigRecords()   
  55242.    USE
  55243.    SELECT (m.liSelect)
  55244. ENDIF   
  55245. ENDPROC
  55246. PROCEDURE Init
  55247. THIS.ReadConfiguration = OUTPUTCLASS_READCONFIG_INIT
  55248. IF DODEFAULT()
  55249.    THIS.AppName = OUTPUTXML_APPNAME_LOC
  55250.    THIS.ResetDocument()
  55251.    RETURN .F.   
  55252. ENDIF
  55253. IF THIS.applyUserTransform
  55254.    THIS.GetDefaultUserXSLT()
  55255. ENDIF   
  55256. RETURN NOT THIS.HadError
  55257. ENDPROC
  55258. PROCEDURE AfterReport
  55259. LPARAMETERS tlCalledEarly
  55260. THIS.SetFRXDataSession()
  55261. IF THIS.TargetHandle > -1 AND NOT (THIS.HadError )
  55262.     THIS.fillRunCollector()
  55263.    #IF OUTPUTXML = OUTPUTXML_RAW
  55264.        LOCAL m.lcNode
  55265.        IF NOT THIS.XMLMode = OUTPUTXML_RDL_ONLY 
  55266.         
  55267.           IF  NOT EMPTY(NVL(THIS.CurrentBand,""))
  55268.              m.lcNode = SUBSTR(THIS.CurrentBand,2,AT(" ", THIS.CurrentBand)-2)
  55269.              THIS.CurrentBand = THIS.CurrentBand + THIS.XMLRawTag(m.lcNode)
  55270.              * write a closing tag
  55271.              THIS.WriteRaw(THIS.CurrentBand)
  55272.           ENDIF
  55273.           IF THIS.IncludeBreaksInData = OUTPUTXML_BREAKS_COLLECTION 
  55274.              IF NOT ISNULL(THIS.PageNodes)
  55275.                  lcNode =  IIF(SEEK( OUTPUTXML_OBJTYPE_NODES+OUTPUTXML_OBJCODE_PAGES,;
  55276.                              "Nodes","FrxNodes"), ;
  55277.                            Nodes.ObjValue, ;
  55278.                            OUTPUTXML_GOOFTAG)
  55279.                  THIS.WriteRaw(THIS.PageNodes) 
  55280.                  THIS.WriteRaw(THIS.XMLRawTag(m.lcNode))                  
  55281.              ENDIF
  55282.              IF NOT ISNULL(THIS.ColumnNodes)
  55283.                 m.lcNode =  IIF(SEEK( OUTPUTXML_OBJTYPE_NODES+OUTPUTXML_OBJCODE_COLS,;
  55284.                              "Nodes","FrxNodes"), ;
  55285.                            Nodes.ObjValue, ;
  55286.                            OUTPUTXML_GOOFTAG)
  55287.                  THIS.WriteRaw(THIS.ColumnNodes) 
  55288.                  THIS.WriteRaw(THIS.XMLRawTag(m.lcNode))                                   
  55289.              ENDIF
  55290.           ENDIF          
  55291.         
  55292.           m.lcNode =  IIF(SEEK( OUTPUTXML_OBJTYPE_NODES+OUTPUTXML_OBJCODE_DATA,;
  55293.                         "Nodes","FrxNodes"), ;
  55294.                       Nodes.ObjValue, ;
  55295.                       OUTPUTXML_GOOFTAG)
  55296.        
  55297.           THIS.WriteRaw( THIS.XMLRawTag(m.lcNode))
  55298.        ENDIF
  55299.         
  55300.        m.lcNode = THIS.getRunNodeContents(.T.)
  55301.        
  55302.        IF NOT (ISNULL(lcNode) OR EMPTY(lcNode))
  55303.           THIS.WriteRaw(lcNode)
  55304.        ENDIF             
  55305.        m.lcNode =  IIF(SEEK( OUTPUTXML_OBJTYPE_NODES+ FRX_OBJTYP_REPORTHEADER, ;
  55306.                            "Nodes","ObjType"), ;
  55307.                             Nodes.ObjValue, ;
  55308.                             OUTPUTXML_GOOFTAG)               
  55309.        THIS.WriteRaw( THIS.XMLRawTag(m.lcNode))    
  55310.        * check to see if continuation... 
  55311.        IF NOT OUTPUTXML_CONTINUATION
  55312.           THIS.WriteRaw( THIS.XMLRawTag(THIS.CurrentDocument))          
  55313.        ENDIF
  55314.    #ELIF OUTPUTXML = OUTPUTXML_DOTNET     
  55315.       * XMLTextWriter work
  55316.    #ELSE
  55317.        LOCAL m.loNode
  55318.        * domwork here        
  55319.        IF THIS.IncludeBreaksInData = OUTPUTXML_BREAKS_COLLECTION
  55320.           * currently all this is done on entry, but
  55321.           * if not:
  55322.           * append the pages collection
  55323.           * into the report data node --
  55324.           * that's where we should be right now
  55325.           * THIS.DataNodes.AppendChild(THIS.PageNodes)
  55326.           ** IF NOT ISNULL(THIS.ColumnNodes)
  55327.           * THIS.DataNodes.AppendChild(THIS.ColumnNodes)             
  55328.           ** ENDIF
  55329.        ENDIF
  55330.        
  55331.        m.loNode = THIS.getRunNodeContents()
  55332.        
  55333.        IF NOT ISNULL(m.loNode)
  55334.           THIS.DataNodes.ParentNode.AppendChild(m.loNode)
  55335.        ENDIF             
  55336.        IF NOT OUTPUTXML_CONTINUATION
  55337.           THIS.CurrentDocument.Save(THIS.TargetFileName)
  55338.        ENDIF
  55339.        m.loNode = NULL
  55340.     #ENDIF
  55341. ENDIF
  55342. IF OUTPUTXML_CONTINUATION
  55343.    IF THIS.runCollectorResetLevel = OUTPUTFX_RUNCOLLECTOR_RESET_ONREPORT 
  55344.       THIS.resetRunCollector()       
  55345.    ENDIF
  55346.    THIS.ResetReport()   
  55347.    IF THIS.runCollectorResetLevel > OUTPUTFX_RUNCOLLECTOR_RESET_NEVER 
  55348.       THIS.resetRunCollector()       
  55349.    ENDIF
  55350.    THIS.ResetDocument()     
  55351.    IF (NOT tlCalledEarly) AND ;
  55352.       (THIS.applyUserTransform OR ;
  55353.        THIS.applyRDLTransform)
  55354.       THIS.ApplyUserTransformToOutput()
  55355.       IF (NOT THIS.HadError)
  55356.          * we suppressed this message earlier when closing the target file,
  55357.          * which is just an intermediary format in this case:
  55358.          * IF THIS.DoMessage( OUTPUTCLASS_SUCCESS_LOC + ;
  55359.                         IIF(SYS(2024)="Y",CHR(13)+OUTPUTCLASS_REPORT_INCOMPLETE_LOC,""),;
  55360.                         MB_ICONINFORMATION + MB_YESNO ) = IDYES
  55361.          *   _CLIPTEXT = THIS.TargetFileName
  55362.          * ENDIF
  55363.       ENDIF   
  55364.    ENDIF   
  55365. ENDIF
  55366. THIS.resetDataSession()   
  55367. IF (NOT tlCalledEarly)
  55368.    DODEFAULT()
  55369. ENDIF
  55370. ENDPROC
  55371. PROCEDURE Error
  55372. LPARAMETERS m.nError, m.cMethod, m.nLine
  55373.    DODEFAULT(m.nError,m.cMethod,m.nLine)
  55374.    * we could evaluate errors first, but generally,
  55375.    THIS.CloseTargetFile()
  55376.    IF THIS.isRunning
  55377.       THIS.QuietMode = .T.
  55378.    ENDIF   
  55379.    THIS.CancelReport()
  55380. ENDPROC
  55381. PROCEDURE Render
  55382. LPARAMETERS m.nFRXRecNo, m.nLeft,m.nTop,m.nWidth,m.nHeight, ;
  55383.             m.nObjectContinuationType, m.cContentsToBeRendered, m.GDIPlusImage
  55384. IF NOT ISNULL(THIS.successorGFXNoRender)
  55385.    * XML Output and descendents respect norendering properties
  55386.    * as successors, evaluating them individually since the conditions
  55387.    * might apply only to some output types
  55388.    IF THIS.successorGFXNoRender.applyFX(THIS,"RENDER",m.nFRXRecNo, m.nLeft) = ;
  55389.        OUTPUTFX_BASERENDER_NORENDER
  55390.        RETURN OUTPUTFX_BASERENDER_NORENDER
  55391.    ENDIF                
  55392. ENDIF
  55393. IF (DODEFAULT(m.nFRXRecNo, @m.nLeft,@m.nTop,@m.nWidth,@m.nHeight, ;
  55394.               @m.nObjectContinuationType, @m.cContentsToBeRendered, @m.GDIPlusImage) # ;
  55395.               OUTPUTFX_BASERENDER_NORENDER) AND ;
  55396.    THIS.InvokeOnCurrentPass() AND ;
  55397.    THIS.Targethandle > -1 
  55398.    * also evaluate THIS.IncludeBreaksInData and 
  55399.    * the band for the object in question.
  55400.    * If the stars align, create the node for the object here.  For now:
  55401.    LOCAL m.lcNode, m.loNode, m.lcFormattingInfo, m.lcContents,  ;
  55402.          m.llTextType, m.loBandRef, m.liBandRecno, m.lcID
  55403.    THIS.SetFRXDataSession()
  55404.    GO m.nFRXRecNo IN FRX
  55405.    m.lcContents = m.cContentsToBeRendered
  55406.    m.llTextType = INLIST(FRX.ObjType,  FRX_OBJTYP_LABEL, FRX_OBJTYP_FIELD)
  55407.    m.lcID = TRANSFORM(m.nFRXRecNo)
  55408.    IF INLIST(m.nObjectContinuationType, ;
  55409.              LISTENER_CONTINUATION_MIDDLE, ;
  55410.              LISTENER_CONTINUATION_END)
  55411.       m.lcID = m.lcID + "+"
  55412.    ENDIF
  55413.       
  55414.    IF THIS.IncludeBreaksInData = OUTPUTXML_BREAKS_COLLECTION ;
  55415.       OR (ISNULL(THIS.CurrentPage) AND ISNULL(THIS.CurrentColumn))
  55416.       m.lcNode =   IIF(SEEK(OUTPUTXML_OBJTYPE_NODES+FRX.ObjType,"Nodes","ObjType"), ;
  55417.                      Nodes.ObjValue,;
  55418.                      OUTPUTXML_GOOFTAG)
  55419.                   
  55420.       #IF OUTPUTXML = OUTPUTXML_RAW
  55421.           m.lcFormattingInfo = THIS.GetRawFormattingInfo( m.nLeft, m.nTop, m.nWidth,m.nHeight, m.nObjectContinuationType)
  55422.           THIS.setFRXDataSession()          
  55423.           IF m.llTextType
  55424.              * build 1515: render gets unicode
  55425.              m.lcContents = STRCONV(TRANSFORM(m.lcContents),STRCONV_UNICODE_UTF8)
  55426.           ELSE
  55427.              m.lcContents = TRANSFORM(m.lcContents)  
  55428.           ENDIF
  55429.           DO CASE
  55430.           CASE NOT ISNULL(THIS.CurrentPage)
  55431.              THIS.CurrentPage = THIS.CurrentPage +  ;
  55432.                  THIS.XMLRawNode( ;
  55433.                  m.lcNode, ;
  55434.                  m.lcContents, ;
  55435.                  m.lcID,.F.,m.lcFormattingInfo) && FRX.UniqueID
  55436.           CASE NOT ISNULL(THIS.CurrentColumn)
  55437.              THIS.CurrentColumn = THIS.CurrentColumn +  ;
  55438.                  THIS.XMLRawNode( ;
  55439.                  m.lcNode, ;
  55440.                  m.lcContents, ;
  55441.                  m.lcID,.F.,m.lcFormattingInfo) 
  55442.           OTHERWISE 
  55443.              * write directly to the stream
  55444.              * First, take care of continuation.
  55445.              IF EMPTY(NVL(THIS.CurrentBand,""))
  55446.                 * first object in a continued band
  55447.                  IF ISNULL(THIS.FRXCursor)
  55448.                     m.liBandRecno = 0
  55449.                  ELSE
  55450.                     m.loBandRef =  THIS.FRXCursor.GetBandFor(FRX.UniqueID, .T.,THIS.FRXDataSession)
  55451.                     SELECT FRX
  55452.                     LOCATE FOR UniqueID == loBandRef.UniqueID
  55453.                     IF EOF()
  55454.                        m.liBandRecno = 0
  55455.                     ELSE
  55456.                        m.liBandRecno = RECNO()
  55457.                     ENDIF
  55458.                  ENDIF
  55459.                  IF m.liBandRecno = 0
  55460.                     THIS.CurrentBand = THIS.XMLRawTag(OUTPUTXML_GOOFTAG, .T.,;
  55461.                                   "0",TRANSFORM(IIF(THIS.sharedPageNo = 0, THIS.PageNo, THIS.sharedPageNo)) )
  55462.                  ELSE
  55463.                     THIS.SetCurrentDataSession()
  55464.                     THIS.BeforeBand(FRX_OBJCOD_DETAIL,m.liBandRecno, .T.)
  55465.                     THIS.SetFRXDataSession()
  55466.                  ENDIF                 
  55467.                  THIS.CurrentBand = THIS.CurrentBand + ;
  55468.                       THIS.XMLRawNode( ;
  55469.                        m.lcNode, ;
  55470.                        m.lcContents, ;
  55471.                        m.lcID,.F.,m.lcFormattingInfo) 
  55472.                 IF EOF()      
  55473.                    THIS.WriteRaw(THIS.CurrentBand + ;
  55474.                                 THIS.XMLRawTag(OUTPUTXML_GOOFTAG))
  55475.                    THIS.CurrentBand = ""               
  55476.                 ENDIF
  55477.                 GO m.nFRXRecNo IN FRX
  55478.              ELSE      
  55479.                 THIS.CurrentBand = THIS.CurrentBand + ;
  55480.                      THIS.XMLRawNode( ;
  55481.                       m.lcNode, ;
  55482.                       m.lcContents, ;
  55483.                       m.lcID,.F., m.lcFormattingInfo) 
  55484.              ENDIF
  55485.              
  55486.           ENDCASE
  55487.      
  55488.       #ELIF OUTPUTXML =  OUTPUTXML_DOTNET
  55489.           * XMLTextWriter work
  55490.       #ELSE      
  55491.           * if continuation type is of type 2 or 3
  55492.           * and we're in a text type object
  55493.           * we have to create a new
  55494.           * continued band node as if a BeforeBand event has occurred.         
  55495.           THIS.setFRXDataSession()
  55496.           IF ISNULL(THIS.CurrentBand)
  55497.              * first object in a continued band
  55498.              IF ISNULL(THIS.FRXcursor)
  55499.                 m.liBandRecno = 0
  55500.              ELSE
  55501.                 m.loBandRef =  THIS.FRXCursor.GetBandFor(FRX.UniqueID, .T., THIS.FRXDataSession)
  55502.                 SELECT FRX
  55503.                 LOCATE FOR UniqueID == m.loBandRef.UniqueID
  55504.                 m.liBandRecno = RECNO()
  55505.              ENDIF
  55506.              THIS.SetCurrentDataSession()
  55507.              IF EOF()
  55508.                  THIS.BeforeBand(FRX_OBJCOD_DETAIL,1, .T.)
  55509.              ELSE
  55510.                  THIS.BeforeBand(FRX_OBJCOD_DETAIL,m.liBandRecno, .T.)
  55511.              ENDIF
  55512.              THIS.SetFRXDataSession()
  55513.              GO m.nFRXRecNo IN FRX
  55514.           ENDIF
  55515.           m.loNode = THIS.CurrentDocument.CreateElement(m.lcNode)          
  55516.           m.lcContents = TRANSFORM(m.lcContents)            
  55517.           * build 1515: render gets unicode, and is already regionally transformed          
  55518.           * EXCEPT if it's a filename for an image, in which case it's DBCS          
  55519.           IF m.llTextType 
  55520.              m.loNode.Text = CREATEBINARY(m.lcContents)          
  55521.           ELSE
  55522.              m.loNode.Text = m.lcContents          
  55523.           ENDIF             
  55524.           m.loNode.SetAttribute(THIS.IdAttribute,m.lcID)
  55525.           THIS.SetDOMFormattingInfo( m.loNode, m.nLeft, m.nTop, m.nWidth,m.nHeight, m.nObjectContinuationType)
  55526.           DO CASE
  55527.           CASE NOT ISNULL(THIS.CurrentPage)
  55528.              THIS.CurrentPage.AppendChild(m.loNode)          
  55529.           CASE NOT ISNULL(THIS.CurrentColumn)
  55530.              THIS.CurrentColumn.AppendChild(m.loNode)          
  55531.           OTHERWISE
  55532.              THIS.CurrentBand.AppendChild(m.loNode)                     
  55533.           ENDCASE
  55534.           m.loNode = NULL
  55535.        #ENDIF
  55536.    ELSE
  55537.       * otherwise object belongs to a formatting header or footer
  55538.       * and we're not processing them (XMLBREAKS_NONE)
  55539.    ENDIF                   
  55540.    THIS.resetDataSession()
  55541. ENDIF
  55542. RETURN  
  55543. ENDPROC
  55544. PROCEDURE BeforeBand
  55545. LPARAMETERS m.nBandObjCode, m.nFRXRecNo, m.tlContinuedBand
  55546. DODEFAULT(m.nBandObjCode, m.nFRXRecNo)
  55547. IF INLIST(m.nBandObjCode,FRX_OBJCOD_PAGEHEADER, FRX_OBJCOD_TITLE,FRX_OBJCOD_SUMMARY) 
  55548.    THIS.includePage =  THIS.IncludePageInOutput(_PAGENO)
  55549.    *(THIS.PageNo >= THIS.CommandClauses.RangeFrom) AND ;
  55550.    *    ((THIS.CommandClauses.RangeTo = -1) OR (THIS.PageNo <= THIS.CommandClauses.RangeTo))
  55551.    * possibly to be adapted later:
  55552.    * regardless of whether IncludePageInOutput() is used
  55553.    * or the manual evaluation above (commented) is used,
  55554.    * _PAGENO will work for continued reports only if NORESET is not used.
  55555.    * THIS.PageNo/THIS.SharedPageNo will not work whether NORESET is used or not,
  55556.    * for continued reports, 
  55557.    * unless you maintain a private offset.  RANGE is
  55558.    * sensitive to the current REPORT FORM command, not the full
  55559.    * NOPAGEEJECT (chained) run
  55560. ENDIF
  55561. IF THIS.InvokeOnCurrentPass() AND ;
  55562.   THIS.Targethandle > -1 
  55563.    LOCAL m.lcBand, m.loNode, m.lcID, m.lcIDRef, ;
  55564.          m.llFormatBreakBand, m.lcInterruptedBand,;
  55565.          m.llOmitBand, m.loObjects
  55566.    THIS.SetFRXDataSession()   
  55567.    GO m.nFRXRecNo IN FRX   
  55568.    IF NOT THIS.IncludeBandsWithNoObjects 
  55569.       m.loObjects = THIS.FRXCursor.GetObjectsInBand(FRX.UniqueID,.F.,THIS.FRXDataSession)
  55570.       IF m.loObjects.Count = 0
  55571.           m.llOmitBand = .T.
  55572.       ENDIF
  55573.       m.loObjects = NULL
  55574.    ENDIF   
  55575.       
  55576.    m.lcBand =  IIF(SEEK(OUTPUTXML_OBJTYPE_NODES+ FRX_OBJTYP_BAND+ ;
  55577.                     OUTPUTXML_OBJTYPE_BANDOFFSET+nBandObjCode,;
  55578.                     "Nodes","FrxNodes"),;
  55579.                     Nodes.ObjValue, ;
  55580.                     OUTPUTXML_GOOFTAG)
  55581.    THIS.SetCurrentDataSession()
  55582.                     
  55583.    m.llFormatBreakBand = INLIST(nBandObjCode,;
  55584.                     FRX_OBJCOD_PAGEHEADER, ;
  55585.                     FRX_OBJCOD_PAGEFOOTER, ;
  55586.                     FRX_OBJCOD_COLHEADER, ;
  55587.                     FRX_OBJCOD_COLFOOTER)                 
  55588.                     
  55589.    IF m.llFormatBreakBand
  55590.       m.lcIDRef =  TRANSFORM(m.nFRXRecNo) && TRANSFORM(IIF(EMPTY(FRX.UniqueID),"",FRX.UniqueID))
  55591.       m.lcID = TRANSFORM(IIF(THIS.sharedPageNo = 0, THIS.PageNo, THIS.sharedPageNo))
  55592.          
  55593.    ELSE
  55594.       m.lcID =  TRANSFORM(m.nFRXRecNo) && TRANSFORM(IIF(EMPTY(FRX.UniqueID),"",FRX.UniqueID) )
  55595.       IF m.tlContinuedBand
  55596.          m.lcID = m.lcID + "+"
  55597.       ENDIF
  55598.       m.lcIDRef = TRANSFORM(IIF(THIS.sharedPageNo = 0, THIS.PageNo, THIS.sharedPageNo))
  55599.       
  55600.    ENDIF
  55601.    * first evaluate THIS.IncludeBreaksInData 
  55602.    DO CASE
  55603.    CASE m.llOmitBand
  55604.       * do nothing -- TBD checked later.
  55605.    CASE THIS.IncludeBreaksInData = OUTPUTXML_BREAKS_INDATA OR ;
  55606.         NOT m.llFormatBreakBand   
  55607.       #IF OUTPUTXML = OUTPUTXML_RAW
  55608.          IF NOT (ISNULL(THIS.CurrentBand) OR EMPTY(THIS.CurrentBand))
  55609.              * a data band has spanned
  55610.              * formatting breaks (pages or columns)
  55611.              * and we haven't otherwise caught it.
  55612.              * This should not happen.
  55613.              m.lcInterruptedBand = SUBSTR(ALLTR(THIS.CurrentBand),2,AT(" ", THIS.CurrentBand)-2)
  55614.              * write a closing tag
  55615.              THIS.WriteRaw(THIS.CurrentBand + THIS.XMLRawTag(m.lcInterruptedBand))
  55616.          ENDIF
  55617.          
  55618.       
  55619.         THIS.CurrentBand =  THIS.XMLRawTag( m.lcBand,.T., m.lcID, m.lcIDRef ) 
  55620.                
  55621.       
  55622.       #ELIF OUTPUTXML = OUTPUTXML_DOTNET                       
  55623.       #ELSE
  55624.           m.loNode = THIS.CurrentDocument.CreateElement(m.lcBand)
  55625.           m.loNode.SetAttribute(THIS.idAttribute,m.lcID)
  55626.           m.loNode.SetAttribute(THIS.idrefAttribute,m.lcIDRef)
  55627.           THIS.DataNodes.AppendChild(m.loNode)
  55628.           THIS.CurrentBand = m.loNode                                    
  55629.           m.loNull = NULL
  55630.       #ENDIF
  55631.    CASE THIS.IncludeBreaksInData = OUTPUTXML_BREAKS_COLLECTION
  55632.       * build the collection which will be inserted into the
  55633.       * data before finishing.
  55634.       * but the band output at this point is .F.
  55635.       #IF OUTPUTXML = OUTPUTXML_RAW
  55636.           IF INLIST( m.nBandObjCode, ;
  55637.                  FRX_OBJCOD_PAGEHEADER, ;
  55638.                  FRX_OBJCOD_PAGEFOOTER) 
  55639.              THIS.CurrentPage = NVL(THIS.CurrentPage,"")
  55640.              THIS.CurrentPage = THIS.CurrentPage + ;
  55641.                                 THIS.XMLRawTag( m.lcBand, .T.,m.lcID, m.lcIDRef ) 
  55642.           ELSE
  55643.              THIS.CurrentColumn = NVL(THIS.CurrentColumn,"")
  55644.              THIS.CurrentColumn = THIS.CurrentColumn + ;
  55645.                                   THIS.XMLRawTag( m.lcBand, .T., m.lcID, m.lcIDRef ) 
  55646.           ENDIF
  55647.           
  55648.          
  55649.       #ELIF OUTPUTXML = OUTPUTXML_DOTNET 
  55650.       
  55651.       #ELSE
  55652.       
  55653.           * we leave THIS.CurrentBand alone in this case,
  55654.           * to use after the band has finished.
  55655.           IF INLIST( m.nBandObjCode, ;
  55656.                  FRX_OBJCOD_PAGEHEADER, ;
  55657.                  FRX_OBJCOD_PAGEFOOTER) 
  55658.              THIS.CurrentPage = THIS.CurrentDocument.CreateElement(m.lcBand)
  55659.              THIS.CurrentPage.SetAttribute(THIS.idAttribute,m.lcID)
  55660.              THIS.CurrentPage.SetAttribute(THIS.idrefAttribute,m.lcIDRef)
  55661.              THIS.PageNodes.AppendChild(THIS.CurrentPage)
  55662.           ELSE
  55663.              THIS.CurrentColumn = THIS.CurrentDocument.CreateElement(m.lcBand)
  55664.              THIS.CurrentColumn.SetAttribute(THIS.idAttribute,m.lcID)
  55665.              THIS.CurrentColumn.SetAttribute(THIS.idrefAttribute,m.lcIDRef)
  55666.              THIS.ColumnNodes.AppendChild(THIS.CurrentColumn)
  55667.           ENDIF
  55668.           
  55669.       #ENDIF
  55670.    CASE INLIST( m.nBandObjCode, ;
  55671.                  FRX_OBJCOD_COLHEADER, ;
  55672.                  FRX_OBJCOD_COLFOOTER)   && XMLBREAKS_NONE and column band
  55673.       THIS.CurrentColumn = "X"
  55674.    OTHERWISE  && XMLBREAKS_NONE and page band
  55675.       THIS.CurrentPage = "X"
  55676.    ENDCASE
  55677.    THIS.resetDataSession()
  55678. ENDIF
  55679. ENDPROC
  55680. PROCEDURE BeforeReport
  55681. DODEFAULT()
  55682. IF (NOT THIS.HadError) 
  55683.    THIS.SetFRXDataSession()
  55684.    IF THIS.isSuccessor 
  55685.       * need a private norender object
  55686.       * to handle potential rendering tests
  55687.       * specific to this output type     
  55688.       THIS.successorGFXNoRender = ;
  55689.            THIS.checkCollectionForSpecifiedMember(;
  55690.            THIS.gfxNoRenderClass,;
  55691.            THIS.gfxNoRenderClassLib,.T.,.T.)           
  55692.    ENDIF
  55693.    IF USED("FRX")
  55694.       LOCAL m.liSelect, m.lcDocument, m.lcReport, ;
  55695.             m.lcRDL, m.lcPage, m.lcCol, m.lcData, m.loNode, m.loParent
  55696.       m.liSelect = SELECT(0)
  55697.       SELECT FRX
  55698.       IF THIS.TargetHandle = -1 AND ;
  55699.          (THIS.applyUserTransform OR ;
  55700.           THIS.applyRDLTransform)
  55701.          THIS.verifyTargetFile()      
  55702.          IF EMPTY(JUSTEXT(THIS.TargetFileName))
  55703.             THIS.TargetFileName = FORCEEXT(THIS.TargetFileName,THIS.TargetFileExt)
  55704.          ENDIF   
  55705.          THIS.AddProperty("SaveTargetFileName",THIS.TargetFileName)
  55706.          THIS.TargetFileName = FORCEEXT(THIS.TargetFileName,"TMP")
  55707.       ENDIF
  55708.          
  55709.       IF (THIS.TargetHandle > -1 OR THIS.OpenTargetFile())  
  55710.          IF NOT USED("Nodes")
  55711.             IF  UPPER(FULLPATH(THIS.ConfigurationTable)) == ;
  55712.                 UPPER(FULLPATH(FORCEEXT(OUTPUTCLASS_INTERNALDBF,"DBF")))
  55713.                 USE (THIS.ConfigurationTable) AGAIN IN 0  ;
  55714.                    NOUPDATE ALIAS Nodes SHARED
  55715.             ELSE       
  55716.                 USE (THIS.ConfigurationTable) AGAIN IN 0  ;
  55717.                    ALIAS Nodes SHARED
  55718.                 THIS.VerifyNodeNames()
  55719.                 THIs.VerifyAttributeNames()
  55720.             ENDIF
  55721.          ENDIF
  55722.             
  55723.          * create helper object
  55724.          * create band and object cursors   
  55725.          * we may want to evaluate raw mode
  55726.          * as well as THIS.XMLMode to see if these are needed:
  55727.          IF (NOT (THIS.IncludeBandsWithNoObjects AND  ;
  55728.             THIS.XMLMode = OUTPUTXML_DATA_ONLY) ) && OR OUTPUTXML_PERFORMLOCALECONVERSION 
  55729.             THIS.LoadFRXCursor = .T.               
  55730.             IF ISNULL(THIS.FRXCursor) OR ;
  55731.                (NOT THIS.FRXCursor.CreateObjectCursor("FRX", "OBJECTS", .F., .T. ,THIS.FRXDataSession)) && force the load and make sure
  55732.                                                          && we have access to runtime
  55733.                                                          && version of the cursor
  55734.                THIS.IncludeBandsWithNoObjects = .T.
  55735.             ELSE
  55736.                SELECT Bands                  
  55737.                IF TAGNO("UniqueID") = 0
  55738.                   INDEX ON UniqueID TAG UniqueID
  55739.                ENDIF
  55740.                SET ORDER TO 0                  
  55741.                SELECT Objects
  55742.                IF TAGNO("UniqueID") = 0
  55743.                   INDEX ON UniqueID TAG UniqueID
  55744.                ENDIF
  55745.                SET ORDER TO 0
  55746.             ENDIF   
  55747.          ENDIF   
  55748.          
  55749.          THIS.IsRunning = .T.               
  55750.          SET ORDER TO 0 IN FRX            
  55751.          m.lcDocument =  IIF(SEEK(OUTPUTXML_OBJTYPE_NODES+ ;
  55752.                               OUTPUTXML_OBJCODE_DOC,;
  55753.                               "Nodes","FrxNodes"), ;
  55754.                               Nodes.ObjValue, ;
  55755.                             OUTPUTXML_GOOFTAG)
  55756.          m.lcReport =  IIF(SEEK( OUTPUTXML_OBJTYPE_NODES+ FRX_OBJTYP_REPORTHEADER, ;
  55757.                             "Nodes","ObjType"), ;
  55758.                              Nodes.ObjValue, ;
  55759.                              OUTPUTXML_GOOFTAG)               
  55760.          IF NOT THIS.XMLMode = OUTPUTXML_RDL_ONLY 
  55761.             m.lcData =  IIF(SEEK( OUTPUTXML_OBJTYPE_NODES+ ;
  55762.                                  OUTPUTXML_OBJCODE_DATA, ;
  55763.                                 "Nodes","FrxNodes"), ;
  55764.                                  Nodes.ObjValue, ;
  55765.                                  OUTPUTXML_GOOFTAG)
  55766.          ENDIF
  55767.          IF NOT THIS.XMLMode = OUTPUTXML_DATA_ONLY 
  55768.             m.lcRDL = IIF(SEEK( OUTPUTXML_OBJTYPE_NODES+ ;
  55769.                              OUTPUTXML_OBJCODE_RDL, ;
  55770.                              "Nodes","FrxNodes"), ;
  55771.                              Nodes.ObjValue, ;
  55772.                              OUTPUTXML_GOOFTAG)
  55773.          ENDIF
  55774.          IF THIS.IncludeBreaksInData = OUTPUTXML_BREAKS_COLLECTION   
  55775.             m.lcPage =  IIF(SEEK( OUTPUTXML_OBJTYPE_NODES+ ;
  55776.                                 OUTPUTXML_OBJCODE_PAGES, ;
  55777.                                 "Nodes","FrxNodes"), ;
  55778.                                 Nodes.ObjValue, ;
  55779.                                 OUTPUTXML_GOOFTAG)
  55780.    *        GO (THIS.frxHeaderRecno) IN FRX
  55781.    *        IF FRX.VPos > 1
  55782.             m.lcCol = IIF(SEEK( OUTPUTXML_OBJTYPE_NODES+;
  55783.                               OUTPUTXML_OBJCODE_COLS,;
  55784.                               "Nodes","FrxNodes"), ;
  55785.                                Nodes.ObjValue, ;
  55786.                               OUTPUTXML_GOOFTAG)
  55787.     *       ENDIF
  55788.          ENDIF                    
  55789.          #IF OUTPUTXML = OUTPUTXML_RAW
  55790.              IF EMPTY(THIS.CurrentDocument) OR ISNULL(THIS.CurrentDocument)
  55791.                 THIS.CurrentDocument = m.lcDocument
  55792.                 THIS.WriteRaw( ;
  55793.                      THIS.XMLRawTag( THIS.CurrentDocument,.T.) )   
  55794.              ENDIF
  55795.              THIS.WriteRaw( ;
  55796.                   THIS.XMLRawTag( m.lcReport,.T.) )   
  55797.              * could add FRXname as ID here                
  55798.              IF NOT THIS.XMLMode = OUTPUTXML_DATA_ONLY    
  55799.                 * write RDL here
  55800.                 THIS.WriteRaw( ;
  55801.                      THIS.XMLRawTag( m.lcRDL,.T.,THIS.xmlRawConv( THIS.CommandClauses.FILE)) )  
  55802.                 THIS.WriteRaw( STRCONV(THIS.GetVFPRDLContents(m.lcRDL, .T.),STRCONV_DBCS_UTF8)  )
  55803.                 THIS.WriteRaw( ;
  55804.                      THIS.XMLRawTag( m.lcRDL) )   
  55805.              ENDIF
  55806.              IF NOT THIS.XMLMode = OUTPUTXML_RDL_ONLY           
  55807.                 THIS.WriteRaw( ;
  55808.                  THIS.XMLRawTag( m.lcData,.T.) )   
  55809.                       
  55810.                 IF THIS.IncludeBreaksInData = OUTPUTXML_BREAKS_COLLECTION   
  55811.                    THIS.PageNodes =  THIS.XMLRawTag( m.lcPage,.T.)  
  55812.  *                 IF NOT EMPTY(lcCol)
  55813.                       THIS.ColumnNodes = THIS.XMLRawTag(m.lcCol,.T.)
  55814.  *                 ENDIF
  55815.                 ENDIF
  55816.               ENDIF
  55817.                      
  55818.          #ELIF OUTPUTXML = OUTPUTXML_DOTNET
  55819.              * XMLTextWriter work  
  55820.          #ELSE
  55821.              IF VARTYPE(THIS.CurrentDocument) # "O"
  55822.                 LOCAL m.liSession
  55823.                 m.liSession = SET("DATASESSION")
  55824.                 THIS.resetDataSession()
  55825.                 THIS.CurrentDocument = CREATEOBJECT(OUTPUTXML_DOMFREETHREADED_DOCUMENTOBJECT)
  55826.                 SET DATASESSION TO (m.liSession)
  55827.                 * COMPROP(THIS.CurrentDocument,"UTF8",1)                                
  55828.                 THIS.CurrentDocument.DocumentElement = THIS.CurrentDocument.CreateElement(m.lcDocument)
  55829.              ENDIF
  55830.              loNode = THIS.CurrentDocument.CreateElement(m.lcReport)                  
  55831.              * setattribute id using FRXName here                
  55832.              * idref?
  55833.              THIS.CurrentDocument.DocumentElement.AppendChild(m.loNode)
  55834.              m.loParent = loNode             
  55835.              IF NOT THIS.XMLMode = OUTPUTXML_DATA_ONLY    
  55836.                 m.loNode = THIS.CurrentDocument.CreateElement(m.lcRDL)
  55837.                 m.loNode.SetAttribute(THIS.idAttribute,THIS.CommandClauses.FILE)
  55838.                 m.loNode.AppendChild(THIS.GetVFPRDLContents(m.lcRDL))
  55839.                 m.loParent.AppendChild(m.loNode)
  55840.              ENDIF
  55841.              IF NOT THIS.XMLMode = OUTPUTXML_RDL_ONLY                        
  55842.                 m.loNode = THIS.CurrentDocument.CreateElement(m.lcData)
  55843.                 * possibly add DE stuff here                
  55844.                 m.loParent.AppendChild(m.loNode)
  55845.                 THIS.DataNodes = m.loNode
  55846.                 IF THIS.IncludeBreaksInData = OUTPUTXML_BREAKS_COLLECTION   
  55847.                    THIS.PageNodes = THIS.CurrentDocument.CreateElement(m.lcPage)
  55848.                    THIS.DataNodes.AppendChild(THIS.PageNodes)
  55849.                    THIS.ColumnNodes = THIS.CurrentDocument.CreateElement(m.lcCol)
  55850.                    THIS.DataNodes.AppendChild(THIS.ColumnNodes)                   
  55851.                 ENDIF
  55852.              ENDIF
  55853.          #ENDIF
  55854.          IF THIS.XMLMode = OUTPUTXML_RDL_ONLY
  55855.             THIS.AfterReport(.T.)
  55856.          ENDIF
  55857.       ENDIF
  55858.       *&* Sedna
  55859.       IF THIS.XMLMode # OUTPUTXML_RDL_ONLY
  55860.          THIS.initializeFormattingChangesCursor()    
  55861.          SELECT FRX
  55862.          IF USED(THIS.formattingChanges)
  55863.             SELECT FRX
  55864.             SCAN FOR Platform = FRX_PLATFORM_WINDOWS AND ;
  55865.                  ObjType = FRX_OBJTYP_FIELD AND NOT DELETED() && fields only
  55866.                 INSERT INTO (THIS.FormattingChanges) ;
  55867.                   (FRXRecno) VALUES (RECNO("FRX"))
  55868.             ENDSCAN
  55869.             SELECT (THIS.FormattingChanges)
  55870.             INDEX ON FRXRecno TAG FRXRecno
  55871.             SELECT FRX
  55872.          ENDIF
  55873.       ENDIF
  55874.       STORE NULL TO m.loNode, m.loParent
  55875.       SELECT (m.liSelect)
  55876.    ELSE
  55877.       THIS.DoMessage(OUTPUTXML_FRXMISSING_LOC,MB_ICONSTOP )
  55878.       THIS.lastErrorMessage = OUTPUTXML_FRXMISSING_LOC
  55879.    ENDIF   
  55880.    THIS.resetDataSession()
  55881. ENDIF
  55882. RETURN 
  55883. ENDPROC
  55884. PROCEDURE invokeoncurrentpass
  55885. RETURN (THIS.includePage) AND ;
  55886.        (NOT THIS.XMLMode = OUTPUTXML_RDL_ONLY ) AND ;
  55887.        ((NOT THIS.TwoPassProcess) OR THIS.CurrentPass = LISTENER_FULLPASS)
  55888.         
  55889. ENDPROC
  55890. PROCEDURE verifyconfigtable
  55891. LPARAMETERS m.tcAlias
  55892. LOCAL m.llReturn, laRequired[1], m.liIndex, m.liSelect, ;
  55893.       m.liTag, m.lcTag, m.lcIndex, m.llSafetyOn, m.llFixedOn
  55894. m.llReturn = DODEFAULT(m.tcAlias)
  55895. IF m.llReturn
  55896.    * check for required tagnames (used in SEEKs)
  55897.    m.liSelect = SELECT(0)
  55898.    SELECT (m.tcAlias)
  55899.    DIME laRequired[2,2]
  55900.    laRequired[1,1] = "OBJTYPE"
  55901.    laRequired[1,2] = "OBJTYPE"
  55902.    laRequired[2,1] = "FRXNODES"
  55903.    laRequired[2,2] = NORMALIZE("OBJTYPE+OBJCODE+IIF(OBJTYPE="+ ;
  55904.                       TRANSFORM(FRX_OBJTYP_BAND+OUTPUTXML_OBJTYPE_NODES,"9999999")+"," + ;
  55905.                       TRANSFORM(OUTPUTXML_OBJTYPE_BANDOFFSET,"9999999")+",0)")
  55906.    FOR m.liIndex = 1 TO ALEN(laRequired,1)
  55907.        m.liTag = TAGNO(laRequired[m.liIndex,1])
  55908.        IF m.liTag = 0 OR NOT NORMALIZE(KEY(m.liTag)) == ;
  55909.           laRequired[m.liIndex,2]
  55910.           m.llReturn = .F.
  55911.        ENDIF
  55912.    ENDFOR
  55913.    IF NOT m.llReturn
  55914.       m.llSafetyOn = (SET("SAFETY") = "ON")
  55915.       SET SAFETY OFF
  55916.       m.llFixedOn = (SET("FIXED") = "ON")
  55917.       SET FIXED OFF
  55918.       TRY
  55919.          USE (DBF(m.tcAlias)) EXCLU ALIAS (m.tcAlias)
  55920.          FOR m.liIndex = 1 TO ALEN(laRequired,1)
  55921.             m.lcTag = laRequired[m.liIndex,1]
  55922.             m.lcIndex = laRequired[m.liIndex,2]
  55923.             INDEX ON &lcIndex TAG &lcTag
  55924.          ENDFOR
  55925.       
  55926.          m.llReturn = .T.
  55927.       CATCH
  55928.       ENDTRY   
  55929.       
  55930.       
  55931.       IF m.llReturn
  55932.          FOR m.liIndex = 1 TO ALEN(laRequired,1)
  55933.              m.liTag = TAGNO(laRequired[m.liIndex,1])
  55934.              IF m.liTag = 0 OR NOT NORMALIZE(KEY(m.liTag)) == ;
  55935.                 laRequired[m.liIndex,2]
  55936.                 m.llReturn = .F.
  55937.              ENDIF
  55938.          ENDFOR
  55939.       ENDIF
  55940.       
  55941.       USE (DBF(m.tcAlias)) SHARED ALIAS (m.tcAlias)
  55942.       
  55943.       IF m.llSafetyOn
  55944.          SET SAFETY ON
  55945.       ENDIF
  55946.       IF m.llFixedOn
  55947.          SET FIXED ON
  55948.       ENDIF
  55949.    ENDIF
  55950.    IF NOT m.llReturn
  55951.       m.lcMessage =  OUTPUTXML_CONFIGTAGMISSING_LOC + CHR(13) 
  55952.       FOR m.liIndex = 1 TO ALEN(laRequired,1)
  55953.           m.lcMessage = m.lcMessage + ;
  55954.                      CHR(13) + laRequired[m.liIndex,1] + ;
  55955.                      "=" + laRequired[m.liIndex,2]
  55956.       ENDFOR               
  55957.       THIS.DoMessage(m.lcMessage,MB_ICONSTOP )      
  55958.       THIS.lastErrorMessage = OUTPUTXML_CONFIGTAGMISSING_LOC
  55959.    ENDIF
  55960.    IF m.llReturn 
  55961.                                   
  55962.      * just do one check, this is in case
  55963.      * a different listener created the config file.
  55964.      * the XML will run just fine without these records,
  55965.      * it will just use its gooftag instead of regular
  55966.      * nodenames if all or any are missing
  55967.      IF NOT SEEK( OUTPUTXML_OBJTYPE_NODES+ FRX_OBJTYP_REPORTHEADER, ;
  55968.                                ALIAS(),"ObjType")
  55969.         TRY
  55970.            IF IsReadOnly()
  55971.               USE (DBF(m.tcAlias)) SHARED ALIAS (m.tcAlias)
  55972.            ENDIF
  55973.            THIS.InsertXMLConfigRecords()
  55974.         CATCH
  55975.         ENDTRY   
  55976.                                
  55977.      ENDIF                          
  55978.    ENDIF
  55979.    SELECT (m.liSelect)
  55980. ENDIF
  55981. RETURN m.llReturn       
  55982. ENDPROC
  55983. PROCEDURE targetfileext_assign
  55984. LPARAMETERS m.vNewVal
  55985. IF VARTYPE(m.vNewVal) = "C" AND ;
  55986.    NOT UPPER(ALLTRIM(STRTRAN(m.vNewVal,".",""))) == "TMP"
  55987.    DODEFAULT(m.vNewVal)
  55988.    * this class reserves the extension
  55989.    * TMP for swapping in and out when 
  55990.    * using temporary files and XLSTs transforms
  55991. ENDIF   
  55992. ENDPROC
  55993. PROCEDURE setfrxrunstartupconditions
  55994. DODEFAULT()
  55995. IF TYPE("THIS.CommandClauses.File") # "C"
  55996.    ADDPROPERTY(THIS.CommandClauses,"File","")
  55997. ENDIF      
  55998. IF TYPE("THIS.CommandClauses.NoPageEject") # "L"
  55999.    ADDPROPERTY(THIS.CommandClauses,"NoPageEject",.F.)
  56000. ENDIF      
  56001. ENDPROC
  56002. PROCEDURE EvaluateContents
  56003. LPARAMETERS m.nFRXRecno, m.oObjProperties
  56004. DODEFAULT(m.nFRXRecno,m.oObjProperties)
  56005. * do some work even though we may not be
  56006. * adding DTYPE and DTEXT, so that
  56007. * subclasses can rely on the right record
  56008. * being made available in the formattingChanges alias
  56009. * and the "empty values" object always being there
  56010. IF THIS.InvokeOnCurrentPass() AND ;
  56011.    THIS.targetHandle <> -1
  56012.    THIS.setFRXDataSession() 
  56013.    IF USED(THIS.formattingChanges)
  56014.       IF ISNULL(THIS.evaluateContentsValues) 
  56015.          * first time
  56016.          SELECT (THIS.formattingChanges)
  56017.          SCATTER MEMO BLANK NAME THIS.evaluateContentsValues ;
  56018.               FIELDS EXCEPT FRXRecno
  56019.       ENDIF
  56020.       =SEEK(m.nFRXRecno,THIS.FormattingChanges, "FRXRecno") 
  56021.       IF NOT EOF(THIS.formattingChanges)
  56022.          SELECT (THIS.formattingChanges) 
  56023.          GATHER NAME THIS.evaluateContentsValues  && always start off empty
  56024.          IF THIS.includeDataTypeAttributes 
  56025.             WITH m.oObjProperties
  56026.                IF EMPTY(.Value)
  56027.                  REPLACE DType WITH "C"
  56028.                ELSE
  56029.                  REPLACE DType WITH VARTYPE(.Value), ;
  56030.                          DText WITH THIS.formatDataValue(.Value)
  56031.                ENDIF  
  56032.             ENDWITH         
  56033.          ENDIF
  56034.          SELECT FRX
  56035.       ENDIF   
  56036.    ENDIF   
  56037.    THIS.resetDataSession() 
  56038.    RETURN .F.   
  56039. ENDIF      
  56040.            
  56041. ENDPROC
  56042. PROCEDURE resetruncollector
  56043. THIS.runCollector = NULL
  56044. ENDPROC
  56045. PROCEDURE fillruncollector
  56046. * getRunNodeContents will allow a Collection, 
  56047. * a table/alias, or an empty-type object.
  56048. * Table/Alias is easiest, and allows you to use
  56049. * reset levels of OUTPUTFX_RUNCOLLECTOR_RESET_NEVER or
  56050. * OUTPUTFX_RUNCOLLECTOR_RESET_ONCHAIN, because the entry
  56051. * keys do not have to be unique.
  56052. * However, a Collection or EMPTY object
  56053. * allows you to add serialized XML documents as the values
  56054. * of a single property if you like. (This is done
  56055. * in addRunNode method.) You also don't have to 
  56056. * place a cursor in the user's data session.
  56057. * (The getRunNodeContents method will find the cursor in the FRX data session 
  56058. * as well, but that wouldn't work very well for 
  56059. * chained reports; in fact, even CurrentDataSession is
  56060. * dicey with chained reports unless you're sure none
  56061. * of them has a private data session.)
  56062. * For these reasons, although its known document 
  56063. * properties are all simple values, xmlListener 
  56064. * chooses to implement
  56065. * fillRunCollector using a Collection object, and   
  56066. * a CASE exists below to load the XML contents properly
  56067. * for any consumers that wish to read it as true XML.
  56068. * runCollectorResetLevel is readonly at OUTPUTFX_RUNCOLLECTOR_RESET_ONREPORT
  56069. * to ensure uniqueness of the keys for each report run.
  56070. * If you override this method to use an alias, you can
  56071. * gather data cumulatively for chained runs however you
  56072. * choose, and getRunNodeContents should cope.
  56073. * If you augment this method to add to the collection,
  56074. * you can add serialized objects
  56075. * in the form of XML nodes that have nothing to do with the 
  56076. * original memberdata contents, and may be completely different
  56077. * in schema.  HTMLListener does this for HTTP-EQUIV handling.
  56078. IF ISNULL(THIS.runCollector) OR VARTYPE(THIS.runCollector) # "O"
  56079.    * because we are using OUTPUTFX_RUNCOLLECTOR_RESET_ONREPORT,
  56080.    * this should always be true, and the session issue is
  56081.    * probably not relevant.  But we will adjust the session
  56082.    * in case somebody changes this #DEFINEd life-period of
  56083.    * the runCollector object
  56084.    LOCAL m.liSession
  56085.    m.liSession = SET("DATASESSION")
  56086.    THIS.resetDataSession()
  56087.    THIS.runCollector = CREATEOBJECT("Collection")
  56088.    SET DATASESSION TO (m.liSession)
  56089. ENDIF
  56090. THIS.setFRXDataSession()
  56091. IF USED(THIS.memberDataAlias) 
  56092.    LOCAL m.lvValue, m.lcExpr, m.liSelect, m.loXML, m.loXMLTemp
  56093.    IF USED("FRX") 
  56094.       GO (THIS.frxHeaderRecno) IN FRX
  56095.       #IF OUTPUTXML = OUTPUTXML_DOM
  56096.          m.loXML = CREATEOBJECT(OUTPUTXML_DOMFREETHREADED_DOCUMENTOBJECT)
  56097.          m.loXMLTemp = CREATEOBJECT(OUTPUTXML_DOMFREETHREADED_DOCUMENTOBJECT)
  56098.       #ELSE
  56099.          m.loXML = CREATEOBJECT("Microsoft.XMLDOM")
  56100.          m.loXMLTemp = CREATEOBJECT("Microsoft.XMLDOM")
  56101.       #ENDIF      
  56102.       IF NOT m.loXML.LoadXML(FRX.Style)
  56103.          m.loXML = NULL
  56104.       ENDIF
  56105.    ENDIF      
  56106.    m.liSelect = SELECT(0)
  56107.    SELECT (THIS.memberDataAlias)
  56108.    SCAN ALL FOR FRXRecno = THIS.frxHeaderRecno AND ;
  56109.         Type = FRX_BLDR_MEMBERDATATYPE  ;
  56110.         AND (NOT (EMPTY(Execute) OR EMPTY(Name) OR EMPTY(ExecWhen) OR DELETED()))
  56111.         * do not check
  56112.         * for Name == FRX_BLDR_NAMESPACE_ADVANCEDPROPS   
  56113.         * because you can add your own in. 
  56114.         * But it must have *some* namespace.
  56115.         * IOW, the original metadata record with 
  56116.         * blank namespace is not included in this treatment,
  56117.         * because its Execute and ExecWhen fields 
  56118.         * are specified to have different scripting behavior.       
  56119.         m.lvValue = ""
  56120.         m.lcExpr = Execute
  56121.         DO CASE
  56122.         CASE VAL(DeClass) = ADVPROP_EDITMODE_GETEXPR 
  56123.            m.lvValue = THIS.evaluateUserExpression(m.lcExpr)
  56124.         CASE VAL(DeClass) = ADVPROP_EDITMODE_TEXT AND ;
  56125.            NOT ISNULL(m.loXML) 
  56126.            m.lvValue = ;
  56127.               m.loXML.SelectSingleNode("/VFPData/reportdata" + ;
  56128.                       "[@name='" + Name + "' and @execwhen='" + ExecWhen + "']/@execute")
  56129.            IF (NOT ISNULL(m.lvValue)) AND ;
  56130.               m.loXMLTemp.LoadXML(m.lvValue.Text)
  56131.               m.lvValue = m.loXMLTemp.DocumentElement
  56132.            ELSE
  56133.               m.lvValue = m.lcExpr
  56134.                * may not really be XML, we still want the information
  56135.            ENDIF                      
  56136.         OTHERWISE
  56137.            m.lvValue = m.lcExpr
  56138.         ENDCASE
  56139.         * The following help ensures uniqueness of key values
  56140.         * in case people use the same property names in ExecWhen.
  56141.         
  56142.         IF Name == FRX_BLDR_NAMESPACE_ADVANCEDPROPS 
  56143.            m.lcExpr = ExecWhen
  56144.         ELSE
  56145.            m.lcExpr = Name+"."+ExecWhen
  56146.         ENDIF
  56147.         IF THIS.runCollector.getKey(m.lcExpr) = 0  
  56148.            THIS.runCollector.add(m.lvValue,m.lcExpr)
  56149.         ENDIF
  56150.    ENDSCAN        
  56151.    SELECT (liSelect)
  56152.    STORE NULL  TO m.loXML, m.loXMLTemp
  56153. ENDIF
  56154. ENDPROC
  56155. PROCEDURE runcollectorresetlevel_assign
  56156. LPARAMETERS tvNewVal
  56157. THIS.runCollectorResetLevel = OUTPUTFX_RUNCOLLECTOR_RESET_ONREPORT
  56158. ENDPROC
  56159. PROCEDURE applyfx
  56160. LPARAMETERS m.toListener, m.tcMethodToken,;
  56161.             m.tP1, m.tP2, m.tP3, m.tP4, m.tP5, m.tP6, ;
  56162.             m.tP7, m.tP8, m.tP9, m.tP10, m.tP11, m.tP12
  56163. LOCAL m.liSession            
  56164. IF VARTYPE(m.toListener) = "O" && AND ;
  56165.    (NOT m.toListener.IsSuccessor)
  56166.    DO CASE
  56167.    CASE m.tcMethodToken == "DOSTATUS"
  56168.       THIS.DoStatus(m.toListener, m.tP1)
  56169.    CASE m.tcMethodToken == "UPDATESTATUS"
  56170.       THIS.UpdateStatus(m.toListener)    
  56171.    CASE m.tcMethodToken == "CLEARSTATUS"
  56172.       THIS.ClearStatus(m.toListener)
  56173.    CASE m.tcMethodToken == "AFTERBAND"
  56174.        THIS.synchStatus(m.toListener,m.tP1,m.tP2)
  56175.    CASE m.tcMethodToken == "AFTERREPORT"
  56176.       IF SYS(2024) # "Y" 
  56177.          IF THIS.isRunning AND TYPE("m.toListener.CommandClauses.RecordTotal") = "N"
  56178.             THIS.CurrentRecord = m.toListener.CommandClauses.RecordTotal
  56179.          ENDIF   
  56180.          THIS.UpdateStatus(m.toListener) 
  56181.       ENDIF
  56182.       THIS.designatedDriver = ""
  56183.       THIS.drivingAlias = ""
  56184.       THIS.successorSys2024 = "N"
  56185.       THIS.Visible = .F.
  56186.       THIS.ReportStopRunDateTime = DATETIME()
  56187.       THIS.popUserFeedbackGlobalSets()
  56188.       THIS.ClearStatus(m.toListener)       
  56189.    CASE m.tcMethodToken == "BEFOREBAND"
  56190.       IF THIS.successorSys2024 = "Y" AND ;
  56191.          m.toListener.CurrentPass = LISTENER_FULLPASS
  56192.          * user cancelled during the prepass,
  56193.          * we need to re-cancel.
  56194.          m.liSession = SET("DATASESSION")
  56195.          SET DATASESSION TO (m.toListener.CurrentDataSession)
  56196.          IF USED(THIS.designatedDriver)
  56197.             GO BOTTOM IN (THIS.designatedDriver)
  56198.          ENDIF   
  56199.          SET DATASESSION TO (m.liSession)
  56200.       ENDIF   
  56201.       THIS.synchStatus(m.toListener,m.tP1,m.tP2)
  56202.   CASE m.tcMethodToken == "BEFOREREPORT"
  56203.       THIS.setupReport(m.toListener)
  56204.    CASE m.tcMethodToken == "CANCELREPORT"
  56205.       IF THIS.isRunning AND ;
  56206.          (m.toListener.QuietMode OR ;
  56207.          (m.toListener.pageLimit > 0 AND m.toListener.PageNo > m.toListener.pageLimit) OR ;
  56208.           (NOT m.toListener.AllowModalMessages) OR ;
  56209.           m.toListener.DoMessage(This.CancelQueryText,;  && OUTPUTCLASS_REPORT_CANCELQUERY_LOC
  56210.                                  MB_ICONQUESTION+MB_YESNO, This.AttentionText) =  IDYES )
  56211.           m.toListener.cancelRequested = .T.
  56212.           IF m.toListener.isSuccessor AND NOT EMPTY(THIS.designatedDriver)
  56213.              * NB: FX should ordinarily not be used in a successor,
  56214.              * but this won't hurt and will take care of the exception
  56215.              THIS.successorSys2024 = "Y"
  56216.              m.liSession = SET("DATASESSION")
  56217.              SET DATASESSION TO (m.toListener.CurrentDataSession)
  56218.              IF USED(THIS.designatedDriver)
  56219.                 GO BOTTOM IN (THIS.designatedDriver)
  56220.              ENDIF   
  56221.              SET DATASESSION TO (m.liSession)
  56222.           ENDIF
  56223.           IF SYS(2024) = "Y"  OR m.toListener.IsSuccessor
  56224.              THIS.Visible = .F.
  56225.              IF (m.toListener.pageLimit = -1 OR m.toListener.PageNo <= m.toListener.pageLimit)
  56226.                 m.toListener.DoMessage(;
  56227.                         This.ReportIncompleteText, ; && OUTPUTCLASS_REPORT_INCOMPLETE_LOC
  56228.                         MB_ICONEXCLAMATION, This.AttentionText)
  56229.              ENDIF
  56230.           ENDIF
  56231.           RETURN .F.
  56232.        ELSE
  56233.           RETURN .T. && did not handle, use default behavior          
  56234.        ENDIF          
  56235.    CASE m.tcMethodToken == "LOADREPORT"
  56236.       THIS.ResetUserFeedback(.T.)
  56237.       m.toListener.AddProperty("reportStartRunDatetime",THIS.reportStartRunDatetime)
  56238.       IF NOT (m.toListener.QuietMode OR ;
  56239.            (TYPE("m.toListener.CommandClauses.NoDialog") = "L" AND ;
  56240.            m.toListener.CommandClauses.NoDialog) )
  56241.            THIS.DoStatus(m.toListener,THIS.initStatusText) 
  56242.           * NB: a user can call LoadReport manually,
  56243.           * hence the need for a TYPE() check here.
  56244.       ENDIF   
  56245.       THIS.pushUserFeedbackGlobalSets(m.toListener) 
  56246.    CASE m.tcMethodToken == "UNLOADREPORT"
  56247.       THIS.ReportStopRunDateTime = DATETIME()
  56248.       m.toListener.AddProperty("reportStopRunDatetime",THIS.reportStopRunDatetime)      
  56249.       THIS.IsRunning = .F.
  56250.       THIS.ClearStatus()       
  56251.       IF NOT THIS.persistBetweenRuns 
  56252.          SET DATASESSION TO (m.toListener.ListenerDataSession)      
  56253.          THIS.Release()
  56254.       ENDIF            
  56255.    ENDCASE
  56256.    SET DATASESSION TO (m.toListener.ListenerDataSession)
  56257. ENDIF
  56258. *!*    LPARAMETERS m.toListener, m.tcMethodToken,;
  56259. *!*                m.tP1, m.tP2, m.tP3, m.tP4, m.tP5, m.tP6, ;
  56260. *!*                m.tP7, m.tP8, m.tP9, m.tP10, m.tP11, m.tP12
  56261. *!*    LOCAL m.liSession            
  56262. *!*    IF VARTYPE(m.toListener) = "O" && AND ;
  56263. *!*       (NOT m.toListener.IsSuccessor)
  56264. *!*       DO CASE
  56265. *!*       CASE m.tcMethodToken == "DOSTATUS"
  56266. *!*          THIS.DoStatus(m.toListener, m.tP1)
  56267. *!*       CASE m.tcMethodToken == "UPDATESTATUS"
  56268. *!*          THIS.UpdateStatus(m.toListener)    
  56269. *!*       CASE m.tcMethodToken == "CLEARSTATUS"
  56270. *!*          THIS.ClearStatus(m.toListener)
  56271. *!*       CASE m.tcMethodToken == "AFTERBAND"
  56272. *!*           THIS.synchStatus(m.toListener,m.tP1,m.tP2)
  56273. *!*       CASE m.tcMethodToken == "AFTERREPORT"
  56274. *!*          IF SYS(2024) # "Y" 
  56275. *!*             IF THIS.isRunning AND TYPE("m.toListener.CommandClauses.RecordTotal") = "N"
  56276. *!*                THIS.CurrentRecord = m.toListener.CommandClauses.RecordTotal
  56277. *!*             ENDIF   
  56278. *!*             THIS.UpdateStatus(m.toListener) 
  56279. *!*          ENDIF
  56280. *!*          THIS.designatedDriver = ""
  56281. *!*          THIS.drivingAlias = ""
  56282. *!*          THIS.successorSys2024 = "N"
  56283. *!*          THIS.Visible = .F.
  56284. *!*          THIS.ReportStopRunDateTime = DATETIME()
  56285. *!*          THIS.popUserFeedbackGlobalSets()
  56286. *!*          THIS.ClearStatus(m.toListener)       
  56287. *!*       CASE m.tcMethodToken == "BEFOREBAND"
  56288. *!*          IF THIS.successorSys2024 = "Y" AND ;
  56289. *!*             m.toListener.CurrentPass = LISTENER_FULLPASS
  56290. *!*             * user cancelled during the prepass,
  56291. *!*             * we need to re-cancel.
  56292. *!*             m.liSession = SET("DATASESSION")
  56293. *!*             SET DATASESSION TO (m.toListener.CurrentDataSession)
  56294. *!*             IF USED(THIS.designatedDriver)
  56295. *!*                GO BOTTOM IN (THIS.designatedDriver)
  56296. *!*             ENDIF   
  56297. *!*             SET DATASESSION TO (m.liSession)
  56298. *!*          ENDIF   
  56299. *!*          THIS.synchStatus(m.toListener,m.tP1,m.tP2)
  56300. *!*      CASE m.tcMethodToken == "BEFOREREPORT"
  56301. *!*          THIS.setupReport(m.toListener)
  56302. *!*       CASE m.tcMethodToken == "CANCELREPORT"
  56303. *!*          IF THIS.isRunning AND ;
  56304. *!*             (m.toListener.QuietMode OR ;
  56305. *!*             (m.toListener.pageLimit > 0 AND m.toListener.PageNo > m.toListener.pageLimit) OR ;
  56306. *!*              (NOT m.toListener.AllowModalMessages) OR ;
  56307. *!*              m.toListener.DoMessage(OUTPUTCLASS_REPORT_CANCELQUERY_LOC,;
  56308. *!*                                     MB_ICONQUESTION+MB_YESNO) =  IDYES )
  56309. *!*              m.toListener.cancelRequested = .T.
  56310. *!*              IF m.toListener.isSuccessor AND NOT EMPTY(THIS.designatedDriver)
  56311. *!*                 * NB: FX should ordinarily not be used in a successor,
  56312. *!*                 * but this won't hurt and will take care of the exception
  56313. *!*                 THIS.successorSys2024 = "Y"
  56314. *!*                 m.liSession = SET("DATASESSION")
  56315. *!*                 SET DATASESSION TO (m.toListener.CurrentDataSession)
  56316. *!*                 IF USED(THIS.designatedDriver)
  56317. *!*                    GO BOTTOM IN (THIS.designatedDriver)
  56318. *!*                 ENDIF   
  56319. *!*                 SET DATASESSION TO (m.liSession)
  56320. *!*              ENDIF
  56321. *!*              IF SYS(2024) = "Y"  OR m.toListener.IsSuccessor
  56322. *!*                 THIS.Visible = .F.
  56323. *!*                 IF (m.toListener.pageLimit = -1 OR m.toListener.PageNo <= m.toListener.pageLimit)
  56324. *!*                    m.toListener.DoMessage(OUTPUTCLASS_REPORT_INCOMPLETE_LOC, ;
  56325. *!*                                   MB_ICONEXCLAMATION)
  56326. *!*                 ENDIF                        
  56327. *!*              ENDIF
  56328. *!*              RETURN .F.
  56329. *!*           ELSE
  56330. *!*              RETURN .T. && did not handle, use default behavior          
  56331. *!*           ENDIF          
  56332. *!*       CASE m.tcMethodToken == "LOADREPORT"
  56333. *!*          THIS.ResetUserFeedback(.T.)
  56334. *!*          m.toListener.AddProperty("reportStartRunDatetime",THIS.reportStartRunDatetime)
  56335. *!*          IF NOT (m.toListener.QuietMode OR ;
  56336. *!*               (TYPE("m.toListener.CommandClauses.NoDialog") = "L" AND ;
  56337. *!*               m.toListener.CommandClauses.NoDialog) )
  56338. *!*               THIS.DoStatus(m.toListener,THIS.initStatusText) 
  56339. *!*              * NB: a user can call LoadReport manually,
  56340. *!*              * hence the need for a TYPE() check here.
  56341. *!*          ENDIF   
  56342. *!*          THIS.pushUserFeedbackGlobalSets(m.toListener) 
  56343. *!*       CASE m.tcMethodToken == "UNLOADREPORT"
  56344. *!*          THIS.ReportStopRunDateTime = DATETIME()
  56345. *!*          m.toListener.AddProperty("reportStopRunDatetime",THIS.reportStopRunDatetime)      
  56346. *!*          THIS.IsRunning = .F.
  56347. *!*          THIS.ClearStatus()       
  56348. *!*          IF NOT THIS.persistBetweenRuns 
  56349. *!*             SET DATASESSION TO (m.toListener.ListenerDataSession)      
  56350. *!*             THIS.Release()
  56351. *!*          ENDIF            
  56352. *!*       ENDCASE
  56353. *!*       SET DATASESSION TO (m.toListener.ListenerDataSession)
  56354. *!*    ENDIF            
  56355. ENDPROC
  56356. PROCEDURE includeseconds_assign
  56357. LPARAMETERS m.vNewVal
  56358. IF VARTYPE(m.vNewVal) = "L"
  56359.    THIS.includeSeconds = m.vNewVal
  56360. ENDIF   
  56361. ENDPROC
  56362. PROCEDURE initstatustext_assign
  56363. LPARAMETERS m.vNewVal
  56364. IF VARTYPE(m.vNewVal) = "C"
  56365.    THIS.initStatusText = m.vNewVal
  56366. ENDIF   
  56367. ENDPROC
  56368. PROCEDURE prepassstatustext_assign
  56369. LPARAMETERS m.vNewVal
  56370. IF VARTYPE(m.vNewVal) = "C"
  56371.    THIS.prepassStatusText = m.vNewVal
  56372. ENDIF   
  56373. ENDPROC
  56374. PROCEDURE runstatustext_assign
  56375. LPARAMETERS vNewVal
  56376. *To do: Modify this routine for the Assign method
  56377. THIS.runStatusText = m.vNewVal
  56378. ENDPROC
  56379. PROCEDURE secondstext_assign
  56380. LPARAMETERS vNewVal
  56381. *To do: Modify this routine for the Assign method
  56382. THIS.secondsText = m.vNewVal
  56383. ENDPROC
  56384. PROCEDURE thermcaption_assign
  56385. LPARAMETERS m.vNewVal
  56386. IF VARTYPE(m.vNewVal) = "C"
  56387.    LOCAL m.lcType, m.cMessage
  56388.    m.cMessage = ""
  56389.    TRY 
  56390.     m.lcType = VARTYPE(EVALUATE(m.vNewVal))
  56391.       IF m.lcType = "C"
  56392.         THIS.thermCaption = m.vNewVal
  56393.     ENDIF
  56394.    CATCH 
  56395.    ENDTRY     
  56396. ENDIF   
  56397. ENDPROC
  56398. PROCEDURE thermformcaption_assign
  56399. LPARAMETERS m.vNewVal
  56400. IF VARTYPE(m.vNewVal) = "C"
  56401.    THIS.thermFormCaption = m.vNewVal
  56402.    THIS.setThermFormCaption()
  56403. ENDIF   
  56404. ENDPROC
  56405. PROCEDURE thermformheight_assign
  56406. LPARAMETERS m.vNewVal
  56407. IF  VARTYPE(m.vNewVal) = "N" AND ;
  56408.    BETWEEN(m.vNewVal,30,SYSMETRIC(SYSMETRIC_SCREENHEIGHT )-30)  AND ;
  56409.    INT(m.vNewVal) # THIS.thermFormHeight
  56410.    THIS.thermFormHeight = INT(m.vNewVal)
  56411.    IF THIS.thermMargin > THIS.thermFormHeight/4
  56412.       THIS.thermMargin = THIS.thermFormHeight/4
  56413.    ENDIF   
  56414.    THIS.synchUserInterface() 
  56415. ENDIF   
  56416. ENDPROC
  56417. PROCEDURE thermformwidth_assign
  56418. LPARAMETERS m.vNewVal
  56419. IF VARTYPE(m.vNewVal) = "N" AND ;
  56420.    BETWEEN(m.vNewVal,100,SYSMETRIC( SYSMETRIC_SCREENWIDTH  )-100) AND ;
  56421.    INT(m.vNewVal) # THIS.ThermFormWidth 
  56422.    THIS.thermFormWidth = INT(m.vNewVal)
  56423.    IF THIS.thermMargin > THIS.thermFormWidth/4
  56424.       THIS.thermMargin = THIS.thermFormWidth/4
  56425.    ENDIF   
  56426.    THIS.synchUserInterface() 
  56427. ENDIF   
  56428. ENDPROC
  56429. PROCEDURE thermmargin_assign
  56430. LPARAMETERS m.vNewVal
  56431. IF VARTYPE(m.vNewVal) = "N" AND ;
  56432.    BETWEEN(m.vNewVal,1,MIN(THIS.ThermFormHeight/4,THIS.ThermFormWidth/4)) AND ;
  56433.    INT(m.vNewVal) # THIS.thermMargin
  56434.    THIS.thermMargin = INT(m.vNewVal)
  56435.    THIS.synchUserInterface() 
  56436. ENDIF   
  56437. ENDPROC
  56438. PROCEDURE getparentwindowref
  56439. LOCAL m.loForm, m.loTopForm, m.lcInWindow
  56440. * first top form in the list
  56441. * will be the current top form.
  56442. ASSERT TYPE("_SCREEN.ActiveForm") # "O"  OR ;
  56443.        INLIST(_SCREEN.ActiveForm.ShowWindow, 0,1,2)
  56444. m.loTopForm = NULL
  56445. IF TYPE("THIS.CommandClauses.InWindow") = "C"
  56446.    m.lcInWindow = UPPER(ALLTRIM(THIS.CommandClauses.InWindow))
  56447. ENDIF   
  56448. IF EMPTY(lcInWindow) AND TYPE("THIS.CommandClauses.Window") = "C"
  56449.    m.lcInWindow = UPPER(ALLTRIM(THIS.CommandClauses.Window))
  56450. ENDIF   
  56451. IF NOT EMPTY(m.lcInWindow) 
  56452.      FOR EACH m.loForm IN _SCREEN.Forms  FOXOBJECT
  56453.         IF m.loForm.ShowWindow = 2  AND ;
  56454.            UPPER(m.loForm.Name) == m.lcInWindow
  56455.            m.loTopForm = m.loForm
  56456.            EXIT
  56457.         ENDIF
  56458.      ENDFOR
  56459.      
  56460. ENDIF
  56461. DO CASE
  56462. CASE VARTYPE(m.loTopForm) = "O"
  56463.     * already found
  56464. CASE _SCREEN.FormCount = 0 OR ;
  56465.      (TYPE("_SCREEN.ActiveForm") = "O" AND ;
  56466.      _SCREEN.ActiveForm.ShowWindow = 0 )     && ShowWindow In Screen
  56467.              
  56468.      m.loTopForm = _SCREEN
  56469. CASE (TYPE("_SCREEN.ActiveForm") = "O" AND ;
  56470.       _SCREEN.ActiveForm.ShowWindow = 2 )    && ShowWindow As Top Form
  56471.      m.loTopForm = _SCREEN.ActiveForm
  56472.              
  56473. OTHERWISE 
  56474.                                                
  56475.      FOR EACH m.loForm IN _SCREEN.Forms  FOXOBJECT
  56476.         IF m.loForm.ShowWindow = 2 
  56477.            m.loTopForm = m.loForm
  56478.            EXIT
  56479.         ENDIF
  56480.      ENDFOR
  56481.              
  56482.      IF VARTYPE(m.loTopForm) # "O"
  56483.         m.loTopForm = _SCREEN
  56484.      ENDIF
  56485.                   
  56486. ENDCASE
  56487. IF VARTYPE(m.loTopForm) # "O" OR ;
  56488.    EMPTY(m.loTopForm.Name)
  56489.    m.loTopForm = NULL
  56490. ENDIF
  56491. RETURN m.loTopForm     
  56492. ENDPROC
  56493. PROCEDURE getreportscopedriver
  56494. LPARAMETERS m.toListener
  56495. LOCAL m.liSelect, m.lcAlias, ;
  56496.       m.liSkips,  laSkips[1]
  56497. IF m.toListener.FRXDataSession > 0
  56498.    SET DATASESSION TO (m.toListener.FRXDataSession)
  56499.    RETURN .F.
  56500. ENDIF   
  56501. THIS.designatedDriver = THIS.drivingAlias
  56502. * used later if we have to cancel report as
  56503. * a Successor
  56504. IF USED("frx")
  56505.    m.liSelect = SELECT(0)
  56506.    m.lcAlias = ""
  56507.    SELECT FRX
  56508.    * first look for any target alias that
  56509.    * is the same as the driver
  56510.    SCAN ALL FOR ObjType = FRX_OBJTYP_BAND AND ;
  56511.            Objcode = FRX_OBJCOD_DETAIL AND ;
  56512.            TYPE(Expr) = "C" AND ;
  56513.            NOT (EMPTY(Expr)  OR DELETED())
  56514.        m.lcAlias = ALLTRIM(Expr)
  56515.        SET DATASESSION TO (m.toListener.CurrentDataSession)   
  56516.        m.lcAlias = UPPER(EVALUATE(m.lcAlias)) 
  56517.        SET DATASESSION TO (m.toListener.FRXDataSession)              
  56518.        IF m.lcAlias == UPPER(THIS.drivingAlias)
  56519.           EXIT
  56520.        ENDIF
  56521.    ENDSCAN
  56522.    IF m.lcAlias == UPPER(THIS.drivingAlias)
  56523.       SELECT (m.liSelect)
  56524.       * if the driver is also a target alias,
  56525.       * don't touch.
  56526.       * otherwise:
  56527.    ELSE 
  56528.       LOCATE FOR ObjType = FRX_OBJTYP_BAND AND ;
  56529.               Objcode = FRX_OBJCOD_DETAIL AND ;
  56530.               Platform = FRX_PLATFORM_WINDOWS AND ;
  56531.               NOT (EMPTY(Expr) OR DELETED())
  56532.       IF FOUND()
  56533.          * use the first detail band, on the theory
  56534.          * that people are going to put pre-processing 
  56535.          * calculations before other bands, 
  56536.          * so an early band has the best chance to be
  56537.          * the right driver.
  56538.          m.lcAlias = ALLTRIM(Expr)
  56539.          SET DATASESSION TO (m.toListener.CurrentDataSession)
  56540.          THIS.drivingAlias = UPPER(EVALUATE(m.lcAlias))
  56541.          SET DATASESSION TO (m.toListener.FrxDataSession)
  56542.          SELECT (m.liSelect)
  56543.       ELSE   
  56544.          * adjust the driver based on any
  56545.          * one to many relationships we can find.
  56546.          SELECT (m.liSelect)
  56547.          SET DATASESSION TO (m.toListener.CurrentDataSession)
  56548.          m.lcAlias = THIS.drivingAlias
  56549.          m.liSelect = SELECT(0)
  56550.          DO WHILE NOT EMPTY(m.lcAlias)
  56551.             SELECT (m.lcAlias)
  56552.             m.liSkips = ALINES(laSkips,SET("SKIP"),",")
  56553.             IF m.liSkips = 0 OR EMPTY(laSkips[1])
  56554.                THIS.drivingAlias = m.lcAlias
  56555.                m.lcAlias = ""
  56556.             ELSE
  56557.                m.lcAlias = laSkips[1]
  56558.                * it doesn't really matter how many lines there
  56559.                * are in the array; this is not going to be perfect
  56560.                * but we can't predict which child 
  56561.                * has the most records.
  56562.             ENDIF
  56563.          ENDDO
  56564.          SELECT (m.liSelect)
  56565.       ENDIF   
  56566.    ENDIF  
  56567.    RETURN .F.    
  56568. ENDIF
  56569. ENDPROC
  56570. PROCEDURE resetuserfeedback
  56571. LPARAMETERS m.tlResetTimes
  56572. THIS.CurrentRecord = 0
  56573. THIS.PercentDone = 0
  56574. IF m.tlResetTimes
  56575.    THIS.ReportStartRunDateTime= DATETIME()
  56576.    THIS.ReportStopRunDateTime= DTOT({})
  56577.    THIS.thermFormCaption = ""
  56578.    THIS.synchUserInterface()
  56579. ENDIF
  56580. ENDPROC
  56581. PROCEDURE setthermformcaption
  56582. *!*    LPARAMETERS tcCommandClausesFile, tcPrintJobName
  56583. *!*    IF EMPTY(THIS.ThermFormCaption)
  56584. *!*       IF VARTYPE(tcCommandClausesFile) = "C"
  56585. *!*          LOCAL m.cName
  56586. *!*          IF EMPTY( tcPrintJobName) OR VARTYPE( tcPrintJobName) # "C"
  56587. *!*             m.cName = PROPER(JUSTFNAME(tcCommandClausesFile))
  56588. *!*          ELSE
  56589. *!*             m.cName =  tcPrintJobName
  56590. *!*          ENDIF   
  56591. *!*          THIS.thermFormCaption = ;
  56592. *!*             m.cName + ": " + OUTPUTCLASS_CANCEL_INSTRUCTIONS_LOC
  56593. *!*       ELSE
  56594. *!*          THIS.thermFormCaption = ""
  56595. *!*       ENDIF
  56596. *!*    ENDIF
  56597. *!*    THIS.Caption = THIS.thermFormCaption
  56598. LPARAMETERS tcCommandClausesFile, tcPrintJobName
  56599. IF EMPTY(THIS.ThermFormCaption)
  56600.    IF VARTYPE(tcCommandClausesFile) = "C"
  56601.       LOCAL m.cName
  56602.       IF EMPTY(tcPrintJobName) OR VARTYPE(tcPrintJobName) # "C"
  56603.          m.cName = PROPER(JUSTFNAME(tcCommandClausesFile))
  56604.       ELSE
  56605.          m.cName =  tcPrintJobName
  56606.       ENDIF   
  56607.       THIS.thermFormCaption = ;
  56608.          m.cName + ": " + This.CancelInstrText && OUTPUTCLASS_CANCEL_INSTRUCTIONS_LOC
  56609.    ELSE
  56610.       THIS.thermFormCaption = ""
  56611.    ENDIF
  56612. ENDIF
  56613. This.Caption = THIS.thermFormCaption
  56614. ENDPROC
  56615. PROCEDURE synchstatus
  56616. LPARAMETERS m.toListener, m.nBandObjCode, m.nFRXRecNo
  56617. IF THIS.isRunning AND ;
  56618.    THIS.frxBandRecno = m.nFRXRecNo
  56619.    WITH m.toListener
  56620.       TRY
  56621.          SET DATASESSION TO (.CurrentDataSession)
  56622.          IF THIS.drivingAliasCurrentRecno  # RECNO(THIS.drivingAlias)
  56623.             THIS.currentRecord = THIS.CurrentRecord + 1
  56624.             THIS.drivingAliasCurrentRecno = RECNO(THIS.drivingAlias)
  56625.          ENDIF   
  56626.          IF THIS.currentRecord >= .CommandClauses.RecordTotal
  56627.             IF .CurrentPass = 0 AND .TwoPassProcess
  56628.                THIS.resetUserFeedback() 
  56629.             ELSE
  56630.                THIS.currentRecord = .CommandClauses.RecordTotal
  56631.             ENDIF
  56632.          ENDIF
  56633.          THIS.updateStatus(m.toListener)
  56634.        CATCH TO err
  56635.           #IF OUTPUTCLASS_DEBUGGING 
  56636.               SUSPEND
  56637.           #ENDIF
  56638.        ENDTRY         
  56639.        SET DATASESSION TO (.ListenerDataSession)       
  56640.    ENDWITH      
  56641. ENDIF  
  56642. ENDPROC
  56643. PROCEDURE dostatus
  56644. LPARAMETERS m.toListener, m.cMessage
  56645. LOCAL m.loParentForm, m.lcCaption, m.lcParentFormName
  56646. IF (VARTYPE(m.toListener) # "O") OR (NOT (m.toListener.QuietMode OR ;
  56647.    (THIS.isRunning AND m.toListener.CommandClauses.NoDialog)))
  56648.    IF EMPTY(m.cMessage) OR ISNULL(m.cMessage)
  56649.       m.cMessage = ""
  56650.    ENDIF
  56651.    m.lcCaption = EVALUATE(THIS.ThermCaption)
  56652.    WITH THIS
  56653.       
  56654.       IF THIS.isRunning
  56655.          THIS.Closable = .F.
  56656.          THIS.Movable = .F.
  56657.       ENDIF
  56658.      .ThermShape.Width = MAX( (((THIS.PercentDone/100) * .ThermBack.Width)-2) ,0)      
  56659.      IF NOT .Visible
  56660.         
  56661.         m.loParentForm = THIS.GetParentWindowRef()
  56662.         
  56663.         DO CASE
  56664.         CASE VARTYPE(m.loParentForm) # "O" AND (NOT _SCREEN.Visible)
  56665.            m.lcParentFormName = "MACDESKTOP"
  56666.         CASE VARTYPE(m.loParentForm) # "O"
  56667.            m.lcParentFormName = "SCREEN"              
  56668.         CASE (NOT m.loParentForm.Visible) AND ;
  56669.            (m.loParentForm.DeskTop OR NOT EMPTY(m.loParentForm.MacDesktop) OR ;
  56670.            m.loParentForm.ShowWindow = 2 OR (NOT _SCREEN.Visible))
  56671.            * in many cases, 
  56672.            * they've probably made a programming error,
  56673.            * the parent should be visible according to
  56674.            * the requirements of REPORT FORM ... IN WINDOW
  56675.            * if it's a WINDOW clause they
  56676.            * have no need to show it, might not be an error
  56677.            * Either way, they should see the therm
  56678.            * to know that the report is progressing                
  56679.            m.lcParentFormName = "MACDESKTOP"
  56680.         CASE (NOT m.loParentForm.Visible) 
  56681.            * same comment as above
  56682.            m.lcParentFormName = "SCREEN"
  56683.         OTHERWISE
  56684.            m.lcParentFormName = m.loParentForm.Name
  56685.         ENDCASE
  56686.            
  56687.         SHOW WINDOW (.Name) IN WINDOW (m.lcParentFormName) 
  56688.         .AlwaysOnTop = .T.
  56689.         .AutoCenter = .T.
  56690.         .Visible = .T.
  56691.      ENDIF
  56692.      .ThermLabel.Visible = .F.
  56693.      .ThermLabel.Caption = m.lcCaption     
  56694.      .ThermLabel.Left = (.Width - .ThermLabel.Width) /2 && doesn't work until after visibility of form
  56695.      .ThermLabel.Visible = .T.     
  56696.       
  56697.    ENDWITH
  56698.    m.loParentForm = NULL
  56699. ENDIF   
  56700. ENDPROC
  56701. PROCEDURE clearstatus
  56702. LPARAMETERS m.toListener
  56703. IF THIS.Visible 
  56704.    THIS.Visible = .F.
  56705. ENDIF   
  56706. ENDPROC
  56707. PROCEDURE updatestatus
  56708. LPARAMETERS m.toListener
  56709. IF VARTYPE(m.toListener) = "O" AND THIS.isRunning
  56710.    LOCAL m.liRecTotal, m.lnNewPercent, m.llShow
  56711.    m.liRecTotal = m.toListener.CommandClauses.RecordTotal 
  56712.    IF m.liRecTotal > 0 
  56713.       m.lnNewPercent = ROUND(THIS.CurrentRecord/m.liRecTotal,(THIS.ThermPrecision + 2) ) * 100
  56714.       IF (THIS.PercentDone # m.lnNewPercent)
  56715.          THIS.PercentDone = m.lnNewPercent
  56716.          m.llShow = .T.
  56717.          #IF OUTPUTCLASS_DEBUGGING 
  56718.              ? THIS.PercentDone, THIS.CurrentRecord, m.liRecTotal, m.toListener.PageTotal
  56719.              ? REPL(OUTPUTCLASS_STATUSCHAR_PCT_DONE,INT(THIS.PercentDone/100* OUTPUTCLASS_ONE_HUNDRED_PCT_MARK))+ ;
  56720.                REPL(OUTPUTCLASS_STATUSCHAR_PCT_NOT_DONE,MAX(FLOOR(OUTPUTCLASS_ONE_HUNDRED_PCT_MARK - ;
  56721.                                                             (OUTPUTCLASS_ONE_HUNDRED_PCT_MARK *THIS.PercentDone/100)),0) ) 
  56722.          #ENDIF                
  56723.       ENDIF
  56724.    ELSE
  56725.       m.llShow = .T.         
  56726.    ENDIF   
  56727.    IF m.llShow
  56728.       THIS.DoStatus(m.toListener, ;
  56729.                     IIF(m.toListener.CurrentPass = LISTENER_PREPASS  AND m.toListener.TwoPassProcess,;
  56730.                      THIS.PrepassStatusText, ;
  56731.                      THIS.RunStatusText) )
  56732.    ENDIF                     
  56733. ENDIF   
  56734. ENDPROC
  56735. PROCEDURE pushuserfeedbackglobalsets
  56736. LPARAMETERS m.toListener
  56737. IF (NOT INLIST(_VFP.StartMode,2,3,5))
  56738.    PUSH KEY CLEAR
  56739.    LOCAL m.lcRef
  56740.    SET MESSAGE TO ""
  56741.    THIS.SetNotifyCursor = (SET("Notify",2) = "ON")
  56742.    IF THIS.SetNotifyCursor
  56743.       SET NOTIFY CURSOR OFF
  56744.    ENDIF   
  56745.    THIS.OnEscapeCommand = ON("ESCAPE")   
  56746.    m.lcRef = SYS(2015)   
  56747.    PUBLIC &lcRef.   
  56748.    STORE m.toListener TO (m.lcRef)
  56749.    ON ESCAPE &lcRef..CancelReport()      
  56750.    THIS.EscapeReference = m.lcRef   
  56751.    THIS.SetEscape = (SET("ESCAPE")="OFF") 
  56752.    IF THIS.SetEscape
  56753.       SET ESCAPE ON
  56754.    ENDIF   
  56755. ENDIF   
  56756. ENDPROC
  56757. PROCEDURE popuserfeedbackglobalsets
  56758. IF (NOT INLIST(_VFP.StartMode,2,3,5))
  56759.    LOCAL m.lcRef
  56760.    m.lcRef = THIS.EscapeReference
  56761.    IF (NOT EMPTY(m.lcRef)) AND ;
  56762.        TYPE(m.lcRef) = "O"
  56763.       * push occurred earlier
  56764.       STORE NULL TO (m.lcRef)
  56765.       RELEASE &lcRef.
  56766.       THIS.escapeReference = ""
  56767.       m.lcRef = THIS.OnEscapeCommand
  56768.       ON ESCAPE &lcRef
  56769.       POP KEY
  56770.       IF THIS.SetNotifyCursor
  56771.          SET NOTIFY CURSOR ON
  56772.       ENDIF   
  56773.       IF THIS.SetEscape 
  56774.          SET ESCAPE OFF
  56775.       ENDIF   
  56776.    ENDIF   
  56777. ENDIF   
  56778. ENDPROC
  56779. PROCEDURE synchuserinterface
  56780. #define CTLCOLOR_MSGBOX             0
  56781. #define CTLCOLOR_EDIT               1
  56782. #define CTLCOLOR_LISTBOX            2
  56783. #define CTLCOLOR_BTN                3
  56784. #define CTLCOLOR_DLG                4
  56785. #define CTLCOLOR_SCROLLBAR          5
  56786. #define CTLCOLOR_STATIC             6
  56787. #define CTLCOLOR_MAX                7
  56788. #define COLOR_SCROLLBAR             0
  56789. #define COLOR_BACKGROUND            1
  56790. #define COLOR_ACTIVECAPTION         2
  56791. #define COLOR_INACTIVECAPTION       3
  56792. #define COLOR_MENU                  4
  56793. #define COLOR_WINDOW                5
  56794. #define COLOR_WINDOWFRAME           6
  56795. #define COLOR_MENUTEXT              7
  56796. #define COLOR_WINDOWTEXT            8
  56797. #define COLOR_CAPTIONTEXT           9
  56798. #define COLOR_ACTIVEBORDER         10
  56799. #define COLOR_INACTIVEBORDER       11
  56800. #define COLOR_APPWORKSPACE         12
  56801. #define COLOR_HIGHLIGHT            13
  56802. #define COLOR_HIGHLIGHTTEXT        14
  56803. #define COLOR_BTNFACE              15
  56804. #define COLOR_BTNSHADOW            16
  56805. #define COLOR_GRAYTEXT             17
  56806. #define COLOR_BTNTEXT              18
  56807. #define COLOR_INACTIVECAPTIONTEXT  19
  56808. #define COLOR_BTNHIGHLIGHT         20
  56809. #if("4" $ OS())
  56810. #define COLOR_3DDKSHADOW           21
  56811. #define COLOR_3DLIGHT              22
  56812. #define COLOR_INFOTEXT             23
  56813. #define COLOR_INFOBK               24
  56814. #define COLOR_DESKTOP           COLOR_BACKGROUND
  56815. #define COLOR_3DFACE            COLOR_BTNFACE
  56816. #define COLOR_3DSHADOW          COLOR_BTNSHADOW
  56817. #define COLOR_3DHIGHLIGHT       COLOR_BTNHIGHLIGHT
  56818. #define COLOR_3DHILIGHT         COLOR_BTNHIGHLIGHT
  56819. #define COLOR_BTNHILIGHT        COLOR_BTNHIGHLIGHT
  56820. #endif
  56821. DECLARE INTEGER GetSysColor IN Win32API INTEGER  
  56822. LOCAL m.liThermTop, m.liThermLeft, m.liThermWidth, m.liThermHeight
  56823. WITH THIS
  56824.      .Height = .ThermFormHeight     
  56825.      .Width = .ThermFormWidth
  56826.      .ControlBox = .F.
  56827.      .Closable = .T.
  56828.      .Movable = .T.     
  56829.      m.liThermHeight = .Height - (.ThermMargin* 2)
  56830.      m.liThermWidth =  .Width - (.ThermMargin*2)
  56831.      .SetThermFormCaption()    
  56832.      m.liThermTop =  .ThermMargin
  56833.      m.liThermLeft = .ThermMargin  
  56834. ENDWITH
  56835. WITH THIS.ThermBack
  56836.    .Top = m.liThermTop     
  56837.    .Left = m.liThermLeft
  56838.    .Height = m.liThermHeight
  56839.    .Width = m.liThermWidth
  56840. ENDWITH
  56841. WITH THIS.ThermLabel
  56842.    .Top = (.Parent.Height - .Height) /2
  56843.    .ForeColor = GetSysColor( COLOR_MENUTEXT )
  56844. ENDWITH
  56845. WITH THIS.ThermShape
  56846.    .Top = m.liThermTop +1    
  56847.    .Left = m.liThermLeft+1
  56848.    .Height = m.liThermHeight -2
  56849.    .Width = 0
  56850.    .BackColor = .Parent.BackColor
  56851.    .FillColor = GetSysColor(COLOR_HIGHLIGHT)
  56852. ENDWITH
  56853. ENDPROC
  56854. PROCEDURE setupreport
  56855. LPARAMETERS m.toListener
  56856. LOCAL m.llFRXAvailable, m.lcAlias
  56857. THIS.isRunning = .T.
  56858. WITH m.toListener
  56859.    SET DATASESSION TO (.CurrentDataSession)
  56860.    THIS.DrivingAlias = UPPER(ALIAS())
  56861.    IF .FRXDataSession > 0
  56862.       SET DATASESSION TO (.FRXDataSession)   
  56863.    ENDIF
  56864.    m.llFRXAvailable = THIS.getReportScopeDriver(m.toListener) 
  56865.    IF m.llFRXAvailable
  56866.       THIS.setThermformCaption(m.toListener.CommandClauses.File, m.toListener.PrintJobName)
  56867.       IF TYPE("m.toListener.CommandClauses.Summary") # "L"
  56868.          ADDPROPERTY(.CommandClauses,"Summary",.F.)
  56869.       ENDIF   
  56870.       IF TYPE("m.toListener.CommandClauses.RecordTotal") # "N"
  56871.          ADDPROPERTY(.CommandClauses,"RecordTotal",0)
  56872.       ENDIF   
  56873.       IF TYPE("m.toListener.CommandClauses.NoDialog") # "L"
  56874.         ADDPROPERTY(.CommandClauses,"NoDialog",.F.)
  56875.       ENDIF      
  56876.       SET DATASESSION TO (.FRXDataSession)   
  56877.       THIS.FRXBandRecno = 0
  56878.       SELECT FRX
  56879.       IF .CommandClauses.Summary
  56880.          * don't use groups unless
  56881.          * we're forced to by Summary.
  56882.          * Group usage will not work if
  56883.          * there's a group on .T. or some
  56884.          * other nonsensical expression that
  56885.          * doesn't change.
  56886.          LOCATE FOR ObjType = FRX_OBJTYP_BAND AND ;
  56887.              Objcode = FRX_OBJCOD_GROUPHEADER AND ;
  56888.              Platform = FRX_PLATFORM_WINDOWS AND ;
  56889.              NOT DELETED()
  56890.          DO WHILE NOT EOF()
  56891.             * find the innermost group
  56892.             THIS.FRXBandRecno = RECNO()
  56893.             CONTINUE
  56894.          ENDDO        
  56895.       
  56896.          IF THIS.frxBandRecno = 0
  56897.             * no groups in a Summary report
  56898.             * doesn't make a lot of sense, but
  56899.             * can happen.
  56900.              LOCATE FOR ObjType = FRX_OBJTYP_BAND AND ;
  56901.                 Platform = FRX_PLATFORM_WINDOWS AND ;
  56902.                 Objcode = FRX_OBJCOD_PAGEHEADER AND ;
  56903.                 NOT DELETED()
  56904.              IF NOT EOF()
  56905.                 THIS.FRXBandRecno = RECNO()
  56906.              ENDIF     
  56907.          ENDIF
  56908.       ENDIF
  56909.       IF THIS.FRXBandRecno = 0
  56910.          * not a Summary report.
  56911.          * look for the appropriate detail
  56912.          * using the report driver
  56913.          LOCATE FOR ObjType = FRX_OBJTYP_BAND AND ;
  56914.                     Objcode = FRX_OBJCOD_DETAIL AND ;
  56915.                     Platform = FRX_PLATFORM_WINDOWS AND ;
  56916.                     TYPE(Expr) = "C" AND ; 
  56917.                     NOT (EMPTY(Expr) OR DELETED())
  56918.          DO WHILE NOT EOF()
  56919.              m.lcAlias = ALLTRIM(Expr)
  56920.              SET DATASESSION TO (.CurrentDataSession)             
  56921.              m.lcAlias = UPPER(EVALUATE(m.lcAlias))
  56922.              SET DATASESSION TO (.FRXDataSession)                          
  56923.              IF m.lcAlias == UPPER(THIS.DrivingAlias)             
  56924.                 THIS.FRXBandRecno = RECNO()
  56925.              ENDIF   
  56926.              CONTINUE && try not to use the first detail band
  56927.          ENDDO
  56928.       ENDIF   
  56929.       IF THIS.frxBandRecno = 0
  56930.          * couldn't match up a band with
  56931.          * the known driver
  56932.          LOCATE FOR ObjType = FRX_OBJTYP_BAND AND ;
  56933.               Objcode = FRX_OBJCOD_DETAIL AND ;
  56934.               Platform = FRX_PLATFORM_WINDOWS AND ;
  56935.               EMPTY(Expr) AND NOT DELETED()
  56936.          IF NOT EOF()
  56937.             THIS.FRXBandRecno = RECNO()      
  56938.          ELSE
  56939.             IF THIS.FRXBandRecno = 0 
  56940.                LOCATE FOR ObjType = FRX_OBJTYP_BAND AND ;
  56941.                     Platform = FRX_PLATFORM_WINDOWS AND ;
  56942.                     Objcode = FRX_OBJCOD_DETAIL AND ;
  56943.                     NOT DELETED()
  56944.                IF NOT EOF()
  56945.                   THIS.FRXBandRecno = RECNO()
  56946.                ENDIF  
  56947.             ENDIF               
  56948.          ENDIF        
  56949.       ENDIF   
  56950.    ENDIF
  56951.    THIS.DrivingAliasCurrentRecno = 0
  56952.    SET DATASESSION TO (.ListenerDataSession)   
  56953. ENDWITH   
  56954. ENDPROC
  56955. PROCEDURE thermprecision_assign
  56956. LPARAMETERS m.vNewVal
  56957. IF VARTYPE(m.vNewVal) = "N" 
  56958.    THIS.thermPrecision  = ABS(INT(m.vNewVal))
  56959. ENDIF 
  56960. ENDPROC
  56961. PROCEDURE persistbetweenruns_assign
  56962. LPARAMETERS vNewVal
  56963. IF VARTYPE(m.vNewVal) = "L"
  56964.    THIS.persistBetweenRuns = m.vNewVal
  56965. ENDIF   
  56966. ENDPROC
  56967. PROCEDURE Init
  56968. * THIS.Name = "X"+SYS(2015)
  56969. * WITH THIS
  56970. *     .InitStatusText = OUTPUTCLASS_INITSTATUS_LOC
  56971. *     .PrepassStatusText = OUTPUTCLASS_PREPSTATUS_LOC
  56972. *     .RunStatusText =  OUTPUTCLASS_RUNSTATUS_LOC
  56973. *     .SecondsText = OUTPUTCLASS_TIME_SECONDS_LOC
  56974. *     .thermCaption = OUTPUTCLASS_THERMCAPTION_LOC     
  56975. *     .resetUserFeedback()
  56976. * ENDWITH
  56977. This.AddProperty("CancelInstrText", "")
  56978. This.AddProperty("CancelQueryText", "")
  56979. This.AddProperty("ReportIncompleteText", "")
  56980. This.AddProperty("AttentionText", "")
  56981. THIS.Name = "X"+SYS(2015)
  56982. WITH THIS
  56983. *!*    #DEFINE OUTPUTCLASS_INITSTATUS_LOC           "Initializing... "
  56984. *!*    #DEFINE OUTPUTCLASS_PREPSTATUS_LOC           "Running calculation prepass... "
  56985. *!*    #DEFINE OUTPUTCLASS_RUNSTATUS_LOC            "Creating output... "
  56986. *!*    #DEFINE OUTPUTCLASS_TIME_SECONDS_LOC         "sec(s)"
  56987. *!*    #DEFINE OUTPUTCLASS_CANCEL_INSTRUCTIONS_LOC  "Press Esc to cancel... "
  56988. *!*    #DEFINE OUTPUTCLASS_REPORT_CANCELQUERY_LOC   "Stop report execution? (If you press 'No', report execution will continue.)"
  56989. *!*    #DEFINE OUTPUTCLASS_REPORT_INCOMPLETE_LOC    "Report execution was cancelled." + CHR(13) + ;
  56990.                                              "Your results are not complete."
  56991. #DEFINE OUTPUTCLASS_THERMCAPTION_LOC2        [m.cMessage+ " "+ ] + ;
  56992.             [TRANSFORM(THIS.PercentDone,"999"+ ] + ;
  56993.             [IIF(THIS.ThermPrecision=0,"","."+REPL("9",THIS.ThermPrecision))) + "%" ] + ;
  56994.             [+ IIF(NOT THIS.IncludeSeconds, "" , "   "+] + ;
  56995.             [TRANSFORM(IIF(THIS.IsRunning,DATETIME(), THIS.ReportStopRunDateTime)-] + ;
  56996.             [THIS.ReportStartRunDateTime)+" " + THIS.SecondsText)]
  56997.     IF VARTYPE(_goFP) = "O"
  56998.         .InitStatusText       = _goFP.GetLoc("INITSTATUS") + SPACE(1)
  56999.         .PrepassStatusText    = _goFP.GetLoc("PREPSTATUS") + SPACE(1) 
  57000.         .RunStatusText        = _goFP.GetLoc("RUNSTATUS")  + SPACE(1) 
  57001.         .SecondsText          = _goFP.GetLoc("SECONDS")    + SPACE(1)
  57002.         .CancelInstrText      = _goFP.GetLoc("CANCELINST") + SPACE(1)
  57003.         .CancelQueryText      = _goFP.GetLoc("CANCELQUER")
  57004.         .ReportIncompleteText = _goFP.GetLoc("REPINCOMPL")
  57005.         .AttentionText        = _goFP.GetLoc("ATTENTION")
  57006.     ELSE 
  57007.         .InitStatusText       = OUTPUTCLASS_INITSTATUS_LOC
  57008.         .PrepassStatusText    = OUTPUTCLASS_PREPSTATUS_LOC
  57009.         .RunStatusText        = OUTPUTCLASS_RUNSTATUS_LOC
  57010.         .SecondsText          = OUTPUTCLASS_TIME_SECONDS_LOC
  57011.         .CancelInstrText      = OUTPUTCLASS_CANCEL_INSTRUCTIONS_LOC
  57012.         .CancelQueryText      = OUTPUTCLASS_REPORT_CANCELQUERY_LOC
  57013.         .ReportIncompleteText = OUTPUTCLASS_REPORT_INCOMPLETE_LOC
  57014.         .AttentionText        = "Attention"
  57015.      ENDIF 
  57016.     .thermCaption      = OUTPUTCLASS_THERMCAPTION_LOC2    && Keep original 
  57017.     .resetUserFeedback()
  57018. ENDWITH
  57019. ENDPROC
  57020. PROCEDURE Load
  57021.             
  57022. ENDPROC
  57023. zpPROCEDURE applyfx
  57024. LPARAMETERS m.toListener, m.tcMethodToken,;
  57025.             m.tP1, m.tP2, m.tP3, m.tP4, m.tP5, m.tP6, ;
  57026.             m.tP7, m.tP8, m.tP9, m.tP10, m.tP11, m.tP12
  57027. This.Movable = .T. 
  57028. LOCAL m.liSession            
  57029. IF VARTYPE(m.toListener) = "O" && AND ;
  57030.    (NOT m.toListener.IsSuccessor)
  57031.    DO CASE
  57032.    CASE m.tcMethodToken == "DOSTATUS"
  57033.       THIS.DoStatus(m.toListener, m.tP1)
  57034.    CASE m.tcMethodToken == "UPDATESTATUS"
  57035.       THIS.UpdateStatus(m.toListener)    
  57036.    CASE m.tcMethodToken == "CLEARSTATUS"
  57037.       THIS.ClearStatus(m.toListener)
  57038.    CASE m.tcMethodToken == "AFTERBAND"
  57039.        THIS.synchStatus(m.toListener,m.tP1,m.tP2)
  57040.    CASE m.tcMethodToken == "AFTERREPORT"
  57041.       IF SYS(2024) # "Y" 
  57042.          IF THIS.isRunning AND TYPE("m.toListener.CommandClauses.RecordTotal") = "N"
  57043.             THIS.CurrentRecord = m.toListener.CommandClauses.RecordTotal
  57044.          ENDIF   
  57045.          THIS.UpdateStatus(m.toListener) 
  57046.       ENDIF
  57047.       THIS.designatedDriver = ""
  57048.       THIS.drivingAlias = ""
  57049.       THIS.successorSys2024 = "N"
  57050.       THIS.Visible = .F.
  57051.       THIS.ReportStopRunDateTime = DATETIME()
  57052.       THIS.popUserFeedbackGlobalSets()
  57053.       THIS.ClearStatus(m.toListener)       
  57054.    CASE m.tcMethodToken == "BEFOREBAND"
  57055.       IF THIS.successorSys2024 = "Y" AND ;
  57056.          m.toListener.CurrentPass = LISTENER_FULLPASS
  57057.          * user cancelled during the prepass,
  57058.          * we need to re-cancel.
  57059.          m.liSession = SET("DATASESSION")
  57060.          SET DATASESSION TO (m.toListener.CurrentDataSession)
  57061.          IF USED(THIS.designatedDriver)
  57062.             GO BOTTOM IN (THIS.designatedDriver)
  57063.          ENDIF   
  57064.          SET DATASESSION TO (m.liSession)
  57065.       ENDIF   
  57066.       THIS.synchStatus(m.toListener,m.tP1,m.tP2)
  57067.   CASE m.tcMethodToken == "BEFOREREPORT"
  57068.       THIS.setupReport(m.toListener)
  57069.    CASE m.tcMethodToken == "CANCELREPORT"
  57070.       IF THIS.isRunning AND ;
  57071.          (m.toListener.QuietMode OR ;
  57072.          (m.toListener.pageLimit > 0 AND m.toListener.PageNo > m.toListener.pageLimit) OR ;
  57073.           (NOT m.toListener.AllowModalMessages) OR ;
  57074.           m.toListener.DoMessage(This.CancelQueryText,;  && OUTPUTCLASS_REPORT_CANCELQUERY_LOC
  57075.                                  MB_ICONQUESTION+MB_YESNO, This.AttentionText) =  IDYES )
  57076.           m.toListener.cancelRequested = .T.
  57077.           IF m.toListener.isSuccessor AND NOT EMPTY(THIS.designatedDriver)
  57078.              * NB: FX should ordinarily not be used in a successor,
  57079.              * but this won't hurt and will take care of the exception
  57080.              THIS.successorSys2024 = "Y"
  57081.              m.liSession = SET("DATASESSION")
  57082.              SET DATASESSION TO (m.toListener.CurrentDataSession)
  57083.              IF USED(THIS.designatedDriver)
  57084.                 GO BOTTOM IN (THIS.designatedDriver)
  57085.              ENDIF   
  57086.              SET DATASESSION TO (m.liSession)
  57087.           ENDIF
  57088.           IF SYS(2024) = "Y"  OR m.toListener.IsSuccessor
  57089.              THIS.Visible = .F.
  57090.              IF (m.toListener.pageLimit = -1 OR m.toListener.PageNo <= m.toListener.pageLimit)
  57091.                 m.toListener.DoMessage(;
  57092.                         This.ReportIncompleteText, ; && OUTPUTCLASS_REPORT_INCOMPLETE_LOC
  57093.                         MB_ICONEXCLAMATION, This.AttentionText)
  57094.              ENDIF
  57095.           ENDIF
  57096.           RETURN .F.
  57097.        ELSE
  57098.           RETURN .T. && did not handle, use default behavior          
  57099.        ENDIF          
  57100.    CASE m.tcMethodToken == "LOADREPORT"
  57101.       THIS.ResetUserFeedback(.T.)
  57102.       m.toListener.AddProperty("reportStartRunDatetime",THIS.reportStartRunDatetime)
  57103.       IF NOT (m.toListener.QuietMode OR ;
  57104.            (TYPE("m.toListener.CommandClauses.NoDialog") = "L" AND ;
  57105.            m.toListener.CommandClauses.NoDialog) )
  57106.            THIS.DoStatus(m.toListener,THIS.initStatusText) 
  57107.           * NB: a user can call LoadReport manually,
  57108.           * hence the need for a TYPE() check here.
  57109.       ENDIF   
  57110.       THIS.pushUserFeedbackGlobalSets(m.toListener) 
  57111.    CASE m.tcMethodToken == "UNLOADREPORT"
  57112.       THIS.ReportStopRunDateTime = DATETIME()
  57113.       m.toListener.AddProperty("reportStopRunDatetime",THIS.reportStopRunDatetime)      
  57114.       THIS.IsRunning = .F.
  57115.       THIS.ClearStatus()       
  57116.       IF NOT THIS.persistBetweenRuns 
  57117.          SET DATASESSION TO (m.toListener.ListenerDataSession)      
  57118.          THIS.Release()
  57119.       ENDIF            
  57120.    ENDCASE
  57121.    SET DATASESSION TO (m.toListener.ListenerDataSession)
  57122. ENDIF
  57123. ENDPROC
  57124. PROCEDURE includeseconds_assign
  57125. LPARAMETERS m.vNewVal
  57126. IF VARTYPE(m.vNewVal) = "L"
  57127.    THIS.includeSeconds = m.vNewVal
  57128. ENDIF   
  57129. ENDPROC
  57130. PROCEDURE initstatustext_assign
  57131. LPARAMETERS m.vNewVal
  57132. IF VARTYPE(m.vNewVal) = "C"
  57133.    THIS.initStatusText = m.vNewVal
  57134. ENDIF   
  57135. ENDPROC
  57136. PROCEDURE prepassstatustext_assign
  57137. LPARAMETERS m.vNewVal
  57138. IF VARTYPE(m.vNewVal) = "C"
  57139.    THIS.prepassStatusText = m.vNewVal
  57140. ENDIF   
  57141. ENDPROC
  57142. PROCEDURE runstatustext_assign
  57143. LPARAMETERS vNewVal
  57144. *To do: Modify this routine for the Assign method
  57145. THIS.runStatusText = m.vNewVal
  57146. ENDPROC
  57147. PROCEDURE secondstext_assign
  57148. LPARAMETERS vNewVal
  57149. *To do: Modify this routine for the Assign method
  57150. THIS.secondsText = m.vNewVal
  57151. ENDPROC
  57152. PROCEDURE thermcaption_assign
  57153. LPARAMETERS m.vNewVal
  57154. IF VARTYPE(m.vNewVal) = "C"
  57155.    LOCAL m.lcType, m.cMessage
  57156.    m.cMessage = ""
  57157.    TRY 
  57158.     m.lcType = VARTYPE(EVALUATE(m.vNewVal))
  57159.       IF m.lcType = "C"
  57160.         THIS.thermCaption = m.vNewVal
  57161.     ENDIF
  57162.    CATCH 
  57163.    ENDTRY     
  57164. ENDIF   
  57165. ENDPROC
  57166. PROCEDURE thermformcaption_assign
  57167. LPARAMETERS m.vNewVal
  57168. IF VARTYPE(m.vNewVal) = "C"
  57169.    THIS.thermFormCaption = m.vNewVal
  57170.    THIS.setThermFormCaption()
  57171. ENDIF   
  57172. ENDPROC
  57173. PROCEDURE thermformheight_assign
  57174. LPARAMETERS m.vNewVal
  57175. IF  VARTYPE(m.vNewVal) = "N" AND ;
  57176.    BETWEEN(m.vNewVal,30,SYSMETRIC(SYSMETRIC_SCREENHEIGHT )-30)  AND ;
  57177.    INT(m.vNewVal) # THIS.thermFormHeight
  57178.    THIS.thermFormHeight = INT(m.vNewVal)
  57179.    IF THIS.thermMargin > THIS.thermFormHeight/4
  57180.       THIS.thermMargin = THIS.thermFormHeight/4
  57181.    ENDIF   
  57182.    THIS.synchUserInterface() 
  57183. ENDIF   
  57184. ENDPROC
  57185. PROCEDURE thermformwidth_assign
  57186. LPARAMETERS m.vNewVal
  57187. IF VARTYPE(m.vNewVal) = "N" AND ;
  57188.    BETWEEN(m.vNewVal,100,SYSMETRIC( SYSMETRIC_SCREENWIDTH  )-100) AND ;
  57189.    INT(m.vNewVal) # THIS.ThermFormWidth 
  57190.    THIS.thermFormWidth = INT(m.vNewVal)
  57191.    IF THIS.thermMargin > THIS.thermFormWidth/4
  57192.       THIS.thermMargin = THIS.thermFormWidth/4
  57193.    ENDIF   
  57194.    THIS.synchUserInterface() 
  57195. ENDIF   
  57196. ENDPROC
  57197. PROCEDURE thermmargin_assign
  57198. LPARAMETERS m.vNewVal
  57199. IF VARTYPE(m.vNewVal) = "N" AND ;
  57200.    BETWEEN(m.vNewVal,1,MIN(THIS.ThermFormHeight/4,THIS.ThermFormWidth/4)) AND ;
  57201.    INT(m.vNewVal) # THIS.thermMargin
  57202.    THIS.thermMargin = INT(m.vNewVal)
  57203.    THIS.synchUserInterface() 
  57204. ENDIF   
  57205. ENDPROC
  57206. PROCEDURE getparentwindowref
  57207. LOCAL m.loForm, m.loTopForm, m.lcInWindow
  57208. * first top form in the list
  57209. * will be the current top form.
  57210. ASSERT TYPE("_SCREEN.ActiveForm") # "O"  OR ;
  57211.        INLIST(_SCREEN.ActiveForm.ShowWindow, 0,1,2)
  57212. m.loTopForm = NULL
  57213. IF TYPE("THIS.CommandClauses.InWindow") = "C"
  57214.    m.lcInWindow = UPPER(ALLTRIM(THIS.CommandClauses.InWindow))
  57215. ENDIF   
  57216. IF EMPTY(lcInWindow) AND TYPE("THIS.CommandClauses.Window") = "C"
  57217.    m.lcInWindow = UPPER(ALLTRIM(THIS.CommandClauses.Window))
  57218. ENDIF   
  57219. IF NOT EMPTY(m.lcInWindow) 
  57220.      FOR EACH m.loForm IN _SCREEN.Forms  FOXOBJECT
  57221.         IF m.loForm.ShowWindow = 2  AND ;
  57222.            UPPER(m.loForm.Name) == m.lcInWindow
  57223.            m.loTopForm = m.loForm
  57224.            EXIT
  57225.         ENDIF
  57226.      ENDFOR
  57227.      
  57228. ENDIF
  57229. DO CASE
  57230. CASE VARTYPE(m.loTopForm) = "O"
  57231.     * already found
  57232. CASE _SCREEN.FormCount = 0 OR ;
  57233.      (TYPE("_SCREEN.ActiveForm") = "O" AND ;
  57234.      _SCREEN.ActiveForm.ShowWindow = 0 )     && ShowWindow In Screen
  57235.              
  57236.      m.loTopForm = _SCREEN
  57237. CASE (TYPE("_SCREEN.ActiveForm") = "O" AND ;
  57238.       _SCREEN.ActiveForm.ShowWindow = 2 )    && ShowWindow As Top Form
  57239.      m.loTopForm = _SCREEN.ActiveForm
  57240.              
  57241. OTHERWISE 
  57242.                                                
  57243.      FOR EACH m.loForm IN _SCREEN.Forms  FOXOBJECT
  57244.         IF m.loForm.ShowWindow = 2 
  57245.            m.loTopForm = m.loForm
  57246.            EXIT
  57247.         ENDIF
  57248.      ENDFOR
  57249.              
  57250.      IF VARTYPE(m.loTopForm) # "O"
  57251.         m.loTopForm = _SCREEN
  57252.      ENDIF
  57253.                   
  57254. ENDCASE
  57255. IF VARTYPE(m.loTopForm) # "O" OR ;
  57256.    EMPTY(m.loTopForm.Name)
  57257.    m.loTopForm = NULL
  57258. ENDIF
  57259. RETURN m.loTopForm
  57260. ENDPROC
  57261. PROCEDURE getreportscopedriver
  57262. LPARAMETERS m.toListener
  57263. LOCAL m.liSelect, m.lcAlias, ;
  57264.       m.liSkips,  laSkips[1]
  57265. IF m.toListener.FRXDataSession > 0
  57266.    SET DATASESSION TO (m.toListener.FRXDataSession)
  57267.    RETURN .F.
  57268. ENDIF   
  57269. THIS.designatedDriver = THIS.drivingAlias
  57270. * used later if we have to cancel report as
  57271. * a Successor
  57272. IF USED("frx")
  57273.    m.liSelect = SELECT(0)
  57274.    m.lcAlias = ""
  57275.    SELECT FRX
  57276.    * first look for any target alias that
  57277.    * is the same as the driver
  57278.    SCAN ALL FOR ObjType = FRX_OBJTYP_BAND AND ;
  57279.            Objcode = FRX_OBJCOD_DETAIL AND ;
  57280.            TYPE(Expr) = "C" AND ;
  57281.            NOT (EMPTY(Expr)  OR DELETED())
  57282.        m.lcAlias = ALLTRIM(Expr)
  57283.        SET DATASESSION TO (m.toListener.CurrentDataSession)   
  57284.        m.lcAlias = UPPER(EVALUATE(m.lcAlias)) 
  57285.        SET DATASESSION TO (m.toListener.FRXDataSession)              
  57286.        IF m.lcAlias == UPPER(THIS.drivingAlias)
  57287.           EXIT
  57288.        ENDIF
  57289.    ENDSCAN
  57290.    IF m.lcAlias == UPPER(THIS.drivingAlias)
  57291.       SELECT (m.liSelect)
  57292.       * if the driver is also a target alias,
  57293.       * don't touch.
  57294.       * otherwise:
  57295.    ELSE 
  57296.       LOCATE FOR ObjType = FRX_OBJTYP_BAND AND ;
  57297.               Objcode = FRX_OBJCOD_DETAIL AND ;
  57298.               Platform = FRX_PLATFORM_WINDOWS AND ;
  57299.               NOT (EMPTY(Expr) OR DELETED())
  57300.       IF FOUND()
  57301.          * use the first detail band, on the theory
  57302.          * that people are going to put pre-processing 
  57303.          * calculations before other bands, 
  57304.          * so an early band has the best chance to be
  57305.          * the right driver.
  57306.          m.lcAlias = ALLTRIM(Expr)
  57307.          SET DATASESSION TO (m.toListener.CurrentDataSession)
  57308.          THIS.drivingAlias = UPPER(EVALUATE(m.lcAlias))
  57309.          SET DATASESSION TO (m.toListener.FrxDataSession)
  57310.          SELECT (m.liSelect)
  57311.       ELSE   
  57312.          * adjust the driver based on any
  57313.          * one to many relationships we can find.
  57314.          SELECT (m.liSelect)
  57315.          SET DATASESSION TO (m.toListener.CurrentDataSession)
  57316.          m.lcAlias = THIS.drivingAlias
  57317.          m.liSelect = SELECT(0)
  57318.          DO WHILE NOT EMPTY(m.lcAlias)
  57319.             SELECT (m.lcAlias)
  57320.             m.liSkips = ALINES(laSkips,SET("SKIP"),",")
  57321.             IF m.liSkips = 0 OR EMPTY(laSkips[1])
  57322.                THIS.drivingAlias = m.lcAlias
  57323.                m.lcAlias = ""
  57324.             ELSE
  57325.                m.lcAlias = laSkips[1]
  57326.                * it doesn't really matter how many lines there
  57327.                * are in the array; this is not going to be perfect
  57328.                * but we can't predict which child 
  57329.                * has the most records.
  57330.             ENDIF
  57331.          ENDDO
  57332.          SELECT (m.liSelect)
  57333.       ENDIF   
  57334.    ENDIF  
  57335.    RETURN .F.    
  57336. ENDIF
  57337. ENDPROC
  57338. PROCEDURE resetuserfeedback
  57339. LPARAMETERS m.tlResetTimes
  57340. THIS.CurrentRecord = 0
  57341. THIS.PercentDone = 0
  57342. IF m.tlResetTimes
  57343.    THIS.ReportStartRunDateTime= DATETIME()
  57344.    THIS.ReportStopRunDateTime= DTOT({})
  57345.    THIS.thermFormCaption = ""
  57346.    THIS.synchUserInterface()
  57347. ENDIF
  57348. ENDPROC
  57349. PROCEDURE setthermformcaption
  57350. LPARAMETERS tcCommandClausesFile, tcPrintJobName
  57351. IF EMPTY(THIS.ThermFormCaption)
  57352.    IF VARTYPE(tcCommandClausesFile) = "C"
  57353.       LOCAL cName
  57354.         DO CASE
  57355.         CASE VARTYPE(_Screen.oFoxyPreviewer) = "O" AND NOT EMPTY(NVL(_Screen.oFoxyPreviewer.cTitle, ""))
  57356.             m.cName = _Screen.oFoxyPreviewer.cTitle
  57357.         CASE EMPTY(tcPrintJobName) OR VARTYPE(tcPrintJobName) # "C"
  57358.             m.cName = PROPER(JUSTFNAME(tcCommandClausesFile))
  57359.         OTHERWISE
  57360.             m.cName =  tcPrintJobName
  57361.         ENDCASE
  57362.       THIS.thermFormCaption = ;
  57363.          m.cName + ": " + This.CancelInstrText && OUTPUTCLASS_CANCEL_INSTRUCTIONS_LOC
  57364.    ELSE
  57365.       THIS.thermFormCaption = ""
  57366.    ENDIF
  57367. ENDIF
  57368. This.Caption = THIS.thermFormCaption
  57369. ENDPROC
  57370. PROCEDURE synchstatus
  57371. LPARAMETERS m.toListener, m.nBandObjCode, m.nFRXRecNo
  57372. IF THIS.isRunning AND ;
  57373.    THIS.frxBandRecno = m.nFRXRecNo
  57374.    WITH m.toListener
  57375.       TRY
  57376.          SET DATASESSION TO (.CurrentDataSession)
  57377.          IF THIS.drivingAliasCurrentRecno  # RECNO(THIS.drivingAlias)
  57378.             THIS.currentRecord = THIS.CurrentRecord + 1
  57379.             THIS.drivingAliasCurrentRecno = RECNO(THIS.drivingAlias)
  57380.          ENDIF   
  57381.          IF THIS.currentRecord >= .CommandClauses.RecordTotal
  57382.             IF .CurrentPass = 0 AND .TwoPassProcess
  57383.                THIS.resetUserFeedback() 
  57384.             ELSE
  57385.                THIS.currentRecord = .CommandClauses.RecordTotal
  57386.             ENDIF
  57387.          ENDIF
  57388.          THIS.updateStatus(m.toListener)
  57389.        CATCH TO err
  57390.           #IF OUTPUTCLASS_DEBUGGING 
  57391.               SUSPEND
  57392.           #ENDIF
  57393.        ENDTRY         
  57394.        SET DATASESSION TO (.ListenerDataSession)       
  57395.    ENDWITH      
  57396. ENDIF  
  57397. ENDPROC
  57398. PROCEDURE dostatus
  57399. LPARAMETERS m.toListener, m.cMessage
  57400. LOCAL m.loParentForm, m.lcCaption, m.lcParentFormName
  57401. IF (VARTYPE(m.toListener) # "O") OR (NOT (m.toListener.QuietMode OR ;
  57402.         (THIS.isRunning AND m.toListener.CommandClauses.NoDialog)))
  57403.     IF (This.nLastPercent > 0 AND ;
  57404.                 This.percentDone - This.nLastPercent < This.nDelay  AND ;
  57405.                 This.percentDone <> 100)
  57406.         RETURN
  57407.     ELSE 
  57408.         this.nlastpercent = CEILING(This.percentDone)
  57409.     ENDIF 
  57410.     IF EMPTY(m.cMessage) OR ISNULL(m.cMessage)
  57411.         m.cMessage = ""
  57412.     ENDIF
  57413.     m.lcCaption = EVALUATE(THIS.ThermCaption)
  57414.     WITH This
  57415.         IF THIS.isRunning
  57416.             THIS.Closable = .F.
  57417.             * THIS.Movable = .F.
  57418.         ENDIF
  57419.         .Therm.Value = CEILING(This.percentDone)
  57420.         .ThermLabel.Caption = lcCaption
  57421.         * .Paint()
  57422.         .Draw()  && To ensure the label text will be updated
  57423.         IF NOT .Visible
  57424.             m.loParentForm = THIS.GetParentWindowRef()
  57425.             DO CASE
  57426.             CASE VARTYPE(m.loParentForm) # "O" AND (NOT _SCREEN.Visible)
  57427.                 m.lcParentFormName = "MACDESKTOP"
  57428.             CASE VARTYPE(m.loParentForm) # "O"
  57429.                 m.lcParentFormName = "SCREEN"
  57430.             CASE (NOT m.loParentForm.Visible) AND ;
  57431.                 (m.loParentForm.DeskTop OR NOT EMPTY(m.loParentForm.MacDesktop) OR ;
  57432.                     m.loParentForm.ShowWindow = 2 OR (NOT _SCREEN.Visible))
  57433.                 * in many cases,
  57434.                 * they've probably made a programming error,
  57435.                 * the parent should be visible according to
  57436.                 * the requirements of REPORT FORM ... IN WINDOW
  57437.                 * if it's a WINDOW clause they
  57438.                 * have no need to show it, might not be an error
  57439.                 * Either way, they should see the therm
  57440.                 * to know that the report is progressing
  57441.                 m.lcParentFormName = "MACDESKTOP"
  57442.             CASE (NOT m.loParentForm.Visible)
  57443.                 * same comment as above
  57444.                 m.lcParentFormName = "SCREEN"
  57445.             OTHERWISE
  57446.                 m.lcParentFormName = m.loParentForm.Name
  57447.             ENDCASE
  57448.             SHOW WINDOW (.Name) IN WINDOW (m.lcParentFormName)
  57449.             .AlwaysOnTop = .T.
  57450.             .AutoCenter = .T.
  57451. *            .Visible = .T.
  57452.         ENDIF
  57453.     ENDWITH
  57454.     m.loParentForm = NULL
  57455. ENDIF
  57456. ENDPROC
  57457. PROCEDURE clearstatus
  57458. LPARAMETERS m.toListener
  57459. IF THIS.Visible 
  57460.    THIS.Visible = .F.
  57461. ENDIF
  57462. ENDPROC
  57463. PROCEDURE updatestatus
  57464. LPARAMETERS m.toListener
  57465. IF VARTYPE(m.toListener) = "O" AND THIS.isRunning
  57466.    LOCAL m.liRecTotal, m.lnNewPercent, m.llShow
  57467.    m.liRecTotal = m.toListener.CommandClauses.RecordTotal 
  57468.    IF m.liRecTotal > 0 
  57469.       m.lnNewPercent = ROUND(THIS.CurrentRecord/m.liRecTotal,(THIS.ThermPrecision + 2) ) * 100
  57470.       IF (THIS.PercentDone # m.lnNewPercent)
  57471.          THIS.PercentDone = m.lnNewPercent
  57472.          m.llShow = .T.
  57473.          #IF OUTPUTCLASS_DEBUGGING 
  57474.              ? THIS.PercentDone, THIS.CurrentRecord, m.liRecTotal, m.toListener.PageTotal
  57475.              ? REPL(OUTPUTCLASS_STATUSCHAR_PCT_DONE,INT(THIS.PercentDone/100* OUTPUTCLASS_ONE_HUNDRED_PCT_MARK))+ ;
  57476.                REPL(OUTPUTCLASS_STATUSCHAR_PCT_NOT_DONE,MAX(FLOOR(OUTPUTCLASS_ONE_HUNDRED_PCT_MARK - ;
  57477.                                                             (OUTPUTCLASS_ONE_HUNDRED_PCT_MARK *THIS.PercentDone/100)),0) ) 
  57478.          #ENDIF                
  57479.       ENDIF
  57480.    ELSE
  57481.       m.llShow = .T.         
  57482.    ENDIF   
  57483.    IF m.llShow
  57484.       THIS.DoStatus(m.toListener, ;
  57485.                     IIF(m.toListener.CurrentPass = LISTENER_PREPASS  AND m.toListener.TwoPassProcess,;
  57486.                      THIS.PrepassStatusText, ;
  57487.                      THIS.RunStatusText) )
  57488.    ENDIF
  57489. ENDIF
  57490. ENDPROC
  57491. PROCEDURE pushuserfeedbackglobalsets
  57492. LPARAMETERS m.toListener
  57493. IF (NOT INLIST(_VFP.StartMode,2,3,5))
  57494.    PUSH KEY CLEAR
  57495.    LOCAL m.lcRef
  57496.    SET MESSAGE TO ""
  57497.    THIS.SetNotifyCursor = (SET("Notify",2) = "ON")
  57498.    IF THIS.SetNotifyCursor
  57499.       SET NOTIFY CURSOR OFF
  57500.    ENDIF   
  57501.    THIS.OnEscapeCommand = ON("ESCAPE")   
  57502.    m.lcRef = SYS(2015)   
  57503.    PUBLIC &lcRef.   
  57504.    STORE m.toListener TO (m.lcRef)
  57505.    ON ESCAPE &lcRef..CancelReport()      
  57506.    THIS.EscapeReference = m.lcRef   
  57507.    THIS.SetEscape = (SET("ESCAPE")="OFF") 
  57508.    IF THIS.SetEscape
  57509.       SET ESCAPE ON
  57510.    ENDIF   
  57511. ENDIF   
  57512. ENDPROC
  57513. PROCEDURE popuserfeedbackglobalsets
  57514. IF (NOT INLIST(_VFP.StartMode,2,3,5))
  57515.    LOCAL m.lcRef
  57516.    m.lcRef = THIS.EscapeReference
  57517.    IF (NOT EMPTY(m.lcRef)) AND ;
  57518.        TYPE(m.lcRef) = "O"
  57519.       * push occurred earlier
  57520.       STORE NULL TO (m.lcRef)
  57521.       RELEASE &lcRef.
  57522.       THIS.escapeReference = ""
  57523.       m.lcRef = THIS.OnEscapeCommand
  57524.       ON ESCAPE &lcRef
  57525.       POP KEY
  57526.       IF THIS.SetNotifyCursor
  57527.          SET NOTIFY CURSOR ON
  57528.       ENDIF   
  57529.       IF THIS.SetEscape 
  57530.          SET ESCAPE OFF
  57531.       ENDIF   
  57532.    ENDIF   
  57533. ENDIF   
  57534. ENDPROC
  57535. PROCEDURE setupreport
  57536. LPARAMETERS m.toListener
  57537. LOCAL m.llFRXAvailable, m.lcAlias
  57538. THIS.isRunning = .T.
  57539. WITH m.toListener
  57540.    SET DATASESSION TO (.CurrentDataSession)
  57541.    THIS.DrivingAlias = UPPER(ALIAS())
  57542.    IF .FRXDataSession > 0
  57543.       SET DATASESSION TO (.FRXDataSession)   
  57544.    ENDIF
  57545.    m.llFRXAvailable = THIS.getReportScopeDriver(m.toListener) 
  57546.    IF m.llFRXAvailable
  57547.       THIS.setThermformCaption(m.toListener.CommandClauses.File, m.toListener.PrintJobName)
  57548.       IF TYPE("m.toListener.CommandClauses.Summary") # "L"
  57549.          ADDPROPERTY(.CommandClauses,"Summary",.F.)
  57550.       ENDIF   
  57551.       IF TYPE("m.toListener.CommandClauses.RecordTotal") # "N"
  57552.          ADDPROPERTY(.CommandClauses,"RecordTotal",0)
  57553.       ENDIF   
  57554.       IF TYPE("m.toListener.CommandClauses.NoDialog") # "L"
  57555.         ADDPROPERTY(.CommandClauses,"NoDialog",.F.)
  57556.       ENDIF      
  57557.       SET DATASESSION TO (.FRXDataSession)   
  57558.       THIS.FRXBandRecno = 0
  57559.       SELECT FRX
  57560.       IF .CommandClauses.Summary
  57561.          * don't use groups unless
  57562.          * we're forced to by Summary.
  57563.          * Group usage will not work if
  57564.          * there's a group on .T. or some
  57565.          * other nonsensical expression that
  57566.          * doesn't change.
  57567.          LOCATE FOR ObjType = FRX_OBJTYP_BAND AND ;
  57568.              Objcode = FRX_OBJCOD_GROUPHEADER AND ;
  57569.              Platform = FRX_PLATFORM_WINDOWS AND ;
  57570.              NOT DELETED()
  57571.          DO WHILE NOT EOF()
  57572.             * find the innermost group
  57573.             THIS.FRXBandRecno = RECNO()
  57574.             CONTINUE
  57575.          ENDDO        
  57576.       
  57577.          IF THIS.frxBandRecno = 0
  57578.             * no groups in a Summary report
  57579.             * doesn't make a lot of sense, but
  57580.             * can happen.
  57581.              LOCATE FOR ObjType = FRX_OBJTYP_BAND AND ;
  57582.                 Platform = FRX_PLATFORM_WINDOWS AND ;
  57583.                 Objcode = FRX_OBJCOD_PAGEHEADER AND ;
  57584.                 NOT DELETED()
  57585.              IF NOT EOF()
  57586.                 THIS.FRXBandRecno = RECNO()
  57587.              ENDIF     
  57588.          ENDIF
  57589.       ENDIF
  57590.       IF THIS.FRXBandRecno = 0
  57591.          * not a Summary report.
  57592.          * look for the appropriate detail
  57593.          * using the report driver
  57594.          LOCATE FOR ObjType = FRX_OBJTYP_BAND AND ;
  57595.                     Objcode = FRX_OBJCOD_DETAIL AND ;
  57596.                     Platform = FRX_PLATFORM_WINDOWS AND ;
  57597.                     TYPE(Expr) = "C" AND ; 
  57598.                     NOT (EMPTY(Expr) OR DELETED())
  57599.          DO WHILE NOT EOF()
  57600.              m.lcAlias = ALLTRIM(Expr)
  57601.              SET DATASESSION TO (.CurrentDataSession)             
  57602.              m.lcAlias = UPPER(EVALUATE(m.lcAlias))
  57603.              SET DATASESSION TO (.FRXDataSession)                          
  57604.              IF m.lcAlias == UPPER(THIS.DrivingAlias)             
  57605.                 THIS.FRXBandRecno = RECNO()
  57606.              ENDIF   
  57607.              CONTINUE && try not to use the first detail band
  57608.          ENDDO
  57609.       ENDIF   
  57610.       IF THIS.frxBandRecno = 0
  57611.          * couldn't match up a band with
  57612.          * the known driver
  57613.          LOCATE FOR ObjType = FRX_OBJTYP_BAND AND ;
  57614.               Objcode = FRX_OBJCOD_DETAIL AND ;
  57615.               Platform = FRX_PLATFORM_WINDOWS AND ;
  57616.               EMPTY(Expr) AND NOT DELETED()
  57617.          IF NOT EOF()
  57618.             THIS.FRXBandRecno = RECNO()      
  57619.          ELSE
  57620.             IF THIS.FRXBandRecno = 0 
  57621.                LOCATE FOR ObjType = FRX_OBJTYP_BAND AND ;
  57622.                     Platform = FRX_PLATFORM_WINDOWS AND ;
  57623.                     Objcode = FRX_OBJCOD_DETAIL AND ;
  57624.                     NOT DELETED()
  57625.                IF NOT EOF()
  57626.                   THIS.FRXBandRecno = RECNO()
  57627.                ENDIF  
  57628.             ENDIF               
  57629.          ENDIF        
  57630.       ENDIF   
  57631.    ENDIF
  57632.    THIS.DrivingAliasCurrentRecno = 0
  57633.    SET DATASESSION TO (.ListenerDataSession)   
  57634. ENDWITH
  57635. ENDPROC
  57636. PROCEDURE thermprecision_assign
  57637. LPARAMETERS m.vNewVal
  57638. IF VARTYPE(m.vNewVal) = "N" 
  57639.    THIS.thermPrecision  = ABS(INT(m.vNewVal))
  57640. ENDIF 
  57641. ENDPROC
  57642. PROCEDURE persistbetweenruns_assign
  57643. LPARAMETERS vNewVal
  57644. IF VARTYPE(m.vNewVal) = "L"
  57645.    THIS.persistBetweenRuns = m.vNewVal
  57646. ENDIF   
  57647. ENDPROC
  57648. PROCEDURE createtherm
  57649. LPARAMETERS toListener
  57650. *modified to use Carlos Alloatti progress bar 
  57651. #DEFINE SCALEMODE_PIXELS          3       && 3 - Pixel
  57652. #DEFINE BORDER_DOUBLE   2
  57653. * #DEFINE OUTPUTCLASS_RUNSTATUS_LOC            "Creating output... "
  57654.   DECLARE INTEGER GetSysColor IN Win32API INTEGER  
  57655.   LOCAL liThermTop, liThermLeft, liThermWidth, liThermHeight, liSession
  57656.   IF TYPE("toListener.CommandClauses.StartDataSession") = "N"
  57657.      liSession = SET("DATASESSION")
  57658.      TRY
  57659.         SET DATASESSION TO (toListener.CommandClauses.StartDataSession)
  57660.      CATCH WHEN .T.
  57661.         toListener.resetDataSession()
  57662.      ENDTRY
  57663.   ENDIF
  57664.   liThermTop = THIS.ThermMargin + 20
  57665.   liThermLeft = THIS.ThermMargin  
  57666.     WITH This
  57667.      .ScaleMode = SCALEMODE_PIXELS   
  57668.      .Height = THIS.ThermFormHeight
  57669.      .HalfHeightCaption = .T.
  57670.      .Width = THIS.ThermFormWidth
  57671.      .AutoCenter = .T.
  57672.      .BorderStyle = BORDER_DOUBLE  && fixed dialog
  57673.      .ControlBox = .F.
  57674.      .Closable = (NOT THIS.IsRunning)
  57675.      .MaxButton = .F.
  57676.      .MinButton = .F.
  57677.      * .Movable = (NOT THIS.IsRunning)
  57678.      .AlwaysOnTop = .T.
  57679.      .AllowOutput = .F.
  57680.      .ThermLabel.Visible = .T.
  57681.      .ThermLabel.FontBold = .T.
  57682.      .ThermLabel.Left = liThermLeft
  57683.      .ThermLabel.Top = 4
  57684.      .ThermLabel.Width = .Width - (THIS.ThermMargin*2)
  57685.      .ThermLabel.Alignment = 2
  57686.      liThermHeight = .Height - (THIS.ThermMargin* 2) - .ThermLabel.Height
  57687.      liThermWidth =  .Width - (THIS.ThermMargin*2)
  57688.   ENDWITH
  57689.   THIS.SetThermFormCaption()
  57690.   WITH THIS.Therm
  57691.      .Top = liThermTop     
  57692.      .Left = liThermLeft
  57693.      .Height = liThermHeight
  57694.      .Width = liThermWidth
  57695.      .Visible = .T.
  57696.      .Caption = This.RunStatusText && OUTPUTCLASS_RUNSTATUS_LOC 
  57697.   ENDWITH
  57698.   IF NOT EMPTY(liSession)
  57699.      SET DATASESSION TO (liSession)
  57700.   ENDIF
  57701. RETURN NOT ISNULL(THIS.Therm)
  57702. ENDPROC
  57703. PROCEDURE bringwindowtofront
  57704. * Craig Boyd
  57705. * http://fox.wikis.com/wc.dll?Wiki~ForceWindowtoFrontNotJustBlink
  57706.     DECLARE Long BringWindowToTop In Win32API Long
  57707.     DECLARE Long ShowWindow In Win32API Long, Long
  57708.     DECLARE INTEGER GetCurrentThreadId;
  57709.         IN kernel32
  57710.     DECLARE INTEGER GetWindowThreadProcessId IN user32;
  57711.         INTEGER   hWnd,;
  57712.         INTEGER @ lpdwProcId
  57713.     DECLARE INTEGER GetCurrentThreadId;
  57714.         IN kernel32
  57715.     DECLARE INTEGER AttachThreadInput IN user32 ;
  57716.         INTEGER idAttach, ;
  57717.         INTEGER idAttachTo, ;
  57718.         INTEGER fAttach
  57719.     DECLARE INTEGER GetForegroundWindow IN user32
  57720.     DECLARE Long FindWindow In Win32API String, String
  57721. Local lnHWND
  57722. lnHWND = FindWindow(NULL, _Screen.Caption) && we could have just used _screen.hwnd, but this will work for other non-VFP windows as well
  57723. If lnHWND >0
  57724.     LOCAL lnForeThread, lnAppThread
  57725.     lnForeThread = GetWindowThreadProcessId(GetForegroundWindow(), 0) && what process owns foreground window?
  57726.     lnAppThread = GetCurrentThreadId() && what process is our window owned by?
  57727.     IF lnForeThread != lnAppThread && our process doesn't own the foreground window currently
  57728.         AttachThreadInput(lnForeThread, lnAppThread, .T.) && let's become a part of this the process that owns the foreground window so we can bring our window to the front
  57729.         BringWindowToTop(lnHWND)
  57730.         ShowWindow(lnHWND, 3)
  57731.         AttachThreadInput(lnForeThread, lnAppThread, .F.) && ok, we're done bringing our window to the front so let's detach now
  57732.     ELSE && our process owns foreground window so proceed as we always would have
  57733.         BringWindowToTop(lnHWND)
  57734.         ShowWindow(lnHWND, 3)
  57735.     ENDIF
  57736. ENDIF
  57737. ENDPROC
  57738. PROCEDURE Init
  57739. *!*            Declare Long SetParent in User32 Long hWndChild, Long hWndNewParent
  57740. *!*            SetParent(This.HWnd, lnParentWindowHWND)
  57741. This.AddProperty("nLastPercent", 0)
  57742. This.AddProperty("CancelInstrText", "")
  57743. This.AddProperty("CancelQueryText", "")
  57744. This.AddProperty("ReportIncompleteText", "")
  57745. This.AddProperty("AttentionText", "")
  57746. THIS.Name = "X"+SYS(2015)
  57747. WITH THIS
  57748. .Visible = .F.
  57749. *!*    #DEFINE OUTPUTCLASS_INITSTATUS_LOC           "Initializing... "
  57750. *!*    #DEFINE OUTPUTCLASS_PREPSTATUS_LOC           "Running calculation prepass... "
  57751. *!*    #DEFINE OUTPUTCLASS_RUNSTATUS_LOC            "Creating output... "
  57752. *!*    #DEFINE OUTPUTCLASS_TIME_SECONDS_LOC         "sec(s)"
  57753. *!*    #DEFINE OUTPUTCLASS_CANCEL_INSTRUCTIONS_LOC  "Press Esc to cancel... "
  57754. *!*    #DEFINE OUTPUTCLASS_REPORT_CANCELQUERY_LOC   "Stop report execution? (If you press 'No', report execution will continue.)"
  57755. *!*    #DEFINE OUTPUTCLASS_REPORT_INCOMPLETE_LOC    "Report execution was cancelled." + CHR(13) + ;
  57756.                                              "Your results are not complete."
  57757. #DEFINE OUTPUTCLASS_THERMCAPTION_LOC2        [m.cMessage+ " "+ ] + ;
  57758.             [TRANSFORM(THIS.PercentDone,"999"+ ] + ;
  57759.             [IIF(THIS.ThermPrecision=0,"","."+REPL("9",THIS.ThermPrecision))) + "%" ] + ;
  57760.             [+ IIF(NOT THIS.IncludeSeconds, "" , "   "+] + ;
  57761.             [TRANSFORM(IIF(THIS.IsRunning,DATETIME(), THIS.ReportStopRunDateTime)-] + ;
  57762.             [THIS.ReportStartRunDateTime)+" " + THIS.SecondsText)]
  57763.     DO CASE
  57764.     CASE VARTYPE(_goFP) = "O"
  57765.         .InitStatusText       = _goFP.GetLoc("INITSTATUS") + SPACE(1)
  57766.         .PrepassStatusText    = _goFP.GetLoc("PREPSTATUS") + SPACE(1) 
  57767.         .RunStatusText        = _goFP.GetLoc("RUNSTATUS")  + SPACE(1) 
  57768.         .SecondsText          = _goFP.GetLoc("SECONDS")    + SPACE(1)
  57769.         .CancelInstrText      = _goFP.GetLoc("CANCELINST") + SPACE(1)
  57770.         .CancelQueryText      = _goFP.GetLoc("CANCELQUER")
  57771.         .ReportIncompleteText = _goFP.GetLoc("REPINCOMPL")
  57772.         .AttentionText        = _goFP.GetLoc("ATTENTION")
  57773.     CASE VARTYPE(_Screen.oFoxyPreviewer) = "O"
  57774. *!*            IF NOT EMPTY(_Screen.oFoxyPreviewer._oDestScreen)
  57775. *!*                LOCAL lcTitle, lnDestHwnd
  57776. *!*                lcTitle = WTITLE(_Screen.oFoxyPreviewer._oDestScreen)
  57777. *!*                DECLARE INTEGER FindWindow IN user32 STRING lpClassName, STRING lpWindowName
  57778. *!*                lnDestHwnd = FindWindow(NULL, lcTitle)
  57779. *!*                IF lnDestHwnd <> 0
  57780. *!*                    Declare Long SetParent in User32 Long hWndChild, Long hWndNewParent
  57781. *!*                    = SetParent(This.HWnd, lnDestHWND)
  57782. *!*                    * SetParent(This.HWnd, lnParentWindowHWND)
  57783. *!*                    * ACTIVATE WINDOW (lcTitle)
  57784. *!*                    * DECLARE INTEGER ShowWindow IN user32 AS ShowWindowA INTEGER hWindow, INTEGER nCmdShow
  57785. *!*                    * = ShowWindowA(lnDestHWND, 1)
  57786. *!*                ENDIF
  57787. *!*            ENDIF 
  57788. *!*            LOCAL lcLanguage
  57789. *!*            lcLanguage = NVL(_Screen.oFoxyPreviewer.cLanguage, _Screen.oFoxyPreviewer._cLanguageFromDBF)
  57790. *!*            =PR_SetLanguage(lcLanguage)
  57791. *!*            
  57792. *!*            .InitStatusText       = PR_GetLoc("INITSTATUS") + SPACE(1)
  57793. *!*            .PrepassStatusText    = PR_GetLoc("PREPSTATUS") + SPACE(1) 
  57794. *!*            .RunStatusText        = PR_GetLoc("RUNSTATUS")  + SPACE(1) 
  57795. *!*            .SecondsText          = PR_GetLoc("SECONDS")    + SPACE(1)
  57796. *!*            .CancelInstrText      = PR_GetLoc("CANCELINST") + SPACE(1)
  57797. *!*            .CancelQueryText      = PR_GetLoc("CANCELQUER")
  57798. *!*            .ReportIncompleteText = PR_GetLoc("REPINCOMPL")
  57799. *!*            .AttentionText        = PR_GetLoc("ATTENTION")
  57800.         .InitStatusText       = _Screen.oFoxyPreviewer._InitStatusText
  57801.         .PrepassStatusText    = _Screen.oFoxyPreviewer._PrepassStatusText
  57802.         .RunStatusText        = _Screen.oFoxyPreviewer._RunStatusText
  57803.         .SecondsText          = _Screen.oFoxyPreviewer._SecondsText
  57804.         .CancelInstrText      = _Screen.oFoxyPreviewer._CancelInstrText
  57805.         .CancelQueryText      = _Screen.oFoxyPreviewer._CancelQueryText
  57806.         .ReportIncompleteText = _Screen.oFoxyPreviewer._ReportIncompleteText
  57807.         .AttentionText        = _Screen.oFoxyPreviewer._AttentionText
  57808.         IF NOT EMPTY(NVL(_Screen.oFoxyPreviewer.nThermFormWidth, 0))
  57809.             This.ThermFormWidth = _Screen.oFoxyPreviewer.nThermFormWidth
  57810.         ENDIF
  57811.         * This.BringWindowToFront()
  57812.     OTHERWISE
  57813.         .InitStatusText       = OUTPUTCLASS_INITSTATUS_LOC
  57814.         .PrepassStatusText    = OUTPUTCLASS_PREPSTATUS_LOC
  57815.         .RunStatusText        = OUTPUTCLASS_RUNSTATUS_LOC
  57816.         .SecondsText          = OUTPUTCLASS_TIME_SECONDS_LOC
  57817.         .CancelInstrText      = OUTPUTCLASS_CANCEL_INSTRUCTIONS_LOC
  57818.         .CancelQueryText      = OUTPUTCLASS_REPORT_CANCELQUERY_LOC
  57819.         .ReportIncompleteText = OUTPUTCLASS_REPORT_INCOMPLETE_LOC
  57820.         .AttentionText        = "Attention"
  57821.      ENDCASE
  57822.      .Createtherm()
  57823.     IF VARTYPE(_Screen.oFoxyPreviewer) = "O"
  57824.         IF NOT EMPTY(_Screen.oFoxyPreviewer._oDestScreen)
  57825.             This.Visible = .T.
  57826.             LOCAL lcTitle, lnDestHwnd
  57827.             lcTitle = WTITLE(_Screen.oFoxyPreviewer._oDestScreen)
  57828.             DECLARE INTEGER FindWindow IN user32 STRING lpClassName, STRING lpWindowName
  57829.             lnDestHwnd = FindWindow(NULL, lcTitle)
  57830.             IF lnDestHwnd <> 0
  57831.                 DECLARE Long SetParent IN User32 Long hWndChild, Long hWndNewParent
  57832.                 = SetParent(This.HWnd, lnDestHWND)
  57833.                 * SetParent(This.HWnd, lnParentWindowHWND)
  57834.                 * ACTIVATE WINDOW (lcTitle)
  57835.                 * DECLARE INTEGER ShowWindow IN user32 AS ShowWindowA INTEGER hWindow, INTEGER nCmdShow
  57836.                 * = ShowWindowA(lnDestHWND, 1)
  57837.             ENDIF
  57838.         ENDIF
  57839.     ENDIF
  57840.     .thermCaption      = OUTPUTCLASS_THERMCAPTION_LOC2    && Keep original 
  57841.     .resetUserFeedback()
  57842. ENDWITH
  57843. ENDPROC
  57844. PROCEDURE createhelperobjects
  57845. LPARAMETERS m.tlCalledFromBeforeReport
  57846. * see note in CheckCollectionMembers method about parameter, which
  57847. * is not used here but could provide significant information to
  57848. * subclasses
  57849. * NB this method creates only required helpers, not optional FX objects
  57850. * which is handled in CheckCollectionMembers
  57851. EXTERNAL CLASS _GDIPLUS.VCX
  57852. LOCAL liSession
  57853. m.liSession = SET("DATASESSION")
  57854. THIS.resetDataSession()
  57855. THIS.ensureCollection()
  57856. THIS.ensureCollection(.T.)
  57857. SET DATASESSION TO (m.liSession)
  57858. IF VARTYPE(THIS.FFCGraphics) # "O"  AND THIS.GFXs.Count > 0
  57859.    THIS.FFCGraphics =;
  57860.       THIS.getObjectInstance("GpGraphics","_GDIPlus.VCX","", .T.,"GP", .T.)
  57861.    IF NOT ISNULL(THIS.FFCGraphics)
  57862.       THIS.FFCGraphics.QuietOnError = THIS.QuietMode
  57863.    ENDIF      
  57864. ENDIF   
  57865. ENDPROC
  57866. PROCEDURE needgfxs
  57867. LPARAMETERS m.tcProgram,;
  57868.             m.tP1, m.tP2, m.tP3, m.tP4, m.tP5, m.tP6, ;
  57869.             m.tP7, m.tP8, m.tP8, m.tP10, m.tP11, m.tP12
  57870. * hook
  57871. * a subclass could evaluate conditions,
  57872. * such as whether any objects have custom properties
  57873. * requiring GFX activity.
  57874. RETURN .T.            
  57875. ENDPROC
  57876. PROCEDURE sendfx
  57877. LPARAMETERS m.tcProgram, ;
  57878.             m.tP1, m.tP2, m.tP3, m.tP4, m.tP5, ;
  57879.             m.tP6, m.tP7, m.tP8, m.tP9, m.tP10, ;
  57880.             m.tP11, m.tP12)
  57881.   LOCAL m.loFX, m.liRenderBehavior, m.liTemp, m.lcMethodToken
  57882.   m.liRenderBehavior = OUTPUTFX_DEFAULT_RENDER_BEHAVIOR   
  57883.   IF THIS.IsSuccessor
  57884.      * Only the lead does this work.     
  57885.      RETURN m.liRenderBehavior
  57886.   ENDIF
  57887.   m.lcMethodToken = THIS.upperMethodName(m.tcProgram)  
  57888.   IF VARTYPE(THIS.FXs) = "O" AND THIS.FXs.Count > 0
  57889.      * The order of the 
  57890.      * invocation of this method,
  57891.      * which precedes the DODEFAULT()
  57892.      * in each event, 
  57893.      * makes the results available 
  57894.      * for all Successors.
  57895.      FOR EACH m.loFX IN THIS.FXs FOXOBJECT
  57896.          IF VARTYPE(m.loFX) = "O" && contract API is checked in LoadReport and BeforeReport
  57897.                                 && but the object could release itself midway through a run
  57898.             THIS.setCurrentDataSession()                                
  57899.             m.loFX.ApplyFX(THIS,m.lcMethodToken, ;
  57900.                        @tP1, @tP2, @tP3, @tP4, @tP5, @tP6, ;
  57901.                        @tP7, @tP8, @tP9, @tP10, @tP11, @tP12)
  57902.          ENDIF              
  57903.       NEXT
  57904.   ENDIF
  57905.   IF VARTYPE(THIS.GFXs) = "O" AND THIS.GFXs.Count > 0 AND ;
  57906.      THIS.NeedGFXs(m.lcMethodToken,;
  57907.                    m.tP1, m.tP2, m.tP3, m.tP4, m.tP5, ;
  57908.                    m.tP6, m.tP7, m.tP8, m.tP9, m.tP10, ;
  57909.                    m.tP11, m.tP12)
  57910.       FOR EACH m.loFX IN THIS.GFXs FOXOBJECT
  57911.           IF VARTYPE(m.loFX) = "O" && contract API is checked in LoadReport and BeforeReport
  57912.                                    && but the object could release itself midway through a run          
  57913.              THIS.setCurrentDataSession()                                                                   
  57914.              m.liTemp = INT(VAL(TRANSFORM(m.loFX.ApplyFX(THIS, m.lcMethodToken, ;
  57915.                         @tP1, @tP2, @tP3, @tP4, @tP5, @tP6, ;
  57916.                         @tP7, @tP8, @tP9, @tP10, @tP11, @tP12))))
  57917.              IF m.liTemp > m.liRenderBehavior  && behavior is cumulative
  57918.                 m.liRenderBehavior = INT(m.liTemp)
  57919.              ENDIF      
  57920.           ENDIF
  57921.       NEXT
  57922.   ENDIF
  57923.  RETURN m.liRenderBehavior  && this value only affects calls during Render method 
  57924. ENDPROC
  57925. PROCEDURE checkcollectionmembers
  57926. LPARAMETERS m.tlCalledFromBeforeReport
  57927. * NB: use of this argument and 
  57928. * no distinction made between calls from
  57929. * BeforeReport and LoadReport at this level,
  57930. * this distinction is made available for subclasses
  57931. * that might not have all materials prepared for
  57932. * creation of required collection members during Load.
  57933. LOCAL m.liIndex, m.loX, m.loXs as Collection
  57934. THIS.getFeedbackFXObject()
  57935. THIS.getMemberDataScriptFXObject()
  57936. THIS.getRotateGFXObject()
  57937. THIS.getNoRenderGFXObject()
  57938. m.loXs = THIS.FXs
  57939. FOR m.liIndex = 1 TO THIS.FXs.Count
  57940.    m.loX = loXs.Item(m.liIndex)
  57941.    IF VARTYPE(m.loX) # "O" OR ;
  57942.      (NOT PEMSTATUS(m.loX,"ApplyFX",5))
  57943.      loXs.Remove(m.liIndex)
  57944.    ENDIF
  57945. m.loXs = THIS.GFXs
  57946. FOR m.liIndex = 1 TO THIS.GFXs.Count
  57947.    m.loX = loXs.Item(liIndex)
  57948.    IF VARTYPE(m.loX) # "O" OR ;
  57949.      (NOT PEMSTATUS(m.loX,"ApplyFX",5))
  57950.      loXs.Remove(m.liIndex)
  57951.    ENDIF
  57952. STORE NULL TO m.loX, m.loXs
  57953. ENDPROC
  57954. PROCEDURE uppermethodname
  57955. LPARAMETERS m.tcProgram
  57956. LOCAL m.lcProgram
  57957. m.lcProgram = UPPER(TRANSFORM(m.tcProgram))
  57958. RETURN SUBSTR(m.lcProgram,RAT(".",m.lcProgram) + 1)      
  57959. ENDPROC
  57960. PROCEDURE cancelrequested_assign
  57961. LPARAMETERS m.vNewVal
  57962. IF VARTYPE(m.vNewVal) = "L"
  57963.    THIS.cancelRequested = m.vNewVal
  57964. ENDIF   
  57965. ENDPROC
  57966. PROCEDURE fxfeedbackclass_assign
  57967. LPARAMETERS m.vNewVal
  57968. IF VARTYPE(m.vNewVal) = "C" AND NOT EMPTY(m.vNewVal)
  57969.    THIS.fxFeedbackClass = m.vNewVal
  57970. ENDIF
  57971. ENDPROC
  57972. PROCEDURE fxfeedbackclasslib_assign
  57973. LPARAMETERS vNewVal
  57974. IF VARTYPE(m.vNewVal) = "C" AND NOT EMPTY(m.vNewVal)
  57975.    THIS.fxFeedbackClassLib = m.vNewVal
  57976. ENDIF   
  57977. ENDPROC
  57978. PROCEDURE fxfeedbackmodule_assign
  57979. LPARAMETERS vNewVal
  57980. IF VARTYPE(m.vNewVal) = "C" 
  57981.    THIS.fxFeedbackModule = m.vNewVal
  57982. ENDIF   
  57983. ENDPROC
  57984. PROCEDURE getfeedbackfxobject
  57985. LPARAMETERS m.tlQuiet
  57986. IF (NOT THIS.QuietMode) AND ;
  57987.    (NOT THIS.isSuccessor) AND ;
  57988.    (TYPE("THIS.CommandClauses.NoDialog") # "L" OR ;
  57989.     (NOT THIS.CommandClauses.NoDialog))
  57990.    THIS.addCollectionMember(;
  57991.          THIS.fxFeedbackClass,;
  57992.          THIS.fxFeedbackClassLib,;
  57993.          THIS.fxFeedbackModule, .T.)
  57994.       
  57995.    IF NOT THIS.checkCollectionForSpecifiedMember(;
  57996.           THIS.fxFeedbackClass,;
  57997.           THIS.fxFeedbackClassLib)
  57998.        IF _VFP.StartMode = 0 AND NOT m.tlQuiet
  57999. *          THIS.DoMessage(OUTPUTFX_USERFEEDBACK_UNAVAILABLE_LOC,MB_ICONEXCLAMATION)
  58000.        ENDIF       
  58001.        THIS.QuietMode = .T.
  58002.    ENDIF 
  58003. ENDIF   
  58004. ENDPROC
  58005. PROCEDURE classpath_assign
  58006. LPARAMETERS m.vNewVal
  58007. IF VARTYPE(m.vNewVal) = "C" AND ;
  58008.    DIRECTORY(m.vNewVal)
  58009.    IF NOT EMPTY(m.vNewVal)
  58010.       m.vNewVal = ADDBS(m.vNewVal)
  58011.    ENDIF
  58012.    THIS.classPath = m.vNewVal
  58013.    THIS.ResetToDefault("classPath")   
  58014. ENDIF 
  58015. ENDPROC
  58016. PROCEDURE getobjectinstance
  58017. LPARAMETERS m.tcClass, m.tcClassLib, m.tcModule, ;
  58018.             m.tlAssignUniqueNameToObject, ;
  58019.             m.tcNamePrefix, m.tlMandatoryObject
  58020. IF VARTYPE(m.tcClass) # "C" OR EMPTY(m.tcClass)
  58021.    IF m.tlMandatoryObject
  58022.       THIS.DoMessage(OUTPUTFX_REQUIREDOBJECTDEF_MISSING_LOC,MB_ICONEXCLAMATION)
  58023.    ENDIF
  58024.    RETURN NULL
  58025. ENDIF
  58026. LOCAL m.loX,m.lcForceVCX, m.lcForceFXP, m.lcUseThisLib, m.lcExternalsPath, m.liSession
  58027. liSession = SET("DATASESSION")
  58028. THIS.ResetDataSession()
  58029. m.lcForceVCX = FORCEEXT(m.tcClassLib,"VCX")
  58030. m.lcForceFXP = STRTRAN(m.tcClassLib,".PRG",".FXP")
  58031. m.lcExternalsPath = THIS.getPathForExternals()
  58032. m.loX = NULL
  58033.    DO CASE
  58034.    CASE FILE(m.tcClassLib) OR ;
  58035.         FILE(m.lcForceVCX) OR ;
  58036.         ATC(FULLPATH(m.lcForceVCX) + " ALIAS ",SET("CLASSLIB")) > 0 OR ;
  58037.         ATC("\" + JUSTFNAME(m.lcForceVCX) + " ALIAS ",SET("CLASSLIB")) > 0 OR ;
  58038.         ATC(m.tcClassLib,SET("PROCEDURE")) > 0 OR ;
  58039.         ATC(m.lcForceFXP,SET("PROCEDURE")) > 0
  58040.         m.lcUseThisLib = m.tcClassLib
  58041.    CASE FILE(FORCEPATH(m.tcClassLib,m.lcExternalsPath)) OR ;
  58042.         FILE(FORCEPATH(m.lcForceVCX,m.lcExternalsPath)) OR ;
  58043.         FILE(FORCEPATH(m.lcForceFXP,m.lcExternalsPath)) 
  58044.         m.lcUseThisLib = FORCEPATH(m.tcClassLib,m.lcExternalsPath)
  58045.    CASE FILE(FORCEPATH(m.tcClassLib,HOME(0)+"FFC\")) OR ;
  58046.         FILE(FORCEPATH(m.lcForceVCX,HOME(0)+"FFC\")) 
  58047.         FILE(FORCEPATH(m.lcForceFXP,HOME(0)+"FFC\"))         
  58048.         m.lcUseThisLib = FORCEPATH(m.tcClassLib,HOME(0) + "FFC\") 
  58049.    CASE FILE(FORCEPATH(m.tcClassLib,HOME(0)+"FFC\" + THIS.classPath)) OR ;
  58050.         FILE(FORCEPATH(m.lcForceVCX,HOME(0)+"FFC\" + THIS.classPath)) 
  58051.         FILE(FORCEPATH(m.lcForceFXP,HOME(0)+"FFC\" + THIS.classPath))         
  58052.         m.lcUseThisLib = FORCEPATH(m.tcClassLib,HOME(0) + "FFC\" + THIS.classPath) 
  58053.    OTHERWISE
  58054.         m.lcUseThisLib = m.tcClassLib
  58055.         * may error, but if it's a required object,
  58056.         * it *should* error.
  58057.    ENDCASE 
  58058.              
  58059.    m.loX =  NEWOBJECT(m.tcClass, m.lcUseThisLib, ;
  58060.             IIF(VARTYPE(m.tcModule)="C",m.tcModule,""))          
  58061.    IF (NOT ISNULL(m.loX)) AND m.tlAssignUniqueNameToObject
  58062.       m.tcNamePrefix = IIF(VARTYPE(m.tcNamePrefix) = "C", ;
  58063.                             m.tcNamePrefix, "FXH")
  58064.       m.loX.Name = m.tcNamePrefix + SYS(2015)                         
  58065.    ENDIF   
  58066. CATCH TO err
  58067.    m.loX = NULL
  58068.    #IF OUTPUTCLASS_DEBUGGING 
  58069.        SUSPEND
  58070.    #ENDIF
  58071. ENDTRY
  58072. IF m.tlMandatoryObject AND ISNULL(m.loX)
  58073.    THIS.DoMessage(OUTPUTFX_REQUIREDOBJECT_UNAVAILABLE_LOC,MB_ICONEXCLAMATION)
  58074. ENDIF
  58075. SET DATASESSION TO (m.liSession)
  58076. RETURN m.loX
  58077. ENDPROC
  58078. PROCEDURE checkcollectionforspecifiedmember
  58079. LPARAMETERS m.tcClass, m.tcClassLib, m.tlInGFX, m.tlReturnRef
  58080. LOCAL m.liIndex, m.loXs, m.loX, m.lcForceVCX, m.lcClassLib, ;
  58081.       m.lcClass, m.lcThisLib, m.llFound, m.loRef
  58082. THIS.ensureCollection(m.tlInGFX) 
  58083. IF m.tlInGFX
  58084.   m.loXs = THIS.GFXs
  58085.    m.loXs = THIS.FXs
  58086. ENDIF   
  58087. m.loRef = NULL
  58088. m.lcClass = UPPER(m.tcClass)
  58089. IF NOT EMPTY(m.tcClassLib)
  58090.    m.lcClassLib = UPPER(JUSTFNAME(m.tcClassLib))
  58091.    m.lcForceVCX = FORCEEXT(lcClassLib,"VCX")
  58092.    m.lcForceFXP = STRTRAN(lcClassLib,".PRG",".FXP")
  58093. ENDIF   
  58094. FOR m.liIndex = 1 TO m.loXs.Count
  58095.    m.loX = loXs.Item(liIndex)
  58096.    m.lcThisLib = UPPER(JUSTFNAME(loX.ClassLibrary))
  58097.    IF UPPER(loX.Class) == m.lcClass AND ;
  58098.       (EMPTY(m.lcClassLib) OR ;
  58099.        m.lcThisLib == m.lcClassLib OR ;
  58100.        m.lcThisLib == m.lcForceVCX OR ;
  58101.        m.lcThisLib == m.lcForceFXP) 
  58102.        m.llFound = .T.
  58103.        m.loRef = m.loX
  58104.        EXIT
  58105.    ENDIF         
  58106. IF m.tlReturnRef
  58107.    RETURN m.loRef
  58108.    RETURN m.llFound
  58109. ENDIF   
  58110. ENDPROC
  58111. PROCEDURE addcollectionmember
  58112. LPARAMETERS m.tcClass, m.tcClassLib,m.tcModule,m.tlSingleton, m.tlInGFX, m.tlRequired
  58113. LOCAL m.loX, m.lExists, m.liReturn
  58114. m.liReturn = OUTPUTFX_ADDCOLLECTION_NOACTION 
  58115. IF m.tlSingleton
  58116.   m.lExists =  THIS.checkCollectionForSpecifiedMember(m.tcClass,m.tcClassLib,m.tlInGFX)
  58117.   * checkCollectionForSpecifiedMember will have done this already
  58118.   THIS.ensureCollection(m.tlInGFX)  
  58119. ENDIF
  58120. IF NOT m.lExists               
  58121.    m.loX = THIS.getObjectInstance(;
  58122.           m.tcClass,;
  58123.           m.tcClassLib,;
  58124.           m.tcModule, ;
  58125.          .T., IIF(tlInGFX,"GFX","FX"),tlRequired)
  58126.    IF ISNULL(m.loX)      
  58127.       m.liReturn = OUTPUTFX_ADDCOLLECTION_FAILURE
  58128.    ELSE
  58129.       IF (NOT PEMSTATUS(m.loX,"ApplyFX",5))
  58130.          m.liReturn = OUTPUTFX_ADDCOLLECTION_UNSUITABLE
  58131.       ELSE
  58132.          IF tlInGFX
  58133.             THIS.GFXs.Add(m.loX)         
  58134.          ELSE
  58135.             THIS.FXs.Add(m.loX)
  58136.          ENDIF            
  58137.          m.liReturn = OUTPUTFX_ADDCOLLECTION_SUCCESS
  58138.       ENDIF            
  58139.    ENDIF   
  58140. ENDIF   
  58141. RETURN m.liReturn
  58142. ENDPROC
  58143. PROCEDURE getpathforexternals
  58144. * this is  mostly for standalone use
  58145. * first figure out where to put it
  58146. * with the idea of not littering
  58147. * the disk too much based on CURDIR().
  58148. * For app pieces, look for a container module
  58149. * and put it there.
  58150. * if there isn't one,
  58151. * put it with the VCX
  58152.       
  58153. LOCAL m.liLevel, m.lcSys16, m.lcPath
  58154. IF ":" $ THIS.classPath
  58155.    * explicit path
  58156.    m.lcPath = THIS.classPath
  58157.    FOR m.liLevel = PROGRAM(-1) TO 1 STEP -1
  58158.        m.lcSys16 = UPPER(SYS(16,m.liLevel))
  58159.       IF INLIST(RIGHT(m.lcSys16,3),"APP","EXE","DLL")
  58160.          m.lcPath = JUSTPATH(m.lcSys16)
  58161.          EXIT
  58162.       ENDIF
  58163.    ENDFOR
  58164.    IF (NOT EMPTY(lcPath)) AND ;
  58165.       (NOT EMPTY(THIS.classPath)) AND ;
  58166.        DIRECTORY(FULLPATH(THIS.classPath,ADDBS(lcPath)))
  58167.        m.lcPath = FULLPATH(THIS.classPath,ADDBS(lcPath))
  58168.    ENDIF
  58169. ENDIF   
  58170.       
  58171. IF EMPTY(m.lcPath)
  58172.    m.lcPath = JUSTPATH(THIS.ClassLibrary)
  58173.    IF (NOT EMPTY(lcPath)) AND ;
  58174.       (NOT EMPTY(THIS.classPath)) AND ;
  58175.        DIRECTORY(FULLPATH(THIS.classPath,ADDBS(lcPath)))
  58176.        m.lcPath = FULLPATH(THIS.classPath,ADDBS(lcPath))
  58177.    ENDIF
  58178. ENDIF
  58179. IF NOT DIRECTORY(m.lcPath)
  58180.    m.lcPath = ""
  58181. ELSE 
  58182.    m.lcPath = ADDBS(m.lcPath)   
  58183. ENDIF
  58184. RETURN m.lcPath
  58185. ENDPROC
  58186. PROCEDURE ffcgraphics_assign
  58187. LPARAMETERS m.tvNewVal
  58188. DO CASE
  58189. CASE ISNULL(m.tvNewVal) AND (NOT THIS.isRunning)
  58190.    THIS.FFCGraphics = m.tvNewVal
  58191. CASE VARTYPE(m.tvNewVal) = "O"
  58192.    LOCAL laDummy[1]
  58193.    IF ACLASS(laDummy,m.tvNewVal) > 0 AND ;
  58194.       ASCAN(laDummy,"GpGraphics",1,ALEN(laDummy),1, 7) > 0 && case insensitive, exact on
  58195.       THIS.FFCGraphics = m.tvNewVal
  58196.    ENDIF      
  58197. OTHERWISE
  58198.    * don't   
  58199. ENDCASE
  58200. ENDPROC
  58201. PROCEDURE getmemberdatascriptfxobject
  58202. THIS.setFRXDataSession()
  58203. IF USED(THIS.memberDataAlias) AND ;
  58204.    RECCOUNT(THIS.memberDataAlias) > 0
  58205.    SELECT (THIS.memberDataAlias)
  58206.    LOCATE FOR (NOT EMPTY(Execute))
  58207.    IF NOT EOF()
  58208.       THIS.addCollectionMember(;
  58209.            THIS.fxMemberDataScriptClass,;
  58210.            THIS.fxMemberDataScriptClassLib,;
  58211.            THIS.fxMemberDataScriptModule, .T.)
  58212.       IF NOT THIS.checkCollectionForSpecifiedMember(;
  58213.            THIS.fxMemberDataScriptClass,;
  58214.            THIS.fxMemberDataScriptClassLib)
  58215.            THIS.DoMessage(OUTPUTFX_SCRIPTING_UNAVAILABLE_LOC,MB_ICONEXCLAMATION)
  58216.       ENDIF
  58217.    ENDIF      
  58218.    IF USED("FRX")
  58219.       SELECT FRX
  58220.    ENDIF
  58221. ENDIF
  58222. ENDPROC
  58223. PROCEDURE fxmemberdatascriptclass_assign
  58224. LPARAMETERS m.vNewVal
  58225. IF VARTYPE(m.vNewVal) = "C" AND NOT EMPTY(m.vNewVal)
  58226.    THIS.fxMemberDataScriptClass = m.vNewVal
  58227. ENDIF
  58228. ENDPROC
  58229. PROCEDURE fxmemberdatascriptclasslib_assign
  58230. LPARAMETERS vNewVal
  58231. IF VARTYPE(m.vNewVal) = "C" AND NOT EMPTY(m.vNewVal)
  58232.    THIS.fxMemberDataScriptClassLib = m.vNewVal
  58233. ENDIF   
  58234. ENDPROC
  58235. PROCEDURE fxmemberdatascriptmodule_assign
  58236. LPARAMETERS vNewVal
  58237. IF VARTYPE(m.vNewVal) = "C" 
  58238.    THIS.fxMemberDataScriptModule = m.vNewVal
  58239. ENDIF   
  58240. ENDPROC
  58241. PROCEDURE frxcursor_access
  58242. IF (NOT THIS.IsRunning) AND ;
  58243.    ISNULL(THIS.frxCursor) AND THIS.loadFRXCursor
  58244.    THIS.frxCursor = ;
  58245.       THIS.getObjectInstance("FRXCursor","_FRXCURSOR.VCX","", .T.,"frx", .T.)
  58246.    IF ISNULL(THIS.frxCursor)
  58247.       THIS.loadFRXCursor = .F.
  58248.    ELSE
  58249.       THIS.frxCursor.QuietMode = THIS.QuietMode      
  58250.    ENDIF
  58251. ENDIF      
  58252. RETURN THIS.frxCursor
  58253. ENDPROC
  58254. PROCEDURE frxcursor_assign
  58255. LPARAMETERS m.vNewVal
  58256. IF ISNULL(m.vNewVal) OR (NOT THIS.IsRunning)
  58257.    THIS.frxcursor = m.vNewVal
  58258. ENDIF   
  58259. ENDPROC
  58260. PROCEDURE loadfrxcursor_assign
  58261. LPARAMETERS m.vNewVal
  58262. IF VARTYPE(m.vNewVal) = "L" AND NOT THIS.IsRunning
  58263.    THIS.loadfrxcursor = m.vNewVal
  58264. ENDIF   
  58265. ENDPROC
  58266. PROCEDURE memberdataalias_assign
  58267. LPARAMETERS m.vNewVal
  58268. IF VARTYPE(m.vNewVal) = "C" AND NOT EMPTY(m.vNewVal)
  58269.    THIS.memberDataAlias = m.vNewVal
  58270. ENDIF   
  58271. ENDPROC
  58272. PROCEDURE creatememberdatacursor
  58273. IF USED("FRX")
  58274.    SELECT FRX
  58275.    LOCATE FOR Platform = FRX_PLATFORM_WINDOWS AND NOT (EMPTY(Style) OR DELETED())
  58276.    IF  EOF() 
  58277.       THIS.loadFrxCursor = .F.
  58278.    ELSE
  58279.       THIS.loadFRXCursor = .T.
  58280.       DO CASE
  58281.       CASE (NOT THIS.loadFRXCursor) OR ISNULL(THIS.FRXCursor)
  58282.          * message already taken care of
  58283.       CASE PEMSTATUS(THIS.FRXCursor,"UnpackFRXMemberdata",5)
  58284.          THIS.FRXCursor.UnpackFRXMemberData("FRX",THIS.memberDataAlias,THIS.FRXDataSession)
  58285.       OTHERWISE
  58286.          THIS.DoMessage(OUTPUTFX_SCRIPTING_UNAVAILABLE_LOC ,MB_ICONEXCLAMATION)      
  58287.       ENDCASE
  58288.    ENDIF
  58289. ENDIF
  58290. ENDPROC
  58291. PROCEDURE runcollectorresetlevel_assign
  58292. LPARAMETERS tvNewVal
  58293. IF VARTYPE(m.tvNewVal) = "N" AND ;
  58294.    INLIST(m.tvNewVal,OUTPUTFX_RUNCOLLECTOR_RESET_NEVER , ;
  58295.                      OUTPUTFX_RUNCOLLECTOR_RESET_ONREPORT,;
  58296.                      OUTPUTFX_RUNCOLLECTOR_RESET_ONCHAIN)
  58297.    THIS.runCollectorResetLevel = m.tvNewVal
  58298. ENDIF   
  58299. ENDPROC
  58300. PROCEDURE getfrxrecno
  58301. LPARAMETERS m.tcMethodToken,m.tP1, m.tP2
  58302. LOCAL m.liFRXRecno, m.liSession
  58303. m.liFRXRecno = 0
  58304. DO CASE
  58305. CASE INLIST(m.tcMethodToken,"BEFOREREPORT","AFTERREPORT","LOADREPORT","UNLOADREPORT")
  58306.    IF THIS.frxHeaderRecno = -1
  58307.       * this is an early call. find the value early if possible
  58308.       m.liSession = SET("DATASESSION")
  58309.       THIS.setFRXDataSession()
  58310.       IF USED("FRX")
  58311.          SELECT FRX
  58312.          LOCATE FOR ObjType = FRX_OBJTYP_REPORTHEADER AND ;
  58313.                     Platform = FRX_PLATFORM_WINDOWS AND ;
  58314.                     NOT DELETED()
  58315.          THIS.frxHeaderRecno = RECNO()
  58316.       ELSE
  58317.          THIS.frxHeaderRecno = 1
  58318.       ENDIF
  58319.       SET DATASESSION TO (m.liSession)
  58320.    ENDIF   
  58321.    m.liFRXRecNo = THIS.frxHeaderRecno 
  58322. CASE INLIST(m.tcMethodToken,"BEFOREBAND","AFTERBAND") AND ;
  58323.      VARTYPE(m.tP2) = "N" && Band events
  58324.    m.liFRXRecNo = m.tP2          
  58325. CASE VARTYPE(m.tP1) = "N"  && Render, other events   
  58326.    m.liFRXRecNo = m.tP1
  58327. OTHERWISE
  58328.    * called inappropriately
  58329. ENDCASE
  58330. RETURN  m.liFRXRecno
  58331. ENDPROC
  58332. PROCEDURE getrotategfxobject
  58333. THIS.setFRXDataSession()
  58334. IF USED(THIS.memberDataAlias) AND RECCOUNT(THIS.memberDataAlias) > 0
  58335.    SELECT (THIS.memberDataAlias)
  58336.    LOCATE FOR  Type = FRX_BLDR_MEMBERDATATYPE AND ;
  58337.                Name == FRX_BLDR_NAMESPACE_ROTATE AND ;
  58338.                NOT EMPTY(Execute)                    
  58339.    IF NOT EOF()
  58340.       THIS.addCollectionMember(;
  58341.            THIS.gfxRotateClass,;
  58342.            THIS.gfxRotateClassLib,;
  58343.            THIS.gfxRotateModule, .T., .T.)
  58344.       IF NOT THIS.checkCollectionForSpecifiedMember(;
  58345.            THIS.gfxRotateClass,;
  58346.            THIS.gfxRotateClassLib, .T.)
  58347.            THIS.DoMessage(OUTPUTFX_ROTATION_UNAVAILABLE_LOC,MB_ICONEXCLAMATION)
  58348.       ENDIF
  58349.    ENDIF      
  58350.    IF USED("FRX")
  58351.       SELECT FRX
  58352.    ENDIF
  58353. ENDIF
  58354. ENDPROC
  58355. PROCEDURE gfxrotateclass_assign
  58356. LPARAMETERS m.vNewVal
  58357. IF VARTYPE(m.vNewVal) = "C" AND NOT EMPTY(m.vNewVal)
  58358.    THIS.gfxRotateClass = m.vNewVal
  58359. ENDIF
  58360. ENDPROC
  58361. PROCEDURE gfxrotateclasslib_assign
  58362. LPARAMETERS m.vNewVal
  58363. IF VARTYPE(m.vNewVal) = "C" AND NOT EMPTY(m.vNewVal)
  58364.    THIS.gfxRotateClassLib = m.vNewVal
  58365. ENDIF
  58366. ENDPROC
  58367. PROCEDURE gfxrotatemodule_assign
  58368. LPARAMETERS m.vNewVal
  58369. IF VARTYPE(m.vNewVal) = "C" 
  58370.    THIS.gfxRotateModule = m.vNewVal
  58371. ENDIF
  58372. ENDPROC
  58373. PROCEDURE removecollectionmember
  58374. LPARAMETERS m.tcName, m.tlInGFX, m.tlNameIsClass
  58375. LOCAL m.liIndex, m.loXs, m.loX, m.llFound, m.lcName
  58376. IF EMPTY(m.tcName) OR VARTYPE(m.tcName) # "C"
  58377.    RETURN .F.
  58378. ENDIF   
  58379. IF m.tlInGFX
  58380.   m.loXs = THIS.GFXs
  58381.    m.loXs = THIS.FXs
  58382. ENDIF   
  58383. m.lcName = ALLTRIM(UPPER(m.tcName))
  58384. FOR m.liIndex = 1 TO m.loXs.Count
  58385.    m.loX = loXs.Item(liIndex)
  58386.    IF (UPPER(loX.Name) == m.lcName) OR ;
  58387.       (m.tlNameIsClass AND UPPER(loX.Class) == m.lcName)
  58388.        m.loXs.Remove(m.liIndex)
  58389.        m.llFound = .T.
  58390.        EXIT
  58391.    ENDIF         
  58392. RETURN m.llFound
  58393. ENDPROC
  58394. PROCEDURE reportstoprundatetime_access
  58395. LOCAL m.lox, m.ldt
  58396. m.lox = THIS.checkCollectionForSpecifiedMember(;
  58397.       THIS.fxFeedbackClass, THIS.fxFeedbackClassLib,.F., .T.) 
  58398. IF (NOT ISNULL(m.lox)) AND PEMSTATUS(m.lox,"reportStopRunDatetime",5)
  58399.    m.ldt = lox.reportStopRunDateTime
  58400.    m.ldt = THIS.reportStopRunDateTime 
  58401. ENDIF   
  58402. m.lox = NULL
  58403. RETURN m.ldt
  58404. ENDPROC
  58405. PROCEDURE reportstartrundatetime_access
  58406. LOCAL m.lox, m.ldt
  58407. m.lox = THIS.checkCollectionForSpecifiedMember(;
  58408.       THIS.fxFeedbackClass, THIS.fxFeedbackClassLib,.f., .t.) 
  58409. IF (NOT ISNULL(m.lox)) AND PEMSTATUS(m.lox,"reportStartRunDatetime",5)
  58410.    m.ldt = m.lox.reportStartRunDateTime
  58411.    m.ldt = THIS.reportStartRunDateTime   
  58412. ENDIF   
  58413. m.lox = NULL
  58414. RETURN m.ldt
  58415. ENDPROC
  58416. PROCEDURE evaluateuserexpression
  58417. LPARAMETERS m.tvValueExpr
  58418. LOCAL m.liSession, m.lvValue
  58419. m.lvValue = ""
  58420. m.liSession = SET("DATASESSION")
  58421. THIS.setCurrentDataSession()
  58422. IF TYPE(m.tvValueExpr) # "U"
  58423.    m.lvValue = EVALUATE(m.tvValueExpr)
  58424.    THIS.setFRXDataSession()
  58425.    IF TYPE(m.tvValueExpr) # "U"
  58426.       m.lvValue = EVALUATE(m.tvValueExpr)
  58427.    ELSE
  58428.       THIS.resetDataSession()
  58429.       IF TYPE(m.tvValueExpr) # "U"
  58430.          m.lvValue = EVALUATE(m.tvValueExpr)
  58431.       ELSE
  58432.          IF TYPE ("THIS.CommandClauses.StartDatasession") = "N" AND ;
  58433.             THIS.CommandClauses.StartDatasession > 0 AND ;
  58434.             (THIS.CommandClauses.StartDatasession # THIS.ListenerDataSession)
  58435.             SET DATASESSION TO (THIS.CommandClauses.StartDataSession)
  58436.             IF TYPE(m.tvValueExpr) # "U"
  58437.                m.lvValue = EVALUATE(m.tvValueExpr)
  58438.             ENDIF
  58439.          ENDIF   
  58440.       ENDIF
  58441.    ENDIF
  58442. ENDIF
  58443. SET DATASESSION TO (m.liSession)
  58444. RETURN m.lvValue 
  58445. ENDPROC
  58446. PROCEDURE gfxnorenderclass_assign
  58447. LPARAMETERS m.vNewVal
  58448. IF VARTYPE(m.vNewVal) = "C" 
  58449.    THIS.gfxNoRenderClass = m.vNewVal
  58450. ENDIF
  58451. ENDPROC
  58452. PROCEDURE gfxnorenderclasslib_assign
  58453. LPARAMETERS m.vNewVal
  58454. IF VARTYPE(m.vNewVal) = "C" 
  58455.    THIS.gfxNoRenderClassLib = m.vNewVal
  58456. ENDIF
  58457. ENDPROC
  58458. PROCEDURE gfxnorendermodule_assign
  58459. LPARAMETERS m.vNewVal
  58460. IF VARTYPE(m.vNewVal) = "C" 
  58461.    THIS.gfxNoRenderModule = m.vNewVal
  58462. ENDIF
  58463. ENDPROC
  58464. PROCEDURE getnorendergfxobject
  58465. IF NOT EMPTY(THIS.gfxNoRenderClass)
  58466.    LOCAL m.llNeedThisGFX, m.llOpenedMemberData
  58467.    THIS.setFRXDataSession()
  58468.    IF (NOT USED(THIS.memberDataAlias)) AND ;
  58469.       (NOT THIS.CommandClauses.IsDesignerLoaded) AND ;
  58470.       (NOT THIS.checkCollectionForSpecifiedMember(;
  58471.               THIS.gfxNoRenderClass,;
  58472.               THIS.gfxNoRenderClassLib, .T.))
  58473.       IF NOT USED("FRX") && during LoadReport
  58474.          IF FILE(THIS.CommandClauses.File)
  58475.             USE (THIS.CommandClauses.File) AGAIN SHARED NOUPDATE ALIAS FRX
  58476.             * this is a special situation, in that
  58477.             * this gfx needs to be available to do a swap
  58478.             * *before* memberdata is commonly available.
  58479.             * At this point, depending on what else has happened,
  58480.             * Memberdata may or may not be here. If it is not,
  58481.             * we could build the memberdata cursor here temporarily --
  58482.             * the gfx itself will do that, in fact -- but in this
  58483.             * method we're just ascertaining the requirement for
  58484.             * the gfx to *exist*.  This doesn't merit the extra time
  58485.             * to do an exact comparison of the appropriate memberdata
  58486.             * element.  If we might need it, the class should be 
  58487.             * instantiated.  Let it do the special build of memberdata
  58488.             * later and do its evaluations at that time.
  58489.             LOCATE FOR  FRX_BLDR_ADVPROP_PREPROCESS_NORENDER $ Style ;
  58490.                         AND NOT DELETED()
  58491.             m.llNeedThisGFX = (NOT EOF())
  58492.             USE IN FRX
  58493.          ELSE
  58494.             * built-into another app, just load without the check
  58495.             m.llNeedThisGFX = .T.
  58496.          ENDIF
  58497.          IF m.llNeedThisGFX
  58498.             THIS.loadFrxCursor = .T.
  58499.          ENDIF    
  58500.       ENDIF              
  58501.    ENDIF      
  58502.    IF (NOT m.llNeedThisGFX) AND ;
  58503.       USED(THIS.memberDataAlias) AND ;
  58504.       RECCOUNT(THIS.memberDataAlias) > 0
  58505.       * now we'll check in the normal way later in the report for
  58506.       * any required instance suppression, which occurs
  58507.       * later in the report cycle and can use the normal build
  58508.       * of memberdata
  58509.       SELECT (THIS.memberDataAlias)
  58510.       LOCATE FOR Type = FRX_BLDR_MEMBERDATATYPE AND ;
  58511.                  Name == FRX_BLDR_NAMESPACE_ADVANCEDPROPS AND ;
  58512.                  (ExecWhen == FRX_BLDR_ADVPROP_INSTANCE_NORENDER AND ;
  58513.                  NOT EMPTY(Execute))  OR ;
  58514.                  (ExecWhen == FRX_BLDR_ADVPROP_PREPROCESS_NORENDER)
  58515.       IF NOT EOF()
  58516.          m.llNeedThisGFX = .T.
  58517.       ENDIF
  58518.    ENDIF
  58519.    IF m.llNeedThisGFX
  58520.       THIS.addCollectionMember(;
  58521.            THIS.gfxNoRenderClass,;
  58522.            THIS.gfxNoRenderClassLib,;
  58523.            THIS.gfxNoRenderModule, .T., .T.)
  58524.       IF NOT THIS.checkCollectionForSpecifiedMember(;
  58525.            THIS.gfxNoRenderClass,;
  58526.            THIS.gfxNoRenderClassLib, .T.)
  58527.            THIS.DoMessage(OUTPUTFX_CONDITIONALRENDERING_UNAVAILABLE_LOC,MB_ICONEXCLAMATION)
  58528.       ENDIF
  58529.    ENDIF         
  58530.    IF USED("FRX")
  58531.       SELECT FRX
  58532.    ENDIF
  58533. ENDIF
  58534. ENDPROC
  58535. PROCEDURE ensurecollection
  58536. LPARAMETERS m.tlGFXs
  58537. IF m.tlGFXs
  58538.    IF VARTYPE(THIS.GFXs) # "O" OR ;
  58539.       (NOT UPPER(THIS.GFXs.BaseClass) == "COLLECTION")
  58540.       THIS.GFXs = CREATEOBJECT("Collection")
  58541.    ENDIF
  58542.    IF VARTYPE(THIS.FXs) # "O" OR ;
  58543.       (NOT UPPER(THIS.FXs.BaseClass) == "COLLECTION")
  58544.       THIS.FXs = CREATEOBJECT("Collection")    
  58545.    ENDIF
  58546. ENDIF
  58547. ENDPROC
  58548. PROCEDURE setgdiplusgraphics
  58549. LPARAMETERS tnHandle
  58550. IF VARTYPE(THIS.FFCGraphics) = "O"
  58551.    THIS.FFCGraphics.SetHandle(tnHandle)
  58552. ENDIF
  58553. This.sharedGdiplusGraphics = tnHandle
  58554. This.nExternalGdiPlusGfx   = tnHandle
  58555. * THIS.GDIPlusGraphics = tnHandle
  58556. ENDPROC
  58557. PROCEDURE quietmode_assign
  58558. LPARAMETERS m.vNewVal
  58559. DODEFAULT(m.vNewVal)
  58560. IF THIS.loadFRXCursor AND (NOT ISNULL(THIS.FRXCursor))
  58561.    THIS.FRXCursor.QuietMode = THIS.QuietMode
  58562. ENDIF   
  58563. IF NOT ISNULL(THIS.FFCGraphics)
  58564.    THIS.FFCGraphics.QuietOnError = THIS.QuietMode
  58565. ENDIF      
  58566. ENDPROC
  58567. PROCEDURE ClearStatus
  58568. THIS.sendFX(PROGRAM())  
  58569. ENDPROC
  58570. PROCEDURE resetcallevaluatecontents
  58571. * abstract, note that fx and gfx objects already
  58572. * have an opportunity via sendFX call.
  58573. ENDPROC
  58574. PROCEDURE resetcalladjustobjectsize
  58575. * abstract, note that fx and gfx objects already
  58576. * have an opportunity via sendFX call.
  58577. ENDPROC
  58578. PROCEDURE UpdateStatus
  58579. THIS.sendFX(PROGRAM())  
  58580. NODEFAULT
  58581. ENDPROC
  58582. PROCEDURE DoStatus
  58583. LPARAMETERS m.cMessage
  58584. THIS.sendFX(PROGRAM(),m.cMessage)  
  58585. NODEFAULT
  58586. ENDPROC
  58587. PROCEDURE Init
  58588. IF DODEFAULT()
  58589.    THIS.AppName = OUTPUTFX_APPNAME_LOC
  58590.    THIS.Name = "FX" + SYS(2015)
  58591.    THIS.createHelperObjects()
  58592.    *&* THIS.getFeedbackFXObject(.T.)
  58593.    RETURN .F.   
  58594. ENDIF
  58595. RETURN NOT THIS.hadError 
  58596. ENDPROC
  58597. PROCEDURE LoadReport
  58598. * always start with full reset for this run:
  58599. THIS.CallAdjustObjectSize = LISTENER_CALLDYNAMICMETHOD_NEVER
  58600. THIS.CallEvaluateContents = LISTENER_CALLDYNAMICMETHOD_NEVER
  58601. THIS.commandClausesFile = THIS.CommandClauses.File
  58602. * see notes in BeforeReport
  58603. THIS.setFRXDataSessionEnvironment() 
  58604. THIS.createHelperObjects()
  58605. THIS.checkCollectionMembers()
  58606. THIS.sendFX(PROGRAM())  
  58607. *!*    Fix by Cathy Pountney
  58608. *!*    http://cathypountney.blogspot.com/2009/04/set-talk-appears-to-be-on-when-running.html
  58609. * Modify the fxListener class of the _ReportListener class library and change the code in 
  58610. * the LoadReport method. 
  58611. * Simply move This.setFRXDataSessionEnvironment() so it comes before This.createHelperObjects()
  58612. * and the problem is solved.  
  58613. * Original code:
  58614. *!*    THIS.createHelperObjects()
  58615. *!*    THIS.checkCollectionMembers()
  58616. *!*    THIS.setFRXDataSessionEnvironment() 
  58617. *!*    THIS.sendFX(PROGRAM())  
  58618. NODEFAULT
  58619. RETURN DODEFAULT() && these changes can be passed on to successors
  58620. ENDPROC
  58621. PROCEDURE BeforeReport
  58622. THIS.setFRXDataSession()
  58623. IF (NOT THIS.IsSuccessor)
  58624.    THIS.createMemberDataCursor()  
  58625.    IF NOT ISNULL(THIS.successor)
  58626.       THIS.successor.AddProperty("memberDataAlias",THIS.memberDataAlias)
  58627.    ENDIF               
  58628. ENDIF       
  58629. * second opportunity to create FX and GFX objects,
  58630. * in case some are needed that were not needed before:
  58631. THIS.checkCollectionMembers(.T.)
  58632. * second opportunity to create non-optional helper members,
  58633. * in case some are needed that were not needed before,
  58634. * Any items that would have been required for
  58635. * FX/GFX-specific use should already have been created during
  58636. * LoadReport, so this set of calls is "backwards" 
  58637. * from LoadReport pairing:
  58638. THIS.createHelperObjects(.T.)
  58639. * note: at this point,
  58640. * the FX and GFX objects have 
  58641. * an opportunity to
  58642. * adjust items such as CallAdjustObjectSize, CallEvaluateContents, TwoPassProcess
  58643. THIS.sendFX(PROGRAM())  
  58644. NODEFAULT
  58645. RETURN DODEFAULT()
  58646. ENDPROC
  58647. PROCEDURE AfterReport
  58648. THIS.sendFX(PROGRAM())  
  58649. NODEFAULT
  58650. RETURN DODEFAULT()
  58651. ENDPROC
  58652. PROCEDURE UnloadReport
  58653. THIS.sendFX(PROGRAM())  
  58654. THIS.CommandClauses.File = THIS.commandClausesFile 
  58655. THIS.commandClausesFile = NULL
  58656. RETURN DODEFAULT()
  58657. ENDPROC
  58658. PROCEDURE BeforeBand
  58659. LPARAMETERS m.nBandObjCode, m.nFRXRecNo
  58660. IF m.nBandObjCode = FRX_OBJCOD_PAGEHEADER  ;
  58661.    AND THIS.GFXs.Count > 0
  58662.    THIS.FFCGraphics.SetHandle(THIS.GDIPlusGraphics)
  58663. ENDIF
  58664. THIS.sendFX(PROGRAM(),m.nBandObjCode, m.nFRXRecNo)  
  58665. NODEFAULT
  58666. RETURN DODEFAULT(m.nBandObjCode, m.nFRXRecNo)
  58667. ENDPROC
  58668. PROCEDURE AfterBand
  58669. LPARAMETERS m.nBandObjCode, m.nFRXRecNo
  58670. THIS.sendFX(PROGRAM(),m.nBandObjCode, m.nFRXRecNo)  
  58671. NODEFAULT
  58672. RETURN DODEFAULT(m.nBandObjCode, m.nFRXRecNo)
  58673. ENDPROC
  58674. PROCEDURE EvaluateContents
  58675. LPARAMETERS m.nFRXRecno, m.oObjProperties
  58676. THIS.sendFX(PROGRAM(),m.nFRXRecno, m.oObjProperties)
  58677. NODEFAULT
  58678. IF (NOT ISNULL(THIS.Successor))
  58679.    THIS.SetSuccessorDynamicProperties()
  58680.    THIS.Successor.EvaluateContents(m.nFRXRecno, m.oObjProperties)
  58681. ENDIF
  58682. DODEFAULT(m.nFRXRecno, m.oObjProperties)
  58683. ENDPROC
  58684. PROCEDURE AdjustObjectSize
  58685. LPARAMETERS m.nFRXRecno, m.oObjProperties
  58686. THIS.sendFX(PROGRAM(),m.nFRXRecno, m.oObjProperties)
  58687. NODEFAULT
  58688. IF (NOT ISNULL(THIS.Successor))
  58689.    THIS.SetSuccessorDynamicProperties()
  58690.    THIS.Successor.AdjustObjectSize(m.nFRXRecno, m.oObjProperties)
  58691. ENDIF
  58692. DODEFAULT(m.nFRXRecno, m.oObjProperties)
  58693. ENDPROC
  58694. PROCEDURE Render
  58695. LPARAMETERS m.nFRXRecno, m.nLeft, m.nTop, m.nWidth, m.nHeight, ;
  58696.             m.nObjectContinuationType, m.cContentsToBeRendered, m.GDIPlusImage
  58697. LOCAL m.liDefaultBehavior,m.llNeedGFXs, m.lnState
  58698. LOCAL lhGfx
  58699. * lhGfx = IIF(This.GDIPlusGraphics > 0, This.GDIPlusGraphics, This.nExternalGdiPlusGfx)
  58700. lhGfx = This.GDIPlusGraphics
  58701. m.llNeedGFXs = (NOT THIS.IsSuccessor) AND THIS.GFXs.Count > 0 AND ;
  58702.                THIS.NeedGFXs(PROGRAM(),m.nFRXRecno, m.nLeft, m.nTop, m.nWidth, m.nHeight, ;
  58703.                m.nObjectContinuationType, m.cContentsToBeRendered, m.GDIPlusImage) ;
  58704.                AND (lhGfx > 0)
  58705. IF m.llNeedGFXs
  58706.    THIS.FFCGraphics.SetHandle(lhGfx)
  58707.    * done in BeforeBand for the page header
  58708.    * for GFX objects, in case they (for any reason) choose to
  58709.    * manipulate the page in other methods than Render.
  58710.    * but we'll do it again here.
  58711.    THIS.FFCGraphics.Save(@m.lnState)
  58712. ENDIF
  58713.           
  58714. m.liDefaultBehavior = ;
  58715.     THIS.sendFX(PROGRAM(),m.nFRXRecNo,;
  58716.                 @m.nLeft,@m.nTop,@m.nWidth,@m.nHeight,;
  58717.                 @m.nObjectContinuationType, ;
  58718.                 @m.cContentsToBeRendered, @m.GDIPlusImage)
  58719. NODEFAULT
  58720. * note that FX objects get the args passed by reference, 
  58721. * however the GFX objects
  58722. * should not be seeking to change these args and 
  58723. * receive the args passed by value. Their
  58724. * job is to draw, not to change what is drawn by others or the base.
  58725.                    
  58726. DO CASE
  58727.        
  58728. CASE m.llNeedGFXs AND ;
  58729.      m.liDefaultBehavior = OUTPUTFX_BASERENDER_RENDER_BEFORE_RESTORE
  58730.      
  58731.      DODEFAULT( m.nFRXRecno, m.nLeft, m.nTop, m.nWidth, m.nHeight, ;
  58732.             m.nObjectContinuationType, m.cContentsToBeRendered, m.GDIPlusImage)
  58733.      THIS.FFCGraphics.Restore(m.lnState)
  58734. CASE m.llNeedGFXs AND ;
  58735.      m.liDefaultBehavior >= OUTPUTFX_BASERENDER_NORENDER
  58736.      THIS.FFCGraphics.Restore(m.lnState)                        
  58737.      IF (NOT ISNULL(THIS.Successor))
  58738.         THIS.SetSuccessorDynamicProperties()
  58739.         THIS.Successor.Render(m.nFRXRecno, m.nLeft, m.nTop, m.nWidth, m.nHeight, ;
  58740.              m.nObjectContinuationType, m.cContentsToBeRendered, m.GDIPlusImage)
  58741.      ENDIF
  58742.                
  58743. CASE m.llNeedGFXs && OUTPUTFX_BASERENDER_AFTERRESTORE, ;
  58744.                   && OUTPUTFX_DEFAULT_RENDER_BEHAVIOR
  58745.      THIS.FFCGraphics.Restore(m.lnState)
  58746.      DODEFAULT( m.nFRXRecno, m.nLeft, m.nTop, m.nWidth, m.nHeight, ;
  58747.                 m.nObjectContinuationType, m.cContentsToBeRendered, m.GDIPlusImage)
  58748. OTHERWISE  && no GFX behavior at all, just base behavior
  58749.      DODEFAULT( m.nFRXRecno, m.nLeft, m.nTop, m.nWidth, m.nHeight, ;
  58750.                 m.nObjectContinuationType, m.cContentsToBeRendered, m.GDIPlusImage)
  58751. ENDCASE
  58752. RETURN m.liDefaultBehavior
  58753. ENDPROC
  58754. PROCEDURE Destroy
  58755. STORE NULL TO THIS.FXs, THIS.GFXs, THIS.FFCGraphics, ;
  58756.       THIS.FRXCursor
  58757. DODEFAULT()
  58758. ENDPROC
  58759. PROCEDURE CancelReport
  58760. IF THIS.FXs.Count > 0
  58761.    THIS.sendFX(PROGRAM())  
  58762.    IF THIS.cancelRequested
  58763.       DODEFAULT()
  58764.    ELSE
  58765.       NODEFAULT
  58766.    ENDIF
  58767.    DODEFAULT()
  58768. ENDIF      
  58769. ENDPROC
  58770. PROCEDURE allowmodalmessages_assign
  58771. LPARAMETERS m.vNewVal
  58772. IF VARTYPE(m.vNewVal) = "L"
  58773.    THIS.AllowModalMessages = m.vNewVal
  58774. ENDIF   
  58775. ENDPROC
  58776. PROCEDURE lignoreerrors_assign
  58777. LPARAMETERS m.vNewVal
  58778. IF VARTYPE(m.vNewVal) = "L"
  58779.    THIS.lIgnoreErrors = m.vNewVal
  58780. ENDIf   
  58781. ENDPROC
  58782. PROCEDURE prepareerrormessage
  58783. LPARAMETERS m.nError, m.cMethod, m.nLine, m.cName, m.cMessage, m.cCodeLine
  58784. LOCAL m.lcErrorMessage, m.lcCodeLineMsg
  58785. IF VARTYPE(cMessage) = "C"
  58786.    m.lcErrorMessage = m.cMessage
  58787.    m.lcErrorMessage = MESSAGE()
  58788. ENDIF
  58789. m.lcErrorMessage = m.lcErrorMessage + CHR(13) + CHR(13)
  58790. IF VARTYPE(cName) = "C"
  58791.    m.lcErrorMessage = m.lcErrorMessage + m.cName
  58792.    m.lcErrorMessage = m.lcErrorMessage + this.Name
  58793. ENDIF
  58794. m.lcErrorMessage = m.lcErrorMessage + CHR(13)+ ;
  58795.           OUTPUTCLASS_ERRNOLABEL_LOC +ALLTRIM(STR(m.nError))+CHR(13)+ ;
  58796.          OUTPUTCLASS_ERRPROCLABEL_LOC +LOWER(ALLTRIM(m.cMethod))
  58797. IF VARTYPE(m.cCodeLine) = "C"
  58798.    m.lcCodeLineMsg = m.cCodeLine
  58799.    m.lcCodeLineMsg = MESSAGE(1)
  58800. ENDIF        
  58801. IF BETWEEN(m.nLine,1,100000) AND NOT m.lcCodeLineMsg="..."
  58802.     m.lcErrorMessage= ;
  58803.        m.lcErrorMessage+CHR(13)+ OUTPUTCLASS_ERRLINELABEL_LOC+ ;
  58804.         ALLTRIM(STR(m.nLine))
  58805.     IF NOT EMPTY(m.lcCodeLineMsg)
  58806.        m.lcErrorMessage= ;
  58807.            m.lcErrorMessage+CHR(13)+CHR(13)+m.lcCodeLineMsg
  58808.     ENDIF
  58809. ENDIF
  58810. RETURN m.lcErrorMessage
  58811. ENDPROC
  58812. PROCEDURE pushglobalsets
  58813.   * abstract: set any globals here that aren't session-bound
  58814. ENDPROC
  58815. PROCEDURE popglobalsets
  58816. * abstract: restore any globals here that aren't session-bound      
  58817. ENDPROC
  58818. PROCEDURE clearerrors
  58819. THIS.HadError = .F.
  58820. THIS.LastErrorMessage = ""
  58821. ENDPROC
  58822. PROCEDURE getlasterrormessage
  58823. RETURN STRTRAN(THIS.LastErrorMessage, CHR(13), " ")
  58824. ENDPROC
  58825. PROCEDURE addreport
  58826. LPARAMETERS m.tcFRXName, m.tcClauses, m.toListener
  58827. * can this one be done while report is running?
  58828. * Possibly yes because we're always adding to the end.
  58829. IF VARTYPE(m.tcFrxName) = "C" AND ;
  58830.    (FILE(m.tcFRXName) OR FILE(FORCEEXT(m.tcFRXName,"FRX")) OR FILE(FORCEEXT(m.tcFRXName,"LBX")))
  58831.    * If any is null, create all collections
  58832.    * always add to all three collections
  58833.    * to keep them in synch
  58834.    IF ISNULL(THIS.ReportFileNames) OR ;
  58835.       ISNULL(THIS.ReportClauses) OR ;
  58836.       ISNULL(THIS.Listeners) 
  58837.       * start fresh
  58838.       * this *shouldn't* be a datasession problem
  58839.       * unless they're doing it from inside a form,
  58840.       * but JIC:
  58841.       LOCAL liSession
  58842.       m.liSession = SET("DATASESSION")
  58843.       THIS.resetDataSession()
  58844.       THIS.ReportFileNames = CREATEOBJECT("Collection")
  58845.       THIS.ReportClauses = CREATEOBJECT("Collection")
  58846.       THIS.Listeners = CREATEOBJECT("Collection")
  58847.       DIME THIS.ReportPages[1]
  58848.       SET DATASESSION TO (m.liSession)
  58849.    ENDIF
  58850.    THIS.ReportFileNames.Add(m.tcFRXName)
  58851.    DIME THIS.ReportPages[THIS.ReportFileNames.Count]
  58852.    THIS.ReportPages[THIS.ReportFileNames.Count] = 0
  58853.    IF VARTYPE(m.tcClauses) = "C"
  58854.       THIS.ReportClauses.Add(m.tcClauses)
  58855.    ELSE
  58856.       THIS.ReportClauses.Add("")   
  58857.    ENDIF
  58858.    IF TYPE("toListener.BaseClass") = "C" AND ;
  58859.       UPPER(toListener.BaseClass) == "REPORTLISTENER"
  58860.       THIS.Listeners.Add(toListener)
  58861.    ELSE
  58862.       THIS.Listeners.Add(NULL)      
  58863.    ENDIF
  58864.    * TBD: should we error here?   
  58865. ENDIF   
  58866. ENDPROC
  58867. PROCEDURE removereports
  58868. IF NOT (THIS.IsRunningReports)
  58869.    THIS.ReportFileNames = NULL
  58870.    THIS.ReportClauses = NULL
  58871.    THIS.Listeners = NULL
  58872.    DIME THIS.ReportPages[1]
  58873.    THIS.ReportPages[1] = 0
  58874. ENDIF   
  58875. ENDPROC
  58876. PROCEDURE runreports
  58877. LPARAMETERS m.tlRemoveReportsAfterRun, m.tlOmitListenerReferences
  58878. IF NOT ;
  58879.  (THIS.IsRunningReports OR ;
  58880.   ISNULL(THIS.ReportFileNames) OR ;
  58881.   THIS.ReportFileNames.Count = 0)
  58882.   LOCAL m.oError, m.liIndex, m.lcClauses, m.loListener, m.lcParse
  58883.   m.oError = NULL
  58884.   THIS.IsRunningReports = .T. 
  58885.   TRY 
  58886.     FOR m.liIndex = 1 TO THIS.ReportFileNames.Count
  58887.        * the clauses, filenames, and listener collections are 
  58888.        * protected properties, we're
  58889.        * taking care of how they match up, 
  58890.        * that FRXs exist, etc.
  58891.        m.lcClauses = UPPER(THIS.ReportClauses[m.liIndex])
  58892.        m.loListener = THIS.Listeners[m.liIndex]
  58893.        DO CASE 
  58894.        CASE " OBJE " $ STRTRAN(" "+m.lcClauses,"CT", " ") OR ;
  58895.             " OBJEC " $ " "+m.lcClauses OR ;
  58896.             m.tlOmitListenerReferences
  58897.           m.loListener = NULL  
  58898.           REPORT FORM (THIS.ReportFileNames[m.liIndex]) &lcClauses
  58899.           TRY
  58900.              m.lcParse = " " + STRTRAN(" "+m.lcClauses," OBJECT ", " OBJE ")
  58901.              m.lcParse = STRTRAN(m.lcParse," OBJEC ", " OBJE ")
  58902.              m.lcParse = SUBSTR(m.lcParse,AT(" OBJE ", m.lcParse)+5)        
  58903.              DO CASE
  58904.              CASE m.tlOmitListenerReferences
  58905.                 * we're going with old-style behavior for sure here
  58906.              CASE " TYPE " $ " " + m.lcClauses
  58907.                 m.lcParse = ALLTRIM(STRTRAN(" " + m.lcParse," TYPE ",""))
  58908.                 IF " " $ m.lcParse
  58909.                    m.lcParse = ALLTRIM(LEFT(m.lcParse,AT(" ",m.lcParse,1)))
  58910.                 ENDIF
  58911.                 IF VAL(m.lcParse) > 0
  58912.                    m.loListener = EVALUATE("_oReportOutput['" + m.lcParse+"']")
  58913.                 ENDIF
  58914.              OTHERWISE
  58915.                 m.lcParse = ALLTRIM(m.lcParse)
  58916.                 IF " " $ m.lcParse
  58917.                    m.lcParse = ALLTRIM(LEFT(m.lcParse,AT(" ",m.lcParse,1)))
  58918.                 ENDIF
  58919.                 m.loListener = EVALUATE(m.lcParse)         
  58920.              ENDCASE
  58921.           CATCH
  58922.              m.loListener = NULL
  58923.           ENDTRY   
  58924.        CASE ISNULL(loListener)
  58925.           REPORT FORM (THIS.ReportFileNames[m.liIndex]) &lcClauses  OBJECT THIS
  58926.           m.loListener = THIS
  58927.        OTHERWISE
  58928.           REPORT FORM (THIS.ReportFileNames[m.liIndex]) &lcClauses  OBJECT m.loListener
  58929.        ENDCASE
  58930.        
  58931.        THIS.adjustReportPagesInfo(m.liIndex, m.lcClauses, m.loListener)
  58932. *&* Sedna change: 
  58933. *&*  see new THIS.adjustReportPagesInfo method, to which we pass report index, clauses, and 
  58934. *&*  evaluated listener ref.  Original code here was:
  58935. *&*          IF NOT (" NOWA " $ STRTRAN(" "+m.lcClauses,"IT"," ") OR ;
  58936. *&*                  " NOWAI " $ " " + m.lcClauses) 
  58937. *&*             THIS.ReportPages[m.liIndex] = THIS.SharedPageTotal
  58938. *&*             * TBD: make this a two-column array with 
  58939. *&*             * output pages (responsive to RANGE clause)
  58940. *&*             * represented as well?
  58941. *&*          ENDIF
  58942.        
  58943.     ENDFOR
  58944.          
  58945.   CATCH TO m.oError
  58946.      LOCAL lcErrMsg
  58947.      IF (ISNULL(m.oError))
  58948.          lcErrMsg = MESSAGE() + CHR(13) + MESSAGE(1)
  58949.      ELSE
  58950.          lcErrMsg = THIS.PrepareErrorMessage(;
  58951.                m.oError.ErrorNo, ;
  58952.                m.oError.PROCEDURE, ;
  58953.                m.oError.LINENO, ;
  58954.                THIS.AppName, ;
  58955.                m.oError.MESSAGE, ;
  58956.                m.oError.LineContents)
  58957.      ENDIF
  58958.      THIS.DoMessage(lcErrMsg, MB_ICONSTOP)
  58959.      THIS.lastErrorMessage = lcErrMsg
  58960.      #IF OUTPUTCLASS_DEBUGGING
  58961.          SUSPEND
  58962.      #ENDIF                   
  58963.      EXIT  
  58964.   FINALLY
  58965.      THIS.IsRunningReports = .F.  
  58966.      IF m.tlRemoveReportsAfterRun
  58967.        THIS.RemoveReports()
  58968.      ENDIF  
  58969.      STORE NULL TO m.loListener, m.oError
  58970.   ENDTRY
  58971. ENDIF   
  58972. ENDPROC
  58973. PROCEDURE setfrxdatasessionenvironment
  58974. THIS.setFRXDataSession()
  58975. SET TALK OFF 
  58976. ENDPROC
  58977. PROCEDURE invokeoncurrentpass
  58978. RETURN .T.
  58979. ENDPROC
  58980. PROCEDURE resetdatasession
  58981. IF PEMSTATUS(This, "lDefaultMode", 5) AND (This.lDefaultMode = .F.)
  58982.     RETURN 
  58983. ENDIF
  58984. IF (THIS.listenerDataSession > -1) 
  58985.    TRY
  58986.       SET DATASESSION TO (THIS.listenerDataSession)
  58987.    CATCH WHEN .T.
  58988.       THIS.ResetToDefault("listenerDataSession")
  58989.       SET DATASESSION TO (THIS.listenerDataSession)      
  58990.    ENDTRY
  58991. ENDIF   
  58992. ENDPROC
  58993. PROCEDURE setfrxdatasession
  58994. IF PEMSTATUS(This, "lDefaultMode", 5) AND (This.lDefaultMode = .F.)
  58995.     RETURN 
  58996. ENDIF
  58997. IF (THIS.FRXDataSession > -1) AND (THIS.FRXDataSession # SET("DATASESSION"))
  58998.    TRY
  58999.       SET DATASESSION TO (THIS.FRXDataSession)
  59000.    CATCH WHEN .T.
  59001.       THIS.ResetToDefault("FRXDataSession")
  59002.       THIS.resetDataSession()
  59003.    ENDTRY
  59004. ENDIF   
  59005. ENDPROC
  59006. PROCEDURE setcurrentdatasession
  59007. IF PEMSTATUS(This, "lDefaultMode", 5) AND (This.lDefaultMode = .F.)
  59008.     RETURN 
  59009. ENDIF
  59010. IF (THIS.CurrentDataSession # SET("DATASESSION"))  
  59011.    TRY
  59012.       SET DATASESSION TO (THIS.CurrentDataSession)
  59013.    CATCH WHEN .T.
  59014.       THIS.ResetToDefault("CurrentDataSession")
  59015.       THIS.resetDataSession()
  59016.    ENDTRY
  59017. ENDIF   
  59018. ENDPROC
  59019. PROCEDURE quietmode_assign
  59020. LPARAMETERS m.vNewVal
  59021. IF VARTYPE(m.vNewVal) = "L"
  59022.    THIS.quietmode = m.vNewVal
  59023. ENDIF 
  59024. ENDPROC
  59025. PROCEDURE issuccessor_assign
  59026. LPARAMETERS m.vNewVal
  59027. IF VARTYPE(m.vNewVal) = "L"
  59028.    THIS.isSuccessor = m.vNewVal
  59029. ENDIF   
  59030. ENDPROC
  59031. PROCEDURE successor_assign
  59032. LPARAMETERS m.vNewVal
  59033. IF (NOT THIS.IsRunning) AND ;
  59034.    (ISNULL(m.vNewVal) OR ;
  59035.    (VARTYPE(m.vNewVal) = "O" AND UPPER(m.vNewVal.BaseClass) == "REPORTLISTENER"))
  59036.    THIS.Successor = m.vNewVal
  59037. ENDIF   
  59038. ENDPROC
  59039. PROCEDURE getfrxstartupinfo
  59040. THIS.SetFRXDataSession()
  59041. IF USED("FRX")
  59042.    SELECT FRX
  59043.    LOCATE FOR ObjType = FRX_OBJTYP_DATAENV AND ;
  59044.               Platform = FRX_PLATFORM_WINDOWS AND ;
  59045.               NOT DELETED()
  59046.    THIS.ReportUsesPrivateDataSession = Frx.Environ
  59047.    * could also use 
  59048.    * THIS.CommandClauses.StartDataSession # THIS.CurrentDataSession
  59049.    LOCATE FOR ObjType = FRX_OBJTYP_REPORTHEADER AND ;
  59050.                         Platform = FRX_PLATFORM_WINDOWS AND ;
  59051.                         NOT DELETED()
  59052.    THIS.frxHeaderRecno = RECNO("FRX")
  59053.    THIS.ReportUsesPrivateDataSession = .F.   
  59054.    THIS.frxHeaderRecno = -1
  59055. ENDIF   
  59056. THIS.SetCurrentDataSession()
  59057. IF THIS.reportUsesPrivateDataSession
  59058.    SET TALK OFF
  59059. ENDIF
  59060. THIS.DrivingAlias = UPPER(ALIAS())
  59061. This.cFoxyDrivingAlias = THIS.DrivingAlias && by Cesar Chalom
  59062. This.nFoxyDrivingDataSession = SET("Datasession")
  59063. ENDPROC
  59064. PROCEDURE setsuccessordynamicproperties
  59065. IF NOT THIS.isSuccessor
  59066.    THIS.sharedOutputPageCount = THIS.OutputPageCount
  59067.    THIS.sharedPageTotal = THIS.PageTotal
  59068.    THIS.sharedPageNo = THIS.PageNo
  59069.    THIS.sharedGdiplusGraphics = THIS.GDIPlusGraphics 
  59070. ENDIF
  59071. WITH THIS.Successor
  59072.    .CurrentPass = THIS.CurrentPass
  59073.    .TwoPassProcess = THIS.TwoPassProcess   
  59074.    .sharedOutputPageCount = THIS.sharedOutputPageCount
  59075.    .sharedPageTotal = THIS.sharedPageTotal   
  59076.    .sharedPageNo = THIS.sharedPageNo
  59077.    .sharedGdiplusGraphics  = THIS.sharedGdiplusGraphics
  59078.    .CallEvaluateContents = THIS.CallEvaluateContents
  59079.    .CallAdjustObjectSize = THIS.CallAdjustObjectSize
  59080. ENDWITH   
  59081. ENDPROC
  59082. PROCEDURE appname_assign
  59083. LPARAMETERS m.vNewVal
  59084. IF VARTYPE(m.vNewVal) = "C"
  59085.    THIS.appname = m.vNewVal
  59086. ENDIF   
  59087. ENDPROC
  59088. PROCEDURE sharedgdiplusgraphics_assign
  59089. LPARAMETERS m.vNewVal
  59090. IF VARTYPE(m.vNewVal) = "N"
  59091.    THIS.SharedGDIplusGraphics = m.vNewVal
  59092. ENDIF   
  59093. ENDPROC
  59094. PROCEDURE sharedpageheight_assign
  59095. LPARAMETERS m.vNewVal
  59096. IF VARTYPE(m.vNewVal) = "N"
  59097.    THIS.sharedPageHeight = m.vNewVal
  59098. ENDIF   
  59099. ENDPROC
  59100. PROCEDURE sharedpagewidth_assign
  59101. LPARAMETERS m.vNewVal
  59102. IF VARTYPE(m.vNewVal) = "N"
  59103.    THIS.sharedPageWidth = m.vNewVal
  59104. ENDIF   
  59105. ENDPROC
  59106. PROCEDURE listenertype_assign
  59107. LPARAMETERS m.vNewVal
  59108. IF THIS.SupportsListenerType(m.vNewVal) AND ;
  59109.    NOT THIS.IsRunning
  59110.    THIS.ListenerType = m.vNewVal
  59111. ENDIF
  59112. ENDPROC
  59113. PROCEDURE outputtype_assign
  59114. LPARAMETERS m.vNewVal
  59115. IF VARTYPE(m.vNewVal) = "N" AND NOT THIS.IsRunning
  59116.    THIS.OutputType = INT(m.vNewVal)
  59117.    IF THIS.SupportsListenerType(THIS.OutputType) 
  59118.       THIS.ListenerType = THIS.OutputType
  59119.    ENDIF    
  59120. ENDIF
  59121. ENDPROC
  59122. PROCEDURE sharedoutputpagecount_assign
  59123. LPARAMETERS m.vNewVal
  59124. IF VARTYPE(m.vNewVal) = "N"
  59125.    THIS.sharedOutputPageCount = m.vNewVal
  59126. ENDIF   
  59127. ENDPROC
  59128. PROCEDURE sharedpageno_assign
  59129. LPARAMETERS m.vNewVal
  59130. IF VARTYPE(m.vNewVal) = "N"
  59131.    THIS.sharedPageNo = m.vNewVal
  59132. ENDIF   
  59133. ENDPROC
  59134. PROCEDURE sharedpagetotal_assign
  59135. LPARAMETERS m.vNewVal
  59136. IF VARTYPE(m.vNewVal) = "N"
  59137.    THIS.sharedPageTotal = m.vNewVal
  59138. ENDIF   
  59139. ENDPROC
  59140. PROCEDURE setfrxrunstartupconditions
  59141. IF ISNULL(THIS.CommandClauses)
  59142.    THIS.CommandClauses = CREATEOBJECT("Empty")
  59143. ENDIF
  59144. IF TYPE("THIS.CommandClauses.NoDialog") # "L"
  59145.    ADDPROPERTY(THIS.CommandClauses,"NoDialog",.F.)
  59146. ENDIF      
  59147. * add anything critical during a run
  59148. * that might not be available, whether
  59149. * because this is a custom attribute
  59150. * or because public methods of ReportListener
  59151. * might be called outside a normal report run.
  59152. ENDPROC
  59153. PROCEDURE pagelimit_assign
  59154. LPARAMETERS m.tVal
  59155. IF VARTYPE(m.tVal) = "N" AND CEILING(m.tVal) > 0
  59156.    THIS.PageLimit = CEILING(m.tVal)
  59157. ELSE 
  59158.    THIS.PageLimit = -1        
  59159. ENDIF
  59160. ENDPROC
  59161. PROCEDURE pagetoplimit_assign
  59162. LPARAMETERS m.tVal
  59163. IF VARTYPE(m.tVal) = "N" AND CEILING(m.tVal) > 0
  59164.    THIS.PageTopLimit = CEILING(m.tVal)
  59165. ELSE 
  59166.    THIS.PageTopLimit = -1        
  59167. ENDIF
  59168. ENDPROC
  59169. PROCEDURE pagetaillimit_assign
  59170. LPARAMETERS m.tVal
  59171. IF VARTYPE(m.tVal) = "N" AND CEILING(m.tVal) > 0
  59172.    THIS.PageTailLimit = CEILING(m.tVal)
  59173. ELSE 
  59174.    THIS.PageTailLimit = -1        
  59175. ENDIF
  59176. ENDPROC
  59177. PROCEDURE pagelimitquietmode_assign
  59178. LPARAMETERS m.tVal
  59179. IF VARTYPE(m.tVal) = "L" 
  59180.    THIS.PageLimitQuietMode = m.tVal
  59181. ENDIF
  59182. ENDPROC
  59183. PROCEDURE pagelimitinsiderange_assign
  59184. LPARAMETERS m.tVal
  59185. IF VARTYPE(m.tVal) = "L" 
  59186.    THIS.PageLimitInsideRange = m.tVal
  59187. ENDIF
  59188. ENDPROC
  59189. PROCEDURE resetdynamicmethodcalls
  59190. *&* Sedna:
  59191. * poll Successor, who would
  59192. * have already run all this code on its
  59193. * own behalf:
  59194. IF INLIST(THIS.callAdjustObjectSize,;
  59195.           LISTENER_CALLDYNAMICMETHOD_CHECK_CODE,;
  59196.           LISTENER_CALLDYNAMICMETHOD_NEVER) 
  59197.    THIS.resetCallAdjustObjectSize()
  59198. ELSE  && already set to LISTENER_CALLDYNAMICMETHOD_ALWAYS, always call
  59199.   * leave alone
  59200. ENDIF   
  59201. IF INLIST(THIS.callEvaluateContents,;
  59202.           LISTENER_CALLDYNAMICMETHOD_CHECK_CODE,;
  59203.           LISTENER_CALLDYNAMICMETHOD_NEVER) 
  59204.    THIS.resetCallEvaluateContents()
  59205. ELSE  && already set to LISTENER_CALLDYNAMICMETHOD_ALWAYS, always call
  59206.   * leave alone
  59207. ENDIF   
  59208. IF NOT ISNULL(THIS.Successor) 
  59209.    IF PEMSTATUS(THIS.successor,"CallAdjustObjectSize",5) AND ;
  59210.       THIS.successor.CallAdjustObjectSize = LISTENER_CALLDYNAMICMETHOD_ALWAYS
  59211.       THIS.CallAdjustObjectSize = LISTENER_CALLDYNAMICMETHOD_ALWAYS
  59212.    ENDIF
  59213.    IF PEMSTATUS(THIS.successor,"CallEvaluateContents",5) AND ;
  59214.       THIS.successor.CallEvaluateContents = LISTENER_CALLDYNAMICMETHOD_ALWAYS
  59215.       THIS.CallEvaluateContents = LISTENER_CALLDYNAMICMETHOD_ALWAYS
  59216.    ENDIF      
  59217. ENDIF         
  59218. ENDPROC
  59219. PROCEDURE resetcalladjustobjectsize
  59220. * abstract, poll members
  59221. ENDPROC
  59222. PROCEDURE resetcallevaluatecontents
  59223. * abstract, poll members
  59224. ENDPROC
  59225. PROCEDURE sharedlistenertype_assign
  59226. LPARAMETERS vNewVal
  59227. IF VARTYPE(m.vNewVal) = "N" AND ;
  59228.    INLIST(m.vNewVal,LISTENER_TYPE_DEF,;
  59229.                     LISTENER_TYPE_PRN,;
  59230.                     LISTENER_TYPE_PRV,;
  59231.                     LISTENER_TYPE_PAGED,;
  59232.                     LISTENER_TYPE_ALLPGS)
  59233.    THIS.sharedListenerType = m.vNewVal
  59234. ENDIF   
  59235. ENDPROC
  59236. PROCEDURE commandclausesfile_assign
  59237. LPARAMETERS m.tvNewVal
  59238. IF VARTYPE(m.tvNewVal) = "C" AND ;
  59239.    FILE(m.tvNewVal) && not SYS(2000), could be built into an app
  59240.    THIS.commandClausesFile = m.tvNewVal
  59241.    THIS.commandClausesFile = NULL   
  59242. ENDIF   
  59243. ENDPROC
  59244. PROCEDURE preparefrxswapcopy
  59245. LPARAMETERS m.tcPath, m.tlKeepCopyOpen, m.tlAdjustCommandClausesInLoadReport
  59246. LOCAL m.lcPath, m.lcFile, m.liSession, m.lcAlias, m.liSelect, m.llSafety
  59247. m.lcFile = ""
  59248. m.liSession = SET("DATASESSION")
  59249. m.liSelect = 0
  59250.    THIS.setFRXDataSession()
  59251.    m.liSelect = SELECT(0)
  59252.    DO CASE
  59253.    CASE VARTYPE(m.tcPath) = "C" AND ;
  59254.       (NOT EMPTY(m.tcPath)) AND DIRECTORY(ADDBS(m.tcPath))
  59255.       m.lcPath = m.tcPath
  59256.    CASE NOT DIRECTORY(ADDBS(JUSTPATH(THIS.CommandClauses.FILE)))
  59257.       * report does not exist on disk
  59258.       * and its path has not been re-created in the
  59259.       * current environment, potentially with related
  59260.       * image directories, etc.
  59261.       m.lcPath = SYS(2023)
  59262.    CASE EMPTY(SYS(2000,THIS.CommandClauses.File)) 
  59263.       * report does not exist on disk
  59264.       m.lcPath = SYS(2023)
  59265.    OTHERWISE
  59266.       * whenever possible,
  59267.       * the best place for this copy will
  59268.       * always be in the same location as the
  59269.       * original FRX, for relative-pathing reasons.
  59270.       m.lcPath = JUSTPATH(THIS.CommandClauses.File)
  59271.    ENDCASE
  59272.    m.lcFile = FORCEEXT(FORCEPATH("F"+SYS(2015), m.lcPath),"FRX")
  59273.    IF USED("FRX") && this method should ordinarily
  59274.                   && be used as part of a report swap, and that
  59275.                   && means in LoadReport only.  FRX isn't used yet.
  59276.                   && But we'll provide this mechanism,
  59277.                   && in case somebody has a different reason
  59278.                   && to use this method at another 
  59279.                   && point in report processing -- 
  59280.                   && XML Listener has one,
  59281.                   && for example!
  59282.       SELECT 0
  59283.       CREATE CURSOR x (onefield l)
  59284.       * we're in the frxdatasession, this is safe
  59285.       CREATE REPORT (m.lcFile) FROM  (ALIAS()) && (DBF("x"))
  59286.       USE IN x
  59287.       SELECT 0
  59288.       USE (m.lcFile) EXCLUSIVE ALIAS (JUSTSTEM(m.lcFile))
  59289.       m.lcAlias = ALIAS()
  59290.       m.llSafety = (SET("SAFETY") == "ON")
  59291.       SET SAFETY OFF
  59292.       ZAP
  59293.       IF m.llSafety
  59294.          SET SAFETY ON
  59295.       ENDIF
  59296.       SELECT FRX
  59297.       SCAN ALL FOR NOT DELETED()
  59298.          SCATTER MEMVAR MEMO
  59299.          INSERT INTO (m.lcAlias) FROM MEMVAR
  59300.       ENDSCAN
  59301.       IF NOT m.tlKeepCopyOpen
  59302.          USE IN (m.lcAlias)
  59303.       ENDIF   
  59304.    ELSE
  59305.       * this is the normal swap mechanism
  59306.       * SYS(2000) may be empty but FILE() should not
  59307.       * be, even if this report was not on disk,
  59308.       * and CommandClauses.File should be fully-qualified.
  59309.       SELECT 0
  59310.       USE (THIS.CommandClauses.File) ;
  59311.         SHARED NOUPDATE ;
  59312.         ALIAS (JUSTSTEM(THIS.CommandClauses.File))
  59313.       m.lcAlias = ALIAS()
  59314.       SELECT * FROM (THIS.CommandClauses.File) ;
  59315.          WHERE NOT DELETED() ;
  59316.          INTO TABLE (m.lcFile)
  59317.       USE IN (m.lcAlias)
  59318.       IF NOT m.tlKeepCopyOpen
  59319.          m.lcAlias = JUSTSTEM(m.lcFile)
  59320.          * this should always work because of the way
  59321.          * we've defined the m.lcFile contents
  59322.          IF USED(m.lcAlias)
  59323.             USE IN (m.lcAlias)   
  59324.          ENDIF         
  59325.       ENDIF   
  59326.    ENDIF
  59327. CATCH WHEN .T.
  59328.    m.lcFile = ""
  59329. FINALLY
  59330.    IF (NOT (EMPTY(m.lcFile) OR EMPTY(SYS(2000,m.lcFile)))) AND ;
  59331.       m.tlAdjustCommandClausesInLoadReport AND ;
  59332.       NOT m.tlKeepCopyOpen
  59333.       THIS.CommandClauses.File = m.lcFile
  59334.    ENDIF 
  59335.    IF m.liSelect > 0
  59336.       SELECT (m.liSelect)
  59337.    ENDIF
  59338.    SET DATASESSION TO (m.liSession)      
  59339. ENDTRY      
  59340. RETURN m.lcFile
  59341. ENDPROC
  59342. PROCEDURE removefrxswapcopy
  59343. LPARAMETERS m.tcFile,m.tlRecycle
  59344. LOCAL m.lcRecyle, m.llResettingSharedCopy
  59345. IF EMPTY(m.tcFile) AND THIS.isFRXSwapCopyPresent()
  59346.    m.llResettingSharedCopy = .T.
  59347.    m.tcFile = THIS.CommandClauses.File
  59348. ENDIF
  59349. IF NOT EMPTY(m.tcFile)
  59350.    IF m.tlRecycle
  59351.       m.lcRecycle = " RECYCLE"
  59352.    ELSE
  59353.       m.lcRecycle = ""
  59354.    ENDIF      
  59355.    IF NOT EMPTY(SYS(2000,FORCEEXT(m.tcFile,"FRX")))
  59356.       ERASE (FORCEEXT(m.tcFile,"FRX")) &lcRecycle
  59357.    ENDIF      
  59358.    IF NOT EMPTY(SYS(2000,FORCEEXT(m.tcFile,"FRT")))
  59359.       ERASE (FORCEEXT(m.tcFile,"FRT")) &lcRecycle
  59360.    ENDIF      
  59361.    IF m.llResettingSharedCopy
  59362.       THIS.CommandClauses.File = THIS.commandClausesFile 
  59363.    ENDIF
  59364. ENDIF   
  59365. ENDPROC
  59366. PROCEDURE isfrxswapcopypresent
  59367. RETURN (NOT ISNULL(THIS.commandClausesFile)) AND ;
  59368.        (NOT EMPTY(THIS.commandClausesFile)) AND ;
  59369.        (TYPE("THIS.commandClauses.File") = "C") AND ;
  59370.        (NOT UPPER(THIS.commandClausesFile) == UPPER(THIS.CommandClauses.File))
  59371. ENDPROC
  59372. PROCEDURE adjustreportpagesinfo
  59373. LPARAMETERS m.tiReportIndex, m.tcClauses, m.toListener
  59374.    * this is a *sketch*.  There are lots of different ways you
  59375.    * could decide you wanted this to work.
  59376.    * Subclasses can make this a multi-column array with 
  59377.    * output pages (responsive to RANGE clause)
  59378.    * represented as well, decide when to accumulate and when not, 
  59379.    * or whether to set up a separate array col for 
  59380.    * curr page versus total page,
  59381.    * when to use listener ref data versus _PAGENO when a 
  59382.    * listener ref is available,
  59383.    * and if so how to deal with NORESET,
  59384.    * when to use the shared/writable versions of FFC's SharedPageNo 
  59385.    * and SharedPageTotal versus the readonly product versions, 
  59386.    * because they are more similar to _PAGENO and _PAGETOTAL,
  59387.    * whether page limits (top and tail) are significant, etc, etc, etc, etc.
  59388. IF m.tiReportIndex = 1 
  59389.    * adjust the columns however you want to use them...
  59390.    * in our version:
  59391.    IF ALEN(THIS.reportPages,2) < 2
  59392.       DIME THIS.reportPages(THIS.ReportFileNames.Count,2)
  59393.    ENDIF
  59394. ENDIF   
  59395. IF THIS.ReportFileNames.Count >= m.tiReportIndex
  59396.    IF ISNULL(m.toListener) 
  59397.       THIS.reportPages[m.tiReportIndex,1] = _PAGENO
  59398.    ELSE    
  59399.       THIS.reportPages[m.tiReportIndex,1] = m.toListener.PageNo 
  59400.    ENDIF
  59401.    IF m.tiReportIndex = 1
  59402.       THIS.reportPages[m.tiReportIndex,2] = THIS.reportPages[m.tiReportIndex,1]
  59403.    ELSE
  59404.       THIS.reportPages[m.tiReportIndex,2] = ;
  59405.          THIS.reportPages[m.tiReportIndex,1] + ;
  59406.          THIS.reportPages[m.tiReportIndex-1,2]
  59407.    ENDIF
  59408. ENDIF
  59409. ENDPROC
  59410. PROCEDURE shellexec
  59411. LPARAMETERS lcLink As String, lcAction As String, lcParms As String
  59412. IF EMPTY(lcLink)
  59413.     RETURN
  59414. ENDIF
  59415. IF NOT "\" $ lcLink
  59416.     lcLink = FULLPATH(lcLink)
  59417. ENDIF
  59418. lcAction = Iif(Empty(lcAction), "Open", lcAction)
  59419. lcParms = IIF(Empty(lcParms), "", lcParms)
  59420. Declare Integer ShellExecute In SHELL32.Dll Integer nWinHandle, String cOperation, String cFileName, String cParameters, String cDirectory, Integer nShowWindow
  59421. Declare Integer FindWindow In WIN32API String cNull,String cWinName
  59422. Return ShellExecute(FindWindow(0, _Screen.Caption), lcAction, lcLink, lcParms, Sys(2023), 1)
  59423. ENDPROC
  59424. PROCEDURE preparewatermark
  59425. * Watermarks
  59426. IF VARTYPE(_Screen.oFoxyPreviewer) = "O"
  59427.     LOCAL loFP
  59428.     loFP = _Screen.oFoxyPreviewer
  59429.     with This
  59430.         .cWatermarkImage        = loFP.cWatermarkImage
  59431.         .nWatermarkType         = loFP.nWatermarkType         && 1 = colored ; 2 = greyscale  (1)
  59432.         .nWatermarkTransparency = loFP.nWatermarkTransparency && 0 = transparent ; 1 = opaque (.25)
  59433.         .nWatermarkWidthRatio   = loFP.nWatermarkWidthRatio   && 0 - 1 (.75)
  59434.         .nWatermarkHeightRatio  = loFP.nWatermarkHeightRatio  && 0 - 1 (.75)
  59435.         IF (NOT FILE(.cWatermarkImage)) OR ;
  59436.                 (.nWatermarkTransparency = 0) OR ;
  59437.                 (.nWatermarkWidthRatio   = 0) OR ;
  59438.                 (.nWatermarkHeightRatio  = 0)
  59439.             .lUsingWatermark = .F.
  59440.         ELSE
  59441.             .lUsingWatermark = .T.
  59442.             LOCAL loBmp AS GpBitmap OF HOME() + "\ffc\_gdiplus.vcx"
  59443.             loBmp = CREATEOBJECT("GpBitmap")
  59444.             loBmp.CreateFromFile(This.cWatermarkImage)
  59445.             IF (This.nWatermarkTransparency < 1) OR ;
  59446.                     (This.nWatermarkType = 2) && 1 = colored ; 2 = greyscale
  59447.                 * Applying the effects if necessary
  59448.                 LOCAL loAtt   &&  AS GPATTRIB    OF "PR_GdiplusHelper.Prg"
  59449.                 LOCAL lcMatrix AS COLORMATRIX OF "PR_GdiplusHelper.Prg"
  59450.                 loAtt = NEWOBJECT("GpAttrib", "PR_GdiplusHelper.Prg")
  59451.                 IF This.nWatermarkType = 2 && 1 = colored ; 2 = greyscale
  59452.                     lcMatrix = loAtt.COLORMATRIX(;
  59453.                         .30, .30, .30,  0,  0, ;
  59454.                         .59, .59, .59,  0,  0, ;
  59455.                         .11, .11, .11,  0,  0, ;
  59456.                         0,   0,   0,  This.nWatermarkTransparency,  0, ;
  59457.                         0,   0,   0,  0,  1)
  59458.                 ELSE
  59459.                     lcMatrix = loAtt.COLORMATRIX(;
  59460.                         1,   0,   0,  0,  0, ;
  59461.                         0,   1,   0,  0,  0, ;
  59462.                         0,   0,   1,  0,  0, ;
  59463.                         0,   0,   0,  This.nWatermarkTransparency,  0, ;
  59464.                         0,   0,   0,  0,  1)
  59465.                 ENDIF
  59466.                 loAtt.ApplyColorMatrix(lcMatrix, loBmp, .F., 0xFFFFFF)
  59467.                 loAtt = NULL
  59468.             ENDIF
  59469.             * Clear the watermark bitmap object
  59470.             IF VARTYPE(This.oWatermarkBmp) = "O"
  59471.                 This.oWatermarkBmp.Destroy()
  59472.                 This.oWatermarkBmp = NULL
  59473.             ENDIF
  59474.             .oWatermarkBmp = loBmp
  59475.         ENDIF
  59476.     ENDWITH
  59477. ENDIF
  59478. ENDPROC
  59479. PROCEDURE IncludePageInOutput
  59480. LPARAMETERS m.nPageNo
  59481. LOCAL m.llInclude
  59482. IF (NOT THIS.isSuccessor) AND ;
  59483.    (THIS.PageLimit > 0) AND ;
  59484.    (THIS.PageNo > THIS.PageLimit)
  59485.    * note that nPageNo and the 
  59486.    * current CommandClauses.RangeFrom and RangeTo values
  59487.    * only refer to the current report, which
  59488.    * is potentially one of a series using NOPAGEEJECT.
  59489.    * THIS.PageNo refers to the overall number of pages that
  59490.    * have been run, across the multiple reports.
  59491.    IF NOT THIS.pageLimitQuietMode 
  59492.       THIS.DoMessage(OUTPUTCLASS_PAGELIMIT_LOC , MB_ICONEXCLAMATION)
  59493.    ENDIF      
  59494.    THIS.LastErrorMessage = OUTPUTCLASS_PAGELIMIT_LOC
  59495.    THIS.CancelReport()
  59496.    DO CASE
  59497.    CASE (THIS.isSuccessor) 
  59498.       * do not try to limit run unless
  59499.       * communicating with native engine
  59500.       m.llInclude = .T.
  59501.    CASE (THIS.PageTopLimit = -1) AND ;
  59502.         (THIS.PageTailLimit = -1)
  59503.       * no limits set        
  59504.       m.llInclude = .T.      
  59505.    CASE THIS.PageTopLimit = -1
  59506.      * only bottom end requested
  59507.       IF THIS.PageLimitInsideRange 
  59508.          m.llInclude = (THIS.PageNo <= THIS.PageTailLimit)      
  59509.       ELSE
  59510.          m.llInclude = (THIS.PageNo >= THIS.PageTailLimit)
  59511.       ENDIF         
  59512.    CASE THIS.PageTailLimit = -1
  59513.      * only top end requested
  59514.       IF THIS.PageLimitInsideRange 
  59515.          m.llInclude = (THIS.PageNo >= THIS.PageTopLimit)      
  59516.       ELSE
  59517.          m.llInclude = (THIS.PageNo <= THIS.PageTopLimit)
  59518.       ENDIF         
  59519.    OTHERWISE
  59520.       * both top and tail requested
  59521.       IF THIS.PageLimitInsideRange
  59522.          m.llInclude = BETWEEN(THIS.PageNo,THIS.PageTopLimit, THIS.PageTailLimit)
  59523.       ELSE
  59524.          m.llInclude = ((THIS.PageNo <= THIS.PageTopLimit) OR ;
  59525.                         (THIS.PageNo >= THIS.PageTailLimit))
  59526.       ENDIF                        
  59527.    ENDCASE      
  59528. ENDIF          
  59529. RETURN (m.llInclude AND DODEFAULT(m.nPageNo))
  59530. ENDPROC
  59531. PROCEDURE DoStatus
  59532. LPARAMETERS m.cMessage
  59533. NODEFAULT
  59534. IF NOT (THIS.QuietMode OR (THIS.IsRunning AND THIS.CommandClauses.Nodialog))
  59535.    IF THIS.TwoPassProcess AND THIS.CurrentPass = 0
  59536.       WAIT WINDOW NOWAIT OUTPUTCLASS_PREPSTATUS_LOC 
  59537.    ELSE
  59538.       IF VARTYPE(m.cMessage) = "C"
  59539.          DODEFAULT(m.cMessage)      
  59540.       ENDIF
  59541.    ENDIF
  59542. ENDIF
  59543. ENDPROC
  59544. PROCEDURE LoadReport
  59545. THIS.clearErrors()
  59546. THIS.setFRXDataSessionEnvironment()
  59547. THIS.resetDataSession()
  59548. THIS.frxHeaderRecno = -1
  59549. IF NOT ISNULL(THIS.Successor)
  59550.    WITH THIS.Successor
  59551.       .AddProperty("isSuccessor",.T.)
  59552.       .AddProperty("commandClausesFile",THIS.commandClausesFile )
  59553.       .PrintJobName = THIS.PrintJobName 
  59554.       .CommandClauses = THIS.CommandClauses
  59555.       .LoadReport()
  59556.    ENDWITH
  59557. ENDIF
  59558. ENDPROC
  59559. PROCEDURE ClearStatus
  59560. DODEFAULT()
  59561. IF NOT ISNULL(THIS.Successor)
  59562.    THIS.SetSuccessorDynamicProperties()
  59563.    THIS.Successor.ClearStatus()
  59564. ENDIF   
  59565. ENDPROC
  59566. PROCEDURE UpdateStatus
  59567. DODEFAULT()
  59568. IF NOT ISNULL(THIS.Successor)
  59569.    THIS.SetSuccessorDynamicProperties()
  59570.    THIS.Successor.UpdateStatus()
  59571. ENDIF   
  59572. ENDPROC
  59573. PROCEDURE UnloadReport
  59574. IF NOT THIS.IsSuccessor
  59575.    THIS.SharedPageWidth = THIS.GetPageWidth()
  59576.    THIS.SharedPageHeight = THIS.GetPageHeight()
  59577. ENDIF
  59578. THIS.resetDataSession()
  59579. IF NOT ISNULL(THIS.Successor)
  59580.    WITH THIS.Successor
  59581.       .FRXDataSession = THIS.FRXDataSession
  59582.       .CurrentDataSession = THIS.CurrentDataSession
  59583.       .TwoPassProcess = THIS.TwoPassProcess
  59584.       .CommandClauses = THIS.CommandClauses
  59585.       .SharedPageHeight = THIS.SharedPageHeight
  59586.       .SharedPageWidth = THIS.SharedPageWidth
  59587.       THIS.SetSuccessorDynamicProperties()      
  59588.       .UnloadReport()
  59589.       .IsSuccessor = .F.
  59590.    ENDWITH
  59591. ENDIF
  59592. ENDPROC
  59593. PROCEDURE CancelReport
  59594. IF NOT THIS.IsSuccessor
  59595.    DODEFAULT()
  59596.    NODEFAULT
  59597. ENDIF   
  59598. IF NOT ISNULL(THIS.Successor)
  59599.    THIS.SetSuccessorDynamicProperties()
  59600.    THIS.Successor.CancelReport()
  59601. ENDIF
  59602. ENDPROC
  59603. PROCEDURE AfterReport
  59604. IF NOT THIS.IsSuccessor
  59605.    THIS.SharedPageWidth = THIS.GetPageWidth()
  59606.    THIS.SharedPageHeight = THIS.GetPageHeight()
  59607. ENDIF
  59608. IF NOT ISNULL(THIS.Successor)
  59609.    WITH THIS.Successor
  59610.       .FRXDataSession = THIS.FRXDataSession
  59611.       .CurrentDataSession = THIS.CurrentDataSession
  59612.       .TwoPassProcess = THIS.TwoPassProcess
  59613.       .CommandClauses = THIS.CommandClauses
  59614.       .SharedPageHeight = THIS.SharedPageHeight
  59615.       .SharedPageWidth = THIS.SharedPageWidth
  59616.       THIS.SetSuccessorDynamicProperties()
  59617.       .AfterReport()
  59618.       .ResetToDefault("FRXDataSession")
  59619.       .ResetToDefault("CurrentDataSession")
  59620.       
  59621.    ENDWITH
  59622. ENDIF
  59623. IF NOT THIS.IsSuccessor
  59624.    NODEFAULT
  59625.    DODEFAULT()
  59626. ENDIF   
  59627. ENDPROC
  59628. PROCEDURE Init
  59629. THIS.listenerDataSession = SET("DATASESSION")  
  59630. * Watermarks
  59631. This.AddProperty("lUsingWatermark", .F.)
  59632. This.AddProperty("cWatermarkImage"       , "") && _goFP.cWaterMarkImage
  59633. This.AddProperty("nWatermarkType"        , 1)  && 1 = colored ; 2 = greyscale  (1)
  59634. This.AddProperty("nWatermarkTransparency", 0)  && 0 = transparent ; 1 = opaque (.25)
  59635. This.AddProperty("nWatermarkWidthRatio"  , 0)  && 0 - 1 (.75)
  59636. This.AddProperty("nWatermarkHeightRatio" , 0)  && 0 - 1 (.75)
  59637. This.AddProperty("oWatermarkBmp"         , NULL)
  59638. IF DODEFAULT() 
  59639.    THIS.AppName = OUTPUTCLASS_APPNAME_LOC + " - " + This.Class 
  59640.    RETURN .F.
  59641. ENDIF      
  59642. *&* Sedna
  59643. * this may be necessary if you
  59644. * modify and compile these classes in a build that
  59645. * does have the two native properties
  59646. * and then go back to use them with a version
  59647. * that does *not* have the native properties
  59648. * (it's possible to lose the custom definitions)
  59649. IF NOT PEMSTATUS(THIS,"CallEvaluateContents",5)
  59650.    THIS.AddProperty("CallEvaluateContents", LISTENER_CALLDYNAMICMETHOD_CHECK_CODE)
  59651. ENDIF   
  59652. IF NOT PEMSTATUS(THIS,"CallAdjustObjectSize",5)
  59653.    THIS.AddProperty("CallAdjustObjectSize", LISTENER_CALLDYNAMICMETHOD_CHECK_CODE)
  59654. ENDIF   
  59655. RETURN NOT THIS.HadError
  59656. ENDPROC
  59657. PROCEDURE BeforeBand
  59658. LPARAMETERS m.nBandObjCode, m.nFRXRecNo
  59659. IF NOT ISNULL(THIS.Successor)
  59660.    THIS.SetSuccessorDynamicProperties()
  59661.    THIS.Successor.BeforeBand(m.nBandObjCode, m.nFRXRecNo)
  59662. ENDIF
  59663. THIS.resetDataSession() 
  59664. ENDPROC
  59665. PROCEDURE DoMessage
  59666. LPARAMETERS m.cMessage,m.iParams,m.cTitle
  59667. NODEFAULT
  59668. IF THIS.QuietMode OR ;
  59669.   (THIS.IsRunning AND THIS.CommandClauses.NoDialog)
  59670.    * to emulate the base class behavior, do both checks,
  59671.    * in case the call to DoMessage() occurs
  59672.    * before the baseclass sets QuietMode .T. in response
  59673.    * to NoDialog at the beginning of the report run,
  59674.    * or after the baseclass re-sets Quietmode to .F.
  59675.    * at the end of the report run.
  59676.    RETURN 0
  59677.    IF THIS.AllowModalMessages
  59678.       IF VARTYPE(m.cTitle) = "C"
  59679.          RETURN MESSAGEBOX(TRANS(m.cMessage),VAL(TRANS(m.iParams)),m.cTitle)
  59680.       ELSE
  59681.          RETURN MESSAGEBOX(TRANS(m.cMessage),VAL(TRANS(m.iParams)),THIS.AppName)
  59682.       ENDIF
  59683.    ELSE
  59684.       THIS.DoStatus(m.cMessage)
  59685.       RETURN 0
  59686.    ENDIF
  59687. ENDIF   
  59688. ENDPROC
  59689. PROCEDURE Error
  59690. LPARAMETERS m.nError, m.cMethod, m.nLine
  59691. LOCAL m.lcOnError,m.lcErrorMsg,m.lcCodeLineMsg
  59692. THIS.HadError = .T.
  59693. IF this.lIgnoreErrors OR _vfp.StartMode>0
  59694.     RETURN .F.
  59695. ENDIF
  59696. m.lcOnError=UPPER(ALLTRIM(ON("ERROR")))
  59697. IF NOT EMPTY(m.lcOnError)
  59698.     m.lcOnError=STRTRAN(STRTRAN(STRTRAN(lcOnError,"ERROR()","nError"), ;
  59699.             "PROGRAM()","cMethod"),"LINENO()","nLine")
  59700.     &lcOnError
  59701.     RETURN
  59702. ENDIF
  59703. m.lcErrorMsg = THIS.PrepareErrorMessage(m.nError,m.cMethod, m.nLine)
  59704. THIS.LastErrorMessage = m.lcErrorMsg
  59705. THIS.DoMessage(m.lcErrorMsg, MB_ICONSTOP )
  59706. #IF OUTPUTCLASS_DEBUGGING
  59707.     ERROR m.nError
  59708. #ENDIF    
  59709. ENDPROC
  59710. PROCEDURE BeforeReport
  59711. THIS.setFRXRunStartupConditions()
  59712. THIS.getFRXStartupInfo()
  59713. THIS.resetDataSession()
  59714. IF NOT THIS.IsSuccessor
  59715.    THIS.sharedPageHeight = THIS.GetPageHeight()
  59716.    THIS.sharedPageWidth = THIS.GetPageWidth()
  59717.    THIS.sharedListenerType = THIS.ListenerType
  59718.    THIS.ResetToDefault("sharedPageNo")
  59719.    THIS.ResetToDefault("sharedPageTotal")
  59720.    THIS.ResetToDefault("sharedOutputPageCount")
  59721.    THIS.ResetToDefault("sharedGDIPlusGraphics")
  59722. ENDIF
  59723. IF NOT ISNULL(THIS.Successor)
  59724.    WITH THIS.Successor
  59725.       .AddProperty("sharedGDIPlusGraphics", THIS.sharedGDIPlusGraphics)      
  59726.       .AddProperty("sharedPageHeight", THIS.sharedPageHeight)
  59727.       .AddProperty("sharedPageWidth", THIS.sharedPageWidth)      
  59728.       .AddProperty("sharedOutputPageCount", THIS.sharedOutputPageCount)
  59729.       .AddProperty("sharedPageNo", THIS.sharedPageNo)      
  59730.       .AddProperty("sharedPageTotal", THIS.sharedPageTotal) 
  59731.       .AddProperty("sharedListenerType",THIS.ListenerType)               
  59732.        THIS.setSuccessorDynamicProperties()        
  59733.       .FRXDataSession = THIS.FRXDataSession
  59734.       .CurrentDataSession = THIS.CurrentDataSession
  59735.       .TwoPassProcess = THIS.TwoPassProcess
  59736.       .CommandClauses = THIS.CommandClauses
  59737.       .commandClausesFile = THIS.commandClausesFile 
  59738.       * doing the above line here because some dynamic
  59739.       * object may have adjusted it in the Load and we can
  59740.       * correct original value here.
  59741.       .BeforeReport()
  59742.    ENDWITH
  59743. ENDIF
  59744. *&* Sedna -- we want this *after* successor has run BeforeReport code,
  59745. *&* but some Successor.BeforeReport code might
  59746. *&* have an affect on Dynamics
  59747. THIS.resetDynamicMethodCalls()
  59748. *&* .. so we'll re-set those dynamic properties again afterwards
  59749. IF NOT ISNULL(THIS.Successor)
  59750.    WITH THIS.successor
  59751.        IF .CallEvaluateContents < THIS.CallEvaluateContents
  59752.           .CallEvaluateContents = THIS.CallEvaluateContents
  59753.        ENDIF
  59754.        IF .CallAdjustObjectSize < THIS.CallAdjustObjectSize
  59755.           .CallAdjustObjectSize = THIS.CallAdjustObjectSize
  59756.        ENDIF
  59757.    ENDWITH
  59758. ENDIF   
  59759. ENDPROC
  59760. PROCEDURE Destroy
  59761. * Clear the watermark bitmap object
  59762. IF VARTYPE(This.oWatermarkBmp) = "O"
  59763.     This.oWatermarkBmp.Destroy()
  59764.     This.oWatermarkBmp = NULL
  59765. ENDIF 
  59766. STORE NULL TO ;
  59767.   THIS.runCollector, ;
  59768.   THIS.Successor, ;
  59769.   THIS.Listeners, ;
  59770.   THIS.ReportClauses, ;
  59771.   THIS.ReportFileNames, ;
  59772.   THIS.PreviewContainer, ;
  59773.   THIS.CommandClauses
  59774. ENDPROC
  59775. PROCEDURE AfterBand
  59776. LPARAMETERS m.nBandObjCode, m.nFRXRecno
  59777. IF NOT ISNULL(THIS.Successor)
  59778.    THIS.SetSuccessorDynamicProperties()
  59779.    THIS.Successor.AfterBand(m.nBandObjCode, m.nFRXRecNo)
  59780. ENDIF
  59781. ENDPROC
  59782. PROCEDURE Render
  59783. LPARAMETERS m.nFRXRecno, m.nLeft, m.nTop, m.nWidth, m.nHeight, ;
  59784.             m.nObjectContinuationType, m.cContentsToBeRendered, m.GDIPlusImage
  59785. IF NOT ISNULL(THIS.Successor)
  59786.    THIS.SetSuccessorDynamicProperties()
  59787.    THIS.Successor.Render( m.nFRXRecno, m.nLeft, m.nTop, m.nWidth, m.nHeight, ;
  59788.                           m.nObjectContinuationType, m.cContentsToBeRendered, m.GDIPlusImage)
  59789. ENDIF
  59790. ENDPROC
  59791. PROCEDURE drawstringjustified
  59792. *************************************************************************************
  59793. ** Method: GpGraphics.DrawStringJustified
  59794. ** Draws the specified text string at the specified location with the specified Brush
  59795. ** and Font objects in a Full Justified format.
  59796. ** History:
  59797. **  2007/01/15: CChalom - Coded
  59798. **  2007/02/02: CChalom - Tweaked to work with ReportListener
  59799. **  2007/04/16: CChalom - Minor fixes for small sentences
  59800. **  2008/06/22: CChalom - Added some tweaks to allow better drawing on reports
  59801. **                        Added new flag - tlJustLast - that will forcely justify the last line
  59802. **  2010/09/22: CChalom - Adapted to include in the ReportListener and use the FFC _GdiPlus.vcx
  59803. *************************************************************************************
  59804. #DEFINE StringFormatFlagsDirectionRightToLeft 1 
  59805. #DEFINE StringFormatFlagsDirectionVertical  2 
  59806. #DEFINE StringFormatFlagsNoFitBlackBox   4 
  59807. #DEFINE StringFormatFlagsDisplayFormatControl 32 
  59808. #DEFINE StringFormatFlagsNoFontFallback   1024 
  59809. #DEFINE StringFormatFlagsMeasureTrailingSpaces 2048 
  59810. #DEFINE StringFormatFlagsNoWrap     4096 
  59811. #DEFINE StringFormatFlagsLineLimit    8192 
  59812. #DEFINE StringFormatFlagsNoClip     16384 
  59813. #DEFINE StringAlignmentNear 0 
  59814. #DEFINE StringAlignmentCenter 1 
  59815. #DEFINE StringAlignmentFar  2 
  59816. #DEFINE EMPTY_FLOAT            0h00000000
  59817. #DEFINE EMPTY_LONG            0h00000000
  59818. #DEFINE EMPTY_SHORT            0h0000
  59819. #DEFINE EMPTY_RECTANGLE        EMPTY_LONG+EMPTY_LONG+EMPTY_LONG+EMPTY_LONG
  59820. #DEFINE EMPTY_RECTANGLEF    EMPTY_FLOAT+EMPTY_FLOAT+EMPTY_FLOAT+EMPTY_FLOAT
  59821. #DEFINE EMPTY_POINT            EMPTY_LONG+EMPTY_LONG
  59822. #DEFINE EMPTY_POINTF        EMPTY_FLOAT+EMPTY_FLOAT
  59823. #DEFINE EMPTY_SIZE            EMPTY_LONG+EMPTY_LONG
  59824. #DEFINE EMPTY_SIZEF            EMPTY_FLOAT+EMPTY_FLOAT
  59825. #DEFINE EMPTY_METAFILEHEADER  EMPTY_LONG+EMPTY_LONG+EMPTY_LONG+EMPTY_LONG+;
  59826.                                 EMPTY_FLOAT+EMPTY_FLOAT+;
  59827.                                 EMPTY_LONG+EMPTY_LONG+EMPTY_LONG+EMPTY_LONG+;
  59828.                                 EMPTY_LONG+EMPTY_LONG+EMPTY_LONG+EMPTY_LONG
  59829. #DEFINE EMPTY_ICONINFO        EMPTY_LONG+EMPTY_LONG+EMPTY_LONG+EMPTY_LONG+EMPTY_LONG
  59830. #DEFINE EMPTY_BITMAP        EMPTY_LONG+EMPTY_LONG+EMPTY_LONG+EMPTY_LONG+EMPTY_SHORT+EMPTY_SHORT+EMPTY_LONG
  59831. LPARAMETERS tcString, ;
  59832.             toFont as GpFont of HOME() + "\ffc\_gdiplus.vcx", ;
  59833.             toBrush as GpSolidBrush of HOME() + "\ffc\_gdiplus.vcx", ;
  59834.             toRectangle as GpRectangle of HOME() + "\ffc\_gdiplus.vcx", ;
  59835.             tlJustLast as Boolean, ;
  59836.             toGfx as GpGraphics of HOME() + "\ffc\_gdiplus.vcx"
  59837. LOCAL lhFont, lhGraphics, lhBrush, lcRectF
  59838. LOCAL N, lnSpaceWidth, lnLineHeight, lcText
  59839. LOCAL wImg, hImg, x0, y0
  59840. LOCAL loGfxState AS xfcGraphicsState
  59841. LOCAL lhTempStrFormat, lhStringFormat
  59842. LOCAL lhLeftAlignHandle
  59843. LOCAL lhRightAlignHandle
  59844. LOCAL lnWords, lnWordWidth, lnChars, lcCurrWord, lcCutWord, lnReduce
  59845. LOCAL llEndOfSentence, lnWordsWidth, lnWordsinLine, lnCurrWord, lnCurrLine, lnX, lnY
  59846. LOCAL lnWidthofBetween, lnStringFormatHandle, llLast
  59847. #DEFINE TextRenderingHintAntiAlias        4
  59848. LOCAL loExc AS Exception
  59849.     m.X0   = m.toRectangle.x 
  59850.     m.Y0   = m.toRectangle.y
  59851.     m.wImg = m.toRectangle.w
  59852.     m.hImg = m.toRectangle.h
  59853.     * Save the current state of the graphics handle
  59854.     LOCAL lhGfxState
  59855.     m.lhGfxState = 0        
  59856.     m.toGfx.Save(@m.lhGfxState)
  59857.     * Store Gdi+ handles for MeasureString and DrawString
  59858.     m.lhFont     = m.toFont.GetHandle()
  59859.     m.lhGraphics = m.toGfx.GetHandle()
  59860.     m.lhBrush    = m.toBrush.GetHandle()
  59861.     * Obtain the Font Height to be used as Line Height
  59862.     m.lnLineHeight = FLOOR(m.toFont.GetHeight(m.toGfx))
  59863.     * Adjust the Text String to ease detection of Carriage Returns
  59864.     m.lcText = STRTRAN(m.tcString,CHR(13)+CHR(10), " <CR> ")
  59865.     m.lcText = STRTRAN(m.lcText,CHR(13), " <CR> ")
  59866.     m.lcText = STRTRAN(m.lcText,CHR(10), " <CR> ")
  59867.     m.lcText = m.lcText + " <LASTWORD> "
  59868.     * Ensure Measure String will bring the best measures possible
  59869.     * Set to AntiAlias
  59870.     =xfcGdipSetTextRenderingHint(m.lhGraphics, TextRenderingHintAntiAlias)
  59871.     * Create a String Format object with the Generic Typographic TO obtain
  59872.     *   the most accurate String measurements
  59873.     * Strange, but the recommended for this case is to use a "cloned" StringFormat
  59874.     STORE 0 TO m.lhTempStrFormat, m.lhStringFormat
  59875.     = xfcGdipStringFormatGetGenericTypographic(@m.lhTempStrFormat)
  59876.     = xfcGdipCloneStringFormat(m.lhTempStrFormat, @m.lhStringFormat)
  59877.     * Delete the Temporary StringFormat object created
  59878.     = xfcGdipDeleteStringFormat(m.lhTempStrFormat)
  59879.     * Allow the correct measuring of Spaces
  59880.     = xfcGdipSetStringFormatFlags(m.lhStringFormat, StringFormatFlagsMeasureTrailingSpaces)
  59881.     * Create a StringFormat for LeftAlignment
  59882.     m.lhLeftAlignHandle = 0
  59883.     = xfcGdipCreateStringFormat(0, 0, @m.lhLeftAlignHandle)
  59884.     = xfcGdipSetStringFormatAlign(m.lhLeftAlignHandle, StringAlignmentNear)
  59885.     * Create a StringFormat for RightAlignment
  59886.     m.lhRightAlignHandle = 0
  59887.     = xfcGdipCreateStringFormat(0, 0, @m.lhRightAlignHandle)
  59888.     = xfcGdipSetStringFormatAlign(m.lhRightAlignHandle, StringAlignmentFar)
  59889.     * Measure Space for the given font
  59890.     STORE EMPTY_RECTANGLE TO m.lcRectF, m.pcBoundingBox
  59891.     = xfcGdipMeasureString( m.lhGraphics;
  59892.         , STRCONV(" " + 0h00,5)    ;
  59893.         , 1 ;
  59894.         , m.lhFont ;
  59895.         , m.lcRectF ;
  59896.         , m.lhStringFormat ;
  59897.         , @m.pcBoundingBox, 0, 0)
  59898.     m.lnSpaceWidth = CTOBIN(SUBSTR(m.pcBoundingBox, 9, 4), 'N') + 1
  59899.     m.lnWords = GETWORDCOUNT(m.lcText)
  59900.     DIMENSION m.laWords(m.lnWords,2)
  59901.     * Measure each word
  59902.     m.n = 1
  59903.     DO WHILE .T.
  59904.         m.laWords(m.N,1) = GETWORDNUM(m.lcText, m.N)
  59905.         m.lcCurrWord = m.laWords(m.N,1)
  59906.         STORE EMPTY_RECTANGLE TO m.lcRectF, m.pcBoundingBox
  59907.         = xfcGdipMeasureString(m.lhGraphics;
  59908.             , STRCONV(m.lcCurrWord + 0h00,5)    ;
  59909.             , LENC(m.lcCurrWord) ;
  59910.             , m.lhFont ;
  59911.             , m.lcRectF ;
  59912.             , m.lhStringFormat ;
  59913.             , @m.pcBoundingBox, 0, 0)
  59914.         m.lnWordWidth = CTOBIN(SUBSTR(m.pcBoundingBox, 9, 4), 'N')
  59915.         IF m.lnWordWidth > m.wImg AND (NOT INLIST(m.lcCurrWord, "<CR>", "<LASTWORD>"))
  59916.             m.lnReduce = 1
  59917.             DO WHILE .T.
  59918.                 m.lnChars = ROUND((LENC(m.lcCurrWord) / (m.lnWordWidth / m.wImg)),0) - m.lnReduce
  59919.                 m.lcCutWord = SUBSTR(m.lcCurrWord, 1, m.lnChars)
  59920.                 STORE EMPTY_RECTANGLE TO m.lcRectF, m.pcBoundingBox
  59921.                 = xfcGdipMeasureString(m.lhGraphics;
  59922.                     , STRCONV(m.lcCutWord + 0h00,5)    ;
  59923.                     , LENC(m.lcCutWord) ;
  59924.                     , m.lhFont ;
  59925.                     , m.lcRectF ;
  59926.                     , m.lhStringFormat ;
  59927.                     , @m.pcBoundingBox, 0, 0)
  59928.                 m.lnWordWidth = CTOBIN(SUBSTR(m.pcBoundingBox, 9, 4), 'N')
  59929.                 m.laWords(m.N,1) = m.lcCutWord
  59930.                 IF m.lnWordWidth <= m.wImg
  59931.                     m.lnWords = m.lnWords + 1
  59932.                     DIMENSION m.laWords(m.lnWords,2)
  59933.                     m.laWords(m.lnWords,1) = ""
  59934.                     m.laWords(m.lnWords,2) = 0
  59935.                     
  59936.                     m.lcText = STRTRAN(m.lcText, m.lcCurrWord, ;
  59937.                         m.lcCutWord + SPACE(1) + SUBSTR(m.lcCurrWord, m.lnChars + 1), ;
  59938.                         1, 1)
  59939.                     EXIT
  59940.                 ENDIF
  59941.                 m.lnReduce = m.lnReduce + 1    
  59942.             ENDDO
  59943.         ENDIF
  59944.         m.laWords(m.N,2) = m.lnWordWidth
  59945.         m.N = m.N + 1
  59946.         IF m.N > m.lnWords
  59947.             EXIT
  59948.         ENDIF
  59949.     ENDDO
  59950.     * Before we start drawing, it's wise to restore our Graphics object to
  59951.     *    its original state.
  59952.     * Put back the state of the graphics handle
  59953.     m.toGfx.Restore(m.lhGfxState)            
  59954.     * Start Drawing word by word
  59955.     m.lnCurrWord = 1
  59956.     m.lnCurrLine = 0
  59957.     LOCAL llLastLine
  59958.     m.llLastLine = .F.
  59959.     FOR m.N = 1 TO m.lnWords
  59960.         m.llEndOfSentence   = .F.
  59961.         m.lnWordsWidth  = 0
  59962.         m.lnWordsinLine = 0
  59963.         FOR m.z = m.N TO m.lnWords
  59964.             m.lcChar = LOWER(m.laWords(m.z,1))
  59965.             IF m.laWords(m.z,1) = "<CR>"
  59966.                 m.llEndOfSentence = .T.
  59967.                 EXIT
  59968.             ENDIF
  59969.                     
  59970.             IF m.laWords(m.z,1) = "<LASTWORD>"
  59971.                 m.llLastLine = .T.
  59972.                 m.lnWordsWidth = m.lnWordsWidth - (m.lnSpaceWidth * m.lnWordsinLine) + m.lnSpaceWidth
  59973.                 EXIT
  59974.             ENDIF 
  59975.             m.lnWordsWidth = m.lnWordsWidth + m.laWords(m.z,2) + m.lnSpaceWidth
  59976.             IF m.lnWordsWidth > m.wImg AND m.z > m.N
  59977.                 m.lnWordsWidth = m.lnWordsWidth - m.laWords(m.z,2) - (m.lnSpaceWidth * m.lnWordsinLine)
  59978.                 EXIT
  59979.             ENDIF
  59980.             m.lnWordsinLine = m.lnWordsinLine + 1
  59981.         ENDFOR
  59982.         m.lnWordsWidth = m.lnWordsWidth - m.lnSpaceWidth
  59983.         IF m.z >= m.lnWords
  59984.             m.llEndOfSentence = .T.
  59985.             m.llLastLine = .T.
  59986.         ENDIF
  59987.         IF m.llLastLine
  59988.             IF m.tlJustLast
  59989.                 m.lnWidthOfBetween = (m.wImg - m.lnWordsWidth - m.lnSpaceWidth) / (m.lnWordsinLine - 1)
  59990.             ELSE 
  59991.                 m.lnWidthOfBetween = m.lnSpaceWidth
  59992.             ENDIF 
  59993.         ELSE 
  59994.             IF m.llEndOfSentence
  59995.                 m.lnWidthOfBetween = m.lnSpaceWidth
  59996.             ELSE
  59997.                 m.lnWidthOfBetween = (m.wImg - m.lnWordsWidth - m.lnSpaceWidth) / (m.lnWordsinLine - 1)
  59998.             ENDIF
  59999.                     
  60000.         ENDIF 
  60001.         m.lnY = m.Y0 + (m.lnCurrLine * m.lnLineHeight)
  60002.         IF m.lnY > (m.hImg + m.Y0 - m.lnLineHeight / 2)
  60003.             m.n = m.lnWords
  60004.             EXIT
  60005.         ENDIF
  60006.         m.lnX = m.X0
  60007.         FOR m.lnCurrWord = 1 TO m.lnWordsinLine
  60008.             m.llLast = .F.
  60009.             IF m.laWords(m.N,1) = "<CR>" && Ignore
  60010.                 m.N = m.N + 1
  60011.                 LOOP
  60012.             ENDIF
  60013.             IF m.lnCurrWord = m.lnWordsinLine AND NOT m.llEndOfSentence
  60014.                 m.llLast = .T.
  60015.             ENDIF
  60016.             IF m.lnCurrWord = m.lnWordsinLine AND m.llLastLine AND m.tlJustLast
  60017.                 m.llLast = .T.
  60018.             ENDIF
  60019.             IF m.lnWordsInLine = 1
  60020.                 m.lnX = m.X0
  60021.                 m.llLast = .F.
  60022.             ENDIF
  60023.             IF m.llLast
  60024.                 m.lcRectF = BINTOC(m.X0,'F') + BINTOC(m.lnY,'F') + ;
  60025.                     BINTOC(m.wImg,'F') + BINTOC(m.lnY + m.lnLineHeight,'F')
  60026.                 m.lnStringFormatHandle = m.lhRightAlignHandle
  60027.             ELSE
  60028.                 m.lcRectF = BINTOC(m.lnX,'F') + BINTOC(m.lnY,'F') + REPLICATE(CHR(0),8)
  60029.                 m.lnStringFormatHandle = m.lhLeftAlignHandle
  60030.             ENDIF
  60031.             = xfcGdipDrawString(m.lhGraphics ;
  60032.                 , STRCONV(m.laWords(m.N,1) + 0h00,5) ;
  60033.                 , LEN(m.laWords(m.N,1)) ;
  60034.                 , m.lhFont ;
  60035.                 , m.lcRectF ;
  60036.                 , m.lnStringFormatHandle ;
  60037.                 , m.lhBrush)
  60038.             m.lnX = m.lnX + m.laWords(m.N,2) + m.lnWidthOfBetween
  60039.             m.N = m.N + 1 && Go to next word
  60040.         ENDFOR
  60041.         m.lnCurrLine = m.lnCurrLine + 1
  60042.         IF m.N >= m.lnWords
  60043.             EXIT
  60044.         ENDIF
  60045.         IF m.laWords(m.N,1) <> "<CR>"
  60046.             m.N = m.N - 1 && Compensate ENDFOR
  60047.         ENDIF
  60048.     ENDFOR
  60049.     * Finished Drawing, so erase the temp objects
  60050.     * Delete the StringFormat object created
  60051.     =xfcGdipDeleteStringFormat(m.lhStringFormat)
  60052.     =xfcGdipDeleteStringFormat(m.lhLeftAlignHandle)
  60053.     =xfcGdipDeleteStringFormat(m.lhRightAlignHandle)
  60054. CATCH TO m.loExc
  60055.     LOCAL loExc as Exception 
  60056.     MESSAGEBOX("Error drawing the justified string !" + CHR(13) + ;
  60057.         TRANSFORM(m.loExc.ERRORNO) + " - " + m.loExc.MESSAGE + CHR(13) + ;
  60058.         "Line: " + TRANSFORM(m.loExc.LINENO) + " - " + m.loExc.LINECONTENTS + CHR(13) + ;
  60059.         lcMsg)
  60060.     MESSAGEBOX(TRANSFORM(m.tcString), 16, "String that generated the error")
  60061.     SET STEP ON 
  60062. ENDTRY
  60063. RETURN NULL
  60064. ENDPROC
  60065. PROCEDURE drawstringintf
  60066. #UNDEF StringFormatFlagsDirectionRightToLeft
  60067. #UNDEF StringFormatFlagsDirectionVertical  
  60068. #UNDEF StringFormatFlagsNoFitBlackBox   
  60069. #UNDEF StringFormatFlagsDisplayFormatControl 
  60070. #UNDEF StringFormatFlagsNoFontFallback   
  60071. #UNDEF StringFormatFlagsMeasureTrailingSpaces 
  60072. #UNDEF StringFormatFlagsNoWrap     
  60073. #UNDEF StringFormatFlagsLineLimit    
  60074. #UNDEF StringFormatFlagsNoClip     
  60075. #UNDEF StringAlignmentNear 
  60076. #UNDEF StringAlignmentCenter 
  60077. #UNDEF StringAlignmentFar  
  60078. #DEFINE StringFormatFlagsDirectionRightToLeft 1
  60079. #DEFINE StringFormatFlagsDirectionVertical  2
  60080. #DEFINE StringFormatFlagsNoFitBlackBox   4
  60081. #DEFINE StringFormatFlagsDisplayFormatControl 32
  60082. #DEFINE StringFormatFlagsNoFontFallback   1024
  60083. #DEFINE StringFormatFlagsMeasureTrailingSpaces 2048
  60084. #DEFINE StringFormatFlagsNoWrap     4096
  60085. #DEFINE StringFormatFlagsLineLimit    8192
  60086. #DEFINE StringFormatFlagsNoClip     16384
  60087. #DEFINE StringAlignmentNear 0
  60088. #DEFINE StringAlignmentCenter 1
  60089. #DEFINE StringAlignmentFar  2
  60090. #DEFINE TextRenderingHintAntiAlias        4
  60091. #DEFINE EMPTY_FLOAT            0h00000000
  60092. #DEFINE EMPTY_LONG            0h00000000
  60093. #DEFINE EMPTY_SHORT            0h0000
  60094. #DEFINE EMPTY_RECTANGLE        EMPTY_LONG+EMPTY_LONG+EMPTY_LONG+EMPTY_LONG
  60095. #DEFINE EMPTY_RECTANGLEF    EMPTY_FLOAT+EMPTY_FLOAT+EMPTY_FLOAT+EMPTY_FLOAT
  60096. #DEFINE EMPTY_POINT            EMPTY_LONG+EMPTY_LONG
  60097. #DEFINE EMPTY_POINTF        EMPTY_FLOAT+EMPTY_FLOAT
  60098. #DEFINE EMPTY_SIZE            EMPTY_LONG+EMPTY_LONG
  60099. #DEFINE EMPTY_SIZEF            EMPTY_FLOAT+EMPTY_FLOAT
  60100. #DEFINE EMPTY_METAFILEHEADER  EMPTY_LONG+EMPTY_LONG+EMPTY_LONG+EMPTY_LONG+;
  60101.     EMPTY_FLOAT+EMPTY_FLOAT+;
  60102.     EMPTY_LONG+EMPTY_LONG+EMPTY_LONG+EMPTY_LONG+;
  60103.     EMPTY_LONG+EMPTY_LONG+EMPTY_LONG+EMPTY_LONG
  60104. #DEFINE EMPTY_ICONINFO        EMPTY_LONG+EMPTY_LONG+EMPTY_LONG+EMPTY_LONG+EMPTY_LONG
  60105. #DEFINE EMPTY_BITMAP        EMPTY_LONG+EMPTY_LONG+EMPTY_LONG+EMPTY_LONG+EMPTY_SHORT+EMPTY_SHORT+EMPTY_LONG
  60106. LPARAMETERS tnFRXRecNo, tnLeft, tnTop, tnWidth, tnHeight, tnObjectContinuationType, tcContentsToBeRendered, tiGDIPlusImage, ;
  60107.     tcFullText, ;
  60108.     tcFontName0, tnFontSize0 , tnFontStyle0, ;
  60109.     tnFillRed0 , tnFillGreen0, tnFillBlue0 , ;
  60110.     tnPenRed0  , tnPenGreen0 , tnPenBlue0
  60111. * Change the value of this variable to stop the execution when this word is being processed
  60112. LOCAL lcStep
  60113. m.lcStep = "ZZZZZZZZFOXYPREVIEWER"
  60114. LOCAL loFRXRecord, lnSelect
  60115. m.lnSelect = SELECT()
  60116. SELECT (This.cFRXAlias)
  60117. GO m.tnFRXRecNo
  60118. IF EOF()
  60119.      * SET STEP ON 
  60120.     RETURN
  60121. ENDIF
  60122. SCATTER NAME m.loFrxRec
  60123. SELECT (m.lnSelect)
  60124. LOCAL loExc AS Exception
  60125.     LOCAL lhTempStrFormat, lhStringFormat
  60126.     LOCAL lhLeftAlignHandle
  60127.     LOCAL lhRightAlignHandle
  60128.     LOCAL lcRectF, pcBoundingBox
  60129.     LOCAL loGfx as GpGraphics OF HOME() + "\FFC\_GdiPlus.vcx"
  60130.     m.loGfx = This.oGdiGraphics
  60131.     LOCAL lhGfx, lhFont
  60132.     m.lhGfx = m.loGfx.GetHandle()
  60133.     * Save the current state of the graphics handle
  60134.     LOCAL lhGfxState
  60135.     m.lhGfxState = 0
  60136.     m.loGfx.Save(@m.lhGfxState)
  60137.     * Ensure Measure String will bring the best measures possible
  60138.     * Set to AntiAlias
  60139.     =xfcGdipSetTextRenderingHint(m.lhGfx, TextRenderingHintAntiAlias)
  60140.     * Create a String Format object with the Generic Typographic TO obtain
  60141.     *   the most accurate String measurements
  60142.     * Strange, but the recommended for this case is to use a "cloned" StringFormat
  60143.     STORE 0 TO m.lhTempStrFormat, m.lhStringFormat
  60144.     = xfcGdipStringFormatGetGenericTypographic(@m.lhTempStrFormat)
  60145.     = xfcGdipCloneStringFormat(m.lhTempStrFormat, @m.lhStringFormat)
  60146.     * Delete the Temporary StringFormat object created
  60147.     = xfcGdipDeleteStringFormat(m.lhTempStrFormat)
  60148.     * Allow the correct measuring of Spaces
  60149.     = xfcGdipSetStringFormatFlags(m.lhStringFormat, StringFormatFlagsMeasureTrailingSpaces)
  60150.     * Create a StringFormat for LeftAlignment
  60151.     m.lhLeftAlignHandle = 0
  60152.     = xfcGdipCreateStringFormat(0, 0, @m.lhLeftAlignHandle)
  60153.     = xfcGdipSetStringFormatAlign(m.lhLeftAlignHandle, StringAlignmentNear)
  60154.     = xfcGdipSetStringFormatLineAlign(m.lhLeftAlignHandle, StringAlignmentFar)  && Force vertical alignment to bottom
  60155.     = xfcGdipSetStringFormatFlags(m.lhLeftAlignHandle, StringFormatFlagsMeasureTrailingSpaces)
  60156.     * Create a StringFormat for RightAlignment
  60157.     m.lhRightAlignHandle = 0
  60158.     = xfcGdipCreateStringFormat(0, 0, @m.lhRightAlignHandle)
  60159.     = xfcGdipSetStringFormatAlign(m.lhRightAlignHandle, StringAlignmentFar)
  60160.     * Generate the array of words
  60161.     This.TFProcess(m.tcFullText)
  60162.     LOCAL lnWords, lnMaxHeight
  60163.     m.lnWords     = ALEN(This.aTFWords, 1)
  60164.     m.lnMaxHeight = 0
  60165.     * Step 1:
  60166.     * Get the measures of all words according to the formatting
  60167.     LOCAL lcWord, lcFont, lnFontSize, lcFontStyle, lnRed, lnGreen, lnBlue, lnBackRed, lnBackGreen, lnBackBlue, n, lnStyle, lnLineHeight
  60168.     LOCAL lnWordWidth, lnWordHeight, lnFontHeight
  60169.     FOR m.n = 1 TO m.lnWords
  60170.         m.lcWord = This.aTFWords(m.n, 1)
  60171.         IF EMPTY(m.lcWord)
  60172.             This.aTFWords(m.n,  1) = ""
  60173.             This.aTFWords(m.n, 11) = 0
  60174.             This.aTFWords(m.n, 12) = 0
  60175.             LOOP
  60176.         ENDIF
  60177.         This.aTFWords(m.n, 1) = ALLTRIM(m.lcWord)
  60178.         m.lcFont      = This.aTFWords(m.n, 2)
  60179.         m.lnFontSize  = This.aTFWords(m.n, 3)
  60180.         m.lcFontStyle = EVL(This.aTFWords(m.n, 4), "")
  60181.         m.lnRed       = This.aTFWords(m.n, 5)
  60182.         m.lnGreen     = This.aTFWords(m.n, 6)
  60183.         m.lnBlue      = This.aTFWords(m.n, 7)
  60184.         IF m.lnRed    = -1
  60185.             This.aTFWords(m.n, 5) = MAX(0, m.tnPenRed0)
  60186.             This.aTFWords(m.n, 6) = MAX(0, m.tnPenGreen0)
  60187.             This.aTFWords(m.n, 7) = MAX(0, m.tnPenBlue0)
  60188.         ENDIF
  60189.         m.lnBackRed     = This.aTFWords(m.n, 8)
  60190.         m.lnBackGreen   = This.aTFWords(m.n, 9)
  60191.         m.lnBackBlue     = This.aTFWords(m.n, 10)
  60192.         IF m.lnBackRed = -1
  60193.             This.aTFWords(m.n, 8) = m.tnFillRed0
  60194.             This.aTFWords(m.n, 9) = m.tnFillGreen0
  60195.             This.aTFWords(m.n,10) = m.tnFillBlue0
  60196.         ENDIF
  60197.         * If the stored value is empty, then we'll use the default stored in the FRX field
  60198.         IF EMPTY(m.lcFont)
  60199.             m.lcFont = m.tcFontName0
  60200.             This.aTFWords(m.n, 2) = m.lcFont
  60201.         ENDIF
  60202.         IF (VARTYPE(m.lnFontSize) <> "N") OR (m.lnFontSize <= 0)
  60203.             m.lnFontSize = m.tnFontSize0
  60204.             This.aTFWords(m.n, 3) = m.lnFontSize
  60205.         ENDIF
  60206.         IF EMPTY(m.lcFontStyle) && If we have no formatting, then use the one determined originally
  60207.             *!*    1   = Bold            BITTEST(tnFontStyle0, 0)
  60208.             *!*    2   = Italic          BITTEST(tnFontStyle0, 1)
  60209.             *!*    4   = Underlined      BITTEST(tnFontStyle0, 2)
  60210.             *!*    128 = Strikethrough   BITTEST(tnFontStyle0, 7)
  60211.             m.lnStyle = 0
  60212.             IF BITTEST(tnFontStyle0, 0) && Bold
  60213.                 m.lnStyle = 1
  60214.             ENDIF
  60215.             IF BITTEST(tnFontStyle0, 1) && Italic
  60216.                 m.lnStyle = m.lnStyle + 2
  60217.             ENDIF
  60218.             IF BITTEST(tnFontStyle0, 2) && Underlined
  60219.                 m.lnStyle = m.lnStyle + 4
  60220.             ENDIF
  60221.             IF BITTEST(tnFontStyle0, 7) && Strikethrough
  60222.                 m.lnStyle = m.lnStyle + 8
  60223.             ENDIF
  60224.         ELSE && NOT EMPTY(m.lcFontStyle)
  60225.             m.lnStyle = 0
  60226.             IF "B" $ m.lcFontStyle
  60227.                 m.lnStyle = 1
  60228.             ENDIF
  60229.             IF "I" $ m.lcFontStyle
  60230.                 m.lnStyle = m.lnStyle + 2
  60231.             ENDIF
  60232.             IF "U" $ m.lcFontStyle
  60233.                 m.lnStyle = m.lnStyle + 4
  60234.             ENDIF
  60235.             IF "S" $ m.lcFontStyle
  60236.                 m.lnStyle = m.lnStyle + 8
  60237.             ENDIF
  60238.         ENDIF 
  60239.         This.aTFWords(m.n, 4) = m.lnStyle
  60240.         *            tnFillRed0 , tnFillGreen0, tnFillBlue0 , ;
  60241.         *            tnPenRed0  , tnPenGreen0 , tnPenBlue
  60242.         * Create a font object using the text object's settings.
  60243.         m.loFont = CREATEOBJECT("GPFont")
  60244.         m.loFont.Create(m.lcFont, m.lnFontSize, m.lnStyle, 3)
  60245.         m.lhFont = m.loFont.GetHandle()
  60246.         * Obtain the Font Height to be used as Line Height
  60247.         m.lnLineHeight = FLOOR(m.loFont.GetHeight(m.loGfx))
  60248.         STORE EMPTY_RECTANGLE TO m.lcRectF, m.pcBoundingBox
  60249.         = xfcGdipMeasureString(m.lhGfx;
  60250.             , STRCONV(m.lcWord + " " + 0h00,5)    ;
  60251.             , LEN(m.lcWord) + 1 ;
  60252.             , m.lhFont ;
  60253.             , m.lcRectF ;
  60254.             , m.lhStringFormat ;
  60255.             , @m.pcBoundingBox, 0, 0)
  60256.         m.lnWordWidth  = CEILING(CTOBIN(SUBSTR(m.pcBoundingBox, 9, 4), 'N'))
  60257.         m.lnWordHeight = CEILING(CTOBIN(SUBSTR(m.pcBoundingBox,13, 4), 'N'))
  60258.         * Get the font height to compare with the height obtained from MeasureString
  60259.         m.lnFontHeight = CEILING(m.loFont.GetHeight(m.loGfx))
  60260.         IF m.lcWord = "[CR]"
  60261.             This.aTFWords(m.n, 11) = 0
  60262.         ELSE 
  60263.             This.aTFWords(m.n, 11) = m.lnWordWidth
  60264.         ENDIF
  60265.         This.aTFWords(m.n, 12) = MAX(m.lnWordHeight, m.lnFontHeight)
  60266.         m.loFont = NULL
  60267.     ENDFOR
  60268. CATCH TO m.loExc
  60269.      SET STEP ON
  60270. ENDTRY
  60271. LOCAL lcRectF, loColor, loBrush, lnX, lnY, lnXNext, lnCurrLine, lnWordHeight, lnY2
  60272. DIMENSION m.laLines(1, 3) && Line, Starting word, Line Height
  60273. m.lnCurrLine   = 1
  60274. m.lnX          = 0
  60275. m.lnY          = m.tnTop
  60276. m.lnWordHeight = 0
  60277. m.lnXNext      = 0
  60278. m.laLines(1,1) = 1  && Line
  60279. m.laLines(1,2) = 1  && Starting word
  60280. m.laLines(1,3) = 0  && Line Height
  60281. m.lnLineHeight = 0
  60282. FOR m.n = 1 TO m.lnWords
  60283.     m.lnWordHeight = This.aTFWords(m.n, 12)
  60284.     m.lnWordWidth  = This.aTFWords(m.n, 11)
  60285.     This.aTFWords(m.n, 13) = m.lnCurrLine
  60286.     * For debugging purposes
  60287.     IF UPPER(This.aTFWords(m.n,1)) = m.lcStep
  60288.         SET STEP ON
  60289.     ENDIF
  60290.     m.lcWord = ALLTRIM(This.aTFWords(m.n, 1))
  60291.     m.lnX = m.lnX + m.lnWordWidth
  60292.     IF (m.lnX > m.tnWidth) OR (m.lcWord = "[CR]")
  60293.         m.laLines(m.lnCurrLine,1) = m.lnCurrLine    && Line
  60294.         m.laLines(m.lnCurrLine,2) = m.n             && Starting word
  60295.         m.laLines(m.lnCurrLine,3) = m.lnLineHeight  && Line Height
  60296.         IF (m.lnCurrLine > 1) AND (m.lcWord = "[CR]")
  60297.             *    laLines(lnCurrLine,3) = laLines(lnCurrLine - 1, 3) && Line Height
  60298.             m.lnX = 0
  60299.         ELSE 
  60300.             m.lnX = m.lnWordWidth
  60301.         ENDIF 
  60302.         * Reset variables, to start a new line
  60303.         m.lnLineHeight = m.lnWordHeight
  60304.         m.lnCurrLine   = m.lnCurrLine + 1
  60305.         This.aTFWords(m.n, 13) = m.lnCurrLine
  60306.         DIMENSION m.laLines(m.lnCurrLine, 3)
  60307.         LOOP
  60308.     ENDIF
  60309.     m.lnLineHeight = MAX(m.lnLineHeight, m.lnWordHeight)
  60310. ENDFOR
  60311. m.laLines(m.lnCurrLine,1) = m.lnCurrLine    && Line
  60312. m.laLines(m.lnCurrLine,2) = m.n             && Starting word
  60313. m.laLines(m.lnCurrLine,3) = m.lnLineHeight  && Line Height
  60314. * Rebuild the words array joining words that have the exact same formatting to a same string.
  60315. * This helps to render a little faster, and improves the drawing of the words, specially for
  60316. * words that are underlined or have background colors
  60317. m.lcOldFormat  = ""
  60318. m.lcNextFormat = ""
  60319. m.lcOldWord    = ""
  60320. m.lcNextWord   = ""
  60321. m.lnCount      = 1
  60322. m.lcCurrWord   = This.aTFWords(1, 1)
  60323. m.lnCurrWidth  = 0
  60324. DIMENSION m.laNewWords(1, 14)
  60325. FOR m.n = 1 TO m.lnWords
  60326.     m.lcNextWord   = This.aTFWords(m.n, 1)
  60327.     IF EMPTY(m.lcNextWord)
  60328.         LOOP
  60329.     ENDIF
  60330.     * For debugging purposes
  60331.     IF UPPER(m.lcNextWord) = m.lcStep
  60332.         SET STEP ON
  60333.     ENDIF
  60334.     m.lcNextFormat = ""
  60335.     FOR m.i = 2 TO 10
  60336.         m.lcNextFormat = m.lcNextFormat + TRANSFORM(This.aTFWords(m.n, m.i))
  60337.     ENDFOR
  60338.     m.lnPrevLine = IIF(m.n = 1, 1, This.aTFWords(m.n-1, 13))
  60339.     m.lnCurrLine = This.aTFWords(m.n, 13)
  60340.     IF (m.lcOldFormat = m.lcNextFormat) AND (m.lnPrevLine = m.lnCurrLine) AND (m.lcNextWord <> "[CR]") AND (m.lcCurrWord <> "[CR]")
  60341.                             && We have a match, so we can join the words
  60342.         m.lcCurrWord  = ALLTRIM(m.lcCurrWord + " " + m.lcNextWord)
  60343.         m.lnCurrWidth = m.lnCurrWidth +  This.aTFWords(m.n, 11)
  60344.         m.laNewWords(m.lnCount - 1, 1)  = m.lcCurrWord
  60345.         m.laNewWords(m.lnCount - 1, 11) = m.lnCurrWidth
  60346.         m.laNewWords(m.lnCount - 1, 12) = This.aTFWords(m.n, 12)
  60347.         m.laNewWords(m.lnCount - 1, 14) = m.lnCurrWidth
  60348.     ELSE
  60349.         DIMENSION m.laNewWords(m.lnCount, 14)
  60350.         m.lcCurrWord = m.lcNextWord
  60351.         m.lnCurrWidth = This.aTFWords(m.n, 11)
  60352.         m.laNewWords(m.lnCount, 1)  = m.lcCurrWord
  60353.         m.laNewWords(m.lnCount, 11) = m.lnCurrWidth
  60354.         m.laNewWords(m.lnCount, 12) = This.aTFWords(m.n, 12)
  60355.         m.laNewWords(m.lnCount, 14) = m.lnCurrWidth
  60356.         FOR m.i = 2 TO 10
  60357.             m.laNewWords(m.lnCount, m.i) = This.aTFWords(m.n, m.i)
  60358.         ENDFOR
  60359.         IF (m.lcCurrWord = "[CR]") AND (m.n > 1)
  60360.             m.laNewWords(m.lnCount, 12) = This.aTFWords(m.n-1, 12)
  60361.         ENDIF
  60362.         m.lnCount = m.lnCount + 1
  60363.         m.lcOldFormat = m.lcNextFormat
  60364.     ENDIF
  60365. ENDFOR
  60366. m.loGfx.Restore(m.lhGfxState)            
  60367. * Measure the words again, in order to get more precision specially for merged words
  60368. FOR m.n = 1 TO ALEN(m.laNewWords, 1)
  60369.     m.lcWord = m.laNewWords(m.n, 1)
  60370.     m.lcWord = EVL(m.lcWord, "")  && by Pavel Celba
  60371.     IF NOT " " $ ALLTRIM(m.lcWord)  && No need to measure again, since it's a single word
  60372.         LOOP
  60373.     ENDIF 
  60374.     * For debugging purposes
  60375.     IF m.lcStep $ UPPER(m.lcWord)
  60376.         SET STEP ON
  60377.     ENDIF
  60378.     m.lcFont        = m.laNewWords(m.n, 2)
  60379.     m.lnFontSize   = m.laNewWords(m.n, 3)
  60380.     m.lcFontStyle  = m.laNewWords(m.n, 4)
  60381.     * Create a font object using the text object's settings.
  60382.     m.loFont = CREATEOBJECT("GPFont")
  60383.     m.loFont.Create(m.lcFont, m.lnFontSize, m.lnStyle, 3)
  60384.     m.lhFont = m.loFont.GetHandle()
  60385.     STORE EMPTY_RECTANGLE TO m.lcRectF, m.pcBoundingBox
  60386.     = xfcGdipMeasureString(m.lhGfx;
  60387.             , STRCONV(m.lcWord + "  " + 0h00,5)    ;
  60388.             , LEN(m.lcWord) + 2 ;
  60389.             , m.lhFont ;
  60390.             , m.lcRectF ;
  60391.             , m.lhStringFormat ;
  60392.             , @m.pcBoundingBox, 0, 0)
  60393.     m.lnWordWidth  = CEILING(CTOBIN(SUBSTR(m.pcBoundingBox, 9, 4), 'N'))
  60394.     m.lnWordHeight = CEILING(CTOBIN(SUBSTR(m.pcBoundingBox,13, 4), 'N'))
  60395.     m.laNewWords(m.n, 11) = MAX(m.laNewWords(m.n, 14), m.lnWordWidth)
  60396.     m.laNewWords(m.n, 12) = m.lnWordHeight
  60397.     m.loFont = NULL
  60398. ENDFOR 
  60399. * Before we start drawing, it's wise to restore our Graphics object to
  60400. *    its original state.
  60401. * Put back the state of the graphics handle
  60402. m.loGfx.Restore(m.lhGfxState)            
  60403. LOCAL lnH2
  60404. m.lnX        = m.tnLeft
  60405. m.lnY        = m.tnTop
  60406. m.lnCurrLine = 1
  60407. m.lnY2       = 0
  60408. m.lnH2       = 0
  60409. FOR m.n = 1 TO ALEN(m.laNewWords, 1)
  60410.     m.lcWord = m.laNewWords(m.n, 1)
  60411.     IF EMPTY(m.lcWord)
  60412.         LOOP
  60413.     ENDIF
  60414.     * For debugging purposes
  60415.     IF m.lcStep $ UPPER(m.lcWord)
  60416.         SET STEP ON
  60417.     ENDIF
  60418. *    m.lnStringFormatHandle = lhStringFormat  && m.lhLeftAlignHandle
  60419.     m.lnStringFormatHandle = m.lhLeftAlignHandle
  60420.     * Create a font object using the text object's settings.
  60421.     m.loFont1 = CREATEOBJECT("GPFont")
  60422.     m.loFont1.Create(m.laNewWords(m.n, 2), ; && Font name
  60423.     m.laNewWords(m.n, 3), ;   && Font size
  60424.     m.laNewWords(m.n, 4), 3) && Font style
  60425.     m.lhFont1 = m.loFont1.GetHandle()
  60426.     m.loColor = CREATEOBJECT("gpColor", ;
  60427.         m.laNewWords(m.n, 5), ; && PenRed
  60428.     m.laNewWords(m.n, 6), ; && PenGreen
  60429.     m.laNewWords(m.n, 7), ; && PenBlue
  60430.     255)                   && Alpha
  60431.     m.loBrush = CREATEOBJECT("gpSolidBrush", m.loColor)
  60432.     *!*                * Add to the array of words
  60433.     *!*                This.aTFWords(lnI, 1)  = m.lcParamWord
  60434.     *!*                This.aTFWords(lnI, 2)  = m.lcParamFName
  60435.     *!*                This.aTFWords(lnI, 3)  = m.lnParamFSize
  60436.     *!*                This.aTFWords(lnI, 4)  = m.lcParamFStyle
  60437.     *!*                This.aTFWords(lnI, 5)  = m.lnParamCRed
  60438.     *!*                This.aTFWords(lnI, 6)  = m.lnParamCGreen
  60439.     *!*                This.aTFWords(lnI, 7)  = m.lnParamCBlue
  60440.     *!*                This.aTFWords(lnI, 8)  = m.lnParamHRed
  60441.     *!*                This.aTFWords(lnI, 9)  = m.lnParamHGreen
  60442.     *!*                This.aTFWords(lnI, 10) = m.lnParamHBlue
  60443.     *!*                This.aTFWords(lnI, 11) = WIDTH
  60444.     *!*                This.aTFWords(lnI, 12) = HEIGHT
  60445.     * Check if we have a <BR> - Line jump
  60446.     IF ALLTRIM(m.lcWord) = "[CR]"
  60447.         m.lnX = m.tnLeft
  60448.         m.lnY = m.lnY + m.lnMaxHeight && laNewWords(n, 12)
  60449.         m.lnCurrLine = m.lnCurrLine + 1
  60450.         LOOP
  60451.     ENDIF
  60452.     m.lnXNext = m.lnX + m.laNewWords(m.n, 11)
  60453.     IF m.lnXNext > (m.tnLeft + m.tnWidth) * 1.015
  60454.         m.lnX = m.tnLeft
  60455.         m.lnY = m.lnY + m.lnMaxHeight
  60456.         m.lnCurrLine = m.lnCurrLine + 1
  60457.     ENDIF
  60458.     *!*        laLines(lnCurrLine,1) = lnCurrLine    && Line
  60459.     *!*        laLines(lnCurrLine,2) = n             && Starting word
  60460.     *!*        laLines(lnCurrLine,3) = lnLineHeight  && Line Height
  60461.     TRY 
  60462.         m.lnMaxHeight = EVL(m.laLines(m.lnCurrLine,3), 0)
  60463.     CATCH TO m.loExc
  60464.         m.lnMaxHeight = EVL(m.laLines(m.lnCurrLine-1,3), 0)
  60465.     ENDTRY
  60466.     m.lnH2 = CEILING(m.lnMaxHeight * 1.15)
  60467. *    m.lcRectF = BINTOC(m.lnX,'F') + BINTOC(m.lnY,'F') + BINTOC(4*CEILING(laNewWords(n, 11)),'F') + BINTOC(m.lnMaxHeight,'F')
  60468.     m.lcRectF = BINTOC(m.lnX,'F') + BINTOC(m.lnY,'F') + BINTOC(4*CEILING(m.laNewWords(m.n, 11)),'F') + BINTOC(m.lnH2,'F')
  60469. *    m.lcRectF = BINTOC(m.lnX,'F') + BINTOC(m.lnY2,'F') + BINTOC(4*CEILING(laNewWords(n, 11)),'F') + BINTOC(m.lnMaxHeight,'F')
  60470.     * Draw the background if needed
  60471.     IF m.laNewWords(m.n, 8) > -1
  60472.         m.loBackColor = CREATEOBJECT("gpColor", ;
  60473.                     m.laNewWords(m.n, 8), ; && loObject.FillRed
  60474.                     m.laNewWords(m.n, 9), ; && loObject.FillGreen
  60475.                     m.laNewWords(m.n, 10), ; && loObject.FillBlue
  60476.                     255 ) && Alpha
  60477.         m.loBackBrush = CREATEOBJECT("gpSolidBrush", m.loBackColor)
  60478.         This.oGDIGraphics.FillRectangle(m.loBackBrush, m.lnX, ;
  60479.                     m.lnY, m.laNewWords(m.n,11), m.lnH2) && laNewWords(n,12))
  60480.     ENDIF
  60481.     = xfcGdipDrawString(m.lhGfx ;
  60482.         , STRCONV(m.lcWord + 0h00,5) ;
  60483.         , LEN(m.lcWord) ;
  60484.         , m.lhFont1 ;
  60485.         , m.lcRectF ;
  60486.         , m.lnStringFormatHandle ;
  60487.         , m.loBrush.GetHandle())
  60488.     * Adjust the Y position manually, in order to provide an accurate position for the Alternative outputs
  60489.     * This coordinate will not be used for drawing now, because here GDI+ provides a better aproach to align the strings
  60490.     *     at the bottom
  60491.     m.lnY2 = m.lnY + m.lnMaxHeight - m.laNewWords(m.n, 12)
  60492. CATCH TO m.loexc
  60493.      * SET STEP ON
  60494. ENDTRY 
  60495.     This.TFAddToOutput(m.tnFRXRecNo, m.lnX, m.lnY, m.laNewWords(m.n, 11), m.lnMaxHeight, m.tnObjectContinuationType, m.lcWord, m.tiGDIPlusImage, ;
  60496.             m.laNewWords(m.n, 2),  ; && Font name
  60497.             m.laNewWords(m.n, 3),  ; && Font size
  60498.             m.laNewWords(m.n, 4),  ; && Font style
  60499.             m.laNewWords(m.n, 5),  ; && Pen red
  60500.             m.laNewWords(m.n, 6),  ; && Pen green
  60501.             m.laNewWords(m.n, 7),  ; && Pen blue
  60502.             m.laNewWords(m.n, 8),  ; && Fill red
  60503.             m.laNewWords(m.n, 9),  ; && Fill green
  60504.             m.laNewWords(m.n, 10), ; && Fill blue
  60505.             m.loFrxRec)              && FRX record
  60506.     m.lnX = m.lnX + m.laNewWords(m.n, 11)
  60507.     m.loFont1 = NULL
  60508.     m.loColor = NULL
  60509.     m.loBrush = NULL
  60510. ENDFOR
  60511. * Delete the StringFormat object created
  60512. =xfcGdipDeleteStringFormat(m.lhStringFormat)
  60513. =xfcGdipDeleteStringFormat(m.lhLeftAlignHandle)
  60514. =xfcGdipDeleteStringFormat(m.lhRightAlignHandle)
  60515. SELECT (lnSelect)
  60516. RETURN 
  60517. ENDPROC
  60518. PROCEDURE tfprocess
  60519. * by Eduard Shor (Romania)
  60520. * Preprocesses the tags found
  60521. *-- <b> </b>                                                    :: bold
  60522. *-- <i> </i>                                                    :: italic
  60523. *-- <u> </u>                                                    :: underline
  60524. *-- <s> </s>                                                    :: strikethru
  60525. *-- <color=rgb/ncolor> </color>            // <c=> </c>            :: forecolor
  60526. *-- <highlight=rgb/ncolor> </highlight>    // <h=> </h>            :: backcolor
  60527. *-- <fontname="name"> </fontname>        // <fname=> </fname>    :: font name
  60528. *-- <fontsize=0> </fontsize>            // <fsize=> </fsize>    :: font size
  60529. *-- <fontstyle="BIUS"> </fontstyle>        // <fstyle=> </ftyle>    :: font style string    // will alter <b><i><u><s> previous state
  60530. *?-- color could be save as a number with RGB()
  60531. *?-- could prevent transform if '</' not in string
  60532. * Function ProcessHTF_FoxyPreviewer( tcString )
  60533. LPARAMETERS tcString, tlReturnVanillaString
  60534.     Local ;
  60535.         lcResultString, lcColorStack, lcHighlightStack, lcFontNameStack, lcFontSizeStack, lcFontStyleStack         ,;
  60536.         llBold, llItalic, llUnderline, llStrikeThru, llColor, llHighlight, llFontName, llFontSize, llFontStyle, llWhiteStyled,;
  60537.         lcParamWord, lcParamFName, lnParamFSize, lcParamFStyle    ,;
  60538.         lnParamCRed, lnParamCGreen, lnParamCBlue    ,;
  60539.         lnParamHRed, lnParamHGreen, lnParamHBlue    ,;
  60540.         lcWhiteFName, lnWhiteFSize, lcWhiteFStyle    ,;
  60541.         lnWhiteCRed, lnWhiteCGreen, lnWhiteCBlue    ,;
  60542.         lnWhiteHRed, lnWhiteHGreen, lnWhiteHBlue    ,;
  60543.         lnWords, lnI, lcWord, lcWordLow, lcColorValue, lcTagValue, lcStyle,;
  60544.         lnKStart, lcKString, lcKChunk, lcKTagPre, lckTagValue
  60545.     * CChalom 2011-12-22
  60546.     * Deal with <CR>, adding a special TAG, [CR]
  60547.     m.tcString = STRTRAN(m.tcString, "<BR>", ' [CR] ')
  60548.     m.tcString = STRTRAN(m.tcString, "<br>", ' [CR] ')
  60549.     m.tcString = STRTRAN(m.tcString, CHR(13) + CHR(10), ' [CR] ')
  60550.     m.tcString = STRTRAN(m.tcString, CHR(10) + CHR(13), ' [CR] ')
  60551.     m.tcString = CHRTRAN(m.tcString, CHR(10), ' [CR] ')
  60552.     m.tcString = CHRTRAN(m.tcString, CHR(13), ' [CR] ')
  60553.     LOCAL lcTempString, lcNextChar
  60554.     m.lcTempString = "" 
  60555.     FOR m.n = 1 TO LEN(m.tcString)
  60556.         m.lcNextChar = SUBSTR(m.tcString, m.n, 1)
  60557.         IF m.lcNextChar = "<"
  60558.             m.lcNextChar = " <"
  60559.         ENDIF
  60560.         m.lcTempString = m.lcTempString + m.lcNextChar
  60561.     ENDFOR 
  60562.     m.tcString = m.lcTempString
  60563.     *Set Step On 
  60564.     *-- replace space in tag contents (font names) with a placeholder
  60565.     m.lcKString = ''
  60566.     m.lnKStart    = 1
  60567.     m.lnI        = 1
  60568.     *Set Step On 
  60569.     Do While m.lnI <= Len(m.tcString)
  60570.         *-- 
  60571.         If     Substr(m.tcString,m.lnI,1)='<' And ;
  60572.                 ( ;
  60573.                 Inlist(Left( Strtran( Lower(Substr(m.tcString,m.lnI,30)) ,' ',''), 3),    '<c=','<h='                        ) Or ;
  60574.                 Inlist(Left( Strtran( Lower(Substr(m.tcString,m.lnI,30)) ,' ',''), 7), '<color=','<fname=','<fsize='    ) Or ;
  60575.                 Inlist(Left( Strtran( Lower(Substr(m.tcString,m.lnI,30)) ,' ',''), 8), '<fstyle='                        ) Or ;
  60576.                 Inlist(Left( Strtran( Lower(Substr(m.tcString,m.lnI,30)) ,' ',''),10), '<fontname=','<fontsize='        ) Or ;
  60577.                 Inlist(Left( Strtran( Lower(Substr(m.tcString,m.lnI,30)) ,' ',''),11), '<highlight=','<fontstyle='        ) ;
  60578.                 ) Then 
  60579.               
  60580.             *-- copy to lcKString unprocessed part
  60581.             m.lcKString        = m.lcKString + Substr(m.tcString, m.lnKStart, m.lnI-m.lnKStart)
  60582.             *--             
  60583.             m.lcKChunk         = Substr(m.tcString, m.lnI, Atc('>',Substr(m.tcString,m.lnI)) )
  60584.             *-- lnI will continue with value after the closing tag
  60585.             m.lnI            = m.lnI + Len(m.lcKChunk)-1
  60586.             *-- assign the next starting point for unprocessed text
  60587.             m.lnKStart        = m.lnI + 1
  60588.             *-- remove spaces from tag name
  60589.             m.lcKTagPre        = Strtran(Substr(m.lcKChunk,1,Atc('=',m.lcKChunk)),' ','')
  60590.             *-- replace spaces in tag value with somthing else - chr(31) 
  60591.             m.lcKTagValue    = Substr(m.lcKChunk,Atc('=',m.lcKChunk)+1,Len(m.lcKChunk)-Atc('=',m.lcKChunk)-1)
  60592.             m.lcKTagValue    = Strtran( Alltrim(m.lcKTagValue), Chr(32), Chr(31) )    && '
  60593.             *-- add tag-name + tag-value + closing tag sign to lcKString
  60594.             m.lcKString        = m.lcKString + m.lcKTagPre + m.lckTagValue + '>'
  60595.             *-- 
  60596.         EndIf 
  60597.         *-- 
  60598.         m.lnI = m.lnI + 1 
  60599.         *-- 
  60600.     EndDo 
  60601.     *-- add the last unprocessed text
  60602.     m.lcKString = m.lcKString + Substr(m.tcString, m.lnKStart, Len(m.tcString)-m.lnKStart+1)
  60603.     *-- 
  60604.     *? lcKString
  60605.     Store '' To m.lcResultString, m.lcColorStack, m.lcHighlightStack, m.lcFontNameStack, m.lcFontSizeStack, m.lcFontStyleStack
  60606.     *Set Step On 
  60607.     m.lnWords = Getwordcount(m.lcKString)
  60608.     IF m.lnWords = 0 && Fix by Pavel Celba
  60609.         RETURN ""
  60610.     ENDIF
  60611.     This.aTFWords = .F.
  60612.     DIMENSION This.aTFWords(m.lnWords, 14)
  60613.     For m.lnI = 1 To m.lnWords
  60614.         *-- if it's not the first word // can be removed if you can't draw spaced with backcolor and/or underlined/strikethru
  60615.         *--    will call DrawInReport(' ', cFontName,nFontSize,'US', -1,-1,-1, nHRed,nHGreen,nHBlue)
  60616.         m.llWhiteStyled = (m.lnI>1) And (m.llUnderline Or m.llStrikeThru Or m.llHighlight)
  60617.         If m.llWhiteStyled Then 
  60618.             *-- style+backcolor ptr whitespace
  60619.             m.lcWhiteFName    = Iif( Not m.llFontName,      '',     Getwordnum(m.lcFontNameStack,Getwordcount(m.lcFontNameStack,'|'),'|')  )
  60620.             m.lnWhiteFSize    = Iif( Not m.llFontSize,      -1, Val(Getwordnum(m.lcFontSizeStack,Getwordcount(m.lcFontSizeStack,'|'),'|')) )
  60621.             *m.lcWhiteFStyle    = Iif( Not m.llFontStyle,     '', Iif(m.llUnderline,'U','') + Iif(m.llStrikeThru,'S','') )
  60622.             m.lcWhiteFStyle    = Iif(m.llUnderline,'U','') + Iif(m.llStrikeThru,'S','')
  60623.             *-- 
  60624.             m.lcColorValue    = Iif( Not m.llColor,        '', Getwordnum(m.lcColorStack,Getwordcount(m.lcColorStack,'|'),'|')  )
  60625.             m.lnWhiteCRed    = Iif( Not m.llColor,        -1, Val(GetWordNum(m.lcColorValue,1,',')) )
  60626.             m.lnWhiteCGreen    = Iif( Not m.llColor,        -1, Val(GetWordNum(m.lcColorValue,2,',')) )
  60627.             m.lnWhiteCBlue    = Iif( Not m.llColor,        -1, Val(GetWordNum(m.lcColorValue,3,',')) )
  60628.             *-- 
  60629.             m.lcColorValue    = Iif( Not m.llHighlight,    '', Getwordnum(m.lcHighlightStack,Getwordcount(m.lcHighlightStack,'|'),'|')  )
  60630.             m.lnWhiteHRed    = Iif( Not m.llHighlight,    -1, Val(GetWordNum(m.lcColorValue,1,',')) )
  60631.             m.lnWhiteHGreen    = Iif( Not m.llHighlight,    -1, Val(GetWordNum(m.lcColorValue,2,',')) )
  60632.             m.lnWhiteHBlue    = Iif( Not m.llHighlight,    -1, Val(GetWordNum(m.lcColorValue,3,',')) )
  60633.             *-- 
  60634.         EndIf 
  60635.         *--
  60636.         *m.lcWord    = Getwordnum(m.tcString,m.lnI)
  60637.         m.lcWord    = Getwordnum(m.lcKString,m.lnI)
  60638.         *Set Step On 
  60639.         *-- add spaces back
  60640.         m.lcWord    = Strtran(m.lcWord,Chr(31),Chr(32))    && '
  60641.         m.lcWordLow    = Lower(m.lcWord)
  60642.         *!*    If LEFT(m.lcWordLow,3)='<c=' Then 
  60643.         *!*        Set Step On 
  60644.         *!*    EndIf 
  60645.         *-- process in loop for consecutive tags: '</s><b><u>sometext</u><i>'
  60646.         Do while     Inlist( Left(m.lcWordLow,3), '<b>','<i>','<u>','<s>','<c=','<h=' )               ;
  60647.                 Or    Inlist( Left(m.lcWordLow,4), '</b>','</i>','</u>','</s>','</c>','</h>' )     ;
  60648.                 Or     Left(m.lcWordLow,7)    ='<color='         Or  Left(m.lcWordLow,8)    ='</color>'     ;
  60649.                 Or     Left(m.lcWordLow,11)='<highlight='     Or     Left(m.lcWordLow,12)='</highlight>'    ;
  60650.                 Or     Left(m.lcWordLow,10)='<fontname='    Or     Left(m.lcWordLow,11)='</fontname>'    ;
  60651.                 Or    Left(m.lcWordLow,10)='<fontsize='    Or    Left(m.lcWordLow,11)='</fontsize>'    ;
  60652.                 Or    Left(m.lcWordLow,11)='<fontstyle='    Or    Left(m.lcWordLow,12)='</fontstyle>'    ;
  60653.                 Or     Left(m.lcWordLow,7)    ='<fname='        Or     Left(m.lcWordLow,8)    ='</fname>'        ;
  60654.                 Or     Left(m.lcWordLow,7)    ='<fsize='        Or     Left(m.lcWordLow,8)    ='</fsize>'        ;
  60655.                 Or     Left(m.lcWordLow,8)    ='<fstyle='        Or     Left(m.lcWordLow,9)    ='</fstyle>'        
  60656.             *-- enable/disable style flags - individual html style tags // will be overwriten by <fontstyle='BUIS'>
  60657.             m.llBold         = (m.llBold         Or Left(m.lcWordLow,3)='<b>') And Left(m.lcWordLow,4)!='</b>'
  60658.             m.llItalic        = (m.llItalic         Or Left(m.lcWordLow,3)='<i>') And Left(m.lcWordLow,4)!='</i>'
  60659.             m.llUnderline    = (m.llUnderline    Or Left(m.lcWordLow,3)='<u>') And Left(m.lcWordLow,4)!='</u>'
  60660.             m.llStrikeThru    = (m.llStrikeThru    Or Left(m.lcWordLow,3)='<s>') And Left(m.lcWordLow,4)!='</s>'
  60661.             *--             
  60662.             *-- if colors, save in stack
  60663.             If Left(m.lcWordLow,3)='<c=' Or Left(m.lcWordLow,7)='<color=' Then 
  60664.                 *-- 
  60665.                 m.lcColorValue    = Substr(m.lcWord, At('=',m.lcWord)+1, At('>',m.lcWord)-At('=',m.lcWord)-1 )
  60666.                 m.lcColorValue    = Strtran(m.lcColorValue,' ','')    && here it could be converted from rgb to number if it's more convenient // the user could use a number instead of an RGB pair also
  60667.                 *-- 
  60668.                 m.lcColorStack     = m.lcColorStack + Iif(Not Empty(m.lcColorStack),'|','') + m.lcColorValue
  60669.                 *? '  +colorstack: '+m.lcColorStack
  60670.             EndIf 
  60671.             *-- 
  60672.             If Left(m.lcWordLow,3)='<h=' Or Left(m.lcWordLow,11)='<highlight=' Then 
  60673.                 *-- 
  60674.                 m.lcColorValue        = Substr(m.lcWord, At('=',m.lcWord)+1, At('>',m.lcWord)-At('=',m.lcWord)-1 )
  60675.                 m.lcColorValue        = Strtran(m.lcColorValue,' ','')    && here it could be converted from rgb to number if it's more convenient // the user could use a number instead of an RGB pair also
  60676.                 *-- 
  60677.                 m.lcHighlightStack     = m.lcHighlightStack + Iif(Not Empty(m.lcHighlightStack),'|','') + m.lcColorValue
  60678.                 *? '  +highlightstack: '+m.lcHighlightStack
  60679.             EndIf 
  60680.             *-- 
  60681.             If Left(m.lcWordLow,7)='<fname=' Or Left(m.lcWordLow,10)='<fontname=' Then 
  60682.                 *-- 
  60683.                 m.lcTagValue        = Substr(m.lcWord, At('=',m.lcWord)+1, At('>',m.lcWord)-At('=',m.lcWord)-1 )
  60684.                 m.lcTagValue        = Alltrim(Strtran(m.lcTagValue,["],''))
  60685.                 *-- 
  60686.                 m.lcFontNameStack    = m.lcFontNameStack    + Iif(Not Empty(m.lcFontNameStack),'|','') + m.lcTagValue
  60687.                 *? '  +fontnamestack: '+m.lcFontNameStack
  60688.             EndIf 
  60689.             *-- 
  60690.             If Left(m.lcWordLow,7)='<fsize=' Or Left(m.lcWordLow,10)='<fontsize=' Then 
  60691.                 *-- 
  60692.                 m.lcTagValue        = Substr(m.lcWord, At('=',m.lcWord)+1, At('>',m.lcWord)-At('=',m.lcWord)-1 )
  60693.                 m.lcTagValue        = Strtran( Strtran(m.lcTagValue,["],'') ,' ','')
  60694.                 *-- 
  60695.                 m.lcFontSizeStack    = m.lcFontSizeStack    + Iif(Not Empty(m.lcFontSizeStack),'|','') + m.lcTagValue
  60696.                 *? '  +fontsizestack: '+m.lcFontSizeStack
  60697.             EndIf 
  60698.             *-- 
  60699.             If Left(m.lcWordLow,8)='<fstyle=' Or Left(m.lcWordLow,11)='<fontstyle=' Then 
  60700.                 *-- 
  60701.                 m.lcTagValue        = Substr(m.lcWord, At('=',m.lcWord)+1, At('>',m.lcWord)-At('=',m.lcWord)-1 )
  60702.                 m.lcTagValue        = Upper( Strtran( Strtran(m.lcTagValue,["],'') ,' ','') )
  60703.                 *-- 
  60704.                 m.lcFontStyleStack    = m.lcFontStyleStack + Iif(Not Empty(m.lcFontStyleStack),'|','') + m.lcTagValue
  60705.                 *? '  +fontnamestack: '+m.lcFontNameStack
  60706.                 m.llBold            = ('B' $ m.lcTagValue)
  60707.                 m.llItalic            = ('I' $ m.lcTagValue)
  60708.                 m.llUnderline        = ('U' $ m.lcTagValue)
  60709.                 m.llStrikeThru        = ('S' $ m.lcTagValue)
  60710.             EndIf 
  60711.             *-- if end of color Then remove from stack
  60712.             If Left(m.lcWordLow,4)='</c>' Or Left(m.lcWordLow,8)='</color>' Then 
  60713.                 *--
  60714.                 m.lcColorStack     = ;
  60715.                     Iif( Empty(m.lcColorStack) Or Occurs('|',m.lcColorStack)=0, '',;
  60716.                     Left( m.lcColorStack, AT('|',m.lcColorStack,Occurs('|',m.lcColorStack))-1 ) )
  60717.                 *? '  -colorstack: '+m.lcColorStack
  60718.             EndIf 
  60719.             *-- 
  60720.             If Left(m.lcWordLow,4)='</h>' Or Left(m.lcWordLow,12)='</highlight>' Then 
  60721.                 *-- 
  60722.                 m.lcHighlightStack     = ;
  60723.                     Iif( Empty(m.lcHighlightStack) Or Occurs('|',m.lcHighlightStack)=0, '',;
  60724.                     Left( m.lcHighlightStack, AT('|',m.lcHighlightStack,Occurs('|',m.lcHighlightStack))-1 ) )
  60725.                 *? '  -highlightstack: '+m.lcHighlightStack
  60726.             EndIf 
  60727.             *-- 
  60728.             If Left(m.lcWordLow,8)='</fname>' Or Left(m.lcWordLow,11)='</fontname>' Then 
  60729.                 *-- 
  60730.                 m.lcFontNameStack    = ;
  60731.                     Iif( Empty(m.lcFontNameStack) Or Occurs('|',m.lcFontNameStack)=0, '',;
  60732.                     Left( m.lcFontNameStack, AT('|',m.lcFontNameStack,Occurs('|',m.lcFontNameStack))-1 ) )
  60733.                 *? '  +fontnamestack: '+m.lcFontNameStack
  60734.             EndIf 
  60735.             *-- 
  60736.             If Left(m.lcWordLow,8)='</fsize>' Or Left(m.lcWordLow,11)='</fontsize>' Then 
  60737.                 *-- 
  60738.                 m.lcFontSizeStack    = ;
  60739.                     Iif( Empty(m.lcFontSizeStack) Or Occurs('|',m.lcFontSizeStack)=0, '',;
  60740.                     Left( m.lcFontSizeStack, AT('|',m.lcFontSizeStack,Occurs('|',m.lcFontSizeStack))-1 ) )
  60741.                 *? '  +fontsizestack: '+m.lcFontSizeStack
  60742.             EndIf 
  60743.             *-- 
  60744.             If Left(m.lcWordLow,9)='</fstyle>' Or Left(m.lcWordLow,12)='</fontstyle>' Then 
  60745.                 *-- 
  60746.                 m.lcFontStyleStack    = ;
  60747.                     Iif( Empty(m.lcFontStyleStack) Or Occurs('|',m.lcFontStyleStack)=0, '',;
  60748.                     Left( m.lcFontStyleStack, AT('|',m.lcFontStyleStack,Occurs('|',m.lcFontStyleStack))-1 ) )
  60749.                 *? '  +fontstylestack: '+m.lcFontStyleStack
  60750.                 *-- retrieve curent style in stack to setup flags
  60751.                 m.lcTagValue    = Getwordnum(m.lcFontStyleStack,Getwordcount(m.lcFontStyleStack,'|'),'|')
  60752.                 *-- 
  60753.                 m.llBold            = ('B' $ m.lcTagValue)
  60754.                 m.llItalic            = ('I' $ m.lcTagValue)
  60755.                 m.llUnderline        = ('U' $ m.lcTagValue)
  60756.                 m.llStrikeThru        = ('S' $ m.lcTagValue)
  60757.                 *-- 
  60758.             EndIf 
  60759.             *-- some flags are .T. if stack is not empty
  60760.             m.llColor        = Not Empty(m.lcColorStack)
  60761.             m.llHighlight    = Not Empty(m.lcHighlightStack)
  60762.             m.llFontName    = Not Empty(m.lcFontNameStack)
  60763.             m.llFontSize    = Not Empty(m.lcFontSizeStack)
  60764.             m.llFontStyle    = Not Empty(m.lcFontStyleStack)
  60765.             *-- remove procesed tag
  60766.             m.lcWord     = Substr(m.lcWord,AT('>',m.lcWord)+1)
  60767.             m.lcWordLow    = Lower(m.lcWord)
  60768.         EndDo 
  60769.         *-- setup parameters for DrawInReport
  60770.         m.lcParamFName    = Iif( Not m.llFontName,      '',     Getwordnum(m.lcFontNameStack,Getwordcount(m.lcFontNameStack,'|'),'|')  )
  60771.         m.lnParamFSize    = Iif( Not m.llFontSize,      -1, Val(Getwordnum(m.lcFontSizeStack,Getwordcount(m.lcFontSizeStack,'|'),'|')) )
  60772.         *m.lcParamFStyle    = Iif( Not m.llFontStyle,     '', Iif(m.llBold,'B','') + Iif(m.llItalic,'I','') + Iif(m.llUnderline,'U','') + Iif(m.llStrikeThru,'S','') )
  60773.         m.lcParamFStyle    = Iif(m.llBold,'B','') + Iif(m.llItalic,'I','') + Iif(m.llUnderline,'U','') + Iif(m.llStrikeThru,'S','')
  60774.         m.lcColorValue    = Iif( Not m.llColor,        '', Getwordnum(m.lcColorStack,Getwordcount(m.lcColorStack,'|'),'|')  )
  60775.         m.lnParamCRed    = Iif( Not m.llColor,        -1, Val(GetWordNum(m.lcColorValue,1,',')) )
  60776.         m.lnParamCGreen    = Iif( Not m.llColor,        -1, Val(GetWordNum(m.lcColorValue,2,',')) )
  60777.         m.lnParamCBlue    = Iif( Not m.llColor,        -1, Val(GetWordNum(m.lcColorValue,3,',')) )
  60778.         m.lcColorValue    = Iif( Not m.llHighlight,    '', Getwordnum(m.lcHighlightStack,Getwordcount(m.lcHighlightStack,'|'),'|')  )
  60779.         m.lnParamHRed    = Iif( Not m.llHighlight,    -1, Val(GetWordNum(m.lcColorValue,1,',')) )
  60780.         m.lnParamHGreen    = Iif( Not m.llHighlight,    -1, Val(GetWordNum(m.lcColorValue,2,',')) )
  60781.         m.lnParamHBlue    = Iif( Not m.llHighlight,    -1, Val(GetWordNum(m.lcColorValue,3,',')) )
  60782.         *-- proces trailing tags // same as before, in loop for consecutive tags: '</s><b><u>sometext</u><i>'
  60783.         Do while     Inlist( right(m.lcWordLow,3), '<b>','<i>','<u>','<s>','<c=','<h=')           ;
  60784.                 Or    Inlist( right(m.lcWordLow,4), '</b>','</i>','</u>','</s>','</c>','</h>');
  60785.                 ;
  60786.                 Or     Left( Substr(m.lcWordLow,Rat('<',m.lcWordLow)) ,3) ='<c='             ;
  60787.                 Or     Left( Substr(m.lcWordLow,Rat('<',m.lcWordLow)) ,3) ='<h='             ;
  60788.                 Or     Left( Substr(m.lcWordLow,Rat('<',m.lcWordLow)) ,7) ='<color='         ;
  60789.                 Or     Left( Substr(m.lcWordLow,Rat('<',m.lcWordLow)) ,11)='<highlight='     ;
  60790.                 ;
  60791.                 Or     Left( Substr(m.lcWordLow,Rat('<',m.lcWordLow)) ,10)='<fontname='     ;
  60792.                 Or     Left( Substr(m.lcWordLow,Rat('<',m.lcWordLow)) ,10)='<fontsize='     ;
  60793.                 Or     Left( Substr(m.lcWordLow,Rat('<',m.lcWordLow)) ,11)='<fontstyle='     ;
  60794.                 ;
  60795.                 Or     Left( Substr(m.lcWordLow,Rat('<',m.lcWordLow)) ,7) ='<fname='         ;
  60796.                 Or     Left( Substr(m.lcWordLow,Rat('<',m.lcWordLow)) ,7) ='<fsize='         ;
  60797.                 Or     Left( Substr(m.lcWordLow,Rat('<',m.lcWordLow)) ,8) ='<fstyle='         ;
  60798.                 ;
  60799.                 Or  Inlist( Substr(m.lcWordLow,Rat('<',m.lcWordLow)), '</color>', '</highlight>', ;
  60800.                         '</fontname>', '</fontsize>', '</fontstyle>', '</fname>', '</fsize>', '</fstyle>' )    ;
  60801.             *-- enable/disable style flags
  60802.             m.llBold         = (m.llBold         Or Right(m.lcWordLow,3)='<b>') And Right(m.lcWordLow,4)!='</b>'
  60803.             m.llItalic        = (m.llItalic         Or Right(m.lcWordLow,3)='<i>') And Right(m.lcWordLow,4)!='</i>'
  60804.             m.llUnderline    = (m.llUnderline    Or Right(m.lcWordLow,3)='<u>') And Right(m.lcWordLow,4)!='</u>'
  60805.             m.llStrikeThru    = (m.llStrikeThru    Or Right(m.lcWordLow,3)='<s>') And Right(m.lcWordLow,4)!='</s>'
  60806.             *--             
  60807.             *-- if colors, save in stack
  60808.             If        Left( Substr(m.lcWordLow,Rat('<',m.lcWordLow)) ,3)='<c=' OR ;
  60809.                     Left( Substr(m.lcWordLow,Rat('<',m.lcWordLow)) ,7)='<color=' ;
  60810.                     Then 
  60811.                 *-- 
  60812.                 m.lcColorValue    = Substr(m.lcWord, RAt('=',m.lcWord)+1, RAt('>',m.lcWord)-RAt('=',m.lcWord)-1 )
  60813.                 m.lcColorValue    = Strtran(m.lcColorValue,' ','')    && here it could be converted from rgb to number if it's more convenient // the user could use a number instead of an RGB pair also
  60814.                 *-- 
  60815.                 m.lcColorStack     = m.lcColorStack + Iif(Not Empty(m.lcColorStack),'|','') + m.lcColorValue
  60816.                 *? '  +colorstack: '+m.lcColorStack
  60817.             EndIf 
  60818.             *-- 
  60819.             If        Left( Substr(m.lcWordLow,Rat('<',m.lcWordLow)) , 3)='<h=' OR ;
  60820.                     Left( Substr(m.lcWordLow,Rat('<',m.lcWordLow)) ,11)='<highlight=' ;
  60821.                     Then 
  60822.                 *-- 
  60823.                 m.lcColorValue        = Substr(m.lcWord, RAt('=',m.lcWord)+1, RAt('>',m.lcWord)-RAt('=',m.lcWord)-1 )
  60824.                 m.lcColorValue        = Strtran(m.lcColorValue,' ','')    && here it could be converted from rgb to number if it's more convenient // the user could use a number instead of an RGB pair also
  60825.                 *-- 
  60826.                 m.lcHighlightStack     = m.lcHighlightStack + Iif(Not Empty(m.lcHighlightStack),'|','') + m.lcColorValue
  60827.                 *? '  +highlightstack: '+m.lcHighlightStack
  60828.             EndIf 
  60829.             *-- 
  60830.             If        Left( Substr(m.lcWordLow,Rat('<',m.lcWordLow)) , 7)='<fname=' OR ;
  60831.                     Left( Substr(m.lcWordLow,Rat('<',m.lcWordLow)) ,10)='<fontname=' ;
  60832.                     Then 
  60833.                 *-- 
  60834.                 m.lcTagValue        = Substr(m.lcWord, RAt('=',m.lcWord)+1, RAt('>',m.lcWord)-RAt('=',m.lcWord)-1 )
  60835.                 m.lcTagValue        = Alltrim(Strtran(m.lcTagValue,["],''))
  60836.                 *-- 
  60837.                 m.lcFontNameStack    = m.lcFontNameStack    + Iif(Not Empty(m.lcFontNameStack),'|','') + m.lcTagValue
  60838.                 *? '  +fontnamestack: '+m.lcFontNameStack
  60839.             EndIf 
  60840.             *-- 
  60841.             If        Left( Substr(m.lcWordLow,Rat('<',m.lcWordLow)) , 7)='<fsize=' OR ;
  60842.                     Left( Substr(m.lcWordLow,Rat('<',m.lcWordLow)) ,10)='<fontsize=' ;
  60843.                     Then 
  60844.                 *-- 
  60845.                 m.lcTagValue        = Substr(m.lcWord, RAt('=',m.lcWord)+1, RAt('>',m.lcWord)-RAt('=',m.lcWord)-1 )
  60846.                 m.lcTagValue        = Strtran( Strtran(m.lcTagValue,["],'') ,' ','')
  60847.                 *-- 
  60848.                 m.lcFontSizeStack    = m.lcFontSizeStack    + Iif(Not Empty(m.lcFontSizeStack),'|','') + m.lcTagValue
  60849.                 *? '  +fontsizestack: '+m.lcFontSizeStack
  60850.             EndIf 
  60851.             *-- 
  60852.             If        Left( Substr(m.lcWordLow,Rat('<',m.lcWordLow)) , 8)='<fstyle=' OR ;
  60853.                     Left( Substr(m.lcWordLow,Rat('<',m.lcWordLow)) ,11)='<fontstyle=' ;
  60854.                     Then 
  60855.                 *-- 
  60856.                 m.lcTagValue        = Substr(m.lcWord, RAt('=',m.lcWord)+1, RAt('>',m.lcWord)-RAt('=',m.lcWord)-1 )
  60857.                 m.lcTagValue        = Upper( Strtran( Strtran(m.lcTagValue,["],'') ,' ','') )
  60858.                 *-- 
  60859.                 m.lcFontStyleStack    = m.lcFontStyleStack + Iif(Not Empty(m.lcFontStyleStack),'|','') + m.lcTagValue
  60860.                 *? '  +fontnamestack: '+m.lcFontNameStack
  60861.                 m.llBold            = ('B' $ m.lcTagValue)
  60862.                 m.llItalic            = ('I' $ m.lcTagValue)
  60863.                 m.llUnderline        = ('U' $ m.lcTagValue)
  60864.                 m.llStrikeThru        = ('S' $ m.lcTagValue)
  60865.                 *-- 
  60866.             EndIf 
  60867.             *-- if end of color Then remove from stack
  60868.             If Right(m.lcWordLow,4)='</c>' Or Right(m.lcWordLow,8)='</color>' Then 
  60869.                 *-- 
  60870.                 m.lcColorStack     = ;
  60871.                     Iif( Empty(m.lcColorStack) Or Occurs('|',m.lcColorStack)=0, '',;
  60872.                     Left( m.lcColorStack, AT('|',m.lcColorStack,Occurs('|',m.lcColorStack))-1 ) )
  60873.                 *? '  -colorstack: '+m.lcColorStack
  60874.             EndIf 
  60875.             *-- 
  60876.             If Right(m.lcWordLow,4)='</h>' Or Right(m.lcWordLow,12)='</highlight>' Then 
  60877.                 *-- 
  60878.                 m.lcHighlightStack     = ;
  60879.                     Iif( Empty(m.lcHighlightStack) Or Occurs('|',m.lcHighlightStack)=0, '',;
  60880.                     Left( m.lcHighlightStack, AT('|',m.lcHighlightStack,Occurs('|',m.lcHighlightStack))-1 ) )
  60881.                 *? '  -highlightstack: '+m.lcHighlightStack
  60882.             EndIf 
  60883.             *-- 
  60884.             If Right(m.lcWordLow,8)='</fname>' Or Right(m.lcWordLow,11)='</fontname>' Then 
  60885.                 *-- 
  60886.                 m.lcFontNameStack     = ;
  60887.                     Iif( Empty(m.lcFontNameStack) Or Occurs('|',m.lcFontNameStack)=0, '',;
  60888.                     Left( m.lcFontNameStack, AT('|',m.lcFontNameStack,Occurs('|',m.lcFontNameStack))-1 ) )
  60889.                 *? '  +fontnamestack: '+m.lcFontNameStack
  60890.             EndIf 
  60891.             *-- 
  60892.             If Right(m.lcWordLow,8)='</fsize>' Or Right(m.lcWordLow,11)='</fontsize>' Then 
  60893.                 *-- 
  60894.                 m.lcFontSizeStack    = ;
  60895.                     Iif( Empty(m.lcFontSizeStack) Or Occurs('|',m.lcFontSizeStack)=0, '',;
  60896.                     Left( m.lcFontSizeStack, AT('|',m.lcFontSizeStack,Occurs('|',m.lcFontSizeStack))-1 ) )
  60897.                 *? '  +fontsizestack: '+m.lcFontSizeStack
  60898.             EndIf 
  60899.             *-- 
  60900.             If Right(m.lcWordLow,9)='</fstyle>' Or Right(m.lcWordLow,12)='</fontstyle>' Then 
  60901.                 *-- 
  60902.                 m.lcFontStyleStack    = ;
  60903.                     Iif( Empty(m.lcFontStyleStack) Or Occurs('|',m.lcFontStyleStack)=0, '',;
  60904.                     Left( m.lcFontStyleStack, AT('|',m.lcFontStyleStack,Occurs('|',m.lcFontStyleStack))-1 ) )
  60905.                 *? '  +fontstylestack: '+m.lcFontStyleStack
  60906.                 *-- retrieve curent style in stack to setup flags
  60907.                 m.lcTagValue    = Getwordnum(m.lcFontStyleStack,Getwordcount(m.lcFontStyleStack,'|'),'|')
  60908.                 *-- 
  60909.                 m.llBold            = ('B' $ m.lcTagValue)
  60910.                 m.llItalic            = ('I' $ m.lcTagValue)
  60911.                 m.llUnderline        = ('U' $ m.lcTagValue)
  60912.                 m.llStrikeThru        = ('S' $ m.lcTagValue)
  60913.                 *-- 
  60914.             EndIf 
  60915.             *-- some flags are .T. if stack is not empty
  60916.             m.llColor        = Not Empty(m.lcColorStack)
  60917.             m.llHighlight    = Not Empty(m.lcHighlightStack)
  60918.             m.llFontName    = Not Empty(m.lcFontNameStack)
  60919.             m.llFontSize    = Not Empty(m.lcFontSizeStack)
  60920.             m.llFontStyle    = Not Empty(m.lcFontStyleStack)
  60921.             *-- remove procesed tag
  60922.             m.lcWord     = Left(m.lcWord,Rat('<',m.lcWord)-1)
  60923.             m.lcWordLow    = Lower(m.lcWord)
  60924.         EndDo         
  60925.         *-- the word to be sent as parameter
  60926.         m.lcParamWord     = Alltrim(m.lcWord)
  60927.         *-- we have a word
  60928.         If Not Empty(m.lcParamWord) Then 
  60929.             *-- 
  60930.             If Not m.tlReturnVanillaString AND NOT EMPTY(m.lcParamWord) Then 
  60931.                 *-- not first word, so previous whitespace might be styled
  60932. *!*                    If m.llWhiteStyled Then 
  60933. *!*                        *-- 
  60934. *!*                        DrawInReport(' ', ;
  60935. *!*                            m.lcWhiteFName, m.lnWhiteFSize, m.lcWhiteFStyle, ;
  60936. *!*                            m.lnWhiteCRed, m.lnWhiteCGreen, m.lnWhiteCBlue, ;
  60937. *!*                            m.lnWhiteHRed, m.lnWhiteHGreen, m.lnWhiteHBlue  )
  60938. *!*                        *-- 
  60939. *!*                    EndIf 
  60940.                 *-- draw the word
  60941. *                DrawInReport( m.lcParamWord, ;
  60942.                     m.lcParamFName,m.lnParamFSize, m.lcParamFStyle, ;
  60943.                     m.lnParamCRed, m.lnParamCGreen, m.lnParamCBlue, ;
  60944.                     m.lnParamHRed, m.lnParamHGreen, m.lnParamHBlue )
  60945.                 * Add to the array of words
  60946.                 This.aTFWords(m.lnI, 1)  = m.lcParamWord
  60947.                 This.aTFWords(m.lnI, 2)  = m.lcParamFName
  60948.                 This.aTFWords(m.lnI, 3)  = m.lnParamFSize
  60949.                 This.aTFWords(m.lnI, 4)  = m.lcParamFStyle
  60950.                 This.aTFWords(m.lnI, 5)  = m.lnParamCRed
  60951.                 This.aTFWords(m.lnI, 6)  = m.lnParamCGreen
  60952.                 This.aTFWords(m.lnI, 7)  = m.lnParamCBlue
  60953.                 This.aTFWords(m.lnI, 8)  = m.lnParamHRed 
  60954.                 This.aTFWords(m.lnI, 9)  = m.lnParamHGreen
  60955.                 This.aTFWords(m.lnI, 10) = m.lnParamHBlue
  60956.                 *-- 
  60957.     *!*            Else     &&-- this might be usefull to decorate with whitespace, hoever cesar will justify the text making the result unpredictible
  60958.     *!*                *-- before the first word, prefixed whitespace could be styled // mid-white-space style change
  60959.     *!*                DrawInReport(' ', ;
  60960.     *!*                    m.lcParamFName,m.lnParamFSize, m.lcParamFStyle, ;
  60961.     *!*                    -1, -1, -1, ;
  60962.     *!*                    m.lnParamHRed, m.lnParamHGreen, m.lnParamHBlue )
  60963.     *!*                *-- 
  60964.             Else 
  60965.                 *-- compose normal string, without tags
  60966.                 m.lcResultString = Evl(m.lcResultString+' ','') + m.lcParamWord 
  60967.             EndIf 
  60968.             *-- 
  60969.         EndIf 
  60970.     EndFor 
  60971.     *-- if vanillastring is requested
  60972.     If m.tlReturnVanillaString Then 
  60973.         Return m.lcResultString
  60974.     EndIf 
  60975. ENDPROC
  60976. PROCEDURE tfaddtooutput
  60977. LPARAMETERS tnRecNo, tnX, tnY, tnW, tnH, tnObjectContinuationType, ;
  60978.     tcWord, tiGDIPlusImage, ;
  60979.     tcFont, ; && Font name
  60980.     m.tnFontSize, ; && Font size
  60981.     m.tnFontStyle, ; && Font style
  60982.     m.tnPenRed, ; && Pen red
  60983.     m.tnPenGreen, ; && Pen green
  60984.     m.tnPenBlue, ; && Pen blue
  60985.     m.tnFillRed, ; && Fill red
  60986.     m.tnFillGreen, ; && Fill green
  60987.     m.tnFillBlue, ; && Fill blue
  60988.     m.toFRX
  60989. LOCAL lnSelect, lnRecno
  60990. m.lnSelect = SELECT()
  60991. m.lnRecno  = RECNO()
  60992. IF EMPTY(This.cAuxFullOutputAlias)
  60993.     This.cAuxFullOutputAlias = STRTRAN(SYS(2015), " ", "_")
  60994.     SELECT 0000 as nRecNo, ;
  60995.         CAST(0 AS N(9, 3)) as FRXWidth, ;
  60996.         CAST(0 AS N(9, 3)) as FRXHeight, ;
  60997.         CAST(0 AS N(9, 3)) as FRXTop, ;
  60998.         CAST(0 AS I) AS    Left, ;
  60999.         CAST(0 AS I) AS    FRXRECNO, ;
  61000.         CAST(0 AS I) AS    DBFRECNO, ;
  61001.         CAST(0 AS I) AS    CONTTYPE, ;
  61002.         CAST("" AS M) AS CONTENTS, ;
  61003.         CAST("" AS M) AS UNCONTENTS, ;
  61004.         CAST(0 AS I) AS    PAGE, ;
  61005.         CAST(0 AS I) AS    FRXINDEX, ;
  61006.         CAST(0 AS I) AS    DYNAMICS, ;
  61007.         CAST(0 AS I) AS    ROTATE, * FROM (This.cFrxAlias) WHERE .F. INTO CURSOR (This.cAuxFullOutputAlias) READWRITE
  61008.     SELECT (This.cAuxFullOutputAlias)
  61009.     ALTER TABLE (This.cAuxFullOutputAlias) ALTER COLUMN Top Integer
  61010. ENDIF
  61011. * Add the information to be used by the Search engine
  61012. INSERT INTO (This.cOutputAlias) ;
  61013.     VALUES (0, 0, m.tnX, m.tnY, m.tnW, m.tnH, ;
  61014.       m.tnObjectContinuationType, m.tcWord, STRCONV(m.tcWord, 5), ;
  61015.       This.PageNo, 0, 0, 0)
  61016. * Add the information to be used to generate the outputs
  61017. * The width was enhanced in 30% to make sure that all words will be inserted in the outputs
  61018. SELECT (This.cAuxFullOutputAlias)
  61019. APPEND BLANK
  61020. GATHER NAME m.toFRX
  61021. REPLACE    FontFace   WITH    m.tcFont, ;
  61022.         FontSize   WITH    m.tnFontSize, ;
  61023.         FontStyle  with    m.tnFontStyle, ;
  61024.         PenRed       with    m.tnPenRed, ;
  61025.         PenGreen   WITH    m.tnPenGreen, ;
  61026.         PenBlue       WITH    m.tnPenBlue, ;
  61027.         FillRed       WITH    m.tnFillRed, ;
  61028.         FillGreen  WITH    m.tnFillGreen, ;
  61029.         FillBlue   WITH    m.tnFillBlue, ;
  61030.         Mode       WITH    0, ;
  61031.         Left       WITH    m.tnX, ;
  61032.         Top           WITH    m.tnY, ;
  61033.         Width       WITH    INT(m.tnW * 1.15), ;
  61034.         Height       WITH    m.tnH, ;
  61035.         FRXRECNO   WITH    m.tnRecNo, ;
  61036.         CONTTYPE   WITH    m.tnObjectContinuationType, ;
  61037.         CONTENTS   WITH    m.tcWord, ;
  61038.         UNCONTENTS WITH    STRCONV(m.tcWord, 5), ;
  61039.         Page       WITH    This.PageNo, ;
  61040.         FRXINDEX   WITH    m.tnRecNo ;
  61041.     IN (This.cAuxFullOutputAlias)
  61042. SELECT (m.lnSelect)
  61043. GO m.lnRecno
  61044. RETURN
  61045. ENDPROC
  61046. PROCEDURE makepdfoffline
  61047. LPARAMETERS tcFile
  61048. IF EMPTY(m.tcFile)
  61049.     RETURN
  61050. ENDIF
  61051. LOCAL loFP
  61052. loFP = _Screen.oFoxyPreviewer
  61053. loFP.cDestFile = m.tcFile
  61054. && Generate PDF from the offline table
  61055. LOCAL lnPgMode
  61056. m.lnPgMode = MAX(NVL(loFP.nPDFPageMode,1) - 1, 0)
  61057. m.lnPgMode = IIF(m.lnPgMode = 1, 2, m.lnPgMode)
  61058. LOCAL lnType
  61059. m.lnType = IIF(loFP.lPDFasImage, 2, 1)
  61060. && 1 = normal PDF, 2 = Image
  61061. IF m.lnType = 1 THEN && Normal Pdf
  61062.     LOCAL loListener AS "PdfListener" OF "PR_PDFx.vcx"
  61063.     m.loListener = NEWOBJECT('PdfListener', 'PR_PDFx.vcx')
  61064.     m.loListener.cCodePage = loFP.cCodePage &&CodePage
  61065.     * loListener.nPageMode = MAX(loFP.nPDFPageMode - 1, 0)
  61066.     m.loListener.cTargetFileName = m.tcFile
  61067.     m.loListener.lEmbedFont       = NVL(loFP.lPDFEmbedFonts, .F.)
  61068.     m.loListener.lCanPrint        = NVL(loFP.lPDFCanPrint, .T.)
  61069.     m.loListener.lCanEdit         = NVL(loFP.lPDFCanEdit, .T.)
  61070.     m.loListener.lCanCopy         = NVL(loFP.lPDFCanCopy, .T.)
  61071.     m.loListener.lCanAddNotes     = NVL(loFP.lPDFCanAddNotes, .T.)
  61072.     m.loListener.lEncryptDocument = NVL(loFP.lPDFEncryptDocument, .F.)
  61073.     m.loListener.cMasterPassword  = NVL(loFP.cPDFMasterPassword, "")
  61074.     m.loListener.cUserPassword    = NVL(loFP.cPDFUserPassword, "")
  61075.     m.loListener.lShowErrors      = NVL(loFP.lPDFShowErrors, .F.)
  61076.     m.loListener.cSymbolFontsList = NVL(loFP.cPDFSymbolFontsList, "")
  61077.     m.loListener.cPdfAuthor       = NVL(loFP.cPdfAuthor, "")
  61078.     m.loListener.cPdfTitle        = NVL(loFP.cPdfTitle, "")
  61079.     m.loListener.cPdfSubject      = NVL(loFP.cPdfSubject, "")
  61080.     m.loListener.cPdfKeyWords     = NVL(loFP.cPdfKeyWords, "")
  61081.     m.loListener.cPdfCreator      = NVL(loFP.cPdfCreator, "")
  61082.     m.loListener.lReplaceFonts    = NVL(loFP.lPdfReplaceFonts, .F.)
  61083.     m.loListener.nPageMode        = m.lnPgMode
  61084.     m.loListener.cDefaultFont     = NVL(loFP.cPDFDefaultFont, "Helvetica")
  61085.     m.loListener.QUIETMODE        = NVL(loFP.lQuietMode, .T.)
  61086.     LOCAL lcOutputDBF, lnWidth, lnHeight, llHasFJ
  61087.     m.lcOutputDBF = This.GetFullFRXData()
  61088.         IF loFP.oListener.lHasFJ
  61089.             m.loListener.lEmbedFont = .F.
  61090.         ENDIF
  61091.     CATCH
  61092.     ENDTRY
  61093.     IF NOT EMPTY(m.lcOutputDBF)
  61094.         m.lnWidth  = This.GETPAGEWIDTH()
  61095.         m.lnHeight = This.GETPAGEHEIGHT()
  61096.         m.loListener.OutputFromData(This, m.lcOutputDBF, m.lnWidth, m.lnHeight)
  61097.         m.loListener = NULL
  61098.     ENDIF
  61099. ELSE &&PDF As Image
  61100.     LOCAL loListener AS "PDFasImageListener" OF "PR_Pdfx.vcx"
  61101.     m.loListener = NEWOBJECT('PDFasImageListener', 'PR_PDFx.vcx')
  61102.     m.loListener.lEncryptDocument = NVL(loFP.lPDFEncryptDocument, .F.)
  61103.     m.loListener.cMasterPassword  = NVL(loFP.cPDFMasterPassword, "")
  61104.     m.loListener.cUserPassword    = NVL(loFP.cPDFUserPassword, "")
  61105.     m.loListener.cPdfAuthor       = NVL(loFP.cPdfAuthor, "")
  61106.     m.loListener.cPdfTitle        = NVL(loFP.cPdfTitle, "")
  61107.     m.loListener.cPdfSubject      = NVL(loFP.cPdfSubject, "")
  61108.     m.loListener.cPdfKeyWords     = NVL(loFP.cPdfKeyWords, "")
  61109.     m.loListener.cPdfCreator      = NVL(loFP.cPdfCreator, "")
  61110.     m.loListener.QUIETMODE        = NVL(loFP.lQuietMode, .T.)
  61111.     m.loListener.cTargetFileName  = m.tcFile
  61112.     m.loListener.OutputFromData(This, ;
  61113.         This.GETPAGEWIDTH(), ;
  61114.         This.GETPAGEHEIGHT())
  61115. ENDIF
  61116. && Ensure the thermometer is removed
  61117. IF NOT This.QuietMode
  61118.     =DoFoxyTherm()
  61119. ENDIF
  61120. ENDPROC
  61121. PROCEDURE makertfoffline
  61122. LPARAMETERS tcFile
  61123. IF EMPTY(m.tcFile)
  61124.     RETURN
  61125. ENDIF
  61126. LOCAL loFP
  61127. loFP = _SCREEN.oFoxyPreviewer
  61128. loFP.cDestFile = m.tcFile
  61129. && Generate RTF from the offline table
  61130. LOCAL loRTFListener as ReportListener 
  61131. m.loRtfListener = NEWOBJECT("RTFreportlistener", "PR_RTFListener")
  61132. m.loRtfListener.TargetFileName  = m.tcFile
  61133. m.loRtfListener.QuietMode       = loFP.lQuietMode
  61134. LOCAL lcOutputDBF, lnWidth, lnHeight
  61135. m.lcOutputDBF = This.GetFullFRXData()
  61136. IF NOT EMPTY(m.lcOutputDBF)
  61137.     m.lnWidth  = This.GETPAGEWIDTH()
  61138.     m.lnHeight = This.GETPAGEHEIGHT()
  61139.     m.loRTFListener.OutputFromData(This, m.lcOutputDBF, m.lnWidth, m.lnHeight)
  61140.     m.loRTFListener = NULL
  61141. ENDIF 
  61142. && Ensure the thermometer is removed
  61143. IF NOT loFP.lQuietMode
  61144.     =DoFoxyTherm()
  61145. ENDIF
  61146. ENDPROC
  61147. PROCEDURE makexlsoffline
  61148. LPARAMETERS tcFile
  61149. IF EMPTY(m.tcFile)
  61150.     RETURN
  61151. ENDIF
  61152. LOCAL _goFP
  61153. _goFP = _Screen.oFoxyPreviewer
  61154. _goFP.cDestFile = m.tcFile
  61155. && Generate XLS (XML worksheet) from the offline table
  61156. LOCAL loXLSListener AS "ExcelListener" && OF HOME() + "FFC/PR_ReportListener.vcx"
  61157. m.loXLSListener = NEWOBJECT("ExcelListener","pr_ExcelListener.vcx")
  61158. m.loXLSListener.cWorkbookFile    = m.tcFile
  61159. m.loXLSListener.cWorksheetName   = "Sheet"
  61160. m.loXLSListener.cCodePage        = _goFP.cCodePage
  61161. m.loXLSListener.lConvertToXLS    = NVL(_goFP.lExcelConvertToXLS, .T.)
  61162. m.loXLSListener.lRepeatHeaders   = NVL(_goFP.lExcelRepeatHeaders, .F.)
  61163. m.loXLSListener.lRepeatFooters   = NVL(_goFP.lExcelRepeatFooters, .F.)
  61164. m.loXLSListener.lHidePageNo      = NVL(_goFP.lExcelHidePageNo   , .T.)
  61165. m.loXLSListener.lAlignLeft       = NVL(_goFP.lExcelAlignLeft    , .T.)
  61166. m.loXLSListener.nExcelSaveFormat = NVL(_goFP.nExcelSaveFormat   , 56) && 56=Excel8 - 43=xlExcel9795
  61167. IF NOT _goFP.lQuietMode
  61168.     =DoFoxyTherm(0, _goFP.GetLoc("PREPDATA") + "..." + SPACE(10) + ;
  61169.         _goFP.GetLoc("PLEASEWAIT"), _goFP._RunStatusText)
  61170. ENDIF
  61171. LOCAL lcOutputDBF, lnWidth, lnHeight
  61172. m.lcOutputDBF = This.GetFullFRXData()
  61173. IF NOT EMPTY(m.lcOutputDBF)
  61174.     m.loXLSListener.OutputFromData(This)
  61175.     m.loXLSListener = NULL
  61176. ENDIF
  61177. && Ensure the thermometer is removed
  61178. IF NOT _goFP.lQuietMode
  61179.     =DoFoxyTherm()
  61180. ENDIF
  61181. ENDPROC
  61182. PROCEDURE makehtmloffline
  61183. LPARAMETERS tcFile, tlTemp
  61184. IF EMPTY(m.tcFile)
  61185.     RETURN
  61186. ENDIF
  61187. LOCAL loFP
  61188. loFP = _SCREEN.oFoxyPreviewer
  61189. loFP.cDestFile = m.tcFile
  61190. && Generate RTF from the offline table
  61191. LOCAL loHTMLListener AS REPORTLISTENER
  61192. m.loHTMLListener = NEWOBJECT("pr_HTMLListener2", "PR_HTMLListener2")
  61193. m.loHTMLListener.cTargetFileName = m.tcFile
  61194. m.loHTMLListener.QUIETMODE       = NVL(loFP.lQuietMode, .F.)
  61195. LOCAL lcOutputDBF, lnWidth, lnHeight
  61196. m.lcOutputDBF = This.GetFullFRXData()
  61197. IF NOT EMPTY(m.lcOutputDBF)
  61198.     m.lnWidth  = This.GETPAGEWIDTH()
  61199.     m.lnHeight = This.GETPAGEHEIGHT()
  61200.     m.loHTMLListener.OutputFromData(This, m.lcOutputDBF, m.lnWidth, m.lnHeight)
  61201.     m.loHTMLListener = NULL
  61202. ENDIF
  61203. IF NOT This.QuietMode
  61204.     =DoFoxyTherm()
  61205. ENDIF
  61206. ENDPROC
  61207. PROCEDURE makeimgoffline
  61208. LPARAMETERS tcFile, tcFormat
  61209. IF EMPTY(m.tcFile)
  61210.     RETURN
  61211. ENDIF
  61212. LOCAL lcFileFormat, lcDestFile
  61213. lcFileFormat = LOWER(m.tcFormat)
  61214. lcDestFile   = tcFile
  61215. LOCAL lnPageCount, lnFileType, lnDeviceType
  61216. m.lnPageCount = This.PageTotal
  61217. DO CASE
  61218.         *!*    100 - EMF
  61219.         *!*    101 - TIFF
  61220.         *!*    102 - JPEG
  61221.         *!*    103 - GIF
  61222.         *!*    104 - PNG
  61223.         *!*    105 - BMP
  61224.     CASE m.lcFileFormat = "emf"
  61225.         m.lnFileType = 100
  61226.     CASE m.lcFileFormat = "tiff" OR lcFileFormat = "tif"
  61227.         m.lnFileType = 101
  61228.         #DEFINE OutputNothing -1
  61229.         #DEFINE OutputTIFF 101
  61230.         #DEFINE OutputTIFFAdditive (OutputTIFF+100)
  61231.         LOCAL lnPageNo
  61232.         FOR m.lnPageNo = 1 TO m.lnPageCount
  61233.             IF (m.lnPageNo == 1)
  61234.                 m.lnDeviceType = OutputTIFF
  61235.             ELSE
  61236.                 m.lnDeviceType = OutputTIFFAdditive
  61237.             ENDIF
  61238.             This.OUTPUTPAGE(m.lnPageNo, m.lcDestFile, m.lnDeviceType)
  61239.         ENDFOR
  61240.     CASE m.lcFileFormat = "jpeg" OR lcFileFormat = "jpg"
  61241.         m.lnFileType = 102
  61242.     CASE m.lcFileFormat = "gif"
  61243.         m.lnFileType = 103
  61244.     CASE m.lcFileFormat = "png"
  61245.         m.lnFileType = 104
  61246.     CASE m.lcFileFormat = "bmp" OR lcFileFormat = "bitmap"
  61247.         m.lnFileType = 105
  61248. ENDCASE
  61249. IF m.lnFileType <> 101 && Not a TIFF
  61250.     ERASE (m.lcDestFile)
  61251.     LOCAL lcPathFile, lcDestFile2, lcIndex
  61252.     m.lcPathFile = ADDBS(JUSTPATH(m.lcDestFile)) + JUSTSTEM(m.lcDestFile)
  61253.     FOR m.lnPageNo = 1 TO m.lnPageCount
  61254.         IF m.lnPageNo = 1
  61255.             m.lcIndex = ""
  61256.         ELSE
  61257.             m.lcIndex = TRANSFORM(m.lnPageNo)
  61258.         ENDIF
  61259.         m.lcDestFile2 = FORCEEXT((m.lcPathFile + m.lcIndex),lcFileFormat)
  61260.         This.OUTPUTPAGE(m.lnPageNo, m.lcDestFile2, m.lnFileType)
  61261.     ENDFOR
  61262. ENDIF
  61263. ENDPROC
  61264. PROCEDURE EvaluateContents
  61265. LPARAMETERS m.nFRXRecno, m.oObjProperties
  61266. DO CASE
  61267. CASE ("*" $ m.oObjProperties.Text AND VARTYPE(m.oObjProperties.Value) = "N") OR ; && Adjust to fit size
  61268.           ("..." $ m.oObjProperties.Text AND VARTYPE(m.oObjProperties.Value) = "N")
  61269.     LOCAL lcFormat, lnValue
  61270.     m.lnValue = m.oObjProperties.Value
  61271.     TRY 
  61272.         IF This.aRecords[m.nFRXRecno + This.nAdj, 3] = .T. && Already been here
  61273.             m.lcFormat = This.aRecords[m.nFRXRecno + This.nAdj, 4]
  61274.         ELSE 
  61275.             LOCAL lnSession, lnSelect
  61276.             m.lnSession = SET("DataSession")
  61277.             m.lnSelect = SELECT()
  61278.             * Get the number format
  61279.             This.setFRXDataSession()
  61280.             SELECT FRX
  61281.             GO m.nFRXRecno
  61282.             m.lcFormat = FRX.Picture
  61283.             SET DATASESSION TO m.lnSession
  61284.             SELECT (m.lnSelect)
  61285.             This.aRecords[m.nFRXRecno + This.nAdj, 3] = .T.        && Already know that we need to stretch
  61286.             This.aRecords[m.nFRXRecno + This.nAdj, 4] = m.lcFormat && Save for future use
  61287.         ENDIF
  61288.         m.oObjProperties.Text = SPACE(1) + ALLTRIM(TRANSFORM(m.lnValue, &lcFormat.))
  61289.         m.oObjProperties.Reload = .T.
  61290.         This.aRecords[m.nFRXRecno + This.nAdj, 1] = m.oObjProperties
  61291.     CATCH TO m.loExc
  61292.         SET STEP ON 
  61293.     ENDTRY     
  61294. CASE This.aRecords[m.nFRXRecno + This.nAdj, 2] && <FJ> or <TF>
  61295.     This.aRecords[m.nFRXRecno + This.nAdj, 1] = m.oObjProperties
  61296. OTHERWISE
  61297.     DODEFAULT(m.nFRXRecno, m.oObjProperties)
  61298. ENDCASE
  61299. ENDPROC
  61300. PROCEDURE Init
  61301. WITH This
  61302.     .AddProperty("oGDIGraphics", NULL)
  61303.         && a reference to a GDIPlusX Graphics object
  61304.     .AddProperty("aRecords[1]")
  61305.         && an array of records in the FRX
  61306.     .AddProperty("lHasFJ", .F.)
  61307.     .AddProperty("nAdj", 0)
  61308.     .AddProperty("lNewPage", .F.)
  61309.     .AddProperty("lHasUserFld", .F.)
  61310. ENDWITH
  61311. DODEFAULT()
  61312. ENDPROC
  61313. PROCEDURE BeforeReport
  61314. DODEFAULT()
  61315. WITH This
  61316.         .oGDIGraphics = CREATEOBJECT("GPGraphics")
  61317.     CATCH
  61318.         .oGDIGraphics = NEWOBJECT("GPGraphics", "_GdiPlus.vcx")
  61319.     ENDTRY
  61320.     * Switch to the FRX cursor's datasession and for every record with the "<FJ>"
  61321.     * directive in the USER memo, flag in This.aRecords that we need to process it.
  61322.     * Then restore the datasession.
  61323.     .SetFRXDataSession()
  61324.     * Detect if we have the USER field. In FP DOS, this field did not exist.
  61325.     * http://foxypreviewer.codeplex.com/workitem/9236
  61326.     This.lHasUserFld = NOT EMPTY(FIELD("USER"))
  61327.     LOCAL lnAdj, lnOldSize
  61328.     m.lnAdj     = 0
  61329.     m.lnOldSize = 0
  61330.     m.lnOldSize = ALEN(.aRecords, 1)
  61331.     IF m.lnOldSize > 1
  61332.         m.lnAdj = m.lnOldSize
  61333.         This.nAdj = m.lnAdj
  61334.     ENDIF 
  61335.     .aRecords = .F. && Clear the "aRecords" array
  61336.     DIMENSION .aRecords[reccount() + m.lnAdj, 5]
  61337.     * Column 1 : Recno()
  61338.     * Column 2 : Has <FJ>
  61339.     * Column 3 : Stretched
  61340.     * Column 4 : Field Format (Picture)
  61341.     IF This.lHasUserFld
  61342.         SCAN FOR ('<FJ>' $ UPPER(USER)) OR ('<TF>' $ UPPER(USER)) OR ('<UC>' $ UPPER(USER))
  61343.             .aRecords[RECNO() + m.lnAdj, 2] = .T.
  61344.             .aRecords[RECNO() + m.lnAdj, 5] = UPPER(USER)
  61345.             .lHasFJ = .T.
  61346.         ENDSCAN FOR '<FJ>' $ UPPER(USER)
  61347.         .ResetDataSession()
  61348.     ENDIF
  61349.     This.PrepareWaterMark()
  61350. ENDWITH
  61351. ENDPROC
  61352. PROCEDURE BeforeBand
  61353. LPARAMETERS m.nBandObjCode, m.nFRXRecNo
  61354. IF THIS.lHasFJ = .T. OR THIS.lExpandFields
  61355.     THIS.CallEvaluateContents = 2
  61356. ENDIF
  61357. #DEFINE frx_objcod_pageheader 1
  61358. IF nBandObjCode==frx_objcod_pageheader
  61359.     THIS.lNewPage = .T.
  61360.     IF NOT THIS.IsSuccessor
  61361.         THIS.sharedGdiplusGraphics = THIS.GDIPLUSGRAPHICS
  61362.     ENDIF
  61363.     THIS.oGdiGraphics.SetHandle(This.SharedGdiplusGraphics)
  61364. ENDIF
  61365. DODEFAULT(m.nBandObjCode, m.nFRXRecNo)
  61366. ENDPROC
  61367. PROCEDURE Render
  61368. LPARAMETERS m.tnFRXRecno, m.tnLeft, m.tnTop, m.tnWidth, m.tnHeight,  m.tnObjectContinuationType, ;
  61369.         m.tcContentsToBeRendered, m.tiGDIPlusImage
  61370. * DODEFAULT(m.tnFRXRecno, m.tnLeft, m.tnTop, m.tnWidth, m.tnHeight,  m.tnObjectContinuationType, ;
  61371.         m.tcContentsToBeRendered, m.tiGDIPlusImage)
  61372. * RETURN 
  61373. * Check if field enlargement is needed
  61374.     IF This.aRecords(m.tnFRXRecno, 3) = .T.  && Using Expand fields
  61375.         m.tnWidth = m.tnWidth + 500
  61376.         m.tnLeft  = m.tnLeft  - 500
  61377.         m.tcContentsToBeRendered = STRCONV(This.aRecords(m.tnFRXRecno, 1).Text, 5)  && Convert to unicode, to allow it to store in the cursor
  61378.     ENDIF
  61379. CATCH
  61380. ENDTRY
  61381. * Adding the Watermark
  61382. IF This.lNewPage AND This.lUsingWatermark = .T.
  61383.     This.oGDIGraphics.SetHandle(IIF(This.IsSuccessor, ;
  61384.             This.SharedGDIPlusGraphics, This.GDIPlusGraphics))
  61385.     LOCAL lnX, lnY, lnWidth, lnHeight
  61386.     lnX = (1 - This.nWatermarkWidthRatio) / 2
  61387.     lnY = (1 - This.nWatermarkHeightRatio) / 2
  61388.     lnWidth  = This.nWatermarkWidthRatio
  61389.     lnHeight = This.nWatermarkHeightRatio
  61390.     * create a rectangle of the size of 60% of the report page
  61391.     LOCAL loRect as GpRectangle
  61392.     * loRect = .rectangle.new(lnx * this.sharedpagewidth, ;
  61393.             lny * this.sharedpageheight, ;
  61394.             this.sharedpagewidth * lnwidth, ;
  61395.             this.sharedpageheight * lnheight)
  61396.     * Create a rectangle
  61397.     loRect = CREATEOBJECT("GPRectangle", lnx * This.SharedPageWidth, ;
  61398.             lnY * this.sharedPageHeight, ;
  61399.             This.SharedPageWidth * lnWidth, ;
  61400.             This.SharedPageHeight * lnHeight)
  61401.     * Load the image file to gdi+
  61402.     LOCAL loBmp as GpBitmap OF ADDBS(HOME()) + "FFC\_Gdiplus.vcx"
  61403.     IF VARTYPE(This.oWatermarkBmp) = "O"
  61404.         loBmp = This.oWatermarkBmp
  61405.     ELSE 
  61406.         loBmp = CREATEOBJECT("GpBitmap")
  61407.         loBmp.CreateFromFile(This.cWatermarkImage)
  61408.     ENDIF
  61409.     LOCAL loGfx as GpGraphics OF ADDBS(HOME()) + "FFC\_Gdiplus.vcx"
  61410.     loGfx = This.oGdiGraphics
  61411.     loGfx.DrawImageScaled(loBmp, loRect) 
  61412.     This.lNewPage = .F.
  61413. ENDIF
  61414. LOCAL loObject, ;
  61415.     lcText, ;
  61416.     llFJ, ;
  61417.     llTF, llUC, ;
  61418.     llFlag, ;
  61419.     loGfx   as GpGraphics   OF HOME() + "\FFC\_GdiPlus.vcx", ;
  61420.     loRect  as GpRectangle  OF HOME() + "\FFC\_GdiPlus.vcx", ;
  61421.     loFont  as GpFont       OF HOME() + "\FFC\_GdiPlus.vcx", ;
  61422.     loBrush    as GpSolidBrush OF HOME() + "\FFC\_GdiPlus.vcx", ;
  61423.     loColor    as GpColor      OF HOME() + "\FFC\_GdiPlus.vcx", ;
  61424.     lnAlpha, ;
  61425.     llStoreData
  61426. m.llStoreData = This.lStoreData
  61427. * Checking if the HTML formatting was chosen
  61428. IF VARTYPE(This.aRecords[m.tnFRXRecNo + This.nAdj, 5]) = "C"
  61429.     m.llTF = ('<TF>' $ This.aRecords[m.tnFRXRecNo + This.nAdj, 5]) AND (NOT EMPTY(STRCONV(m.tcContentsToBeRendered,6)))
  61430. ENDIF 
  61431. * Checking if the UC (Unicode) string was chosen
  61432. IF VARTYPE(This.aRecords[m.tnFRXRecNo + This.nAdj, 5]) = "C"
  61433.     m.llUC = ('<UC>' $ This.aRecords[m.tnFRXRecNo + This.nAdj, 5]) AND (NOT EMPTY(STRCONV(m.tcContentsToBeRendered,6)))
  61434. ENDIF
  61435. && We'll store the data only if not <TF>
  61436. && The TF routine has its own storing data
  61437. IF This.lStoreData AND (NOT llTF)
  61438.     This.StoreFRXData(m.tnFRXRecno, m.tnLeft, m.tnTop, m.tnWidth, m.tnHeight,  m.tnObjectContinuationType, ;
  61439.         m.tcContentsToBeRendered, m.tiGDIPlusImage)
  61440. ENDIF
  61441. * See if the current object is supposed to be fully-justified. If we're
  61442. * continuing to render a object from previous page because of text overflow,
  61443. * set a flag.
  61444. IF NOT This.lHasFJ && OR (_goFP._nIndex > 1)
  61445.     This.lStoreData = .F.
  61446.     DODEFAULT(m.tnFRXRecNo, m.tnLeft, m.tnTop, m.tnWidth, m.tnHeight, ;
  61447.         m.tnObjectContinuationType, m.tcContentsToBeRendered, ;
  61448.         m.tiGDIPlusImage)
  61449.     This.lStoreData = m.llStoreData
  61450.     RETURN
  61451. ENDIF
  61452. m.loObject = This.aRecords[m.tnFRXRecNo + This.nAdj, 1]
  61453. IF VARTYPE(m.loObject) = 'O'
  61454.     m.lcText = m.loObject.Text
  61455.     IF (NOT llUC) AND (NOT llTF)
  61456.         m.llFJ   = (LEFT(m.lcText, 4) = '<FJ>' or This.aRecords[m.tnFRXRecNo + This.nAdj, 2]) AND  ;
  61457.             (NOT EMPTY(STRCONV(m.tcContentsToBeRendered,6)))
  61458.     ENDIF 
  61459. ENDIF VARTYPE(m.loObject) = 'O'
  61460. *!*    * Checking if the HTML formatting was chosen
  61461. *!*    IF VARTYPE(This.aRecords[tnFRXRecNo + This.nAdj, 5]) = "C"
  61462. *!*        llTF = ('<TF>' $ This.aRecords[tnFRXRecNo + This.nAdj, 5])
  61463. *!*    ENDIF
  61464. IF m.llTF
  61465.     This.oGDIGraphics.SetHandle(IIF(This.IsSuccessor, ;
  61466.             This.SharedGDIPlusGraphics, This.GDIPlusGraphics))
  61467.     This.DrawStringInTF( ;
  61468.         m.tnFRXRecNo, m.tnLeft, m.tnTop, m.tnWidth, m.tnHeight, m.tnObjectContinuationType, m.tcContentsToBeRendered, m.tiGDIPlusImage, ;
  61469.             m.lcText, ;
  61470.             m.loObject.FontName, m.loObject.FontSize, m.loObject.FontStyle, ;
  61471.             m.loObject.FillRed, m.loObject.FillGreen, m.loObject.FillBlue, ;
  61472.             m.loObject.PenRed, m.loObject.PenGreen, m.loObject.PenBlue)
  61473.     * Since we already drew the text, we don't want the default behavior to occur.
  61474.     NODEFAULT
  61475.     * Release the GDi+ objects used
  61476.     STORE "" TO m.loObject, m.loGfx, m.loRect, m.loFont, m.loBrush, m.loColor
  61477.     RETURN
  61478. ENDIF 
  61479. IF m.llFJ OR llUC
  61480.     IF m.tnObjectContinuationType > 0
  61481.         m.lcText = strconv(m.tcContentsToBeRendered, 6)
  61482.         IF INLIST(m.tnObjectContinuationType, 1, 2)
  61483.             m.llFlag = .T.
  61484.         ENDIF INLIST(m.tnObjectContinuationType, 1, 2)
  61485.     ENDIF m.tnObjectContinuationType > 0
  61486.     IF UPPER(LEFT(m.lcText, 4)) = '<FJ>'
  61487.         m.lcText = SUBSTR(m.lcText, 5) && Remove the <FJ> tag from string
  61488.     ENDIF UPPER(LEFT(m.lcText, 4)) = '<FJ>'
  61489.     m.lcText = STRTRAN(m.lcText,CHR(9),REPLICATE(CHR(160),8)) && Replaces the <TAB> With a CHR(160) to keep paragraphs
  61490.     * Set the GDI+ handle for our graphics object to the same one the report uses
  61491.     * (the property to use depends on whether this is a successor or not).
  61492.     This.oGDIGraphics.SetHandle(IIF(This.IsSuccessor, ;
  61493.             This.SharedGDIPlusGraphics, This.GDIPlusGraphics))
  61494.     * Create a rectangle
  61495.     m.loRect = CREATEOBJECT("GPRectangle", m.tnLeft, m.tnTop, m.tnWidth, m.tnHeight)
  61496.     * Create a font object using the text object's settings.
  61497.     m.loFont = CREATEOBJECT("GPFont")
  61498.     m.loFont.Create(m.loObject.FontName, m.loObject.FontSize, m.loObject.FontStyle, 3)
  61499.     * If the text uses an opaque background, draw a rectangle in the chosen
  61500.     * background color using a solid brush.
  61501.     m.lnAlpha = m.loObject.FillAlpha
  61502.     IF m.lnAlpha <> 0
  61503.         m.loColor = CREATEOBJECT("gpColor", ;
  61504.                 m.loObject.FillRed, ;
  61505.                 m.loObject.FillGreen, ;
  61506.                 m.loObject.FillBlue, ;
  61507.                 m.lnAlpha )
  61508.         m.loBrush = CREATEOBJECT("gpSolidBrush", m.loColor)
  61509.         This.oGDIGraphics.FillRectangle(m.loBrush, m.tnLeft, ;
  61510.                 m.tnTop, m.tnWidth, m.tnHeight)
  61511.     ENDIF m.lnAlpha <> 0
  61512.     m.loColor = CREATEOBJECT("gpColor", ;
  61513.                 m.loObject.PenRed, ;
  61514.                 m.loObject.PenGreen, ;
  61515.                 m.loObject.PenBlue, ;
  61516.                 m.loObject.PenAlpha)
  61517.     m.loBrush = CREATEOBJECT("gpSolidBrush", m.loColor)
  61518.     IF m.llFJ
  61519.         This.DrawStringJustified(m.lcText, m.loFont, ;
  61520.             m.loBrush, m.loRect, m.llFlag, This.oGDIGraphics)
  61521.     ELSE
  61522.         * This.oGDIGraphics.DrawStringW(m.lcText, m.loFont, m.loRect, m.loStringFormat, m.loBrush)
  61523.         *!*           LOCAL n, lcHex, lcUnicode
  61524.         *!*           lcUnicode = SPACE(0)
  61525.         *!*           FOR n = 1 TO GETWORDCOUNT(lcText, SPACE(1))
  61526.         *!*              lcHex = EVALUATE("0x" + GETWORDNUM(lcText, n, SPACE(1)))
  61527.         *!*              lcUnicode = lcUnicode + BINTOC(lcHex, "4rs")
  61528.         *!*           ENDFOR 
  61529.         *!*           This.oGDIGraphics.DrawStringW(m.lcUnicode, m.loFont, m.loRect, .F., m.loBrush)
  61530.         * lawords(1,2) = 0h03b503b903c103ae03bd03b7 && Greek
  61531.         * lawords(2,2) = 0hd3c9d654                 && Korean 
  61532.         * lawords(3,2) = 0h05e905dc05d505dd         && Hebrew
  61533.         LOCAL lcUnicode, n, lcInvert, lcCurrValue
  61534.         m.lcUnicode = 0h + STRCONV(m.tcContentsToBeRendered, 6)
  61535.         m.lcInvert  = 0h
  61536.         FOR n = 1 TO LEN(lcUnicode) STEP 2
  61537.             lcCurrValue = SUBSTR(lcUnicode, n, 2)
  61538.             lcInvert    = lcInvert + RIGHT(lcCurrValue,1) + LEFT(lcCurrValue,1)
  61539.         ENDFOR 
  61540.         lcUnicode = lcInvert
  61541.         This.oGDIGraphics.DrawStringW(m.lcUnicode, m.loFont, m.loRect, .F., m.loBrush)
  61542.     ENDIF 
  61543. ELSE     
  61544.     * If we're not drawing a full justified string, let VFP draw the text as usual.
  61545.     This.lStoreData = .F.
  61546.     DODEFAULT(m.tnFRXRecNo, m.tnLeft, m.tnTop, m.tnWidth, m.tnHeight, ;
  61547.         m.tnObjectContinuationType, m.tcContentsToBeRendered, ;
  61548.         m.tiGDIPlusImage)
  61549.     This.lStoreData = m.llStoreData
  61550. ENDIF m.llFJ
  61551. * Since we already drew the text, we don't want the default behavior to occur.
  61552. NODEFAULT
  61553. * Release the GDi+ objects used
  61554. STORE "" TO m.loObject, m.loGfx, m.loRect, m.loFont, m.loBrush, loColor
  61555. ENDPROC
  61556. PROCEDURE AfterReport
  61557. This.oGDIGraphics.SetHandle(0)
  61558. This.oGdiGraphics = ""
  61559. DODEFAULT()
  61560. IF This.lObjTypeMode AND VARTYPE(This.CommandClauses) = "O"
  61561.     LOCAL llOpenViewer, lcTargetFile, lcDestFile
  61562.     llOpenViewer = This.CommandClauses.Preview
  61563.     IF INLIST(This.OutputType, 20, 16)
  61564.         lcTargetFileName = This.CommandClauses.ToFile
  61565.         IF EMPTY(lcTargetFileName)
  61566.             DODEFAULT()
  61567.             RETURN
  61568.         ENDIF
  61569.         LOCAL lcFileExt
  61570.         lcFileExt = UPPER(JUSTEXT(lcTargetFileName))
  61571.         DO CASE
  61572.         CASE lcFileExt = "PDF"
  61573.             This.MakePDFOffline(lcTargetFileName)
  61574.         CASE INLIST(lcFileExt, "HTM", "HTML", "MHT")
  61575.             This.MakeHTMLOffline(lcTargetFileName)
  61576.         CASE INLIST(lcFileExt, "RTF", "DOC")
  61577.             This.MakeRTFOffline(lcTargetFileName)
  61578.         CASE INLIST(lcFileExt, "XML", "XLS")
  61579.             This.MakeXLSOffline(lcTargetFileName)
  61580.         CASE INLIST(lcFileExt, "BMP", "BITMAP", "GIF", "JPG", "JPEG", "TIF", "TIFF", "PNG", "EMF")
  61581.             This.MakeImgOffline(lcTargetFileName, lcFileExt)
  61582.         OTHERWISE
  61583.         ENDCASE        
  61584.         lcDestFile = lcTargetFileName
  61585.     ELSE 
  61586.         RETURN 
  61587.     ENDIF 
  61588.     LOCAL llSaved
  61589.     llSaved = FILE(lcDestFile)
  61590.     IF llSaved
  61591.         _Screen.oFoxyPreviewer.lSaved = llSaved
  61592.         IF llOpenViewer
  61593.             This.ShellExec(lcDestFile)
  61594.         ENDIF
  61595.     ENDIF
  61596. ENDIF 
  61597. ENDPROC
  61598. TCNODE
  61599. TLOPEN
  61600. TCIDREF
  61601. TVFORMATTING
  61602. LCNODE
  61603. IDATTRIBUTE
  61604. IDREFATTRIBUTE
  61605. TCNODE
  61606. TCVALUE
  61607. TVIDREF
  61608. TVFORMATTING
  61609. LCVALUE
  61610. LCNODE
  61611. XMLRAWCONV    
  61612. XMLRAWTAGD
  61613. m.lcValue = STRTRAN(m.tcValue, '&', '&' )      
  61614. m.lcValue = STRTRAN(m.lcValue, '<', '<' )
  61615. m.lcValue = STRTRAN(m.lcValue, '>', '>' )
  61616. m.lcValue = STRTRAN(m.lcValue, '"', '"' )
  61617. m.lcValue = STRTRAN(m.lcValue, ['], ''' )
  61618. TCVALUE
  61619. LCVALUE
  61620. LICHAR
  61621. TCCONTENTS
  61622. TARGETHANDLEX
  61623. VNEWVAL
  61624. THIS    
  61625. ISRUNNING
  61626. INCLUDEBREAKSINDATAb
  61627. VNEWVAL
  61628. THIS    
  61629. ISRUNNING
  61630. XMLMODE
  61631. INCLUDEPAGE    
  61632. ISRUNNING    
  61633. DATANODES    
  61634. PAGENODES
  61635. COLUMNNODES
  61636. CURRENTBAND
  61637. CURRENTPAGE
  61638. CURRENTCOLUMN
  61639. EVALUATECONTENTSVALUES
  61640. SUCCESSORGFXNORENDER
  61641. CLEARSTATUS
  61642. Msxml2.FreeThreadedDOMDocument.4.0
  61643. |DOCUMENT|
  61644. |ELEMENT|
  61645. COLLECTION
  61646. externalFileLocation
  61647. TVSOURCE
  61648. TVPROCESSOR
  61649. TVPARAMCOLLECTION
  61650. TVFRXALIAS
  61651. LOSOURCE
  61652. LOPROCESSOR
  61653. LCRETURN    
  61654. LLSUCCESS
  61655. LIPARAM    
  61656. LISESSION
  61657. LLCHARSETSINUSE
  61658. FRXCHARSETSINUSE
  61659. FIXMSXMLOBJECTFORDTDS
  61660. LOADXML
  61661. PARSEERROR
  61662. REASON
  61663. NODETYPESTRING
  61664. LOADPROCESSOROBJECT
  61665. CREATEPROCESSOR
  61666. STYLESHEET    
  61667. BASECLASS
  61668. COUNT
  61669. ADDPARAMETER
  61670. GETKEY
  61671. EXTERNALFILELOCATION
  61672. INPUT    
  61673. TRANSFORM
  61674. OUTPUT
  61675. VNEWVAL
  61676. CURRENTDOCUMENTE
  61677. VNEWVAL
  61678. THIS    
  61679. ISRUNNING
  61680. VERIFYNCNAME
  61681. IDATTRIBUTEE
  61682. VNEWVAL
  61683. THIS    
  61684. ISRUNNING
  61685. VERIFYNCNAME
  61686. IDREFATTRIBUTE
  61687. VNEWVAL
  61688. XSLTPROCESSORRDL
  61689. STYLESHEET
  61690. LOPROCESSOR
  61691. LOADPROCESSOROBJECT
  61692. VNEWVAL
  61693. XSLTPROCESSORUSER
  61694. STYLESHEET
  61695. LOPROCESSOR
  61696. LOADPROCESSOROBJECTf
  61697. QuietMode
  61698. RESETREPORT
  61699. CLOSETARGETFILE
  61700. NOPAGEEJECT
  61701. HADERROR
  61702. RESETTODEFAULT
  61703. CURRENTDOCUMENT?
  61704. TCNAME
  61705. LLVALID
  61706. LICHAR
  61707. LCCHAR9
  61708. VNEWVAL
  61709. THIS 
  61710. INCLUDEFORMATTINGINLAYOUTOBJECTSD
  61711. VNEWVAL
  61712. THIS    
  61713. ISRUNNING
  61714. INCLUDEBANDSWITHNOOBJECTS
  61715. Nodes
  61716. Nodes
  61717. LISELECT    
  61718. LLSUCCESS
  61719. NODES
  61720. OBJTYPE
  61721. VERIFYNCNAME
  61722. OBJVALUE
  61723. VNEWVAL
  61724. THIS    
  61725. ISRUNNING
  61726. NOPAGEEJECT
  61727. DATASESSIONv
  61728. Msxml2.XSLTemplate.4.0
  61729. Msxml2.FreeThreadedDOMDocument.4.0
  61730. TCVAL
  61731. LORETURN
  61732. LOPROCESSOR
  61733. LOSTYLESHEET    
  61734. LISESSION
  61735. RESETDATASESSION
  61736. FIXMSXMLOBJECTFORDTDS
  61737. LOADXML
  61738. PARSEERROR
  61739. REASON
  61740. STYLESHEET
  61741. FRXRecno
  61742. FRXRecno
  61743. Microsoft.VFP.Reporting.Builder.AdvancedProperty
  61744. HTML.PrintablePageLink
  61745. TNLEFT
  61746. TNTOP
  61747. TNWIDTH
  61748. TNHEIGHT
  61749. TNOBJECTCONTINUATIONTYPE
  61750. LCINFO
  61751. CONTATTR 
  61752. INCLUDEFORMATTINGINLAYOUTOBJECTS
  61753. LEFTATTR
  61754. TOPATTR    
  61755. WIDTHATTR
  61756. HEIGHTATTR
  61757. SETFRXDATASESSION
  61758. LLPAGEIMAGES
  61759. CURRENTPAGEIMAGEFILENAME
  61760. MEMBERDATAALIAS
  61761. INCLUDEDATATYPEATTRIBUTES
  61762. FORMATTINGCHANGES
  61763. DTEXT
  61764. DATATYPEATTR
  61765. DTYPE
  61766. DATATEXTATTR
  61767. XMLRAWCONV
  61768. FRXRECNO
  61769. EXECWHEN
  61770. EVALUATESTRINGTOBOOLEAN
  61771. EXECUTE
  61772. PAGEIMAGEATTR
  61773. VNEWVAL
  61774. THIS    
  61775. ISRUNNING
  61776. VERIFYNCNAME
  61777. TOPATTRE
  61778. VNEWVAL
  61779. THIS    
  61780. ISRUNNING
  61781. VERIFYNCNAME
  61782. LEFTATTRE
  61783. VNEWVAL
  61784. THIS    
  61785. ISRUNNING
  61786. VERIFYNCNAME
  61787. HEIGHTATTRE
  61788. VNEWVAL
  61789. THIS    
  61790. ISRUNNING
  61791. VERIFYNCNAME    
  61792. WIDTHATTRE
  61793. VNEWVAL
  61794. THIS    
  61795. ISRUNNING
  61796. VERIFYNCNAME
  61797. CONTATTRJ
  61798. DATASESSIONv
  61799. VFPDataSource
  61800. ORDERv
  61801.  DESCC
  61802. FILTERv
  61803. SKIPv
  61804. VFPDataSource
  61805. SELECT &lcResult  FROM (m.lcAlias)  LEFT JOIN Bands ON &lcAlias..UniqueID = Bands.UniqueID  LEFT JOIN Objects ON &lcAlias..UniqueID = Objects.UniqueID  WHERE Platform = "WINDOWS" AND NOT DELETED()  INTO CURSOR VFPFRXLayoutObject READWRITE
  61806. VFPFRXLayoutObject.Tagb
  61807. VFPFRXLayoutObject.Tag2b
  61808. VFPFRXLayoutObject.Fontfaceb
  61809. Nodes
  61810. VFPFRXLayoutNode
  61811. attrC
  61812. VFPFRXLayoutNode
  61813. THIS.C
  61814.  attribute nodename
  61815. XMLAdapter
  61816. VFPFRXLayoutObject
  61817. VFPFRXLayoutNode
  61818. VFPFRXMemberData
  61819. VFPDataSource
  61820. lcResult
  61821. Microsoft.XMLDOM
  61822. VFPFRXCommand
  61823. THIS.CommandClauses.C
  61824. false
  61825. OutputTypeC
  61826. appName
  61827. targetFileName
  61828. VFPFRXPrintJob
  61829. pagewidth
  61830. pageheight
  61831. pagedesignC
  61832. whole
  61833. printable6
  61834. printresolutionCC
  61835. PRINTER
  61836. printresolution
  61837. TCNODENAME
  61838. TLASSTRING
  61839. LISELECTCURRENT
  61840. LISELECTFRX    
  61841. LISESSION
  61842. LIFLDS
  61843. LIDBFS
  61844. LIINDEX1
  61845. LIINDEX2
  61846. LAFLDS
  61847. LADBFS
  61848. LARELS
  61849. LCALIAS
  61850. LCKEY
  61851. LLDESC
  61852. LCFILTER
  61853. LCREL
  61854. LIRELS
  61855. LCSKIP
  61856. LCRESULT
  61857. LLWHOLEPAGE
  61858. ONODE
  61859. OCOMMAND
  61860. SETFRXDATASESSION
  61861. INCLUDEDATASOURCESINVFPRDL
  61862. VFPDATASOURCE    
  61863. THE_ALIAS
  61864. RPT_DRIVER
  61865. THE_DBF    
  61866. THE_ORDER
  61867. ORDER_DESC
  61868. THE_FILTER
  61869. THE_SKIP
  61870. FLDS    
  61871. THE_FIELD
  61872. THE_TYPE
  61873. THE_PARENT
  61874. THE_TARGET
  61875. THE_EXPR
  61876. SETCURRENTDATASESSION
  61877. LIINDEX
  61878. LCDBF
  61879. LITAG
  61880. DRIVINGALIAS
  61881. PREPAREFRXCOPY
  61882. GETFRXLAYOUTOBJECTFIELDLIST
  61883. REMOVEFRXCOPY
  61884. VFPFRXLAYOUTOBJECT
  61885. OBJTYPE
  61886. FONTFACE
  61887. NODES
  61888. OBJVALUE
  61889. OBJCODE
  61890. OBJINFO
  61891. VFPFRXLAYOUTNODE
  61892. RESPECTCURSORCP
  61893. ADDTABLESCHEMA
  61894. MEMBERDATAALIAS
  61895. RESPECTNESTING
  61896. XMLSCHEMALOCATION
  61897. TOXML
  61898. RESETDATASESSION
  61899. LOADXML
  61900. SELECTSINGLENODE
  61901. COMMANDCLAUSES
  61902. CREATEELEMENT
  61903. SETATTRIBUTE
  61904. OUTPUTTYPE
  61905. APPNAME
  61906. TARGETFILENAME
  61907. APPENDCHILD
  61908. SHAREDPAGEWIDTH
  61909. SHAREDPAGEHEIGHT
  61910. PRINTJOBNAME
  61911. VNEWVAL
  61912. INCLUDEDATASOURCESINVFPRDL
  61913. TOBJTYPE
  61914. TNAME
  61915. TPICTURE
  61916. TOFFSET
  61917. TPATHED
  61918. LCRETURN
  61919. LCFILE
  61920. COMMANDCLAUSES
  61921. APPLYUSERTRANSFORM
  61922. XSLTPROCESSORUSER
  61923. APPLYRDLTRANSFORM
  61924. LVPROCESSOR
  61925. XMLMODE
  61926. XSLTPROCESSORRDL
  61927. SAVETARGETFILENAME    
  61928. APPLYXSLT
  61929. TARGETFILENAME
  61930. XSLTPARAMETERSr
  61931. VNEWVAL
  61932. THIS    
  61933. ISRUNNING
  61934. APPLYUSERTRANSFORM
  61935. XSLTPROCESSORUSER
  61936. GETDEFAULTUSERXSLT
  61937. FRXRecno
  61938. FRXRecno
  61939. Microsoft.VFP.Reporting.Builder.AdvancedProperty
  61940. HTML.PrintablePageLink
  61941. TONODE
  61942. TNLEFT
  61943. TNTOP
  61944. TNWIDTH
  61945. TNHEIGHT
  61946. TNOBJECTCONTINUATIONTYPE
  61947. SETATTRIBUTE
  61948. CONTATTR 
  61949. INCLUDEFORMATTINGINLAYOUTOBJECTS
  61950. LEFTATTR
  61951. TOPATTR    
  61952. WIDTHATTR
  61953. HEIGHTATTR
  61954. LLPAGEIMAGES
  61955. SETFRXDATASESSION
  61956. CURRENTPAGEIMAGEFILENAME
  61957. MEMBERDATAALIAS
  61958. INCLUDEDATATYPEATTRIBUTES
  61959. FORMATTINGCHANGES
  61960. DTEXT
  61961. DATATYPEATTR
  61962. DTYPE
  61963. DATATEXTATTR
  61964. FRXRECNO
  61965. EXECWHEN
  61966. EXECUTE
  61967. PAGEIMAGEATTR
  61968. APPLYUSERTRANSFORM
  61969. XSLTPROCESSORUSER2
  61970. Title
  61971. Title Band nodename
  61972. Page Header Band nodename
  61973. Column Header Band nodename
  61974. Group Header Band nodename
  61975. Detail Band nodename
  61976. Group Footer Band nodename
  61977. Column Footer Band nodename
  61978. Page Footer Band nodename
  61979. Summary
  61980. Summary Band nodename
  61981. Detail Header Band nodename
  61982. Detail Footer Band nodename
  61983. VFP-Report
  61984. Report root nodename
  61985. Text object nodename
  61986. Expression object nodename
  61987. Picture object nodename
  61988. Shape object nodename
  61989. Line object nodename
  61990. Variable nodename
  61991. FontRes
  61992. FontResource nodename
  61993. DataEnv
  61994. DataEnvironment nodename
  61995. DE-Cursor
  61996. DE-Cursor nodename
  61997. DE-Relation
  61998. DE-Relation nodename
  61999. Group
  62000. Group selector nodename
  62001. Reports
  62002. XML Document root nodename
  62003. Report scope data root nodename
  62004. VFP-RDL
  62005. RDL layout description root nodename
  62006. Pages
  62007. Pages collection root nodename
  62008. Columns
  62009. Column collection root nodename
  62010. Run property set root nodename
  62011. OBJTYPE
  62012. COLLECTION
  62013. VNEWVAL
  62014. XSLTPARAMETERS    
  62015. BASECLASS
  62016. RECNO() AS FrxRecno, 
  62017. .PLATFORM, 
  62018. .NAME,
  62019. .EXPR,
  62020. .OFFSET,
  62021. .VPOS,
  62022. .HPOS,
  62023. .HEIGHT,
  62024. .OBJTYPE, 
  62025. .TAG, 
  62026. .TAG2,
  62027. .PENSIZE,
  62028. .PENPAT,
  62029. .FILLPAT,
  62030. .WIDTH,
  62031. .STYLE,
  62032. .PICTURE,
  62033. .ORDER,
  62034. .COMMENT,
  62035. .FILLCHAR,
  62036. .PENRED,
  62037. .PENGREEN,
  62038. .PENBLUE,
  62039. .FILLRED,
  62040. .FILLGREEN,
  62041. .FILLBLUE,
  62042. .FONTFACE, 
  62043. .FONTSTYLE,
  62044. .FONTSIZE,
  62045. .MODE,
  62046. .FLOAT,
  62047. .STRETCH,
  62048. .STRETCHTOP,
  62049. BITTEST( 
  62050. .FONTSTYLE, 0 ) AS FontBold,
  62051. BITTEST( 
  62052. .FONTSTYLE, 1 ) AS FontItalic,
  62053. BITTEST( 
  62054. .FONTSTYLE, 3 ) AS FontUnderline,
  62055. BITTEST( 
  62056. .FONTSTYLE, 7 ) AS FontStrikeThrough,
  62057. THIS.GetPathedImageInfo(
  62058. .ObjType, 
  62059. .Name, 
  62060. .Picture, 
  62061. .Offset) AS UnpathedImg,
  62062. THIS.GetPathedImageInfo(
  62063. .ObjType, 
  62064. .Name, 
  62065. .Picture, 
  62066. .Offset, .T.) AS PathedImg,
  62067. .TOP,
  62068. .BOTTOM,
  62069. .NOREPEAT,
  62070. .PAGEBREAK,
  62071. .COLBREAK,
  62072. .RESETPAGE,
  62073. .GENERAL,
  62074. .SPACING,
  62075. .SWAPHEADER,
  62076. .SWAPFOOTER,
  62077. .EJECTBEFOR,
  62078. .EJECTAFTER,
  62079. .TOTALTYPE,
  62080. .RESETTOTAL,
  62081. .DOUBLE,
  62082. .RESOID,1) AS FONTCHARSET,
  62083. .SUPALWAYS,
  62084. .SUPOVFLOW,
  62085. .SUPRPCOL,
  62086. .SUPGROUP,
  62087. .SUPVALCHNG,
  62088. .SUPEXPR,
  62089. .USER,
  62090. OBJECTS.UniqueID AS ObjID, OBJECTS.ObjName, Objects.Locale_ID,
  62091. OBJECTS.START_BAND_ID,OBJECTS.BAND_OFFSET,OBJECTS.END_BAND_ID,
  62092. BANDS.UNIQUEID AS BandID,BANDS.OBJCODE AS BandType,Bands.BANDLABEL,Bands.START,
  62093. Bands.STOP,Bands.BAND_SEQ,Bands.REL_BAND_ID, (
  62094. .ObjType=9 AND (NOT 
  62095. .Plain)) AS BandStretch
  62096. TCALIAS
  62097. LCALIAS
  62098. LCFILE
  62099. COMMANDCLAUSES
  62100. PREPAREFRXSWAPCOPY
  62101. TARGETFILENAME
  62102. TCALIAS
  62103. LCFILE
  62104. REMOVEFRXSWAPCOPYD
  62105. DATASESSIONv
  62106. Collection
  62107. TVVALUE
  62108. TSKEY
  62109. TLREMOVEONLY
  62110. LIINDEX    
  62111. LISESSION
  62112. XSLTPARAMETERS
  62113. RESETDATASESSION
  62114. COUNT
  62115. GETKEY
  62116. REMOVE
  62117. Nodes
  62118. FrxNodes
  62119. XXXX6
  62120. DATASESSIONv
  62121. Microsoft.XMLDOM
  62122. PCCO_
  62123. THIS.runCollector.Baseclassb
  62124. THIS.runCollector.C
  62125. COLLECTION
  62126. THIS.runCollector[C
  62127. TLASSTRING
  62128. LCITEM
  62129. LVVALUE    
  62130. LISESSION
  62131. SETFRXDATASESSION
  62132. NODES
  62133. OBJVALUE
  62134. RESETDATASESSION
  62135. LOADXML
  62136. SETCURRENTDATASESSION
  62137. RUNCOLLECTOR
  62138. LCFIELD1
  62139. LCFIELD2
  62140. LIINDEX
  62141. LISELECT
  62142. ADDRUNNODE    
  62143. LAMEMBERS    
  62144. BASECLASS
  62145. COUNT
  62146. GETKEY
  62147. DOCUMENTELEMENT
  62148. property
  62149. m.vValue.XMLb
  62150. TVVALUEEXPR
  62151. TCPROPERTYNAME
  62152. ONODE
  62153. VVALUE
  62154. CREATEELEMENT
  62155. SETATTRIBUTE
  62156. EVALUATEUSEREXPRESSION
  62157. APPENDCHILD
  62158. DOCUMENTELEMENT9
  62159. TVNEWVAL
  62160. INCLUDEDATATYPEATTRIBUTESE
  62161. VNEWVAL
  62162. THIS    
  62163. ISRUNNING
  62164. VERIFYNCNAME
  62165. DATATYPEATTRE
  62166. VNEWVAL
  62167. THIS    
  62168. ISRUNNING
  62169. VERIFYNCNAME
  62170. DATATEXTATTR]
  62171. FORMATTINGCHANGES
  62172. INCLUDEDATATYPEATTRIBUTES
  62173. FRXRECNO
  62174. DTEXT
  62175. DTYPER
  62176. TVALC
  62177. VNEWVAL
  62178. THIS    
  62179. ISRUNNING
  62180. VERIFYNCNAME
  62181. PAGEIMAGEATTR0
  62182. TCVAL"
  62183. XMLMODE
  62184. XSLTPROCESSORRDL
  62185. ProhibitDTD-
  62186. TOXML
  62187. VALIDATEONPARSE
  62188. RESOLVEEXTERNALS
  62189. SETPROPERTY
  62190. DATASESSIONv
  62191. TCALIAS    
  62192. LISESSION
  62193. LISELECT
  62194. LITALLY
  62195. LIREC
  62196. LCALIAS
  62197. LLSWITCHSESSIONS
  62198. FRXDATASESSION
  62199. SETFRXDATASESSION
  62200. OBJTYPE
  62201. DOUBLE
  62202. RESOIDE
  62203. CALLEVALUATECONTENTS
  62204. INCLUDEDATATYPEATTRIBUTES
  62205. XMLMODE
  62206. LLRESETQUIETMODE
  62207. HADERROR    
  62208. QUIETMODE
  62209. APPLYUSERTRANSFORM
  62210. APPLYRDLTRANSFORM$
  62211. Nodes
  62212. FrxNodes
  62213. XXXX6
  62214. NBANDOBJCODE    
  62215. NFRXRECNO
  62216. INVOKEONCURRENTPASS
  62217. TARGETHANDLE
  62218. LCBAND
  62219. LONODE
  62220. LCIDREF
  62221. LLFORMATBREAKBAND    
  62222. LOOBJECTS
  62223. LLOMITBAND
  62224. SETFRXDATASESSION
  62225. NODES
  62226. OBJVALUE
  62227. INCLUDEBANDSWITHNOOBJECTS    
  62228. FRXCURSOR
  62229. GETOBJECTSINBAND
  62230. UNIQUEID
  62231. FRXDATASESSION
  62232. COUNT
  62233. SETCURRENTDATASESSION
  62234. INCLUDEBREAKSINDATA
  62235. CURRENTBAND    
  62236. XMLRAWTAG
  62237. WRITERAW
  62238. CURRENTPAGE    
  62239. PAGENODES
  62240. CURRENTCOLUMN
  62241. COLUMNNODES
  62242. RESETDATASESSION
  62243. INCLUDEPAGEf
  62244. RESETDOCUMENT
  62245. COLUMNNODES
  62246. CURRENTBAND
  62247. CURRENTCOLUMN
  62248. CURRENTDOCUMENT
  62249. CURRENTPAGE    
  62250. DATANODES    
  62251. PAGENODES
  62252. XSLTPROCESSORRDL
  62253. XSLTPROCESSORUSER
  62254. XSLTPARAMETERS
  62255. SAFETYv
  62256. TCDBF
  62257. TLOVERWRITE
  62258. HADERROR
  62259. LISELECT
  62260. LLSAFETYON
  62261. OBJTYPE
  62262. OBJCODE
  62263. FRXNODES
  62264. INSERTXMLCONFIGRECORDS
  62265. XML Listener
  62266. READCONFIGURATION
  62267. APPNAME
  62268. RESETDOCUMENT
  62269. APPLYUSERTRANSFORM
  62270. GETDEFAULTUSERXSLT
  62271. HADERRORC
  62272. Nodes
  62273. FrxNodes
  62274. XXXX6
  62275. Nodes
  62276. FrxNodes
  62277. XXXX6
  62278. Nodes
  62279. FrxNodes
  62280. XXXX6
  62281. Nodes
  62282. ObjType
  62283. XXXX6
  62284. TLCALLEDEARLY
  62285. SETFRXDATASESSION
  62286. TARGETHANDLE
  62287. HADERROR
  62288. FILLRUNCOLLECTOR
  62289. LCNODE
  62290. XMLMODE
  62291. CURRENTBAND    
  62292. XMLRAWTAG
  62293. WRITERAW
  62294. INCLUDEBREAKSINDATA    
  62295. PAGENODES
  62296. NODES
  62297. OBJVALUE
  62298. COLUMNNODES
  62299. GETRUNNODECONTENTS
  62300. NOPAGEEJECT
  62301. COMMANDCLAUSES
  62302. CURRENTDOCUMENT
  62303. RUNCOLLECTORRESETLEVEL
  62304. RESETRUNCOLLECTOR
  62305. RESETREPORT
  62306. RESETDOCUMENT
  62307. APPLYUSERTRANSFORM
  62308. APPLYRDLTRANSFORM
  62309. APPLYUSERTRANSFORMTOOUTPUT
  62310. RESETDATASESSIONo
  62311. NERROR
  62312. CMETHOD
  62313. NLINE
  62314. CLOSETARGETFILE    
  62315. ISRUNNING    
  62316. QUIETMODE
  62317. CANCELREPORTh
  62318. RENDER
  62319. Nodes
  62320. ObjType
  62321. XXXX6
  62322. XXXXa
  62323. NFRXRECNO
  62324. NLEFT
  62325. NWIDTH
  62326. NHEIGHT
  62327. NOBJECTCONTINUATIONTYPE
  62328. CCONTENTSTOBERENDERED
  62329. GDIPLUSIMAGE
  62330. SUCCESSORGFXNORENDER
  62331. APPLYFX
  62332. INVOKEONCURRENTPASS
  62333. TARGETHANDLE
  62334. LCNODE
  62335. LONODE
  62336. LCFORMATTINGINFO
  62337. LCCONTENTS
  62338. LLTEXTTYPE    
  62339. LOBANDREF
  62340. LIBANDRECNO
  62341. SETFRXDATASESSION
  62342. OBJTYPE
  62343. INCLUDEBREAKSINDATA
  62344. CURRENTPAGE
  62345. CURRENTCOLUMN
  62346. NODES
  62347. OBJVALUE
  62348. GETRAWFORMATTINGINFO
  62349. XMLRAWNODE
  62350. CURRENTBAND    
  62351. FRXCURSOR
  62352. GETBANDFOR
  62353. UNIQUEID
  62354. FRXDATASESSION    
  62355. XMLRAWTAG
  62356. SHAREDPAGENO
  62357. PAGENO
  62358. SETCURRENTDATASESSION
  62359. BEFOREBAND
  62360. WRITERAW
  62361. RESETDATASESSIONN
  62362. Nodes
  62363. FrxNodes
  62364. XXXX6
  62365. NBANDOBJCODE    
  62366. NFRXRECNO
  62367. TLCONTINUEDBAND
  62368. INCLUDEPAGE
  62369. INCLUDEPAGEINOUTPUT
  62370. INVOKEONCURRENTPASS
  62371. TARGETHANDLE
  62372. LCBAND
  62373. LONODE
  62374. LCIDREF
  62375. LLFORMATBREAKBAND
  62376. LCINTERRUPTEDBAND
  62377. LLOMITBAND    
  62378. LOOBJECTS
  62379. SETFRXDATASESSION
  62380. INCLUDEBANDSWITHNOOBJECTS    
  62381. FRXCURSOR
  62382. GETOBJECTSINBAND
  62383. UNIQUEID
  62384. FRXDATASESSION
  62385. COUNT
  62386. NODES
  62387. OBJVALUE
  62388. SETCURRENTDATASESSION
  62389. SHAREDPAGENO
  62390. PAGENO
  62391. INCLUDEBREAKSINDATA
  62392. CURRENTBAND
  62393. WRITERAW    
  62394. XMLRAWTAG
  62395. CURRENTPAGE
  62396. CURRENTCOLUMN
  62397. RESETDATASESSION
  62398. SaveTargetFileName
  62399. Nodes
  62400. _ReportOutputConfig
  62401. OBJECTS-a
  62402. UniqueID
  62403. UniqueID
  62404. Nodes
  62405. FrxNodes
  62406. XXXX6
  62407. Nodes
  62408. ObjType
  62409. XXXX6
  62410. Nodes
  62411. FrxNodes
  62412. XXXX6
  62413. Nodes
  62414. FrxNodes
  62415. XXXX6
  62416. Nodes
  62417. FrxNodes
  62418. XXXX6
  62419. Nodes
  62420. FrxNodes
  62421. XXXX6
  62422. WINDOWS
  62423. Required FRX cursor is not available.
  62424. Required FRX cursor is not available.
  62425. HADERROR
  62426. SETFRXDATASESSION
  62427. ISSUCCESSOR
  62428. SUCCESSORGFXNORENDER!
  62429. CHECKCOLLECTIONFORSPECIFIEDMEMBER
  62430. GFXNORENDERCLASS
  62431. GFXNORENDERCLASSLIB
  62432. LISELECT
  62433. LCDOCUMENT
  62434. LCREPORT
  62435. LCRDL
  62436. LCPAGE
  62437. LCCOL
  62438. LCDATA
  62439. LONODE
  62440. LOPARENT
  62441. TARGETHANDLE
  62442. APPLYUSERTRANSFORM
  62443. APPLYRDLTRANSFORM
  62444. VERIFYTARGETFILE
  62445. TARGETFILENAME
  62446. TARGETFILEEXT
  62447. ADDPROPERTY
  62448. OPENTARGETFILE
  62449. CONFIGURATIONTABLE
  62450. NODES
  62451. VERIFYNODENAMES
  62452. VERIFYATTRIBUTENAMES
  62453. INCLUDEBANDSWITHNOOBJECTS
  62454. XMLMODE
  62455. LOADFRXCURSOR    
  62456. FRXCURSOR
  62457. CREATEOBJECTCURSOR
  62458. FRXDATASESSION
  62459. BANDS
  62460. UNIQUEID
  62461. OBJECTS    
  62462. ISRUNNING
  62463. OBJVALUE
  62464. INCLUDEBREAKSINDATA
  62465. CURRENTDOCUMENT
  62466. WRITERAW    
  62467. XMLRAWTAG
  62468. XMLRAWCONV
  62469. COMMANDCLAUSES
  62470. GETVFPRDLCONTENTS    
  62471. PAGENODES
  62472. COLUMNNODES
  62473. AFTERREPORT!
  62474. INITIALIZEFORMATTINGCHANGESCURSOR
  62475. FORMATTINGCHANGES
  62476. PLATFORM
  62477. OBJTYPE
  62478. FRXRECNO    
  62479. DOMESSAGE
  62480. LASTERRORMESSAGE
  62481. RESETDATASESSION;
  62482. INCLUDEPAGE
  62483. XMLMODE
  62484. TWOPASSPROCESS
  62485. CURRENTPASS
  62486. OBJTYPE
  62487. OBJTYPE
  62488. FRXNODES
  62489. OBJTYPE+OBJCODE+IIF(OBJTYPE=C
  62490. 9999999_
  62491. 9999999_
  62492. SAFETYv
  62493. FIXEDv
  62494. INDEX ON &lcIndex TAG &lcTag
  62495. At least one required index tag is missing C
  62496. from the configuration table.
  62497. At least one required index tag is missing C
  62498. from the configuration table.
  62499. ObjType
  62500. TCALIAS
  62501. LLRETURN
  62502. LAREQUIRED
  62503. LIINDEX
  62504. LISELECT
  62505. LITAG
  62506. LCTAG
  62507. LCINDEX
  62508. LLSAFETYON    
  62509. LLFIXEDON    
  62510. LCMESSAGE
  62511. THIS    
  62512. DOMESSAGE
  62513. LASTERRORMESSAGE
  62514. INSERTXMLCONFIGRECORDST
  62515. VNEWVAL
  62516. THIS.CommandClauses.Fileb
  62517. THIS.CommandClauses.NoPageEjectb
  62518. NoPageEject-
  62519. COMMANDCLAUSES
  62520. FRXRecno
  62521. FRXRecno
  62522. NFRXRECNO
  62523. OOBJPROPERTIES
  62524. INVOKEONCURRENTPASS
  62525. TARGETHANDLE
  62526. SETFRXDATASESSION
  62527. FORMATTINGCHANGES
  62528. EVALUATECONTENTSVALUES
  62529. FRXRECNO
  62530. INCLUDEDATATYPEATTRIBUTES
  62531. VALUE
  62532. DTYPE
  62533. DTEXT
  62534. FORMATDATAVALUE
  62535. RESETDATASESSION
  62536. RUNCOLLECTOR
  62537. DATASESSIONv
  62538. Collection
  62539. Microsoft.XMLDOM
  62540. Microsoft.XMLDOM
  62541. /VFPData/reportdata
  62542. [@name='
  62543. ' and @execwhen='
  62544. ']/@execute
  62545. Microsoft.VFP.Reporting.Builder.AdvancedProperty
  62546. RUNCOLLECTOR    
  62547. LISESSION
  62548. RESETDATASESSION
  62549. SETFRXDATASESSION
  62550. MEMBERDATAALIAS
  62551. LVVALUE
  62552. LCEXPR
  62553. LISELECT
  62554. LOXML    
  62555. LOXMLTEMP
  62556. FRXHEADERRECNO
  62557. LOADXML
  62558. STYLE
  62559. FRXRECNO
  62560. EXECUTE
  62561. EXECWHEN
  62562. DECLASS
  62563. EVALUATEUSEREXPRESSION
  62564. SELECTSINGLENODE
  62565. DOCUMENTELEMENT
  62566. GETKEY
  62567. TVNEWVAL
  62568. RUNCOLLECTORRESETLEVEL    
  62569. xmlrawtag,
  62570. xmlrawnode
  62571. xmlrawconv~
  62572. writeraw
  62573. includebreaksindata_assign#
  62574. xmlmode_assign
  62575. resetreport7
  62576. applyxslt|
  62577. currentdocument_assign
  62578. idattribute_assign1
  62579. idrefattribute_assign
  62580. xsltprocessorrdl_assign0
  62581. xsltprocessoruser_assign
  62582. resetdocument
  62583. verifyncname
  62584. includeformattinginlayoutobjects_assign
  62585. includebandswithnoobjects_assignk
  62586. verifynodenames
  62587. verifyattributenames
  62588. nopageeject_assign
  62589. loadprocessorobject
  62590. getrawformattinginfo
  62591. topattr_assign
  62592. leftattr_assign
  62593. heightattr_assign
  62594. widthattr_assign
  62595. contattr_assign
  62596. getvfprdlcontentsy 
  62597. includedatasourcesinvfprdl_assign
  62598. getpathedimageinfo54
  62599. applyusertransformtooutput
  62600. applyusertransform_assignM9
  62601. getdefaultuserxslt
  62602. setdomformattinginfo
  62603. synchxsltprocessoruser
  62604. insertxmlconfigrecords
  62605. xsltparameters_assignPG
  62606. getfrxlayoutobjectfieldlist9H
  62607. preparefrxcopy
  62608. removefrxcopy
  62609. adjustxsltparameterMQ
  62610. getrunnodecontents
  62611. addrunnode
  62612. includedatatypeattributes_assign'[
  62613. datatypeattr_assign
  62614. datatextattr_assign
  62615. initializeformattingchangescursor
  62616. formatdatavalue:]
  62617. pageimageattr_assign
  62618. evaluatestringtoboolean
  62619. applyrdltransform_accessO^
  62620. fixmsxmlobjectfordtds
  62621. frxcharsetsinuseU_
  62622. resetcallevaluatecontents
  62623. closetargetfile`b
  62624. setfrxdatasessionenvironmentEc
  62625. opentargetfilemc
  62626. AfterBand}c
  62627. Destroy
  62628. createconfigtable    j
  62629. Initpk
  62630. AfterReportal
  62631. ErrorIr
  62632. Render
  62633. BeforeBand
  62634. BeforeReport
  62635. invokeoncurrentpass5
  62636. verifyconfigtable
  62637. targetfileext_assign
  62638. setfrxrunstartupconditionsi
  62639. EvaluateContents-
  62640. resetruncollector
  62641. fillruncollector
  62642. runcollectorresetlevel_assign
  62643. PROCEDURE getdefaultuserxsltasstring
  62644. LOCAL m.lcResult
  62645. SET TEXTMERGE TO MEMVAR m.lcResult NOSHOW
  62646. SET TEXTMERGE ON 
  62647. *!* -------------------------------------------------------------------
  62648. *!* -------------------------------------------------------------------
  62649. *!* -------------------------------------------------------------------
  62650. *!* 2011-08-12 - Jacques Parent
  62651. *!* -------------------------------------------------------------------
  62652. *!* The following text have been modified to let boxes that print from 
  62653. *!* header to footer can print correctly.
  62654. *!* -------------------------------------------------------------------
  62655. *!* Changes (This is pretty complicated...)
  62656. *!*     - Classe "getCSSName" have been modified to add an "itemType"
  62657. *!*          to the class name:  T = TOP; M = Middle; B = Bottom;
  62658. *!*          Default:  do not add anything.
  62659. *!*        - New clases "shapestylesT", "shapestylesM" and "shapestylesB"
  62660. *!*       have been created:
  62661. *!*         shapestylesT:  Print only top, left and right lines
  62662. *!*         shapestylesM:  Print left and right lines
  62663. *!*         shapestylesB:  Print only bottom, left and right lines
  62664. *!*        - "Render" class have been modified to add a "T", "M" or "B"
  62665. *!*          to the boxes' class depending of the "@c" variable,
  62666. *!*       containing the "continuation" information (0 = complete;
  62667. *!*          (1 = Top; 2 = Middle; 3 = Bottom)
  62668. *!* -------------------------------------------------------------------
  62669. *!* I am hoping that this change do not cause problems elseware...  It 
  62670. *!* is a pain do search in that text when you have never heard of xsl
  62671. *!* or Microsoft DOM...  but I've managed for this time.  So let's hope! :)
  62672. *!* -------------------------------------------------------------------
  62673. *!* -------------------------------------------------------------------
  62674. *!* -------------------------------------------------------------------
  62675. * 2013-07-31 Update by Iuliu Nedelcu
  62676. * http://www.foxite.com/archives/0000381256.htm
  62677. *   <xsl:output method="html" version="1.0" encoding="UTF-8" indent="no" doctype-public="-//W3C//DTD HTML 4.0//EN" doctype-system="http://www.w3.org/TR/REC-html40/strict.dtd"/>
  62678. * Testing the .HTM generated by FoxyPreviewer with http://validator.w3.org/check, we have got this:
  62679. * "Warning Mismatch between Public and System identifiers in the DOCTYPE declaration
  62680. * This document uses an inconsistent DOCTYPE declaration. The Public Identifier -//W3C//DTD HTML 4.0//EN declares the HTML 4.0 Strict document type, but the associated System Identifier http://www.w3.org/TR/REC-html40/strict.dtd does not match this document type.
  62681. * The recommended System Identifier for HTML 4.0 Strict is http://www.w3.org/TR/1998/REC-html40-19980424/strict.dtd. 
  62682. * The safest way to use a correct DOCTYPE declaration is to copy and paste one from the recommended list and avoid editing that part of your markup by hand."
  62683. * The recomanded list : http://www.w3.org/QA/2002/04/valid-dtd-list.html
  62684. * We can choose this declaration:
  62685. * "<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">",
  62686. * and replace in the original code of the VFP9's _reportlistener.vcx->htmllistener->getdefaultuserxsltasstring:
  62687. * <xsl:output method="html" version="1.0" encoding="UTF-8" indent="no" doctype-public="-//W3C//DTD HTML 4.0//EN" doctype-system="http://www.w3.org/TR/REC-html40/strict.dtd"/>
  62688. * with this code:
  62689. * <xsl:output method="html" version="1.0" encoding="UTF-8" indent="no" doctype-public="-//W3C//DTD HTML 4.01//EN" doctype-system="http://www.w3.org/TR/REC-html4/strict.dtd"/>
  62690. * Before update, in some InternetExplorer versions, in Print Preview the Page 1 to N was not shown correctly, and after this update we get a better pagination in Internet Explorer's Print Preview of a htm file created as follows:
  62691. * 2013-08-01 New Update by Iuliu Nedelcu
  62692. *           http://www.w3.org/TR/REC-html4/strict.dtd is not good
  62693. * Better is http://www.w3.org/TR/html4/strict.dtd
  62694. <?xml version="1.0"?>
  62695. <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  62696.   <xsl:output method="html" version="1.0" encoding="UTF-8" indent="no" doctype-public="-//W3C//DTD HTML 4.01//EN" doctype-system="http://www.w3.org/TR/html4/strict.dtd"/>
  62697.   <xsl:param name="externalFileLocation"/>
  62698.   <!--select="'./whatever/'" or 'http://something/myimages/' or "'./'" or... -->
  62699.   <xsl:param name="copyImageFiles" select="0"/>
  62700.   <xsl:param name="generalFieldDPI" select="96"/>
  62701.   <xsl:param name="fillPatternShade" select="180*3"/>
  62702.   <xsl:param name="fillPatternOffset" select="128"/>
  62703.   <xsl:param name="numberPrecision" select="5"/>
  62704.   <xsl:param name="fieldAlphaOpacityOffset" select="75"/>
  62705.   <xsl:param name="fieldAlphaOpacityShade" select="180*3"/>
  62706.   <xsl:param name="useTextAreaForStretchingText" select="1"/>
  62707.   <xsl:param name="hideScrollbarsForTextAreas" select="0"/>
  62708.   <xsl:param name="PageTitlePrefix_LOC" select="''"/>
  62709. <!--    <xsl:param name="unpagedModeIncludesOnePageHeader" select="0"/> -->
  62710.   <xsl:param name="unpagedModeIncludesTitle" select="1"/>
  62711.   <xsl:param name="noBody" select="0"/>
  62712.   <xsl:param name="useDynamicTextAttributes" select="1"/>
  62713.   <xsl:param name="anchorAttrName" select="1"/>   
  62714.   <!-- id is theoretically better if you wanted to write
  62715.    script against this element, or in case name is 
  62716.    deprecated in a future version of the standard, 
  62717.    but a value of 1 forces name to be used instead. 
  62718.    Current-newer browsers will be okay with this, and older 
  62719.    browsers might prefer it. -->
  62720.   <xsl:variable name="FRUs" select="10000"/>
  62721.   <xsl:variable name="printDPI" select="960"/>
  62722.   <xsl:variable name="FRUsInPixelsat96DPI" select="104.167"/>
  62723.   <xsl:variable name="imagePixelRatio" select="$generalFieldDPI div $printDPI"/>
  62724.   <xsl:variable name="zeros" select="substring('0000000000000000000000000',1,$numberPrecision)"/>
  62725.   <xsl:variable name="thisPageHeight">
  62726.     <xsl:value-of select="number(/Reports/VFP-Report/VFP-RDL/VFPDataSet/VFPFRXPrintJob/@pageheight  div $printDPI)"/>
  62727.   </xsl:variable>
  62728.   <xsl:variable name="lineNodeName" select="/Reports/VFP-Report/VFP-RDL/VFPDataSet/VFPFRXLayoutNode[type=6]/name"/>
  62729.   <xsl:variable name="labelNodeName" select="/Reports/VFP-Report/VFP-RDL/VFPDataSet/VFPFRXLayoutNode[type=5]/name"/>
  62730.   <xsl:variable name="fieldNodeName" select="/Reports/VFP-Report/VFP-RDL/VFPDataSet/VFPFRXLayoutNode[type=8]/name"/>
  62731.   <xsl:variable name="shapeNodeName" select="/Reports/VFP-Report/VFP-RDL/VFPDataSet/VFPFRXLayoutNode[type=7]/name"/>
  62732.   <xsl:variable name="pictureNodeName" select="/Reports/VFP-Report/VFP-RDL/VFPDataSet/VFPFRXLayoutNode[type=17]/name"/>
  62733.   <xsl:variable name="detailNodeName" select="/Reports/VFP-Report/VFP-RDL/VFPDataSet/VFPFRXLayoutNode[code=4]/name"/>
  62734.   <xsl:variable name="detailHeaderNodeName" select="/Reports/VFP-Report/VFP-RDL/VFPDataSet/VFPFRXLayoutNode[code=9]/name"/>
  62735.   <xsl:variable name="detailFooterNodeName" select="/Reports/VFP-Report/VFP-RDL/VFPDataSet/VFPFRXLayoutNode[code=10]/name"/>
  62736.   <xsl:variable name="pageHeaderNodeName" select="/Reports/VFP-Report/VFP-RDL/VFPDataSet/VFPFRXLayoutNode[code=1]/name"/>
  62737.   <xsl:variable name="pageFooterNodeName" select="/Reports/VFP-Report/VFP-RDL/VFPDataSet/VFPFRXLayoutNode[code=7]/name"/>
  62738.   <xsl:variable name="columnHeaderNodeName" select="/Reports/VFP-Report/VFP-RDL/VFPDataSet/VFPFRXLayoutNode[code=2]/name"/>
  62739.   <xsl:variable name="columnFooterNodeName" select="/Reports/VFP-Report/VFP-RDL/VFPDataSet/VFPFRXLayoutNode[code=6]/name"/>
  62740.   <xsl:variable name="groupHeaderNodeName" select="/Reports/VFP-Report/VFP-RDL/VFPDataSet/VFPFRXLayoutNode[code=3]/name"/>
  62741.   <xsl:variable name="groupFooterNodeName" select="/Reports/VFP-Report/VFP-RDL/VFPDataSet/VFPFRXLayoutNode[code=5]/name"/>
  62742.   <xsl:variable name="titleNodeName" select="/Reports/VFP-Report/VFP-RDL/VFPDataSet/VFPFRXLayoutNode[code=0]/name"/>
  62743.   <xsl:variable name="summaryNodeName" select="/Reports/VFP-Report/VFP-RDL/VFPDataSet/VFPFRXLayoutNode[code=8]/name"/>
  62744.   <xsl:variable name="anchorAttr">
  62745.   <xsl:choose>
  62746.   <xsl:when test="$anchorAttrName=1">name</xsl:when>
  62747.   <xsl:otherwise>id</xsl:otherwise>
  62748.   </xsl:choose> 
  62749.   </xsl:variable>
  62750.   <xsl:key name="Layout" match="/Reports/VFP-Report/VFP-RDL/VFPDataSet/VFPFRXLayoutObject[platform='WINDOWS']" use="concat(frxrecno,../../@id)"/>
  62751.   <xsl:template match="/">
  62752.       <xsl:choose>
  62753.         <xsl:when test="number($noBody)=1">
  62754.         <div>
  62755.          <meta http-equiv="Content-Type"  content="text/html; charset=UTF-8"/>        
  62756.           <xsl:call-template name="renderStyles"/>
  62757.           <xsl:call-template name="body"/>
  62758.          </div>
  62759.         </xsl:when>
  62760.         <xsl:otherwise>
  62761.           <xsl:apply-templates select="/" mode="full"/>
  62762.         </xsl:otherwise>
  62763.       </xsl:choose>
  62764.   </xsl:template>
  62765.   <xsl:template match="/" mode="full">
  62766.     <html>
  62767.        <xsl:if test="/Reports/VFP-Report[1]/VFP-RDL/VFPDataSet/VFPFRXLayoutObject[objtype=1 and (fontcharset=177 or fontcharset=178)]">
  62768.        <xsl:attribute name="dir">rtl</xsl:attribute>
  62769.        </xsl:if>
  62770.       <head>
  62771.         <meta  http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
  62772. <xsl:comment> 
  62773. the above repeated-explicit declaration is necessary because 
  62774. some versions of MSXML xslt processing don't include the 
  62775. charset as required by the XSLT standard when method="html".  
  62776. Explicitly including the META creates a doubled meta content-type tag, 
  62777. but we do need the encoding to be specified properly and the doubled tag is okay. 
  62778. </xsl:comment>
  62779.         <meta name="description" 
  62780. content="{/Reports/VFP-Report[1]/Run/property[@id='description']/.}"/>
  62781.         <meta name="author" 
  62782. content="{/Reports/VFP-Report[1]/Run/property[@id='author']/.}"/>
  62783.         <meta name="copyright" 
  62784. content="{/Reports/VFP-Report[1]/Run/property[@id='copyright']/.}"/>
  62785.         <meta name="date" 
  62786. content="{/Reports/VFP-Report[1]/Run/property[@id='date']/.}"/>
  62787.         <xsl:if test="/Reports/VFP-Report/Run/property[@id='keywords']">
  62788.         <meta name="keywords">
  62789.         <xsl:attribute name="content">
  62790.          <xsl:for-each select="/Reports/VFP-Report/Run/property[@id='keywords']">
  62791.          <xsl:value-of select="."/><xsl:if test="not(position()=last())">,</xsl:if>
  62792.         </xsl:for-each>
  62793.         </xsl:attribute>
  62794.         </meta> 
  62795.         </xsl:if>
  62796.         <xsl:if test="/Reports/VFP-Report/Run/property[@id='http-equiv']">
  62797.             <xsl:for-each select="/Reports/VFP-Report/Run/property[@id='http-equiv']//meta">
  62798.           <xsl:variable name="thisMeta" select="concat(ancestor-or-self::*[@id='http-equiv']/@id ,'.',@name)"/>
  62799.           <!-- the extra Run nodes being looked up are potentially evaluated, not original values of the property, 
  62800.           so we can account for expressions -->
  62801.           <meta  http-equiv="{@name}" content="{/Reports/VFP-Report/Run/property[@id=$thisMeta]}"/>
  62802.           </xsl:for-each>
  62803.         </xsl:if>
  62804.         <title>
  62805.           <xsl:choose>
  62806.           <xsl:when test="/Reports/VFP-Report[1]/Run/property[@id='title']">
  62807.             <xsl:value-of select="/Reports/VFP-Report[1]/Run/property[@id='title']/."/>
  62808.           </xsl:when>
  62809.           <xsl:otherwise>
  62810.             <!-- default/VFP 9.0 RTM handling -->
  62811.              <xsl:value-of select="$PageTitlePrefix_LOC"/>
  62812.              <xsl:if test="string-length(/Reports/VFP-Report[1]/VFP-RDL/VFPDataSet/VFPFRXPrintJob/@name) = 0">
  62813.                <xsl:value-of select="/Reports/VFP-Report[1]/VFP-RDL/@id"/>
  62814.              </xsl:if>
  62815.              <xsl:value-of select="/Reports/VFP-Report[1]/VFP-RDL/VFPDataSet/VFPFRXPrintJob/@name"/>
  62816.           </xsl:otherwise>
  62817.           </xsl:choose>
  62818.         </title>
  62819.         <xsl:call-template name="renderStyles"/>
  62820.       </head>
  62821.       <body>
  62822.         <xsl:call-template name="body"/>
  62823.       </body>
  62824.     </html>
  62825.   </xsl:template>
  62826.   <xsl:template name="renderStyles">
  62827.      <xsl:call-template name="DocumentStyles"/>
  62828.     <xsl:for-each select="/Reports/VFP-Report">
  62829.       <xsl:call-template name="Styles">
  62830.         <xsl:with-param name="thisReport" select="position()"/>
  62831.         <xsl:with-param name="thisReportID" select="./VFP-RDL/@id"/>
  62832.       </xsl:call-template>
  62833.       <!--        <xsl:call-template name="Script"/> avoid security problems: no script, not even a lone comment indicating TBD -->
  62834.     </xsl:for-each>
  62835.   </xsl:template>
  62836.   <xsl:template name="body">
  62837.     <xsl:for-each select="/Reports/VFP-Report">
  62838.       <xsl:variable name="thisReport" select="position()"/>
  62839.       <xsl:variable name="thisReportID" select="./VFP-RDL/@id"/>
  62840.       <xsl:variable name="thisReportRangeFrom" select="number(./VFP-RDL/VFPDataSet/VFPFRXCommand/@RANGEFROM)"/>
  62841.       <xsl:variable name="separateTitlePage" select="./Data/*[name()=$titleNodeName] and ./VFP-RDL/VFPDataSet/VFPFRXLayoutObject[bandtype='0' and pagebreak='true']"/>
  62842.       <xsl:variable name="separateSummaryPage" select="./Data/*[name()=$summaryNodeName] and ./VFP-RDL/VFPDataSet/VFPFRXLayoutObject[bandtype='8' and pagebreak='true' and ejectbefor='false']"/>
  62843.       <xsl:variable name="reportPages" select="count(./Data/*[(name()=$pageHeaderNodeName) or (name()=$titleNodeName and $separateTitlePage=true()) or  (name()=$summaryNodeName and $separateSummaryPage=true())])"/>
  62844.       <div>
  62845.         <xsl:if test="number($noBody)=1">
  62846.           <xsl:attribute name="style">
  62847.                position=relative;height=<xsl:value-of select="$reportPages * $thisPageHeight"/>in;
  62848.                </xsl:attribute>
  62849.         </xsl:if>
  62850.         <xsl:choose>
  62851.           <xsl:when test="./Data/*[name() = $pageHeaderNodeName]">
  62852.             <xsl:if test="$separateTitlePage">
  62853.               <xsl:apply-templates select="./Data/*[name()=$titleNodeName]" mode="titlesummarypage">
  62854.                 <xsl:with-param name="thisReport" select="$thisReport"/>
  62855.                 <xsl:with-param name="thisReportID" select="$thisReportID"/>
  62856.               </xsl:apply-templates>
  62857.             </xsl:if>
  62858.             <xsl:apply-templates select="./Data/*[name()=$pageHeaderNodeName]" mode="page">
  62859.               <xsl:with-param name="thisReport" select="$thisReport"/>
  62860.               <xsl:with-param name="thisReportID" select="$thisReportID"/>
  62861.               <xsl:with-param name="thisReportRangeFrom" select="$thisReportRangeFrom"/>
  62862.             </xsl:apply-templates>
  62863.             <xsl:if test="$separateSummaryPage">
  62864.               <xsl:apply-templates select="./Data/*[name()=$summaryNodeName]" mode="titlesummarypage">
  62865.                 <xsl:with-param name="thisReport" select="$thisReport"/>
  62866.                 <xsl:with-param name="thisReportID" select="$thisReportID"/>
  62867.               </xsl:apply-templates>
  62868.             </xsl:if>
  62869.           </xsl:when>
  62870.           <xsl:otherwise>
  62871.             <!-- unpaginated-->
  62872.             <xsl:variable name="thisPageHeaderHeight" select="/Reports/VFP-Report[$thisReport]/VFP-RDL/VFPDataSet/VFPFRXLayoutObject[bandlabel='Page Header'][1]/height  div $FRUs"/>
  62873.             <xsl:variable name="thisReportPageHeight" select="number($thisPageHeight - ( $thisPageHeaderHeight +  (/Reports/VFP-Report[$thisReport]/VFP-RDL/VFPDataSet/VFPFRXLayoutObject[bandlabel='Page Footer'][1]/height div $FRUs)) )"/>
  62874.             <xsl:if test="./Data/Pages/*[name() = $pageHeaderNodeName]"> <!-- $unpagedModeIncludesOnePageHeader=1" -->
  62875.               <!-- show the contents of the first page header -->
  62876.               <xsl:apply-templates mode="formattingBand" select="./Data/Pages/*[@idref = /Reports/VFP-Report[$thisReport]/VFP-RDL/VFPDataSet/VFPFRXLayoutObject[bandlabel='Page Header']/frxrecno][1]">
  62877.                 <xsl:with-param name="thisReport" select="$thisReport"/>
  62878.                 <xsl:with-param name="thisReportID" select="$thisReportID"/>
  62879.                 <xsl:with-param name="thisReportPageHeight" select="$thisReportPageHeight"/>
  62880.                 <xsl:with-param name="thisPageHeight" select="$thisPageHeight"/>
  62881.               </xsl:apply-templates>
  62882.             </xsl:if>
  62883.             
  62884.             <!-- the @id criteria below leaves out the Pages and Columns collections, if any -->
  62885.             <!-- we could add in an initial page header but then we'd have to do the additional work to handle any title, etc; all the height offsets will change -->
  62886.             <xsl:apply-templates select="./Data/*[@idref and ($unpagedModeIncludesTitle=1 or not(name() = $titleNodeName))]" mode="unpagedBand">
  62887.               <xsl:with-param name="thisReport" select="$thisReport"/>
  62888.               <xsl:with-param name="thisReportID" select="$thisReportID"/>
  62889.               <xsl:with-param name="thisPageHeight" select="$thisPageHeight"/>
  62890.               <xsl:with-param name="thisReportPageHeight" select="$thisReportPageHeight"/>
  62891.               <xsl:with-param name="thisPageHeaderHeight" select="$thisPageHeaderHeight"/>
  62892.             </xsl:apply-templates>
  62893.           </xsl:otherwise>
  62894.         </xsl:choose>
  62895.       </div>
  62896.     </xsl:for-each>
  62897.   </xsl:template>
  62898.   <xsl:template match="/Reports/VFP-Report/Data/*" mode="titlesummarypage">
  62899.     <xsl:param name="thisReport" select="1"/>
  62900.     <xsl:param name="thisReportID"/>
  62901.     <xsl:param name="thisReportRangeFrom" select="1"/>
  62902.     <xsl:variable name="thisBand" select="@id"/>
  62903.     <div>
  62904.       <xsl:attribute name="style"> width:100%;top:<xsl:value-of select="$thisPageHeight * (number( ./@idref) -$thisReportRangeFrom)"/>in; position:absolute; </xsl:attribute>
  62905.       <xsl:apply-templates select="." mode="band">
  62906.         <xsl:with-param name="thisReport" select="$thisReport"/>
  62907.         <xsl:with-param name="thisReportID" select="$thisReportID"/>
  62908.       </xsl:apply-templates>
  62909.       <xsl:if test="/Reports/VFP-Report[$thisReport]/VFP-RDL/VFPDataSet/VFPFRXLayoutObject[frxrecno=$thisBand and ejectafter='true']">
  62910.         <!-- page footer for this summary page -->
  62911.         <xsl:apply-templates select="/Reports/VFP-Report[$thisReport]/Data/*[name()=$pageFooterNodeName][position()=last()]" mode="band">
  62912.           <xsl:with-param name="thisReport" select="$thisReport"/>
  62913.           <xsl:with-param name="thisReportID" select="$thisReportID"/>
  62914.         </xsl:apply-templates>
  62915.       </xsl:if>
  62916.     </div>
  62917.   </xsl:template>
  62918.   <xsl:template match="/Reports/VFP-Report/Data/*" mode="page">
  62919.     <xsl:param name="thisReport" select="1"/>
  62920.     <xsl:param name="thisReportID"/>
  62921.     <xsl:param name="thisReportRangeFrom" select="1"/>
  62922.     <xsl:variable name="thisPage" select="@id"/>
  62923.     <div>
  62924.       <xsl:attribute name="style"> width:100%;top:<xsl:value-of select="$thisPageHeight * ($thisPage -$thisReportRangeFrom)"/>in;position:absolute; </xsl:attribute>
  62925.       <xsl:apply-templates select="." mode="band">
  62926.         <xsl:with-param name="thisReport" select="$thisReport"/>
  62927.         <xsl:with-param name="thisReportID" select="$thisReportID"/>
  62928.       </xsl:apply-templates>
  62929.       <xsl:if test="$thisPage = 1 and /Reports/VFP-Report[$thisReport]/Data/*[name()=$titleNodeName] and /Reports/VFP-Report[$thisReport]/VFP-RDL/VFPDataSet/VFPFRXLayoutObject[bandtype='0' and pagebreak='false']">
  62930.         <xsl:apply-templates select="/Reports/VFP-Report[$thisReport]/Data/*[name()=$titleNodeName]" mode="band">
  62931.           <xsl:with-param name="thisReport" select="$thisReport"/>
  62932.           <xsl:with-param name="thisReportID" select="$thisReportID"/>
  62933.         </xsl:apply-templates>
  62934.       </xsl:if>
  62935.       <xsl:apply-templates select="/Reports/VFP-Report/Data/*[( (@id=$thisPage and contains(concat('|',$pageFooterNodeName,'|',$columnHeaderNodeName,'|',$columnFooterNodeName,'|'),concat('|',name(),'|'))) or (@idref=$thisPage and contains(concat('|',$detailHeaderNodeName,'|',$detailFooterNodeName,'|',$detailNodeName,'|',$groupHeaderNodeName,'|',$groupFooterNodeName,'|',$summaryNodeName,'|'),concat('|',name(),'|'))) )]" mode="band">
  62936.         <xsl:with-param name="thisReport" select="$thisReport"/>
  62937.         <xsl:with-param name="thisReportID" select="$thisReportID"/>
  62938.       </xsl:apply-templates>
  62939.     </div>
  62940.   </xsl:template>
  62941.   <xsl:template match="/Reports/VFP-Report/Data/Pages/*" mode="formattingBand">
  62942.     <xsl:param name="thisReport" select="1"/>
  62943.     <xsl:param name="thisReportID"/>
  62944.     <xsl:param name="thisPageHeight"/>
  62945.     <xsl:param name="thisReportPageHeight"/>
  62946.     <xsl:variable name="thisPage" select="@id"/>
  62947.     <xsl:variable name="thisPageRenderOffset" select="(($thisPage - 1) * $thisReportPageHeight)  + sum((/Reports/VFP-Report[position() < $thisReport]/VFP-RDL/VFPDataSet/VFPFRXLayoutObject[bandlabel='Page Header']/height) ) "/>
  62948.     <xsl:for-each select="./*">
  62949.       <xsl:variable name="thisID" select="translate(@id,'+','')"/>
  62950.       <xsl:call-template name="Render">
  62951.         <xsl:with-param name="thisID" select="$thisID"/>
  62952.         <xsl:with-param name="thisZ" select="position()"/>
  62953.         <xsl:with-param name="thisPage" select="../@idref"/>
  62954.         <xsl:with-param name="thisReport" select="$thisReport"/>
  62955.         <xsl:with-param name="thisReportID" select="$thisReportID"/>
  62956.         <xsl:with-param name="topOffset" select="number($thisPageRenderOffset) * $printDPI"/>
  62957.       </xsl:call-template>
  62958.     </xsl:for-each>
  62959.   </xsl:template>
  62960.   <xsl:template match="/Reports/VFP-Report/Data/*" mode="unpagedBand">
  62961.       <xsl:param name="thisReport" select="1"/>
  62962.     <xsl:param name="thisReportID"/>
  62963.     <xsl:param name="thisPageHeight"/>
  62964.     <xsl:param name="thisReportPageHeight"/>
  62965.     <xsl:param name="thisPageHeaderHeight"/>
  62966.     <xsl:variable name="thisPage" select="@idref"/>
  62967.     <xsl:variable name="thisPageRenderOffset">
  62968.       <xsl:choose>
  62969.         <xsl:when test="../Pages/*[name() = $pageHeaderNodeName]"> <!-- $unpagedModeIncludesOnePageHeader=1" -->
  62970.           <xsl:value-of select="(($thisPage - 1) * $thisReportPageHeight) + (sum(/Reports/VFP-Report[position() < $thisReport]/VFP-RDL/VFPDataSet/VFPFRXLayoutObject[bandlabel='Page Header'][1]/height)div $FRUs)  + $thisPageHeaderHeight "/>
  62971.         </xsl:when>
  62972.         <xsl:otherwise>
  62973.           <xsl:value-of select="(($thisPage - 1) * $thisReportPageHeight) -($thisPageHeaderHeight*$thisPage)  "/>
  62974.         </xsl:otherwise>
  62975.       </xsl:choose>
  62976.     </xsl:variable>
  62977.     <xsl:call-template name="addAnchor"/>
  62978.     <xsl:for-each select="./*">
  62979.       <xsl:variable name="thisID" select="translate(@id,'+','')"/>
  62980.       <xsl:call-template name="Render">
  62981.         <xsl:with-param name="thisID" select="$thisID"/>
  62982.         <xsl:with-param name="thisZ" select="position()"/>
  62983.         <xsl:with-param name="thisPage" select="../@idref"/>
  62984.         <xsl:with-param name="thisReport" select="$thisReport"/>
  62985.         <xsl:with-param name="thisReportID" select="$thisReportID"/>
  62986.         <xsl:with-param name="topOffset" select="number($thisPageRenderOffset) * $printDPI"/>
  62987.       </xsl:call-template>
  62988.     </xsl:for-each>
  62989.   </xsl:template>
  62990.   <xsl:template match="/Reports/VFP-Report/Data/*" mode="band">
  62991.     <xsl:param name="thisReport" select="1"/>
  62992.     <xsl:param name="thisReportID"/>
  62993.     <xsl:call-template name="addAnchor"/>
  62994.     <xsl:for-each select="./*">
  62995.       <xsl:variable name="thisID" select="translate(@id,'+','')"/>
  62996.       <!--        <xsl:if test="key('Layout',concat($thisID, $thisReportID))/vpos > key('Layout',preceding-sibling::*/concat(@id,$thisReportID))/vpos"><div style="position=absolute;"/></xsl:if>  -->
  62997.       <xsl:call-template name="Render">
  62998.         <xsl:with-param name="thisID" select="$thisID"/>
  62999.         <xsl:with-param name="thisZ" select="position()"/>
  63000.         <xsl:with-param name="thisPage" select="../@idref"/>
  63001.         <xsl:with-param name="thisReport" select="$thisReport"/>
  63002.         <xsl:with-param name="thisReportID" select="$thisReportID"/>
  63003.       </xsl:call-template>
  63004.     </xsl:for-each>
  63005.   </xsl:template>
  63006.   <xsl:template name="Render">
  63007.     <xsl:param name="thisID"/>
  63008.     <xsl:param name="thisZ"/>
  63009.     <xsl:param name="thisPage"/>
  63010.     <xsl:param name="thisReport" select="1"/>
  63011.     <xsl:param name="thisReportID" select="1"/>
  63012.     <xsl:param name="topOffset" select="0"/>
  63013.     <xsl:call-template name="addAnchor"/>
  63014.     <xsl:choose>
  63015.       <xsl:when test="name()=$lineNodeName and key('Layout',concat($thisID, $thisReportID))/height <  key('Layout',concat($thisID, $thisReportID))/width">
  63016.         <hr>
  63017.           <xsl:call-template name="addClassAttribute">
  63018.              <xsl:with-param name="default" select="concat('FRX',$thisReport,'_',$thisID)"/>
  63019.         </xsl:call-template>
  63020.         <xsl:call-template name="addTitleAttribute"/>
  63021.           <xsl:call-template name="addStyleAttribute">
  63022.             <xsl:with-param name="topOffset" select="$topOffset"/>
  63023.             <xsl:with-param name="thisZ" select="$thisZ"/>
  63024.             <xsl:with-param name="thisReportID" select="$thisReportID"/>
  63025.            <xsl:with-param name="thisID" select="$thisID"/>
  63026.            <xsl:with-param name="styleType" select="'HR'"/>
  63027.           </xsl:call-template>
  63028.         </hr>
  63029.       </xsl:when>
  63030.       <xsl:when test="name()=$lineNodeName">
  63031.         <!-- vertical line -->
  63032.         <span>
  63033.           <xsl:call-template name="addClassAttribute">
  63034.             <xsl:with-param name="default" select="concat('FRX',$thisReport,'_',$thisID)"/> 
  63035.         </xsl:call-template>
  63036.           <xsl:call-template name="addTitleAttribute"/>
  63037.           <xsl:call-template name="addStyleAttribute">
  63038.             <xsl:with-param name="topOffset" select="$topOffset"/>
  63039.             <xsl:with-param name="thisZ" select="$thisZ"/>
  63040.             <xsl:with-param name="thisReportID" select="$thisReportID"/>
  63041.            <xsl:with-param name="thisID" select="$thisID"/>
  63042.               <xsl:with-param name="styleType" select="'VR'"/>
  63043.           </xsl:call-template>
  63044.         </span>
  63045.       </xsl:when>
  63046.       <xsl:when test="$useTextAreaForStretchingText=1 and string-length(@hlink) = 0  and name()=$fieldNodeName and key('Layout',concat($thisID, $thisReportID))[stretch='true']">
  63047.         <textarea readonly="readonly" rows="0" cols="0">
  63048.           <xsl:call-template name="addClassAttribute">
  63049.              <xsl:with-param name="default" select="concat('FRX',$thisReport,'_',$thisID)"/> 
  63050.         </xsl:call-template>
  63051.           <xsl:call-template name="addTitleAttribute"/>
  63052.           <xsl:call-template name="addStyleAttribute">
  63053.             <xsl:with-param name="topOffset" select="$topOffset"/>
  63054.             <xsl:with-param name="thisZ" select="$thisZ"/>
  63055.             <xsl:with-param name="thisReportID" select="$thisReportID"/>
  63056.           <xsl:with-param name="thisID" select="$thisID"/>
  63057.           <xsl:with-param name="styleType" select="'TextArea'"/>
  63058.           </xsl:call-template>
  63059.           <xsl:value-of select="."/>
  63060.         </textarea>
  63061.       </xsl:when>
  63062.       <xsl:otherwise>
  63063.         <div>
  63064.            <xsl:choose>
  63065.              <xsl:when test="@c=1">
  63066.                 <xsl:call-template name="addClassAttribute">
  63067.                    <xsl:with-param name="default" select="concat('FRX',$thisReport,'_',$thisID,'T')"/> 
  63068.                 </xsl:call-template>
  63069.              </xsl:when>
  63070.              <xsl:when test="@c=2">
  63071.                 <xsl:call-template name="addClassAttribute">
  63072.                    <xsl:with-param name="default" select="concat('FRX',$thisReport,'_',$thisID,'M')"/> 
  63073.                 </xsl:call-template>
  63074.              </xsl:when>
  63075.              <xsl:when test="@c=3">
  63076.                 <xsl:call-template name="addClassAttribute">
  63077.                    <xsl:with-param name="default" select="concat('FRX',$thisReport,'_',$thisID,'B')"/> 
  63078.                 </xsl:call-template>
  63079.              </xsl:when>
  63080.              <xsl:otherwise>
  63081.                 <xsl:call-template name="addClassAttribute">
  63082.                    <xsl:with-param name="default" select="concat('FRX',$thisReport,'_',$thisID)"/> 
  63083.                 </xsl:call-template>
  63084.              </xsl:otherwise>
  63085.            </xsl:choose>
  63086.           <xsl:call-template name="addTitleAttribute"/>
  63087.           <xsl:call-template name="addStyleAttribute">
  63088.             <xsl:with-param name="topOffset" select="$topOffset"/>
  63089.             <xsl:with-param name="thisZ" select="$thisZ"/>
  63090.             <xsl:with-param name="thisReportID" select="$thisReportID"/>
  63091.           <xsl:with-param name="thisID" select="$thisID"/>
  63092.           <xsl:with-param name="styleType" select="'Div'"/>
  63093.           </xsl:call-template>
  63094.           <xsl:choose>
  63095.             <xsl:when test="name()=$shapeNodeName or name()=$lineNodeName">
  63096.               <!-- nothing -->
  63097.             </xsl:when>
  63098.             <xsl:when test="name()=$pictureNodeName and string-length(@hlink) > 0">
  63099.               <a href="{@hlink}">
  63100.                 <xsl:call-template name="renderPicture">
  63101.             <xsl:with-param name="thisReportID" select="$thisReportID"/>
  63102.             <xsl:with-param name="thisID" select="$thisID"/>
  63103.                 </xsl:call-template>
  63104.               </a>
  63105.             </xsl:when>
  63106.             <xsl:when test="name()=$pictureNodeName and string-length(@PLINK) > 0">
  63107.               <a href="{translate(@PLINK,'\','/')}"  target="blank">
  63108.                 <xsl:call-template name="renderPicture">
  63109.             <xsl:with-param name="thisReportID" select="$thisReportID"/>
  63110.             <xsl:with-param name="thisID" select="$thisID"/>
  63111.                 </xsl:call-template>
  63112.               </a>
  63113.             </xsl:when>
  63114.             <xsl:when test="name()=$pictureNodeName">
  63115.               <xsl:call-template name="renderPicture">
  63116.             <xsl:with-param name="thisReportID" select="$thisReportID"/>
  63117.             <xsl:with-param name="thisID" select="$thisID"/>
  63118.               </xsl:call-template>
  63119.             </xsl:when>
  63120.             <xsl:when test="string-length(@hlink) > 0">
  63121.               <a href="{@hlink}">
  63122.                 <xsl:call-template name="replaceText"/>
  63123.               </a>
  63124.             </xsl:when>
  63125.             <xsl:when test="string-length(@PLINK) > 0">
  63126.               <a href="{translate(@PLINK,'\','/')}" target="blank">
  63127.                 <xsl:call-template name="replaceText"/>
  63128.               </a>
  63129.             </xsl:when>
  63130.             <xsl:otherwise>
  63131.               <xsl:call-template name="replaceText"/>
  63132.             </xsl:otherwise>
  63133.           </xsl:choose>
  63134.         </div>
  63135.       </xsl:otherwise>
  63136.     </xsl:choose>
  63137.     <!-- /xsl:if -->
  63138.   </xsl:template>
  63139.   <xsl:template name="getCSSName">
  63140.   <xsl:param name="thisReport" select="1"/>
  63141.   <xsl:param name="thisItem" select="0"/>
  63142.   <xsl:param name="itemType" select="''"/>
  63143.   <xsl:param name="firstPass" select="1"/>
  63144.   <xsl:variable name="subst" select="/Reports/VFP-Report[$thisReport]/Data/*/*[@id=$thisItem]/@css"/>
  63145.     <xsl:choose>
  63146.      <xsl:when test="number($firstPass)=1 or string-length($subst) = 0"><xsl:value-of select="concat('.FRX',$thisReport,'_',$thisItem,$itemType)"/></xsl:when>
  63147.      <xsl:otherwise>.<xsl:value-of select="$subst"/></xsl:otherwise>
  63148.      </xsl:choose>
  63149.   </xsl:template>
  63150.   <xsl:template match="VFPFRXLayoutObject" mode="imagestyles">
  63151.     <xsl:param name="thisReport" select="1"/>
  63152.     <xsl:param name="firstPass" select="1"/>
  63153.      <xsl:call-template name="getCSSName">
  63154.      <xsl:with-param name="thisReport" select="$thisReport"/>
  63155.      <xsl:with-param name="thisItem" select="frxrecno"/>
  63156.      <xsl:with-param name="firstPass" select="$firstPass"/>
  63157.      </xsl:call-template>{
  63158.   position: absolute;overflow: hidden;width: <xsl:call-template name="setPrecision"><xsl:with-param name="theNumber" select="width div $FRUs"/></xsl:call-template>in;height: <xsl:call-template name="setPrecision"><xsl:with-param name="theNumber" select="height div $FRUs"/></xsl:call-template>in;
  63159.   <!-- <xsl:if test="offset=0">
  63160. left: <xsl:value-of select="hpos div $FRUs"/>in; 
  63161. </xsl:if>
  63162. <xsl:if test="offset=2">
  63163. left: <xsl:value-of select="hpos div $FRUs"/>in; 
  63164. </xsl:if> -->
  63165.  </xsl:template>
  63166.   <xsl:template match="VFPFRXLayoutObject" mode="shapestyles">
  63167.    <xsl:param name="thisReport" select="1"/>
  63168.    <xsl:param name="firstPass" select="1"/>
  63169.      <xsl:call-template name="getCSSName">
  63170.      <xsl:with-param name="thisReport" select="$thisReport"/>
  63171.      <xsl:with-param name="thisItem" select="frxrecno"/>
  63172.      <xsl:with-param name="firstPass" select="$firstPass"/>
  63173.      </xsl:call-template>{
  63174.        position: absolute ;font-size:1pt; border: <xsl:value-of select="pensize"/>px <xsl:call-template name="pattern"/><xsl:call-template name="pencolor"/>;<xsl:if test="(mode=0 and not(fillpat=0)) or (mode=1 and fillpat=1)">background-color:<xsl:call-template name="fillcolor"/>;</xsl:if>width: <xsl:call-template name="setPrecision"> <xsl:with-param name="theNumber" select="width div $FRUs"/></xsl:call-template>in;left: <xsl:call-template name="setPrecision"><xsl:with-param name="theNumber" select="hpos div $FRUs"/></xsl:call-template>in;
  63175.       }
  63176.       <!--    <xsl:if test="stretch='true'">
  63177. overflow: auto;
  63178.    </xsl:if> -->
  63179.   </xsl:template>
  63180.   <xsl:template match="VFPFRXLayoutObject" mode="shapestylesT">
  63181.     <xsl:param name="thisReport" select="1"/>
  63182.    <xsl:param name="firstPass" select="1"/>
  63183.      <xsl:call-template name="getCSSName">
  63184.      <xsl:with-param name="thisReport" select="$thisReport"/>
  63185.      <xsl:with-param name="thisItem" select="frxrecno"/>
  63186.      <xsl:with-param name="itemType" select="'T'"/>
  63187.      <xsl:with-param name="firstPass" select="$firstPass"/>
  63188.      </xsl:call-template>{
  63189.    position: absolute ;font-size:1pt; border-left: <xsl:value-of select="pensize"/>px <xsl:call-template name="pattern"/><xsl:call-template name="pencolor"/>;border-right: <xsl:value-of select="pensize"/>px <xsl:call-template name="pattern"/><xsl:call-template name="pencolor"/>;border-top: <xsl:value-of select="pensize"/>px <xsl:call-template name="pattern"/><xsl:call-template name="pencolor"/>;<xsl:if test="(mode=0 and not(fillpat=0)) or (mode=1 and fillpat=1)">background-color:<xsl:call-template name="fillcolor"/>;</xsl:if>width: <xsl:call-template name="setPrecision"> <xsl:with-param name="theNumber" select="width div $FRUs"/></xsl:call-template>in;left: <xsl:call-template name="setPrecision"><xsl:with-param name="theNumber" select="hpos div $FRUs"/></xsl:call-template>in;
  63190.       }
  63191.       <!--    <xsl:if test="stretch='true'">
  63192. overflow: auto;
  63193.    </xsl:if> -->
  63194.   </xsl:template>
  63195.   <xsl:template match="VFPFRXLayoutObject" mode="shapestylesM">
  63196.     <xsl:param name="thisReport" select="1"/>
  63197.    <xsl:param name="firstPass" select="1"/>
  63198.      <xsl:call-template name="getCSSName">
  63199.      <xsl:with-param name="thisReport" select="$thisReport"/>
  63200.      <xsl:with-param name="thisItem" select="frxrecno"/>
  63201.      <xsl:with-param name="itemType" select="'M'"/>
  63202.      <xsl:with-param name="firstPass" select="$firstPass"/>
  63203.      </xsl:call-template>{
  63204.    position: absolute ;font-size:1pt; border-left: <xsl:value-of select="pensize"/>px <xsl:call-template name="pattern"/><xsl:call-template name="pencolor"/>;border-right: <xsl:value-of select="pensize"/>px <xsl:call-template name="pattern"/><xsl:call-template name="pencolor"/>;<xsl:if test="(mode=0 and not(fillpat=0)) or (mode=1 and fillpat=1)">background-color:<xsl:call-template name="fillcolor"/>;</xsl:if>width: <xsl:call-template name="setPrecision"> <xsl:with-param name="theNumber" select="width div $FRUs"/></xsl:call-template>in;left: <xsl:call-template name="setPrecision"><xsl:with-param name="theNumber" select="hpos div $FRUs"/></xsl:call-template>in;
  63205.       }
  63206.       <!--    <xsl:if test="stretch='true'">
  63207. overflow: auto;
  63208.    </xsl:if> -->
  63209.   </xsl:template>
  63210.   <xsl:template match="VFPFRXLayoutObject" mode="shapestylesB">
  63211.     <xsl:param name="thisReport" select="1"/>
  63212.    <xsl:param name="firstPass" select="1"/>
  63213.      <xsl:call-template name="getCSSName">
  63214.      <xsl:with-param name="thisReport" select="$thisReport"/>
  63215.      <xsl:with-param name="thisItem" select="frxrecno"/>
  63216.      <xsl:with-param name="itemType" select="'B'"/>
  63217.      <xsl:with-param name="firstPass" select="$firstPass"/>
  63218.      </xsl:call-template>{
  63219.    position: absolute ;font-size:1pt; border-left: <xsl:value-of select="pensize"/>px <xsl:call-template name="pattern"/><xsl:call-template name="pencolor"/>;border-right: <xsl:value-of select="pensize"/>px <xsl:call-template name="pattern"/><xsl:call-template name="pencolor"/>;border-bottom: <xsl:value-of select="pensize"/>px <xsl:call-template name="pattern"/><xsl:call-template name="pencolor"/>;<xsl:if test="(mode=0 and not(fillpat=0)) or (mode=1 and fillpat=1)">background-color:<xsl:call-template name="fillcolor"/>;</xsl:if>width: <xsl:call-template name="setPrecision"> <xsl:with-param name="theNumber" select="width div $FRUs"/></xsl:call-template>in;left: <xsl:call-template name="setPrecision"><xsl:with-param name="theNumber" select="hpos div $FRUs"/></xsl:call-template>in;
  63220.       }
  63221.       <!--    <xsl:if test="stretch='true'">
  63222. overflow: auto;
  63223.    </xsl:if> -->
  63224.   </xsl:template>
  63225.   <xsl:template match="VFPFRXLayoutObject" mode="textstyles">
  63226.     <xsl:param name="thisReport" select="1"/>
  63227.     <xsl:param name="firstPass" select="1"/>
  63228.      <xsl:call-template name="getCSSName">
  63229.      <xsl:with-param name="thisReport" select="$thisReport"/>
  63230.      <xsl:with-param name="thisItem" select="frxrecno"/>
  63231.      <xsl:with-param name="firstPass" select="$firstPass"/>
  63232.      </xsl:call-template>{
  63233.   <xsl:call-template name="getTextAlignment"/>vertical-align: top; font-family: "<xsl:value-of select="fontface"/>"; font-size: <xsl:value-of select="fontsize"/>pt; border: 0px none; padding: 0px; margin: 0px;<xsl:call-template name="getFontAttributes"/>color:<xsl:call-template name="pencolor"/>;<xsl:choose>
  63234.       <xsl:when test="mode mod 2 = 1">background-color:transparent;</xsl:when>
  63235.       <xsl:otherwise>background-color: <xsl:call-template name="fillcolor"/>;</xsl:otherwise>
  63236.     </xsl:choose><xsl:choose>
  63237.       <xsl:when test="stretch='true' and objtype=8 and $useTextAreaForStretchingText=1 and $hideScrollbarsForTextAreas=1"> overflow:hidden;margin-top:4px;</xsl:when>
  63238.       <xsl:when test="stretch='true' and objtype=8 and $useTextAreaForStretchingText=1"> overflow: auto;margin-top:4px;</xsl:when>
  63239.       <xsl:otherwise>overflow:hidden;</xsl:otherwise>
  63240.     </xsl:choose> position: absolute;
  63241.    }   
  63242.     <!-- tbd, make vertical-align more dynamic -->  
  63243.   </xsl:template>
  63244.   <xsl:template match="VFPFRXLayoutObject" mode="linestyles">
  63245.     <xsl:param name="thisReport" select="1"/>
  63246.    <xsl:param name="firstPass" select="1"/>
  63247.      <xsl:call-template name="getCSSName">
  63248.      <xsl:with-param name="thisReport" select="$thisReport"/>
  63249.      <xsl:with-param name="thisItem" select="frxrecno"/>
  63250.       <xsl:with-param name="firstPass" select="$firstPass"/>
  63251.      </xsl:call-template>{
  63252.    position:absolute;font-size:1pt;border: <xsl:value-of select="pensize"/>px <xsl:call-template name="pattern"/><xsl:call-template name="pencolor"/>;left: <xsl:value-of select="hpos div $FRUs"/>in;
  63253.       <xsl:choose>
  63254.       <xsl:when test="height < width"> width: <xsl:value-of select="width div $FRUs"/>in;
  63255.   height: <xsl:value-of select="floor(height div $FRUsInPixelsat96DPI)"/>px; margin: 0px;</xsl:when>
  63256.       <xsl:otherwise>  height: <xsl:value-of select="height div $FRUs"/>in;
  63257.   width: <xsl:value-of select="floor(width div $FRUsInPixelsat96DPI)"/>px;  </xsl:otherwise>
  63258.     </xsl:choose>
  63259.   </xsl:template>
  63260.   <xsl:template name="pattern">
  63261.     <xsl:choose>
  63262.       <xsl:when test="penpat=0"> none </xsl:when>
  63263.       <xsl:when test="penpat=1"> dotted </xsl:when>
  63264.       <xsl:when test="penpat=2"> dashed </xsl:when>
  63265.       <xsl:otherwise> solid </xsl:otherwise>
  63266.     </xsl:choose>
  63267.   </xsl:template>
  63268.   <xsl:template name="pencolor">#<xsl:call-template name="getHexColorValue">
  63269.       <xsl:with-param name="theNumber" select="penred"/>
  63270.     </xsl:call-template>
  63271.     <xsl:call-template name="getHexColorValue">
  63272.       <xsl:with-param name="theNumber" select="pengreen"/>
  63273.     </xsl:call-template>
  63274.     <xsl:call-template name="getHexColorValue">
  63275.       <xsl:with-param name="theNumber" select="penblue"/>
  63276.     </xsl:call-template>
  63277.   </xsl:template>
  63278.   <xsl:template name="fillcolor">#<xsl:call-template name="getHexColorValue">
  63279.       <xsl:with-param name="theNumber" select="fillred"/>
  63280.       <xsl:with-param name="fill" select="1"/>
  63281.     </xsl:call-template>
  63282.     <xsl:call-template name="getHexColorValue">
  63283.       <xsl:with-param name="theNumber" select="fillgreen"/>
  63284.       <xsl:with-param name="fill" select="1"/>
  63285.     </xsl:call-template>
  63286.     <xsl:call-template name="getHexColorValue">
  63287.       <xsl:with-param name="theNumber" select="fillblue"/>
  63288.       <xsl:with-param name="fill" select="1"/>
  63289.     </xsl:call-template>
  63290.   </xsl:template>
  63291.   <xsl:template name="getFontAttributes">
  63292.     <xsl:param name="theStyles" select="0"/>
  63293.     <xsl:choose>
  63294.       <xsl:when test="fontbold='true'">font-weight: bold;</xsl:when>
  63295.       <xsl:otherwise>font-weight: normal;</xsl:otherwise>
  63296.     </xsl:choose>
  63297.     <xsl:if test="fontstrikethrough='true' or fontunderline='true'">text-decoration: <xsl:if test="fontstrikethrough='true'">line-through </xsl:if>
  63298.       <xsl:if test="fontunderline='true'">underline</xsl:if>;</xsl:if>
  63299.     <xsl:if test="fontitalic='true'">font-style: italic;</xsl:if>
  63300.   </xsl:template>
  63301.   <xsl:template name="getHexColorValue">
  63302.     <xsl:param name="theNumber" select="-1"/>
  63303.     <xsl:param name="fill" select="0"/>
  63304.     <xsl:variable name="useNumber">
  63305.       <xsl:choose>
  63306.         <xsl:when test="$fill=1 and fillpat > 1 and ((fillred+fillblue+fillgreen) < $fillPatternShade)">
  63307.           <xsl:choose>
  63308.             <xsl:when test="($fillPatternOffset + $theNumber) > 254">255</xsl:when>
  63309.             <xsl:otherwise>
  63310.               <xsl:value-of select="$fillPatternOffset + $theNumber"/>
  63311.             </xsl:otherwise>
  63312.           </xsl:choose>
  63313.         </xsl:when>
  63314.         <xsl:otherwise>
  63315.           <xsl:value-of select="$theNumber"/>
  63316.         </xsl:otherwise>
  63317.       </xsl:choose>
  63318.     </xsl:variable>
  63319.     <xsl:choose>
  63320.       <xsl:when test="$useNumber=-1 and $fill=1">FF</xsl:when>
  63321.       <xsl:when test="$useNumber=-1">00</xsl:when>
  63322.       <xsl:otherwise>
  63323.         <xsl:call-template name="getHexForNumber">
  63324.           <xsl:with-param name="theNumber" select="floor($useNumber div 16)"/>
  63325.         </xsl:call-template>
  63326.         <xsl:call-template name="getHexForNumber">
  63327.           <xsl:with-param name="theNumber" select="round($useNumber mod 16)"/>
  63328.         </xsl:call-template>
  63329.       </xsl:otherwise>
  63330.     </xsl:choose>
  63331.   </xsl:template>
  63332.   <xsl:template name="setPrecision">
  63333.     <xsl:param name="theNumber" select="-1"/>
  63334.     <xsl:choose>
  63335.       <xsl:when test="$numberPrecision = -1 or not(contains(string($theNumber),'.'))">
  63336.         <xsl:value-of select="$theNumber"/>
  63337.       </xsl:when>
  63338.       <xsl:when test="$numberPrecision > 0">
  63339.         <!--        <xsl:value-of select="concat(string(floor($theNumber)),'.',substring(substring-after(string($theNumber),'.'),1,$numberPrecision))"/>  -->
  63340.         <xsl:value-of select="format-number($theNumber,concat('##0.',$zeros))"/>
  63341.       </xsl:when>
  63342.       <xsl:when test="$numberPrecision=0">
  63343.         <xsl:value-of select="round($theNumber)"/>
  63344.       </xsl:when>
  63345.       <xsl:otherwise>
  63346.         <!-- shouldn't happen-->
  63347.         <xsl:value-of select="$theNumber"/>
  63348.       </xsl:otherwise>
  63349.     </xsl:choose>
  63350.   </xsl:template>
  63351.   <xsl:template name="getHexForNumber">
  63352.     <xsl:param name="theNumber" select="-1"/>
  63353.     <xsl:choose>
  63354.       <xsl:when test="$theNumber=-1">00</xsl:when>
  63355.       <xsl:when test="$theNumber < 10">
  63356.         <xsl:value-of select="$theNumber"/>
  63357.       </xsl:when>
  63358.       <xsl:when test="$theNumber = 10">A</xsl:when>
  63359.       <xsl:when test="$theNumber = 11">B</xsl:when>
  63360.       <xsl:when test="$theNumber = 12">C</xsl:when>
  63361.       <xsl:when test="$theNumber = 13">D</xsl:when>
  63362.       <xsl:when test="$theNumber = 14">E</xsl:when>
  63363.       <xsl:when test="$theNumber = 15">F</xsl:when>
  63364.     </xsl:choose>
  63365.   </xsl:template>
  63366.   <xsl:template name="getTextAlignment">text-align:<xsl:choose>
  63367.       <xsl:when test="objtype=5"><!-- picture field empty for left (default), @I for centered and @J right -->
  63368.         <xsl:choose>
  63369.           <xsl:when test="string-length(picture) = 0">left;</xsl:when>
  63370.           <xsl:when test="contains(picture,'@J')">right;</xsl:when>
  63371.           <xsl:otherwise>center;</xsl:otherwise>
  63372.         </xsl:choose>
  63373.       </xsl:when>
  63374.       <xsl:otherwise>
  63375.         <xsl:choose>
  63376.           <xsl:when test="offset=0">left;</xsl:when>
  63377.           <xsl:when test="offset=1">right;</xsl:when>
  63378.           <xsl:otherwise>center;</xsl:otherwise>
  63379.         </xsl:choose>
  63380.       </xsl:otherwise>
  63381.     </xsl:choose>
  63382.     <!-- don't include direction at all if you want context -->
  63383.     <xsl:if test="mode < 4">direction:<xsl:choose>
  63384.         <xsl:when test="mode > 1">rtl;</xsl:when>
  63385.         <xsl:otherwise>ltr;</xsl:otherwise>
  63386.       </xsl:choose>
  63387.     </xsl:if>
  63388.   </xsl:template>
  63389.   <xsl:template name="ExternalStyleSheets">
  63390.     <xsl:param name="thisReportNode" select="/Reports/VFP-Report[1]"/>
  63391.     <xsl:param name="thisReportID" select="'this report'"/>
  63392.    <xsl:if test="count($thisReportNode/Run/property[@id='css_sheet']) > 0">
  63393.    <xsl:comment>
  63394.    External stylesheet(s) for <xsl:value-of select="$thisReportID"/>
  63395.    </xsl:comment>
  63396.    <xsl:for-each select="$thisReportNode/Run/property[@id='css_sheet']">
  63397.       <link type="text/css" href="{./text()}" rel="stylesheet"/>
  63398.    </xsl:for-each>
  63399.    </xsl:if>   
  63400.   </xsl:template>
  63401.   <xsl:template name="DocumentStyles">
  63402.   <xsl:comment>Global document styles, if any</xsl:comment>
  63403.     <style type="text/css">
  63404.      <xsl:comment><xsl:if test="/Reports/VFP-Report[1]/VFP-RDL/VFPDataSet/VFPFRXLayoutObject[objtype=1 and (fontcharset=177 or fontcharset=178)]">
  63405.      <xsl:if test="number($noBody)!=1">html{direction:rtl;} 
  63406.      body{direction:rtl;}</xsl:if>
  63407.      div{direction:rtl;} 
  63408.      span{direction:rtl;}
  63409.      </xsl:if>
  63410.      </xsl:comment>
  63411.     </style>
  63412.   </xsl:template>
  63413.   <xsl:template name="Styles">
  63414.     <xsl:param name="thisReport" select="1"/>
  63415.     <xsl:param name="thisReportID"/>
  63416.     <xsl:comment>
  63417.     Styles for report # <xsl:value-of select="$thisReport"/>  in this run, 
  63418.     <xsl:value-of select="$thisReportID"/>
  63419.     </xsl:comment>
  63420.     <style type="text/css">
  63421.       <xsl:comment>
  63422.         <xsl:apply-templates select="./VFP-RDL/VFPDataSet/VFPFRXLayoutObject[objtype=6]" mode="linestyles">
  63423.           <xsl:with-param name="thisReport" select="$thisReport"/>
  63424.         </xsl:apply-templates>
  63425.       
  63426.       <xsl:for-each select="./VFP-RDL/VFPDataSet/VFPFRXLayoutObject[objtype=6]">
  63427.         <xsl:variable name="frxrecno" select="frxrecno"/>
  63428.         <xsl:if test="/Reports/VFP-Report[$thisReport]/Data/*/*[@id=$frxrecno]/@css">
  63429.               <xsl:apply-templates select="." mode="linestyles">
  63430.               <xsl:with-param name="thisReport" select="$thisReport"/>
  63431.                  <xsl:with-param name="firstPass" select="0"/>
  63432.               </xsl:apply-templates>
  63433.         </xsl:if>
  63434.       </xsl:for-each>
  63435.         
  63436.         <xsl:apply-templates select="./VFP-RDL/VFPDataSet/VFPFRXLayoutObject[objtype=7]" mode="shapestyles">
  63437.           <xsl:with-param name="thisReport" select="$thisReport"/>
  63438.         </xsl:apply-templates>
  63439.         <xsl:apply-templates select="./VFP-RDL/VFPDataSet/VFPFRXLayoutObject[objtype=7]" mode="shapestylesT">
  63440.           <xsl:with-param name="thisReport" select="$thisReport"/>
  63441.         </xsl:apply-templates>
  63442.         <xsl:apply-templates select="./VFP-RDL/VFPDataSet/VFPFRXLayoutObject[objtype=7]" mode="shapestylesM">
  63443.           <xsl:with-param name="thisReport" select="$thisReport"/>
  63444.         </xsl:apply-templates>
  63445.         <xsl:apply-templates select="./VFP-RDL/VFPDataSet/VFPFRXLayoutObject[objtype=7]" mode="shapestylesB">
  63446.           <xsl:with-param name="thisReport" select="$thisReport"/>
  63447.         </xsl:apply-templates>
  63448.       <xsl:for-each select="./VFP-RDL/VFPDataSet/VFPFRXLayoutObject[objtype=7]">
  63449.          <xsl:variable name="frxrecno" select="frxrecno"/>
  63450.         <xsl:if test="/Reports/VFP-Report[$thisReport]/Data/*/*[@id=$frxrecno]/@css">
  63451.               <xsl:apply-templates select="." mode="shapestyles">
  63452.                 <xsl:with-param name="thisReport" select="$thisReport"/>
  63453.                 <xsl:with-param name="firstPass" select="0"/>
  63454.               </xsl:apply-templates>
  63455.         </xsl:if>
  63456.       </xsl:for-each>
  63457.         <xsl:apply-templates select="./VFP-RDL/VFPDataSet/VFPFRXLayoutObject[contains('|5|8|',concat('|',./objtype,'|'))]" mode="textstyles">
  63458.           <xsl:with-param name="thisReport" select="$thisReport"/>
  63459.         </xsl:apply-templates>
  63460.       <xsl:for-each select="./VFP-RDL/VFPDataSet/VFPFRXLayoutObject[contains('|5|8|',concat('|',./objtype,'|'))]">
  63461.         <xsl:variable name="frxrecno" select="frxrecno"/>
  63462.         <xsl:if test="/Reports/VFP-Report[$thisReport]/Data/*/*[@id=$frxrecno]/@css">
  63463.               <xsl:apply-templates select="." mode="textstyles">
  63464.               <xsl:with-param name="thisReport" select="$thisReport"/>
  63465.                  <xsl:with-param name="firstPass" select="0"/>
  63466.               </xsl:apply-templates>
  63467.         </xsl:if>
  63468.       </xsl:for-each>
  63469.         
  63470.         <xsl:apply-templates select="./VFP-RDL/VFPDataSet/VFPFRXLayoutObject[objtype=17]" mode="imagestyles">
  63471.           <xsl:with-param name="thisReport" select="$thisReport"/>
  63472.         </xsl:apply-templates>
  63473.       <xsl:for-each select="./VFP-RDL/VFPDataSet/VFPFRXLayoutObject[objtype=17]">
  63474.         <xsl:variable name="frxrecno" select="frxrecno"/>
  63475.         <xsl:if test="/Reports/VFP-Report[$thisReport]/Data/*/*[@id=$frxrecno]/@css">
  63476.               <xsl:apply-templates select="." mode="imagestyles">
  63477.               <xsl:with-param name="thisReport" select="$thisReport"/>
  63478.                  <xsl:with-param name="firstPass" select="0"/>
  63479.               </xsl:apply-templates>
  63480.         </xsl:if>
  63481.       </xsl:for-each>
  63482.       </xsl:comment>
  63483.     </style>
  63484.    <xsl:call-template name="ExternalStyleSheets">
  63485.    <xsl:with-param name="thisReportNode" select="/Reports/VFP-Report[$thisReport]"/> 
  63486.    <xsl:with-param name="thisReportID" select="$thisReportID"/>
  63487.    </xsl:call-template>
  63488.   </xsl:template>
  63489.   <xsl:template name="replaceText">
  63490.     <xsl:choose>
  63491.       <xsl:when test="$useTextAreaForStretchingText=1">
  63492.         <xsl:value-of select="."/>
  63493.       </xsl:when>
  63494.       <xsl:otherwise>
  63495.         <xsl:call-template name="replaceWhiteSpace">
  63496.           <xsl:with-param name="string" select="."/>
  63497.         </xsl:call-template>
  63498.       </xsl:otherwise>
  63499.     </xsl:choose>
  63500.   </xsl:template>
  63501.   <xsl:template name="renderPicture">
  63502.   <xsl:param name="thisReportID"/>
  63503.   <xsl:param name="thisID"/>
  63504.     <img>
  63505.       <xsl:attribute name="alt"><xsl:choose><xsl:when test="@alt"><xsl:value-of select="@alt"/></xsl:when><xsl:otherwise><xsl:value-of select="key('Layout',concat($thisID, $thisReportID))/unpathedimg"/></xsl:otherwise></xsl:choose></xsl:attribute>
  63506.       <xsl:variable name="srcImage">
  63507.    <xsl:choose>
  63508.           <xsl:when test="@img and $externalFileLocation">
  63509.             <xsl:value-of select="translate(concat($externalFileLocation,@img),'\','/')"/>
  63510.           </xsl:when>
  63511.           <xsl:when test="@img and not(contains(./@img,':'))">
  63512.                <xsl:value-of select="translate(@img,'\','/')"/>
  63513.           </xsl:when>
  63514.           <xsl:when test="@img">
  63515.             <xsl:value-of select="concat('file://',translate(@img,'\','/'))"/>
  63516.           </xsl:when>
  63517.           <xsl:when test="$copyImageFiles = '1'">
  63518.             <xsl:value-of select="translate(concat($externalFileLocation,key('Layout',concat($thisID, $thisReportID))/unpathedimg),'\','/')"/>
  63519.           </xsl:when>
  63520.           <xsl:when test="string-length(./text()) > 0 and not(contains(./text(),':')) ">
  63521.             <xsl:value-of select="translate(./text(),'\','/')"/>
  63522.           </xsl:when>
  63523.           <xsl:when test="string-length(./text()) > 0">
  63524.             <xsl:value-of select="concat('file://',translate(./text(),'\','/'))"/>
  63525.           </xsl:when>
  63526.           <xsl:otherwise>
  63527.             <xsl:value-of select="concat('file://',translate(key('Layout',concat($thisID, $thisReportID))/pathedimg,'\','/'))"/>
  63528.           </xsl:otherwise>
  63529.         </xsl:choose>
  63530.       </xsl:variable>
  63531.       <xsl:attribute name="src"><xsl:value-of select="$srcImage"/></xsl:attribute>
  63532.       <xsl:attribute name="style"><xsl:variable name="imgGeneral" select="key('Layout',concat($thisID, $thisReportID))"/><xsl:choose><xsl:when test="$imgGeneral/general='0' "><!-- clip top, right, bottom, left -->
  63533.  clip: rect(0in,<xsl:call-template name="setPrecision"><xsl:with-param name="theNumber" select="@w div $printDPI"/></xsl:call-template>in,<xsl:value-of select="@h div $printDPI"/>in,0in);
  63534.  </xsl:when><xsl:when test="$imgGeneral/general='1'"><!-- scale and retain --><xsl:choose><xsl:when test="@h > @w">
  63535.  width:100%;
  63536.  </xsl:when><xsl:otherwise>
  63537.  height:100%;
  63538.  </xsl:otherwise></xsl:choose></xsl:when><xsl:otherwise><!-- stretch to fill frame -->
  63539.  height: <xsl:call-template name="setPrecision"><xsl:with-param name="theNumber" select="@h div $printDPI"/></xsl:call-template>in;    
  63540. width: <xsl:call-template name="setPrecision"><xsl:with-param name="theNumber" select="@w div $printDPI"/></xsl:call-template>in;    
  63541.  </xsl:otherwise></xsl:choose></xsl:attribute>
  63542.     </img>
  63543.   </xsl:template>
  63544.   <xsl:template name="addClassAttribute">
  63545.   <xsl:param name="item" select="."/>
  63546.   <xsl:param name="default" select="''"/>
  63547.   <xsl:attribute name="class"><xsl:choose>
  63548.   <xsl:when test="string-length($item/@CSS) > 0">
  63549.   <xsl:value-of select="$item/@CSS"/>
  63550.   </xsl:when>
  63551.   <xsl:when test="string-length($item/@css) = 0">
  63552.   <xsl:value-of select="$default"/>
  63553.   </xsl:when>
  63554.   <xsl:otherwise>
  63555.   <xsl:value-of select="$item/@css"/>
  63556.   </xsl:otherwise>
  63557.   </xsl:choose></xsl:attribute>
  63558.   </xsl:template>
  63559.   <xsl:template name="addTitleAttribute">
  63560.     <xsl:param name="item" select="."/>
  63561.     <xsl:if test="string-length($item/@title) > 0">
  63562.       <xsl:attribute name="title"><xsl:value-of select="$item/@title"/></xsl:attribute>
  63563.     </xsl:if>
  63564.   </xsl:template>
  63565.   <xsl:template name="addAnchor">
  63566.     <xsl:param name="item" select="."/>
  63567.     <xsl:if test="string-length($item/@anchor) > 0">
  63568.       <a>
  63569.      <xsl:attribute name="{$anchorAttr}"><xsl:value-of select="$item/@anchor"/></xsl:attribute> 
  63570.         <xsl:text disable-output-escaping="yes">&nbsp;</xsl:text>
  63571.       </a>
  63572.     </xsl:if>
  63573.   </xsl:template>
  63574.   <xsl:template name="addStyleAttribute">
  63575.     <xsl:param name="topOffset" select="0"/>
  63576.     <xsl:param name="thisZ" select="1"/>
  63577.     <xsl:param name="thisReportID"/>
  63578.     <xsl:param name="thisID"/>
  63579.     <xsl:param name="styleType" select="'Div'"/>
  63580. <!-- do NOT mess around with the white space in here, even though it 
  63581. looks ugly the way it is!! -->
  63582. <xsl:attribute name="style">z-Index:<xsl:value-of select="$thisZ"/>;left:<xsl:call-template name="setPrecision"><xsl:with-param name="theNumber" select="@l div $printDPI"/></xsl:call-template>in;
  63583. top:<xsl:choose>
  63584.   <xsl:when test="styleType='TextArea'"><xsl:call-template name="setPrecision"><xsl:with-param name="theNumber" select="((@t  + $topOffset) div $printDPI) - .1"/></xsl:call-template></xsl:when>
  63585.   <xsl:otherwise><xsl:call-template name="setPrecision"><xsl:with-param name="theNumber" select="(@t +$topOffset) div $printDPI"/></xsl:call-template></xsl:otherwise>
  63586. </xsl:choose>in;<xsl:choose>
  63587.   <xsl:when test="$styleType='VR'">width:0in;</xsl:when>
  63588.   <xsl:when test="$styleType='TextArea'">width:<xsl:call-template name="setPrecision"><xsl:with-param name="theNumber" select="@w div $printDPI"/></xsl:call-template>in;</xsl:when>
  63589. <xsl:when test="$styleType='Div'">width:<xsl:call-template name="setPrecision"><xsl:with-param name="theNumber" select="@w div $printDPI"/></xsl:call-template>in;height:<xsl:call-template name="setPrecision"><xsl:with-param name="theNumber" select="@h div $printDPI"/></xsl:call-template>in;</xsl:when></xsl:choose><xsl:if test="not($styleType='Div')">height:<xsl:call-template name="setPrecision"><xsl:with-param name="theNumber" select="@h div $printDPI"/></xsl:call-template>in;</xsl:if>
  63590. <xsl:if test="$useDynamicTextAttributes=1 and key('Layout',concat($thisID,$thisReportID))[objtype=5 or objtype=8]">
  63591. <xsl:call-template name="addDynamicTextStyleAttributes"/>
  63592. </xsl:if>
  63593. </xsl:attribute>
  63594.     </xsl:template>
  63595.     <xsl:template name="addDynamicTextStyleAttributes">
  63596.   <!-- dynamic values for font, omit these attributes if they don't appear on each object-->
  63597.   <xsl:if test="@FNAME">
  63598.     font-family:'<xsl:value-of select="@FNAME"/>';font-size:<xsl:value-of select="@FSIZE"/>pt;
  63599.     <xsl:if test="((@FSTYLE div 128) mod 2 = 1) or ( (@FSTYLE div 4) mod 2 = 1)">text-decoration:<xsl:if test="((@FSTYLE div 128) mod 2 = 1)">line-through</xsl:if><xsl:if test="( (@FSTYLE div 8) mod 2 = 1)">underline</xsl:if>;</xsl:if>
  63600.     font-weight:<xsl:choose><xsl:when test="@FSTYLE mod 2 = 1">bold</xsl:when><xsl:otherwise>normal</xsl:otherwise></xsl:choose>;
  63601.     font-style:<xsl:choose><xsl:when test="(@FSTYLE div 2) mod 2 =1">italic</xsl:when><xsl:otherwise>normal</xsl:otherwise></xsl:choose>;
  63602.    background-color:<xsl:call-template name="getAlphaColor">
  63603.    <xsl:with-param name="alpha" select="@FA"/>
  63604.    <xsl:with-param name="r" select="@FR"/>
  63605.    <xsl:with-param name="g" select="@FG"/>
  63606.    <xsl:with-param name="b" select="@FB"/>
  63607.    </xsl:call-template>;color:<xsl:call-template name="getAlphaColor"/>;
  63608.     </xsl:if>
  63609.     </xsl:template>
  63610.    <xsl:template name="getAlphaColor">
  63611.    <xsl:param name="alpha" select="@PA"/>
  63612.    <xsl:param name="r" select="@PR"/>
  63613.    <xsl:param name="g" select="@PG"/>
  63614.    <xsl:param name="b" select="@PB"/>
  63615.    <xsl:choose>
  63616.    <xsl:when test="$alpha=0">transparent</xsl:when>
  63617.    <xsl:when test="$alpha=255 or ($r+$g+$b > $fieldAlphaOpacityShade)"><xsl:value-of select="concat('rgb(',$r,',',$g,',',$b,')')"/></xsl:when>
  63618.    <xsl:otherwise><xsl:value-of select="concat('rgb(',$r+$fieldAlphaOpacityOffset,',',$g+$fieldAlphaOpacityOffset,',',$b+$fieldAlphaOpacityOffset,')')"/></xsl:otherwise>
  63619.    </xsl:choose>
  63620.    </xsl:template>
  63621.     <xsl:template name="replaceWhiteSpace">
  63622.     <xsl:param name="string" select="."/>
  63623.     <xsl:choose>
  63624.       <xsl:when test="contains($string,' ')">
  63625.         <xsl:call-template name="replaceWhiteSpace">
  63626.           <xsl:with-param name="string" select="substring-before($string, ' ')"/>
  63627.         </xsl:call-template>
  63628.         <br/>
  63629.         <xsl:call-template name="replaceWhiteSpace">
  63630.           <xsl:with-param name="string" select="substring-after($string, ' ')"/>
  63631.         </xsl:call-template>
  63632.       </xsl:when>
  63633.       <xsl:otherwise>
  63634.         <xsl:value-of select="$string"/>
  63635.       </xsl:otherwise>
  63636.     </xsl:choose>
  63637.   </xsl:template>
  63638.   <xsl:template name="Script">
  63639.     <script language="JavaScript">
  63640.       <xsl:comment>
  63641.      //TBD
  63642.       </xsl:comment>
  63643.     </script>
  63644.   </xsl:template>
  63645.   <xsl:template match="*|@*" mode="debug">
  63646.    <xsl:copy-of select="."/>
  63647.   </xsl:template> 
  63648. </xsl:stylesheet>
  63649. ENDTEXT
  63650. SET TEXTMERGE OFF
  63651. SET TEXTMERGE TO
  63652. RETURN m.lcResult
  63653. *!*    LOCAL m.lcResult
  63654. *!*    SET TEXTMERGE TO MEMVAR m.lcResult NOSHOW
  63655. *!*    SET TEXTMERGE ON 
  63656. *!*    *!* -------------------------------------------------------------------
  63657. *!*    *!* -------------------------------------------------------------------
  63658. *!*    *!* -------------------------------------------------------------------
  63659. *!*    *!* 2011-08-12 - Jacques Parent
  63660. *!*    *!* -------------------------------------------------------------------
  63661. *!*    *!* The following text have been modified to let boxes that print from 
  63662. *!*    *!* header to footer can print correctly.
  63663. *!*    *!* -------------------------------------------------------------------
  63664. *!*    *!* Changes (This is pretty complicated...)
  63665. *!*    *!*     - Classe "getCSSName" have been modified to add an "itemType"
  63666. *!*    *!*          to the class name:  T = TOP; M = Middle; B = Bottom;
  63667. *!*    *!*          Default:  do not add anything.
  63668. *!*    *!*        - New clases "shapestylesT", "shapestylesM" and "shapestylesB"
  63669. *!*    *!*       have been created:
  63670. *!*    *!*         shapestylesT:  Print only top, left and right lines
  63671. *!*    *!*         shapestylesM:  Print left and right lines
  63672. *!*    *!*         shapestylesB:  Print only bottom, left and right lines
  63673. *!*    *!*        - "Render" class have been modified to add a "T", "M" or "B"
  63674. *!*    *!*          to the boxes' class depending of the "@c" variable,
  63675. *!*    *!*       containing the "continuation" information (0 = complete;
  63676. *!*    *!*          (1 = Top; 2 = Middle; 3 = Bottom)
  63677. *!*    *!* -------------------------------------------------------------------
  63678. *!*    *!* I am hoping that this change do not cause problems elseware...  It 
  63679. *!*    *!* is a pain do search in that text when you have never heard of xsl
  63680. *!*    *!* or Microsoft DOM...  but I've managed for this time.  So let's hope! :)
  63681. *!*    *!* -------------------------------------------------------------------
  63682. *!*    *!* -------------------------------------------------------------------
  63683. *!*    *!* -------------------------------------------------------------------
  63684. *!*    TEXT
  63685. *!*    <?xml version="1.0"?>
  63686. *!*    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  63687. *!*      <xsl:output method="html" version="1.0" encoding="UTF-8" indent="no" doctype-public="-//W3C//DTD HTML 4.0//EN" doctype-system="http://www.w3.org/TR/REC-html40/strict.dtd"/>
  63688. *!*      <xsl:param name="externalFileLocation"/>
  63689. *!*      <!--select="'./whatever/'" or 'http://something/myimages/' or "'./'" or... -->
  63690. *!*      <xsl:param name="copyImageFiles" select="0"/>
  63691. *!*      <xsl:param name="generalFieldDPI" select="96"/>
  63692. *!*      <xsl:param name="fillPatternShade" select="180*3"/>
  63693. *!*      <xsl:param name="fillPatternOffset" select="128"/>
  63694. *!*      <xsl:param name="numberPrecision" select="5"/>
  63695. *!*      <xsl:param name="fieldAlphaOpacityOffset" select="75"/>
  63696. *!*      <xsl:param name="fieldAlphaOpacityShade" select="180*3"/>
  63697. *!*      <xsl:param name="useTextAreaForStretchingText" select="1"/>
  63698. *!*      <xsl:param name="hideScrollbarsForTextAreas" select="0"/>
  63699. *!*      <xsl:param name="PageTitlePrefix_LOC" select="''"/>
  63700. *!*    <!--    <xsl:param name="unpagedModeIncludesOnePageHeader" select="0"/> -->
  63701. *!*      <xsl:param name="unpagedModeIncludesTitle" select="1"/>
  63702. *!*      <xsl:param name="noBody" select="0"/>
  63703. *!*      <xsl:param name="useDynamicTextAttributes" select="1"/>
  63704. *!*      <xsl:param name="anchorAttrName" select="1"/>   
  63705. *!*      <!-- id is theoretically better if you wanted to write
  63706. *!*       script against this element, or in case name is 
  63707. *!*       deprecated in a future version of the standard, 
  63708. *!*       but a value of 1 forces name to be used instead. 
  63709. *!*       Current-newer browsers will be okay with this, and older 
  63710. *!*       browsers might prefer it. -->
  63711. *!*      <xsl:variable name="FRUs" select="10000"/>
  63712. *!*      <xsl:variable name="printDPI" select="960"/>
  63713. *!*      <xsl:variable name="FRUsInPixelsat96DPI" select="104.167"/>
  63714. *!*      <xsl:variable name="imagePixelRatio" select="$generalFieldDPI div $printDPI"/>
  63715. *!*      <xsl:variable name="zeros" select="substring('0000000000000000000000000',1,$numberPrecision)"/>
  63716. *!*      <xsl:variable name="thisPageHeight">
  63717. *!*        <xsl:value-of select="number(/Reports/VFP-Report/VFP-RDL/VFPDataSet/VFPFRXPrintJob/@pageheight  div $printDPI)"/>
  63718. *!*      </xsl:variable>
  63719. *!*      <xsl:variable name="lineNodeName" select="/Reports/VFP-Report/VFP-RDL/VFPDataSet/VFPFRXLayoutNode[type=6]/name"/>
  63720. *!*      <xsl:variable name="labelNodeName" select="/Reports/VFP-Report/VFP-RDL/VFPDataSet/VFPFRXLayoutNode[type=5]/name"/>
  63721. *!*      <xsl:variable name="fieldNodeName" select="/Reports/VFP-Report/VFP-RDL/VFPDataSet/VFPFRXLayoutNode[type=8]/name"/>
  63722. *!*      <xsl:variable name="shapeNodeName" select="/Reports/VFP-Report/VFP-RDL/VFPDataSet/VFPFRXLayoutNode[type=7]/name"/>
  63723. *!*      <xsl:variable name="pictureNodeName" select="/Reports/VFP-Report/VFP-RDL/VFPDataSet/VFPFRXLayoutNode[type=17]/name"/>
  63724. *!*      <xsl:variable name="detailNodeName" select="/Reports/VFP-Report/VFP-RDL/VFPDataSet/VFPFRXLayoutNode[code=4]/name"/>
  63725. *!*      <xsl:variable name="detailHeaderNodeName" select="/Reports/VFP-Report/VFP-RDL/VFPDataSet/VFPFRXLayoutNode[code=9]/name"/>
  63726. *!*      <xsl:variable name="detailFooterNodeName" select="/Reports/VFP-Report/VFP-RDL/VFPDataSet/VFPFRXLayoutNode[code=10]/name"/>
  63727. *!*      <xsl:variable name="pageHeaderNodeName" select="/Reports/VFP-Report/VFP-RDL/VFPDataSet/VFPFRXLayoutNode[code=1]/name"/>
  63728. *!*      <xsl:variable name="pageFooterNodeName" select="/Reports/VFP-Report/VFP-RDL/VFPDataSet/VFPFRXLayoutNode[code=7]/name"/>
  63729. *!*      <xsl:variable name="columnHeaderNodeName" select="/Reports/VFP-Report/VFP-RDL/VFPDataSet/VFPFRXLayoutNode[code=2]/name"/>
  63730. *!*      <xsl:variable name="columnFooterNodeName" select="/Reports/VFP-Report/VFP-RDL/VFPDataSet/VFPFRXLayoutNode[code=6]/name"/>
  63731. *!*      <xsl:variable name="groupHeaderNodeName" select="/Reports/VFP-Report/VFP-RDL/VFPDataSet/VFPFRXLayoutNode[code=3]/name"/>
  63732. *!*      <xsl:variable name="groupFooterNodeName" select="/Reports/VFP-Report/VFP-RDL/VFPDataSet/VFPFRXLayoutNode[code=5]/name"/>
  63733. *!*      <xsl:variable name="titleNodeName" select="/Reports/VFP-Report/VFP-RDL/VFPDataSet/VFPFRXLayoutNode[code=0]/name"/>
  63734. *!*      <xsl:variable name="summaryNodeName" select="/Reports/VFP-Report/VFP-RDL/VFPDataSet/VFPFRXLayoutNode[code=8]/name"/>
  63735. *!*      <xsl:variable name="anchorAttr">
  63736. *!*      <xsl:choose>
  63737. *!*      <xsl:when test="$anchorAttrName=1">name</xsl:when>
  63738. *!*      <xsl:otherwise>id</xsl:otherwise>
  63739. *!*      </xsl:choose> 
  63740. *!*      </xsl:variable>
  63741. *!*      <xsl:key name="Layout" match="/Reports/VFP-Report/VFP-RDL/VFPDataSet/VFPFRXLayoutObject[platform='WINDOWS']" use="concat(frxrecno,../../@id)"/>
  63742. *!*      <xsl:template match="/">
  63743. *!*          <xsl:choose>
  63744. *!*            <xsl:when test="number($noBody)=1">
  63745. *!*            <div>
  63746. *!*             <meta http-equiv="Content-Type"  content="text/html; charset=UTF-8"/>        
  63747. *!*              <xsl:call-template name="renderStyles"/>
  63748. *!*              <xsl:call-template name="body"/>
  63749. *!*             </div>
  63750. *!*            </xsl:when>
  63751. *!*            <xsl:otherwise>
  63752. *!*              <xsl:apply-templates select="/" mode="full"/>
  63753. *!*            </xsl:otherwise>
  63754. *!*          </xsl:choose>
  63755. *!*      </xsl:template>
  63756. *!*      <xsl:template match="/" mode="full">
  63757. *!*        <html>
  63758. *!*           <xsl:if test="/Reports/VFP-Report[1]/VFP-RDL/VFPDataSet/VFPFRXLayoutObject[objtype=1 and (fontcharset=177 or fontcharset=178)]">
  63759. *!*           <xsl:attribute name="dir">rtl</xsl:attribute>
  63760. *!*           </xsl:if>
  63761. *!*          <head>
  63762. *!*            <meta  http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
  63763. *!*    <xsl:comment> 
  63764. *!*    the above repeated-explicit declaration is necessary because 
  63765. *!*    some versions of MSXML xslt processing don't include the 
  63766. *!*    charset as required by the XSLT standard when method="html".  
  63767. *!*    Explicitly including the META creates a doubled meta content-type tag, 
  63768. *!*    but we do need the encoding to be specified properly and the doubled tag is okay. 
  63769. *!*    </xsl:comment>
  63770. *!*            <meta name="description" 
  63771. *!*    content="{/Reports/VFP-Report[1]/Run/property[@id='description']/.}"/>
  63772. *!*            <meta name="author" 
  63773. *!*    content="{/Reports/VFP-Report[1]/Run/property[@id='author']/.}"/>
  63774. *!*            <meta name="copyright" 
  63775. *!*    content="{/Reports/VFP-Report[1]/Run/property[@id='copyright']/.}"/>
  63776. *!*            <meta name="date" 
  63777. *!*    content="{/Reports/VFP-Report[1]/Run/property[@id='date']/.}"/>
  63778. *!*            <xsl:if test="/Reports/VFP-Report/Run/property[@id='keywords']">
  63779. *!*            <meta name="keywords">
  63780. *!*            <xsl:attribute name="content">
  63781. *!*             <xsl:for-each select="/Reports/VFP-Report/Run/property[@id='keywords']">
  63782. *!*             <xsl:value-of select="."/><xsl:if test="not(position()=last())">,</xsl:if>
  63783. *!*            </xsl:for-each>
  63784. *!*            </xsl:attribute>
  63785. *!*            </meta> 
  63786. *!*            </xsl:if>
  63787. *!*            <xsl:if test="/Reports/VFP-Report/Run/property[@id='http-equiv']">
  63788. *!*                <xsl:for-each select="/Reports/VFP-Report/Run/property[@id='http-equiv']//meta">
  63789. *!*              <xsl:variable name="thisMeta" select="concat(ancestor-or-self::*[@id='http-equiv']/@id ,'.',@name)"/>
  63790. *!*              <!-- the extra Run nodes being looked up are potentially evaluated, not original values of the property, 
  63791. *!*              so we can account for expressions -->
  63792. *!*              <meta  http-equiv="{@name}" content="{/Reports/VFP-Report/Run/property[@id=$thisMeta]}"/>
  63793. *!*              </xsl:for-each>
  63794. *!*            </xsl:if>
  63795. *!*            <title>
  63796. *!*              <xsl:choose>
  63797. *!*              <xsl:when test="/Reports/VFP-Report[1]/Run/property[@id='title']">
  63798. *!*                <xsl:value-of select="/Reports/VFP-Report[1]/Run/property[@id='title']/."/>
  63799. *!*              </xsl:when>
  63800. *!*              <xsl:otherwise>
  63801. *!*                <!-- default/VFP 9.0 RTM handling -->
  63802. *!*                 <xsl:value-of select="$PageTitlePrefix_LOC"/>
  63803. *!*                 <xsl:if test="string-length(/Reports/VFP-Report[1]/VFP-RDL/VFPDataSet/VFPFRXPrintJob/@name) = 0">
  63804. *!*                   <xsl:value-of select="/Reports/VFP-Report[1]/VFP-RDL/@id"/>
  63805. *!*                 </xsl:if>
  63806. *!*                 <xsl:value-of select="/Reports/VFP-Report[1]/VFP-RDL/VFPDataSet/VFPFRXPrintJob/@name"/>
  63807. *!*              </xsl:otherwise>
  63808. *!*              </xsl:choose>
  63809. *!*            </title>
  63810. *!*            <xsl:call-template name="renderStyles"/>
  63811. *!*          </head>
  63812. *!*          <body>
  63813. *!*            <xsl:call-template name="body"/>
  63814. *!*          </body>
  63815. *!*        </html>
  63816. *!*      </xsl:template>
  63817. *!*      <xsl:template name="renderStyles">
  63818. *!*         <xsl:call-template name="DocumentStyles"/>
  63819. *!*        <xsl:for-each select="/Reports/VFP-Report">
  63820. *!*          <xsl:call-template name="Styles">
  63821. *!*            <xsl:with-param name="thisReport" select="position()"/>
  63822. *!*            <xsl:with-param name="thisReportID" select="./VFP-RDL/@id"/>
  63823. *!*          </xsl:call-template>
  63824. *!*          <!--        <xsl:call-template name="Script"/> avoid security problems: no script, not even a lone comment indicating TBD -->
  63825. *!*        </xsl:for-each>
  63826. *!*      </xsl:template>
  63827. *!*      <xsl:template name="body">
  63828. *!*        <xsl:for-each select="/Reports/VFP-Report">
  63829. *!*          <xsl:variable name="thisReport" select="position()"/>
  63830. *!*          <xsl:variable name="thisReportID" select="./VFP-RDL/@id"/>
  63831. *!*          <xsl:variable name="thisReportRangeFrom" select="number(./VFP-RDL/VFPDataSet/VFPFRXCommand/@RANGEFROM)"/>
  63832. *!*          <xsl:variable name="separateTitlePage" select="./Data/*[name()=$titleNodeName] and ./VFP-RDL/VFPDataSet/VFPFRXLayoutObject[bandtype='0' and pagebreak='true']"/>
  63833. *!*          <xsl:variable name="separateSummaryPage" select="./Data/*[name()=$summaryNodeName] and ./VFP-RDL/VFPDataSet/VFPFRXLayoutObject[bandtype='8' and pagebreak='true' and ejectbefor='false']"/>
  63834. *!*          <xsl:variable name="reportPages" select="count(./Data/*[(name()=$pageHeaderNodeName) or (name()=$titleNodeName and $separateTitlePage=true()) or  (name()=$summaryNodeName and $separateSummaryPage=true())])"/>
  63835. *!*          <div>
  63836. *!*            <xsl:if test="number($noBody)=1">
  63837. *!*              <xsl:attribute name="style">
  63838. *!*                   position=relative;height=<xsl:value-of select="$reportPages * $thisPageHeight"/>in;
  63839. *!*                   </xsl:attribute>
  63840. *!*            </xsl:if>
  63841. *!*            <xsl:choose>
  63842. *!*              <xsl:when test="./Data/*[name() = $pageHeaderNodeName]">
  63843. *!*                <xsl:if test="$separateTitlePage">
  63844. *!*                  <xsl:apply-templates select="./Data/*[name()=$titleNodeName]" mode="titlesummarypage">
  63845. *!*                    <xsl:with-param name="thisReport" select="$thisReport"/>
  63846. *!*                    <xsl:with-param name="thisReportID" select="$thisReportID"/>
  63847. *!*                  </xsl:apply-templates>
  63848. *!*                </xsl:if>
  63849. *!*                <xsl:apply-templates select="./Data/*[name()=$pageHeaderNodeName]" mode="page">
  63850. *!*                  <xsl:with-param name="thisReport" select="$thisReport"/>
  63851. *!*                  <xsl:with-param name="thisReportID" select="$thisReportID"/>
  63852. *!*                  <xsl:with-param name="thisReportRangeFrom" select="$thisReportRangeFrom"/>
  63853. *!*                </xsl:apply-templates>
  63854. *!*                <xsl:if test="$separateSummaryPage">
  63855. *!*                  <xsl:apply-templates select="./Data/*[name()=$summaryNodeName]" mode="titlesummarypage">
  63856. *!*                    <xsl:with-param name="thisReport" select="$thisReport"/>
  63857. *!*                    <xsl:with-param name="thisReportID" select="$thisReportID"/>
  63858. *!*                  </xsl:apply-templates>
  63859. *!*                </xsl:if>
  63860. *!*              </xsl:when>
  63861. *!*              <xsl:otherwise>
  63862. *!*                <!-- unpaginated-->
  63863. *!*                <xsl:variable name="thisPageHeaderHeight" select="/Reports/VFP-Report[$thisReport]/VFP-RDL/VFPDataSet/VFPFRXLayoutObject[bandlabel='Page Header'][1]/height  div $FRUs"/>
  63864. *!*                <xsl:variable name="thisReportPageHeight" select="number($thisPageHeight - ( $thisPageHeaderHeight +  (/Reports/VFP-Report[$thisReport]/VFP-RDL/VFPDataSet/VFPFRXLayoutObject[bandlabel='Page Footer'][1]/height div $FRUs)) )"/>
  63865. *!*                <xsl:if test="./Data/Pages/*[name() = $pageHeaderNodeName]"> <!-- $unpagedModeIncludesOnePageHeader=1" -->
  63866. *!*                  <!-- show the contents of the first page header -->
  63867. *!*                  <xsl:apply-templates mode="formattingBand" select="./Data/Pages/*[@idref = /Reports/VFP-Report[$thisReport]/VFP-RDL/VFPDataSet/VFPFRXLayoutObject[bandlabel='Page Header']/frxrecno][1]">
  63868. *!*                    <xsl:with-param name="thisReport" select="$thisReport"/>
  63869. *!*                    <xsl:with-param name="thisReportID" select="$thisReportID"/>
  63870. *!*                    <xsl:with-param name="thisReportPageHeight" select="$thisReportPageHeight"/>
  63871. *!*                    <xsl:with-param name="thisPageHeight" select="$thisPageHeight"/>
  63872. *!*                  </xsl:apply-templates>
  63873. *!*                </xsl:if>
  63874. *!*                
  63875. *!*                <!-- the @id criteria below leaves out the Pages and Columns collections, if any -->
  63876. *!*                <!-- we could add in an initial page header but then we'd have to do the additional work to handle any title, etc; all the height offsets will change -->
  63877. *!*                <xsl:apply-templates select="./Data/*[@idref and ($unpagedModeIncludesTitle=1 or not(name() = $titleNodeName))]" mode="unpagedBand">
  63878. *!*                  <xsl:with-param name="thisReport" select="$thisReport"/>
  63879. *!*                  <xsl:with-param name="thisReportID" select="$thisReportID"/>
  63880. *!*                  <xsl:with-param name="thisPageHeight" select="$thisPageHeight"/>
  63881. *!*                  <xsl:with-param name="thisReportPageHeight" select="$thisReportPageHeight"/>
  63882. *!*                  <xsl:with-param name="thisPageHeaderHeight" select="$thisPageHeaderHeight"/>
  63883. *!*                </xsl:apply-templates>
  63884. *!*              </xsl:otherwise>
  63885. *!*            </xsl:choose>
  63886. *!*          </div>
  63887. *!*        </xsl:for-each>
  63888. *!*      </xsl:template>
  63889. *!*      <xsl:template match="/Reports/VFP-Report/Data/*" mode="titlesummarypage">
  63890. *!*        <xsl:param name="thisReport" select="1"/>
  63891. *!*        <xsl:param name="thisReportID"/>
  63892. *!*        <xsl:param name="thisReportRangeFrom" select="1"/>
  63893. *!*        <xsl:variable name="thisBand" select="@id"/>
  63894. *!*        <div>
  63895. *!*          <xsl:attribute name="style"> width:100%;top:<xsl:value-of select="$thisPageHeight * (number( ./@idref) -$thisReportRangeFrom)"/>in; position:absolute; </xsl:attribute>
  63896. *!*          <xsl:apply-templates select="." mode="band">
  63897. *!*            <xsl:with-param name="thisReport" select="$thisReport"/>
  63898. *!*            <xsl:with-param name="thisReportID" select="$thisReportID"/>
  63899. *!*          </xsl:apply-templates>
  63900. *!*          <xsl:if test="/Reports/VFP-Report[$thisReport]/VFP-RDL/VFPDataSet/VFPFRXLayoutObject[frxrecno=$thisBand and ejectafter='true']">
  63901. *!*            <!-- page footer for this summary page -->
  63902. *!*            <xsl:apply-templates select="/Reports/VFP-Report[$thisReport]/Data/*[name()=$pageFooterNodeName][position()=last()]" mode="band">
  63903. *!*              <xsl:with-param name="thisReport" select="$thisReport"/>
  63904. *!*              <xsl:with-param name="thisReportID" select="$thisReportID"/>
  63905. *!*            </xsl:apply-templates>
  63906. *!*          </xsl:if>
  63907. *!*        </div>
  63908. *!*      </xsl:template>
  63909. *!*      <xsl:template match="/Reports/VFP-Report/Data/*" mode="page">
  63910. *!*        <xsl:param name="thisReport" select="1"/>
  63911. *!*        <xsl:param name="thisReportID"/>
  63912. *!*        <xsl:param name="thisReportRangeFrom" select="1"/>
  63913. *!*        <xsl:variable name="thisPage" select="@id"/>
  63914. *!*        <div>
  63915. *!*          <xsl:attribute name="style"> width:100%;top:<xsl:value-of select="$thisPageHeight * ($thisPage -$thisReportRangeFrom)"/>in;position:absolute; </xsl:attribute>
  63916. *!*          <xsl:apply-templates select="." mode="band">
  63917. *!*            <xsl:with-param name="thisReport" select="$thisReport"/>
  63918. *!*            <xsl:with-param name="thisReportID" select="$thisReportID"/>
  63919. *!*          </xsl:apply-templates>
  63920. *!*          <xsl:if test="$thisPage = 1 and /Reports/VFP-Report[$thisReport]/Data/*[name()=$titleNodeName] and /Reports/VFP-Report[$thisReport]/VFP-RDL/VFPDataSet/VFPFRXLayoutObject[bandtype='0' and pagebreak='false']">
  63921. *!*            <xsl:apply-templates select="/Reports/VFP-Report[$thisReport]/Data/*[name()=$titleNodeName]" mode="band">
  63922. *!*              <xsl:with-param name="thisReport" select="$thisReport"/>
  63923. *!*              <xsl:with-param name="thisReportID" select="$thisReportID"/>
  63924. *!*            </xsl:apply-templates>
  63925. *!*          </xsl:if>
  63926. *!*          <xsl:apply-templates select="/Reports/VFP-Report/Data/*[( (@id=$thisPage and contains(concat('|',$pageFooterNodeName,'|',$columnHeaderNodeName,'|',$columnFooterNodeName,'|'),concat('|',name(),'|'))) or (@idref=$thisPage and contains(concat('|',$detailHeaderNodeName,'|',$detailFooterNodeName,'|',$detailNodeName,'|',$groupHeaderNodeName,'|',$groupFooterNodeName,'|',$summaryNodeName,'|'),concat('|',name(),'|'))) )]" mode="band">
  63927. *!*            <xsl:with-param name="thisReport" select="$thisReport"/>
  63928. *!*            <xsl:with-param name="thisReportID" select="$thisReportID"/>
  63929. *!*          </xsl:apply-templates>
  63930. *!*        </div>
  63931. *!*      </xsl:template>
  63932. *!*      <xsl:template match="/Reports/VFP-Report/Data/Pages/*" mode="formattingBand">
  63933. *!*        <xsl:param name="thisReport" select="1"/>
  63934. *!*        <xsl:param name="thisReportID"/>
  63935. *!*        <xsl:param name="thisPageHeight"/>
  63936. *!*        <xsl:param name="thisReportPageHeight"/>
  63937. *!*        <xsl:variable name="thisPage" select="@id"/>
  63938. *!*        <xsl:variable name="thisPageRenderOffset" select="(($thisPage - 1) * $thisReportPageHeight)  + sum((/Reports/VFP-Report[position() < $thisReport]/VFP-RDL/VFPDataSet/VFPFRXLayoutObject[bandlabel='Page Header']/height) ) "/>
  63939. *!*        <xsl:for-each select="./*">
  63940. *!*          <xsl:variable name="thisID" select="translate(@id,'+','')"/>
  63941. *!*          <xsl:call-template name="Render">
  63942. *!*            <xsl:with-param name="thisID" select="$thisID"/>
  63943. *!*            <xsl:with-param name="thisZ" select="position()"/>
  63944. *!*            <xsl:with-param name="thisPage" select="../@idref"/>
  63945. *!*            <xsl:with-param name="thisReport" select="$thisReport"/>
  63946. *!*            <xsl:with-param name="thisReportID" select="$thisReportID"/>
  63947. *!*            <xsl:with-param name="topOffset" select="number($thisPageRenderOffset) * $printDPI"/>
  63948. *!*          </xsl:call-template>
  63949. *!*        </xsl:for-each>
  63950. *!*      </xsl:template>
  63951. *!*      <xsl:template match="/Reports/VFP-Report/Data/*" mode="unpagedBand">
  63952. *!*          <xsl:param name="thisReport" select="1"/>
  63953. *!*        <xsl:param name="thisReportID"/>
  63954. *!*        <xsl:param name="thisPageHeight"/>
  63955. *!*        <xsl:param name="thisReportPageHeight"/>
  63956. *!*        <xsl:param name="thisPageHeaderHeight"/>
  63957. *!*        <xsl:variable name="thisPage" select="@idref"/>
  63958. *!*        <xsl:variable name="thisPageRenderOffset">
  63959. *!*          <xsl:choose>
  63960. *!*            <xsl:when test="../Pages/*[name() = $pageHeaderNodeName]"> <!-- $unpagedModeIncludesOnePageHeader=1" -->
  63961. *!*              <xsl:value-of select="(($thisPage - 1) * $thisReportPageHeight) + (sum(/Reports/VFP-Report[position() < $thisReport]/VFP-RDL/VFPDataSet/VFPFRXLayoutObject[bandlabel='Page Header'][1]/height)div $FRUs)  + $thisPageHeaderHeight "/>
  63962. *!*            </xsl:when>
  63963. *!*            <xsl:otherwise>
  63964. *!*              <xsl:value-of select="(($thisPage - 1) * $thisReportPageHeight) -($thisPageHeaderHeight*$thisPage)  "/>
  63965. *!*            </xsl:otherwise>
  63966. *!*          </xsl:choose>
  63967. *!*        </xsl:variable>
  63968. *!*        <xsl:call-template name="addAnchor"/>
  63969. *!*        <xsl:for-each select="./*">
  63970. *!*          <xsl:variable name="thisID" select="translate(@id,'+','')"/>
  63971. *!*          <xsl:call-template name="Render">
  63972. *!*            <xsl:with-param name="thisID" select="$thisID"/>
  63973. *!*            <xsl:with-param name="thisZ" select="position()"/>
  63974. *!*            <xsl:with-param name="thisPage" select="../@idref"/>
  63975. *!*            <xsl:with-param name="thisReport" select="$thisReport"/>
  63976. *!*            <xsl:with-param name="thisReportID" select="$thisReportID"/>
  63977. *!*            <xsl:with-param name="topOffset" select="number($thisPageRenderOffset) * $printDPI"/>
  63978. *!*          </xsl:call-template>
  63979. *!*        </xsl:for-each>
  63980. *!*      </xsl:template>
  63981. *!*      <xsl:template match="/Reports/VFP-Report/Data/*" mode="band">
  63982. *!*        <xsl:param name="thisReport" select="1"/>
  63983. *!*        <xsl:param name="thisReportID"/>
  63984. *!*        <xsl:call-template name="addAnchor"/>
  63985. *!*        <xsl:for-each select="./*">
  63986. *!*          <xsl:variable name="thisID" select="translate(@id,'+','')"/>
  63987. *!*          <!--        <xsl:if test="key('Layout',concat($thisID, $thisReportID))/vpos > key('Layout',preceding-sibling::*/concat(@id,$thisReportID))/vpos"><div style="position=absolute;"/></xsl:if>  -->
  63988. *!*          <xsl:call-template name="Render">
  63989. *!*            <xsl:with-param name="thisID" select="$thisID"/>
  63990. *!*            <xsl:with-param name="thisZ" select="position()"/>
  63991. *!*            <xsl:with-param name="thisPage" select="../@idref"/>
  63992. *!*            <xsl:with-param name="thisReport" select="$thisReport"/>
  63993. *!*            <xsl:with-param name="thisReportID" select="$thisReportID"/>
  63994. *!*          </xsl:call-template>
  63995. *!*        </xsl:for-each>
  63996. *!*      </xsl:template>
  63997. *!*      <xsl:template name="Render">
  63998. *!*        <xsl:param name="thisID"/>
  63999. *!*        <xsl:param name="thisZ"/>
  64000. *!*        <xsl:param name="thisPage"/>
  64001. *!*        <xsl:param name="thisReport" select="1"/>
  64002. *!*        <xsl:param name="thisReportID" select="1"/>
  64003. *!*        <xsl:param name="topOffset" select="0"/>
  64004. *!*        <xsl:call-template name="addAnchor"/>
  64005. *!*        <xsl:choose>
  64006. *!*          <xsl:when test="name()=$lineNodeName and key('Layout',concat($thisID, $thisReportID))/height <  key('Layout',concat($thisID, $thisReportID))/width">
  64007. *!*            <hr>
  64008. *!*              <xsl:call-template name="addClassAttribute">
  64009. *!*            <xsl:with-param name="default" select="concat('FRX',$thisReport,'_',$thisID)"/> 
  64010. *!*            </xsl:call-template>
  64011. *!*            <xsl:call-template name="addTitleAttribute"/>
  64012. *!*              <xsl:call-template name="addStyleAttribute">
  64013. *!*                <xsl:with-param name="topOffset" select="$topOffset"/>
  64014. *!*                <xsl:with-param name="thisZ" select="$thisZ"/>
  64015. *!*                <xsl:with-param name="thisReportID" select="$thisReportID"/>
  64016. *!*               <xsl:with-param name="thisID" select="$thisID"/>
  64017. *!*               <xsl:with-param name="styleType" select="'HR'"/>
  64018. *!*              </xsl:call-template>
  64019. *!*            </hr>
  64020. *!*          </xsl:when>
  64021. *!*          <xsl:when test="name()=$lineNodeName">
  64022. *!*            <!-- vertical line -->
  64023. *!*            <span>
  64024. *!*              <xsl:call-template name="addClassAttribute">
  64025. *!*                <xsl:with-param name="default" select="concat('FRX',$thisReport,'_',$thisID)"/> 
  64026. *!*            </xsl:call-template>
  64027. *!*              <xsl:call-template name="addTitleAttribute"/>
  64028. *!*              <xsl:call-template name="addStyleAttribute">
  64029. *!*                <xsl:with-param name="topOffset" select="$topOffset"/>
  64030. *!*                <xsl:with-param name="thisZ" select="$thisZ"/>
  64031. *!*                <xsl:with-param name="thisReportID" select="$thisReportID"/>
  64032. *!*               <xsl:with-param name="thisID" select="$thisID"/>
  64033. *!*                  <xsl:with-param name="styleType" select="'VR'"/>
  64034. *!*              </xsl:call-template>
  64035. *!*            </span>
  64036. *!*          </xsl:when>
  64037. *!*          <xsl:when test="$useTextAreaForStretchingText=1 and string-length(@hlink) = 0  and name()=$fieldNodeName and key('Layout',concat($thisID, $thisReportID))[stretch='true']">
  64038. *!*            <textarea readonly="readonly" rows="0" cols="0">
  64039. *!*              <xsl:call-template name="addClassAttribute">
  64040. *!*                 <xsl:with-param name="default" select="concat('FRX',$thisReport,'_',$thisID)"/> 
  64041. *!*            </xsl:call-template>
  64042. *!*              <xsl:call-template name="addTitleAttribute"/>
  64043. *!*              <xsl:call-template name="addStyleAttribute">
  64044. *!*                <xsl:with-param name="topOffset" select="$topOffset"/>
  64045. *!*                <xsl:with-param name="thisZ" select="$thisZ"/>
  64046. *!*                <xsl:with-param name="thisReportID" select="$thisReportID"/>
  64047. *!*              <xsl:with-param name="thisID" select="$thisID"/>
  64048. *!*              <xsl:with-param name="styleType" select="'TextArea'"/>
  64049. *!*              </xsl:call-template>
  64050. *!*              <xsl:value-of select="."/>
  64051. *!*            </textarea>
  64052. *!*          </xsl:when>
  64053. *!*          <xsl:otherwise>
  64054. *!*            <div>
  64055. *!*               <xsl:choose>
  64056. *!*                 <xsl:when test="@c=1">
  64057. *!*                    <xsl:call-template name="addClassAttribute">
  64058. *!*                       <xsl:with-param name="default" select="concat('FRX',$thisReport,'_',$thisID,'T')"/> 
  64059. *!*                    </xsl:call-template>
  64060. *!*                 </xsl:when>
  64061. *!*                 <xsl:when test="@c=2">
  64062. *!*                    <xsl:call-template name="addClassAttribute">
  64063. *!*                       <xsl:with-param name="default" select="concat('FRX',$thisReport,'_',$thisID,'M')"/> 
  64064. *!*                    </xsl:call-template>
  64065. *!*                 </xsl:when>
  64066. *!*                 <xsl:when test="@c=3">
  64067. *!*                    <xsl:call-template name="addClassAttribute">
  64068. *!*                       <xsl:with-param name="default" select="concat('FRX',$thisReport,'_',$thisID,'B')"/> 
  64069. *!*                    </xsl:call-template>
  64070. *!*                 </xsl:when>
  64071. *!*                 <xsl:otherwise>
  64072. *!*                    <xsl:call-template name="addClassAttribute">
  64073. *!*                       <xsl:with-param name="default" select="concat('FRX',$thisReport,'_',$thisID)"/> 
  64074. *!*                    </xsl:call-template>
  64075. *!*                 </xsl:otherwise>
  64076. *!*               </xsl:choose>
  64077. *!*              <xsl:call-template name="addTitleAttribute"/>
  64078. *!*              <xsl:call-template name="addStyleAttribute">
  64079. *!*                <xsl:with-param name="topOffset" select="$topOffset"/>
  64080. *!*                <xsl:with-param name="thisZ" select="$thisZ"/>
  64081. *!*                <xsl:with-param name="thisReportID" select="$thisReportID"/>
  64082. *!*              <xsl:with-param name="thisID" select="$thisID"/>
  64083. *!*              <xsl:with-param name="styleType" select="'Div'"/>
  64084. *!*              </xsl:call-template>
  64085. *!*              <xsl:choose>
  64086. *!*                <xsl:when test="name()=$shapeNodeName or name()=$lineNodeName">
  64087. *!*                  <!-- nothing -->
  64088. *!*                </xsl:when>
  64089. *!*                <xsl:when test="name()=$pictureNodeName and string-length(@hlink) > 0">
  64090. *!*                  <a href="{@hlink}">
  64091. *!*                    <xsl:call-template name="renderPicture">
  64092. *!*                <xsl:with-param name="thisReportID" select="$thisReportID"/>
  64093. *!*                <xsl:with-param name="thisID" select="$thisID"/>
  64094. *!*                    </xsl:call-template>
  64095. *!*                  </a>
  64096. *!*                </xsl:when>
  64097. *!*                <xsl:when test="name()=$pictureNodeName and string-length(@PLINK) > 0">
  64098. *!*                  <a href="{translate(@PLINK,'\','/')}"  target="blank">
  64099. *!*                    <xsl:call-template name="renderPicture">
  64100. *!*                <xsl:with-param name="thisReportID" select="$thisReportID"/>
  64101. *!*                <xsl:with-param name="thisID" select="$thisID"/>
  64102. *!*                    </xsl:call-template>
  64103. *!*                  </a>
  64104. *!*                </xsl:when>
  64105. *!*                <xsl:when test="name()=$pictureNodeName">
  64106. *!*                  <xsl:call-template name="renderPicture">
  64107. *!*                <xsl:with-param name="thisReportID" select="$thisReportID"/>
  64108. *!*                <xsl:with-param name="thisID" select="$thisID"/>
  64109. *!*                  </xsl:call-template>
  64110. *!*                </xsl:when>
  64111. *!*                <xsl:when test="string-length(@hlink) > 0">
  64112. *!*                  <a href="{@hlink}">
  64113. *!*                    <xsl:call-template name="replaceText"/>
  64114. *!*                  </a>
  64115. *!*                </xsl:when>
  64116. *!*                <xsl:when test="string-length(@PLINK) > 0">
  64117. *!*                  <a href="{translate(@PLINK,'\','/')}" target="blank">
  64118. *!*                    <xsl:call-template name="replaceText"/>
  64119. *!*                  </a>
  64120. *!*                </xsl:when>
  64121. *!*                <xsl:otherwise>
  64122. *!*                  <xsl:call-template name="replaceText"/>
  64123. *!*                </xsl:otherwise>
  64124. *!*              </xsl:choose>
  64125. *!*            </div>
  64126. *!*          </xsl:otherwise>
  64127. *!*        </xsl:choose>
  64128. *!*        <!-- /xsl:if -->
  64129. *!*      </xsl:template>
  64130. *!*      <xsl:template name="getCSSName">
  64131. *!*      <xsl:param name="thisReport" select="1"/>
  64132. *!*      <xsl:param name="thisItem" select="0"/>
  64133. *!*      <xsl:param name="itemType" select="''"/>
  64134. *!*      <xsl:param name="firstPass" select="1"/>
  64135. *!*      <xsl:variable name="subst" select="/Reports/VFP-Report[$thisReport]/Data/*/*[@id=$thisItem]/@css"/>
  64136. *!*        <xsl:choose>
  64137. *!*         <xsl:when test="number($firstPass)=1 or string-length($subst) = 0"><xsl:value-of select="concat('.FRX',$thisReport,'_',$thisItem,$itemType)"/></xsl:when>
  64138. *!*         <xsl:otherwise>.<xsl:value-of select="$subst"/></xsl:otherwise>
  64139. *!*         </xsl:choose>
  64140. *!*      </xsl:template>
  64141. *!*      <xsl:template match="VFPFRXLayoutObject" mode="imagestyles">
  64142. *!*        <xsl:param name="thisReport" select="1"/>
  64143. *!*        <xsl:param name="firstPass" select="1"/>
  64144. *!*         <xsl:call-template name="getCSSName">
  64145. *!*         <xsl:with-param name="thisReport" select="$thisReport"/>
  64146. *!*         <xsl:with-param name="thisItem" select="frxrecno"/>
  64147. *!*         <xsl:with-param name="firstPass" select="$firstPass"/>
  64148. *!*         </xsl:call-template>{
  64149. *!*      position: absolute;overflow: hidden;width: <xsl:call-template name="setPrecision"><xsl:with-param name="theNumber" select="width div $FRUs"/></xsl:call-template>in;height: <xsl:call-template name="setPrecision"><xsl:with-param name="theNumber" select="height div $FRUs"/></xsl:call-template>in;
  64150. *!*      }
  64151. *!*      <!-- <xsl:if test="offset=0">
  64152. *!*    left: <xsl:value-of select="hpos div $FRUs"/>in; 
  64153. *!*    </xsl:if>
  64154. *!*    <xsl:if test="offset=2">
  64155. *!*    left: <xsl:value-of select="hpos div $FRUs"/>in; 
  64156. *!*    </xsl:if> -->
  64157. *!*     </xsl:template>
  64158. *!*      <xsl:template match="VFPFRXLayoutObject" mode="shapestyles">
  64159. *!*        <xsl:param name="thisReport" select="1"/>
  64160. *!*       <xsl:param name="firstPass" select="1"/>
  64161. *!*         <xsl:call-template name="getCSSName">
  64162. *!*         <xsl:with-param name="thisReport" select="$thisReport"/>
  64163. *!*         <xsl:with-param name="thisItem" select="frxrecno"/>
  64164. *!*         <xsl:with-param name="firstPass" select="$firstPass"/>
  64165. *!*         </xsl:call-template>{
  64166. *!*       position: absolute ;font-size:1pt; border: <xsl:value-of select="pensize"/>px <xsl:call-template name="pattern"/><xsl:call-template name="pencolor"/>;<xsl:if test="(mode=0 and not(fillpat=0)) or (mode=1 and fillpat=1)">background-color:<xsl:call-template name="fillcolor"/>;</xsl:if>width: <xsl:call-template name="setPrecision"> <xsl:with-param name="theNumber" select="width div $FRUs"/></xsl:call-template>in;left: <xsl:call-template name="setPrecision"><xsl:with-param name="theNumber" select="hpos div $FRUs"/></xsl:call-template>in;
  64167. *!*          }
  64168. *!*          <!--    <xsl:if test="stretch='true'">
  64169. *!*    overflow: auto;
  64170. *!*       </xsl:if> -->
  64171. *!*      </xsl:template>
  64172. *!*      </xsl:template>
  64173. *!*      <xsl:template match="VFPFRXLayoutObject" mode="shapestylesT">
  64174. *!*        <xsl:param name="thisReport" select="1"/>
  64175. *!*       <xsl:param name="firstPass" select="1"/>
  64176. *!*         <xsl:call-template name="getCSSName">
  64177. *!*         <xsl:with-param name="thisReport" select="$thisReport"/>
  64178. *!*         <xsl:with-param name="thisItem" select="frxrecno"/>
  64179. *!*         <xsl:with-param name="itemType" select="'T'"/>
  64180. *!*         <xsl:with-param name="firstPass" select="$firstPass"/>
  64181. *!*         </xsl:call-template>{
  64182. *!*       position: absolute ;font-size:1pt; border-left: <xsl:value-of select="pensize"/>px <xsl:call-template name="pattern"/><xsl:call-template name="pencolor"/>;border-right: <xsl:value-of select="pensize"/>px <xsl:call-template name="pattern"/><xsl:call-template name="pencolor"/>;border-top: <xsl:value-of select="pensize"/>px <xsl:call-template name="pattern"/><xsl:call-template name="pencolor"/>;<xsl:if test="(mode=0 and not(fillpat=0)) or (mode=1 and fillpat=1)">background-color:<xsl:call-template name="fillcolor"/>;</xsl:if>width: <xsl:call-template name="setPrecision"> <xsl:with-param name="theNumber" select="width div $FRUs"/></xsl:call-template>in;left: <xsl:call-template name="setPrecision"><xsl:with-param name="theNumber" select="hpos div $FRUs"/></xsl:call-template>in;
  64183. *!*          }
  64184. *!*          <!--    <xsl:if test="stretch='true'">
  64185. *!*    overflow: auto;
  64186. *!*       </xsl:if> -->
  64187. *!*      </xsl:template>
  64188. *!*      <xsl:template match="VFPFRXLayoutObject" mode="shapestylesM">
  64189. *!*        <xsl:param name="thisReport" select="1"/>
  64190. *!*       <xsl:param name="firstPass" select="1"/>
  64191. *!*         <xsl:call-template name="getCSSName">
  64192. *!*         <xsl:with-param name="thisReport" select="$thisReport"/>
  64193. *!*         <xsl:with-param name="thisItem" select="frxrecno"/>
  64194. *!*         <xsl:with-param name="itemType" select="'M'"/>
  64195. *!*         <xsl:with-param name="firstPass" select="$firstPass"/>
  64196. *!*         </xsl:call-template>{
  64197. *!*       position: absolute ;font-size:1pt; border-left: <xsl:value-of select="pensize"/>px <xsl:call-template name="pattern"/><xsl:call-template name="pencolor"/>;border-right: <xsl:value-of select="pensize"/>px <xsl:call-template name="pattern"/><xsl:call-template name="pencolor"/>;<xsl:if test="(mode=0 and not(fillpat=0)) or (mode=1 and fillpat=1)">background-color:<xsl:call-template name="fillcolor"/>;</xsl:if>width: <xsl:call-template name="setPrecision"> <xsl:with-param name="theNumber" select="width div $FRUs"/></xsl:call-template>in;left: <xsl:call-template name="setPrecision"><xsl:with-param name="theNumber" select="hpos div $FRUs"/></xsl:call-template>in;
  64198. *!*          }
  64199. *!*          <!--    <xsl:if test="stretch='true'">
  64200. *!*    overflow: auto;
  64201. *!*       </xsl:if> -->
  64202. *!*      </xsl:template>
  64203. *!*      <xsl:template match="VFPFRXLayoutObject" mode="shapestylesB">
  64204. *!*        <xsl:param name="thisReport" select="1"/>
  64205. *!*       <xsl:param name="firstPass" select="1"/>
  64206. *!*         <xsl:call-template name="getCSSName">
  64207. *!*         <xsl:with-param name="thisReport" select="$thisReport"/>
  64208. *!*         <xsl:with-param name="thisItem" select="frxrecno"/>
  64209. *!*         <xsl:with-param name="itemType" select="'B'"/>
  64210. *!*         <xsl:with-param name="firstPass" select="$firstPass"/>
  64211. *!*         </xsl:call-template>{
  64212. *!*       position: absolute ;font-size:1pt; border-left: <xsl:value-of select="pensize"/>px <xsl:call-template name="pattern"/><xsl:call-template name="pencolor"/>;border-right: <xsl:value-of select="pensize"/>px <xsl:call-template name="pattern"/><xsl:call-template name="pencolor"/>;border-bottom: <xsl:value-of select="pensize"/>px <xsl:call-template name="pattern"/><xsl:call-template name="pencolor"/>;<xsl:if test="(mode=0 and not(fillpat=0)) or (mode=1 and fillpat=1)">background-color:<xsl:call-template name="fillcolor"/>;</xsl:if>width: <xsl:call-template name="setPrecision"> <xsl:with-param name="theNumber" select="width div $FRUs"/></xsl:call-template>in;left: <xsl:call-template name="setPrecision"><xsl:with-param name="theNumber" select="hpos div $FRUs"/></xsl:call-template>in;
  64213. *!*          }
  64214. *!*          <!--    <xsl:if test="stretch='true'">
  64215. *!*    overflow: auto;
  64216. *!*       </xsl:if> -->
  64217. *!*      </xsl:template>
  64218. *!*      <xsl:template match="VFPFRXLayoutObject" mode="textstyles">
  64219. *!*        <xsl:param name="thisReport" select="1"/>
  64220. *!*        <xsl:param name="firstPass" select="1"/>
  64221. *!*         <xsl:call-template name="getCSSName">
  64222. *!*         <xsl:with-param name="thisReport" select="$thisReport"/>
  64223. *!*         <xsl:with-param name="thisItem" select="frxrecno"/>
  64224. *!*         <xsl:with-param name="firstPass" select="$firstPass"/>
  64225. *!*         </xsl:call-template>{
  64226. *!*      <xsl:call-template name="getTextAlignment"/>vertical-align: top; font-family: "<xsl:value-of select="fontface"/>"; font-size: <xsl:value-of select="fontsize"/>pt; border: 0px none; padding: 0px; margin: 0px;<xsl:call-template name="getFontAttributes"/>color:<xsl:call-template name="pencolor"/>;<xsl:choose>
  64227. *!*          <xsl:when test="mode mod 2 = 1">background-color:transparent;</xsl:when>
  64228. *!*          <xsl:otherwise>background-color: <xsl:call-template name="fillcolor"/>;</xsl:otherwise>
  64229. *!*        </xsl:choose><xsl:choose>
  64230. *!*          <xsl:when test="stretch='true' and objtype=8 and $useTextAreaForStretchingText=1 and $hideScrollbarsForTextAreas=1"> overflow:hidden;margin-top:4px;</xsl:when>
  64231. *!*          <xsl:when test="stretch='true' and objtype=8 and $useTextAreaForStretchingText=1"> overflow: auto;margin-top:4px;</xsl:when>
  64232. *!*          <xsl:otherwise>overflow:hidden;</xsl:otherwise>
  64233. *!*        </xsl:choose> position: absolute;
  64234. *!*       }   
  64235. *!*        <!-- tbd, make vertical-align more dynamic -->  
  64236. *!*      </xsl:template>
  64237. *!*      <xsl:template match="VFPFRXLayoutObject" mode="linestyles">
  64238. *!*        <xsl:param name="thisReport" select="1"/>
  64239. *!*       <xsl:param name="firstPass" select="1"/>
  64240. *!*         <xsl:call-template name="getCSSName">
  64241. *!*         <xsl:with-param name="thisReport" select="$thisReport"/>
  64242. *!*         <xsl:with-param name="thisItem" select="frxrecno"/>
  64243. *!*          <xsl:with-param name="firstPass" select="$firstPass"/>
  64244. *!*         </xsl:call-template>{
  64245. *!*       position:absolute;font-size:1pt;border: <xsl:value-of select="pensize"/>px <xsl:call-template name="pattern"/><xsl:call-template name="pencolor"/>;left: <xsl:value-of select="hpos div $FRUs"/>in;
  64246. *!*          <xsl:choose>
  64247. *!*          <xsl:when test="height < width"> width: <xsl:value-of select="width div $FRUs"/>in;
  64248. *!*      height: <xsl:value-of select="floor(height div $FRUsInPixelsat96DPI)"/>px; margin: 0px;</xsl:when>
  64249. *!*          <xsl:otherwise>  height: <xsl:value-of select="height div $FRUs"/>in;
  64250. *!*      width: <xsl:value-of select="floor(width div $FRUsInPixelsat96DPI)"/>px;  </xsl:otherwise>
  64251. *!*        </xsl:choose>
  64252. *!*       }
  64253. *!*      </xsl:template>
  64254. *!*      <xsl:template name="pattern">
  64255. *!*        <xsl:choose>
  64256. *!*          <xsl:when test="penpat=0"> none </xsl:when>
  64257. *!*          <xsl:when test="penpat=1"> dotted </xsl:when>
  64258. *!*          <xsl:when test="penpat=2"> dashed </xsl:when>
  64259. *!*          <xsl:otherwise> solid </xsl:otherwise>
  64260. *!*        </xsl:choose>
  64261. *!*      </xsl:template>
  64262. *!*      <xsl:template name="pencolor">#<xsl:call-template name="getHexColorValue">
  64263. *!*          <xsl:with-param name="theNumber" select="penred"/>
  64264. *!*        </xsl:call-template>
  64265. *!*        <xsl:call-template name="getHexColorValue">
  64266. *!*          <xsl:with-param name="theNumber" select="pengreen"/>
  64267. *!*        </xsl:call-template>
  64268. *!*        <xsl:call-template name="getHexColorValue">
  64269. *!*          <xsl:with-param name="theNumber" select="penblue"/>
  64270. *!*        </xsl:call-template>
  64271. *!*      </xsl:template>
  64272. *!*      <xsl:template name="fillcolor">#<xsl:call-template name="getHexColorValue">
  64273. *!*          <xsl:with-param name="theNumber" select="fillred"/>
  64274. *!*          <xsl:with-param name="fill" select="1"/>
  64275. *!*        </xsl:call-template>
  64276. *!*        <xsl:call-template name="getHexColorValue">
  64277. *!*          <xsl:with-param name="theNumber" select="fillgreen"/>
  64278. *!*          <xsl:with-param name="fill" select="1"/>
  64279. *!*        </xsl:call-template>
  64280. *!*        <xsl:call-template name="getHexColorValue">
  64281. *!*          <xsl:with-param name="theNumber" select="fillblue"/>
  64282. *!*          <xsl:with-param name="fill" select="1"/>
  64283. *!*        </xsl:call-template>
  64284. *!*      </xsl:template>
  64285. *!*      <xsl:template name="getFontAttributes">
  64286. *!*        <xsl:param name="theStyles" select="0"/>
  64287. *!*        <xsl:choose>
  64288. *!*          <xsl:when test="fontbold='true'">font-weight: bold;</xsl:when>
  64289. *!*          <xsl:otherwise>font-weight: normal;</xsl:otherwise>
  64290. *!*        </xsl:choose>
  64291. *!*        <xsl:if test="fontstrikethrough='true' or fontunderline='true'">text-decoration: <xsl:if test="fontstrikethrough='true'">line-through </xsl:if>
  64292. *!*          <xsl:if test="fontunderline='true'">underline</xsl:if>;</xsl:if>
  64293. *!*        <xsl:if test="fontitalic='true'">font-style: italic;</xsl:if>
  64294. *!*      </xsl:template>
  64295. *!*      <xsl:template name="getHexColorValue">
  64296. *!*        <xsl:param name="theNumber" select="-1"/>
  64297. *!*        <xsl:param name="fill" select="0"/>
  64298. *!*        <xsl:variable name="useNumber">
  64299. *!*          <xsl:choose>
  64300. *!*            <xsl:when test="$fill=1 and fillpat > 1 and ((fillred+fillblue+fillgreen) < $fillPatternShade)">
  64301. *!*              <xsl:choose>
  64302. *!*                <xsl:when test="($fillPatternOffset + $theNumber) > 254">255</xsl:when>
  64303. *!*                <xsl:otherwise>
  64304. *!*                  <xsl:value-of select="$fillPatternOffset + $theNumber"/>
  64305. *!*                </xsl:otherwise>
  64306. *!*              </xsl:choose>
  64307. *!*            </xsl:when>
  64308. *!*            <xsl:otherwise>
  64309. *!*              <xsl:value-of select="$theNumber"/>
  64310. *!*            </xsl:otherwise>
  64311. *!*          </xsl:choose>
  64312. *!*        </xsl:variable>
  64313. *!*        <xsl:choose>
  64314. *!*          <xsl:when test="$useNumber=-1 and $fill=1">FF</xsl:when>
  64315. *!*          <xsl:when test="$useNumber=-1">00</xsl:when>
  64316. *!*          <xsl:otherwise>
  64317. *!*            <xsl:call-template name="getHexForNumber">
  64318. *!*              <xsl:with-param name="theNumber" select="floor($useNumber div 16)"/>
  64319. *!*            </xsl:call-template>
  64320. *!*            <xsl:call-template name="getHexForNumber">
  64321. *!*              <xsl:with-param name="theNumber" select="round($useNumber mod 16)"/>
  64322. *!*            </xsl:call-template>
  64323. *!*          </xsl:otherwise>
  64324. *!*        </xsl:choose>
  64325. *!*      </xsl:template>
  64326. *!*      <xsl:template name="setPrecision">
  64327. *!*        <xsl:param name="theNumber" select="-1"/>
  64328. *!*        <xsl:choose>
  64329. *!*          <xsl:when test="$numberPrecision = -1 or not(contains(string($theNumber),'.'))">
  64330. *!*            <xsl:value-of select="$theNumber"/>
  64331. *!*          </xsl:when>
  64332. *!*          <xsl:when test="$numberPrecision > 0">
  64333. *!*            <!--        <xsl:value-of select="concat(string(floor($theNumber)),'.',substring(substring-after(string($theNumber),'.'),1,$numberPrecision))"/>  -->
  64334. *!*            <xsl:value-of select="format-number($theNumber,concat('##0.',$zeros))"/>
  64335. *!*          </xsl:when>
  64336. *!*          <xsl:when test="$numberPrecision=0">
  64337. *!*            <xsl:value-of select="round($theNumber)"/>
  64338. *!*          </xsl:when>
  64339. *!*          <xsl:otherwise>
  64340. *!*            <!-- shouldn't happen-->
  64341. *!*            <xsl:value-of select="$theNumber"/>
  64342. *!*          </xsl:otherwise>
  64343. *!*        </xsl:choose>
  64344. *!*      </xsl:template>
  64345. *!*      <xsl:template name="getHexForNumber">
  64346. *!*        <xsl:param name="theNumber" select="-1"/>
  64347. *!*        <xsl:choose>
  64348. *!*          <xsl:when test="$theNumber=-1">00</xsl:when>
  64349. *!*          <xsl:when test="$theNumber < 10">
  64350. *!*            <xsl:value-of select="$theNumber"/>
  64351. *!*          </xsl:when>
  64352. *!*          <xsl:when test="$theNumber = 10">A</xsl:when>
  64353. *!*          <xsl:when test="$theNumber = 11">B</xsl:when>
  64354. *!*          <xsl:when test="$theNumber = 12">C</xsl:when>
  64355. *!*          <xsl:when test="$theNumber = 13">D</xsl:when>
  64356. *!*          <xsl:when test="$theNumber = 14">E</xsl:when>
  64357. *!*          <xsl:when test="$theNumber = 15">F</xsl:when>
  64358. *!*        </xsl:choose>
  64359. *!*      </xsl:template>
  64360. *!*      <xsl:template name="getTextAlignment">text-align:<xsl:choose>
  64361. *!*          <xsl:when test="objtype=5"><!-- picture field empty for left (default), @I for centered and @J right -->
  64362. *!*            <xsl:choose>
  64363. *!*              <xsl:when test="string-length(picture) = 0">left;</xsl:when>
  64364. *!*              <xsl:when test="contains(picture,'@J')">right;</xsl:when>
  64365. *!*              <xsl:otherwise>center;</xsl:otherwise>
  64366. *!*            </xsl:choose>
  64367. *!*          </xsl:when>
  64368. *!*          <xsl:otherwise>
  64369. *!*            <xsl:choose>
  64370. *!*              <xsl:when test="offset=0">left;</xsl:when>
  64371. *!*              <xsl:when test="offset=1">right;</xsl:when>
  64372. *!*              <xsl:otherwise>center;</xsl:otherwise>
  64373. *!*            </xsl:choose>
  64374. *!*          </xsl:otherwise>
  64375. *!*        </xsl:choose>
  64376. *!*        <!-- don't include direction at all if you want context -->
  64377. *!*        <xsl:if test="mode < 4">direction:<xsl:choose>
  64378. *!*            <xsl:when test="mode > 1">rtl;</xsl:when>
  64379. *!*            <xsl:otherwise>ltr;</xsl:otherwise>
  64380. *!*          </xsl:choose>
  64381. *!*        </xsl:if>
  64382. *!*      </xsl:template>
  64383. *!*      <xsl:template name="ExternalStyleSheets">
  64384. *!*        <xsl:param name="thisReportNode" select="/Reports/VFP-Report[1]"/>
  64385. *!*        <xsl:param name="thisReportID" select="'this report'"/>
  64386. *!*       <xsl:if test="count($thisReportNode/Run/property[@id='css_sheet']) > 0">
  64387. *!*       <xsl:comment>
  64388. *!*       External stylesheet(s) for <xsl:value-of select="$thisReportID"/>
  64389. *!*       </xsl:comment>
  64390. *!*       <xsl:for-each select="$thisReportNode/Run/property[@id='css_sheet']">
  64391. *!*          <link type="text/css" href="{./text()}" rel="stylesheet"/>
  64392. *!*       </xsl:for-each>
  64393. *!*       </xsl:if>   
  64394. *!*      </xsl:template>
  64395. *!*      <xsl:template name="DocumentStyles">
  64396. *!*      <xsl:comment>Global document styles, if any</xsl:comment>
  64397. *!*        <style type="text/css">
  64398. *!*         <xsl:comment><xsl:if test="/Reports/VFP-Report[1]/VFP-RDL/VFPDataSet/VFPFRXLayoutObject[objtype=1 and (fontcharset=177 or fontcharset=178)]">
  64399. *!*         <xsl:if test="number($noBody)!=1">html{direction:rtl;} 
  64400. *!*         body{direction:rtl;}</xsl:if>
  64401. *!*         div{direction:rtl;} 
  64402. *!*         span{direction:rtl;}
  64403. *!*         </xsl:if>
  64404. *!*         </xsl:comment>
  64405. *!*        </style>
  64406. *!*      
  64407. *!*      </xsl:template>
  64408. *!*      <xsl:template name="Styles">
  64409. *!*        <xsl:param name="thisReport" select="1"/>
  64410. *!*        <xsl:param name="thisReportID"/>
  64411. *!*        <xsl:comment>
  64412. *!*        Styles for report # <xsl:value-of select="$thisReport"/>  in this run, 
  64413. *!*        <xsl:value-of select="$thisReportID"/>
  64414. *!*        </xsl:comment>
  64415. *!*        
  64416. *!*        <style type="text/css">
  64417. *!*        
  64418. *!*          <xsl:comment>
  64419. *!*        
  64420. *!*            <xsl:apply-templates select="./VFP-RDL/VFPDataSet/VFPFRXLayoutObject[objtype=6]" mode="linestyles">
  64421. *!*              <xsl:with-param name="thisReport" select="$thisReport"/>
  64422. *!*            </xsl:apply-templates>
  64423. *!*          
  64424. *!*          <xsl:for-each select="./VFP-RDL/VFPDataSet/VFPFRXLayoutObject[objtype=6]">
  64425. *!*            <xsl:variable name="frxrecno" select="frxrecno"/>
  64426. *!*            <xsl:if test="/Reports/VFP-Report[$thisReport]/Data/*/*[@id=$frxrecno]/@css">
  64427. *!*                  <xsl:apply-templates select="." mode="linestyles">
  64428. *!*                  <xsl:with-param name="thisReport" select="$thisReport"/>
  64429. *!*                     <xsl:with-param name="firstPass" select="0"/>
  64430. *!*                  </xsl:apply-templates>
  64431. *!*            </xsl:if>
  64432. *!*          </xsl:for-each>
  64433. *!*            
  64434. *!*            <xsl:apply-templates select="./VFP-RDL/VFPDataSet/VFPFRXLayoutObject[objtype=7]" mode="shapestyles">
  64435. *!*              <xsl:with-param name="thisReport" select="$thisReport"/>
  64436. *!*            </xsl:apply-templates>
  64437. *!*            <xsl:apply-templates select="./VFP-RDL/VFPDataSet/VFPFRXLayoutObject[objtype=7]" mode="shapestylesT">
  64438. *!*              <xsl:with-param name="thisReport" select="$thisReport"/>
  64439. *!*            </xsl:apply-templates>
  64440. *!*            <xsl:apply-templates select="./VFP-RDL/VFPDataSet/VFPFRXLayoutObject[objtype=7]" mode="shapestylesM">
  64441. *!*              <xsl:with-param name="thisReport" select="$thisReport"/>
  64442. *!*            </xsl:apply-templates>
  64443. *!*            <xsl:apply-templates select="./VFP-RDL/VFPDataSet/VFPFRXLayoutObject[objtype=7]" mode="shapestylesB">
  64444. *!*              <xsl:with-param name="thisReport" select="$thisReport"/>
  64445. *!*            </xsl:apply-templates>
  64446. *!*          <xsl:for-each select="./VFP-RDL/VFPDataSet/VFPFRXLayoutObject[objtype=7]">
  64447. *!*             <xsl:variable name="frxrecno" select="frxrecno"/>
  64448. *!*            <xsl:if test="/Reports/VFP-Report[$thisReport]/Data/*/*[@id=$frxrecno]/@css">
  64449. *!*                  <xsl:apply-templates select="." mode="shapestyles">
  64450. *!*                  <xsl:with-param name="thisReport" select="$thisReport"/>
  64451. *!*                     <xsl:with-param name="firstPass" select="0"/>
  64452. *!*                  </xsl:apply-templates>
  64453. *!*            </xsl:if>
  64454. *!*          </xsl:for-each>
  64455. *!*            <xsl:apply-templates select="./VFP-RDL/VFPDataSet/VFPFRXLayoutObject[contains('|5|8|',concat('|',./objtype,'|'))]" mode="textstyles">
  64456. *!*              <xsl:with-param name="thisReport" select="$thisReport"/>
  64457. *!*            </xsl:apply-templates>
  64458. *!*          <xsl:for-each select="./VFP-RDL/VFPDataSet/VFPFRXLayoutObject[contains('|5|8|',concat('|',./objtype,'|'))]">
  64459. *!*            <xsl:variable name="frxrecno" select="frxrecno"/>
  64460. *!*            <xsl:if test="/Reports/VFP-Report[$thisReport]/Data/*/*[@id=$frxrecno]/@css">
  64461. *!*                  <xsl:apply-templates select="." mode="textstyles">
  64462. *!*                  <xsl:with-param name="thisReport" select="$thisReport"/>
  64463. *!*                     <xsl:with-param name="firstPass" select="0"/>
  64464. *!*                  </xsl:apply-templates>
  64465. *!*            </xsl:if>
  64466. *!*          </xsl:for-each>
  64467. *!*            
  64468. *!*            <xsl:apply-templates select="./VFP-RDL/VFPDataSet/VFPFRXLayoutObject[objtype=17]" mode="imagestyles">
  64469. *!*              <xsl:with-param name="thisReport" select="$thisReport"/>
  64470. *!*            </xsl:apply-templates>
  64471. *!*          <xsl:for-each select="./VFP-RDL/VFPDataSet/VFPFRXLayoutObject[objtype=17]">
  64472. *!*            <xsl:variable name="frxrecno" select="frxrecno"/>
  64473. *!*            <xsl:if test="/Reports/VFP-Report[$thisReport]/Data/*/*[@id=$frxrecno]/@css">
  64474. *!*                  <xsl:apply-templates select="." mode="imagestyles">
  64475. *!*                  <xsl:with-param name="thisReport" select="$thisReport"/>
  64476. *!*                     <xsl:with-param name="firstPass" select="0"/>
  64477. *!*                  </xsl:apply-templates>
  64478. *!*            </xsl:if>
  64479. *!*          </xsl:for-each>
  64480. *!*        
  64481. *!*          </xsl:comment>
  64482. *!*        
  64483. *!*        </style>
  64484. *!*       <xsl:call-template name="ExternalStyleSheets">
  64485. *!*       <xsl:with-param name="thisReportNode" select="/Reports/VFP-Report[$thisReport]"/> 
  64486. *!*       <xsl:with-param name="thisReportID" select="$thisReportID"/>
  64487. *!*       </xsl:call-template>
  64488. *!*      </xsl:template>
  64489. *!*      <xsl:template name="replaceText">
  64490. *!*        <xsl:choose>
  64491. *!*          <xsl:when test="$useTextAreaForStretchingText=1">
  64492. *!*            <xsl:value-of select="."/>
  64493. *!*          </xsl:when>
  64494. *!*          <xsl:otherwise>
  64495. *!*            <xsl:call-template name="replaceWhiteSpace">
  64496. *!*              <xsl:with-param name="string" select="."/>
  64497. *!*            </xsl:call-template>
  64498. *!*          </xsl:otherwise>
  64499. *!*        </xsl:choose>
  64500. *!*      </xsl:template>
  64501. *!*      <xsl:template name="renderPicture">
  64502. *!*      <xsl:param name="thisReportID"/>
  64503. *!*      <xsl:param name="thisID"/>
  64504. *!*        <img>
  64505. *!*          <xsl:attribute name="alt"><xsl:choose><xsl:when test="@alt"><xsl:value-of select="@alt"/></xsl:when><xsl:otherwise><xsl:value-of select="key('Layout',concat($thisID, $thisReportID))/unpathedimg"/></xsl:otherwise></xsl:choose></xsl:attribute>
  64506. *!*          <xsl:variable name="srcImage">
  64507. *!*       <xsl:choose>
  64508. *!*              <xsl:when test="@img and $externalFileLocation">
  64509. *!*                <xsl:value-of select="translate(concat($externalFileLocation,@img),'\','/')"/>
  64510. *!*              </xsl:when>
  64511. *!*              <xsl:when test="@img and not(contains(./@img,':'))">
  64512. *!*                   <xsl:value-of select="translate(@img,'\','/')"/>
  64513. *!*              </xsl:when>
  64514. *!*              <xsl:when test="@img">
  64515. *!*                <xsl:value-of select="concat('file://',translate(@img,'\','/'))"/>
  64516. *!*              </xsl:when>
  64517. *!*              <xsl:when test="$copyImageFiles = '1'">
  64518. *!*                <xsl:value-of select="translate(concat($externalFileLocation,key('Layout',concat($thisID, $thisReportID))/unpathedimg),'\','/')"/>
  64519. *!*              </xsl:when>
  64520. *!*              <xsl:when test="string-length(./text()) > 0 and not(contains(./text(),':')) ">
  64521. *!*                <xsl:value-of select="translate(./text(),'\','/')"/>
  64522. *!*              </xsl:when>
  64523. *!*              <xsl:when test="string-length(./text()) > 0">
  64524. *!*                <xsl:value-of select="concat('file://',translate(./text(),'\','/'))"/>
  64525. *!*              </xsl:when>
  64526. *!*              <xsl:otherwise>
  64527. *!*                <xsl:value-of select="concat('file://',translate(key('Layout',concat($thisID, $thisReportID))/pathedimg,'\','/'))"/>
  64528. *!*              </xsl:otherwise>
  64529. *!*            </xsl:choose>
  64530. *!*          </xsl:variable>
  64531. *!*          <xsl:attribute name="src"><xsl:value-of select="$srcImage"/></xsl:attribute>
  64532. *!*          <xsl:attribute name="style"><xsl:variable name="imgGeneral" select="key('Layout',concat($thisID, $thisReportID))"/><xsl:choose><xsl:when test="$imgGeneral/general='0' "><!-- clip top, right, bottom, left -->
  64533. *!*     clip: rect(0in,<xsl:call-template name="setPrecision"><xsl:with-param name="theNumber" select="@w div $printDPI"/></xsl:call-template>in,<xsl:value-of select="@h div $printDPI"/>in,0in);
  64534. *!*     </xsl:when><xsl:when test="$imgGeneral/general='1'"><!-- scale and retain --><xsl:choose><xsl:when test="@h > @w">
  64535. *!*     width:100%;
  64536. *!*     </xsl:when><xsl:otherwise>
  64537. *!*     height:100%;
  64538. *!*     </xsl:otherwise></xsl:choose></xsl:when><xsl:otherwise><!-- stretch to fill frame -->
  64539. *!*     height: <xsl:call-template name="setPrecision"><xsl:with-param name="theNumber" select="@h div $printDPI"/></xsl:call-template>in;    
  64540. *!*    width: <xsl:call-template name="setPrecision"><xsl:with-param name="theNumber" select="@w div $printDPI"/></xsl:call-template>in;    
  64541. *!*     </xsl:otherwise></xsl:choose></xsl:attribute>
  64542. *!*        </img>
  64543. *!*      </xsl:template>
  64544. *!*      <xsl:template name="addClassAttribute">
  64545. *!*      <xsl:param name="item" select="."/>
  64546. *!*      <xsl:param name="default" select="''"/>
  64547. *!*      <xsl:attribute name="class"><xsl:choose>
  64548. *!*      <xsl:when test="string-length($item/@CSS) > 0">
  64549. *!*      <xsl:value-of select="$item/@CSS"/>
  64550. *!*      </xsl:when>
  64551. *!*      <xsl:when test="string-length($item/@css) = 0">
  64552. *!*      <xsl:value-of select="$default"/>
  64553. *!*      </xsl:when>
  64554. *!*      <xsl:otherwise>
  64555. *!*      <xsl:value-of select="$item/@css"/>
  64556. *!*      </xsl:otherwise>
  64557. *!*      </xsl:choose></xsl:attribute>
  64558. *!*      </xsl:template>
  64559. *!*      <xsl:template name="addTitleAttribute">
  64560. *!*        <xsl:param name="item" select="."/>
  64561. *!*        <xsl:if test="string-length($item/@title) > 0">
  64562. *!*          <xsl:attribute name="title"><xsl:value-of select="$item/@title"/></xsl:attribute>
  64563. *!*        </xsl:if>
  64564. *!*      </xsl:template>
  64565. *!*      <xsl:template name="addAnchor">
  64566. *!*        <xsl:param name="item" select="."/>
  64567. *!*        <xsl:if test="string-length($item/@anchor) > 0">
  64568. *!*          <a>
  64569. *!*         <xsl:attribute name="{$anchorAttr}"><xsl:value-of select="$item/@anchor"/></xsl:attribute> 
  64570. *!*            <xsl:text disable-output-escaping="yes">&nbsp;</xsl:text>
  64571. *!*          </a>
  64572. *!*        </xsl:if>
  64573. *!*      </xsl:template>
  64574. *!*      <xsl:template name="addStyleAttribute">
  64575. *!*        <xsl:param name="topOffset" select="0"/>
  64576. *!*        <xsl:param name="thisZ" select="1"/>
  64577. *!*        <xsl:param name="thisReportID"/>
  64578. *!*        <xsl:param name="thisID"/>
  64579. *!*        <xsl:param name="styleType" select="'Div'"/>
  64580. *!*    <!-- do NOT mess around with the white space in here, even though it 
  64581. *!*    looks ugly the way it is!! -->
  64582. *!*    <xsl:attribute name="style">z-Index:<xsl:value-of select="$thisZ"/>;left:<xsl:call-template name="setPrecision"><xsl:with-param name="theNumber" select="@l div $printDPI"/></xsl:call-template>in;
  64583. *!*    top:<xsl:choose>
  64584. *!*      <xsl:when test="styleType='TextArea'"><xsl:call-template name="setPrecision"><xsl:with-param name="theNumber" select="((@t  + $topOffset) div $printDPI) - .1"/></xsl:call-template></xsl:when>
  64585. *!*      <xsl:otherwise><xsl:call-template name="setPrecision"><xsl:with-param name="theNumber" select="(@t +$topOffset) div $printDPI"/></xsl:call-template></xsl:otherwise>
  64586. *!*    </xsl:choose>in;<xsl:choose>
  64587. *!*      <xsl:when test="$styleType='VR'">width:0in;</xsl:when>
  64588. *!*      <xsl:when test="$styleType='TextArea'">width:<xsl:call-template name="setPrecision"><xsl:with-param name="theNumber" select="@w div $printDPI"/></xsl:call-template>in;</xsl:when>
  64589. *!*    <xsl:when test="$styleType='Div'">width:<xsl:call-template name="setPrecision"><xsl:with-param name="theNumber" select="@w div $printDPI"/></xsl:call-template>in;height:<xsl:call-template name="setPrecision"><xsl:with-param name="theNumber" select="@h div $printDPI"/></xsl:call-template>in;</xsl:when></xsl:choose><xsl:if test="not($styleType='Div')">height:<xsl:call-template name="setPrecision"><xsl:with-param name="theNumber" select="@h div $printDPI"/></xsl:call-template>in;</xsl:if>
  64590. *!*    <xsl:if test="$useDynamicTextAttributes=1 and key('Layout',concat($thisID,$thisReportID))[objtype=5 or objtype=8]">
  64591. *!*    <xsl:call-template name="addDynamicTextStyleAttributes"/>
  64592. *!*    </xsl:if>
  64593. *!*    </xsl:attribute>
  64594. *!*        </xsl:template>
  64595. *!*        <xsl:template name="addDynamicTextStyleAttributes">
  64596. *!*      <!-- dynamic values for font, omit these attributes if they don't appear on each object-->
  64597. *!*      <xsl:if test="@FNAME">
  64598. *!*        font-family:'<xsl:value-of select="@FNAME"/>';font-size:<xsl:value-of select="@FSIZE"/>pt;
  64599. *!*        <xsl:if test="((@FSTYLE div 128) mod 2 = 1) or ( (@FSTYLE div 4) mod 2 = 1)">text-decoration:<xsl:if test="((@FSTYLE div 128) mod 2 = 1)">line-through</xsl:if><xsl:if test="( (@FSTYLE div 8) mod 2 = 1)">underline</xsl:if>;</xsl:if>
  64600. *!*        font-weight:<xsl:choose><xsl:when test="@FSTYLE mod 2 = 1">bold</xsl:when><xsl:otherwise>normal</xsl:otherwise></xsl:choose>;
  64601. *!*        font-style:<xsl:choose><xsl:when test="(@FSTYLE div 2) mod 2 =1">italic</xsl:when><xsl:otherwise>normal</xsl:otherwise></xsl:choose>;
  64602. *!*       background-color:<xsl:call-template name="getAlphaColor">
  64603. *!*       <xsl:with-param name="alpha" select="@FA"/>
  64604. *!*       <xsl:with-param name="r" select="@FR"/>
  64605. *!*       <xsl:with-param name="g" select="@FG"/>
  64606. *!*       <xsl:with-param name="b" select="@FB"/>
  64607. *!*       </xsl:call-template>;color:<xsl:call-template name="getAlphaColor"/>;
  64608. *!*        </xsl:if>
  64609. *!*        </xsl:template>
  64610. *!*       <xsl:template name="getAlphaColor">
  64611. *!*       <xsl:param name="alpha" select="@PA"/>
  64612. *!*       <xsl:param name="r" select="@PR"/>
  64613. *!*       <xsl:param name="g" select="@PG"/>
  64614. *!*       <xsl:param name="b" select="@PB"/>
  64615. *!*       <xsl:choose>
  64616. *!*       <xsl:when test="$alpha=0">transparent</xsl:when>
  64617. *!*       <xsl:when test="$alpha=255 or ($r+$g+$b > $fieldAlphaOpacityShade)"><xsl:value-of select="concat('rgb(',$r,',',$g,',',$b,')')"/></xsl:when>
  64618. *!*       <xsl:otherwise><xsl:value-of select="concat('rgb(',$r+$fieldAlphaOpacityOffset,',',$g+$fieldAlphaOpacityOffset,',',$b+$fieldAlphaOpacityOffset,')')"/></xsl:otherwise>
  64619. *!*       </xsl:choose>
  64620. *!*       </xsl:template>
  64621. *!*      
  64622. *!*        <xsl:template name="replaceWhiteSpace">
  64623. *!*        <xsl:param name="string" select="."/>
  64624. *!*        <xsl:choose>
  64625. *!*          <xsl:when test="contains($string,' ')">
  64626. *!*            <xsl:call-template name="replaceWhiteSpace">
  64627. *!*              <xsl:with-param name="string" select="substring-before($string, ' ')"/>
  64628. *!*            </xsl:call-template>
  64629. *!*            <br/>
  64630. *!*            <xsl:call-template name="replaceWhiteSpace">
  64631. *!*              <xsl:with-param name="string" select="substring-after($string, ' ')"/>
  64632. *!*            </xsl:call-template>
  64633. *!*          </xsl:when>
  64634. *!*          <xsl:otherwise>
  64635. *!*            <xsl:value-of select="$string"/>
  64636. *!*          </xsl:otherwise>
  64637. *!*        </xsl:choose>
  64638. *!*      </xsl:template>
  64639. *!*      <xsl:template name="Script">
  64640. *!*        <script language="JavaScript">
  64641. *!*          <xsl:comment>
  64642. *!*         //TBD
  64643. *!*          </xsl:comment>
  64644. *!*        </script>
  64645. *!*      </xsl:template>
  64646. *!*      <xsl:template match="*|@*" mode="debug">
  64647. *!*       <xsl:copy-of select="."/>
  64648. *!*      </xsl:template> 
  64649. *!*    </xsl:stylesheet>
  64650. *!*    ENDTEXT
  64651. *!*    SET TEXTMERGE OFF
  64652. *!*    SET TEXTMERGE TO
  64653. *!*    RETURN m.lcResult
  64654. ENDPROC
  64655. PROCEDURE cssclassattr_assign
  64656. LPARAMETERS m.vNewVal
  64657. IF (NOT THIS.IsRunning) AND THIS.VerifyNCName(m.vNewVal) ;
  64658.    AND NOT (m.vNewVal == THIS.cssClassAttr)
  64659.    THIS.cssClassAttr = m.vNewVal
  64660.    THIS.SynchXSLTProcessorUser()
  64661. ENDIF   
  64662. ENDPROC
  64663. PROCEDURE anchorattr_assign
  64664. LPARAMETERS m.vNewVal
  64665. IF (NOT THIS.IsRunning) AND THIS.VerifyNCName(m.vNewVal) ;
  64666.    AND NOT (m.vNewVal == THIS.anchorAttr)
  64667.    THIS.anchorAttr = m.vNewVal
  64668.    THIS.SynchXSLTProcessorUser()
  64669. ENDIF   
  64670. ENDPROC
  64671. PROCEDURE titleattr_assign
  64672. LPARAMETERS m.vNewVal
  64673. IF (NOT THIS.IsRunning) AND THIS.VerifyNCName(m.vNewVal) ;
  64674.    AND NOT (m.vNewVal == THIS.titleAttr )
  64675.    THIS.titleAttr  = m.vNewVal
  64676.    THIS.SynchXSLTProcessorUser()
  64677. ENDIF   
  64678. ENDPROC
  64679. PROCEDURE linkattr_assign
  64680. LPARAMETERS m.vNewVal
  64681. IF (NOT THIS.IsRunning) AND THIS.VerifyNCName(m.vNewVal) ;
  64682.    AND NOT (m.vNewVal == THIS.linkAttr)
  64683.    THIS.linkAttr = m.vNewVal
  64684.    THIS.SynchXSLTProcessorUser()
  64685. ENDIF   
  64686. ENDPROC
  64687. PROCEDURE cssclassoverrideattr_assign
  64688. LPARAMETERS m.vNewVal
  64689. IF (NOT THIS.IsRunning) AND THIS.VerifyNCName(m.vNewVal) ;
  64690.    AND NOT (m.vNewVal == THIS.cssClassOverrideAttr)
  64691.    THIS.cssClassOverrideAttr = m.vNewVal
  64692.    THIS.SynchXSLTProcessorUser()
  64693. ENDIF   
  64694. ENDPROC
  64695. PROCEDURE urlstringencode
  64696. LPARAMETER m.tcValue, m.tlEncodeURLControlChars, m.tlEncodeSpace
  64697. * Thanks to Rick Strahl and West Wind for help and advice!
  64698. IF VARTYPE(m.tcValue) # "C" 
  64699.    RETURN ""
  64700. ENDIF   
  64701. LOCAL m.lcResult, m.lcChar, m.ii, m.lcOKChars
  64702. m.lcResult=""
  64703. m.lcOKChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
  64704. IF NOT m.tlEncodeURLControlChars
  64705.    * by default, we also exempt chars that might
  64706.    * indicate an anchor or a query string element
  64707.    m.lcOKChars = m.lcOKChars + ".?=&#"
  64708. ENDIF
  64709. FOR m.ii=1 TO LEN(m.tcValue)
  64710.    m.lcChar = SUBSTR(m.tcValue,m.ii,1)
  64711.    IF ATC(m.lcChar,m.lcOKChars) > 0
  64712.       m.lcResult=m.lcResult + m.lcChar
  64713.       LOOP
  64714.    ENDIF
  64715.    IF m.lcChar=" " AND NOT m.tlEncodeSpace
  64716.       m.lcResult = m.lcResult + "+"
  64717.       LOOP
  64718.    ENDIF
  64719.    m.lcResult = m.lcResult + "%" + RIGHT(TRANSFORM(ASC(m.lcChar),"@0"),2)
  64720. ENDFOR 
  64721. RETURN m.lcResult
  64722. ENDPROC
  64723. PROCEDURE pathencode
  64724. LPARAMETERS m.tcVal, m.tlXMLEncode
  64725. LOCAL m.lcVal, m.lcTempVal, m.laVals[1], m.liIndex, m.liSeparators
  64726. m.lcVal = ALLTRIM(CHRTRAN(m.tcVal,"\","/"))
  64727. * default XSLT would take care of the above anyway, but 
  64728. * no harm in doing it here
  64729. DO CASE
  64730. CASE LEN(m.lcVal) = 0
  64731.    * nothing
  64732. CASE AT("/",m.lcVal) > 0
  64733.    m.lcTempVal = ""
  64734.    m.liSeparators = ALINES(m.laVals,m.lcVal,0,"/")
  64735.    FOR m.liIndex = 1 TO m.liSeparators
  64736.       IF ":" $ m.laVals[m.liIndex]
  64737.          m.lcTempVal = m.lcTempVal + m.laVals[m.liIndex]
  64738.       ELSE   
  64739.          m.lcTempVal = m.lcTempVal + ;
  64740.                        THIS.urlStringEncode(m.laVals[m.liIndex])
  64741.       ENDIF                 
  64742.       IF m.liIndex < m.liSeparators
  64743.          m.lcTempVal = m.lcTempVal + "/"  
  64744.       ENDIF
  64745.    ENDFOR
  64746.    IF RIGHT(m.lcVal,1) = "/"
  64747.       m.lcTempVal = m.lcTempVal + "/"  
  64748.    ENDIF
  64749.    m.lcVal = m.lcTempVal
  64750. OTHERWISE
  64751.    m.lcVal = THIS.urlStringEncode(m.lcVal)
  64752. ENDCASE
  64753. #IF OUTPUTXML = OUTPUTXML_RAW
  64754.    IF m.tlXMLEncode
  64755.       * the result is going to an XML document
  64756.       m.lcVal = THIS.xmlRawConv(m.lcVal) 
  64757.    ENDIF   
  64758. #ENDIF   
  64759. RETURN m.lcVal
  64760. ENDPROC
  64761. PROCEDURE updateproperties
  64762. IF NOT This.lObjTypeMode OR (VARTYPE(_Screen.oFoxyPreviewer) <> "O")
  64763.     RETURN
  64764. ENDIF 
  64765. LOCAL loFP
  64766. loFP = _Screen.oFoxyPreviewer
  64767. IF VARTYPE(This.CommandClauses) = "O"
  64768.     *!*    IF This.CommandClauses.Preview
  64769.     *!*        This.lOpenViewer = .T.
  64770.     *!*    ELSE 
  64771.     *!*        This.lOpenViewer = NVL(loFP.lOpenViewer, .T.)
  64772.     *!*    ENDIF
  64773.     This.lOpenViewer = This.CommandClauses.Preview
  64774.     IF NOT EMPTY(This.CommandClauses.ToFile)
  64775.         This.TargetFileName = This.CommandClauses.ToFile
  64776.     ELSE 
  64777.         IF VARTYPE(_Screen.oFoxyPreviewer) = "O" AND ;
  64778.                 NOT EMPTY(_Screen.oFoxyPreviewer.cDestFile) AND ;
  64779.                 EMPTY(This.TargetFileName)
  64780.             LOCAL lcDestFile
  64781.             lcDestFile = _Screen.oFoxyPreviewer.cDestFile
  64782.             IF NOT "\" $ lcDestFile
  64783.                 lcDestFile = ALLTRIM(ADDBS(_Screen.oFoxyPreviewer.cOutputPath) + lcDestFile)
  64784.             ENDIF
  64785.             This.TargetFileName = lcDestFile
  64786.         ELSE
  64787.             LOCAL lcFile
  64788.             lcFile = This.TargetFileName
  64789.             IF EMPTY(lcFile)
  64790.                 lcFile = PUTFILE("","","htm")
  64791.             ENDIF
  64792.             IF EMPTY(lcFile)
  64793.                 _ReportListener::CancelReport()
  64794.                 * This.CancelReport()
  64795.                 RETURN .F.
  64796.             ENDIF
  64797.             This.TargetFileName = lcFile
  64798.         ENDIF
  64799.     ENDIF 
  64800. ENDIF
  64801. This.QUIETMODE        = NVL(loFP.lQuietMode         , .F.)
  64802. IF VARTYPE(This.CommandClauses) = "O"
  64803.     IF This.CommandClauses.Preview
  64804.         This.lOpenViewer = .T.
  64805.     ENDIF 
  64806.     IF NOT EMPTY(This.CommandClauses.ToFile)
  64807.         This.TargetFileName = This.CommandClauses.ToFile
  64808.     ENDIF 
  64809. ENDIF
  64810. ENDPROC
  64811. PROCEDURE fillruncollector
  64812. DODEFAULT()
  64813. IF NOT ISNULL(THIS.runCollector)
  64814.    * should have been taken care of by superclass
  64815.    THIS.setFRXDataSession()
  64816.    IF USED(THIS.memberDataAlias) 
  64817.       LOCAL m.lvValue, m.lcExpr, m.liSelect, m.loXML, m.loXMLTemp, m.loNode
  64818.       IF USED("FRX") 
  64819.          GO (THIS.frxHeaderRecno) IN FRX
  64820.          #IF OUTPUTXML = OUTPUTXML_DOM
  64821.             m.loXML = CREATEOBJECT(OUTPUTXML_DOMFREETHREADED_DOCUMENTOBJECT)
  64822.             m.loXMLTemp = CREATEOBJECT(OUTPUTXML_DOMFREETHREADED_DOCUMENTOBJECT)
  64823.          #ELSE
  64824.             m.loXML = CREATEOBJECT("Microsoft.XMLDOM")
  64825.             m.loXMLTemp = CREATEOBJECT("Microsoft.XMLDOM")
  64826.          #ENDIF      
  64827.          IF NOT m.loXML.LoadXML(FRX.Style)
  64828.             m.loXML = NULL
  64829.          ENDIF
  64830.       ENDIF      
  64831.       IF NOT ISNULL(m.loXML)
  64832.          m.liSelect = SELECT(0)
  64833.          SELECT (THIS.memberDataAlias)
  64834.          LOCATE FOR FRXRecno = THIS.frxHeaderRecno AND ;
  64835.                  Type = FRX_BLDR_MEMBERDATATYPE  ;
  64836.                  AND Name == FRX_BLDR_NAMESPACE_ADVANCEDPROPS ;
  64837.                  AND ExecWhen == FRX_BLDR_ADVPROP_HTML_HTTPEQUIV ;
  64838.                  AND VAL(DeClass) = ADVPROP_EDITMODE_TEXT ;
  64839.                  AND NOT EMPTY(Execute)
  64840.          IF FOUND()                 
  64841.             m.lvValue = ;
  64842.                       m.loXML.SelectSingleNode("/VFPData/reportdata" + ;
  64843.                       "[@name='" + Name + "' and @execwhen='" + ;
  64844.                       FRX_BLDR_ADVPROP_HTML_HTTPEQUIV + "']/@execute")
  64845.             IF (NOT ISNULL(m.lvValue)) AND ;
  64846.                  m.loXMLTemp.LoadXML(m.lvValue.Text)
  64847.                  m.loXML = m.loXMLTemp.SelectNodes("//meta")
  64848.                  FOR EACH m.loNode IN m.loXML
  64849.                     m.lcExpr = m.loNode.getAttribute("name")
  64850.                     m.lvValue = m.loNode.getAttribute("content")
  64851.                     IF NOT (ISNULL(m.lcExpr) OR ISNULL(m.lvValue) OR ;
  64852.                            EMPTY(m.lcExpr) OR EMPTY(m.lvValue))
  64853.                        IF VAL(m.loNode.getAttribute("type")) = ADVPROP_EDITMODE_GETEXPR
  64854.                           m.lvValue = THIS.evaluateUserExpression(m.lvValue)
  64855.                        ENDIF
  64856.                       IF THIS.runCollector.getKey(FRX_BLDR_ADVPROP_HTML_HTTPEQUIV+"." + m.lcExpr) = 0
  64857.                          THIS.runCollector.add(m.lvValue,FRX_BLDR_ADVPROP_HTML_HTTPEQUIV+"." + m.lcExpr)
  64858.                       ENDIF   
  64859.                    ENDIF  
  64860.                 NEXT
  64861.             ENDIF                      
  64862.          ENDIF
  64863.          STORE NULL  TO m.loXML, m.loXMLTemp, m.loNode
  64864.          SELECT (liSelect)         
  64865.       ENDIF        
  64866.    ENDIF      
  64867. ENDIF
  64868. ENDPROC
  64869. PROCEDURE getrawformattinginfo
  64870. LPARAMETERS m.tnLeft, m.tnTop, m.tnWidth, m.tnHeight, m.tnObjectContinuationType
  64871. LOCAL m.lcInfo, m.lcVal, m.liRecno
  64872. m.lcInfo = DODEFAULT(m.tnLeft, m.tnTop, m.tnWidth, m.tnHeight, m.tnObjectContinuationType)
  64873. THIS.setFRXDataSession()
  64874. m.liRecno = RECNO("FRX")
  64875. IF USED(THIS.MemberDataAlias) AND ;
  64876.    SEEK(m.liRecno,THIS.MemberDataAlias,"FRXRecno")          
  64877.    SELECT (THIS.MemberDataAlias)
  64878.    m.lcVal = ""
  64879.    LOCATE FOR FRXRecno = m.liRecno AND ;
  64880.           Type = FRX_BLDR_MEMBERDATATYPE  AND  ;
  64881.           Name = FRX_BLDR_NAMESPACE_ADVANCEDPROPS AND ;
  64882.           ExecWhen =  FRX_BLDR_ADVPROP_HTML_CSS_CLASSOVERRIDE
  64883.    IF FOUND()
  64884.       IF VAL(DeClass) = ADVPROP_EDITMODE_GETEXPR 
  64885.          m.lcVal = TRANSFORM(THIS.evaluateUserExpression(Execute))
  64886.       ELSE
  64887.          m.lcVal = Execute
  64888.       ENDIF         
  64889.    ENDIF      
  64890.    SELECT (THIS.MemberDataAlias)         
  64891.    IF NOT EMPTY(m.lcVal)
  64892.       m.lcInfo = m.lcInfo + " "+THIS.cssClassOverrideAttr+"='"+m.lcVal+"'"      
  64893.    ELSE
  64894.       * try again with other css class attribute
  64895.       LOCATE FOR FRXRecno = m.liRecno AND ;
  64896.              Type = FRX_BLDR_MEMBERDATATYPE  AND  ;
  64897.              Name = FRX_BLDR_NAMESPACE_ADVANCEDPROPS AND ;
  64898.              ExecWhen =  FRX_BLDR_ADVPROP_HTML_CSS_CLASSEXTEND
  64899.       IF FOUND()
  64900.          IF VAL(DeClass) = ADVPROP_EDITMODE_GETEXPR 
  64901.             m.lcVal = TRANSFORM(THIS.evaluateUserExpression(Execute))
  64902.          ELSE
  64903.             m.lcVal = Execute
  64904.          ENDIF         
  64905.       ENDIF
  64906.       IF NOT EMPTY(m.lcVal)
  64907.          m.lcInfo = m.lcInfo + " "+THIS.cssClassAttr+"='"+m.lcVal+"'"            
  64908.       ENDIF   
  64909.    ENDIF
  64910.    SELECT (THIS.MemberDataAlias)         
  64911.    m.lcVal = ""
  64912.    LOCATE FOR FRXRecno = m.liRecno AND ;
  64913.           Type = FRX_BLDR_MEMBERDATATYPE  AND  ;
  64914.           Name = FRX_BLDR_NAMESPACE_ADVANCEDPROPS AND ;
  64915.           ExecWhen =  FRX_BLDR_ADVPROP_HTML_ITEMHREF
  64916.    IF FOUND()
  64917.       IF VAL(DeClass) = ADVPROP_EDITMODE_GETEXPR 
  64918.          m.lcVal = TRANSFORM(THIS.evaluateUserExpression(Execute))
  64919.       ELSE
  64920.          m.lcVal = Execute
  64921.       ENDIF         
  64922.    ENDIF      
  64923.    IF NOT EMPTY(m.lcVal)
  64924.       m.lcInfo = m.lcInfo + " "+ ;
  64925.         THIS.linkAttr +"='"+ ;
  64926.         THIS.pathEncode(m.lcVal, .T.)+"'"      
  64927.    ENDIF
  64928.    SELECT (THIS.MemberDataAlias)         
  64929.    m.lcVal = ""
  64930.    LOCATE FOR FRXRecno = m.liRecno AND ;
  64931.           Type = FRX_BLDR_MEMBERDATATYPE  AND  ;
  64932.           Name = FRX_BLDR_NAMESPACE_ADVANCEDPROPS AND ;
  64933.           ExecWhen =  FRX_BLDR_ADVPROP_HTML_ITEMTITLE
  64934.    IF FOUND()
  64935.       IF VAL(DeClass) = ADVPROP_EDITMODE_GETEXPR 
  64936.          m.lcVal = TRANSFORM(THIS.evaluateUserExpression(Execute))
  64937.       ELSE
  64938.          m.lcVal = Execute
  64939.       ENDIF         
  64940.    ENDIF      
  64941.    IF NOT EMPTY(m.lcVal)
  64942.       m.lcInfo = m.lcInfo + " "+THIS.titleAttr +"='"+m.lcVal+"'"      
  64943.    ENDIF
  64944.    SELECT (THIS.MemberDataAlias)         
  64945.    m.lcVal = ""
  64946.    LOCATE FOR FRXRecno = m.liRecno AND ;
  64947.           Type = FRX_BLDR_MEMBERDATATYPE  AND  ;
  64948.           Name = FRX_BLDR_NAMESPACE_ADVANCEDPROPS AND ;
  64949.           ExecWhen =  FRX_BLDR_ADVPROP_HTML_ITEMANCHOR       
  64950.    IF FOUND()
  64951.       IF VAL(DeClass) = ADVPROP_EDITMODE_GETEXPR 
  64952.          m.lcVal = TRANSFORM(THIS.evaluateUserExpression(Execute))
  64953.       ELSE
  64954.          m.lcVal = Execute
  64955.       ENDIF         
  64956.    ENDIF      
  64957.    IF NOT EMPTY(m.lcVal)
  64958.       m.lcInfo = m.lcInfo + " "+ ;
  64959.                  THIS.anchorAttr +"='"+ ;
  64960.                  THIS.pathEncode(m.lcVal, .T.)+"'"
  64961.    ENDIF
  64962.    SELECT FRX
  64963. ENDIF
  64964. RETURN m.lcInfo
  64965. ENDPROC
  64966. PROCEDURE getdefaultuserxslt
  64967. LOCAL m.lcResult
  64968. m.lcResult = THIS.getDefaultUserXSLTAsString()
  64969. * document properties, general
  64970. m.lcResult = STRTRAN(m.lcResult,"@id='description'","@id='"+FRX_BLDR_ADVPROP_DESCRIPTION+"'")
  64971. m.lcResult = STRTRAN(m.lcResult,"@id='author'","@id='"+FRX_BLDR_ADVPROP_AUTHOR+"'")
  64972. m.lcResult = STRTRAN(m.lcResult,"@id='keywords'","@id='"+FRX_BLDR_ADVPROP_KEYWORDS+"'")
  64973. m.lcResult = STRTRAN(m.lcResult,"@id='title'","@id='"+FRX_BLDR_ADVPROP_TITLE+"'")
  64974. m.lcResult = STRTRAN(m.lcResult,"@id='copyright'","@id='"+FRX_BLDR_ADVPROP_COPYRIGHT+"'")
  64975. m.lcResult = STRTRAN(m.lcResult,"@id='date'","@id='"+FRX_BLDR_ADVPROP_DATE+"'")
  64976. * document properties, HTML-specific
  64977. m.lcResult = STRTRAN(m.lcResult,"@id='css_sheet'","@id='"+FRX_BLDR_ADVPROP_HTML_CSS_FILE +"'")
  64978. m.lcResult = STRTRAN(m.lcResult,"@id='http-equiv'","@id='"+FRX_BLDR_ADVPROP_HTML_HTTPEQUIV  +"'")
  64979. * base VFP-RDL XML characteristics set
  64980. m.lcResult = STRTRAN(m.lcResult,"@h","@"+ THIS.HeightAttr)
  64981. m.lcResult = STRTRAN(m.lcResult,"@w","@"+ THIS.WidthAttr)
  64982. m.lcResult = STRTRAN(m.lcResult,"@l","@"+ THIS.LeftAttr)
  64983. m.lcResult = STRTRAN(m.lcResult,"@t","@"+ THIS.TopAttr)
  64984. m.lcResult = STRTRAN(m.lcResult,"@c","@"+ THIS.ContAttr)
  64985. m.lcResult = STRTRAN(m.lcResult,"@idref","@"+ THIS.IdRefAttribute)
  64986. m.lcResult = STRTRAN(m.lcResult,"@id","@"+THIS.IdAttribute)
  64987. m.lcResult = STRTRAN(m.lcResult,"@img","@"+THIS.imageSrcAttr )
  64988. * dynamic data and page-image extension set implemented in XMLListener
  64989. m.lcResult = STRTRAN(m.lcResult,"@DTEXT","@"+THIS.dataTextAttr  )
  64990. m.lcResult = STRTRAN(m.lcResult,"@DTYPE","@"+THIS.dataTypeAttr  )
  64991. m.lcResult = STRTRAN(m.lcResult,"@PLINK","@"+THIS.pageImageAttr  )
  64992. * dynamic formatting extension set implemented in XMLDisplayListener
  64993. m.lcResult = STRTRAN(m.lcResult,"@PA","@"+THIS.penAlphaAttr  )
  64994. m.lcResult = STRTRAN(m.lcResult,"@PR","@"+THIS.penRedAttr  )
  64995. m.lcResult = STRTRAN(m.lcResult,"@PG","@"+THIS.penGreenAttr  )
  64996. m.lcResult = STRTRAN(m.lcResult,"@PB","@"+THIS.penBlueAttr  )
  64997. m.lcResult = STRTRAN(m.lcResult,"@FA","@"+THIS.fillAlphaAttr  )
  64998. m.lcResult = STRTRAN(m.lcResult,"@FR","@"+THIS.fillRedAttr  )
  64999. m.lcResult = STRTRAN(m.lcResult,"@FG","@"+THIS.fillGreenAttr  )
  65000. m.lcResult = STRTRAN(m.lcResult,"@FB","@"+THIS.fillBlueAttr  )
  65001. m.lcResult = STRTRAN(m.lcResult,"@FNAME","@"+THIS.fontNameAttr  )
  65002. m.lcResult = STRTRAN(m.lcResult,"@FSIZE","@"+THIS.fontSizeAttr  )
  65003. m.lcResult = STRTRAN(m.lcResult,"@FSTYLE","@"+THIS.fontStyleAttr  )
  65004. * dynamic HTML extension set implemented in this class
  65005. m.lcResult = STRTRAN(m.lcResult,"@title","@"+THIS.titleAttr )
  65006. m.lcResult = STRTRAN(m.lcResult,"@alt","@"+THIS.titleAttr )
  65007. m.lcResult = STRTRAN(m.lcResult,"@css","@"+THIS.cssClassAttr )
  65008. m.lcResult = STRTRAN(m.lcResult,"@CSS","@"+THIS.cssClassOverrideAttr )
  65009. m.lcResult = STRTRAN(m.lcResult,"@anchor","@"+THIS.anchorAttr )
  65010. m.lcResult = STRTRAN(m.lcResult,"@hlink","@"+THIS.linkAttr )
  65011. THIS.XSLTProcessorUser = m.lcResult
  65012. ENDPROC
  65013. PROCEDURE Init
  65014. IF DODEFAULT()
  65015.    THIS.AppName = OUTPUTHTML_APPNAME_LOC
  65016.    RETURN .F.   
  65017. ENDIF
  65018. RETURN NOT THIS.HadError
  65019. ENDPROC
  65020. PROCEDURE setdomformattinginfo
  65021. LPARAMETERS m.toNode, m.tnLeft, m.tnTop, m.tnWidth, m.tnHeight, m.tnObjectContinuationType
  65022. LOCAL  m.lcVal, m.liRecno
  65023. DODEFAULT( m.toNode, m.tnLeft, m.tnTop, m.tnWidth,m.tnHeight, m.tnObjectContinuationType)
  65024. THIS.setFRXDataSession()
  65025. m.liRecno = RECNO("FRX")
  65026. IF USED(THIS.MemberDataAlias) AND ;
  65027.    SEEK(m.liRecno,THIS.MemberDataAlias,"FRXRecno")          
  65028.    SELECT (THIS.MemberDataAlias)
  65029.    m.lcVal = ""
  65030.    LOCATE FOR FRXRecno = m.liRecno AND ;
  65031.           Type = FRX_BLDR_MEMBERDATATYPE  AND  ;
  65032.           Name = FRX_BLDR_NAMESPACE_ADVANCEDPROPS AND ;
  65033.           ExecWhen =  FRX_BLDR_ADVPROP_HTML_CSS_CLASSOVERRIDE
  65034.    IF FOUND()
  65035.       IF VAL(DeClass) = ADVPROP_EDITMODE_GETEXPR 
  65036.          m.lcVal = TRANSFORM(THIS.evaluateUserExpression(Execute))
  65037.       ELSE
  65038.          m.lcVal = Execute
  65039.       ENDIF         
  65040.    ENDIF      
  65041.    SELECT (THIS.MemberDataAlias)         
  65042.    IF NOT EMPTY(m.lcVal)
  65043.       m.toNode.SetAttribute(THIS.cssClassOverrideAttr,m.lcVal )                  
  65044.    ELSE
  65045.       * try again with other css class attribute
  65046.       LOCATE FOR FRXRecno = m.liRecno AND ;
  65047.              Type = FRX_BLDR_MEMBERDATATYPE  AND  ;
  65048.              Name = FRX_BLDR_NAMESPACE_ADVANCEDPROPS AND ;
  65049.              ExecWhen =  FRX_BLDR_ADVPROP_HTML_CSS_CLASSEXTEND
  65050.       IF FOUND()
  65051.          IF VAL(DeClass) = ADVPROP_EDITMODE_GETEXPR 
  65052.             m.lcVal = TRANSFORM(THIS.evaluateUserExpression(Execute))
  65053.          ELSE
  65054.             m.lcVal = Execute
  65055.          ENDIF         
  65056.       ENDIF
  65057.       IF NOT EMPTY(m.lcVal)
  65058.          m.toNode.SetAttribute(THIS.cssClassAttr,m.lcVal )                  
  65059.       ENDIF   
  65060.    ENDIF
  65061.    SELECT (THIS.MemberDataAlias)         
  65062.    m.lcVal = ""
  65063.    LOCATE FOR FRXRecno = m.liRecno AND ;
  65064.           Type = FRX_BLDR_MEMBERDATATYPE  AND  ;
  65065.           Name = FRX_BLDR_NAMESPACE_ADVANCEDPROPS AND ;
  65066.           ExecWhen =  FRX_BLDR_ADVPROP_HTML_ITEMHREF
  65067.    IF FOUND()
  65068.       IF VAL(DeClass) = ADVPROP_EDITMODE_GETEXPR 
  65069.          m.lcVal = TRANSFORM(THIS.evaluateUserExpression(Execute))
  65070.       ELSE
  65071.          m.lcVal = Execute
  65072.       ENDIF         
  65073.    ENDIF      
  65074.    IF NOT EMPTY(m.lcVal)
  65075.       m.toNode.SetAttribute(THIS.linkAttr,THIS.pathEncode(m.lcVal))
  65076.    ENDIF
  65077.    SELECT (THIS.MemberDataAlias)         
  65078.    m.lcVal = ""
  65079.    LOCATE FOR FRXRecno = m.liRecno AND ;
  65080.           Type = FRX_BLDR_MEMBERDATATYPE  AND  ;
  65081.           Name = FRX_BLDR_NAMESPACE_ADVANCEDPROPS AND ;
  65082.           ExecWhen =  FRX_BLDR_ADVPROP_HTML_ITEMTITLE
  65083.    IF FOUND()
  65084.       IF VAL(DeClass) = ADVPROP_EDITMODE_GETEXPR 
  65085.          m.lcVal = TRANSFORM(THIS.evaluateUserExpression(Execute))
  65086.       ELSE
  65087.          m.lcVal = Execute
  65088.       ENDIF         
  65089.    ENDIF      
  65090.    IF NOT EMPTY(m.lcVal)
  65091.       m.toNode.SetAttribute(THIS.titleAttr,m.lcVal )                  
  65092.    ENDIF
  65093.    SELECT (THIS.MemberDataAlias)         
  65094.    m.lcVal = ""
  65095.    LOCATE FOR FRXRecno = m.liRecno AND ;
  65096.           Type = FRX_BLDR_MEMBERDATATYPE  AND  ;
  65097.           Name = FRX_BLDR_NAMESPACE_ADVANCEDPROPS AND ;
  65098.           ExecWhen =  FRX_BLDR_ADVPROP_HTML_ITEMANCHOR       
  65099.    IF FOUND()
  65100.       IF VAL(DeClass) = ADVPROP_EDITMODE_GETEXPR 
  65101.          m.lcVal = TRANSFORM(THIS.evaluateUserExpression(Execute))
  65102.       ELSE
  65103.          m.lcVal = Execute
  65104.       ENDIF         
  65105.    ENDIF      
  65106.    IF NOT EMPTY(m.lcVal)
  65107.       m.toNode.SetAttribute(THIS.anchorAttr,THIS.pathEncode(m.lcVal) )                  
  65108.    ENDIF
  65109.    SELECT FRX
  65110. ENDIF
  65111. ENDPROC
  65112. PROCEDURE BeforeReport
  65113. DODEFAULT()
  65114. THIS.oldPageImageType = -1
  65115. IF THIS.XMLMode # OUTPUTXML_RDL_ONLY
  65116.    LOCAL llSetting, liSelect
  65117.    THIS.setFRXDataSession()
  65118.    IF USED(THIS.memberDataAlias)
  65119.       m.liSelect = SELECT(0)
  65120.       SELECT (THIS.memberDataAlias)
  65121.       LOCATE FOR Type == FRX_BLDR_MEMBERDATATYPE AND ;
  65122.                  Name == FRX_BLDR_NAMESPACE_ADVANCEDPROPS AND ;
  65123.                  ExecWhen == FRX_BLDR_ADVPROP_HTML_PAGEIMAGEHREF AND ;
  65124.                  THIS.evaluateStringToBoolean(Execute)         
  65125.       IF FOUND() AND THIS.pageImageType = 0
  65126.          THIS.oldPageImageType = 0
  65127.          THIS.pageImageType =  OUTPUTHTML_DEFAULT_PAGEIMAGE_TYPE
  65128.          IF THIS.ListenerType = LISTENER_TYPE_DEF
  65129.             THIS.ListenerType = LISTENER_TYPE_PAGED
  65130.          ENDIF
  65131.          IF THIS.supportsPageImages()  
  65132.             THIS.makeExternalFileLocationReachable() 
  65133.          ELSE
  65134.             IF NOT THIS.IsSuccessor
  65135.                THIS.pageImageType =  0      
  65136.             ENDIF
  65137.          ENDIF   
  65138.       ENDIF
  65139.       IF NOT THIS.CommandClauses.NoPageEject
  65140.          * we can only make this adjustment once per chain, 
  65141.          * since it can only be applied once per chain.
  65142.          * Last one wins.
  65143.          LOCATE FOR Type == FRX_BLDR_MEMBERDATATYPE AND ;
  65144.                     Name == FRX_BLDR_NAMESPACE_ADVANCEDPROPS AND ;
  65145.                     ExecWhen == FRX_BLDR_ADVPROP_HTML_TEXTAREAS_OFF 
  65146.          IF FOUND()
  65147.             llSetting = THIS.evaluateStringToBoolean(Execute)         
  65148.             IF VARTYPE(THIS.xsltParameters) = "O" AND ;
  65149.                THIS.xsltParameters.GetKey("useTextAreaForStretchingText") > 0
  65150.                THIS.oldTextAreaSetting = THIS.xsltParameters["useTextAreaForStretchingText"]
  65151.             ELSE
  65152.                THIS.oldTextAreaSetting = 1               
  65153.             ENDIF   
  65154.             THIS.adjustXSLTParameter( ;
  65155.                  IIF(llSetting,0,1),"useTextAreaForStretchingText")                     
  65156.          ENDIF                    
  65157.       ENDIF         
  65158.    ENDIF
  65159. ENDIF   
  65160. THIS.resetDataSession()
  65161. ENDPROC
  65162. PROCEDURE AfterReport
  65163. LPARAMETERS tlCalledEarly
  65164. DODEFAULT(tlCalledEarly)
  65165. IF THIS.oldPageImageType <> -1
  65166.    THIS.pageImageType = THIS.oldPageImageType 
  65167. ENDIF
  65168. THIS.resetDataSession()
  65169. * by CChalom
  65170. IF This.lObjTypeMode
  65171.     LOCAL llSaved
  65172.     llSaved = FILE(This.targetFileName)
  65173.     IF llSaved
  65174.         _Screen.oFoxyPreviewer.lSaved = llSaved
  65175.         IF This.lOpenViewer 
  65176.             This.ShellExec(This.TargetFileName)
  65177.         ENDIF 
  65178.     ENDIF 
  65179. ENDIF
  65180. ENDPROC
  65181. PROCEDURE applyusertransformtooutput
  65182. DODEFAULT()
  65183. IF THIS.oldTextAreaSetting <> -1
  65184.    THIS.adjustXSLTParameter( THIS.oldTextAreaSetting,"useTextAreaForStretchingText")                     
  65185.    THIS.oldTextAreaSetting = -1
  65186. ENDIF
  65187. ENDPROC
  65188. PROCEDURE LoadReport
  65189. This.UpdateProperties()
  65190. DODEFAULT()
  65191. ENDPROC
  65192. jrPROCEDURE storefrxdata
  65193. LPARAMETERS m.tnFRXRecno, m.tnLeft, m.tnTop, m.tnWidth, m.tnHeight,  m.tnObjectContinuationType, m.tcContentsToBeRendered, m.tiGDIPlusImage
  65194. IF This.TwoPassProcess AND This.CurrentPass = 0 && Code to detect if report will run twice because of use of _PAGETOTAL
  65195.     RETURN
  65196. ENDIF
  65197. * As each object is rendered, add a record to the cursor.
  65198. LOCAL lcContents, lnRec, lnSelect, lnSession, llDynamics
  65199. m.lnSelect     = SELECT()
  65200. m.lnSession     = SET("Datasession")
  65201. m.llDynamics = .F.
  65202. DO WHILE .T.
  65203.     WITH This
  65204.         m.lcContents = STRCONV(m.tcContentsToBeRendered, 6)
  65205.         IF VARTYPE(_goFP) = "O" AND (_goFP.nSearchPages > 0) AND (.PageNo > _goFP.nSearchPages)
  65206.             This.lStoreData = .F.
  65207.             * MESSAGEBOX("The offline output generation was turned off because you are using the 'nSearchPages'" + CHR(13) + ;
  65208.             "feature. If you want to allow all options, set the Search Pages value to -1" + CHR(13) + CHR(13) + ;
  65209.             "Current value = " + TRANSFORM(_goFP.nSearchPages), 48, "Attention")
  65210.             EXIT
  65211.         ENDIF
  65212.         SET DATASESSION TO ( This.nFoxyDrivingDataSession )
  65213.         TRY
  65214.             lnRec = RECNO()
  65215.         CATCH TO loExc
  65216.             SET STEP ON
  65217.         ENDTRY
  65218.         LOCAL lcTestContents, lcNewContents, lcNewUNContents, lnRotate, lnDynamics
  65219.         STORE "" TO m.lcTestContents, m.lcNewContents, m.lcNewUNContents
  65220.         m.lnRotate = 0
  65221.         m.lnDynamics = This.GetDynamicsFromFRX(m.tnFRXRecno, @m.lcTestContents, @m.lnRotate)
  65222.         IF NOT EMPTY(m.lcTestContents)
  65223.             m.lcNewContents      = m.lcTestContents
  65224.             m.lcNewUNContents = STRCONV(m.lcTestContents, 5)
  65225.         ELSE
  65226.             m.lcNewContents      = m.lcContents
  65227.             m.lcNewUNContents = m.tcContentsToBeRendered
  65228.         ENDIF
  65229.         TRY
  65230.             * Storing the data in the temp tables used for generating the outputs
  65231.             This.resetDataSession()
  65232.             TRY 
  65233.                 SELECT (.cOutputAlias)
  65234.             CATCH
  65235.                 SET STEP ON 
  65236.                 This.setCurrentDataSession()
  65237.                 TRY 
  65238.                     SELECT (.cOutputAlias)
  65239.                 CATCH 
  65240.                     This.setFRXDataSession()
  65241.                     TRY 
  65242.                         SELECT (.cOutputAlias)
  65243.                     CATCH 
  65244.                     ENDTRY 
  65245.                 ENDTRY 
  65246.             ENDTRY 
  65247.             INSERT INTO (.cOutputAlias) ;
  65248.                 VALUES (m.tnFRXRecno, m.lnRec, m.tnLeft, m.tnTop, m.tnWidth, m.tnHeight, ;
  65249.                 m.tnObjectContinuationType, m.lcNewContents, m.lcNewUNContents, ;
  65250.                 .PageNo, This.nFrxIndex, m.lnDynamics, m.lnRotate)
  65251.         CATCH TO m.loExc
  65252.             SET STEP ON
  65253.         ENDTRY
  65254.     ENDWITH
  65255.     EXIT
  65256. ENDDO
  65257. * Restoring data to original status
  65258. SET DATASESSION TO (m.lnSession)
  65259. SELECT (m.lnSelect)
  65260. ENDPROC
  65261. PROCEDURE getfullfrxdata
  65262. *!*    Creates a single CURSOR with the Render + FRX information, to be used
  65263. *!*    by the report listeners to generate the outputs without running the
  65264. *!*    REPORT FORM again.
  65265. *!*    -----------------------------------------------------------------------------
  65266. * Ensure we are in the correct DataSession
  65267. This.ResetDataSession()
  65268. IF EMPTY(This.cOutputAlias)
  65269.     MESSAGEBOX("The helper 'Rendering' cursor is not available.", 16, "Error")
  65270.     RETURN ""
  65271.     IF NOT USED(This.cOutputAlias)
  65272.         USE (This.cOutputAlias) IN 0 SHARED AGAIN
  65273.     ENDIF
  65274. ENDIF
  65275. IF EMPTY(This.cFRXAlias)
  65276.     MESSAGEBOX("The helper 'FRX' cursor is not available.", 16, "Error")
  65277.     RETURN ""
  65278.     IF NOT USED(This.cFRXAlias)
  65279.         USE (This.cFRXAlias) IN 0 SHARED AGAIN
  65280.     ENDIF
  65281. ENDIF
  65282. IF NOT EMPTY(This.cFullOutputAlias)
  65283.     USE IN SELECT(This.cFullOutputAlias)
  65284. ENDIF 
  65285. LOCAL lnSelect, lcFullOutput
  65286. m.lnSelect = SELECT()
  65287. LOCAL loExc as Exception
  65288.     LOCAL lnAliases && , lcCurrFRX
  65289.     m.lnAliases = ALEN(This.aFRXTables, 1)
  65290.     DIMENSION m.laTempData(m.lnAliases)
  65291.     FOR m.n = 1 TO m.lnAliases
  65292.         m.laTempData(m.n) = STRTRAN(SYS(2015), " ", "_")
  65293.         SELECT CAST(RECNO() AS N(4,0)) as nRecno, * FROM (This.aFRXTables(m.n)) INTO CURSOR TempFRX READWRITE
  65294.         SELECT TempFRX
  65295.         * Change some field values to be used to index the object drawing in the output files
  65296. REPLACE ALL RESETRPT WITH 0
  65297. REPLACE ALL RESETRPT WITH 1 FOR OBJTYPE = 7
  65298. REPLACE ALL RESETRPT WITH 2 FOR OBJTYPE = 6
  65299. REPLACE ALL RESETRPT WITH 3 FOR OBJTYPE = 5
  65300. REPLACE ALL RESETRPT WITH 4 FOR OBJTYPE = 8
  65301. REPLACE ALL RESETRPT WITH 5 FOR OBJTYPE = 17
  65302. *!*    OBJTYPE
  65303. *!*    resetrpt    
  65304. *!*    7 - Shape
  65305. *!*    6 - Line
  65306. *!*    5 - Label
  65307. *!*    8 - Field
  65308. *!*    17 - Picture
  65309.         * Rename the fields that can be duplicated during JOIN
  65310.         ALTER TABLE TempFRX rename COLUMN Width  to FRXWidth
  65311.         ALTER TABLE TempFRX rename COLUMN Height to FRXHeight
  65312.         ALTER TABLE TempFRX rename COLUMN Top    to FRXTop
  65313.         INDEX ON nRecno TAG nRecno
  65314. *        SELECT OA.*, ; && OA = Output Alias
  65315.             TempFrx.* ;
  65316.                 FROM (This.cOutputAlias) OA ;
  65317.                 JOIN TempFrx ON OA.FrxRecno = TempFrx.nRecno ;
  65318.                 WHERE FRXINDEX = m.n ;
  65319.                 ORDER BY Page, resetRpt, Top, Left ;
  65320.                 INTO CURSOR (m.laTempData(m.n)) READWRITE
  65321.         SELECT OA.*, ; && OA = Output Alias
  65322.             TempFrx.* ;
  65323.                 FROM (This.cOutputAlias) OA ;
  65324.                 JOIN TempFrx ON OA.FrxRecno = TempFrx.nRecno ;
  65325.                 WHERE FRXINDEX = m.n ;
  65326.                 ORDER BY Page ;
  65327.                 INTO CURSOR (m.laTempData(m.n)) READWRITE
  65328.         IF _TALLY = 0
  65329.             MESSAGEBOX("Error creating report data. The output will not be rendered correctly.", 16, "Error")
  65330.             SET STEP ON 
  65331.         ENDIF 
  65332.         USE IN SELECT("TempFRX")
  65333.     ENDFOR 
  65334.     IF m.lnAliases > 1
  65335.         SELECT m.laTempData(1)
  65336.         FOR m.n = 2 TO m.lnAliases
  65337.             APPEND FROM DBF(m.laTempData(m.n))
  65338.             USE IN SELECT(m.laTempData(m.n))
  65339.         ENDFOR 
  65340.     ENDIF 
  65341.     * Check if the "cAuxFullOutputAlias" exists, and appends with its data
  65342.     TRY 
  65343.         IF NOT EMPTY(This.cAuxFullOutputAlias)
  65344.             IF NOT USED(This.cAuxFullOutputAlias)
  65345.                 USE (This.cAuxFullOutputAlias) IN 0 SHARED AGAIN
  65346.             ENDIF
  65347.             SELECT m.laTempData(1)
  65348.             APPEND FROM DBF(This.cAuxFullOutputAlias)
  65349.         ENDIF 
  65350.     CATCH TO m.loExc
  65351.         SET STEP ON 
  65352.     ENDTRY
  65353.     This.cFullOutputAlias = m.laTempData(1)
  65354.     SELECT (This.cFullOutputAlias)
  65355.     SCAN
  65356.         IF Dynamics > 0
  65357.             This.ProcessDynamics()
  65358.         ENDIF
  65359.     ENDSCAN
  65360. CATCH TO m.loExc
  65361.     MESSAGEBOX("Error getting report information" + CHR(13) + ;
  65362.             TRANSFORM(m.loExc.ERRORNO) + " - " + m.loExc.MESSAGE + CHR(13) + ;
  65363.             "Line: " + TRANSFORM(m.loExc.LINENO) + " - " + m.loExc.LINECONTENTS + ;
  65364.             CHR(13) + CHR(13) + "Please inform the details to   vfpimaging@hotmail.com", 16, "FoxyPreviewer Error")
  65365.     This.cFullOutputAlias = ""
  65366. ENDTRY
  65367. SELECT (m.lnSelect)
  65368. RETURN (This.cFullOutputAlias)
  65369. ENDPROC
  65370. PROCEDURE erasetempfiles
  65371. This.resetDataSession()
  65372. * We need to clean all properties properly because the class remains opened
  65373. * waiting for new sessions
  65374. LOCAL n
  65375. FOR m.n = 1 TO ALEN(This.aFRXTables, 1)
  65376.     USE IN SELECT(This.aFRXTables(m.n))
  65377. ENDFOR 
  65378. DIMENSION This.aFRXTables(1)
  65379. This.aFRXTables(1) = ""
  65380. USE IN SELECT(This.cOutputAlias)
  65381. USE IN SELECT(This.cFullOutputAlias)
  65382. USE IN SELECT(This.cFRXAlias)
  65383. USE IN SELECT(This.cAuxFullOutputAlias)
  65384. This.cOutputAlias        = ""
  65385. This.cFullOutputAlias    = ""
  65386. This.cFRXAlias           = ""
  65387. This.cAuxFullOutputAlias = ""
  65388. ENDPROC
  65389. PROCEDURE updateproperties
  65390. Local lcThermClass, loExc
  65391.     IF (VARTYPE(_goFP) = "O") AND ;
  65392.             _goFP.lCompleteMode = .F. AND ;
  65393.             VARTYPE(_Screen.oFoxypreviewer) = "O" OR ;
  65394.             (VARTYPE(_goFP) <> "O" AND VARTYPE(_Screen.oFoxypreviewer) = "O")
  65395.         This.QuietMode       = _Screen.oFoxypreviewer.lQuietMode
  65396.         This.Successor       = _Screen.oFoxypreviewer.cSuccessor
  65397.         This.lExpandFields = _Screen.oFoxypreviewer.lExpandFields
  65398.         LOCAL lnType
  65399.         m.lnType = _Screen.oFoxypreviewer.nThermType
  65400.         IF m.lnType = 1
  65401.             m.lcThermClass = "FXTHERM"
  65402.         ELSE
  65403.             m.lcThermClass = "FOXYTHERM"
  65404.         ENDIF
  65405.         This.fxFeedbackClass = m.lcThermClass
  65406.         _Screen.oFoxypreviewer._oDestScreen = This.CommandClauses.Window
  65407.         * Determine the ".WaitForNextReport" status if using "lObjTypeMode"
  65408.         TRY 
  65409.             This.lWaitForNextReport = This.CommandClauses.NoPageEject
  65410.         CATCH
  65411.         ENDTRY 
  65412.     ENDIF
  65413. CATCH TO m.loExc
  65414.     SET STEP ON
  65415. ENDTRY
  65416. ENDPROC
  65417. PROCEDURE getdynamicsfromfrx
  65418. LPARAMETERS tnRecno, tcNewContents, tnRotate
  65419. #DEFINE OBJ_COMMENT                  0
  65420. #DEFINE OBJ_LABEL                    5
  65421. #DEFINE OBJ_LINE                     6
  65422. #DEFINE OBJ_RECTANGLE                7
  65423. #DEFINE OBJ_FIELD                    8
  65424. #DEFINE OBJ_PICTURE                 17
  65425. #DEFINE OBJ_VARIABLE                18
  65426. LOCAL lnSession, lnSelect, lcDynamics, lnObjType, lcStyle
  65427. m.lnSelect   = SELECT()
  65428. m.lnSession  = SET("Datasession")
  65429. m.lcDynamics = ""
  65430. * Get info from FRX
  65431. THIS.setFRXDataSession()
  65432. SELECT FRX
  65433. GO m.tnRecno
  65434. m.lnObjType = FRX.ObjType
  65435. m.lcStyle   = FRX.STYLE
  65436. * Restore the datasession
  65437. SET DATASESSION TO(m.lnSession)
  65438. SELECT (m.lnSelect)
  65439. IF EMPTY(m.lcStyle) OR (NOT USED(THIS.cMainAlias)) OR (NOT INLIST(m.lnObjType, OBJ_LABEL, OBJ_FIELD, OBJ_PICTURE))
  65440.     RETURN 0
  65441. ENDIF
  65442. *!* Code to handle the Dynamic Options added in SP2
  65443. LOCAL lcExecWhen, lcDynType, N, llTrue, lcScript, lcNewContents
  65444. m.N = 1
  65445. m.llTrue = .F.
  65446. m.lcScript = ""
  65447. m.lcNewContents = ""
  65448. DO WHILE .T.
  65449.     m.lcDynType = UPPER(STREXTRACT(m.lcStyle, [name="Microsoft.VFP.Reporting.Builder.], ["], m.N))
  65450.     && Possible results: ROTATE, EVALUATECONTENTS
  65451.     DO CASE
  65452.     CASE m.lcDynType == "ROTATE"
  65453.         m.tnRotate = VAL(STREXTRACT(m.lcStyle, [ execute="], ["], m.N))
  65454.         m.N = m.N + 1
  65455.         LOOP
  65456.     CASE EMPTY(m.lcDynType)
  65457.         m.N = 0
  65458.         EXIT
  65459.     OTHERWISE
  65460.     ENDCASE
  65461.     m.lcExecWhen = STREXTRACT(m.lcStyle, [execwhen="], ["], m.N)
  65462.     m.lcExecWhen = THIS.GetStringFromXML(m.lcExecWhen)
  65463.         m.llTrue = EVALUATE(m.lcExecWhen)
  65464.     CATCH
  65465.         m.llTrue = .F.
  65466.     ENDTRY
  65467.     * If the dynamics does not return a logical value, then treat it as false
  65468.     m.llTrue = IIF(VARTYPE(m.llTrue)="L", m.llTrue, .F.)
  65469.     DO CASE
  65470.     CASE m.lcDynType = "ROTATE"
  65471.     CASE m.lcDynType = "EVALUATECONTENTS" AND ;
  65472.             (NOT EMPTY(m.lcExecWhen)) AND ;
  65473.             (m.llTrue)
  65474.         m.lcNewContents = STREXTRACT(m.lcStyle, [ script="], ["], m.N)
  65475.         IF NOT EMPTY(m.lcNewContents)
  65476.             TRY
  65477.                 m.lcNewContents = THIS.GetStringFromXML(m.lcNewContents)
  65478.                 m.lcNewContents = EVALUATE(m.lcNewContents)
  65479.             CATCH TO m.loExc
  65480.                 SET STEP ON
  65481.             ENDTRY
  65482.         ENDIF
  65483.         EXIT
  65484.     OTHERWISE
  65485.     ENDCASE
  65486.     m.N = m.N + 1
  65487. ENDDO
  65488. m.tcNewContents = TRANSFORM(m.lcNewContents)
  65489. RETURN m.N
  65490. *!*    * Dynamic formatting sample
  65491. *!*    <VFPData>
  65492. *!*        <reportdata name="Microsoft.VFP.Reporting.Builder.EvaluateContents" type="R" script="" execute="in_stock > 30" execwhen="in_Stock > 30" class="" classlib="" declass="" declasslib="" penrgb="16711935" fillrgb="12632256" pena="255" filla="255" fname="Century Gothic" fsize="12" fstyle="3"/>
  65493. *!*    </VFPData>
  65494. *!*    * Rotation
  65495. *!*    <VFPData>
  65496. *!*        <reportdata name="Microsoft.VFP.Reporting.Builder.Rotate" type="R" script="" execute="313" execwhen="" class="" classlib="" declass="" declasslib=""/>
  65497. *!*    </VFPData>
  65498. ENDPROC
  65499. PROCEDURE getprinterinfo
  65500. * See PRTINFO() in Help
  65501. *!*    nPrtOrientation
  65502. *!* ----------------------------------------------------
  65503. *!*    Numeric data type. The following tables list values returned when specifying particular values for nPrinterSetting.
  65504. *!*    If nPrinterSetting is 1, PRTINFO( ) returns the paper orientation as the following:
  65505. *!*    Values  Paper orientation  
  65506. *!*      
  65507. 1    Information not available
  65508. *!*       0    Portrait
  65509. *!*       1    Landscape
  65510. *!*    nPrtPaperSize
  65511. *!* ----------------------------------------------------
  65512. *!*    See complete list in Help
  65513. *!*    Values  Paper size  
  65514. *!*      
  65515. 1      Information not available. Use nPrinterSetting = 3 and nPrinterSetting = 4 to return the paper size. 
  65516. *!*     
  65517. *!*      1       Letter, 8 1/2 x 11 in
  65518. *!*      2       Letter Small, 8 1/2 x 11 in
  65519. *!*      3       Tabloid, 11 x 17 in
  65520. *!*      4       Ledger, 17 x 11 in
  65521. *!*      5       Legal, 8 1/2 x 14 in
  65522. *!*      6       Statement, 5 1/2 x 8 1/2 in
  65523. *!*      7       Executive, 7 1/4 x 10 1/2 in
  65524. *!*      8       A3, 297 x 420 mm
  65525. *!*      9       A4, 210 x 297 mm
  65526. *!*      10      A4, Small 210 x 297 mm
  65527. LOCAL lnSettings, lnOrientation, lcPrinterName, lnOrientationLine, lnPaperSize, lnPaperSizeLine, lcPrinterNameLine
  65528. SELECT FRX
  65529. LOCATE FOR ObjType = 1 and ObjCode = 53
  65530. * make an array out of the settings in the expr field
  65531. m.lnSettings = ALines( laSettings, EXPR )
  65532. * Find the ORIENTATION element and get the value
  65533. m.lnOrientationLine = Ascan( laSettings, "ORIENTATION",1,0,0,4)
  65534. IF m.lnOrientationLine > 0
  65535.     m.lnOrientation = VAL(SUBSTR(laSettings(m.lnOrientationLine), 13))
  65536.     This.nPrtOrientation = m.lnOrientation
  65537. ENDIF
  65538. * Find the PAPERSIZE element and get the value
  65539. m.lnPaperSizeLine = Ascan( laSettings, "PAPERSIZE",1,0,0,4)
  65540. IF m.lnPaperSizeLine > 0
  65541.     m.lnPaperSize = VAL(SUBSTR(laSettings(m.lnPaperSizeLine), 11))
  65542.     This.nPrtPaperSize = m.lnPaperSize
  65543. ENDIF
  65544. * Find the DEVICE element and get the value
  65545. m.lnPrinterNameLine = Ascan( laSettings, "DEVICE",1,0,0,4)
  65546. IF m.lnPrinterNameLine > 0
  65547.     m.lcPrinterName = SUBSTR(m.laSettings(m.lnPrinterNameLine), 8)
  65548.     This.cPrtPrinterName = m.lcPrinterName
  65549. ENDIF
  65550. ENDPROC
  65551. PROCEDURE getstringfromxml
  65552. LPARAMETERS tcText
  65553. * Adjust Html special chars
  65554. m.tcText = STRTRAN(m.tcText, [&] , [&]) && first!
  65555. m.tcText = STRTRAN(m.tcText, [ ], [ ])
  65556. m.tcText = STRTRAN(m.tcText, [<]  , [<])
  65557. m.tcText = STRTRAN(m.tcText, [>]  , [>])
  65558. m.tcText = STRTRAN(m.tcText, ["], ["])
  65559. RETURN m.tcText
  65560. ENDPROC
  65561. PROCEDURE processdynamics
  65562. #Define OBJ_COMMENT                  0
  65563. #Define OBJ_LABEL                    5
  65564. #Define OBJ_LINE                     6
  65565. #Define OBJ_RECTANGLE                7
  65566. #Define OBJ_FIELD                    8
  65567. #Define OBJ_PICTURE                 17
  65568. #Define OBJ_VARIABLE                18
  65569. *!* Code to handle the Dynamic Options added in SP2
  65570. LOCAL lcStyle
  65571. LOCAL lcDynamicString, loExc
  65572. m.lcStyle   = Style
  65573. IF EMPTY(m.lcStyle)
  65574.     RETURN
  65575. ENDIF
  65576. *!* LOCAL lcDynType
  65577. *!*    lcDynType = UPPER(STREXTRACT(lcStyle, [name="Microsoft.VFP.Reporting.Builder.], ["], 1))
  65578. *!*        && Possible results: ROTATE, EVALUATECONTENTS
  65579. *!*    DO CASE
  65580. *!*    CASE lcDynType = "ROTATE"
  65581. *!*    CASE lcDynType = "EVALUATECONTENTS"
  65582. *!*    OTHERWISE
  65583. *!*    ENDCASE
  65584. m.lcDynamicString = STREXTRACT(Style, [<reportdata name="Microsoft.VFP.Reporting.Builder.], [/>], N)
  65585. Local lbReturn As Boolean, lnSelect, lnRecs, lnRecDyn
  65586. m.lnSelect = Select()
  65587. m.lnRecs   = 0
  65588. m.lnRecDyn = Dynamics
  65589.     m.lnRecs = XMLToCursor(m.lcStyle, "_TempDynamics")
  65590. Catch
  65591.     m.lbReturn = .F.
  65592. EndTry
  65593. IF m.lnRecs = 0
  65594.     RETURN
  65595. ENDIF 
  65596. IF USED("_TempDynamics") AND RECCOUNT("_TempDynamics") > 0 THEN
  65597.     SELECT _TempDynamics
  65598.     TRY 
  65599.         GO m.lnRecDyn
  65600.     CATCH TO m.loExc
  65601.         SET STEP ON 
  65602.     ENDTRY
  65603.         TRY
  65604.             SELECT (THIS.cFullOutputAlias)
  65605.             DO CASE
  65606.             CASE ObjType = OBJ_FIELD
  65607. *!*                    IF (VARTYPE(_TempDynamics.Script) = "C") AND (NOT EMPTY(_TempDynamics.Script))
  65608. *!*                        REPLACE Contents WITH _TempDynamics.Script, ;
  65609. *!*                            UNContents WITH STRCONV(_TempDynamics.Script, 5) IN (THIS.cFullOutputAlias)
  65610. *!*                    ENDIF
  65611.                 *    AddProperty(loDynamics, "cValue", _TempDynamics.Script)      && the Replace Expression With
  65612.                 *    AddProperty(loDynamics, "cExecWhen", _TempDynamics.ExecWhen) && the expresion to be evaluate it
  65613.                 IF VARTYPE(_TempDynamics.FName) = "C"
  65614.                     REPLACE FontFace WITH _TempDynamics.FName IN (THIS.cFullOutputAlias)
  65615.                 ENDIF
  65616.                 IF VARTYPE(_TempDynamics.FSIZE) = "N"
  65617.                     REPLACE FONTSIZE WITH _TempDynamics.FSIZE IN (THIS.cFullOutputAlias)
  65618.                 ENDIF
  65619.                 IF VARTYPE(_TempDynamics.FStyle) = "N"
  65620.                     REPLACE FontStyle WITH _TempDynamics.FStyle IN (THIS.cFullOutputAlias)
  65621.                 ENDIF
  65622.                 *!*    <VFPData>
  65623.                 *!*        <reportdata name="Microsoft.VFP.Reporting.Builder.EvaluateContents" type="R" script="Novo texto"
  65624.                 *!*         execute="in_stock > 50" execwhen="in_stock > 50" class="" classlib="" declass="" declasslib=""
  65625.                 *!*         penrgb="0" fillrgb="-1" pena="255" filla="0" fname="Arial" fsize="12" fstyle="0"/>
  65626.                 *!*    </VFPData>
  65627.                 LOCAL lnPenRGB, lnPenR, lnPenG, lnPenB
  65628.                 m.lnPenRGB = _TempDynamics.PenRgb
  65629.                 IF VARTYPE(m.lnPenRgb) <> "N"
  65630.                     IF VARTYPE(m.lnPenRgb) = "C"
  65631.                         m.lnPenRGB = VAL(ALLTRIM(m.lnPenRGB))
  65632.                     ELSE 
  65633.                         m.lnPenRGB = 0
  65634.                     ENDIF                    
  65635.                 ENDIF
  65636.                 IF m.lnPenRgb = -1
  65637.                     STORE 0 TO m.lnPenR, m.lnPenG, m.lnPenB
  65638.                 ELSE
  65639.                     m.lnPenR = BITRSHIFT(BITAND(m.lnPenRGB, 0x0000FF),0)
  65640.                     m.lnPenG = BITRSHIFT(BITAND(m.lnPenRGB, 0x00FF00),8)
  65641.                     m.lnPenB = BITRSHIFT(BITAND(m.lnPenRGB, 0xFF0000),16)
  65642.                 ENDIF
  65643.                 REPLACE PenRed WITH m.lnPenR, ;
  65644.                     PenGreen WITH m.lnPenG, ;
  65645.                     PenBlue WITH m.lnPenB IN (THIS.cFullOutputAlias)
  65646.                 LOCAL lnFillRGB, lnFillR, lnFillG, lnFillB
  65647.                 m.lnFillRGB = _TempDynamics.FillRgb 
  65648.                 IF VARTYPE(m.lnFillRGB) <> "N"
  65649.                     m.lnFillRGB = VAL(ALLTRIM(m.lnFillRGB))
  65650.                 ENDIF
  65651.                 IF m.lnFillRgb = -1
  65652.                     STORE 255 TO m.lnFillR, m.lnFillG, m.lnFillB
  65653.                 ELSE
  65654.                     m.lnFillR = BITRSHIFT(BITAND(m.lnFillRGB, 0x0000FF),0)
  65655.                     m.lnFillG = BITRSHIFT(BITAND(m.lnFillRGB, 0x00FF00),8)
  65656.                     m.lnFillB = BITRSHIFT(BITAND(m.lnFillRGB, 0xFF0000),16)
  65657.                 ENDIF
  65658.                 REPLACE FillRed WITH m.lnFillR, ;
  65659.                         FillGreen WITH m.lnFillG, ;
  65660.                         FillBlue WITH m.lnFillB IN (THIS.cFullOutputAlias)
  65661.                 * New option, allowing opaque backgrounds
  65662.                 * Mode: 0 = Opaque background; 1 = Transparent
  65663.                 IF (VARTYPE(_TempDynamics.FillA) = "N") AND (_TempDynamics.FillA > 0)
  65664.                     REPLACE Mode WITH 0 IN (THIS.cFullOutputAlias)&& Opaque
  65665.                 ELSE
  65666.                     REPLACE Mode WITH 1 IN (THIS.cFullOutputAlias)&& Transparent
  65667.                 ENDIF
  65668.                 m.lbReturn = .T.
  65669.             CASE INLIST(ObjType, OBJ_RECTANGLE, OBJ_IMAGE)
  65670.                 *!*                    AddProperty(loDynamics, "cExecWhen", _TempDynamics.ExecWhen) &&Corresponds to the expresion to be evaluate it
  65671.                 *!*                    AddProperty(loDynamics, "nWidth", Iif(Vartype(_TempDynamics.Width)="C", Int(Val(_TempDynamics.Width)), _TempDynamics.Width)) &&Corresponds to the width assigned
  65672.                 *!*                    AddProperty(loDynamics, "nHeight", Iif(Vartype(_TempDynamics.Height)="C", Int(Val(_TempDynamics.Height)), _TempDynamics.Height)) &&Corresponds to the width assigned
  65673.                 m.lbReturn = .T.
  65674.             ENDCASE
  65675.         CATCH TO m.loExc
  65676.             SET STEP ON 
  65677.             m.lbReturn = .F.
  65678.         ENDTRY
  65679.         SELECT _TempDynamics
  65680. *!*        *!* No check for Rotation Values
  65681. *!*        SCAN FOR _TempDynamics.NAME="Microsoft.VFP.Reporting.Builder.Rotate"
  65682. *!*            ADDPROPERTY(loDynamics, "nRotationDegree", IIF(VARTYPE(_TempDynamics.Execute)="C", INT(VAL(_TempDynamics.Execute)), _TempDynamics.Execute))
  65683. *!*            lbReturn = .T.
  65684. *!*        ENDSCAN
  65685.     SELECT (m.lnSelect)
  65686.     RETURN m.lbReturn
  65687.     m.lbReturn = .F.
  65688. ENDIF
  65689. SELECT (m.lnSelect)
  65690. RETURN m.lbReturn
  65691. *!*    * Dynamic formatting sample
  65692. *!*    <VFPData>
  65693. *!*        <reportdata name="Microsoft.VFP.Reporting.Builder.EvaluateContents" type="R" script="" execute="in_stock > 30" execwhen="in_Stock > 30" class="" classlib="" declass="" declasslib="" penrgb="16711935" fillrgb="12632256" pena="255" filla="255" fname="Century Gothic" fsize="12" fstyle="3"/>
  65694. *!*    </VFPData>
  65695. *!*    * Rotation
  65696. *!*    <VFPData>
  65697. *!*        <reportdata name="Microsoft.VFP.Reporting.Builder.Rotate" type="R" script="" execute="313" execwhen="" class="" classlib="" declass="" declasslib=""/>
  65698. *!*    </VFPData>
  65699. *!*    <VFPData>
  65700. *!*        <reportdata name="Microsoft.VFP.Reporting.Builder.EvaluateContents" type="R" script="Novo texto" 
  65701. *!*         execute="in_stock > 50" execwhen="in_stock > 50" class="" classlib="" declass="" declasslib="" 
  65702. *!*         penrgb="0" fillrgb="-1" pena="255" filla="0" fname="Arial" fsize="12" fstyle="0"/>
  65703. *!*    </VFPData> 
  65704. ENDPROC
  65705. PROCEDURE onpreviewclose_bind
  65706. LPARAMETERS lPrint
  65707. This.EraseTempFiles()
  65708. This.nFrxIndex = 0
  65709. ENDPROC
  65710. PROCEDURE addtolog
  65711. LPARAMETERS tcInfo, tcMethod
  65712. LOCAL lnSelect, lcAlias, lnDataSession, lcText, CRLF
  65713. m.lnSelect = SELECT()
  65714. m.lcAlias = ALIAS()
  65715. m.lnDataSession = SET("Datasession")
  65716. m.CRLF = CHR(13) + CHR(10)
  65717. m.lcText = m.tcInfo + m.CRLF + ;
  65718.         m.tcMethod + m.CRLF + ;
  65719.         "Select: " + TRANSFORM(m.lnSelect) + " - " + ;
  65720.         "Alias: " + m.lcAlias + " - " + ;
  65721.         "Session: " + TRANSFORM(m.lnDataSession) + m.CRLF + m.CRLF
  65722. STRTOFILE(m.lcText, "c:\FoxyPreviewer_Log.txt", .T.)
  65723. ENDPROC
  65724. PROCEDURE ishalfpage
  65725. IF This.PageTotal > 1
  65726.     RETURN .F.
  65727. ENDIF
  65728. LOCAL lnSession
  65729. lnSession = SET("Datasession")
  65730. * Storing the data in the temp tables used for generating the outputs
  65731. This.resetDataSession()
  65732. LOCAL llError
  65733.     llError = .F.
  65734.     SELECT (This.cOutputAlias)
  65735.     DIMENSION laHeight(1)
  65736.     SELECT MAX(Top) as MaxHeight ;
  65737.         FROM (This.cOutputAlias) ;
  65738.         WHERE NOT EMPTY(Contents) ;
  65739.         INTO ARRAY laHeight
  65740. CATCH
  65741.     llError = .T.
  65742. ENDTRY
  65743. SET DATASESSION TO (m.lnSession)
  65744. IF llError
  65745.     RETURN .F.
  65746. ENDIF
  65747. LOCAL lnReportHeight
  65748. lnReportHeight = This.GetPageHeight()
  65749. IF laHeight(1) > (lnReportHeight / 2)
  65750.     RETURN .F.
  65751.     RETURN .T.
  65752. ENDIF
  65753. ENDPROC
  65754. PROCEDURE BeforeBand
  65755. LPARAMETERS m.nBandObjCode, m.nFRXRecNo
  65756. DODEFAULT(m.nBandObjCode, m.nFRXRecNo)
  65757. This.lEmptyReport = .F.
  65758. ENDPROC
  65759. PROCEDURE AfterReport
  65760. IF This.lStoreData
  65761.     This.aFRXPages(This.nFrxIndex, 3) = This.PageTotal
  65762.     IF VARTYPE(_Screen.oFoxyPreviewer) = "O" AND _Screen.oFoxyPreviewer.lRepeatInPage = .T.
  65763.         _Screen.oFoxyPreviewer.lHalfHeightReport = This.IsHalfPage()
  65764.     ENDIF 
  65765. ENDIF
  65766. IF This.lEmptyReport
  65767.     && Cleanup
  65768.     This.EraseTempFiles()
  65769.     This.nFrxIndex = 0
  65770. ENDIF 
  65771. DODEFAULT()
  65772. ENDPROC
  65773. PROCEDURE LoadReport
  65774. This.UpdateProperties()
  65775. * If ListenerType hasn't already been set, set it based on whether the report
  65776. * is being printed or previewed.
  65777. WITH This
  65778.     DO CASE 
  65779.     CASE .ListenerType <> -1
  65780.     CASE .CommandClauses.Preview
  65781.         .ListenerType = 3 && 1
  65782.     CASE .CommandClauses.OutputTo = 1
  65783.         .ListenerType = 0
  65784.     ENDCASE 
  65785.     IF .ListenerType = 0
  65786.         .lStoreData = .F.  && There's no need to store the report info when direct printing
  65787.     ENDIF
  65788. ENDWITH 
  65789. DODEFAULT()
  65790. ENDPROC
  65791. PROCEDURE Init
  65792. *!*    IF FILE("c:\FoxyPreviewer_Log.txt")
  65793. *!*        DELETE FILE ("c:\FoxyPreviewer_Log.txt")
  65794. *!*    ENDIF
  65795. This.AddProperty("cOutputAlias"        , '')     && The alias for the cursor to output to
  65796. This.AddProperty("cAuxFullOutputAlias" , '')     && The AUXILIAR alias for the cursor to output to - used by the <TF> feature
  65797. This.AddProperty("lDeleteOnDestroy"    , .T.)     && .T. to delete the table when this object is destroyed
  65798. This.AddProperty("cMainAlias"          , '')
  65799. This.AddProperty("nStartingSession"    , 1)
  65800. This.AddProperty("nStartingRecNo"      , 1)
  65801. This.AddProperty("cStartingAlias"      , "")
  65802. This.AddProperty("lStoreData"          , .T.)   && .T. to store the info from the report in a table
  65803. This.AddProperty("cFullOutputAlias"    , '')    && The name of the cursor that will contain the FULL 
  65804.                                             && report info to regenerate the report in a different format
  65805. This.AddProperty("cFRXDBF"             , '')     && The name of the FRX table to output to
  65806. This.AddProperty("cFRXAlias"           , '')     && The name of the FRX table to output to
  65807. This.AddProperty("aFRXTables[1]"       , '')     && Array of FRX tables
  65808. This.AddProperty("nFRXIndex"           , 0)     && The FRX index
  65809. This.AddProperty("nPrtOrientation"     , 0)
  65810. This.AddProperty("nPrtPaperSize"       , 0)
  65811. This.AddProperty("cPrtPrinterName"     , "")
  65812. This.AddProperty("aFRXPages[1]"        , "")    && We'll store page by page the Orientation, PaperSize and PageCount
  65813. This.AddProperty("lWaitForNextReport"  , .F.)   && Flag that tells if the NOPAGEEJECT clause is being used
  65814. This.AddProperty("lEmptyReport"        , .T.)     && Flag that tells us if we are dealing with an empty report
  65815. IF VARTYPE(_goFP) = "O"
  65816.     This.QuietMode  = _goFP.lQuietMode
  65817.     This.lStoreData = .T. && (_goFP.lCompleteMode = .F.) OR (_goFP.lShowSearch)
  65818. ENDIF
  65819. DODEFAULT()
  65820. BINDEVENT(This, "OnPreviewClose", This, "OnPreviewClose_Bind", 1)
  65821. ENDPROC
  65822. PROCEDURE BeforeReport
  65823. IF NOT This.lStoreData
  65824.     DODEFAULT()
  65825.     RETURN
  65826. ENDIF
  65827. LOCAL lcTable, lcAlias, llHelper, lnSelect, lnSession, lnIndex
  65828. m.lnSession    = SET("Datasession")
  65829. m.lnSelect    = SELECT()
  65830. m.llHelper    = VARTYPE(_goFP) = "O"
  65831. IF VARTYPE(_Screen.oFoxyPreviewer) = "O"
  65832.     TRY 
  65833.         This._nDataSessionMode = _Screen.oFoxyPreviewer._nDataSessionMode
  65834.     CATCH
  65835.     ENDTRY 
  65836. ENDIF 
  65837. This.nFrxIndex = This.nFrxIndex + 1
  65838. IF m.llHelper
  65839.     _goFP._cOutputAlias = This.cOutputAlias
  65840.         m.lcAlias = _goFP._oAliases(_goFP._nIndex)
  65841.     CATCH
  65842.     ENDTRY
  65843. ENDIF
  65844. m.lnIndex = This.nFrxIndex
  65845. m.lcAlias = EVL(UPPER(ALIAS()), "")
  65846. IF EMPTY(m.lcAlias)
  65847.     m.lcAlias = UPPER(ALIAS())
  65848. ENDIF
  65849. This.cMainAlias = m.lcAlias
  65850. * Get the original Alias information
  65851. This.setCurrentDataSession()
  65852. LOCAL lcStartingAlias
  65853. m.lcStartingAlias      = UPPER(ALIAS())
  65854. This.cStartingAlias      = m.lcStartingAlias
  65855. This.nStartingSession = SET("Datasession")
  65856. This.nStartingRecNo      = RECNO()
  65857. * 2012-08-08
  65858. * New way of getting the main alias, trying to solve the Jumbo Issue
  65859. IF NOT EMPTY(This.cFoxyDrivingAlias)
  65860.     This.cMainAlias     = This.cFoxyDrivingAlias 
  65861.     This.cStartingAlias    = This.cFoxyDrivingAlias
  65862. ENDIF
  65863. WITH This
  65864.     * Store the table info 
  65865.     .SetFRXDataSession()
  65866.     * Store some specific info from the reports
  65867.     .GetPrinterInfo()
  65868.     DIMENSION This.aFRXPages(This.nFrxIndex, 3)
  65869.     This.aFRXPages(This.nFrxIndex, 1) = This.nPrtOrientation
  65870.     This.aFRXPages(This.nFrxIndex, 2) = This.nPrtPaperSize
  65871.     LOCAL lcFRXDBF0, lcFRXAlias, lcFRXAlias0
  65872.     m.lcFRXDBF0      = ADDBS(GETENV("TEMP")) + FORCEEXT(SYS(2015), "DBF")
  65873.     m.lcFRXAlias0 = STRTRAN(JUSTSTEM(m.lcFRXDBF0), ' ', '_')
  65874.     m.lcFRXAlias  = STRTRAN(SYS(2015), ' ', '_')
  65875.     * Create a copy of the FRX to be available to export
  65876.     SELECT FRX
  65877.     COPY TO (m.lcFRXDBF0)
  65878.     .ResetDataSession()
  65879.     IF NOT FILE(m.lcFRXDBF0)
  65880.         MESSAGEBOX("Error creating temporary FRX table")
  65881.     ELSE
  65882.         * Load the FRX table as a cursor
  65883.         USE (m.lcFRXDBF0) AGAIN IN 0 ALIAS (m.lcFRXAlias0)
  65884.         * Convert the table to a cursor and delete the local table
  65885.         SELECT * FROM (m.lcFRXAlias0) INTO CURSOR (m.lcFRXAlias) READWRITE
  65886.         USE IN SELECT(m.lcFRXAlias0)
  65887.         ERASE (m.lcFRXDBF0)
  65888.         ERASE FORCEEXT(m.lcFRXDBF0, "FPT")
  65889.         .cFRXAlias = m.lcFRXAlias
  65890.         DIMENSION This.aFRXTables(m.lnIndex)
  65891.         This.aFRXTables(m.lnIndex) = m.lcFRXAlias
  65892.         IF m.lnIndex < 2 && Merged reports, no need to close the cursor
  65893.             * Prepare the Render data cursor
  65894.             .cOutputAlias = STRTRAN(SYS(2015), " ", "_")
  65895.             CREATE CURSOR (.cOutputAlias) (FRXRECNO I, DBFRECNO I, LEFT I, TOP I, ;
  65896.                 WIDTH I, HEIGHT I, CONTTYPE I, CONTENTS M NOCPTRANS, ;
  65897.                 UNCONTENTS M NOCPTRANS, PAGE I, FRXINDEX I, DYNAMICS I, ROTATE I)
  65898.             INDEX ON PAGE     TAG PAGE
  65899.             INDEX ON FRXINDEX TAG FRXINDEX
  65900.         ENDIF
  65901.     ENDIF
  65902. ENDWITH
  65903. * Make sure to select the right DataSession
  65904. SET DATASESSION TO (m.lnSession)
  65905. * Do the usual behavior.
  65906. DODEFAULT()
  65907. * Make sure to select the right DataSession
  65908. SET DATASESSION TO (m.lnSession)
  65909. * In some cases, FoxyPreviewer wants to force the report to select a certain ALIAS, so 
  65910. * here we give it a chance to try to make it
  65911. IF NOT EMPTY(m.lcAlias)
  65912.     SELECT (m.lcAlias)
  65913.     SELECT (m.lnSelect)
  65914. ENDIF
  65915. RETURN
  65916. ENDPROC
  65917. PROCEDURE Render
  65918. LPARAMETERS m.tnFRXRecno, m.tnLeft, m.tnTop, m.tnWidth, m.tnHeight,  m.tnObjectContinuationType, m.tcContentsToBeRendered, m.tiGDIPlusImage
  65919. IF This.lStoreData
  65920.     This.StoreFRXData(m.tnFRXRecno, m.tnLeft, m.tnTop, m.tnWidth, m.tnHeight,  m.tnObjectContinuationType, ;
  65921.         m.tcContentsToBeRendered, m.tiGDIPlusImage)
  65922. ENDIF 
  65923. DODEFAULT(m.tnFRXRecNo, m.tnLeft, m.tnTop, m.tnWidth, m.tnHeight, ;
  65924.     m.tnObjectContinuationType, m.tcContentsToBeRendered, m.tiGDIPlusImage)
  65925. ENDPROC
  65926. FRXDataSession = -1
  65927. lexpandfields = .F.
  65928. _ndatasessionmode = 0
  65929. _memberdata = 
  65930.      811<VFPData><memberdata name="storefrxdata" display="StoreFRXData"/><memberdata name="getfullfrxdata" display="GetFullFRXData"/><memberdata name="erasetempfiles" display="EraseTempFiles"/><memberdata name="updateproperties" display="UpdateProperties"/><memberdata name="lexpandfields" display="lExpandFields"/><memberdata name="getdynamicsfromfrx" display="GetDynamicsFromFRX"/><memberdata name="getprinterinfo" display="GetPrinterInfo"/><memberdata name="getstringfromxml" display="GetStringFromXML"/><memberdata name="processdynamics" display="ProcessDynamics"/><memberdata name="addtolog" display="AddToLog"/><memberdata name="_ndatasessionmode" display="_nDataSessionMode"/><memberdata name="updatereportusedspace" display="UpdateReportUsedSpace"/><memberdata name="ishalfpage" display="IsHalfPage"/></VFPData>
  65931. Name = "dbflistener"
  65932. PLATFORM
  65933. UNIQUEID
  65934. TIMESTAMP
  65935. CLASS
  65936. CLASSLOC
  65937. BASECLASS
  65938. OBJNAME
  65939. PARENT
  65940. PROPERTIES
  65941. PROTECTED
  65942. METHODS
  65943. OBJCODE
  65944. RESERVED1
  65945. RESERVED2
  65946. RESERVED3
  65947. RESERVED4
  65948. RESERVED5
  65949. RESERVED6
  65950. RESERVED7
  65951. RESERVED8
  65952.  COMMENT Screen              
  65953.  WINDOWS _2680QAT8H 948405551
  65954.  WINDOWS _2680QAT8I1092440943
  65955.  WINDOWS _2680QAT8J1044843360d9
  65956.  WINDOWS _2680QAT8H1048857546
  65957.  WINDOWS _2680V3CAX1044843360
  65958.  WINDOWS _2680QAT8H1050152054
  65959.  WINDOWS _26B10MAPD1050152054
  65960.  WINDOWS _26B10MAPE1050152054oR
  65961.  WINDOWS _2680QAT8H1092440943}T
  65962.  WINDOWS _32N028ZA11044843360
  65963.  WINDOWS _32N028ZA21044843360w[
  65964.  WINDOWS _2680QAT8H1092440943|Z
  65965.  WINDOWS _32N028ZA410911094140T
  65966.  WINDOWS _35602IRQH1092440943:8
  65967.  WINDOWS _3KI00M32K1092440943F7
  65968.  COMMENT RESERVED            
  65969. VERSION =   3.00
  65970. dataenvironment
  65971. dataenvironment
  65972. Dataenvironment
  65973. aTop = 188
  65974. Left = 316
  65975. Width = 331
  65976. Height = 200
  65977. DataSource = .NULL.
  65978. Name = "Dataenvironment"
  65979. frmSendMail2
  65980. NDataSession = 1
  65981. Height = 492
  65982. Width = 690
  65983. Desktop = .T.
  65984. ShowWindow = 1
  65985. DoCreate = .T.
  65986. ShowTips = .T.
  65987. AutoCenter = .T.
  65988. BorderStyle = 3
  65989. Caption = "Send report to email"
  65990. Closable = .F.
  65991. MaxButton = .T.
  65992. MinHeight = 250
  65993. MinWidth = 580
  65994. WindowType = 1
  65995. AlwaysOnTop = .T.
  65996. AllowOutput = .F.
  65997. ctempfile = 
  65998. _memberdata = <VFPData><memberdata name="removeattachment" display="RemoveAttachment"/><memberdata name="_origautoyield" display="_OrigAutoYield"/><memberdata name="_origsys2333" display="_OrigSYS2333"/></VFPData>
  65999. _origautoyield = .F.
  66000. _origsys2333 = .F.
  66001. Name = "frmSendMail2"
  66002. PROCEDURE setlanguage
  66003. LOCAL loExc as Exception
  66004.     IF VARTYPE(_goFP) = "O"
  66005.     WITH This
  66006.         .lblTo.Caption                        = _goFP.GetLoc("TO")
  66007.         .lblSubject.Caption                   = _goFP.GetLoc("SUBJECT")
  66008.         .cmdAttachment.ToolTipText            = _goFP.GetLoc("ATTACHMENT")
  66009.         .cmbAttach.ToolTipText                = _goFP.GetLoc("ATTACHMENT")
  66010.         .chkPriority.Caption    = _goFP.GetLoc("PRIORITY")
  66011.         .chkReceipt.Caption     = _goFP.GetLoc("RECEIPT")
  66012.         .chtmleditor1.tgBold.ToolTipText      = _goFP.GetLoc("BOLD")
  66013.         .chtmleditor1.tgBold.Caption          = LEFT(_goFP.GetLoc("BOLD"),1)
  66014.         .chtmleditor1.tgItalic.ToolTipText    = _goFP.GetLoc("ITALIC")
  66015.         .chtmleditor1.tgItalic.Caption        = LEFT(_goFP.GetLoc("ITALIC"),1)
  66016.         .chtmleditor1.tgUnderline.ToolTipText = _goFP.GetLoc("UNDERLINE")
  66017.         .chtmleditor1.tgUnderline.Caption     = LEFT(_goFP.GetLoc("UNDERLINE"),1)
  66018.         .chtmleditor1.tgLeft.ToolTipText      = _goFP.GetLoc("ALIGNLEFT")
  66019.         .chtmleditor1.tgCenter.ToolTipText    = _goFP.GetLoc("ALIGNCENTE")
  66020.         .chtmleditor1.tgRight.ToolTipText     = _goFP.GetLoc("ALIGNRIGHT")
  66021.         .chtmleditor1.tgJustify.ToolTipText   = _goFP.GetLoc("ALIGNJUSTI")
  66022.         .chtmleditor1.cmdHyperlink .ToolTipText = _goFP.GetLoc("HYPERLINK")
  66023.         .chtmleditor1.cmdPicture.ToolTipText  = _goFP.GetLoc("ADDPICTURE")
  66024.         .chtmleditor1.tgDecrease.ToolTipText  = _goFP.GetLoc("INDENTREDU")
  66025.         .chtmleditor1.tgIncrease.ToolTipText  = _goFP.GetLoc("INDENTINCR")
  66026.         .chtmleditor1.tgLine.ToolTipText      = _goFP.GetLoc("HORIZBAR")
  66027.         .chtmleditor1.tgClean.ToolTipText     = _goFP.GetLoc("CLEANFORMT")
  66028.         .chtmleditor1.tgBullet.ToolTipText    = _goFP.GetLoc("LISTBULLET")
  66029.         .chtmleditor1.tgNumbers.ToolTipText   = _goFP.GetLoc("LISTNUMBER")
  66030.         .chtmleditor1.cmdCopy.ToolTipText      = _goFP.GetLoc("COPY")
  66031.         .chtmleditor1.cmdCut.ToolTipText       = _goFP.GetLoc("CUT")
  66032.         .chtmleditor1.cmdPaste.ToolTipText     = _goFP.GetLoc("PASTE")
  66033.         .chtmleditor1.cmdOpen.ToolTipText      = _goFP.GetLoc("HTMLMODEL")
  66034.         .chtmleditor1.cmdSave.ToolTipText      = _goFP.GetLoc("SAVEASHTML")
  66035.         .chtmleditor1.cmdNew.ToolTipText       = _goFP.GetLoc("NEW")
  66036.         .chtmleditor1.cmdUndo.ToolTipText      = _goFP.GetLoc("UNDO")
  66037.         .chtmleditor1.cmdRedo.ToolTipText      = _goFP.GetLoc("REDO")
  66038.         .chtmleditor1.cmbFontName.ToolTipText = _goFP.GetLoc("FONTNAME")
  66039.         .chtmleditor1.cmbFontSize.ToolTipText = _goFP.GetLoc("FONTSIZE")
  66040.         .chtmleditor1.btnForeColor.ToolTipText = _goFP.GetLoc("FONTCOLOR")
  66041.         .chtmleditor1.btnBackColor.ToolTipText = _goFP.GetLoc("BACKCOLOR")
  66042.     ENDWITH
  66043.     ENDIF 
  66044. CATCH TO loExc
  66045.     SET STEP ON
  66046. ENDTRY
  66047. RETURN
  66048. ENDPROC
  66049. PROCEDURE removeattachment
  66050. LOCAL lnOption, lcCancel, lcRemove
  66051. lnOption = 0
  66052. IF VARTYPE(_goFP) = "O"
  66053.     lcCancel = _goFP.GetLoc("CANCEL")
  66054.     lcRemove = _goFP.GetLoc("REMOVEFILE")
  66055.     lcCancel = "Cancel"
  66056.     lcRemove = "Remove file"
  66057. ENDIF 
  66058. LOCAL loList as ComboBox
  66059. loList = Thisform.CmbAttach 
  66060. DEFINE POPUP MyShortCut SHORTCUT RELATIVE FROM MROW(),MCOL()
  66061. DEFINE BAR 1 OF MyShortCut PROMPT lcRemove + ": " + ;
  66062.     loList.ListItem(loList.ListIndex)
  66063. DEFINE BAR 2 OF MyShortCut PROMPT lcCancel
  66064. ON SELECTION POPUP MyShortCut lnOption = BAR()
  66065. ACTIVATE POPUP MyShortCut
  66066. IF lnOption = 1 && Remove file
  66067.     loList.RemoveListItem(loList.ListItemId)
  66068.     loList.ListIndex = 1
  66069. ENDIF
  66070. ENDPROC
  66071. PROCEDURE Init
  66072. LPARAMETERS tcFile
  66073. * Thisform.lblAttachment.Caption = JUSTFNAME(tcFile)
  66074. IF NOT EMPTY(tcFile)
  66075.     WITH Thisform.CmbAttach as ComboBox 
  66076.         .AddItem(JUSTFNAME(tcFile))
  66077.         .List(.NewIndex, 2) = tcFile
  66078.         .ListIndex = 1
  66079.         .Refresh()
  66080.     ENDWITH
  66081. ENDIF
  66082. LOCAL lcAttach, n, lcFile
  66083. lcAttach = _goFP.cAttachments
  66084. IF NOT EMPTY(lcAttach)
  66085.     lcAttach = CHRTRAN(lcAttach, ";", ",")
  66086.     FOR m.n = 1 TO GETWORDCOUNT(lcAttach, ",")
  66087.         lcFile = GETWORDNUM(lcAttach, m.n, ",")
  66088.         IF NOT FILE(lcFile)
  66089.             LOOP
  66090.         ENDIF 
  66091.                         
  66092.         WITH Thisform.CmbAttach as ComboBox 
  66093.             .AddItem(JUSTFNAME(lcFile))
  66094.             .List(.NewIndex, 2) = lcFile
  66095.             .ListIndex = 1
  66096.             .Refresh()
  66097.         ENDWITH
  66098.     ENDFOR
  66099. ENDIF 
  66100. Thisform.AddProperty("lCancelled", .F.)
  66101.     This.Icon = _goFP.cFormIcon
  66102. CATCH
  66103. ENDTRY
  66104.     WITH _goFP
  66105.         This.txtDestination.Value = .cEmailTo
  66106.         This.txtSubject.Value     = .cEmailSubject
  66107.         * This.edtBody.Value        =    .cEmailBody
  66108.         This.chkPriority.Value    = .lPriority
  66109.         This.chkReceipt.Value     = .lReadReceipt
  66110.         This.Caption              = .GetLoc("SENDEMAIL")
  66111.         This.CmdCancel.Caption    = .GetLoc("CANCEL")
  66112.         This.CmdSend.Caption      = .GetLoc("SEND")
  66113.         This.lblSubject.Caption   = .GetLoc("SUBJECT")
  66114.         This.lblTo.Caption        = .GetLoc("TO")
  66115.         * Determine if the fax button will be shown
  66116.         IF NOT EMPTY(.cFAXprg)
  66117.             Thisform.cmdSendFax.Visible = .T.
  66118.         ENDIF
  66119.         TRY 
  66120.             IF NOT EMPTY(_goFP.cEmailBody) OR NOT EMPTY(_goFP.cEmailBodyFile)
  66121.                 LOCAL lcHTMLFile
  66122.                 IF NOT EMPTY(_goFP.cEmailBody)
  66123.                     lcHTMLfile = FORCEEXT(ADDBS(SYS(2023))+SYS(2015),"htm")
  66124.                     STRTOFILE(_goFP.cEmailBody, lcHTMLFile)
  66125.                     Thisform.cTempFile = lcHTMLFile
  66126.                     INKEY(.1)
  66127.                 ELSE 
  66128.                     lcHTMLfile = _goFP.cEmailBodyFile
  66129.                 ENDIF 
  66130.                 IF FILE(lcHTMLfile)
  66131.                     WITH Thisform.Chtmleditor1.oIE
  66132.                         .Navigate(lcHTMLFile)
  66133.                         DO WHILE .ReadyState != 4
  66134.                             DOEVENTS
  66135.                         ENDDO
  66136.                         .Document.Body.contentEditable = .T.
  66137.                     ENDWITH
  66138.                     IF lcHTMLfile ==_goFP.cEmailBodyFile && Whithout this the "cEmailBodyFile" will be always deleted!!... by Nick Porfyris [20101213]...
  66139.                     ELSE
  66140.                         DELETE FILE (lcHTMLFile)
  66141.                     ENDIF
  66142.                 ENDIF
  66143.             ENDIF
  66144.         CATCH
  66145.             MESSAGEBOX("Could not load the HTML body file", 48, "Error loading HTML")
  66146.         ENDTRY
  66147.     ENDWITH
  66148. CATCH
  66149. ENDTRY
  66150. This.SetLanguage()
  66151. RETURN
  66152. *!*    XP Style WebBrowser Control 
  66153. *!*    I'm sure there is more then me that been looking for a way to get the XP style in the WebBrowser Control.
  66154. *!*    To enable the XP style in your web pages that you load in your WebBrowser Control put the following line in your head tags:
  66155. *!*    Code:
  66156. *!*    <META HTTP-EQUIV='MSThemeCompatible' CONTENT='Yes'>
  66157. *!*    * Testing code
  66158. *!*    TEXT TO lcHTML NOSHOW 
  66159. *!*    <HTML><HEAD>
  66160. *!*    <STYLE></STYLE>
  66161. *!*    </HEAD>
  66162. *!*    <BODY bgColor=#ffffff>
  66163. *!*    <FONT face=Verdana size=2>
  66164. *!*    <<lcLogoImg>>
  66165. *!*    To<BR></FONT>
  66166. *!*    <<tcHTMLbody>>
  66167. *!*    <BR>
  66168. *!*    <BR>
  66169. *!*    <FONT face=Verdana size=2>Sincerely</FONT>
  66170. *!*    <P></P>
  66171. *!*    <BR>
  66172. *!*    <HR><STRONG>
  66173. *!*    <FONT face=Verdana size=1>FoxyPreviewer team.</FONT></STRONG>
  66174. *!*    <FONT face=Arial color=black size=1><BR>
  66175. *!*    <FONT face=Verdana>1818 Super Street  -  Your Home<BR>05432-030  -  Your City -  XX</FONT><BR>
  66176. *!*    <FONT face=Wingdings color=black size=2>(</FONT><STRONG> </STRONG>
  66177. *!*    <FONT face=Verdana>Phone: 1 11 - 3322.2233 <BR></FONT>
  66178. *!*    <FONT face=Wingdings color=black size=2>(</FONT> 
  66179. *!*    <FONT face=Verdana>Fax:   2 11 - 3366.6656<BR></FONT>
  66180. *!*    <FONT face=Wingdings color=black size=2>*</FONT>
  66181. *!*    <A href="mailto:contact@mycompany.com"><FONT face=Verdana>contact@mycompany.com</FONT></A> </FONT>
  66182. *!*    <BR>
  66183. *!*    </HTML>
  66184. *!*    ENDTEXT
  66185. *!*        SET TEXTMERGE ON
  66186. *!*        lcHTML = TEXTMERGE(lcHTML,.T.,"<<",">>")
  66187. *!*        
  66188. *!*        lcFile = FORCEEXT(ADDBS(SYS(2023))+SYS(2015),"htm")
  66189. *!*        Thisform.cTempFile = lcFile
  66190. *!*        STRTOFILE(lcHTML, lcFile)
  66191. *!*        WITH Thisform.Chtmleditor1.oIE
  66192. *!*            .Navigate(lcFile)
  66193. *!*            DO WHILE .ReadyState != 4
  66194. *!*                DOEVENTS
  66195. *!*            ENDDO
  66196. *!*            .Document.Body.contentEditable = .T.
  66197. *!*        ENDWITH
  66198. * Article with all the EXECWB commands available
  66199. * http://delphicikk.atw.hu/listaz.php?id=1391&oldal=41
  66200. ENDPROC
  66201. PROCEDURE Activate
  66202. IF EMPTY(This.Comment)
  66203.     This.Width = This.Width + 1
  66204.     This.Comment = "Started"
  66205. ENDIF
  66206. ENDPROC
  66207. PROCEDURE Unload
  66208. *!*    * Restore ActiveX settings
  66209. *!*    _VFP.AutoYield = This._OrigAutoYield
  66210. *!*    SYS(2333, This._OrigSYS2333)
  66211. IF NOT EMPTY(Thisform.cTempFile)
  66212.         DELETE FILE (Thisform.cTempFile)
  66213.     CATCH
  66214.     ENDTRY
  66215. ENDIF
  66216. RETURN Thisform.lCancelled
  66217. ENDPROC
  66218. PROCEDURE Load
  66219. SET TALK OFF
  66220. SET CONSOLE OFF 
  66221. *!*    * Adjust some properties to make sure the WebBrowser active-X will work as desired
  66222. *!*    * http://www.tek-tips.com/viewthread.cfm?qid=1204873&page=168
  66223. *!*    This._OrigAutoYield = _VFP.AutoYield
  66224. *!*    This._OrigSYS2333   = VAL(SYS(2333, 2))
  66225. *!*    _VFP.AutoYield = .F.
  66226. *!*    SYS(2333, 1)
  66227. ENDPROC
  66228. The email/fax can't be sent because there is no FoxyPreviewer report active!
  66229. Error
  66230. <HTML>
  66231. </HTML>
  66232. contentEditable=true
  66233. COMBOBOX
  66234. THISFORM
  66235. CHTMLEDITOR1
  66236. LTOGGLEUPDATE
  66237. LCHTML
  66238. LCATTACH
  66239. _GOFP
  66240. CEMAILTO
  66241. TXTDESTINATION
  66242. VALUE
  66243. CEMAILSUBJECT
  66244. TXTSUBJECT
  66245. DOCUMENT
  66246. BODY    
  66247. OUTERHTML
  66248. CEMAILBODY    
  66249. CMBATTACH    
  66250. LISTCOUNT
  66251. _CATTACHMENT
  66252. LREADRECEIPT
  66253. CHKRECEIPT    
  66254. LPRIORITY
  66255. CHKPRIORITY
  66256. _LSENDINGFAX
  66257. RELEASE
  66258. Click,
  66259. pr_AdressBook(
  66260. LCADRESS
  66261. LCORIGADRESS
  66262. _GOFP
  66263. CADRESSTABLE
  66264. CADRESSSEARCH
  66265. PR_ADRESSBOOK
  66266. THISFORM
  66267. TXTDESTINATION
  66268. VALUE
  66269. SETFOCUS
  66270. THIS    
  66271. LOSTFOCUS
  66272. LOEXC
  66273. Click,
  66274. THISFORM
  66275. LCANCELLED
  66276. RELEASE
  66277. Click,
  66278. The email can't be sent because there is no FoxyPreviewer report active!
  66279. Error
  66280. <HTML>
  66281. </HTML>
  66282. contentEditable=true
  66283. COMBOBOX
  66284. THISFORM
  66285. CHTMLEDITOR1
  66286. LTOGGLEUPDATE
  66287. LCHTML
  66288. LCATTACH
  66289. _GOFP
  66290. CEMAILTO
  66291. TXTDESTINATION
  66292. VALUE
  66293. CEMAILSUBJECT
  66294. TXTSUBJECT
  66295. DOCUMENT
  66296. BODY    
  66297. OUTERHTML
  66298. CEMAILBODY    
  66299. CMBATTACH    
  66300. LISTCOUNT
  66301. _CATTACHMENT
  66302. LREADRECEIPT
  66303. CHKRECEIPT    
  66304. LPRIORITY
  66305. CHKPRIORITY
  66306. RELEASE
  66307. Click,
  66308. ATTACHFILE
  66309. COMBOBOX
  66310. LCFILE
  66311. _GOFP
  66312. GETLOC
  66313. THISFORM    
  66314. CMBATTACH
  66315. ADDITEM
  66316. NEWINDEX
  66317. REFRESH
  66318. VALUE
  66319. LCTTIP    
  66320. LISTCOUNT
  66321. TOOLTIPTEXT
  66322. THISFORM
  66323. REMOVEATTACHMENT
  66324. Click,
  66325. RightClick
  66326. THISFORM
  66327. REMOVEATTACHMENT
  66328. RightClick,
  66329. Arial, 0, 9, 5, 15, 12, 32, 3, 0
  66330. Arial, 1, 12, 8, 20, 15, 42, 4, 1
  66331. Arial, 2, 12, 7, 20, 16, 26, 3, 1
  66332. Arial, 4, 12, 7, 19, 15, 43, 3, 1
  66333. Wingdings, 0, 12, 14, 17, 14, 22, 3, 0
  66334. Wingdings, 0, 10, 12, 15, 12, 18, 3, 0
  66335. Arial, 0, 10, 6, 16, 13, 35, 3, 0
  66336. Arial, 0, 8, 5, 14, 11, 29, 3, 0
  66337. Top = 456
  66338. Left = 398
  66339. Height = 27
  66340. Width = 84
  66341. Anchor = 12
  66342. Picture = images\pr_fax.bmp
  66343. Caption = "Fax"
  66344. TabIndex = 4
  66345. Visible = .F.
  66346. PicturePosition = 0
  66347. Name = "cmdSendFax"
  66348. frmSendMail2
  66349. cmdSendFax
  66350. commandbutton
  66351. commandbutton
  66352. Top = 12
  66353. Left = 5
  66354. Height = 23
  66355. Width = 23
  66356. Picture = images\pr_adress.bmp
  66357. Caption = ""
  66358. TabIndex = 6
  66359. TabStop = .F.
  66360. SpecialEffect = 2
  66361. Name = "Command1"
  66362. frmSendMail2
  66363. Command1
  66364. commandbutton
  66365. commandbutton
  66366. IPROCEDURE Click
  66367. Thisform.lCancelled = .T.
  66368. Thisform.Release()
  66369. ENDPROC
  66370. frmSendMail2
  66371.     cmdCancel
  66372. commandbutton
  66373. ctempfile
  66374. _memberdata XML Metadata for customizable properties
  66375. _origautoyield
  66376. _origsys2333
  66377. *setlanguage 
  66378. *removeattachment 
  66379. chtmleditor
  66380. pr_htmledit.vcx
  66381.     container
  66382. Chtmleditor1
  66383. frmSendMail2
  66384. Anchor = 15
  66385. Top = 84
  66386. Left = 1
  66387. Width = 655
  66388. Height = 365
  66389. BorderWidth = 0
  66390. TabIndex = 3
  66391. Name = "Chtmleditor1"
  66392. oIE.Top = 48
  66393. oIE.Left = 0
  66394. oIE.Height = 120
  66395. oIE.Width = 132
  66396. oIE.TabIndex = 1
  66397. oIE.Name = "oIE"
  66398. tgBold.Alignment = 0
  66399. tgBold.TabIndex = 23
  66400. tgBold.Name = "tgBold"
  66401. tgItalic.Alignment = 0
  66402. tgItalic.TabIndex = 24
  66403. tgItalic.Name = "tgItalic"
  66404. tgUnderline.Alignment = 0
  66405. tgUnderline.TabIndex = 25
  66406. tgUnderline.Name = "tgUnderline"
  66407. tgLeft.Alignment = 0
  66408. tgLeft.TabIndex = 10
  66409. tgLeft.Name = "tgLeft"
  66410. tgCenter.Alignment = 0
  66411. tgCenter.TabIndex = 11
  66412. tgCenter.Name = "tgCenter"
  66413. tgRight.Alignment = 0
  66414. tgRight.TabIndex = 12
  66415. tgRight.Name = "tgRight"
  66416. btnForeColor.TabIndex = 26
  66417. btnForeColor.Name = "btnForeColor"
  66418. btnBackColor.TabIndex = 27
  66419. btnBackColor.Name = "btnBackColor"
  66420. cmbFontName.Height = 23
  66421. cmbFontName.Left = 0
  66422. cmbFontName.TabIndex = 21
  66423. cmbFontName.Top = 24
  66424. cmbFontName.Width = 154
  66425. cmbFontName.Name = "cmbFontName"
  66426. cmbFontSize.Alignment = 2
  66427. cmbFontSize.Height = 23
  66428. cmbFontSize.Left = 159
  66429. cmbFontSize.TabIndex = 22
  66430. cmbFontSize.Top = 24
  66431. cmbFontSize.Width = 47
  66432. cmbFontSize.Name = "cmbFontSize"
  66433. tgIncrease.Alignment = 0
  66434. tgIncrease.TabIndex = 16
  66435. tgIncrease.Name = "tgIncrease"
  66436. tgDecrease.Alignment = 0
  66437. tgDecrease.TabIndex = 15
  66438. tgDecrease.Name = "tgDecrease"
  66439. tgBullet.Alignment = 0
  66440. tgBullet.TabIndex = 14
  66441. tgBullet.Name = "tgBullet"
  66442. tgNumbers.Alignment = 0
  66443. tgNumbers.TabIndex = 29
  66444. tgNumbers.Name = "tgNumbers"
  66445. cmdHyperlink.TabIndex = 18
  66446. cmdHyperlink.Name = "cmdHyperlink"
  66447. cmdPicture.TabIndex = 19
  66448. cmdPicture.Name = "cmdPicture"
  66449. Label1.Left = 453
  66450. Label1.Top = 28
  66451. Label1.Visible = .F.
  66452. Label1.TabIndex = 28
  66453. Label1.Name = "Label1"
  66454. tgJustify.Alignment = 0
  66455. tgJustify.TabIndex = 13
  66456. tgJustify.Name = "tgJustify"
  66457. cmdOpen.Name = "cmdOpen"
  66458. cmdSave.cpropertyname = 
  66459. cmdSave.Name = "cmdSave"
  66460. cmdNew.Name = "cmdNew"
  66461. cmdCut.cpropertyname = Cut
  66462. cmdCut.Name = "cmdCut"
  66463. cmdCopy.cpropertyname = Copy
  66464. cmdCopy.Name = "cmdCopy"
  66465. cmdPaste.cpropertyname = Paste
  66466. cmdPaste.Name = "cmdPaste"
  66467. cmdUndo.cpropertyname = Undo
  66468. cmdUndo.Name = "cmdUndo"
  66469. cmdRedo.cpropertyname = Redo
  66470. cmdRedo.Name = "cmdRedo"
  66471. tgLine.TabIndex = 17
  66472. tgLine.Alignment = 0
  66473. tgLine.Name = "tgLine"
  66474. tgCLean.Top = 0
  66475. tgCLean.Left = 503
  66476. tgCLean.TabIndex = 20
  66477. tgCLean.Alignment = 0
  66478. tgCLean.Name = "tgCLean"
  66479. XPROCEDURE Resize
  66480. This.width=this.parent.width
  66481. This.height=this.parent.height - 115 &&  72
  66482. *!*    *this.top=0
  66483. *!*    *this.left=0
  66484. This.oIE.Width  = This.Width - 2
  66485. This.oIE.Height = This.Height - 60
  66486. ENDPROC
  66487. PROCEDURE cmdSave.Click
  66488. LOCAL lcHTML, lcFile, lcLocText
  66489. IF VARTYPE(_goFP) = "O"
  66490.     lcLocText = _goFP.GetLoc("SAVEASHTML")
  66491.     lcFile = IIF(EMPTY(_goFP.cOutputPath), "", ADDBS(_goFP.cOutputPath))
  66492.     lcQuestion = _goFP.GetLoc("HTMLDEFA")
  66493.     lcLocText = "Save as HTML"
  66494.     lcFile = ""
  66495.     lcQuestion = "Make the saved file the default email body in the next sessions?"
  66496. ENDIF
  66497. lcFile = PUTFILE(lcLocText + "...", lcFile, "Htm;Html")
  66498. IF NOT EMPTY(lcFile)
  66499.     lcHTML = "<HTML>" + Thisform.Chtmleditor1.oIE.Document.Body.OuterHTML + "</HTML>"
  66500.     lcHTML = STRTRAN(lcHTML, "contentEditable=true", "")
  66501.     STRTOFILE(lcHTML, lcFile)
  66502.     IF MESSAGEBOX(lcQuestion, 32 + 4, lcLocText) = 6 && Yes
  66503.         LOCAL lcAlias
  66504.         lcAlias  = SYS(2015)
  66505.         TRY
  66506.             USE ("FoxyPreviewer_Settings.dbf") IN 0 AGAIN SHARED ALIAS (lcAlias) && FP_Settings
  66507.             SELECT(lcAlias)
  66508.             LOCATE FOR ALLTRIM(UPPER(property)) == "CEMAILBODYFILE"     
  66509.             IF EOF()
  66510.                 APPEND BLANK
  66511.                 REPLACE Property WITH "cEmailBodyFile", ;
  66512.                     cValue WITH lcFile ;
  66513.                     IN (lcAlias)
  66514.             ELSE 
  66515.                 REPLACE cValue WITH lcFile IN (lcAlias)
  66516.             ENDIF
  66517.         CATCH TO loExc
  66518.             MESSAGEBOX("Error updating the settings file" + CHR(13) + CHR(13) + ;
  66519.                 TRANSFORM(loExc.ERRORNO) + " - " + loExc.MESSAGE + CHR(13) + ;
  66520.                 "Line: " + TRANSFORM(loExc.LINENO) + " - " + loExc.LINECONTENTS, 16, "Error")
  66521.             SET STEP ON 
  66522.         ENDTRY
  66523.         USE IN SELECT(lcAlias)
  66524.     ENDIF
  66525. ENDIF
  66526. ENDPROC
  66527. WIDTH
  66528. PARENT
  66529. HEIGHT
  66530. SAVEASHTML
  66531. HTMLDEFA
  66532. Save as HTML
  66533. Make the saved file the default email body in the next sessions?
  66534. Htm;Html
  66535. <HTML>
  66536. </HTML>
  66537. contentEditable=true
  66538. FoxyPreviewer_Settings.dbf
  66539. CEMAILBODYFILE
  66540. cEmailBodyFile
  66541. Error updating the settings fileC
  66542. Line: 
  66543. Error
  66544. LCHTML
  66545. LCFILE    
  66546. LCLOCTEXT
  66547. _GOFP
  66548. GETLOC
  66549. COUTPUTPATH
  66550. LCQUESTION
  66551. THISFORM
  66552. CHTMLEDITOR1
  66553. DOCUMENT
  66554. BODY    
  66555. OUTERHTML
  66556. LCALIAS
  66557. PROPERTY
  66558. CVALUE
  66559. LOEXC
  66560. ERRORNO
  66561. MESSAGE
  66562. LINENO
  66563. LINECONTENTS
  66564. Resize,
  66565. cmdSave.Click
  66566. textbox
  66567. textbox
  66568. txtDestination
  66569. frmSendMail2
  66570. Format = "K"
  66571. Height = 23
  66572. Left = 110
  66573. MaxLength = 255
  66574. TabIndex = 1
  66575. Top = 12
  66576. Width = 386
  66577. AutoComplete = 2
  66578. AutoCompTable = "FoxyPreviewer_Emails"
  66579. Name = "txtDestination"
  66580. textbox
  66581. textbox
  66582. TxtSubject
  66583. frmSendMail2
  66584. aFormat = "K"
  66585. Height = 23
  66586. Left = 110
  66587. TabIndex = 2
  66588. Top = 48
  66589. Width = 386
  66590. Name = "TxtSubject"
  66591. checkbox
  66592. checkbox
  66593. chkPriority
  66594. frmSendMail2
  66595. Top = 108
  66596. Left = 537
  66597. Height = 13
  66598. Width = 148
  66599. Alignment = 0
  66600. Caption = "Priority"
  66601. Value = .F.
  66602. TabIndex = 9
  66603. Visible = .T.
  66604. Name = "chkPriority"
  66605. checkbox
  66606. checkbox
  66607. chkReceipt
  66608. frmSendMail2
  66609. Top = 84
  66610. Left = 537
  66611. Height = 13
  66612. Width = 148
  66613. Alignment = 0
  66614. Caption = "Read receipt"
  66615. Value = .F.
  66616. TabIndex = 11
  66617. Visible = .T.
  66618. Name = "chkReceipt"
  66619. combobox
  66620. combobox
  66621.     cmbAttach
  66622. frmSendMail2
  66623. FontSize = 8
  66624. ColumnCount = 2
  66625. ColumnWidths = "160,0"
  66626. Height = 24
  66627. ColumnLines = .F.
  66628. Left = 537
  66629. Style = 2
  66630. TabIndex = 8
  66631. Top = 48
  66632. Width = 141
  66633. Name = "cmbAttach"
  66634. <PROCEDURE RightClick
  66635. Thisform.RemoveAttachment()
  66636. ENDPROC
  66637. Top = 456
  66638. Left = 592
  66639. Height = 27
  66640. Width = 84
  66641. Anchor = 12
  66642. Cancel = .T.
  66643. Caption = "Cancel"
  66644. TabIndex = 5
  66645. Name = "cmdCancel"
  66646. commandbutton
  66647. frmSendMail2
  66648. cmdSend
  66649. commandbutton
  66650. commandbutton
  66651. commandbutton
  66652. cmdAttachment
  66653. frmSendMail2
  66654. Top = 48
  66655. Left = 504
  66656. Height = 23
  66657. Width = 23
  66658. Picture = images\pr_attach.bmp
  66659. Caption = ""
  66660. TabIndex = 7
  66661. SpecialEffect = 2
  66662. Name = "cmdAttachment"
  66663. zPROCEDURE Click
  66664. LOCAL lcFile
  66665. lcFile = GETFILE("", _goFP.GetLoc("ATTACHFILE"))
  66666. * lcFile = GETFILE('', 'Anexar arquivo:', 'Anexar', 0, 'Anexar Arquivo')
  66667. IF NOT EMPTY(lcFile)
  66668.     WITH Thisform.CmbAttach as ComboBox 
  66669.         .AddItem(JUSTFNAME(lcFile))
  66670.         .List(.NewIndex, 2) = lcFile
  66671.         .Refresh()
  66672.     ENDWITH
  66673.     Thisform.CmbAttach.Value = JUSTFNAME(lcFile)
  66674.     LOCAL n, lcTTip
  66675.     lcTtip = ""
  66676.     FOR m.n = 1 TO Thisform.cmbAttach.ListCount 
  66677.         lcTTip = lcTTip + Thisform.CmbAttach.List(m.n,1) + CHR(13)
  66678.     ENDFOR
  66679.     Thisform.cmbAttach.ToolTipText = lcTTip
  66680. ENDIF
  66681. RETURN
  66682. ENDPROC
  66683. PROCEDURE RightClick
  66684. Thisform.RemoveAttachment()
  66685. ENDPROC
  66686. PROCEDURE Click
  66687. LOCAL lcAdress, lcOrigAdress
  66688. lcAdress = ""
  66689.     IF NOT EMPTY(_goFP.cAdressTable) AND NOT EMPTY(_goFP.cAdressSearch)
  66690.         DO FORM pr_AdressBook ; 
  66691.             WITH _goFP.cAdressTable, _goFP.cAdressSearch ;
  66692.             TO lcAdress
  66693.         IF NOT EMPTY(lcAdress) AND VARTYPE(lcAdress) = "C"
  66694.             lcOrigAdress = ALLTRIM(Thisform.TxtDestination.Value)
  66695.             IF EMPTY(lcOrigAdress)
  66696.                 Thisform.TxtDestination.Value = lcAdress
  66697.             ELSE
  66698.                 Thisform.TxtDestination.Value = lcOrigAdress + ";" + lcAdress
  66699.             ENDIF 
  66700.             Thisform.TxtDestination.SetFocus()
  66701.         ELSE 
  66702.             This.LostFocus()
  66703.         ENDIF 
  66704.     ENDIF
  66705. CATCH TO loExc
  66706.     SET STEP ON
  66707. ENDTRY 
  66708. ENDPROC
  66709. commandbutton
  66710. frmSendMail2
  66711. lblSubject
  66712. label
  66713. label
  66714. lblTo
  66715. frmSendMail2
  66716. }AutoSize = .T.
  66717. BackStyle = 0
  66718. Caption = "To:"
  66719. Height = 17
  66720. Left = 29
  66721. Top = 14
  66722. Width = 19
  66723. TabIndex = 10
  66724. Name = "lblTo"
  66725. label
  66726. label
  66727. AutoSize = .T.
  66728. BackStyle = 0
  66729. Caption = "Subject:"
  66730. Height = 17
  66731. Left = 8
  66732. Top = 50
  66733. Width = 46
  66734. TabIndex = 12
  66735. Name = "lblSubject"
  66736. Top = 456
  66737. Left = 495
  66738. Height = 27
  66739. Width = 84
  66740. Anchor = 12
  66741. Picture = images\pr_sendmessage.bmp
  66742. Caption = "Send"
  66743. TabIndex = 4
  66744. PicturePosition = 0
  66745. Name = "cmdSend"
  66746. PROCEDURE Click
  66747. Thisform.cHtmleditor1.lToggleUpdate = .F.
  66748. LOCAL lcHTML, lcAttach, i
  66749. IF VARTYPE(_goFP) <> "O"
  66750.     MESSAGEBOX("The email can't be sent because there is no FoxyPreviewer report active!", 16, "Error")
  66751.     RETURN
  66752. ENDIF
  66753. WITH _goFP
  66754.     .cEmailTo      = ALLTRIM(Thisform.txtDestination.Value)
  66755.     .cEmailSubject = ALLTRIM(Thisform.txtSubject.Value)
  66756.     lcHTML = "<HTML>" + Thisform.Chtmleditor1.oIE.Document.Body.OuterHTML + "</HTML>"
  66757.     lcHTML = STRTRAN(lcHTML, "contentEditable=true", "")
  66758.     .cEmailBody = lcHTML
  66759.     lcAttach = ""
  66760.     WITH Thisform.CmbAttach as ComboBox 
  66761.         FOR m.i = 1 TO .ListCount
  66762.             lcAttach = lcAttach + .List(m.i, 2) + ","
  66763.         ENDFOR
  66764.     ENDWITH
  66765.     lcAttach = LEFT(lcAttach, LEN(lcAttach) - 1)
  66766.     ._cAttachment   = lcAttach
  66767.     .lReadReceipt  = Thisform.chkReceipt.Value
  66768.     .lPriority     = Thisform.chkPriority.Value
  66769. ENDWITH 
  66770. Thisform.Release()
  66771. RETURN
  66772. ENDPROC
  66773. PROCEDURE Click
  66774. Thisform.cHtmleditor1.lToggleUpdate = .F.
  66775. LOCAL lcHTML, lcAttach, i
  66776. IF VARTYPE(_goFP) <> "O"
  66777.     MESSAGEBOX("The email/fax can't be sent because there is no FoxyPreviewer report active!", 16, "Error")
  66778.     RETURN
  66779. ENDIF
  66780. WITH _goFP
  66781.     .cEmailTo      = ALLTRIM(Thisform.txtDestination.Value)
  66782.     .cEmailSubject = ALLTRIM(Thisform.txtSubject.Value)
  66783.     lcHTML = "<HTML>" + Thisform.Chtmleditor1.oIE.Document.Body.OuterHTML + "</HTML>"
  66784.     lcHTML = STRTRAN(lcHTML, "contentEditable=true", "")
  66785.     .cEmailBody = lcHTML
  66786.     lcAttach = ""
  66787.     WITH Thisform.CmbAttach as ComboBox 
  66788.         FOR m.i = 1 TO .ListCount
  66789.             lcAttach = lcAttach + .List(m.i, 2) + ","
  66790.         ENDFOR
  66791.     ENDWITH
  66792.     lcAttach = LEFT(lcAttach, LEN(lcAttach) - 1)
  66793.     ._cAttachment   = lcAttach
  66794.     .lReadReceipt  = Thisform.chkReceipt.Value
  66795.     .lPriority     = Thisform.chkPriority.Value
  66796.     ._lSendingFax  = .T.
  66797. ENDWITH 
  66798. Thisform.Release()
  66799. RETURN
  66800. ENDPROC
  66801. EXCEPTION
  66802. SUBJECT
  66803. ATTACHMENT
  66804. ATTACHMENT
  66805. PRIORITY
  66806. RECEIPT
  66807. ITALIC
  66808. ITALIC
  66809. UNDERLINE
  66810. UNDERLINE
  66811. ALIGNLEFT
  66812. ALIGNCENTE
  66813. ALIGNRIGHT
  66814. ALIGNJUSTI
  66815. HYPERLINK
  66816. ADDPICTURE
  66817. INDENTREDU
  66818. INDENTINCR
  66819. HORIZBAR
  66820. CLEANFORMT
  66821. LISTBULLET
  66822. LISTNUMBER
  66823. PASTE
  66824. HTMLMODEL
  66825. SAVEASHTML
  66826. FONTNAME
  66827. FONTSIZE
  66828. FONTCOLOR
  66829. BACKCOLOR
  66830. LOEXC
  66831. _GOFP
  66832. LBLTO
  66833. CAPTION
  66834. GETLOC
  66835. LBLSUBJECT
  66836. CMDATTACHMENT
  66837. TOOLTIPTEXT    
  66838. CMBATTACH
  66839. CHKPRIORITY
  66840. CHKRECEIPT
  66841. CHTMLEDITOR1
  66842. TGBOLD
  66843. TGITALIC
  66844. TGUNDERLINE
  66845. TGLEFT
  66846. TGCENTER
  66847. TGRIGHT    
  66848. TGJUSTIFY
  66849. CMDHYPERLINK
  66850. CMDPICTURE
  66851. TGDECREASE
  66852. TGINCREASE
  66853. TGLINE
  66854. TGCLEAN
  66855. TGBULLET    
  66856. TGNUMBERS
  66857. CMDCOPY
  66858. CMDCUT
  66859. CMDPASTE
  66860. CMDOPEN
  66861. CMDSAVE
  66862. CMDNEW
  66863. CMDUNDO
  66864. CMDREDO
  66865. CMBFONTNAME
  66866. CMBFONTSIZE
  66867. BTNFORECOLOR
  66868. BTNBACKCOLORr
  66869. CANCEL
  66870. REMOVEFILE
  66871. Cancel
  66872. Remove file
  66873. COMBOBOX
  66874. lnOption = BAR()
  66875. LNOPTION
  66876. LCCANCEL
  66877. LCREMOVE
  66878. _GOFP
  66879. GETLOC
  66880. LOLIST
  66881. THISFORM    
  66882. CMBATTACH
  66883. MYSHORTCUT
  66884. LISTITEM    
  66885. LISTINDEX
  66886. REMOVELISTITEM
  66887. LISTITEMID
  66888. COMBOBOX
  66889. COMBOBOX
  66890. lCancelled-
  66891. SENDEMAIL
  66892. CANCEL
  66893. SUBJECT
  66894. Could not load the HTML body file
  66895. Error loading HTML
  66896. TCFILE
  66897. THISFORM    
  66898. CMBATTACH
  66899. ADDITEM
  66900. NEWINDEX    
  66901. LISTINDEX
  66902. REFRESH
  66903. LCATTACH
  66904. LCFILE
  66905. _GOFP
  66906. CATTACHMENTS
  66907. ADDPROPERTY
  66908. ICON    
  66909. CFORMICON
  66910. TXTDESTINATION
  66911. VALUE
  66912. CEMAILTO
  66913. TXTSUBJECT
  66914. CEMAILSUBJECT
  66915. CHKPRIORITY    
  66916. LPRIORITY
  66917. CHKRECEIPT
  66918. LREADRECEIPT
  66919. CAPTION
  66920. GETLOC    
  66921. CMDCANCEL
  66922. CMDSEND
  66923. LBLSUBJECT
  66924. LBLTO
  66925. CFAXPRG
  66926. CMDSENDFAX
  66927. VISIBLE
  66928. CEMAILBODY
  66929. CEMAILBODYFILE
  66930. LCHTMLFILE    
  66931. CTEMPFILE
  66932. CHTMLEDITOR1
  66933. NAVIGATE
  66934. READYSTATE
  66935. DOCUMENT
  66936. CONTENTEDITABLE
  66937. SETLANGUAGEG
  66938. Started
  66939. COMMENT
  66940. WIDTHH
  66941. THISFORM    
  66942. CTEMPFILE
  66943. LCANCELLED
  66944. setlanguage,
  66945. removeattachment
  66946. Activate
  66947. Unload
  66948. Loade
  66949. PLATFORM
  66950. UNIQUEID
  66951. TIMESTAMP
  66952. CLASS
  66953. CLASSLOC
  66954. BASECLASS
  66955. OBJNAME
  66956. PARENT
  66957. PROPERTIES
  66958. PROTECTED
  66959. METHODS
  66960. OBJCODE
  66961. RESERVED1
  66962. RESERVED2
  66963. RESERVED3
  66964. RESERVED4
  66965. RESERVED5
  66966. RESERVED6
  66967. RESERVED7
  66968. RESERVED8
  66969.  COMMENT Class               
  66970.  WINDOWS _1740W7OC6 813201933
  66971.  COMMENT RESERVED            
  66972.  WINDOWS _1740WXCG0 813202935
  66973.  COMMENT RESERVED            
  66974.  WINDOWS _1740QHB8J 827741504@F
  66975.  COMMENT RESERVED            
  66976.  WINDOWS _1740W78J0 922511065q
  66977.  COMMENT RESERVED            
  66978.  WINDOWS _1731BXUH2 925330000mF
  66979.  COMMENT RESERVED            
  66980.  WINDOWS _1740S4S5B1031176059
  66981.  COMMENT RESERVED            
  66982.  WINDOWS _1740QGBYD1033747498
  66983.  WINDOWS _1740RH5FM 925330789
  66984.  WINDOWS _1740S7WUJ1030405923qR
  66985.  WINDOWS _1740SF2VG1030405923
  66986.  WINDOWS _1740SF2W01030405923    Q
  66987.  WINDOWS _1740SNVJQ1030402864
  66988.  WINDOWS _1740SNVKA1030402864
  66989.  WINDOWS _1740W7OC61030402864
  66990.  WINDOWS _1740W7OC61030402864
  66991.  WINDOWS _1740W0P9C1033746905
  66992.  WINDOWS _1740WA4YL1030402864
  66993.  WINDOWS _1740X64WS1030402864
  66994.  WINDOWS _1740Y1B1R1030402864
  66995.  WINDOWS _1740Y1B2B1030402864f>
  66996.  WINDOWS _1740YB8XA1030402864D=
  66997.  WINDOWS _1740YB8XU1030402864!<
  66998.  WINDOWS _1740Z7TQJ1030402864
  66999.  WINDOWS _1740Z7TRD1030402864
  67000.  WINDOWS _1750K7E5L1030402132T8
  67001.  WINDOWS _32M1DWMRJ1030402864
  67002.  WINDOWS _3300XEAYB1031175409
  67003.  WINDOWS _3300XEAYC1031176583P1
  67004.  WINDOWS _3300XEAYD1031175409
  67005.  WINDOWS _3300XEAYE1031176033R.
  67006.  WINDOWS _3300XEAYR1031176285:-
  67007.  WINDOWS _3300XEAYS1031176285
  67008.  WINDOWS _3300XEAYT1031176285
  67009.  WINDOWS _3300XEAYU1031176285
  67010.  WINDOWS _3300YECRE1031176285
  67011.  WINDOWS _1740W7OC6 813201933
  67012.  COMMENT RESERVED            
  67013. VERSION =   3.00
  67014. !Arial, 0, 9, 5, 15, 12, 16, 3, 0
  67015. Pixels
  67016. Class
  67017. combobox
  67018. cpropertyname
  67019. _memberdata
  67020. combobox
  67021. about:blank
  67022. PARENT
  67023. NAVIGATE
  67024. READYSTATE
  67025. REFRESH
  67026. Click,
  67027. InsertImagea
  67028. PARENT
  67029. DOCUMENT
  67030. EXECCOMMAND
  67031. Click,
  67032. Pixels
  67033. pr_HtmlEdit.vcx
  67034. pr_HtmlEdit.vcx
  67035. LCFILE
  67036. PARENT
  67037. NAVIGATE
  67038. READYSTATE
  67039. DOCUMENT
  67040. CONTENTEDITABLE
  67041. REFRESH
  67042. SETFOCUS
  67043. Click,
  67044. Inner
  67045. Outer
  67046. Importar texto de arquivo TXT
  67047. Copiar HTML
  67048. Copiar Texto
  67049. MESSAGEBOX(oThis.oIE.Document.Body.InnerHTML)
  67050. MESSAGEBOX(oThis.oIE.Document.Body.OuterHTML)
  67051. oThis.oIE.Document.Body.innerHTML = GETFILE("txt")
  67052. _ClipText = oThis.oIE.Document.Body.innerHTML
  67053. _ClipText = oThis.oIE.Document.Body.innerTEXT
  67054. OTHIS
  67055. PARENT
  67056. Click,
  67057. CreateLinka
  67058. PARENT
  67059. DOCUMENT
  67060. EXECCOMMAND
  67061. Click,
  67062. FontSize-
  67063. PARENT
  67064. DOCUMENT
  67065. EXECCOMMAND
  67066. VALUE
  67067. InteractiveChange,
  67068. FontName-
  67069. PARENT
  67070. DOCUMENT
  67071. EXECCOMMAND
  67072. DISPLAYVALUE
  67073. InteractiveChange,
  67074. ForeColor-
  67075. LNCOLOR
  67076. LCCOLOR
  67077. PARENT
  67078. DOCUMENT
  67079. EXECCOMMAND
  67080. Click,
  67081. chtmleditor
  67082. combobox
  67083. HHeight = 23
  67084. Width = 177
  67085. cpropertyname = FontName
  67086. Name = "cfontname"
  67087. PROCEDURE Init
  67088. This.AddProperty("aNames[1]","")
  67089. =AFONT(This.aNames)
  67090. This.RowSource = "This.aNames"
  67091. This.RowSourceType = 5 
  67092. This.Value = "Arial"
  67093. ENDPROC
  67094.     cfontname
  67095. nHeight = 23
  67096. Style = 2
  67097. TabStop = .F.
  67098. Width = 100
  67099. _memberdata = 
  67100.      526<?xml version="1.0"     encoding="Windows-1252" standalone="yes" ?>     
  67101. <VFPData>
  67102. <memberdata name="foomethod" type="method"     display="fooMethod"     favorites="True"/>
  67103. <memberdata name="_cbo" type="property" display="_cbo" favorites="True"/>
  67104. <memberdata name="_memberdata" type="property" display="_MemberData" favorites="True"/>
  67105. <memberdata name="baseclass" type="property" display="BaseClasS" favorites="True"/>
  67106. <memberdata name="error" type="method" display="eRRor" favorites="True"/>
  67107. </VFPData>
  67108. Name = "_cbo"
  67109. BackColor-
  67110. LNCOLOR
  67111. LCCOLOR
  67112. PARENT
  67113. DOCUMENT
  67114. EXECCOMMAND
  67115. BGCOLOR
  67116. Click,
  67117. COMMAND
  67118. ENABLE
  67119. PARENT
  67120. TOGGLESTATUS
  67121. PARENT
  67122. ACTIVATECOMMANDS
  67123. CommandStateChange,
  67124. DownloadComplete
  67125. CTOGGLE
  67126. OTOGGLE
  67127. OBJECTS
  67128. CLASS
  67129. DOCUMENT
  67130. QUERYCOMMANDENABLED
  67131. CPROPERTYNAME
  67132. CTOGGLE
  67133. LTOGGLEUPDATE
  67134. OTOGGLE
  67135. LOCATIONURL
  67136. OBJECTS
  67137. CLASS
  67138. VALUE
  67139. DOCUMENT
  67140. QUERYCOMMANDVALUE
  67141. CPROPERTYNAME
  67142. PARENTCLASS
  67143. JUSTIFYC
  67144. JustifyNone
  67145. TCPROPERTYNAME
  67146. DOCUMENT
  67147. QUERYCOMMANDVALUE
  67148. EXECCOMMAND
  67149. SETFOCUSg
  67150. WIDTH
  67151. PARENT
  67152. HEIGHT
  67153. RESIZE
  67154. DOCUMENT
  67155. BODY    
  67156. OUTERHTML
  67157. activatecommands,
  67158. togglestatus
  67159. toggle-
  67160. Resize
  67161. RightClick
  67162. CPROPERTYNAME
  67163. PARENT
  67164. TOGGLE
  67165. Click,
  67166. DOCUMENT
  67167. CONTENTEDITABLEz
  67168. about:blank
  67169. LNLOADTIMEOUT
  67170. OBJECT
  67171. NAVIGATE
  67172. LNSTARTSECONDS
  67173. READYSTATE=
  67174. LFIRSTREFRESH
  67175. DOCUMENT
  67176. CONTENTEDITABLE
  67177. DownloadComplete,
  67178. Initn
  67179. Refresh/
  67180. PARENT
  67181. TOGGLE
  67182. CPROPERTYNAME
  67183. Click,
  67184. DblClickn
  67185. RightClicky
  67186. ADDITEM
  67187. Init,
  67188. Class
  67189.     container
  67190. chtmleditor
  67191. aNames[1]
  67192. This.aNames
  67193. Arial
  67194. ADDPROPERTY
  67195. ANAMES    
  67196. ROWSOURCE
  67197. ROWSOURCETYPE
  67198. VALUE
  67199. Init,
  67200. Arial, 1, 12, 8, 20, 15, 42, 4, 1
  67201. Arial, 2, 12, 7, 20, 16, 30, 3, 1
  67202. Arial, 4, 12, 7, 19, 15, 43, 3, 1
  67203. Wingdings, 0, 12, 14, 17, 14, 22, 3, 0
  67204. Wingdings, 0, 10, 12, 15, 12, 18, 3, 0
  67205. Arial, 0, 9, 5, 15, 12, 32, 3, 0
  67206. Arial, 0, 10, 6, 16, 13, 35, 3, 0
  67207. Top = 24
  67208. Left = 428
  67209. Picture = images\pr_clean.bmp
  67210. Caption = ""
  67211. ToolTipText = "Remove formatting"
  67212. SpecialEffect = 2
  67213. Alignment = 0
  67214. cpropertyname = RemoveFormat
  67215. Name = "tgClean"
  67216. chtmleditor
  67217. tgClean
  67218. commandbutton
  67219. pr_htmledit.vcx
  67220. cbutton
  67221. Top = 0
  67222. Left = 428
  67223. FontName = "Arial"
  67224. Caption = "--"
  67225. ToolTipText = "Insert horizontal line"
  67226. SpecialEffect = 2
  67227. Alignment = 2
  67228. cpropertyname = InsertHorizontalRule
  67229. Name = "tgLine"
  67230. chtmleditor
  67231. tgLine
  67232. commandbutton
  67233. pr_htmledit.vcx
  67234. cbutton
  67235. Top = 0
  67236. Left = 183
  67237. Picture = images\pr_redo.bmp
  67238. Caption = ""
  67239. ToolTipText = "Redo"
  67240. SpecialEffect = 2
  67241. Alignment = 0
  67242. cpropertyname = Redo
  67243. Name = "cmdRedo"
  67244. chtmleditor
  67245. cmdRedo
  67246. commandbutton
  67247. pr_htmledit.vcx
  67248. cbutton
  67249. Top = 0
  67250. Left = 159
  67251. FontName = "Wingdings"
  67252. Picture = images\pr_undo.bmp
  67253. Caption = ""
  67254. ToolTipText = "Undo"
  67255. SpecialEffect = 2
  67256. Alignment = 0
  67257. cpropertyname = Undo
  67258. Name = "cmdUndo"
  67259. chtmleditor
  67260. cmdUndo
  67261. commandbutton
  67262. pr_htmledit.vcx
  67263. cbutton
  67264. Top = 0
  67265. Left = 131
  67266. FontName = "Wingdings"
  67267. Picture = images\pr_paste.bmp
  67268. Caption = ""
  67269. ToolTipText = "Paste"
  67270. SpecialEffect = 2
  67271. Alignment = 0
  67272. cpropertyname = Paste
  67273. Name = "cmdPaste"
  67274. chtmleditor
  67275. cmdPaste
  67276. commandbutton
  67277. pr_htmledit.vcx
  67278. cbutton
  67279. Top = 0
  67280. Left = 107
  67281. FontName = "Wingdings"
  67282. Picture = images\pr_copy.bmp
  67283. Caption = ""
  67284. ToolTipText = "Copy"
  67285. SpecialEffect = 2
  67286. Alignment = 0
  67287. cpropertyname = Copy
  67288. Name = "cmdCopy"
  67289. chtmleditor
  67290. cmdCopy
  67291. commandbutton
  67292. pr_htmledit.vcx
  67293. cbutton
  67294. Top = 0
  67295. Left = 83
  67296. FontName = "Wingdings"
  67297. Picture = images\pr_cut.bmp
  67298. Caption = ""
  67299. ToolTipText = "Cut"
  67300. SpecialEffect = 2
  67301. Alignment = 0
  67302. cpropertyname = Cut
  67303. Name = "cmdCut"
  67304. chtmleditor
  67305. cmdCut
  67306. commandbutton
  67307. pr_htmledit.vcx
  67308. cbutton
  67309. PROCEDURE Click
  67310. WITH this.Parent.OiE
  67311.     .navigate("about:blank")
  67312.     DO WHILE (.busy) OR (.ReadyState != 4)
  67313.         DOEVENTS
  67314.     ENDDO
  67315. ENDWITH
  67316. this.Parent.refresh
  67317. ENDPROC
  67318. Top = 0
  67319. Left = 50
  67320. FontName = "Wingdings"
  67321. Picture = images\pr_new.bmp
  67322. Caption = ""
  67323. Enabled = .T.
  67324. ToolTipText = "New..."
  67325. SpecialEffect = 2
  67326. Alignment = 0
  67327. Name = "cmdNew"
  67328. chtmleditor
  67329. cmdNew
  67330. commandbutton
  67331. pr_htmledit.vcx
  67332. cbutton
  67333. Top = 0
  67334. Left = 26
  67335. FontName = "Wingdings"
  67336. Picture = images\pr_save.bmp
  67337. Caption = ""
  67338. Enabled = .T.
  67339. ToolTipText = "Save as HTML..."
  67340. SpecialEffect = 2
  67341. Alignment = 0
  67342. cpropertyname = SaveAs
  67343. Name = "cmdSave"
  67344. chtmleditor
  67345. cmdSave
  67346. commandbutton
  67347. pr_htmledit.vcx
  67348. cbutton
  67349. PROCEDURE Click
  67350. NODEFAULT
  67351. LOCAL lcFile
  67352. lcFile=GETFILE("htm*")
  67353. IF !EMPTY(lcFile)
  67354.     WITH this.Parent.oIE
  67355.         .Navigate(lcFile)
  67356.         DO WHILE .ReadyState != 4
  67357.             DOEVENTS
  67358.         ENDDO
  67359.         .Document.Body.contentEditable = .T.
  67360.         .Refresh()
  67361.         .SetFocus()
  67362.     ENDWITH
  67363. ENDIF
  67364. ENDPROC
  67365. Top = 0
  67366. Left = 2
  67367. FontName = "Wingdings"
  67368. Picture = images\pr_open.bmp
  67369. Caption = ""
  67370. Enabled = .T.
  67371. ToolTipText = "Open HTML file..."
  67372. SpecialEffect = 2
  67373. Alignment = 0
  67374. Name = "cmdOpen"
  67375. chtmleditor
  67376. cmdOpen
  67377. commandbutton
  67378. pr_htmledit.vcx
  67379. cbutton
  67380. Top = 0
  67381. Left = 288
  67382. Picture = images\pr_align_justify.bmp
  67383. Alignment = 0
  67384. Caption = ""
  67385. SpecialEffect = 2
  67386. ToolTipText = "Justify"
  67387. cpropertyname = JustifyFull
  67388. Name = "tgJustify"
  67389. chtmleditor
  67390.     tgJustify
  67391. checkbox
  67392. pr_htmledit.vcx
  67393. ctoggle
  67394. PROCEDURE Click
  67395. define popup pop1 shortcut
  67396. define bar 1 of pop1 prompt "Inner"
  67397. define bar 2 of pop1 prompt "Outer"
  67398. define bar 3 of pop1 prompt "Importar texto de arquivo TXT"
  67399. define bar 4 of pop1 prompt "Copiar HTML"
  67400. define bar 5 of pop1 prompt "Copiar Texto"
  67401. private oThis
  67402. oThis = This.Parent
  67403. on selection bar 1 of pop1 MESSAGEBOX(oThis.oIE.Document.Body.InnerHTML)
  67404. on selection bar 2 of pop1 MESSAGEBOX(oThis.oIE.Document.Body.OuterHTML)
  67405. on selection bar 3 of pop1 oThis.oIE.Document.Body.innerHTML = GETFILE("txt")
  67406. on selection bar 4 of pop1 _ClipText = oThis.oIE.Document.Body.innerHTML
  67407. on selection bar 5 of pop1 _ClipText = oThis.oIE.Document.Body.innerTEXT
  67408. activate popup pop1 AT MROW(),MCOL()
  67409. ENDPROC
  67410. AutoSize = .F.
  67411. Alignment = 2
  67412. BorderStyle = 1
  67413. Caption = "More..."
  67414. Height = 19
  67415. Left = 374
  67416. Top = 27
  67417. Width = 44
  67418. Name = "Label1"
  67419. chtmleditor
  67420. Label1
  67421. label
  67422. label
  67423. SPROCEDURE Click
  67424. This.Parent.oIE.Document.execCommand("InsertImage",.T.)
  67425. ENDPROC
  67426. Top = 0
  67427. Left = 474
  67428. Picture = images\pr_getimage.bmp
  67429. Caption = ""
  67430. ToolTipText = "Insert picture"
  67431. SpecialEffect = 2
  67432. Name = "cmdPicture"
  67433. chtmleditor
  67434. cmdPicture
  67435. commandbutton
  67436. pr_htmledit.vcx
  67437. cbutton
  67438. SPROCEDURE Click
  67439. This.Parent.oIE.Document.execCommand("CreateLink", .T.)
  67440. ENDPROC
  67441. Top = 0
  67442. Left = 451
  67443. Picture = images\pr_hyperlink.bmp
  67444. Caption = ""
  67445. ToolTipText = "Create a hyperlink"
  67446. SpecialEffect = 2
  67447. Name = "cmdHyperlink"
  67448. chtmleditor
  67449. cmdHyperlink
  67450. commandbutton
  67451. pr_htmledit.vcx
  67452. cbutton
  67453. Top = 0
  67454. Left = 341
  67455. Picture = images\pr_listnumber.bmp
  67456. Alignment = 0
  67457. Caption = ""
  67458. SpecialEffect = 2
  67459. ToolTipText = "Formatting numbers"
  67460. cpropertyname = InsertOrderedList
  67461. Name = "tgNumbers"
  67462. chtmleditor
  67463.     tgNumbers
  67464. checkbox
  67465. pr_htmledit.vcx
  67466. ctoggle
  67467. Top = 0
  67468. Left = 317
  67469. Picture = images\pr_listdot.bmp
  67470. Alignment = 0
  67471. Caption = ""
  67472. SpecialEffect = 2
  67473. ToolTipText = "Formatting bullets"
  67474. cpropertyname = InsertUnOrderedList
  67475. Name = "tgBullet"
  67476. chtmleditor
  67477. tgBullet
  67478. checkbox
  67479. pr_htmledit.vcx
  67480. ctoggle
  67481. Top = 0
  67482. Left = 372
  67483. Picture = images\pr_textmoveleft.bmp
  67484. Alignment = 0
  67485. Caption = ""
  67486. SpecialEffect = 2
  67487. ToolTipText = "Decrease indentation"
  67488. cpropertyname = Outdent
  67489. Name = "tgDecrease"
  67490. chtmleditor
  67491. tgDecrease
  67492. checkbox
  67493. pr_htmledit.vcx
  67494. ctoggle
  67495. Top = 0
  67496. Left = 398
  67497. Picture = images\pr_textmoveright.bmp
  67498. Alignment = 0
  67499. Caption = ""
  67500. SpecialEffect = 2
  67501. ToolTipText = "Increase indentation"
  67502. cpropertyname = Indent
  67503. Name = "tgIncrease"
  67504. chtmleditor
  67505. tgIncrease
  67506. checkbox
  67507. pr_htmledit.vcx
  67508. ctoggle
  67509. iPROCEDURE InteractiveChange
  67510. This.Parent.oIE.Document.execCommand("FontSize",.F.,This.Value)
  67511. ENDPROC
  67512. `Height = 23
  67513. Left = 129
  67514. ToolTipText = "Font size"
  67515. Top = 24
  67516. Width = 54
  67517. Name = "cmbFontSize"
  67518. chtmleditor
  67519. cmbFontSize
  67520. combobox
  67521. pr_htmledit.vcx
  67522.     cfontsize
  67523. pPROCEDURE InteractiveChange
  67524. This.Parent.oIE.Document.execCommand("FontName",.F.,This.DisplayValue)
  67525. ENDPROC
  67526. _Height = 23
  67527. Left = 0
  67528. ToolTipText = "Font name"
  67529. Top = 24
  67530. Width = 127
  67531. Name = "cmbFontName"
  67532. chtmleditor
  67533. cmbFontName
  67534. combobox
  67535. pr_htmledit.vcx
  67536.     cfontname
  67537. Top = 24
  67538. Left = 341
  67539. Picture = images\pr_fontback.bmp
  67540. Caption = ""
  67541. ToolTipText = "Background color"
  67542. SpecialEffect = 2
  67543. ForeColor = 0,0,255
  67544. Name = "btnBackColor"
  67545. chtmleditor
  67546. btnBackColor
  67547. commandbutton
  67548. pr_htmledit.vcx
  67549. cbutton
  67550. Top = 24
  67551. Left = 317
  67552. Picture = images\pr_textcolor.bmp
  67553. Caption = ""
  67554. ToolTipText = "Cor do Texto"
  67555. SpecialEffect = 2
  67556. ForeColor = 0,0,255
  67557. Name = "btnForeColor"
  67558. chtmleditor
  67559. btnForeColor
  67560. commandbutton
  67561. pr_htmledit.vcx
  67562. cbutton
  67563. Acpropertyname The name of the property this command will toggle
  67564. 'Wingdings, 0, 12, 14, 17, 14, 22, 3, 0
  67565. Class
  67566. chtmleditor
  67567. tgRight
  67568. checkbox
  67569. pr_htmledit.vcx
  67570. ctoggle
  67571. ctoggle
  67572. chtmleditor
  67573. tgCenter
  67574. checkbox
  67575. Class
  67576. Pixels
  67577.     cfontsize
  67578. !Arial, 0, 9, 5, 15, 12, 32, 3, 0
  67579. +OLEObject = C:\WINNT\System32\shdocvw.dll
  67580. Elfirstrefresh
  67581. _memberdata XML Metadata for customizable properties
  67582. checkbox
  67583. checkbox
  67584. olecontrol
  67585. olecontrol
  67586. Class
  67587. Pixels
  67588. Class
  67589.     cfontsize
  67590. ctoggle
  67591. Pixels
  67592. Pixels
  67593.     cfontname
  67594. !Arial, 0, 9, 5, 15, 12, 32, 3, 0
  67595. *update 
  67596. combobox
  67597. TAlignment = 1
  67598. Value = 1
  67599. Width = 45
  67600. cpropertyname = FontSize
  67601. Name = "cfontsize"
  67602. PROCEDURE Click
  67603. This.Parent.Toggle(This.cPropertyName)
  67604. ENDPROC
  67605. PROCEDURE DblClick
  67606. NODEFAULT 
  67607. ENDPROC
  67608. PROCEDURE RightClick
  67609. NODEFAULT 
  67610. ENDPROC
  67611. Height = 23
  67612. Width = 23
  67613. FontName = "Wingdings"
  67614. FontSize = 12
  67615. Alignment = 0
  67616. Caption = "C"
  67617. Value = .F.
  67618. Style = 1
  67619. TabStop = .F.
  67620. Name = "ctoggle"
  67621. PROCEDURE Init
  67622. This.AddItem("8")
  67623. This.AddItem("10")
  67624. This.AddItem("12")
  67625. This.AddItem("14")
  67626. This.AddItem("18")
  67627. This.AddItem("24")
  67628. This.AddItem("36")
  67629. ENDPROC
  67630. xPROCEDURE Click
  67631. LOCAL lnColor, lcColor
  67632. lnColor = GETCOLOR()
  67633. IF lnColor > -1
  67634.    lcColor = RIGHT(TRANSFORM(lnColor,"@0"),6)
  67635.    lcColor = RIGHT(lcColor, 2)+ SUBSTR(lcColor,3,2)+ LEFT(lcColor,2)
  67636.    This.Parent.oIE.Document.execCommand("BackColor",.F.,lcColor)
  67637. ENDIF
  67638. RETURN
  67639. * Not used any more
  67640. * This converted the whole document BackColor instead of the current selection
  67641. LOCAL lnColor, lcColor
  67642. lnColor = GETCOLOR()
  67643. IF lnColor > -1
  67644.    lcColor = RIGHT(TRANSFORM(lnColor,"@0"),6)
  67645.    lcColor = RIGHT(lcColor, 2)+ SUBSTR(lcColor,3,2)+ LEFT(lcColor,2)
  67646.    This.Parent.oIE.Document.bgColor = lcColor
  67647. ENDIF
  67648. ENDPROC
  67649. PROCEDURE Click
  67650. LOCAL lnColor, lcColor
  67651. lnColor = GETCOLOR()
  67652. IF lnColor > -1
  67653.    lcColor = RIGHT(TRANSFORM(lnColor,"@0"),6)
  67654.    lcColor = RIGHT(lcColor, 2)+ SUBSTR(lcColor,3,2)+ LEFT(lcColor,2)
  67655.    This.Parent.oIE.Document.execCommand("ForeColor",.F.,lcColor)
  67656. ENDIF
  67657. ENDPROC
  67658. Top = 0
  67659. Left = 264
  67660. Picture = images\pr_align_right.bmp
  67661. Alignment = 0
  67662. Caption = ""
  67663. SpecialEffect = 2
  67664. ToolTipText = "Align right"
  67665. cpropertyname = JustifyRight
  67666. Name = "tgRight"
  67667. Top = 0
  67668. Left = 240
  67669. Picture = images\pr_align_center.bmp
  67670. Alignment = 0
  67671. Caption = ""
  67672. SpecialEffect = 2
  67673. ToolTipText = "Center"
  67674. cpropertyname = JustifyCenter
  67675. Name = "tgCenter"
  67676. pr_htmledit.vcx
  67677. ctoggle
  67678. Top = 0
  67679. Left = 216
  67680. Picture = images\pr_align_left.bmp
  67681. Alignment = 0
  67682. Caption = ""
  67683. SpecialEffect = 2
  67684. ToolTipText = "Align left"
  67685. cpropertyname = JustifyLeft
  67686. Name = "tgLeft"
  67687. chtmleditor
  67688. tgLeft
  67689. checkbox
  67690. pr_htmledit.vcx
  67691. ctoggle
  67692. Top = 24
  67693. Left = 264
  67694. FontName = "Arial"
  67695. FontUnderline = .T.
  67696. Alignment = 0
  67697. Caption = "U"
  67698. SpecialEffect = 2
  67699. ToolTipText = "Underline"
  67700. cpropertyname = Underline
  67701. Name = "tgUnderline"
  67702. chtmleditor
  67703. tgUnderline
  67704. checkbox
  67705. pr_htmledit.vcx
  67706. ctoggle
  67707. Top = 24
  67708. Left = 240
  67709. FontItalic = .T.
  67710. FontName = "Arial"
  67711. Alignment = 0
  67712. Caption = "I"
  67713. SpecialEffect = 2
  67714. ToolTipText = "Italic"
  67715. cpropertyname = Italic
  67716. Name = "tgItalic"
  67717. chtmleditor
  67718. tgItalic
  67719. checkbox
  67720. pr_htmledit.vcx
  67721. ctoggle
  67722. chtmleditor
  67723. tgBold
  67724. checkbox
  67725. pr_htmledit.vcx
  67726. ctoggle
  67727. chtmleditor
  67728. cbutton
  67729. gHeight = 100
  67730. Width = 100
  67731. lfirstrefresh = .T.
  67732. _memberdata = 
  67733.      524<?xml version="1.0"     encoding="Windows-1252" standalone="yes" ?>     
  67734. <VFPData>
  67735. <memberdata name="foomethod" type="method"     display="fooMethod"     favorites="True"/>
  67736. <memberdata name="cie" type="property" display="cie" favorites="True"/>
  67737. <memberdata name="_memberdata" type="property" display="_MemberData" favorites="True"/>
  67738. <memberdata name="baseclass" type="property" display="BaseClasS" favorites="True"/>
  67739. <memberdata name="error" type="method" display="eRRor" favorites="True"/>
  67740. </VFPData>
  67741. Name = "cie"
  67742. PROCEDURE DownloadComplete
  67743. *** ActiveX Control Event ***
  67744. * Set the edit mode on
  67745. *THIS.Document.designMode = "On"  && This gives a different context menu
  67746. This.Document.Body.contentEditable = .T.  && This is a good context menu
  67747. ENDPROC
  67748. PROCEDURE Init
  67749. * Navigate to a blank page
  67750. *This.Navigate2("About:Blank")
  67751. * Prevent an OLE error, and wait until the object
  67752. * gets the blank page open before showing or accessing
  67753. LOCAL lnLoadTimeout
  67754. lnLoadTimeout = 3       && seconds
  67755. WITH This.OBJECT
  67756.     .Navigate("about:blank")
  67757.     * Wait for load completion
  67758.     lnStartSeconds = SECONDS()
  67759.     DO WHILE .ReadyState <> 4 ;
  67760.             AND (SECONDS()-lnStartSeconds <= lnLoadTimeout )
  67761.         DOEVENTS
  67762.     ENDDO
  67763. ENDWITH
  67764. ENDPROC
  67765. PROCEDURE Refresh
  67766. *** ActiveX Control Method ***
  67767. IF This.lFirstRefresh
  67768.    NODEFAULT
  67769.    This.lFirstRefresh = .F.
  67770.    This.Document.Body.contentEditable = .T.
  67771. ENDIF
  67772. ENDPROC
  67773. Top = 24
  67774. Left = 216
  67775. FontBold = .T.
  67776. FontName = "Arial"
  67777. Alignment = 0
  67778. Caption = "B"
  67779. SpecialEffect = 2
  67780. ToolTipText = "Bold"
  67781. cpropertyname = Bold
  67782. Name = "tgBold"
  67783. -OLEObject = C:\Windows\system32\ieframe.dll
  67784. PROCEDURE CommandStateChange
  67785. *** ActiveX Control Event ***
  67786. LPARAMETERS command, enable
  67787. This.Parent.ToggleStatus()
  67788. DODEFAULT(command, enable)
  67789. ENDPROC
  67790. PROCEDURE DownloadComplete
  67791. *** ActiveX Control Event ***
  67792. DODEFAULT()
  67793. This.Parent.Activatecommands()
  67794. ENDPROC
  67795. fTop = 48
  67796. Left = 0
  67797. Height = 100
  67798. Width = 100
  67799. _memberdata = 
  67800.      524<?xml version="1.0"     encoding="Windows-1252" standalone="yes" ?>     
  67801. <VFPData>
  67802. <memberdata name="foomethod" type="method"     display="fooMethod"     favorites="True"/>
  67803. <memberdata name="oIE" type="property" display="oIE" favorites="True"/>
  67804. <memberdata name="_memberdata" type="property" display="_MemberData" favorites="True"/>
  67805. <memberdata name="baseclass" type="property" display="BaseClasS" favorites="True"/>
  67806. <memberdata name="error" type="method" display="eRRor" favorites="True"/>
  67807. </VFPData>
  67808. Name = "oIE"
  67809. olecontrol
  67810. pr_htmledit.vcx
  67811. s_memberdata XML Metadata for customizable properties
  67812. ltoggleupdate
  67813. *activatecommands 
  67814. *togglestatus 
  67815. *toggle 
  67816. PROCEDURE activatecommands
  67817. LOCAL oToggle
  67818. FOR EACH oToggle IN This.Objects
  67819.    IF UPPER(oToggle.Class) = "CTOGGLE"
  67820.       This.oIE.Document.queryCommandEnabled(oToggle.cPropertyName)
  67821. *      oToggle.Refresh()
  67822.    ENDIF
  67823. ENDPROC
  67824. PROCEDURE togglestatus
  67825. IF This.lToggleUpdate 
  67826.     LOCAL oToggle
  67827.     IF NOT EMPTY(This.oIE.LocationURL)
  67828.     FOR EACH oToggle IN This.Objects
  67829.        IF UPPER(oToggle.Class) = "CTOGGLE"
  67830.           oToggle.Value = This.oIE.Document.QueryCommandValue(oToggle.cPropertyName)
  67831.     *      oToggle.Refresh()
  67832.        ENDIF
  67833.        IF UPPER(oToggle.ParentClass) = "_CBO"
  67834.           oToggle.Value = This.oIE.Document.queryCommandValue(oToggle.cPropertyName)
  67835.        ENDIF
  67836.     NEXT
  67837.     ENDIF
  67838. ENDIF 
  67839. ENDPROC
  67840. PROCEDURE toggle
  67841. LPARAMETERS tcPropertyName
  67842. IF "JUSTIFY" $ UPPER(tcPropertyName)
  67843.    IF This.oIE.Document.queryCommandValue(tcPropertyName)
  67844.       tcPropertyName = "JustifyNone"
  67845.    ENDIF
  67846. ENDIF
  67847. This.oIE.Document.execCommand(tcPropertyName)
  67848. This.oIE.SetFocus()
  67849. ENDPROC
  67850. PROCEDURE Resize
  67851. This.width=this.parent.width
  67852. This.height=this.parent.height - 72
  67853. *!*    *this.top=0
  67854. *!*    *this.left=0
  67855. This.oIE.Width  = This.Width - 2
  67856. This.oIE.Height = This.Height - 60
  67857. ENDPROC
  67858. PROCEDURE Init
  67859. This.Resize()
  67860. ENDPROC
  67861. PROCEDURE RightClick
  67862. MESSAGEBOX(This.oIE.Document.Body.OuterHTML)
  67863. ENDPROC
  67864.     container
  67865. commandbutton
  67866. mPROCEDURE Click
  67867. IF NOT EMPTY(This.cPropertyName)
  67868.     This.Parent.Toggle(This.cPropertyName)
  67869. ENDIF 
  67870. ENDPROC
  67871. Ecpropertyname
  67872. _memberdata XML Metadata for customizable properties
  67873. cbutton
  67874. commandbutton
  67875. Class
  67876. Pixels
  67877. 'Wingdings, 0, 10, 12, 15, 12, 18, 3, 0
  67878. Height = 23
  67879. Width = 23
  67880. FontName = "Wingdings"
  67881. FontSize = 10
  67882. Caption = "C"
  67883. TabStop = .F.
  67884. SpecialEffect = 2
  67885. cpropertyname = 
  67886. _memberdata = 
  67887.       79<VFPData><memberdata name="cpropertyname" display="cPropertyName"/></VFPData>
  67888. Name = "cbutton"
  67889. Width = 633
  67890. Height = 324
  67891. BackStyle = 0
  67892. BorderWidth = 0
  67893. _memberdata = 
  67894.      546<?xml version="1.0" standalone="yes"?>
  67895. <VFPData>
  67896.     <memberdata name="foomethod" type="method" display="fooMethod" favorites="True"/>
  67897.     <memberdata name="chtmleditor" type="property" display="chtmleditor" favorites="True"/>
  67898.     <memberdata name="_memberdata" type="property" display="_MemberData" favorites="True"/>
  67899.     <memberdata name="baseclass" type="property" display="BaseClasS" favorites="True"/>
  67900.     <memberdata name="error" type="method" display="eRRor" favorites="True"/>
  67901.     <memberdata name="ltoggleupdate" display="lToggleUpdate"/></VFPData>
  67902. ltoggleupdate = .T.
  67903. Name = "chtmleditor"
  67904. xH@@``````
  67905. \KF\KF\KF
  67906. \KF\KF\KF\KF\KF\KF\KF\KF\KF
  67907. \KF\KF\KF
  67908. \KF\KF\KF\KF\KF\KF\KF\KF\KF
  67909. \KF\KF\KF
  67910. \KF\KF\KF\KF\KF\KF\KF\KF\KF
  67911. \KF\KF\KF
  67912. \KF\KF\KF\KF\KF\KF\KF\KF\KF
  67913.                     
  67914. gOwW?
  67915. gOwW?
  67916. `P(`P(h`0@
  67917. 0P (X 0` P
  67918. PLATFORM
  67919. UNIQUEID
  67920. TIMESTAMP
  67921. CLASS
  67922. CLASSLOC
  67923. BASECLASS
  67924. OBJNAME
  67925. PARENT
  67926. PROPERTIES
  67927. PROTECTED
  67928. METHODS
  67929. OBJCODE
  67930. RESERVED1
  67931. RESERVED2
  67932. RESERVED3
  67933. RESERVED4
  67934. RESERVED5
  67935. RESERVED6
  67936. RESERVED7
  67937. RESERVED8
  67938.  COMMENT Screen              
  67939.  WINDOWS _34Q0PJ4TY1043685131
  67940.  WINDOWS _34Q0PJ4TZ1092440545
  67941.  WINDOWS _34Q0PJ4U010454791088)
  67942.  WINDOWS _34Q0PJ4U11045105636
  67943.  WINDOWS _34Q0PJ4U610451058997(
  67944.  WINDOWS _35800F2H41045128535
  67945.  WINDOWS _35A033NLY1045107191
  67946.  WINDOWS _35A033NLZ1045105899
  67947.  WINDOWS _34Q0PJ4TY1045479237
  67948.  WINDOWS _35G1FDGMD1045479237:$
  67949.  COMMENT RESERVED            
  67950. VERSION =   3.00
  67951. dataenvironment
  67952. dataenvironment
  67953. Dataenvironment
  67954. YTop = 0
  67955. Left = 0
  67956. Width = 0
  67957. Height = 0
  67958. DataSource = .NULL.
  67959. Name = "Dataenvironment"
  67960. Form1
  67961. CHeight = 422
  67962. Width = 635
  67963. Desktop = .T.
  67964. DoCreate = .T.
  67965. ShowTips = .T.
  67966. AutoCenter = .T.
  67967. Caption = "Select recipients"
  67968. Closable = .F.
  67969. WindowType = 1
  67970. ngridx = 0
  67971. ngridy = 0
  67972. crecipients = 
  67973. _memberdata = 
  67974.      529<VFPData><memberdata name="crecipients" display="cRecipients"/><memberdata name="updatesearchfld" display="UpdateSearchFld"/><memberdata name="csearchfield" display="cSearchField"/><memberdata name="doselectall" display="DoSelectAll"/><memberdata name="dounselectall" display="DoUnselectAll"/><memberdata name="doselectinvert" display="DoSelectInvert"/><memberdata name="setlanguage" display="SetLanguage"/><memberdata name="clocsearchfld" display="cLocSearchFld"/><memberdata name="lclosetable" display="lCloseT<VFPData><memberd
  67975. csearchfield = 
  67976. clocsearchfld = Search field
  67977. lclosetable = .F.
  67978. Name = "Form1"
  67979. bPROCEDURE updatesearchfld
  67980. LPARAMETERS tcField
  67981. Thisform.cSearchField = tcField
  67982. Thisform.lblSearchFld.Caption = Thisform.cLocSearchFld + ": " + PROPER(tcField)
  67983. ENDPROC
  67984. PROCEDURE doselectall
  67985. Local lnRec
  67986. lnRec = Recno(Thisform.Grid1.RecordSource)
  67987. Update (Thisform.Grid1.RecordSource) Set lSelected = not lSelected
  67988. Go (m.lnRec)
  67989. Thisform.Refresh()
  67990. ENDPROC
  67991. PROCEDURE dounselectall
  67992. Local lnRec
  67993. lnRec = Recno(Thisform.Grid1.RecordSource)
  67994. Update (Thisform.Grid1.RecordSource) Set lSelected = .F.
  67995. Go (m.lnRec)
  67996. Thisform.Refresh()
  67997. ENDPROC
  67998. PROCEDURE setlanguage
  67999. LOCAL loExc as Exception 
  68000.     WITH This
  68001.         LOCAL lcCaption
  68002.         lcCaption = _goFP.GetLoc("SEARCHFLD")
  68003.         .lblSearchFld.Caption = lcCaption
  68004.         .cLocSearchFld        = lcCaption
  68005.         .CmdOk.Caption        = _goFP.GetLoc("GOTOPG_OK")
  68006.         .CmdCancel.Caption    = _goFP.GetLoc("CANCEL")
  68007.         .Caption              = _goFP.GetLoc("SELECTRECI")
  68008.     ENDWITH
  68009. CATCH TO loExc
  68010.     SET STEP ON 
  68011. ENDTRY 
  68012. ENDPROC
  68013. PROCEDURE Load
  68014. SET TALK OFF
  68015. SET CONSOLE OFF 
  68016. IF VARTYPE(_goFP) <> "O"
  68017.     * Creating the cursor with the adress book
  68018.     SELECT CAST(LOWER(GETWORDNUM(Contact, 1, " "))+"@vfp.com" AS C(30)) As email,* From (_samples + '\data\customer') ;
  68019.         Where .T. Into Cursor Test Readwrite
  68020. ENDIF
  68021.     LOCAL loDummy as Image 
  68022.     loDummy = CREATEOBJECT("Image")
  68023.     loDummy.Picture = "images\pr_locate.bmp"
  68024. CATCH
  68025. ENDTRY
  68026. ENDPROC
  68027. PROCEDURE Init
  68028. *!*    Author      : Soykan OZCELIK
  68029. *!*    Description : email adress collector for FoxyPreviewer SendMail Form
  68030. *!*    Usage       : Do form GetEmailAdress with "YourCursor","YourSearchField"
  68031. *!*    Important   : YourCursor must contain "email" field which is filled contact emails
  68032. *!* to testing this form first create test cursor with below codes
  68033. *!*    Select "s@s.com" as email,* FROM (_samples + '\data\customer') Where .T. Into Cursor Test readwrite
  68034. *!* You can create your own cursors to test this form
  68035. LPARAMETERS tcCursor,tcSearchField
  68036. IF EMPTY(tcCursor)
  68037.     tcCursor = ALIAS()
  68038. ENDIF
  68039. LOCAL llError
  68040. llError = .F.
  68041. IF NOT USED(tcCursor)
  68042.     TRY 
  68043.         USE (tcCursor) AGAIN IN 0 SHARED ALIAS C_AdressBook
  68044.         * This.lCloseTable = .T.
  68045.         tcCursor = "C_AdressBook"
  68046.     CATCH
  68047.         MESSAGEBOX("Could not load the adress book table!", 48, "Error")
  68048.         llError = .T.
  68049.     ENDTRY     
  68050. ENDIF 
  68051. IF llError
  68052.     RETURN .F.
  68053. ENDIF 
  68054. IF EMPTY(tcSearchField)
  68055.     tcSearchField = "EMAIL"  && "Contact"
  68056. ENDIF
  68057. Thisform.UpdateSearchFld(tcSearchField)
  68058. TEXT TO m.lcSQL TEXTMERGE NOSHOW
  68059.     SELECT .F. AS lSelected, * FROM ;
  68060.     <<m.tcCursor>>  WHERE .t. ;
  68061.     INTO CURSOR CrsAdresses READWRITE
  68062. ENDTEXT
  68063. EXECSCRIPT(m.lcSQL)
  68064. GO TOP
  68065. * Close the table if it was passed as a file
  68066. IF tcCursor = "C_AdressBook"
  68067.     USE IN SELECT("C_AdressBook")
  68068. ENDIF
  68069. Thisform.cSearchField = m.tcSearchField
  68070.     This.Icon= "pr_mail03.ico"
  68071.     *    This.Icon= HOME() + "Graphics\Icons\Mail\mail03.ico"
  68072. CATCH
  68073. ENDTRY
  68074. With This.Grid1 as Grid
  68075.     .RecordSource=""
  68076.     .RecordSource="CrsAdresses"
  68077.     .ColumnCount = FCOUNT(.RecordSource)
  68078.     .LockColumns = 1
  68079.     LOCAL loColumn as Column 
  68080.     FOR EACH loColumn IN .Columns
  68081.         WITH loColumn.header1
  68082.             .FontBold  = .T.
  68083.             .FontSize  = 9
  68084.             .Alignment = 3
  68085.             .ForeColor = RGB(255,0,0)
  68086.             IF EMPTY(loColumn.ControlSource)
  68087.                 loColumn.Visible = .F.
  68088.             ENDIF
  68089.         ENDWITH
  68090.     ENDFOR
  68091.     Thisform.Gridsort1.BindControl()
  68092.     With .Column1
  68093.         LOCAL loHeader as Header
  68094.         loHeader = .header1
  68095.         WITH loHeader as Header
  68096.             .FontName="wingdings"
  68097.             .Caption = Chr(0xFC) &&"Checkbox"
  68098.             .Alignment = 2
  68099.             * UNBINDEVENTS(loHeader) &&, "DblClick")
  68100.             BINDEVENT(loHeader, "DblClick", This, "DoSelectAll")
  68101.             BINDEVENT(loHeader, "RightClick", This, "DoUnselectAll")
  68102.         ENDWITH
  68103.         .Alignment = 2
  68104.         .Width = 20
  68105.         .AddObject("Check1","CheckBox")
  68106.         .Sparse = .F.
  68107.         .CurrentControl = "Check1"
  68108.         With .Check1
  68109.             .Alignment = 2
  68110.             .Caption = ""
  68111.             .Name = "Check1"
  68112.             .Visible = .T.
  68113.         Endwith
  68114.         .RemoveObject("text1")
  68115.     Endwith
  68116.     .AutoFit()
  68117.     This.Grid1.Column1.Alignment = 2
  68118.     .SetAll("DynamicForeColor", "ICASE(lSelected=.t.,RGB(255,0,0),lSelected=.f.,RGB(0,0,0))" , "Column")
  68119.     .SetAll("DynamicFontBold", "lSelected=.t." , "Column")
  68120. ENDWITH
  68121. IF VARTYPE(_goFP) = "O"
  68122.     This.SetLanguage()
  68123. ENDIF
  68124. ENDPROC
  68125. PROCEDURE Destroy
  68126. Use In (This.Grid1.RecordSource)
  68127. If Used("CrsTemp")
  68128.     Use In "CrsTemp"
  68129. Endif
  68130. ENDPROC
  68131. PROCEDURE Unload
  68132. IF NOT EMPTY(Thisform.cRecipients)
  68133.     RETURN Thisform.cRecipients
  68134. ENDIF 
  68135. ENDPROC
  68136. THISFORM
  68137. RELEASE
  68138. Click,
  68139. No Selected e-mails...
  68140. Safetyv
  68141. emails
  68142. EMAIL
  68143. THISFORM
  68144. GRID1
  68145. RECORDSOURCE    
  68146. LSELECTED
  68147. EMAILS
  68148. ACTIVEFORM
  68149. CAPTION
  68150. LCRECIPENTLIST
  68151. CRECIPIENTS
  68152. RELEASE
  68153. Click,
  68154. LNRELCOL
  68155. LNRELROW
  68156. LNWHERE
  68157. GRIDHITTEST
  68158. THISFORM
  68159. NGRIDX
  68160. NGRIDY
  68161. COLUMNS
  68162. CHECK1
  68163. VALUE
  68164. REFRESH
  68165. LNRELCOL
  68166. LNRELROW
  68167. LNWHERE
  68168. GRIDHITTEST
  68169. THISFORM
  68170. NGRIDX
  68171. NGRIDY
  68172. COLUMNS
  68173. CHECK1
  68174. VALUE6
  68175. NBUTTON
  68176. NSHIFT
  68177. NXCOORD
  68178. NYCOORD
  68179. THISFORM
  68180. NGRIDX
  68181. NGRIDY
  68182. DblClick,
  68183. Click3
  68184. MouseDown:
  68185.             SELECT RECNO() as nrec,* FROM <<m.lcAlias>> ;
  68186.             WHERE LOWER(<<m.lcSearchField>>) ;
  68187.             like '%' + '<<m.lcSearchValue>>' + '%';
  68188.             INTO CURSOR CrsTemp
  68189. VALUE
  68190. LCSEARCHVALUE
  68191. LCSEARCHFIELD
  68192. LCALIAS
  68193. LNSELECT
  68194. THISFORM
  68195. GRID1
  68196. RECORDSOURCE
  68197. CSEARCHFIELD
  68198. LCSEARCHSQL
  68199. CRSTEMP
  68200. REFRESH
  68201. Valid,
  68202. !Arial, 0, 9, 5, 15, 12, 32, 3, 0
  68203. aTop = 0
  68204. Left = 7
  68205. Width = 24
  68206. Height = 21
  68207. BackStyle = 0
  68208. BorderWidth = 0
  68209. Name = "Container1"
  68210. Form1
  68211. Container1
  68212.     container
  68213.     container
  68214. Top = -1
  68215. Left = 8
  68216. Height = 22
  68217. Width = 24
  68218. Picture = images\pr_locate.bmp
  68219. Caption = ""
  68220. TabStop = .F.
  68221. SpecialEffect = 2
  68222. Name = "Command1"
  68223. Form1
  68224. Command1
  68225. commandbutton
  68226. commandbutton
  68227. .PROCEDURE Click
  68228. Thisform.Release()
  68229. ENDPROC
  68230. Top = 387
  68231. Left = 539
  68232. Height = 27
  68233. Width = 84
  68234. Anchor = 12
  68235. Cancel = .T.
  68236. Caption = "Cancel"
  68237. TabIndex = 5
  68238. Name = "cmdCancel"
  68239. Form1
  68240.     cmdCancel
  68241. commandbutton
  68242. commandbutton
  68243. kTop = 387
  68244. Left = 443
  68245. Height = 27
  68246. Width = 84
  68247. Anchor = 12
  68248. Caption = "Ok"
  68249. TabIndex = 4
  68250. Name = "cmdOK"
  68251. Form1
  68252. cmdOK
  68253. commandbutton
  68254. commandbutton
  68255. Top = 396
  68256. Left = 12
  68257. Height = 17
  68258. Width = 36
  68259. cgrideval = Thisform.Grid1
  68260. csortascendinggraphic = images\pr_sortascending.bmp
  68261. csortdescendinggraphic = images\pr_sortDescending.bmp
  68262. Name = "Gridsort1"
  68263. Form1
  68264.     Gridsort1
  68265. custom
  68266. pr_rcsgridsort.vcx
  68267. gridsort
  68268. Form1
  68269. Grid1
  68270. Form1
  68271. textbox
  68272. ngridx
  68273. ngridy
  68274. crecipients
  68275. _memberdata XML Metadata for customizable properties
  68276. csearchfield
  68277. clocsearchfld
  68278. lclosetable
  68279. *updatesearchfld 
  68280. *doselectall 
  68281. *dounselectall 
  68282. *doselectinvert 
  68283. *setlanguage 
  68284. label
  68285. label
  68286. lblSearchFld
  68287. Form1
  68288. AutoSize = .T.
  68289. BackStyle = 0
  68290. Caption = "Search Field : "
  68291. Height = 17
  68292. Left = 37
  68293. Top = 3
  68294. Width = 80
  68295. ForeColor = 255,0,0
  68296. Name = "lblSearchFld"
  68297. textbox
  68298.     TxtSearch
  68299. BHeight = 25
  68300. Left = 8
  68301. Top = 21
  68302. Width = 227
  68303. Name = "TxtSearch"
  68304. PROCEDURE Valid
  68305. IF NOT EMPTY(This.Value)
  68306.     Local lcSearchValue,lcSearchField,lcAlias,lnSelect
  68307.     lcAlias = Thisform.Grid1.RecordSource
  68308.     lcSearchField = Thisform.cSearchField
  68309.     lcSearchValue = Chrtran(Trim(LOWER(This.Value)),"'","%")
  68310.     lnSelect = Select(0)
  68311.     TEXT TO m.lcSearchSQL TEXTMERGE noshow
  68312.             SELECT RECNO() as nrec,* FROM <<m.lcAlias>> ;
  68313.             WHERE LOWER(<<m.lcSearchField>>) ;
  68314.             like '%' + '<<m.lcSearchValue>>' + '%';
  68315.             INTO CURSOR CrsTemp
  68316.     ENDTEXT
  68317.     *_Cliptext = m.lcSearchSQL
  68318.     Execscript(m.lcSearchSQL)
  68319.     If _Tally # 0
  68320.         Select (Thisform.Grid1.RecordSource)
  68321.         Go (CrsTemp.nrec) In (Thisform.Grid1.RecordSource)
  68322.         Thisform.Refresh()
  68323.     ENDIF
  68324. ENDIF
  68325. ENDPROC
  68326. (PROCEDURE Click
  68327. Select email From (Thisform.Grid1.RecordSource);
  68328.     Where Lselected ;
  68329.     And ;
  68330.     Not Empty(email) Into Array emails
  68331. If _Tally = 0
  68332.     Messagebox('No Selected e-mails...',16,_Screen.ActiveForm.Caption)
  68333.     Return
  68334. Endif
  68335. If Set("Safety")='ON'
  68336.     Set Safety Off
  68337. Endif
  68338. Local lcRecipentList
  68339. lcRecipentList=""
  68340. For ix=1 To Alen("emails")
  68341.     lcRecipentList = lcRecipentList+Trim(emails[ix])+";"
  68342. Endfor
  68343. m.lcRecipentList = Left(m.lcRecipentList,Len(m.lcRecipentList)-1)
  68344. Thisform.cRecipients = m.lcRecipentList
  68345. Thisform.Release
  68346. ENDPROC
  68347. Anchor = 15
  68348. DeleteMark = .F.
  68349. Height = 331
  68350. Left = 8
  68351. RecordMark = .F.
  68352. Top = 50
  68353. Width = 620
  68354. GridLineColor = 192,192,192
  68355. HighlightBackColor = 159,159,208
  68356. HighlightForeColor = 255,255,255
  68357. HighlightStyle = 2
  68358. AllowCellSelection = .F.
  68359. Name = "Grid1"
  68360. lPROCEDURE DblClick
  68361. Local lnRelCol, lnRelRow, lnWhere
  68362. Store 0 To lnWhere, lnRelRow, lnRelCol
  68363. This.GridHitTest(Thisform.ngridx, Thisform.ngridy, @lnWhere, @lnRelRow, @lnRelCol)
  68364. If lnWhere = 3            && Cell
  68365. *    If lnRelCol = 1        && column 1
  68366.         This.Columns(1).Check1.Value = Not This.Columns(1).Check1.Value
  68367. *    Endif
  68368. ENDIF
  68369. Thisform.Refresh()
  68370. ENDPROC
  68371. PROCEDURE Click
  68372. Local lnRelCol, lnRelRow, lnWhere
  68373. Store 0 To lnWhere, lnRelRow, lnRelCol
  68374. This.GridHitTest(Thisform.ngridx, Thisform.ngridy, @lnWhere, @lnRelRow, @lnRelCol)
  68375. If lnWhere = 3            && Cell
  68376.     If lnRelCol = 1        && column 1
  68377.         This.Columns(lnRelCol).Check1.Value = Not This.Columns(lnRelCol).Check1.Value
  68378.     Endif
  68379. Endif
  68380. ENDPROC
  68381. PROCEDURE MouseDown
  68382. Lparameters nButton, nShift, nXCoord, nYCoord
  68383. * Save mouse position to use in Grid.Click
  68384. Thisform.ngridx = nXCoord
  68385. Thisform.ngridy = nYCoord
  68386. ENDPROC
  68387. PROCEDURE Init
  68388. ******************************************************************
  68389. *  FUNCTION NAME: Init
  68390. *  AUTHOR, DATE:
  68391. *      Paul Mrozowski, 5/7/2007  
  68392. *  PROCEDURE DESCRIPTION:
  68393. *      Get things started.
  68394. *  INPUT PARAMETERS:
  68395. *      None
  68396. *  OUTPUT PARAMETERS:
  68397. *      None
  68398. ******************************************************************
  68399. This.oIndex = CREATEOBJECT("Collection")
  68400. * This.BindControl()
  68401. ENDPROC
  68402. PROCEDURE bindcontrol
  68403. ******************************************************************
  68404. *  FUNCTION NAME: Bindcontrol
  68405. *  AUTHOR, DATE:
  68406. *      Paul Mrozowski, 5/7/2007  
  68407. *  PROCEDURE DESCRIPTION:
  68408. *      Bind us to the headers in the grid.
  68409. *  INPUT PARAMETERS:
  68410. *      None
  68411. *  OUTPUT PARAMETERS:
  68412. *      None
  68413. ******************************************************************
  68414. LOCAL loGrid AS Grid, ;
  68415.       loColumn AS Column, ;
  68416.       loControl
  68417.    loGrid = EVALUATE(This.cGridEval)
  68418.    IF TYPE("loGrid") = "O"
  68419.       FOR EACH loColumn IN loGrid.Columns
  68420.           FOR EACH loControl IN loColumn.Controls
  68421.               IF loControl.BaseClass = "Header"
  68422.                  BINDEVENT(loControl, "DblClick", This, "Sort")
  68423.                  BINDEVENT(loControl, "RightClick", This, "Search")
  68424.                  EXIT
  68425.               ENDIF
  68426.           ENDFOR          
  68427.       ENDFOR
  68428.       
  68429.       IF PEMSTATUS(loGrid, "SaveSource", 5) 
  68430.          IF This.cAutoCleanOn = "S"
  68431.             BINDEVENT(loGrid, "SaveSource", This, "Cleanup")
  68432.          ENDIF 
  68433.          
  68434.          IF This.cAutoCleanOn = "R"
  68435.             BINDEVENT(loGrid, "RestoreSource", This, "Cleanup")
  68436.          ENDIF 
  68437.          
  68438.       ENDIF
  68439.    ENDIF
  68440. CATCH
  68441.    MESSAGEBOX("This.cGridEval doesn't evaluate to an object: " + This.cGridEval)
  68442. ENDTRY
  68443. ENDPROC
  68444. PROCEDURE search
  68445. LOCAL loGrid AS Grid, ;
  68446.     lcRecordSource, ;
  68447.     loEx AS Exception, ;
  68448.     laEvent[1], ;
  68449.     loHeader AS Header, ;
  68450.     loColumn AS Column, ;
  68451.     lcControlSource, ;
  68452.     lcIndexFile, ;
  68453.     luKey, ;
  68454.     lcField
  68455.     lnSelect = SELECT()
  68456.     loGrid = EVALUATE(This.cGridEval)
  68457.     IF TYPE("loGrid") <> "O"
  68458.         EXIT
  68459.     ENDIF
  68460.     IF EMPTY(This.cRecordSource)
  68461.         lcRecordSource = ALLTRIM(loGrid.RecordSource)
  68462.     ELSE
  68463.         lcRecordSource = ALLTRIM(This.cRecordSource)
  68464.     ENDIF
  68465.     IF !EMPTY(lcRecordSource)
  68466.         AEVENTS(laEvent, 0)
  68467.         loHeader = laEvent[1]
  68468.         loColumn = loHeader.Parent
  68469.         lcControlSource = ALLTRIM(loColumn.ControlSource)
  68470.         IF ("." $ lcControlSource)
  68471.             lcField = GETWORDNUM(lcControlSource, 2, ".")
  68472.         ELSE
  68473.             lcField = lcControlSource
  68474.         ENDIF
  68475. *        MESSAGEBOX(lcField)
  68476.         Thisform.UpdateSearchFld(lcField)
  68477.     ENDIF
  68478. CATCH TO loEx
  68479.     SET STEP ON
  68480.     MESSAGEBOX("Error sorting: " + loEx.Message, 48, "Error")
  68481. FINALLY
  68482.     SELECT (lnSelect)
  68483. ENDTRY
  68484. RETURN
  68485. IF !EMPTY(lcControlSource)
  68486.     IF ("." $ lcControlSource)
  68487.         lcFieldType = VARTYPE(EVALUATE(lcControlSource))
  68488.     ELSE
  68489.         lcFieldType = VARTYPE(EVALUATE(lcRecordSource + "." + lcControlSource))
  68490.     ENDIF
  68491.     lcIndexFile = FORCEEXT(ADDBS(SYS(2023)) + "_" + SYS(3), "IDX")
  68492.     DO CASE
  68493.         CASE lcFieldType = "T"
  68494.             lcIndexExpr = "INDEX ON TTOC(" + lcControlSource + ", 3) TO " + lcIndexFile + " ADDITIVE"
  68495.         CASE lcFieldType = "D"
  68496.             lcIndexExpr = "INDEX ON DTOS(" + lcControlSource + ") TO " + lcIndexFile + " ADDITIVE"
  68497.         CASE INLIST(lcFieldType, "N", "Y")
  68498.             lcIndexExpr = "INDEX ON " + lcControlSource + " TO " + lcIndexFile + " ADDITIVE"
  68499.         CASE lcFieldType = "C"
  68500.             lcIndexExpr = "INDEX ON ALLTRIM(UPPER(" + lcControlSource + ")) TO " + lcIndexFile + " ADDITIVE"
  68501.         CASE lcFieldType = "L"
  68502.             lcIndexExpr = "INDEX ON " + lcControlSource + " TO " + lcIndexFile + " ADDITIVE"
  68503.         OTHERWISE
  68504.             EXIT
  68505.     ENDCASE
  68506.     lcNewIndexExpr = This.IndexExpressionHook(lcIndexExpr, lcControlSource)
  68507.     IF VARTYPE(lcNewIndexExpr) = "C" AND !EMPTY(lcNewIndexExpr)
  68508.         lcIndexExpr = lcNewIndexExpr
  68509.     ENDIF
  68510.     luKey = This.oIndex.GetKey(lcControlSource)
  68511.     * Remove any existing header pictures, then add it to the current column
  68512.     loGrid.SetAll("Picture", "")
  68513.     SELECT (lcRecordSource)
  68514.     IF VARTYPE(luKey) = "N" AND luKey = 0
  68515.         * Index doesn't exist yet
  68516.         This.oIndex.Add(lcIndexFile, lcControlSource)
  68517.         &lcIndexExpr
  68518.         loHeader.Picture = This.cSortAscendingGraphic
  68519.     ELSE
  68520.         lcIndexFile = JUSTSTEM(This.oIndex[luKey])
  68521.         IF DESCENDING()
  68522.             SET ORDER TO &lcIndexFile ASCENDING
  68523.             loHeader.Picture = This.cSortAscendingGraphic
  68524.         ELSE
  68525.             SET ORDER TO &lcIndexFile DESCENDING
  68526.             loHeader.Picture = This.cSortDescendingGraphic
  68527.         ENDIF
  68528.     ENDIF
  68529.     LOCATE
  68530.     loGrid.Refresh()
  68531. ENDIF
  68532. IF lnBuffering > 3
  68533.     CURSORSETPROP("Buffering", lnBuffering, lcRecordSource)
  68534. ENDIF
  68535. ENDPROC
  68536. Collection
  68537. OINDEX
  68538. COLUMN
  68539. loGridb
  68540. Header
  68541. DblClick
  68542. RightClick
  68543. Search
  68544. SaveSource
  68545. SaveSource
  68546. Cleanup
  68547. RestoreSource
  68548. Cleanup
  68549. This.cGridEval doesn't evaluate to an object: 
  68550. LOGRID
  68551. LOCOLUMN    
  68552. LOCONTROL
  68553. THIS    
  68554. CGRIDEVAL
  68555. COLUMNS
  68556. CONTROLS    
  68557. BASECLASS
  68558. CAUTOCLEANON
  68559. EXCEPTION
  68560. HEADER
  68561. COLUMN
  68562. loGridb
  68563. Error sorting: 
  68564. Error
  68565. INDEX ON TTOC(
  68566. , 3) TO 
  68567.  ADDITIVE
  68568. INDEX ON DTOS(
  68569. ) TO 
  68570.  ADDITIVE
  68571. INDEX ON 
  68572.  ADDITIVE
  68573. INDEX ON ALLTRIM(UPPER(
  68574. )) TO 
  68575.  ADDITIVE
  68576. INDEX ON 
  68577.  ADDITIVE
  68578. Picture
  68579. &lcIndexExpr
  68580. SET ORDER TO &lcIndexFile ASCENDING
  68581. SET ORDER TO &lcIndexFile DESCENDING
  68582. Buffering
  68583. LOGRID
  68584. LCRECORDSOURCE
  68585. LAEVENT
  68586. LOHEADER
  68587. LOCOLUMN
  68588. LCCONTROLSOURCE
  68589. LCINDEXFILE
  68590. LUKEY
  68591. LCFIELD
  68592. LNSELECT
  68593. THIS    
  68594. CGRIDEVAL
  68595. CRECORDSOURCE
  68596. RECORDSOURCE
  68597. PARENT
  68598. CONTROLSOURCE
  68599. THISFORM
  68600. UPDATESEARCHFLD
  68601. MESSAGE
  68602. LCFIELDTYPE
  68603. LCINDEXEXPR
  68604. LCNEWINDEXEXPR
  68605. INDEXEXPRESSIONHOOK
  68606. OINDEX
  68607. GETKEY
  68608. SETALL
  68609. PICTURE
  68610. CSORTASCENDINGGRAPHIC
  68611. CSORTDESCENDINGGRAPHIC
  68612. REFRESH
  68613. LNBUFFERING
  68614. Init,
  68615. bindcontrol^
  68616. search
  68617. TCFIELD
  68618. THISFORM
  68619. CSEARCHFIELD
  68620. LBLSEARCHFLD
  68621. CAPTION
  68622. CLOCSEARCHFLDS
  68623. LNREC
  68624. THISFORM
  68625. GRID1
  68626. RECORDSOURCE    
  68627. LSELECTED
  68628. REFRESHP
  68629. LNREC
  68630. THISFORM
  68631. GRID1
  68632. RECORDSOURCE    
  68633. LSELECTED
  68634. REFRESH
  68635. EXCEPTION
  68636. SEARCHFLD
  68637. GOTOPG_OK
  68638. CANCEL
  68639. SELECTRECI
  68640. LOEXC
  68641. THIS    
  68642. LCCAPTION
  68643. _GOFP
  68644. GETLOC
  68645. LBLSEARCHFLD
  68646. CAPTION
  68647. CLOCSEARCHFLD
  68648. CMDOK    
  68649. CMDCANCEL
  68650. \data\customer
  68651. @vfp.com
  68652. IMAGE
  68653. Image
  68654. images\pr_locate.bmp
  68655. _GOFP
  68656. CONTACT
  68657. EMAIL
  68658. LODUMMY
  68659. PICTURE
  68660. C_AdressBook
  68661. Could not load the adress book table!
  68662. Error
  68663. EMAIL
  68664.     SELECT .F. AS lSelected, * FROM ;
  68665.     <<m.tcCursor>>  WHERE .t. ;
  68666.     INTO CURSOR CrsAdresses READWRITE
  68667. C_AdressBook
  68668. C_AdressBookW
  68669. pr_mail03.ico
  68670. CrsAdresses
  68671. COLUMN
  68672. HEADER
  68673. HEADER
  68674. wingdings
  68675. DblClick
  68676. DoSelectAll
  68677. RightClick
  68678. DoUnselectAll
  68679. Check1
  68680. CheckBox
  68681. Check1
  68682. Check1
  68683. text1
  68684. DynamicForeColor
  68685. ICASE(lSelected=.t.,RGB(255,0,0),lSelected=.f.,RGB(0,0,0))
  68686. Column
  68687. DynamicFontBold
  68688. lSelected=.t.
  68689. Column
  68690. TCCURSOR
  68691. TCSEARCHFIELD
  68692. LLERROR
  68693. C_ADRESSBOOK
  68694. THISFORM
  68695. UPDATESEARCHFLD
  68696. LCSQL
  68697. CSEARCHFIELD
  68698. GRID1
  68699. RECORDSOURCE
  68700. COLUMNCOUNT
  68701. LOCKCOLUMNS
  68702. LOCOLUMN
  68703. COLUMNS
  68704. HEADER1
  68705. FONTBOLD
  68706. FONTSIZE    
  68707. ALIGNMENT    
  68708. FORECOLOR
  68709. CONTROLSOURCE
  68710. VISIBLE    
  68711. GRIDSORT1
  68712. BINDCONTROL
  68713. COLUMN1
  68714. LOHEADER
  68715. FONTNAME
  68716. CAPTION
  68717. WIDTH    
  68718. ADDOBJECT
  68719. SPARSE
  68720. CURRENTCONTROL
  68721. CHECK1
  68722. REMOVEOBJECT
  68723. AUTOFIT
  68724. SETALL
  68725. _GOFP
  68726. SETLANGUAGE?
  68727. CrsTemp
  68728. CrsTemp
  68729. GRID1
  68730. RECORDSOURCE&
  68731. THISFORM
  68732. CRECIPIENTS
  68733. updatesearchfld,
  68734. doselectall
  68735. dounselectallD
  68736. setlanguage
  68737. Init,
  68738. Destroy
  68739. Unload
  68740. wwwwwwwwwwww
  68741. wwwwwwp
  68742. PLATFORM
  68743. UNIQUEID
  68744. TIMESTAMP
  68745. CLASS
  68746. CLASSLOC
  68747. BASECLASS
  68748. OBJNAME
  68749. PARENT
  68750. PROPERTIES
  68751. PROTECTED
  68752. METHODS
  68753. OBJCODE
  68754. RESERVED1
  68755. RESERVED2
  68756. RESERVED3
  68757. RESERVED4
  68758. RESERVED5
  68759. RESERVED6
  68760. RESERVED7
  68761. RESERVED8
  68762.  COMMENT Class               
  68763.  WINDOWS _22W0OBY4H1045105419L
  68764.  COMMENT RESERVED            
  68765. VERSION =   3.00
  68766. gridsort
  68767. Pixels
  68768. Class
  68769. custom
  68770. gridsort
  68771. cgrideval Eval'd to retrieve reference to the grid.
  68772. _memberdata XML Metadata for customizable properties
  68773. crecordsource Leave empty to read the record source from the grid, fill in to override.
  68774. oindex
  68775. cautocleanon Used when grid has SaveSource/RestoreSource methods. Set to "S" to remove temporary indexes when saving the source. Set to "R" to remove when restoring the source.
  68776. csortascendinggraphic
  68777. csortdescendinggraphic
  68778. *sort 
  68779. *bindcontrol 
  68780. *indexexpressionhook 
  68781. *cleanup 
  68782. *search 
  68783. EXCEPTION
  68784. HEADER
  68785. COLUMN
  68786. loGridb
  68787. Buffering
  68788. Buffering
  68789. INDEX ON TTOC(
  68790. , 3) TO 
  68791.  ADDITIVE
  68792. INDEX ON DTOS(
  68793. ) TO 
  68794.  ADDITIVE
  68795. INDEX ON 
  68796.  ADDITIVE
  68797. INDEX ON ALLTRIM(UPPER(
  68798. )) TO 
  68799.  ADDITIVE
  68800. INDEX ON 
  68801.  ADDITIVE
  68802. Picture
  68803. &lcIndexExpr
  68804. SET ORDER TO &lcIndexFile ASCENDING
  68805. SET ORDER TO &lcIndexFile DESCENDING
  68806. Buffering
  68807. Error sorting: 
  68808. Error
  68809. LOGRID
  68810. LCRECORDSOURCE
  68811. LNBUFFERING
  68812. LAEVENT
  68813. LOHEADER
  68814. LOCOLUMN
  68815. LCFIELDTYPE
  68816. LCINDEXEXPR
  68817. LCCONTROLSOURCE
  68818. LCINDEXFILE
  68819. LUKEY
  68820. LNSELECT
  68821. LCNEWINDEXEXPR
  68822. THIS    
  68823. CGRIDEVAL
  68824. CRECORDSOURCE
  68825. RECORDSOURCE
  68826. PARENT
  68827. CONTROLSOURCE
  68828. INDEXEXPRESSIONHOOK
  68829. OINDEX
  68830. GETKEY
  68831. SETALL
  68832. PICTURE
  68833. CSORTASCENDINGGRAPHIC
  68834. CSORTDESCENDINGGRAPHIC
  68835. REFRESH
  68836. MESSAGE
  68837. COLUMN
  68838. loGridb
  68839. Header
  68840. DblClick
  68841. Click
  68842. Search
  68843. SaveSource
  68844. SaveSource
  68845. Cleanup
  68846. RestoreSource
  68847. Cleanup
  68848. This.cGridEval doesn't evaluate to an object: 
  68849. LOGRID
  68850. LOCOLUMN    
  68851. LOCONTROL
  68852. THIS    
  68853. CGRIDEVAL
  68854. COLUMNS
  68855. CONTROLS    
  68856. BASECLASS
  68857. CAUTOCLEANON
  68858. TCINDEXEXPR
  68859. TCCONTROLSOURCE1
  68860. loGridb
  68861. Picture
  68862. Header
  68863. Buffering
  68864. Buffering
  68865. Safetyv
  68866. Buffering
  68867. SET SAFETY &lcSafety
  68868. Collection
  68869. LNSELECT
  68870. LCRECORDSOURCE
  68871. LCSAFETY
  68872. LCINDEX
  68873. LNBUFFERING
  68874. LOGRID
  68875. THIS    
  68876. CGRIDEVAL
  68877. SETALL
  68878. CRECORDSOURCE
  68879. RECORDSOURCE
  68880. OINDEX
  68881. EXCEPTION
  68882. HEADER
  68883. COLUMN
  68884. loGridb
  68885. Buffering
  68886. Buffering
  68887. INDEX ON TTOC(
  68888. , 3) TO 
  68889.  ADDITIVE
  68890. INDEX ON DTOS(
  68891. ) TO 
  68892.  ADDITIVE
  68893. INDEX ON 
  68894.  ADDITIVE
  68895. INDEX ON ALLTRIM(UPPER(
  68896. )) TO 
  68897.  ADDITIVE
  68898. INDEX ON 
  68899.  ADDITIVE
  68900. Picture
  68901. &lcIndexExpr
  68902. SET ORDER TO &lcIndexFile ASCENDING
  68903. SET ORDER TO &lcIndexFile DESCENDING
  68904. Buffering
  68905. Error sorting: 
  68906. Error
  68907. LOGRID
  68908. LCRECORDSOURCE
  68909. LNBUFFERING
  68910. LAEVENT
  68911. LOHEADER
  68912. LOCOLUMN
  68913. LCFIELDTYPE
  68914. LCINDEXEXPR
  68915. LCCONTROLSOURCE
  68916. LCINDEXFILE
  68917. LUKEY
  68918. LNSELECT
  68919. LCNEWINDEXEXPR
  68920. THIS    
  68921. CGRIDEVAL
  68922. CRECORDSOURCE
  68923. RECORDSOURCE
  68924. PARENT
  68925. CONTROLSOURCE
  68926. INDEXEXPRESSIONHOOK
  68927. OINDEX
  68928. GETKEY
  68929. SETALL
  68930. PICTURE
  68931. CSORTASCENDINGGRAPHIC
  68932. CSORTDESCENDINGGRAPHIC
  68933. REFRESH
  68934. MESSAGE-
  68935. Collection
  68936. OINDEX
  68937. BINDCONTROL
  68938. CLEANUP
  68939. OINDEX
  68940. sort,
  68941. bindcontrolv
  68942. indexexpressionhook
  68943. cleanup
  68944. search
  68945. Destroy2
  68946. PROCEDURE sort
  68947. ******************************************************************
  68948. *  FUNCTION NAME: Sort
  68949. *  AUTHOR, DATE:
  68950. *      Paul Mrozowski, 5/7/2007  
  68951. *  PROCEDURE DESCRIPTION:
  68952. *      Handle sorting the grid.
  68953. *  INPUT PARAMETERS:
  68954. *      None
  68955. *  OUTPUT PARAMETERS:
  68956. *      None
  68957. ******************************************************************
  68958. LOCAL loGrid AS Grid, ;
  68959.       lcRecordSource, ;
  68960.       lnBuffering, ;
  68961.       loEx AS Exception, ;
  68962.       laEvent[1], ;
  68963.       loHeader AS Header, ;
  68964.       loColumn AS Column, ;
  68965.       lcFieldType, ;
  68966.       lcIndexExpr, ;
  68967.       lcControlSource, ;
  68968.       lcIndexFile, ;
  68969.       luKey, ;
  68970.       lnSelect, ;
  68971.       lcNewIndexExpr 
  68972.    lnSelect = SELECT()
  68973.    loGrid = EVALUATE(This.cGridEval)
  68974.    IF TYPE("loGrid") <> "O"
  68975.       EXIT
  68976.    ENDIF
  68977.    IF EMPTY(This.cRecordSource)
  68978.       lcRecordSource = ALLTRIM(loGrid.RecordSource)
  68979.    ELSE
  68980.       lcRecordSource = ALLTRIM(This.cRecordSource)
  68981.    ENDIF
  68982.    IF !EMPTY(lcRecordSource) 
  68983.       * You can't index table-buffered cursors
  68984.       lnBuffering = CURSORGETPROP("Buffering", lcRecordSource)
  68985.       
  68986.       IF lnBuffering > 3
  68987.          CURSORSETPROP("Buffering", 3, lcRecordSource)
  68988.       ENDIF
  68989.       
  68990.       AEVENTS(laEvent, 0)
  68991.       
  68992.       loHeader = laEvent[1]
  68993.       loColumn = loHeader.Parent
  68994.       lcControlSource = ALLTRIM(loColumn.ControlSource)
  68995.       
  68996.       IF !EMPTY(lcControlSource)     
  68997.          IF ("." $ lcControlSource)
  68998.             lcFieldType = VARTYPE(EVALUATE(lcControlSource))
  68999.          ELSE
  69000.             lcFieldType = VARTYPE(EVALUATE(lcRecordSource + "." + lcControlSource))
  69001.          ENDIF    
  69002.          
  69003.          lcIndexFile = FORCEEXT(ADDBS(SYS(2023)) + "_" + SYS(3), "IDX")
  69004.          
  69005.          DO CASE
  69006.             CASE lcFieldType = "T"
  69007.                  lcIndexExpr = "INDEX ON TTOC(" + lcControlSource + ", 3) TO " + lcIndexFile + " ADDITIVE"
  69008.             CASE lcFieldType = "D"
  69009.                  lcIndexExpr = "INDEX ON DTOS(" + lcControlSource + ") TO " + lcIndexFile + " ADDITIVE"            
  69010.             CASE INLIST(lcFieldType, "N", "Y")
  69011.                  lcIndexExpr = "INDEX ON " + lcControlSource + " TO " + lcIndexFile + " ADDITIVE"           
  69012.             CASE lcFieldType = "C"
  69013.                  lcIndexExpr = "INDEX ON ALLTRIM(UPPER(" + lcControlSource + ")) TO " + lcIndexFile + " ADDITIVE"
  69014.             CASE lcFieldType = "L"
  69015.                  lcIndexExpr = "INDEX ON " + lcControlSource + " TO " + lcIndexFile + " ADDITIVE"
  69016.             OTHERWISE
  69017.                  EXIT
  69018.          ENDCASE 
  69019.          
  69020.          lcNewIndexExpr = This.IndexExpressionHook(lcIndexExpr, lcControlSource)
  69021.          
  69022.          IF VARTYPE(lcNewIndexExpr) = "C" AND !EMPTY(lcNewIndexExpr)
  69023.             lcIndexExpr = lcNewIndexExpr 
  69024.          ENDIF                  
  69025.          
  69026.          luKey = This.oIndex.GetKey(lcControlSource)                    
  69027.          
  69028.          * Remove any existing header pictures, then add it to the current column
  69029.          loGrid.SetAll("Picture", "")
  69030.          
  69031.          SELECT (lcRecordSource)
  69032.           
  69033.          IF VARTYPE(luKey) = "N" AND luKey = 0
  69034.             * Index doesn't exist yet
  69035.             This.oIndex.Add(lcIndexFile, lcControlSource)      
  69036.             &lcIndexExpr
  69037.             
  69038.             loHeader.Picture = This.cSortAscendingGraphic
  69039.             
  69040.          ELSE
  69041.             lcIndexFile = JUSTSTEM(This.oIndex[luKey])
  69042.             
  69043.             IF DESCENDING()
  69044.                SET ORDER TO &lcIndexFile ASCENDING
  69045.                loHeader.Picture = This.cSortAscendingGraphic
  69046.             ELSE
  69047.                SET ORDER TO &lcIndexFile DESCENDING
  69048.                loHeader.Picture = This.cSortDescendingGraphic 
  69049.             ENDIF
  69050.          ENDIF
  69051.          
  69052.          LOCATE
  69053.          
  69054.          loGrid.Refresh()
  69055.       ENDIF      
  69056.       
  69057.       IF lnBuffering > 3
  69058.          CURSORSETPROP("Buffering", lnBuffering, lcRecordSource)
  69059.       ENDIF
  69060.    ENDIF
  69061. CATCH TO loEx 
  69062.    SET STEP ON 
  69063.    MESSAGEBOX("Error sorting: " + loEx.Message, 48, "Error")
  69064. FINALLY
  69065.    SELECT (lnSelect)
  69066. ENDTRY
  69067. ENDPROC
  69068. PROCEDURE bindcontrol
  69069. ******************************************************************
  69070. *  FUNCTION NAME: Bindcontrol
  69071. *  AUTHOR, DATE:
  69072. *      Paul Mrozowski, 5/7/2007  
  69073. *  PROCEDURE DESCRIPTION:
  69074. *      Bind us to the headers in the grid.
  69075. *  INPUT PARAMETERS:
  69076. *      None
  69077. *  OUTPUT PARAMETERS:
  69078. *      None
  69079. ******************************************************************
  69080. LOCAL loGrid AS Grid, ;
  69081.       loColumn AS Column, ;
  69082.       loControl
  69083.    loGrid = EVALUATE(This.cGridEval)
  69084.    IF TYPE("loGrid") = "O"
  69085.       FOR EACH loColumn IN loGrid.Columns
  69086.           FOR EACH loControl IN loColumn.Controls
  69087.               IF loControl.BaseClass = "Header"
  69088.                  BINDEVENT(loControl, "DblClick", This, "Sort")
  69089.                  BINDEVENT(loControl, "Click", This, "Search")
  69090.                  EXIT
  69091.               ENDIF
  69092.           ENDFOR          
  69093.       ENDFOR
  69094.       
  69095.       IF PEMSTATUS(loGrid, "SaveSource", 5) 
  69096.          IF This.cAutoCleanOn = "S"
  69097.             BINDEVENT(loGrid, "SaveSource", This, "Cleanup")
  69098.          ENDIF 
  69099.          
  69100.          IF This.cAutoCleanOn = "R"
  69101.             BINDEVENT(loGrid, "RestoreSource", This, "Cleanup")
  69102.          ENDIF 
  69103.          
  69104.       ENDIF
  69105.    ENDIF
  69106. CATCH
  69107.    MESSAGEBOX("This.cGridEval doesn't evaluate to an object: " + This.cGridEval)
  69108. ENDTRY
  69109. ENDPROC
  69110. PROCEDURE indexexpressionhook
  69111. LPARAMETERS tcIndexExpr, tcControlSource
  69112. ******************************************************************
  69113. *  FUNCTION NAME: IndexExpressionHook
  69114. *  AUTHOR, DATE:
  69115. *      Paul Mrozowski, 5/7/2007  
  69116. *  PROCEDURE DESCRIPTION:
  69117. *      Hook point to change how indexes are created or do things
  69118. *     like create an index on multiple fields when they click
  69119. *     on a particular header item.
  69120. *  INPUT PARAMETERS:
  69121. *      tcIndexExpr - Index expression
  69122. *     tcControlSource - Control source
  69123. *  OUTPUT PARAMETERS:
  69124. *      None
  69125. ******************************************************************
  69126. * RETURN tcIndexExpr + ",SomeOtherField"
  69127. ENDPROC
  69128. PROCEDURE cleanup
  69129. ******************************************************************
  69130. *  FUNCTION NAME: Cleanup
  69131. *  AUTHOR, DATE:
  69132. *      Paul Mrozowski, 5/7/2007  
  69133. *  PROCEDURE DESCRIPTION:
  69134. *      Clean-un and remove any temp indexes.
  69135. *  INPUT PARAMETERS:
  69136. *      None
  69137. *  OUTPUT PARAMETERS:
  69138. *      None
  69139. ******************************************************************
  69140. LOCAL lnSelect, ;
  69141.       lcRecordSource, ;
  69142.       lcSafety, ;
  69143.       lcIndex, ;
  69144.       lnBuffering, ;
  69145.       loEx, ;
  69146.       loGrid AS Grid
  69147. lnBuffering = 0      
  69148. lnSelect = SELECT()
  69149. TRY   
  69150.    loGrid = EVALUATE(This.cGridEval)
  69151.    IF TYPE("loGrid") <> "O"
  69152.       EXIT
  69153.    ENDIF
  69154.    loGrid.SetAll("Picture", "", "Header")
  69155.    IF EMPTY(This.cRecordSource)
  69156.       lcRecordSource = ALLTRIM(loGrid.RecordSource)
  69157.    ELSE
  69158.       lcRecordSource = ALLTRIM(This.cRecordSource)
  69159.    ENDIF
  69160.    SELECT (lcRecordSource)
  69161.    lnBuffering = CURSORGETPROP("Buffering", lcRecordSource)
  69162.    IF lnBuffering > 3
  69163.       CURSORSETPROP("Buffering", 3, lcRecordSource)
  69164.    ENDIF
  69165.    SET INDEX TO 
  69166. CATCH TO loEx
  69167.    * The table/cursor may have already been closed
  69168. ENDTRY
  69169. lcSafety = SET("Safety")
  69170. SET SAFETY OFF
  69171. FOR EACH lcIndex IN This.oIndex
  69172.     TRY
  69173.        ERASE (lcIndex)
  69174.     CATCH
  69175.     ENDTRY
  69176. ENDFOR
  69177. IF VARTYPE(loEx) <> "O" AND lnBuffering > 3 
  69178.    CURSORSETPROP("Buffering", lnBuffering, lcRecordSource)
  69179. ENDIF
  69180. SET SAFETY &lcSafety
  69181.    SELECT (lnSelect)
  69182. CATCH
  69183. ENDTRY   
  69184. This.oIndex = CREATEOBJECT("Collection")
  69185. ENDPROC
  69186. PROCEDURE search
  69187. LOCAL loGrid AS Grid, ;
  69188.       lcRecordSource, ;
  69189.       lnBuffering, ;
  69190.       loEx AS Exception, ;
  69191.       laEvent[1], ;
  69192.       loHeader AS Header, ;
  69193.       loColumn AS Column, ;
  69194.       lcFieldType, ;
  69195.       lcIndexExpr, ;
  69196.       lcControlSource, ;
  69197.       lcIndexFile, ;
  69198.       luKey, ;
  69199.       lnSelect, ;
  69200.       lcNewIndexExpr 
  69201.    lnSelect = SELECT()
  69202.    loGrid = EVALUATE(This.cGridEval)
  69203.    IF TYPE("loGrid") <> "O"
  69204.       EXIT
  69205.    ENDIF
  69206.    IF EMPTY(This.cRecordSource)
  69207.       lcRecordSource = ALLTRIM(loGrid.RecordSource)
  69208.    ELSE
  69209.       lcRecordSource = ALLTRIM(This.cRecordSource)
  69210.    ENDIF
  69211.    IF !EMPTY(lcRecordSource) 
  69212.       * You can't index table-buffered cursors
  69213.       lnBuffering = CURSORGETPROP("Buffering", lcRecordSource)
  69214.       
  69215.       IF lnBuffering > 3
  69216.          CURSORSETPROP("Buffering", 3, lcRecordSource)
  69217.       ENDIF
  69218.       
  69219.       AEVENTS(laEvent, 0)
  69220.       
  69221.       loHeader = laEvent[1]
  69222.       loColumn = loHeader.Parent
  69223.       lcControlSource = ALLTRIM(loColumn.ControlSource)
  69224.       
  69225.       IF !EMPTY(lcControlSource)     
  69226.          IF ("." $ lcControlSource)
  69227.             lcFieldType = VARTYPE(EVALUATE(lcControlSource))
  69228.          ELSE
  69229.             lcFieldType = VARTYPE(EVALUATE(lcRecordSource + "." + lcControlSource))
  69230.          ENDIF    
  69231.          
  69232.          lcIndexFile = FORCEEXT(ADDBS(SYS(2023)) + "_" + SYS(3), "IDX")
  69233.          
  69234.          DO CASE
  69235.             CASE lcFieldType = "T"
  69236.                  lcIndexExpr = "INDEX ON TTOC(" + lcControlSource + ", 3) TO " + lcIndexFile + " ADDITIVE"
  69237.             CASE lcFieldType = "D"
  69238.                  lcIndexExpr = "INDEX ON DTOS(" + lcControlSource + ") TO " + lcIndexFile + " ADDITIVE"            
  69239.             CASE INLIST(lcFieldType, "N", "Y")
  69240.                  lcIndexExpr = "INDEX ON " + lcControlSource + " TO " + lcIndexFile + " ADDITIVE"           
  69241.             CASE lcFieldType = "C"
  69242.                  lcIndexExpr = "INDEX ON ALLTRIM(UPPER(" + lcControlSource + ")) TO " + lcIndexFile + " ADDITIVE"
  69243.             CASE lcFieldType = "L"
  69244.                  lcIndexExpr = "INDEX ON " + lcControlSource + " TO " + lcIndexFile + " ADDITIVE"
  69245.             OTHERWISE
  69246.                  EXIT
  69247.          ENDCASE 
  69248.          
  69249.          lcNewIndexExpr = This.IndexExpressionHook(lcIndexExpr, lcControlSource)
  69250.          
  69251.          IF VARTYPE(lcNewIndexExpr) = "C" AND !EMPTY(lcNewIndexExpr)
  69252.             lcIndexExpr = lcNewIndexExpr 
  69253.          ENDIF                  
  69254.          
  69255.          luKey = This.oIndex.GetKey(lcControlSource)                    
  69256.          
  69257.          * Remove any existing header pictures, then add it to the current column
  69258.          loGrid.SetAll("Picture", "")
  69259.          
  69260.          SELECT (lcRecordSource)
  69261.           
  69262.          IF VARTYPE(luKey) = "N" AND luKey = 0
  69263.             * Index doesn't exist yet
  69264.             This.oIndex.Add(lcIndexFile, lcControlSource)      
  69265.             &lcIndexExpr
  69266.             
  69267.             loHeader.Picture = This.cSortAscendingGraphic
  69268.             
  69269.          ELSE
  69270.             lcIndexFile = JUSTSTEM(This.oIndex[luKey])
  69271.             
  69272.             IF DESCENDING()
  69273.                SET ORDER TO &lcIndexFile ASCENDING
  69274.                loHeader.Picture = This.cSortAscendingGraphic
  69275.             ELSE
  69276.                SET ORDER TO &lcIndexFile DESCENDING
  69277.                loHeader.Picture = This.cSortDescendingGraphic 
  69278.             ENDIF
  69279.          ENDIF
  69280.          
  69281.          LOCATE
  69282.          
  69283.          loGrid.Refresh()
  69284.       ENDIF      
  69285.       
  69286.       IF lnBuffering > 3
  69287.          CURSORSETPROP("Buffering", lnBuffering, lcRecordSource)
  69288.       ENDIF
  69289.    ENDIF
  69290. CATCH TO loEx 
  69291.    SET STEP ON 
  69292.    MESSAGEBOX("Error sorting: " + loEx.Message, 48, "Error")
  69293. FINALLY
  69294.    SELECT (lnSelect)
  69295. ENDTRY
  69296. ENDPROC
  69297. PROCEDURE Init
  69298. ******************************************************************
  69299. *  FUNCTION NAME: Init
  69300. *  AUTHOR, DATE:
  69301. *      Paul Mrozowski, 5/7/2007  
  69302. *  PROCEDURE DESCRIPTION:
  69303. *      Get things started.
  69304. *  INPUT PARAMETERS:
  69305. *      None
  69306. *  OUTPUT PARAMETERS:
  69307. *      None
  69308. ******************************************************************
  69309. This.oIndex = CREATEOBJECT("Collection")
  69310. This.BindControl()
  69311. ENDPROC
  69312. PROCEDURE Destroy
  69313. ******************************************************************
  69314. *  FUNCTION NAME: Destroy
  69315. *  AUTHOR, DATE:
  69316. *      Paul Mrozowski, 5/7/2007  
  69317. *  PROCEDURE DESCRIPTION:
  69318. *      Clean up.
  69319. *  INPUT PARAMETERS:
  69320. *      None
  69321. *  OUTPUT PARAMETERS:
  69322. *      None
  69323. ******************************************************************
  69324. This.Cleanup()
  69325. This.oIndex = NULL
  69326. ENDPROC
  69327. cgrideval = 
  69328. _memberdata = 
  69329.      954<VFPData><memberdata name="cgrideval" type="property" display="cGridEval" favorites="True"/><memberdata name="crecordsource" type="property" display="cRecordSource" favorites="True"/><memberdata name="sort" type="method" display="Sort"/><memberdata name="bindcontrol" type="method" display="BindControl"/><memberdata name="oindex" type="property" display="oIndex"/><memberdata name="indexexpressionhook" type="method" display="IndexExpressionHook" favorites="True"/><memberdata name="cleanup" type="method" display="Cleanup"/><memberdata name="lautocleanondestroy" type="property" display="lAutoCleanOnDestroy"/><memberdata name="cautocleanon" type="property" display="cAutoCleanOn"/><memberdata name="csortascendinggraphic" type="property" display="cSortAscendingGraphic" favorites="True"/><memberdata name="csortdescendinggraphic" type="property" display="cSortDescendingGraphic" favorites="True"/><memberdata name="search" display="Search"/></VFPData>
  69330. crecordsource = 
  69331. oindex = .NULL.
  69332. cautocleanon = S
  69333. csortascendinggraphic = pr_SortAscending.bmp
  69334. csortdescendinggraphic = pr_SortDescending.bmp
  69335. Name = "gridsort"
  69336. customBMx
  69337. PLATFORM
  69338. UNIQUEID
  69339. TIMESTAMP
  69340. CLASS
  69341. CLASSLOC
  69342. BASECLASS
  69343. OBJNAME
  69344. PARENT
  69345. PROPERTIES
  69346. PROTECTED
  69347. METHODS
  69348. OBJCODE
  69349. RESERVED1
  69350. RESERVED2
  69351. RESERVED3
  69352. RESERVED4
  69353. RESERVED5
  69354. RESERVED6
  69355. RESERVED7
  69356. RESERVED8
  69357.  COMMENT Class               
  69358.  WINDOWS _39L029YY01124055609
  69359.  COMMENT RESERVED            
  69360. VERSION =   3.00
  69361. reportlisteners.h
  69362. foxpro_reporting.h
  69363. reportlisteners_locs.h
  69364. pr_htmllistener2
  69365. reportlisteners.h
  69366. Pixels
  69367. Class
  69368. custom
  69369. pr_htmllistener2
  69370. _memberdata XML Metadata for customizable properties
  69371. noutfile
  69372. npagewidth
  69373. npageheight
  69374. nscreendpi
  69375. ldebug
  69376. ctargetfilename
  69377. oactivelistener
  69378. ldefaultmode
  69379. nimgcounter
  69380. _ctempfolder
  69381. oimages
  69382. cexternalfilelocation
  69383. lcopyimagefilestoexternalfilelocation
  69384. quietmode Specifies whether the ReportListener may provide any user feedback or interface.
  69385. waitfornextreport
  69386. *outputfromdata 
  69387. *render Occurs when Report Engine is ready to provide output for each layout object in a band.
  69388. *beforereport Occurs just before Report Engine begins processing a report form.
  69389. *afterreport Occurs directly after Report Engine finishes processing a report form.
  69390. *getbandname 
  69391. *getfontstyle 
  69392. *rgbtohex 
  69393. *afterband Occurs directly after Report Engine finishes processing a report band.
  69394. *beforeband Occurs just before Report Engine begins processing a report band.
  69395. *getcontinuationtype 
  69396. *getpageimg 
  69397. *getpicturefromlistener 
  69398. *processimages 
  69399. *processtext 
  69400. *processlines 
  69401. *processshapes 
  69402. *getlinescnt 
  69403. *cropimage 
  69404. ^apagesimgs[1,0] 
  69405. Invalid parameter. Report listener not available
  69406. Error
  69407. The helper FRX table is not available. Output can't be created
  69408. Error
  69409. Datasessionv
  69410. ; charset=utf-8
  69411. <!DOCTYPE html><html><head><META http-equiv="Content-Type" content="text/html
  69412. <title>
  69413. </title></head><body>
  69414. %  - 
  69415. 100%  - CCC
  69416. TOLISTENER
  69417. TCOUTPUTDBF
  69418. TNWIDTH
  69419. TNHEIGHT
  69420. OACTIVELISTENER    
  69421. CFRXALIAS
  69422. LLRELEASEFP
  69423. LCALIAS
  69424. _GOFP
  69425. OFOXYPREVIEWER    
  69426. QUIETMODE
  69427. LNSECS
  69428. DOFOXYTHERM
  69429. _INITSTATUSTEXT
  69430. LNSELECT
  69431. LNORIGDATASESSION
  69432. LISTENERDATASESSION
  69433. LDEFAULTMODE
  69434. NPAGEHEIGHT
  69435. NSCREENDPI
  69436. NPAGEWIDTH
  69437. NOUTFILE
  69438. CTARGETFILENAME
  69439. LCHTML    
  69440. LCCHARSET
  69441. LNPGFROM
  69442. LNPGTO
  69443. COMMANDCLAUSES    
  69444. RANGEFROM
  69445. RANGETO
  69446. _CLAUSENRANGEFROM
  69447. _CLAUSENRANGETO
  69448. RENDER
  69449. FRXRECNO
  69450. WIDTH
  69451. HEIGHT
  69452. CONTTYPE
  69453. UNCONTENTS    
  69454. LNPERCENT
  69455. LNLASTPERCENT
  69456. LNDELAY    
  69457. LNTOTRECS
  69458. LNREC
  69459. _SECONDSTEXT
  69460. _RUNSTATUSTEXT
  69461. AFTERREPORT4
  69462. <!-- nLeft:C
  69463. , nTop:
  69464. , nWidth:
  69465. , nHeight:
  69466. , ContinuationType:
  69467. , cContents:
  69468. NFRXRECNO
  69469. NLEFT
  69470. NWIDTH
  69471. NHEIGHT
  69472. NOBJECTCONTINUATIONTYPE
  69473. CCONTENTSTOBERENDERED
  69474. GDIPLUSIMAGE
  69475. LCDEBUGINFO
  69476. LCHTML
  69477. LDEBUG
  69478. GETCONTINUATIONTYPE
  69479. NOUTFILE
  69480. LNADJUST
  69481. NSCREENDPI
  69482. NPAGEHEIGHT
  69483. OACTIVELISTENER
  69484. COMMANDCLAUSES    
  69485. RANGEFROM
  69486. OBJTYPE
  69487. PROCESSLINES
  69488. PROCESSSHAPES
  69489. PROCESSTEXT
  69490. PROCESSIMAGES
  69491. </body></html>
  69492. NOUTFILE
  69493. LLSAVED
  69494. LCFILE
  69495. APAGESIMGS
  69496. OACTIVELISTENER)
  69497. FRX_OBJCOD_TITLE
  69498. FRX_OBJCOD_PAGEHEADER
  69499. FRX_OBJCOD_COLHEADER
  69500. FRX_OBJCOD_GROUPHEADER
  69501. FRX_OBJCOD_DETAIL
  69502. FRX_OBJCOD_GROUPFOOTER
  69503. FRX_OBJCOD_COLFOOTER
  69504. FRX_OBJCOD_PAGEFOOTER
  69505. FRX_OBJCOD_SUMMARY
  69506. FRX_OBJCOD_DETAILHEADER
  69507. FRX_OBJCOD_DETAILFOOTER
  69508. NBANDOBJCODE1
  69509. NFONTSTYLE
  69510. CSTYLE[
  69511. NGREEN
  69512. NBLUE
  69513. <!-- AfterBand:
  69514. pagefooter
  69515. NBANDOBJCODE    
  69516. NFRXRECNO
  69517. CBAND
  69518. FRXDATASESSION
  69519. GETBANDNAME
  69520. LDEBUG
  69521. NOUTFILE
  69522. CURRENTDATASESSION
  69523. <!-- BeforeBand:C
  69524. NBANDOBJCODE    
  69525. NFRXRECNO
  69526. FRXDATASESSION
  69527. LDEBUG
  69528. NOUTFILE
  69529. GETBANDNAME
  69530. CURRENTDATASESSION
  69531. LISTENER_CONTINUATION_NONE
  69532. LISTENER_CONTINUATION_START
  69533. LISTENER_CONTINUATION_MIDDLE
  69534. LISTENER_CONTINUATION_END
  69535. NOBJECTCONTINUATIONTYPE
  69536. REPORTLISTENER
  69537. TEMP5
  69538. LOLISTENER
  69539. OACTIVELISTENER
  69540. LNPAGE
  69541. COMMANDCLAUSES    
  69542. RANGEFROM
  69543. APAGESIMGS
  69544. LNDEVICETYPE
  69545. LCFILE
  69546. LNHANDLE
  69547. OUTPUTPAGE
  69548. TNWIDTH
  69549. TNHEIGHT
  69550. TCFILE
  69551. LCFILE
  69552. GETPAGEIMG
  69553. LNHOR
  69554. LNVERT    
  69555. LCNEWFILE    
  69556. CROPIMAGE
  69557. _IMAGES
  69558. _IMAGES
  69559. IMAGE
  69560. Image
  69561. <img src="
  69562. " width="
  69563. " height="
  69564. " alt="">
  69565. <span style="position:absolute;left:C
  69566. px;top:
  69567. clip: rect(0 
  69568. px 0);
  69569. </span>
  69570. IMAGE
  69571. Image
  69572. <img src="
  69573. " width="
  69574. " height="
  69575. " alt="">
  69576. <span style="position:absolute;left:C
  69577. px;top:
  69578. clip: rect(0 
  69579. px 0);
  69580. </span>
  69581. <img src="
  69582. " width="
  69583. " height="
  69584. " alt="">
  69585. <span style="position:absolute;left:C
  69586. px;top:
  69587. px;">
  69588. </span>
  69589. TNLEFT
  69590. TNTOP
  69591. TNWIDTH
  69592. TNHEIGHT
  69593. CCONTENTSTOBERENDERED
  69594. LCFILE
  69595. LCPATH
  69596. LCSHORTPATH
  69597. LCIMAGECOPY
  69598. LCPATHLOCATION
  69599. CTARGETFILENAME
  69600. CEXTERNALFILELOCATION
  69601. NIMGCOUNTER
  69602. GETPICTUREFROMLISTENER
  69603. PR_PATHFILEEXISTS
  69604. LCHTML    
  69605. LCIMGHTML
  69606. GENERAL
  69607. LNWIDTH
  69608. LNHEIGHT
  69609. LNPICTWIDTH
  69610. LNPICTHEIGHT
  69611. LOVFPIMG
  69612. PICTURE
  69613. WIDTH
  69614. HEIGHT
  69615. LNHORFACTOR
  69616. LNVERTFACTOR
  69617. LNRESIZEFACTOR
  69618. LNISOWIDTH
  69619. LNISOHEIGHTL
  69620. lcText = STRTRAN(lcOrigText, [&], [&]) 
  69621. lcText = STRTRAN(lcText, [<], [<])
  69622. lcText = STRTRAN(lcText, [>], [>])
  69623. text-align: left;
  69624. text-align: right;
  69625. text-align: center;
  69626. white-space:normal;
  69627. overflow:hidden ;
  69628. white-space:nowrap;
  69629. white-space:normal;
  69630. <span style="
  69631. position:absolute;left:
  69632. px;top:
  69633. width:
  69634. px;height:
  69635. background-color:
  69636. font-family:
  69637. font-size:
  69638. color:
  69639. </span>
  69640. TNLEFT
  69641. TNTOP
  69642. TNWIDTH
  69643. TNHEIGHT
  69644. CCONTENTSTOBERENDERED
  69645. LCHTML
  69646. LCTEXT
  69647. LCORIGTEXT
  69648. LCALIGN
  69649. OFFSET    
  69650. LCFILLHEX    
  69651. LCPRESPAN
  69652. LCPOSTSPAN    
  69653. LCFOREHEX    
  69654. LCPREFONT
  69655. LCPOSTFONT
  69656. FILLRED    
  69657. FILLGREEN
  69658. FILLBLUE
  69659. RGBTOHEX
  69660. PENRED
  69661. PENGREEN
  69662. PENBLUE
  69663. STRETCH
  69664. LCWWRAP
  69665. LNLINES
  69666. GETLINESCNT
  69667. FONTFACE
  69668. FONTSIZE    
  69669. FONTSTYLE
  69670. LCFONTSTYLE
  69671. LCPRESTYLE
  69672. LCPOSTSTYLE
  69673. GETFONTSTYLE
  69674. <span style="position:absolute;left:C
  69675. px;top:
  69676. px;width:
  69677. height:
  69678. px;text-align: left;border:1px solid 
  69679. </span>
  69680. TNLEFT
  69681. TNTOP
  69682. TNWIDTH
  69683. TNHEIGHT
  69684. LCHTML
  69685. RGBTOHEX
  69686. PENRED
  69687. PENGREEN
  69688. PENBLUEZ
  69689. background-color:
  69690. border-left:C
  69691.  solid;
  69692. border-right:
  69693.  solid;
  69694. border-top:
  69695.  solid;
  69696. border-left:C
  69697.  solid;
  69698. border-right:
  69699.  solid;
  69700. border-left:C
  69701.  solid;
  69702. border-right:
  69703.  solid;
  69704. border-bottom:
  69705.  solid;
  69706. border:C
  69707.  solid;
  69708. <span style="position:absolute;left:C
  69709. px;top:
  69710. px;width:
  69711. height:
  69712. px;text-align: left;
  69713. </span>
  69714. TNLEFT
  69715. TNTOP
  69716. TNWIDTH
  69717. TNHEIGHT
  69718. TNOBJECTCONTINUATIONTYPE    
  69719. LCFILLHEX
  69720. FILLPAT
  69721. FILLRED    
  69722. FILLGREEN
  69723. FILLBLUE
  69724. RGBTOHEX
  69725. LCBORDERHEX
  69726. PENPAT
  69727. PENRED
  69728. PENGREEN
  69729. PENBLUE
  69730. PENSIZE
  69731. LCHTML3
  69732. GPRECTANGLE
  69733. \ffc\_Gdiplus.vcx
  69734. GPRectangle
  69735. _Gdiplus.vcx
  69736. GPFont
  69737. _Gdiplus.vcx
  69738. GPGRAPHICS
  69739. \ffc\_Gdiplus.vcx
  69740. GpGraphics
  69741. _Gdiplus.vcx
  69742. 333333
  69743. GPSIZE
  69744. \ffc\_Gdiplus.vcx
  69745. TCTEXT
  69746. TCFONTNAME
  69747. TNSIZE
  69748. TCSTYLE
  69749. TNLEFT
  69750. TNTOP
  69751. TNWIDTH
  69752. TNHEIGHT
  69753. LOFONT
  69754. LNCHARS
  69755. LNLINES
  69756. LNHEIGHT
  69757. LNWIDTH
  69758. LNFACTOR
  69759. LORECT
  69760. CREATE
  69761. LOGFX
  69762. CREATEFROMHWND
  69763. PAGEUNIT    
  69764. PAGESCALE
  69765. LOSIZE
  69766. MEASURESTRINGA    
  69767. GDIPRECTF
  69768. STRING
  69769. INTEGER
  69770. INTEGER
  69771. GPBITMAP
  69772. ffc\_gdiplus.vcx
  69773. GpBitmap
  69774. _GdiPlus.vcx
  69775. GdipCloneBitmapAreaI
  69776. GDIPLUS.DLLQ
  69777. pdfxGdipCloneBitmapAreaI
  69778. GPBITMAP
  69779. ffc\_gdiplus.vcx
  69780. GpBitmap
  69781. _GdiPlus.vcx
  69782. image/png
  69783. image/jpeg6
  69784. LCFILE
  69785. LNWIDTH
  69786. LNHEIGHT    
  69787. TCNEWFILE
  69788. _CTEMPFOLDER
  69789. LCEXT
  69790. LOBMP
  69791. CREATEFROMFILE
  69792. IMAGEHEIGHT
  69793. IMAGEWIDTH
  69794. LHBITMAP
  69795. LNSTATUS
  69796. GDIPCLONEBITMAPAREAI
  69797. GDIPLUS
  69798. PDFXGDIPCLONEBITMAPAREAI
  69799. PIXELFORMAT    
  69800. GETHANDLE    
  69801. LOCROPPED    
  69802. SETHANDLE
  69803. SETRESOLUTION
  69804. HORIZONTALRESOLUTION
  69805. VERTICALRESOLUTION    
  69806. LCENCODER
  69807. LCCROPPEDFILE
  69808. SAVETOFILE
  69809. OIMAGES
  69810. GetDeviceCaps
  69811. WIN32API
  69812. GetDC
  69813. WIN32API
  69814. Collection
  69815. GETDEVICECAPS
  69816. WIN32API
  69817. GETDC
  69818. LNSCREENDPI
  69819. NSCREENDPI
  69820. LDEBUG
  69821. _CTEMPFOLDER
  69822. OIMAGES
  69823. NOUTFILE
  69824. outputfromdata,
  69825. render
  69826. afterreport
  69827. getbandname
  69828. getfontstyleX
  69829. rgbtohex
  69830. afterband
  69831. beforeband>
  69832. getcontinuationtype)
  69833. getpageimgD
  69834. getpicturefromlistener
  69835. processimages
  69836. processtext
  69837. processlinesW(
  69838. processshapes
  69839. getlinescnt
  69840. cropimage
  69841. InitO6
  69842. Destroy{7
  69843. PROCEDURE outputfromdata
  69844. LPARAMETERS toListener, tcOutputDBF, tnWidth, tnHeight
  69845. IF VARTYPE(toListener) <> "O"
  69846.     MESSAGEBOX("Invalid parameter. Report listener not available", 16, "Error")
  69847.     RETURN
  69848. ENDIF 
  69849. This.oActiveListener = toListener
  69850. IF EMPTY(toListener.cFRXAlias)
  69851.     MESSAGEBOX("The helper FRX table is not available. Output can't be created", 16, "Error")
  69852.     RETURN
  69853. ENDIF 
  69854. * 2013-04-25 CChalom
  69855. * Ensure we have a _goFP object
  69856. * To be used in OBJTYPE #20
  69857. LOCAL llReleaseFP, lcAlias
  69858. llReleaseFP = .F.
  69859. IF VARTYPE(_goFP) <> "O"
  69860.     PRIVATE _goFP
  69861.     _goFP = _Screen.oFoxyPreviewer
  69862.     lcAlias = toListener.cFRXAlias
  69863.     llReleaseFP = .T.
  69864. ENDIF 
  69865. * =DoFoxyTherm(90, "Texto label", "Titulo")
  69866. * =DoFoxyTherm(-1, "Teste2", "Titulo") && Continuo
  69867. * =DoFoxyTherm() && Desliga
  69868. This.QuietMode = NVL(This.QuietMode, .F.)
  69869. IF NOT This.QuietMode 
  69870.     LOCAL lnSecs
  69871.     lnSecs = SECONDS()
  69872.     *!*    ._InitStatusText    = .GetLoc("INITSTATUS") + SPACE(1)
  69873.     *!*    ._RunStatusText     = .GetLoc("RUNSTATUS")  + SPACE(1)
  69874.     *!*    ._SecondsText       = .GetLoc("SECONDS")    + SPACE(1)
  69875.     =DoFoxyTherm(1, "0%", _goFP._InitStatusText)
  69876. ENDIF 
  69877. LOCAL lnSelect, lnOrigDataSession
  69878. lnSelect          = SELECT()
  69879. lnOrigDataSession = SET("Datasession")
  69880. * Ensure we are at the correct DataSession
  69881. SET DATASESSION TO (toListener.ListenerDataSession)
  69882. * SET DATASESSION TO (toListener.CurrentDataSession)
  69883. SELECT (tcOutputDBF)
  69884. * Generate RTF using the stored information
  69885. This.lDefaultMode = .F.
  69886. * This.BeforeReport()
  69887. THIS.nPageHeight = CEILING(THIS.nScreenDPI * tnHeight / 960)
  69888. THIS.nPageWidth  = CEILING(THIS.nScreenDPI * tnWidth / 960)
  69889. THIS.nOutFile    = FCREATE(THIS.cTargetFileName) && .cOutFile)
  69890. LOCAL lcHtml, lcCharSet
  69891. lcCharSet = "; charset=utf-8"
  69892. lcHtml = [<!DOCTYPE html><html><head><META http-equiv="Content-Type" content="text/html] + lcCharSet + [">] + ;
  69893.     [<title>] + JUSTSTEM(This.cTargetFileName) + [</title></head><body>]
  69894. FPUTS(THIS.nOutFile, lcHtml)
  69895. LOCAL lnPgFrom, lnPgTo
  69896. IF llReleaseFP
  69897.     lnPgFrom = toListener.COMMANDCLAUSES.RangeFrom
  69898.     lnPgTo   = toListener.COMMANDCLAUSES.RangeTo && -1 = All pages
  69899.     lnPgTo   = IIF(lnPgTo = -1, 999999, lnPgTo)
  69900. ELSE 
  69901.     lnPgFrom = _goFP._ClausenRangeFrom && = loListener.COMMANDCLAUSES.RangeFrom
  69902.     lnPgTo   = IIF(_goFP._ClausenRangeTo = -1, 999999, _goFP._ClausenRangeTo) && = loListener.COMMANDCLAUSES.RangeTo && -1 = All pages
  69903. ENDIF 
  69904. * Initialize class
  69905. SELECT (tcOutputDBF)
  69906. IF This.QuietMode 
  69907.     SCAN
  69908.         IF BETWEEN(Page, lnPgFrom, lnPgTo)
  69909.             This.Render(FRXRECNO, Left, Top, Width, Height, ContType, UNContents, 0)
  69910.         ENDIF
  69911.     ENDSCAN
  69912. ELSE 
  69913.     LOCAL lnPercent, lnLastPercent, lnDelay, lnTotRecs, lnRec
  69914.     lnLastPercent = 0
  69915.     lnDelay       = 1
  69916.     lnTotRecs     = RECCOUNT()
  69917.     lnRec         = 0
  69918.     SCAN
  69919.         IF BETWEEN(Page, lnPgFrom, lnPgTo)
  69920.             lnRec = lnRec + 1
  69921.             lnPercent = CEILING(100*lnRec/lnTotRecs)
  69922.             IF (lnLastPercent > 0 AND ;
  69923.                     lnPercent - lnLastPercent < lnDelay  AND ;
  69924.                     lnPercent <> 100)
  69925.             ELSE 
  69926.                 =DoFoxyTherm(lnPercent, ;
  69927.                     ALLTRIM(TRANSFORM(lnPercent)) + "%  - " + TRANSFORM(FLOOR(SECONDS() - lnSecs)) + " " + _goFP._SecondsText , ;
  69928.                     _goFP._RunStatusText)
  69929.             ENDIF 
  69930.             This.Render(FRXRECNO, Left, Top, Width, Height, ContType, UNContents, 0)
  69931.         ENDIF
  69932.     ENDSCAN
  69933.     =DoFoxyTherm(100, ;
  69934.         "100%  - " + TRANSFORM(CEILING(SECONDS() - lnSecs)) + " " + _goFP._SecondsText , ;
  69935.                 _goFP._RunStatusText)
  69936. ENDIF 
  69937. * Finalize
  69938. This.AfterReport()
  69939. USE IN SELECT(tcOutputDBF)
  69940. * Restore DataSession, ALias
  69941. SET DATASESSION TO (lnOrigDataSession)
  69942. SELECT (lnSelect)
  69943. IF NOT This.QuietMode 
  69944.     =DoFoxyTherm()
  69945. ENDIF
  69946. IF llReleaseFP = .F.
  69947.     RELEASE llReleaseFP
  69948. ENDIF 
  69949. RETURN
  69950. ENDPROC
  69951. PROCEDURE render
  69952. * 2011-07-14 CChalom:
  69953. * Introduced text alignment, Width and Height
  69954. * Adjusted positions
  69955. * Fixed transparent background texts
  69956. * Reduced FontSize in 2 points to make text fit in space
  69957. * Added lines
  69958. * Created separate methods to deal with different tasks
  69959. * Managing images and shapes
  69960. LPARAMETERS nFRXRecno, nLeft, nTop, nWidth, nHeight, nObjectContinuationType, cContentsToBeRendered, GDIPlusImage
  69961. This.nX0 = nLeft
  69962. This.nY0 = nTop
  69963. This.nW0 = nWidth
  69964. This.nH0 = nHeight
  69965. LOCAL lcDebugInfo, lcHTML
  69966. IF THIS.lDebug
  69967.     lcDebugInfo = [<!-- nLeft:] + TRANSFORM(nLeft) + [, nTop:] + TRANSFORM(nTop) + [, nWidth:] + ;
  69968.         TRANSFORM(nWidth) + [, nHeight:] + TRANSFORM(nHeight) + [, ContinuationType:] + ;
  69969.         THIS.GetContinuationType(nObjectContinuationType) + [, cContents:] + cContentsToBeRendered + [ -->]
  69970.     FPUTS(THIS.nOutFile, lcDebugInfo)
  69971. ENDIF
  69972. #Define OBJ_COMMENT                  0
  69973. #Define OBJ_LABEL                    5
  69974. #Define OBJ_LINE                     6
  69975. #Define OBJ_RECTANGLE                7
  69976. #Define OBJ_FIELD                    8
  69977. #Define OBJ_PICTURE                 17
  69978. #Define OBJ_VARIABLE                18
  69979. LOCAL lnAdjust
  69980. lnAdjust = 1.10
  69981. * dpi2pix
  69982. nLeft   = CEILING(CEILING(THIS.nScreenDPI * nLeft / 960) * lnAdjust)
  69983. nTop    = ROUND(THIS.nScreenDPI * nTop / 960, 0)
  69984. nWidth  = CEILING(CEILING(THIS.nScreenDPI * nWidth / 960) * lnAdjust)
  69985. nHeight = CEILING(THIS.nScreenDPI * nHeight / 960)
  69986. IF PAGE > 1
  69987.     nTop = THIS.nPageHeight * (PAGE - This.oActiveListener.CommandClauses.RangeFrom) + nTop && Original -1
  69988. ENDIF
  69989. DO CASE
  69990. CASE ObjType = OBJ_LINE
  69991.     lcHTML = This.ProcessLines(nLeft, nTop, nWidth, nHeight)
  69992. CASE ObjType = OBJ_RECTANGLE
  69993.     lcHTML = This.ProcessShapes(nLeft, nTop, nWidth, nHeight, nObjectContinuationType)
  69994.     *!* 2011-08-17 - Jacques Parent
  69995.     *!* Added nObjectContinuationType parameter
  69996. CASE INLIST(ObjType, OBJ_LABEL, OBJ_FIELD)
  69997.     lcHTML = This.ProcessText(nLeft, nTop, nWidth, nHeight, cContentsToBeRendered)
  69998. CASE ObjType = OBJ_PICTURE
  69999.     lcHTML = This.ProcessImages(nLeft, nTop, nWidth, nHeight, cContentsToBeRendered)
  70000. OTHERWISE
  70001.     RETURN
  70002. ENDCASE
  70003. IF VARTYPE(lcHTML) <> "C"
  70004.     RETURN 
  70005. ENDIF
  70006. IF NOT EMPTY(lcHTML)
  70007.     =FPUTS(THIS.nOutFile, lcHtml)
  70008. ENDIF
  70009. ENDPROC
  70010. PROCEDURE afterreport
  70011. *!*    * Determine the ".WaitForNextReport" status if using "lObjTypeMode"
  70012. *!*    IF This.lObjTypeMode
  70013. *!*        TRY 
  70014. *!*            This.WaitForNextReport = This.CommandClauses.NoPageEject
  70015. *!*        CATCH
  70016. *!*        ENDTRY 
  70017. *!*    ENDIF 
  70018. *!*    IF NOT This.WaitForNextReport 
  70019.     FPUTS(THIS.nOutFile, [</body></html>])
  70020.     LOCAL llSaved
  70021.     llSaved = FCLOSE(THIS.nOutFile)
  70022.     * Delete the pages image files
  70023.     LOCAL n, lcFile
  70024.     FOR m.n = 1 TO ALEN(This.aPagesImgs,1)
  70025.         lcFile = This.aPagesImgs(m.n)
  70026.         IF NOT EMPTY(lcFile)
  70027.             TRY 
  70028.                 DELETE FILE (lcFile)
  70029.             CATCH
  70030.             ENDTRY
  70031.         ENDIF
  70032.     ENDFOR
  70033.     This.oActiveListener = ""
  70034. *!*    ENDIF 
  70035. ENDPROC
  70036. PROCEDURE getbandname
  70037. LPARAMETERS nBandObjCode
  70038. DO CASE
  70039.     CASE nBandObjCode = FRX_OBJCOD_TITLE
  70040.         RETURN 'FRX_OBJCOD_TITLE'
  70041.     CASE nBandObjCode = FRX_OBJCOD_PAGEHEADER
  70042.         RETURN 'FRX_OBJCOD_PAGEHEADER'
  70043.     CASE nBandObjCode = FRX_OBJCOD_COLHEADER
  70044.         RETURN 'FRX_OBJCOD_COLHEADER'
  70045.     CASE nBandObjCode = FRX_OBJCOD_GROUPHEADER
  70046.         RETURN 'FRX_OBJCOD_GROUPHEADER'
  70047.     CASE nBandObjCode = FRX_OBJCOD_DETAIL
  70048.         RETURN 'FRX_OBJCOD_DETAIL'
  70049.     CASE nBandObjCode = FRX_OBJCOD_GROUPFOOTER
  70050.         RETURN 'FRX_OBJCOD_GROUPFOOTER'
  70051.     CASE nBandObjCode = FRX_OBJCOD_COLFOOTER
  70052.         RETURN 'FRX_OBJCOD_COLFOOTER'
  70053.     CASE nBandObjCode = FRX_OBJCOD_PAGEFOOTER
  70054.         RETURN 'FRX_OBJCOD_PAGEFOOTER'
  70055.     CASE nBandObjCode = FRX_OBJCOD_SUMMARY
  70056.         RETURN 'FRX_OBJCOD_SUMMARY'
  70057.     CASE nBandObjCode = FRX_OBJCOD_DETAILHEADER
  70058.         RETURN 'FRX_OBJCOD_DETAILHEADER'
  70059.     CASE nBandObjCode = FRX_OBJCOD_DETAILFOOTER
  70060.         RETURN 'FRX_OBJCOD_DETAILFOOTER'
  70061.     OTHERWISE
  70062.         RETURN ''
  70063. ENDCASE
  70064. ENDPROC
  70065. PROCEDURE getfontstyle
  70066. LPARAMETERS nFontStyle
  70067. LOCAL cStyle
  70068. cStyle = ''
  70069. * extended styles
  70070. IF nFontStyle = FRX_FONTSTYLE_UNDERLINED
  70071.     cStyle = 'U'
  70072.     nFontStyle = nFontStyle - FRX_FONTSTYLE_UNDERLINED
  70073. ENDIF
  70074. IF nFontStyle = FRX_FONTSTYLE_STRIKETHROUGH
  70075.     cStyle = cStyle + 'S'
  70076.     nFontStyle = nFontStyle - FRX_FONTSTYLE_STRIKETHROUGH
  70077. ENDIF
  70078. * standart styles
  70079. DO CASE
  70080.     CASE nFontStyle = FRX_FONTSTYLE_NORMAL
  70081.         cStyle = cStyle + 'N'
  70082.     CASE nFontStyle = FRX_FONTSTYLE_BOLD
  70083.         cStyle = cStyle + 'B'
  70084.     CASE nFontStyle = FRX_FONTSTYLE_ITALIC
  70085.         cStyle = cStyle + 'I'
  70086.     CASE nFontStyle = FRX_FONTSTYLE_BOLD + FRX_FONTSTYLE_ITALIC
  70087.         cStyle = cStyle + 'BI'
  70088. ENDCASE
  70089. RETURN cStyle
  70090. ENDPROC
  70091. PROCEDURE rgbtohex
  70092. LPARAMETERS nReg, nGreen, nBlue
  70093. RETURN [#] + RIGHT(TRANSFORM(MAX(nReg, 0), [@0]), 2) + ;
  70094.     RIGHT(TRANSFORM(MAX(nGreen, 0), [@0]), 2) + RIGHT(TRANSFORM(MAX(nBlue, 0), [@0]), 2)
  70095. ENDPROC
  70096. PROCEDURE afterband
  70097. LPARAMETERS nBandObjCode, nFRXRecno
  70098. LOCAL cBand
  70099. SET DATASESSION TO THIS.FRXDATASESSION
  70100. GO nFRXRecno IN frx
  70101. cBand = THIS.GetBandName(nBandObjCode)
  70102. IF THIS.lDebug
  70103.     FPUTS(THIS.nOutFile, '<!-- AfterBand:' + cBand + ' -->')
  70104. ENDIF
  70105. IF ATC('pagefooter', cBand) > 0
  70106. * fputs(This.nOutFile, '<hr color = black>')
  70107. ENDIF
  70108. SET DATASESSION TO THIS.CURRENTDATASESSION
  70109. ENDPROC
  70110. PROCEDURE beforeband
  70111. LPARAMETERS nBandObjCode, nFRXRecno
  70112. SET DATASESSION TO THIS.FRXDATASESSION
  70113. GO nFRXRecno IN frx
  70114. IF THIS.lDebug
  70115.     FPUTS(THIS.nOutFile, '<!-- BeforeBand:' + THIS.GetBandName(nBandObjCode) + ' -->')
  70116. ENDIF
  70117. SET DATASESSION TO THIS.CURRENTDATASESSION
  70118. ENDPROC
  70119. PROCEDURE getcontinuationtype
  70120. LPARAMETERS nObjectContinuationType
  70121. DO CASE
  70122.     CASE nObjectContinuationType = LISTENER_CONTINUATION_NONE
  70123.         RETURN 'LISTENER_CONTINUATION_NONE'
  70124.     CASE nObjectContinuationType = LISTENER_CONTINUATION_START
  70125.         RETURN 'LISTENER_CONTINUATION_START'
  70126.     CASE nObjectContinuationType = LISTENER_CONTINUATION_MIDDLE
  70127.         RETURN 'LISTENER_CONTINUATION_MIDDLE'
  70128.     CASE nObjectContinuationType = LISTENER_CONTINUATION_END
  70129.         RETURN 'LISTENER_CONTINUATION_END'
  70130.     OTHERWISE
  70131.         RETURN ''
  70132. ENDCASE
  70133. ENDPROC
  70134. PROCEDURE getpageimg
  70135. #DEFINE OutputJPEG     102
  70136. #DEFINE OutputPNG     104
  70137. LOCAL loListener as ReportListener 
  70138. * loListener = IIF(VARTYPE(This.oActiveListener)="O", This.oActiveListener, This)
  70139. loListener = This.oActiveListener
  70140. LOCAL lnPage
  70141. lnPage = PAGE - loListener.CommandClauses.RangeFrom + 1
  70142. DIMENSION This.aPagesImgs(lnPage)
  70143. IF EMPTY(This.aPagesImgs(lnPage))
  70144.     LOCAL lnDeviceType, lcFile, lnDeviceType, lnHandle
  70145.     lnDeviceType = OutputJpeg  && OutputPNG
  70146.     lcFile = ADDBS(GETENV("TEMP")) + SYS(2015) + ".JPG" && ".PNG"
  70147.     loListener.OutputPage(lnPage, lcFile, lnDeviceType)
  70148.     This.aPagesImgs(lnPage) = lcFile
  70149. ENDIF 
  70150. RETURN This.aPagesImgs(lnPage)
  70151. ENDPROC
  70152. PROCEDURE getpicturefromlistener
  70153. * 2011/02/25 CChalom
  70154. * When we can't access the image from the EXE or from a General field, we still can get 
  70155. * an image of the object, and draw it to the PDF document
  70156. LPARAMETERS tnX, tnY, tnWidth, tnHeight, tcFile
  70157. LOCAL lcFile
  70158. lcFile = This.GetPageImg()
  70159. IF EMPTY(lcFile)
  70160.     RETURN .F. && Could not load image
  70161. ENDIF 
  70162. * Horizontal and Vertical factors to divide to convert to the correct coordinate 
  70163. LOCAL lnHor, lnVert
  70164. lnHor  = 9.972
  70165. lnVert = 9.996
  70166. lcNewFile = This.CropImage(lcFile, tnX / lnHor, tnY / lnVert, tnWidth / lnHor, tnHeight / lnVert, tcFile)
  70167. RETURN lcNewFile
  70168. ENDPROC
  70169. PROCEDURE processimages
  70170. LPARAMETERS tnLeft, tnTop, tnWidth, tnHeight, cContentsToBeRendered
  70171. * TODO:
  70172. * Manage new possibilities for storing images, using the new properties:
  70173. * cExternalFileLocation = ".\images"  
  70174. * lCopyImageFilesToExternalFileLocation = .T.
  70175. * Create Images directory
  70176. LOCAL lcFile, lcPath, lcShortPath, lcImageCopy, lcPathLocation
  70177. lcFile = This.cTargetFileName
  70178. IF EMPTY(This.cExternalFileLocation)
  70179.     lcPathLocation = JUSTSTEM(lcFile) + "_IMAGES"
  70180. ELSE 
  70181.     lcPathLocation = This.cExternalFileLocation
  70182. ENDIF
  70183. lcPath = ADDBS(JUSTPATH(lcFile)) + lcPathLocation
  70184. lcShortPath = lcPathLocation + "\" + JUSTFNAME(cContentsToBeRendered)
  70185. IF NOT DIRECTORY(lcPath)
  70186.     MKDIR (lcPath)
  70187. ENDIF
  70188. DO CASE
  70189. CASE EMPTY(cContentsToBeRendered)  && General field
  70190.     This.nImgCounter = This.nImgCounter + 1
  70191.     lcImageCopy = ADDBS(lcPath) + "_" + TRANSFORM(This.nImgCounter) + ".jpg"
  70192.     This.GetPictureFromListener(This.nX0, This.nY0, This.nW0, This.nH0, lcImageCopy)
  70193.     lcShortPath = JUSTSTEM(lcFile) + "_IMAGES" + "\" + "_" + TRANSFORM(This.nImgCounter) + ".jpg"
  70194. CASE NOT EMPTY(SYS(2000, cContentsToBeRendered))  && File is accessible in the disk
  70195.     lcImageCopy = ADDBS(lcPath) + JUSTFNAME(cContentsToBeRendered)
  70196.     IF PR_PathFileExists(lcImageCopy + CHR(0)) = 0 && PR_PathFileExists function in FoxyPreviewer.app
  70197. *    IF NOT FILE(lcImageCopy)
  70198.         COPY FILE (cContentsToBeRendered) TO (lcImageCopy)
  70199.     ENDIF
  70200. CASE EMPTY(SYS(2000, cContentsToBeRendered))  && Image embedded in EXE
  70201.     lcImageCopy = ADDBS(lcPath) + JUSTFNAME(cContentsToBeRendered)
  70202.     This.GetPictureFromListener(This.nX0, This.nY0, This.nW0, This.nH0, lcImageCopy)
  70203.     IF PR_PathFileExists(lcImageCopy + CHR(0)) = 0 && PR_PathFileExists function in FoxyPreviewer.app
  70204. *    IF NOT FILE(lcImageCopy)
  70205.         COPY FILE (cContentsToBeRendered) TO (lcImageCopy)
  70206.     ENDIF
  70207. OTHERWISE
  70208.     RETURN ""
  70209. ENDCASE
  70210. * If we could not generate the image copy, leave
  70211. IF PR_PathFileExists(lcImageCopy + CHR(0)) = 0 && PR_PathFileExists function in FoxyPreviewer.app
  70212.     RETURN ""
  70213. ENDIF    
  70214. LOCAL lcHTML, lcImgHTML
  70215. DO CASE
  70216. CASE General = 0        && Clip
  70217.     * Get the picture size
  70218.     LOCAL lnWidth, lnHeight, lnPictWidth, lnPictHeight, lcHTML
  70219.     LOCAL loVFPImg as Image
  70220.     loVFPImg = CREATEOBJECT("Image")
  70221.     loVFPImg.Picture = lcImageCopy
  70222.     lnWidth = loVFPImg.Width
  70223.     lnHeight = loVFPImg.Height
  70224.     loVFPImg = NULL
  70225.     CLEAR RESOURCES (lcImageCopy)
  70226.     lcImgHTML = [<img src="] + lcShortPath + [" width="] + TRANSFORM(lnWidth) + [" height="] + TRANSFORM(lnHeight) +  [" alt="">]
  70227.     lcHTML = ;
  70228.         [<span style="position:absolute;left:] + TRANSFORM(tnLeft) + [px;top:] + TRANSFORM(tnTop) + [px;] + ;
  70229.         [clip: rect(0 ] + TRANSFORM(tnWidth) + [px ] + TRANSFORM(tnHeight) + [px 0);] + ;
  70230.         [">] + ;
  70231.         lcImgHTML + ;
  70232.         [</span>]
  70233. *!*    img {    position: absolute;    
  70234. *!*    clip: rect(0 100px 200px 0);    
  70235. *!*    /* clip: shape(top right bottom left); NB 'rect' is the only available option */}
  70236. * <span style="position:absolute;left:9px;top:400px;clip: rect(0 100px 50px 0);"><img src="TEST22222_IMAGES\pr_mail_32.bmp" width="234" height="64"></span>
  70237. CASE General = 1    && Isometric
  70238.     * Calculating the image size for isometric images
  70239.     * Get the picture size
  70240.     LOCAL lnWidth, lnHeight, lnPictWidth, lnPictHeight, lcHTML
  70241.     LOCAL loVFPImg as Image
  70242.     loVFPImg = CREATEOBJECT("Image")
  70243.     loVFPImg.Picture = lcImageCopy
  70244.     lnPictWidth  = loVFPImg.Width
  70245.     lnPictHeight = loVFPImg.Height
  70246.     loVFPImg     = NULL
  70247.     CLEAR RESOURCES (lcImageCopy)
  70248.     * Isometric Adjustment
  70249.     LOCAL lnHorFactor, lnVertFactor, lnResizeFactor, lnIsoWidth, lnIsoHeight
  70250.     m.lnHorFactor    = m.tnWidth  / m.lnPictWidth
  70251.     m.lnVertFactor   = m.tnHeight / m.lnPictHeight
  70252.     m.lnResizeFactor = MIN(m.lnHorFactor, m.lnVertFactor)
  70253.     m.lnIsoWidth     = m.lnPictWidth * m.lnResizeFactor
  70254.     m.lnIsoHeight = m.lnPictHeight * m.lnResizeFactor
  70255.     lcImgHTML = [<img src="] + lcShortPath + [" width="] + TRANSFORM(lnIsoWidth) + [" height="] + TRANSFORM(lnIsoHeight) +  [" alt="">]
  70256.     lcHTML = ;
  70257.         [<span style="position:absolute;left:] + TRANSFORM(tnLeft) + [px;top:] + TRANSFORM(tnTop) + [px;] + ;
  70258.         [clip: rect(0 ] + TRANSFORM(tnWidth) + [px ] + TRANSFORM(tnHeight) + [px 0);] + ;
  70259.         [">] + ;
  70260.         lcImgHTML + ;
  70261.         [</span>]
  70262. OTHERWISE 
  70263. *!*    CASE .General = 2    && Stretch
  70264.     lcImgHTML = [<img src="] + lcShortPath + [" width="] + TRANSFORM(tnWidth) + [" height="] + TRANSFORM(tnHeight) +  [" alt="">]
  70265.     lcHTML = ;
  70266.         [<span style="position:absolute;left:] + TRANSFORM(tnLeft) + [px;top:] + TRANSFORM(tnTop) + [px;">] + ;
  70267.         lcImgHTML + ;
  70268.         [</span>]
  70269. ENDCASE 
  70270. RETURN lcHTML
  70271. ENDPROC
  70272. PROCEDURE processtext
  70273. LPARAMETERS tnLeft, tnTop, tnWidth, tnHeight, cContentsToBeRendered
  70274. LOCAL lcHTML, lcText, lcOrigText
  70275. * lcOrigText = ALLTRIM(STRCONV(cContentsToBeRendered, 6)) && STRCONV_UNICODE_UTF8) for Russian
  70276. * 2013-07-31 Let's use UTF-8
  70277. lcOrigText = STRCONV(cContentsToBeRendered, 10) && STRCONV_UNICODE_UTF8 for Russian
  70278. IF EMPTY(lcOrigText)
  70279.     RETURN ""
  70280. ENDIF 
  70281. * Html special chars
  70282. lcText = STRTRAN(lcOrigText, [&], [&]) && first!
  70283. *lcText = STRTRAN(lcText, [ ], [ ])
  70284. lcText = STRTRAN(lcText, [<], [<])
  70285. lcText = STRTRAN(lcText, [>], [>])
  70286. * Alignment settings
  70287. *     Offset = 0 && Left Aligned
  70288. *     Offset = 1 && Right Aligned
  70289. *     Offset = 2 && Center Aligned
  70290. LOCAL lcAlign
  70291. DO CASE
  70292. CASE Offset = 0
  70293.     lcAlign = "text-align: left;"
  70294. CASE Offset = 1
  70295.     lcAlign = "text-align: right;"
  70296. CASE Offset = 2
  70297.     lcAlign = "text-align: center;"
  70298. OTHERWISE
  70299.     lcAlign = ""
  70300. ENDCASE
  70301. * css style for span to output
  70302. LOCAL lcFillHex, lcPreSpan, lcPostSpan, lcForeHex, lcPreFont, lcForeHex, lcPostFont 
  70303. * Mode: 0 = Opaque background; 1 = Transparent
  70304. DO CASE
  70305. *CASE (fillred = 255 AND fillgreen = 255 AND fillblue = 255) OR Mode = 1 && Transparent
  70306. *    lcFillHex = "" && white
  70307. CASE Mode = 1 && Transparent
  70308.     lcFillHex = "" && white
  70309. CASE fillred = -1   AND fillgreen = -1  AND fillblue = -1
  70310.     lcFillHex = THIS.RgbToHex(255,255,255) && White
  70311. *    lcFillHex = "" && white
  70312. OTHERWISE
  70313.     lcFillHex = THIS.RgbToHex(fillred, fillgreen, fillblue)
  70314. ENDCASE
  70315. IF PenRed = -1
  70316.     lcForeHex = THIS.RgbToHex(0, 0, 0)
  70317. ELSE 
  70318.     lcForeHex = THIS.RgbToHex(penred, pengreen, penblue)
  70319. ENDIF
  70320. IF Stretch
  70321.     lcWWrap = [white-space:normal;]
  70322. ELSE 
  70323.     * Get the quantity of lines needed
  70324.     LOCAL lnLines
  70325.     lnLines = 0
  70326.     lnLines = This.GetLinesCnt(lcOrigText, FontFace, FontSize, FontStyle, tnLeft, tnTop, tnWidth, tnHeight)
  70327.     IF lnLines <= 1
  70328.         lcWWrap = [overflow:hidden ;] + [white-space:nowrap;]
  70329.     ELSE 
  70330.         lcWWrap = [white-space:normal;]
  70331.     ENDIF 
  70332. ENDIF 
  70333. lcPreSpan = [<span style="] + ;
  70334.             [position:absolute;left:] + TRANSFORM(tnLeft) + [px;top:] + TRANSFORM(tnTop) + [px;] + ;
  70335.             [width:] + TRANSFORM(tnWidth) + [px;height:] + TRANSFORM(tnHeight) + [px;] + lcAlign + ;
  70336.             IIF(EMPTY(lcFillHex), "", [background-color:] + lcFillHex + [;]) + ;
  70337.             [font-family:] + ALLTRIM(FontFace) + [;] + [font-size:] + TRANSFORM(FONTSIZE+2) + [px;] + ;
  70338.             [color:] +  + lcForeHex + ";" + ;
  70339.             lcWWrap + ;
  70340.             [">]
  70341. lcPostSpan = [</span>]
  70342. *    [word-wrap:break-word;] + ;
  70343. *    [overflow:hidden ;] + ;
  70344. *    [white-space:normal;] + ;
  70345. *    [overflow: visible;] + ;
  70346. * Font attrib
  70347. lcForeHex = THIS.RgbToHex(penred, pengreen, penblue)
  70348. *lcPreFont = [<font face="] + ALLTRIM(FontFace) + [" fontsize=] + TRANSFORM(FONTSIZE-2) + [ color=] + lcForeHex + [>]
  70349. *lcPostFont = [</font>]
  70350. lcPreFont = ""
  70351. lcPostFont = ""
  70352. * Set Html font style
  70353. LOCAL lcFontStyle, lcPreStyle, lcPostStyle
  70354. lcFontStyle = THIS.GetFontStyle(FontStyle)
  70355. STORE '' TO lcPreStyle, lcPostStyle
  70356. IF AT('B', lcFontStyle) > 0
  70357.     lcPreStyle = [<b>]
  70358.     lcPostStyle = [</b>]
  70359. ENDIF
  70360. IF AT('I', lcFontStyle) > 0
  70361.     lcPreStyle = lcPreStyle + [<i>]
  70362.     lcPostStyle = [</i>] + lcPostStyle
  70363. ENDIF
  70364. IF AT('U', lcFontStyle) > 0
  70365.     lcPreStyle = lcPreStyle + [<u>]
  70366.     lcPostStyle = [</u>] + lcPostStyle
  70367. ENDIF
  70368. IF AT('S', lcFontStyle) > 0
  70369.     lcPreStyle = lcPreStyle + [<s>]
  70370.     lcPostStyle = [</s>] + lcPostStyle
  70371. ENDIF
  70372. * write to file
  70373. lcHtml = lcPreSpan + lcPreFont + lcPreStyle + lcText + lcPostStyle + lcPostFont + lcPostSpan
  70374. RETURN lcHTML
  70375. ENDPROC
  70376. PROCEDURE processlines
  70377. LPARAMETERS tnLeft, tnTop, tnWIdth, tnHeight
  70378. LOCAL lcHTML
  70379. *!*    lcHTML = ;
  70380. *!*        [<span style="position:absolute;left:] + TRANSFORM(tnLeft) + [px;top:] + TRANSFORM(tnTop) + [px;width:] + TRANSFORM(tnWidth) + [px;] + ;
  70381. *!*        [height:1px;text-align: left;border:1px solid ] + THIS.RgbToHex(MAX(penred,0), MAX(pengreen,0), MAX(penblue,0)) + [;">] + ;
  70382. *!*        [<font face="Arial" fontsize=10 color=#000000></font></span>]
  70383. * 2013-07-31 Removed the <font> attribute
  70384. * lcHTML = ;
  70385.     [<span style="position:absolute;left:] + TRANSFORM(tnLeft) + [px;top:] + TRANSFORM(tnTop) + [px;width:] + TRANSFORM(tnWidth) + [px;] + ;
  70386.     [height:] + TRANSFORM(tnHeight) + [px;text-align: left;border:1px solid ] + THIS.RgbToHex(MAX(penred,0), MAX(pengreen,0), MAX(penblue,0)) + [;">] + ;
  70387.     [<font face="Arial" fontsize=10 color=#000000></font></span>]
  70388. lcHTML = ;
  70389.     [<span style="position:absolute;left:] + TRANSFORM(tnLeft) + [px;top:] + TRANSFORM(tnTop) + [px;width:] + TRANSFORM(tnWidth) + [px;] + ;
  70390.     [height:] + TRANSFORM(tnHeight) + [px;text-align: left;border:1px solid ] + THIS.RgbToHex(MAX(penred,0), MAX(pengreen,0), MAX(penblue,0)) + [;">] + ;
  70391.     [</span>]
  70392. RETURN lcHTML
  70393. ENDPROC
  70394. PROCEDURE processshapes
  70395. LPARAMETERS tnLeft, tnTop, tnWidth, tnHeight, tnObjectContinuationType
  70396. *!* 2011-08-17 - Jacques Parent
  70397. *!* Added tnObjectContinuationType parameter
  70398. * Process Background information
  70399. LOCAL lcFillHex
  70400. * Mode    : 0 = Opaque background; 1 = Transparent
  70401. * FillPat : 0 = Transparent; others fill patterns (opaque)
  70402. DO CASE
  70403. CASE ((Mode = 1) OR (FillPat = 0)) AND (FillRed = -1) && Transparent
  70404.     lcFillHex = "" && white
  70405. CASE fillred = -1   AND fillgreen = -1  AND fillblue = -1
  70406.     * lcFillHex = "" && White
  70407.     lcFillHex = THIS.RgbToHex(255,255,255) && White
  70408. OTHERWISE
  70409.     lcFillHex = THIS.RgbToHex(fillred, fillgreen, fillblue)
  70410. ENDCASE
  70411. lcFillHex = IIF(EMPTY(lcFillHex), "", [background-color:] + lcFillHex + [;])
  70412. * Process Border color
  70413. LOCAL lcBorderHex
  70414. lcBorderHex = ""
  70415. * PenPat: 0 = Transparent (no border)
  70416. DO CASE
  70417. CASE PenPat = 0 && Transparent
  70418. CASE PenRed = -1
  70419.     lcBorderHex = THIS.RgbToHex(0,0,0) && Black
  70420. OTHERWISE
  70421.     lcBorderHex = THIS.RgbToHex(PenRed, PenGreen, PenBlue)
  70422. ENDCASE
  70423. IF NOT EMPTY(lcBorderHex)
  70424.     *!* --------------------------------------------------------------------------------------------------------
  70425.     *!* --------------------------------------------------------------------------------------------------------
  70426.     *!* --------------------------------------------------------------------------------------------------------
  70427.     *!* 2011-08-17 - Jacques Parent
  70428.     *!* In case tnObjectContinuationType is <> 0, we must deactivate some borders...
  70429.     DO CASE
  70430.         CASE tnObjectContinuationType == 1    && Top of box only
  70431.             lcBorderHex = [border-left:] + TRANSFORM(PenSize) + [px ] + lcBorderHex + [ solid;] +;
  70432.                           [border-right:] + TRANSFORM(PenSize) + [px ] + lcBorderHex + [ solid;] +;
  70433.                           [border-top:] + TRANSFORM(PenSize) + [px ] + lcBorderHex + [ solid;]
  70434.         CASE tnObjectContinuationType == 2    && Middle of box only
  70435.             lcBorderHex = [border-left:] + TRANSFORM(PenSize) + [px ] + lcBorderHex + [ solid;] +;
  70436.                           [border-right:] + TRANSFORM(PenSize) + [px ] + lcBorderHex + [ solid;]
  70437.         CASE tnObjectContinuationType == 3    && Bottom of box only
  70438.             lcBorderHex = [border-left:] + TRANSFORM(PenSize) + [px ] + lcBorderHex + [ solid;] +;
  70439.                           [border-right:] + TRANSFORM(PenSize) + [px ] + lcBorderHex + [ solid;] +;
  70440.                           [border-bottom:] + TRANSFORM(PenSize) + [px ] + lcBorderHex + [ solid;]
  70441.         OTHERWISE    && Complete box
  70442.             lcBorderHex = [border:] + TRANSFORM(PenSize) + [px ] + ;
  70443.                 lcBorderHex + [ solid;]
  70444.             * border:1px solid 
  70445.     ENDCASE
  70446.     *!* --------------------------------------------------------------------------------------------------------
  70447.     *!* --------------------------------------------------------------------------------------------------------
  70448.     *!* --------------------------------------------------------------------------------------------------------
  70449. ENDIF 
  70450. LOCAL lcHTML
  70451. lcHTML = ;
  70452.     [<span style="position:absolute;left:] + TRANSFORM(tnLeft) + [px;top:] + TRANSFORM(tnTop) + [px;width:] + TRANSFORM(tnWidth) + [px;] + ;
  70453.     [height:] + TRANSFORM(tnHeight) + [px;text-align: left;] + ;
  70454.     lcBorderHex + ;
  70455.     lcFillHex + [">] + [ ] + ;
  70456.     [</span>]
  70457. RETURN lcHTML
  70458. ENDPROC
  70459. PROCEDURE getlinescnt
  70460. LPARAMETERS tcText, tcFontName, tnSize, tcStyle, tnLeft, tnTop, tnWidth, tnHeight
  70461. LOCAL loFont, lnChars, lnLines, lnHeight, lnWidth, lnFactor
  70462. LOCAL loRect as GpRectangle OF HOME() + "\ffc\_Gdiplus.vcx"
  70463. loRect = NEWOBJECT("GPRectangle", "_Gdiplus.vcx", "", 0, 0, tnWidth, tnHeight)
  70464. * Create a font object using the text object's settings.
  70465. loFont = NEWOBJECT("GPFont", "_Gdiplus.vcx")
  70466. loFont.Create(tcFontName, tnSize, tcStyle, 3)
  70467. LOCAL loGfx as GpGraphics OF HOME() + "\ffc\_Gdiplus.vcx"
  70468. loGfx  = NEWOBJECT("GpGraphics", "_Gdiplus.vcx")
  70469. lnFactor = 1 && 10
  70470. loGfx.CreateFromHWND(_Screen.HWnd)
  70471. loGfx.PageUnit  = 1
  70472. loGfx.PageScale = 0.3
  70473. loRect.w = tnWidth  / lnFactor
  70474. loRect.h = tnHeight / lnFactor
  70475. LOCAL loSize as GpSize OF HOME() + "\ffc\_Gdiplus.vcx"
  70476. loSize = loGfx.MeasureStringA(tcText, loFont, loRect.GdipRectF, .F., @lnChars, @lnLines)
  70477. lnWidth  = loSize.w
  70478. lnHeight = loSize.h
  70479. RETURN lnLines
  70480. * loGfx.SetHandle(0)
  70481. *RETURN (lnHeight / 960) * 72 * lnFactor
  70482. ENDPROC
  70483. PROCEDURE cropimage
  70484. Lparameters lcFile As String, tnX, tnY, lnWidth As Integer, lnHeight As Integer, tcNewFile
  70485. IF EMPTY(tcNewFile)
  70486.     tcNewFile = FORCEEXT(This._cTempFolder + Sys(2015), lcEXT)
  70487. ENDIF
  70488. Local loBmp As gpBitmap OF HOME() + "ffc\_gdiplus.vcx"
  70489. loBmp = NEWOBJECT("GpBitmap", "_GdiPlus.vcx")
  70490. loBmp.CreateFromFile(lcFile)
  70491. lnHeight = MIN(lnHeight, loBmp.ImageHeight)
  70492. lnWidth  = MIN(lnWidth , loBmp.ImageWidth)
  70493. LOCAL lhBitmap, lnStatus
  70494. lhBitmap = 0
  70495. * Function used in the CropImage method
  70496. DECLARE Long GdipCloneBitmapAreaI IN GDIPLUS.DLL AS pdfxGdipCloneBitmapAreaI Long x, Long y, Long nWidth, Long Height, Long PixelFormat, Long srcBitmap, Long @dstBitmap
  70497. lnStatus = pdfxGdipCloneBitmapAreaI(tnX, tnY, lnWidth, lnHeight, loBmp.PixelFormat, loBmp.GetHandle(), @lhBitmap)
  70498. IF (lnStatus <> 0) OR (lhBitmap = 0)
  70499.     loBmp = NULL
  70500.     * lnHandle = 0
  70501.     RETURN ""
  70502. ENDIF 
  70503. LOCAL loCropped As gpBitmap OF HOME() + "ffc\_gdiplus.vcx"
  70504. loCropped = NEWOBJECT("GpBitmap", "_GdiPlus.vcx")
  70505. loCropped.SetHandle(lhBitmap, .T.)  && Owns handle, please destroy the Bmp object when releasing
  70506. loCropped.SetResolution(loBmp.HorizontalResolution, loBmp.VerticalResolution)
  70507. LOCAL lcEXT, lcEncoder
  70508. lcEXT = UPPER(JUSTEXT(lcFile))
  70509. lcEncoder = IIF(lcEXT = "PNG", "image/png", "image/jpeg")
  70510. LOCAL lcCroppedFile
  70511. lcCroppedFile = tcNewFile && FORCEEXT(This._cTempFolder + Sys(2015), lcEXT)
  70512. loCropped.SaveToFile(lcCroppedFile, lcEncoder)
  70513. loCropped = NULL
  70514. loBMP     = NULL
  70515. This.oImages.Add(lcCroppedFile)
  70516. RETURN lcCroppedFile
  70517. ENDPROC
  70518. PROCEDURE Init
  70519. * Author: aMaximum
  70520. * Class adapted from the class posted at www.foxclub.ru
  70521. * Original info:
  70522. **************************************************
  70523. *-- Class: html_listener (c:\projects\vfp9_preview\html_listener.vcx)
  70524. *-- ParentClass: reportlistener
  70525. *-- BaseClass: reportlistener
  70526. *-- Time Stamp: 06/18/04 03:09:01 PM
  70527. * http://forum.foxclub.ru/read.php?29,144472
  70528. * http://translate.google.com/translate?js=n&prev=_t&hl=pt-BR&ie=UTF-8&layout=2&eotf=1&sl=ru&tl=en&u=http%3A%2F%2Fforum.foxclub.ru%2Fread.php%3F29%2C144472&act=url
  70529. * http://forum.foxclub.ru/read.php?29,144639,144728
  70530. * http://translate.google.com/translate?js=n&prev=_t&hl=pt-BR&ie=UTF-8&layout=2&eotf=1&sl=ru&tl=en&u=http%3A%2F%2Fforum.foxclub.ru%2Fread.php%3F29%2C144639%2C144728&act=url
  70531. * The report emerged, but the problem with the encoding of Russian letters. What is the trick?  
  70532. * Change in the method of render on strconv 
  70533. * cText = strconv (cContentsToBeRendered, 6)
  70534. *   Or changing 
  70535. * cHtml = [<html><head><META http-equiv="Content-Type" content="text/html;">] + ; 
  70536. *   to 
  70537. * cHtml = [<html><head><META http-equiv="Content-Type" content="text/html;charset=utf-8">] + ;
  70538. * and then there is a UNICODE conversion to UTF-8
  70539. * HTML Validator
  70540. * http://validator.w3.org/check
  70541. #define LOGPIXELSX 88
  70542. DECLARE INTEGER GetDeviceCaps IN WIN32API INTEGER HDC, INTEGER ITEM
  70543. DECLARE INTEGER GetDC IN WIN32API INTEGER HWND
  70544. LOCAL HDC, lnScreenDPI
  70545. HDC = GetDC(0)
  70546. lnScreenDPI = GetDeviceCaps( m.HDC, LOGPIXELSX )
  70547. THIS.nScreenDPI = lnScreenDPI
  70548. THIS.lDebug = .F. && VERSION(2) = 2
  70549. This._cTempFolder = ADDBS(SYS(2023)) && ADDBS(GETENV("TEMP"))
  70550. This.oImages = CREATEOBJECT("Collection")
  70551. ENDPROC
  70552. PROCEDURE Destroy
  70553. FCLOSE(This.nOutFile)
  70554. ENDPROC
  70555. _memberdata = 
  70556.     1927<VFPData><memberdata name="outputfromdata" display="OutputFromData"/><memberdata name="render" display="Render"/><memberdata name="beforereport" display="BeforeReport"/><memberdata name="afterreport" display="AfterReport"/><memberdata name="getbandname" display="GetBandName"/><memberdata name="getfontstyle" display="GetFontStyle"/><memberdata name="rgbtohex" display="RGBtoHex"/><memberdata name="afterband" display="AfterBand"/><memberdata name="beforeband" display="BeforeBand"/><memberdata name="noutfile" display="nOutFile"/><memberdata name="npagewidth" display="nPageWidth"/><memberdata name="npageheight" display="nPageHeight"/><memberdata name="nscreendpi" display="nScreenDPI"/><memberdata name="ldebug" display="lDebug"/><memberdata name="ctargetfilename" display="cTargetFileName"/><memberdata name="getcontinuationtype" display="GetContinuationType"/><memberdata name="oactivelistener" display="oActiveListener"/><memberdata name="ldefaultmode" display="lDefaultMode"/><memberdata name="getpageimg" display="GetPageImg"/><memberdata name="getpicturefromlistener" display="GetPictureFromListener"/><memberdata name="processimages" display="ProcessImages"/><memberdata name="processtext" display="ProcessText"/><memberdata name="processlines" display="ProcessLines"/><memberdata name="processshapes" display="ProcessShapes"/><memberdata name="getlinescnt" display="GetLinesCnt"/><memberdata name="nimgcounter" display="nImgCounter"/><memberdata name="nx0" display="nX0"/><memberdata name="ny0" display="nY0"/><memberdata name="nw0" display="nW0"/><memberdata name="nh0" display="nH0"/><memberdata name="cropimage" display="CropImage"/><memberdata name="_ctempfolder" display="_cTempFolder"/><memberdata name="apagesimgs" display="aPagesImgs"/><memberdata name="oimages" display="oImages"/><memberdata name="quietmode" display="QuietMode"/><memberdata name="waitfornextreport" display="WaitForNextReport"/></VFPData>
  70557. noutfile = -1
  70558. npagewidth = 0
  70559. npageheight = 0
  70560. nscreendpi = 0
  70561. ldebug = .F.
  70562. ctargetfilename = 
  70563. oactivelistener = .NULL.
  70564. ldefaultmode = .F.
  70565. nimgcounter = 0
  70566. nx0 = 0
  70567. ny0 = 0
  70568. nw0 = 0
  70569. nh0 = 0
  70570. _ctempfolder = .F.
  70571. oimages = 
  70572. cexternalfilelocation = 
  70573. lcopyimagefilestoexternalfilelocation = .T.
  70574. quietmode = .F.
  70575. waitfornextreport = .F.
  70576. Name = "pr_htmllistener2"
  70577. custom    
  70578. Spreadsheet file
  70579. FilterName
  70580. MS Excel 97
  70581. TCSOURCE
  70582. TCDESTINATION
  70583. OOOOPENURL
  70584. OOOCONVERTTOURL
  70585. AONEARG
  70586. CFILE
  70587. OOOMAKEPROPERTYVALUE
  70588. STORETOURL
  70589. CLOSE
  70590. Hiddena
  70591. _blank
  70592. ANOARGS
  70593. OOOMAKEPROPERTYVALUE
  70594. ODESKTOP
  70595. OOOGETDESKTOP
  70596. LOADCOMPONENTFROMURL
  70597. com.sun.star.beans.PropertyValue
  70598. nHandleb
  70599. nStateb
  70600. CNAME
  70601. UVALUE
  70602. NHANDLE
  70603. NSTATE
  70604. OPROPERTYVALUE
  70605. OOOCREATESTRUCT
  70606. VALUE
  70607. HANDLE
  70608. STATE'
  70609. ERROR
  70610. = DoNothing__ErrorHandler( ERROR(), MESSAGE(), LINENO(), SYS(16), PROGRAM(), SYS(2018) )
  70611. ON ERROR &cOldErrHandler
  70612. CTYPENAME
  70613. OSERVICEMANAGER
  70614. OOOGETSERVICEMANAGER
  70615. OSTRUCT
  70616. COLDERRHANDLER
  70617. BRIDGE_GETSTRUCT
  70618. __OOORELEASECACHEDVARS{
  70619. goOOoDesktopb
  70620. com.sun.star.frame.Desktop
  70621. GOOOODESKTOP 
  70622. OOOSERVICEMANAGER_CREATEINSTANCEs
  70623. goOOoServiceManagerb
  70624. com.sun.star.ServiceManager
  70625. GOOOOSERVICEMANAGER'
  70626. ERROR
  70627. = DoNothing__ErrorHandler( ERROR(), MESSAGE(), LINENO(), SYS(16), PROGRAM(), SYS(2018) )
  70628. ON ERROR &cOldErrHandler
  70629. CSERVICENAME
  70630. OSERVICEMANAGER
  70631. OOOGETSERVICEMANAGER    
  70632. OINSTANCE
  70633. COLDERRHANDLER
  70634. CREATEINSTANCE
  70635. __OOORELEASECACHEDVARS
  70636. PNERROR
  70637. PCERRMESSAGE
  70638. PNLINENO
  70639. PCPROGRAMFILESYS16    
  70640. PCPROGRAM
  70641. PCERRORPARAMSYS2018
  70642. GOOOOSERVICEMANAGER
  70643. GOOOODESKTOP
  70644. GOOOOCOREREFLECTIONv
  70645. file://
  70646. CFILENAME
  70647. OOoOpenURL
  70648. OOoMakePropertyValue
  70649. OOoCreateStruct
  70650. OOoGetDesktop
  70651. OOoGetServiceManagerK
  70652. OOoServiceManager_CreateInstance
  70653. DoNothing__ErrorHandlerz
  70654. __OOoReleaseCachedVars
  70655. OOoConvertToURL?    
  70656. FOXYPREVIEWER - Report preview and exporting utility 
  70657. http://foxypreviewer.codeplex.com
  70658. --------------------------------------------------------------------
  70659. Created by Cesar Ch
  70660.     vfpimaging@hotmail.com
  70661.     http://weblogs.foxite.com/vfpimaging
  70662. Main Features:
  70663. - Preview miniature of pages
  70664. - Export to image files (Bmp, Png, Tiff, Emf, Jpeg or Gif)
  70665. - Export to HTML, PDF, RTF OR XLS
  70666. - Send reports to email
  70667. - Search texts in reports
  70668. - Specify the quantity of pages to be printed
  70669. - Change the printer and settings on the fly
  70670. - Translate all dialogs, captions and tooltips to other languages than English 
  70671. Full online documentation:
  70672. http://foxypreviewer.codeplex.com/documentation
  70673. Get the latest release:
  70674. http://foxypreviewer.codeplex.com/releases
  70675. This utility uses some terrific tools created by other Foxers, that were provided as free and open source. 
  70676. These tools have received several tweaks and fixes in order to work in "FoxyPreviewer" and to support its features.
  70677. 1 - PDFListener (for the PDF output)
  70678.     by Luis Navas
  70679.     PDFx Update Support for some SP2 Features
  70680.     http://weblogs.foxite.com/luisnavas/archive/2008/10/06/7025.aspx
  70681. 2 - RTFListener (for the RTF output)
  70682.     by Vladimir Zhuravlev
  70683.     http://www.foxite.com/downloads/default.aspx?id=166
  70684. 3 - Proof Miniatures sheet
  70685.     by Colin Nicholls
  70686.         published in the article:
  70687.     Exploring and Extending Report Previewing in VFP9
  70688.     http://spacefold.com/colin/archive/articles/reportpreview/rp_extend.html
  70689. 4 - Accessing the Printer settings window
  70690.     by Barbara Peisch posted in Foxite forum
  70691.     * http://www.foxite.com/archives/0000158197.htm
  70692. 5 - ExcelListener (for the XLS output)
  70693.     by Alejandro Sosa
  70694.     http://www.portalfox.com/index.php?name=News&file=article&sid=2322&mode=nested&order=0&thold=0
  70695.     http://www.universalthread.com/Report.aspx?Session=34485849353954544C2B4D3D204A377A5466623943753451502B72453358567A7544745843317A333869724B65
  70696. 6 - HTMLListener in the simplified mode, with help of Max Arlikh
  70697. 7 - Text search engine by Doug Hennig, based in his article: "Listening to a Report"
  70698. 8 - CDO2000 class to send emails and several printer procedures by Sergey Berezniker
  70699. 9 - The HARU PDF Library - used in the PDFListener by Luis Navas
  70700. * << Haru Free PDF Library 2.0.8 >>
  70701. * URL http://libharu.sourceforge.net/
  70702. * Copyright (c) 1999-2006 Takeshi Kanno
  70703. * Permission to use, copy, modify, distribute and sell this software
  70704. * and its documentation for any purpose is hereby granted without fee,
  70705. * provided that the above copyright notice appear in all copies and
  70706. * that both that copyright notice and this permission notice appear
  70707. * in supporting documentation.
  70708. * It is provided "as is" without express or implied warranty.BM6
  70709. zzzzzzzzzzzzzzz
  70710. OBJTYPE
  70711. OBJCODE
  70712. OBJNAME
  70713. OBJVALUE
  70714. OBJINFO
  70715. _NullFlags
  70716.                                                            
  70717. Title                                                      
  70718.                                                            
  70719. PH                                                         
  70720.                                                            
  70721. CH                                                         
  70722.                                                            
  70723. GH                                                         
  70724.                                                            
  70725. D                                                          
  70726.                                                            
  70727. GF                                                         
  70728.                                                            
  70729. CF                                                         
  70730.                                                            
  70731. PF                                                         
  70732.                                                            
  70733. Summary                                                    
  70734.                                                            
  70735. DH                                                         
  70736.                                                            
  70737. DF                                                         
  70738.                                                            
  70739. VFP-Report                                                 
  70740.                                                            
  70741. T                                                          
  70742.                                                            
  70743. E                                                          
  70744.                                                            
  70745. P                                                          
  70746.                                                            
  70747. S                                                          
  70748.                                                            
  70749. L                                                          
  70750.                                                            
  70751. V                                                          
  70752.                                                            
  70753. FontRes                                                    
  70754.                                                            
  70755. DataEnv                                                    
  70756.                                                            
  70757. DE-Cursor                                                      
  70758.                                                            
  70759. DE-Relation                                                
  70760.                                                            
  70761. Group                                                      
  70762.                                                            
  70763. Reports                                                    
  70764.                                                            
  70765. Data                                                       
  70766.                                                            
  70767. VFP-RDL                                                    
  70768.                                                            
  70769. Pages                                                      
  70770.                                                            
  70771. Columns                                                    
  70772. Column collection root nodename
  70773. Pages collection root nodename
  70774. Title Band nodename
  70775. Page Header Band nodename
  70776. Column Header Band nodename
  70777. Group Header Band nodename
  70778. Detail Band nodename
  70779. Group Footer Band nodename
  70780. Column Footer Band nodename
  70781. Page Footer Band nodename
  70782. Summary Band nodename
  70783. Detail Header Band nodename
  70784. Detail Footer Band nodename
  70785. Report root nodename
  70786. Text object nodename
  70787. Expression object nodename
  70788. Picture object nodename
  70789. Shape object nodename
  70790. Line object nodename
  70791. Variable nodename
  70792. FontResource nodename
  70793. DataEnvironment nodename
  70794. DE-Cursor nodename
  70795. DE-Relation nodename
  70796. Group selector nodename
  70797. XML Document root nodename
  70798. Report scope data root nodename
  70799. 3VFP-RDL raw-format layout description root nodename
  70800. NDELETEDVALUETYPENAMEOBJCODEFRXNODES
  70801. objtype
  70802. fec^]VUTSRQM
  70803. objcode
  70804. objname
  70805. objvalue
  70806. eportFP-RDLVitleTummarySReportsagesHFPLroupHGFFontResEEnvataHFRelationE-CursorDolumnsHCF
  70807. DELETED()
  70808. BCDEFGHIJKLMNOPQRSTUVWXYZ[\
  70809. objtype+objcode+IIF(objtype=1109,500,0)
  70810. LHD@<840,($
  70811. xt\XPH
  70812. PLATFORM
  70813. UNIQUEID
  70814. TIMESTAMP
  70815. CLASS
  70816. CLASSLOC
  70817. BASECLASS
  70818. OBJNAME
  70819. PARENT
  70820. PROPERTIES
  70821. PROTECTED
  70822. METHODS
  70823. OBJCODE
  70824. RESERVED1
  70825. RESERVED2
  70826. RESERVED3
  70827. RESERVED4
  70828. RESERVED5
  70829. RESERVED6
  70830. RESERVED7
  70831. RESERVED8
  70832.  COMMENT Class               
  70833.  WINDOWS _11W0RVA8Y 795638748
  70834.  COMMENT RESERVED            
  70835.  WINDOWS _1220YMYY4 795638870
  70836.  COMMENT RESERVED            
  70837.  WINDOWS _11R0OBRPZ 796152731
  70838.  COMMENT RESERVED            
  70839.  WINDOWS _11R0OANEG 815371681E
  70840.  COMMENT RESERVED            
  70841.  WINDOWS _12G0NNCGK 823373366
  70842.  COMMENT RESERVED            
  70843.  WINDOWS _1360UZUFV 875730233J
  70844.  COMMENT RESERVED            
  70845.  WINDOWS _11R0OJHC3 876772270
  70846.  COMMENT RESERVED            
  70847.  WINDOWS _1Q30Y83RB 876843690
  70848.  COMMENT RESERVED            
  70849.  WINDOWS _11R0O4T3U 878921974#
  70850.  COMMENT RESERVED            
  70851.  WINDOWS _11R0O3J0I 8789222024
  70852.  COMMENT RESERVED            
  70853.  WINDOWS _11R0OMVRT 879259511B
  70854.  COMMENT RESERVED            
  70855.  WINDOWS _11R0O2LAK 879259653
  70856.  COMMENT RESERVED            
  70857.  WINDOWS _11R0NJMU6 879259670:
  70858.  COMMENT RESERVED            
  70859.  WINDOWS _11R0NL795 879259682
  70860.  COMMENT RESERVED            
  70861.  WINDOWS _11R0OM4OS 879259826    
  70862.  COMMENT RESERVED            
  70863.  WINDOWS _11R0OKCMZ 879329451
  70864.  COMMENT RESERVED            
  70865. VERSION =   3.00
  70866. Pixels
  70867. 8Width = 200
  70868. Height = 112
  70869. BackStyle = 0
  70870. Name = "cnt"
  70871. "Tahoma, 0, 8, 5, 13, 11, 21, 2, 0
  70872. Class
  70873. textbox
  70874. textbox
  70875. Class
  70876. resizegrabber
  70877. Pixels
  70878. Class
  70879. image
  70880. resizegrabber
  70881. image
  70882. Pixels
  70883. WFontName = "Tahoma"
  70884. FontSize = 8
  70885. Height = 22
  70886. Margin = 1
  70887. Width = 100
  70888. Name = "cbo"
  70889. "Tahoma, 0, 8, 5, 13, 11, 21, 2, 0
  70890. Pixels
  70891. Class
  70892. label
  70893. "Tahoma, 0, 8, 5, 13, 11, 21, 2, 0
  70894. +*resize Occurs when an object is resized.
  70895. Pixels
  70896. Class
  70897. OPicture = images\grabber.gif
  70898. Height = 12
  70899. Width = 12
  70900. Name = "resizegrabber"
  70901. commandbutton
  70902. *enabled_assign 
  70903. commandbutton
  70904. checkbox
  70905. Pixels
  70906. optiongroup
  70907. "Tahoma, 0, 8, 5, 13, 11, 21, 2, 0
  70908. optiongroup
  70909. spinner
  70910. spinner
  70911. "Tahoma, 0, 8, 5, 13, 11, 21, 2, 0
  70912. Pixels
  70913. Class
  70914. listbox
  70915. Class
  70916. "Tahoma, 0, 8, 5, 13, 11, 21, 2, 0
  70917. Pixels
  70918. *incomingvalue
  70919. *action 
  70920. *resetincoming 
  70921. Pixels
  70922. Class
  70923. combobox
  70924. combobox
  70925. Pixels
  70926. hyperlabel
  70927. checkbox
  70928. Class
  70929. Class
  70930. Pixels
  70931. Class
  70932. "Tahoma, 0, 8, 5, 13, 11, 21, 2, 0
  70933. optionbutton
  70934. optionbutton
  70935. Pixels
  70936. Class
  70937. shape
  70938. shape
  70939.     container
  70940.     pageframe
  70941. frxcontrols.vcx
  70942. editbox
  70943. label
  70944. listbox
  70945. Pixels
  70946. ;Height = 46
  70947. Width = 162
  70948. SpecialEffect = 0
  70949. Name = "shp"
  70950. Pixels
  70951. label
  70952. hyperlabel
  70953. currentpage
  70954. errored
  70955. Pixels
  70956. Class
  70957. Class
  70958. KFontName = "Tahoma"
  70959. FontSize = 8
  70960. Height = 78
  70961. Width = 174
  70962. Name = "lst"
  70963. Class
  70964.     container
  70965.     pageframe
  70966. Pixels
  70967. Class
  70968. editbox
  70969. "Tahoma, 0, 8, 5, 13, 11, 21, 2, 0
  70970. *enabled_assign 
  70971. AutoSize = .T.
  70972. FontUnderline = .T.
  70973. BackStyle = 0
  70974. Caption = "enter url here"
  70975. MousePointer = 15
  70976. ForeColor = 0,0,255
  70977. Name = "hyperlabel"
  70978. }FontName = "Tahoma"
  70979. FontSize = 8
  70980. BackStyle = 0
  70981. Caption = "prompt"
  70982. Height = 15
  70983. Width = 52
  70984. AutoSize = .T.
  70985. Name = "opt"
  70986. aFontName = "Tahoma"
  70987. FontSize = 8
  70988. Caption = "Caption"
  70989. Height = 187
  70990. Width = 187
  70991. Name = "pge"
  70992. lFontName = "Tahoma"
  70993. FontSize = 8
  70994. Height = 22
  70995. Margin = 1
  70996. SelectOnEntry = .T.
  70997. Width = 100
  70998. Name = "txt"
  70999. mAutoSize = .T.
  71000. FontName = "Tahoma"
  71001. FontSize = 8
  71002. Caption = "label"
  71003. Height = 15
  71004. Width = 24
  71005. Name = "lbl"
  71006. _Height = 25
  71007. Width = 75
  71008. FontName = "Tahoma"
  71009. FontSize = 8
  71010. Caption = "Caption"
  71011. Name = "cmd"
  71012. MemberClassLibrary = frxcontrols.vcx
  71013. MemberClass = "opt"
  71014. ButtonCount = 0
  71015. BackStyle = 0
  71016. BorderStyle = 1
  71017. Value = 0
  71018. Height = 66
  71019. Width = 117
  71020. Name = "opg"
  71021. NERROR
  71022. CMETHOD
  71023. NLINE
  71024. PARENT
  71025. ERROR
  71026. PARENT
  71027. RIGHTCLICK
  71028. Error,
  71029. RightClick
  71030. PROCEDURE Error
  71031. LPARAMETERS nError, cMethod, nLine
  71032. THIS.Parent.Error( nError, cMethod, nLine )
  71033. ENDPROC
  71034. PROCEDURE RightClick
  71035. THIS.Parent.RightClick()
  71036. ENDPROC
  71037. WFontName = "Tahoma"
  71038. FontSize = 8
  71039. Height = 53
  71040. Margin = 1
  71041. Width = 100
  71042. Name = "edt"
  71043. PROCEDURE enabled_assign
  71044. lparameters lEnabled
  71045. THIS.Enabled = m.lEnabled
  71046. ENDPROC
  71047. PROCEDURE Error
  71048. LPARAMETERS nError, cMethod, nLine
  71049. THIS.Parent.Error( nError, cMethod, nLine )
  71050. ENDPROC
  71051. readonly Specifies if the user can edit a control, or specifies if a table or view associated with a Cursor object allows updates.
  71052. *enabled_assign 
  71053. *readonly_assign 
  71054. *setfocus Sets the focus to a control.
  71055. PROCEDURE Error
  71056. LPARAMETERS nError, cMethod, nLine
  71057. THIS.Parent.Error( nError, cMethod, nLine )
  71058. ENDPROC
  71059. PROCEDURE RightClick
  71060. THIS.Parent.RightClick()
  71061. ENDPROC
  71062. jPROCEDURE KeyPress
  71063. lparameters iKey, iModifier
  71064. *----------------------------------
  71065. * Do not allow nulls to be entered
  71066. * with Ctrl-0 :
  71067. *----------------------------------
  71068. if m.iKey = 48 and 0 < bitand( m.iModifier, 2 )
  71069.     nodefault
  71070. endif
  71071. ENDPROC
  71072. PROCEDURE Error
  71073. LPARAMETERS nError, cMethod, nLine
  71074. THIS.Parent.Error( nError, cMethod, nLine )
  71075. ENDPROC
  71076. PROCEDURE Error
  71077. LPARAMETERS nError, cMethod, nLine
  71078. THIS.Parent.Error( nError, cMethod, nLine )
  71079. ENDPROC
  71080. PROCEDURE When
  71081. if THIS.Parent.ReadOnly
  71082.     return .F.
  71083. else 
  71084.     return .T.
  71085. endif
  71086. ENDPROC
  71087. PROCEDURE KeyPress
  71088. lparameters iKey, iModifier
  71089. *----------------------------------
  71090. * Do not allow nulls to be entered
  71091. * with Ctrl-0 :
  71092. *----------------------------------
  71093. if m.iKey = 48 and 0 < bitand( m.iModifier, 2 )
  71094.     nodefault
  71095. endif
  71096. ENDPROC
  71097. NERROR
  71098. CMETHOD
  71099. NLINE
  71100. PARENT
  71101. ERROR<
  71102. IKEY    
  71103. IMODIFIER
  71104. Error,
  71105. KeyPress
  71106. LENABLED
  71107. ENABLED.
  71108. NERROR
  71109. CMETHOD
  71110. NLINE
  71111. PARENT
  71112. ERROR
  71113. enabled_assign,
  71114. Errore
  71115. Width = 53
  71116. FontName = "Tahoma"
  71117. FontSize = 8
  71118. AutoSize = .T.
  71119. Alignment = 0
  71120. BackStyle = 0
  71121. Caption = "Check1"
  71122. Value = .F.
  71123. Name = "chk"
  71124. jPROCEDURE KeyPress
  71125. lparameters iKey, iModifier
  71126. *----------------------------------
  71127. * Do not allow nulls to be entered
  71128. * with Ctrl-0 :
  71129. *----------------------------------
  71130. if m.iKey = 48 and 0 < bitand( m.iModifier, 2 )
  71131.     nodefault
  71132. endif
  71133. ENDPROC
  71134. PROCEDURE Error
  71135. LPARAMETERS nError, cMethod, nLine
  71136. THIS.Parent.Error( nError, cMethod, nLine )
  71137. ENDPROC
  71138. PROCEDURE enabled_assign
  71139. lparameter lEnabled
  71140. for each optbut in THIS.Buttons
  71141.     optbut.Enabled = m.lEnabled
  71142. endfor
  71143. ENDPROC
  71144. PROCEDURE readonly_assign
  71145. lparameter lReadOnly
  71146. * Returning .F. in each button's .When() produces
  71147. * a more visually acceptable effect:
  71148. *for each optbut in this.Buttons 
  71149. *    optbut.Enabled = not m.lReadOnly
  71150. *endfor
  71151. THIS.ReadOnly = m.lReadOnly
  71152. ENDPROC
  71153. PROCEDURE setfocus
  71154. *----------------------------------------------------
  71155. * SetFocus() in containers doesn't work so well. This
  71156. * compensates for that bug by doing it manually:
  71157. *----------------------------------------------------
  71158. local oControl
  71159. for each oControl in this.Buttons
  71160.     if oControl.TabIndex = 1
  71161.         oControl.SetFocus()
  71162.         nodefault
  71163.         exit
  71164.     endif
  71165. endfor
  71166. ENDPROC
  71167. PROCEDURE RightClick
  71168. THIS.Parent.RightClick()
  71169. ENDPROC
  71170. PROCEDURE Error
  71171. LPARAMETERS nError, cMethod, nLine
  71172. THIS.Parent.Error( nError, cMethod, nLine )
  71173. ENDPROC
  71174. PROCEDURE enabled_assign
  71175. lparameter lEnabled
  71176. THIS.Enabled = m.lEnabled
  71177. ENDPROC
  71178. PROCEDURE Error
  71179. LPARAMETERS nError, cMethod, nLine
  71180. THIS.Parent.Error( nError, cMethod, nLine )
  71181. ENDPROC
  71182. PROCEDURE SetFocus
  71183. local oControl
  71184. for each oControl in this.Controls
  71185.     if type("oControl.TabIndex") = "N"
  71186.         if oControl.TabIndex = 1
  71187.             if pemstatus( m.oControl,"setFocus",5)
  71188.                 oControl.SetFocus()
  71189.                 nodefault
  71190.             endif
  71191.             exit
  71192.         endif
  71193.     endif
  71194. endfor
  71195. ENDPROC
  71196. PROCEDURE RightClick
  71197. THIS.Parent.RightClick()
  71198. ENDPROC
  71199. jPROCEDURE Error
  71200. LPARAMETERS nError, cMethod, nLine
  71201. THIS.Parent.Error( nError, cMethod, nLine )
  71202. ENDPROC
  71203. PROCEDURE KeyPress
  71204. lparameters iKey, iModifier
  71205. *----------------------------------
  71206. * Do not allow nulls to be entered
  71207. * with Ctrl-0 :
  71208. *----------------------------------
  71209. if m.iKey = 48 and 0 < bitand( m.iModifier, 2 )
  71210.     nodefault
  71211. endif
  71212. ENDPROC
  71213. PROCEDURE resetincoming
  71214. THIS.incomingValue = THIS.Value
  71215. ENDPROC
  71216. PROCEDURE LostFocus
  71217. if THIS.incomingValue <> THIS.Value
  71218.     this.action()
  71219. endif
  71220. ENDPROC
  71221. PROCEDURE UpClick
  71222. if THIS.incomingValue <> THIS.Value
  71223.     this.action()
  71224.     this.resetIncoming()
  71225. endif
  71226. ENDPROC
  71227. PROCEDURE DownClick
  71228. if THIS.incomingValue <> THIS.Value
  71229.     this.action()
  71230.     this.resetIncoming()
  71231. endif
  71232. ENDPROC
  71233. PROCEDURE Error
  71234. LPARAMETERS nError, cMethod, nLine
  71235. THIS.Parent.Error( nError, cMethod, nLine )
  71236. ENDPROC
  71237. PROCEDURE GotFocus
  71238. THIS.resetIncoming()
  71239. ENDPROC
  71240. PROCEDURE KeyPress
  71241. lparameters iKey, iModifier
  71242. *----------------------------------
  71243. * Do not allow nulls to be entered
  71244. * with Ctrl-0 :
  71245. *----------------------------------
  71246. if m.iKey = 48 and 0 < bitand( m.iModifier, 2 )
  71247.     nodefault
  71248. endif
  71249. ENDPROC
  71250. IKEY    
  71251. IMODIFIER.
  71252. NERROR
  71253. CMETHOD
  71254. NLINE
  71255. PARENT
  71256. ERROR
  71257. KeyPress,
  71258. Error}
  71259. jPROCEDURE Error
  71260. LPARAMETERS nError, cMethod, nLine
  71261. THIS.Parent.Error( nError, cMethod, nLine )
  71262. ENDPROC
  71263. PROCEDURE KeyPress
  71264. lparameters iKey, iModifier
  71265. *----------------------------------
  71266. * Do not allow nulls to be entered
  71267. * with Ctrl-0 :
  71268. *----------------------------------
  71269. if m.iKey = 48 and 0 < bitand( m.iModifier, 2 )
  71270.     nodefault
  71271. endif
  71272. ENDPROC
  71273. NERROR
  71274. CMETHOD
  71275. NLINE
  71276. PARENT
  71277. ERROR<
  71278. IKEY    
  71279. IMODIFIER
  71280. Error,
  71281. KeyPress
  71282. FontName = "Tahoma"
  71283. FontSize = 8
  71284. Height = 22
  71285. KeyboardLowValue = 0
  71286. Margin = 1
  71287. SelectOnEntry = .T.
  71288. SpinnerLowValue =   0.00
  71289. Width = 121
  71290. incomingvalue = 0
  71291. Name = "spn"
  71292. INCOMINGVALUE
  71293. VALUE+
  71294. INCOMINGVALUE
  71295. VALUE
  71296. ACTION8
  71297. INCOMINGVALUE
  71298. VALUE
  71299. ACTION
  71300. RESETINCOMING8
  71301. INCOMINGVALUE
  71302. VALUE
  71303. ACTION
  71304. RESETINCOMING.
  71305. NERROR
  71306. CMETHOD
  71307. NLINE
  71308. PARENT
  71309. ERROR
  71310. RESETINCOMING<
  71311. IKEY    
  71312. IMODIFIER
  71313. resetincoming,
  71314. LostFocusb
  71315. UpClick
  71316. DownClick$
  71317. Error
  71318. GotFocus
  71319. KeyPress
  71320. NERROR
  71321. CMETHOD
  71322. NLINE
  71323. PARENT
  71324. ERROR
  71325. PARENT
  71326. RIGHTCLICK
  71327. Error,
  71328. RightClick
  71329. IKEY    
  71330. IMODIFIER.
  71331. NERROR
  71332. CMETHOD
  71333. NLINE
  71334. PARENT
  71335. ERROR
  71336. KeyPress,
  71337. Error}
  71338. http://
  71339. http://
  71340. ShellExecute
  71341. SHELL32.dll
  71342. FindWindow
  71343. WIN32API
  71344. LCURL
  71345. CAPTION    
  71346. FORECOLOR
  71347. SHELLEXECUTE
  71348. SHELL32
  71349. FINDWINDOW
  71350. WIN32API
  71351. Click,
  71352. PARENT
  71353. RIGHTCLICKS
  71354. THIS.Controls[1]b
  71355. CONTROLS
  71356. SETFOCUS.
  71357. NERROR
  71358. CMETHOD
  71359. NLINE
  71360. PARENT
  71361. ERROR
  71362. RightClick,
  71363. Activate]
  71364. Error
  71365. THISFORM
  71366. HEIGHT
  71367. WIDTH
  71368. BORDERSTYLE
  71369. VISIBLEV
  71370. grabber.gif
  71371. grabber2k.gif
  71372. THEMES
  71373. PICTURE
  71374. resize,
  71375. IKEY    
  71376. IMODIFIER.
  71377. NERROR
  71378. CMETHOD
  71379. NLINE
  71380. PARENT
  71381. ERROR
  71382. KeyPress,
  71383. Error}
  71384. NERROR
  71385. CMETHOD
  71386. NLINE
  71387. PARENT
  71388. ERROR0
  71389. PARENT
  71390. READONLY<
  71391. IKEY    
  71392. IMODIFIER
  71393. Error,
  71394. KeyPress
  71395. LENABLED
  71396. OPTBUT
  71397. BUTTONS
  71398. ENABLED
  71399. LREADONLY
  71400. READONLYM
  71401. OCONTROL
  71402. BUTTONS
  71403. TABINDEX
  71404. SETFOCUS
  71405. PARENT
  71406. RIGHTCLICK.
  71407. NERROR
  71408. CMETHOD
  71409. NLINE
  71410. PARENT
  71411. ERROR
  71412. enabled_assign,
  71413. readonly_assign
  71414. setfocus
  71415. RightClickE
  71416. Errorv
  71417. LENABLED
  71418. ENABLED.
  71419. NERROR
  71420. CMETHOD
  71421. NLINE
  71422. PARENT
  71423. ERROR
  71424. oControl.TabIndexb
  71425. setFocus
  71426. OCONTROL
  71427. CONTROLS
  71428. TABINDEX
  71429. SETFOCUS
  71430. PARENT
  71431. RIGHTCLICK
  71432. enabled_assign,
  71433. Errore
  71434. SetFocus
  71435. RightClick
  71436. NERROR
  71437. CMETHOD
  71438. NLINE
  71439. PARENT
  71440. ERROR
  71441. PARENT
  71442. RIGHTCLICK
  71443. Error,
  71444. RightClick
  71445. #PROCEDURE RightClick
  71446. THIS.Parent.RightClick()
  71447. ENDPROC
  71448. PROCEDURE Activate
  71449. if type( "THIS.Controls[1]" ) = "O"
  71450.         THIS.Controls[1].SetFocus()
  71451.     catch
  71452.     endtry
  71453. endif
  71454. ENDPROC
  71455. PROCEDURE Error
  71456. LPARAMETERS nError, cMethod, nLine
  71457. THIS.Parent.Error( nError, cMethod, nLine )
  71458. ENDPROC
  71459. -PROCEDURE Click
  71460. local lcUrl
  71461. if left( lower(THIS.Caption), 7 ) = [http://]
  71462.     lcUrl = THIS.Caption
  71463.     lcUrl = [http://] + THIS.Caption
  71464. endif
  71465. THIS.ForeColor = RGB(128,0,128)
  71466. DECLARE INTEGER ShellExecute ;
  71467.     IN SHELL32.dll ;
  71468.     INTEGER nWinHandle,;
  71469.     STRING cOperation,;
  71470.     STRING cFileName,;
  71471.     STRING cParameters,;
  71472.     STRING cDirectory,;
  71473.     INTEGER nShowWindow
  71474. DECLARE INTEGER FindWindow ;
  71475.    IN WIN32API STRING cNull,STRING cWinName
  71476. =ShellExecute( FindWindow(0,_screen.Caption), "OPEN", m.lcUrl,"",sys(2023),1)
  71477. ENDPROC
  71478. aPROCEDURE resize
  71479. *=======================================================================
  71480. * Resize()
  71481. * Useage:
  71482. * In the form's resize event, call THIS.grabber.Resize() and the grabber
  71483. * image will relocate itself to the bottom right corner of the window
  71484. *=======================================================================
  71485. THIS.Top  = THISFORM.Height - THIS.Height
  71486. THIS.Left = THISFORM.Width  - THIS.Width
  71487. if THISFORM.BorderStyle<>3
  71488.     THIS.Visible = .F.
  71489. endif
  71490. ENDPROC
  71491. PROCEDURE Init
  71492. if _screen.Themes
  71493.     THIS.Picture = "grabber.gif"
  71494.     THIS.Picture = "grabber2k.gif"
  71495. endif
  71496. ENDPROC
  71497. PROCEDURE Error
  71498. LPARAMETERS nError, cMethod, nLine
  71499. THIS.Parent.Error( nError, cMethod, nLine )
  71500. ENDPROC
  71501. PROCEDURE RightClick
  71502. THIS.Parent.RightClick()
  71503. ENDPROC
  71504. ErasePage = .T.
  71505. MemberClassLibrary = frxcontrols.vcx
  71506. MemberClass = "pge"
  71507. PageCount = 0
  71508. TabStyle = 1
  71509. ActivePage = 0
  71510. Width = 241
  71511. Height = 169
  71512. currentpage = 0
  71513. errored = .F.
  71514. Name = "pgf"
  71515. jPROCEDURE KeyPress
  71516. lparameters iKey, iModifier
  71517. *----------------------------------
  71518. * Do not allow nulls to be entered
  71519. * with Ctrl-0 :
  71520. *----------------------------------
  71521. if m.iKey = 48 and 0 < bitand( m.iModifier, 2 )
  71522.     nodefault
  71523. endif
  71524. ENDPROC
  71525. PROCEDURE Error
  71526. LPARAMETERS nError, cMethod, nLine
  71527. THIS.Parent.Error( nError, cMethod, nLine )
  71528. ENDPROC
  71529. PLATFORM
  71530. UNIQUEID
  71531. TIMESTAMP
  71532. CLASS
  71533. CLASSLOC
  71534. BASECLASS
  71535. OBJNAME
  71536. PARENT
  71537. PROPERTIES
  71538. PROTECTED
  71539. METHODS
  71540. OBJCODE
  71541. RESERVED1
  71542. RESERVED2
  71543. RESERVED3
  71544. RESERVED4
  71545. RESERVED5
  71546. RESERVED6
  71547. RESERVED7
  71548. RESERVED8
  71549.  COMMENT Class               
  71550.  WINDOWS _1620OUFP8 819679853G
  71551.  COMMENT RESERVED            
  71552.  WINDOWS _19R0MDR54 819680088
  71553.  COMMENT RESERVED            
  71554.  WINDOWS _17X12M0M5 879329379
  71555.  WINDOWS _17X136SEA 8793293795
  71556.  WINDOWS _17X136SEQ 879329379
  71557.  WINDOWS _17X136SER 879329379@
  71558.  WINDOWS _17X136SES 879329379
  71559.  WINDOWS _17X136SET 879329379
  71560.  COMMENT RESERVED            
  71561.  WINDOWS _1S90NDO63 8822068228
  71562.  COMMENT RESERVED            
  71563.  WINDOWS _1800VSTVB 911434274
  71564.  COMMENT RESERVED            
  71565.  WINDOWS _1620OTOI2 911434517q
  71566.  COMMENT RESERVED            
  71567.  WINDOWS _1S90NDBMP 911784843(
  71568.  COMMENT RESERVED            
  71569.  WINDOWS _15L0YBYJT 926370639M
  71570.  WINDOWS _1620OUFP8 926370639
  71571.  WINDOWS _1MT10T1N1 926370639W
  71572.  COMMENT RESERVED            
  71573.  WINDOWS _15L0YNARZ1065729474
  71574.  WINDOWS _17L131CSM1065729474
  71575.  WINDOWS _17L131CSN 824659832
  71576.  WINDOWS _17L131CT2 824659832
  71577.  WINDOWS _15L0ZJMCW1065729474
  71578.  WINDOWS _17L131CT41065729474
  71579.  WINDOWS _17L131CT5 824659832
  71580.  WINDOWS _17L131CTH 824659832
  71581.  WINDOWS _17L131CTI1065729474@
  71582.  WINDOWS _1AU0YVMX51065729474
  71583.  WINDOWS _15L0ZJMDC1065729474"
  71584.  WINDOWS _15L0ZJMDD1065729474
  71585.  WINDOWS _15L0ZJMDR1065729474s
  71586.  WINDOWS _15L0ZJMDQ1065729474
  71587.  COMMENT RESERVED            
  71588.  WINDOWS _11R0TYA321065729481
  71589.  COMMENT RESERVED            
  71590. VERSION =   3.00
  71591. "Tahoma, 0, 8, 5, 13, 11, 21, 2, 0
  71592. Pixels
  71593. frxpreview.h
  71594. foxpro_reporting.h
  71595. frxpreview_loc.h
  71596. "Tahoma, 0, 8, 5, 13, 11, 23, 2, 0
  71597. frxbaseform
  71598. frxpreview.h
  71599. Pixels
  71600. Class
  71601. frxbaseform
  71602. frxpreviewastopform
  71603. Class
  71604. frxpreviewform
  71605. iscreendpi
  71606. *checkforlargefonts Called in the Init() to set font attributes if Large Fonts are detected.
  71607. frxpreviewastopform
  71608. frxpreview.vcx
  71609. "Tahoma, 0, 8, 5, 13, 11, 21, 2, 0
  71610. frxpreviewinscreen
  71611. Pixels
  71612. Class
  71613. frxpreviewform
  71614. frxpreviewinscreen
  71615. "Tahoma, 0, 8, 5, 13, 11, 21, 2, 0
  71616. frxpreview.h
  71617. frxpreview.vcx
  71618. frxpreviewform
  71619. lastzoomlevel
  71620. Pixels
  71621. ShowWindow = 2
  71622. DoCreate = .T.
  71623. MDIForm = .F.
  71624. topform = .T.
  71625. Name = "frxpreviewastopform"
  71626. spacer.Name = "spacer"
  71627. Label1.Name = "Label1"
  71628. Class
  71629. Label1
  71630. frxbaseform
  71631. frxpreviewform
  71632. frxpreviewform
  71633. Pixels
  71634. frxpreview.h
  71635. foxpro_reporting.h
  71636. frxpreview_loc.h
  71637. "Tahoma, 0, 8, 5, 13, 11, 21, 2, 0
  71638. frxpreviewindesktop
  71639. Class
  71640. frxpreviewform
  71641. PARENT
  71642. RIGHTCLICK
  71643. RightClick,
  71644. label
  71645. label
  71646. frxpreviewform
  71647. frxpreviewindesktop
  71648. frxpreview.vcx
  71649. PARENT
  71650. Click,
  71651. "Tahoma, 0, 8, 5, 13, 11, 21, 2, 0
  71652. frxgotopageform
  71653. spacer
  71654. shape
  71655. shape
  71656. frxpreview.h
  71657. Pixels
  71658. Class
  71659. frxbaseform
  71660. Pixels
  71661. frxpreview.h
  71662. foxpro_reporting.h
  71663. frxpreview_loc.h
  71664. frxgotopageform
  71665. .PROCEDURE Click
  71666. THIS.Parent.Hide()
  71667. ENDPROC
  71668. frxgotopageform
  71669.     cmdCancel
  71670. commandbutton
  71671. frxpreview.vcx
  71672. gTop = 47
  71673. Left = 248
  71674. Width = 84
  71675. Cancel = .T.
  71676. Caption = "Cancel"
  71677. ZOrderSet = 4
  71678. Name = "cmdCancel"
  71679. frxcontrols.vcx
  71680. frxgotopageform
  71681. cmdOK
  71682. commandbutton
  71683. PTop = 32
  71684. Left = 28
  71685. Height = 10
  71686. Width = 19
  71687. BorderStyle = 0
  71688. Name = "spacer"
  71689. frxpreviewtoolbar
  71690. Class
  71691. PARENT
  71692. PAGENO    
  71693. SPNPAGENO
  71694. VALUE
  71695. Click,
  71696. `PROCEDURE Click
  71697. THIS.Parent.pageNo = THIS.Parent.spnPageNo.Value
  71698. THIS.Parent.Hide()
  71699. ENDPROC
  71700. frxcontrols.vcx
  71701. frxgotopageform
  71702. lblCaption
  71703. label
  71704. PARENT
  71705. PREVIEWFORM
  71706. ACTIONPRINT
  71707. Click,
  71708. Initn
  71709. frxpreview.h
  71710. foxpro_reporting.h
  71711. frxpreview_loc.h
  71712. "Tahoma, 0, 8, 5, 13, 11, 23, 2, 0
  71713. frxpreview.h
  71714. toolbar
  71715. frxpreviewtoolbar
  71716. Top = 3
  71717. Left = 473
  71718. Height = 22
  71719. Width = 85
  71720. Picture = images\print.bmp
  71721. Caption = " Print"
  71722. ToolTipText = "Print report"
  71723. SpecialEffect = 2
  71724. PicturePosition = 1
  71725. Name = "cmdPrint"
  71726. cmdPrint
  71727. frxpreview.vcx
  71728. frxpreviewtoolbar
  71729. frxcontrols.vcx
  71730. frxgotopageform
  71731.     spnPageno
  71732. `Top = 15
  71733. Left = 248
  71734. Width = 84
  71735. Caption = "OK"
  71736. Default = .T.
  71737. ZOrderSet = 3
  71738. Name = "cmdOK"
  71739. spinner
  71740. FontName = "Tahoma"
  71741. FontSize = 8
  71742. BackStyle = 0
  71743. Caption = "(build)"
  71744. Height = 17
  71745. Left = 2
  71746. Top = 1
  71747. Width = 40
  71748. ForeColor = 192,192,192
  71749. Name = "Label1"
  71750. commandbutton
  71751. frxcontrols.vcx
  71752. frxpreviewtoolbar
  71753. cmdClose
  71754. shapecanvas
  71755. Pixels
  71756. Class
  71757. shapecanvas
  71758. Name = "shapecanvas"
  71759. shape
  71760. frxcontrols.vcx
  71761. PARENT
  71762. PREVIEWFORM
  71763. ACTIONCLOSE
  71764. Click,
  71765. Initn
  71766. PROCEDURE Click
  71767. THIS.Parent.previewform.actionPrint()
  71768. ENDPROC
  71769. PROCEDURE Init
  71770. dodefault()
  71771. #IF USE_LOC_STRINGS_IN_UI
  71772.     THIS.Caption =     UI_TOOLBAR_PRINT_LOC
  71773.     THIS.ToolTipText = UI_TOOLBAR_TT_PRINT_LOC
  71774. #ENDIF
  71775. ENDPROC
  71776. PARENT
  71777. PREVIEWFORM
  71778. ACTIONGOLAST
  71779. Click,
  71780. Initr
  71781. PROCEDURE Click
  71782. THIS.Parent.previewform.actionClose()
  71783. ENDPROC
  71784. PROCEDURE Init
  71785. dodefault()
  71786. #IF USE_LOC_STRINGS_IN_UI
  71787.     THIS.Caption =     UI_TOOLBAR_CLOSE_LOC
  71788.     THIS.ToolTipText = UI_TOOLBAR_TT_CLOSE_LOC
  71789. #ENDIF
  71790. ENDPROC
  71791. Top = 3
  71792. Left = 388
  71793. Height = 22
  71794. Width = 85
  71795. Picture = images\preclose.bmp
  71796. Caption = " Close"
  71797. ToolTipText = "Close preview"
  71798. SpecialEffect = 2
  71799. PicturePosition = 1
  71800. Name = "cmdClose"
  71801. commandbutton
  71802. frxcontrols.vcx
  71803. frxpreviewtoolbar
  71804. opgPageCount
  71805. optiongroup
  71806. frxcontrols.vcx
  71807.     separator
  71808. imagecanvas
  71809. Class
  71810. frxpreviewtoolbar
  71811. image
  71812. imagecanvas
  71813. gTop = 15
  71814. Left = 12
  71815. Height = 66
  71816. Width = 224
  71817. BackStyle = 0
  71818. ZOrderSet = 0
  71819. Style = 3
  71820. Name = "Shp1"
  71821. ATop = 3
  71822. Left = 311
  71823. Height = 0
  71824. Width = 0
  71825. Name = "Separator4"
  71826. Separator4
  71827.     separator
  71828. Height = 22
  71829. Left = 204
  71830. Style = 2
  71831. TabStop = .F.
  71832. ToolTipText = "Choose page magnification"
  71833. Top = 3
  71834. DisplayCount = 5
  71835. Name = "cboZoom"
  71836. frxpreviewtoolbar
  71837. cboZoom
  71838. combobox
  71839. PROCEDURE InteractiveChange
  71840. THIS.Parent.ActionZoomLevel( THIS.Value )
  71841. ENDPROC
  71842. PROCEDURE Init
  71843. dodefault()
  71844. #IF USE_LOC_STRINGS_IN_UI
  71845.     THIS.ToolTipText = UI_TOOLBAR_TT_ZOOMLEVEL_LOC
  71846. #ENDIF
  71847. ENDPROC
  71848. ]Caption = " Go to page "
  71849. Left = 20
  71850. Top = 8
  71851. ZOrderSet = 2
  71852. Style = 3
  71853. Name = "lblCaption"
  71854. fHeight = 21
  71855. InputMask = "9999"
  71856. Left = 64
  71857. Top = 36
  71858. Width = 126
  71859. ZOrderSet = 1
  71860. Name = "spnPageno"
  71861. frxcontrols.vcx
  71862. frxpreviewtoolbar
  71863.     separator
  71864. Separator2
  71865. frxcontrols.vcx
  71866. PROCEDURE LostFocus
  71867. if THIS.Value < THIS.SpinnerLowValue
  71868.     THIS.Value = 1
  71869. endif
  71870. if THIS.Value > THIS.SpinnerHighValue
  71871.     THIS.Value = THIS.SpinnerHighValue
  71872. endif
  71873. dodefault()
  71874. ENDPROC
  71875. frxcontrols.vcx
  71876. frxgotopageform
  71877. shape
  71878.     separator
  71879. Height = 238
  71880. Width = 367
  71881. DoCreate = .T.
  71882. AutoCenter = .T.
  71883. Caption = "Form"
  71884. FontName = "Tahoma"
  71885. FontSize = 8
  71886. Icon = images\wwrite.ico
  71887. screendpi = 96
  71888. Name = "frxbaseform"
  71889. PARENT
  71890. ACTIONZOOMLEVEL
  71891. VALUE
  71892. InteractiveChange,
  71893. Inito
  71894. ATop = 3
  71895. Left = 204
  71896. Height = 0
  71897. Width = 0
  71898. Name = "Separator2"
  71899. PROCEDURE Click
  71900. THIS.Parent.Parent.previewform.actionGoLast()
  71901. ENDPROC
  71902. PROCEDURE Init
  71903. dodefault()
  71904. #IF USE_LOC_STRINGS_IN_UI
  71905.     THIS.ToolTipText = UI_TOOLBAR_TT_LAST_LOC
  71906. #ENDIF
  71907. ENDPROC
  71908.     cmdBottom
  71909. PARENT
  71910. PREVIEWFORM
  71911. ACTIONGONEXT
  71912. Click,
  71913. Initr
  71914. Top = 0
  71915. Left = 23
  71916. Height = 22
  71917. Width = 23
  71918. Picture = images\prelast.bmp
  71919. Caption = ""
  71920. ToolTipText = "Last page"
  71921. SpecialEffect = 2
  71922. Name = "cmdBottom"
  71923. frxpreviewtoolbar.cntNext
  71924. commandbutton
  71925. frxpreviewproxy
  71926. image
  71927. frxcontrols.vcx
  71928. PARENT
  71929. PREVIEWFORM
  71930. ACTIONGOTOPAGE
  71931. Click,
  71932. Initq
  71933. frxpreviewtoolbar.cntNext
  71934. cmdForward
  71935. Class
  71936. commandbutton
  71937. tempfile
  71938. cntNext
  71939. custom
  71940. Pixels
  71941. PROCEDURE Click
  71942. THIS.Parent.Parent.previewform.actionGoNext()
  71943. ENDPROC
  71944. PROCEDURE Init
  71945. dodefault()
  71946. #IF USE_LOC_STRINGS_IN_UI
  71947.     THIS.ToolTipText = UI_TOOLBAR_TT_NEXT_LOC
  71948. #ENDIF
  71949. ENDPROC
  71950. frxcontrols.vcx
  71951. frxpreviewtoolbar
  71952. frxpreviewproxy
  71953. frxpreview.h
  71954. QTop = 3
  71955. Left = 151
  71956. Width = 46
  71957. Height = 22
  71958. BorderWidth = 0
  71959. Name = "cntNext"
  71960.     container
  71961. frxcontrols.vcx
  71962. ShowWindow = 0
  71963. DoCreate = .T.
  71964. Name = "frxpreviewinscreen"
  71965. spacer.Name = "spacer"
  71966. canvas1.Name = "canvas1"
  71967. canvas2.Name = "canvas2"
  71968. canvas3.Name = "canvas3"
  71969. canvas4.Name = "canvas4"
  71970. Top = 0
  71971. Left = 0
  71972. Height = 22
  71973. Width = 23
  71974. Picture = images\prenext.bmp
  71975. Caption = ""
  71976. ToolTipText = "Next page"
  71977. SpecialEffect = 2
  71978. Name = "cmdForward"
  71979. PROCEDURE enabled_assign
  71980. lparameter lEnabled
  71981. THIS.cmdBottom.Enabled  = m.lEnabled
  71982. THIS.cmdForward.Enabled = m.lEnabled
  71983. dodefault(m.lEnabled)
  71984. ENDPROC
  71985. frxpreviewtoolbar
  71986. cmdGoToPage
  71987. commandbutton
  71988. frxcontrols.vcx
  71989. frxpreviewtoolbar.cntPrev
  71990. Pixels
  71991. custom
  71992. 2extensionhandler
  71993. previewformclass
  71994. getwindowref
  71995. 9PROCEDURE RightClick
  71996. THIS.Parent.RightClick()
  71997. ENDPROC
  71998. LENABLED
  71999. THIS    
  72000. CMDBOTTOM
  72001. ENABLED
  72002. CMDFORWARD
  72003. enabled_assign,
  72004. Top = 3
  72005. Left = 51
  72006. Height = 22
  72007. Width = 100
  72008. Picture = images\gotopage.bmp
  72009. Caption = " Go to page"
  72010. ToolTipText = "Go to page"
  72011. SpecialEffect = 2
  72012. PicturePosition = 1
  72013. Name = "cmdGoToPage"
  72014. OStretch = 2
  72015. Height = 116
  72016. Width = 100
  72017. tempfile = ("")
  72018. Name = "imagecanvas"
  72019. Desktop = .T.
  72020. DoCreate = .T.
  72021. Name = "frxpreviewintopform"
  72022. spacer.Name = "spacer"
  72023. canvas1.Name = "canvas1"
  72024. canvas2.Name = "canvas2"
  72025. canvas3.Name = "canvas3"
  72026. canvas4.Name = "canvas4"
  72027. PARENT
  72028. ACTIONPAGECOUNTg
  72029. OBUTTON
  72030. BUTTONS
  72031. AUTOSIZE
  72032. PICTUREPOSITION
  72033. HEIGHT
  72034. WIDTH
  72035. InteractiveChange,
  72036. Initb
  72037. Opt1.Init
  72038. Opt2.Init$
  72039. Opt3.Init4
  72040. PROCEDURE InteractiveChange
  72041. THIS.Parent.ActionPageCount()
  72042. ENDPROC
  72043. PROCEDURE Init
  72044. * Some kind of bug is re-sizing the buttons:
  72045. for each oButton in THIS.Buttons
  72046.     oButton.AutoSize = .F.
  72047.     oButton.PicturePosition = 13
  72048.     oButton.Top    = 0
  72049.     oButton.Height = 22
  72050.     oButton.Width  = 25
  72051. endfor
  72052. ENDPROC
  72053. PROCEDURE Opt1.Init
  72054. dodefault()
  72055. #IF USE_LOC_STRINGS_IN_UI
  72056.     THIS.ToolTipText = UI_TOOLBAR_TT_1PAGE_LOC
  72057. #ENDIF
  72058. ENDPROC
  72059. PROCEDURE Opt2.Init
  72060. dodefault()
  72061. #IF USE_LOC_STRINGS_IN_UI
  72062.     THIS.ToolTipText = UI_TOOLBAR_TT_2PAGES_LOC
  72063. #ENDIF
  72064. ENDPROC
  72065. PROCEDURE Opt3.Init
  72066. dodefault()
  72067. #IF USE_LOC_STRINGS_IN_UI
  72068.     THIS.ToolTipText = UI_TOOLBAR_TT_4PAGES_LOC
  72069. #ENDIF
  72070. ENDPROC
  72071. cmdBack
  72072. commandbutton
  72073. frxcontrols.vcx
  72074. frxpreviewtoolbar.cntPrev
  72075. cmdTop
  72076. frxpreview.h
  72077. foxpro_reporting.h
  72078. frxpreview_loc.h
  72079. PARENT
  72080. PREVIEWFORM
  72081. ACTIONGOPREV
  72082. Click,
  72083. Initr
  72084. PROCEDURE Click
  72085. THIS.Parent.previewform.actionGoToPage()
  72086. ENDPROC
  72087. PROCEDURE Init
  72088. dodefault()
  72089. #IF USE_LOC_STRINGS_IN_UI
  72090.     THIS.Caption =     UI_TOOLBAR_GOTOPAGE_LOC
  72091.     THIS.ToolTipText = UI_TOOLBAR_TT_GOTOPAGE_LOC
  72092. #ENDIF
  72093. ENDPROC
  72094. commandbutton
  72095. frxcontrols.vcx
  72096. frxpreviewtoolbar
  72097. cntPrev
  72098. |pageno Provides the current page number for report output.
  72099. pagetotal Provides a PageTotal for report output.
  72100. oparentform
  72101. Top = 14
  72102. Left = 12
  72103. Height = 92
  72104. Width = 345
  72105. ShowWindow = 1
  72106. DoCreate = .T.
  72107. AutoCenter = .F.
  72108. BorderStyle = 2
  72109. Closable = .F.
  72110. MaxButton = .F.
  72111. MinButton = .F.
  72112. AlwaysOnTop = .T.
  72113. AllowOutput = .F.
  72114. pageno = 0
  72115. pagetotal = 0
  72116. oparentform = (.NULL.)
  72117. Name = "frxgotopageform"
  72118. iButtonCount = 3
  72119. BorderStyle = 0
  72120. Height = 22
  72121. Left = 311
  72122. Top = 3
  72123. Width = 77
  72124. Name = "opgPageCount"
  72125. Opt1.Picture = images\1page.bmp
  72126. Opt1.PicturePosition = 13
  72127. Opt1.Caption = ""
  72128. Opt1.Height = 38
  72129. Opt1.Left = 0
  72130. Opt1.SpecialEffect = 2
  72131. Opt1.Style = 1
  72132. Opt1.ToolTipText = "One page"
  72133. Opt1.Top = 0
  72134. Opt1.Width = 32
  72135. Opt1.AutoSize = .F.
  72136. Opt1.Name = "Opt1"
  72137. Opt2.Picture = images\2page.bmp
  72138. Opt2.PicturePosition = 13
  72139. Opt2.Caption = ""
  72140. Opt2.Height = 38
  72141. Opt2.Left = 25
  72142. Opt2.SpecialEffect = 2
  72143. Opt2.Style = 1
  72144. Opt2.ToolTipText = "Two pages"
  72145. Opt2.Top = 0
  72146. Opt2.Width = 32
  72147. Opt2.AutoSize = .F.
  72148. Opt2.Name = "Opt2"
  72149. Opt3.Picture = images\4page.bmp
  72150. Opt3.PicturePosition = 13
  72151. Opt3.Caption = ""
  72152. Opt3.Height = 38
  72153. Opt3.Left = 50
  72154. Opt3.SpecialEffect = 2
  72155. Opt3.Style = 1
  72156. Opt3.ToolTipText = "Four pages"
  72157. Opt3.Top = 0
  72158. Opt3.Width = 32
  72159. Opt3.AutoSize = .F.
  72160. Opt3.Name = "Opt3"
  72161.     container
  72162. frxcontrols.vcx
  72163. PROCEDURE Init
  72164. *----------------------------------------------------
  72165. * For final release we'll make this invisible
  72166. *----------------------------------------------------
  72167. if type("SHOW_APPLICATION_VERSION") = "U"
  72168.     THIS.Visible = .F.
  72169. endif
  72170. THIS.Caption = PREVIEW_VERSION
  72171. ENDPROC
  72172. PARENT
  72173. PREVIEWFORM
  72174. ACTIONGOFIRST
  72175. Click,
  72176. Inits
  72177. PROCEDURE Click
  72178. THIS.Parent.Parent.previewform.actionGoPrev()
  72179. ENDPROC
  72180. PROCEDURE Init
  72181. dodefault()
  72182. #IF USE_LOC_STRINGS_IN_UI
  72183.     *THIS.Caption =    
  72184.     THIS.ToolTipText = UI_TOOLBAR_TT_BACK_LOC
  72185. #ENDIF
  72186. ENDPROC
  72187. Top = 0
  72188. Left = 23
  72189. Height = 22
  72190. Width = 23
  72191. Picture = images\preprev.bmp
  72192. Caption = ""
  72193. Enabled = .F.
  72194. ToolTipText = "Previous page"
  72195. SpecialEffect = 2
  72196. Name = "cmdBack"
  72197. SHOW_APPLICATION_VERSIONb
  72198. 9.5.0.0
  72199. VISIBLE
  72200. CAPTION
  72201. Init,
  72202. PROCEDURE Click
  72203. THIS.Parent.Parent.previewform.actionGoFirst()
  72204. ENDPROC
  72205. PROCEDURE Init
  72206. dodefault()
  72207. #IF USE_LOC_STRINGS_IN_UI
  72208.     *THIS.Caption =    
  72209.     THIS.ToolTipText = UI_TOOLBAR_TT_FIRST_LOC
  72210. #ENDIF
  72211. ENDPROC
  72212. Top = 0
  72213. Left = 0
  72214. Height = 22
  72215. Width = 23
  72216. Picture = images\prefirst.bmp
  72217. Caption = ""
  72218. Enabled = .F.
  72219. ToolTipText = "First page"
  72220. SpecialEffect = 2
  72221. Name = "cmdTop"
  72222. toolbar
  72223. PROCEDURE Show
  72224. LPARAMETERS nStyle
  72225. #IF DEBUG_METHOD_LOGGING 
  72226.     debugout space(program(-1)) + "frxGoToPageForm::Show(" + trans(m.nStyle) + ")"
  72227. #ENDIF
  72228. *-----------------------------------------
  72229. * Fix for SP1: Handle positioning in top-level form
  72230. * See frxPreviewForm::ActionGoToPage()
  72231. * Addresses bug# 474691
  72232. *-----------------------------------------
  72233. THIS.pageNo    = THIS.oParentForm.currentPage
  72234. THIS.pageTotal = THIS.oParentForm.pageTotal
  72235. THIS.Caption   = DEFAULT_MBOX_TITLE_LOC
  72236. THIS.lblCaption.Caption = REPORT_PREVIEW_GOTO_PAGE_LOC + " " + "(1-" + transform(THIS.pageTotal) + ")"
  72237. if THIS.oParentForm.ShowWindow = 2 && as top-level form
  72238.     *-----------------------------------
  72239.     * If parent preview window is a top-level form,
  72240.     * center the child window in the view port:
  72241.     *-----------------------------------
  72242.     THIS.AutoCenter = .F.
  72243.     THIS.Left = THIS.oParentForm.ViewPortLeft + int(THIS.oParentForm.Width/2  - THIS.Width/2)  
  72244.     THIS.Top  = THIS.oParentForm.ViewPortTop  + int(THIS.oParentForm.Height/2 - THIS.Height/2)
  72245.     THIS.AutoCenter = .T.
  72246. endif
  72247. *--------------
  72248. THIS.spnPageNo.SpinnerLowValue = 1
  72249. THIS.spnPageNo.SpinnerHighValue = THIS.pageTotal
  72250. *THIS.spnPageNo.KeyboardLowValue = 1
  72251. *THIS.spnPageNo.KeyboardHighValue = THIS.pageTotal
  72252. THIS.spnPageNo.Value = THIS.pageNo
  72253. dodefault(m.nStyle)
  72254. ENDPROC
  72255. PROCEDURE Init
  72256. dodefault()
  72257. #if USE_LOC_STRINGS_IN_UI
  72258.     THIS.cmdOK.Caption     = UI_CMD_OK_LOC
  72259.     THIS.cmdCancel.Caption = UI_CMD_CANCEL_LOC
  72260. #endif
  72261. ENDPROC
  72262. FontName
  72263. Segoe UI
  72264. FontSize
  72265. Margin
  72266. Margin
  72267. Margin
  72268. Editbox
  72269. Margin
  72270. Textbox
  72271. FontName
  72272. MS Shell Dlg 2
  72273. FontSize
  72274. FontName
  72275. Tahoma
  72276. FontSize
  72277. FontName
  72278. FontSize
  72279. FontSize
  72280. SETALL
  72281. FONTNAME
  72282. FONTSIZE    
  72283. SCREENDPI
  72284. ErrorHandler
  72285. pr_frxpreview.prg
  72286. IERROR
  72287. CMETHOD
  72288. ILINE
  72289. HANDLE
  72290. THIS    
  72291. CANCELLED    
  72292. SUSPENDED
  72293. GetDeviceCaps
  72294. WIN32API
  72295. GetDC
  72296. WIN32API
  72297. ReleaseDC
  72298. WIN32API
  72299. GETDEVICECAPS
  72300. WIN32API
  72301. GETDC    
  72302. RELEASEDC
  72303. SCREENDPI
  72304. CHECKFORLARGEFONTS
  72305. checkforlargefonts,
  72306. Error
  72307. LENABLED
  72308. CMDTOP
  72309. ENABLED
  72310. CMDBACK
  72311. enabled_assign,
  72312. Dcanvascount
  72313. canvasheight
  72314. canvaswidth
  72315. currentpage
  72316. frxfilename
  72317. lastpainted
  72318. oreport
  72319. pageheight Specifies the height of the Page.
  72320. pagewidth Specifies the width of the Page.
  72321. pagetotal Provides a PageTotal for report output.
  72322. toolbar
  72323. toolbarisvisible
  72324. unitconverter
  72325. zoomlevel
  72326. hidcommandwindow
  72327. isnowait
  72328. formcaption
  72329. startoffset
  72330. printonexit
  72331. suppressrendering
  72332. disabledoffscreenbmps
  72333. extensionhandler
  72334. _memberdata XML Metadata for customizable properties
  72335. allowprintfrompreview
  72336. lastzoomlevel
  72337. textontoolbar
  72338. tempstoprepaint
  72339. memberclass Specifies the name of a member default class to use when new members are added to the container.
  72340. memberclasslibrary Specifies the name of the class library containing the class associated with the MemberClass property.
  72341. topform
  72342. mouseflag
  72343. ignoremouseclickinmagnifycode
  72344. *actionclose 
  72345. *actiongofirst 
  72346. *actiongolast 
  72347. *actiongonext 
  72348. *actiongoprev 
  72349. *actiongotopage 
  72350. *actionprint 
  72351. *actionsetcanvascount 
  72352. *actionsetzoom 
  72353. *actiontoolbarvisibility 
  72354. *invokecontextmenu 
  72355. *renderpage 
  72356. *reset Resets the Timer control so that it starts counting from 0.
  72357. *setreport 
  72358. *showtoolbar 
  72359. *synchcanvases 
  72360. *synchpageno 
  72361. *synchtoolbar 
  72362. *setcurrentpage parameters: iPage
  72363. *actionshowinfo 
  72364. ^zoomlevels[1,2] 
  72365. *getzoompercent 
  72366. *renderpages 
  72367. *savetoresource 
  72368. *restorefromresource 
  72369. *getpixelsperdpi960 Returns the ratio between pixels and 960dpi  based on the current zoomlevel.
  72370. *createtoolbar 
  72371. *extensionhandler_assign 
  72372. *getpixelpageoffsets 
  72373. *showcommandwindow 
  72374. *hidecommandwindow 
  72375. *createcanvases 
  72376. *canvascount_assign 
  72377. *setzoomlevel 
  72378. *setcanvascount 
  72379. VALUE
  72380. SPINNERLOWVALUE
  72381. SPINNERHIGHVALUE    
  72382. LostFocus,
  72383. PROCEDURE enabled_assign
  72384. lparameter lEnabled
  72385. THIS.cmdTop.Enabled  = m.lEnabled
  72386. THIS.cmdBack.Enabled = m.lEnabled
  72387. dodefault(m.lEnabled)
  72388. ENDPROC
  72389. OTop = 3
  72390. Left = 5
  72391. Width = 46
  72392. Height = 22
  72393. BorderWidth = 0
  72394. Name = "cntPrev"
  72395. previewform
  72396. specialmousexcoord
  72397. *previewform_assign 
  72398. *synchcontrols 
  72399. *actionzoomlevel parameter: iZoomIndex
  72400. *getwindowref 
  72401. *actionpagecount 
  72402. Caption = "Toolbar1"
  72403. Height = 28
  72404. KeyPreview = .T.
  72405. Left = 0
  72406. Top = 0
  72407. Width = 563
  72408. ShowWindow = 1
  72409. previewform = .NULL.
  72410. specialmousexcoord = 0
  72411. Name = "frxpreviewtoolbar"
  72412. Report Preview
  72413. Go to page number:
  72414. NSTYLE
  72415. PAGENO
  72416. OPARENTFORM
  72417. CURRENTPAGE    
  72418. PAGETOTAL
  72419. CAPTION
  72420. LBLCAPTION
  72421. SHOWWINDOW
  72422. AUTOCENTER
  72423. VIEWPORTLEFT
  72424. WIDTH
  72425. VIEWPORTTOP
  72426. HEIGHT    
  72427. SPNPAGENO
  72428. SPINNERLOWVALUE
  72429. SPINNERHIGHVALUE
  72430. VALUE
  72431. Show,
  72432. oform Reference to the actual preview form. Not guaranteed to be valid available until after .Show() has been called.
  72433. oreport Reference to the ReportListener class assisting the report run. Assigned via .SetReport() automatically.
  72434. caption If not empty, this will override the default preview caption in the form title.
  72435. topform Indicates that the Preview Form should be a TopForm. Forces non-modal operation.
  72436. canvascount If not empty, overrides the initial number of pages shown in preview form. Valid values are 1,2, or 4.
  72437. currentpage If not empty, overrides the initial page displayed by the preview form. (Default will be first page rendered.) 
  72438. zoomlevel If not empty, overrides the initial zoom level of the preview form. Valid values are 1 (10%) to 9 (500%) ,10 (Whole page),and 11 (fit to page width).
  72439. toolbarisvisible If not null, overrides the default initial visibility of the preview form's toolbar. .T. to force visible; .F. to force not visible.
  72440. extensionhandler Reference to an extension handler object, if one is assigned via the .SetExtensionHandler() method.
  72441. previewformclass Class name of preview form to instantiate by default, or, class name of last class instantiated. Used to re-instantiate preview form if different from current form.
  72442. _memberdata XML Metadata for customizable properties
  72443. allowprintfrompreview If set to false, suppresses the Print action from the preview.
  72444. textontoolbar If not null, overrides the default initial visibility of the preview toolbar's button captions: .T. to force visible; .F. to force not visible. Initially, button captions are not visible.
  72445. memberclass Specifies the name of a member default class to use when new members are added to the container.
  72446. memberclasslibrary Specifies the name of the class library containing the class associated with the MemberClass property.
  72447. *getwindowref Returns an object reference to the window with the specified title. Parameter: cWindowTitle
  72448. *hide Calls THIS.oForm.Hide(), if oForm is not null.
  72449. *release Calls THIS.oForm.Release() and nulls out the internal object references .oReport and .oForm.
  72450. *setreport Called automatically by the report engine, passed a reference to the active ReportListener object so that the preview may subsequently invoke its .OutputPage() method to display each page of the report. (Parameter: oReport)
  72451. *show Called automatically by the report engine when the user has requested a new-style preview. The appropriate preview form class is instantiated and displayed, based on the REPORT FORM... command clauses.
  72452. *setcurrentpage Commands the active preview form to navigate to a specific page. (Parameter: iPageNo)
  72453. *setcanvascount Commands the active preview form to set the number of simultaneously visible pages to the specific value. Valid values: 1,2,4. (Parameter: iCount)
  72454. *setzoomlevel Commands the active preview window to change its zoom level to the speciified value. Valid values: 1-11. (Parameter: iZoomLevel)
  72455. *setextensionhandler Assign an object reference to handle preview extensions. (Parameter: oRef)
  72456. *binstringtoint 
  72457. oform = .NULL.
  72458. oreport = .NULL.
  72459. caption = ("")
  72460. canvascount = 0
  72461. currentpage = 0
  72462. zoomlevel = 0
  72463. toolbarisvisible = .NULL.
  72464. extensionhandler = .NULL.
  72465. previewformclass = frxPreviewForm
  72466. _memberdata = 
  72467.     1732<?xml version = "1.0" encoding="Windows-1252" standalone="yes"?>
  72468. <VFPData>
  72469. <memberdata name="allowprintfrompreview" type="Property" display="AllowPrintFromPreview"/>
  72470. <memberdata name="canvascount" type="Property" display="CanvasCount"/>
  72471. <memberdata name="caption" type="Property" display="Caption"/>
  72472. <memberdata name="currentpage" type="Property" display="CurrentPage"/>
  72473. <memberdata name="extensionhandler" type="Property" display="ExtensionHandler"/>
  72474. <memberdata name="oform" type="Property" display="oForm"/>
  72475. <memberdata name="oreport" type="Property" display="oReport"/>
  72476. <memberdata name="previewformclass" type="Property" display="PreviewFormClass"/>
  72477. <memberdata name="toolbarisvisible" type="Property" display="ToolbarIsVisible"/>
  72478. <memberdata name="topform" type="Property" display="TopForm"/>
  72479. <memberdata name="zoomlevel" type="Property" display="ZoomLevel"/>
  72480. <memberdata name="getwindowref" type="Method" display="GetWindowRef"/>
  72481. <memberdata name="hide" type="Method" display="Hide"/>
  72482. <memberdata name="release" type="Method" display="Release"/>
  72483. <memberdata name="setcanvascount" type="Method" display="SetCanvasCount"/>
  72484. <memberdata name="setcurrentpage" type="Method" display="SetCurrentPage"/>
  72485. <memberdata name="setextensionhandler" type="Method" display="SetExtensionHandler"/>
  72486. <memberdata name="setreport" type="Method" display="SetReport"/>
  72487. <memberdata name="setzoomlevel" type="Method" display="SetZoomLevel"/>
  72488. <memberdata name="show" type="Method" display="Show"/>
  72489. <memberdata name="textontoolbar"      type="Property" display="TextOnToolbar"/>
  72490. <memberdata name="memberclass"        type="Property" display="MemberClass"/>
  72491. <memberdata name="memberclasslibrary" type="Property" display="MemberClassLibrary"/>
  72492. </VFPData>
  72493. allowprintfrompreview = .T.
  72494. textontoolbar = .NULL.
  72495. memberclass = ("")
  72496. memberclasslibrary = ("")
  72497. Name = "frxpreviewproxy"
  72498. G(PROCEDURE getwindowref
  72499. *-----------------------------------------------------------------
  72500. * .GetWindowRef( cWindow )
  72501. * Given a window name from REPORT FORM.. WINDOW <cWindow>,
  72502. * return an object reference to the window
  72503. *-----------------------------------------------------------------
  72504. lparameter cWindow
  72505. *-----------------------------------
  72506. * Fixed for SP1: declare oForm local
  72507. *-----------------------------------
  72508. local cTitle, oRef, oForm
  72509. cTitle = wtitle(m.cWindow)
  72510. oRef   = null    
  72511. if not empty( m.cTitle )
  72512.     for each oForm in _screen.Forms
  72513.         if upper(oForm.Caption) == upper(m.cTitle) and ;
  72514.            ((oForm.Class = "Form" and oForm.Name = "") or ;
  72515.             (upper(oForm.Name) == upper(m.cWindow)))
  72516.             oRef = m.oForm
  72517.             exit
  72518.         endif
  72519.     endfor
  72520. endif
  72521. return m.oRef
  72522. ENDPROC
  72523. PROCEDURE hide
  72524. *-----------------------------------------------------------------
  72525. * .Hide()
  72526. *-----------------------------------------------------------------
  72527. #IF DEBUG_METHOD_LOGGING 
  72528.     debugout space(program(-1)) + "frxPreviewProxy::Hide()"
  72529. #ENDIF
  72530. if not isnull( THIS.oForm )
  72531.     THIS.oForm.Hide()
  72532. endif
  72533. ENDPROC
  72534. PROCEDURE release
  72535. *-----------------------------------------------------------------
  72536. * .Release()
  72537. *-----------------------------------------------------------------
  72538. #IF DEBUG_METHOD_LOGGING 
  72539.     debugout space(program(-1)) + "frxPreviewProxy::Release()"
  72540. #ENDIF
  72541. if not isnull( THIS.oForm )
  72542.     THIS.oForm.Release()
  72543. endif
  72544. THIS.ExtensionHandler = .null.
  72545. THIS.oReport = .null.
  72546. THIS.oForm   = .null.
  72547. ENDPROC
  72548. PROCEDURE setreport
  72549. *-----------------------------------------------------------------
  72550. * .SetReport( oRef )
  72551. * This method will be called by the report engine, giving the 
  72552. * PreviewContainer a reference to the active ReportListener so 
  72553. * that it can invoke rendering methods to render the pages. 
  72554. * This reference will need to be saved in an internal property, 
  72555. * and nulled out appropriately in the .Reset()/.Destroy() events.
  72556. *-----------------------------------------------------------------
  72557. parameter toReport
  72558. #IF DEBUG_METHOD_LOGGING 
  72559.     debugout ""
  72560.     debugout space(program(-1)) + "frxPreviewProxy::SetReport(" + trans(m.toReport) + ")"
  72561. #ENDIF
  72562. *------------------------------------------
  72563. * SET STATUS BAR OFF
  72564. * SET TALK ON
  72565. * ... get lots of stuff echoed to the screen
  72566. * so this will minimise it
  72567. *------------------------------------------
  72568. if set("TALK")="ON"
  72569.     THIS.Tag = " "
  72570.     set talk off
  72571. endif
  72572. if  not isnull( m.toReport )  and ;
  72573.     vartype( m.toReport ) = "O" 
  72574.     *-----------------------------------------------
  72575.     * Change in SP2: This is no longer a constraint:
  72576.     *-----------------------------------------------
  72577.     * and toReport.BaseClass = "Reportlistener"
  72578.     *-----------------------------------
  72579.     * it's a valid Report Listener:
  72580.     *-----------------------------------
  72581.     THIS.oReport = m.toReport
  72582.     *------------------------------------------
  72583.     * Support for a late addition to the 
  72584.     * report listener's commandClauses object:
  72585.     *------------------------------------------
  72586.     if vers(4) < "09.00.0000.2013"
  72587.         AddProperty( toReport.commandclauses, "IsDesignerProtected",.F.)
  72588.     endif
  72589.     *------------------------------------------
  72590.     * Interrogate report protection and disable
  72591.     * the print button
  72592.     *------------------------------------------
  72593.     if m.toReport.commandClauses.isDesignerProtected 
  72594.         local iCurrSession, iRec, iProtFlags
  72595.         iCurrSession = set("DATASESSION")
  72596.         set datasession to (toReport.FrxDataSession)
  72597.         iRec = iif( eof("frx"),-1,recno("frx"))
  72598.         go top in frx
  72599.         iProtFlags = this.BinstringToInt( frx.ORDER )
  72600.         if m.iRec = -1
  72601.             go bottom in frx
  72602.             skip in frx
  72603.         else
  72604.             go m.iRec in frx
  72605.         endif
  72606.         set datasession to (m.iCurrSession)
  72607.         if bittest( m.iProtFlags, FRX_PROTECT_REPORT_NO_PRINT )
  72608.             THIS.AllowPrintFromPreview = .F.
  72609.         endif
  72610.     endif
  72611.     *-----------------------------------
  72612.     * We're being passed a null reference
  72613.     * so clean up:
  72614.     *-----------------------------------
  72615.     if not isnull( THIS.oForm )
  72616.         THIS.oForm.setReport( .NULL. )
  72617. *        THIS.oForm.Release()
  72618.     endif
  72619.     THIS.oReport = .NULL.
  72620.                     
  72621. endif    
  72622. *------------------------------------------
  72623. * SET STATUS BAR OFF
  72624. * SET TALK ON
  72625. * ... get lots of stuff echoed to the screen
  72626. * so this will minimise it
  72627. *------------------------------------------
  72628. if THIS.Tag == " "
  72629.     THIS.Tag = ""
  72630.     set talk on
  72631. endif
  72632. ENDPROC
  72633. PROCEDURE show
  72634. *-----------------------------------------------------------------
  72635. * .Show( imode )
  72636. * The Report engine / Listener object will invoke .Show() when 
  72637. * it is ready for the user to interact with the Preview UI.
  72638. *-----------------------------------------------------------------
  72639. lparameter iStyle
  72640. #IF DEBUG_METHOD_LOGGING 
  72641.     debugout ""
  72642.     debugout space(program(-1)) + "frxPreviewProxy::Show(" + trans(m.iStyle) + ")"
  72643. #ENDIF
  72644. *------------------------------------------
  72645. * Check for valid ReportListener reference.
  72646. * We can not proceed if we don't have a 
  72647. * valid ReportListener guy:
  72648. *------------------------------------------
  72649. if isnull(THIS.oReport)
  72650.     *-------------------------------------
  72651.     * Error. Show() may not be called
  72652.     * prior to .setReport()
  72653.     *-------------------------------------
  72654.     =messagebox(RP_INVALID_INITIALIZATION_LOC, 16, DEFAULT_MBOX_TITLE_LOC )
  72655.     return
  72656. endif
  72657. *------------------------------------------
  72658. * SET STATUS BAR OFF
  72659. * SET TALK ON
  72660. * ... get lots of stuff echoed to the screen
  72661. * so this will minimise it
  72662. *------------------------------------------
  72663. if set("TALK")="ON"
  72664.     THIS.Tag = " "
  72665.     set talk off
  72666. endif
  72667. *------------------------------------------
  72668. * Ensure that Show() with no parameters is 
  72669. * handled correctly (we pass the param on)
  72670. *------------------------------------------
  72671. if type("iStyle") = "L"
  72672.     iStyle = 0
  72673. endif
  72674. #define DEFAULT_PREVIEW_CLASS    "frxPreviewForm"
  72675. local lcFormClass
  72676. lcFormClass = DEFAULT_PREVIEW_CLASS        && In current top form
  72677. *------------------------------------------
  72678. * Determine the correct form class to instantiate:
  72679. *------------------------------------------
  72680. do case
  72681. case THIS.oReport.commandClauses.InScreen
  72682.     *--------------------------------------------
  72683.     * Ensure the screen is visible and normal preview:
  72684.     *--------------------------------------------
  72685.     lcFormClass = "frxPreviewInScreen"
  72686. case THIS.oReport.commandClauses.InWindow = "SCREEN"
  72687.     *--------------------------------------------
  72688.     * Just in case IN WINDOW SCREEN is resolved
  72689.     * as this clause instead:
  72690.     *--------------------------------------------
  72691.     lcFormClass = "frxPreviewInScreen"
  72692. case not empty( THIS.oReport.commandClauses.Window )
  72693.     *--------------------------------------------
  72694.     * Determine the kind of target window:
  72695.     *--------------------------------------------
  72696.     local host
  72697.     host = THIS.getWindowRef( THIS.oReport.commandClauses.Window )        
  72698.     if not isnull( m.host ) and (host.Desktop or not empty(host.MacDesktop))
  72699.         lcFormClass = "frxPreviewInDesktop"
  72700.     endif        
  72701. case THIS.TopForm
  72702.     *--------------------------------------------
  72703.     * Not IN SCREEN, not IN WINDOW <name>, and 
  72704.     * explicitly asked for topform support:
  72705.     * Warning: Experimental!
  72706.     *--------------------------------------------
  72707.     lcFormClass = "frxPreviewAsTopForm"
  72708. endcase
  72709. THIS.previewFormClass = m.lcFormClass
  72710. *------------------------------------------
  72711. * Activate any other window involved in the 
  72712. * command. (e.g. to respect the IN WINDOW <name> clause)
  72713. *------------------------------------------
  72714. do case
  72715. case THIS.oReport.commandClauses.InScreen
  72716.     *--------------------------------------------
  72717.     * Ensure the screen is visible and normal preview:
  72718.     *--------------------------------------------
  72719.     activate window screen
  72720. case THIS.oReport.commandClauses.InWindow = "SCREEN"
  72721.     *--------------------------------------------
  72722.     * Just in case IN WINDOW SCREEN is resolved
  72723.     * as this clause instead:
  72724.     *--------------------------------------------
  72725.     activate window screen
  72726. case not empty( THIS.oReport.commandClauses.InWindow )
  72727.     *--------------------------------------------
  72728.     * Determine the kind of host window:
  72729.     *--------------------------------------------
  72730.     local host
  72731.     host = THIS.getWindowRef( THIS.oReport.commandClauses.InWindow )        
  72732.     if not isnull( m.host ) 
  72733.         *--------------------------------------------
  72734.         * Make sure it is active:
  72735.         *--------------------------------------------
  72736.         activate window (THIS.oReport.commandClauses.InWindow)
  72737.     endif
  72738.     release host
  72739. endcase
  72740. *------------------------------------------
  72741. * Instantiate the preview form, if necessary:
  72742. *------------------------------------------
  72743. local lReUse
  72744. lReUse = .T.
  72745. *------------------------------------------
  72746. * What prevents us from re-using the form?
  72747. *------------------------------------------
  72748. do case
  72749. case isnull( THIS.oForm )
  72750.     *-------------------------------------
  72751.     * We don't have a form to re-use:
  72752.     *-------------------------------------
  72753.     lReUse = .F.
  72754. case THIS.oForm.WindowType <> m.iStyle    
  72755.     *-------------------------------------
  72756.     * We can't change modality on the fly
  72757.     *-------------------------------------
  72758.     lReUse = .F.
  72759. case upper(THIS.oForm.Class) <> upper(THIS.PreviewFormClass)
  72760.     *-------------------------------------
  72761.     * It's the wrong class
  72762.     *-------------------------------------
  72763.     lReUse = .F.
  72764. endcase                
  72765. if not m.lReUse
  72766.     if not isnull( THIS.oForm )
  72767.         *--------------------------------------
  72768.         * Dispose of the current form:
  72769.         *--------------------------------------
  72770.         THIS.oForm.ExtensionHandler = null
  72771.         THIS.oForm.oReport = null
  72772.         THIS.oForm.Hide
  72773.         THIS.oForm = .null.
  72774.     endif    
  72775.     *--------------------------------------
  72776.     * Create a new form instance:
  72777.     *--------------------------------------
  72778.     THIS.oForm = newobject(THIS.previewFormClass,"frxPreview")
  72779. endif
  72780. *------------------------------------------
  72781. * The new form needs a new reference to the listener:
  72782. *------------------------------------------
  72783. THIS.oForm.setReport( THIS.oReport )
  72784. THIS.oForm.RestoreFromResource()
  72785. *------------------------------------------
  72786. * Decorate the window: 
  72787. *------------------------------------------
  72788. do case
  72789. case THIS.oReport.commandClauses.IsDesignerLoaded
  72790.     *------------------------------------------
  72791.     * Called from the Report Designer. We can't use 
  72792.     * IF WEXIST("REPORT DESIGNER") because it is possible
  72793.     * to use MODI REPORT ... WINDOW X where X has a different title.
  72794.     *------------------------------------------
  72795.     local cDesignerWindow
  72796.     cDesignerWindow = wontop()     
  72797.     if not empty(m.cDesignerWindow)
  72798.         cParent = wparent(m.cDesignerWindow)
  72799.         if empty(m.cParent)
  72800.             cParent = "SCREEN"
  72801.         endif
  72802.         local iRowPix, iColPix
  72803.         *--------------------------------------------------
  72804.         * Calculate the co-ordinates of the Report Designer
  72805.         * in the parent window:
  72806.         *--------------------------------------------------
  72807.         iRowPix = fontmetric(1, wfont(1,m.cParent), wfont(2,m.cParent), wfont(3,m.cParent) )
  72808.         iColPix = fontmetric(6, wfont(1,m.cParent), wfont(2,m.cParent), wfont(3,m.cParent) )
  72809.         THIS.oForm.Top     = int( wlrow(m.cDesignerWindow) * m.iRowPix )
  72810.         THIS.oForm.Left    = int( wlcol(m.cDesignerWindow) * m.iColPix )
  72811.         *--------------------------------------------------
  72812.         * Calculate the width/height of the Report Designer:
  72813.         *--------------------------------------------------
  72814.         iRowPix = fontmetric(1, wfont(1,m.cDesignerWindow), wfont(2,m.cDesignerWindow), wfont(3,m.cDesignerWindow) )
  72815.         iColPix = fontmetric(6, wfont(1,m.cDesignerWindow), wfont(2,m.cDesignerWindow), wfont(3,m.cDesignerWindow) )
  72816.         THIS.oForm.Width   = int( wcols(m.cDesignerWindow) * m.iColPix )
  72817.         THIS.oForm.Height  = int( wrows(m.cDesignerWindow) * m.iRowPix )    
  72818.         THIS.oForm.Caption = m.cDesignerWindow
  72819. *        if wmaximum(m.cDesignerWindow)
  72820. *            THIS.oForm.WindowState = 2
  72821. *        endif
  72822.     endif
  72823. case not empty( THIS.oReport.commandClauses.Window )
  72824.     *------------------------------------------
  72825.     * Respect the WINDOW <name> clause
  72826.     *------------------------------------------
  72827.     local template
  72828.     template = THIS.getWindowRef( THIS.oReport.commandClauses.Window )
  72829.     if not isnull( m.template )
  72830.         with THIS.oForm
  72831.             .Caption             = template.Caption
  72832.             .Top                 = template.Top
  72833.             .Left                 = template.Left
  72834.             .Width               = template.Width
  72835.             .Height              = template.Height
  72836.             .WindowState        = template.WindowState  && not minimised?
  72837.             .BorderStyle        = template.BorderStyle
  72838.             .HalfHeightCaption  = template.HalfHeightCaption
  72839.         endwith    
  72840.         release template
  72841.     endif
  72842. otherwise
  72843.     with THIS.oForm
  72844.         *-------------------------------------
  72845.         * Fix for SP2: Test for -1 
  72846.         * rather than 0 because otherwise you
  72847.         * can't override and set to 0.
  72848.         * Now of course, you can't set to -1.
  72849.         *-------------------------------------
  72850.         if THIS.Top > -1
  72851.             .Top = THIS.Top
  72852.         endif
  72853.         if THIS.Left > -1
  72854.             .Left = THIS.Left
  72855.         endif
  72856.         *-------------------------------------
  72857.         if THIS.Width > 0
  72858.             .Width = THIS.Width
  72859.         endif
  72860.         if THIS.Height > 0
  72861.             .Height = THIS.Height
  72862.         endif
  72863.         if not empty( THIS.Caption )
  72864.             .Caption = THIS.Caption
  72865.         endif
  72866.     endwith
  72867. endcase
  72868. *------------------------------------------
  72869. * Changed for SP1: These have nothing to do
  72870. * with the size and shape of the window:
  72871. *------------------------------------------
  72872. with THIS.oForm
  72873.     *--------------------------------------------
  72874.     * New in SP2:
  72875.     *--------------------------------------------
  72876.     .MemberClass        = THIS.MemberClass
  72877.     .MemberClassLibrary = THIS.MemberClassLibrary
  72878.     *--------------------------------------------
  72879.     if THIS.canvasCount > 0
  72880.         .canvasCount = THIS.canvasCount
  72881.     endif
  72882.     if THIS.currentPage > 0
  72883.         .currentPage = THIS.currentPage
  72884.     endif
  72885.     if THIS.zoomLevel > 0
  72886.         .zoomLevel = THIS.zoomLevel
  72887.     endif
  72888.     if not isnull( THIS.toolbarIsVisible )
  72889.         .toolbarIsVisible = THIS.toolbarIsVisible
  72890.     endif
  72891.     if not isnull( THIS.TextOnToolbar )
  72892.         .TextOnToolbar = THIS.TextOnToolbar
  72893.     endif
  72894.     .AllowPrintFromPreview = THIS.AllowPrintFromPreview
  72895. endwith
  72896. *-------------------------------
  72897. * Hook in the extension handler:
  72898. *-------------------------------
  72899. if not isnull( THIS.ExtensionHandler )
  72900.     THIS.oForm.extensionHandler = THIS.ExtensionHandler 
  72901. endif
  72902. *-------------------------------
  72903. * Show the form:
  72904. *-------------------------------
  72905. if THIS.oForm.ShowWindow = 2 
  72906.     *-----------------------------------
  72907.     * We're launching a top form which 
  72908.     * must always be modeless.
  72909.     *-----------------------------------
  72910.     iStyle = 0
  72911. endif
  72912. if m.iStyle = 1
  72913.     *------------------------------------------
  72914.     * Modal: We can show the form, then reset
  72915.     * the TALK setting:
  72916.     *------------------------------------------
  72917.     THIS.oForm.Show(1)
  72918.     *------------------------------------------
  72919.     * SET STATUS BAR OFF
  72920.     * SET TALK ON
  72921.     * ... get lots of stuff echoed to the screen
  72922.     * so this will minimise it
  72923.     *------------------------------------------
  72924.     if THIS.Tag == " "
  72925.         THIS.Tag = ""
  72926.         set talk on
  72927.     endif
  72928.     *------------------------------------------
  72929.     * Modeless. Restore TALK prior to showing
  72930.     *------------------------------------------
  72931.     *------------------------------------------
  72932.     * SET STATUS BAR OFF
  72933.     * SET TALK ON
  72934.     * ... get lots of stuff echoed to the screen
  72935.     * so this will minimise it
  72936.     *------------------------------------------
  72937.     if THIS.Tag == " "
  72938.         THIS.Tag = ""
  72939.         set talk on
  72940.     endif
  72941.     THIS.oForm.Show()
  72942. endif
  72943. ENDPROC
  72944. PROCEDURE setcurrentpage
  72945. *-----------------------------------------------------------------
  72946. * .SetCurrentPage( iPage )
  72947. *-----------------------------------------------------------------
  72948. lparameter iPage
  72949. THIS.currentPage = m.iPage
  72950. if not isnull( THIS.oForm )
  72951.     THIS.oForm.setCurrentPage( THIS.currentPage )
  72952.     THIS.oForm.renderPages()
  72953.     return .T.
  72954.     return .F.
  72955. endif
  72956. ENDPROC
  72957. PROCEDURE setcanvascount
  72958. *-----------------------------------------------------------------
  72959. * .SetCanvasCount( iCount )
  72960. *-----------------------------------------------------------------
  72961. lparameter iCount
  72962. THIS.canvasCount = m.iCount
  72963. if not isnull( THIS.oForm )
  72964.     THIS.oForm.actionSetCanvasCount( THIS.canvasCount )
  72965.     THIS.oForm.renderPages()
  72966.     return .T.
  72967.     return .F.
  72968. endif
  72969. ENDPROC
  72970. PROCEDURE setzoomlevel
  72971. *-----------------------------------------------------------------
  72972. * .SetZoomLevel( iLevel )
  72973. *-----------------------------------------------------------------
  72974. lparameter iLevel
  72975. THIS.zoomLevel = m.iLevel
  72976. if not isnull( THIS.oForm )
  72977.     THIS.oForm.actionSetZoom( THIS.zoomLevel )
  72978.     return .F.
  72979. endif
  72980. ENDPROC
  72981. PROCEDURE setextensionhandler
  72982. *-----------------------------------------------------------------
  72983. * .SetExtensionHandler( oRef )
  72984. *-----------------------------------------------------------------
  72985. lparameter oRef
  72986. THIS.ExtensionHandler = m.oRef
  72987. if not isnull( THIS.oForm )
  72988.     THIS.oForm.ExtensionHandler = THIS.ExtensionHandler
  72989.     return .T.
  72990.     return .F.
  72991. endif
  72992. ENDPROC
  72993. PROCEDURE binstringtoint
  72994. *=======================================================
  72995. * BinstringToInt( char )
  72996. * Returns a numeric equivalent of a binary data in string
  72997. * form.
  72998. * BinChar & Integer conversion, based on code by RS
  72999. *=======================================================
  73000. lparameter cByte
  73001. local iReturn, i, b
  73002. iReturn = 0
  73003. for m.i = len( m.cByte ) to 1 step -1
  73004.     b = asc( substr( m.cByte, m.i, 1 ))
  73005.     iReturn = (m.iReturn*256) + m.b
  73006. endfor
  73007. return m.iReturn
  73008. ENDPROC
  73009. PROCEDURE Init
  73010. #IF DEBUG_METHOD_LOGGING 
  73011.     debugout space(program(-1)) + "frxPreviewProxy::Init()"
  73012. #ENDIF
  73013. THIS.Width = 0
  73014. THIS.Height = 0
  73015. * New in SP1:
  73016. THIS.Top = -1
  73017. THIS.Left = -1
  73018. ENDPROC
  73019. PROCEDURE Destroy
  73020. *-----------------------------------------------------------------
  73021. * .Destroy()
  73022. *-----------------------------------------------------------------
  73023. #IF DEBUG_METHOD_LOGGING 
  73024.     debugout space(program(-1)) + "frxPreviewProxy::Destroy()"
  73025. #ENDIF
  73026. *--------------------------------------------
  73027. * Try this to ensure no hanging references...
  73028. *--------------------------------------------
  73029. if not isnull( THIS.oForm )
  73030.     THIS.oForm.Release()
  73031. endif
  73032. ENDPROC
  73033. OPREVIEWFORM
  73034. PREVIEWFORM
  73035. CBOZOOM
  73036. CLEAR
  73037. ZOOMLEVELS
  73038. ADDITEM
  73039. DISPLAYCOUNT 
  73040. CBOZOOM
  73041. VALUE
  73042. PREVIEWFORM    
  73043. ZOOMLEVEL
  73044. IPAGESALLOWED
  73045. ZOOMLEVELS
  73046. OPGPAGECOUNT
  73047. ENABLED
  73048. CANVASCOUNT
  73049. CURRENTPAGE
  73050. CNTPREV
  73051. CMDTOP
  73052. CMDBACK    
  73053. PAGETOTAL
  73054. CNTNEXT
  73055. CMDFORWARD    
  73056. CMDBOTTOM
  73057. CMDGOTOPAGE
  73058. IZOOMINDEX
  73059. OFORM
  73060. PREVIEWFORM    
  73061. ZOOMLEVEL
  73062. ACTIONSETZOOM
  73063. IGNOREMOUSECLICKINMAGNIFYCODE
  73064. CPOINT
  73065. GETMOUSEPOINTERPOS
  73066. CAPTION
  73067. CBOZOOM
  73068. WIDTH
  73069. HEIGHT
  73070. FONTNAME
  73071. FONTSIZE
  73072. VALUE
  73073. SETMOUSEPOINTERPOS
  73074. CWINDOW
  73075. CTITLE
  73076. OFORM
  73077. FORMS
  73078. CAPTION
  73079. CLASS
  73080. OPGPAGECOUNT
  73081. VALUE
  73082. PREVIEWFORM
  73083. ACTIONSETCANVASCOUNT
  73084. cmdPrint
  73085. Caption
  73086. AutoSizea
  73087. AutoSize-
  73088. Height
  73089. PREVIEWFORM
  73090. CAPTION
  73091. FORMCAPTION
  73092. CMDPRINT
  73093. VISIBLE
  73094. ALLOWPRINTFROMPREVIEW
  73095. TEXTONTOOLBAR
  73096. OCONTROL
  73097. CONTROLS
  73098. SETALL
  73099. Print Preview
  73100. PreviewToolbar
  73101. GetCursorPos
  73102. user32Q
  73103. GetMousePointerPos
  73104. SetCursorPos
  73105. user32Q
  73106. SetMousePointerPos
  73107. CAPTION
  73108. GETCURSORPOS
  73109. USER32
  73110. GETMOUSEPOINTERPOS
  73111. SETCURSORPOS
  73112. SETMOUSEPOINTERPOS+
  73113. PREVIEWFORM
  73114. TOOLBARISVISIBLE
  73115. ErrorHandler
  73116. pr_frxpreview.prg
  73117. IERROR
  73118. CMETHOD
  73119. ILINE
  73120. HANDLE
  73121. THIS    
  73122. CANCELLED    
  73123. SUSPENDED
  73124. previewform_assign,
  73125. synchcontrols.
  73126. actionzoomlevel*
  73127. getwindowref
  73128. actionpagecount(
  73129. Refresh
  73130. Destroy
  73131. Error
  73132. SUPPRESSRENDERING
  73133. RELEASE-
  73134. SETCURRENTPAGE
  73135. RENDERPAGES
  73136. SYNCHTOOLBAR<
  73137. SETCURRENTPAGE    
  73138. PAGETOTAL
  73139. CANVASCOUNT
  73140. RENDERPAGES
  73141. SYNCHTOOLBAR
  73142. CURRENTPAGE
  73143. CANVASCOUNT
  73144. OREPORT
  73145. OUTPUTPAGECOUNT
  73146. SETCURRENTPAGE
  73147. SUPPRESSRENDERING
  73148. RENDERPAGES
  73149. SYNCHTOOLBARj
  73150. CURRENTPAGE
  73151. SETCURRENTPAGE
  73152. CANVASCOUNT
  73153. RENDERPAGES
  73154. SYNCHTOOLBAR
  73155. frxGoToPageForm
  73156. frxPreview.vcx
  73157. LOFORM
  73158. IPAGENO
  73159. OPARENTFORM
  73160. SHOWTOOLBAR
  73161. PAGENO
  73162. CURRENTPAGE
  73163. SETCURRENTPAGE
  73164. 09.00.0000.3504
  73165. OREPORT
  73166. COMMANDCLAUSES
  73167. NOWAIT
  73168. PRINTCACHEDPAGES
  73169. SUPPRESSRENDERING
  73170. PRINTONEXIT
  73171. RELEASE!
  73172. ICOUNT
  73173. SETCANVASCOUNT!
  73174. IZOOMLEVEL
  73175. SETZOOMLEVEL
  73176. TOOLBAR
  73177. TOOLBARISVISIBLE
  73178. CREATETOOLBAR
  73179. SHOWTOOLBAR
  73180. First page
  73181. prefirst.bmp
  73182. Previous
  73183. preprev.bmp
  73184. First page
  73185. prefirst.bmp
  73186. Previous
  73187. preprev.bmp
  73188. prenext.bmp
  73189. Last page
  73190. prelast.bmp
  73191. prenext.bmp
  73192. Last page
  73193. prelast.bmp
  73194. Go to page...
  73195. preview.bmp
  73196. Pages to display
  73197. Toolbar
  73198. 09.00.0000.3301
  73199. Print
  73200. print.bmp
  73201. Close
  73202. preclose.bmp
  73203. oRef.actionGoFirst()
  73204. oRef.actionGoPrev()
  73205. oRef.actionGoNext()
  73206. oRef.actionGoLast()
  73207. oRef.actionGoToPage()
  73208. ON BAR 7 OF (m.cShortcut) ACTIVATE POPUP &cZoom
  73209. ON BAR 8 OF (m.cShortcut) ACTIVATE POPUP &cPages
  73210. oRef.actionToolbarVisibility()
  73211. oRef.actionPrint()
  73212. oRef.actionClose()
  73213. About...
  73214. oRef.actionShowInfo()
  73215. oref.actionSetZoom( bar() )
  73216. 1 page
  73217. 2 pages
  73218. 2 pages
  73219. 4 pages
  73220. 4 pages
  73221. oRef.actionSetCanvasCount(1)
  73222. oRef.actionSetCanvasCount(2)
  73223. oRef.actionSetCanvasCount(4)
  73224. AddBarsToMenu
  73225. LVIAKEYPRESS
  73226. ALLOWOUTPUT
  73227. OPREVIEWCONTAINER    
  73228. CSHORTCUT
  73229. CZOOM
  73230. CPAGES
  73231. SHOWWINDOW
  73232. CURRENTPAGE
  73233. CANVASCOUNT    
  73234. PAGETOTAL
  73235. TOOLBAR
  73236. TOOLBARISVISIBLE
  73237. WINDOWTYPE
  73238. ALLOWPRINTFROMPREVIEW
  73239. ZOOMLEVELS    
  73240. ZOOMLEVEL
  73241. IPAGESALLOWED
  73242. EXTENSIONHANDLER
  73243. ADDBARSTOMENU
  73244. IGNOREMOUSECLICKINMAGNIFYCODE3
  73245. Image
  73246. An exception ocurred invoking .OutputPage():C
  73247. Report Preview
  73248. Image
  73249. IPAGE
  73250. OCANVAS
  73251. OREPORT
  73252. OUTPUTPAGECOUNT    
  73253. BASECLASS
  73254. VISIBLE
  73255. OUTPUTPAGE
  73256. MESSAGE
  73257. TOREPORT
  73258. OREPORT
  73259. FRXFILENAME
  73260. COMMANDCLAUSES
  73261. LENABLED
  73262. TOOLBAR
  73263. CONTROLS
  73264. ENABLED
  73265. SYNCHTOOLBAR
  73266. SHOWWINDOW
  73267. CAPTION
  73268. Image
  73269. Image
  73270. Image
  73271. SUPPRESSRENDERING
  73272. SPACER    
  73273. BACKCOLOR
  73274. WIDTH
  73275. HEIGHT
  73276. ILEFT
  73277. IWIDTH
  73278. IHEIGHT
  73279. IZOOMPERCENT
  73280. GETZOOMPERCENT    
  73281. PAGEWIDTH    
  73282. SCREENDPI
  73283. PAGEHEIGHT    
  73284. ZOOMLEVEL
  73285. ZOOMLEVELS
  73286. SCROLLBARS
  73287. CANVASCOUNT
  73288. CANVAS1    
  73289. BASECLASS
  73290. VISIBLE
  73291. CANVAS2
  73292. CANVAS3
  73293. CANVAS4
  73294.  - Page 
  73295.  - Page 
  73296. ICURRENTPAGE
  73297. CURRENTPAGE
  73298. STARTOFFSET
  73299. OREPORT
  73300. COMMANDCLAUSES
  73301. WINDOW
  73302. CANVASCOUNT
  73303. LASTPAGE    
  73304. PAGETOTAL
  73305. CAPTION
  73306. FORMCAPTION*
  73307. TOOLBAR
  73308. SYNCHCONTROLS
  73309. IPAGE
  73310. CURRENTPAGE
  73311. OREPORT
  73312. OUTPUTPAGECOUNT
  73313. SYNCHPAGENO
  73314. RENDERPAGES
  73315. SYNCHTOOLBARZ
  73316. Preview version: 
  73317. 9.5.0.0
  73318. .pageTotal   = 
  73319. .currentPage = 
  73320. .canvasCount = 
  73321. .pageHeight  = 
  73322. .pageWidth   = 
  73323. _PAGENO      = 
  73324. THIS.oReport.commandClauses:
  73325. THIS.oReport.commandClauses.C
  73326. Report Preview
  73327. CTEXT
  73328. THIS    
  73329. PAGETOTAL
  73330. CURRENTPAGE
  73331. CANVASCOUNT
  73332. PAGEHEIGHT    
  73333. PAGEWIDTH
  73334. OREPORT
  73335. COMMANDCLAUSES
  73336. CFIELD
  73337. IZOOMPERCENT
  73338. THIS    
  73339. ZOOMLEVEL
  73340. ZOOMLEVELS
  73341. NPREVIEWFORMASPECTRATIO
  73342. NPAGEASPECTRATIO
  73343. IREQUIREDHEIGHT
  73344. IREQUIREDWIDTH
  73345. WIDTH
  73346. HEIGHT
  73347. CANVASCOUNT    
  73348. PAGEWIDTH
  73349. PAGEHEIGHT    
  73350. SCREENDPI
  73351. RenderPages
  73352. SUPPRESSRENDERING
  73353. IPAGETORENDER
  73354. CURRENTPAGE
  73355. CANVASCOUNT
  73356. RENDERPAGE
  73357. CANVAS1
  73358. CANVAS2
  73359. CANVAS3
  73360. CANVAS4
  73361. EXTENSIONHANDLER
  73362. RENDERPAGES
  73363. NOTIFY
  73364. NOTIFYv
  73365. TALKv
  73366. ResourceManager
  73367. frxcommon.prg
  73368. 92REPREVIEWC
  73369. PreviewForm.Top
  73370. PreviewForm.Left
  73371. PreviewForm.Width
  73372. PreviewForm.Width
  73373. PreviewForm.Height
  73374. PreviewForm.Height
  73375. PreviewForm.WindowState
  73376. PreviewForm.ToolbarIsVisible
  73377. PreviewForm.CanvasCount
  73378. PreviewForm.ZoomLevel
  73379. PreviewToolbar.Top
  73380. PreviewToolbar.Left
  73381. PreviewToolbar.Width
  73382. PreviewToolbar.Height
  73383. PreviewToolbar.DockPosition
  73384. 92REPREVIEWC
  73385. LSETNOTIFY
  73386. LSETNOTIFY2
  73387. LSETTALK
  73388. ICURRENTSTATE
  73389. WINDOWSTATE
  73390. LOADRESOURCE
  73391. FRXFILENAME
  73392. OREPORT
  73393. COMMANDCLAUSES
  73394. ISDESIGNERLOADED
  73395. WIDTH
  73396. VIEWPORTWIDTH
  73397. HEIGHT
  73398. VIEWPORTHEIGHT
  73399. TOOLBARISVISIBLE
  73400. CANVASCOUNT    
  73401. ZOOMLEVEL
  73402. TOOLBAR
  73403. DOCKPOSITION
  73404. SAVERESOURCE
  73405. ResourceManager
  73406. frxcommon.prg
  73407. 92REPREVIEWC
  73408. PreviewForm.Top
  73409. PreviewForm.Left
  73410. PreviewForm.Width
  73411. PreviewForm.Height
  73412. PreviewForm.WindowState
  73413. PreviewForm.ToolbarIsVisible
  73414. PreviewForm.CanvasCount
  73415. PreviewForm.ZoomLevel
  73416. PreviewToolbar.Top
  73417. PreviewToolbar.Left
  73418. PreviewToolbar.Width
  73419. PreviewToolbar.Height
  73420. PreviewToolbar.DockPosition
  73421. ICURRENTSTATE
  73422. CVALUE
  73423. LOADRESOURCE
  73424. FRXFILENAME
  73425. WIDTH
  73426. HEIGHT
  73427. OREPORT
  73428. COMMANDCLAUSES
  73429. ISDESIGNERLOADED
  73430. WINDOWSTATE
  73431. TOOLBARISVISIBLE
  73432. CANVASCOUNT    
  73433. ZOOMLEVEL
  73434. TOOLBAR
  73435. SHOWWINDOW
  73436. CANVAS1
  73437. WIDTH    
  73438. PAGEWIDTH
  73439. frxPreviewToolbar
  73440. frxPreview.vcx
  73441. InitializeToolbar
  73442. TOOLBAR
  73443. PREVIEWFORM
  73444. EXTENSIONHANDLER
  73445. INITIALIZETOOLBAR
  73446. REFRESH
  73447. PreviewForm
  73448. OEXTHANDLER
  73449. EXTENSIONHANDLER
  73450. PREVIEWFORM
  73451. Empty
  73452. CONVERSIONFACTOR
  73453. GETPIXELSPERDPI960
  73454. CANVAS1
  73455. OFFSETG
  73456. Command
  73457. STARTMODE
  73458. HIDCOMMANDWINDOW
  73459. COMMAND`
  73460. Command
  73461. STARTMODE
  73462. COMMAND
  73463. HIDCOMMANDWINDOW
  73464. Canvas1
  73465. Canvas2
  73466. Canvas3
  73467. Canvas4
  73468. Canvas1
  73469. Canvas2
  73470. Canvas3
  73471. Canvas4
  73472. Canvas1
  73473. ShapeCanvas
  73474. Canvas2
  73475. ShapeCanvas
  73476. Canvas3
  73477. ShapeCanvas
  73478. Canvas4
  73479. ShapeCanvas
  73480. CreateCanvases
  73481. MEMBERCLASS
  73482. MEMBERCLASSLIBRARY    
  73483. NEWOBJECT
  73484. CLASSLIBRARY
  73485. CANVAS1
  73486. VISIBLE
  73487. CANVAS2
  73488. CANVAS3
  73489. CANVAS4
  73490. EXTENSIONHANDLER
  73491. CREATECANVASES8
  73492. THIS.Canvas1b
  73493. Shape
  73494. ICANVASCOUNT
  73495. CANVASCOUNT
  73496. CANVAS1    
  73497. BASECLASS
  73498. CANVAS2
  73499. VISIBLE
  73500. CANVAS3
  73501. CANVAS49
  73502. IZOOMLEVEL
  73503. ZOOMLEVELS    
  73504. ZOOMLEVEL
  73505. SETVIEWPORT
  73506. IPAGESALLOWED
  73507. CANVASCOUNT
  73508. TEMPSTOPREPAINT
  73509. SYNCHCANVASES
  73510. RENDERPAGES
  73511. SYNCHPAGENO
  73512. SYNCHTOOLBAR
  73513. SCROLLBARS
  73514. ICOUNT
  73515. CANVASCOUNT
  73516. SUPPRESSRENDERING
  73517. SETVIEWPORT
  73518. SYNCHCANVASES
  73519. RENDERPAGES
  73520. SYNCHPAGENO
  73521. SYNCHTOOLBAR
  73522. IBUTTON
  73523. NSHIFT
  73524. NXCOORD
  73525. NYCOORD
  73526. IGNOREMOUSECLICKINMAGNIFYCODE
  73527. CANVAS1
  73528. WIDTH
  73529. HEIGHT    
  73530. ZOOMLEVEL
  73531. ZOOMLEVELS
  73532. CLICKXOFFSETPERCENT
  73533. CLICKYOFFSETPERCENT
  73534. ACTIONSETZOOM
  73535. NEWVIEWPORTX
  73536. NEWVIEWPORTY
  73537. SETVIEWPORT    
  73538. MOUSEFLAG8
  73539. TOOLBAR
  73540. TOOLBARISVISIBLE2
  73541. TOOLBARISVISIBLE
  73542. SHOWTOOLBAR
  73543. RESIZE'
  73544. TOOLBARISVISIBLE
  73545. TOOLBAR
  73546. Destroy
  73547. EXTENSIONHANDLER
  73548. DESTROY
  73549. TOOLBAR
  73550. PREVIEWFORM
  73551. OREPORT%
  73552. Whole Page
  73553. Fit to Width
  73554. ZOOMLEVELS
  73555. CREATETOOLBAR
  73556. MINWIDTH    
  73557. MINHEIGHT
  73558. HandledKeyPress
  73559. NKEYCODE
  73560. NSHIFTALTCTRL
  73561. LHANDLEDKEYPRESS
  73562. IPAGESALLOWED
  73563. ZOOMLEVELS    
  73564. ZOOMLEVEL
  73565. EXTENSIONHANDLER
  73566. HANDLEDKEYPRESS
  73567. ACTIONCLOSE
  73568. INVOKECONTEXTMENU
  73569. ACTIONSETZOOM
  73570. ACTIONGOTOPAGE
  73571. SETVIEWPORT
  73572. VIEWPORTLEFT
  73573. VIEWPORTTOP
  73574. ACTIONGOPREV
  73575. ACTIONGONEXT
  73576. ACTIONGOFIRST
  73577. ACTIONGOLAST
  73578. ACTIONSETCANVASCOUNT
  73579. Image
  73580. Paint
  73581. TEMPSTOPREPAINT
  73582. CANVAS1    
  73583. BASECLASS
  73584. RENDERPAGES
  73585. EXTENSIONHANDLER
  73586. PAINT
  73587. RELEASE
  73588. Release
  73589. 09.00.0000.1800
  73590. OREPORT
  73591. EXTENSIONHANDLER
  73592. RELEASE
  73593. SAVETORESOURCE
  73594. COMMANDCLAUSES
  73595. PRINTPAGECURRENT
  73596. CURRENTPAGE
  73597. ONPREVIEWCLOSE
  73598. PRINTONEXIT
  73599. SHOWCOMMANDWINDOW
  73600. HIDE4
  73601. THIS    
  73602. ZOOMLEVEL
  73603. ZOOMLEVELS
  73604. SYNCHCANVASES
  73605. INVOKECONTEXTMENUs
  73606. InitializeToolbar
  73607. There are no pages available to preview.
  73608. Report Preview
  73609. Report Preview
  73610. 09.00.0000.3301
  73611. ISTYLE
  73612. EXTENSIONHANDLER
  73613. INITIALIZETOOLBAR    
  73614. PAGETOTAL
  73615. OREPORT
  73616. OUTPUTPAGECOUNT
  73617. STARTOFFSET
  73618. CANVASCOUNT
  73619. ISNOWAIT
  73620. CAPTION
  73621. COMMANDCLAUSES
  73622. ISDESIGNERLOADED
  73623. WINDOW
  73624. PRINTJOBNAME
  73625. FRXFILENAME
  73626. FORMCAPTION
  73627. SETCURRENTPAGE
  73628. CURRENTPAGE
  73629. SHOWWINDOW
  73630. TOOLBARISVISIBLE
  73631. TOOLBAR
  73632. REFRESH
  73633. SHOWTOOLBAR
  73634. IWIDTH
  73635. IHEIGHT
  73636. GETPAGEWIDTH
  73637. GETPAGEHEIGHT    
  73638. PAGEWIDTH
  73639. PAGEHEIGHT
  73640. CREATECANVASES
  73641. SYNCHCANVASES    
  73642. MINBUTTON
  73643. HIDECOMMANDWINDOW
  73644. RENDERPAGES
  73645. INWINDOW
  73646. HandledError
  73647. IERROR
  73648. CMETHOD
  73649. ILINE
  73650. EXTENSIONHANDLER
  73651. HANDLEDERROR
  73652. actionclose,
  73653. actiongofirstp
  73654. actiongolast
  73655. actiongonext[
  73656. actiongoprev
  73657. actiongotopage\
  73658. actionprint
  73659. actionsetcanvascount
  73660. actionsetzoom
  73661. actiontoolbarvisibility3
  73662. invokecontextmenu
  73663. renderpage
  73664. setreportU
  73665. showtoolbar
  73666. synchcanvases
  73667. synchpagenoc
  73668. synchtoolbar
  73669. setcurrentpage
  73670. actionshowinfo
  73671. getzoompercent
  73672. renderpages$(
  73673. savetoresourceB*
  73674. restorefromresourcei0
  73675. getpixelsperdpi960\6
  73676. createtoolbar
  73677. extensionhandler_assign
  73678. getpixelpageoffsetsr8
  73679. showcommandwindow
  73680. hidecommandwindowI:
  73681. createcanvases
  73682. canvascount_assign
  73683. setzoomlevel
  73684. setcanvascountiA
  73685. MouseUp
  73686. HidewE
  73687. Activate
  73688. Deactivate=F
  73689. Destroy
  73690. InitnG
  73691. KeyPress
  73692. Paint
  73693. QueryUnload
  73694. Release
  73695. Resize
  73696. RightClick
  73697. Show3V
  73698. Error
  73699. PROCEDURE actionclose
  73700. *---------------------------------------------------------------
  73701. * .ActionClose() - called from toolbar/context menu
  73702. * The action we take depends on whether we're hiding or releasing...
  73703. *---------------------------------------------------------------
  73704. THIS.suppressRendering = .T.
  73705. THIS.Release()
  73706. ENDPROC
  73707. PROCEDURE actiongofirst
  73708. *--------------------------------------------------------------
  73709. * ActionGoFirst()
  73710. *--------------------------------------------------------------
  73711. THIS.setCurrentPage(1)
  73712. THIS.RenderPages()
  73713. THIS.synchToolbar()
  73714. ENDPROC
  73715. PROCEDURE actiongolast
  73716. *--------------------------------------------------------------
  73717. * ActionGoLast()
  73718. *--------------------------------------------------------------
  73719. THIS.setCurrentPage(THIS.pageTotal - (THIS.canvasCount - 1))
  73720. THIS.RenderPages()
  73721. THIS.synchToolbar()
  73722. ENDPROC
  73723. PROCEDURE actiongonext
  73724. *--------------------------------------------------------------
  73725. * ActionGoNext()
  73726. *--------------------------------------------------------------
  73727. if (THIS.currentPage + THIS.canvasCount > THIS.oReport.OutputPageCount)
  73728.     ?? chr(7)
  73729.     THIS.setCurrentPage( THIS.currentPage + THIS.canvasCount )
  73730.     if (THIS.oReport.OutputPageCount - THIS.currentPage) < (THIS.CanvasCount - 1)
  73731.         *------------------------------------------------
  73732.         * Clear the form to remove unused canvas images
  73733.         * that will not be re-rendered:
  73734.         *------------------------------------------------
  73735.         THIS.SuppressRendering = .T.
  73736.         THIS.Cls()
  73737.         THIS.SuppressRendering = .F.
  73738.     endif    
  73739.     THIS.RenderPages()
  73740.     THIS.synchToolbar()
  73741. endif
  73742. ENDPROC
  73743. PROCEDURE actiongoprev
  73744. *--------------------------------------------------------------
  73745. * ActionGoPrev()
  73746. *--------------------------------------------------------------
  73747. if THIS.currentPage > 1
  73748.     THIS.setCurrentPage( max( THIS.currentPage - THIS.canvasCount, 1 ))
  73749.     THIS.RenderPages()
  73750.     THIS.synchToolbar()
  73751.     ?? chr(7)
  73752. endif
  73753. ENDPROC
  73754. PROCEDURE actiongotopage
  73755. *-----------------------------------------------------------
  73756. * ActionGoToPage()
  73757. *-----------------------------------------------------------
  73758. #IF DEBUG_METHOD_LOGGING 
  73759.     debugout space(program(-1)) + "frxPreviewForm::ActionGoToPage()"
  73760. #ENDIF
  73761. local loForm, iPageNo
  73762. loForm = newobject("frxGoToPageForm","frxPreview.vcx")
  73763. *-----------------------------------------
  73764. * Fix for SP1: Pass it a ref to this form
  73765. * Addresses bug# 474691
  73766. * See frxGoToPageForm::Show()
  73767. *-----------------------------------------
  73768. loForm.oParentForm = THIS
  73769. THIS.ShowToolbar(.F.)
  73770. loForm.Show( WINDOWTYPE_MODAL )
  73771. THIS.ShowToolbar(.T.)
  73772. iPageNo = loForm.PageNo
  73773. release m.loForm
  73774. *------------------------------------
  73775. * Fix for SP1:
  73776. * Ensure this form gets keypresses
  73777. * after showing the child dialog:
  73778. *------------------------------------
  73779. activate Window (THIS.Name)
  73780. if m.iPageNo <> THIS.currentPage
  73781.     THIS.setCurrentPage( m.iPageNo )
  73782. endif
  73783. ENDPROC
  73784. PROCEDURE actionprint
  73785. *---------------------------------------------------------------
  73786. * ActionPrint() - called from toolbar or context menu
  73787. *---------------------------------------------------------------
  73788. *----------------------------------------------
  73789. * Enhancement for SP2:
  73790. *----------------------------------------------
  73791. if version(4) > "09.00.0000.3504" 
  73792.     *----------------------------------------------------
  73793.     * SP2 behavior: If NOWAIT, print without terminating:
  73794.     *----------------------------------------------------
  73795.     if THIS.oReport.commandClauses.NOWAIT
  73796.         THIS.oReport.PrintCachedPages()    
  73797.     else
  73798.         * Terminate:
  73799.         THIS.suppressRendering = .T.
  73800.         THIS.printOnExit       = .T.
  73801.         THIS.Release()
  73802.     endif
  73803.     *----------------------------------------------------
  73804.     * Pre-SP2 behavior: terminate:
  73805.     *----------------------------------------------------
  73806.     THIS.suppressRendering = .T.
  73807.     THIS.printOnExit       = .T.
  73808.     THIS.Release()
  73809. endif
  73810. ENDPROC
  73811. PROCEDURE actionsetcanvascount
  73812. *-----------------------------------------------------
  73813. * ActionSetCanvasCount()
  73814. *-----------------------------------------------------
  73815. lparameter iCount
  73816. #IF DEBUG_METHOD_LOGGING 
  73817.     debugout space(program(-1)) + "frxPreviewForm::ActionSetCanvasCount()"
  73818. #ENDIF
  73819. THIS.SetCanvasCount( m.iCount )
  73820. return
  73821. ENDPROC
  73822. PROCEDURE actionsetzoom
  73823. *-----------------------------------------------------
  73824. * ActionSetZoom()
  73825. *-----------------------------------------------------
  73826. lparameters iZoomLevel
  73827. #IF DEBUG_METHOD_LOGGING 
  73828.     debugout space(program(-1)) + "frxPreviewForm::ActionSetZoom()"
  73829. #ENDIF
  73830. THIS.SetZoomLevel( m.iZoomLevel )
  73831. return
  73832. ENDPROC
  73833. PROCEDURE actiontoolbarvisibility
  73834. *--------------------------------------------------
  73835. * .ActionToolbarVisibility() - called from menu
  73836. *--------------------------------------------------
  73837. if isnull( THIS.toolbar )
  73838.     THIS.ToolbarIsVisible = .F.
  73839.     THIS.CreateToolbar()
  73840. endif        
  73841. if THIS.ToolbarIsVisible 
  73842.     * Hide the toolbar:
  73843.     THIS.Toolbar.Hide()
  73844.     THIS.ToolbarIsVisible = .F.
  73845.     * Show the toolbar:
  73846.     THIS.ShowToolbar(.T.)    
  73847.     THIS.ToolbarIsVisible = .T.
  73848. endif
  73849. ENDPROC
  73850. PROCEDURE invokecontextmenu
  73851. *=======================================================================
  73852. * .InvokeContextMenu()
  73853. * Show the default context menu for the preview window:
  73854. *=======================================================================
  73855. lparameter lViaKeypress
  73856. #IF DEBUG_METHOD_LOGGING 
  73857.     debugout space(program(-1)) + "frxPreviewForm::InvokeContextMenu()"
  73858. #ENDIF
  73859. THIS.AllowOutput = .T.
  73860. activate window (THIS.Name)
  73861. *----------------------------------------------
  73862. * Enh for SP2: oPreviewContainer is also available
  73863. *----------------------------------------------
  73864. private oRef, oPreviewContainer
  73865. store THIS to ;
  73866.     oRef, oPreviewContainer
  73867. local cShortcut, cZoom, cPages
  73868. cShortcut = sys(2015)
  73869. cZoom     = sys(2015)
  73870. cPages    = sys(2015)
  73871. if oRef.ShowWindow = SHOWWINDOW_AS_TOPFORM
  73872.     if m.lViaKeypress
  73873.         define popup (m.cShortcut) ;
  73874.             shortcut ;
  73875.             relative ;
  73876.             in window (oRef.Name) ;
  73877.             from 1,1
  73878.     else
  73879.         define popup (m.cShortcut) ;
  73880.             shortcut ;
  73881.             relative ;
  73882.             in window (oRef.Name) ;            
  73883.             from mrow(oRef.Name),mcol(oRef.Name)            
  73884.     endif    
  73885.     if m.lViaKeypress
  73886.         *-------------------------------
  73887.         * Fix in SP1: no in window clause 
  73888.         *-------------------------------
  73889.         define popup (m.cShortcut) ;
  73890.             shortcut ;
  73891.             relative ;
  73892.             from 1,1
  73893.     else
  73894.         define popup (m.cShortcut) ;
  73895.             shortcut ;
  73896.             relative ;
  73897.             from mrow(), mcol()
  73898.     endif
  73899. endif
  73900. if (THIS.currentPage > THIS.canvasCount )
  73901.     DEFINE BAR 1 OF (m.cShortcut) PROMPT CONTEXT_MENU_PROMPT_FIRST_PAGE_LOC  picture "prefirst.bmp"
  73902.     DEFINE BAR 2 OF (m.cShortcut) PROMPT CONTEXT_MENU_PROMPT_PREVIOUS_LOC    picture "preprev.bmp"
  73903.     DEFINE BAR 1 OF (m.cShortcut) PROMPT "\"+CONTEXT_MENU_PROMPT_FIRST_PAGE_LOC  picture "prefirst.bmp"
  73904.     DEFINE BAR 2 OF (m.cShortcut) PROMPT "\"+CONTEXT_MENU_PROMPT_PREVIOUS_LOC    picture "preprev.bmp"
  73905. endif
  73906. if ( THIS.currentPage < (THIS.pageTotal - (THIS.canvasCount-1) )) 
  73907.     DEFINE BAR 3 OF (m.cShortcut) PROMPT CONTEXT_MENU_PROMPT_NEXT_LOC        picture "prenext.bmp"
  73908.     DEFINE BAR 4 OF (m.cShortcut) PROMPT CONTEXT_MENU_PROMPT_LAST_PAGE_LOC   picture "prelast.bmp"
  73909.     DEFINE BAR 3 OF (m.cShortcut) PROMPT "\"+CONTEXT_MENU_PROMPT_NEXT_LOC       picture "prenext.bmp"
  73910.     DEFINE BAR 4 OF (m.cShortcut) PROMPT "\"+CONTEXT_MENU_PROMPT_LAST_PAGE_LOC  picture "prelast.bmp"
  73911. endif
  73912. DEFINE BAR 5 OF (m.cShortcut) PROMPT CONTEXT_MENU_PROMPT_GO_TO_PAGE_LOC
  73913. DEFINE BAR 6 OF (m.cShortcut) PROMPT "\-"
  73914. DEFINE BAR 7 OF (m.cShortcut) PROMPT CONTEXT_MENU_PROMPT_ZOOM_LOC  picture "preview.bmp"
  73915. DEFINE BAR 8 OF (m.cShortcut) PROMPT CONTEXT_MENU_PROMPT_PAGES_TO_DISPLAY_LOC 
  73916. DEFINE BAR 9 OF (m.cShortcut) PROMPT "\-"
  73917. DEFINE BAR 10 OF (m.cShortcut) PROMPT CONTEXT_MENU_PROMPT_TOOLBAR_LOC 
  73918. if isnull( THIS.toolbar ) or THIS.ToolbarIsVisible = .F.
  73919.     set Mark of bar 10 of (m.cShortcut) to .F.
  73920.     set Mark of bar 10 of (m.cShortcut) to .T.
  73921. endif        
  73922. *----------------------------------------------
  73923. * Fix for versions earlier than SP1: Bug# 475109
  73924. *----------------------------------------------
  73925. if version(4) < "09.00.0000.3301"
  73926.     if oRef.WindowType = WINDOWTYPE_MODAL and ;
  73927.        oRef.ShowWindow = SHOWWINDOW_IN_TOPFORM and ;
  73928.        not empty(wparent(THIS.Name))
  73929.         * if we are modal and inside a topform app,
  73930.         * the toolbar will be unavailable, so don't 
  73931.         * let it be shown:
  73932.        set Skip of bar 10 of (m.cShortCut) .T.
  73933.     endif
  73934. endif
  73935. DEFINE BAR 11 OF (m.cShortcut) PROMPT "\-"
  73936. DEFINE BAR 12 OF (m.cShortcut) PROMPT CONTEXT_MENU_PROMPT_PRINT_LOC  picture "print.bmp"
  73937. DEFINE BAR 13 OF (m.cShortcut) PROMPT CONTEXT_MENU_PROMPT_CLOSE_LOC  picture "preclose.bmp"
  73938. ON SELECTION BAR 1 OF (m.cShortcut) oRef.actionGoFirst()
  73939. ON SELECTION BAR 2 OF (m.cShortcut) oRef.actionGoPrev()
  73940. ON SELECTION BAR 3 OF (m.cShortcut) oRef.actionGoNext()
  73941. ON SELECTION BAR 4 OF (m.cShortcut) oRef.actionGoLast()
  73942. ON SELECTION BAR 5 OF (m.cShortcut) oRef.actionGoToPage()
  73943. ON BAR 7 OF (m.cShortcut) ACTIVATE POPUP &cZoom
  73944. ON BAR 8 OF (m.cShortcut) ACTIVATE POPUP &cPages
  73945. ON SELECTION BAR 10 OF (m.cShortcut) oRef.actionToolbarVisibility()
  73946. ON SELECTION BAR 12 OF (m.cShortcut) oRef.actionPrint()
  73947. ON SELECTION BAR 13 OF (m.cShortcut) oRef.actionClose()
  73948. *------------------------------------------------------
  73949. * Fix for SP1: include "About..." option if via keypress
  73950. *------------------------------------------------------
  73951. if DEBUG_MENU_INFO_OPTION or m.lViaKeypress
  73952.     DEFINE Bar 14 of (m.cShortcut) prompt CONTEXT_MENU_PROMPT_INFODEBUG_LOC 
  73953.     ON SELECTION BAR 14 OF (m.cShortcut) oRef.actionShowInfo()
  73954. endif
  73955. if not THIS.AllowPrintFromPreview
  73956.     release bar 12 of (m.cShortcut)
  73957. endif
  73958. *------------------------------- Set the mark:
  73959. set Mark of bar 10 of (m.cShortcut) to oRef.ToolbarIsVisible
  73960. *------------------------------------------------------
  73961. * Define the Page Count popup:
  73962. *------------------------------------------------------
  73963. DEFINE POPUP (m.cZoom) SHORTCUT RELATIVE
  73964. local i
  73965. for i = 1 to alen(THIS.zoomLevels,1)
  73966.     define Bar m.i of(m.cZoom) prompt THIS.zoomLevels[m.i,ZOOM_LEVEL_PROMPT]
  73967.     on Selection Bar m.i of (m.cZoom) oref.actionSetZoom( bar() )
  73968. endfor
  73969. *---------------------- Set the mark:
  73970. set mark of bar (THIS.ZoomLevel) of (m.cZoom) to .T.
  73971. *------------------------------------------------------
  73972. * Define the Page Count popup:
  73973. *------------------------------------------------------
  73974. DEFINE POPUP (m.cPages) SHORTCUT RELATIVE
  73975. DEFINE BAR 1 OF (m.cPages) PROMPT CONTEXT_MENU_PROMPT_1PAGE_LOC
  73976. *---------------------- Disable multi-page view for high zoom levels:
  73977. local iPagesAllowed
  73978. iPagesAllowed = THIS.zoomLevels[ THIS.zoomLevel, ZOOM_LEVEL_CANVAS ]
  73979. if m.iPagesAllowed > 1
  73980.     DEFINE BAR 2 OF (m.cPages) PROMPT CONTEXT_MENU_PROMPT_2PAGES_LOC 
  73981.     DEFINE BAR 2 OF (m.cPages) PROMPT "\"+CONTEXT_MENU_PROMPT_2PAGES_LOC 
  73982. endif
  73983. if m.iPagesAllowed > 2
  73984.     DEFINE BAR 3 OF (m.cPages) PROMPT CONTEXT_MENU_PROMPT_4PAGES_LOC
  73985.     DEFINE BAR 3 OF (m.cPages) PROMPT "\"+CONTEXT_MENU_PROMPT_4PAGES_LOC
  73986. endif
  73987. ON SELECTION BAR 1 OF (m.cPages) oRef.actionSetCanvasCount(1)
  73988. ON SELECTION BAR 2 OF (m.cPages) oRef.actionSetCanvasCount(2)
  73989. ON SELECTION BAR 3 OF (m.cPages) oRef.actionSetCanvasCount(4)
  73990. *---------------------- Set the mark:
  73991. do case
  73992. case THIS.canvasCount = 1
  73993.     set Mark of bar 1 of (m.cPages) to .T.
  73994. case THIS.canvasCount = 2
  73995.     set Mark of bar 2 of (m.cPages) to .T.
  73996. case THIS.canvasCount = 4
  73997.     set Mark of bar 3 of (m.cPages) to .T.
  73998. endcase
  73999. *---------------------------------------------------
  74000. * Plug in extension handler:
  74001. *------------------------------------------------------
  74002. if not isnull( THIS.Extensionhandler )
  74003.     *-----------------------------------
  74004.     * Fixed for SP1: Only invoke the method 
  74005.     * if it is defined:
  74006.     *-----------------------------------
  74007.     if pemstatus( THIS.ExtensionHandler, "AddBarsToMenu", 5 )    
  74008.         #IF DEBUG_METHOD_LOGGING 
  74009.             debugout space(program(-1)) + " frxPreviewForm.ExtensionHandler::AddBarsToMenu()"
  74010.         #ENDIF
  74011.         *---------------------------------------------
  74012.         * The form is available in commands as m.oRef
  74013.         *---------------------------------------------
  74014.         THIS.ExtensionHandler.AddBarsToMenu( m.cShortcut, 15 )
  74015.     endif
  74016. endif
  74017. *----------------------------------------------
  74018. * Fix in SP3
  74019. * See previewForm.MouseUp for code that respects this:
  74020. *----------------------------------------------
  74021. THIS.IgnoreMouseClickInMagnifyCode = .T.
  74022. #IF DEBUG_METHOD_LOGGING 
  74023.     debugout space(program(-1)) + " activating popup " + m.cShortcut
  74024. #ENDIF
  74025. *------------------------------------------------------
  74026. * Display the menu:
  74027. *------------------------------------------------------
  74028. activate popup (m.cShortcut)
  74029. #IF DEBUG_METHOD_LOGGING 
  74030.     debugout space(program(-1)) + " releasing popup"
  74031. #ENDIF
  74032. *------------------------------------------------------
  74033. *  Cleanup:
  74034. *------------------------------------------------------
  74035. release popup (m.cShortcut)
  74036. release popup (m.cPages)
  74037. release popup (m.cZoom)
  74038. THIS.AllowOutput = .F.
  74039. ENDPROC
  74040. PROCEDURE renderpage
  74041. *---------------------------------------------------------
  74042. * .RenderPage()
  74043. * New in SP2: Support for Image canvas classes.
  74044. *---------------------------------------------------------
  74045. lparameters iPage, oCanvas
  74046. #IF DEBUG_METHOD_LOGGING 
  74047.     debugout space(program(-1)) + "frxPreviewForm::RenderPage("+ trans( m.iPage ) + ")"
  74048. #ENDIF
  74049. if between( m.iPage, 1, THIS.oReport.OutputPageCount )
  74050.         if m.oCanvas.BaseClass = "Image" and m.oCanvas.Visible = .F.
  74051.             oCanvas.Visible = .T.
  74052.         endif
  74053.         THIS.oReport.OutputPage( m.iPage, m.oCanvas, 2 )
  74054.     catch to oErr
  74055.         =messagebox( RP_OUTPUTPAGE_ERROR_LOC + c_CR2 + oErr.Message, 0+16, DEFAULT_MBOX_TITLE_LOC )
  74056.     endtry
  74057.     if oCanvas.BaseClass = "Image"
  74058.         oCanvas.Visible = .F.
  74059.     endif
  74060. endif
  74061. ENDPROC
  74062. PROCEDURE setreport
  74063. *---------------------------------------------------------------
  74064. * This method will be called by the report engine, giving the 
  74065. * PreviewUI a reference to the Listener so that it can invoke 
  74066. * rendering methods to render the pages. This reference will 
  74067. * need to be saved in an internal property, and nulled out 
  74068. * appropriately in the .Destroy() event.
  74069. *---------------------------------------------------------------
  74070. parameter toReport
  74071. #IF DEBUG_METHOD_LOGGING 
  74072.     debugout space(program(-1)) + "frxPreviewForm::SetReport(" + trans(m.toReport) + ")"
  74073. #ENDIF
  74074. if  not isnull( m.toReport )  and ;
  74075.     vartype( m.toReport ) = "O" 
  74076.     *-----------------------------------------------
  74077.     * Change in SP2: This is no longer a constraint:
  74078.     *-----------------------------------------------
  74079.     * and toReport.BaseClass = "Reportlistener"
  74080.     *-----------------------------------
  74081.     * it's a valid Report Listener:
  74082.     *-----------------------------------
  74083.     THIS.oReport = m.toReport
  74084.     *-------------------------------
  74085.     * What report file are we running?
  74086.     *-------------------------------
  74087.     THIS.frxFilename = lower(justfname( THIS.oReport.commandclauses.file ))
  74088.     *-----------------------------------
  74089.     * Cleanup:
  74090.     *-----------------------------------
  74091.     THIS.oReport = .NULL.
  74092.     *---------------------------------------
  74093.     * Without a reportListener to communicate with,
  74094.     * We have no reason to be visible:
  74095.     *---------------------------------------
  74096.     THIS.Hide()
  74097. endif
  74098. ENDPROC
  74099. PROCEDURE showtoolbar
  74100. *---------------------------------------------------------------
  74101. * ShowToolbar() - called from .Show()
  74102. *---------------------------------------------------------------
  74103. lparameter lEnabled
  74104. #IF DEBUG_METHOD_LOGGING 
  74105.     debugout space(program(-1)) + "frxPreviewForm::ShowToolbar(" + trans(m.lEnabled) + ")"
  74106. #ENDIF
  74107. if m.lEnabled
  74108.     * Show the toolbar, enabled and visible
  74109.     * Enable controls on the toolbar:
  74110.     local x
  74111.     for each x in THIS.toolbar.Controls
  74112.         x.Enabled = .T.
  74113.     endfor
  74114.     THIS.synchToolbar()
  74115.     *------------------------------------------
  74116.     * Support for topforms:
  74117.     *------------------------------------------
  74118.     if THIS.ShowWindow = SHOWWINDOW_AS_TOPFORM
  74119.         * Topforms are always modeless:
  74120.         if not upper(wontop())==upper(THIS.Name)
  74121.             activate window (THIS.Name) 
  74122.         endif
  74123.         activate Window (THIS.toolbar.caption) in window (this.Name)
  74124.         *------------------------------------------
  74125.         * Dock the toolbar if we're a topform:
  74126.         *------------------------------------------
  74127.         this.toolbar.dock(0)
  74128.     else
  74129.         this.toolbar.Show()
  74130.     endif
  74131.     *-----------------------------------
  74132.     * Disable controls on the toolbar:
  74133.     *-----------------------------------
  74134.     local x
  74135.     for each x in THIS.toolbar.Controls
  74136.         x.Enabled = .F.
  74137.     endfor
  74138. endif
  74139. ENDPROC
  74140. PROCEDURE synchcanvases
  74141. *---------------------------------
  74142. * SynchCanvases() - 
  74143. * re-arrange the Shapes on the page to match the 
  74144. * current settings:
  74145. *---------------------------------
  74146. #IF DEBUG_METHOD_LOGGING 
  74147.     debugout space(program(-1)) + "frxPreviewForm::SynchCanvases()"
  74148. #ENDIF
  74149. with THIS
  74150.     *-----------------------------------------------------
  74151.     * Prevent .RenderPages() from being called from within
  74152.     * the .Paint() event:
  74153.     *-----------------------------------------------------
  74154.     .SuppressRendering = .T.
  74155.     *-----------------------------------------------------
  74156.     * Use a spacer to allow the scrolling to have a 
  74157.     * a border to the right and bottom of the window:
  74158.     *-----------------------------------------------------
  74159.     .Spacer.BackColor = .BackColor
  74160.     .Spacer.Width  = CANVAS_LEFT_OFFSET_PIXELS
  74161.     .Spacer.Height = CANVAS_TOP_OFFSET_PIXELS
  74162.     local iLeft, iWidth, iHeight, iZoomPercent
  74163.     iZoomPercent = THIS.getZoomPercent()
  74164.     iWidth       = int( .pageWidth  * .screenDPI * (m.iZoomPercent/100) )
  74165.     iHeight      = int( .pageHeight * .screenDPI * (m.iZoomPercent/100) )
  74166.     do case
  74167.     case THIS.ZoomLevel < alen(THIS.zoomLevels,1)-1
  74168.         *---------------------------------------------------
  74169.         * Enable scrollbars for arbitary zoom:
  74170.         *---------------------------------------------------
  74171.         if THIS.ScrollBars <> 3
  74172.             THIS.ScrollBars = 3
  74173.         endif
  74174.     case THIS.ZoomLevel = alen(THIS.ZoomLevels,1)-1
  74175.         *---------------------------------------------------
  74176.         * Turn off scrollbars for fit to page
  74177.         *---------------------------------------------------
  74178.         if THIS.ScrollBars > 0
  74179.             THIS.ScrollBars = 0
  74180.         endif
  74181.     otherwise
  74182.         *---------------------------------------------------
  74183.         * Just vertical for fit to width
  74184.         *---------------------------------------------------
  74185.         if THIS.ScrollBars <> 2
  74186.             THIS.ScrollBars = 2    
  74187.         endif
  74188.     endcase
  74189.     *--------------------------------
  74190.     * Arrange the shapes on the page:
  74191.     *  [1][2]
  74192.     *  [3][4]
  74193.     *--------------------------------
  74194.     do case
  74195.     case .canvasCount = 1
  74196.         if this.Canvas1.Baseclass = "Image"
  74197.             store .T. to this.Canvas1.Visible
  74198.             store .F. to ;
  74199.                 this.Canvas2.Visible,;
  74200.                 this.Canvas3.Visible,;
  74201.                 this.Canvas4.Visible
  74202.         endif                
  74203.         if THIS.zoomLevel = alen(THIS.zoomLevels,1)
  74204.             *-------------------------------------------
  74205.             * Auto-zoom mode, center the page:
  74206.             *-------------------------------------------
  74207.             iLeft = int((.Width - m.iWidth)/2)
  74208.         else
  74209.             iLeft = CANVAS_LEFT_OFFSET_PIXELS
  74210.         endif
  74211.         .canvas1.Move(  m.iLeft, ;
  74212.                         CANVAS_TOP_OFFSET_PIXELS, ;
  74213.                         m.iWidth, m.iHeight )
  74214.         .spacer.Move( m.iLeft + m.iWidth, CANVAS_TOP_OFFSET_PIXELS + m.iHeight )
  74215.     case .canvasCount = 2
  74216.         if this.Canvas1.Baseclass = "Image"
  74217.             store .T. to ;
  74218.                 this.Canvas1.Visible, ;
  74219.                 this.Canvas2.Visible
  74220.             store .F. to ;
  74221.                 this.Canvas3.Visible,;
  74222.                 this.Canvas4.Visible
  74223.         endif
  74224.         .canvas1.Move(  CANVAS_LEFT_OFFSET_PIXELS, ;
  74225.                         CANVAS_TOP_OFFSET_PIXELS, ;
  74226.                         m.iWidth, m.iHeight )
  74227.         .canvas2.Move(  CANVAS_LEFT_OFFSET_PIXELS + m.iWidth + CANVAS_HORIZONTAL_GAP_PIXELS, ;
  74228.                         CANVAS_TOP_OFFSET_PIXELS, ;
  74229.                         m.iWidth, m.iHeight )
  74230.         .spacer.Move(     .canvas2.Left + .canvas2.Width, ;
  74231.                         .canvas2.Top + .canvas2.Height )    
  74232.     case .canvasCount = 4
  74233.         if this.Canvas1.Baseclass = "Image"
  74234.             store .T. to ;
  74235.                 this.Canvas1.Visible, ;
  74236.                 this.Canvas2.Visible, ;
  74237.                 this.Canvas3.Visible, ;
  74238.                 this.Canvas4.Visible
  74239.         endif                
  74240.         .canvas1.Move(  CANVAS_LEFT_OFFSET_PIXELS, ;
  74241.                         CANVAS_TOP_OFFSET_PIXELS, ;
  74242.                         m.iWidth, m.iHeight )
  74243.         .canvas2.Move(  CANVAS_LEFT_OFFSET_PIXELS + m.iWidth + CANVAS_HORIZONTAL_GAP_PIXELS, ;
  74244.                         CANVAS_TOP_OFFSET_PIXELS, ;
  74245.                         m.iWidth, m.iHeight )
  74246.         .canvas3.Move(    CANVAS_LEFT_OFFSET_PIXELS, ;
  74247.                         CANVAS_TOP_OFFSET_PIXELS + m.iHeight + CANVAS_VERTICAL_GAP_PIXELS, ;
  74248.                         m.iWidth, m.iHeight )
  74249.         .canvas4.Move(  CANVAS_LEFT_OFFSET_PIXELS + m.iWidth + CANVAS_HORIZONTAL_GAP_PIXELS, ;
  74250.                         CANVAS_TOP_OFFSET_PIXELS + m.iHeight + CANVAS_VERTICAL_GAP_PIXELS, ;
  74251.                         m.iWidth, m.iHeight )
  74252.         .spacer.Move(  .canvas4.Left + .canvas4.Width, ;
  74253.                        .canvas4.Top + .canvas4.Height )
  74254.     endcase    
  74255.     .SuppressRendering = .F.
  74256. endwith
  74257. ENDPROC
  74258. PROCEDURE synchpageno
  74259. *-----------------------------------------------
  74260. * .SynchPageNo()
  74261. *-----------------------------------------------
  74262. local iCurrentPage
  74263. iCurrentPage = THIS.currentPage + THIS.startOffset
  74264. #IF DEBUG_METHOD_LOGGING 
  74265.     debugout space(program(-1)) + "frxPreviewForm::SynchPageNo()"
  74266. #ENDIF
  74267. *-----------------------------------
  74268. * Fix for SP2: 
  74269. * Only enhance the preview window title caption
  74270. * if user has not specfied a target window:
  74271. *-----------------------------------
  74272. if empty( THIS.oReport.commandClauses.Window )
  74273.     if THIS.canvasCount > 1
  74274.         local lastPage
  74275.         lastPage  = min( m.iCurrentPage+THIS.canvasCount-1, THIS.pagetotal )
  74276.         THIS.Caption = THIS.formCaption ;
  74277.                      + REPORT_PREVIEW_PAGE_CAPTION ;
  74278.                      + transform( m.iCurrentPage ) + " - " + transform( m.lastPage )
  74279.     else
  74280.         THIS.Caption = THIS.formCaption ;
  74281.                      + REPORT_PREVIEW_PAGE_CAPTION ;
  74282.                      + transform( m.iCurrentPage )
  74283.     endif
  74284. endif
  74285. ENDPROC
  74286. PROCEDURE synchtoolbar
  74287. *----------------------------------------------------------
  74288. * .SynchToolbar()
  74289. *----------------------------------------------------------
  74290. #IF DEBUG_METHOD_LOGGING 
  74291.     debugout space(program(-1)) + "frxPreviewForm::SynchToolbar()"
  74292. #ENDIF
  74293. if not isnull( THIS.toolbar )
  74294.     THIS.toolbar.SynchControls()
  74295. endif
  74296. ENDPROC
  74297. PROCEDURE setcurrentpage
  74298. *----------------------------------------------------------------------
  74299. * .SetCurrentPage() - 
  74300. *----------------------------------------------------------------------
  74301. lparameter iPage
  74302. #IF DEBUG_METHOD_LOGGING 
  74303.     debugout space(program(-1)) + "frxPreviewForm::SetCurrentPage()"
  74304. #ENDIF
  74305. if THIS.CurrentPage <> m.iPage
  74306.     if between( m.iPage, 1, THIS.oReport.OutputPageCount )
  74307.         THIS.currentPage = m.iPage
  74308.         THIS.synchPageNo()    
  74309.         * Fix in SP2: Add call to RenderPages:
  74310.         THIS.RenderPages()
  74311.         THIS.SynchToolbar()
  74312.     endif
  74313.     * Fix in SP2: update the caption on the first display:
  74314.     THIS.SynchPageNo()
  74315. endif
  74316. ENDPROC
  74317. PROCEDURE actionshowinfo
  74318. *=======================================================
  74319. * ToString()
  74320. * Returns a string representation of the event properties.
  74321. *=======================================================
  74322. local cText
  74323. cText = ""
  74324. cText = m.cText + "Preview version: " + PREVIEW_VERSION + chr(13) + chr(13)
  74325. cText = m.cText + ".pageTotal   = " + transform(THIS.pageTotal)   + chr(13) 
  74326. cText = m.cText + ".currentPage = " + transform(THIS.currentPage) + chr(13)
  74327. cText = m.cText + ".canvasCount = " + transform(THIS.canvasCount) + chr(13)
  74328. cText = m.cText + ".pageHeight  = " + transform(THIS.pageHeight) + chr(13)
  74329. cText = m.cText + ".pageWidth   = " + transform(THIS.pageWidth)  + chr(13)
  74330. cText = m.cText + "_PAGENO      = " + transform(_PAGENO) + chr(13) + chr(13)
  74331. cText = m.cText + "THIS.oReport.commandClauses:" + chr(13)
  74332. amembers( ac, this.oReport.commandClauses )
  74333. for each cField in ac
  74334.     cText = m.cText + "  " + m.cField+ " = " + trans(eval("THIS.oReport.commandClauses."+trim(m.cField))) + chr(13)
  74335. endfor
  74336. =messagebox(m.cText,64, DEFAULT_MBOX_TITLE_LOC )
  74337. return m.cText
  74338. ENDPROC
  74339. PROCEDURE getzoompercent
  74340. *-----------------------------------------------------------------------
  74341. * adjust this to suit THIS.zoomLevels[] array
  74342. *-----------------------------------------------------------------------
  74343. local iZoomPercent
  74344. do case
  74345. case THIS.zoomLevel < alen(THIS.zoomLevels,1)-1
  74346.     *---------------------------------------------------
  74347.     * Use a preset percentage
  74348.     *---------------------------------------------------
  74349.     iZoomPercent = THIS.zoomLevels[ THIS.zoomLevel,ZOOM_LEVEL_PERCENT] 
  74350. case THIS.ZoomLevel = alen(THIS.zoomLevels,1)-1    
  74351.     *---------------------------------------------------
  74352.     * Calculate zoom percent from current window size:
  74353.     * to procure a "fit to page" effect.
  74354.     * depends on:
  74355.     *   - page aspect ratio
  74356.     *   - .pageWidth   in inches
  74357.     *   - .pageHeight  in inches
  74358.     *    - .canvasCount 
  74359.     *    - form aspect ratio
  74360.     *    - .Width       of form in pixels
  74361.     *   - .Height      of form in pixels
  74362.     *    CANVAS_TOP_OFFSET_PIXELS          15        
  74363.     *    CANVAS_LEFT_OFFSET_PIXELS         15
  74364.     *    CANVAS_VERTICAL_GAP_PIXELS        10
  74365.     *    CANVAS_HORIZONTAL_GAP_PIXELS      10
  74366.     *    
  74367.     *---------------------------------------------------
  74368.     local nPreviewFormAspectRatio, nPageAspectRatio
  74369.     local iRequiredHeight, iRequiredWidth
  74370.     nPreviewFormAspectRatio = THIS.Width/THIS.Height
  74371.     if THIS.canvasCount = 2
  74372.         * Two pages aside:
  74373.         nPageAspectRatio        = (THIS.PageWidth*2)/THIS.PageHeight
  74374.     else
  74375.         nPageAspectRatio        = THIS.PageWidth/THIS.PageHeight
  74376.     endif    
  74377.     do case
  74378.     case m.nPreviewFormAspectRatio <= m.nPageAspectRatio
  74379.         * Preview Form is taller, skinnier than the pages
  74380.         * limit by page width:    
  74381.         do case
  74382.         case THIS.canvasCount = 1
  74383.             iRequiredWidth = THIS.Width - (CANVAS_LEFT_OFFSET_PIXELS * 2)
  74384.             iZoomPercent =     (m.iRequiredWidth * 100)/(THIS.pageWidth  * .screenDPI)
  74385.         case THIS.canvasCount = 2
  74386.             iRequiredWidth = THIS.Width - (CANVAS_LEFT_OFFSET_PIXELS * 2) - CANVAS_HORIZONTAL_GAP_PIXELS
  74387.             iRequiredWidth = int(m.iRequiredWidth/2)
  74388.             iZoomPercent =     (m.iRequiredWidth * 100)/(THIS.pageWidth  * .screenDPI)
  74389.         case THIS.canvasCount = 4
  74390.             iRequiredWidth = THIS.Width - (CANVAS_LEFT_OFFSET_PIXELS * 2) - CANVAS_HORIZONTAL_GAP_PIXELS
  74391.             iRequiredWidth = int(m.iRequiredWidth/2)
  74392.             iZoomPercent =     (m.iRequiredWidth * 100)/(THIS.pageWidth  * .screenDPI)
  74393.         endcase        
  74394.     case m.nPreviewFormAspectRatio > m.nPageAspectRatio
  74395.         * pages are taller, skinnier than preview area.
  74396.         * limit by page height:    
  74397.         do case
  74398.         case THIS.canvasCount = 1
  74399.             iRequiredHeight = THIS.Height - ( CANVAS_TOP_OFFSET_PIXELS * 2 )
  74400.             iZoomPercent =     (m.iRequiredHeight * 100)/(THIS.pageHeight * .screenDPI)
  74401.         case THIS.canvasCount = 2
  74402.             iRequiredHeight = THIS.Height - ( CANVAS_TOP_OFFSET_PIXELS * 2 )
  74403.             iZoomPercent =     (m.iRequiredHeight * 100)/(THIS.pageHeight * .screenDPI)
  74404.         case THIS.canvasCount = 4
  74405.             iRequiredHeight = THIS.Height - ( CANVAS_TOP_OFFSET_PIXELS * 2 ) - CANVAS_VERTICAL_GAP_PIXELS
  74406.             iRequiredHeight = int(m.iRequiredHeight/2)        
  74407.             iZoomPercent =     (m.iRequiredHeight * 100)/(THIS.pageHeight * .screenDPI)
  74408.         endcase        
  74409.     endcase
  74410. otherwise
  74411.     *---------------------------------------------------
  74412.     * Calculate zoom percent from current window width:
  74413.     *---------------------------------------------------
  74414.     local iRequiredHeight, iRequiredWidth
  74415.     do case
  74416.     case THIS.canvasCount = 1
  74417.         iRequiredWidth = THIS.Width - (CANVAS_LEFT_OFFSET_PIXELS * 2)
  74418.         iZoomPercent =     (m.iRequiredWidth * 100)/(THIS.pageWidth  * .screenDPI)
  74419.     case THIS.canvasCount = 2
  74420.         iRequiredWidth = THIS.Width - (CANVAS_LEFT_OFFSET_PIXELS * 2) - CANVAS_HORIZONTAL_GAP_PIXELS
  74421.         iRequiredWidth = int(m.iRequiredWidth/2)
  74422.         iZoomPercent =     (m.iRequiredWidth * 100)/(THIS.pageWidth  * .screenDPI)
  74423.     case THIS.canvasCount = 4
  74424.         iRequiredWidth = THIS.Width - (CANVAS_LEFT_OFFSET_PIXELS * 2) - CANVAS_HORIZONTAL_GAP_PIXELS
  74425.         iRequiredWidth = int(m.iRequiredWidth/2)
  74426.         iZoomPercent =     (m.iRequiredWidth * 100)/(THIS.pageWidth  * .screenDPI)
  74427.     endcase        
  74428. endcase
  74429. return m.iZoomPercent
  74430. ENDPROC
  74431. PROCEDURE renderpages
  74432. if THIS.suppressRendering
  74433.     return 
  74434. endif
  74435. #IF DEBUG_METHOD_LOGGING 
  74436.     debugout space(program(-1)) + "frxPreviewForm::RenderPages()"
  74437. #ENDIF
  74438. local iPageToRender
  74439. iPageToRender = THIS.currentPage
  74440. do case
  74441. case THIS.canvasCount = 1
  74442.     THIS.RenderPage( m.iPageToRender,   THIS.canvas1 )
  74443. case THIS.canvasCount = 2
  74444.     THIS.RenderPage( m.iPageToRender,   THIS.canvas1 )
  74445.     THIS.RenderPage( m.iPageToRender+1, THIS.canvas2 )
  74446. case THIS.canvasCount = 4
  74447.     THIS.RenderPage( m.iPageToRender,   THIS.canvas1 )
  74448.     THIS.RenderPage( m.iPageToRender+1, THIS.canvas2 )
  74449.     THIS.RenderPage( m.iPageToRender+2, THIS.canvas3 )
  74450.     THIS.RenderPage( m.iPageToRender+3, THIS.canvas4 )
  74451. endcase
  74452. if not isnull( THIS.Extensionhandler )
  74453.     *-----------------------------------
  74454.     * New in SP2: 
  74455.     *-----------------------------------
  74456.     if pemstatus( THIS.ExtensionHandler, "RenderPages", 5 )    
  74457.         #IF DEBUG_METHOD_LOGGING 
  74458.             debugout space(program(-1)) + " frxPreviewForm.ExtensionHandler::RenderPages()"
  74459.         #ENDIF    
  74460.         THIS.ExtensionHandler.RenderPages()
  74461.     endif
  74462. endif
  74463. ENDPROC
  74464. PROCEDURE savetoresource
  74465. #IF DEBUG_METHOD_LOGGING 
  74466.     debugout space(program(-1)) + "frxPreviewForm::SaveToResource()"
  74467. #ENDIF
  74468. *--------------------------------------------------------------
  74469. * Turn off the cursor notification in the status bar:
  74470. *--------------------------------------------------------------
  74471. local lSetNotify, lSetNotify2, lSetTalk
  74472. lSetNotify  = (set("NOTIFY",1) = "ON")
  74473. lSetNotify2 = (set("NOTIFY")   = "ON")
  74474. lSetTalk    = (set("TALK")     = "ON")
  74475. if m.lSetNotify
  74476.     set notify cursor off
  74477. endif
  74478. if m.lSetNotify
  74479.     set notify off
  74480. endif
  74481. if m.lSetTalk
  74482.     set talk off
  74483. endif
  74484. local x, iCurrentState
  74485. x = newobject( "ResourceManager", FRXCOMMON_PRG_CLASSLIB )
  74486. iCurrentState = THIS.WindowState
  74487. if THIS.WindowState <> 0
  74488.     THIS.WindowState = 0
  74489. endif
  74490. if x.LoadResource( REPORTPREVIEW_RESOURCE_ID, upper(THIS.FrxFileName) )
  74491.     if not THIS.oReport.commandClauses.isDesignerLoaded
  74492.         x.Set("PreviewForm.Top",    THIS.Top )
  74493.         x.Set("PreviewForm.Left",   THIS.Left )
  74494.         *------------------------------------------
  74495.         * Fix for SP2:
  74496.         * form width,height does not include width
  74497.         * of scrollbars, if visible. Therefore add
  74498.         * back into saved value if applicable:
  74499.         *------------------------------------------
  74500.         if (THIS.Width < THIS.ViewPortWidth)
  74501.             * Vertical Scrollbar is visible. Add to window size:
  74502.             x.Set("PreviewForm.Width",  THIS.Width + sysmetric(5) )
  74503.         else
  74504.             x.Set("PreviewForm.Width",  THIS.Width )
  74505.         endif
  74506.         if (THIS.Height < THIS.ViewPortHeight)
  74507.             * Horizontal Scrollbar is visible. Add to window size:
  74508.             x.Set("PreviewForm.Height", THIS.Height + sysmetric(8) )
  74509.         else
  74510.             x.Set("PreviewForm.Height", THIS.Height )
  74511.         endif
  74512.         *-------------------------------------
  74513.     endif
  74514.     x.Set("PreviewForm.WindowState",      m.iCurrentState )
  74515.     x.Set("PreviewForm.ToolbarIsVisible", THIS.ToolbarIsVisible )
  74516.     x.Set("PreviewForm.CanvasCount",      THIS.CanvasCount )
  74517.     x.Set("PreviewForm.ZoomLevel",        THIS.ZoomLevel )
  74518.     if not isnull( THIS.Toolbar )
  74519.         *-------------------------------------------------------
  74520.         * Only if toolbar is available:
  74521.         *-------------------------------------------------------
  74522.         x.Set("PreviewToolbar.Top",          THIS.Toolbar.Top )
  74523.         x.Set("PreviewToolbar.Left",         THIS.Toolbar.Left )
  74524.         x.Set("PreviewToolbar.Width",        THIS.Toolbar.Width )
  74525.         x.Set("PreviewToolbar.Height",       THIS.Toolbar.Height )
  74526.         x.Set("PreviewToolbar.DockPosition", THIS.Toolbar.DockPosition )
  74527.     endif
  74528.     if x.SaveResource( REPORTPREVIEW_RESOURCE_ID, upper(THIS.FrxFileName) )
  74529.         * well, success. If not, well, not.
  74530.     endif
  74531. endif
  74532. *--------------------------------------------------------------
  74533. * SP2: Don't leave the windowState toggled. It interferes with
  74534. *      other windows in the application:
  74535. *--------------------------------------------------------------
  74536. if THIS.WindowState <> m.iCurrentState
  74537.     THIS.WindowState = m.iCurrentState
  74538. endif
  74539. release x
  74540. *--------------------------------------------------------------
  74541. * Restore SET NOTIFY CURSOR status:
  74542. *--------------------------------------------------------------
  74543. if m.lSetNotify
  74544.     set notify cursor on
  74545. endif
  74546. if m.lSetNotify2
  74547.     set notify on
  74548. endif
  74549. if m.lSetTalk
  74550.     set talk on
  74551. endif
  74552. ENDPROC
  74553. PROCEDURE restorefromresource
  74554. #IF DEBUG_METHOD_LOGGING 
  74555.     debugout space(program(-1)) + "frxPreviewForm::RestoreFromResource()"
  74556. #ENDIF
  74557. local x, iCurrentState, cValue
  74558. x = newobject( "ResourceManager", FRXCOMMON_PRG_CLASSLIB )
  74559. if x.LoadResource( REPORTPREVIEW_RESOURCE_ID, upper(THIS.FrxFileName) )
  74560.     cValue = x.Get("PreviewForm.Top")
  74561.     if not empty( m.cValue )
  74562.         THIS.Top = int(val(m.cValue ))
  74563.     endif
  74564.     cValue = x.Get("PreviewForm.Left")
  74565.     if not empty( m.cValue )
  74566.         THIS.Left = int(val(m.cValue ))
  74567.     endif
  74568.     cValue = x.Get("PreviewForm.Width")
  74569.     if not empty( m.cValue )
  74570.         THIS.Width = int(val(m.cValue ))
  74571.     endif
  74572.     cValue = x.Get("PreviewForm.Height")
  74573.     if not empty( m.cValue )
  74574.         THIS.Height = int(val(m.cValue ))
  74575.     endif
  74576.     if not THIS.oReport.commandClauses.IsDesignerLoaded
  74577.         cValue = x.Get("PreviewForm.WindowState")
  74578.         if not empty( m.cValue )
  74579.             THIS.WindowState = int(val(m.cValue ))
  74580.         endif
  74581.     endif
  74582.     cValue = x.Get("PreviewForm.ToolbarIsVisible")
  74583.     if not empty( m.cValue )
  74584.         THIS.ToolbarIsVisible = ( m.cValue = ".T.")
  74585.     endif
  74586.     cValue = x.Get("PreviewForm.CanvasCount")
  74587.     if not empty( m.cValue )
  74588.         THIS.CanvasCount = int(val(m.cValue ))
  74589.     endif
  74590.     cValue = x.Get("PreviewForm.ZoomLevel")
  74591.     if not empty( m.cValue )
  74592.         THIS.ZoomLevel = int(val(m.cValue ))
  74593.     endif
  74594.     cValue = x.Get("PreviewToolbar.Top")
  74595.     if not empty( m.cValue )
  74596.         THIS.toolbar.Top = int(val(m.cValue ))
  74597.     endif
  74598.     cValue = x.Get("PreviewToolbar.Left")
  74599.     if not empty( m.cValue )
  74600.         THIS.toolbar.Left = int(val(m.cValue ))
  74601.     endif
  74602.     cValue = x.Get("PreviewToolbar.Width")
  74603.     if not empty( m.cValue )
  74604.         THIS.toolbar.Width = int(val(m.cValue ))
  74605.     endif
  74606.     cValue = x.Get("PreviewToolbar.Height")
  74607.     if not empty( m.cValue )
  74608.         THIS.toolbar.Height = int(val(m.cValue ))
  74609.     endif
  74610.     cValue = x.Get("PreviewToolbar.DockPosition")
  74611.     if not empty( m.cValue )
  74612.         if between( int(val( m.cValue )), 0, 3 ) and THIS.ShowWindow <> 2
  74613.             THIS.toolbar.Dock( int(val( m.cValue )) )
  74614.         endif
  74615.     endif
  74616. endif
  74617. release x
  74618. ENDPROC
  74619. PROCEDURE getpixelsperdpi960
  74620. *-----------------------------------------------------------
  74621. * We need a conversion factor between 960dpi and pixels.
  74622. * pixels/dpi960 = THIS.Canvas1.Width/(THIS.PageWidth * 960)
  74623. *-----------------------------------------------------------
  74624. return THIS.Canvas1.Width/(THIS.PageWidth * 960)
  74625. ENDPROC
  74626. PROCEDURE createtoolbar
  74627. #IF DEBUG_METHOD_LOGGING 
  74628.     debugout space(program(-1)) + "frxPreviewForm::CreateToolbar()"
  74629. #ENDIF
  74630. THIS.toolbar = newobject( "frxPreviewToolbar","frxPreview.vcx")
  74631. THIS.toolbar.PreviewForm = THIS
  74632. *----------------------------------------------------
  74633. * Fixed in SP1: Extension handler .InitializeToolbar()
  74634. *----------------------------------------------------
  74635. if not isnull( THIS.Extensionhandler )
  74636.     if pemstatus( THIS.ExtensionHandler, "InitializeToolbar", 5 )    
  74637.         #IF DEBUG_METHOD_LOGGING 
  74638.             debugout space(program(-1)) + " frxPreviewForm.ExtensionHandler::InitializeToolbar()"
  74639.         #ENDIF
  74640.         THIS.ExtensionHandler.InitializeToolbar()
  74641.     endif
  74642. endif
  74643. *--------------------------------------------------------------
  74644. * Bug #441419 (Fixed for SP1):
  74645. *--------------------------------------------------------------
  74646. THIS.Toolbar.Refresh()
  74647. *--------------------------------------------------------------
  74648. ENDPROC
  74649. PROCEDURE extensionhandler_assign
  74650. *---------------------------------------------------
  74651. * Give the extension handler object a reference to
  74652. * the preview form. Remove the reference if we are 
  74653. * nulling out the extension handler:
  74654. *---------------------------------------------------
  74655. lparameters oExtHandler
  74656. if not isnull( m.oExtHandler )
  74657.     THIS.ExtensionHandler = m.oExtHandler
  74658.     AddProperty( oExtHandler, "PreviewForm" )
  74659.     oExtHandler.PreviewForm = THIS
  74660.     if not isnull( THIS.ExtensionHandler )
  74661.         THIS.ExtensionHandler.PreviewForm = .NULL.
  74662.     endif
  74663.     THIS.ExtensionHandler = .NULL.
  74664. endif
  74665. return
  74666. ENDPROC
  74667. PROCEDURE getpixelpageoffsets
  74668. *----------------------------------------
  74669. * GetPixelPageOffset( x, y )
  74670. *----------------------------------------
  74671. lparameters x960, y960
  74672. if empty( m.x960 )
  74673.     x960 = 0
  74674. endif
  74675. if empty( m.y960 )
  74676.     y960 = 0
  74677. endif
  74678. local x, y, conversionFactor
  74679. conversionFactor = THIS.GetPixelsPerDpi960()
  74680. x                = THIS.Canvas1.Left + int(m.x960 * m.conversionFactor) && - THIS.ViewPortLeft
  74681. y                = THIS.Canvas1.Top  + int(m.y960 * m.conversionFactor) && - THIS.ViewPortTop
  74682. offset = newobject("Empty")
  74683. AddProperty( m.offset, "x", m.x )
  74684. AddProperty( m.offset, "y", m.y )
  74685. return m.offset
  74686. ENDPROC
  74687. PROCEDURE showcommandwindow
  74688. if _vfp.StartMode = 0
  74689.     *------------------------------------------------
  74690.     * un-hide the command window, if we hid it
  74691.     *------------------------------------------------
  74692.     if this.hidCommandWindow and not wvisible("Command")
  74693.         show window command
  74694.     endif
  74695. endif
  74696. ENDPROC
  74697. PROCEDURE hidecommandwindow
  74698. if _vfp.StartMode = 0
  74699.     if wvisible("Command")
  74700.         hide Window command
  74701.         THIS.hidCommandWindow = .T.
  74702.     else
  74703.         THIS.hidCommandWindow = .F.    
  74704.     endif
  74705. endif
  74706. ENDPROC
  74707. PROCEDURE createcanvases
  74708. *=========================================
  74709. * CreateCanvases() - 
  74710. * New in SP2
  74711. * Create the canvas objects
  74712. *=========================================
  74713. #IF DEBUG_METHOD_LOGGING 
  74714.     debugout space(program(-1)) + "frxPreviewForm::CreateCanvases()"
  74715. #ENDIF
  74716. do case
  74717. case not empty(THIS.MemberClass) and ;
  74718.      not empty(THIS.MemberClassLibrary)
  74719.     THIS.NewObject("Canvas1", THIS.MemberClass, THIS.MemberClassLibrary)
  74720.     THIS.NewObject("Canvas2", THIS.MemberClass, THIS.MemberClassLibrary)
  74721.     THIS.NewObject("Canvas3", THIS.MemberClass, THIS.MemberClassLibrary)
  74722.     THIS.NewObject("Canvas4", THIS.MemberClass, THIS.MemberClassLibrary)
  74723. case not empty(THIS.MemberClass) 
  74724.     THIS.NewObject("Canvas1", THIS.MemberClass)
  74725.     THIS.NewObject("Canvas2", THIS.MemberClass)
  74726.     THIS.NewObject("Canvas3", THIS.MemberClass)
  74727.     THIS.NewObject("Canvas4", THIS.MemberClass)
  74728. otherwise
  74729.     THIS.NewObject("Canvas1", "ShapeCanvas", THIS.ClassLibrary )
  74730.     THIS.NewObject("Canvas2", "ShapeCanvas", THIS.ClassLibrary )
  74731.     THIS.NewObject("Canvas3", "ShapeCanvas", THIS.ClassLibrary )
  74732.     THIS.NewObject("Canvas4", "ShapeCanvas", THIS.ClassLibrary )
  74733. endcase
  74734. store .F. to ;
  74735.     THIS.Canvas1.Visible, ;
  74736.     THIS.Canvas2.Visible, ;
  74737.     THIS.Canvas3.Visible, ;
  74738.     THIS.Canvas4.Visible
  74739. *----------------------------------------------------
  74740. * New in SP2:
  74741. *----------------------------------------------------
  74742. if not isnull( THIS.Extensionhandler )
  74743.     if pemstatus( THIS.ExtensionHandler, "CreateCanvases", 5 )    
  74744.         #IF DEBUG_METHOD_LOGGING 
  74745.             debugout space(program(-1)) + " frxPreviewForm.ExtensionHandler::CreateCanvases()"
  74746.         #ENDIF
  74747.         THIS.ExtensionHandler.CreateCanvases()
  74748.     endif
  74749. endif
  74750. return
  74751. ENDPROC
  74752. PROCEDURE canvascount_assign
  74753. *----------------------------------------------
  74754. * CanvasCount_Assign()
  74755. *----------------------------------------------
  74756. lparameter iCanvasCount
  74757. if iCanvasCount <> THIS.CanvasCount
  74758.     if type("THIS.Canvas1")="O"
  74759.         if THIS.Canvas1.BaseClass <> "Shape"
  74760.             *----------------------------------------------
  74761.             * Set the canvas visibility:
  74762.             *----------------------------------------------
  74763.             do case
  74764.             case m.iCanvasCount = 1
  74765.                 store .F. to ;
  74766.                     THIS.Canvas2.Visible, ;
  74767.                     THIS.Canvas3.Visible, ;
  74768.                     THIS.Canvas4.Visible
  74769.                     
  74770.             case m.iCanvasCount = 2
  74771.                 store .T. to ;
  74772.                     THIS.Canvas2.Visible
  74773.                 store .F. to ;
  74774.                     THIS.Canvas3.Visible, ;
  74775.                     THIS.Canvas4.Visible
  74776.             case m.iCanvasCount = 4
  74777.                 store .T. to ;
  74778.                     THIS.Canvas2.Visible, ;
  74779.                     THIS.Canvas3.Visible, ;
  74780.                     THIS.Canvas4.Visible
  74781.             endcase
  74782.         endif
  74783.     endif        
  74784. endif
  74785. THIS.CanvasCount = m.iCanvasCount
  74786. ENDPROC
  74787. PROCEDURE setzoomlevel
  74788. *-----------------------------------------------------
  74789. * SetZoomLevel()
  74790. * new in SP2
  74791. *-----------------------------------------------------
  74792. lparameter iZoomLevel
  74793. iZoomLevel = min( alen(THIS.zoomLevels,1), max( 1, m.iZoomLevel ))
  74794. if THIS.zoomLevel <> m.iZoomLevel
  74795.     THIS.zoomLevel = m.iZoomLevel
  74796.     THIS.SetViewPort( 0, 0 )
  74797.     local iPagesAllowed
  74798.     iPagesAllowed = THIS.zoomLevels[ m.iZoomLevel, ZOOM_LEVEL_CANVAS]
  74799.     if THIS.canvasCount > m.iPagesAllowed
  74800.         * Reduce the canvas count at high levels of zoom:
  74801.         THIS.canvasCount = m.iPagesAllowed    
  74802.     endif
  74803.     THIS.TempStopRepaint = .T.
  74804.     THIS.Cls()
  74805.     THIS.SetViewPort(0,0)
  74806.     THIS.synchCanvases()
  74807.     THIS.RenderPages()
  74808.     THIS.synchPageNo()
  74809.     THIS.synchToolbar()
  74810.     * Fix the scrollbar refresh problem:
  74811.     THIS.Scrollbars = 0
  74812.     THIS.ScrollBars = 3
  74813. endif
  74814. ENDPROC
  74815. PROCEDURE setcanvascount
  74816. *-----------------------------------------------------
  74817. * SetCanvasCount()
  74818. * new in SP2
  74819. *-----------------------------------------------------
  74820. lparameter iCount
  74821. iCount = min(4, max(1, m.iCount ))
  74822. if iCount = 3
  74823.     iCount = 2
  74824. endif
  74825. if THIS.canvasCount <> m.iCount
  74826.     THIS.SuppressRendering = .T.
  74827.     *------------------------------------------------
  74828.     * Only clear the form if there are potentially
  74829.     * extra canvas images that need to be erased:
  74830.     *------------------------------------------------
  74831.     if THIS.CanvasCount > m.iCount        
  74832.         THIS.Cls()
  74833.     endif
  74834.     THIS.canvasCount = m.iCount
  74835.     THIS.SetViewPort(0,0)
  74836.     THIS.synchCanvases()
  74837.     THIS.SuppressRendering = .F.
  74838.     THIS.RenderPages()
  74839.     THIS.synchPageNo()
  74840.     THIS.synchToolbar()
  74841. endif
  74842. ENDPROC
  74843. PROCEDURE MouseUp
  74844. lparameters iButton, nShift, nXCoord, nYCoord
  74845. *--------------------------------------------------
  74846. * ENH for SP2:
  74847. * Allow magnify when clicking on page
  74848. * See Toolbar.zoomCombo.interactiveChange() for code 
  74849. * that sets this flag:
  74850. *--------------------------------------------------
  74851. if not this.IgnoreMouseClickInMagnifyCode
  74852.     do case
  74853.     case m.iButton <> 1
  74854.         *--------------------------------------------------
  74855.         * Wasn't a left click so do nothing:
  74856.         *--------------------------------------------------
  74857.     case m.nXCoord > (CANVAS_LEFT_OFFSET_PIXELS + THIS.Canvas1.Width)    ;
  74858.       or m.nYCoord > (CANVAS_TOP_OFFSET_PIXELS + THIS.Canvas1.Height)    
  74859.         *--------------------------------------------------
  74860.         * CLicked outside the page so do nothing:
  74861.         *--------------------------------------------------
  74862.     case (THIS.ZoomLevel >= alen(THIS.zoomLevels,1)-1) ;
  74863.       or (THIS.ZoomLevel < 5)
  74864.         *--------------------------------------------------
  74865.         * The current zoom level is "Whole page" 
  74866.         * or less than 100%, so go to 100% and set view port 
  74867.         * to be oriented on the clicked portion of the page:
  74868.         *--------------------------------------------------
  74869.         ClickXOffsetPercent = (nXCoord - CANVAS_LEFT_OFFSET_PIXELS)/THIS.Canvas1.Width 
  74870.         ClickYOffsetPercent = (nYCoord - CANVAS_TOP_OFFSET_PIXELS)/THIS.Canvas1.Height
  74871.         THIS.ActionSetZoom( 5 )        
  74872.         * Do we need to center the offset point?
  74873.         NewViewPortX = (THIS.Canvas1.Width*ClickXOffsetPercent) - THIS.Width/2 - CANVAS_LEFT_OFFSET_PIXELS
  74874.         NewViewPortY = (THIS.Canvas1.Height*ClickYOffsetPercent) - THIS.Height/2 - CANVAS_TOP_OFFSET_PIXELS
  74875.         THIS.SetViewPort( max(NewViewPortX,0), max(NewViewPortY,0) )
  74876.     otherwise
  74877.         *--------------------------------------------------
  74878.         * The current zoom level is not "Whole page" so 
  74879.         * go to "Whole page" zoom:
  74880.         *--------------------------------------------------
  74881.         THIS.ActionSetZoom( alen(THIS.zoomLevels,1)-1 )        
  74882.     endcase
  74883.     THIS.MouseFlag = .F.
  74884.     THIS.IgnoreMouseClickInMagnifyCode = .F.
  74885. endif
  74886. ENDPROC
  74887. PROCEDURE Hide
  74888. #IF DEBUG_METHOD_LOGGING 
  74889.     debugout space(program(-1)) + "frxPreviewForm::Hide()"
  74890. #ENDIF
  74891. if not isnull( THIS.toolbar )
  74892.     * Hide the toolbar:
  74893.     THIS.Toolbar.Hide()
  74894.     THIS.ToolbarIsVisible = .F.
  74895. endif
  74896. ENDPROC
  74897. PROCEDURE Activate
  74898. #IF DEBUG_METHOD_LOGGING 
  74899.     debugout space(program(-1)) + "frxPreviewForm::Activate()"
  74900. #ENDIF
  74901. *---------------------------------------------------------------
  74902. * Ensure the toolbar is visible
  74903. *---------------------------------------------------------------
  74904. if THIS.ToolbarIsVisible
  74905.     THIS.ShowToolbar(.T.)
  74906. endif
  74907. *---------------------------------------------------------------
  74908. * Fix for SP2: Ensure the scrollbars are respected 
  74909. * by SynchCanvases()
  74910. *---------------------------------------------------------------
  74911. THIS.Resize()
  74912. ENDPROC
  74913. PROCEDURE Deactivate
  74914. #IF DEBUG_METHOD_LOGGING 
  74915.     debugout space(program(-1)) + "frxPreviewForm::Deactivate()"
  74916. #ENDIF
  74917. *---------------------------------------------------------------
  74918. * Deactivate()
  74919. *---------------------------------------------------------------
  74920. if THIS.ToolbarIsVisible
  74921.     THIS.Toolbar.Show()
  74922. *    THIS.ShowToolBar(.F.)
  74923. endif
  74924. ENDPROC
  74925. PROCEDURE Destroy
  74926. #IF DEBUG_METHOD_LOGGING 
  74927.     debugout space(program(-1)) + "frxPreviewForm::Destroy()"
  74928. #ENDIF
  74929. *---------------------------------------------------------------
  74930. * New in SP2: 
  74931. *---------------------------------------------------------------
  74932. if not isnull( THIS.Extensionhandler )
  74933.     *-----------------------------------
  74934.     * New in SP2: 
  74935.     *-----------------------------------
  74936.     if pemstatus( THIS.ExtensionHandler, "Destroy", 5 )    
  74937.         #IF DEBUG_METHOD_LOGGING 
  74938.             debugout space(program(-1)) + " frxPreviewForm.ExtensionHandler::Destroy()"
  74939.         #ENDIF    
  74940.         THIS.ExtensionHandler.Destroy()
  74941.     endif
  74942. endif
  74943. *---------------------------------------------------------------
  74944. * Get rid of that toolbar:
  74945. *---------------------------------------------------------------
  74946. if not isnull( THIS.toolbar )
  74947.     THIS.toolbar.PreviewForm = null
  74948.     THIS.toolbar = null
  74949. endif
  74950. THIS.oReport = null
  74951. dodefault()
  74952. ENDPROC
  74953. PROCEDURE Init
  74954. *---------------------------------------------------------------
  74955. * Init()
  74956. *---------------------------------------------------------------
  74957. dodefault()
  74958. *----------------------------------
  74959. * Build zoom level array:
  74960. *  Menu Prompt
  74961. *  percentage zoom
  74962. *  no. of pages to display
  74963. *----------------------------------
  74964. dimension THIS.zoomLevels[11,3]
  74965. *---------------------------------------------------
  74966. * Prompt
  74967. *---------------------------------------------------
  74968. THIS.zoomLevels[ 1,ZOOM_LEVEL_PROMPT] = ZOOM_LEVEL_PROMPT_10_LOC
  74969. THIS.zoomLevels[ 2,ZOOM_LEVEL_PROMPT] = ZOOM_LEVEL_PROMPT_25_LOC
  74970. THIS.zoomLevels[ 3,ZOOM_LEVEL_PROMPT] = ZOOM_LEVEL_PROMPT_50_LOC
  74971. THIS.zoomLevels[ 4,ZOOM_LEVEL_PROMPT] = ZOOM_LEVEL_PROMPT_75_LOC
  74972. THIS.zoomLevels[ 5,ZOOM_LEVEL_PROMPT] = ZOOM_LEVEL_PROMPT_100_LOC 
  74973. THIS.zoomLevels[ 6,ZOOM_LEVEL_PROMPT] = ZOOM_LEVEL_PROMPT_150_LOC 
  74974. THIS.zoomLevels[ 7,ZOOM_LEVEL_PROMPT] = ZOOM_LEVEL_PROMPT_200_LOC 
  74975. THIS.zoomLevels[ 8,ZOOM_LEVEL_PROMPT] = ZOOM_LEVEL_PROMPT_300_LOC
  74976. THIS.zoomLevels[ 9,ZOOM_LEVEL_PROMPT] = ZOOM_LEVEL_PROMPT_500_LOC 
  74977. THIS.zoomLevels[10,ZOOM_LEVEL_PROMPT] = ZOOM_LEVEL_PROMPT_WHOLE_PAGE_LOC
  74978. THIS.ZoomLevels[11,ZOOM_LEVEL_PROMPT] = ZOOM_LEVEL_PROMPT_FIT_WIDTH_LOC
  74979. *---------------------------------------------------
  74980. * Percentage zoom:
  74981. *---------------------------------------------------
  74982. THIS.zoomLevels[ 1,ZOOM_LEVEL_PERCENT] =   10
  74983. THIS.zoomLevels[ 2,ZOOM_LEVEL_PERCENT] =   25
  74984. THIS.zoomLevels[ 3,ZOOM_LEVEL_PERCENT] =   50
  74985. THIS.zoomLevels[ 4,ZOOM_LEVEL_PERCENT] =   75
  74986. THIS.zoomLevels[ 5,ZOOM_LEVEL_PERCENT] =  100
  74987. THIS.zoomLevels[ 6,ZOOM_LEVEL_PERCENT] =  150
  74988. THIS.zoomLevels[ 7,ZOOM_LEVEL_PERCENT] =  200
  74989. THIS.zoomLevels[ 8,ZOOM_LEVEL_PERCENT] =  300
  74990. THIS.zoomLevels[ 9,ZOOM_LEVEL_PERCENT] =  500
  74991. THIS.zoomLevels[10,ZOOM_LEVEL_PERCENT] =   -1  
  74992. THIS.zoomLevels[11,ZOOM_LEVEL_PERCENT] =   -2  
  74993. *---------------------------------------------------
  74994. * Set how many pages can be viewed at once
  74995. * depending on zoom level. 
  74996. * These may need tuning for memory:
  74997. *---------------------------------------------------
  74998. THIS.zoomLevels[ 1,ZOOM_LEVEL_CANVAS] =    4
  74999. THIS.zoomLevels[ 2,ZOOM_LEVEL_CANVAS] =    4 
  75000. THIS.zoomLevels[ 3,ZOOM_LEVEL_CANVAS] =    4
  75001. THIS.zoomLevels[ 4,ZOOM_LEVEL_CANVAS] =    4
  75002. THIS.zoomLevels[ 5,ZOOM_LEVEL_CANVAS] =    4
  75003. THIS.zoomLevels[ 6,ZOOM_LEVEL_CANVAS] =    2
  75004. THIS.zoomLevels[ 7,ZOOM_LEVEL_CANVAS] =    1
  75005. THIS.zoomLevels[ 8,ZOOM_LEVEL_CANVAS] =    1
  75006. THIS.zoomLevels[ 9,ZOOM_LEVEL_CANVAS] =    1
  75007. THIS.zoomLevels[10,ZOOM_LEVEL_CANVAS] =    1  
  75008. THIS.zoomLevels[11,ZOOM_LEVEL_CANVAS] =    1  
  75009. *------------------------------------------
  75010. * Create the toolbar and ensure the toolbar 
  75011. * has a reference to the main form:
  75012. * SP1: See .Show() for extra extension handler call
  75013. *------------------------------------------
  75014. THIS.CreateToolbar()
  75015. *------------------------------------------
  75016. * prevent too small windows
  75017. *------------------------------------------
  75018. THIS.MinWidth  = CANVAS_LEFT_OFFSET_PIXELS * 5
  75019. THIS.MinHeight = CANVAS_TOP_OFFSET_PIXELS * 5
  75020. ENDPROC
  75021. PROCEDURE KeyPress
  75022. LPARAMETERS nKeyCode, nShiftAltCtrl
  75023. #IF DEBUG_METHOD_LOGGING 
  75024.     debugout space(program(-1)) + "frxPreviewForm::KeyPress(" + trans(m.nKeyCode) + ", " + trans(m.nShiftAltCtrl) + ")"
  75025. #ENDIF
  75026. #define JOG_PIXELS    50
  75027. local lHandledKeypress, iPagesAllowed
  75028. iPagesAllowed = THIS.zoomLevels[ THIS.zoomLevel, ZOOM_LEVEL_CANVAS ]
  75029. if not isnull( THIS.Extensionhandler )
  75030.     *-----------------------------------
  75031.     * Fixed for SP1: Only invoke the method 
  75032.     * if it is defined:
  75033.     *-----------------------------------
  75034.     if pemstatus( THIS.ExtensionHandler, "HandledKeyPress", 5 )    
  75035.         #IF DEBUG_METHOD_LOGGING 
  75036.             debugout space(program(-1)) + " frxPreviewForm.ExtensionHandler::HandledKeyPress()"
  75037.         #ENDIF
  75038.         if THIS.ExtensionHandler.handledKeypress( m.nKeyCode, m.nShiftAltCtrl )
  75039.             return
  75040.         endif
  75041.     endif
  75042. endif
  75043. *------------------------------------------------------------
  75044. * This will be set false if none of the explicit tests below
  75045. * deal with the keypress. See the dodefault() call at the 
  75046. * end of the CASE statement.
  75047. *------------------------------------------------------------
  75048. lHandledKeypress = .T.
  75049. do case
  75050. case m.nShiftAltCtrl = 2
  75051.     *----------------------
  75052.     * CONTROL - ?
  75053.     *----------------------
  75054.     do case
  75055.     case m.nKeyCode = 23    && CTRL-W
  75056.         *--------------------------------------------------
  75057.         * Support Ctrl-W to close window
  75058.         *--------------------------------------------------
  75059.         THIS.ActionClose()
  75060.     otherwise
  75061.         lHandledKeyPress = .F.
  75062.     endcase
  75063. case m.nShiftAltCtrl = 1 
  75064.     *----------------------
  75065.     * SHIFT - ?
  75066.     *----------------------
  75067.     do case
  75068.     case m.nKeyCode = 93    && SHIFT-F10
  75069.         *--------------------------------------------------
  75070.         * Shift-F10 is the code for the windows context menu
  75071.         *--------------------------------------------------
  75072.         THIS.InvokeContextMenu(.T.)
  75073.     case m.nKeyCode = 90    && Z - Zoom in-and-out of the page
  75074.         if THIS.ZoomLevel >= alen(THIS.zoomLevels,1)-1
  75075.             *--------------------------------------------------
  75076.             * The current zoom level is "Whole page" so 
  75077.             * go to 100%
  75078.             *--------------------------------------------------
  75079.             THIS.ActionSetZoom( 5 )        
  75080.         else
  75081.             *--------------------------------------------------
  75082.             * The current zoom level is not "Whole page" so 
  75083.             * go to "Whole page" zoom:
  75084.             *--------------------------------------------------
  75085.             THIS.ActionSetZoom( alen(THIS.zoomLevels,1) )        
  75086.         endif
  75087.     case m.nKeyCode = 76    && L - Toggle between various zoom levels
  75088.         *--------------------------------------------------
  75089.         * The L key reduces/cycles the zoom level
  75090.         *--------------------------------------------------
  75091.         local z
  75092.         z = THIS.zoomLevel - 1
  75093.         if m.z = 0
  75094.             m.z = alen(THIS.zoomLevels,1)-2
  75095.         endif
  75096.         THIS.actionSetZoom(m.z)
  75097.     case m.nKeyCode = 71    && G - Go To Page
  75098.         THIS.ActionGoToPage()
  75099.     otherwise
  75100.         lHandledKeyPress = .F.
  75101.     endcase
  75102. case m.nShiftAltCtrl = 0
  75103.     *-----------------------------------------------------------------------------------------
  75104.     *   Key bindings in the orginal preview window:
  75105.     *-----------------------------------------------------------------------------------------
  75106.     *    ESC            27        Closes Print Preview window.
  75107.     *    RIGHTARROW     4        Scrolls to the right of the page in the Print Preview window.
  75108.     *    LEFTARROW    19        Scrolls to the left of the page in the Print Preview window.
  75109.     *    UPARROW        5        Scrolls towards the top of the page in the Print Preview window.
  75110.     *    DOWNARROW     24        Scrolls towards the bottom of the page in the Print Preview window.
  75111.     *    PAGEUP         18        Moves to the previous page in the Print Preview window.
  75112.     *    PAGEDOWN     3        Moves to the next page in the Print Preview window. 
  75113.     *    HOME        1        Moves to the first page in the Print Preview window.
  75114.     *    END         6        Moves to the last page in the Print Preview window.
  75115.     *    Z             122,90    Zooms in and out of the page.
  75116.     *    L            108,76    Toggles between various zoom levels.
  75117.     *    G            103,71    Opens Goto page dialog box.
  75118.     *-----------------------------------------------------------------------------------------
  75119.     do case
  75120.     case m.nKeyCode = 27    && ESC
  75121.         *--------------------------------------------------
  75122.         * Support ESC to close window
  75123.         *--------------------------------------------------
  75124.         THIS.ActionClose()
  75125.     case m.nKeyCode = 4        && Right
  75126.         THIS.SetViewPort( THIS.ViewPortLeft+JOG_PIXELS, THIS.ViewPortTop )
  75127.     case m.nKeyCode = 19    && Left
  75128.         THIS.SetViewPort( max(THIS.ViewPortLeft-JOG_PIXELS,0), THIS.ViewPortTop )
  75129.     case m.nKeyCode = 5        && Up
  75130.         THIS.SetViewPort( THIS.ViewPortLeft, max(THIS.ViewPortTop-JOG_PIXELS,0) )
  75131.     case m.nKeyCode = 24    && Down
  75132.         THIS.SetViewPort( THIS.ViewPortLeft, THIS.ViewPortTop+JOG_PIXELS )
  75133.     case m.nKeyCode = 18    && PageUp
  75134.         THIS.actionGoPrev()
  75135.     case m.nKeyCode = 3        && PagDown
  75136.         THIS.actionGoNext()
  75137.     case m.nKeyCode = 1        && Home
  75138.         THIS.actiongofirst()
  75139.     case m.nKeyCode = 6        && End
  75140.         THIS.actiongolast()
  75141. *    case m.nKeyCode = 99    && C - Close ?
  75142. *        THIS.actionclose()
  75143.     case inlist( m.nKeyCode, 103, 71 )     && G - Go To Page
  75144.         THIS.actiongotopage()
  75145.     case inlist( m.nKeyCode, 108, 76 )    && L - zoom cycle
  75146.         *--------------------------------------------------
  75147.         * The L key reduces/cycles the zoom level
  75148.         *--------------------------------------------------
  75149.         local z
  75150.         z = THIS.zoomLevel - 1
  75151.         if m.z = 0
  75152.             m.z = alen(THIS.zoomLevels,1)-2
  75153.         endif
  75154.         THIS.actionSetZoom(m.z)
  75155.     case inlist(m.nKeyCode, 122, 90 )    && Z for Zoom toggle
  75156.         if THIS.ZoomLevel >= alen(THIS.zoomLevels,1)-1
  75157.             *--------------------------------------------------
  75158.             * The current zoom level is "Whole page" so 
  75159.             * go to 100%
  75160.             *--------------------------------------------------
  75161.             THIS.ActionSetZoom( 5 )        
  75162.         else
  75163.             *--------------------------------------------------
  75164.             * The current zoom level is not "Whole page" so 
  75165.             * go to "Whole page" zoom:
  75166.             *--------------------------------------------------
  75167.             THIS.ActionSetZoom( alen(THIS.zoomLevels,1)-1 )        
  75168.         endif
  75169.     case m.nKeyCode = 49    && 1 page
  75170.         THIS.actionSetCanvasCount(1)
  75171.     case m.nKeyCode = 50    && 2 pages
  75172.         *------------------------------------------------------
  75173.         * Fix for SP1:
  75174.         * Disable two-page view for high zoom levels
  75175.         *------------------------------------------------------
  75176.         if m.iPagesAllowed > 1
  75177.             THIS.actionSetCanvasCount(2)
  75178.         endif
  75179.     case m.nKeyCode = 52    && 4 pages
  75180.         *------------------------------------------------------
  75181.         * Fix for SP1:
  75182.         * Disable 4-page view for high zoom levels
  75183.         *------------------------------------------------------
  75184.         if m.iPagesAllowed > 2
  75185.             THIS.actionSetCanvasCount(4)
  75186.         endif
  75187.     otherwise
  75188.         lHandledKeyPress = .F.
  75189.     endcase
  75190. endcase
  75191. if not m.lHandledKeyPress    
  75192.     #IF DEBUG_METHOD_LOGGING 
  75193.         debugout space(program(-1)) + " frxBaseForm::KeyPress(" + trans(m.nKeyCode) + ", " + trans(m.nShiftAltCtrl) + ")"
  75194.     #ENDIF
  75195.     dodefault( m.nKeyCode, m.nShiftAltCtrl )
  75196. endif
  75197. ENDPROC
  75198. PROCEDURE Paint
  75199. #IF DEBUG_METHOD_LOGGING 
  75200.     debugout space(program(-1)) + "frxPreviewForm::Paint()"
  75201. #ENDIF
  75202. *-----------------------------------
  75203. * This is a kludge to prevent
  75204. * the extra repaint we see when we
  75205. * change zoom levels:
  75206. *-----------------------------------
  75207. if THIS.TempStopRepaint = .T.
  75208.     THIS.TempStopRepaint = .F.
  75209.     return
  75210. endif
  75211. *-----------------------------------
  75212. * New in SP2:
  75213. * Image controls do not need successive
  75214. * repaints during the Paint() event:
  75215. *-----------------------------------
  75216. if THIS.Canvas1.BaseClass <> "Image"
  75217.     THIS.RenderPages()
  75218. endif
  75219. *-----------------------------------
  75220. * See if the ExtensionHandler
  75221. * wants to draw anything:
  75222. *-----------------------------------
  75223. if not isnull( THIS.Extensionhandler )
  75224.     *-----------------------------------------------------------
  75225.     * Fixed for SP1: Only invoke the method if it is defined:
  75226.     * Noted for SP2: Deprecated in favor of .RenderPages()
  75227.     *-----------------------------------------------------------
  75228.     if pemstatus( THIS.ExtensionHandler, "Paint", 5 )    
  75229.         #IF DEBUG_METHOD_LOGGING 
  75230.             debugout space(program(-1)) + " frxPreviewForm.ExtensionHandler::Paint()"
  75231.         #ENDIF    
  75232.         THIS.ExtensionHandler.Paint()
  75233.     endif
  75234. endif
  75235. doevents
  75236. ENDPROC
  75237. PROCEDURE QueryUnload
  75238. dodefault()
  75239. THIS.Release()
  75240. ENDPROC
  75241. PROCEDURE Release
  75242. #IF DEBUG_METHOD_LOGGING 
  75243.     debugout space(program(-1)) + "frxPreviewForm::Release()"
  75244. #ENDIF
  75245. *------------------------------------------------
  75246. * Clear the report listener's reference to this form:
  75247. *------------------------------------------------
  75248. if not isnull( THIS.oReport )
  75249.     *-----------------------------------
  75250.     * Check with the extension handler:
  75251.     *-----------------------------------
  75252.     if not isnull( THIS.Extensionhandler )
  75253.         *-----------------------------------
  75254.         * Fixed for SP1: Only invoke the method 
  75255.         * if it is defined:
  75256.         *-----------------------------------
  75257.         if pemstatus( THIS.ExtensionHandler, "Release", 5 )    
  75258.             #IF DEBUG_METHOD_LOGGING 
  75259.                 debugout space(program(-1)) + " frxPreviewForm.ExtensionHandler::Release()"
  75260.             #ENDIF
  75261.             if THIS.ExtensionHandler.Release()
  75262.                 *----------------------------------------------
  75263.                 * Clear out the reference. The assign method
  75264.                 * will also clear out the back ref to the form:
  75265.                 *----------------------------------------------
  75266.                 * THIS.ExtensionHandler = null
  75267.             else
  75268.                 *----------------------------------------------
  75269.                 * The extension handler has indicated that it 
  75270.                 * does not want to release. So don't:
  75271.                 *----------------------------------------------
  75272.                 NODEFAULT
  75273.                 return
  75274.             endif
  75275.         endif    
  75276.     endif
  75277.     THIS.SaveToResource()
  75278.     if version(4) > "09.00.0000.1800"
  75279.         *-------------------------------------------
  75280.         * Set the "Current page" value for the Print... dialog
  75281.         *-------------------------------------------
  75282.         THIS.oReport.commandClauses.printPageCurrent = THIS.currentPage
  75283.     endif
  75284.     *-------------------------------------------
  75285.     * Indicate that we are closing to the listener/engine:
  75286.     *-------------------------------------------
  75287.     THIS.oReport.onPreviewClose( THIS.PrintOnExit )
  75288.     *-------------------------------------------
  75289.     * Clear out the reference to the report
  75290.     *-------------------------------------------
  75291.     THIS.oReport = .null. 
  75292. endif
  75293. *------------------------------------------------
  75294. * Show the Command window if we previously hid it:
  75295. *------------------------------------------------
  75296. THIS.ShowCommandWindow()
  75297. *------------------------------------------------
  75298. * This is needed for .TopForm=.T.
  75299. *------------------------------------------------
  75300. THIS.Hide()
  75301. ENDPROC
  75302. PROCEDURE Resize
  75303. *------------------------------------------------------------------
  75304. * If in "Zoom Page to fit" mode:
  75305. *------------------------------------------------------------------
  75306. if THIS.zoomlevel >= alen(THIS.zoomLevels,1)-1
  75307.     THIS.synchCanvases()
  75308. endif
  75309. ENDPROC
  75310. PROCEDURE RightClick
  75311. THIS.invokeContextMenu()
  75312. ENDPROC
  75313. PROCEDURE Show
  75314. *---------------------------------------------------------------
  75315. * The Report engine / Listener object can be assigned a preview 
  75316. * surface instance in advance of rendering a report, so it will 
  75317. * need to invoke .Show() when it is ready for the user to interact 
  75318. * with the Preview UI.
  75319. *---------------------------------------------------------------
  75320. lparameter iStyle
  75321. #IF DEBUG_METHOD_LOGGING 
  75322.     debugout space(program(-1)) + "frxPreviewForm::Show(" + trans(m.iStyle) + ")"
  75323. #ENDIF
  75324. if parameters() = 0
  75325.     iStyle = WINDOWTYPE_MODELESS
  75326. endif
  75327. *----------------------------------------------------
  75328. * Fixed in SP1: Extension handler .InitializeToolbar()
  75329. * Additional call. THIS.CreateToolbar() was called in
  75330. * the .Init(), before the extension handler could be 
  75331. * assigned. Now that it is possibly available, we 
  75332. * need to re-invoke its CreateToolbar() hook:
  75333. *----------------------------------------------------
  75334. if not isnull( THIS.Extensionhandler )
  75335.     if pemstatus( THIS.ExtensionHandler, "InitializeToolbar", 5 )    
  75336.         #IF DEBUG_METHOD_LOGGING 
  75337.             debugout space(program(-1)) + " frxPreviewForm.ExtensionHandler::InitializeToolbar()"
  75338.         #ENDIF
  75339.         THIS.ExtensionHandler.InitializeToolbar()
  75340.     endif
  75341. endif
  75342. *-------------------------------
  75343. * How many pages?
  75344. *-------------------------------
  75345. THIS.PageTotal   = THIS.oReport.OutputPageCount
  75346. *-------------------------------
  75347. * a RANGE x,y clause can cause 0 pages rendered
  75348. *-------------------------------
  75349. if THIS.PageTotal < 1
  75350.     =messagebox(RP_NO_OUTPUT_PAGES_LOC ,64,DEFAULT_MBOX_TITLE_LOC)
  75351.     nodefault
  75352.     return
  75353. endif
  75354. THIS.startOffset = 0
  75355. THIS.canvasCount = min( THIS.canvasCount, THIS.PageTotal)
  75356. *-------------------------------
  75357. * Should we be modal?
  75358. *-------------------------------
  75359. THIS.IsNoWait = not (m.iStyle = WINDOWTYPE_MODAL)
  75360. *-----------------------------------
  75361. * Set and save the current form caption for later
  75362. * (See THIS.synchPageNo())
  75363. *-----------------------------------
  75364. if empty( THIS.Caption )
  75365.     THIS.Caption = REPORT_PREVIEW_CAPTION
  75366. endif
  75367. *-----------------------------------
  75368. * Fix for SP2: 
  75369. * Only enhance the preview window title caption
  75370. * if user has not specfied a target window:
  75371. *-----------------------------------
  75372. do case
  75373. case THIS.oReport.commandClauses.IsDesignerLoaded
  75374.     * Caption includes file name already:
  75375.     THIS.Caption = proper(THIS.Caption)
  75376. case not empty( THIS.oReport.commandClauses.Window )
  75377.     * The caption has been specified via the WINDOW clause,
  75378.     * so don't change it:
  75379. otherwise    
  75380.     if not empty( THIS.oReport.PrintJobName)
  75381.         THIS.Caption = THIS.Caption + " - " + THIS.oReport.PrintJobName
  75382.     else
  75383.         THIS.Caption = THIS.Caption + " - " + THIS.frxFilename 
  75384.     endif        
  75385. endcase
  75386. THIS.formCaption     = THIS.Caption
  75387. *-----------------------------------
  75388. * Update the form caption with the current page:
  75389. *-----------------------------------
  75390. THIS.setCurrentPage(THIS.currentPage) 
  75391. *-----------------------------------
  75392. * Activate the extension handler:
  75393. *-----------------------------------
  75394. if not isnull( THIS.Extensionhandler )
  75395.     *-----------------------------------
  75396.     * Fixed for SP1: Only invoke the method 
  75397.     * if it is defined:
  75398.     *-----------------------------------
  75399.     if pemstatus( THIS.ExtensionHandler, "Show", 5 )    
  75400.         #IF DEBUG_METHOD_LOGGING 
  75401.             debugout space(program(-1)) + " frxPreviewForm.ExtensionHandler::Show(" + trans(m.iStyle) + ")"
  75402.         #ENDIF
  75403.         THIS.ExtensionHandler.Show( m.iStyle )
  75404.     endif
  75405. endif
  75406. *----------------------------------------------
  75407. * Fix for versions earlier than SP1: Bug# 475109
  75408. *----------------------------------------------
  75409. if version(4) < "09.00.0000.3301"
  75410.     if not THIS.IsNoWait and ;
  75411.        THIS.ShowWindow = SHOWWINDOW_IN_TOPFORM and ;
  75412.        not empty(wparent(THIS.Name))
  75413.         * if we are modal and inside a topform app,
  75414.         * the toolbar will be unavailable, so don't 
  75415.         * show it:
  75416.         THIS.ToolbarIsVisible = .F.
  75417.     endif
  75418. endif
  75419. *-----------------------------------
  75420. * Update the toolbar, if necessary:
  75421. *-----------------------------------
  75422. THIS.Toolbar.Refresh()
  75423. if THIS.ToolbarIsVisible
  75424.     THIS.showToolbar(SHOW_TOOLBAR_ENABLED)
  75425. endif    
  75426. *----------------------------------
  75427. * Obtain page dimensions:
  75428. *----------------------------------
  75429. local iWidth, iHeight
  75430. iWidth  = THIS.oreport.getPageWidth()
  75431. iHeight = THIS.oReport.getPageHeight()
  75432. THIS.PageWidth  = m.iWidth/960
  75433. THIS.PageHeight = m.iHeight/960
  75434. *----------------------------------
  75435. * New in SP2:
  75436. * Create the canvas objects:
  75437. * Canvas1... Canvas4
  75438. *----------------------------------
  75439. THIS.CreateCanvases()
  75440. *----------------------------------
  75441. * Adjust the canvases to suit:
  75442. *----------------------------------
  75443. THIS.SynchCanvases()
  75444. *-----------------------------------
  75445. * If modal, no minimise button, and hide the command window:
  75446. *-----------------------------------
  75447. if not THIS.IsNoWait && m.iStyle = 1
  75448.     THIS.MinButton = .F.
  75449.     *------------------------------------------------
  75450.     * Hide the command window, if not NOWAIT
  75451.     *------------------------------------------------
  75452.     THIS.HideCommandWindow()
  75453. endif
  75454. #IF DEBUG_METHOD_LOGGING 
  75455.     debugout space(program(-1)) + " frxBaseForm::Show(" + trans(m.iStyle) + ")"
  75456. #ENDIF
  75457. *-----------------------------------------------
  75458. * New in SP2: 
  75459. * Ensure pages are drawn once manually up front:
  75460. *-----------------------------------------------
  75461. THIS.RenderPages()
  75462. *-----------------------------------
  75463. * Support the IN WINDOW clause:
  75464. *-----------------------------------
  75465. if not empty( THIS.oReport.commandClauses.InWindow )
  75466.     activate window (THIS.oReport.commandClauses.InWindow)    
  75467.     activate window (THIS.Name) ;
  75468.         in window (THIS.oReport.commandClauses.InWindow)
  75469. * This does not work for modal:
  75470. *    THIS.Visible = .T.        
  75471. *    NODEFAULT
  75472.     dodefault(m.iStyle)
  75473.     dodefault(m.iStyle)
  75474. endif
  75475. ENDPROC
  75476. PROCEDURE Cls
  75477. #IF DEBUG_METHOD_LOGGING 
  75478.     debugout space(program(-1)) + "frxPreviewForm::Cls()"
  75479. #ENDIF
  75480. ENDPROC
  75481. PROCEDURE Error
  75482. *===========================================
  75483. * Error( )
  75484. *===========================================
  75485. lparameters iError, cMethod, iLine
  75486. if not isnull( THIS.Extensionhandler )
  75487.     *-----------------------------------
  75488.     * ENH for SP2:
  75489.     *-----------------------------------
  75490.     if pemstatus( THIS.ExtensionHandler, "HandledError", 5 )    
  75491.         #IF DEBUG_METHOD_LOGGING 
  75492.             debugout space(program(-1)) + " frxPreviewForm.ExtensionHandler::HandledError()"
  75493.         #ENDIF
  75494.         if THIS.ExtensionHandler.handledError( m.iError, m.cMethod, m.iLine )
  75495.             return
  75496.         endif
  75497.     endif
  75498. endif
  75499. dodefault( m.iError, m.cMethod, m.iLine )
  75500. ENDPROC
  75501. Top = 16
  75502. Left = 8
  75503. Height = 367
  75504. Width = 580
  75505. ShowWindow = 1
  75506. ScrollBars = 3
  75507. DoCreate = .T.
  75508. AutoCenter = .F.
  75509. Caption = ""
  75510. KeyPreview = .T.
  75511. BackColor = 128,128,128
  75512. AllowOutput = .F.
  75513. canvascount = 1
  75514. canvasheight = 10
  75515. canvaswidth = 10
  75516. currentpage = 1
  75517. frxfilename = ("")
  75518. lastpainted = 0
  75519. oreport = .NULL.
  75520. pageheight = 11.5
  75521. pagewidth = 8
  75522. pagetotal = 0
  75523. toolbar = .NULL.
  75524. toolbarisvisible = .T.
  75525. unitconverter = .NULL.
  75526. zoomlevel = 5
  75527. formcaption = ("")
  75528. startoffset = 0
  75529. extensionhandler = .NULL.
  75530. _memberdata = 
  75531.     4790<?xml version = "1.0" encoding="Windows-1252" standalone="yes"?>
  75532. <VFPData>
  75533. <memberdata name="allowprintfrompreview"  type="Property" display="AllowPrintFromPreview"/>
  75534. <memberdata name="canvascount"  type="Property" display="CanvasCount"/>
  75535. <memberdata name="canvasheight" type="Property" display="CanvasHeight"/>
  75536. <memberdata name="canvaswidth"  type="Property" display="CanvasWidth"/>
  75537. <memberdata name="currentpage"  type="Property" display="CurrentPage"/>
  75538. <memberdata name="disabledoffscreenbmps" type="Property" display="DisabledOffscreenBmps"/>
  75539. <memberdata name="extensionhandler" type="Property" display="ExtensionHandler"/>
  75540. <memberdata name="formcaption"  type="Property" display="FormCaption"/>
  75541. <memberdata name="frxfilename"  type="Property" display="FrxFileName"/>
  75542. <memberdata name="hidcommandwindow" type="Property" display="HidCommandWindow"/>
  75543. <memberdata name="isnowait"     type="Property" display="IsNoWait"/>
  75544. <memberdata name="lastpainted"  type="Property" display="LastPainted"/>
  75545. <memberdata name="oreport"      type="Property" display="oReport"/>
  75546. <memberdata name="pageheight"   type="Property" display="PageHeight"/>
  75547. <memberdata name="pagetotal"    type="Property" display="PageTotal"/>
  75548. <memberdata name="pagewidth"    type="Property" display="PageWidth"/>
  75549. <memberdata name="printonexit"  type="Property" display="PrintOnExit"/>
  75550. <memberdata name="screendpi"    type="Property" display="ScreenDPI"/>
  75551. <memberdata name="startoffset"  type="Property" display="StartOffset"/>
  75552. <memberdata name="suppressrendering" type="Property" display="SuppressRendering"/>
  75553. <memberdata name="toolbar"      type="Property" display="Toolbar"/>
  75554. <memberdata name="toolbarisvisible" type="Property" display="ToolbarIsVisible"/>
  75555. <memberdata name="unitconverter" type="Property" display="UnitConverter"/>
  75556. <memberdata name="zoomlevel"    type="Property" display="ZoomLevel"/>
  75557. <memberdata name="zoomlevels"    type="Property" display="ZoomLevels"/>
  75558. <memberdata name="actionclose"    type="Method" display="ActionClose"/>
  75559. <memberdata name="actiongofirst"  type="Method" display="ActionGoFirst"/>
  75560. <memberdata name="actiongolast"   type="Method" display="ActionGoLast"/>
  75561. <memberdata name="actiongonext"   type="Method" display="ActionGoNext"/>
  75562. <memberdata name="actiongoprev"   type="Method" display="ActionGoPrev"/>
  75563. <memberdata name="actiongotopage" type="Method" display="ActionGoToPage"/>
  75564. <memberdata name="actionprint"    type="Method" display="ActionPrint"/>
  75565. <memberdata name="actionsetcanvascount" type="Method" display="ActionSetCanvasCount"/>
  75566. <memberdata name="actionsetzoom"  type="Method" display="ActionSetZoom"/>
  75567. <memberdata name="actionshowinfo" type="Method" display="ActionShowInfo"/>
  75568. <memberdata name="actiontoolbarvisibility" type="Method" display="ActionToolbarVisibility"/>
  75569. <memberdata name="createtoolbar"  type="Method" display="CreateToolbar"/>
  75570. <memberdata name="getpixelsperdpi960" type="Method" display="GetPixelsPerDpi960"/>
  75571. <memberdata name="getpixelpageoffsets" type="Method" display="GetPixelPageOffsets"/>
  75572. <memberdata name="getzoompercent" type="Method" display="GetZoomPercent"/>
  75573. <memberdata name="invokecontextmenu" type="Method" display="InvokeContextMenu"/>
  75574. <memberdata name="renderpage"     type="Method" display="RenderPage"/>
  75575. <memberdata name="renderpages"    type="Method" display="RenderPages"/>
  75576. <memberdata name="reset"          type="Method" display="Reset"/>
  75577. <memberdata name="restorefromresource" type="Method" display="RestoreFromResource"/>
  75578. <memberdata name="savetoresource" type="Method" display="SaveToResource"/>
  75579. <memberdata name="setcurrentpage" type="Method" display="SetCurrentPage"/>
  75580. <memberdata name="setzoomlevel" type="Method" display="SetZoomLevel"/>
  75581. <memberdata name="setcanvascount" type="Method" display="SetCanvasCount"/>
  75582. <memberdata name="setreport"      type="Method" display="SetReport"/>
  75583. <memberdata name="showtoolbar"    type="Method" display="ShowToolbar"/>
  75584. <memberdata name="synchcanvases"  type="Method" display="SynchCanvases"/>
  75585. <memberdata name="synchpageno"    type="Method" display="SynchPageNo"/>
  75586. <memberdata name="synchtoolbar"   type="Method" display="SynchToolbar"/>
  75587. <memberdata name="createcanvases"     type="Method"   display="CreateCanvases"/>
  75588. <memberdata name="hidecommandwindow"  type="Method"   display="HideCommandWindow"/>
  75589. <memberdata name="lastzoomlevel"      type="Property" display="LastZoomLevel"/>
  75590. <memberdata name="memberclass"        type="Property" display="MemberClass"/>
  75591. <memberdata name="memberclasslibrary" type="Property" display="MemberClassLibrary"/>
  75592. <memberdata name="showcommandwindow"  type="Method"   display="ShowCommandwindow"/>
  75593. <memberdata name="tempstoprepaint"    type="Property" display="TempStopRepaint"/>
  75594. <memberdata name="textontoolbar"      type="Property" display="TextOnToolbar"/>
  75595. </VFPData>
  75596. allowprintfrompreview = .T.
  75597. lastzoomlevel = 0
  75598. textontoolbar = .F.
  75599. tempstoprepaint = .F.
  75600. memberclass = ("")
  75601. memberclasslibrary = ("")
  75602. topform = .F.
  75603. mouseflag = .F.
  75604. ignoremouseclickinmagnifycode = .F.
  75605. screendpi = 96
  75606. Name = "frxpreviewform"
  75607. PROCEDURE previewform_assign
  75608. *------------------------------------------------------
  75609. * synch up the various controls
  75610. *------------------------------------------------------
  75611. lparameter oPreviewForm
  75612. THIS.PreviewForm = m.oPreviewForm
  75613. if not isnull( THIS.PreviewForm )
  75614.     THIS.cboZoom.Clear()
  75615.     for i = 1 to alen(THIS.PreviewForm.zoomLevels,1)
  75616.         THIS.cboZoom.AddItem( THIS.PreviewForm.zoomLevels[m.i,ZOOM_LEVEL_PROMPT], m.i )
  75617.     endfor
  75618.     THIS.cboZoom.DisplayCount = m.i
  75619. endif
  75620. ENDPROC
  75621. PROCEDURE synchcontrols
  75622. *------------------------------------------------------
  75623. * SynchControls() - ensure toolbar displays correct values
  75624. *------------------------------------------------------
  75625. #IF DEBUG_METHOD_LOGGING 
  75626.     debugout space(program(-1)) + "frxPreviewToolbar::SynchControls()"
  75627. #ENDIF
  75628. *------------------------------------------------------
  75629. * Zoom level
  75630. *------------------------------------------------------
  75631. THIS.cboZoom.Value   = THIS.PreviewForm.zoomLevel
  75632. *------------------------------------------------------
  75633. * Disable multi-page view for high zoom levels
  75634. *------------------------------------------------------
  75635. local iPagesAllowed
  75636. iPagesAllowed = THIS.PreviewForm.zoomLevels[ THIS.PreviewForm.zoomLevel, ZOOM_LEVEL_CANVAS ]
  75637. THIS.opgPageCount.opt3.Enabled = (m.iPagesAllowed > 2)
  75638. THIS.opgPageCount.opt2.Enabled = (m.iPagesAllowed > 1)
  75639. *------------------------------------------------------
  75640. * Number of pages to display
  75641. *------------------------------------------------------
  75642. do case
  75643. case THIS.PreviewForm.canvasCount = 1
  75644.     THIS.opgPageCount.Value = 1
  75645. case THIS.PreviewForm.canvasCount = 2
  75646.     THIS.opgPageCount.Value = 2
  75647. case THIS.PreviewForm.canvasCount = 4
  75648.     THIS.opgPageCount.Value = 3
  75649. endcase
  75650. *------------------------------------------------------
  75651. * .synchControls()
  75652. *------------------------------------------------------
  75653. with THIS.PreviewForm
  75654.     *------------------------------------------------------
  75655.     * Disable the Top, Prev if we're on the first page:
  75656.     * Enable them if we are not:
  75657.     *------------------------------------------------------
  75658.     if (.currentPage > 1 )
  75659.         THIS.cntPrev.cmdTop.Enabled = .T.
  75660.         THIS.cntPrev.cmdBack.Enabled = .T.
  75661.     else
  75662.         THIS.cntPrev.cmdTop.Enabled = .F.
  75663.         THIS.cntPrev.cmdBack.Enabled = .F.
  75664.     endif
  75665.     *------------------------------------------------------
  75666.     * Disable the Next, Last if we're closer than canvasCount
  75667.     * to the last page:
  75668.     *------------------------------------------------------
  75669.     if (.currentPage + .canvasCount > .pageTotal) 
  75670.         THIS.cntNext.cmdForward.Enabled = .F.
  75671.         THIS.cntNext.cmdBottom.Enabled = .F.
  75672.     else
  75673.         THIS.cntNext.cmdForward.Enabled = .T.
  75674.         THIS.cntNext.cmdBottom.Enabled = .T.
  75675.     endif
  75676.     *------------------------------------------------------
  75677.     * Disable the GoToPage button if there is only one page:
  75678.     *------------------------------------------------------
  75679.     THIS.cmdGoToPage.Enabled = .PageTotal > 1
  75680. endwith
  75681. return
  75682. ENDPROC
  75683. PROCEDURE actionzoomlevel
  75684. lparameter iZoomIndex
  75685. #IF DEBUG_METHOD_LOGGING 
  75686.     debugout "frxPreviewToolbar::ActionZoomLevel()"
  75687. #ENDIF
  75688. *-----------------------------------
  75689. * Fixed for SP1: declare oForm local
  75690. *-----------------------------------
  75691. local oForm
  75692. oForm = THIS.previewForm
  75693. if oForm.ZoomLevel = m.iZoomIndex
  75694.     *----------------------------------
  75695.     * there is no action to take
  75696.     *----------------------------------
  75697.     return
  75698. endif
  75699. oForm.actionSetZoom(m.iZoomIndex )
  75700. *----------------------------------------------
  75701. * Belt & Braces mega kludge: Neither of the 
  75702. * following two methods are 100% reliable in 
  75703. * returning the mouse pointer to its original 
  75704. * position. This way, if one doesn't work (typically
  75705. * the Win32 function call seems to be ignored, despite
  75706. * the DOEVENTS), the other will prevent it from being
  75707. * completely obvious that the mouse pointer is being 
  75708. * dicked around with.
  75709. * And if you can figure out a better way of pulling the 
  75710. * keyboard focus out of the zoom combolist in the toolbar, 
  75711. * other than clicking on the main preview window, you're 
  75712. * welcome to replace this block of code.
  75713. *----------------------------------------------
  75714. *----------------------------------------------
  75715. * Fix in SP2
  75716. * See previewForm.MouseUp for code that respects this:
  75717. *----------------------------------------------
  75718. oForm.IgnoreMouseClickInMagnifyCode = .T.
  75719. *----------------------------------------------
  75720. * Save the mouse position:
  75721. *----------------------------------------------
  75722. *----------------------------------------------
  75723. * METHOD #1: Use windows API.
  75724. * (see .Init() for declare statements)
  75725. *----------------------------------------------
  75726. cPoint = space(8)
  75727. =GetMousePointerPos( @cPoint )
  75728. mx = asc(substr(m.cPoint,1,1)) + asc(substr(m.cPoint,2,1))*256
  75729. my = asc(substr(m.cPoint,5,1)) + asc(substr(m.cPoint,6,1))*256
  75730. *----------------------------------------------
  75731. * METHOD #2: Use mrow() relative to toolbar window
  75732. *----------------------------------------------
  75733. mr  = mrow(THIS.Caption,3)
  75734. mc  = mcol(THIS.Caption,3)
  75735. *-----------------------------------------
  75736. * Fake a mouse click on the preview form
  75737. * to pull keyboard focus away from the 
  75738. * Zoom level combo box on the toolbar:
  75739. *-----------------------------------------
  75740. mouse click at 1,1 window (oForm.Name)
  75741. *-----------------------------------------
  75742. * Return the mouse to its starting position:
  75743. *-----------------------------------------
  75744. *----------------------------------------------
  75745. * METHOD #2: Use mrow() relative to toolbar window
  75746. *----------------------------------------------
  75747. if m.mc < 0
  75748.     mc = THIS.cboZoom.Left + int(THIS.cboZoom.Width/2)
  75749. endif
  75750. if m.mr < 0
  75751.     mr = THIS.cboZoom.Top  + THIS.cboZoom.Height + int( fontmetric(1,THIS.cboZoom.FontName,THIS.cboZoom.FontSize)*(THIS.cboZoom.Value-0.5))
  75752. endif
  75753. mouse at m.mr, m.mc pixels window (THIS.Caption)
  75754. *-----------------------------------------
  75755. * METHOD #2: Use Windows API function.
  75756. * Note: Both DOEVENTS appear to be needed:
  75757. *-----------------------------------------
  75758. doevents  
  75759. =SetMousePointerPos( m.mx, m.my )
  75760. doevents
  75761. ENDPROC
  75762. PROCEDURE getwindowref
  75763. *-----------------------------------------------------------------
  75764. * .GetWindowRef( cWindow )
  75765. * Given a window name from REPORT FORM.. WINDOW <cWindow>,
  75766. * return an object reference to the window
  75767. *-----------------------------------------------------------------
  75768. lparameter cWindow
  75769. local cTitle, oRef, oForm
  75770. cTitle = wtitle(m.cWindow)
  75771. oRef   = null    
  75772. if not empty( m.cTitle )
  75773.     for each oForm in _screen.Forms
  75774.         if upper(oForm.Caption) == upper(m.cTitle) and ;
  75775.            ((oForm.Class = "Form" and oForm.Name = "") or ;
  75776.             (upper(oForm.Name) == upper(m.cWindow)))
  75777.             oRef = m.oForm
  75778.             exit
  75779.         endif
  75780.     endfor
  75781. endif
  75782. return m.oRef
  75783. ENDPROC
  75784. PROCEDURE actionpagecount
  75785. #IF DEBUG_METHOD_LOGGING 
  75786.     debugout "frxPreviewToolbar::ActionPageCount()"
  75787. #ENDIF
  75788. do case
  75789. case THIS.opgPageCount.Value = 1
  75790.     THIS.previewform.actionSetCanvasCount(1)
  75791. case THIS.opgPageCount.Value = 2
  75792.     THIS.previewform.actionSetCanvasCount(2)
  75793. case THIS.opgPageCount.Value = 3
  75794.     THIS.previewform.actionSetCanvasCount(4)
  75795. endcase
  75796. ENDPROC
  75797. PROCEDURE Refresh
  75798. #IF DEBUG_METHOD_LOGGING 
  75799.     debugout space(program(-1)) + "frxPreviewToolbar::Refresh()"
  75800. #ENDIF
  75801. if not isnull( THIS.PreviewForm )
  75802.     *--------------------------------------------------------------
  75803.     * Fixed for SP2. Should not include page number
  75804.     *--------------------------------------------------------------
  75805.     *THIS.Caption = THIS.PreviewForm.Caption
  75806.     THIS.Caption = THIS.PreviewForm.FormCaption
  75807.     *--------------------------------------------------------------
  75808.     * Fixed for SP1. Doesn't barf if button doesn't exist.
  75809.     *--------------------------------------------------------------
  75810.     if pemstatus( THIS, "cmdPrint", 5 )
  75811.         THIS.cmdPrint.Visible = THIS.PreviewForm.AllowPrintFromPreview
  75812.     endif
  75813.     if not THIS.PreviewForm.TextOnToolbar
  75814.         *--------------------------------------------------------------
  75815.         * Fixed for SP1: doesn't refer to objects specifically by name
  75816.         *--------------------------------------------------------------
  75817.         for each oControl in THIS.Controls
  75818.             THIS.SetAll("Caption","","cmd")    
  75819.             THIS.SetAll("AutoSize",.T.,"cmd")
  75820.             THIS.SetAll("AutoSize",.F.,"cmd")
  75821.             THIS.SetAll("Height",22,"cmd")
  75822.         endfor    
  75823.     endif    
  75824. endif
  75825. ENDPROC
  75826. PROCEDURE Init
  75827. #IF DEBUG_METHOD_LOGGING 
  75828.     debugout space(program(-1)) + "frxPreviewToolbar::Init()"
  75829. #ENDIF
  75830. THIS.Caption = TOOLBAR_CAPTION
  75831. THIS.Name    = "PreviewToolbar"
  75832. *--------------------------------
  75833. * Declare functions needed for 
  75834. * mouse pointer kludge 
  75835. * see ActionZoomlevel()
  75836. *--------------------------------
  75837. declare GetCursorPos ;
  75838.     in user32 ;
  75839.     as GetMousePointerPos ;
  75840.     string @cpoint
  75841. declare SetCursorPos  ;
  75842.     in user32 ;
  75843.     as SetMousePointerPos ;
  75844.     integer x, integer y
  75845. ENDPROC
  75846. PROCEDURE Destroy
  75847. #IF DEBUG_METHOD_LOGGING 
  75848.     debugout space(program(-1)) + "frxPreviewToolbar::Destroy()"
  75849. #ENDIF
  75850. if not isnull( THIS.PreviewForm )
  75851.     THIS.PreviewForm.ToolbarIsVisible = .F.
  75852. endif
  75853. ENDPROC
  75854. PROCEDURE Error
  75855. *====================================================================
  75856. * Error()
  75857. * Use the ErrorHandler class to provide default error handling. Most 
  75858. * objects (in frxControls.vcx anyway) will defer error handling to their
  75859. * containers, which ultimately ends up here:
  75860. *====================================================================
  75861. lparameters iError, cMethod, iLine
  75862. x = newobject("ErrorHandler","pr_frxpreview.prg")
  75863. x.Handle( iError, cMethod, iLine, THIS )
  75864. do case
  75865. case x.cancelled
  75866.     cancel
  75867. case x.suspended
  75868.     suspend
  75869. endcase
  75870. ENDPROC
  75871. CWINDOW
  75872. CTITLE
  75873. OFORM
  75874. FORMS
  75875. CAPTION
  75876. CLASS
  75877. NAME*
  75878. OFORM
  75879. HIDET
  75880. OFORM
  75881. RELEASE
  75882. EXTENSIONHANDLER
  75883. OREPORT<
  75884. TALKv
  75885. 09.00.0000.2013
  75886. IsDesignerProtected-
  75887. DATASESSIONv
  75888. frxO6
  75889. TOREPORT
  75890. OREPORT
  75891. COMMANDCLAUSES
  75892. ISDESIGNERPROTECTED
  75893. ICURRSESSION
  75894. IPROTFLAGS
  75895. FRXDATASESSION
  75896. BINSTRINGTOINT
  75897. ORDER
  75898. ALLOWPRINTFROMPREVIEW
  75899. OFORM    
  75900. SETREPORTE
  75901. Report Preview has not been initialized correctly. It requires a ReportListener reference.
  75902. Report Preview
  75903. TALKv
  75904. iStyleb
  75905. frxPreviewForm
  75906. frxPreviewInScreen
  75907. SCREEN
  75908. frxPreviewInScreen
  75909. frxPreviewInDesktop
  75910. frxPreviewAsTopForm
  75911. SCREEN
  75912. frxPreview
  75913. SCREEN
  75914. ISTYLE
  75915. OREPORT
  75916. LCFORMCLASS
  75917. COMMANDCLAUSES
  75918. INSCREEN
  75919. INWINDOW
  75920. WINDOW
  75921. GETWINDOWREF
  75922. DESKTOP
  75923. MACDESKTOP
  75924. TOPFORM
  75925. PREVIEWFORMCLASS
  75926. SCREEN
  75927. LREUSE
  75928. OFORM
  75929. WINDOWTYPE
  75930. CLASS
  75931. EXTENSIONHANDLER
  75932. HIDE    
  75933. SETREPORT
  75934. RESTOREFROMRESOURCE
  75935. ISDESIGNERLOADED
  75936. CDESIGNERWINDOW
  75937. CPARENT
  75938. IROWPIX
  75939. ICOLPIX
  75940. WIDTH
  75941. HEIGHT
  75942. CAPTION
  75943. TEMPLATE
  75944. WINDOWSTATE
  75945. BORDERSTYLE
  75946. HALFHEIGHTCAPTION
  75947. MEMBERCLASS
  75948. MEMBERCLASSLIBRARY
  75949. CANVASCOUNT
  75950. CURRENTPAGE    
  75951. ZOOMLEVEL
  75952. TOOLBARISVISIBLE
  75953. TEXTONTOOLBAR
  75954. ALLOWPRINTFROMPREVIEW
  75955. SHOWWINDOW
  75956. SHOWo
  75957. IPAGE
  75958. CURRENTPAGE
  75959. OFORM
  75960. SETCURRENTPAGE
  75961. RENDERPAGESo
  75962. ICOUNT
  75963. CANVASCOUNT
  75964. OFORM
  75965. ACTIONSETCANVASCOUNT
  75966. RENDERPAGESX
  75967. ILEVEL
  75968. THIS    
  75969. ZOOMLEVEL
  75970. OFORM
  75971. ACTIONSETZOOM_
  75972. EXTENSIONHANDLER
  75973. OFORM
  75974. CBYTE
  75975. IRETURN
  75976. WIDTH
  75977. HEIGHT
  75978. LEFT*
  75979. OFORM
  75980. RELEASE
  75981. getwindowref,
  75982. hide?
  75983. release
  75984. setreport    
  75985. setcurrentpagem
  75986. setcanvascount
  75987. setzoomlevel
  75988. setextensionhandlera
  75989. binstringtoint
  75990. Destroy
  75991. PROCEDURE checkforlargefonts
  75992. *====================================================================
  75993. * CheckForLargeFonts()
  75994. * This is invoked from the .Init() to set all contained objects to
  75995. * use the "large font"-safe font, "MS Shell Dlg" which maps to the 
  75996. * appropriate font in Windows.
  75997. *====================================================================
  75998. *----------------------------------------------------------------
  75999. * Initial, default font setting:
  76000. *----------------------------------------------------------------
  76001. do case 
  76002. case OS(3) = "6" or DEBUG_FORCE_SEGOE_UI
  76003.     THIS.SetAll("FontName","Segoe UI")
  76004.     THIS.SetAll("FontSize",9)
  76005.     THIS.SetAll("Margin",0,"txt")
  76006.     THIS.SetAll("Margin",0,"edt")
  76007.     THIS.SetAll("Margin",0,"Editbox")
  76008.     THIS.SetAll("Margin",0,"Textbox")
  76009. case OS(3) = "5"
  76010.     THIS.SetAll("FontName","MS Shell Dlg 2")
  76011.     THIS.SetAll("FontSize",8)
  76012. otherwise
  76013.     THIS.SetAll("FontName","Tahoma")
  76014.     THIS.SetAll("FontSize",8)
  76015. endcase
  76016. *----------------------------------------------------------------
  76017. * Optional Fontname override:
  76018. *----------------------------------------------------------------
  76019. if not empty(DIALOG_FONTNAME_OVERRIDE)
  76020.     THIS.SetAll("FontName", DIALOG_FONTNAME_OVERRIDE )
  76021.     THIS.FontName = DIALOG_FONTNAME_OVERRIDE
  76022. endif    
  76023. *----------------------------------------------------------------
  76024. * Adjustments for "large fonts":
  76025. *----------------------------------------------------------------
  76026. do case
  76027. case DIALOG_FONTSIZE_OVERRIDE > 0
  76028.     *----------------------------------------------------------------
  76029.     * We can force the use of a specific font size:
  76030.     *----------------------------------------------------------------
  76031.     this.SetAll("FontSize", DIALOG_FONTSIZE_OVERRIDE )
  76032.     this.FontSize = DIALOG_FONTSIZE_OVERRIDE 
  76033. *-----------------------
  76034. * SP1 Fix: 
  76035. *-----------------------
  76036. case DEBUG_FORCE_LARGE_FONTS or ;
  76037.      (DIALOG_ADJUST_FOR_LARGE_FONTS and THIS.screenDPI >= 120)
  76038.     *----------------------------------------------------------------
  76039.     * Use a slightly larger font in 120 dpi to match the other 
  76040.     * native VFP dialogs
  76041.     *----------------------------------------------------------------
  76042.     this.SetAll("FontSize", 10 )
  76043.     this.FontSize = 10
  76044. endcase
  76045. ENDPROC
  76046. PROCEDURE Error
  76047. *====================================================================
  76048. * Error()
  76049. * Use the ErrorHandler class to provide default error handling. Most 
  76050. * objects (in frxControls.vcx anyway) will defer error handling to their
  76051. * containers, which ultimately ends up here:
  76052. *====================================================================
  76053. lparameters iError, cMethod, iLine
  76054. x = newobject("ErrorHandler","pr_frxpreview.prg")
  76055. x.Handle( m.iError, m.cMethod, m.iLine, THIS )
  76056. do case
  76057. case x.cancelled
  76058.     cancel
  76059. case x.suspended
  76060.     suspend
  76061. endcase
  76062. ENDPROC
  76063. PROCEDURE Init
  76064. *====================================================================
  76065. * Init()
  76066. * Make sure that if large fonts are in effect, to switch all controls
  76067. * to use a large-font-safe font.
  76068. *====================================================================
  76069. *---------------------------------
  76070. * SP1 - improve "large font" handling:
  76071. * Determine the screen DPI:
  76072. *---------------------------------
  76073. #define LOGPIXELSX 88
  76074. declare integer GetDeviceCaps in WIN32API integer HDC, integer item
  76075. declare integer GetDC         in WIN32API integer hWnd
  76076. declare integer ReleaseDC     in WIN32API integer hWnd, integer HDC
  76077. local hdc, screenDPI
  76078. hdc    = GetDC(0)
  76079. THIS.screenDPI = GetDeviceCaps( m.hdc, LOGPIXELSX )
  76080. ReleaseDC( 0, m.hdc )
  76081. *---------------------------------
  76082. * Adjust object font sizes if necessary:
  76083. *---------------------------------
  76084. this.checkForLargeFonts()
  76085. ENDPROC
  76086. frxPreview.vcx
  76087. TALKv
  76088. frxPreviewProxy
  76089. frxPreview.vcx
  76090. frxPreviewProxy
  76091. frxPreview.vcx
  76092. ROREF
  76093. FRXPREVIEW
  76094. Line 
  76095. .Error()
  76096. Do you want to suspend execution?
  76097. Report Preview
  76098.  Error
  76099. Report Preview
  76100.  Error
  76101. IERROR
  76102. CMETHOD
  76103. ILINE
  76104. THIS    
  76105. CANCELLED    
  76106. SUSPENDED    
  76107. CERRORMSG
  76108. IRETVAL
  76109. NAME    
  76110. ERRORTEXT
  76111. Handle
  76112. SUSPENDED    
  76113. CANCELLED    
  76114. ERRORTEXT
  76115. ErrorHandler
  76116. Custom
  76117. CTOKEN
  76118. RETVAL
  76119. IINDEX
  76120. VALUES
  76121. VVALUE
  76122. IINDEX    
  76123. IKEYCOUNT
  76124. VALUES
  76125. IPAIR
  76126. CTEXT
  76127. VALUES?
  76128. VALUESj
  76129. CTEXT
  76130. ILINECOUNT    
  76131. IKEYCOUNT
  76132. CBUFF
  76133. CVALUE
  76134. ATEMP
  76135. STRIPDELIMITERS
  76136. RESOURCE
  76137. RESOURCEv
  76138. RESOURCE
  76139. TYPE+ID+PADR(NAME,24)
  76140. CURRENTWORKAREA
  76141. RESOURCEWORKAREA
  76142. PREFW
  76143. CNAME
  76144. OPENRESOURCEFILE
  76145. LOADMEMO
  76146. CURRENTWORKAREA
  76147. PREFW
  76148. PREFW
  76149. CNAME
  76150. RESOURCEWORKAREA
  76151. OPENRESOURCEFILE
  76152. LRETVAL
  76153. CDATA
  76154. GETMEMO
  76155. READONLY
  76156. CKVAL
  76157. UPDATED
  76158. CURRENTWORKAREA\
  76159. RESOURCEWORKAREA
  76160. CURRENTWORKAREA
  76161. .FontName
  76162. .FontSize
  76163. .FontBold
  76164. .FontItalic
  76165. FONTNAME
  76166. FONTSIZE
  76167. FONTBOLD
  76168. FONTITALIC[
  76169. .FontName
  76170. .FontSize
  76171. .FontBold
  76172. .FontItalic
  76173. CVALUE
  76174. FONTNAME
  76175. FONTSIZE
  76176. FONTBOLD
  76177. FONTITALIC
  76178. .Left
  76179. .Width
  76180. .Height
  76181. .WindowState
  76182. ICURRENTSTATE
  76183. WINDOWSTATE
  76184. WIDTH
  76185. HEIGHT
  76186. .Left
  76187. .Width
  76188. .Height
  76189. .WindowState
  76190. CVALUE
  76191. WIDTH
  76192. HEIGHT
  76193. WINDOWSTATE
  76194. getMemoK
  76195. reset
  76196. loadMemoY
  76197. OpenResourceFile#
  76198. LoadResource
  76199. SaveResource
  76200. Destroy0
  76201. SaveFontState
  76202. RestoreFontState
  76203. SaveWindowStateJ
  76204. RestoreWindowState
  76205. VALUES
  76206. STRIPDELIMITERSm
  76207. CURRENTWORKAREA
  76208. RESOURCEWORKAREA
  76209. NameValuePairManager
  76210. Custom
  76211. ResourceManager
  76212. NameValuePairManager
  76213. GIF89a
  76214. GdipCreateImageAttributes
  76215. gdiplus.dll
  76216. GdipSetImageAttributesColorMatrix
  76217. gdiplus.dll
  76218. GdipSetImageAttributesRemapTable
  76219. gdiplus.dll
  76220. GDIPCREATEIMAGEATTRIBUTES
  76221. GDIPLUS
  76222. GDIPHANDLE
  76223. DISPOSEIMAGEATTRIBUTES
  76224. LHIMAGEATTR
  76225. STAT!
  76226. GDIPSETIMAGEATTRIBUTESCOLORMATRIX 
  76227. GDIPSETIMAGEATTRIBUTESREMAPTABLE
  76228. GDIPHANDLE
  76229. GDI+ error in CC
  76230. Error code : 
  76231. Description: 
  76232. Press 'Retry' to debug the application.
  76233. Error
  76234. TNSTATUS
  76235. LNOPTION
  76236. THIS    
  76237. ERRORINFO
  76238. STAT.
  76239. GDIPHANDLE
  76240. DISPOSEIMAGEATTRIBUTES{
  76241. TACOLMATRIX
  76242. LCCOLORMATRIX
  76243. MAKECOLORMATRIX
  76244. STAT!
  76245. GDIPSETIMAGEATTRIBUTESCOLORMATRIX
  76246. GDIPHANDLEd
  76247. GdipSetImageAttributesGamma
  76248. GDIPLUS.dll
  76249. TNGAMMA
  76250. GDIPSETIMAGEATTRIBUTESGAMMA
  76251. GDIPLUS
  76252. GDIPHANDLE`
  76253. GdipGetImageWidth
  76254. GdiPlus.dll
  76255. GdipGetImageHeight
  76256. GdiPlus.dll
  76257. TOIMAGE
  76258. LNWIDTH
  76259. LNHEIGHT
  76260. LNNATIVEIMAGE    
  76261. GETHANDLE
  76262. GDIPGETIMAGEWIDTH
  76263. GDIPLUS
  76264. GDIPGETIMAGEHEIGHT
  76265. DRAWIMAGERECTRECT
  76266. GdipGetImageGraphicsContext
  76267. GdiPlus.dll
  76268. GdipDrawImageRectRect
  76269. gdiplus.dll
  76270. GdipDeleteGraphics
  76271. GdiPlus.dll
  76272. TNIMAGE
  76273. DSTWIDTH    
  76274. DSTHEIGHT
  76275. SRCWIDTH    
  76276. SRCHEIGHT    
  76277. LNSCRUNIT
  76278. LHGFX    
  76279. LNSRCUNIT
  76280. GDIPGETIMAGEGRAPHICSCONTEXT
  76281. GDIPLUS
  76282. GDIPDRAWIMAGERECTRECT
  76283. GDIPHANDLE
  76284. GDIPDELETEGRAPHICS<
  76285. TNOLDCOLOR
  76286. TNNEWCOLOR
  76287. TNOLDALPHA
  76288. TNNEWALPHA    
  76289. LNARGBOLD    
  76290. LNARGBNEW
  76291. LCCOLORMAP
  76292. MAKECOLORMAP
  76293. MAKEARGB
  76294. STAT 
  76295. GDIPSETIMAGEATTRIBUTESREMAPTABLE
  76296. GDIPHANDLEa
  76297. GdipDisposeImageAttributes
  76298. GdiPlus.dll
  76299. TNIMGATTRIBUTES
  76300. GDIPDISPOSEIMAGEATTRIBUTES
  76301. GDIPLUS
  76302. GDIPHANDLE
  76303. TCCOLMATR1
  76304. TCCOLMATR2
  76305. CMRESULT
  76306. F2INT2
  76307. MAKECOLORMATRIX-
  76308. TNWIDTH
  76309. TNHEIGHT
  76310. TNCOLOR
  76311. TNALPHA
  76312. LNARGB
  76313. LNRED
  76314. LNGREEN
  76315. LNBLUE
  76316. TAINTPOINTS
  76317. LCPOINTSFSEQUENCE
  76318. LCPOINTF
  76319. POINTF
  76320. TACOLMATRIX
  76321. LCCOLORMATRIX
  76322. LCMATRIX
  76323. TACOLORMAP
  76324. LCCOLORMAP
  76325. LNARGBOLD    
  76326. LNARGBNEW
  76327. MAKEARGB
  76328. CHARACTER
  76329. GPBITMAP
  76330. \ffc\_gdiPlus.vcx
  76331. ENUMPIXELFORMAT
  76332. GPBITMAP
  76333. \ffc\_gdiPlus.vcx
  76334. GpBitmap
  76335. GPGRAPHICS
  76336. \ffc\_gdiPlus.vcx
  76337. GpGraphics
  76338. GdipDrawImageRectRect
  76339. gdiplus.dll
  76340. GdipCloneImage
  76341. GDIPlus.Dll
  76342. TCCLRMATRIX
  76343. TOBMP
  76344. TIFORMAT
  76345. TNBACKCOLOR
  76346. SETCOLORMATRIX
  76347. LNWIDTH
  76348. LNHEIGHT
  76349. IMAGEWIDTH
  76350. IMAGEHEIGHT
  76351. LONEWBMP
  76352. CREATE
  76353. LOGFX
  76354. CREATEFROMIMAGE
  76355. CLEAR    
  76356. LNSCRUNIT
  76357. LHGFX    
  76358. LNSRCUNIT
  76359. GDIPDRAWIMAGERECTRECT
  76360. GDIPLUS
  76361. STAT    
  76362. GETHANDLE
  76363. GDIPHANDLE    
  76364. SETHANDLE
  76365. DESTROY
  76366. LHCLONED
  76367. GDIPCLONEIMAGE
  76368. Generic Error
  76369. Invalid Parameter
  76370. Out Of Memory
  76371. Object Busy
  76372. Insufficient Buffer
  76373. Not Implemented
  76374. Win32 Error
  76375. Wrong State
  76376. Aborted
  76377. File Not Found
  76378. Value Overflow
  76379. Access Denied
  76380. Unknown Image Format
  76381. Font Family Not Found
  76382. Font Style Not Found
  76383. Not True Type Font
  76384. Unsupported Gdiplus Version
  76385. Gdiplus Not Initialized
  76386. Property Not Found
  76387. Property Not Supported
  76388. Unknown Error
  76389. TNSTATUSI
  76390. CHARACTER
  76391. GPBITMAP
  76392. \ffc\_gdiPlus.vcx
  76393. ENUMPIXELFORMAT
  76394. GPBITMAP
  76395. \ffc\_gdiPlus.vcx
  76396. GpBitmap
  76397. GPGRAPHICS
  76398. \ffc\_gdiPlus.vcx
  76399. GpGraphics
  76400. GPBITMAP
  76401. \ffc\_gdiPlus.vcx
  76402. GPGRAPHICS
  76403. \ffc\_gdiPlus.vcx
  76404. GpBitmap
  76405. GdipCloneImage
  76406. GDIPlus.Dll
  76407. GpGraphics
  76408. GdipDrawImageRectRect
  76409. gdiplus.dll
  76410. TCCLRMATRIX
  76411. TOBMP
  76412. TIFORMAT
  76413. SETCOLORMATRIX
  76414. LNWIDTH
  76415. LNHEIGHT
  76416. IMAGEWIDTH
  76417. IMAGEHEIGHT
  76418. LONEWBMP
  76419. CREATE
  76420. LOGFX
  76421. CREATEFROMIMAGE
  76422. LOCLONEDBMP
  76423. LHCLONED
  76424. GDIPCLONEIMAGE
  76425. GDIPLUS
  76426. STAT    
  76427. GETHANDLE    
  76428. SETHANDLE
  76429. CLEAR    
  76430. LNSCRUNIT
  76431. LHGFX    
  76432. LNSRCUNIT
  76433. GDIPDRAWIMAGERECTRECT
  76434. GDIPHANDLE
  76435. CHARACTER
  76436. GPBITMAP
  76437. \ffc\_gdiPlus.vcx
  76438. ENUMPIXELFORMAT
  76439. GPBITMAP
  76440. \ffc\_gdiPlus.vcx
  76441. GPGRAPHICS
  76442. \ffc\_gdiPlus.vcx
  76443. GpBitmap
  76444. GdipCloneImage
  76445. GDIPlus.Dll
  76446. GpGraphics
  76447. GdipDrawImageRectRect
  76448. gdiplus.dll
  76449. TCCLRMATRIX
  76450. TOBMP
  76451. TIFORMAT
  76452. SETCOLORMATRIX
  76453. LOCLONEDBMP
  76454. LOGFX
  76455. LHCLONED
  76456. GDIPCLONEIMAGE
  76457. GDIPLUS
  76458. STAT    
  76459. GETHANDLE    
  76460. SETHANDLE
  76461. CREATEFROMIMAGE
  76462. CLEAR
  76463. LNWIDTH
  76464. LNHEIGHT
  76465. IMAGEWIDTH
  76466. IMAGEHEIGHT    
  76467. LNSCRUNIT
  76468. LHGFX    
  76469. LNSRCUNIT
  76470. GDIPDRAWIMAGERECTRECT
  76471. GDIPHANDLE
  76472. Init,
  76473. GetHandle
  76474. stat_Assign
  76475. Destroy^
  76476. SetColorMatrix
  76477. SetGamma
  76478. ApplyImageAttributeU
  76479. DrawImageRectRectC
  76480. RemapTable
  76481. DisposeImageAttributes
  76482. MultiplyColorMatrix:
  76483. POINTF8
  76484. RECTFo
  76485. MAKEARGB
  76486. MakePointsFSequence
  76487. MakeColorMatrix
  76488. ColorMatrix
  76489. MakeColorMap
  76490. ApplyColorMatrix
  76491. ErrorInfo
  76492. __ApplyColorMatrix
  76493. ApplyColorMatrix_Orig@"
  76494. f2int2
  76495. GDIPHANDLE
  76496. GPATTRIB
  76497. CUSTOM
  76498. zsog^rjarjarjarjarjarjarjarjarjarjaog^
  76499. wnzri
  76500. :|zye^We^We^We^We^We^We^We^W|zy
  76501. TCPRINTERNAME
  76502. TNORIENTATION
  76503. DECLARE
  76504. GETDEFAULTPRINTERNAME
  76505. HPRINTERDC
  76506. GETPRINTERDC
  76507. NUMBER
  76508. PCHAR
  76509. OpenPrinter() failed: C
  76510. Error
  76511. PCharCC
  76512. winspool
  76513. CreateDC() failed: C
  76514. Error
  76515. TCPRINTERNAME
  76516. NORIENTATION
  76517. HPRINTER
  76518. NERRORCODE
  76519. ODEVMODE
  76520. NDEVMODESIZE
  76521. HPRINTERDC
  76522. OPENPRINTER
  76523. GETLASTERROR
  76524. DOCUMENTPROPERTIES
  76525. GETADDR
  76526. CLOSEPRINTER
  76527. SETPAGEORIENTATION
  76528. CREATEDC
  76529. PCHAR
  76530. NUMBER
  76531. ODEVMODE
  76532. NORIENTATION
  76533. CDEVMODE
  76534. DMFLAGS
  76535. GETVALUE
  76536. BUF2WORD
  76537. SETVALUEt
  76538. CPRINTER
  76539. NBUFSIZE
  76540. GETDEFAULTPRINTERv
  76541. ClosePrinter
  76542. winspool.drv
  76543. GetLastError
  76544. kernel32
  76545. DeleteDC
  76546. gdi32
  76547. StartPage
  76548. gdi32
  76549. EndPage
  76550. gdi32
  76551. EndDoc
  76552. gdi32
  76553. StartDoc
  76554. gdi32
  76555. GetDefaultPrinter
  76556. winspool.drv
  76557. OpenPrinter
  76558. winspool.drv
  76559. DocumentProperties
  76560. winspool.drv
  76561. CreateDC
  76562. gdi32
  76563. CLOSEPRINTER
  76564. WINSPOOL
  76565. GETLASTERROR
  76566. KERNEL32
  76567. DELETEDC
  76568. GDI32    
  76569. STARTPAGE
  76570. ENDPAGE
  76571. ENDDOC
  76572. STARTDOC
  76573. GETDEFAULTPRINTER
  76574. OPENPRINTER
  76575. DOCUMENTPROPERTIES
  76576. CREATEDC+
  76577. LCSTRING
  76578. SETVALUE
  76579. RELEASESTRING
  76580. RtlMoveMemory
  76581. kernel32Q
  76582. MemToStr
  76583. LNSIZE
  76584. LCBUFFER
  76585. GETALLOCSIZE
  76586. RTLMOVEMEMORY
  76587. KERNEL32
  76588. MEMTOSTRG
  76589. GlobalSize
  76590. kernel32
  76591. GLOBALSIZE
  76592. KERNEL32
  76593. GlobalAlloc
  76594. kernel32
  76595. RtlMoveMemory
  76596. kernel32Q
  76597. StrToMem
  76598. LCSTRING
  76599. RELEASESTRING
  76600. GLOBALALLOC
  76601. KERNEL32
  76602. RTLMOVEMEMORY
  76603. STRTOMEM
  76604. LNSIZE
  76605. HMEMZ
  76606. GlobalFree
  76607. kernel32
  76608. GLOBALFREE
  76609. KERNEL32#
  76610. LCBUFFER
  76611. GetPrinterDCK
  76612. SetPageOrientation
  76613. GetDefaultPrinterName
  76614. declare
  76615. Destroy)
  76616. GetAddrO
  76617. GetValuen
  76618. GetAllocSize`    
  76619. SetValue
  76620. ReleaseString
  76621. buf2word
  76622. PChar
  76623. Session
  76624. pr_pdfx.vcx
  76625. pr_pdfx.vct
  76626. pr_rtflistener.vcx
  76627. pr_rtflistener.vct
  76628. foxypreviewer.prg
  76629. c:\users\cesi\appdata\local\temp\
  76630. foxypreviewer.fxp
  76631. images\
  76632. pr_top.bmp
  76633. pr_previous.bmp
  76634. pr_next.bmp
  76635. pr_bottom.bmp
  76636. pr_gotopage.bmp
  76637. pr_close.bmp
  76638. pr_print.bmp
  76639. pr_printpref.bmp
  76640. pr_save.bmp
  76641. pr_img.bmp
  76642. pr_pdf.bmp
  76643. pr_html.bmp
  76644. pr_word.bmp
  76645. pr_locate.bmp
  76646. pr_close2.bmp
  76647. libhpdf.dll
  76648. wwrite.ico
  76649. pr_mail.bmp
  76650. pr_excellistener.vcx
  76651. pr_excellistener.vct
  76652. pr_excel.bmp
  76653. _frxcursor.vcx
  76654. _frxcursor.vct
  76655. pr_top_32.bmp
  76656. pr_previous_32.bmp
  76657. pr_next_32.bmp
  76658. pr_bottom_32.bmp
  76659. pr_gotopage_32.bmp
  76660. pr_close_32.bmp
  76661. pr_print_32.bmp
  76662. pr_save_32.bmp
  76663. pr_locate_32.bmp
  76664. foxypreviewer_locs.dbf
  76665. pr_1page_32.bmp
  76666. pr_2page_32.bmp
  76667. pr_4page_32.bmp
  76668. pr_close2_32.bmp
  76669. pr_mail_32.bmp
  76670. pr_printpref_32.bmp
  76671. pr_4page.bmp
  76672. pr_1page.bmp
  76673. pr_2page.bmp
  76674. foxypreviewer_defaultsettings.dbf
  76675. pr_settings.scx
  76676. pr_settings.sct
  76677. pr_gear.bmp
  76678. pr_gear_32.bmp
  76679. pr_sendmail.scx
  76680. pr_sendmail.sct
  76681. pr_attach.bmp
  76682. _gdiplus.vcx
  76683. _gdiplus.vct
  76684. pr_search.scx
  76685. pr_search.sct
  76686. pr_search.bmp
  76687. pr_search_32.bmp
  76688. pr_searchagain.bmp
  76689. pr_searchagain_32.bmp
  76690. pr_searchback.bmp
  76691. pr_searchback_32.bmp
  76692. pr_ctl32_progressbar.vcx
  76693. pr_ctl32_progressbar.vct
  76694. pr_cpzero.prg
  76695. pr_cpzero.fxp
  76696. pr_foxyhelper.vcx
  76697. pr_foxyhelper.vct
  76698. pr_reportlistener.vcx
  76699. pr_reportlistener.vct
  76700. pr_sendmail2.scx
  76701. pr_sendmail2.sct
  76702. pr_htmledit.vcx
  76703. pr_htmledit.vct
  76704. pr_adress.bmp
  76705. pr_sendmessage.bmp
  76706. pr_align_left.bmp
  76707. pr_align_center.bmp
  76708. pr_align_right.bmp
  76709. pr_textcolor.bmp
  76710. pr_fontback.bmp
  76711. pr_textmoveright.bmp
  76712. pr_textmoveleft.bmp
  76713. pr_listdot.bmp
  76714. pr_listnumber.bmp
  76715. pr_undo.bmp
  76716. pr_hyperlink.bmp
  76717. pr_getimage.bmp
  76718. pr_redo.bmp
  76719. pr_cut.bmp
  76720. pr_copy.bmp
  76721. pr_paste.bmp
  76722. pr_new.bmp
  76723. pr_open.bmp
  76724. pr_clean.bmp
  76725. pr_align_justify.bmp
  76726. pr_adressbook.scx
  76727. pr_adressbook.sct
  76728. pr_mail03.ico
  76729. pr_rcsgridsort.vcx
  76730. pr_rcsgridsort.vct
  76731. pr_sortascending.bmp
  76732. pr_sortdescending.bmp
  76733. pr_htmllistener2.vcx
  76734. pr_htmllistener2.vct
  76735. pr_ooxml2xls.prg
  76736. pr_ooxml2xls.fxp
  76737. __readme.txt
  76738. pr_mht.bmp
  76739. _reportoutputconfig.dbf
  76740. _reportoutputconfig.fpt
  76741. _reportoutputconfig.cdx
  76742. frxcontrols.vcx
  76743. frxcontrols.vct
  76744. frxpreview.vcx
  76745. frxpreview.vct
  76746. pr_frxpreview.prg
  76747. pr_frxpreview.fxp
  76748. frxcommon.prg
  76749. frxcommon.fxp
  76750. grabber.gif
  76751. prefirst.bmp
  76752. preprev.bmp
  76753. prenext.bmp
  76754. prelast.bmp
  76755. preclose.bmp
  76756. print.msk
  76757. preview.bmp
  76758. pr_gdiplushelper.prg
  76759. pr_gdiplushelper.fxp
  76760. pr_fax.bmp
  76761. getprinterdc1.prg
  76762. getprinterdc1.fxp
  76763. gotopage.msk
  76764. 1page.msk
  76765. 2page.msk
  76766. 4page.msk
  76767. preclose.msk
  76768.